3
* Simple GtkGLExt example using libglade.
5
* written by Naofumi Yasufuku <naofumi@users.sourceforge.net>
10
#include <glade/glade.h>
13
#define WIN32_LEAN_AND_MEAN 1
21
on_window1_delete_event (GtkWidget *widget,
31
on_drawingarea1_realize (GtkWidget *widget,
34
GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
35
GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);
38
static GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0};
39
static GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};
41
/*** OpenGL BEGIN ***/
42
if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
45
qobj = gluNewQuadric ();
46
gluQuadricDrawStyle (qobj, GLU_FILL);
47
glNewList (1, GL_COMPILE);
48
gluSphere (qobj, 1.0, 20, 20);
51
glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse);
52
glLightfv (GL_LIGHT0, GL_POSITION, light_position);
53
glEnable (GL_LIGHTING);
55
glEnable (GL_DEPTH_TEST);
57
glClearColor (1.0, 1.0, 1.0, 1.0);
61
widget->allocation.width, widget->allocation.height);
63
glMatrixMode (GL_PROJECTION);
65
gluPerspective (40.0, 1.0, 1.0, 10.0);
67
glMatrixMode (GL_MODELVIEW);
69
gluLookAt (0.0, 0.0, 3.0,
72
glTranslatef (0.0, 0.0, -3.0);
74
gdk_gl_drawable_gl_end (gldrawable);
79
on_drawingarea1_configure_event (GtkWidget *widget,
80
GdkEventConfigure *event,
83
GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
84
GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);
86
/*** OpenGL BEGIN ***/
87
if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
91
widget->allocation.width, widget->allocation.height);
93
gdk_gl_drawable_gl_end (gldrawable);
100
on_drawingarea1_expose_event (GtkWidget *widget,
101
GdkEventExpose *event,
104
GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
105
GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);
107
/*** OpenGL BEGIN ***/
108
if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
111
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
115
if (gdk_gl_drawable_is_double_buffered (gldrawable))
116
gdk_gl_drawable_swap_buffers (gldrawable);
120
gdk_gl_drawable_gl_end (gldrawable);
127
on_button1_clicked (GtkButton *button,
137
GdkGLConfig *glconfig;
140
GtkWidget *drawingarea;
143
* Init GTK+ and GtkGLExt.
146
gtk_init (&argc, &argv);
147
gtk_gl_init (&argc, &argv);
150
* Configure OpenGL-capable visual.
153
/* Try double-buffered visual */
154
glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB |
157
if (glconfig == NULL)
159
g_print ("*** Cannot find the double-buffered visual.\n");
160
g_print ("*** Trying single-buffered visual.\n");
162
/* Try single-buffered visual */
163
glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB |
165
if (glconfig == NULL)
167
g_print ("*** No appropriate OpenGL-capable visual found.\n");
173
* Load the interface.
176
xml = glade_xml_new ("simple.glade", NULL, NULL);
179
* Connect the signals in the interface.
182
glade_xml_signal_autoconnect (xml);
188
window = glade_xml_get_widget (xml, "window1");
190
gtk_container_set_reallocate_redraws (GTK_CONTAINER (window), TRUE);
196
drawingarea = glade_xml_get_widget (xml, "drawingarea1");
198
/* Add OpenGL-capability to drawingarea1. */
199
gtk_widget_set_gl_capability (drawingarea,
206
* Show top-level window, then run.
209
gtk_widget_show (window);