ruby-opengl 0.33.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.
@@ -0,0 +1,5152 @@
1
+ /*
2
+ * Copyright (C) 1999 - 2005 Yoshi <yoshi@giganet.net>
3
+ * Copyright (C) 2006 John M. Gabriele <jmg3000@gmail.com>
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
+ #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
+ #include "../common/rbogl.h"
26
+ #include "../common/gl-enums.h"
27
+
28
+ #ifndef MAX
29
+ #define MAX(a, b) (((a) > (b)) ? (a) : (b))
30
+ #endif
31
+
32
+ /* OpenGL 1.0 + 1.1 functions */
33
+
34
+ static VALUE
35
+ gl_NewList(obj,arg1,arg2)
36
+ VALUE obj,arg1,arg2;
37
+ {
38
+ GLuint list;
39
+ GLenum mode;
40
+ list = (GLuint)NUM2INT(arg1);
41
+ mode = (GLenum)NUM2INT(arg2);
42
+ glNewList(list,mode);
43
+ return Qnil;
44
+ }
45
+
46
+ static VALUE
47
+ gl_EndList(obj)
48
+ VALUE obj;
49
+ {
50
+ glEndList();
51
+ return Qnil;
52
+ }
53
+
54
+ static VALUE
55
+ gl_CallList(obj,arg1)
56
+ VALUE obj,arg1;
57
+ {
58
+ GLuint list;
59
+ list = (GLuint)NUM2INT(arg1);
60
+ glCallList(list);
61
+ return Qnil;
62
+ }
63
+
64
+ static VALUE
65
+ gl_CallLists(obj,arg1)
66
+ VALUE obj,arg1;
67
+ {
68
+ GLsizei n;
69
+ GLenum type;
70
+ GLvoid *lists;
71
+ if (TYPE(arg1) == T_STRING) {
72
+ type = GL_BYTE;
73
+ lists = RSTRING(arg1)->ptr;
74
+ n = RSTRING(arg1)->len;
75
+ } else if (TYPE(arg1) == T_ARRAY) {
76
+ type = GL_INT;
77
+ lists = ALLOC_N(int, RARRAY(arg1)->len);
78
+ n = ary2cint(arg1,lists,0);
79
+ } else {
80
+ rb_raise(rb_eArgError,"GL.CallLists wrong arguments");
81
+ return Qnil; /* not reached */
82
+ }
83
+ glCallLists(n, type, lists);
84
+ if (type == GL_INT) xfree(lists);
85
+ return Qnil;
86
+ }
87
+
88
+ static VALUE
89
+ gl_DeleteLists(obj,arg1,arg2)
90
+ VALUE obj,arg1,arg2;
91
+ {
92
+ GLuint list;
93
+ GLsizei range;
94
+ list = (GLuint)NUM2INT(arg1);
95
+ range = (GLsizei)NUM2INT(arg2);
96
+ glDeleteLists(list,range);
97
+ return Qnil;
98
+ }
99
+
100
+ static VALUE
101
+ gl_GenLists(obj,arg1)
102
+ VALUE obj,arg1;
103
+ {
104
+ GLsizei range;
105
+ GLuint ret;
106
+ range = (GLsizei)NUM2INT(arg1);
107
+ ret = glGenLists(range);
108
+ return INT2NUM(ret);
109
+ }
110
+
111
+ static VALUE
112
+ gl_ListBase(obj,arg1)
113
+ VALUE obj,arg1;
114
+ {
115
+ GLuint base;
116
+ base = (GLuint)NUM2INT(arg1);
117
+ glListBase(base);
118
+ return Qnil;
119
+ }
120
+
121
+ static VALUE
122
+ gl_Begin(obj,arg1)
123
+ VALUE obj,arg1;
124
+ {
125
+ GLenum mode;
126
+ mode = (GLenum)NUM2INT(arg1);
127
+ glBegin(mode);
128
+ return Qnil;
129
+ }
130
+
131
+ static VALUE
132
+ gl_Bitmap(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
133
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
134
+ {
135
+ GLsizei width;
136
+ GLsizei height;
137
+ GLfloat xorig;
138
+ GLfloat yorig;
139
+ GLfloat xmove;
140
+ GLfloat ymove;
141
+ const GLubyte *bitmap;
142
+ width = (GLsizei)NUM2INT(arg1);
143
+ height = (GLsizei)NUM2INT(arg2);
144
+ xorig = (GLfloat)NUM2DBL(arg3);
145
+ yorig = (GLfloat)NUM2DBL(arg4);
146
+ xmove = (GLfloat)NUM2DBL(arg5);
147
+ ymove = (GLfloat)NUM2DBL(arg6);
148
+ if (TYPE(arg7) != T_STRING)
149
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(arg7)));
150
+ if (RSTRING(arg7)->len < (width * height / 8))
151
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg7)->len);
152
+ bitmap = (const GLubyte*)RSTRING(arg7)->ptr;
153
+ glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap);
154
+ return Qnil;
155
+ }
156
+
157
+ static VALUE
158
+ gl_Color3b(obj,arg1,arg2,arg3)
159
+ VALUE obj,arg1,arg2,arg3;
160
+ {
161
+ GLbyte red;
162
+ GLbyte green;
163
+ GLbyte blue;
164
+ red = (GLbyte)NUM2INT(arg1);
165
+ green = (GLbyte)NUM2INT(arg2);
166
+ blue = (GLbyte)NUM2INT(arg3);
167
+ glColor3b(red,green,blue);
168
+ return Qnil;
169
+ }
170
+
171
+ static VALUE
172
+ gl_Color3d(obj,arg1,arg2,arg3)
173
+ VALUE obj,arg1,arg2,arg3;
174
+ {
175
+ GLdouble red;
176
+ GLdouble green;
177
+ GLdouble blue;
178
+ red = (GLdouble)NUM2DBL(arg1);
179
+ green = (GLdouble)NUM2DBL(arg2);
180
+ blue = (GLdouble)NUM2DBL(arg3);
181
+ glColor3d(red,green,blue);
182
+ return Qnil;
183
+ }
184
+
185
+ static VALUE
186
+ gl_Color3f(obj,arg1,arg2,arg3)
187
+ VALUE obj,arg1,arg2,arg3;
188
+ {
189
+ GLfloat red;
190
+ GLfloat green;
191
+ GLfloat blue;
192
+ red = (GLfloat)NUM2DBL(arg1);
193
+ green = (GLfloat)NUM2DBL(arg2);
194
+ blue = (GLfloat)NUM2DBL(arg3);
195
+ glColor3f(red,green,blue);
196
+ return Qnil;
197
+ }
198
+
199
+ static VALUE
200
+ gl_Color3i(obj,arg1,arg2,arg3)
201
+ VALUE obj,arg1,arg2,arg3;
202
+ {
203
+ GLint red;
204
+ GLint green;
205
+ GLint blue;
206
+ red = (GLint)NUM2INT(arg1);
207
+ green = (GLint)NUM2INT(arg2);
208
+ blue = (GLint)NUM2INT(arg3);
209
+ glColor3i(red,green,blue);
210
+ return Qnil;
211
+ }
212
+
213
+ static VALUE
214
+ gl_Color3s(obj,arg1,arg2,arg3)
215
+ VALUE obj,arg1,arg2,arg3;
216
+ {
217
+ GLshort red;
218
+ GLshort green;
219
+ GLshort blue;
220
+ red = (GLshort)NUM2INT(arg1);
221
+ green = (GLshort)NUM2INT(arg2);
222
+ blue = (GLshort)NUM2INT(arg3);
223
+ glColor3s(red,green,blue);
224
+ return Qnil;
225
+ }
226
+
227
+ static VALUE
228
+ gl_Color3ub(obj,arg1,arg2,arg3)
229
+ VALUE obj,arg1,arg2,arg3;
230
+ {
231
+ GLubyte red;
232
+ GLubyte green;
233
+ GLubyte blue;
234
+ red = (GLubyte)NUM2INT(arg1);
235
+ green = (GLubyte)NUM2INT(arg2);
236
+ blue = (GLubyte)NUM2INT(arg3);
237
+ glColor3ub(red,green,blue);
238
+ return Qnil;
239
+ }
240
+
241
+ static VALUE
242
+ gl_Color3ui(obj,arg1,arg2,arg3)
243
+ VALUE obj,arg1,arg2,arg3;
244
+ {
245
+ GLuint red;
246
+ GLuint green;
247
+ GLuint blue;
248
+ red = (GLuint)NUM2INT(arg1);
249
+ green = (GLuint)NUM2INT(arg2);
250
+ blue = (GLuint)NUM2INT(arg3);
251
+ glColor3ui(red,green,blue);
252
+ return Qnil;
253
+ }
254
+
255
+ static VALUE
256
+ gl_Color3us(obj,arg1,arg2,arg3)
257
+ VALUE obj,arg1,arg2,arg3;
258
+ {
259
+ GLushort red;
260
+ GLushort green;
261
+ GLushort blue;
262
+ red = (GLushort)NUM2INT(arg1);
263
+ green = (GLushort)NUM2INT(arg2);
264
+ blue = (GLushort)NUM2INT(arg3);
265
+ glColor3us(red,green,blue);
266
+ return Qnil;
267
+ }
268
+
269
+ static VALUE
270
+ gl_Color4b(obj,arg1,arg2,arg3,arg4)
271
+ VALUE obj,arg1,arg2,arg3,arg4;
272
+ {
273
+ GLbyte red;
274
+ GLbyte green;
275
+ GLbyte blue;
276
+ GLbyte alpha;
277
+ red = (GLbyte)NUM2INT(arg1);
278
+ green = (GLbyte)NUM2INT(arg2);
279
+ blue = (GLbyte)NUM2INT(arg3);
280
+ alpha = (GLbyte)NUM2INT(arg4);
281
+ glColor4b(red,green,blue,alpha);
282
+ return Qnil;
283
+ }
284
+
285
+ static VALUE
286
+ gl_Color4d(obj,arg1,arg2,arg3,arg4)
287
+ VALUE obj,arg1,arg2,arg3,arg4;
288
+ {
289
+ GLdouble red;
290
+ GLdouble green;
291
+ GLdouble blue;
292
+ GLdouble alpha;
293
+ red = (GLdouble)NUM2DBL(arg1);
294
+ green = (GLdouble)NUM2DBL(arg2);
295
+ blue = (GLdouble)NUM2DBL(arg3);
296
+ alpha = (GLdouble)NUM2DBL(arg4);
297
+ glColor4d(red,green,blue,alpha);
298
+ return Qnil;
299
+ }
300
+
301
+ static VALUE
302
+ gl_Color4f(obj,arg1,arg2,arg3,arg4)
303
+ VALUE obj,arg1,arg2,arg3,arg4;
304
+ {
305
+ GLfloat red;
306
+ GLfloat green;
307
+ GLfloat blue;
308
+ GLfloat alpha;
309
+ red = (GLfloat)NUM2DBL(arg1);
310
+ green = (GLfloat)NUM2DBL(arg2);
311
+ blue = (GLfloat)NUM2DBL(arg3);
312
+ alpha = (GLfloat)NUM2DBL(arg4);
313
+ glColor4f(red,green,blue,alpha);
314
+ return Qnil;
315
+ }
316
+
317
+ static VALUE
318
+ gl_Color4i(obj,arg1,arg2,arg3,arg4)
319
+ VALUE obj,arg1,arg2,arg3,arg4;
320
+ {
321
+ GLint red;
322
+ GLint green;
323
+ GLint blue;
324
+ GLint alpha;
325
+ red = (GLint)NUM2INT(arg1);
326
+ green = (GLint)NUM2INT(arg2);
327
+ blue = (GLint)NUM2INT(arg3);
328
+ alpha = (GLint)NUM2INT(arg4);
329
+ glColor4i(red,green,blue,alpha);
330
+ return Qnil;
331
+ }
332
+
333
+ static VALUE
334
+ gl_Color4s(obj,arg1,arg2,arg3,arg4)
335
+ VALUE obj,arg1,arg2,arg3,arg4;
336
+ {
337
+ GLshort red;
338
+ GLshort green;
339
+ GLshort blue;
340
+ GLshort alpha;
341
+ red = (GLshort)NUM2INT(arg1);
342
+ green = (GLshort)NUM2INT(arg2);
343
+ blue = (GLshort)NUM2INT(arg3);
344
+ alpha = (GLshort)NUM2INT(arg4);
345
+ glColor4s(red,green,blue,alpha);
346
+ return Qnil;
347
+ }
348
+
349
+ static VALUE
350
+ gl_Color4ub(obj,arg1,arg2,arg3,arg4)
351
+ VALUE obj,arg1,arg2,arg3,arg4;
352
+ {
353
+ GLubyte red;
354
+ GLubyte green;
355
+ GLubyte blue;
356
+ GLubyte alpha;
357
+ red = (GLubyte)NUM2INT(arg1);
358
+ green = (GLubyte)NUM2INT(arg2);
359
+ blue = (GLubyte)NUM2INT(arg3);
360
+ alpha = (GLubyte)NUM2INT(arg4);
361
+ glColor4ub(red,green,blue,alpha);
362
+ return Qnil;
363
+ }
364
+
365
+ static VALUE
366
+ gl_Color4ui(obj,arg1,arg2,arg3,arg4)
367
+ VALUE obj,arg1,arg2,arg3,arg4;
368
+ {
369
+ GLuint red;
370
+ GLuint green;
371
+ GLuint blue;
372
+ GLuint alpha;
373
+ red = (GLuint)NUM2INT(arg1);
374
+ green = (GLuint)NUM2INT(arg2);
375
+ blue = (GLuint)NUM2INT(arg3);
376
+ alpha = (GLuint)NUM2INT(arg4);
377
+ glColor4ui(red,green,blue,alpha);
378
+ return Qnil;
379
+ }
380
+
381
+ static VALUE
382
+ gl_Color4us(obj,arg1,arg2,arg3,arg4)
383
+ VALUE obj,arg1,arg2,arg3,arg4;
384
+ {
385
+ GLushort red;
386
+ GLushort green;
387
+ GLushort blue;
388
+ GLushort alpha;
389
+ red = (GLushort)NUM2INT(arg1);
390
+ green = (GLushort)NUM2INT(arg2);
391
+ blue = (GLushort)NUM2INT(arg3);
392
+ alpha = (GLushort)NUM2INT(arg4);
393
+ glColor4us(red,green,blue,alpha);
394
+ return Qnil;
395
+ }
396
+
397
+ static VALUE
398
+ gl_EdgeFlag(obj,arg1)
399
+ VALUE obj,arg1;
400
+ {
401
+ GLboolean flag;
402
+ flag = (GLboolean)NUM2INT(arg1);
403
+ glEdgeFlag(flag);
404
+ return Qnil;
405
+ }
406
+
407
+ static VALUE
408
+ gl_EdgeFlagv(obj,arg1)
409
+ VALUE obj,arg1;
410
+ {
411
+ GLboolean flag[1] = { GL_FALSE };
412
+ if (TYPE(arg1) != T_ARRAY)
413
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
414
+ ary2cboolean(arg1,flag,1);
415
+ glEdgeFlagv(flag);
416
+ return Qnil;
417
+ }
418
+
419
+ static VALUE
420
+ gl_End(obj)
421
+ VALUE obj;
422
+ {
423
+ glEnd();
424
+ return Qnil;
425
+ }
426
+
427
+ static VALUE
428
+ gl_Indexd(obj,arg1)
429
+ VALUE obj,arg1;
430
+ {
431
+ GLdouble c;
432
+ c = (GLdouble)NUM2DBL(arg1);
433
+ glIndexd(c);
434
+ return Qnil;
435
+ }
436
+
437
+ static VALUE
438
+ gl_Indexdv(obj,arg1)
439
+ VALUE obj,arg1;
440
+ {
441
+ GLdouble c[1] = {0.0};
442
+ if (TYPE(arg1) != T_ARRAY)
443
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
444
+ ary2cdbl(arg1,c,1);
445
+ glIndexdv(c);
446
+ return Qnil;
447
+ }
448
+
449
+ static VALUE
450
+ gl_Indexf(obj,arg1)
451
+ VALUE obj,arg1;
452
+ {
453
+ GLfloat c;
454
+ c = (GLfloat)NUM2DBL(arg1);
455
+ glIndexf(c);
456
+ return Qnil;
457
+ }
458
+
459
+ static VALUE
460
+ gl_Indexfv(obj,arg1)
461
+ VALUE obj,arg1;
462
+ {
463
+ GLfloat c[1] = {0.0};
464
+ if (TYPE(arg1) != T_ARRAY)
465
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
466
+ ary2cflt(arg1,c,1);
467
+ glIndexfv(c);
468
+ return Qnil;
469
+ }
470
+
471
+ static VALUE
472
+ gl_Indexi(obj,arg1)
473
+ VALUE obj,arg1;
474
+ {
475
+ GLint c;
476
+ c = (GLint)NUM2INT(arg1);
477
+ glIndexi(c);
478
+ return Qnil;
479
+ }
480
+
481
+ static VALUE
482
+ gl_Indexiv(obj,arg1)
483
+ VALUE obj,arg1;
484
+ {
485
+ GLint c[1] = {0.0};
486
+ if (TYPE(arg1) != T_ARRAY)
487
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
488
+ ary2cint(arg1,c,1);
489
+ glIndexiv(c);
490
+ return Qnil;
491
+ }
492
+
493
+ static VALUE
494
+ gl_Indexs(obj,arg1)
495
+ VALUE obj,arg1;
496
+ {
497
+ GLshort c;
498
+ c = (GLshort)NUM2INT(arg1);
499
+ glIndexs(c);
500
+ return Qnil;
501
+ }
502
+
503
+ static VALUE
504
+ gl_Indexsv(obj,arg1)
505
+ VALUE obj,arg1;
506
+ {
507
+ GLshort c[1] = {0};
508
+ if (TYPE(arg1) != T_ARRAY)
509
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
510
+ ary2cshort(arg1,c,1);
511
+ glIndexsv(c);
512
+ return Qnil;
513
+ }
514
+
515
+ static VALUE
516
+ gl_Normal3b(obj,arg1,arg2,arg3)
517
+ VALUE obj,arg1,arg2,arg3;
518
+ {
519
+ GLbyte nx;
520
+ GLbyte ny;
521
+ GLbyte nz;
522
+ nx = (GLbyte)NUM2INT(arg1);
523
+ ny = (GLbyte)NUM2INT(arg2);
524
+ nz = (GLbyte)NUM2INT(arg3);
525
+ glNormal3b(nx,ny,nz);
526
+ return Qnil;
527
+ }
528
+
529
+ static VALUE
530
+ gl_Normal3d(obj,arg1,arg2,arg3)
531
+ VALUE obj,arg1,arg2,arg3;
532
+ {
533
+ GLdouble nx;
534
+ GLdouble ny;
535
+ GLdouble nz;
536
+ nx = (GLdouble)NUM2DBL(arg1);
537
+ ny = (GLdouble)NUM2DBL(arg2);
538
+ nz = (GLdouble)NUM2DBL(arg3);
539
+ glNormal3d(nx,ny,nz);
540
+ return Qnil;
541
+ }
542
+
543
+ static VALUE
544
+ gl_Normal3f(obj,arg1,arg2,arg3)
545
+ VALUE obj,arg1,arg2,arg3;
546
+ {
547
+ GLfloat nx;
548
+ GLfloat ny;
549
+ GLfloat nz;
550
+ nx = (GLfloat)NUM2DBL(arg1);
551
+ ny = (GLfloat)NUM2DBL(arg2);
552
+ nz = (GLfloat)NUM2DBL(arg3);
553
+ glNormal3f(nx,ny,nz);
554
+ return Qnil;
555
+ }
556
+
557
+ static VALUE
558
+ gl_Normal3i(obj,arg1,arg2,arg3)
559
+ VALUE obj,arg1,arg2,arg3;
560
+ {
561
+ GLint nx;
562
+ GLint ny;
563
+ GLint nz;
564
+ nx = (GLint)NUM2INT(arg1);
565
+ ny = (GLint)NUM2INT(arg2);
566
+ nz = (GLint)NUM2INT(arg3);
567
+ glNormal3i(nx,ny,nz);
568
+ return Qnil;
569
+ }
570
+
571
+ static VALUE
572
+ gl_Normal3s(obj,arg1,arg2,arg3)
573
+ VALUE obj,arg1,arg2,arg3;
574
+ {
575
+ GLshort nx;
576
+ GLshort ny;
577
+ GLshort nz;
578
+ nx = (GLshort)NUM2INT(arg1);
579
+ ny = (GLshort)NUM2INT(arg2);
580
+ nz = (GLshort)NUM2INT(arg3);
581
+ glNormal3s(nx,ny,nz);
582
+ return Qnil;
583
+ }
584
+
585
+ static VALUE
586
+ gl_RasterPos2d(obj,arg1,arg2)
587
+ VALUE obj,arg1,arg2;
588
+ {
589
+ GLdouble x;
590
+ GLdouble y;
591
+ x = (GLdouble)NUM2DBL(arg1);
592
+ y = (GLdouble)NUM2DBL(arg2);
593
+ glRasterPos2d(x,y);
594
+ return Qnil;
595
+ }
596
+
597
+ static VALUE
598
+ gl_RasterPos2f(obj,arg1,arg2)
599
+ VALUE obj,arg1,arg2;
600
+ {
601
+ GLfloat x;
602
+ GLfloat y;
603
+ x = (GLfloat)NUM2DBL(arg1);
604
+ y = (GLfloat)NUM2DBL(arg2);
605
+ glRasterPos2f(x,y);
606
+ return Qnil;
607
+ }
608
+
609
+ static VALUE
610
+ gl_RasterPos2i(obj,arg1,arg2)
611
+ VALUE obj,arg1,arg2;
612
+ {
613
+ GLint x;
614
+ GLint y;
615
+ x = (GLint)NUM2INT(arg1);
616
+ y = (GLint)NUM2INT(arg2);
617
+ glRasterPos2i(x,y);
618
+ return Qnil;
619
+ }
620
+
621
+ static VALUE
622
+ gl_RasterPos2s(obj,arg1,arg2)
623
+ VALUE obj,arg1,arg2;
624
+ {
625
+ GLshort x;
626
+ GLshort y;
627
+ x = (GLshort)NUM2INT(arg1);
628
+ y = (GLshort)NUM2INT(arg2);
629
+ glRasterPos2s(x,y);
630
+ return Qnil;
631
+ }
632
+
633
+ static VALUE
634
+ gl_RasterPos3d(obj,arg1,arg2,arg3)
635
+ VALUE obj,arg1,arg2,arg3;
636
+ {
637
+ GLdouble x;
638
+ GLdouble y;
639
+ GLdouble z;
640
+ x = (GLdouble)NUM2DBL(arg1);
641
+ y = (GLdouble)NUM2DBL(arg2);
642
+ z = (GLdouble)NUM2DBL(arg3);
643
+ glRasterPos3d(x,y,z);
644
+ return Qnil;
645
+ }
646
+
647
+ static VALUE
648
+ gl_RasterPos3f(obj,arg1,arg2,arg3)
649
+ VALUE obj,arg1,arg2,arg3;
650
+ {
651
+ GLfloat x;
652
+ GLfloat y;
653
+ GLfloat z;
654
+ x = (GLfloat)NUM2DBL(arg1);
655
+ y = (GLfloat)NUM2DBL(arg2);
656
+ z = (GLfloat)NUM2DBL(arg3);
657
+ glRasterPos3f(x,y,z);
658
+ return Qnil;
659
+ }
660
+
661
+ static VALUE
662
+ gl_RasterPos3i(obj,arg1,arg2,arg3)
663
+ VALUE obj,arg1,arg2,arg3;
664
+ {
665
+ GLint x;
666
+ GLint y;
667
+ GLint z;
668
+ x = (GLint)NUM2INT(arg1);
669
+ y = (GLint)NUM2INT(arg2);
670
+ z = (GLint)NUM2INT(arg3);
671
+ glRasterPos3i(x,y,z);
672
+ return Qnil;
673
+ }
674
+
675
+ static VALUE
676
+ gl_RasterPos3s(obj,arg1,arg2,arg3)
677
+ VALUE obj,arg1,arg2,arg3;
678
+ {
679
+ GLshort x;
680
+ GLshort y;
681
+ GLshort z;
682
+ x = (GLshort)NUM2INT(arg1);
683
+ y = (GLshort)NUM2INT(arg2);
684
+ z = (GLshort)NUM2INT(arg3);
685
+ glRasterPos3s(x,y,z);
686
+ return Qnil;
687
+ }
688
+
689
+ static VALUE
690
+ gl_RasterPos4d(obj,arg1,arg2,arg3,arg4)
691
+ VALUE obj,arg1,arg2,arg3,arg4;
692
+ {
693
+ GLdouble x;
694
+ GLdouble y;
695
+ GLdouble z;
696
+ GLdouble w;
697
+ x = (GLdouble)NUM2DBL(arg1);
698
+ y = (GLdouble)NUM2DBL(arg2);
699
+ z = (GLdouble)NUM2DBL(arg3);
700
+ w = (GLdouble)NUM2DBL(arg4);
701
+ glRasterPos4d(x,y,z,w);
702
+ return Qnil;
703
+ }
704
+
705
+ static VALUE
706
+ gl_RasterPos4f(obj,arg1,arg2,arg3,arg4)
707
+ VALUE obj,arg1,arg2,arg3,arg4;
708
+ {
709
+ GLfloat x;
710
+ GLfloat y;
711
+ GLfloat z;
712
+ GLfloat w;
713
+ x = (GLfloat)NUM2DBL(arg1);
714
+ y = (GLfloat)NUM2DBL(arg2);
715
+ z = (GLfloat)NUM2DBL(arg3);
716
+ w = (GLfloat)NUM2DBL(arg4);
717
+ glRasterPos4f(x,y,z,w);
718
+ return Qnil;
719
+ }
720
+
721
+ static VALUE
722
+ gl_RasterPos4i(obj,arg1,arg2,arg3,arg4)
723
+ VALUE obj,arg1,arg2,arg3,arg4;
724
+ {
725
+ GLint x;
726
+ GLint y;
727
+ GLint z;
728
+ GLint w;
729
+ x = (GLint)NUM2INT(arg1);
730
+ y = (GLint)NUM2INT(arg2);
731
+ z = (GLint)NUM2INT(arg3);
732
+ w = (GLint)NUM2INT(arg4);
733
+ glRasterPos4i(x,y,z,w);
734
+ return Qnil;
735
+ }
736
+
737
+ static VALUE
738
+ gl_RasterPos4s(obj,arg1,arg2,arg3,arg4)
739
+ VALUE obj,arg1,arg2,arg3,arg4;
740
+ {
741
+ GLshort x;
742
+ GLshort y;
743
+ GLshort z;
744
+ GLshort w;
745
+ x = (GLshort)NUM2INT(arg1);
746
+ y = (GLshort)NUM2INT(arg2);
747
+ z = (GLshort)NUM2INT(arg3);
748
+ w = (GLshort)NUM2INT(arg4);
749
+ glRasterPos4s(x,y,z,w);
750
+ return Qnil;
751
+ }
752
+
753
+ static VALUE
754
+ gl_Rectd(obj,arg1,arg2,arg3,arg4)
755
+ VALUE obj,arg1,arg2,arg3,arg4;
756
+ {
757
+ GLdouble x1;
758
+ GLdouble y1;
759
+ GLdouble x2;
760
+ GLdouble y2;
761
+ x1 = (GLdouble)NUM2DBL(arg1);
762
+ y1 = (GLdouble)NUM2DBL(arg2);
763
+ x2 = (GLdouble)NUM2DBL(arg3);
764
+ y2 = (GLdouble)NUM2DBL(arg4);
765
+ glRectd(x1,y1,x2,y2);
766
+ return Qnil;
767
+ }
768
+
769
+ static VALUE
770
+ gl_Rectf(obj,arg1,arg2,arg3,arg4)
771
+ VALUE obj,arg1,arg2,arg3,arg4;
772
+ {
773
+ GLfloat x1;
774
+ GLfloat y1;
775
+ GLfloat x2;
776
+ GLfloat y2;
777
+ x1 = (GLfloat)NUM2DBL(arg1);
778
+ y1 = (GLfloat)NUM2DBL(arg2);
779
+ x2 = (GLfloat)NUM2DBL(arg3);
780
+ y2 = (GLfloat)NUM2DBL(arg4);
781
+ glRectf(x1,y1,x2,y2);
782
+ return Qnil;
783
+ }
784
+
785
+ static VALUE
786
+ gl_Recti(obj,arg1,arg2,arg3,arg4)
787
+ VALUE obj,arg1,arg2,arg3,arg4;
788
+ {
789
+ GLint x1;
790
+ GLint y1;
791
+ GLint x2;
792
+ GLint y2;
793
+ x1 = (GLint)NUM2INT(arg1);
794
+ y1 = (GLint)NUM2INT(arg2);
795
+ x2 = (GLint)NUM2INT(arg3);
796
+ y2 = (GLint)NUM2INT(arg4);
797
+ glRecti(x1,y1,x2,y2);
798
+ return Qnil;
799
+ }
800
+
801
+ static VALUE
802
+ gl_Rects(obj,arg1,arg2,arg3,arg4)
803
+ VALUE obj,arg1,arg2,arg3,arg4;
804
+ {
805
+ GLshort x1;
806
+ GLshort y1;
807
+ GLshort x2;
808
+ GLshort y2;
809
+ x1 = (GLshort)NUM2INT(arg1);
810
+ y1 = (GLshort)NUM2INT(arg2);
811
+ x2 = (GLshort)NUM2INT(arg3);
812
+ y2 = (GLshort)NUM2INT(arg4);
813
+ glRects(x1,y1,x2,y2);
814
+ return Qnil;
815
+ }
816
+
817
+ static VALUE
818
+ gl_TexCoord1d(obj,arg1)
819
+ VALUE obj,arg1;
820
+ {
821
+ GLdouble s;
822
+ s = (GLdouble)NUM2DBL(arg1);
823
+ glTexCoord1d(s);
824
+ return Qnil;
825
+ }
826
+
827
+ static VALUE
828
+ gl_TexCoord1f(obj,arg1)
829
+ VALUE obj,arg1;
830
+ {
831
+ GLfloat s;
832
+ s = (GLfloat)NUM2DBL(arg1);
833
+ glTexCoord1f(s);
834
+ return Qnil;
835
+ }
836
+
837
+ static VALUE
838
+ gl_TexCoord1i(obj,arg1)
839
+ VALUE obj,arg1;
840
+ {
841
+ GLint s;
842
+ s = (GLint)NUM2INT(arg1);
843
+ glTexCoord1i(s);
844
+ return Qnil;
845
+ }
846
+
847
+ static VALUE
848
+ gl_TexCoord1s(obj,arg1)
849
+ VALUE obj,arg1;
850
+ {
851
+ GLshort s;
852
+ s = (GLshort)NUM2INT(arg1);
853
+ glTexCoord1s(s);
854
+ return Qnil;
855
+ }
856
+
857
+ static VALUE
858
+ gl_TexCoord2d(obj,arg1,arg2)
859
+ VALUE obj,arg1,arg2;
860
+ {
861
+ GLdouble s;
862
+ GLdouble t;
863
+ s = (GLdouble)NUM2DBL(arg1);
864
+ t = (GLdouble)NUM2DBL(arg2);
865
+ glTexCoord2d(s,t);
866
+ return Qnil;
867
+ }
868
+
869
+ static VALUE
870
+ gl_TexCoord2f(obj,arg1,arg2)
871
+ VALUE obj,arg1,arg2;
872
+ {
873
+ GLfloat s;
874
+ GLfloat t;
875
+ s = (GLfloat)NUM2DBL(arg1);
876
+ t = (GLfloat)NUM2DBL(arg2);
877
+ glTexCoord2f(s,t);
878
+ return Qnil;
879
+ }
880
+
881
+ static VALUE
882
+ gl_TexCoord2i(obj,arg1,arg2)
883
+ VALUE obj,arg1,arg2;
884
+ {
885
+ GLint s;
886
+ GLint t;
887
+ s = (GLint)NUM2INT(arg1);
888
+ t = (GLint)NUM2INT(arg2);
889
+ glTexCoord2i(s,t);
890
+ return Qnil;
891
+ }
892
+
893
+ static VALUE
894
+ gl_TexCoord2s(obj,arg1,arg2)
895
+ VALUE obj,arg1,arg2;
896
+ {
897
+ GLshort s;
898
+ GLshort t;
899
+ s = (GLshort)NUM2INT(arg1);
900
+ t = (GLshort)NUM2INT(arg2);
901
+ glTexCoord2s(s,t);
902
+ return Qnil;
903
+ }
904
+
905
+ static VALUE
906
+ gl_TexCoord3d(obj,arg1,arg2,arg3)
907
+ VALUE obj,arg1,arg2,arg3;
908
+ {
909
+ GLdouble s;
910
+ GLdouble t;
911
+ GLdouble r;
912
+ s = (GLdouble)NUM2DBL(arg1);
913
+ t = (GLdouble)NUM2DBL(arg2);
914
+ r = (GLdouble)NUM2DBL(arg3);
915
+ glTexCoord3d(s,t,r);
916
+ return Qnil;
917
+ }
918
+
919
+ static VALUE
920
+ gl_TexCoord3f(obj,arg1,arg2,arg3)
921
+ VALUE obj,arg1,arg2,arg3;
922
+ {
923
+ GLfloat s;
924
+ GLfloat t;
925
+ GLfloat r;
926
+ s = (GLfloat)NUM2DBL(arg1);
927
+ t = (GLfloat)NUM2DBL(arg2);
928
+ r = (GLfloat)NUM2DBL(arg3);
929
+ glTexCoord3f(s,t,r);
930
+ return Qnil;
931
+ }
932
+
933
+ static VALUE
934
+ gl_TexCoord3i(obj,arg1,arg2,arg3)
935
+ VALUE obj,arg1,arg2,arg3;
936
+ {
937
+ GLint s;
938
+ GLint t;
939
+ GLint r;
940
+ s = (GLint)NUM2INT(arg1);
941
+ t = (GLint)NUM2INT(arg2);
942
+ r = (GLint)NUM2INT(arg3);
943
+ glTexCoord3i(s,t,r);
944
+ return Qnil;
945
+ }
946
+
947
+ static VALUE
948
+ gl_TexCoord3s(obj,arg1,arg2,arg3)
949
+ VALUE obj,arg1,arg2,arg3;
950
+ {
951
+ GLshort s;
952
+ GLshort t;
953
+ GLshort r;
954
+ s = (GLshort)NUM2INT(arg1);
955
+ t = (GLshort)NUM2INT(arg2);
956
+ r = (GLshort)NUM2INT(arg3);
957
+ glTexCoord3s(s,t,r);
958
+ return Qnil;
959
+ }
960
+
961
+ static VALUE
962
+ gl_TexCoord4d(obj,arg1,arg2,arg3,arg4)
963
+ VALUE obj,arg1,arg2,arg3,arg4;
964
+ {
965
+ GLdouble s;
966
+ GLdouble t;
967
+ GLdouble r;
968
+ GLdouble q;
969
+ s = (GLdouble)NUM2DBL(arg1);
970
+ t = (GLdouble)NUM2DBL(arg2);
971
+ r = (GLdouble)NUM2DBL(arg3);
972
+ q = (GLdouble)NUM2DBL(arg4);
973
+ glTexCoord4d(s,t,r,q);
974
+ return Qnil;
975
+ }
976
+
977
+ static VALUE
978
+ gl_TexCoord4f(obj,arg1,arg2,arg3,arg4)
979
+ VALUE obj,arg1,arg2,arg3,arg4;
980
+ {
981
+ GLfloat s;
982
+ GLfloat t;
983
+ GLfloat r;
984
+ GLfloat q;
985
+ s = (GLfloat)NUM2DBL(arg1);
986
+ t = (GLfloat)NUM2DBL(arg2);
987
+ r = (GLfloat)NUM2DBL(arg3);
988
+ q = (GLfloat)NUM2DBL(arg4);
989
+ glTexCoord4f(s,t,r,q);
990
+ return Qnil;
991
+ }
992
+
993
+ static VALUE
994
+ gl_TexCoord4i(obj,arg1,arg2,arg3,arg4)
995
+ VALUE obj,arg1,arg2,arg3,arg4;
996
+ {
997
+ GLint s;
998
+ GLint t;
999
+ GLint r;
1000
+ GLint q;
1001
+ s = (GLint)NUM2INT(arg1);
1002
+ t = (GLint)NUM2INT(arg2);
1003
+ r = (GLint)NUM2INT(arg3);
1004
+ q = (GLint)NUM2INT(arg4);
1005
+ glTexCoord4i(s,t,r,q);
1006
+ return Qnil;
1007
+ }
1008
+
1009
+ static VALUE
1010
+ gl_TexCoord4s(obj,arg1,arg2,arg3,arg4)
1011
+ VALUE obj,arg1,arg2,arg3,arg4;
1012
+ {
1013
+ GLshort s;
1014
+ GLshort t;
1015
+ GLshort r;
1016
+ GLshort q;
1017
+ s = (GLshort)NUM2INT(arg1);
1018
+ t = (GLshort)NUM2INT(arg2);
1019
+ r = (GLshort)NUM2INT(arg3);
1020
+ q = (GLshort)NUM2INT(arg4);
1021
+ glTexCoord4s(s,t,r,q);
1022
+ return Qnil;
1023
+ }
1024
+
1025
+ static VALUE
1026
+ gl_Vertex2d(obj,arg1,arg2)
1027
+ VALUE obj,arg1,arg2;
1028
+ {
1029
+ GLdouble x;
1030
+ GLdouble y;
1031
+ x = (GLdouble)NUM2DBL(arg1);
1032
+ y = (GLdouble)NUM2DBL(arg2);
1033
+ glVertex2d(x,y);
1034
+ return Qnil;
1035
+ }
1036
+
1037
+ static VALUE
1038
+ gl_Vertex2f(obj,arg1,arg2)
1039
+ VALUE obj,arg1,arg2;
1040
+ {
1041
+ GLfloat x;
1042
+ GLfloat y;
1043
+ x = (GLfloat)NUM2DBL(arg1);
1044
+ y = (GLfloat)NUM2DBL(arg2);
1045
+ glVertex2f(x,y);
1046
+ return Qnil;
1047
+ }
1048
+
1049
+ static VALUE
1050
+ gl_Vertex2i(obj,arg1,arg2)
1051
+ VALUE obj,arg1,arg2;
1052
+ {
1053
+ GLint x;
1054
+ GLint y;
1055
+ x = (GLint)NUM2INT(arg1);
1056
+ y = (GLint)NUM2INT(arg2);
1057
+ glVertex2i(x,y);
1058
+ return Qnil;
1059
+ }
1060
+
1061
+ static VALUE
1062
+ gl_Vertex2s(obj,arg1,arg2)
1063
+ VALUE obj,arg1,arg2;
1064
+ {
1065
+ GLshort x;
1066
+ GLshort y;
1067
+ x = (GLshort)NUM2INT(arg1);
1068
+ y = (GLshort)NUM2INT(arg2);
1069
+ glVertex2s(x,y);
1070
+ return Qnil;
1071
+ }
1072
+
1073
+ static VALUE
1074
+ gl_Vertex3d(obj,arg1,arg2,arg3)
1075
+ VALUE obj,arg1,arg2,arg3;
1076
+ {
1077
+ GLdouble x;
1078
+ GLdouble y;
1079
+ GLdouble z;
1080
+ x = (GLdouble)NUM2DBL(arg1);
1081
+ y = (GLdouble)NUM2DBL(arg2);
1082
+ z = (GLdouble)NUM2DBL(arg3);
1083
+ glVertex3d(x,y,z);
1084
+ return Qnil;
1085
+ }
1086
+
1087
+ static VALUE
1088
+ gl_Vertex3f(obj,arg1,arg2,arg3)
1089
+ VALUE obj,arg1,arg2,arg3;
1090
+ {
1091
+ GLfloat x;
1092
+ GLfloat y;
1093
+ GLfloat z;
1094
+ x = (GLfloat)NUM2DBL(arg1);
1095
+ y = (GLfloat)NUM2DBL(arg2);
1096
+ z = (GLfloat)NUM2DBL(arg3);
1097
+ glVertex3f(x,y,z);
1098
+ return Qnil;
1099
+ }
1100
+
1101
+ static VALUE
1102
+ gl_Vertex3i(obj,arg1,arg2,arg3)
1103
+ VALUE obj,arg1,arg2,arg3;
1104
+ {
1105
+ GLint x;
1106
+ GLint y;
1107
+ GLint z;
1108
+ x = (GLint)NUM2INT(arg1);
1109
+ y = (GLint)NUM2INT(arg2);
1110
+ z = (GLint)NUM2INT(arg3);
1111
+ glVertex3i(x,y,z);
1112
+ return Qnil;
1113
+ }
1114
+
1115
+ static VALUE
1116
+ gl_Vertex3s(obj,arg1,arg2,arg3)
1117
+ VALUE obj,arg1,arg2,arg3;
1118
+ {
1119
+ GLshort x;
1120
+ GLshort y;
1121
+ GLshort z;
1122
+ x = (GLshort)NUM2INT(arg1);
1123
+ y = (GLshort)NUM2INT(arg2);
1124
+ z = (GLshort)NUM2INT(arg3);
1125
+ glVertex3s(x,y,z);
1126
+ return Qnil;
1127
+ }
1128
+
1129
+ static VALUE
1130
+ gl_Vertex4d(obj,arg1,arg2,arg3,arg4)
1131
+ VALUE obj,arg1,arg2,arg3,arg4;
1132
+ {
1133
+ GLdouble x;
1134
+ GLdouble y;
1135
+ GLdouble z;
1136
+ GLdouble w;
1137
+ x = (GLdouble)NUM2DBL(arg1);
1138
+ y = (GLdouble)NUM2DBL(arg2);
1139
+ z = (GLdouble)NUM2DBL(arg3);
1140
+ w = (GLdouble)NUM2DBL(arg4);
1141
+ glVertex4d(x,y,z,w);
1142
+ return Qnil;
1143
+ }
1144
+
1145
+ static VALUE
1146
+ gl_Vertex4f(obj,arg1,arg2,arg3,arg4)
1147
+ VALUE obj,arg1,arg2,arg3,arg4;
1148
+ {
1149
+ GLfloat x;
1150
+ GLfloat y;
1151
+ GLfloat z;
1152
+ GLfloat w;
1153
+ x = (GLfloat)NUM2DBL(arg1);
1154
+ y = (GLfloat)NUM2DBL(arg2);
1155
+ z = (GLfloat)NUM2DBL(arg3);
1156
+ w = (GLfloat)NUM2DBL(arg4);
1157
+ glVertex4f(x,y,z,w);
1158
+ return Qnil;
1159
+ }
1160
+
1161
+ static VALUE
1162
+ gl_Vertex4i(obj,arg1,arg2,arg3,arg4)
1163
+ VALUE obj,arg1,arg2,arg3,arg4;
1164
+ {
1165
+ GLint x;
1166
+ GLint y;
1167
+ GLint z;
1168
+ GLint w;
1169
+ x = (GLint)NUM2INT(arg1);
1170
+ y = (GLint)NUM2INT(arg2);
1171
+ z = (GLint)NUM2INT(arg3);
1172
+ w = (GLint)NUM2INT(arg4);
1173
+ glVertex4i(x,y,z,w);
1174
+ return Qnil;
1175
+ }
1176
+
1177
+ static VALUE
1178
+ gl_Vertex4s(obj,arg1,arg2,arg3,arg4)
1179
+ VALUE obj,arg1,arg2,arg3,arg4;
1180
+ {
1181
+ GLshort x;
1182
+ GLshort y;
1183
+ GLshort z;
1184
+ GLshort w;
1185
+ x = (GLshort)NUM2INT(arg1);
1186
+ y = (GLshort)NUM2INT(arg2);
1187
+ z = (GLshort)NUM2INT(arg3);
1188
+ w = (GLshort)NUM2INT(arg4);
1189
+ glVertex4s(x,y,z,w);
1190
+ return Qnil;
1191
+ }
1192
+
1193
+ static VALUE
1194
+ gl_ClipPlane(obj,arg1,arg2)
1195
+ VALUE obj,arg1,arg2;
1196
+ {
1197
+ GLenum plane;
1198
+ GLdouble equation[4];
1199
+ plane = (GLenum)NUM2INT(arg1);
1200
+ if (TYPE(arg2) == T_ARRAY)
1201
+ ary2cdbl(arg2, equation, 4);
1202
+ else
1203
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
1204
+ glClipPlane(plane,equation);
1205
+ return Qnil;
1206
+ }
1207
+
1208
+ static VALUE
1209
+ gl_ColorMaterial(obj,arg1,arg2)
1210
+ VALUE obj,arg1,arg2;
1211
+ {
1212
+ GLenum face;
1213
+ GLenum mode;
1214
+ face = (GLenum)NUM2INT(arg1);
1215
+ mode = (GLenum)NUM2INT(arg2);
1216
+ glColorMaterial(face,mode);
1217
+ return Qnil;
1218
+ }
1219
+
1220
+ static VALUE
1221
+ gl_CullFace(obj,arg1)
1222
+ VALUE obj,arg1;
1223
+ {
1224
+ GLenum mode;
1225
+ mode = (GLenum)NUM2INT(arg1);
1226
+ glCullFace(mode);
1227
+ return Qnil;
1228
+ }
1229
+
1230
+ static VALUE
1231
+ gl_Fogf(obj,arg1,arg2)
1232
+ VALUE obj,arg1,arg2;
1233
+ {
1234
+ GLenum pname;
1235
+ GLfloat param;
1236
+ pname = (GLenum)NUM2INT(arg1);
1237
+ param = (GLfloat)NUM2DBL(arg2);
1238
+ glFogf(pname,param);
1239
+ return Qnil;
1240
+ }
1241
+
1242
+ static VALUE
1243
+ gl_Fogfv(obj,arg1,arg2)
1244
+ VALUE obj,arg1,arg2;
1245
+ {
1246
+ GLenum pname;
1247
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1248
+ pname = (GLenum)NUM2INT(arg1);
1249
+ if (TYPE(arg2) != T_ARRAY)
1250
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
1251
+ ary2cflt(arg2,params,4);
1252
+ glFogfv(pname,params);
1253
+ return Qnil;
1254
+ }
1255
+
1256
+ static VALUE
1257
+ gl_Fogi(obj,arg1,arg2)
1258
+ VALUE obj,arg1,arg2;
1259
+ {
1260
+ GLenum pname;
1261
+ GLint param;
1262
+ pname = (GLenum)NUM2INT(arg1);
1263
+ param = (GLint)NUM2INT(arg2);
1264
+ glFogi(pname,param);
1265
+ return Qnil;
1266
+ }
1267
+
1268
+ static VALUE
1269
+ gl_Fogiv(obj,arg1,arg2)
1270
+ VALUE obj,arg1,arg2;
1271
+ {
1272
+ GLenum pname;
1273
+ GLint params[4] = {0,0,0,0};
1274
+ pname = (GLenum)NUM2INT(arg1);
1275
+ if (TYPE(arg2) != T_ARRAY)
1276
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
1277
+ ary2cint(arg2,params,4);
1278
+ glFogiv(pname,params);
1279
+ return Qnil;
1280
+ }
1281
+
1282
+ static VALUE
1283
+ gl_FrontFace(obj,arg1)
1284
+ VALUE obj,arg1;
1285
+ {
1286
+ GLenum mode;
1287
+ mode = (GLenum)NUM2INT(arg1);
1288
+ glFrontFace(mode);
1289
+ return Qnil;
1290
+ }
1291
+
1292
+ static VALUE
1293
+ gl_Hint(obj,arg1,arg2)
1294
+ VALUE obj,arg1,arg2;
1295
+ {
1296
+ GLenum target;
1297
+ GLenum mode;
1298
+ target = (GLenum)NUM2INT(arg1);
1299
+ mode = (GLenum)NUM2INT(arg2);
1300
+ glHint(target,mode);
1301
+ return Qnil;
1302
+ }
1303
+
1304
+ static VALUE
1305
+ gl_Lightf(obj,arg1,arg2,arg3)
1306
+ VALUE obj,arg1,arg2,arg3;
1307
+ {
1308
+ GLenum light;
1309
+ GLenum pname;
1310
+ GLfloat param;
1311
+ light = (GLenum)NUM2INT(arg1);
1312
+ pname = (GLenum)NUM2INT(arg2);
1313
+ param = (GLfloat)NUM2DBL(arg3);
1314
+ glLightf(light,pname,param);
1315
+ return Qnil;
1316
+ }
1317
+
1318
+ static VALUE
1319
+ gl_Lightfv(obj,arg1,arg2,arg3)
1320
+ VALUE obj,arg1,arg2,arg3;
1321
+ {
1322
+ GLenum light;
1323
+ GLenum pname;
1324
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1325
+ light = (GLenum)NUM2INT(arg1);
1326
+ pname = (GLenum)NUM2INT(arg2);
1327
+ if (TYPE(arg3) != T_ARRAY)
1328
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1329
+ ary2cflt(arg3,params,4);
1330
+ glLightfv(light,pname,params);
1331
+ return Qnil;
1332
+ }
1333
+
1334
+ static VALUE
1335
+ gl_Lighti(obj,arg1,arg2,arg3)
1336
+ VALUE obj,arg1,arg2,arg3;
1337
+ {
1338
+ GLenum light;
1339
+ GLenum pname;
1340
+ GLint param;
1341
+ light = (GLenum)NUM2INT(arg1);
1342
+ pname = (GLenum)NUM2INT(arg2);
1343
+ param = (GLint)NUM2INT(arg3);
1344
+ glLighti(light,pname,param);
1345
+ return Qnil;
1346
+ }
1347
+
1348
+ static VALUE
1349
+ gl_Lightiv(obj,arg1,arg2,arg3)
1350
+ VALUE obj,arg1,arg2,arg3;
1351
+ {
1352
+ GLenum light;
1353
+ GLenum pname;
1354
+ GLint params[4]={0,0,0,0};
1355
+ light = (GLenum)NUM2INT(arg1);
1356
+ pname = (GLenum)NUM2INT(arg2);
1357
+ if (TYPE(arg3) != T_ARRAY)
1358
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1359
+ ary2cint(arg3,params,4);
1360
+ glLightiv(light,pname,params);
1361
+ return Qnil;
1362
+ }
1363
+
1364
+ static VALUE
1365
+ gl_LightModelf(obj,arg1,arg2)
1366
+ VALUE obj,arg1,arg2;
1367
+ {
1368
+ GLenum pname;
1369
+ GLfloat param;
1370
+ pname = (GLenum)NUM2INT(arg1);
1371
+ param = (GLfloat)NUM2DBL(arg2);
1372
+ glLightModelf(pname,param);
1373
+ return Qnil;
1374
+ }
1375
+
1376
+ static VALUE
1377
+ gl_LightModelfv(obj,arg1,arg2)
1378
+ VALUE obj,arg1,arg2;
1379
+ {
1380
+ GLenum pname;
1381
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1382
+ pname = (GLenum)NUM2INT(arg1);
1383
+ if (TYPE(arg2) != T_ARRAY)
1384
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
1385
+ ary2cflt(arg2,params,4);
1386
+ glLightModelfv(pname,params);
1387
+ return Qnil;
1388
+ }
1389
+
1390
+ static VALUE
1391
+ gl_LightModeli(obj,arg1,arg2)
1392
+ VALUE obj,arg1,arg2;
1393
+ {
1394
+ GLenum pname;
1395
+ GLint param;
1396
+ pname = (GLenum)NUM2INT(arg1);
1397
+ param = (GLint)NUM2INT(arg2);
1398
+ glLightModeli(pname,param);
1399
+ return Qnil;
1400
+ }
1401
+
1402
+ static VALUE
1403
+ gl_LightModeliv(obj,arg1,arg2)
1404
+ VALUE obj,arg1,arg2;
1405
+ {
1406
+ GLenum pname;
1407
+ GLint params[4] = {0,0,0,0};
1408
+ pname = (GLenum)NUM2INT(arg1);
1409
+ if (TYPE(arg2) != T_ARRAY)
1410
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg2));
1411
+ ary2cint(arg2,params,4);
1412
+ glLightModeliv(pname,params);
1413
+ return Qnil;
1414
+ }
1415
+
1416
+ static VALUE
1417
+ gl_LineStipple(obj,arg1,arg2)
1418
+ VALUE obj,arg1,arg2;
1419
+ {
1420
+ GLint factor;
1421
+ GLushort pattern;
1422
+ factor = (GLint)NUM2INT(arg1);
1423
+ pattern = (GLushort)(NUM2INT(arg2) & 0xFFFF);
1424
+ glLineStipple(factor,pattern);
1425
+ return Qnil;
1426
+ }
1427
+
1428
+ static VALUE
1429
+ gl_LineWidth(obj,arg1)
1430
+ VALUE obj,arg1;
1431
+ {
1432
+ GLfloat width;
1433
+ width = (GLfloat)NUM2DBL(arg1);
1434
+ glLineWidth(width);
1435
+ return Qnil;
1436
+ }
1437
+
1438
+ static VALUE
1439
+ gl_Materialf(obj,arg1,arg2,arg3)
1440
+ VALUE obj,arg1,arg2,arg3;
1441
+ {
1442
+ GLenum face;
1443
+ GLenum pname;
1444
+ GLfloat param;
1445
+ face = (GLenum)NUM2INT(arg1);
1446
+ pname = (GLenum)NUM2INT(arg2);
1447
+ param = (GLfloat)NUM2DBL(arg3);
1448
+ glMaterialf(face,pname,param);
1449
+ return Qnil;
1450
+ }
1451
+
1452
+ static VALUE
1453
+ gl_Materialfv(obj,arg1,arg2,arg3)
1454
+ VALUE obj,arg1,arg2,arg3;
1455
+ {
1456
+ GLenum face;
1457
+ GLenum pname;
1458
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1459
+ face = (GLenum)NUM2INT(arg1);
1460
+ pname = (GLenum)NUM2INT(arg2);
1461
+ if (TYPE(arg3) != T_ARRAY)
1462
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg3));
1463
+ ary2cflt(arg3,params,4);
1464
+ glMaterialfv(face,pname,params);
1465
+ return Qnil;
1466
+ }
1467
+
1468
+ static VALUE
1469
+ gl_Materiali(obj,arg1,arg2,arg3)
1470
+ VALUE obj,arg1,arg2,arg3;
1471
+ {
1472
+ GLenum face;
1473
+ GLenum pname;
1474
+ GLint param;
1475
+ face = (GLenum)NUM2INT(arg1);
1476
+ pname = (GLenum)NUM2INT(arg2);
1477
+ param = (GLint)NUM2INT(arg3);
1478
+ glMateriali(face,pname,param);
1479
+ return Qnil;
1480
+ }
1481
+
1482
+ static VALUE
1483
+ gl_Materialiv(obj,arg1,arg2,arg3)
1484
+ VALUE obj,arg1,arg2,arg3;
1485
+ {
1486
+ GLenum face;
1487
+ GLenum pname;
1488
+ GLint params[4] = {0,0,0,0};
1489
+ face = (GLenum)NUM2INT(arg1);
1490
+ pname = (GLenum)NUM2INT(arg2);
1491
+ if (TYPE(arg3) != T_ARRAY)
1492
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg3));
1493
+ ary2cint(arg3,params,4);
1494
+ glMaterialiv(face,pname,params);
1495
+ return Qnil;
1496
+ }
1497
+
1498
+ static VALUE
1499
+ gl_PointSize(obj,arg1)
1500
+ VALUE obj,arg1;
1501
+ {
1502
+ GLfloat size;
1503
+ size = (GLfloat)NUM2DBL(arg1);
1504
+ glPointSize(size);
1505
+ return Qnil;
1506
+ }
1507
+
1508
+ static VALUE
1509
+ gl_PolygonMode(obj,arg1,arg2)
1510
+ VALUE obj,arg1,arg2;
1511
+ {
1512
+ GLenum face;
1513
+ GLenum mode;
1514
+ face = (GLenum)NUM2INT(arg1);
1515
+ mode = (GLenum)NUM2INT(arg2);
1516
+ glPolygonMode(face,mode);
1517
+ return Qnil;
1518
+ }
1519
+
1520
+ static VALUE
1521
+ gl_PolygonStipple(obj,arg1)
1522
+ VALUE obj,arg1;
1523
+ {
1524
+ GLubyte mask[128];
1525
+ RArray* ary;
1526
+ int i;
1527
+ memset(mask, 0x0, sizeof(GLubyte[128]));
1528
+ if (TYPE(arg1) == T_ARRAY) {
1529
+ ary = RARRAY(arg1);
1530
+ for(i = 0; i < ary->len && i < 128; i++)
1531
+ mask[i] = (GLubyte)NUM2INT(ary->ptr[i]);
1532
+ }
1533
+ else if (TYPE(arg1) == T_STRING) {
1534
+ if (RSTRING(arg1)->len < 128)
1535
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg1)->len);
1536
+ memcpy(mask, RSTRING(arg1)->ptr, 128);
1537
+ }
1538
+ else
1539
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg1));
1540
+ glPolygonStipple(mask);
1541
+ return Qnil;
1542
+ }
1543
+
1544
+ static VALUE
1545
+ gl_Scissor(obj,arg1,arg2,arg3,arg4)
1546
+ VALUE obj,arg1,arg2,arg3,arg4;
1547
+ {
1548
+ GLint x;
1549
+ GLint y;
1550
+ GLsizei width;
1551
+ GLsizei height;
1552
+ x = (GLint)NUM2INT(arg1);
1553
+ y = (GLint)NUM2INT(arg2);
1554
+ width = (GLsizei)NUM2INT(arg3);
1555
+ height = (GLsizei)NUM2INT(arg4);
1556
+ glScissor(x,y,width,height);
1557
+ return Qnil;
1558
+ }
1559
+
1560
+ static VALUE
1561
+ gl_ShadeModel(obj,arg1)
1562
+ VALUE obj,arg1;
1563
+ {
1564
+ GLenum mode;
1565
+ mode = (GLenum)NUM2INT(arg1);
1566
+ glShadeModel(mode);
1567
+ return Qnil;
1568
+ }
1569
+
1570
+ static VALUE
1571
+ gl_TexParameterf(obj,arg1,arg2,arg3)
1572
+ VALUE obj,arg1,arg2,arg3;
1573
+ {
1574
+ GLenum target;
1575
+ GLenum pname;
1576
+ GLfloat param;
1577
+ target = (GLenum)NUM2INT(arg1);
1578
+ pname = (GLenum)NUM2INT(arg2);
1579
+ param = (GLfloat)NUM2DBL(arg3);
1580
+ glTexParameterf(target,pname,param);
1581
+ return Qnil;
1582
+ }
1583
+
1584
+ static VALUE
1585
+ gl_TexParameterfv(obj,arg1,arg2,arg3)
1586
+ VALUE obj,arg1,arg2,arg3;
1587
+ {
1588
+ GLenum target;
1589
+ GLenum pname;
1590
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1591
+ target = (GLenum)NUM2INT(arg1);
1592
+ pname = (GLenum)NUM2INT(arg2);
1593
+ if (TYPE(arg3) != T_ARRAY)
1594
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1595
+ ary2cflt(arg3,params,4);
1596
+ glTexParameterfv(target,pname,params);
1597
+ return Qnil;
1598
+ }
1599
+
1600
+ static VALUE
1601
+ gl_TexParameteri(obj,arg1,arg2,arg3)
1602
+ VALUE obj,arg1,arg2,arg3;
1603
+ {
1604
+ GLenum target;
1605
+ GLenum pname;
1606
+ GLint param;
1607
+ target = (GLenum)NUM2INT(arg1);
1608
+ pname = (GLenum)NUM2INT(arg2);
1609
+ param = (GLint)NUM2INT(arg3);
1610
+ glTexParameteri(target,pname,param);
1611
+ return Qnil;
1612
+ }
1613
+
1614
+ static VALUE
1615
+ gl_TexParameteriv(obj,arg1,arg2,arg3)
1616
+ VALUE obj,arg1,arg2,arg3;
1617
+ {
1618
+ GLenum target;
1619
+ GLenum pname;
1620
+ GLint params[4] = {0,0,0,0};
1621
+ target = (GLenum)NUM2INT(arg1);
1622
+ pname = (GLenum)NUM2INT(arg2);
1623
+ if (TYPE(arg3) != T_ARRAY)
1624
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1625
+ ary2cint(arg3,params,4);
1626
+ glTexParameteriv(target,pname,params);
1627
+ return Qnil;
1628
+ }
1629
+
1630
+ /* FIXME: spatna funkce ? */
1631
+ static VALUE
1632
+ gl_TexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
1633
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
1634
+ {
1635
+ GLenum target;
1636
+ GLint level;
1637
+ GLint components;
1638
+ GLsizei width;
1639
+ GLint border;
1640
+ GLenum format;
1641
+ GLenum type;
1642
+ const char *pixels;
1643
+ int size;
1644
+ int type_size;
1645
+ int format_size;
1646
+ target = (GLenum)NUM2INT(arg1);
1647
+ level = (GLint)NUM2INT(arg2);
1648
+ components = (GLint)NUM2INT(arg3);
1649
+ width = (GLsizei)NUM2INT(arg4);
1650
+ border = (GLint)NUM2INT(arg5);
1651
+ format = (GLenum)NUM2INT(arg6);
1652
+ type = (GLenum)NUM2INT(arg7);
1653
+ if (TYPE(arg8) == T_STRING) {
1654
+ type_size = gltype_size(type) / 8;
1655
+ format_size = glformat_size(format);
1656
+ if (type_size <= 0 || format_size == -1)
1657
+ return Qnil;
1658
+ size = type_size*format_size*width;
1659
+ if (RSTRING(arg8)->len < size)
1660
+ rb_raise(rb_eArgError, "string length:%d",RSTRING(arg8)->len);
1661
+ pixels = RSTRING(arg8)->ptr;
1662
+ } else if (NIL_P(arg8)) {
1663
+ type_size = gltype_size(type) / 8;
1664
+ format_size = glformat_size(format);
1665
+ if (type_size <= 0 || format_size == -1)
1666
+ return Qnil;
1667
+ size = type_size*format_size*width;
1668
+ pixels = NULL;
1669
+ } else
1670
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg8));
1671
+ glTexImage1D(target,level,components,width,border,format,type,pixels);
1672
+ return Qnil;
1673
+ }
1674
+
1675
+ static VALUE
1676
+ gl_TexImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
1677
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
1678
+ {
1679
+ GLenum target;
1680
+ GLint level;
1681
+ GLint components;
1682
+ GLsizei width;
1683
+ GLsizei height;
1684
+ GLint border;
1685
+ GLenum format;
1686
+ GLenum type;
1687
+ const char *pixels;
1688
+ int size;
1689
+ int type_size;
1690
+ int format_size;
1691
+ target = (GLenum)NUM2INT(arg1);
1692
+ level = (GLint)NUM2INT(arg2);
1693
+ components = (GLint)NUM2INT(arg3);
1694
+ width = (GLsizei)NUM2INT(arg4);
1695
+ height = (GLsizei)NUM2INT(arg5);
1696
+ border = (GLint)NUM2INT(arg6);
1697
+ format = (GLenum)NUM2INT(arg7);
1698
+ type = (GLenum)NUM2INT(arg8);
1699
+ if (TYPE(arg9) == T_STRING) {
1700
+ type_size = gltype_size(type) / 8;
1701
+ format_size = glformat_size(format);
1702
+ if (type_size <= 0 || format_size == -1)
1703
+ return Qnil;
1704
+ size = type_size*format_size*height*width;
1705
+ if (RSTRING(arg9)->len < size)
1706
+ rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len);
1707
+ pixels = RSTRING(arg9)->ptr;
1708
+ } else if (NIL_P(arg9)) {
1709
+ type_size = gltype_size(type) / 8;
1710
+ format_size = glformat_size(format);
1711
+ if (type_size <= 0 || format_size == -1)
1712
+ return Qnil;
1713
+ size = type_size*format_size*height*width;
1714
+ pixels = NULL;
1715
+ } else
1716
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg9));
1717
+ glTexImage2D(target,level,components,width,height,border,format,type,pixels);
1718
+ return Qnil;
1719
+ }
1720
+
1721
+ static VALUE
1722
+ gl_TexEnvf(obj,arg1,arg2,arg3)
1723
+ VALUE obj,arg1,arg2,arg3;
1724
+ {
1725
+ GLenum target;
1726
+ GLenum pname;
1727
+ GLfloat param;
1728
+ target = (GLenum)NUM2INT(arg1);
1729
+ pname = (GLenum)NUM2INT(arg2);
1730
+ param = (GLfloat)NUM2DBL(arg3);
1731
+ glTexEnvf(target,pname,param);
1732
+ return Qnil;
1733
+ }
1734
+
1735
+ static VALUE
1736
+ gl_TexEnvfv(obj,arg1,arg2,arg3)
1737
+ VALUE obj,arg1,arg2,arg3;
1738
+ {
1739
+ GLenum target;
1740
+ GLenum pname;
1741
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1742
+ target = (GLenum)NUM2INT(arg1);
1743
+ pname = (GLenum)NUM2INT(arg2);
1744
+ if (TYPE(arg3) != T_ARRAY)
1745
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1746
+ ary2cflt(arg3,params,4);
1747
+ glTexEnvfv(target,pname,params);
1748
+ return Qnil;
1749
+ }
1750
+
1751
+ static VALUE
1752
+ gl_TexEnvi(obj,arg1,arg2,arg3)
1753
+ VALUE obj,arg1,arg2,arg3;
1754
+ {
1755
+ GLenum target;
1756
+ GLenum pname;
1757
+ GLint param;
1758
+ target = (GLenum)NUM2INT(arg1);
1759
+ pname = (GLenum)NUM2INT(arg2);
1760
+ param = (GLint)NUM2INT(arg3);
1761
+ glTexEnvi(target,pname,param);
1762
+ return Qnil;
1763
+ }
1764
+
1765
+ static VALUE
1766
+ gl_TexEnviv(obj,arg1,arg2,arg3)
1767
+ VALUE obj,arg1,arg2,arg3;
1768
+ {
1769
+ GLenum target;
1770
+ GLenum pname;
1771
+ GLint params[4] = {0,0,0,0};
1772
+ target = (GLenum)NUM2INT(arg1);
1773
+ pname = (GLenum)NUM2INT(arg2);
1774
+ if (TYPE(arg3) != T_ARRAY)
1775
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1776
+ ary2cint(arg3,params,4);
1777
+ glTexEnviv(target,pname,params);
1778
+ return Qnil;
1779
+ }
1780
+
1781
+ static VALUE
1782
+ gl_TexGend(obj,arg1,arg2,arg3)
1783
+ VALUE obj,arg1,arg2,arg3;
1784
+ {
1785
+ GLenum coord;
1786
+ GLenum pname;
1787
+ GLdouble param;
1788
+ coord = (GLenum)NUM2INT(arg1);
1789
+ pname = (GLenum)NUM2INT(arg2);
1790
+ param = (GLdouble)NUM2DBL(arg3);
1791
+ glTexGend(coord,pname,param);
1792
+ return Qnil;
1793
+ }
1794
+
1795
+ static VALUE
1796
+ gl_TexGendv(obj,arg1,arg2,arg3)
1797
+ VALUE obj,arg1,arg2,arg3;
1798
+ {
1799
+ GLenum coord;
1800
+ GLenum pname;
1801
+ GLdouble params[4] = {0.0,0.0,0.0,0.0};
1802
+ coord = (GLenum)NUM2INT(arg1);
1803
+ pname = (GLenum)NUM2INT(arg2);
1804
+ if (TYPE(arg3) != T_ARRAY)
1805
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1806
+ ary2cdbl(arg3,params,4);
1807
+ glTexGendv(coord,pname,params);
1808
+ return Qnil;
1809
+ }
1810
+
1811
+
1812
+ static VALUE
1813
+ gl_TexGenf(obj,arg1,arg2,arg3)
1814
+ VALUE obj,arg1,arg2,arg3;
1815
+ {
1816
+ GLenum coord;
1817
+ GLenum pname;
1818
+ GLfloat param;
1819
+ coord = (GLenum)NUM2INT(arg1);
1820
+ pname = (GLenum)NUM2INT(arg2);
1821
+ param = (GLfloat)NUM2DBL(arg3);
1822
+ glTexGenf(coord,pname,param);
1823
+ return Qnil;
1824
+ }
1825
+
1826
+ static VALUE
1827
+ gl_TexGenfv(obj,arg1,arg2,arg3)
1828
+ VALUE obj,arg1,arg2,arg3;
1829
+ {
1830
+ GLenum coord;
1831
+ GLenum pname;
1832
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
1833
+ coord = (GLenum)NUM2INT(arg1);
1834
+ pname = (GLenum)NUM2INT(arg2);
1835
+ if (TYPE(arg3) != T_ARRAY)
1836
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1837
+ ary2cflt(arg3,params,4);
1838
+ glTexGenfv(coord,pname,params);
1839
+ return Qnil;
1840
+ }
1841
+
1842
+ static VALUE
1843
+ gl_TexGeni(obj,arg1,arg2,arg3)
1844
+ VALUE obj,arg1,arg2,arg3;
1845
+ {
1846
+ GLenum coord;
1847
+ GLenum pname;
1848
+ GLint param;
1849
+ coord = (GLenum)NUM2INT(arg1);
1850
+ pname = (GLenum)NUM2INT(arg2);
1851
+ param = (GLint)NUM2INT(arg3);
1852
+ glTexGeni(coord,pname,param);
1853
+ return Qnil;
1854
+ }
1855
+
1856
+ static VALUE
1857
+ gl_TexGeniv(obj,arg1,arg2,arg3)
1858
+ VALUE obj,arg1,arg2,arg3;
1859
+ {
1860
+ GLenum coord;
1861
+ GLenum pname;
1862
+ GLint params[4] = {0,0,0,0};
1863
+ coord = (GLenum)NUM2INT(arg1);
1864
+ pname = (GLenum)NUM2INT(arg2);
1865
+ if (TYPE(arg3) != T_ARRAY)
1866
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg3));
1867
+ ary2cint(arg3,params,4);
1868
+ glTexGeniv(coord,pname,params);
1869
+ return Qnil;
1870
+ }
1871
+
1872
+ #define DEFAULT_BUFFER 512
1873
+ static VALUE g_current_feed_buffer;
1874
+ static VALUE
1875
+ gl_FeedbackBuffer(argc, argv, obj)
1876
+ int argc;
1877
+ VALUE* argv;
1878
+ VALUE obj;
1879
+ {
1880
+ GLsizei size;
1881
+ GLenum type;
1882
+ if (argc == 0) {
1883
+ size = DEFAULT_BUFFER;
1884
+ type = GL_4D_COLOR_TEXTURE;
1885
+ }
1886
+ else if (argc == 2) {
1887
+ size = NUM2INT(argv[0]);
1888
+ type = NUM2INT(argv[1]);
1889
+ }
1890
+ else {
1891
+ rb_raise(rb_eTypeError, "GL.FeedbackBuffer");
1892
+ }
1893
+ g_current_feed_buffer = allocate_buffer_with_string(sizeof(GLfloat)*size);
1894
+ rb_str_freeze(g_current_feed_buffer);
1895
+ glFeedbackBuffer(size, type, (GLfloat*)RSTRING(g_current_feed_buffer)->ptr);
1896
+ return g_current_feed_buffer;
1897
+ }
1898
+
1899
+ static VALUE g_current_sel_buffer;
1900
+ static VALUE
1901
+ gl_SelectBuffer(argc,argv,obj)
1902
+ int argc;
1903
+ VALUE *argv;
1904
+ VALUE obj;
1905
+ {
1906
+ VALUE args;
1907
+ GLsizei size;
1908
+ size = DEFAULT_BUFFER;
1909
+ rb_scan_args(argc, argv, "01", &args);
1910
+ if (args != Qnil)
1911
+ size = (GLsizei)NUM2INT(args);
1912
+ g_current_sel_buffer = allocate_buffer_with_string(sizeof(GLuint)*size);
1913
+ rb_str_freeze(g_current_sel_buffer);
1914
+ glSelectBuffer(size, (GLuint*)RSTRING(g_current_sel_buffer)->ptr);
1915
+ return g_current_sel_buffer;
1916
+ }
1917
+
1918
+ static VALUE
1919
+ gl_RenderMode(obj,arg1)
1920
+ VALUE obj,arg1;
1921
+ {
1922
+ GLenum mode;
1923
+ GLint ret;
1924
+ mode = (GLenum)NUM2INT(arg1);
1925
+ ret = glRenderMode(mode);
1926
+ return INT2NUM(ret);
1927
+ }
1928
+
1929
+ static VALUE
1930
+ gl_InitNames(obj)
1931
+ VALUE obj;
1932
+ {
1933
+ glInitNames();
1934
+ return Qnil;
1935
+ }
1936
+
1937
+ static VALUE
1938
+ gl_LoadName(obj,arg1)
1939
+ VALUE obj,arg1;
1940
+ {
1941
+ GLuint name;
1942
+ name = (GLuint)NUM2INT(arg1);
1943
+ glLoadName(name);
1944
+ return Qnil;
1945
+ }
1946
+
1947
+ static VALUE
1948
+ gl_PassThrough(obj,arg1)
1949
+ VALUE obj,arg1;
1950
+ {
1951
+ GLfloat token;
1952
+ token = (GLfloat)NUM2DBL(arg1);
1953
+ glPassThrough(token);
1954
+ return Qnil;
1955
+ }
1956
+
1957
+ static VALUE
1958
+ gl_PopName(obj)
1959
+ VALUE obj;
1960
+ {
1961
+ glPopName();
1962
+ return Qnil;
1963
+ }
1964
+
1965
+ static VALUE
1966
+ gl_PushName(obj,arg1)
1967
+ VALUE obj,arg1;
1968
+ {
1969
+ GLuint name;
1970
+ name = (GLuint)NUM2INT(arg1);
1971
+ glPushName(name);
1972
+ return Qnil;
1973
+ }
1974
+
1975
+ static VALUE
1976
+ gl_DrawBuffer(obj,arg1)
1977
+ VALUE obj,arg1;
1978
+ {
1979
+ GLenum mode;
1980
+ mode = (GLenum)NUM2INT(arg1);
1981
+ glDrawBuffer(mode);
1982
+ return Qnil;
1983
+ }
1984
+
1985
+ static VALUE
1986
+ gl_Clear(obj,arg1)
1987
+ VALUE obj,arg1;
1988
+ {
1989
+ GLbitfield mask;
1990
+ mask = (GLbitfield)NUM2INT(arg1);
1991
+ glClear(mask);
1992
+ return Qnil;
1993
+ }
1994
+
1995
+ static VALUE
1996
+ gl_ClearAccum(obj,arg1,arg2,arg3,arg4)
1997
+ VALUE obj,arg1,arg2,arg3,arg4;
1998
+ {
1999
+ GLfloat red;
2000
+ GLfloat green;
2001
+ GLfloat blue;
2002
+ GLfloat alpha;
2003
+ red = (GLfloat)NUM2DBL(arg1);
2004
+ green = (GLfloat)NUM2DBL(arg2);
2005
+ blue = (GLfloat)NUM2DBL(arg3);
2006
+ alpha = (GLfloat)NUM2DBL(arg4);
2007
+ glClearAccum(red,green,blue,alpha);
2008
+ return Qnil;
2009
+ }
2010
+
2011
+ static VALUE
2012
+ gl_ClearIndex(obj,arg1)
2013
+ VALUE obj,arg1;
2014
+ {
2015
+ GLfloat c;
2016
+ c = (GLfloat)NUM2DBL(arg1);
2017
+ glClearIndex(c);
2018
+ return Qnil;
2019
+ }
2020
+
2021
+ static VALUE
2022
+ gl_ClearColor(obj,arg1,arg2,arg3,arg4)
2023
+ VALUE obj,arg1,arg2,arg3,arg4;
2024
+ {
2025
+ GLclampf red;
2026
+ GLclampf green;
2027
+ GLclampf blue;
2028
+ GLclampf alpha;
2029
+ red = (GLclampf)NUM2DBL(arg1);
2030
+ green = (GLclampf)NUM2DBL(arg2);
2031
+ blue = (GLclampf)NUM2DBL(arg3);
2032
+ alpha = (GLclampf)NUM2DBL(arg4);
2033
+ glClearColor(red,green,blue,alpha);
2034
+ return Qnil;
2035
+ }
2036
+
2037
+ static VALUE
2038
+ gl_ClearStencil(obj,arg1)
2039
+ VALUE obj,arg1;
2040
+ {
2041
+ GLint s;
2042
+ s = (GLint)NUM2INT(arg1);
2043
+ glClearStencil(s);
2044
+ return Qnil;
2045
+ }
2046
+
2047
+ static VALUE
2048
+ gl_ClearDepth(obj,arg1)
2049
+ VALUE obj,arg1;
2050
+ {
2051
+ GLclampd depth;
2052
+ depth = (GLclampd)NUM2DBL(arg1);
2053
+ glClearDepth(depth);
2054
+ return Qnil;
2055
+ }
2056
+
2057
+ static VALUE
2058
+ gl_StencilMask(obj,arg1)
2059
+ VALUE obj,arg1;
2060
+ {
2061
+ GLuint mask;
2062
+ mask = (GLuint)NUM2INT(arg1);
2063
+ glStencilMask(mask);
2064
+ return Qnil;
2065
+ }
2066
+
2067
+ static VALUE
2068
+ gl_ColorMask(obj,arg1,arg2,arg3,arg4)
2069
+ VALUE obj,arg1,arg2,arg3,arg4;
2070
+ {
2071
+ GLboolean red;
2072
+ GLboolean green;
2073
+ GLboolean blue;
2074
+ GLboolean alpha;
2075
+ red = (GLboolean)NUM2INT(arg1);
2076
+ green = (GLboolean)NUM2INT(arg2);
2077
+ blue = (GLboolean)NUM2INT(arg3);
2078
+ alpha = (GLboolean)NUM2INT(arg4);
2079
+ glColorMask(red,green,blue,alpha);
2080
+ return Qnil;
2081
+ }
2082
+
2083
+ static VALUE
2084
+ gl_DepthMask(obj,arg1)
2085
+ VALUE obj,arg1;
2086
+ {
2087
+ GLboolean flag;
2088
+ flag = (GLboolean)NUM2INT(arg1);
2089
+ glDepthMask(flag);
2090
+ return Qnil;
2091
+ }
2092
+
2093
+ static VALUE
2094
+ gl_IndexMask(obj,arg1)
2095
+ VALUE obj,arg1;
2096
+ {
2097
+ GLuint mask;
2098
+ mask = (GLuint)NUM2INT(arg1);
2099
+ glIndexMask(mask);
2100
+ return Qnil;
2101
+ }
2102
+
2103
+ static VALUE
2104
+ gl_Accum(obj,arg1,arg2)
2105
+ VALUE obj,arg1,arg2;
2106
+ {
2107
+ GLenum op;
2108
+ GLfloat value;
2109
+ op = (GLenum)NUM2INT(arg1);
2110
+ value = (GLfloat)NUM2DBL(arg2);
2111
+ glAccum(op,value);
2112
+ return Qnil;
2113
+ }
2114
+
2115
+ static VALUE
2116
+ gl_Disable(obj,arg1)
2117
+ VALUE obj,arg1;
2118
+ {
2119
+ GLenum cap;
2120
+ cap = (GLenum)NUM2INT(arg1);
2121
+ glDisable(cap);
2122
+ return Qnil;
2123
+ }
2124
+
2125
+ static VALUE
2126
+ gl_Enable(obj,arg1)
2127
+ VALUE obj,arg1;
2128
+ {
2129
+ GLenum cap;
2130
+ cap = (GLenum)NUM2INT(arg1);
2131
+ glEnable(cap);
2132
+ return Qnil;
2133
+ }
2134
+
2135
+ static VALUE
2136
+ gl_Finish(obj)
2137
+ VALUE obj;
2138
+ {
2139
+ glFinish();
2140
+ return Qnil;
2141
+ }
2142
+
2143
+ static VALUE
2144
+ gl_Flush(obj)
2145
+ VALUE obj;
2146
+ {
2147
+ glFlush();
2148
+ return Qnil;
2149
+ }
2150
+
2151
+ static VALUE
2152
+ gl_PopAttrib(obj)
2153
+ VALUE obj;
2154
+ {
2155
+ glPopAttrib();
2156
+ return Qnil;
2157
+ }
2158
+
2159
+ static VALUE
2160
+ gl_PushAttrib(obj,arg1)
2161
+ VALUE obj,arg1;
2162
+ {
2163
+ GLbitfield mask;
2164
+ mask = (GLbitfield)NUM2INT(arg1);
2165
+ glPushAttrib(mask);
2166
+ return Qnil;
2167
+ }
2168
+
2169
+ static VALUE
2170
+ gl_Map1d(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2171
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2172
+ {
2173
+ GLenum target;
2174
+ GLdouble u1;
2175
+ GLdouble u2;
2176
+ GLint stride;
2177
+ GLint order;
2178
+ GLdouble *points;
2179
+
2180
+ VALUE work_ary;
2181
+
2182
+ target = (GLenum)NUM2INT(arg1);
2183
+ u1 = (GLdouble)NUM2DBL(arg2);
2184
+ u2 = (GLdouble)NUM2DBL(arg3);
2185
+ stride = (GLint)NUM2INT(arg4);
2186
+ order = (GLint)NUM2INT(arg5);
2187
+ points = ALLOC_N(GLdouble, order*stride);
2188
+ work_ary = rb_ary_new();
2189
+ mary2ary(arg6, work_ary);
2190
+ ary2cdbl(work_ary, points, order*stride);
2191
+ glMap1d(target, u1, u2, stride, order, points);
2192
+ xfree(points);
2193
+ return Qnil;
2194
+ }
2195
+
2196
+ static VALUE
2197
+ gl_Map1f(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2198
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2199
+ {
2200
+ GLenum target;
2201
+ GLfloat u1;
2202
+ GLfloat u2;
2203
+ GLint stride;
2204
+ GLint order;
2205
+ GLfloat *points;
2206
+
2207
+ VALUE work_ary;
2208
+
2209
+ target = (GLenum)NUM2INT(arg1);
2210
+ u1 = (GLfloat)NUM2DBL(arg2);
2211
+ u2 = (GLfloat)NUM2DBL(arg3);
2212
+ stride = (GLint)NUM2INT(arg4);
2213
+ order = (GLint)NUM2INT(arg5);
2214
+ points = ALLOC_N(GLfloat, order*stride);
2215
+ work_ary = rb_ary_new();
2216
+ mary2ary(arg6, work_ary);
2217
+ ary2cflt(work_ary, points, order*stride);
2218
+ glMap1f(target, u1, u2, stride, order, points);
2219
+ xfree(points);
2220
+ return Qnil;
2221
+ }
2222
+
2223
+ static VALUE
2224
+ gl_Map2d(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
2225
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
2226
+ {
2227
+ GLenum target;
2228
+ GLdouble u1;
2229
+ GLdouble u2;
2230
+ GLint ustride;
2231
+ GLint uorder;
2232
+ GLdouble v1;
2233
+ GLdouble v2;
2234
+ GLint vstride;
2235
+ GLint vorder;
2236
+ GLdouble *points;
2237
+
2238
+ VALUE work_ary;
2239
+
2240
+ target = (GLenum)NUM2INT(arg1);
2241
+ u1 = (GLdouble)NUM2INT(arg2);
2242
+ u2 = (GLdouble)NUM2INT(arg3);
2243
+ ustride = (GLint)NUM2INT(arg4);
2244
+ uorder = (GLint)NUM2INT(arg5);
2245
+ v1 = (GLdouble)NUM2INT(arg6);
2246
+ v2 = (GLdouble)NUM2INT(arg7);
2247
+ vstride = (GLint)NUM2INT(arg8);
2248
+ vorder = (GLint)NUM2INT(arg9);
2249
+ points = ALLOC_N(GLdouble, MAX(ustride*uorder, vstride*vorder));
2250
+ work_ary = rb_ary_new();
2251
+ mary2ary(arg10, work_ary);
2252
+ ary2cdbl(arg10, points, MAX(ustride*uorder, vstride*vorder));
2253
+ glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
2254
+ xfree(points);
2255
+ return Qnil;
2256
+ }
2257
+
2258
+ static VALUE
2259
+ gl_Map2f(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
2260
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10;
2261
+ {
2262
+ GLenum target;
2263
+ GLfloat u1;
2264
+ GLfloat u2;
2265
+ GLint ustride;
2266
+ GLint uorder;
2267
+ GLfloat v1;
2268
+ GLfloat v2;
2269
+ GLint vstride;
2270
+ GLint vorder;
2271
+ GLfloat *points;
2272
+
2273
+ VALUE work_ary;
2274
+
2275
+ target = (GLenum)NUM2INT(arg1);
2276
+ u1 = (GLfloat)NUM2INT(arg2);
2277
+ u2 = (GLfloat)NUM2INT(arg3);
2278
+ ustride = (GLint)NUM2INT(arg4);
2279
+ uorder = (GLint)NUM2INT(arg5);
2280
+ v1 = (GLfloat)NUM2INT(arg6);
2281
+ v2 = (GLfloat)NUM2INT(arg7);
2282
+ vstride = (GLint)NUM2INT(arg8);
2283
+ vorder = (GLint)NUM2INT(arg9);
2284
+ points = ALLOC_N(GLfloat, MAX(ustride*uorder, vstride*vorder));
2285
+ work_ary = rb_ary_new();
2286
+ mary2ary(arg10, work_ary);
2287
+ ary2cflt(arg10, points, MAX(ustride*uorder, vstride*vorder));
2288
+ glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
2289
+ xfree(points);
2290
+ return Qnil;
2291
+ }
2292
+
2293
+ static VALUE
2294
+ gl_MapGrid1d(obj,arg1,arg2,arg3)
2295
+ VALUE obj,arg1,arg2,arg3;
2296
+ {
2297
+ GLint un;
2298
+ GLdouble u1;
2299
+ GLdouble u2;
2300
+ un = (GLint)NUM2INT(arg1);
2301
+ u1 = (GLdouble)NUM2DBL(arg2);
2302
+ u2 = (GLdouble)NUM2DBL(arg3);
2303
+ glMapGrid1d(un,u1,u2);
2304
+ return Qnil;
2305
+ }
2306
+
2307
+ static VALUE
2308
+ gl_MapGrid1f(obj,arg1,arg2,arg3)
2309
+ VALUE obj,arg1,arg2,arg3;
2310
+ {
2311
+ GLint un;
2312
+ GLfloat u1;
2313
+ GLfloat u2;
2314
+ un = (GLint)NUM2INT(arg1);
2315
+ u1 = (GLfloat)NUM2DBL(arg2);
2316
+ u2 = (GLfloat)NUM2DBL(arg3);
2317
+ glMapGrid1f(un,u1,u2);
2318
+ return Qnil;
2319
+ }
2320
+
2321
+ static VALUE
2322
+ gl_MapGrid2d(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2323
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2324
+ {
2325
+ GLint un;
2326
+ GLdouble u1;
2327
+ GLdouble u2;
2328
+ GLint vn;
2329
+ GLdouble v1;
2330
+ GLdouble v2;
2331
+ un = (GLint)NUM2INT(arg1);
2332
+ u1 = (GLdouble)NUM2DBL(arg2);
2333
+ u2 = (GLdouble)NUM2DBL(arg3);
2334
+ vn = (GLint)NUM2INT(arg4);
2335
+ v1 = (GLdouble)NUM2DBL(arg5);
2336
+ v2 = (GLdouble)NUM2DBL(arg6);
2337
+ glMapGrid2d(un,u1,u2,vn,v1,v2);
2338
+ return Qnil;
2339
+ }
2340
+
2341
+ static VALUE
2342
+ gl_MapGrid2f(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2343
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2344
+ {
2345
+ GLint un;
2346
+ GLfloat u1;
2347
+ GLfloat u2;
2348
+ GLint vn;
2349
+ GLfloat v1;
2350
+ GLfloat v2;
2351
+ un = (GLint)NUM2INT(arg1);
2352
+ u1 = (GLfloat)NUM2DBL(arg2);
2353
+ u2 = (GLfloat)NUM2DBL(arg3);
2354
+ vn = (GLint)NUM2INT(arg4);
2355
+ v1 = (GLfloat)NUM2DBL(arg5);
2356
+ v2 = (GLfloat)NUM2DBL(arg6);
2357
+ glMapGrid2f(un,u1,u2,vn,v1,v2);
2358
+ return Qnil;
2359
+ }
2360
+
2361
+ static VALUE
2362
+ gl_EvalCoord1d(obj,arg1)
2363
+ VALUE obj,arg1;
2364
+ {
2365
+ GLdouble u;
2366
+ u = (GLdouble)NUM2DBL(arg1);
2367
+ glEvalCoord1d(u);
2368
+ return Qnil;
2369
+ }
2370
+
2371
+ static VALUE
2372
+ gl_EvalCoord1dv(obj,arg1)
2373
+ VALUE obj,arg1;
2374
+ {
2375
+ GLdouble params[1] = {0.0};
2376
+ if (TYPE(arg1) != T_ARRAY)
2377
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
2378
+ ary2cdbl(arg1,params,1);
2379
+ glEvalCoord1dv(params);
2380
+ return Qnil;
2381
+ }
2382
+
2383
+ static VALUE
2384
+ gl_EvalCoord1f(obj,arg1)
2385
+ VALUE obj,arg1;
2386
+ {
2387
+ GLfloat u;
2388
+ u = (GLfloat)NUM2DBL(arg1);
2389
+ glEvalCoord1f(u);
2390
+ return Qnil;
2391
+ }
2392
+
2393
+ static VALUE
2394
+ gl_EvalCoord1fv(obj,arg1)
2395
+ VALUE obj,arg1;
2396
+ {
2397
+ GLfloat params[1] = {0.0};
2398
+ if (TYPE(arg1) != T_ARRAY)
2399
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
2400
+ ary2cflt(arg1,params,1);
2401
+ glEvalCoord1fv(params);
2402
+ return Qnil;
2403
+ }
2404
+
2405
+ static VALUE
2406
+ gl_EvalCoord2d(obj,arg1,arg2)
2407
+ VALUE obj,arg1,arg2;
2408
+ {
2409
+ GLdouble u;
2410
+ GLdouble v;
2411
+ u = (GLdouble)NUM2DBL(arg1);
2412
+ v = (GLdouble)NUM2DBL(arg2);
2413
+ glEvalCoord2d(u,v);
2414
+ return Qnil;
2415
+ }
2416
+
2417
+ static VALUE
2418
+ gl_EvalCoord2dv(obj,arg1)
2419
+ VALUE obj,arg1;
2420
+ {
2421
+ GLdouble params[2] = {0.0,0.0};
2422
+ if (TYPE(arg1) != T_ARRAY)
2423
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
2424
+ ary2cdbl(arg1,params,2);
2425
+ glEvalCoord2dv(params);
2426
+ return Qnil;
2427
+ }
2428
+
2429
+ static VALUE
2430
+ gl_EvalCoord2f(obj,arg1,arg2)
2431
+ VALUE obj,arg1,arg2;
2432
+ {
2433
+ GLfloat u;
2434
+ GLfloat v;
2435
+ u = (GLfloat)NUM2DBL(arg1);
2436
+ v = (GLfloat)NUM2DBL(arg2);
2437
+ glEvalCoord2f(u,v);
2438
+ return Qnil;
2439
+ }
2440
+
2441
+ static VALUE
2442
+ gl_EvalCoord2fv(obj,arg1)
2443
+ VALUE obj,arg1;
2444
+ {
2445
+ GLfloat params[2] = {0.0,0.0};
2446
+ if (TYPE(arg1) != T_ARRAY)
2447
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
2448
+ ary2cflt(arg1,params,2);
2449
+ glEvalCoord2fv(params);
2450
+ return Qnil;
2451
+ }
2452
+
2453
+ static VALUE
2454
+ gl_EvalMesh1(obj,arg1,arg2,arg3)
2455
+ VALUE obj,arg1,arg2,arg3;
2456
+ {
2457
+ GLenum mode;
2458
+ GLint i1;
2459
+ GLint i2;
2460
+ mode = (GLenum)NUM2INT(arg1);
2461
+ i1 = (GLint)NUM2INT(arg2);
2462
+ i2 = (GLint)NUM2INT(arg3);
2463
+ glEvalMesh1(mode,i1,i2);
2464
+ return Qnil;
2465
+ }
2466
+
2467
+ static VALUE
2468
+ gl_EvalPoint1(obj,arg1)
2469
+ VALUE obj,arg1;
2470
+ {
2471
+ GLint i;
2472
+ i = (GLint)NUM2INT(arg1);
2473
+ glEvalPoint1(i);
2474
+ return Qnil;
2475
+ }
2476
+
2477
+ static VALUE
2478
+ gl_EvalMesh2(obj,arg1,arg2,arg3,arg4,arg5)
2479
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
2480
+ {
2481
+ GLenum mode;
2482
+ GLint i1;
2483
+ GLint i2;
2484
+ GLint j1;
2485
+ GLint j2;
2486
+ mode = (GLenum)NUM2INT(arg1);
2487
+ i1 = (GLint)NUM2INT(arg2);
2488
+ i2 = (GLint)NUM2INT(arg3);
2489
+ j1 = (GLint)NUM2INT(arg4);
2490
+ j2 = (GLint)NUM2INT(arg5);
2491
+ glEvalMesh2(mode,i1,i2,j1,j2);
2492
+ return Qnil;
2493
+ }
2494
+
2495
+ static VALUE
2496
+ gl_EvalPoint2(obj,arg1,arg2)
2497
+ VALUE obj,arg1,arg2;
2498
+ {
2499
+ GLint i;
2500
+ GLint j;
2501
+ i = (GLint)NUM2INT(arg1);
2502
+ j = (GLint)NUM2INT(arg2);
2503
+ glEvalPoint2(i,j);
2504
+ return Qnil;
2505
+ }
2506
+
2507
+ static VALUE
2508
+ gl_AlphaFunc(obj,arg1,arg2)
2509
+ VALUE obj,arg1,arg2;
2510
+ {
2511
+ GLenum func;
2512
+ GLclampf ref;
2513
+ func = (GLenum)NUM2INT(arg1);
2514
+ ref = (GLclampf)NUM2DBL(arg2);
2515
+ glAlphaFunc(func,ref);
2516
+ return Qnil;
2517
+ }
2518
+
2519
+ static VALUE
2520
+ gl_BlendFunc(obj,arg1,arg2)
2521
+ VALUE obj,arg1,arg2;
2522
+ {
2523
+ GLenum sfactor;
2524
+ GLenum dfactor;
2525
+ sfactor = (GLenum)NUM2INT(arg1);
2526
+ dfactor = (GLenum)NUM2INT(arg2);
2527
+ glBlendFunc(sfactor,dfactor);
2528
+ return Qnil;
2529
+ }
2530
+
2531
+ static VALUE
2532
+ gl_LogicOp(obj,arg1)
2533
+ VALUE obj,arg1;
2534
+ {
2535
+ GLenum opcode;
2536
+ opcode = (GLenum)NUM2INT(arg1);
2537
+ glLogicOp(opcode);
2538
+ return Qnil;
2539
+ }
2540
+
2541
+ static VALUE
2542
+ gl_StencilFunc(obj,arg1,arg2,arg3)
2543
+ VALUE obj,arg1,arg2,arg3;
2544
+ {
2545
+ GLenum func;
2546
+ GLint ref;
2547
+ GLuint mask;
2548
+ func = (GLenum)NUM2INT(arg1);
2549
+ ref = (GLint)NUM2INT(arg2);
2550
+ mask = (GLuint)NUM2INT(arg3);
2551
+ glStencilFunc(func,ref,mask);
2552
+ return Qnil;
2553
+ }
2554
+
2555
+ static VALUE
2556
+ gl_StencilOp(obj,arg1,arg2,arg3)
2557
+ VALUE obj,arg1,arg2,arg3;
2558
+ {
2559
+ GLenum fail;
2560
+ GLenum zfail;
2561
+ GLenum zpass;
2562
+ fail = (GLenum)NUM2INT(arg1);
2563
+ zfail = (GLenum)NUM2INT(arg2);
2564
+ zpass = (GLenum)NUM2INT(arg3);
2565
+ glStencilOp(fail,zfail,zpass);
2566
+ return Qnil;
2567
+ }
2568
+
2569
+ static VALUE
2570
+ gl_DepthFunc(obj,arg1)
2571
+ VALUE obj,arg1;
2572
+ {
2573
+ GLenum func;
2574
+ func = (GLenum)NUM2INT(arg1);
2575
+ glDepthFunc(func);
2576
+ return Qnil;
2577
+ }
2578
+
2579
+ static VALUE
2580
+ gl_PixelZoom(obj,arg1,arg2)
2581
+ VALUE obj,arg1,arg2;
2582
+ {
2583
+ GLfloat xfactor;
2584
+ GLfloat yfactor;
2585
+ xfactor = (GLfloat)NUM2DBL(arg1);
2586
+ yfactor = (GLfloat)NUM2DBL(arg2);
2587
+ glPixelZoom(xfactor,yfactor);
2588
+ return Qnil;
2589
+ }
2590
+
2591
+ static VALUE
2592
+ gl_PixelTransferf(obj,arg1,arg2)
2593
+ VALUE obj,arg1,arg2;
2594
+ {
2595
+ GLenum pname;
2596
+ GLfloat param;
2597
+ pname = (GLenum)NUM2INT(arg1);
2598
+ param = (GLfloat)NUM2DBL(arg2);
2599
+ glPixelTransferf(pname,param);
2600
+ return Qnil;
2601
+ }
2602
+
2603
+ static VALUE
2604
+ gl_PixelTransferi(obj,arg1,arg2)
2605
+ VALUE obj,arg1,arg2;
2606
+ {
2607
+ GLenum pname;
2608
+ GLint param;
2609
+ pname = (GLenum)NUM2INT(arg1);
2610
+ param = (GLint)NUM2INT(arg2);
2611
+ glPixelTransferi(pname,param);
2612
+ return Qnil;
2613
+ }
2614
+
2615
+ static VALUE
2616
+ gl_PixelStoref(obj,arg1,arg2)
2617
+ VALUE obj,arg1,arg2;
2618
+ {
2619
+ GLenum pname;
2620
+ GLfloat param;
2621
+ pname = (GLenum)NUM2INT(arg1);
2622
+ param = (GLfloat)NUM2DBL(arg2);
2623
+ glPixelStoref(pname,param);
2624
+ return Qnil;
2625
+ }
2626
+
2627
+ static VALUE
2628
+ gl_PixelStorei(obj,arg1,arg2)
2629
+ VALUE obj,arg1,arg2;
2630
+ {
2631
+ GLenum pname;
2632
+ GLint param;
2633
+ pname = (GLenum)NUM2INT(arg1);
2634
+ param = (GLint)NUM2INT(arg2);
2635
+ glPixelStorei(pname,param);
2636
+ return Qnil;
2637
+ }
2638
+
2639
+ static VALUE
2640
+ gl_PixelMapfv(obj,arg1,arg2)
2641
+ VALUE obj,arg1,arg2;
2642
+ {
2643
+ GLenum map;
2644
+ GLfloat *values;
2645
+ GLsizei size;
2646
+ map = (GLenum)NUM2INT(arg1);
2647
+ if (TYPE(arg2) != T_ARRAY)
2648
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
2649
+ size = RARRAY(arg2)->len;
2650
+ values = ALLOC_N(GLfloat,size);
2651
+ ary2cflt(arg2,values,size);
2652
+ glPixelMapfv(map,size,values);
2653
+ xfree(values);
2654
+ return Qnil;
2655
+ }
2656
+
2657
+ static VALUE
2658
+ gl_PixelMapuiv(obj,arg1,arg2)
2659
+ VALUE obj,arg1,arg2;
2660
+ {
2661
+ GLenum map;
2662
+ GLuint *values;
2663
+ GLsizei size;
2664
+ map = (GLenum)NUM2INT(arg1);
2665
+ if (TYPE(arg2) != T_ARRAY)
2666
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
2667
+ size = RARRAY(arg2)->len;
2668
+ values = ALLOC_N(GLuint,size);
2669
+ ary2cuint(arg2,values,size);
2670
+ glPixelMapuiv(map,size,values);
2671
+ xfree(values);
2672
+ return Qnil;
2673
+ }
2674
+
2675
+ static VALUE
2676
+ gl_PixelMapusv(obj,arg1,arg2)
2677
+ VALUE obj,arg1,arg2;
2678
+ {
2679
+ GLenum map;
2680
+ GLushort *values;
2681
+ GLsizei size;
2682
+ map = (GLenum)NUM2INT(arg1);
2683
+ if (TYPE(arg2) != T_ARRAY)
2684
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
2685
+ size = RARRAY(arg2)->len;
2686
+ values = ALLOC_N(GLushort,size);
2687
+ ary2cushort(arg2,values,size);
2688
+ glPixelMapusv(map,size,values);
2689
+ xfree(values);
2690
+ return Qnil;
2691
+ }
2692
+
2693
+ static VALUE
2694
+ gl_ReadBuffer(obj,arg1)
2695
+ VALUE obj,arg1;
2696
+ {
2697
+ GLenum mode;
2698
+ mode = (GLenum)NUM2INT(arg1);
2699
+ glReadBuffer(mode);
2700
+ return Qnil;
2701
+ }
2702
+
2703
+ static VALUE
2704
+ gl_CopyPixels(obj,arg1,arg2,arg3,arg4,arg5)
2705
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
2706
+ {
2707
+ GLint x;
2708
+ GLint y;
2709
+ GLsizei width;
2710
+ GLsizei height;
2711
+ GLenum type;
2712
+ x = (GLint)NUM2INT(arg1);
2713
+ y = (GLint)NUM2INT(arg2);
2714
+ width = (GLsizei)NUM2INT(arg3);
2715
+ height = (GLsizei)NUM2INT(arg4);
2716
+ type = (GLenum)NUM2INT(arg5);
2717
+ glCopyPixels(x,y,width,height,type);
2718
+ return Qnil;
2719
+ }
2720
+
2721
+ static VALUE
2722
+ gl_ReadPixels(obj,arg1,arg2,arg3,arg4,arg5,arg6)
2723
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
2724
+ {
2725
+ GLint x;
2726
+ GLint y;
2727
+ GLsizei width;
2728
+ GLsizei height;
2729
+ int format;
2730
+ int type;
2731
+ VALUE pixels;
2732
+ x = (GLint)NUM2INT(arg1);
2733
+ y = (GLint)NUM2INT(arg2);
2734
+ width = (GLsizei)NUM2INT(arg3);
2735
+ height = (GLsizei)NUM2INT(arg4);
2736
+ format = NUM2INT(arg5);
2737
+ type = NUM2INT(arg6);
2738
+ if (format != -1 && type != -1) {
2739
+ int type_size;
2740
+ int format_size;
2741
+ type_size = gltype_size(type) / 8;
2742
+ format_size = glformat_size(format);
2743
+ pixels = allocate_buffer_with_string(width*height*format_size*type_size);
2744
+ glReadPixels(x,y,width,height,format,type,(GLvoid*)RSTRING(pixels)->ptr);
2745
+ return pixels;
2746
+ }
2747
+ return Qnil;
2748
+ }
2749
+
2750
+ static VALUE
2751
+ gl_DrawPixels(obj,arg1,arg2,arg3,arg4,arg5)
2752
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
2753
+ {
2754
+ GLsizei width;
2755
+ GLsizei height;
2756
+ GLenum format;
2757
+ GLenum type;
2758
+ const char *pixels;
2759
+ width = (GLsizei)NUM2INT(arg1);
2760
+ height = (GLsizei)NUM2INT(arg2);
2761
+ format = (GLenum)NUM2INT(arg3);
2762
+ type = (GLenum)NUM2INT(arg4);
2763
+ if (format != -1 && type != -1) {
2764
+ if (TYPE(arg5) != T_STRING)
2765
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg5));
2766
+ if (RSTRING(arg5)->len < width * height * glformat_size(format) * gltype_size(type) / 8)
2767
+ rb_raise(rb_eArgError, "string length:%d", RSTRING(arg5)->len);
2768
+ pixels = RSTRING(arg5)->ptr;
2769
+ glDrawPixels(width,height,format,type,pixels);
2770
+ }
2771
+ return Qnil;
2772
+ }
2773
+
2774
+ static VALUE
2775
+ gl_GetClipPlane(obj,arg1)
2776
+ VALUE obj,arg1;
2777
+ {
2778
+ GLenum plane;
2779
+ GLdouble equation[4] = {0.0,0.0,0.0,0.0};
2780
+ VALUE retary;
2781
+ int i;
2782
+ plane = (GLenum)NUM2INT(arg1);
2783
+ glGetClipPlane(plane,equation);
2784
+ retary = rb_ary_new2(4);
2785
+ for(i=0;i<4;i++)
2786
+ rb_ary_push(retary, rb_float_new(equation[i]));
2787
+ return retary;
2788
+ }
2789
+
2790
+ #define GLGET_FUNC(_name_,_type_,_conv_) \
2791
+ static VALUE \
2792
+ gl_Get##_name_##v(obj,arg1) \
2793
+ VALUE obj,arg1; \
2794
+ { \
2795
+ GLenum pname; \
2796
+ int nitems; \
2797
+ VALUE ary, ary2; \
2798
+ int i,j; \
2799
+ _type_ items[32]; \
2800
+ pname = NUM2INT(arg1); \
2801
+ switch(pname) { \
2802
+ case GL_ACCUM_CLEAR_VALUE: \
2803
+ case GL_BLEND_COLOR: \
2804
+ case GL_COLOR_CLEAR_VALUE: \
2805
+ case GL_COLOR_WRITEMASK: \
2806
+ case GL_CURRENT_COLOR: \
2807
+ case GL_CURRENT_RASTER_COLOR: \
2808
+ case GL_CURRENT_RASTER_POSITION: \
2809
+ case GL_CURRENT_RASTER_SECONDARY_COLOR: \
2810
+ case GL_CURRENT_RASTER_TEXTURE_COORDS: \
2811
+ case GL_CURRENT_TEXTURE_COORDS: \
2812
+ case GL_FOG_COLOR: \
2813
+ case GL_LIGHT_MODEL_AMBIENT: \
2814
+ case GL_MAP2_GRID_DOMAIN: \
2815
+ case GL_CURRENT_SECONDARY_COLOR: \
2816
+ case GL_SCISSOR_BOX: \
2817
+ case GL_TEXTURE_ENV_COLOR: \
2818
+ case GL_VIEWPORT: \
2819
+ nitems = 4; \
2820
+ break; \
2821
+ case GL_CURRENT_NORMAL: \
2822
+ case GL_POINT_DISTANCE_ATTENUATION: \
2823
+ nitems = 3; \
2824
+ break; \
2825
+ case GL_DEPTH_RANGE: \
2826
+ case GL_LINE_WIDTH_RANGE: \
2827
+ case GL_MAP1_GRID_DOMAIN: \
2828
+ case GL_MAP2_GRID_SEGMENTS: \
2829
+ case GL_MAX_VIEWPORT_DIMS: \
2830
+ case GL_POINT_SIZE_RANGE: \
2831
+ case GL_POLYGON_MODE: \
2832
+ case GL_ALIASED_LINE_WIDTH_RANGE: \
2833
+ case GL_ALIASED_POINT_SIZE_RANGE: \
2834
+ nitems = 2; \
2835
+ break; \
2836
+ case GL_MODELVIEW_MATRIX: \
2837
+ case GL_PROJECTION_MATRIX: \
2838
+ case GL_TEXTURE_MATRIX: \
2839
+ glGet##_name_##v(pname, items); \
2840
+ ary = rb_ary_new2(4); \
2841
+ for (i = 0; i < 4; i++) { \
2842
+ ary2 = rb_ary_new2(4); \
2843
+ rb_ary_push(ary, ary2); \
2844
+ for (j = 0; j < 4; j++) \
2845
+ rb_ary_push(ary2, _conv_(items[i*4+j])); \
2846
+ } \
2847
+ return ary; \
2848
+ case GL_POLYGON_STIPPLE: \
2849
+ glGet##_name_##v(pname, items); \
2850
+ return rb_str_new((const char*)items, 32); \
2851
+ default: /* size=1 */ \
2852
+ glGet##_name_##v(pname, items); \
2853
+ return _conv_(items[0]); \
2854
+ } \
2855
+ glGet##_name_##v(pname, items); \
2856
+ ary = rb_ary_new2(nitems); \
2857
+ for (i = 0; i < nitems; i++) \
2858
+ rb_ary_push(ary, _conv_(items[i])); \
2859
+ return ary; \
2860
+ }
2861
+
2862
+ GLGET_FUNC(Double,GLdouble,rb_float_new)
2863
+ GLGET_FUNC(Float,GLfloat,rb_float_new)
2864
+ GLGET_FUNC(Integer,GLint,INT2NUM)
2865
+ GLGET_FUNC(Boolean,GLboolean,INT2NUM)
2866
+
2867
+ #undef GLGET_FUNC
2868
+
2869
+ static VALUE
2870
+ gl_GetError(obj)
2871
+ VALUE obj;
2872
+ {
2873
+ GLenum ret;
2874
+ ret = glGetError();
2875
+ return INT2NUM(ret);
2876
+ }
2877
+
2878
+ static VALUE
2879
+ gl_GetLightfv(obj,arg1,arg2)
2880
+ VALUE obj,arg1,arg2;
2881
+ {
2882
+ GLenum light;
2883
+ GLenum pname;
2884
+ GLsizei size;
2885
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
2886
+ VALUE retary;
2887
+ int i;
2888
+ light = (GLenum)NUM2INT(arg1);
2889
+ pname = (GLenum)NUM2INT(arg2);
2890
+ switch(pname) {
2891
+ case GL_AMBIENT:
2892
+ case GL_DIFFUSE:
2893
+ case GL_SPECULAR:
2894
+ case GL_POSITION:
2895
+ size = 4;
2896
+ break;
2897
+ case GL_SPOT_DIRECTION:
2898
+ size = 3;
2899
+ break;
2900
+ case GL_CONSTANT_ATTENUATION:
2901
+ case GL_LINEAR_ATTENUATION:
2902
+ case GL_QUADRATIC_ATTENUATION:
2903
+ case GL_SPOT_EXPONENT:
2904
+ case GL_SPOT_CUTOFF:
2905
+ size = 1;
2906
+ break;
2907
+ default:
2908
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
2909
+ break; /* not reached */
2910
+ }
2911
+ glGetLightfv(light,pname,params);
2912
+ retary = rb_ary_new2(size);
2913
+ for(i=0;i<size;i++)
2914
+ rb_ary_push(retary, rb_float_new(params[i]));
2915
+ return retary;
2916
+ }
2917
+
2918
+ static VALUE
2919
+ gl_GetLightiv(obj,arg1,arg2)
2920
+ VALUE obj,arg1,arg2;
2921
+ {
2922
+ GLenum light;
2923
+ GLenum pname;
2924
+ GLsizei size;
2925
+ GLint params[4] = {0,0,0,0};
2926
+ VALUE retary;
2927
+ int i;
2928
+ light = (GLenum)NUM2INT(arg1);
2929
+ pname = (GLenum)NUM2INT(arg2);
2930
+ switch(pname) {
2931
+ case GL_AMBIENT:
2932
+ case GL_DIFFUSE:
2933
+ case GL_SPECULAR:
2934
+ case GL_POSITION:
2935
+ size = 4;
2936
+ break;
2937
+ case GL_SPOT_DIRECTION:
2938
+ size = 3;
2939
+ break;
2940
+ case GL_CONSTANT_ATTENUATION:
2941
+ case GL_LINEAR_ATTENUATION:
2942
+ case GL_QUADRATIC_ATTENUATION:
2943
+ case GL_SPOT_EXPONENT:
2944
+ case GL_SPOT_CUTOFF:
2945
+ size = 1;
2946
+ break;
2947
+ default:
2948
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
2949
+ break; /* not reached */
2950
+ }
2951
+ glGetLightiv(light,pname,params);
2952
+ retary = rb_ary_new2(size);
2953
+ for(i=0;i<size;i++)
2954
+ rb_ary_push(retary, INT2FIX(params[i]));
2955
+ return retary;
2956
+ }
2957
+
2958
+ static VALUE
2959
+ gl_GetMapdv(obj,arg1,arg2)
2960
+ VALUE obj,arg1,arg2;
2961
+ {
2962
+ GLenum target;
2963
+ GLenum query;
2964
+ int dims;
2965
+ int pointsize;
2966
+ int size=0;
2967
+ int i;
2968
+ GLdouble *points;
2969
+ VALUE retary;
2970
+ GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */
2971
+ target = (GLenum)NUM2INT(arg1);
2972
+ query = (GLenum)NUM2INT(arg2);
2973
+ switch(target) {
2974
+ case GL_MAP1_INDEX:
2975
+ case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break;
2976
+ case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break;
2977
+ case GL_MAP1_VERTEX_3:
2978
+ case GL_MAP1_NORMAL:
2979
+ case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break;
2980
+ case GL_MAP1_COLOR_4:
2981
+ case GL_MAP1_TEXTURE_COORD_4:
2982
+ case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break;
2983
+ case GL_MAP2_INDEX:
2984
+ case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break;
2985
+ case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break;
2986
+ case GL_MAP2_VERTEX_3:
2987
+ case GL_MAP2_NORMAL:
2988
+ case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break;
2989
+ case GL_MAP2_COLOR_4:
2990
+ case GL_MAP2_TEXTURE_COORD_4:
2991
+ case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break;
2992
+ default:
2993
+ rb_raise(rb_eArgError, "unknown target:%d",target);
2994
+ break; /* not reached */
2995
+ }
2996
+ switch(query) {
2997
+ case GL_ORDER: size = dims; break;
2998
+ case GL_DOMAIN: size = dims*2; break;
2999
+ case GL_COEFF:
3000
+ glGetMapiv(target,GL_ORDER,order);
3001
+ if (dims==1)
3002
+ size = order[0] * pointsize;
3003
+ else
3004
+ size = (order[0]*order[1]) * pointsize;
3005
+ break;
3006
+ default:
3007
+ rb_raise(rb_eArgError, "unknown target:%d",target);
3008
+ break; /* not reached */
3009
+ }
3010
+ points = ALLOC_N(GLdouble,size);
3011
+ glGetMapdv(target,query,points);
3012
+ retary = rb_ary_new2(size);
3013
+ for(i=0;i<size;i++)
3014
+ rb_ary_push(retary, rb_float_new(points[i]));
3015
+ xfree(points);
3016
+ return retary;
3017
+ }
3018
+
3019
+ static VALUE
3020
+ gl_GetMapfv(obj,arg1,arg2)
3021
+ VALUE obj,arg1,arg2;
3022
+ {
3023
+ GLenum target;
3024
+ GLenum query;
3025
+ int dims;
3026
+ int pointsize;
3027
+ int size=0;
3028
+ int i;
3029
+ GLfloat *points;
3030
+ VALUE retary;
3031
+ GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */
3032
+ target = (GLenum)NUM2INT(arg1);
3033
+ query = (GLenum)NUM2INT(arg2);
3034
+ switch(target) {
3035
+ case GL_MAP1_INDEX:
3036
+ case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break;
3037
+ case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break;
3038
+ case GL_MAP1_VERTEX_3:
3039
+ case GL_MAP1_NORMAL:
3040
+ case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break;
3041
+ case GL_MAP1_COLOR_4:
3042
+ case GL_MAP1_TEXTURE_COORD_4:
3043
+ case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break;
3044
+ case GL_MAP2_INDEX:
3045
+ case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break;
3046
+ case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break;
3047
+ case GL_MAP2_VERTEX_3:
3048
+ case GL_MAP2_NORMAL:
3049
+ case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break;
3050
+ case GL_MAP2_COLOR_4:
3051
+ case GL_MAP2_TEXTURE_COORD_4:
3052
+ case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break;
3053
+ default:
3054
+ rb_raise(rb_eArgError, "unknown target:%d",target);
3055
+ break; /* not reached */
3056
+ }
3057
+ switch(query) {
3058
+ case GL_ORDER: size = dims; break;
3059
+ case GL_DOMAIN: size = dims*2; break;
3060
+ case GL_COEFF:
3061
+ glGetMapiv(target,GL_ORDER,order);
3062
+ if (dims==1)
3063
+ size = order[0] * pointsize;
3064
+ else
3065
+ size = (order[0]*order[1]) * pointsize;
3066
+ break;
3067
+ default:
3068
+ rb_raise(rb_eArgError, "unknown target:%d",target);
3069
+ break; /* not reached */
3070
+ }
3071
+ points = ALLOC_N(GLfloat,size);
3072
+ glGetMapfv(target,query,points);
3073
+ retary = rb_ary_new2(size);
3074
+ for(i=0;i<size;i++)
3075
+ rb_ary_push(retary, rb_float_new(points[i]));
3076
+ xfree(points);
3077
+ return retary;
3078
+ }
3079
+
3080
+ static VALUE
3081
+ gl_GetMapiv(obj,arg1,arg2)
3082
+ VALUE obj,arg1,arg2;
3083
+ {
3084
+ GLenum target;
3085
+ GLenum query;
3086
+ int dims;
3087
+ int pointsize;
3088
+ int size=0;
3089
+ int i;
3090
+ GLint *points;
3091
+ VALUE retary;
3092
+ GLint order[2] = {0,0}; /* for GL_COEFF, [order] or [uorder,vorder] (MAP1/MAP2) */
3093
+ target = (GLenum)NUM2INT(arg1);
3094
+ query = (GLenum)NUM2INT(arg2);
3095
+ switch(target) {
3096
+ case GL_MAP1_INDEX:
3097
+ case GL_MAP1_TEXTURE_COORD_1: dims=1; pointsize=1; break;
3098
+ case GL_MAP1_TEXTURE_COORD_2: dims=1; pointsize=2; break;
3099
+ case GL_MAP1_VERTEX_3:
3100
+ case GL_MAP1_NORMAL:
3101
+ case GL_MAP1_TEXTURE_COORD_3: dims=1; pointsize=3; break;
3102
+ case GL_MAP1_COLOR_4:
3103
+ case GL_MAP1_TEXTURE_COORD_4:
3104
+ case GL_MAP1_VERTEX_4: dims=1; pointsize=4; break;
3105
+ case GL_MAP2_INDEX:
3106
+ case GL_MAP2_TEXTURE_COORD_1: dims=2; pointsize=1; break;
3107
+ case GL_MAP2_TEXTURE_COORD_2: dims=2; pointsize=2; break;
3108
+ case GL_MAP2_VERTEX_3:
3109
+ case GL_MAP2_NORMAL:
3110
+ case GL_MAP2_TEXTURE_COORD_3: dims=2; pointsize=3; break;
3111
+ case GL_MAP2_COLOR_4:
3112
+ case GL_MAP2_TEXTURE_COORD_4:
3113
+ case GL_MAP2_VERTEX_4: dims=2; pointsize=4; break;
3114
+ default:
3115
+ rb_raise(rb_eArgError, "unknown target:%d",target);
3116
+ break; /* not reached */
3117
+ }
3118
+ switch(query) {
3119
+ case GL_ORDER: size = dims; break;
3120
+ case GL_DOMAIN: size = dims*2; break;
3121
+ case GL_COEFF:
3122
+ glGetMapiv(target,GL_ORDER,order);
3123
+ if (dims==1)
3124
+ size = order[0] * pointsize;
3125
+ else
3126
+ size = (order[0]*order[1]) * pointsize;
3127
+ break;
3128
+ default:
3129
+ rb_raise(rb_eArgError, "unknown target:%d",target);
3130
+ break; /* not reached */
3131
+ }
3132
+ points = ALLOC_N(GLint,size);
3133
+ glGetMapiv(target,query,points);
3134
+ retary = rb_ary_new2(size);
3135
+ for(i=0;i<size;i++)
3136
+ rb_ary_push(retary, INT2FIX(points[i]));
3137
+ xfree(points);
3138
+ return retary;
3139
+ }
3140
+
3141
+ static VALUE
3142
+ gl_GetMaterialfv(obj,arg1,arg2)
3143
+ VALUE obj,arg1,arg2;
3144
+ {
3145
+ GLenum face;
3146
+ GLenum pname;
3147
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
3148
+ int size;
3149
+ VALUE retary;
3150
+ int i;
3151
+ face = (GLenum)NUM2INT(arg1);
3152
+ pname = (GLenum)NUM2INT(arg2);
3153
+ switch(pname) {
3154
+ case GL_AMBIENT:
3155
+ case GL_DIFFUSE:
3156
+ case GL_SPECULAR:
3157
+ case GL_EMISSION:
3158
+ size = 4;
3159
+ break;
3160
+ case GL_COLOR_INDEXES:
3161
+ size = 3;
3162
+ break;
3163
+ case GL_SHININESS:
3164
+ size = 1;
3165
+ break;
3166
+ default:
3167
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3168
+ break; /* not reached */
3169
+ }
3170
+ glGetMaterialfv(face,pname,params);
3171
+ retary = rb_ary_new2(size);
3172
+ for(i=0;i<size;i++)
3173
+ rb_ary_push(retary, rb_ary_new2(params[i]));
3174
+ return retary;
3175
+ }
3176
+
3177
+ static VALUE
3178
+ gl_GetMaterialiv(obj,arg1,arg2)
3179
+ VALUE obj,arg1,arg2;
3180
+ {
3181
+ GLenum face;
3182
+ GLenum pname;
3183
+ GLint params[4] = {0,0,0,0};
3184
+ int size;
3185
+ VALUE retary;
3186
+ int i;
3187
+ face = (GLenum)NUM2INT(arg1);
3188
+ pname = (GLenum)NUM2INT(arg2);
3189
+ switch(pname) {
3190
+ case GL_AMBIENT:
3191
+ case GL_DIFFUSE:
3192
+ case GL_SPECULAR:
3193
+ case GL_EMISSION:
3194
+ size = 4;
3195
+ break;
3196
+ case GL_COLOR_INDEXES:
3197
+ size = 3;
3198
+ break;
3199
+ case GL_SHININESS:
3200
+ size = 1;
3201
+ break;
3202
+ default:
3203
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3204
+ break; /* not reached */
3205
+ }
3206
+ glGetMaterialiv(face,pname,params);
3207
+ retary = rb_ary_new2(size);
3208
+ for(i=0;i<size;i++)
3209
+ rb_ary_push(retary, INT2FIX(params[i]));
3210
+ return retary;
3211
+ }
3212
+
3213
+ static VALUE
3214
+ gl_GetPixelMapfv(obj,arg1)
3215
+ VALUE obj,arg1;
3216
+ {
3217
+ GLenum map;
3218
+ GLenum map_size;
3219
+ GLint size;
3220
+ GLfloat *values;
3221
+ VALUE retary;
3222
+ int i;
3223
+ map = (GLenum)NUM2INT(arg1);
3224
+ switch(map) {
3225
+ case GL_PIXEL_MAP_I_TO_I: map_size=GL_PIXEL_MAP_I_TO_I_SIZE; break;
3226
+ case GL_PIXEL_MAP_S_TO_S: map_size=GL_PIXEL_MAP_S_TO_S_SIZE; break;
3227
+ case GL_PIXEL_MAP_I_TO_R: map_size=GL_PIXEL_MAP_I_TO_R_SIZE; break;
3228
+ case GL_PIXEL_MAP_I_TO_G: map_size=GL_PIXEL_MAP_I_TO_G_SIZE; break;
3229
+ case GL_PIXEL_MAP_I_TO_B: map_size=GL_PIXEL_MAP_I_TO_B_SIZE; break;
3230
+ case GL_PIXEL_MAP_I_TO_A: map_size=GL_PIXEL_MAP_I_TO_A_SIZE; break;
3231
+ case GL_PIXEL_MAP_R_TO_R: map_size=GL_PIXEL_MAP_R_TO_R_SIZE; break;
3232
+ case GL_PIXEL_MAP_G_TO_G: map_size=GL_PIXEL_MAP_G_TO_G_SIZE; break;
3233
+ case GL_PIXEL_MAP_B_TO_B: map_size=GL_PIXEL_MAP_B_TO_B_SIZE; break;
3234
+ case GL_PIXEL_MAP_A_TO_A: map_size=GL_PIXEL_MAP_A_TO_A_SIZE; break;
3235
+ default:
3236
+ rb_raise(rb_eArgError, "unknown map:%d",map);
3237
+ break; /* not reached */
3238
+ }
3239
+ glGetIntegerv(map_size,&size);
3240
+ values = ALLOC_N(GLfloat,size);
3241
+ glGetPixelMapfv(map,values);
3242
+ retary = rb_ary_new2(size);
3243
+ for(i=0;i<size;i++)
3244
+ rb_ary_push(retary, rb_float_new(values[i]));
3245
+ xfree(values);
3246
+ return retary;
3247
+ }
3248
+
3249
+ static VALUE
3250
+ gl_GetPixelMapuiv(obj,arg1)
3251
+ VALUE obj,arg1;
3252
+ {
3253
+ GLenum map;
3254
+ GLenum map_size;
3255
+ GLint size;
3256
+ GLuint *values;
3257
+ VALUE retary;
3258
+ int i;
3259
+ map = (GLenum)NUM2INT(arg1);
3260
+ switch(map) {
3261
+ case GL_PIXEL_MAP_I_TO_I: map_size=GL_PIXEL_MAP_I_TO_I_SIZE; break;
3262
+ case GL_PIXEL_MAP_S_TO_S: map_size=GL_PIXEL_MAP_S_TO_S_SIZE; break;
3263
+ case GL_PIXEL_MAP_I_TO_R: map_size=GL_PIXEL_MAP_I_TO_R_SIZE; break;
3264
+ case GL_PIXEL_MAP_I_TO_G: map_size=GL_PIXEL_MAP_I_TO_G_SIZE; break;
3265
+ case GL_PIXEL_MAP_I_TO_B: map_size=GL_PIXEL_MAP_I_TO_B_SIZE; break;
3266
+ case GL_PIXEL_MAP_I_TO_A: map_size=GL_PIXEL_MAP_I_TO_A_SIZE; break;
3267
+ case GL_PIXEL_MAP_R_TO_R: map_size=GL_PIXEL_MAP_R_TO_R_SIZE; break;
3268
+ case GL_PIXEL_MAP_G_TO_G: map_size=GL_PIXEL_MAP_G_TO_G_SIZE; break;
3269
+ case GL_PIXEL_MAP_B_TO_B: map_size=GL_PIXEL_MAP_B_TO_B_SIZE; break;
3270
+ case GL_PIXEL_MAP_A_TO_A: map_size=GL_PIXEL_MAP_A_TO_A_SIZE; break;
3271
+ default:
3272
+ rb_raise(rb_eArgError, "unknown map:%d",map);
3273
+ break; /* not reached */
3274
+ }
3275
+ glGetIntegerv(map_size,&size);
3276
+ values = ALLOC_N(GLuint,size);
3277
+ glGetPixelMapuiv(map,values);
3278
+ retary = rb_ary_new2(size);
3279
+ for(i=0;i<size;i++)
3280
+ rb_ary_push(retary, INT2FIX(values[i]));
3281
+ xfree(values);
3282
+ return retary;
3283
+ }
3284
+
3285
+ static VALUE
3286
+ gl_GetPixelMapusv(obj,arg1)
3287
+ VALUE obj,arg1;
3288
+ {
3289
+ GLenum map;
3290
+ GLenum map_size;
3291
+ GLint size;
3292
+ GLushort *values;
3293
+ VALUE retary;
3294
+ int i;
3295
+ map = (GLenum)NUM2INT(arg1);
3296
+ switch(map) {
3297
+ case GL_PIXEL_MAP_I_TO_I: map_size=GL_PIXEL_MAP_I_TO_I_SIZE; break;
3298
+ case GL_PIXEL_MAP_S_TO_S: map_size=GL_PIXEL_MAP_S_TO_S_SIZE; break;
3299
+ case GL_PIXEL_MAP_I_TO_R: map_size=GL_PIXEL_MAP_I_TO_R_SIZE; break;
3300
+ case GL_PIXEL_MAP_I_TO_G: map_size=GL_PIXEL_MAP_I_TO_G_SIZE; break;
3301
+ case GL_PIXEL_MAP_I_TO_B: map_size=GL_PIXEL_MAP_I_TO_B_SIZE; break;
3302
+ case GL_PIXEL_MAP_I_TO_A: map_size=GL_PIXEL_MAP_I_TO_A_SIZE; break;
3303
+ case GL_PIXEL_MAP_R_TO_R: map_size=GL_PIXEL_MAP_R_TO_R_SIZE; break;
3304
+ case GL_PIXEL_MAP_G_TO_G: map_size=GL_PIXEL_MAP_G_TO_G_SIZE; break;
3305
+ case GL_PIXEL_MAP_B_TO_B: map_size=GL_PIXEL_MAP_B_TO_B_SIZE; break;
3306
+ case GL_PIXEL_MAP_A_TO_A: map_size=GL_PIXEL_MAP_A_TO_A_SIZE; break;
3307
+ default:
3308
+ rb_raise(rb_eArgError, "unknown map:%d",map);
3309
+ break; /* not reached */
3310
+ }
3311
+ glGetIntegerv(map_size,&size);
3312
+ values = ALLOC_N(GLushort,size);
3313
+ glGetPixelMapusv(map,values);
3314
+ retary = rb_ary_new2(size);
3315
+ for(i=0;i<size;i++)
3316
+ rb_ary_push(retary, INT2FIX(values[i]));
3317
+ xfree(values);
3318
+ return retary;
3319
+ }
3320
+
3321
+ static VALUE
3322
+ gl_GetPolygonStipple(obj,arg1)
3323
+ VALUE obj,arg1;
3324
+ {
3325
+ GLubyte mask[128];
3326
+ glGetPolygonStipple(mask);
3327
+ return rb_str_new((const char*)mask, 128);
3328
+ }
3329
+
3330
+ static VALUE
3331
+ gl_GetString(obj,arg1)
3332
+ VALUE obj,arg1;
3333
+ {
3334
+ GLenum name;
3335
+ const GLubyte *ret;
3336
+ name = (GLenum)NUM2INT(arg1);
3337
+ ret = glGetString(name);
3338
+ return rb_str_new2((const char*)ret);
3339
+ }
3340
+
3341
+ static VALUE
3342
+ gl_GetTexEnvfv(obj,arg1,arg2)
3343
+ VALUE obj,arg1,arg2;
3344
+ {
3345
+ GLenum target;
3346
+ GLenum pname;
3347
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
3348
+ int size;
3349
+ VALUE retary;
3350
+ int i;
3351
+ target = (GLenum)NUM2INT(arg1);
3352
+ pname = (GLenum)NUM2INT(arg2);
3353
+ switch(pname) {
3354
+ case GL_TEXTURE_ENV_COLOR:
3355
+ size = 4;
3356
+ break;
3357
+ case GL_TEXTURE_ENV_MODE:
3358
+ case GL_COORD_REPLACE:
3359
+ case GL_TEXTURE_LOD_BIAS:
3360
+ case GL_COMBINE_RGB:
3361
+ case GL_COMBINE_ALPHA:
3362
+ case GL_SRC0_RGB:
3363
+ case GL_SRC1_RGB:
3364
+ case GL_SRC2_RGB:
3365
+ case GL_SRC0_ALPHA:
3366
+ case GL_SRC1_ALPHA:
3367
+ case GL_SRC2_ALPHA:
3368
+ case GL_OPERAND0_RGB:
3369
+ case GL_OPERAND1_RGB:
3370
+ case GL_OPERAND2_RGB:
3371
+ case GL_OPERAND0_ALPHA:
3372
+ case GL_OPERAND1_ALPHA:
3373
+ case GL_OPERAND2_ALPHA:
3374
+ case GL_RGB_SCALE:
3375
+ case GL_ALPHA_SCALE:
3376
+ size = 1;
3377
+ break;
3378
+ default:
3379
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3380
+ break; /* not reached */
3381
+ }
3382
+ glGetTexEnvfv(target,pname,params);
3383
+ retary = rb_ary_new2(size);
3384
+ for(i=0;i<size;i++)
3385
+ rb_ary_push(retary, rb_ary_new2(params[i]));
3386
+ return retary;
3387
+ }
3388
+
3389
+ static VALUE
3390
+ gl_GetTexEnviv(obj,arg1,arg2)
3391
+ VALUE obj,arg1,arg2;
3392
+ {
3393
+ GLenum target;
3394
+ GLenum pname;
3395
+ GLint params[4] = {0,0,0,0};
3396
+ int size;
3397
+ VALUE retary;
3398
+ int i;
3399
+ target = (GLenum)NUM2INT(arg1);
3400
+ pname = (GLenum)NUM2INT(arg2);
3401
+ switch(pname) {
3402
+ case GL_TEXTURE_ENV_COLOR:
3403
+ size = 4;
3404
+ break;
3405
+ case GL_TEXTURE_ENV_MODE:
3406
+ case GL_COORD_REPLACE:
3407
+ case GL_TEXTURE_LOD_BIAS:
3408
+ case GL_COMBINE_RGB:
3409
+ case GL_COMBINE_ALPHA:
3410
+ case GL_SRC0_RGB:
3411
+ case GL_SRC1_RGB:
3412
+ case GL_SRC2_RGB:
3413
+ case GL_SRC0_ALPHA:
3414
+ case GL_SRC1_ALPHA:
3415
+ case GL_SRC2_ALPHA:
3416
+ case GL_OPERAND0_RGB:
3417
+ case GL_OPERAND1_RGB:
3418
+ case GL_OPERAND2_RGB:
3419
+ case GL_OPERAND0_ALPHA:
3420
+ case GL_OPERAND1_ALPHA:
3421
+ case GL_OPERAND2_ALPHA:
3422
+ case GL_RGB_SCALE:
3423
+ case GL_ALPHA_SCALE:
3424
+ size = 1;
3425
+ break;
3426
+ default:
3427
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3428
+ break; /* not reached */
3429
+ }
3430
+ glGetTexEnviv(target,pname,params);
3431
+ retary = rb_ary_new2(size);
3432
+ for(i=0;i<size;i++)
3433
+ rb_ary_push(retary, INT2FIX(params[i]));
3434
+ return retary;
3435
+ }
3436
+
3437
+ static VALUE
3438
+ gl_GetTexGendv(obj,arg1,arg2)
3439
+ VALUE obj,arg1,arg2;
3440
+ {
3441
+ GLenum coord;
3442
+ GLenum pname;
3443
+ GLdouble params[4] = {0.0,0.0,0.0,0.0};
3444
+ int size;
3445
+ VALUE retary;
3446
+ int i;
3447
+ coord = (GLenum)NUM2INT(arg1);
3448
+ pname = (GLenum)NUM2INT(arg2);
3449
+ switch(pname) {
3450
+ case GL_OBJECT_PLANE:
3451
+ case GL_EYE_PLANE:
3452
+ size = 4;
3453
+ break;
3454
+ case GL_TEXTURE_GEN_MODE:
3455
+ size = 1;
3456
+ break;
3457
+ default:
3458
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3459
+ break; /* not reached */
3460
+ }
3461
+ glGetTexGendv(coord,pname,params);
3462
+ retary = rb_ary_new2(size);
3463
+ for(i=0;i<size;i++)
3464
+ rb_ary_push(retary, rb_ary_new2(params[i]));
3465
+ return retary;
3466
+ }
3467
+
3468
+ static VALUE
3469
+ gl_GetTexGenfv(obj,arg1,arg2)
3470
+ VALUE obj,arg1,arg2;
3471
+ {
3472
+ GLenum coord;
3473
+ GLenum pname;
3474
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
3475
+ int size;
3476
+ VALUE retary;
3477
+ int i;
3478
+ coord = (GLenum)NUM2INT(arg1);
3479
+ pname = (GLenum)NUM2INT(arg2);
3480
+ switch(pname) {
3481
+ case GL_OBJECT_PLANE:
3482
+ case GL_EYE_PLANE:
3483
+ size = 4;
3484
+ break;
3485
+ case GL_TEXTURE_GEN_MODE:
3486
+ size = 1;
3487
+ break;
3488
+ default:
3489
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3490
+ break; /* not reached */
3491
+ }
3492
+ glGetTexGenfv(coord,pname,params);
3493
+ retary = rb_ary_new2(size);
3494
+ for(i=0;i<size;i++)
3495
+ rb_ary_push(retary, rb_ary_new2(params[i]));
3496
+ return retary;
3497
+ }
3498
+
3499
+ static VALUE
3500
+ gl_GetTexGeniv(obj,arg1,arg2)
3501
+ VALUE obj,arg1,arg2;
3502
+ {
3503
+ GLenum coord;
3504
+ GLenum pname;
3505
+ GLint params[4] = {0,0,0,0};
3506
+ int size;
3507
+ VALUE retary;
3508
+ int i;
3509
+ coord = (GLenum)NUM2INT(arg1);
3510
+ pname = (GLenum)NUM2INT(arg2);
3511
+ switch(pname) {
3512
+ case GL_OBJECT_PLANE:
3513
+ case GL_EYE_PLANE:
3514
+ size = 4;
3515
+ break;
3516
+ case GL_TEXTURE_GEN_MODE:
3517
+ size = 1;
3518
+ break;
3519
+ default:
3520
+ rb_raise(rb_eArgError, "unknown pname:%d",pname);
3521
+ break; /* not reached */
3522
+ }
3523
+ glGetTexGeniv(coord,pname,params);
3524
+ retary = rb_ary_new2(size);
3525
+ for(i=0;i<size;i++)
3526
+ rb_ary_push(retary, INT2FIX(params[i]));
3527
+ return retary;
3528
+ }
3529
+
3530
+ /*
3531
+ static VALUE
3532
+ gl_GetTexImage(obj,arg1,arg2,arg3,arg4,arg5)
3533
+ VALUE obj,arg1,arg2,arg3,arg4,arg5;
3534
+ {
3535
+ #warning glGetTexImage not implemented
3536
+ return Qnil;
3537
+ }
3538
+ */
3539
+
3540
+ static VALUE
3541
+ gl_GetTexParameterfv(obj,arg1,arg2)
3542
+ VALUE obj,arg1,arg2;
3543
+ {
3544
+ GLenum target;
3545
+ GLenum pname;
3546
+ GLfloat params[4] = {0.0,0.0,0.0,0.0};
3547
+ int size;
3548
+ VALUE retary;
3549
+ int i;
3550
+ target = (GLenum)NUM2INT(arg1);
3551
+ pname = (GLenum)NUM2INT(arg2);
3552
+ switch(pname) {
3553
+ case GL_TEXTURE_BORDER_COLOR:
3554
+ size = 4;
3555
+ break;
3556
+ default:
3557
+ size = 1;
3558
+ break;
3559
+ }
3560
+ glGetTexParameterfv(target,pname,params);
3561
+ retary = rb_ary_new2(size);
3562
+ for(i=0;i<size;i++)
3563
+ rb_ary_push(retary, rb_float_new(params[i]));
3564
+ return retary;
3565
+ }
3566
+
3567
+ static VALUE
3568
+ gl_GetTexParameteriv(obj,arg1,arg2)
3569
+ VALUE obj,arg1,arg2;
3570
+ {
3571
+ GLenum target;
3572
+ GLenum pname;
3573
+ GLint params[4] = {0,0,0,0};
3574
+ int size;
3575
+ VALUE retary;
3576
+ int i;
3577
+ target = (GLenum)NUM2INT(arg1);
3578
+ pname = (GLenum)NUM2INT(arg2);
3579
+ switch(pname) {
3580
+ case GL_TEXTURE_BORDER_COLOR:
3581
+ size = 4;
3582
+ break;
3583
+ default:
3584
+ size = 1;
3585
+ break;
3586
+ }
3587
+ glGetTexParameteriv(target,pname,params);
3588
+ retary = rb_ary_new2(size);
3589
+ for(i=0;i<size;i++)
3590
+ rb_ary_push(retary, INT2FIX(params[i]));
3591
+ return retary;
3592
+ }
3593
+
3594
+ static VALUE
3595
+ gl_GetTexLevelParameterfv(obj,arg1,arg2,arg3)
3596
+ VALUE obj,arg1,arg2,arg3;
3597
+ {
3598
+ GLenum target;
3599
+ GLint level;
3600
+ GLenum pname;
3601
+ GLfloat params;
3602
+ VALUE retary;
3603
+ target = (GLenum)NUM2INT(arg1);
3604
+ level = (GLint)NUM2INT(arg2);
3605
+ pname = (GLenum)NUM2INT(arg3);
3606
+ glGetTexLevelParameterfv(target,level,pname,&params);
3607
+ retary = rb_ary_new2(1);
3608
+ rb_ary_push(retary, rb_float_new(params));
3609
+ return retary;
3610
+ }
3611
+
3612
+ static VALUE
3613
+ gl_GetTexLevelParameteriv(obj,arg1,arg2,arg3)
3614
+ VALUE obj,arg1,arg2,arg3;
3615
+ {
3616
+ GLenum target;
3617
+ GLint level;
3618
+ GLenum pname;
3619
+ GLint params;
3620
+ VALUE retary;
3621
+ target = (GLenum)NUM2INT(arg1);
3622
+ level = (GLint)NUM2INT(arg2);
3623
+ pname = (GLenum)NUM2INT(arg3);
3624
+ glGetTexLevelParameteriv(target,level,pname,&params);
3625
+ retary = rb_ary_new2(1);
3626
+ rb_ary_push(retary, INT2FIX(params));
3627
+ return retary;
3628
+ }
3629
+
3630
+ static VALUE
3631
+ gl_IsEnabled(obj,arg1)
3632
+ VALUE obj,arg1;
3633
+ {
3634
+ GLenum cap;
3635
+ GLboolean ret;
3636
+ cap = (GLenum)NUM2INT(arg1);
3637
+ ret = glIsEnabled(cap);
3638
+ return INT2NUM(ret);
3639
+ }
3640
+
3641
+ static VALUE
3642
+ gl_IsList(obj,arg1)
3643
+ VALUE obj,arg1;
3644
+ {
3645
+ GLuint list;
3646
+ GLboolean ret;
3647
+ list = (GLuint)NUM2INT(arg1);
3648
+ ret = glIsList(list);
3649
+ return INT2NUM(ret);
3650
+ }
3651
+
3652
+ static VALUE
3653
+ gl_DepthRange(obj,arg1,arg2)
3654
+ VALUE obj,arg1,arg2;
3655
+ {
3656
+ GLclampd near_val;
3657
+ GLclampd far_val;
3658
+ near_val = (GLclampd)NUM2DBL(arg1);
3659
+ far_val = (GLclampd)NUM2DBL(arg2);
3660
+ glDepthRange(near_val,far_val);
3661
+ return Qnil;
3662
+ }
3663
+
3664
+ static VALUE
3665
+ gl_Frustum(obj,arg1,arg2,arg3,arg4,arg5,arg6)
3666
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
3667
+ {
3668
+ GLdouble left;
3669
+ GLdouble right;
3670
+ GLdouble bottom;
3671
+ GLdouble top;
3672
+ GLdouble near_val;
3673
+ GLdouble far_val;
3674
+ left = (GLdouble)NUM2DBL(arg1);
3675
+ right = (GLdouble)NUM2DBL(arg2);
3676
+ bottom = (GLdouble)NUM2DBL(arg3);
3677
+ top = (GLdouble)NUM2DBL(arg4);
3678
+ near_val = (GLdouble)NUM2DBL(arg5);
3679
+ far_val = (GLdouble)NUM2DBL(arg6);
3680
+ glFrustum(left,right,bottom,top,near_val,far_val);
3681
+ return Qnil;
3682
+ }
3683
+
3684
+ static VALUE
3685
+ gl_LoadIdentity(obj)
3686
+ VALUE obj;
3687
+ {
3688
+ glLoadIdentity();
3689
+ return Qnil;
3690
+ }
3691
+
3692
+ static VALUE
3693
+ gl_LoadMatrixf(obj,arg1)
3694
+ VALUE obj,arg1;
3695
+ {
3696
+ GLfloat m[4*4];
3697
+ ary2cmat4x4flt(arg1, m);
3698
+ glLoadMatrixf(m);
3699
+ return Qnil;
3700
+ }
3701
+
3702
+ static VALUE
3703
+ gl_LoadMatrixd(obj,arg1)
3704
+ VALUE obj,arg1;
3705
+ {
3706
+ GLdouble m[4*4];
3707
+ ary2cmat4x4dbl(arg1, m);
3708
+ glLoadMatrixd(m);
3709
+ return Qnil;
3710
+ }
3711
+
3712
+ static VALUE
3713
+ gl_MatrixMode(obj,arg1)
3714
+ VALUE obj,arg1;
3715
+ {
3716
+ GLenum mode;
3717
+ mode = (GLenum)NUM2INT(arg1);
3718
+ glMatrixMode(mode);
3719
+ return Qnil;
3720
+ }
3721
+
3722
+ static VALUE
3723
+ gl_MultMatrixf(obj,arg1)
3724
+ VALUE obj,arg1;
3725
+ {
3726
+ GLfloat m[4*4];
3727
+ ary2cmat4x4flt(arg1, m);
3728
+ glMultMatrixf(m);
3729
+ return Qnil;
3730
+ }
3731
+
3732
+ static VALUE
3733
+ gl_MultMatrixd(obj,arg1)
3734
+ VALUE obj,arg1;
3735
+ {
3736
+ GLdouble m[4*4];
3737
+ ary2cmat4x4dbl(arg1, m);
3738
+ glMultMatrixd(m);
3739
+ return Qnil;
3740
+ }
3741
+
3742
+ static VALUE
3743
+ gl_Ortho(obj,arg1,arg2,arg3,arg4,arg5,arg6)
3744
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
3745
+ {
3746
+ GLdouble left;
3747
+ GLdouble right;
3748
+ GLdouble bottom;
3749
+ GLdouble top;
3750
+ GLdouble near_val;
3751
+ GLdouble far_val;
3752
+ left = (GLdouble)NUM2DBL(arg1);
3753
+ right = (GLdouble)NUM2DBL(arg2);
3754
+ bottom = (GLdouble)NUM2DBL(arg3);
3755
+ top = (GLdouble)NUM2DBL(arg4);
3756
+ near_val = (GLdouble)NUM2DBL(arg5);
3757
+ far_val = (GLdouble)NUM2DBL(arg6);
3758
+ glOrtho(left,right,bottom,top,near_val,far_val);
3759
+ return Qnil;
3760
+ }
3761
+
3762
+ static VALUE
3763
+ gl_PopMatrix(obj)
3764
+ VALUE obj;
3765
+ {
3766
+ glPopMatrix();
3767
+ return Qnil;
3768
+ }
3769
+
3770
+ static VALUE
3771
+ gl_PushMatrix(obj)
3772
+ VALUE obj;
3773
+ {
3774
+ glPushMatrix();
3775
+ return Qnil;
3776
+ }
3777
+
3778
+ static VALUE
3779
+ gl_Rotated(obj,arg1,arg2,arg3,arg4)
3780
+ VALUE obj,arg1,arg2,arg3,arg4;
3781
+ {
3782
+ GLdouble angle;
3783
+ GLdouble x;
3784
+ GLdouble y;
3785
+ GLdouble z;
3786
+ angle = (GLdouble)NUM2DBL(arg1);
3787
+ x = (GLdouble)NUM2DBL(arg2);
3788
+ y = (GLdouble)NUM2DBL(arg3);
3789
+ z = (GLdouble)NUM2DBL(arg4);
3790
+ glRotated(angle,x,y,z);
3791
+ return Qnil;
3792
+ }
3793
+
3794
+ static VALUE
3795
+ gl_Rotatef(obj,arg1,arg2,arg3,arg4)
3796
+ VALUE obj,arg1,arg2,arg3,arg4;
3797
+ {
3798
+ GLfloat angle;
3799
+ GLfloat x;
3800
+ GLfloat y;
3801
+ GLfloat z;
3802
+ angle = (GLfloat)NUM2DBL(arg1);
3803
+ x = (GLfloat)NUM2DBL(arg2);
3804
+ y = (GLfloat)NUM2DBL(arg3);
3805
+ z = (GLfloat)NUM2DBL(arg4);
3806
+ glRotatef(angle,x,y,z);
3807
+ return Qnil;
3808
+ }
3809
+
3810
+ static VALUE
3811
+ gl_Scaled(obj,arg1,arg2,arg3)
3812
+ VALUE obj,arg1,arg2,arg3;
3813
+ {
3814
+ GLdouble x;
3815
+ GLdouble y;
3816
+ GLdouble z;
3817
+ x = (GLdouble)NUM2DBL(arg1);
3818
+ y = (GLdouble)NUM2DBL(arg2);
3819
+ z = (GLdouble)NUM2DBL(arg3);
3820
+ glScaled(x,y,z);
3821
+ return Qnil;
3822
+ }
3823
+
3824
+ static VALUE
3825
+ gl_Scalef(obj,arg1,arg2,arg3)
3826
+ VALUE obj,arg1,arg2,arg3;
3827
+ {
3828
+ GLfloat x;
3829
+ GLfloat y;
3830
+ GLfloat z;
3831
+ x = (GLfloat)NUM2DBL(arg1);
3832
+ y = (GLfloat)NUM2DBL(arg2);
3833
+ z = (GLfloat)NUM2DBL(arg3);
3834
+ glScalef(x,y,z);
3835
+ return Qnil;
3836
+ }
3837
+
3838
+ static VALUE
3839
+ gl_Translated(obj,arg1,arg2,arg3)
3840
+ VALUE obj,arg1,arg2,arg3;
3841
+ {
3842
+ GLdouble x;
3843
+ GLdouble y;
3844
+ GLdouble z;
3845
+ x = (GLdouble)NUM2DBL(arg1);
3846
+ y = (GLdouble)NUM2DBL(arg2);
3847
+ z = (GLdouble)NUM2DBL(arg3);
3848
+ glTranslated(x,y,z);
3849
+ return Qnil;
3850
+ }
3851
+
3852
+ static VALUE
3853
+ gl_Translatef(obj,arg1,arg2,arg3)
3854
+ VALUE obj,arg1,arg2,arg3;
3855
+ {
3856
+ GLfloat x;
3857
+ GLfloat y;
3858
+ GLfloat z;
3859
+ x = (GLfloat)NUM2DBL(arg1);
3860
+ y = (GLfloat)NUM2DBL(arg2);
3861
+ z = (GLfloat)NUM2DBL(arg3);
3862
+ glTranslatef(x,y,z);
3863
+ return Qnil;
3864
+ }
3865
+
3866
+ static VALUE
3867
+ gl_Viewport(obj,arg1,arg2,arg3,arg4)
3868
+ VALUE obj,arg1,arg2,arg3,arg4;
3869
+ {
3870
+ GLint x;
3871
+ GLint y;
3872
+ GLsizei width;
3873
+ GLsizei height;
3874
+ x = (GLint)NUM2INT(arg1);
3875
+ y = (GLint)NUM2INT(arg2);
3876
+ width = (GLsizei)NUM2INT(arg3);
3877
+ height = (GLsizei)NUM2INT(arg4);
3878
+ glViewport(x,y,width,height);
3879
+ return Qnil;
3880
+ }
3881
+
3882
+ static VALUE
3883
+ gl_ArrayElement(obj,arg1)
3884
+ VALUE obj,arg1;
3885
+ {
3886
+ GLint i;
3887
+ i = (GLint)NUM2INT(arg1);
3888
+ glArrayElement(i);
3889
+ return Qnil;
3890
+ }
3891
+
3892
+ static VALUE g_Vertex_ptr;
3893
+ static VALUE g_Normal_ptr;
3894
+ static VALUE g_Color_ptr;
3895
+ static VALUE g_Index_ptr;
3896
+ static VALUE g_TexCoord_ptr;
3897
+ static VALUE g_EdgeFlag_ptr;
3898
+ VALUE g_FogCoord_ptr = 0;
3899
+ VALUE g_SecondaryColor_ptr = 0;
3900
+ #define POINTER_FUNC(_func_) \
3901
+ static VALUE \
3902
+ gl_##_func_##Pointer(obj, arg1, arg2, arg3, arg4) \
3903
+ VALUE obj, arg1, arg2, arg3, arg4; \
3904
+ { \
3905
+ GLint size; \
3906
+ GLenum type; \
3907
+ GLsizei stride; \
3908
+ size = (GLint)NUM2INT(arg1); \
3909
+ type = (GLenum)NUM2INT(arg2); \
3910
+ stride = (GLsizei)NUM2INT(arg3); \
3911
+ Check_Type(arg4, T_STRING); \
3912
+ rb_str_freeze(arg4); \
3913
+ g_##_func_##_ptr = arg4; \
3914
+ gl##_func_##Pointer(size, type, stride, (const GLvoid*)RSTRING(arg4)->ptr); \
3915
+ return Qnil; \
3916
+ }
3917
+
3918
+ POINTER_FUNC(Vertex)
3919
+ POINTER_FUNC(Color)
3920
+ POINTER_FUNC(TexCoord)
3921
+
3922
+ #undef POINTER_FUNC
3923
+
3924
+ static VALUE
3925
+ gl_DisableClientState(obj,arg1)
3926
+ VALUE obj,arg1;
3927
+ {
3928
+ GLenum cap;
3929
+ cap = (GLenum)NUM2INT(arg1);
3930
+ glDisableClientState(cap);
3931
+ return Qnil;
3932
+ }
3933
+
3934
+ static VALUE
3935
+ gl_DrawArrays(obj,arg1,arg2,arg3)
3936
+ VALUE obj,arg1,arg2,arg3;
3937
+ {
3938
+ GLenum mode;
3939
+ GLint first;
3940
+ GLsizei count;
3941
+ mode = (GLenum)NUM2INT(arg1);
3942
+ first = (GLint)NUM2INT(arg2);
3943
+ count = (GLsizei)NUM2INT(arg3);
3944
+ glDrawArrays(mode,first,count);
3945
+ return Qnil;
3946
+ }
3947
+
3948
+ static VALUE
3949
+ gl_DrawElements(obj,arg1,arg2,arg3,arg4)
3950
+ VALUE obj,arg1,arg2,arg3,arg4;
3951
+ {
3952
+ GLenum mode;
3953
+ GLsizei count;
3954
+ GLenum type;
3955
+ mode = (GLenum)NUM2INT(arg1);
3956
+ count = (GLsizei)NUM2INT(arg2);
3957
+ type = (GLenum)NUM2INT(arg3);
3958
+ Check_Type(arg4, T_STRING);
3959
+ glDrawElements(mode, count, type, (const GLvoid*)RSTRING(arg4)->ptr);
3960
+ return Qnil;
3961
+ }
3962
+
3963
+ static VALUE
3964
+ gl_EdgeFlagPointer(obj,arg1,arg2)
3965
+ VALUE obj,arg1,arg2;
3966
+ {
3967
+ GLsizei stride;
3968
+ stride = (GLsizei)NUM2INT(arg1);
3969
+ Check_Type(arg2, T_STRING);
3970
+ rb_str_freeze(arg2);
3971
+ g_EdgeFlag_ptr = arg2;
3972
+ glEdgeFlagPointer(stride, (const GLboolean*)RSTRING(arg2)->ptr);
3973
+ return Qnil;
3974
+ }
3975
+
3976
+ static VALUE
3977
+ gl_EnableClientState(obj,arg1)
3978
+ VALUE obj,arg1;
3979
+ {
3980
+ GLenum cap;
3981
+ cap = (GLenum)NUM2INT(arg1);
3982
+ glEnableClientState(cap);
3983
+ return Qnil;
3984
+ }
3985
+
3986
+ static VALUE
3987
+ gl_GetPointerv(obj,arg1,arg2)
3988
+ VALUE obj,arg1,arg2;
3989
+ {
3990
+ GLenum pname;
3991
+ pname = (GLenum)NUM2INT(arg1);
3992
+ switch (pname) {
3993
+ case GL_VERTEX_ARRAY_POINTER:
3994
+ return g_Vertex_ptr;
3995
+ case GL_NORMAL_ARRAY_POINTER:
3996
+ return g_Normal_ptr;
3997
+ case GL_COLOR_ARRAY_POINTER:
3998
+ return g_Color_ptr;
3999
+ case GL_INDEX_ARRAY_POINTER:
4000
+ return g_Index_ptr;
4001
+ case GL_TEXTURE_COORD_ARRAY_POINTER:
4002
+ return g_TexCoord_ptr;
4003
+ case GL_EDGE_FLAG_ARRAY_POINTER:
4004
+ return g_EdgeFlag_ptr;
4005
+ case GL_FOG_COORD_ARRAY_POINTER:
4006
+ return g_FogCoord_ptr;
4007
+ case GL_SECONDARY_COLOR_ARRAY_POINTER:
4008
+ return g_SecondaryColor_ptr;
4009
+ default:
4010
+ rb_raise(rb_eArgError, "Invalid pname %d",pname);
4011
+ break; /* not reached */
4012
+ }
4013
+ return Qnil;
4014
+ }
4015
+
4016
+ static VALUE
4017
+ gl_IndexPointer(obj,arg1,arg2,arg3)
4018
+ VALUE obj,arg1,arg2,arg3;
4019
+ {
4020
+ GLenum type;
4021
+ GLsizei stride;
4022
+ type = (GLenum)NUM2INT(arg1);
4023
+ stride = (GLsizei)NUM2INT(arg2);
4024
+ Check_Type(arg3, T_STRING);
4025
+ rb_str_freeze(arg3);
4026
+ g_Index_ptr = arg3;
4027
+ glIndexPointer(type, stride, (const GLvoid*)RSTRING(arg3)->ptr);
4028
+ return Qnil;
4029
+ }
4030
+
4031
+ static VALUE
4032
+ gl_InterleavedArrays(obj,arg1,arg2,arg3)
4033
+ VALUE obj,arg1,arg2,arg3;
4034
+ {
4035
+ GLenum format;
4036
+ GLsizei stride;
4037
+ format = (GLenum)NUM2INT(arg1);
4038
+ stride = (GLsizei)NUM2INT(arg2);
4039
+ Check_Type(arg3, T_STRING);
4040
+ glInterleavedArrays(format, stride, (const GLvoid*)RSTRING(arg3)->ptr);
4041
+ return Qnil;
4042
+ }
4043
+
4044
+ static VALUE
4045
+ gl_NormalPointer(obj,arg1,arg2,arg3)
4046
+ VALUE obj,arg1,arg2,arg3;
4047
+ {
4048
+ GLenum type;
4049
+ GLsizei stride;
4050
+ type = (GLenum)NUM2INT(arg1);
4051
+ stride = (GLsizei)NUM2INT(arg2);
4052
+ Check_Type(arg3, T_STRING);
4053
+ rb_str_freeze(arg3);
4054
+ g_Normal_ptr = arg3;
4055
+ glNormalPointer(type, stride, (const GLvoid*)RSTRING(arg3)->ptr);
4056
+ return Qnil;
4057
+ }
4058
+
4059
+ static VALUE
4060
+ gl_PolygonOffset(obj,arg1,arg2)
4061
+ VALUE obj,arg1,arg2;
4062
+ {
4063
+ GLfloat factor;
4064
+ GLfloat units;
4065
+ factor = (GLfloat)NUM2DBL(arg1);
4066
+ units = (GLfloat)NUM2DBL(arg2);
4067
+ glPolygonOffset(factor,units);
4068
+ return Qnil;
4069
+ }
4070
+
4071
+ static VALUE
4072
+ gl_CopyTexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
4073
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
4074
+ {
4075
+ GLenum target;
4076
+ GLint level;
4077
+ GLenum internalformat;
4078
+ GLint x;
4079
+ GLint y;
4080
+ GLsizei width;
4081
+ GLint border;
4082
+ target = (GLenum)NUM2INT(arg1);
4083
+ level = (GLint)NUM2INT(arg2);
4084
+ internalformat = (GLenum)NUM2INT(arg3);
4085
+ x = (GLint)NUM2INT(arg4);
4086
+ y = (GLint)NUM2INT(arg5);
4087
+ width = (GLsizei)NUM2INT(arg6);
4088
+ border = (GLint)NUM2INT(arg7);
4089
+ glCopyTexImage1D(target,level,internalformat,x,y,width,border);
4090
+ return Qnil;
4091
+ }
4092
+
4093
+ static VALUE
4094
+ gl_CopyTexImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
4095
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
4096
+ {
4097
+ GLenum target;
4098
+ GLint level;
4099
+ GLenum internalformat;
4100
+ GLint x;
4101
+ GLint y;
4102
+ GLsizei width;
4103
+ GLsizei height;
4104
+ GLint border;
4105
+ target = (GLenum)NUM2INT(arg1);
4106
+ level = (GLint)NUM2INT(arg2);
4107
+ internalformat = (GLenum)NUM2INT(arg3);
4108
+ x = (GLint)NUM2INT(arg4);
4109
+ y = (GLint)NUM2INT(arg5);
4110
+ width = (GLsizei)NUM2INT(arg6);
4111
+ height = (GLsizei)NUM2INT(arg7);
4112
+ border = (GLint)NUM2INT(arg8);
4113
+ glCopyTexImage2D(target,level,internalformat,x,y,width,height,border);
4114
+ return Qnil;
4115
+ }
4116
+
4117
+ static VALUE
4118
+ gl_CopyTexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6)
4119
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6;
4120
+ {
4121
+ GLenum target;
4122
+ GLint level;
4123
+ GLint xoffset;
4124
+ GLint x;
4125
+ GLint y;
4126
+ GLsizei width;
4127
+ target = (GLenum)NUM2INT(arg1);
4128
+ level = (GLint)NUM2INT(arg2);
4129
+ xoffset = (GLint)NUM2INT(arg3);
4130
+ x = (GLint)NUM2INT(arg4);
4131
+ y = (GLint)NUM2INT(arg5);
4132
+ width = (GLsizei)NUM2INT(arg6);
4133
+ glCopyTexSubImage1D(target,level,xoffset,x,y,width);
4134
+ return Qnil;
4135
+ }
4136
+
4137
+ static VALUE
4138
+ gl_CopyTexSubImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
4139
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8;
4140
+ {
4141
+ GLenum target;
4142
+ GLint level;
4143
+ GLint xoffset;
4144
+ GLint yoffset;
4145
+ GLint x;
4146
+ GLint y;
4147
+ GLsizei width;
4148
+ GLsizei height;
4149
+ target = (GLenum)NUM2INT(arg1);
4150
+ level = (GLint)NUM2INT(arg2);
4151
+ xoffset = (GLint)NUM2INT(arg3);
4152
+ yoffset = (GLint)NUM2INT(arg4);
4153
+ x = (GLint)NUM2INT(arg5);
4154
+ y = (GLint)NUM2INT(arg6);
4155
+ width = (GLsizei)NUM2INT(arg7);
4156
+ height = (GLsizei)NUM2INT(arg8);
4157
+ glCopyTexSubImage2D(target,level,xoffset,yoffset,x,y,width,height);
4158
+ return Qnil;
4159
+ }
4160
+
4161
+ static VALUE
4162
+ gl_TexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
4163
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7;
4164
+ {
4165
+ GLenum target;
4166
+ GLint level;
4167
+ GLint xoffset;
4168
+ GLsizei width;
4169
+ GLenum format;
4170
+ GLenum type;
4171
+ const char *pixels;
4172
+ int size;
4173
+ int type_size;
4174
+ int format_size;
4175
+ target = (GLenum)NUM2INT(arg1);
4176
+ level = (GLint)NUM2INT(arg2);
4177
+ xoffset = (GLint)NUM2INT(arg3);
4178
+ width = (GLsizei)NUM2INT(arg4);
4179
+ format = (GLenum)NUM2INT(arg5);
4180
+ type = (GLenum)NUM2INT(arg6);
4181
+ if (TYPE(arg7) == T_STRING) {
4182
+ type_size = gltype_size(type) / 8;
4183
+ format_size = glformat_size(format);
4184
+ if (type_size < 0 || format_size == -1)
4185
+ return Qnil;
4186
+ size = type_size*format_size*width;
4187
+ if (RSTRING(arg7)->len < size)
4188
+ rb_raise(rb_eArgError, "string length:%d",RSTRING(arg7)->len);
4189
+ pixels = RSTRING(arg7)->ptr;
4190
+ } else
4191
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg7));
4192
+ glTexSubImage1D(target,level,xoffset,width,format,type,pixels);
4193
+ return Qnil;
4194
+ }
4195
+
4196
+ static VALUE
4197
+ gl_TexSubImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
4198
+ VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9;
4199
+ {
4200
+ GLenum target;
4201
+ GLint level;
4202
+ GLint xoffset;
4203
+ GLint yoffset;
4204
+ GLsizei width;
4205
+ GLsizei height;
4206
+ GLenum format;
4207
+ GLenum type;
4208
+ const char *pixels;
4209
+ int size;
4210
+ int type_size;
4211
+ int format_size;
4212
+ target = (GLenum)NUM2INT(arg1);
4213
+ level = (GLint)NUM2INT(arg2);
4214
+ xoffset = (GLint)NUM2INT(arg3);
4215
+ yoffset = (GLint)NUM2INT(arg4);
4216
+ width = (GLsizei)NUM2INT(arg5);
4217
+ height = (GLsizei)NUM2INT(arg6);
4218
+ format = (GLenum)NUM2INT(arg7);
4219
+ type = (GLenum)NUM2INT(arg8);
4220
+ if (TYPE(arg9) == T_STRING) {
4221
+ type_size = gltype_size(type) / 8;
4222
+ format_size = glformat_size(format);
4223
+ if (type_size < 0 || format_size == -1)
4224
+ return Qnil;
4225
+ size = type_size*format_size*height*width;
4226
+ if (RSTRING(arg9)->len < size)
4227
+ rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len);
4228
+ pixels = RSTRING(arg9)->ptr;
4229
+ } else
4230
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg9));
4231
+ glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels);
4232
+ return Qnil;
4233
+ }
4234
+
4235
+ static VALUE
4236
+ gl_AreTexturesResident(obj,arg1)
4237
+ VALUE obj,arg1;
4238
+ {
4239
+ GLuint *textures;
4240
+ GLboolean *residences;
4241
+ GLsizei size;
4242
+ GLboolean r;
4243
+ VALUE retary;
4244
+ int i;
4245
+ if (TYPE(arg1) != T_ARRAY)
4246
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg1));
4247
+ size = RARRAY(arg1)->len;
4248
+ textures = ALLOC_N(GLuint,size);
4249
+ residences = ALLOC_N(GLboolean,size);
4250
+ ary2cuint(arg1,textures,size);
4251
+ r = glAreTexturesResident(size,textures,residences);
4252
+ retary = rb_ary_new2(size);
4253
+ if (r==GL_TRUE) { /* all are resident */
4254
+ for(i=0;i<size;i++)
4255
+ rb_ary_push(retary, INT2FIX(GL_TRUE));
4256
+ } else {
4257
+ for(i=0;i<size;i++)
4258
+ rb_ary_push(retary, INT2FIX(residences[i]));
4259
+ }
4260
+ xfree(textures);
4261
+ xfree(residences);
4262
+ return retary;
4263
+ }
4264
+
4265
+ static VALUE
4266
+ gl_BindTexture(obj,arg1,arg2)
4267
+ VALUE obj,arg1,arg2;
4268
+ {
4269
+ GLenum target;
4270
+ GLuint texture;
4271
+ target = (GLenum)NUM2INT(arg1);
4272
+ texture = (GLuint)NUM2INT(arg2);
4273
+ glBindTexture(target,texture);
4274
+ return Qnil;
4275
+ }
4276
+
4277
+ static VALUE
4278
+ gl_DeleteTextures(obj,arg1)
4279
+ VALUE obj,arg1;
4280
+ {
4281
+ GLsizei n;
4282
+ GLuint *textures;
4283
+ RArray *ary;
4284
+ if (TYPE(arg1) != T_ARRAY)
4285
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg1));
4286
+ ary = RARRAY(arg1);
4287
+ n = ary->len;
4288
+ textures = ALLOC_N(GLuint,n);
4289
+ ary2cuint(arg1,textures,n);
4290
+ glDeleteTextures( n, textures);
4291
+ xfree(textures);
4292
+ return Qnil;
4293
+ }
4294
+
4295
+ static VALUE
4296
+ gl_GenTextures(obj,arg1)
4297
+ VALUE obj,arg1;
4298
+ {
4299
+ GLsizei n;
4300
+ GLuint *textures;
4301
+ RArray *ret;
4302
+ int i;
4303
+ n = (GLsizei)NUM2INT(arg1);
4304
+ textures = ALLOC_N(GLuint, n);
4305
+ glGenTextures(n, textures);
4306
+ ret = RARRAY(rb_ary_new2(n));
4307
+ for (i = 0; i < n; i++)
4308
+ rb_ary_push((VALUE)ret, INT2NUM(textures[i]));
4309
+ xfree(textures);
4310
+ return (VALUE)ret;
4311
+ }
4312
+
4313
+ static VALUE
4314
+ gl_IsTexture(obj,arg1)
4315
+ VALUE obj,arg1;
4316
+ {
4317
+ GLuint texture;
4318
+ GLboolean ret;
4319
+ texture = (GLuint)NUM2INT(arg1);
4320
+ ret = glIsTexture(texture);
4321
+ return INT2NUM(ret);
4322
+ }
4323
+
4324
+ static VALUE
4325
+ gl_PrioritizeTextures(obj,arg1,arg2)
4326
+ VALUE obj,arg1,arg2;
4327
+ {
4328
+ GLuint *textures;
4329
+ GLclampf *priorities;
4330
+ GLsizei size;
4331
+ if (TYPE(arg1) != T_ARRAY)
4332
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg1));
4333
+ if (TYPE(arg2) != T_ARRAY)
4334
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(arg2));
4335
+ if ((size = RARRAY(arg1)->len) != RARRAY(arg2)->len)
4336
+ rb_raise(rb_eArgError, "passed arrays must have the same length");
4337
+ textures = ALLOC_N(GLuint,size);
4338
+ priorities = ALLOC_N(GLclampf,size);
4339
+ ary2cuint(arg1,textures,size);
4340
+ ary2cflt(arg2,priorities,size);
4341
+ glPrioritizeTextures(size,textures,priorities);
4342
+ xfree(textures);
4343
+ xfree(priorities);
4344
+ return Qnil;
4345
+ }
4346
+
4347
+ static VALUE
4348
+ gl_Indexub(obj,arg1)
4349
+ VALUE obj,arg1;
4350
+ {
4351
+ GLubyte c;
4352
+ c = (GLubyte)NUM2INT(arg1);
4353
+ glIndexub(c);
4354
+ return Qnil;
4355
+ }
4356
+
4357
+ static VALUE
4358
+ gl_Indexubv(obj,arg1)
4359
+ VALUE obj,arg1;
4360
+ {
4361
+ GLubyte c[1] = {0};
4362
+ if (TYPE(arg1) != T_ARRAY)
4363
+ rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg1));
4364
+ ary2cubyte(arg1,c,1);
4365
+ glIndexubv(c);
4366
+ return Qnil;
4367
+ }
4368
+
4369
+ static VALUE
4370
+ gl_PopClientAttrib(obj)
4371
+ VALUE obj;
4372
+ {
4373
+ glPopClientAttrib();
4374
+ return Qnil;
4375
+ }
4376
+
4377
+ static VALUE
4378
+ gl_PushClientAttrib(obj,arg1)
4379
+ VALUE obj,arg1;
4380
+ {
4381
+ GLbitfield mask;
4382
+ mask = (GLbitfield)NUM2INT(arg1);
4383
+ glPushClientAttrib(mask);
4384
+ return Qnil;
4385
+ }
4386
+
4387
+ /* additional functions */
4388
+
4389
+ #define GLCOLOR_VFUNC(_type_) \
4390
+ static VALUE \
4391
+ gl_Color##_type_##v(argc,argv,obj) \
4392
+ int argc; \
4393
+ VALUE *argv; \
4394
+ VALUE obj; \
4395
+ { \
4396
+ int num; \
4397
+ VALUE args[4]; \
4398
+ RArray *ary; \
4399
+ switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
4400
+ case 1: \
4401
+ if (TYPE(args[0]) == T_ARRAY) { \
4402
+ ary = RARRAY(args[0]); \
4403
+ switch (ary->len) { \
4404
+ case 3: \
4405
+ gl_Color3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \
4406
+ break; \
4407
+ case 4: \
4408
+ gl_Color4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
4409
+ break; \
4410
+ default: \
4411
+ rb_raise(rb_eArgError, "array length:%d", ary->len); \
4412
+ } \
4413
+ } \
4414
+ else \
4415
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4416
+ break; \
4417
+ case 3: \
4418
+ gl_Color3##_type_(obj,args[0], args[1], args[2]); \
4419
+ break; \
4420
+ case 4: \
4421
+ gl_Color4##_type_(obj,args[0], args[1], args[2], args[3]); \
4422
+ break; \
4423
+ default: \
4424
+ rb_raise(rb_eArgError, "arg length:%d", num); \
4425
+ } \
4426
+ return Qnil; \
4427
+ }
4428
+
4429
+ GLCOLOR_VFUNC(b)
4430
+ GLCOLOR_VFUNC(d)
4431
+ GLCOLOR_VFUNC(f)
4432
+ GLCOLOR_VFUNC(i)
4433
+ GLCOLOR_VFUNC(s)
4434
+ GLCOLOR_VFUNC(ub)
4435
+ GLCOLOR_VFUNC(ui)
4436
+ GLCOLOR_VFUNC(us)
4437
+ #undef GLCOLOR_VFUNC
4438
+
4439
+ #define GLNORMAL_VFUNC(_type_) \
4440
+ static VALUE \
4441
+ gl_Normal##_type_##v(argc,argv,obj) \
4442
+ int argc; \
4443
+ VALUE *argv; \
4444
+ VALUE obj; \
4445
+ { \
4446
+ int num; \
4447
+ VALUE args[3]; \
4448
+ RArray* ary; \
4449
+ switch (num = rb_scan_args(argc, argv, "12", &args[0], &args[1], &args[2])) { \
4450
+ case 1: \
4451
+ if (TYPE(args[0]) == T_ARRAY) { \
4452
+ ary = RARRAY(args[0]); \
4453
+ switch (ary->len) { \
4454
+ case 3: \
4455
+ gl_Normal3##_type_(obj,ary->ptr[0], ary->ptr[1],ary->ptr[2]); \
4456
+ break; \
4457
+ default: \
4458
+ rb_raise(rb_eArgError, "array length:%d", ary->len); \
4459
+ } \
4460
+ } \
4461
+ else \
4462
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4463
+ break; \
4464
+ case 3: \
4465
+ gl_Normal3##_type_(obj,args[0], args[1], args[2]); \
4466
+ break; \
4467
+ default: \
4468
+ rb_raise(rb_eArgError, "arg length:%d",num); \
4469
+ } \
4470
+ return Qnil; \
4471
+ }
4472
+
4473
+ GLNORMAL_VFUNC(b)
4474
+ GLNORMAL_VFUNC(d)
4475
+ GLNORMAL_VFUNC(f)
4476
+ GLNORMAL_VFUNC(i)
4477
+ GLNORMAL_VFUNC(s)
4478
+ #undef GLNORMAL_VFUNC
4479
+
4480
+ #define GLRASTERPOS_VFUNC(_type_) \
4481
+ static VALUE \
4482
+ gl_RasterPos##_type_##v(argc,argv,obj) \
4483
+ int argc; \
4484
+ VALUE *argv; \
4485
+ VALUE obj; \
4486
+ { \
4487
+ int num; \
4488
+ VALUE args[4]; \
4489
+ RArray *ary; \
4490
+ switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
4491
+ case 1: \
4492
+ if (TYPE(args[0]) == T_ARRAY) { \
4493
+ ary = RARRAY(args[0]); \
4494
+ switch (ary->len) { \
4495
+ case 2: \
4496
+ gl_RasterPos2##_type_(obj,ary->ptr[0],ary->ptr[1]); \
4497
+ break; \
4498
+ case 3: \
4499
+ gl_RasterPos3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \
4500
+ break; \
4501
+ case 4: \
4502
+ gl_RasterPos4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
4503
+ break; \
4504
+ default: \
4505
+ rb_raise(rb_eArgError, "array length:%d", num); \
4506
+ } \
4507
+ } \
4508
+ else \
4509
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4510
+ break; \
4511
+ case 2: \
4512
+ gl_RasterPos2##_type_(obj,args[0], args[1]); \
4513
+ break; \
4514
+ case 3: \
4515
+ gl_RasterPos3##_type_(obj,args[0], args[1], args[2]); \
4516
+ break; \
4517
+ case 4: \
4518
+ gl_RasterPos4##_type_(obj,args[0], args[1], args[2], args[3]); \
4519
+ break; \
4520
+ default: \
4521
+ rb_raise(rb_eArgError, "too many arguments"); \
4522
+ } \
4523
+ return Qnil; \
4524
+ }
4525
+
4526
+ GLRASTERPOS_VFUNC(d)
4527
+ GLRASTERPOS_VFUNC(f)
4528
+ GLRASTERPOS_VFUNC(i)
4529
+ GLRASTERPOS_VFUNC(s)
4530
+ #undef GLRASTERPOS_VFUNC
4531
+
4532
+ #define GLRECT_VFUNC(_type_) \
4533
+ static VALUE \
4534
+ gl_Rect##_type_##v(argc,argv,obj) \
4535
+ int argc; \
4536
+ VALUE *argv; \
4537
+ VALUE obj; \
4538
+ { \
4539
+ int num; \
4540
+ VALUE args[4]; \
4541
+ RArray *ary; \
4542
+ switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
4543
+ case 1: \
4544
+ if (TYPE(args[0]) == T_ARRAY) { \
4545
+ ary = RARRAY(args[0]); \
4546
+ switch (ary->len) { \
4547
+ case 4: \
4548
+ gl_Rect##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
4549
+ break; \
4550
+ default: \
4551
+ rb_raise(rb_eArgError, "array length:%d", ary->len); \
4552
+ } \
4553
+ } \
4554
+ else \
4555
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4556
+ break; \
4557
+ case 4: \
4558
+ gl_Rect##_type_(obj,args[0], args[1], args[2], args[3]); \
4559
+ break; \
4560
+ default: \
4561
+ rb_raise(rb_eArgError, "arg length:%d", num); \
4562
+ } \
4563
+ return Qnil; \
4564
+ }
4565
+
4566
+ GLRECT_VFUNC(d)
4567
+ GLRECT_VFUNC(f)
4568
+ GLRECT_VFUNC(i)
4569
+ GLRECT_VFUNC(s)
4570
+ #undef GLRECT_VFUNC
4571
+
4572
+ #define GLTEXCOORD_VFUNC(_type_) \
4573
+ static VALUE \
4574
+ gl_TexCoord##_type_##v(argc,argv,obj) \
4575
+ int argc; \
4576
+ VALUE *argv; \
4577
+ VALUE obj; \
4578
+ { \
4579
+ int num; \
4580
+ VALUE args[4]; \
4581
+ RArray *ary; \
4582
+ switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
4583
+ case 1: \
4584
+ if (TYPE(args[0]) == T_ARRAY) { \
4585
+ ary = RARRAY(args[0]); \
4586
+ switch (ary->len) { \
4587
+ case 2: \
4588
+ gl_TexCoord2##_type_(obj,ary->ptr[0],ary->ptr[1]); \
4589
+ break; \
4590
+ case 3: \
4591
+ gl_TexCoord3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \
4592
+ break; \
4593
+ case 4: \
4594
+ gl_TexCoord4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
4595
+ break; \
4596
+ default: \
4597
+ rb_raise(rb_eArgError, "array length:%d", num); \
4598
+ } \
4599
+ } \
4600
+ else \
4601
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4602
+ break; \
4603
+ case 2: \
4604
+ gl_TexCoord2##_type_(obj,args[0], args[1]); \
4605
+ break; \
4606
+ case 3: \
4607
+ gl_TexCoord3##_type_(obj,args[0], args[1], args[2]); \
4608
+ break; \
4609
+ case 4: \
4610
+ gl_TexCoord4##_type_(obj,args[0], args[1], args[2], args[3]); \
4611
+ break; \
4612
+ default: \
4613
+ rb_raise(rb_eArgError, "too many arguments"); \
4614
+ break; \
4615
+ } \
4616
+ return Qnil; \
4617
+ }
4618
+
4619
+ GLTEXCOORD_VFUNC(d)
4620
+ GLTEXCOORD_VFUNC(f)
4621
+ GLTEXCOORD_VFUNC(i)
4622
+ GLTEXCOORD_VFUNC(s)
4623
+ #undef GLTEXCOORD_VFUNC
4624
+
4625
+ #define GLVERTEX_VFUNC(_type_) \
4626
+ static VALUE \
4627
+ gl_Vertex##_type_##v(argc,argv,obj) \
4628
+ int argc; \
4629
+ VALUE *argv; \
4630
+ VALUE obj; \
4631
+ { \
4632
+ VALUE args[4]; \
4633
+ RArray *ary; \
4634
+ switch (rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \
4635
+ case 1: \
4636
+ if (TYPE(args[0]) == T_ARRAY) { \
4637
+ ary = RARRAY(args[0]); \
4638
+ switch (ary->len) { \
4639
+ case 2: \
4640
+ gl_Vertex2##_type_(obj,ary->ptr[0],ary->ptr[1]); \
4641
+ break; \
4642
+ case 3: \
4643
+ gl_Vertex3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \
4644
+ break; \
4645
+ case 4: \
4646
+ gl_Vertex4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \
4647
+ break; \
4648
+ default: \
4649
+ rb_raise(rb_eRuntimeError, "glVertex vertex num error!:%d", ary->len); \
4650
+ } \
4651
+ } \
4652
+ else \
4653
+ rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(CLASS_OF(args[0]))); \
4654
+ break; \
4655
+ case 2: \
4656
+ gl_Vertex2##_type_(obj,args[0], args[1]); \
4657
+ break; \
4658
+ case 3: \
4659
+ gl_Vertex3##_type_(obj,args[0], args[1], args[2]); \
4660
+ break; \
4661
+ case 4: \
4662
+ gl_Vertex4##_type_(obj,args[0], args[1], args[2], args[3]); \
4663
+ break; \
4664
+ default: \
4665
+ rb_raise(rb_eArgError, "too many arguments"); \
4666
+ break; \
4667
+ } \
4668
+ return Qnil; \
4669
+ }
4670
+
4671
+ GLVERTEX_VFUNC(d)
4672
+ GLVERTEX_VFUNC(f)
4673
+ GLVERTEX_VFUNC(i)
4674
+ GLVERTEX_VFUNC(s)
4675
+ #undef GLVERTEX_VFUNC
4676
+
4677
+ /* */
4678
+
4679
+ static VALUE
4680
+ gl_LightModel(obj,arg1,arg2)
4681
+ VALUE obj,arg1,arg2;
4682
+ {
4683
+ if (TYPE(arg2) == T_ARRAY)
4684
+ gl_LightModelfv(obj,arg1,arg2);
4685
+ else
4686
+ gl_LightModelf(obj,arg1,arg2);
4687
+
4688
+ return Qnil;
4689
+ }
4690
+
4691
+ static VALUE
4692
+ gl_Material(obj,arg1,arg2,arg3)
4693
+ VALUE obj,arg1,arg2,arg3;
4694
+ {
4695
+ if (TYPE(arg3) == T_ARRAY)
4696
+ gl_Materialfv(obj,arg1,arg2,arg3);
4697
+ else
4698
+ gl_Materialf(obj,arg1,arg2,arg3);
4699
+
4700
+ return Qnil;
4701
+ }
4702
+
4703
+ static VALUE
4704
+ gl_Fog(obj,arg1,arg2)
4705
+ VALUE obj,arg1,arg2;
4706
+ {
4707
+ if (TYPE(arg2) == T_ARRAY)
4708
+ gl_Fogfv(obj,arg1,arg2);
4709
+ else
4710
+ gl_Fogf(obj,arg1,arg2);
4711
+
4712
+ return Qnil;
4713
+ }
4714
+
4715
+ static VALUE
4716
+ gl_Light(obj,arg1,arg2,arg3)
4717
+ VALUE obj,arg1,arg2,arg3;
4718
+ {
4719
+ if (TYPE(arg3) == T_ARRAY)
4720
+ gl_Lightfv(obj,arg1,arg2,arg3);
4721
+ else
4722
+ gl_Lightf(obj,arg1,arg2,arg3);
4723
+
4724
+ return Qnil;
4725
+ }
4726
+
4727
+ static VALUE
4728
+ gl_TexParameter(obj,arg1,arg2,arg3)
4729
+ VALUE obj,arg1,arg2,arg3;
4730
+ {
4731
+ if (TYPE(arg3) == T_ARRAY)
4732
+ gl_TexParameterfv(obj,arg1,arg2,arg3);
4733
+ else
4734
+ gl_TexParameterf(obj,arg1,arg2,arg3);
4735
+
4736
+ return Qnil;
4737
+ }
4738
+
4739
+ static VALUE
4740
+ gl_TexEnv(obj,arg1,arg2,arg3)
4741
+ VALUE obj,arg1,arg2,arg3;
4742
+ {
4743
+ if (TYPE(arg3) == T_ARRAY)
4744
+ gl_TexEnvfv(obj,arg1,arg2,arg3);
4745
+ else
4746
+ gl_TexEnvf(obj,arg1,arg2,arg3);
4747
+
4748
+ return Qnil;
4749
+ }
4750
+
4751
+ static VALUE
4752
+ gl_TexGen(obj,arg1,arg2,arg3)
4753
+ VALUE obj,arg1,arg2,arg3;
4754
+ {
4755
+ if (TYPE(arg3) == T_ARRAY)
4756
+ gl_TexGenfv(obj,arg1,arg2,arg3);
4757
+ else
4758
+ gl_TexGenf(obj,arg1,arg2,arg3);
4759
+
4760
+ return Qnil;
4761
+ }
4762
+
4763
+ /* init */
4764
+ void gl_init_functions_1_0__1_1(VALUE module)
4765
+ {
4766
+ /* OpenGL 1.0 functions */
4767
+ rb_define_module_function(module, "glNewList", gl_NewList, 2);
4768
+ rb_define_module_function(module, "glEndList", gl_EndList, 0);
4769
+ rb_define_module_function(module, "glCallList", gl_CallList, 1);
4770
+ rb_define_module_function(module, "glCallLists", gl_CallLists, 1);
4771
+ rb_define_module_function(module, "glDeleteLists", gl_DeleteLists, 2);
4772
+ rb_define_module_function(module, "glGenLists", gl_GenLists, 1);
4773
+ rb_define_module_function(module, "glListBase", gl_ListBase, 1);
4774
+ rb_define_module_function(module, "glBegin", gl_Begin, 1);
4775
+ rb_define_module_function(module, "glBitmap", gl_Bitmap, 7);
4776
+ rb_define_module_function(module, "glColor3b", gl_Color3b, 3);
4777
+ rb_define_module_function(module, "glColor3d", gl_Color3d, 3);
4778
+ rb_define_module_function(module, "glColor3f", gl_Color3f, 3);
4779
+ rb_define_module_function(module, "glColor3i", gl_Color3i, 3);
4780
+ rb_define_module_function(module, "glColor3s", gl_Color3s, 3);
4781
+ rb_define_module_function(module, "glColor3ub", gl_Color3ub, 3);
4782
+ rb_define_module_function(module, "glColor3ui", gl_Color3ui, 3);
4783
+ rb_define_module_function(module, "glColor3us", gl_Color3us, 3);
4784
+ rb_define_module_function(module, "glColor4b", gl_Color4b, 4);
4785
+ rb_define_module_function(module, "glColor4d", gl_Color4d, 4);
4786
+ rb_define_module_function(module, "glColor4f", gl_Color4f, 4);
4787
+ rb_define_module_function(module, "glColor4i", gl_Color4i, 4);
4788
+ rb_define_module_function(module, "glColor4s", gl_Color4s, 4);
4789
+ rb_define_module_function(module, "glColor4ub", gl_Color4ub, 4);
4790
+ rb_define_module_function(module, "glColor4ui", gl_Color4ui, 4);
4791
+ rb_define_module_function(module, "glColor4us", gl_Color4us, 4);
4792
+ rb_define_module_function(module, "glEdgeFlag", gl_EdgeFlag, 1);
4793
+ rb_define_module_function(module, "glEdgeFlagv", gl_EdgeFlagv, 1);
4794
+ rb_define_module_function(module, "glEnd", gl_End, 0);
4795
+ rb_define_module_function(module, "glIndexd", gl_Indexd, 1);
4796
+ rb_define_module_function(module, "glIndexdv", gl_Indexdv, 1);
4797
+ rb_define_module_function(module, "glIndexf", gl_Indexf, 1);
4798
+ rb_define_module_function(module, "glIndexfv", gl_Indexfv, 1);
4799
+ rb_define_module_function(module, "glIndexi", gl_Indexi, 1);
4800
+ rb_define_module_function(module, "glIndexiv", gl_Indexiv, 1);
4801
+ rb_define_module_function(module, "glIndexs", gl_Indexs, 1);
4802
+ rb_define_module_function(module, "glIndexsv", gl_Indexsv, 1);
4803
+ rb_define_module_function(module, "glNormal3b", gl_Normal3b, 3);
4804
+ rb_define_module_function(module, "glNormal3d", gl_Normal3d, 3);
4805
+ rb_define_module_function(module, "glNormal3f", gl_Normal3f, 3);
4806
+ rb_define_module_function(module, "glNormal3i", gl_Normal3i, 3);
4807
+ rb_define_module_function(module, "glNormal3s", gl_Normal3s, 3);
4808
+ rb_define_module_function(module, "glRasterPos2d", gl_RasterPos2d, 2);
4809
+ rb_define_module_function(module, "glRasterPos2f", gl_RasterPos2f, 2);
4810
+ rb_define_module_function(module, "glRasterPos2i", gl_RasterPos2i, 2);
4811
+ rb_define_module_function(module, "glRasterPos2s", gl_RasterPos2s, 2);
4812
+ rb_define_module_function(module, "glRasterPos3d", gl_RasterPos3d, 3);
4813
+ rb_define_module_function(module, "glRasterPos3f", gl_RasterPos3f, 3);
4814
+ rb_define_module_function(module, "glRasterPos3i", gl_RasterPos3i, 3);
4815
+ rb_define_module_function(module, "glRasterPos3s", gl_RasterPos3s, 3);
4816
+ rb_define_module_function(module, "glRasterPos4d", gl_RasterPos4d, 4);
4817
+ rb_define_module_function(module, "glRasterPos4f", gl_RasterPos4f, 4);
4818
+ rb_define_module_function(module, "glRasterPos4i", gl_RasterPos4i, 4);
4819
+ rb_define_module_function(module, "glRasterPos4s", gl_RasterPos4s, 4);
4820
+ rb_define_module_function(module, "glRectd", gl_Rectd, 4);
4821
+ rb_define_module_function(module, "glRectf", gl_Rectf, 4);
4822
+ rb_define_module_function(module, "glRecti", gl_Recti, 4);
4823
+ rb_define_module_function(module, "glRects", gl_Rects, 4);
4824
+ rb_define_module_function(module, "glTexCoord1d", gl_TexCoord1d, 1);
4825
+ rb_define_module_function(module, "glTexCoord1f", gl_TexCoord1f, 1);
4826
+ rb_define_module_function(module, "glTexCoord1i", gl_TexCoord1i, 1);
4827
+ rb_define_module_function(module, "glTexCoord1s", gl_TexCoord1s, 1);
4828
+ rb_define_module_function(module, "glTexCoord2d", gl_TexCoord2d, 2);
4829
+ rb_define_module_function(module, "glTexCoord2f", gl_TexCoord2f, 2);
4830
+ rb_define_module_function(module, "glTexCoord2i", gl_TexCoord2i, 2);
4831
+ rb_define_module_function(module, "glTexCoord2s", gl_TexCoord2s, 2);
4832
+ rb_define_module_function(module, "glTexCoord3d", gl_TexCoord3d, 3);
4833
+ rb_define_module_function(module, "glTexCoord3f", gl_TexCoord3f, 3);
4834
+ rb_define_module_function(module, "glTexCoord3i", gl_TexCoord3i, 3);
4835
+ rb_define_module_function(module, "glTexCoord3s", gl_TexCoord3s, 3);
4836
+ rb_define_module_function(module, "glTexCoord4d", gl_TexCoord4d, 4);
4837
+ rb_define_module_function(module, "glTexCoord4f", gl_TexCoord4f, 4);
4838
+ rb_define_module_function(module, "glTexCoord4i", gl_TexCoord4i, 4);
4839
+ rb_define_module_function(module, "glTexCoord4s", gl_TexCoord4s, 4);
4840
+ rb_define_module_function(module, "glVertex2d", gl_Vertex2d, 2);
4841
+ rb_define_module_function(module, "glVertex2f", gl_Vertex2f, 2);
4842
+ rb_define_module_function(module, "glVertex2i", gl_Vertex2i, 2);
4843
+ rb_define_module_function(module, "glVertex2s", gl_Vertex2s, 2);
4844
+ rb_define_module_function(module, "glVertex3d", gl_Vertex3d, 3);
4845
+ rb_define_module_function(module, "glVertex3f", gl_Vertex3f, 3);
4846
+ rb_define_module_function(module, "glVertex3i", gl_Vertex3i, 3);
4847
+ rb_define_module_function(module, "glVertex3s", gl_Vertex3s, 3);
4848
+ rb_define_module_function(module, "glVertex4d", gl_Vertex4d, 4);
4849
+ rb_define_module_function(module, "glVertex4f", gl_Vertex4f, 4);
4850
+ rb_define_module_function(module, "glVertex4i", gl_Vertex4i, 4);
4851
+ rb_define_module_function(module, "glVertex4s", gl_Vertex4s, 4);
4852
+ rb_define_module_function(module, "glClipPlane", gl_ClipPlane, 2);
4853
+ rb_define_module_function(module, "glColorMaterial", gl_ColorMaterial, 2);
4854
+ rb_define_module_function(module, "glCullFace", gl_CullFace, 1);
4855
+ rb_define_module_function(module, "glFogf", gl_Fogf, 2);
4856
+ rb_define_module_function(module, "glFogfv", gl_Fogfv, 2);
4857
+ rb_define_module_function(module, "glFogi", gl_Fogi, 2);
4858
+ rb_define_module_function(module, "glFogiv", gl_Fogiv, 2);
4859
+ rb_define_module_function(module, "glFrontFace", gl_FrontFace, 1);
4860
+ rb_define_module_function(module, "glHint", gl_Hint, 2);
4861
+ rb_define_module_function(module, "glLightf", gl_Lightf, 3);
4862
+ rb_define_module_function(module, "glLightfv", gl_Lightfv, 3);
4863
+ rb_define_module_function(module, "glLighti", gl_Lighti, 3);
4864
+ rb_define_module_function(module, "glLightiv", gl_Lightiv, 3);
4865
+ rb_define_module_function(module, "glLightModelf", gl_LightModelf, 2);
4866
+ rb_define_module_function(module, "glLightModelfv", gl_LightModelfv, 2);
4867
+ rb_define_module_function(module, "glLightModeli", gl_LightModeli, 2);
4868
+ rb_define_module_function(module, "glLightModeliv", gl_LightModeliv, 2);
4869
+ rb_define_module_function(module, "glLineStipple", gl_LineStipple, 2);
4870
+ rb_define_module_function(module, "glLineWidth", gl_LineWidth, 1);
4871
+ rb_define_module_function(module, "glMaterialf", gl_Materialf, 3);
4872
+ rb_define_module_function(module, "glMaterialfv", gl_Materialfv, 3);
4873
+ rb_define_module_function(module, "glMateriali", gl_Materiali, 3);
4874
+ rb_define_module_function(module, "glMaterialiv", gl_Materialiv, 3);
4875
+ rb_define_module_function(module, "glPointSize", gl_PointSize, 1);
4876
+ rb_define_module_function(module, "glPolygonMode", gl_PolygonMode, 2);
4877
+ rb_define_module_function(module, "glPolygonStipple", gl_PolygonStipple, 1);
4878
+ rb_define_module_function(module, "glScissor", gl_Scissor, 4);
4879
+ rb_define_module_function(module, "glShadeModel", gl_ShadeModel, 1);
4880
+ rb_define_module_function(module, "glTexParameterf", gl_TexParameterf, 3);
4881
+ rb_define_module_function(module, "glTexParameterfv", gl_TexParameterfv, 3);
4882
+ rb_define_module_function(module, "glTexParameteri", gl_TexParameteri, 3);
4883
+ rb_define_module_function(module, "glTexParameteriv", gl_TexParameteriv, 3);
4884
+ rb_define_module_function(module, "glTexImage1D", gl_TexImage1D, 8);
4885
+ rb_define_module_function(module, "glTexImage2D", gl_TexImage2D, 9);
4886
+ rb_define_module_function(module, "glTexEnvf", gl_TexEnvf, 3);
4887
+ rb_define_module_function(module, "glTexEnvfv", gl_TexEnvfv, 3);
4888
+ rb_define_module_function(module, "glTexEnvi", gl_TexEnvi, 3);
4889
+ rb_define_module_function(module, "glTexEnviv", gl_TexEnviv, 3);
4890
+ rb_define_module_function(module, "glTexGend", gl_TexGend, 3);
4891
+ rb_define_module_function(module, "glTexGendv", gl_TexGendv, 3);
4892
+ rb_define_module_function(module, "glTexGenf", gl_TexGenf, 3);
4893
+ rb_define_module_function(module, "glTexGenfv", gl_TexGenfv, 3);
4894
+ rb_define_module_function(module, "glTexGeni", gl_TexGeni, 3);
4895
+ rb_define_module_function(module, "glTexGeniv", gl_TexGeniv, 3);
4896
+ rb_define_module_function(module, "glFeedbackBuffer", gl_FeedbackBuffer, -1);
4897
+ rb_define_module_function(module, "glSelectBuffer", gl_SelectBuffer, -1);
4898
+ rb_define_module_function(module, "glRenderMode", gl_RenderMode, 1);
4899
+ rb_define_module_function(module, "glInitNames", gl_InitNames, 0);
4900
+ rb_define_module_function(module, "glLoadName", gl_LoadName, 1);
4901
+ rb_define_module_function(module, "glPassThrough", gl_PassThrough, 1);
4902
+ rb_define_module_function(module, "glPopName", gl_PopName, 0);
4903
+ rb_define_module_function(module, "glPushName", gl_PushName, 1);
4904
+ rb_define_module_function(module, "glDrawBuffer", gl_DrawBuffer, 1);
4905
+ rb_define_module_function(module, "glClear", gl_Clear, 1);
4906
+ rb_define_module_function(module, "glClearAccum", gl_ClearAccum, 4);
4907
+ rb_define_module_function(module, "glClearIndex", gl_ClearIndex, 1);
4908
+ rb_define_module_function(module, "glClearColor", gl_ClearColor, 4);
4909
+ rb_define_module_function(module, "glClearStencil", gl_ClearStencil, 1);
4910
+ rb_define_module_function(module, "glClearDepth", gl_ClearDepth, 1);
4911
+ rb_define_module_function(module, "glStencilMask", gl_StencilMask, 1);
4912
+ rb_define_module_function(module, "glColorMask", gl_ColorMask, 4);
4913
+ rb_define_module_function(module, "glDepthMask", gl_DepthMask, 1);
4914
+ rb_define_module_function(module, "glIndexMask", gl_IndexMask, 1);
4915
+ rb_define_module_function(module, "glAccum", gl_Accum, 2);
4916
+ rb_define_module_function(module, "glDisable", gl_Disable, 1);
4917
+ rb_define_module_function(module, "glEnable", gl_Enable, 1);
4918
+ rb_define_module_function(module, "glFinish", gl_Finish, 0);
4919
+ rb_define_module_function(module, "glFlush", gl_Flush, 0);
4920
+ rb_define_module_function(module, "glPopAttrib", gl_PopAttrib, 0);
4921
+ rb_define_module_function(module, "glPushAttrib", gl_PushAttrib, 1);
4922
+ rb_define_module_function(module, "glMap1d", gl_Map1d, 6);
4923
+ rb_define_module_function(module, "glMap1f", gl_Map1f, 6);
4924
+ rb_define_module_function(module, "glMap2d", gl_Map2d, 10);
4925
+ rb_define_module_function(module, "glMap2f", gl_Map2f, 10);
4926
+ rb_define_module_function(module, "glMapGrid1d", gl_MapGrid1d, 3);
4927
+ rb_define_module_function(module, "glMapGrid1f", gl_MapGrid1f, 3);
4928
+ rb_define_module_function(module, "glMapGrid2d", gl_MapGrid2d, 6);
4929
+ rb_define_module_function(module, "glMapGrid2f", gl_MapGrid2f, 6);
4930
+ rb_define_module_function(module, "glEvalCoord1d", gl_EvalCoord1d, 1);
4931
+ rb_define_module_function(module, "glEvalCoord1dv", gl_EvalCoord1dv, 1);
4932
+ rb_define_module_function(module, "glEvalCoord1f", gl_EvalCoord1f, 1);
4933
+ rb_define_module_function(module, "glEvalCoord1fv", gl_EvalCoord1fv, 1);
4934
+ rb_define_module_function(module, "glEvalCoord2d", gl_EvalCoord2d, 2);
4935
+ rb_define_module_function(module, "glEvalCoord2dv", gl_EvalCoord2dv, 1);
4936
+ rb_define_module_function(module, "glEvalCoord2f", gl_EvalCoord2f, 2);
4937
+ rb_define_module_function(module, "glEvalCoord2fv", gl_EvalCoord2fv, 1);
4938
+ rb_define_module_function(module, "glEvalMesh1", gl_EvalMesh1, 3);
4939
+ rb_define_module_function(module, "glEvalPoint1", gl_EvalPoint1, 1);
4940
+ rb_define_module_function(module, "glEvalMesh2", gl_EvalMesh2, 5);
4941
+ rb_define_module_function(module, "glEvalPoint2", gl_EvalPoint2, 2);
4942
+ rb_define_module_function(module, "glAlphaFunc", gl_AlphaFunc, 2);
4943
+ rb_define_module_function(module, "glBlendFunc", gl_BlendFunc, 2);
4944
+ rb_define_module_function(module, "glLogicOp", gl_LogicOp, 1);
4945
+ rb_define_module_function(module, "glStencilFunc", gl_StencilFunc, 3);
4946
+ rb_define_module_function(module, "glStencilOp", gl_StencilOp, 3);
4947
+ rb_define_module_function(module, "glDepthFunc", gl_DepthFunc, 1);
4948
+ rb_define_module_function(module, "glPixelZoom", gl_PixelZoom, 2);
4949
+ rb_define_module_function(module, "glPixelTransferf", gl_PixelTransferf, 2);
4950
+ rb_define_module_function(module, "glPixelTransferi", gl_PixelTransferi, 2);
4951
+ rb_define_module_function(module, "glPixelStoref", gl_PixelStoref, 2);
4952
+ rb_define_module_function(module, "glPixelStorei", gl_PixelStorei, 2);
4953
+ rb_define_module_function(module, "glPixelMapfv", gl_PixelMapfv, 2);
4954
+ rb_define_module_function(module, "glPixelMapuiv", gl_PixelMapuiv, 2);
4955
+ rb_define_module_function(module, "glPixelMapusv", gl_PixelMapusv, 2);
4956
+ rb_define_module_function(module, "glReadBuffer", gl_ReadBuffer, 1);
4957
+ rb_define_module_function(module, "glCopyPixels", gl_CopyPixels, 5);
4958
+ rb_define_module_function(module, "glReadPixels", gl_ReadPixels, 6);
4959
+ rb_define_module_function(module, "glDrawPixels", gl_DrawPixels, 5);
4960
+ rb_define_module_function(module, "glGetBooleanv", gl_GetBooleanv, 2);
4961
+ rb_define_module_function(module, "glGetClipPlane", gl_GetClipPlane, 1);
4962
+ rb_define_module_function(module, "glGetDoublev", gl_GetDoublev, 1);
4963
+ rb_define_module_function(module, "glGetError", gl_GetError, 0);
4964
+ rb_define_module_function(module, "glGetFloatv", gl_GetFloatv, 2);
4965
+ rb_define_module_function(module, "glGetIntegerv", gl_GetIntegerv, 2);
4966
+ rb_define_module_function(module, "glGetLightfv", gl_GetLightfv, 2);
4967
+ rb_define_module_function(module, "glGetLightiv", gl_GetLightiv, 2);
4968
+ rb_define_module_function(module, "glGetMapdv", gl_GetMapdv, 2);
4969
+ rb_define_module_function(module, "glGetMapfv", gl_GetMapfv, 2);
4970
+ rb_define_module_function(module, "glGetMapiv", gl_GetMapiv, 2);
4971
+ rb_define_module_function(module, "glGetMaterialfv", gl_GetMaterialfv, 2);
4972
+ rb_define_module_function(module, "glGetMaterialiv", gl_GetMaterialiv, 2);
4973
+ rb_define_module_function(module, "glGetPixelMapfv", gl_GetPixelMapfv, 1);
4974
+ rb_define_module_function(module, "glGetPixelMapuiv", gl_GetPixelMapuiv, 1);
4975
+ rb_define_module_function(module, "glGetPixelMapusv", gl_GetPixelMapusv, 1);
4976
+ rb_define_module_function(module, "glGetPolygonStipple", gl_GetPolygonStipple, 1);
4977
+ rb_define_module_function(module, "glGetString", gl_GetString, 1);
4978
+ rb_define_module_function(module, "glGetTexEnvfv", gl_GetTexEnvfv, 2);
4979
+ rb_define_module_function(module, "glGetTexEnviv", gl_GetTexEnviv, 2);
4980
+ rb_define_module_function(module, "glGetTexGendv", gl_GetTexGendv, 2);
4981
+ rb_define_module_function(module, "glGetTexGenfv", gl_GetTexGenfv, 2);
4982
+ rb_define_module_function(module, "glGetTexGeniv", gl_GetTexGeniv, 2);
4983
+ /* rb_define_module_function(module, "glGetTexImage", gl_GetTexImage, 5); */
4984
+ rb_define_module_function(module, "glGetTexParameterfv", gl_GetTexParameterfv, 2);
4985
+ rb_define_module_function(module, "glGetTexParameteriv", gl_GetTexParameteriv, 2);
4986
+ rb_define_module_function(module, "glGetTexLevelParameterfv", gl_GetTexLevelParameterfv, 3);
4987
+ rb_define_module_function(module, "glGetTexLevelParameteriv", gl_GetTexLevelParameteriv, 3);
4988
+ rb_define_module_function(module, "glIsEnabled", gl_IsEnabled, 1);
4989
+ rb_define_module_function(module, "glIsList", gl_IsList, 1);
4990
+ rb_define_module_function(module, "glDepthRange", gl_DepthRange, 2);
4991
+ rb_define_module_function(module, "glFrustum", gl_Frustum, 6);
4992
+ rb_define_module_function(module, "glLoadIdentity", gl_LoadIdentity, 0);
4993
+ rb_define_module_function(module, "glLoadMatrixf", gl_LoadMatrixf, 1);
4994
+ rb_define_module_function(module, "glLoadMatrixd", gl_LoadMatrixd, 1);
4995
+ rb_define_module_function(module, "glMatrixMode", gl_MatrixMode, 1);
4996
+ rb_define_module_function(module, "glMultMatrixf", gl_MultMatrixf, 1);
4997
+ rb_define_module_function(module, "glMultMatrixd", gl_MultMatrixd, 1);
4998
+ rb_define_module_function(module, "glOrtho", gl_Ortho, 6);
4999
+ rb_define_module_function(module, "glPopMatrix", gl_PopMatrix, 0);
5000
+ rb_define_module_function(module, "glPushMatrix", gl_PushMatrix, 0);
5001
+ rb_define_module_function(module, "glRotated", gl_Rotated, 4);
5002
+ rb_define_module_function(module, "glRotatef", gl_Rotatef, 4);
5003
+ rb_define_module_function(module, "glScaled", gl_Scaled, 3);
5004
+ rb_define_module_function(module, "glScalef", gl_Scalef, 3);
5005
+ rb_define_module_function(module, "glTranslated", gl_Translated, 3);
5006
+ rb_define_module_function(module, "glTranslatef", gl_Translatef, 3);
5007
+ rb_define_module_function(module, "glViewport", gl_Viewport, 4);
5008
+
5009
+ /* OpenGL 1.1 functions */
5010
+ rb_define_module_function(module, "glArrayElement", gl_ArrayElement, 1);
5011
+ rb_define_module_function(module, "glColorPointer", gl_ColorPointer, 4);
5012
+ rb_define_module_function(module, "glDisableClientState", gl_DisableClientState, 1);
5013
+ rb_define_module_function(module, "glDrawArrays", gl_DrawArrays, 3);
5014
+ rb_define_module_function(module, "glDrawElements", gl_DrawElements, 4);
5015
+ rb_define_module_function(module, "glEdgeFlagPointer", gl_EdgeFlagPointer, 2);
5016
+ rb_define_module_function(module, "glEnableClientState", gl_EnableClientState, 1);
5017
+ rb_define_module_function(module, "glGetPointerv", gl_GetPointerv, 2);
5018
+ rb_define_module_function(module, "glIndexPointer", gl_IndexPointer, 3);
5019
+ rb_define_module_function(module, "glInterleavedArrays", gl_InterleavedArrays, 3);
5020
+ rb_define_module_function(module, "glNormalPointer", gl_NormalPointer, 3);
5021
+ rb_define_module_function(module, "glTexCoordPointer", gl_TexCoordPointer, 4);
5022
+ rb_define_module_function(module, "glVertexPointer", gl_VertexPointer, 4);
5023
+ rb_define_module_function(module, "glPolygonOffset", gl_PolygonOffset, 2);
5024
+ rb_define_module_function(module, "glCopyTexImage1D", gl_CopyTexImage1D, 7);
5025
+ rb_define_module_function(module, "glCopyTexImage2D", gl_CopyTexImage2D, 8);
5026
+ rb_define_module_function(module, "glCopyTexSubImage1D", gl_CopyTexSubImage1D, 6);
5027
+ rb_define_module_function(module, "glCopyTexSubImage2D", gl_CopyTexSubImage2D, 8);
5028
+ rb_define_module_function(module, "glTexSubImage1D", gl_TexSubImage1D, 7);
5029
+ rb_define_module_function(module, "glTexSubImage2D", gl_TexSubImage2D, 9);
5030
+ rb_define_module_function(module, "glAreTexturesResident", gl_AreTexturesResident, 1);
5031
+ rb_define_module_function(module, "glBindTexture", gl_BindTexture, 2);
5032
+ rb_define_module_function(module, "glDeleteTextures", gl_DeleteTextures, 1);
5033
+ rb_define_module_function(module, "glGenTextures", gl_GenTextures, 1);
5034
+ rb_define_module_function(module, "glIsTexture", gl_IsTexture, 1);
5035
+ rb_define_module_function(module, "glPrioritizeTextures", gl_PrioritizeTextures, 2);
5036
+ rb_define_module_function(module, "glIndexub", gl_Indexub, 1);
5037
+ rb_define_module_function(module, "glIndexubv", gl_Indexubv, 1);
5038
+ rb_define_module_function(module, "glPopClientAttrib", gl_PopClientAttrib, 0);
5039
+ rb_define_module_function(module, "glPushClientAttrib", gl_PushClientAttrib, 1);
5040
+
5041
+ /* additional functions */
5042
+ rb_define_module_function(module, "glColor", gl_Colordv, -1);
5043
+ rb_define_module_function(module, "glColor3bv", gl_Colorbv, -1);
5044
+ rb_define_module_function(module, "glColor3dv", gl_Colordv, -1);
5045
+ rb_define_module_function(module, "glColor3fv", gl_Colorfv, -1);
5046
+ rb_define_module_function(module, "glColor3iv", gl_Coloriv, -1);
5047
+ rb_define_module_function(module, "glColor3sv", gl_Colorsv, -1);
5048
+ rb_define_module_function(module, "glColor3ubv", gl_Colorubv, -1);
5049
+ rb_define_module_function(module, "glColor3uiv", gl_Coloruiv, -1);
5050
+ rb_define_module_function(module, "glColor3usv", gl_Colorusv, -1);
5051
+ rb_define_module_function(module, "glColor4bv", gl_Colorbv, -1);
5052
+ rb_define_module_function(module, "glColor4dv", gl_Colordv, -1);
5053
+ rb_define_module_function(module, "glColor4fv", gl_Colorfv, -1);
5054
+ rb_define_module_function(module, "glColor4iv", gl_Coloriv, -1);
5055
+ rb_define_module_function(module, "glColor4sv", gl_Colorsv, -1);
5056
+ rb_define_module_function(module, "glColor4ubv", gl_Colorubv, -1);
5057
+ rb_define_module_function(module, "glColor4uiv", gl_Coloruiv, -1);
5058
+ rb_define_module_function(module, "glColor4usv", gl_Colorusv, -1);
5059
+
5060
+ rb_define_module_function(module, "glNormal", gl_Normaldv, -1);
5061
+ rb_define_module_function(module, "glNormal3bv", gl_Normalbv, -1);
5062
+ rb_define_module_function(module, "glNormal3dv", gl_Normaldv, -1);
5063
+ rb_define_module_function(module, "glNormal3fv", gl_Normalfv, -1);
5064
+ rb_define_module_function(module, "glNormal3iv", gl_Normaliv, -1);
5065
+ rb_define_module_function(module, "glNormal3sv", gl_Normalsv, -1);
5066
+
5067
+ rb_define_module_function(module, "glRasterPos", gl_RasterPosdv, -1);
5068
+ rb_define_module_function(module, "glRasterPos2d", gl_RasterPosdv, -1);
5069
+ rb_define_module_function(module, "glRasterPos2f", gl_RasterPosfv, -1);
5070
+ rb_define_module_function(module, "glRasterPos2i", gl_RasterPosiv, -1);
5071
+ rb_define_module_function(module, "glRasterPos2s", gl_RasterPossv, -1);
5072
+ rb_define_module_function(module, "glRasterPos3d", gl_RasterPosdv, -1);
5073
+ rb_define_module_function(module, "glRasterPos3f", gl_RasterPosfv, -1);
5074
+ rb_define_module_function(module, "glRasterPos3i", gl_RasterPosiv, -1);
5075
+ rb_define_module_function(module, "glRasterPos3s", gl_RasterPossv, -1);
5076
+ rb_define_module_function(module, "glRasterPos4d", gl_RasterPosdv, -1);
5077
+ rb_define_module_function(module, "glRasterPos4f", gl_RasterPosfv, -1);
5078
+ rb_define_module_function(module, "glRasterPos4i", gl_RasterPosiv, -1);
5079
+ rb_define_module_function(module, "glRasterPos4s", gl_RasterPossv, -1);
5080
+
5081
+ rb_define_module_function(module, "glRect", gl_Rectdv, -1);
5082
+ rb_define_module_function(module, "glRectdv", gl_Rectdv, -1);
5083
+ rb_define_module_function(module, "glRectfv", gl_Rectfv, -1);
5084
+ rb_define_module_function(module, "glRectiv", gl_Rectiv, -1);
5085
+ rb_define_module_function(module, "glRectsv", gl_Rectsv, -1);
5086
+
5087
+ rb_define_module_function(module, "glTexCoord", gl_TexCoorddv, -1);
5088
+ rb_define_module_function(module, "glTexCoord1dv", gl_TexCoorddv, -1);
5089
+ rb_define_module_function(module, "glTexCoord1fv", gl_TexCoordfv, -1);
5090
+ rb_define_module_function(module, "glTexCoord1iv", gl_TexCoordiv, -1);
5091
+ rb_define_module_function(module, "glTexCoord1sv", gl_TexCoordsv, -1);
5092
+ rb_define_module_function(module, "glTexCoord2dv", gl_TexCoorddv, -1);
5093
+ rb_define_module_function(module, "glTexCoord2fv", gl_TexCoordfv, -1);
5094
+ rb_define_module_function(module, "glTexCoord2iv", gl_TexCoordiv, -1);
5095
+ rb_define_module_function(module, "glTexCoord2sv", gl_TexCoordsv, -1);
5096
+ rb_define_module_function(module, "glTexCoord3dv", gl_TexCoorddv, -1);
5097
+ rb_define_module_function(module, "glTexCoord3fv", gl_TexCoordfv, -1);
5098
+ rb_define_module_function(module, "glTexCoord3iv", gl_TexCoordiv, -1);
5099
+ rb_define_module_function(module, "glTexCoord3sv", gl_TexCoordsv, -1);
5100
+ rb_define_module_function(module, "glTexCoord4dv", gl_TexCoorddv, -1);
5101
+ rb_define_module_function(module, "glTexCoord4fv", gl_TexCoordfv, -1);
5102
+ rb_define_module_function(module, "glTexCoord4iv", gl_TexCoordiv, -1);
5103
+ rb_define_module_function(module, "glTexCoord4sv", gl_TexCoordsv, -1);
5104
+
5105
+ rb_define_module_function(module, "glVertex", gl_Vertexdv, -1);
5106
+ rb_define_module_function(module, "glVertex2dv", gl_Vertexdv, -1);
5107
+ rb_define_module_function(module, "glVertex2fv", gl_Vertexfv, -1);
5108
+ rb_define_module_function(module, "glVertex2iv", gl_Vertexiv, -1);
5109
+ rb_define_module_function(module, "glVertex2sv", gl_Vertexsv, -1);
5110
+ rb_define_module_function(module, "glVertex3dv", gl_Vertexdv, -1);
5111
+ rb_define_module_function(module, "glVertex3fv", gl_Vertexfv, -1);
5112
+ rb_define_module_function(module, "glVertex3iv", gl_Vertexiv, -1);
5113
+ rb_define_module_function(module, "glVertex3sv", gl_Vertexsv, -1);
5114
+ rb_define_module_function(module, "glVertex4dv", gl_Vertexdv, -1);
5115
+ rb_define_module_function(module, "glVertex4fv", gl_Vertexfv, -1);
5116
+ rb_define_module_function(module, "glVertex4iv", gl_Vertexiv, -1);
5117
+ rb_define_module_function(module, "glVertex4sv", gl_Vertexsv, -1);
5118
+
5119
+ /* these simply calls normal or vector (*v) function depending on
5120
+ if array or single value is passed to them */
5121
+ rb_define_module_function(module, "glLightModel", gl_LightModel, 2);
5122
+ rb_define_module_function(module, "glMaterial", gl_Material, 3);
5123
+ rb_define_module_function(module, "glFog", gl_Fog, 2);
5124
+ rb_define_module_function(module, "glLight", gl_Light, 3);
5125
+ rb_define_module_function(module, "glTexParameter", gl_TexParameter, 3);
5126
+ rb_define_module_function(module, "glTexEnv", gl_TexEnv, 3);
5127
+ rb_define_module_function(module, "glTexGen", gl_TexGen, 3);
5128
+
5129
+ /* aliases */
5130
+ rb_define_module_function(module, "glMultMatrix", gl_MultMatrixd, 1);
5131
+ rb_define_module_function(module, "glLoadMatrix", gl_LoadMatrixd, 1);
5132
+ rb_define_module_function(module, "glRotate", gl_Rotated, 4);
5133
+ rb_define_module_function(module, "glScale", gl_Scaled, 3);
5134
+ rb_define_module_function(module, "glTranslate", gl_Translated, 3);
5135
+
5136
+ rb_define_module_function(module, "glPixelStore", gl_PixelStoref, 2);
5137
+ rb_define_module_function(module, "glPixelTransfer", gl_PixelTransferf, 2);
5138
+ rb_define_module_function(module, "glIndex", gl_Indexi, 1);
5139
+ rb_define_module_function(module, "glGetMaterial", gl_GetMaterialfv, 2);
5140
+ rb_define_module_function(module, "glGetDouble", gl_GetDoublev, 1);
5141
+
5142
+ rb_global_variable(&g_current_sel_buffer);
5143
+ rb_global_variable(&g_current_feed_buffer);
5144
+ rb_global_variable(&g_Vertex_ptr);
5145
+ rb_global_variable(&g_Normal_ptr);
5146
+ rb_global_variable(&g_Color_ptr);
5147
+ rb_global_variable(&g_Index_ptr);
5148
+ rb_global_variable(&g_TexCoord_ptr);
5149
+ rb_global_variable(&g_EdgeFlag_ptr);
5150
+ rb_global_variable(&g_FogCoord_ptr);
5151
+ rb_global_variable(&g_SecondaryColor_ptr);
5152
+ }