]> gitweb.factorcode.org Git - factor.git/blob - extra/gpu/gpu.factor
1d02b3f07a360e9c786d7e8fd7560a949b9905d4
[factor.git] / extra / gpu / gpu.factor
1 ! (c)2009 Joe Groff bsd license
2 USING: kernel namespaces opengl.capabilities opengl.gl variants ;
3 IN: gpu
4
5 TUPLE: gpu-object < identity-tuple handle ;
6
7 <PRIVATE
8
9 VARIANT: gpu-api
10     opengl-2 opengl-3 ;
11
12 SYMBOL: has-vertex-array-objects?
13
14 : set-gpu-api ( -- )
15     "2.0" require-gl-version
16     "3.0" { { "GL_ARB_vertex_array_object" "GL_APPLE_vertex_array_object" } }
17     has-gl-version-or-extensions? has-vertex-array-objects? set-global
18     "3.0" has-gl-version? opengl-3 opengl-2 ? gpu-api set-global ;
19
20 HOOK: init-gpu-api gpu-api ( -- )
21
22 M: opengl-2 init-gpu-api
23     GL_POINT_SPRITE glEnable ;
24 M: opengl-3 init-gpu-api
25     ;
26
27 PRIVATE>
28
29 : init-gpu ( -- )
30     set-gpu-api
31     init-gpu-api ;
32
33 : reset-gpu ( -- )
34     "3.0" { { "GL_APPLE_vertex_array_object" "GL_ARB_vertex_array_object" } }
35     has-gl-version-or-extensions?
36     [ 0 glBindVertexArray ] when
37
38     "3.0" { { "GL_EXT_framebuffer_object" "GL_ARB_framebuffer_object" } }
39     has-gl-version-or-extensions?  [
40         GL_DRAW_FRAMEBUFFER 0 glBindFramebuffer
41         GL_READ_FRAMEBUFFER 0 glBindFramebuffer
42         GL_RENDERBUFFER 0 glBindRenderbuffer
43     ] when
44
45     "1.5" { "GL_ARB_vertex_buffer_object" }
46     has-gl-version-or-extensions? [
47         GL_ARRAY_BUFFER 0 glBindBuffer
48         GL_ELEMENT_ARRAY_BUFFER 0 glBindBuffer
49     ] when
50
51     "2.1" { "GL_ARB_pixel_buffer_object" }
52     has-gl-version-or-extensions? [
53         GL_PIXEL_PACK_BUFFER 0 glBindBuffer
54         GL_PIXEL_UNPACK_BUFFER 0 glBindBuffer
55     ] when
56
57     "2.0" { "GL_ARB_shader_objects" }
58     has-gl-version-or-extensions?
59     [ 0 glUseProgram ] when ;
60
61 : flush-gpu ( -- )
62     glFlush ;
63
64 : finish-gpu ( -- )
65     glFinish ;