danabr75-opengl 0.10.0

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. data/.autotest +29 -0
  3. data/.gemtest +0 -0
  4. data/.gitignore +6 -0
  5. data/.travis.yml +19 -0
  6. data/Gemfile +8 -0
  7. data/History.md +101 -0
  8. data/MIT-LICENSE +18 -0
  9. data/Manifest.txt +142 -0
  10. data/README.rdoc +105 -0
  11. data/Rakefile +170 -0
  12. data/danabr75-opengl.gemspec +32 -0
  13. data/examples/NeHe/NeHe.png +0 -0
  14. data/examples/NeHe/crate.png +0 -0
  15. data/examples/NeHe/glass.png +0 -0
  16. data/examples/NeHe/nehe_lesson02.rb +117 -0
  17. data/examples/NeHe/nehe_lesson03.rb +123 -0
  18. data/examples/NeHe/nehe_lesson04.rb +132 -0
  19. data/examples/NeHe/nehe_lesson05.rb +182 -0
  20. data/examples/NeHe/nehe_lesson06.rb +186 -0
  21. data/examples/NeHe/nehe_lesson07.rb +240 -0
  22. data/examples/NeHe/nehe_lesson08.rb +255 -0
  23. data/examples/NeHe/nehe_lesson09.rb +203 -0
  24. data/examples/NeHe/nehe_lesson11.rb +176 -0
  25. data/examples/NeHe/nehe_lesson12.rb +203 -0
  26. data/examples/NeHe/nehe_lesson16.rb +211 -0
  27. data/examples/NeHe/nehe_lesson19.rb +209 -0
  28. data/examples/NeHe/nehe_lesson36.rb +308 -0
  29. data/examples/NeHe/particle.png +0 -0
  30. data/examples/NeHe/star.png +0 -0
  31. data/examples/NeHe/tim.png +0 -0
  32. data/examples/OrangeBook/3Dlabs-License.txt +33 -0
  33. data/examples/OrangeBook/brick.frag +36 -0
  34. data/examples/OrangeBook/brick.rb +378 -0
  35. data/examples/OrangeBook/brick.vert +41 -0
  36. data/examples/OrangeBook/particle.frag +17 -0
  37. data/examples/OrangeBook/particle.rb +408 -0
  38. data/examples/OrangeBook/particle.vert +38 -0
  39. data/examples/README +16 -0
  40. data/examples/RedBook/aapoly.rb +143 -0
  41. data/examples/RedBook/aargb.rb +121 -0
  42. data/examples/RedBook/accanti.rb +164 -0
  43. data/examples/RedBook/accpersp.rb +217 -0
  44. data/examples/RedBook/alpha.rb +125 -0
  45. data/examples/RedBook/alpha3D.rb +160 -0
  46. data/examples/RedBook/bezcurve.rb +107 -0
  47. data/examples/RedBook/bezmesh.rb +139 -0
  48. data/examples/RedBook/checker.rb +126 -0
  49. data/examples/RedBook/clip.rb +97 -0
  50. data/examples/RedBook/colormat.rb +137 -0
  51. data/examples/RedBook/cube.rb +71 -0
  52. data/examples/RedBook/depthcue.rb +101 -0
  53. data/examples/RedBook/dof.rb +206 -0
  54. data/examples/RedBook/double.rb +107 -0
  55. data/examples/RedBook/drawf.rb +93 -0
  56. data/examples/RedBook/feedback.rb +147 -0
  57. data/examples/RedBook/fog.rb +168 -0
  58. data/examples/RedBook/font.rb +153 -0
  59. data/examples/RedBook/hello.rb +81 -0
  60. data/examples/RedBook/image.rb +139 -0
  61. data/examples/RedBook/jitter.rb +207 -0
  62. data/examples/RedBook/light.rb +157 -0
  63. data/examples/RedBook/lines.rb +130 -0
  64. data/examples/RedBook/list.rb +113 -0
  65. data/examples/RedBook/material.rb +276 -0
  66. data/examples/RedBook/mipmap.rb +158 -0
  67. data/examples/RedBook/model.rb +115 -0
  68. data/examples/RedBook/movelight.rb +134 -0
  69. data/examples/RedBook/pickdepth.rb +181 -0
  70. data/examples/RedBook/planet.rb +110 -0
  71. data/examples/RedBook/quadric.rb +160 -0
  72. data/examples/RedBook/robot.rb +117 -0
  73. data/examples/RedBook/select.rb +198 -0
  74. data/examples/RedBook/smooth.rb +97 -0
  75. data/examples/RedBook/stencil.rb +165 -0
  76. data/examples/RedBook/stroke.rb +169 -0
  77. data/examples/RedBook/surface.rb +168 -0
  78. data/examples/RedBook/teaambient.rb +134 -0
  79. data/examples/RedBook/teapots.rb +184 -0
  80. data/examples/RedBook/tess.rb +185 -0
  81. data/examples/RedBook/texbind.rb +149 -0
  82. data/examples/RedBook/texgen.rb +171 -0
  83. data/examples/RedBook/texturesurf.rb +130 -0
  84. data/examples/RedBook/varray.rb +161 -0
  85. data/examples/RedBook/wrap.rb +150 -0
  86. data/examples/misc/OGLBench.rb +338 -0
  87. data/examples/misc/anisotropic.rb +196 -0
  88. data/examples/misc/fbo_test.rb +357 -0
  89. data/examples/misc/font-glut.rb +47 -0
  90. data/examples/misc/glfwtest.rb +30 -0
  91. data/examples/misc/plane.rb +161 -0
  92. data/examples/misc/readpixel.rb +66 -0
  93. data/examples/misc/sdltest.rb +36 -0
  94. data/examples/misc/trislam.rb +829 -0
  95. data/ext/opengl/GL/gl.h +2115 -0
  96. data/ext/opengl/GL/glext.h +11770 -0
  97. data/ext/opengl/common.h +372 -0
  98. data/ext/opengl/conv.h +247 -0
  99. data/ext/opengl/extconf.rb +19 -0
  100. data/ext/opengl/fptr_struct.h +912 -0
  101. data/ext/opengl/funcdef.h +279 -0
  102. data/ext/opengl/gl-1.0-1.1.c +3345 -0
  103. data/ext/opengl/gl-1.2.c +155 -0
  104. data/ext/opengl/gl-1.3.c +447 -0
  105. data/ext/opengl/gl-1.4.c +346 -0
  106. data/ext/opengl/gl-1.5.c +225 -0
  107. data/ext/opengl/gl-2.0.c +665 -0
  108. data/ext/opengl/gl-2.1.c +57 -0
  109. data/ext/opengl/gl-3.0.c +502 -0
  110. data/ext/opengl/gl-enums.c +4853 -0
  111. data/ext/opengl/gl-enums.h +14528 -0
  112. data/ext/opengl/gl-error.c +110 -0
  113. data/ext/opengl/gl-error.h +25 -0
  114. data/ext/opengl/gl-ext-3dfx.c +27 -0
  115. data/ext/opengl/gl-ext-arb.c +880 -0
  116. data/ext/opengl/gl-ext-ati.c +41 -0
  117. data/ext/opengl/gl-ext-ext.c +885 -0
  118. data/ext/opengl/gl-ext-gremedy.c +41 -0
  119. data/ext/opengl/gl-ext-nv.c +679 -0
  120. data/ext/opengl/gl.c +265 -0
  121. data/ext/opengl/gl_buffer.c +202 -0
  122. data/ext/opengl/glimpl.c +187 -0
  123. data/ext/opengl/glimpl.h +47 -0
  124. data/ext/opengl/opengl.c +9 -0
  125. data/lib/gl.rb +1 -0
  126. data/lib/opengl.rb +79 -0
  127. data/lib/opengl/bindings_version.rb +4 -0
  128. data/lib/opengl/implementation.rb +38 -0
  129. data/lib/opengl/test_case.rb +86 -0
  130. data/test/dummy.xorg.conf +140 -0
  131. data/test/test_gl.rb +45 -0
  132. data/test/test_gl_10_11.rb +1363 -0
  133. data/test/test_gl_12.rb +71 -0
  134. data/test/test_gl_13.rb +221 -0
  135. data/test/test_gl_14.rb +218 -0
  136. data/test/test_gl_15.rb +258 -0
  137. data/test/test_gl_20.rb +417 -0
  138. data/test/test_gl_21.rb +436 -0
  139. data/test/test_gl_ext_arb.rb +508 -0
  140. data/test/test_gl_ext_ati.rb +28 -0
  141. data/test/test_gl_ext_ext.rb +608 -0
  142. data/test/test_gl_ext_gremedy.rb +29 -0
  143. data/test/test_gl_ext_nv.rb +349 -0
  144. data/test/test_glimpl.rb +23 -0
  145. data/test/test_opengl_buffer.rb +122 -0
  146. data/utils/README +6 -0
  147. data/utils/enumgen.rb +108 -0
  148. data/utils/extlistgen.rb +90 -0
  149. metadata +326 -0
