]> Pileus Git - grits/blobdiff - src/grits-opengl.c
Init earlier on
[grits] / src / grits-opengl.c
index 794d776f660a6471f08c273c7fb926d7ce5ba9fd..fef05a77bed6688d1cb044c127eb61c8163219d0 100644 (file)
@@ -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);