From 7cde9672c505332bcca7b47d94acfdf28c7729fe Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Mon, 9 Nov 2009 10:09:03 +0000 Subject: [PATCH] Miscellaneous updates Formatting, renaming, minor bug fixes, etc --- src/gis-opengl.c | 24 ++++++++++-------------- src/gis-opengl.h | 15 +++++++-------- src/gis-plugin.c | 7 +++++-- src/gis_test.c | 5 +++-- src/roam.c | 43 ++++++++++++++++++++++++------------------- src/wms_test.c | 3 ++- 6 files changed, 51 insertions(+), 46 deletions(-) diff --git a/src/gis-opengl.c b/src/gis-opengl.c index f0ac518..9e24969 100644 --- a/src/gis-opengl.c +++ b/src/gis-opengl.c @@ -34,7 +34,7 @@ #define FOV_DIST 2000.0 #define MPPX(dist) (4*dist/FOV_DIST) -//#define ROAM_DEBUG +// #define ROAM_DEBUG /************* * ROAM Code * @@ -124,12 +124,13 @@ static void set_visuals(GisOpenGL *self) *************/ static void on_realize(GisOpenGL *self, gpointer _) { + g_debug("GisOpenGL: on_realize"); set_visuals(self); roam_sphere_update_errors(self->sphere); } static gboolean on_configure(GisOpenGL *self, GdkEventConfigure *event, gpointer _) { - g_debug("GisOpenGL: on_confiure"); + g_debug("GisOpenGL: on_configure"); gis_opengl_begin(self); double width = GTK_WIDGET(self)->allocation.width; @@ -211,10 +212,10 @@ static gboolean on_key_press(GisOpenGL *self, GdkEventKey *event, gpointer _) else if (kv == GDK_Right || kv == GDK_l) gis_view_pan(self->view, 0, pan, 0); else if (kv == GDK_minus || kv == GDK_o) gis_view_zoom(self->view, 10./9); else if (kv == GDK_plus || kv == GDK_i) gis_view_zoom(self->view, 9./10); - else if (kv == GDK_H) gis_view_rotate(self->view, 0, 0, -10); - else if (kv == GDK_J) gis_view_rotate(self->view, 10, 0, 0); - else if (kv == GDK_K) gis_view_rotate(self->view, -10, 0, 0); - else if (kv == GDK_L) gis_view_rotate(self->view, 0, 0, 10); + else if (kv == GDK_H) gis_view_rotate(self->view, 0, 0, -2); + else if (kv == GDK_J) gis_view_rotate(self->view, 2, 0, 0); + else if (kv == GDK_K) gis_view_rotate(self->view, -2, 0, 0); + else if (kv == GDK_L) gis_view_rotate(self->view, 0, 0, 2); /* Testing */ #ifdef ROAM_DEBUG @@ -231,6 +232,7 @@ static gboolean on_key_press(GisOpenGL *self, GdkEventKey *event, gpointer _) static void on_view_changed(GisView *view, gdouble _1, gdouble _2, gdouble _3, GisOpenGL *self) { + g_debug("GisOpenGL: on_view_changed"); gis_opengl_begin(self); set_visuals(self); #ifndef ROAM_DEBUG @@ -242,6 +244,7 @@ static void on_view_changed(GisView *view, static gboolean on_idle(GisOpenGL *self) { + //g_debug("GisOpenGL: on_idle"); gis_opengl_begin(self); if (roam_sphere_split_merge(self->sphere)) gis_opengl_redraw(self); @@ -266,7 +269,6 @@ GisOpenGL *gis_opengl_new(GisWorld *world, GisView *view, GisPlugins *plugins) g_signal_connect(self->view, "location-changed", G_CALLBACK(on_view_changed), self); g_signal_connect(self->view, "rotation-changed", G_CALLBACK(on_view_changed), self); - /* TODO: update point eights sometime later so we have heigh-res heights for them */ self->sphere = roam_sphere_new(self); return g_object_ref(self); @@ -274,7 +276,6 @@ GisOpenGL *gis_opengl_new(GisWorld *world, GisView *view, GisPlugins *plugins) void gis_opengl_center_position(GisOpenGL *self, gdouble lat, gdouble lon, gdouble elev) { - set_camera(self); glRotatef(lon, 0, 1, 0); glRotatef(-lat, 1, 0, 0); glTranslatef(0, 0, elev2rad(elev)); @@ -282,7 +283,7 @@ void gis_opengl_center_position(GisOpenGL *self, gdouble lat, gdouble lon, gdoub void gis_opengl_redraw(GisOpenGL *self) { - g_debug("GisOpenGL: gl_redraw"); + g_debug("GisOpenGL: redraw"); gtk_widget_queue_draw(GTK_WIDGET(self)); } void gis_opengl_begin(GisOpenGL *self) @@ -320,9 +321,6 @@ G_DEFINE_TYPE(GisOpenGL, gis_opengl, GTK_TYPE_DRAWING_AREA); static void gis_opengl_init(GisOpenGL *self) { g_debug("GisOpenGL: init"); - self->bmng = wms_info_new_for_bmng(NULL, NULL); - self->srtm = wms_info_new_for_srtm(NULL, NULL); - /* OpenGL setup */ GdkGLConfig *glconfig = gdk_gl_config_new_by_mode( GDK_GL_MODE_RGBA | GDK_GL_MODE_DEPTH | @@ -386,8 +384,6 @@ static void gis_opengl_finalize(GObject *_self) { g_debug("GisOpenGL: finalize"); GisOpenGL *self = GIS_OPENGL(_self); - wms_info_free(self->bmng); - wms_info_free(self->srtm); G_OBJECT_CLASS(gis_opengl_parent_class)->finalize(_self); } static void gis_opengl_class_init(GisOpenGLClass *klass) diff --git a/src/gis-opengl.h b/src/gis-opengl.h index 069456f..2c88d6b 100644 --- a/src/gis-opengl.h +++ b/src/gis-opengl.h @@ -47,14 +47,12 @@ struct _GisOpenGL { GisView *view; GisPlugins *plugins; RoamSphere *sphere; - WmsInfo *bmng; - WmsInfo *srtm; guint sm_source; }; struct _GisOpenGLClass { GtkDrawingAreaClass parent_class; - + /* class members */ }; @@ -63,12 +61,13 @@ GType gis_opengl_get_type(void); /* Methods */ GisOpenGL *gis_opengl_new(GisWorld *world, GisView *view, GisPlugins *plugins); -void gis_opengl_center_position(GisOpenGL *gis, gdouble lat, gdouble lon, gdouble elev); +void gis_opengl_center_position(GisOpenGL *opengl, + gdouble lat, gdouble lon, gdouble elev); -void gis_opengl_redraw(GisOpenGL *gis); +void gis_opengl_redraw(GisOpenGL *opengl); -void gis_opengl_begin(GisOpenGL *gis); -void gis_opengl_end(GisOpenGL *gis); -void gis_opengl_flush(GisOpenGL *gis); +void gis_opengl_begin(GisOpenGL *opengl); +void gis_opengl_end(GisOpenGL *opengl); +void gis_opengl_flush(GisOpenGL *opengl); #endif diff --git a/src/gis-plugin.c b/src/gis-plugin.c index 2ba5ca6..b0619f9 100644 --- a/src/gis-plugin.c +++ b/src/gis-plugin.c @@ -122,10 +122,13 @@ GisPlugin *gis_plugins_load(GisPlugins *self, const char *name, { g_debug("GisPlugins: load %s", name); gchar *path = g_strdup_printf("%s/%s.%s", self->dir, name, G_MODULE_SUFFIX); - if (!g_file_test(path, G_FILE_TEST_EXISTS)) + if (!g_file_test(path, G_FILE_TEST_EXISTS)) { + g_free(path); path = g_strdup_printf("%s/%s.%s", PLUGINSDIR, name, G_MODULE_SUFFIX); + } if (!g_file_test(path, G_FILE_TEST_EXISTS)) { g_warning("Module %s not found", name); + g_free(path); return NULL; } GModule *module = g_module_open(path, 0); @@ -147,7 +150,7 @@ GisPlugin *gis_plugins_load(GisPlugins *self, const char *name, g_free(constructor_str); GisPluginConstructor constructor = constructor_ptr; - GisPluginStore *store = g_malloc(sizeof(GisPluginStore)); + GisPluginStore *store = g_new0(GisPluginStore, 1); store->name = g_strdup(name); store->plugin = constructor(world, view, opengl, prefs); g_ptr_array_add(self->plugins, store); diff --git a/src/gis_test.c b/src/gis_test.c index 054373e..9d9fe9a 100644 --- a/src/gis_test.c +++ b/src/gis_test.c @@ -26,7 +26,7 @@ *************/ static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer _) { - g_debug("gis: on_key_press - key=%x, state=%x", + g_debug("GisTest: on_key_press - key=%x, state=%x", event->keyval, event->state); switch (event->keyval) { case GDK_q: @@ -41,8 +41,9 @@ static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer _) ***********/ int main(int argc, char **argv) { - gtk_init(&argc, &argv); g_thread_init(NULL); + gdk_threads_init(); + gtk_init(&argc, &argv); GisPrefs *prefs = gis_prefs_new(NULL, NULL); GisPlugins *plugins = gis_plugins_new(NULL); diff --git a/src/roam.c b/src/roam.c index 4f3bc1d..d25bd3d 100644 --- a/src/roam.c +++ b/src/roam.c @@ -22,8 +22,11 @@ #include #include +#include "gis-world.h" + #include "roam.h" + /** * TODO: * - Optimize for memory consumption @@ -61,7 +64,7 @@ static gint dia_cmp(RoamDiamond *a, RoamDiamond *b, gpointer data) /************* * RoamPoint * *************/ -RoamPoint *roam_point_new(double x, double y, double z) +RoamPoint *roam_point_new(gdouble x, gdouble y, gdouble z) { RoamPoint *self = g_new0(RoamPoint, 1); self->x = x; @@ -104,9 +107,9 @@ void roam_point_update_height(RoamPoint *self, RoamSphere *sphere) gdouble dist = sqrt(self->x * self->x + self->y * self->y + self->z * self->z); - self->x = self->x/dist * 6371000; - self->y = self->y/dist * 6371000; - self->z = self->z/dist * 6371000; + self->x = self->x/dist * EARTH_R; + self->y = self->y/dist * EARTH_R; + self->z = self->z/dist * EARTH_R; } } void roam_point_update_projection(RoamPoint *self, RoamSphere *sphere) @@ -221,14 +224,6 @@ gboolean roam_point_visible(RoamPoint *self, RoamSphere *sphere) return self->px > view[0] && self->px < view[2] && self->py > view[1] && self->py < view[3] && self->pz > 0 && self->pz < 1; - //double x, y, z; - //int view[4] = {0,0,1,1}; - //gluProject(self->x, self->y, self->z, - // sphere->view->model, sphere->view->proj, view, - // &x, &y, &z); - //return !(x < 0 || x > 1 || - // y < 0 || y > 1 || - // z < 0 || z > 1); } gboolean roam_triangle_visible(RoamTriangle *self, RoamSphere *sphere) { @@ -282,7 +277,6 @@ void roam_triangle_split(RoamTriangle *self, RoamSphere *sphere) RoamTriangle *base = self->t.b; - /* Add new triangles */ RoamPoint *mid = self->split; RoamTriangle *sl = roam_triangle_new(self->p.m, mid, self->p.l); // Self Left @@ -501,7 +495,7 @@ RoamSphere *roam_sphere_new(gpointer user_data) } void roam_sphere_update_errors(RoamSphere *self) { - g_debug("RoamSphere: update - polys=%d", self->polys); + g_debug("RoamSphere: update_errors - polys=%d", self->polys); if (!self->view) self->view = roam_view_new(); roam_view_update(self->view); @@ -540,22 +534,32 @@ void roam_sphere_merge_one(RoamSphere *self) gint roam_sphere_split_merge(RoamSphere *self) { gint iters = 0, max_iters = 500; - gint target = 4000; + //gint target = 4000; + gint target = 2000; + //gint target = 500; if (!self->view) return 0; - if (target - self->polys > 100) + if (target - self->polys > 100) { + //g_debug("RoamSphere: split_merge - Splitting %d - %d > 100", target, self->polys); while (self->polys < target && iters++ < max_iters) roam_sphere_split_one(self); + } - if (self->polys - target > 100) + if (self->polys - target > 100) { + //g_debug("RoamSphere: split_merge - Merging %d - %d > 100", self->polys, target); while (self->polys > target && iters++ < max_iters) roam_sphere_merge_one(self); + } while (((RoamTriangle*)g_pqueue_peek(self->triangles))->error > ((RoamDiamond *)g_pqueue_peek(self->diamonds ))->error && iters++ < max_iters) { + //g_debug("RoamSphere: split_merge - Fixing 1 %f > %f && %d < %d", + // ((RoamTriangle*)g_pqueue_peek(self->triangles))->error, + // ((RoamDiamond *)g_pqueue_peek(self->diamonds ))->error, + // iters-1, max_iters); roam_sphere_merge_one(self); roam_sphere_split_one(self); } @@ -564,12 +568,12 @@ gint roam_sphere_split_merge(RoamSphere *self) } void roam_sphere_draw(RoamSphere *self) { - g_message("RoamSphere: draw"); + g_debug("RoamSphere: draw"); g_pqueue_foreach(self->triangles, (GFunc)roam_triangle_draw, NULL); } void roam_sphere_draw_normals(RoamSphere *self) { - g_message("RoamSphere: draw_normal"); + g_debug("RoamSphere: draw_normal"); g_pqueue_foreach(self->triangles, (GFunc)roam_triangle_draw_normal, NULL); } void roam_sphere_free_tri(RoamTriangle *tri) @@ -588,5 +592,6 @@ void roam_sphere_free(RoamSphere *self) g_pqueue_foreach(self->triangles, (GFunc)roam_sphere_free_tri, NULL); g_pqueue_free(self->triangles); g_pqueue_free(self->diamonds); + g_free(self->view); g_free(self); } diff --git a/src/wms_test.c b/src/wms_test.c index 2eb4500..59868e5 100644 --- a/src/wms_test.c +++ b/src/wms_test.c @@ -42,8 +42,9 @@ gboolean key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data) int main(int argc, char **argv) { - gtk_init(&argc, &argv); g_thread_init(NULL); + gdk_threads_init(); + gtk_init(&argc, &argv); GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget *vbox1 = gtk_vbox_new(FALSE, 0); -- 2.43.2