@@ -0,0 +1,187 @@
1
+ #include "common.h"
2
+
3
+ #ifdef HAVE_DLFCN_H
4
+ #include <dlfcn.h>
5
+ #endif
6
+ #ifdef HAVE_WINDOWS_H
7
+ #include <windows.h>
8
+ #endif
9
+
10
+ VALUE rb_cGlimpl;
11
+
12
+ static void *gl_load_library(const char *name)
13
+ {
14
+ void *dl = NULL;
15
+
16
+ #if defined(HAVE_DLFCN_H)
17
+ dl = dlopen(name, RTLD_LAZY | RTLD_LOCAL
18
+ #if defined(RTLD_FIRST)
19
+ | RTLD_FIRST
20
+ #endif
21
+ );
22
+ if (dl == NULL)
23
+ rb_raise(rb_eLoadError,"Can't load OpenGL library %s: %s", name, dlerror());
24
+
25
+ #elif defined(HAVE_WINDOWS_H)
26
+ dl = LoadLibrary(name);
27
+ if (dl == NULL) {
28
+ char error_text[999] = "LoadLibrary() error";
29
+ FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_MAX_WIDTH_MASK,
30
+ NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
31
+ (LPTSTR)&error_text, sizeof(error_text), NULL);
32
+ rb_raise(rb_eLoadError,"Can't load OpenGL library %s: %s", name, error_text);
33
+ }
34
+ #else
35
+ #error No loading mechanism available
36
+ #endif
37
+
38
+ return dl;
39
+ }
40
+
41
+ static void *gl_load_symbol(void *dl, const char *name, int raise)
42
+ {
43
+ void *fptr = NULL;
44
+
45
+ #if defined(HAVE_DLFCN_H)
46
+ fptr = dlsym(dl, name);
47
+ if (fptr == NULL && raise)
48
+ rb_raise(rb_eNotImpError,"Function %s is not available on this system: %s",name, dlerror());
49
+
50
+ #elif defined(HAVE_WINDOWS_H)
51
+ fptr = GetProcAddress(dl, name);
52
+ if (fptr == NULL && raise){
53
+ char error_text[999] = "GetProcAddress() error";
54
+ FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_MAX_WIDTH_MASK,
55
+ NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
56
+ (LPTSTR)&error_text, sizeof(error_text), NULL);
57
+ rb_raise(rb_eNotImpError,"Function %s is not available on this system: %s",name, error_text);
58
+ }
59
+ #else
60
+ #error No loading mechanism available
61
+ #endif
62
+
63
+ return fptr;
64
+ }
65
+
66
+ static void gl_close_library(void *dl)
67
+ {
68
+ #if defined(HAVE_DLFCN_H)
69
+ dlclose(dl);
70
+ #elif defined(HAVE_WINDOWS_H)
71
+ FreeLibrary(dl);
72
+ #else
73
+ #error No loading mechanism available
74
+ #endif
75
+ }
76
+
77
+
78
+ static struct glimpl *
79
+ rb_glimpl_struct( VALUE self )
80
+ {
81
+ return DATA_PTR(self);
82
+ }
83
+
84
+ static void *load_gl_function(VALUE self, const char *name, int raise)
85
+ {
86
+ struct glimpl *this = rb_glimpl_struct(self);
87
+ void *func_ptr = NULL;
88
+
89
+ if(this->fptr_GetProcAddress){
90
+ func_ptr = this->fptr_GetProcAddress(name);
91
+ }
92
+
93
+ if(func_ptr == NULL){
94
+ func_ptr = gl_load_symbol(this->dl, name, 0);
95
+ }
96
+
97
+ if(func_ptr == NULL)
98
+ {
99
+ /* prepend a '_' for the Unix C symbol mangling convention */
100
+ char *symbol_name = ALLOC_N(char, strlen(name) + 2);
101
+ symbol_name[0] = '_';
102
+ strcpy(symbol_name + 1, name);
103
+ func_ptr = gl_load_symbol(this->dl, symbol_name, 0);
104
+ xfree(symbol_name);
105
+ }
106
+
107
+ if(func_ptr == NULL && raise == 1)
108
+ rb_raise(rb_eNotImpError,"Function %s is not available on this system",name);
109
+
110
+ return func_ptr;
111
+ }
112
+
113
+ static void
114
+ rb_glimpl_mark( struct glimpl *this )
115
+ {
116
+ int i;
117
+ rb_gc_mark(this->current_sel_buffer);
118
+ rb_gc_mark(this->current_feed_buffer);
119
+ rb_gc_mark(this->Vertex_ptr);
120
+ rb_gc_mark(this->Normal_ptr);
121
+ rb_gc_mark(this->Color_ptr);
122
+ rb_gc_mark(this->Index_ptr);
123
+ rb_gc_mark(this->TexCoord_ptr);
124
+ rb_gc_mark(this->EdgeFlag_ptr);
125
+ rb_gc_mark(this->FogCoord_ptr);
126
+ rb_gc_mark(this->SecondaryColor_ptr);
127
+ rb_gc_mark(this->error_checking);
128
+ rb_gc_mark(this->inside_begin_end);
129
+
130
+ for (i=0;i<_MAX_VERTEX_ATTRIBS;i++){
131
+ rb_gc_mark(this->VertexAttrib_ptr[i]);
132
+ }
133
+ }
134
+
135
+ static void rb_glimpl_free( struct glimpl *this )
136
+ {
137
+ if(this->dl) gl_close_library(this->dl);
138
+ this->dl = NULL;
139
+ xfree(this);
140
+ }
141
+
142
+ static VALUE
143
+ rb_glimpl_s_open(int argc, VALUE *argv, VALUE klass)
144
+ {
145
+ VALUE self;
146
+ struct glimpl *this;
147
+ VALUE dl_name;
148
+ VALUE proc_address_function;
149
+ char *p_dl_name;
150
+
151
+ rb_scan_args(argc, argv, "11", &dl_name, &proc_address_function);
152
+
153
+ p_dl_name = StringValueCStr(dl_name);
154
+
155
+ self = Data_Make_Struct( klass, struct glimpl, rb_glimpl_mark, rb_glimpl_free, this );
156
+
157
+ this->error_checking = Qtrue;
158
+ this->inside_begin_end = Qfalse;
159
+ this->load_gl_function = load_gl_function;
160
+ this->dl = gl_load_library(p_dl_name);
161
+
162
+ if( NIL_P(proc_address_function) ){
163
+ this->fptr_GetProcAddress = NULL;
164
+ } else {
165
+ char *p_proc_address_function = StringValueCStr(proc_address_function);
166
+ this->fptr_GetProcAddress = gl_load_symbol(this->dl, p_proc_address_function, 1);
167
+ }
168
+
169
+ return self;
170
+ }
171
+
172
+ static VALUE rb_glimpl_close(VALUE self)
173
+ {
174
+ struct glimpl *this = rb_glimpl_struct(self);
175
+ if(this->dl) gl_close_library(this->dl);
176
+ this->dl = NULL;
177
+ return Qnil;
178
+ }
179
+
180
+ void gl_init_glimpl(VALUE module)
181
+ {
182
+ rb_cGlimpl = rb_define_class_under(module, "Implementation", rb_cObject);
183
+
184
+ rb_undef_alloc_func(rb_cGlimpl);
185
+ rb_define_singleton_method(rb_cGlimpl, "open", rb_glimpl_s_open, -1);
186
+ rb_define_method(rb_cGlimpl, "close", rb_glimpl_close, 0);
187
+ }
@@ -0,0 +1,47 @@
1
+ #ifndef _GLIMPL_H_
2
+ #define _GLIMPL_H_
3
+
4
+ #ifndef GLFUNC_MAGIC_START
5
+ #include "fptr_struct.h"
6
+ #endif
7
+
8
+ #define GET_GLIMPL_VARIABLE(_name_) \
9
+ (((struct glimpl *)DATA_PTR(obj))->_name_)
10
+
11
+ #define SET_GLIMPL_VARIABLE(_name_,_val_) \
12
+ ((struct glimpl *)DATA_PTR(obj))->_name_ = (_val_)
13
+
14
+ /* at least GL_MAX_VERTEX_ATTRIBS - usually 16 or 32 on today's high-end cards */
15
+ #define _MAX_VERTEX_ATTRIBS 64
16
+
17
+ extern VALUE g_default_glimpl;
18
+
19
+ struct glimpl {
20
+ struct glfunc_ptrs glfuncs;
21
+
22
+ int opengl_version[2]; /* major, minor */
23
+ char *opengl_extensions;
24
+
25
+ void * (* load_gl_function)(VALUE self, const char *name,int raise);
26
+
27
+ VALUE current_feed_buffer;
28
+ VALUE current_sel_buffer;
29
+ VALUE Vertex_ptr;
30
+ VALUE Normal_ptr;
31
+ VALUE Color_ptr;
32
+ VALUE Index_ptr;
33
+ VALUE TexCoord_ptr;
34
+ VALUE EdgeFlag_ptr;
35
+ VALUE FogCoord_ptr; /* OpenGL 1.4 */
36
+ VALUE SecondaryColor_ptr; /* OpenGL 1.4 */
37
+ VALUE VertexAttrib_ptr[_MAX_VERTEX_ATTRIBS];
38
+
39
+ VALUE error_checking;
40
+ VALUE inside_begin_end;
41
+
42
+ void *dl;
43
+ void * (APIENTRY * fptr_GetProcAddress)(const char *name);
44
+ };
45
+
46
+
47
+ #endif /* _GLIMPL_H_ */
@@ -0,0 +1,9 @@
1
+ #include "common.h"
2
+
3
+ void Init_gl(VALUE);
4
+
5
+ void Init_opengl() {
6
+ VALUE module = rb_define_module("Gl");
7
+
8
+ Init_gl(module);
9
+ }
@@ -0,0 +1 @@
1
+ require 'opengl'
@@ -0,0 +1,79 @@
1
+ #
2
+ # Copyright (C) 2006 Peter McLain <peter.mclain@gmail.com>
3
+ # Copyright (C) 2007 Jan Dvorak <jan.dvorak@kraxnet.cz>
4
+ #
5
+ # This program is distributed under the terms of the MIT license.
6
+ # See the included MIT-LICENSE file for the terms of this license.
7
+ #
8
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9
+ # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
11
+ # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
12
+ # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
13
+ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
14
+ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15
+ #
16
+
17
+ # This module provides access to the GL,GLU and GLUT methods and constants
18
+ # in the way that they were available in previous versions of ruby-opengl.
19
+ #
20
+ # Thanks to Ilmari Heikkinen for a previous "reversed" version of this code,
21
+ # and to Bill Kelly for a version before that one.
22
+
23
+ begin
24
+ RUBY_VERSION =~ /(\d+.\d+)/
25
+ require "opengl/#{$1}/opengl"
26
+ rescue LoadError
27
+ require 'opengl/opengl'
28
+ end
29
+
30
+ require 'opengl/implementation'
31
+ require 'opengl/bindings_version'
32
+
33
+ module Gl
34
+ meths = Gl::Implementation.instance_methods.select{|mn| mn=~/^gl/ }
35
+ meths += %w[is_available? is_supported?
36
+ extension_available? extension_supported?
37
+ version_available? version_supported?
38
+ enable_error_checking disable_error_checking is_error_checking_enabled?
39
+ ]
40
+
41
+ meths.each do |mn|
42
+ define_singleton_method(mn) do |*args,&block|
43
+ begin
44
+ implementation.send(mn, *args, &block)
45
+ rescue
46
+ end
47
+ end
48
+ define_method(mn) do |*args,&block|
49
+ begin
50
+ implementation.send(mn, *args, &block)
51
+ rescue
52
+ end
53
+ end
54
+ private mn
55
+ end
56
+ end
57
+
58
+ # (Gl.)glVertex -> GL.Vertex
59
+ # (Gl::)GL_TRUE -> GL::TRUE
60
+ module GL
61
+ extend self
62
+ include Gl
63
+
64
+ Gl.constants.each do |cn|
65
+ n = cn.to_s.sub(/^GL_/,'')
66
+ # due to ruby naming scheme, we can't export constants with leading decimal,
67
+ # e.g. (Gl::)GL_2D would under old syntax become (GL::)2D which is illegal
68
+ next if n =~ /^[0-9]/
69
+ const_set( n, Gl.const_get( cn ) )
70
+ end
71
+
72
+ Gl.methods( false ).each do |mn|
73
+ n = mn.to_s.sub(/^gl/,'')
74
+ alias_method( n, mn )
75
+ public( n )
76
+ end
77
+ end
78
+
79
+ OpenGL = Gl
@@ -0,0 +1,4 @@
1
+ module Gl
2
+ BINDINGS_VERSION = '0.10.0'
3
+ RUBY_OPENGL_VERSION = BINDINGS_VERSION
4
+ end
@@ -0,0 +1,38 @@
1
+
2
+ module Gl
3
+ if RUBY_PLATFORM =~ /mingw|mswin/i
4
+ class ImplementationWindows < Implementation
5
+ DLPATH = "opengl32.dll"
6
+ def self.open
7
+ super(DLPATH, "wglGetProcAddress")
8
+ end
9
+ end
10
+
11
+ Gl::DefaultImplementation = ImplementationWindows
12
+
13
+ elsif RUBY_PLATFORM =~ /darwin/i
14
+ class ImplementationOSX < Implementation
15
+ DLPATH = "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"
16
+ def self.open
17
+ super(DLPATH)
18
+ end
19
+ end
20
+
21
+ Gl::DefaultImplementation = ImplementationOSX
22
+
23
+ else
24
+ class ImplementationGLX < Implementation
25
+ DLPATH = "libGL.so"
26
+ def self.open
27
+ begin
28
+ super(DLPATH, "glXGetProcAddress")
29
+ rescue NotImplementedError
30
+ super(DLPATH, "glXGetProcAddressARB")
31
+ end
32
+ end
33
+ end
34
+
35
+ Gl::DefaultImplementation = ImplementationGLX
36
+
37
+ end
38
+ end
@@ -0,0 +1,86 @@
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
+ require 'rubygems'
17
+ begin
18
+ gem 'minitest'
19
+ rescue Gem::LoadError
20
+ end
21
+
22
+ require 'minitest/autorun'
23
+ require 'gl'
24
+ require 'glu'
25
+ require 'glut'
26
+ require 'matrix'
27
+
28
+ include Gl
29
+ include Glu
30
+ include Glut
31
+
32
+ Gl.enable_error_checking
33
+
34
+ module OpenGL; end
35
+
36
+ class OpenGL::TestCase < MiniTest::Unit::TestCase
37
+
38
+ WINDOW_SIZE = 512
39
+
40
+ glutInit
41
+ glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA | GLUT_STENCIL |
42
+ GLUT_ACCUM | GLUT_ALPHA)
43
+
44
+ def setup
45
+ glutInitWindowPosition 1, 1
46
+ glutInitWindowSize WINDOW_SIZE, WINDOW_SIZE
47
+ @window = glutCreateWindow "test"
48
+
49
+ glPushAttrib GL_ALL_ATTRIB_BITS
50
+ glPushClientAttrib GL_CLIENT_ALL_ATTRIB_BITS
51
+ glMatrixMode GL_MODELVIEW
52
+ glLoadIdentity
53
+ glMatrixMode GL_PROJECTION
54
+ glLoadIdentity
55
+
56
+ glClearColor 0, 0, 0, 0
57
+ glClear GL_COLOR_BUFFER_BIT
58
+ end
59
+
60
+ def teardown
61
+ glPopAttrib
62
+ glPopClientAttrib
63
+ glRenderMode GL_RENDER
64
+
65
+ # in case there is an GL error that escaped error checking routines ...
66
+ error = glGetError
67
+ assert_equal 0, error, gluErrorString(error)
68
+
69
+ glutDestroyWindow @window
70
+ end
71
+
72
+ def assert_each_in_delta expected, actual, epsilon = 0.01
73
+ assert_equal expected.length, actual.length, 'array lengths do not match'
74
+
75
+ expected.flatten.zip(actual.flatten).each_with_index do |(e, a), i|
76
+ assert_in_delta e, a, epsilon, "element #{i}"
77
+ end
78
+ end
79
+
80
+ def supported? funcs
81
+ Array(funcs).each do |name| # convert to array if it isn't already
82
+ skip "#{name} is not supported" unless Gl.is_available? name
83
+ end
84
+ end
85
+
86
+ end