/* * For this samples we need to change this header file (/usr/include/gtkglext-1.0/gdk/gdkglconfig.h) because will have an compilation error. * replace 'GDK_IS_GL_CONFIG' with: 'GDK_GL_IS_CONFIG' * replace 'GDK_IS_GL_CONFIG_CLASS' with: 'GDK_GL_IS_CONFIG_CLASS' * I don't know if this is a bug of gtkglext. * This code do not work with compiz-fusion enabled!!!!!! */ using GLib; using Gtk; using Gdk; using GL; public class Simple : Gtk.Window { private bool on_configure_event (Gtk.DrawingArea widget, Gdk.EventConfigure event) { Gdk.GLContext glcontext = Gtk.WidgetGL.get_gl_context (widget); Gdk.GLDrawable gldrawable = Gtk.WidgetGL.get_gl_drawable (widget); if (!gldrawable.gl_begin (glcontext)) return false; glViewport (0, 0, (GLsizei)widget.allocation.width, (GLsizei)widget.allocation.height); gldrawable.gl_end (); return true; } private bool on_expose_event (Gtk.DrawingArea widget, Gdk.EventExpose event) { Gdk.GLContext glcontext = Gtk.WidgetGL.get_gl_context (widget); Gdk.GLDrawable gldrawable = Gtk.WidgetGL.get_gl_drawable (widget); if (!gldrawable.gl_begin (glcontext)) return false; glClear (GL_COLOR_BUFFER_BIT); glBegin (GL_TRIANGLES); glIndexi (0); glColor3f (1.0f, 0.0f, 0.0f); glVertex2i (0, 1); glIndexi (0); glColor3f (0.0f, 1.0f, 0.0f); glVertex2i (-1, -1); glIndexi (0); glColor3f (0.0f, 0.0f, 1.0f); glVertex2i (1, -1); glEnd (); if (gldrawable.is_double_buffered ()) gldrawable.swap_buffers (); else glFlush (); gldrawable.gl_end (); return true; } construct { title = "simple"; set_reallocate_redraws (true); destroy += Gtk.main_quit; Gdk.GLConfig glconfig = new Gdk.GLConfig.by_mode (Gdk.GLConfigMode.RGB | Gdk.GLConfigMode.DOUBLE); DrawingArea drawing_area = new DrawingArea (); drawing_area.set_size_request (200, 200); Gtk.WidgetGL.set_gl_capability (drawing_area, glconfig, null, true, Gdk.GLRenderType.RGBA_TYPE); drawing_area.configure_event += on_configure_event; drawing_area.expose_event += on_expose_event; add (drawing_area); } public static void main (string[] args) { Gtk.init (ref args); Gtk.gl_init (ref args); var simple = new Simple (); simple.show_all (); Gtk.main (); } }