ruby-opengl 0.40.1 → 0.50.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. data/Rakefile +2 -2
  2. data/doc/build_install.txt +48 -28
  3. data/doc/extensions.txt +361 -0
  4. data/doc/history.txt +8 -2
  5. data/doc/requirements_and_design.txt +0 -13
  6. data/doc/roadmap.txt +11 -13
  7. data/doc/supplies/page_template.html +11 -5
  8. data/doc/thanks.txt +2 -4
  9. data/doc/tutorial.txt +1 -4
  10. data/examples/{nehe_lesson02.rb → NeHe/nehe_lesson02.rb} +0 -0
  11. data/examples/{nehe_lesson03.rb → NeHe/nehe_lesson03.rb} +0 -0
  12. data/examples/{nehe_lesson04.rb → NeHe/nehe_lesson04.rb} +0 -0
  13. data/examples/{nehe_lesson05.rb → NeHe/nehe_lesson05.rb} +0 -0
  14. data/examples/NeHe/nehe_lesson36.rb +303 -0
  15. data/examples/OrangeBook/3Dlabs-License.txt +33 -0
  16. data/examples/OrangeBook/brick.frag +36 -0
  17. data/examples/OrangeBook/brick.rb +388 -0
  18. data/examples/OrangeBook/brick.vert +41 -0
  19. data/examples/OrangeBook/particle.frag +17 -0
  20. data/examples/OrangeBook/particle.rb +424 -0
  21. data/examples/OrangeBook/particle.vert +38 -0
  22. data/examples/README +13 -83
  23. data/examples/RedBook/aaindex.rb +97 -0
  24. data/examples/RedBook/aapoly.rb +142 -0
  25. data/examples/RedBook/aargb.rb +119 -0
  26. data/examples/RedBook/accanti.rb +162 -0
  27. data/examples/RedBook/accpersp.rb +215 -0
  28. data/examples/RedBook/alpha.rb +123 -0
  29. data/examples/RedBook/alpha3D.rb +158 -0
  30. data/examples/RedBook/bezcurve.rb +105 -0
  31. data/examples/RedBook/bezmesh.rb +137 -0
  32. data/examples/RedBook/checker.rb +124 -0
  33. data/examples/RedBook/clip.rb +95 -0
  34. data/examples/RedBook/colormat.rb +135 -0
  35. data/examples/RedBook/cube.rb +69 -0
  36. data/examples/RedBook/depthcue.rb +99 -0
  37. data/examples/RedBook/dof.rb +205 -0
  38. data/examples/{legacy → RedBook}/double.rb +59 -58
  39. data/examples/{legacy → RedBook}/drawf.rb +47 -54
  40. data/examples/RedBook/feedback.rb +145 -0
  41. data/examples/RedBook/fog.rb +167 -0
  42. data/examples/RedBook/font.rb +151 -0
  43. data/examples/RedBook/hello.rb +79 -0
  44. data/examples/RedBook/image.rb +137 -0
  45. data/examples/{legacy → RedBook}/jitter.rb +60 -62
  46. data/examples/RedBook/lines.rb +128 -0
  47. data/examples/RedBook/list.rb +111 -0
  48. data/examples/RedBook/material.rb +275 -0
  49. data/examples/RedBook/mipmap.rb +156 -0
  50. data/examples/{legacy → RedBook}/model.rb +66 -72
  51. data/examples/{legacy → RedBook}/movelight.rb +67 -75
  52. data/examples/RedBook/pickdepth.rb +179 -0
  53. data/examples/{legacy → RedBook}/planet.rb +62 -66
  54. data/examples/RedBook/quadric.rb +158 -0
  55. data/examples/RedBook/robot.rb +115 -0
  56. data/examples/RedBook/select.rb +196 -0
  57. data/examples/RedBook/smooth.rb +95 -0
  58. data/examples/RedBook/stencil.rb +163 -0
  59. data/examples/RedBook/stroke.rb +167 -0
  60. data/examples/RedBook/surface.rb +166 -0
  61. data/examples/RedBook/teaambient.rb +132 -0
  62. data/examples/RedBook/teapots.rb +182 -0
  63. data/examples/RedBook/tess.rb +183 -0
  64. data/examples/RedBook/texbind.rb +147 -0
  65. data/examples/RedBook/texgen.rb +169 -0
  66. data/examples/RedBook/texturesurf.rb +128 -0
  67. data/examples/RedBook/varray.rb +159 -0
  68. data/examples/RedBook/wrap.rb +148 -0
  69. data/examples/misc/anisotropic.rb +194 -0
  70. data/examples/misc/font-glut.rb +46 -0
  71. data/examples/{plane.rb → misc/plane.rb} +0 -0
  72. data/examples/misc/readpixel.rb +65 -0
  73. data/examples/{smooth.rb → misc/smooth.rb} +0 -0
  74. data/examples/{test.rb → misc/test.rb} +0 -0
  75. data/ext/common/common.h +252 -70
  76. data/ext/common/gl-enums.h +6102 -7334
  77. data/ext/common/gl-types.h +47 -0
  78. data/ext/common/glu-enums.h +469 -0
  79. data/ext/gl/gl-1.0-1.1.c +842 -2464
  80. data/ext/gl/gl-1.2.c +217 -281
  81. data/ext/gl/gl-1.3.c +113 -133
  82. data/ext/gl/gl-1.4.c +98 -334
  83. data/ext/gl/gl-1.5.c +28 -34
  84. data/ext/gl/gl-2.0.c +26 -235
  85. data/ext/gl/gl-2.1.c +31 -124
  86. data/ext/gl/gl-enums.c +786 -631
  87. data/ext/gl/gl-ext-arb.c +66 -0
  88. data/ext/gl/gl-ext-ext.c +218 -0
  89. data/ext/gl/gl.c +138 -31
  90. data/ext/gl/mkrf_conf.rb +1 -0
  91. data/ext/glu/glu-enums.c +163 -0
  92. data/ext/glu/glu.c +1003 -1205
  93. data/ext/glu/mkrf_conf.rb +1 -0
  94. data/ext/glut/glut.c +1056 -1175
  95. data/lib/opengl.rb +90 -3
  96. data/test/tc_common.rb +26 -13
  97. data/test/tc_ext_arb.rb +73 -0
  98. data/test/tc_ext_ext.rb +74 -0
  99. data/test/tc_func_12.rb +8 -8
  100. data/test/tc_func_13.rb +17 -11
  101. data/test/tc_func_14.rb +8 -8
  102. data/test/tc_func_15.rb +190 -2
  103. data/test/tc_func_20.rb +36 -10
  104. data/test/tc_func_21.rb +445 -2
  105. data/test/tc_glu.rb +305 -0
  106. data/test/tc_misc.rb +1 -0
  107. metadata +84 -68
  108. data/doc/screenshots.txt +0 -23
  109. data/examples/legacy/COPYRIGHT +0 -8
  110. data/examples/legacy/aaindex.rb +0 -98
  111. data/examples/legacy/aapoly.rb +0 -153
  112. data/examples/legacy/aargb.rb +0 -139
  113. data/examples/legacy/accanti.rb +0 -159
  114. data/examples/legacy/accpersp.rb +0 -216
  115. data/examples/legacy/alpha.rb +0 -133
  116. data/examples/legacy/alpha3D.rb +0 -165
  117. data/examples/legacy/bezcurve.rb +0 -107
  118. data/examples/legacy/bezmesh.rb +0 -131
  119. data/examples/legacy/checker.rb +0 -121
  120. data/examples/legacy/clip.rb +0 -104
  121. data/examples/legacy/colormat.rb +0 -145
  122. data/examples/legacy/cube.rb +0 -73
  123. data/examples/legacy/depthcue.rb +0 -101
  124. data/examples/legacy/dof.rb +0 -212
  125. data/examples/legacy/feedback.rb +0 -152
  126. data/examples/legacy/fog.rb +0 -172
  127. data/examples/legacy/font-glut.rb +0 -41
  128. data/examples/legacy/font.rb +0 -158
  129. data/examples/legacy/hello.rb +0 -75
  130. data/examples/legacy/image.rb +0 -145
  131. data/examples/legacy/lines.rb +0 -135
  132. data/examples/legacy/list.rb +0 -120
  133. data/examples/legacy/material.rb +0 -290
  134. data/examples/legacy/mipmap.rb +0 -159
  135. data/examples/legacy/pickdepth.rb +0 -180
  136. data/examples/legacy/quadric.rb +0 -180
  137. data/examples/legacy/readpixel.rb +0 -59
  138. data/examples/legacy/robot.rb +0 -120
  139. data/examples/legacy/select.rb +0 -207
  140. data/examples/legacy/smooth.rb +0 -41
  141. data/examples/legacy/stencil.rb +0 -154
  142. data/examples/legacy/stroke.rb +0 -170
  143. data/examples/legacy/surface.rb +0 -170
  144. data/examples/legacy/teaambient.rb +0 -132
  145. data/examples/legacy/teapots.rb +0 -188
  146. data/examples/legacy/tess.rb +0 -222
  147. data/examples/legacy/texbind.rb +0 -157
  148. data/examples/legacy/texgen.rb +0 -171
  149. data/examples/legacy/texturesurf.rb +0 -128
  150. data/examples/legacy/varray.rb +0 -167
  151. data/examples/legacy/wrap.rb +0 -158
  152. data/lib/gl_prev.rb +0 -46
  153. data/lib/glu_prev.rb +0 -46
  154. data/lib/glut_prev.rb +0 -45
