From 5288ffd558fea028b9c13d45f63dc81e804a4e7c Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Thu, 17 Nov 2011 08:08:12 +0000 Subject: [PATCH] Init earlier on --- configure.ac | 2 +- src/grits-demo.c | 3 +++ src/grits-opengl.c | 31 ++++++++++++++++++++++++++----- src/grits-opengl.h | 3 +++ src/grits-test.c | 1 + 5 files changed, 34 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index 70aeff9..9746a91 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -m4_define([grits_release], [0.6]) +m4_define([grits_release], [0.6.1-p1]) m4_define([grits_version], [2:0:0]) m4_define([grits_subdir], [grits2]) diff --git a/src/grits-demo.c b/src/grits-demo.c index d9532f4..76aa357 100644 --- a/src/grits-demo.c +++ b/src/grits-demo.c @@ -17,6 +17,7 @@ #include #include +#include #include #include "grits.h" @@ -169,6 +170,8 @@ int main(int argc, char **argv) g_thread_init(NULL); gdk_threads_init(); gtk_init(&argc, &argv); + gtk_gl_init(&argc, &argv); + grits_init(&argc, &argv); prefs = grits_prefs_new(NULL, NULL); plugins = grits_plugins_new(g_getenv("GRITS_PLUGIN_PATH"), prefs); 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); diff --git a/src/grits-opengl.h b/src/grits-opengl.h index 0379509..1a57056 100644 --- a/src/grits-opengl.h +++ b/src/grits-opengl.h @@ -60,4 +60,7 @@ GType grits_opengl_get_type(void); /* Methods */ GritsViewer *grits_opengl_new(GritsPlugins *plugins, GritsPrefs *prefs); +/* Misc */ +void grits_init(int *argc, char ***argv); + #endif diff --git a/src/grits-test.c b/src/grits-test.c index 52e0145..28c30ae 100644 --- a/src/grits-test.c +++ b/src/grits-test.c @@ -70,6 +70,7 @@ int main(int argc, char **argv) gdk_threads_init(); gtk_init(&argc, &argv); gtk_gl_init(&argc, &argv); + grits_init(&argc, &argv); prefs = grits_prefs_new(NULL, NULL); plugins = grits_plugins_new(g_getenv("GRITS_PLUGIN_PATH"), prefs); -- 2.43.2