opengl 0.8.0-x86-mingw32 → 0.9.0-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +1 -0
  3. data.tar.gz.sig +2 -0
  4. data/.gitignore +2 -1
  5. data/.travis.yml +19 -0
  6. data/History.rdoc +26 -0
  7. data/Manifest.txt +3 -23
  8. data/README.rdoc +43 -37
  9. data/Rakefile +6 -62
  10. data/examples/NeHe/nehe_lesson02.rb +3 -2
  11. data/examples/NeHe/nehe_lesson03.rb +3 -2
  12. data/examples/NeHe/nehe_lesson04.rb +3 -1
  13. data/examples/NeHe/nehe_lesson05.rb +4 -1
  14. data/examples/NeHe/nehe_lesson06.rb +9 -6
  15. data/examples/NeHe/nehe_lesson07.rb +9 -6
  16. data/examples/NeHe/nehe_lesson08.rb +9 -6
  17. data/examples/NeHe/nehe_lesson09.rb +10 -6
  18. data/examples/NeHe/nehe_lesson11.rb +9 -6
  19. data/examples/NeHe/nehe_lesson12.rb +9 -6
  20. data/examples/NeHe/nehe_lesson16.rb +50 -47
  21. data/examples/NeHe/nehe_lesson19.rb +10 -7
  22. data/examples/NeHe/nehe_lesson36.rb +234 -229
  23. data/examples/OrangeBook/brick.rb +227 -225
  24. data/examples/OrangeBook/particle.rb +233 -231
  25. data/examples/RedBook/aapoly.rb +71 -70
  26. data/examples/RedBook/aargb.rb +54 -52
  27. data/examples/RedBook/accanti.rb +96 -94
  28. data/examples/RedBook/accpersp.rb +106 -104
  29. data/examples/RedBook/alpha.rb +54 -52
  30. data/examples/RedBook/alpha3D.rb +90 -88
  31. data/examples/RedBook/bezcurve.rb +48 -46
  32. data/examples/RedBook/bezmesh.rb +71 -69
  33. data/examples/RedBook/checker.rb +57 -55
  34. data/examples/RedBook/clip.rb +41 -39
  35. data/examples/RedBook/colormat.rb +72 -70
  36. data/examples/RedBook/cube.rb +39 -37
  37. data/examples/RedBook/depthcue.rb +37 -35
  38. data/examples/RedBook/dof.rb +110 -109
  39. data/examples/RedBook/double.rb +40 -38
  40. data/examples/RedBook/drawf.rb +30 -28
  41. data/examples/RedBook/feedback.rb +79 -77
  42. data/examples/RedBook/fog.rb +90 -89
  43. data/examples/RedBook/font.rb +78 -76
  44. data/examples/RedBook/hello.rb +29 -27
  45. data/examples/RedBook/image.rb +57 -55
  46. data/examples/RedBook/jitter.rb +131 -131
  47. data/examples/RedBook/light.rb +2 -1
  48. data/examples/RedBook/lines.rb +70 -68
  49. data/examples/RedBook/list.rb +48 -46
  50. data/examples/RedBook/material.rb +200 -199
  51. data/examples/RedBook/mipmap.rb +84 -82
  52. data/examples/RedBook/model.rb +55 -53
  53. data/examples/RedBook/movelight.rb +52 -50
  54. data/examples/RedBook/pickdepth.rb +103 -101
  55. data/examples/RedBook/planet.rb +46 -44
  56. data/examples/RedBook/quadric.rb +97 -95
  57. data/examples/RedBook/robot.rb +55 -53
  58. data/examples/RedBook/select.rb +118 -116
  59. data/examples/RedBook/smooth.rb +35 -33
  60. data/examples/RedBook/stencil.rb +96 -94
  61. data/examples/RedBook/stroke.rb +75 -73
  62. data/examples/RedBook/surface.rb +93 -91
  63. data/examples/RedBook/teaambient.rb +71 -69
  64. data/examples/RedBook/teapots.rb +105 -103
  65. data/examples/RedBook/tess.rb +96 -94
  66. data/examples/RedBook/texbind.rb +79 -77
  67. data/examples/RedBook/texgen.rb +88 -86
  68. data/examples/RedBook/texturesurf.rb +57 -55
  69. data/examples/RedBook/varray.rb +85 -83
  70. data/examples/RedBook/wrap.rb +76 -74
  71. data/examples/misc/OGLBench.rb +114 -113
  72. data/examples/misc/anisotropic.rb +154 -152
  73. data/examples/misc/fbo_test.rb +37 -36
  74. data/examples/misc/font-glut.rb +47 -46
  75. data/examples/misc/glfwtest.rb +16 -16
  76. data/examples/misc/plane.rb +13 -13
  77. data/examples/misc/readpixel.rb +66 -65
  78. data/examples/misc/sdltest.rb +21 -19
  79. data/examples/misc/trislam.rb +548 -547
  80. data/ext/opengl/common.h +16 -38
  81. data/ext/opengl/conv.h +39 -41
  82. data/ext/opengl/extconf.rb +4 -31
  83. data/ext/opengl/funcdef.h +126 -124
  84. data/ext/opengl/gl-1.0-1.1.c +1917 -1917
  85. data/ext/opengl/gl-1.2.c +4 -667
  86. data/ext/opengl/gl-1.3.c +9 -9
  87. data/ext/opengl/gl-1.4.c +8 -8
  88. data/ext/opengl/gl-1.5.c +1 -1
  89. data/ext/opengl/gl-2.0.c +392 -388
  90. data/ext/opengl/gl-3.0.c +493 -0
  91. data/ext/opengl/gl-enums.c +1523 -5
  92. data/ext/opengl/gl-enums.h +4679 -122
  93. data/ext/opengl/gl-error.c +7 -7
  94. data/ext/opengl/gl-error.h +4 -4
  95. data/ext/opengl/gl-ext-arb.c +468 -464
  96. data/ext/opengl/gl-ext-ext.c +18 -18
  97. data/ext/opengl/gl-ext-nv.c +15 -15
  98. data/ext/opengl/gl.c +2 -0
  99. data/ext/opengl/gl_buffer.c +92 -92
  100. data/ext/opengl/opengl.c +1 -7
  101. data/lib/opengl.rb +23 -59
  102. data/lib/opengl/1.9/opengl.so +0 -0
  103. data/lib/opengl/2.0/opengl.so +0 -0
  104. data/lib/opengl/2.1/opengl.so +0 -0
  105. data/lib/opengl/test_case.rb +1 -2
  106. data/test/dummy.xorg.conf +140 -0
  107. data/test/test_gl.rb +18 -22
  108. data/test/test_gl_10_11.rb +220 -220
  109. data/test/test_gl_12.rb +11 -122
  110. data/test/test_gl_13.rb +202 -210
  111. data/test/test_gl_14.rb +16 -19
  112. data/test/test_gl_15.rb +2 -4
  113. data/test/test_gl_20.rb +45 -58
  114. data/test/test_gl_21.rb +46 -163
  115. data/test/test_gl_ext_arb.rb +54 -72
  116. data/test/test_gl_ext_ati.rb +0 -2
  117. data/test/test_gl_ext_ext.rb +66 -66
  118. data/test/test_gl_ext_gremedy.rb +8 -15
  119. data/test/test_gl_ext_nv.rb +109 -112
  120. data/test/test_opengl_buffer.rb +8 -25
  121. data/utils/README +0 -5
  122. data/utils/enumgen.rb +72 -76
  123. data/utils/extlistgen.rb +55 -55
  124. metadata +90 -67
  125. metadata.gz.sig +0 -0
  126. data/Rakefile.cross +0 -107
  127. data/docs/build_install.txt +0 -119
  128. data/docs/extensions.txt.in +0 -348
  129. data/docs/history.txt +0 -66
  130. data/docs/requirements_and_design.txt +0 -117
  131. data/docs/roadmap.txt +0 -28
  132. data/docs/scientific_use.txt +0 -35
  133. data/docs/supplies/page_template.html +0 -71
  134. data/docs/thanks.txt +0 -29
  135. data/docs/tutorial.txt +0 -469
  136. data/ext/opengl/glu-enums.c +0 -164
  137. data/ext/opengl/glu-enums.h +0 -463
  138. data/ext/opengl/glu.c +0 -1534
  139. data/ext/opengl/glut.c +0 -1145
  140. data/ext/opengl/glut_callbacks.c +0 -845
  141. data/lib/glu.rb +0 -1
  142. data/lib/glut.rb +0 -1
  143. data/lib/opengl/opengl.so +0 -0
  144. data/test/test_glu.rb +0 -309
  145. data/utils/mkdn2html.rb +0 -59
  146. data/utils/post-mkdn2html.rb +0 -91
  147. data/website/images/ogl.jpg +0 -0
  148. data/website/images/tab_bottom.gif +0 -0
  149. data/website/style.css +0 -198
