/*** *** The "realize" signal handler. All the OpenGL initialization *** should be performed here, such as default background colour, *** certain states etc. ***/ static void realize (GtkWidget *widget, gpointer data) { void (APIENTRY *PolygonOffset)(GLfloat, GLfloat) = NULL; /*** OpenGL BEGIN ***/ if (!gtk_widget_begin_gl (widget)) return; /* glPolygonOffsetEXT */ PolygonOffset = (void (APIENTRY *)(GLfloat, GLfloat))gdk_gl_get_proc_address ("glPolygonOffsetEXT"); if (PolygonOffset == NULL) { /* glPolygonOffset */ PolygonOffset = (void (APIENTRY *)(GLfloat, GLfloat))gdk_gl_get_proc_address ("glPolygonOffset"); if (PolygonOffset == NULL) { g_print ("Sorry, glPolygonOffset() is not supported by this renderer.\n"); exit (1); } } glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL); glClearColor (0.0, 0.0, 0.0, 0.0); PolygonOffset (1.0, 1.0); glEnable (GL_CULL_FACE); glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glHint (GL_POLYGON_SMOOTH_HINT, GL_NICEST); glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glEnable (GL_COLOR_MATERIAL); glColorMaterial (GL_FRONT, GL_DIFFUSE); glLightfv (GL_LIGHT0, GL_POSITION, lightPosition); glEnable (GL_LIGHT0); glShadeModel (GL_FLAT); glDisable (GL_LIGHTING); resetWireframe (); gtk_widget_end_gl (widget, FALSE); /*** OpenGL END ***/ return; }
PolygonOffset *PolygonOffset::getOrCreate(GLfloat factor, GLfloat units) { return getOrCreateImpl(PolygonOffset(factor, units)); }