]> Pileus Git - grits/blobdiff - src/gis-opengl.c
Fix various win32 runtime issues
[grits] / src / gis-opengl.c
index 1b219904a0f1b0ea33295d6c5db776be8a1f1b47..866eac8c15f67e6dc7ec89a557c11ee8e645ff27 100644 (file)
@@ -85,6 +85,7 @@ static void set_visuals(GisOpenGL *self)
        gdouble rg   = MAX(0, 1-(elev/20000));
        gdouble blue = MAX(0, 1-(elev/50000));
        glClearColor(MIN(0.65,rg), MIN(0.65,rg), MIN(1,blue), 1.0f);
+       glColor4f(1, 1, 1, 1);
 
        glDisable(GL_ALPHA_TEST);
 
@@ -398,6 +399,8 @@ void gis_opengl_begin(GisOpenGL *self)
 {
        g_assert(GIS_IS_OPENGL(self));
 
+       gdk_threads_enter();
+
        GdkGLContext   *glcontext  = gtk_widget_get_gl_context(GTK_WIDGET(self));
        GdkGLDrawable  *gldrawable = gtk_widget_get_gl_drawable(GTK_WIDGET(self));
 
@@ -449,7 +452,8 @@ static void gis_opengl_init(GisOpenGL *self)
        g_object_set(self, "can-focus", TRUE, NULL);
 
 #ifndef ROAM_DEBUG
-       self->sm_source = g_timeout_add_full(G_PRIORITY_HIGH_IDLE+30, 33,  (GSourceFunc)on_idle, self, NULL);
+       self->sm_source[0] = g_timeout_add_full(G_PRIORITY_HIGH_IDLE+30, 33,  (GSourceFunc)on_idle, self, NULL);
+       self->sm_source[1] = g_timeout_add_full(G_PRIORITY_HIGH_IDLE+10, 500, (GSourceFunc)on_idle, self, NULL);
 #endif
 
        g_signal_connect(self, "realize",            G_CALLBACK(on_realize),      NULL);
@@ -471,9 +475,13 @@ static void gis_opengl_dispose(GObject *_self)
 {
        g_debug("GisOpenGL: dispose");
        GisOpenGL *self = GIS_OPENGL(_self);
-       if (self->sm_source) {
-               g_source_remove(self->sm_source);
-               self->sm_source = 0;
+       if (self->sm_source[0]) {
+               g_source_remove(self->sm_source[0]);
+               self->sm_source[0] = 0;
+       }
+       if (self->sm_source[1]) {
+               g_source_remove(self->sm_source[1]);
+               self->sm_source[1] = 0;
        }
        if (self->sphere) {
                roam_sphere_free(self->sphere);