@@ -31,14 +31,6 @@
31
31
  #include <OpenGL/gl.h>
32
32
  #endif
33
33
 
34
- #ifdef HAVE_OPENGL_GLU_H
35
- #include <OpenGL/glu.h>
36
- #endif
37
-
38
- #ifdef HAVE_GLUT_GLUT_H
39
- #include <GLUT/glut.h>
40
- #endif
41
-
42
34
  #ifdef HAVE_DLFCN_H
43
35
  #include <dlfcn.h>
44
36
  #endif
@@ -55,21 +47,12 @@
55
47
  #include <GL/gl.h>
56
48
  #endif
57
49
 
58
- #ifdef HAVE_GL_GLU_H
59
- #include <GL/glu.h>
60
- #endif
61
-
62
- #ifdef HAVE_GL_GLUT_H
63
- #include <GL/glut.h>
64
- #endif
65
-
66
50
  #ifdef HAVE_GL_GLX_H
67
51
  #include <GL/glx.h>
68
52
  #endif
69
53
 
70
54
  #include "gl-types.h"
71
55
  #include "gl-enums.h"
72
- #include "glu-enums.h"
73
56
  #include "gl-error.h"
74
57
 
75
58
  #include "funcdef.h"
@@ -83,10 +66,6 @@
83
66
  #define CALLBACK
84
67
  #endif
85
68
 
86
- #ifndef GLUTCALLBACK
87
- #define GLUTCALLBACK
88
- #endif
89
-
90
69
  #ifdef HAVE_WINDOWS_H
91
70
  #define DLLEXPORT __declspec(dllexport)
92
71
  #else
@@ -387,13 +366,25 @@ static inline void *load_gl_function(const char *name,int raise)
387
366
 
388
367
  #if defined(__APPLE__)
389
368
  void *library = NULL;
