1 ! Copyright (C) 2010 Anton Gorenko.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.strings gdk.gl.ffi gobject.ffi gtk.ffi gtk.gl.ffi
4 io.encodings.utf8 kernel locals opengl.gl ;
7 ! This sample is based on
8 ! http://code.valaide.org/content/simple-opengl-sample-using-gtkglext
10 :: on-configure ( sender event user-data -- result )
11 sender gtk_widget_get_gl_context :> gl-context
12 sender gtk_widget_get_gl_window :> gl-drawable
14 gl-drawable gl-context gdk_gl_drawable_gl_begin dup
16 0 0 200 200 glViewport
17 gl-drawable gdk_gl_drawable_gl_end
20 :: on-expose ( sender event user-data -- result )
21 sender gtk_widget_get_gl_context :> gl-context
22 sender gtk_widget_get_gl_window :> gl-drawable
24 gl-drawable gl-context gdk_gl_drawable_gl_begin dup
26 GL_COLOR_BUFFER_BIT glClear
37 gl-drawable gdk_gl_drawable_is_double_buffered 1 =
38 [ gl-drawable gdk_gl_drawable_swap_buffers ]
41 gl-drawable gdk_gl_drawable_gl_end
44 :: opengl-win ( -- window )
45 GTK_WINDOW_TOPLEVEL gtk_window_new :> window
48 [ "OpenGL" utf8 string>alien gtk_window_set_title ]
49 [ 200 200 gtk_window_set_default_size ]
50 [ GTK_WIN_POS_CENTER gtk_window_set_position ] tri
52 GDK_GL_MODE_RGBA gdk_gl_config_new_by_mode :> gl-config
54 window gl-config f t GDK_GL_RGBA_TYPE
55 gtk_widget_set_gl_capability drop
57 window "configure-event" utf8 string>alien
58 [ on-configure ] GtkWidget:configure-event f
61 window "expose-event" utf8 string>alien
62 [ on-expose ] GtkWidget:expose-event f
72 window "destroy" utf8 string>alien
73 [ 2drop gtk_main_quit ] GtkObject:destroy
74 f f 0 g_signal_connect_data drop
76 window gtk_widget_show_all