GtkWidget* WINAPI gtk_glwidget_new( gboolean zbuffer, GtkWidget* share ){ GtkWidget* drawing_area = gtk_drawing_area_new(); GdkGLConfig* glconfig = ( zbuffer ) ? glconfig_new_with_depth() : glconfig_new(); GdkGLContext* shared_context = ( share ) ? gtk_widget_get_gl_context( share ) : NULL; gtk_widget_set_gl_capability( drawing_area, glconfig, shared_context, TRUE, GDK_GL_RGBA_TYPE ); return drawing_area; }
gboolean glwidget_enable_gl( GtkWidget* widget, GtkWidget* widget2, gpointer data ){ if ( widget2 == 0 && !gtk_widget_is_gl_capable( widget ) ) { GdkGLConfig* glconfig = ( g_object_get_data( G_OBJECT( widget ), "zbuffer" ) ) ? glconfig_new_with_depth() : glconfig_new(); ASSERT_MESSAGE( glconfig != 0, "failed to create OpenGL config" ); gtk_widget_set_gl_capability( widget, glconfig, g_shared != 0 ? gtk_widget_get_gl_context( g_shared ) : 0, TRUE, GDK_GL_RGBA_TYPE ); gtk_widget_realize( widget ); if ( g_shared == 0 ) { g_shared = widget; } // free glconfig? } return FALSE; }