390
- library = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY | RTLD_LOCAL | RTLD_FIRST);
369
+ library = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY | RTLD_LOCAL | RTLD_FIRST);
391
370
 
392
371
  if (library == NULL)
393
372
  rb_raise(rb_eRuntimeError,"Can't load OpenGL library for dynamic loading");
394
-
395
- func_ptr = dlsym(library, name);
396
- dlclose(library);
373
+
374
+ func_ptr = dlsym(library, name);
375
+
376
+ if(func_ptr == NULL)
377
+ {
378
+ /* prepend a '_' for the Unix C symbol mangling convention */
379
+ char *symbol_name = ALLOC_N(char, strlen(name) + 2);
380
+ symbol_name[0] = '_';
381
+ strcpy(symbol_name + 1, name);
382
+ func_ptr = dlsym(library, symbol_name);
383
+ xfree(symbol_name);
384
+ }
385
+
386
+ dlclose(library);
387
+
397
388
  #elif HAVE_WGLGETPROCADDRESS
398
389
  func_ptr = wglGetProcAddress((LPCSTR)name);
399
390
  #elif defined(GLX_VERSION_1_4)
@@ -434,17 +425,4 @@ static inline VALUE pack_array_or_pass_string(GLenum type,VALUE ary)
434
425
  return rb_funcall(ary,rb_intern("pack"),1,rb_str_new2(type_str));
435
426
  }
436
427
 
437
- /* GLUT */
438
-
439
- #define GLUT_SIMPLE_FUNCTION(_name_) \
440
- static VALUE \
441
- glut_##_name_(obj) \
442
- VALUE obj; \
443
- { \
444
- glut##_name_(); \
445
- return Qnil; \
446
- }
447
-
448
- VALUE rb_glut_check_callback(VALUE, VALUE);
449
-
450
428
  #endif
@@ -16,15 +16,15 @@
16
16
  /* Functions and macros for datatype conversion between Ruby and C */
17
17
 
18
18
  /*
19
- Fast inline conversion functions as a replacement for the ones in libruby.
20
- FIXNUM_P is simple logical AND check so it comes first, TYPE() is simple function,
21
- and specified in header file so it can be inlined. For conversion, FIX2LONG is
22
- simple right shift, and RFLOAT()-> just pointer dereference. For converting
23
- Fixnum and Float types (which accounts for 99.9% of things you would want to pass
24
- to OpenGL), there is large performance boost as result.
25
-
26
- Also ruby 'true' and 'false' are converted to GL_TRUE/GL_FALSE for compatibility, and
27
- finally, we fallback to library functions for any other data types (and error handling).
19
+ Fast inline conversion functions as a replacement for the ones in libruby.
20
+ FIXNUM_P is simple logical AND check so it comes first, TYPE() is simple function,
21
+ and specified in header file so it can be inlined. For conversion, FIX2LONG is
22
+ simple right shift, and RFLOAT()-> just pointer dereference. For converting
23
+ Fixnum and Float types (which accounts for 99.9% of things you would want to pass
24
+ to OpenGL), there is large performance boost as result.
25
+
26
+ Also ruby 'true' and 'false' are converted to GL_TRUE/GL_FALSE for compatibility, and
27
+ finally, we fallback to library functions for any other data types (and error handling).
28
28
  */
29
29
 
30
30
  #if HAVE_STRUCT_RFLOAT_FLOAT_VALUE
@@ -66,12 +66,14 @@ FASTCONV(num2uint,unsigned long,FIX2ULONG,(unsigned int)NUM2ULONG)
66
66
  #undef FASTCONV
67
67
 
68
68
  #define RUBY2GLENUM(x) \
69
- (x) == Qtrue ? GL_TRUE : (((x) == Qfalse) ? GL_FALSE : NUM2INT(x))
69
+ (x) == Qtrue ? GL_TRUE : ((x) == Qfalse ? GL_FALSE : NUM2INT(x))
70
70
 
71
71
  /* For conversion between ruby and GL boolean values */
72
72
  #define GLBOOL2RUBY(x) \
73
- (x) == GL_TRUE ? Qtrue : ((x)==GL_FALSE ? Qfalse : INT2NUM((x)))
74
- #define RUBYBOOL2GL(x) (x)==Qtrue? GL_TRUE : GL_FALSE
73
+ (x) == GL_TRUE ? Qtrue : ((x)==GL_FALSE ? Qfalse : INT2NUM((x)))
74
+
75
+ #define RUBYBOOL2GL(x) \
76
+ (x) == Qtrue ? GL_TRUE : GL_FALSE
75
77
 
76
78
  #define cond_GLBOOL2RUBY_FUNC(_name_,_type_,_conv_) \
77
79
  static inline VALUE _name_(GLenum pname,_type_ value) \
@@ -97,9 +99,6 @@ static inline VALUE _name_(GLenum pname,_type_ value) \
97
99
  case GL_TEXTURE_FLOAT_COMPONENTS_NV: \
98
100
  case GL_SHADER_CONSISTENT_NV: \
99
101
  case GL_TEXTURE_COMPARE_SGIX: \
100
- case GLU_TESS_BOUNDARY_ONLY: \
101
- case GLU_CULLING: \
102
- case GLU_AUTO_LOAD_MATRIX: \
103
102
  return GLBOOL2RUBY(value); \
104
103
  default: \
105
104
  return _conv_(value); \
@@ -124,15 +123,15 @@ VALUE arg; \
124
123
  GL##_type_ cary[]; \
