]> gitweb.factorcode.org Git - factor.git/blob - extra/gpu/gpu.factor
Update some copyright headers to follow the current convention
[factor.git] / extra / gpu / gpu.factor
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 ;
4 IN: gpu
5
6 TUPLE: gpu-object < identity-tuple handle ;
7
8 <PRIVATE
9
10 VARIANT: gpu-api
11     opengl-2 opengl-3 ;
12
13 SYMBOL: has-vertex-array-objects?
14
15 : set-gpu-api ( -- )
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 ;
20
21 HOOK: init-gpu-api gpu-api ( -- )
22
23 M: opengl-2 init-gpu-api
24     GL_POINT_SPRITE glEnable ;
25 M: opengl-3 init-gpu-api
26     ;
27
28 PRIVATE>
29
30 : init-gpu ( -- )
31     set-gpu-api
32     init-gpu-api ;
33
34 : reset-gpu ( -- )
35     "3.0" { { "GL_APPLE_vertex_array_object" "GL_ARB_vertex_array_object" } }
36     has-gl-version-or-extensions?
37     [ 0 glBindVertexArray ] when
38
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
44     ] when
45
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
50     ] when
51
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
56     ] when
57
58     "2.0" { "GL_ARB_shader_objects" }
59     has-gl-version-or-extensions?
60     [ 0 glUseProgram ] when ;
61
62 : flush-gpu ( -- )
63     glFlush ;
64
65 : finish-gpu ( -- )
66     glFinish ;