glu 8.1.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.
- checksums.yaml +7 -0
- data/.autotest +29 -0
- data/.gemtest +0 -0
- data/.gitignore +6 -0
- data/History.rdoc +3 -0
- data/MIT-LICENSE +18 -0
- data/Manifest.txt +17 -0
- data/README.rdoc +36 -0
- data/Rakefile +48 -0
- data/ext/glu/common.h +218 -0
- data/ext/glu/conv.h +145 -0
- data/ext/glu/extconf.rb +34 -0
- data/ext/glu/glu-enums.c +164 -0
- data/ext/glu/glu-enums.h +463 -0
- data/ext/glu/glu.c +1534 -0
- data/lib/glu.rb +25 -0
- data/lib/glu/dummy.rb +2 -0
- data/test/test_glu.rb +310 -0
- metadata +129 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6b3da7761fa955e769b6300af459d27e5b5f0457
|
4
|
+
data.tar.gz: 3f5a02de19bf9d2e82efa73233f1b49dc94b8f4f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ef209e8f452de58fa14982d4fa910dd3cb08b1740ef4671e991b8dc4d0ac72b98dc9172842cf273ce05d99dd910474c52632e5ab43914e25c4ca6d3c54c60b54
|
7
|
+
data.tar.gz: d173734ada37fa4ebbae1a2a94c093a7fb5592b25803edaeebcaf158128395a51d2a362aab19200ad249f444e990d7ca51ddf8b9f2164359505346a579afc743
|
data/.autotest
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'autotest/restart'
|
2
|
+
|
3
|
+
Autotest.add_hook :initialize do |at|
|
4
|
+
at.add_exception /\.git/
|
5
|
+
at.add_exception /doc/
|
6
|
+
at.add_exception /examples/
|
7
|
+
at.add_exception /utils/
|
8
|
+
at.add_exception /website/
|
9
|
+
|
10
|
+
at.add_mapping(/^lib\/.*(\.bundle|so|dll)$/) do |filename, match|
|
11
|
+
possible = File.basename(filename, match[1])
|
12
|
+
at.files_matching %r%^test/test_#{possible}%
|
13
|
+
end
|
14
|
+
|
15
|
+
def at.path_to_classname s
|
16
|
+
sep = File::SEPARATOR
|
17
|
+
n = s.sub(/^test#{sep}test_(.*)\.rb/, '\1')
|
18
|
+
c = if n =~ /^(glu?)_?(.*)/ then
|
19
|
+
"#{$1.capitalize}#{$2.split(/_|(\d+)/).map { |seg| seg.capitalize }.join}"
|
20
|
+
end
|
21
|
+
|
22
|
+
"Test#{c}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
Autotest.add_hook :run_command do |at|
|
27
|
+
at.unit_diff = 'cat'
|
28
|
+
system Gem.ruby, Gem.bin_path('rake', 'rake'), 'compile'
|
29
|
+
end
|
data/.gemtest
ADDED
File without changes
|
data/.gitignore
ADDED
data/History.rdoc
ADDED
data/MIT-LICENSE
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
Permission is hereby granted, free of charge, to any person obtaining a
|
3
|
+
copy of this software and associated documentation files (the "Software"),
|
4
|
+
to deal in the Software without restriction, including without limitation
|
5
|
+
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
6
|
+
and/or sell copies of the Software, and to permit persons to whom the
|
7
|
+
Software is furnished to do so, subject to the following conditions:
|
8
|
+
|
9
|
+
The above copyright notice and this permission notice shall be included in
|
10
|
+
all copies or substantial portions of the Software.
|
11
|
+
|
12
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
14
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
15
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
16
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
17
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
18
|
+
DEALINGS IN THE SOFTWARE.
|
data/Manifest.txt
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
.autotest
|
2
|
+
.gemtest
|
3
|
+
.gitignore
|
4
|
+
History.rdoc
|
5
|
+
MIT-LICENSE
|
6
|
+
Manifest.txt
|
7
|
+
README.rdoc
|
8
|
+
Rakefile
|
9
|
+
ext/glu/common.h
|
10
|
+
ext/glu/conv.h
|
11
|
+
ext/glu/extconf.rb
|
12
|
+
ext/glu/glu-enums.c
|
13
|
+
ext/glu/glu-enums.h
|
14
|
+
ext/glu/glu.c
|
15
|
+
lib/glu.rb
|
16
|
+
lib/glu/dummy.rb
|
17
|
+
test/test_glu.rb
|
data/README.rdoc
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
= glu
|
2
|
+
|
3
|
+
== Description
|
4
|
+
|
5
|
+
Glu bindings for the opengl gem, split into a separate gem because of Glu deprecation.
|
6
|
+
|
7
|
+
== License
|
8
|
+
|
9
|
+
(The MIT License)
|
10
|
+
|
11
|
+
Copyright (c) Blaž Hrastnik (current maintainer)
|
12
|
+
Copyright (c) Eric Hodel (current maintainer)
|
13
|
+
Copyright (c) Alain Hoang (previous maintainer)
|
14
|
+
Copyright (c) Jan Dvorak (contributor)
|
15
|
+
Copyright (c) Minh Thu Vo (contributor)
|
16
|
+
Copyright (c) James Adam (contributor)
|
17
|
+
|
18
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
19
|
+
a copy of this software and associated documentation files (the
|
20
|
+
'Software'), to deal in the Software without restriction, including
|
21
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
22
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
23
|
+
permit persons to whom the Software is furnished to do so, subject to
|
24
|
+
the following conditions:
|
25
|
+
|
26
|
+
The above copyright notice and this permission notice shall be
|
27
|
+
included in all copies or substantial portions of the Software.
|
28
|
+
|
29
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
30
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
31
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
32
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
33
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
34
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
35
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
36
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
#-*-ruby-*-
|
2
|
+
#
|
3
|
+
# Copyright (C) 2006 John M. Gabriele <jmg3000@gmail.com>
|
4
|
+
# Copyright (C) Eric Hodel <drbrain@segment7.net>
|
5
|
+
#
|
6
|
+
# This program is distributed under the terms of the MIT license.
|
7
|
+
# See the included MIT-LICENSE file for the terms of this license.
|
8
|
+
#
|
9
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
10
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
11
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
12
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
13
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
14
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
15
|
+
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
16
|
+
|
17
|
+
require 'hoe'
|
18
|
+
require 'rake/extensiontask'
|
19
|
+
|
20
|
+
hoe = Hoe.spec 'glu' do
|
21
|
+
developer 'Eric Hodel', 'drbrain@segment7.net'
|
22
|
+
developer 'Lars Kanis', ''
|
23
|
+
developer 'Blaž Hrastnik', 'speed.the.bboy@gmail.com'
|
24
|
+
developer 'Alain Hoang', ''
|
25
|
+
developer 'Jan Dvorak', ''
|
26
|
+
developer 'Minh Thu Vo', ''
|
27
|
+
developer 'James Adam', ''
|
28
|
+
|
29
|
+
self.readme_file = 'README.rdoc'
|
30
|
+
self.history_file = 'History.rdoc'
|
31
|
+
self.extra_rdoc_files = FileList['*.rdoc']
|
32
|
+
|
33
|
+
extra_dev_deps << ['rake-compiler', '~> 0.7', '>= 0.7.9']
|
34
|
+
|
35
|
+
self.spec_extras = {
|
36
|
+
:extensions => %w[ext/glu/extconf.rb],
|
37
|
+
:required_ruby_version => '>= 1.9.2',
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
Rake::ExtensionTask.new 'glu', hoe.spec do |ext|
|
42
|
+
ext.lib_dir = 'lib/glu'
|
43
|
+
|
44
|
+
ext.cross_compile = true
|
45
|
+
ext.cross_platform = ['i386-mingw32']
|
46
|
+
end
|
47
|
+
|
48
|
+
task :test => :compile
|
data/ext/glu/common.h
ADDED
@@ -0,0 +1,218 @@
|
|
1
|
+
/*
|
2
|
+
* Last edit by previous maintainer:
|
3
|
+
* 2000/01/06 16:37:43, kusano
|
4
|
+
*
|
5
|
+
* Copyright (C) 1999 - 2005 Yoshi <yoshi@giganet.net>
|
6
|
+
* Copyright (C) 2006 John M. Gabriele <jmg3000@gmail.com>
|
7
|
+
* Copyright (C) 2007 James Adam <james@lazyatom.com>
|
8
|
+
* Copyright (C) 2007 Jan Dvorak <jan.dvorak@kraxnet.cz>
|
9
|
+
*
|
10
|
+
* This program is distributed under the terms of the MIT license.
|
11
|
+
* See the included MIT-LICENSE file for the terms of this license.
|
12
|
+
*
|
13
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
14
|
+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
15
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
16
|
+
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
17
|
+
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
18
|
+
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
19
|
+
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
20
|
+
*/
|
21
|
+
|
22
|
+
#ifndef _COMMON_H_
|
23
|
+
#define _COMMON_H_
|
24
|
+
|
25
|
+
#include <ruby.h>
|
26
|
+
#include "extconf.h"
|
27
|
+
|
28
|
+
#ifdef HAVE_OPENGL_GLU_H
|
29
|
+
#include <OpenGL/glu.h>
|
30
|
+
#endif
|
31
|
+
|
32
|
+
#ifdef HAVE_GL_GLU_H
|
33
|
+
#include <GL/glu.h>
|
34
|
+
#endif
|
35
|
+
|
36
|
+
#include "glu-enums.h"
|
37
|
+
#include "conv.h"
|
38
|
+
|
39
|
+
#ifndef CALLBACK
|
40
|
+
#define CALLBACK
|
41
|
+
#endif
|
42
|
+
|
43
|
+
#ifdef HAVE_WINDOWS_H
|
44
|
+
#define DLLEXPORT __declspec(dllexport)
|
45
|
+
#else
|
46
|
+
#define DLLEXPORT
|
47
|
+
#endif
|
48
|
+
|
49
|
+
/* these two macros are cast to a 32 bit type in the places they are used */
|
50
|
+
#ifndef RARRAY_LENINT
|
51
|
+
#define RARRAY_LENINT RARRAY_LEN
|
52
|
+
#endif
|
53
|
+
|
54
|
+
/* -------------------------------------------------------------------- */
|
55
|
+
|
56
|
+
/* gets number of components for given format */
|
57
|
+
static inline int glformat_size(GLenum format)
|
58
|
+
{
|
59
|
+
switch(format)
|
60
|
+
{
|
61
|
+
case GL_COLOR_INDEX:
|
62
|
+
case GL_RED:
|
63
|
+
case GL_GREEN:
|
64
|
+
case GL_BLUE:
|
65
|
+
case GL_ALPHA:
|
66
|
+
case GL_RED_INTEGER_EXT:
|
67
|
+
case GL_GREEN_INTEGER_EXT:
|
68
|
+
case GL_BLUE_INTEGER_EXT:
|
69
|
+
case GL_ALPHA_INTEGER_EXT:
|
70
|
+
case GL_STENCIL_INDEX:
|
71
|
+
case GL_DEPTH_COMPONENT:
|
72
|
+
case GL_LUMINANCE:
|
73
|
+
case GL_LUMINANCE_INTEGER_EXT:
|
74
|
+
return 1;
|
75
|
+
|
76
|
+
case GL_LUMINANCE_ALPHA:
|
77
|
+
case GL_LUMINANCE_ALPHA_INTEGER_EXT:
|
78
|
+
case GL_422_EXT:
|
79
|
+
case GL_422_REV_EXT:
|
80
|
+
case GL_422_AVERAGE_EXT:
|
81
|
+
case GL_422_REV_AVERAGE_EXT:
|
82
|
+
case GL_YCRCB_422_SGIX:
|
83
|
+
case GL_YCBCR_422_APPLE:
|
84
|
+
case GL_YCBCR_MESA:
|
85
|
+
case GL_DEPTH_STENCIL_NV:
|
86
|
+
case GL_HILO_NV:
|
87
|
+
case GL_DSDT_NV:
|
88
|
+
case GL_DUDV_ATI:
|
89
|
+
case GL_DU8DV8_ATI:
|
90
|
+
case GL_FORMAT_SUBSAMPLE_24_24_OML:
|
91
|
+
return 2;
|
92
|
+
|
93
|
+
case GL_RGB:
|
94
|
+
case GL_RGB_INTEGER_EXT:
|
95
|
+
case GL_BGR_EXT:
|
96
|
+
case GL_BGR_INTEGER_EXT:
|
97
|
+
case GL_YCRCB_444_SGIX:
|
98
|
+
case GL_DSDT_MAG_NV:
|
99
|
+
case GL_FORMAT_SUBSAMPLE_244_244_OML:
|
100
|
+
return 3;
|
101
|
+
|
102
|
+
case GL_RGBA:
|
103
|
+
case GL_RGBA_INTEGER_EXT:
|
104
|
+
case GL_BGRA_EXT:
|
105
|
+
case GL_BGRA_INTEGER_EXT:
|
106
|
+
case GL_ABGR_EXT:
|
107
|
+
case GL_CMYK_EXT:
|
108
|
+
case GL_DSDT_MAG_VIB_NV:
|
109
|
+
return 4;
|
110
|
+
|
111
|
+
case GL_CMYKA_EXT:
|
112
|
+
return 5;
|
113
|
+
|
114
|
+
/* GL spec permits passing direct format size instead of enum (now obsolete) */
|
115
|
+
case 1:
|
116
|
+
case 2:
|
117
|
+
case 3:
|
118
|
+
case 4:
|
119
|
+
return format;
|
120
|
+
|
121
|
+
default:
|
122
|
+
rb_raise(rb_eArgError, "Unknown GL format enum %i",format);
|
123
|
+
return -1; /* not reached */
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
/* computes unit (pixel) size for given type and format */
|
128
|
+
static inline int gltype_glformat_unit_size(GLenum type,GLenum format)
|
129
|
+
{
|
130
|
+
unsigned int format_size;
|
131
|
+
|
132
|
+
format_size = glformat_size(format);
|
133
|
+
|
134
|
+
switch(type)
|
135
|
+
{
|
136
|
+
case GL_BYTE:
|
137
|
+
case GL_UNSIGNED_BYTE:
|
138
|
+
case GL_BITMAP:
|
139
|
+
return 1*format_size;
|
140
|
+
|
141
|
+
case GL_SHORT:
|
142
|
+
case GL_UNSIGNED_SHORT:
|
143
|
+
case GL_HALF_FLOAT_ARB:
|
144
|
+
return 2*format_size;
|
145
|
+
|
146
|
+
case GL_INT:
|
147
|
+
case GL_UNSIGNED_INT:
|
148
|
+
case GL_FLOAT:
|
149
|
+
return 4*format_size;
|
150
|
+
|
151
|
+
/* in packed formats all components are packed into/unpacked from single datatype,
|
152
|
+
so number of components(format_size) doesn't matter for total size calculation */
|
153
|
+
case GL_UNSIGNED_BYTE_3_3_2:
|
154
|
+
case GL_UNSIGNED_BYTE_2_3_3_REV:
|
155
|
+
return 1;
|
156
|
+
|
157
|
+
case GL_UNSIGNED_SHORT_5_6_5:
|
158
|
+
case GL_UNSIGNED_SHORT_5_6_5_REV:
|
159
|
+
case GL_UNSIGNED_SHORT_4_4_4_4:
|
160
|
+
case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
161
|
+
case GL_UNSIGNED_SHORT_5_5_5_1:
|
162
|
+
case GL_UNSIGNED_SHORT_1_5_5_5_REV:
|
163
|
+
case GL_UNSIGNED_SHORT_8_8_APPLE:
|
164
|
+
case GL_UNSIGNED_SHORT_8_8_REV_APPLE:
|
165
|
+
return 2;
|
166
|
+
|
167
|
+
case GL_UNSIGNED_INT_8_8_8_8:
|
168
|
+
case GL_UNSIGNED_INT_8_8_8_8_REV:
|
169
|
+
case GL_UNSIGNED_INT_10_10_10_2:
|
170
|
+
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
171
|
+
case GL_UNSIGNED_INT_24_8_NV:
|
172
|
+
case GL_UNSIGNED_INT_S8_S8_8_8_NV:
|
173
|
+
case GL_UNSIGNED_INT_8_8_S8_S8_REV_NV:
|
174
|
+
case GL_UNSIGNED_INT_10F_11F_11F_REV_EXT:
|
175
|
+
case GL_UNSIGNED_INT_5_9_9_9_REV_EXT:
|
176
|
+
case GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV:
|
177
|
+
return 4;
|
178
|
+
|
179
|
+
default:
|
180
|
+
rb_raise(rb_eArgError, "Unknown GL type enum %i",type);
|
181
|
+
return -1; /* not reached */
|
182
|
+
}
|
183
|
+
}
|
184
|
+
|
185
|
+
static inline int GetDataSize(GLenum type,GLenum format,int num)
|
186
|
+
{
|
187
|
+
int size;
|
188
|
+
int unit_size;
|
189
|
+
|
190
|
+
unit_size = gltype_glformat_unit_size(type,format);
|
191
|
+
|
192
|
+
if (type==GL_BITMAP)
|
193
|
+
size = unit_size*(num/8); /* FIXME account for alignment */
|
194
|
+
else
|
195
|
+
size = unit_size*num;
|
196
|
+
|
197
|
+
return size;
|
198
|
+
}
|
199
|
+
|
200
|
+
/* Checks if data size of 'data' string confirms to passed format values */
|
201
|
+
/* 'num' is number of elements, each of size 'format' * 'type' */
|
202
|
+
static inline void CheckDataSize(GLenum type,GLenum format,int num,VALUE data)
|
203
|
+
{
|
204
|
+
int size;
|
205
|
+
|
206
|
+
size = GetDataSize(type,format,num);
|
207
|
+
|
208
|
+
if (RSTRING_LEN(data) < size)
|
209
|
+
rb_raise(rb_eArgError, "Length of specified data doesn't correspond to format and type parameters passed. Calculated length: %i",size);
|
210
|
+
}
|
211
|
+
|
212
|
+
/* -------------------------------------------------------------------- */
|
213
|
+
static inline VALUE allocate_buffer_with_string( long size )
|
214
|
+
{
|
215
|
+
return rb_str_new(NULL, size);
|
216
|
+
}
|
217
|
+
|
218
|
+
#endif
|
data/ext/glu/conv.h
ADDED
@@ -0,0 +1,145 @@
|
|
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
|
+
/* Functions and macros for datatype conversion between Ruby and C */
|
17
|
+
|
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).
|
28
|
+
*/
|
29
|
+
|
30
|
+
#if HAVE_STRUCT_RFLOAT_FLOAT_VALUE
|
31
|
+
#define FLOAT_VAL_ACCESS(val) RFLOAT(val)->float_value
|
32
|
+
#else
|
33
|
+
#define FLOAT_VAL_ACCESS(val) RFLOAT(val)->value
|
34
|
+
#endif
|
35
|
+
|
36
|
+
/* For conversion between ruby and GL boolean values */
|
37
|
+
#define GLBOOL2RUBY(x) \
|
38
|
+
(x) == GL_TRUE ? Qtrue : ((x)==GL_FALSE ? Qfalse : INT2NUM((x)))
|
39
|
+
|
40
|
+
#define RUBYBOOL2GL(x) \
|
41
|
+
(x) == Qtrue ? GL_TRUE : GL_FALSE
|
42
|
+
|
43
|
+
#define cond_GLBOOL2RUBY_FUNC(_name_,_type_,_conv_) \
|
44
|
+
static inline VALUE _name_(GLenum pname,_type_ value) \
|
45
|
+
{ \
|
46
|
+
switch (pname) { \
|
47
|
+
case GL_DELETE_STATUS: \
|
48
|
+
case GL_LINK_STATUS: \
|
49
|
+
case GL_VALIDATE_STATUS: \
|
50
|
+
case GL_COMPILE_STATUS: \
|
51
|
+
case GL_MINMAX_SINK: \
|
52
|
+
case GL_HISTOGRAM_SINK: \
|
53
|
+
case GL_COORD_REPLACE: \
|
54
|
+
case GL_TEXTURE_COMPRESSED: \
|
55
|
+
case GL_GENERATE_MIPMAP: \
|
56
|
+
case GL_TEXTURE_RESIDENT: \
|
57
|
+
case GL_BUFFER_MAPPED: \
|
58
|
+
case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: \
|
59
|
+
case GL_VERTEX_ATTRIB_ARRAY_ENABLED: \
|
60
|
+
case GL_QUERY_RESULT_AVAILABLE: \
|
61
|
+
case GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB: \
|
62
|
+
case GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT: \
|
63
|
+
case GL_FENCE_STATUS_NV: \
|
64
|
+
case GL_TEXTURE_FLOAT_COMPONENTS_NV: \
|
65
|
+
case GL_SHADER_CONSISTENT_NV: \
|
66
|
+
case GL_TEXTURE_COMPARE_SGIX: \
|
67
|
+
case GLU_TESS_BOUNDARY_ONLY: \
|
68
|
+
case GLU_CULLING: \
|
69
|
+
case GLU_AUTO_LOAD_MATRIX: \
|
70
|
+
return GLBOOL2RUBY(value); \
|
71
|
+
default: \
|
72
|
+
return _conv_(value); \
|
73
|
+
} \
|
74
|
+
}
|
75
|
+
|
76
|
+
cond_GLBOOL2RUBY_FUNC(cond_GLBOOL2RUBY,GLint,INT2NUM)
|
77
|
+
cond_GLBOOL2RUBY_FUNC(cond_GLBOOL2RUBY_U,GLuint,UINT2NUM)
|
78
|
+
cond_GLBOOL2RUBY_FUNC(cond_GLBOOL2RUBY_LL,GLint64EXT,LL2NUM)
|
79
|
+
cond_GLBOOL2RUBY_FUNC(cond_GLBOOL2RUBY_ULL,GLuint64EXT,ULL2NUM)
|
80
|
+
cond_GLBOOL2RUBY_FUNC(cond_GLBOOL2RUBY_F,GLfloat,rb_float_new)
|
81
|
+
cond_GLBOOL2RUBY_FUNC(cond_GLBOOL2RUBY_D,GLdouble,rb_float_new)
|
82
|
+
|
83
|
+
|
84
|
+
/* For conversion between ruby array (or object that can be converted to
|
85
|
+
* array) and C array.
|
86
|
+
*
|
87
|
+
* The C array has to be preallocated by calling function. */
|
88
|
+
#define ARY2CTYPE(_type_,_convert_) \
|
89
|
+
static inline long ary2c##_type_( arg, cary, maxlen ) \
|
90
|
+
VALUE arg; \
|
91
|
+
GL##_type_ cary[]; \
|
92
|
+
long maxlen; \
|
93
|
+
{ \
|
94
|
+
long i; \
|
95
|
+
VALUE ary = rb_Array(arg); \
|
96
|
+
if (maxlen < 1) \
|
97
|
+
maxlen = RARRAY_LEN(ary); \
|
98
|
+
else \
|
99
|
+
maxlen = maxlen < RARRAY_LEN(ary) ? maxlen : RARRAY_LEN(ary); \
|
100
|
+
for (i=0; i < maxlen; i++) \
|
101
|
+
cary[i] = (GL##_type_)_convert_(rb_ary_entry(ary,i)); \
|
102
|
+
return i; \
|
103
|
+
}
|
104
|
+
|
105
|
+
ARY2CTYPE(int,NUM2INT)
|
106
|
+
ARY2CTYPE(uint,NUM2UINT)
|
107
|
+
ARY2CTYPE(byte,NUM2INT)
|
108
|
+
ARY2CTYPE(ubyte,NUM2INT)
|
109
|
+
ARY2CTYPE(short,NUM2INT)
|
110
|
+
ARY2CTYPE(ushort,NUM2INT)
|
111
|
+
ARY2CTYPE(boolean,GLBOOL2RUBY)
|
112
|
+
ARY2CTYPE(float,NUM2DBL)
|
113
|
+
ARY2CTYPE(double,NUM2DBL)
|
114
|
+
|
115
|
+
#define ary2cflt ary2cfloat
|
116
|
+
#define ary2cdbl ary2cdouble
|
117
|
+
|
118
|
+
#undef ARY2CTYPE
|
119
|
+
|
120
|
+
/* Converts either array or object responding to #to_a to C-style array */
|
121
|
+
#define ARY2CMAT(_type_) \
|
122
|
+
static inline void ary2cmat##_type_(rary, cary, cols, rows) \
|
123
|
+
VALUE rary; \
|
124
|
+
_type_ cary[]; \
|
125
|
+
int cols,rows; \
|
126
|
+
{ \
|
127
|
+
int i; \
|
128
|
+
\
|
129
|
+
rary = rb_Array(rary); \
|
130
|
+
rary = rb_funcall(rary,rb_intern("flatten"),0); \
|
131
|
+
\
|
132
|
+
if (RARRAY_LEN(rary) != cols*rows) \
|
133
|
+
rb_raise(rb_eArgError, "passed array/matrix must have %i*%i elements",cols,rows); \
|
134
|
+
\
|
135
|
+
for (i=0; i < cols*rows; i++) \
|
136
|
+
cary[i] = (_type_) NUM2DBL(rb_ary_entry(rary,i)); \
|
137
|
+
}
|
138
|
+
|
139
|
+
ARY2CMAT(double)
|
140
|
+
ARY2CMAT(float)
|
141
|
+
#undef ARY2CMAT
|
142
|
+
|
143
|
+
#define EMPTY
|
144
|
+
#define FREE(_x_) xfree(_x_);
|
145
|
+
|