125
124
  long maxlen; \
126
125
  { \
127
- long i; \
128
- VALUE ary = rb_Array(arg); \
129
- if (maxlen < 1) \
130
- maxlen = RARRAY_LEN(ary); \
131
- else \
132
- maxlen = maxlen < RARRAY_LEN(ary) ? maxlen : RARRAY_LEN(ary); \
133
- for (i=0; i < maxlen; i++) \
134
- cary[i] = (GL##_type_)_convert_(rb_ary_entry(ary,i)); \
135
- return i; \
126
+ long i; \
127
+ VALUE ary = rb_Array(arg); \
128
+ if (maxlen < 1) \
129
+ maxlen = RARRAY_LEN(ary); \
130
+ else \
131
+ maxlen = maxlen < RARRAY_LEN(ary) ? maxlen : RARRAY_LEN(ary); \
132
+ for (i=0; i < maxlen; i++) \
133
+ cary[i] = (GL##_type_)_convert_(rb_ary_entry(ary,i)); \
134
+ return i; \
136
135
  }
137
136
 
138
137
  ARY2CTYPE(int,NUM2INT)
@@ -201,32 +200,32 @@ ARY2CMATCNT(float)
201
200
  #define FREE(_x_) xfree(_x_);
202
201
 
203
202
  #define RET_ARRAY_OR_SINGLE(_name_, _size_, _conv_, _params_) \
204
- RET_ARRAY_OR_SINGLE_FUNC(_name_, _size_, _conv_, _params_, EMPTY)
203
+ RET_ARRAY_OR_SINGLE_FUNC(_name_, _size_, _conv_, _params_, EMPTY)
205
204
 
206
205
  #define RET_ARRAY_OR_SINGLE_FREE(_name, _size_, _conv_, _params_) \
207
- RET_ARRAY_OR_SINGLE_FUNC(_name, _size_, _conv_, _params_, FREE(_params_))
206
+ RET_ARRAY_OR_SINGLE_FUNC(_name, _size_, _conv_, _params_, FREE(_params_))
208
207
 
209
208
  #define RET_ARRAY_OR_SINGLE_FUNC(_name_, _size_, _conv_, _params_, _extra_) \
210
209
  do { \
211
- int iter; \
212
- VALUE return_array; \
213
- if (_size_ == 1) { \
214
- return_array = _conv_(_params_[0]); \
215
- } else { \
216
- return_array = rb_ary_new2(_size_); \
217
- for(iter=0;iter<_size_;iter++) \
218
- rb_ary_push(return_array, _conv_(_params_[iter])); \
219
- } \
220
- _extra_ \
221
- CHECK_GLERROR_FROM(_name_); \
222
- return return_array; \
210
+ int iter; \
211
+ VALUE return_array; \
212
+ if (_size_ == 1) { \
213
+ return_array = _conv_(_params_[0]); \
214
+ } else { \
215
+ return_array = rb_ary_new2(_size_); \
216
+ for(iter=0;iter<_size_;iter++) \
217
+ rb_ary_push(return_array, _conv_(_params_[iter])); \
218
+ } \
219
+ _extra_ \
220
+ CHECK_GLERROR_FROM(_name_); \
221
+ return return_array; \
223
222
  } while (0)
224
223
 
225
224
  #define RET_ARRAY_OR_SINGLE_BOOL(_name_, _size_, _conv_, _enum_, _params_) \
226
- RET_ARRAY_OR_SINGLE_BOOL_FUNC(_name_, _size_, _conv_, _enum_, _params_, EMPTY)
225
+ RET_ARRAY_OR_SINGLE_BOOL_FUNC(_name_, _size_, _conv_, _enum_, _params_, EMPTY)
227
226
 
228
227
  #define RET_ARRAY_OR_SINGLE_BOOL_FREE(_name_, _size_, _conv_, _enum_, _params_) \
229
- RET_ARRAY_OR_SINGLE_BOOL_FUNC(_name_, _size_, _conv_, _enum_, _params_, FREE(_params_))
228
+ RET_ARRAY_OR_SINGLE_BOOL_FUNC(_name_, _size_, _conv_, _enum_, _params_, FREE(_params_))
230
229
 
231
230
  #define RET_ARRAY_OR_SINGLE_BOOL_FUNC(_name_, _size_, _conv_, _enum_, _params_, _extra_) \
232
231
  do { \
@@ -243,4 +242,3 @@ do { \
243
242
  CHECK_GLERROR_FROM(_name_); \
244
243
  return return_array; \
245
244
  } while (0)
246
-
@@ -15,40 +15,18 @@ end unless respond_to? :have_framework
15
15
 
16
16
  if ENV['CROSS_COMPILING']
17
17
  dir_config("installed")
18
-
19
- $defs.push "-DFREEGLUT_EXPORTS"
20
-
21
- # libfreeglut is linked to gdi32 and winmm
22
- have_library( 'gdi32', 'CreateDC' ) && append_library( $libs, 'gdi32' )
23
- have_library( 'winmm', 'timeBeginPeriod' ) && append_library( $libs, 'winmm' )
24
18
  end
25
19
 
26
20
  ok =
27
- (have_library('opengl32.lib', 'glVertex3d') &&
28
- have_library('glu32.lib', 'gluLookAt') &&
29
- have_library('glut32.lib', 'gluSolidTeapot')) ||
30
- (have_library('opengl32') &&
31
- have_library('glu32') &&
32
- have_library('glut')) ||
33
- (have_library('GL', 'glVertex3d') &&
34
- have_library('GLU', 'gluLookAt') &&
35
- have_library('glut', 'glutSolidTeapot')) ||
36
- (have_framework('OpenGL') &&
37
- have_framework('GLUT') &&
38
- have_framework('Cocoa'))
21
+ (have_framework('OpenGL') && have_framework('Cocoa')) ||
22
+ have_library('opengl32.lib', 'glVertex3d') ||
23
+ have_library('opengl32') ||
24
+ have_library('GL', 'glVertex3d')
39
25
 
40
26
  ok &&=
41
27
  have_header('GL/gl.h') ||
42
28
  have_header('OpenGL/gl.h') # OS X
43
29
 
44
- ok &&=
45
- have_header('GL/glu.h') ||
46
- have_header('OpenGL/glu.h') # OS X
47
-
48
- ok &&=
49
- have_header('GL/glut.h') ||
50
- have_header('GLUT/glut.h') # OS X
51
-
52
30
  have_header 'GL/glx.h' # *NIX only?
53
31
  have_header 'dlfcn.h' # OS X dynamic loader
54
32
  have_header 'windows.h'
@@ -63,12 +41,7 @@ have_struct_member 'struct RFloat', 'float_value'
63
41
  have_type 'int64_t', 'stdint.h'
64
42
  have_type 'uint64_t', 'stdint.h'
65
43
 
66
- if String === ?a then
67
- $defs.push "-DHAVE_SINGLE_BYTE_STRINGS"
68
- end
69
-
70
44
  if ok then
71
45
  create_header
72
46
  create_makefile 'opengl/opengl'
73
47
  end
74
-
@@ -13,13 +13,14 @@
13
13
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
  */
15
15
 
16
- /* These macros are for simplification of function definition, as passing
17
- arguments from/to OpenGL usually follows the same few patterns. It would
18
- be probably wise to adapt the whole bindings to C++ (templates, overloaded
19
- functions, etc.), but for now supporting ruby extension for Windows means
20
- MSVC6, and that in turn means unspeakable horrors and pains for everyone
21
- attempting to merely write, much less debug or maintain any template-based
22
- code.
16
+ /*
17
+ These macros are for simplification of function definition, as passing
18
+ arguments from/to OpenGL usually follows the same few patterns. It would
19
+ be probably wise to adapt the whole bindings to C++ (templates, overloaded
20
+ functions, etc.), but for now supporting ruby extension for Windows means
21
+ MSVC6, and that in turn means unspeakable horrors and pains for everyone
22
+ attempting to merely write, much less debug or maintain any template-based
23
+ code.
23
24
  */
24
25
 
25
26
  /*
@@ -28,30 +29,31 @@
28
29
  * then required or the required extension is not supported.
29
30
  */
30
31
  #define LOAD_GL_FUNC(_NAME_, _VEREXT_) \
31
- do { \
32
- if (fptr_##_NAME_==NULL) { \
33
- if (CheckVersionExtension(_VEREXT_) == GL_FALSE) { \
34
- if (isdigit(_VEREXT_[0])) { \
35
- rb_raise(rb_eNotImpError, \
36
- "OpenGL version %s is not available on this system",_VEREXT_); \
37
- } else { \
38
- rb_raise(rb_eNotImpError, \
39
- "Extension %s is not available on this system",_VEREXT_); \
40
- } \
41
- } \
42
- \
43
- fptr_##_NAME_ = load_gl_function(#_NAME_, 1); \
44
- } \
45
- } while (0)
32
+ do { \
33
+ if (fptr_##_NAME_==NULL) { \
34
+ if (CheckVersionExtension(_VEREXT_) == GL_FALSE) { \
35
+ if (isdigit(_VEREXT_[0])) { \
36
+ rb_raise(rb_eNotImpError, \
37
+ "OpenGL version %s is not available on this system",_VEREXT_); \
38
+ } else { \
39
+ rb_raise(rb_eNotImpError, \
40
+ "Extension %s is not available on this system",_VEREXT_); \
41
+ } \
42
+ } \
43
+ \
44
+ fptr_##_NAME_ = load_gl_function(#_NAME_, 1); \
45
+ } \
46
+ } while (0)
46
47
 
47
- /* Macroset for defining simple functions, i.e. functions that take n arguments and
48
- pass them to GL API function without any additional processing.
48
+ /*
49
+ Macroset for defining simple functions, i.e. functions that take n arguments and
50
+ pass them to GL API function without any additional processing.
49
51
 
50
- Some checking is implicit in _conversion_ argument - e.g. NUM2INT makes sure that
51
- user is really passing type that can be converted to INT, otherwire raises.
52
+ Some checking is implicit in _conversion_ argument - e.g. NUM2INT makes sure that
53
+ user is really passing type that can be converted to INT, otherwire raises.
52
54
 
53
- *_LOAD version of macros are for defining functions where we load function pointer
54
- instead of direct call - that means all functions above OpenGL 1.1 (including all extensions)
55
+ *_LOAD version of macros are for defining functions where we load function pointer
56
+ instead of direct call - that means all functions above OpenGL 1.1 (including all extensions)
55
57
  */
56
58
 
57
59
  #define ARGLIST0
@@ -67,7 +69,7 @@
67
69
  #define ARGLIST10 ,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10
68
70
 
69
71
  #define CONV_GLenum (GLenum)RUBY2GLENUM
70
- #define CONV_GLboolean (GLboolean)GLBOOL2RUBY
72
+ #define CONV_GLboolean (GLboolean)RUBYBOOL2GL
71
73
  #define CONV_GLbitfield (GLbitfield)NUM2UINT
72
74
  #define CONV_GLbyte (GLbyte)NUM2INT
73
75
  #define CONV_GLshort (GLshort)NUM2INT
@@ -159,153 +161,153 @@
159
161
  #define CALLCONV10(cv1,cv2,cv3,cv4,cv5,cv6,cv7,cv8,cv9,cv10) CONV_##cv1(arg1),CONV_##cv2(arg2),CONV_##cv3(arg3),CONV_##cv4(arg4),CONV_##cv5(arg5),CONV_##cv6(arg6),CONV_##cv7(arg7),CONV_##cv8(arg8),CONV_##cv9(arg9),CONV_##cv10(arg10)
160
162
 
161
163
  #define GL_FUNC_LOAD(_num_,_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10,_ver_) \
162
- static _returntype_ (APIENTRY * fptr_gl##_name_)(PROTOPARAM##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
164
+ static _returntype_ (APIENTRY * fptr_gl##_name_)(PROTOPARAM##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
163
165
  static VALUE \
164
166
  gl_##_name_(obj ARGLIST##_num_) \
165
167
  VALUE obj ARGLIST##_num_; \
166
168
  { \
167
- RETDECL_##_returntype_ \
168
- LOAD_GL_FUNC(gl##_name_,_ver_); \
169
- RETSTAT_##_returntype_ fptr_gl##_name_(CALLCONV##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
170
- CHECK_GLERROR_FROM("gl" #_name_); \
171
- return RETCONV_##_returntype_(ret) ; \
169
+ RETDECL_##_returntype_ \
170
+ LOAD_GL_FUNC(gl##_name_,_ver_); \
171
+ RETSTAT_##_returntype_ fptr_gl##_name_(CALLCONV##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
172
+ CHECK_GLERROR_FROM("gl" #_name_); \
173
+ return RETCONV_##_returntype_(ret) ; \
172
174
  }
173
175
 
174
176
  #define GL_FUNC_STATIC(_num_,_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10) \
175
- static VALUE \
177
+ static VALUE \
176
178
  gl_##_name_(obj ARGLIST##_num_) \
177
179
  VALUE obj ARGLIST##_num_; \
178
180
  { \
179
- RETDECL_##_returntype_ \
180
- RETSTAT_##_returntype_ gl##_name_(CALLCONV##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
181
- CHECK_GLERROR_FROM("gl" #_name_); \
182
- return RETCONV_##_returntype_(ret) ; \
181
+ RETDECL_##_returntype_ \
182
+ RETSTAT_##_returntype_ gl##_name_(CALLCONV##_num_(targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)); \
183
+ CHECK_GLERROR_FROM("gl" #_name_); \
184
+ return RETCONV_##_returntype_(ret) ; \
183
185
  }
184
186
 
185
187
  #define GL_FUNC_LOAD_0(_name_,_returntype_,_ver_) \
186
- GL_FUNC_LOAD(0, _name_,_returntype_,0,0,0,0,0,0,0,0,0,0,_ver_)
188
+ GL_FUNC_LOAD(0, _name_,_returntype_,0,0,0,0,0,0,0,0,0,0,_ver_)
187
189
  #define GL_FUNC_LOAD_1(_name_,_returntype_,targ1,_ver_) \
188
- GL_FUNC_LOAD(1, _name_,_returntype_,targ1,0,0,0,0,0,0,0,0,0,_ver_)
190
+ GL_FUNC_LOAD(1, _name_,_returntype_,targ1,0,0,0,0,0,0,0,0,0,_ver_)
189
191
  #define GL_FUNC_LOAD_2(_name_,_returntype_,targ1,targ2,_ver_) \
190
- GL_FUNC_LOAD(2, _name_,_returntype_,targ1,targ2,0,0,0,0,0,0,0,0,_ver_)
192
+ GL_FUNC_LOAD(2, _name_,_returntype_,targ1,targ2,0,0,0,0,0,0,0,0,_ver_)
191
193
  #define GL_FUNC_LOAD_3(_name_,_returntype_,targ1,targ2,targ3,_ver_) \
192
- GL_FUNC_LOAD(3, _name_,_returntype_,targ1,targ2,targ3,0,0,0,0,0,0,0,_ver_)
194
+ GL_FUNC_LOAD(3, _name_,_returntype_,targ1,targ2,targ3,0,0,0,0,0,0,0,_ver_)
193
195
  #define GL_FUNC_LOAD_4(_name_,_returntype_,targ1,targ2,targ3,targ4,_ver_) \
194
- GL_FUNC_LOAD(4, _name_,_returntype_,targ1,targ2,targ3,targ4,0,0,0,0,0,0,_ver_)
196
+ GL_FUNC_LOAD(4, _name_,_returntype_,targ1,targ2,targ3,targ4,0,0,0,0,0,0,_ver_)
195
197
  #define GL_FUNC_LOAD_5(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,_ver_) \
196
- GL_FUNC_LOAD(5, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,0,0,0,0,0,_ver_)
198
+ GL_FUNC_LOAD(5, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,0,0,0,0,0,_ver_)
197
199
  #define GL_FUNC_LOAD_6(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,_ver_) \
198
- GL_FUNC_LOAD(6, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,0,0,0,0,_ver_)
200
+ GL_FUNC_LOAD(6, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,0,0,0,0,_ver_)
199
201
  #define GL_FUNC_LOAD_7(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,_ver_) \
200
- GL_FUNC_LOAD(7, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,0,0,0,_ver_)
202
+ GL_FUNC_LOAD(7, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,0,0,0,_ver_)
201
203
  #define GL_FUNC_LOAD_8(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,_ver_) \
202
- GL_FUNC_LOAD(8, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,0,0,_ver_)
204
+ GL_FUNC_LOAD(8, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,0,0,_ver_)
203
205
  #define GL_FUNC_LOAD_9(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,_ver_) \
204
- GL_FUNC_LOAD(9, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,0,_ver_)
206
+ GL_FUNC_LOAD(9, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,0,_ver_)
205
207
  #define GL_FUNC_LOAD_10(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10,_ver_) \
206
- GL_FUNC_LOAD(10, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10,_ver_)
208
+ GL_FUNC_LOAD(10, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10,_ver_)
207
209
 
208
210
  #define GL_FUNC_STATIC_0(_name_,_returntype_) \
209
- GL_FUNC_STATIC(0, _name_,_returntype_,0,0,0,0,0,0,0,0,0,0)
211
+ GL_FUNC_STATIC(0, _name_,_returntype_,0,0,0,0,0,0,0,0,0,0)
210
212
  #define GL_FUNC_STATIC_1(_name_,_returntype_,targ1) \
211
- GL_FUNC_STATIC(1, _name_,_returntype_,targ1,0,0,0,0,0,0,0,0,0)
213
+ GL_FUNC_STATIC(1, _name_,_returntype_,targ1,0,0,0,0,0,0,0,0,0)
212
214
  #define GL_FUNC_STATIC_2(_name_,_returntype_,targ1,targ2) \
213
- GL_FUNC_STATIC(2, _name_,_returntype_,targ1,targ2,0,0,0,0,0,0,0,0)
215
+ GL_FUNC_STATIC(2, _name_,_returntype_,targ1,targ2,0,0,0,0,0,0,0,0)
214
216
  #define GL_FUNC_STATIC_3(_name_,_returntype_,targ1,targ2,targ3) \
215
- GL_FUNC_STATIC(3, _name_,_returntype_,targ1,targ2,targ3,0,0,0,0,0,0,0)
217
+ GL_FUNC_STATIC(3, _name_,_returntype_,targ1,targ2,targ3,0,0,0,0,0,0,0)
216
218
  #define GL_FUNC_STATIC_4(_name_,_returntype_,targ1,targ2,targ3,targ4) \
217
- GL_FUNC_STATIC(4, _name_,_returntype_,targ1,targ2,targ3,targ4,0,0,0,0,0,0)
219
+ GL_FUNC_STATIC(4, _name_,_returntype_,targ1,targ2,targ3,targ4,0,0,0,0,0,0)
218
220
  #define GL_FUNC_STATIC_5(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5) \
219
- GL_FUNC_STATIC(5, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,0,0,0,0,0)
221
+ GL_FUNC_STATIC(5, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,0,0,0,0,0)
220
222
  #define GL_FUNC_STATIC_6(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6) \
221
- GL_FUNC_STATIC(6, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,0,0,0,0)
223
+ GL_FUNC_STATIC(6, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,0,0,0,0)
222
224
  #define GL_FUNC_STATIC_7(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7) \
223
- GL_FUNC_STATIC(7, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,0,0,0)
225
+ GL_FUNC_STATIC(7, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,0,0,0)
224
226
  #define GL_FUNC_STATIC_8(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8) \
225
- GL_FUNC_STATIC(8, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,0,0)
227
+ GL_FUNC_STATIC(8, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,0,0)
226
228
  #define GL_FUNC_STATIC_9(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9) \
227
- GL_FUNC_STATIC(9, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,0)
229
+ GL_FUNC_STATIC(9, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,0)
228
230
  #define GL_FUNC_STATIC_10(_name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10_ver_) \
229
- GL_FUNC_STATIC(10, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)
231
+ GL_FUNC_STATIC(10, _name_,_returntype_,targ1,targ2,targ3,targ4,targ5,targ6,targ7,targ8,targ9,targ10)
230
232
 
231
233
  /* Templates for glGen* and glDelete* */
232
234
 
233
235
  #define GL_FUNC_GENOBJECTS_LOAD(_name_,_ver_) \
234
- static void (APIENTRY * fptr_gl##_name_)(GLsizei,GLuint *); \
236
+ static void (APIENTRY * fptr_gl##_name_)(GLsizei,GLuint *); \
235
237
  static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
236
238
  { \
237
- GLsizei n; \
238
- GLuint *objects; \
239
- VALUE ret; \
240
- GLsizei i; \
241
- LOAD_GL_FUNC(gl##_name_,_ver_); \
242
- n = CONV_GLsizei(arg1); \
243
- objects = ALLOC_N(GLuint, n); \
244
- fptr_gl##_name_(n,objects); \
245
- ret = rb_ary_new2(n); \
246
- for (i = 0; i < n; i++) \
247
- rb_ary_push(ret, RETCONV_GLuint(objects[i])); \
248
- xfree(objects); \
249
- CHECK_GLERROR_FROM("gl" #_name_); \
250
- return ret; \
239
+ GLsizei n; \
240
+ GLuint *objects; \
241
+ VALUE ret; \
242
+ GLsizei i; \
243
+ LOAD_GL_FUNC(gl##_name_,_ver_); \
244
+ n = CONV_GLsizei(arg1); \
245
+ objects = ALLOC_N(GLuint, n); \
246
+ fptr_gl##_name_(n,objects); \
247
+ ret = rb_ary_new2(n); \
248
+ for (i = 0; i < n; i++) \
249
+ rb_ary_push(ret, RETCONV_GLuint(objects[i])); \
250
+ xfree(objects); \
251
+ CHECK_GLERROR_FROM("gl" #_name_); \
252
+ return ret; \
251
253
  }
252
254
 
253
255
  #define GL_FUNC_GENOBJECTS(_name_) \
254
- static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
256
+ static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
255
257
  { \
256
- GLsizei n; \
257
- GLuint *objects; \
258
- VALUE ret; \
259
- GLsizei i; \
260
- n = CONV_GLsizei(arg1); \
261
- objects = ALLOC_N(GLuint, n); \
262
- gl##_name_(n,objects); \
263
- ret = rb_ary_new2(n); \
264
- for (i = 0; i < n; i++) \
265
- rb_ary_push(ret, RETCONV_GLuint(objects[i])); \
266
- xfree(objects); \
267
- CHECK_GLERROR_FROM("gl" #_name_); \
268
- return ret; \
258
+ GLsizei n; \
259
+ GLuint *objects; \
260
+ VALUE ret; \
261
+ GLsizei i; \
262
+ n = CONV_GLsizei(arg1); \
263
+ objects = ALLOC_N(GLuint, n); \
264
+ gl##_name_(n,objects); \
265
+ ret = rb_ary_new2(n); \
266
+ for (i = 0; i < n; i++) \
267
+ rb_ary_push(ret, RETCONV_GLuint(objects[i])); \
268
+ xfree(objects); \
269
+ CHECK_GLERROR_FROM("gl" #_name_); \
270
+ return ret; \
269
271
  }
270
272
 
271
273
  #define GL_FUNC_DELETEOBJECTS_LOAD(_name_,_ver_) \
272
- static void (APIENTRY * fptr_gl##_name_)(GLsizei,const GLuint *); \
274
+ static void (APIENTRY * fptr_gl##_name_)(GLsizei,const GLuint *); \
273
275
  static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
274
276
  { \
275
- GLsizei n; \
276
- LOAD_GL_FUNC(gl##_name_,_ver_); \
277
- if (TYPE(arg1)==T_ARRAY) { \
278
- GLuint *objects; \
279
- n = (GLsizei)RARRAY_LENINT(arg1); \
280
- objects = ALLOC_N(GLuint,n); \
281
- ary2cuint(arg1,objects,n); \
282
- fptr_gl##_name_(n,objects); \
283
- xfree(objects); \
284
- } else { \
285
- GLuint object; \
286
- object = CONV_GLsizei(arg1); \
287
- fptr_gl##_name_(1,&object); \
288
- } \
289
- CHECK_GLERROR_FROM("gl" #_name_); \
290
- return Qnil; \
277
+ GLsizei n; \
278
+ LOAD_GL_FUNC(gl##_name_,_ver_); \
279
+ if (TYPE(arg1)==T_ARRAY) { \
280
+ GLuint *objects; \
281
+ n = (GLsizei)RARRAY_LENINT(arg1); \
282
+ objects = ALLOC_N(GLuint,n); \
283
+ ary2cuint(arg1,objects,n); \
284
+ fptr_gl##_name_(n,objects); \
285
+ xfree(objects); \
286
+ } else { \
287
+ GLuint object; \
288
+ object = CONV_GLsizei(arg1); \
289
+ fptr_gl##_name_(1,&object); \
290
+ } \
291
+ CHECK_GLERROR_FROM("gl" #_name_); \
292
+ return Qnil; \
291
293
  }
292
294
 
293
295
  #define GL_FUNC_DELETEOBJECTS(_name_) \
294
- static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
296
+ static VALUE gl_##_name_(VALUE obj,VALUE arg1) \
295
297
  { \
296
- GLsizei n; \
297
- if (TYPE(arg1)==T_ARRAY) { \
298
- GLuint *objects; \
299
- n = (GLsizei)RARRAY_LENINT(arg1); \
300
- objects = ALLOC_N(GLuint,n); \
301
- ary2cuint(arg1,objects,n); \
302
- gl##_name_(n,objects); \
303
- xfree(objects); \
304
- } else { \
305
- GLuint object; \
306
- object = CONV_GLsizei(arg1); \
307
- gl##_name_(1,&object); \
308
- } \
309
- CHECK_GLERROR_FROM("gl" #_name_); \
310
- return Qnil; \
298
+ GLsizei n; \
299
+ if (TYPE(arg1)==T_ARRAY) { \
300
+ GLuint *objects; \
301
+ n = (GLsizei)RARRAY_LENINT(arg1); \
302
+ objects = ALLOC_N(GLuint,n); \
303
+ ary2cuint(arg1,objects,n); \
304
+ gl##_name_(n,objects); \
305
+ xfree(objects); \
306
+ } else { \
307
+ GLuint object; \
308
+ object = CONV_GLsizei(arg1); \
309
+ gl##_name_(1,&object); \
310
+ } \
311
+ CHECK_GLERROR_FROM("gl" #_name_); \
312
+ return Qnil; \
311
313
  }