X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fgrits-opengl.c;h=fef05a77bed6688d1cb044c127eb61c8163219d0;hp=794d776f660a6471f08c273c7fb926d7ce5ba9fd;hb=refs%2Fheads%2Fgtkglext;hpb=b45085a627ceb0a99418a18121e1b70d8abe32ac diff --git a/src/grits-opengl.c b/src/grits-opengl.c index 794d776..fef05a7 100644 --- a/src/grits-opengl.c +++ b/src/grits-opengl.c @@ -40,6 +40,8 @@ #include "grits-util.h" #include "roam.h" +static GdkGLConfig *glconfig; + // #define ROAM_DEBUG /* Tessellation, "finding intersecting triangles" */ @@ -527,6 +529,19 @@ static void _objects_free(gpointer value) } G_DEFINE_TYPE(GritsOpenGL, grits_opengl, GRITS_TYPE_VIEWER); +void grits_init(int *argc, char ***argv) +{ + glconfig = gdk_gl_config_new_by_mode( + GDK_GL_MODE_RGBA | GDK_GL_MODE_DEPTH | + GDK_GL_MODE_DOUBLE | GDK_GL_MODE_ALPHA); + if (!glconfig) { + g_warning("Failed to create glconfig, unsupported:%s%s%s%s.", + gdk_gl_config_new_by_mode(GDK_GL_MODE_RGBA) ? "" : " RGBA", + gdk_gl_config_new_by_mode(GDK_GL_MODE_DEPTH) ? "" : " DEPTH", + gdk_gl_config_new_by_mode(GDK_GL_MODE_DOUBLE) ? "" : " DOUBLE", + gdk_gl_config_new_by_mode(GDK_GL_MODE_ALPHA) ? "" : " ALPHA"); + } +} static void grits_opengl_init(GritsOpenGL *opengl) { g_debug("GritsOpenGL: init"); @@ -536,15 +551,21 @@ static void grits_opengl_init(GritsOpenGL *opengl) opengl->sphere_lock = g_mutex_new(); /* Set OpenGL before "realize" */ - GdkGLConfig *glconfig = gdk_gl_config_new_by_mode( - GDK_GL_MODE_RGBA | GDK_GL_MODE_DEPTH | - GDK_GL_MODE_DOUBLE | GDK_GL_MODE_ALPHA); + if (!glconfig) { + g_warning("recreating glconfig"); + glconfig = gdk_gl_config_new_by_mode( + GDK_GL_MODE_RGBA | GDK_GL_MODE_DEPTH | + GDK_GL_MODE_DOUBLE | GDK_GL_MODE_ALPHA); + } if (!glconfig) - g_error("Failed to create glconfig"); + g_error("Failed to create glconfig, unsupported:%s%s%s%s.", + gdk_gl_config_new_by_mode(GDK_GL_MODE_RGBA) ? "" : " RGBA", + gdk_gl_config_new_by_mode(GDK_GL_MODE_DEPTH) ? "" : " DEPTH", + gdk_gl_config_new_by_mode(GDK_GL_MODE_DOUBLE) ? "" : " DEPTH", + gdk_gl_config_new_by_mode(GDK_GL_MODE_ALPHA) ? "" : " ALPHA"); if (!gtk_widget_set_gl_capability(GTK_WIDGET(opengl), glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE)) g_error("GL lacks required capabilities"); - g_object_unref(glconfig); /* Finish OpenGL init after it's realized */ g_signal_connect(opengl, "realize", G_CALLBACK(on_realize), NULL);