4 #include <gdk/gdkkeysyms.h>
20 static float ang = 30.;
22 gboolean expose (GtkWidget *da, GdkEventExpose *event, gpointer user_data)
24 GdkGLContext *glcontext = gtk_widget_get_gl_context (da);
25 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (da);
27 // g_print (" :: expose\n");
29 if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
31 g_assert_not_reached ();
35 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
38 glRotatef (ang, 1, 0, 1);
40 glShadeModel(GL_FLAT);
43 glColor3f (1., 0., 0.);
44 glVertex3f (0., 0., 0.);
45 glVertex3f (1., 0., 0.);
49 glColor3f (0., 1., 0.);
50 glVertex3f (0., 0., 0.);
51 glVertex3f (0., 1., 0.);
55 glColor3f (0., 0., 1.);
56 glVertex3f (0., 0., 0.);
57 glVertex3f (0., 0., 1.);
61 glColor3f (1., 1., 1.);
101 if (gdk_gl_drawable_is_double_buffered (gldrawable))
102 gdk_gl_drawable_swap_buffers (gldrawable);
107 gdk_gl_drawable_gl_end (gldrawable);
112 gboolean configure(GtkWidget *da, GdkEventConfigure *event, gpointer user_data)
114 GdkGLContext *glcontext = gtk_widget_get_gl_context (da);
115 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (da);
117 if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
119 g_assert_not_reached ();
123 glViewport (0, 0, da->allocation.width, da->allocation.height);
124 glOrtho (-10,10,-10,10,-20050,10000);
126 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
128 glScalef (10., 10., 10.);
130 gdk_gl_drawable_gl_end (gldrawable);
135 gboolean rotate (gpointer user_data)
137 GtkWidget *da = GTK_WIDGET (user_data);
141 gdk_window_invalidate_rect (da->window, &da->allocation, FALSE);
142 gdk_window_process_updates (da->window, FALSE);
147 gboolean cube_init(GtkDrawingArea *drawing)
149 g_signal_connect(drawing, "configure-event", G_CALLBACK(configure), NULL);
150 g_signal_connect(drawing, "expose-event", G_CALLBACK(expose), NULL);
151 g_timeout_add(1000/60, rotate, drawing);