factor/extra/gtk-samples/opengl/opengl.factor

81 lines
2.1 KiB
Factor

! Copyright (C) 2010 Anton Gorenko.
! See http://factorcode.org/license.txt for BSD license.
USING: alien.strings gdk.gl.ffi gobject.ffi gtk.ffi gtk.gl.ffi
io.encodings.utf8 kernel locals opengl.gl ;
IN: gtk-samples.opengl
! This sample is based on
! http://code.valaide.org/content/simple-opengl-sample-using-gtkglext
:: on-configure ( sender event user-data -- result )
sender gtk_widget_get_gl_context :> gl-context
sender gtk_widget_get_gl_window :> gl-drawable
gl-drawable gl-context gdk_gl_drawable_gl_begin dup
[
0 0 200 200 glViewport
gl-drawable gdk_gl_drawable_gl_end
] when ;
:: on-expose ( sender event user-data -- result )
sender gtk_widget_get_gl_context :> gl-context
sender gtk_widget_get_gl_window :> gl-drawable
gl-drawable gl-context gdk_gl_drawable_gl_begin dup
[
GL_COLOR_BUFFER_BIT glClear
GL_TRIANGLES glBegin
1.0 0.0 0.0 glColor3f
0 1 glVertex2i
0.0 1.0 0.0 glColor3f
-1 -1 glVertex2i
0.0 0.0 1.0 glColor3f
1 -1 glVertex2i
glEnd
gl-drawable gdk_gl_drawable_is_double_buffered 1 =
[ gl-drawable gdk_gl_drawable_swap_buffers ]
[ glFlush ] if
gl-drawable gdk_gl_drawable_gl_end
] when ;
:: opengl-win ( -- window )
GTK_WINDOW_TOPLEVEL gtk_window_new :> window
window
[ "OpenGL" utf8 string>alien gtk_window_set_title ]
[ 200 200 gtk_window_set_default_size ]
[ GTK_WIN_POS_CENTER gtk_window_set_position ] tri
GDK_GL_MODE_RGBA gdk_gl_config_new_by_mode :> gl-config
window gl-config f t GDK_GL_RGBA_TYPE
gtk_widget_set_gl_capability drop
window "configure-event" utf8 string>alien
[ on-configure ] GtkWidget:configure-event f
g_signal_connect drop
window "expose-event" utf8 string>alien
[ on-expose ] GtkWidget:expose-event f
g_signal_connect drop
window ;
:: opengl-main ( -- )
f f gtk_init
f f gtk_gl_init
opengl-win :> window
window "destroy" utf8 string>alien
[ 2drop gtk_main_quit ] GtkObject:destroy
f f 0 g_signal_connect_data drop
window gtk_widget_show_all
gtk_main ;
MAIN: opengl-main