#include "grits-util.h"
#include "roam.h"
+static GdkGLConfig *glconfig;
+
// #define ROAM_DEBUG
/* Tessellation, "finding intersecting triangles" */
}
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");
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);