@@ -0,0 +1,66 @@
1
+ /*
2
+ * Copyright (C) 2007 Jan Dvorak <jan.dvorak@kraxnet.cz>
3
+ *
4
+ * This program is distributed under the terms of the MIT license.
5
+ * See the included MIT-LICENSE file for the terms of this license.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
8
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
10
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
11
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
12
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
13
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+ */
15
+
16
+ #include "../common/common.h"
17
+
18
+ /* OpenGL ARB extensions */
19
+
20
+ /* #3 GL_ARB_transpose_matrix */
21
+ #define TRANSPOSEMATRIX_FUNC(_name_,_type_,_shorttype_) \
22
+ static void (APIENTRY * fptr_gl##_name_)(const _type_[]); \
23
+ static VALUE \
24
+ gl_##_name_(obj,arg1) \
25
+ VALUE obj,arg1; \
26
+ { \
27
+ _type_ m[4*4]; \
28
+ LOAD_GL_EXT_FUNC(gl##_name_,"GL_ARB_transpose_matrix") \
29
+ ary2cmat4x4##_shorttype_(arg1, m); \
30
+ fptr_gl##_name_(m); \
31
+ return Qnil; \
32
+ }
33
+
34
+ TRANSPOSEMATRIX_FUNC(LoadTransposeMatrixfARB,GLfloat,flt)
35
+ TRANSPOSEMATRIX_FUNC(LoadTransposeMatrixdARB,GLdouble,dbl)
36
+ TRANSPOSEMATRIX_FUNC(MultTransposeMatrixfARB,GLfloat,flt)
37
+ TRANSPOSEMATRIX_FUNC(MultTransposeMatrixdARB,GLdouble,dbl)
38
+
39
+ #undef TRANSPOSEMATRIX_FUNC
40
+
41
+ /* #5 GL_ARB_multisample */
42
+ static void (APIENTRY * fptr_glSampleCoverageARB)(GLclampf,GLboolean);
43
+ static VALUE gl_SampleCoverageARB(VALUE obj,VALUE arg1,VALUE arg2)
44
+ {
45
+ LOAD_GL_EXT_FUNC(glSampleCoverageARB,"GL_ARB_multisample")
46
+ fptr_glSampleCoverageARB((GLclampf)NUM2DBL(arg1),(GLboolean)NUM2INT(arg2));
47
+ return Qnil;
48
+ }
49
+
50
+ /* #39 GL_ARB_color_buffer_float */
51
+ GL_EXT_SIMPLE_FUNC_LOAD(ClampColorARB,2,GLenum,NUM2INT,"GL_ARB_color_buffer_float")
52
+
53
+ void gl_init_functions_ext_arb(VALUE module)
54
+ {
55
+ /* #3 GL_ARB_transpose_matrix */
56
+ rb_define_module_function(module, "glLoadTransposeMatrixfARB", gl_LoadTransposeMatrixfARB, 1);
57
+ rb_define_module_function(module, "glLoadTransposeMatrixdARB", gl_LoadTransposeMatrixdARB, 1);
58
+ rb_define_module_function(module, "glMultTransposeMatrixfARB", gl_MultTransposeMatrixfARB, 1);
59
+ rb_define_module_function(module, "glMultTransposeMatrixdARB", gl_MultTransposeMatrixdARB, 1);
60
+
61
+ /* #5 GL_ARB_multisample */
62
+ rb_define_module_function(module, "glSampleCoverageARB", gl_SampleCoverageARB, 2);
63
+
64
+ /* #39 GL_ARB_color_buffer_float */
65
+ rb_define_module_function(module, "glClampColorARB", gl_ClampColorARB, 2);
66
+ }
@@ -0,0 +1,218 @@
1
+ /*
2
+ * Copyright (C) 2007 Jan Dvorak <jan.dvorak@kraxnet.cz>
3
+ *
4
+ * This program is distributed under the terms of the MIT license.
5
+ * See the included MIT-LICENSE file for the terms of this license.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
8
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
10
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
11
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
12
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
13
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+ */
15
+
16
+ #include "../common/common.h"
17
+
18
+ /* OpenGL EXT extensions */
19
+ /* Those are extensions that are not blessed by ARB committee but were
20
+ created or agreed upon by multiple vendors */
21
+
22
+ /* #310 - GL_EXT_framebuffer_object */
23
+ static GLboolean (APIENTRY * fptr_glIsRenderbufferEXT)(GLuint);
24
+ static VALUE gl_IsRenderbufferEXT(VALUE obj,VALUE arg1)
25
+ {
26
+ GLboolean ret;
27
+ LOAD_GL_EXT_FUNC(glIsRenderbufferEXT,"GL_EXT_framebuffer_object")
28
+ ret = fptr_glIsRenderbufferEXT((GLuint)NUM2UINT(arg1));
29
+ return INT2NUM(ret);
30
+ }
31
+
32
+ static void (APIENTRY * fptr_glBindRenderbufferEXT)(GLenum,GLuint);
33
+ static VALUE gl_BindRenderbufferEXT(VALUE obj,VALUE arg1,VALUE arg2)
34
+ {
35
+ LOAD_GL_EXT_FUNC(glBindRenderbufferEXT,"GL_EXT_framebuffer_object")
36
+ fptr_glBindRenderbufferEXT((GLenum)NUM2INT(arg1),(GLuint)NUM2UINT(arg2));
37
+ return Qnil;
38
+ }
39
+
40
+ static void (APIENTRY * fptr_glDeleteRenderbuffersEXT)(GLsizei,const GLuint *);
41
+ static VALUE gl_DeleteRenderbuffersEXT(VALUE obj,VALUE arg1)
42
+ {
43
+ GLsizei n;
44
+ LOAD_GL_EXT_FUNC(glDeleteRenderbuffersEXT,"GL_EXT_framebuffer_object")
45
+ if (TYPE(arg1)==T_ARRAY) {
46
+ GLuint *renderbuffers;
47
+ n = RARRAY(arg1)->len;
48
+ renderbuffers = ALLOC_N(GLuint,n);
49
+ ary2cuint(arg1,renderbuffers,n);
50
+ fptr_glDeleteRenderbuffersEXT(n,renderbuffers);
51
+ xfree(renderbuffers);
52
+ } else {
53
+ GLuint renderbuffer;
54
+ renderbuffer = NUM2UINT(arg1);
55
+ fptr_glDeleteRenderbuffersEXT(1,&renderbuffer);
56
+ }
57
+ return Qnil;
58
+ }
59
+
60
+ static void (APIENTRY * fptr_glGenRenderbuffersEXT)(GLsizei,GLuint *);
61
+ static VALUE gl_GenRenderbuffersEXT(VALUE obj,VALUE arg1)
62
+ {
63
+ GLsizei n;
64
+ GLuint *renderbuffers;
65
+ VALUE ret;
66
+ int i;
67
+ LOAD_GL_EXT_FUNC(glGenRenderbuffersEXT,"GL_EXT_framebuffer_object")
68
+ n = (GLsizei)NUM2UINT(arg1);
69
+ renderbuffers = ALLOC_N(GLuint, n);
70
+ fptr_glGenRenderbuffersEXT(n,renderbuffers);
71
+ ret = rb_ary_new2(n);
72
+ for (i = 0; i < n; i++)
73
+ rb_ary_push(ret, INT2NUM(renderbuffers[i]));
74
+ xfree(renderbuffers);
75
+ return ret;
76
+ }
77
+
78
+ static void (APIENTRY * fptr_glRenderbufferStorageEXT)(GLenum,GLenum,GLsizei,GLsizei);
79
+ static VALUE gl_RenderbufferStorageEXT(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3,VALUE arg4)
80
+ {
81
+ LOAD_GL_EXT_FUNC(glRenderbufferStorageEXT,"GL_EXT_framebuffer_object")
82
+ fptr_glRenderbufferStorageEXT(NUM2UINT(arg1),NUM2UINT(arg2),NUM2INT(arg3),NUM2INT(arg4));
83
+ return Qnil;
84
+ }
85
+
86
+ static void (APIENTRY * fptr_glGetRenderbufferParameterivEXT)(GLenum,GLenum,GLint *);
87
+ static VALUE gl_GetRenderbufferParameterivEXT(VALUE obj,VALUE arg1,VALUE arg2)
88
+ {
89
+ GLint param = 0;
90
+ LOAD_GL_EXT_FUNC(glGetRenderbufferParameterivEXT,"GL_EXT_framebuffer_object")
91
+ fptr_glGetRenderbufferParameterivEXT(NUM2UINT(arg1),NUM2UINT(arg2),&param);
92
+ return INT2NUM(param);
93
+ }
94
+
95
+ static GLboolean (APIENTRY * fptr_glIsFramebufferEXT)(GLuint);
96
+ static VALUE gl_IsFramebufferEXT(VALUE obj,VALUE arg1)
97
+ {
98
+ GLboolean ret;
99
+ LOAD_GL_EXT_FUNC(glIsFramebufferEXT,"GL_EXT_framebuffer_object")
100
+ ret = fptr_glIsFramebufferEXT(NUM2UINT(arg1));
101
+ return INT2NUM(ret);
102
+ }
103
+
104
+ static void (APIENTRY * fptr_glBindFramebufferEXT)(GLenum,GLuint);
105
+ static VALUE gl_BindFramebufferEXT(VALUE obj,VALUE arg1,VALUE arg2)
106
+ {
107
+ LOAD_GL_EXT_FUNC(glBindFramebufferEXT,"GL_EXT_framebuffer_object")
108
+ fptr_glBindFramebufferEXT((GLenum)NUM2INT(arg1),(GLuint)NUM2UINT(arg2));
109
+ return Qnil;
110
+ }
111
+
112
+ static void (APIENTRY * fptr_glDeleteFramebuffersEXT)(GLsizei,const GLuint *);
113
+ static VALUE gl_DeleteFramebuffersEXT(VALUE obj,VALUE arg1)
114
+ {
115
+ GLsizei n;
116
+ LOAD_GL_EXT_FUNC(glDeleteFramebuffersEXT,"GL_EXT_framebuffer_object")
117
+ if (TYPE(arg1)==T_ARRAY) {
118
+ GLuint *framebuffers;
119
+ n = RARRAY(arg1)->len;
120
+ framebuffers = ALLOC_N(GLuint,n);
121
+ ary2cuint(arg1,framebuffers,n);
122
+ fptr_glDeleteFramebuffersEXT(n,framebuffers);
123
+ xfree(framebuffers);
124
+ } else {
125
+ GLuint framebuffer;
126
+ framebuffer = NUM2UINT(arg1);
127
+ fptr_glDeleteFramebuffersEXT(1,&framebuffer);
128
+ }
129
+ return Qnil;
130
+ }
131
+
132
+ static void (APIENTRY * fptr_glGenFramebuffersEXT)(GLsizei,GLuint *);
133
+ static VALUE gl_GenFramebuffersEXT(VALUE obj,VALUE arg1)
134
+ {
135
+ GLsizei n;
136
+ GLuint *framebuffers;
137
+ VALUE ret;
138
+ int i;
139
+ LOAD_GL_EXT_FUNC(glGenFramebuffersEXT,"GL_EXT_framebuffer_object")
140
+ n = (GLsizei)NUM2UINT(arg1);
141
+ framebuffers = ALLOC_N(GLuint, n);
142
+ fptr_glGenFramebuffersEXT(n,framebuffers);
143
+ ret = rb_ary_new2(n);
144
+ for (i = 0; i < n; i++)
145
+ rb_ary_push(ret, INT2NUM(framebuffers[i]));
146
+ xfree(framebuffers);
147
+ return ret;
148
+ }
149
+
150
+ static GLenum (APIENTRY * fptr_glCheckFramebufferStatusEXT)(GLenum);
151
+ static VALUE gl_CheckFramebufferStatusEXT(VALUE obj,VALUE arg1)
152
+ {
153
+ GLenum ret;
154
+ LOAD_GL_EXT_FUNC(glCheckFramebufferStatusEXT,"GL_EXT_framebuffer_object")
155
+ ret = fptr_glCheckFramebufferStatusEXT(NUM2UINT(arg1));
156
+ return INT2NUM(ret);
157
+ }
158
+
159
+ static void (APIENTRY * fptr_glFramebufferTexture1DEXT)(GLenum,GLenum,GLenum,GLuint,GLint);
160
+ static VALUE gl_FramebufferTexture1DEXT(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3,VALUE arg4,VALUE arg5)
161
+ {
162
+ LOAD_GL_EXT_FUNC(glFramebufferTexture1DEXT,"GL_EXT_framebuffer_object")
163
+ fptr_glFramebufferTexture1DEXT(NUM2UINT(arg1),NUM2UINT(arg2),NUM2UINT(arg3),NUM2UINT(arg4),NUM2INT(arg5));
164
+ return Qnil;
165
+ }
166
+
167
+ static void (APIENTRY * fptr_glFramebufferTexture2DEXT)(GLenum,GLenum,GLenum,GLuint,GLint);
168
+ static VALUE gl_FramebufferTexture2DEXT(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3,VALUE arg4,VALUE arg5)
169
+ {
170
+ LOAD_GL_EXT_FUNC(glFramebufferTexture2DEXT,"GL_EXT_framebuffer_object")
171
+ fptr_glFramebufferTexture2DEXT(NUM2UINT(arg1),NUM2UINT(arg2),NUM2UINT(arg3),NUM2UINT(arg4),NUM2INT(arg5));
172
+ return Qnil;
173
+ }
174
+
175
+ static void (APIENTRY * fptr_glFramebufferTexture3DEXT)(GLenum,GLenum,GLenum,GLuint,GLint,GLint);
176
+ static VALUE gl_FramebufferTexture3DEXT(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3,VALUE arg4,VALUE arg5,VALUE arg6)
177
+ {
178
+ LOAD_GL_EXT_FUNC(glFramebufferTexture3DEXT,"GL_EXT_framebuffer_object")
179
+ fptr_glFramebufferTexture3DEXT(NUM2UINT(arg1),NUM2UINT(arg2),NUM2UINT(arg3),NUM2UINT(arg4),NUM2INT(arg5),NUM2INT(arg6));
180
+ return Qnil;
181
+ }
182
+
183
+ GL_EXT_SIMPLE_FUNC_LOAD(FramebufferRenderbufferEXT,4,GLuint,NUM2UINT,"GL_EXT_framebuffer_object")
184
+
185
+
186
+ static void (APIENTRY * fptr_glGetFramebufferAttachmentParameterivEXT)(GLenum,GLenum,GLenum,GLint *);
187
+ static VALUE gl_GetFramebufferAttachmentParameterivEXT(VALUE obj,VALUE arg1, VALUE arg2, VALUE arg3)
188
+ {
189
+ GLint ret = 0;
190
+ LOAD_GL_EXT_FUNC(glGetFramebufferAttachmentParameterivEXT,"GL_EXT_framebuffer_object")
191
+ fptr_glGetFramebufferAttachmentParameterivEXT(NUM2UINT(arg1),NUM2UINT(arg2),NUM2UINT(arg3),&ret);
192
+ return INT2NUM(ret);
193
+ }
194
+
195
+ GL_EXT_SIMPLE_FUNC_LOAD(GenerateMipmapEXT,1,GLenum,NUM2UINT,"GL_EXT_framebuffer_object")
196
+
197
+ void gl_init_functions_ext_ext(VALUE module)
198
+ {
199
+ /* #310 - GL_EXT_framebuffer_object */
200
+ rb_define_module_function(module, "glIsRenderbufferEXT", gl_IsRenderbufferEXT, 1);
201
+ rb_define_module_function(module, "glBindRenderbufferEXT", gl_BindRenderbufferEXT, 2);
202
+ rb_define_module_function(module, "glDeleteRenderbuffersEXT", gl_DeleteRenderbuffersEXT, 1);
203
+ rb_define_module_function(module, "glGenRenderbuffersEXT", gl_GenRenderbuffersEXT, 1);
204
+ rb_define_module_function(module, "glRenderbufferStorageEXT", gl_RenderbufferStorageEXT, 4);
205
+ rb_define_module_function(module, "glGetRenderbufferParameterivEXT", gl_GetRenderbufferParameterivEXT, 2);
206
+ rb_define_module_function(module, "glIsFramebufferEXT", gl_IsFramebufferEXT, 1);
207
+ rb_define_module_function(module, "glBindFramebufferEXT", gl_BindFramebufferEXT, 2);
208
+ rb_define_module_function(module, "glDeleteFramebuffersEXT", gl_DeleteFramebuffersEXT, 1);
209
+ rb_define_module_function(module, "glGenFramebuffersEXT", gl_GenFramebuffersEXT, 1);
210
+ rb_define_module_function(module, "glCheckFramebufferStatusEXT", gl_CheckFramebufferStatusEXT, 1);
211
+ rb_define_module_function(module, "glFramebufferTexture1DEXT", gl_FramebufferTexture1DEXT, 5);
212
+ rb_define_module_function(module, "glFramebufferTexture2DEXT", gl_FramebufferTexture2DEXT, 5);
213
+ rb_define_module_function(module, "glFramebufferTexture3DEXT", gl_FramebufferTexture3DEXT, 6);
214
+ rb_define_module_function(module, "glFramebufferRenderbufferEXT", gl_FramebufferRenderbufferEXT, 4);
215
+ rb_define_module_function(module, "glGetFramebufferAttachmentParameterivEXT", gl_GetFramebufferAttachmentParameterivEXT, 3);
216
+ rb_define_module_function(module, "glGenerateMipmapEXT", gl_GenerateMipmapEXT, 1);
217
+
218
+ }
data/ext/gl/gl.c CHANGED
@@ -1,6 +1,7 @@
1
1
  /*
2
2
  * Copyright (C) 1999 - 2005 Yoshi <yoshi@giganet.net>
3
3
  * Copyright (C) 2006 John M. Gabriele <jmg3000@gmail.com>
4
+ * Copyright (C) 2007 Jan Dvorak <jan.dvorak@kraxnet.cz>
4
5
  *
5
6
  * This program is distributed under the terms of the MIT license.
6
7
  * See the included MIT-LICENSE file for the terms of this license.
@@ -14,22 +15,8 @@
14
15
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15
16
  */
16
17
 
17
- #ifdef __APPLE__
18
- #include <OpenGL/gl.h>
19
- #elif defined WIN32
20
- #include <windows.h>
21
- #include <GL/gl.h>
22
- #else
23
- #include <GL/gl.h>
24
- #endif
25
18
  #include "../common/common.h"
26
19
 
27
- #ifdef WIN32
28
- #define DLLEXPORT __declspec(dllexport)
29
- #else
30
- #define DLLEXPORT
31
- #endif
32
-
33
20
  static VALUE module;
34
21
 
35
22
  void gl_init_enums(VALUE);
@@ -40,40 +27,158 @@ void gl_init_functions_1_4(VALUE);
40
27
  void gl_init_functions_1_5(VALUE);
41
28
  void gl_init_functions_2_0(VALUE);
42
29
  void gl_init_functions_2_1(VALUE);
30
+ void gl_init_functions_ext_arb(VALUE);
31
+ void gl_init_functions_ext_ext(VALUE);
32
+
33
+ static int opengl_version[2]; /* major, minor */
34
+ static char *opengl_extensions = NULL;
43
35
 
44
- VALUE IsFunctionAvailable(char *name)
36
+ /* Returns current OpenGL version as major, minor or 0,0 if
37
+ * unknown (context not yet initialised etc.) The version is
38
+ * cached for subsequent calls.
39
+ */
40
+ const int *GetOpenglVersion(void)
45
41
  {
46
- GLvoid *ret;
47
- ret = load_gl_function(name,0); /* won't raise */
48
- if (ret==NULL)
49
- return Qfalse;
42
+ if (opengl_version[0]==0) { /* not cached, query */
43
+ const char *vstr = (const char *) glGetString(GL_VERSION);
44
+ if (vstr)
45
+ sscanf( vstr, "%d.%d", &opengl_version[0], &opengl_version[1] );
46
+ }
47
+ return opengl_version;
48
+ }
49
+
50
+ /* Checks if OpenGL version is at least the same or higher than
51
+ * major.minor
52
+ */
53
+ GLboolean CheckOpenglVersion(int major, int minor)
54
+ {
55
+ const int *version;
56
+
57
+ version = GetOpenglVersion();
58
+
59
+ if (version[0]>major || (version[0]==major && version[1] >=minor))
60
+ return GL_TRUE;
50
61
  else
51
- return Qtrue;
62
+ return GL_FALSE;
63
+ }
64
+
65
+ /* Returns supported OpenGL extensions as char* or NULL
66
+ * if unknown (context not yet initialised etc.) The list is
67
+ * cached for subsequent calls.
68
+ */
69
+ const char *GetOpenglExtensions(void)
70
+ {
71
+ if (opengl_extensions == NULL) {
72
+ const char *estr = (const char *) glGetString(GL_EXTENSIONS);
73
+ if (estr) {
74
+ int len = strlen(estr);
75
+ opengl_extensions = ALLOC_N(GLchar,len+1+1); /* terminating null and added space */
76
+ strcpy(opengl_extensions,estr);
77
+ opengl_extensions[len] = ' '; /* add space char for easy searchs */
78
+ opengl_extensions[len+1] = '\0';
79
+ }
80
+ }
81
+ return opengl_extensions;
82
+ }
83
+
84
+ /* Checks if extension is supported by the current OpenGL implementation
85
+ */
86
+ GLboolean CheckExtension(const char *name)
87
+ {
88
+ const char *extensions;
89
+ char *name_tmp;
90
+ int name_len;
91
+ GLboolean res;
92
+
93
+ extensions = GetOpenglExtensions();
94
+
95
+ if(extensions==NULL)
96
+ return GL_FALSE;
97
+
98
+ /* add trailing space */
99
+ name_len = strlen(name);
100
+ name_tmp = ALLOC_N(GLchar,name_len+1+1); /* terminating null and added space */
101
+ strcpy(name_tmp,name);
102
+ name_tmp[name_len] = ' '; /* add space char for search */
103
+ name_tmp[name_len+1] = '\0';
104
+
105
+ if (strstr(extensions,name_tmp))
106
+ res = GL_TRUE;
107
+ else
108
+ res = GL_FALSE;
109
+
110
+ xfree(name_tmp);
111
+ return res;
52
112
  }
53
113
 
54
114
  static VALUE
55
115
  IsAvailable(obj,arg1)
56
116
  VALUE obj,arg1;
57
117
  {
58
- char *name = RSTRING(arg1)->ptr;
59
- Check_Type(arg1, T_STRING);
60
- if (name && name[0] && (name[0]=='G' || name[0]=='W')) { /* GL_, GLX_, WGL_ extension */
61
- char buf[512+128];
62
- if (strlen(name)>(512))
118
+ char *name = NULL;
119
+ VALUE s;
120
+
121
+ s = rb_funcall(arg1, rb_intern("to_s"),0);
122
+ name = RSTRING(s)->ptr;
123
+
124
+ if (name && name[0] && name[0]>='0' && name[0]<='9') { /* GL version query */
125
+ int major,minor;
126
+
127
+ if (sscanf( name, "%d.%d", &major, &minor ) != 2)
128
+ return Qfalse;
129
+
130
+ if (CheckOpenglVersion(major,minor)==1)
131
+ return Qtrue;
132
+ else
63
133
  return Qfalse;
64
- if (glGetString(GL_EXTENSIONS)==0)
134
+ } else if (name && name[0] && (name[0]=='G' || name[0]=='W')) { /* GL_, GLX_, WGL_ extension */
135
+ GLboolean res;
136
+
137
+ res = CheckExtension(name);
138
+ if (res==GL_TRUE)
139
+ return Qtrue;
140
+ else
65
141
  return Qfalse;
66
-
67
- sprintf(buf,"Gl.glGetString(Gl::GL_EXTENSIONS).split(' ').include?('%s')", name);
68
- return rb_eval_string(buf);
69
142
  } else { /* function */
70
- return IsFunctionAvailable(name);
143
+ GLvoid *ret;
144
+ ret = load_gl_function(name,0); /* won't raise */
145
+ if (ret==NULL)
146
+ return Qfalse;
147
+ else
148
+ return Qtrue;
149
+ }
150
+ }
151
+
152
+ /* Checks whether non-zero buffer of type $buffer is bound
153
+ * - this affects several functions that pass data from/to OpenGL.
154
+ */
155
+ GLint CheckBufferBinding(GLint buffer)
156
+ {
157
+ GLint result = 0;
158
+
159
+ /* check if the buffer functionality is supported */
160
+ switch(buffer) {
161
+ case GL_ARRAY_BUFFER_BINDING:
162
+ case GL_ELEMENT_ARRAY_BUFFER_BINDING:
163
+ if (!CheckOpenglVersion(1,5))
164
+ return 0;
165
+ break;
166
+ case GL_PIXEL_PACK_BUFFER_BINDING:
167
+ case GL_PIXEL_UNPACK_BUFFER_BINDING:
168
+ if (!CheckOpenglVersion(2,1))
169
+ return 0;
170
+ break;
171
+ default:
172
+ rb_raise(rb_eRuntimeError,"Internal Error: buffer type '%i' does not exist", buffer);
173
+ break;
71
174
  }
175
+ glGetIntegerv(buffer,&result);
176
+ return result;
72
177
  }
73
178
 
74
179
  DLLEXPORT void Init_gl()
75
180
  {
76
- module = rb_define_module("Gl");
181
+ module = rb_define_module("Gl");
77
182
  gl_init_enums(module);
78
183
  gl_init_functions_1_0__1_1(module);
79
184
  gl_init_functions_1_2(module);
@@ -82,6 +187,8 @@ DLLEXPORT void Init_gl()
82
187
  gl_init_functions_1_5(module);
83
188
  gl_init_functions_2_0(module);
84
189
  gl_init_functions_2_1(module);
190
+ gl_init_functions_ext_arb(module);
191
+ gl_init_functions_ext_ext(module);
85
192
 
86
193
  rb_define_module_function(module, "is_available?", IsAvailable, 1);
87
194
  }