1 ! Copyright (C) 2009 Joe Groff.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel namespaces opengl.capabilities opengl.gl variants ;
6 TUPLE: gpu-object < identity-tuple handle ;
13 SYMBOL: has-vertex-array-objects?
16 "2.0" require-gl-version
17 "3.0" { { "GL_ARB_vertex_array_object" "GL_APPLE_vertex_array_object" } }
18 has-gl-version-or-extensions? has-vertex-array-objects? set-global
19 "3.0" has-gl-version? opengl-3 opengl-2 ? gpu-api set-global ;
21 HOOK: init-gpu-api gpu-api ( -- )
23 M: opengl-2 init-gpu-api
24 GL_POINT_SPRITE glEnable ;
25 M: opengl-3 init-gpu-api
35 "3.0" { { "GL_APPLE_vertex_array_object" "GL_ARB_vertex_array_object" } }
36 has-gl-version-or-extensions?
37 [ 0 glBindVertexArray ] when
39 "3.0" { { "GL_EXT_framebuffer_object" "GL_ARB_framebuffer_object" } }
40 has-gl-version-or-extensions? [
41 GL_DRAW_FRAMEBUFFER 0 glBindFramebuffer
42 GL_READ_FRAMEBUFFER 0 glBindFramebuffer
43 GL_RENDERBUFFER 0 glBindRenderbuffer
46 "1.5" { "GL_ARB_vertex_buffer_object" }
47 has-gl-version-or-extensions? [
48 GL_ARRAY_BUFFER 0 glBindBuffer
49 GL_ELEMENT_ARRAY_BUFFER 0 glBindBuffer
52 "2.1" { "GL_ARB_pixel_buffer_object" }
53 has-gl-version-or-extensions? [
54 GL_PIXEL_PACK_BUFFER 0 glBindBuffer
55 GL_PIXEL_UNPACK_BUFFER 0 glBindBuffer
58 "2.0" { "GL_ARB_shader_objects" }
59 has-gl-version-or-extensions?
60 [ 0 glUseProgram ] when ;