/* * Copyright (C) 2007 Jan Dvorak * * This program is distributed under the terms of the MIT license. * See the included MIT-LICENSE file for the terms of this license. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifdef __APPLE__ #include #elif defined WIN32 #include #include #else #include #endif #include "../common/common.h" /* OpenGL 1.3 functions */ static void (APIENTRY * fptr_glActiveTexture)(GLenum); static VALUE gl_ActiveTexture(obj,arg1) VALUE obj,arg1; { GLenum texture; LOAD_GL_FUNC(glActiveTexture) texture = (GLenum)NUM2INT(arg1); fptr_glActiveTexture(texture); return Qnil; } static void (APIENTRY * fptr_glClientActiveTexture)(GLenum); static VALUE gl_ClientActiveTexture(obj,arg1) VALUE obj,arg1; { GLenum texture; LOAD_GL_FUNC(glClientActiveTexture) texture = (GLenum)NUM2INT(arg1); fptr_glClientActiveTexture(texture); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord1d)(GLenum,GLdouble); static VALUE gl_MultiTexCoord1d(obj,arg1,arg2) VALUE obj,arg1,arg2; { GLenum target; GLdouble s; LOAD_GL_FUNC(glMultiTexCoord1d) target = (GLenum)NUM2INT(arg1); s = (GLdouble)NUM2DBL(arg2); fptr_glMultiTexCoord1d(target,s); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord1f)(GLenum,GLfloat); static VALUE gl_MultiTexCoord1f(obj,arg1,arg2) VALUE obj,arg1,arg2; { GLenum target; GLfloat s; LOAD_GL_FUNC(glMultiTexCoord1f) target = (GLenum)NUM2INT(arg1); s = (GLfloat)NUM2DBL(arg2); fptr_glMultiTexCoord1f(target,s); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord1i)(GLenum,GLint); static VALUE gl_MultiTexCoord1i(obj,arg1,arg2) VALUE obj,arg1,arg2; { GLenum target; GLint s; LOAD_GL_FUNC(glMultiTexCoord1i) target = (GLenum)NUM2INT(arg1); s = (GLint)NUM2INT(arg2); fptr_glMultiTexCoord1i(target,s); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord1s)(GLenum,GLshort); static VALUE gl_MultiTexCoord1s(obj,arg1,arg2) VALUE obj,arg1,arg2; { GLenum target; GLshort s; LOAD_GL_FUNC(glMultiTexCoord1s) target = (GLenum)NUM2INT(arg1); s = (GLshort)NUM2INT(arg2); fptr_glMultiTexCoord1s(target,s); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord2d)(GLenum,GLdouble,GLdouble); static VALUE gl_MultiTexCoord2d(obj,arg1,arg2,arg3) VALUE obj,arg1,arg2,arg3; { GLenum target; GLdouble s; GLdouble t; LOAD_GL_FUNC(glMultiTexCoord2d) target = (GLenum)NUM2INT(arg1); s = (GLdouble)NUM2DBL(arg2); t = (GLdouble)NUM2DBL(arg3); fptr_glMultiTexCoord2d(target,s,t); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord2f)(GLenum,GLfloat,GLfloat); static VALUE gl_MultiTexCoord2f(obj,arg1,arg2,arg3) VALUE obj,arg1,arg2,arg3; { GLenum target; GLfloat s; GLfloat t; LOAD_GL_FUNC(glMultiTexCoord2f) target = (GLenum)NUM2INT(arg1); s = (GLfloat)NUM2DBL(arg2); t = (GLfloat)NUM2DBL(arg3); fptr_glMultiTexCoord2f(target,s,t); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord2i)(GLenum,GLint,GLint); static VALUE gl_MultiTexCoord2i(obj,arg1,arg2,arg3) VALUE obj,arg1,arg2,arg3; { GLenum target; GLint s; GLint t; LOAD_GL_FUNC(glMultiTexCoord2i) target = (GLenum)NUM2INT(arg1); s = (GLint)NUM2INT(arg2); t = (GLint)NUM2INT(arg3); fptr_glMultiTexCoord2i(target,s,t); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord2s)(GLenum,GLshort,GLshort); static VALUE gl_MultiTexCoord2s(obj,arg1,arg2,arg3) VALUE obj,arg1,arg2,arg3; { GLenum target; GLshort s; GLshort t; LOAD_GL_FUNC(glMultiTexCoord2s) target = (GLenum)NUM2INT(arg1); s = (GLshort)NUM2INT(arg2); t = (GLshort)NUM2INT(arg3); fptr_glMultiTexCoord2s(target,s,t); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord3d)(GLenum,GLdouble,GLdouble,GLdouble); static VALUE gl_MultiTexCoord3d(obj,arg1,arg2,arg3,arg4) VALUE obj,arg1,arg2,arg3,arg4; { GLenum target; GLdouble s; GLdouble t; GLdouble r; LOAD_GL_FUNC(glMultiTexCoord3d) target = (GLenum)NUM2INT(arg1); s = (GLdouble)NUM2DBL(arg2); t = (GLdouble)NUM2DBL(arg3); r = (GLdouble)NUM2DBL(arg4); fptr_glMultiTexCoord3d(target,s,t,r); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord3f)(GLenum,GLfloat,GLfloat,GLfloat); static VALUE gl_MultiTexCoord3f(obj,arg1,arg2,arg3,arg4) VALUE obj,arg1,arg2,arg3,arg4; { GLenum target; GLfloat s; GLfloat t; GLfloat r; LOAD_GL_FUNC(glMultiTexCoord3f) target = (GLenum)NUM2INT(arg1); s = (GLfloat)NUM2DBL(arg2); t = (GLfloat)NUM2DBL(arg3); r = (GLfloat)NUM2DBL(arg4); fptr_glMultiTexCoord3f(target,s,t,r); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord3i)(GLenum,GLint,GLint,GLint); static VALUE gl_MultiTexCoord3i(obj,arg1,arg2,arg3,arg4) VALUE obj,arg1,arg2,arg3,arg4; { GLenum target; GLint s; GLint t; GLint r; LOAD_GL_FUNC(glMultiTexCoord3i) target = (GLenum)NUM2INT(arg1); s = (GLint)NUM2INT(arg2); t = (GLint)NUM2INT(arg3); r = (GLint)NUM2INT(arg4); fptr_glMultiTexCoord3i(target,s,t,r); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord3s)(GLenum,GLshort,GLshort,GLshort); static VALUE gl_MultiTexCoord3s(obj,arg1,arg2,arg3,arg4) VALUE obj,arg1,arg2,arg3,arg4; { GLenum target; GLshort s; GLshort t; GLshort r; LOAD_GL_FUNC(glMultiTexCoord3s) target = (GLenum)NUM2INT(arg1); s = (GLshort)NUM2INT(arg2); t = (GLshort)NUM2INT(arg3); r = (GLshort)NUM2INT(arg4); fptr_glMultiTexCoord3s(target,s,t,r); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord4d)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble); static VALUE gl_MultiTexCoord4d(obj,arg1,arg2,arg3,arg4,arg5) VALUE obj,arg1,arg2,arg3,arg4,arg5; { GLenum target; GLdouble s; GLdouble t; GLdouble r; GLdouble q; LOAD_GL_FUNC(glMultiTexCoord4d) target = (GLenum)NUM2INT(arg1); s = (GLdouble)NUM2DBL(arg2); t = (GLdouble)NUM2DBL(arg3); r = (GLdouble)NUM2DBL(arg4); q = (GLdouble)NUM2DBL(arg5); fptr_glMultiTexCoord4d(target,s,t,r,q); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord4f)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat); static VALUE gl_MultiTexCoord4f(obj,arg1,arg2,arg3,arg4,arg5) VALUE obj,arg1,arg2,arg3,arg4,arg5; { GLenum target; GLfloat s; GLfloat t; GLfloat r; GLfloat q; LOAD_GL_FUNC(glMultiTexCoord4f) target = (GLenum)NUM2INT(arg1); s = (GLfloat)NUM2DBL(arg2); t = (GLfloat)NUM2DBL(arg3); r = (GLfloat)NUM2DBL(arg4); q = (GLfloat)NUM2DBL(arg5); fptr_glMultiTexCoord4f(target,s,t,r,q); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord4i)(GLenum,GLint,GLint,GLint,GLint); static VALUE gl_MultiTexCoord4i(obj,arg1,arg2,arg3,arg4,arg5) VALUE obj,arg1,arg2,arg3,arg4,arg5; { GLenum target; GLint s; GLint t; GLint r; GLint q; LOAD_GL_FUNC(glMultiTexCoord4i) target = (GLenum)NUM2INT(arg1); s = (GLint)NUM2INT(arg2); t = (GLint)NUM2INT(arg3); r = (GLint)NUM2INT(arg4); q = (GLint)NUM2INT(arg5); fptr_glMultiTexCoord4i(target,s,t,r,q); return Qnil; } static void (APIENTRY * fptr_glMultiTexCoord4s)(GLenum,GLshort,GLshort,GLshort,GLshort); static VALUE gl_MultiTexCoord4s(obj,arg1,arg2,arg3,arg4,arg5) VALUE obj,arg1,arg2,arg3,arg4,arg5; { GLenum target; GLshort s; GLshort t; GLshort r; GLshort q; LOAD_GL_FUNC(glMultiTexCoord4s) target = (GLenum)NUM2INT(arg1); s = (GLshort)NUM2INT(arg2); t = (GLshort)NUM2INT(arg3); r = (GLshort)NUM2INT(arg4); q = (GLshort)NUM2INT(arg5); fptr_glMultiTexCoord4s(target,s,t,r,q); return Qnil; } #define GLMULTITEXCOORD_VFUNC(_type_) \ static VALUE \ gl_MultiTexCoord##_type_##v(argc,argv,obj) \ int argc; \ VALUE *argv; \ VALUE obj; \ { \ int num; \ VALUE args[5]; \ RArray *ary; \ switch (num = rb_scan_args(argc, argv, "23", &args[0], &args[1], &args[2], &args[3],&args[4])) { \ case 2: \ if (TYPE(args[1]) == T_ARRAY) { \ ary = RARRAY(args[1]); \ switch (ary->len) { \ case 1: \ gl_MultiTexCoord1##_type_(obj,args[0],ary->ptr[0]); \ break; \ case 2: \ gl_MultiTexCoord2##_type_(obj,args[0],ary->ptr[0],ary->ptr[1]); \ break; \ case 3: \ gl_MultiTexCoord3##_type_(obj,args[0],ary->ptr[0],ary->ptr[1],ary->ptr[2]); \ break; \ case 4: \ gl_MultiTexCoord4##_type_(obj,args[0],ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \ break; \ default: \ rb_raise(rb_eArgError, "array length:%d", num); \ } \ } \ else { \ gl_MultiTexCoord1##_type_(obj,args[0], args[1]); \ break; \ } \ break; \ case 3: \ gl_MultiTexCoord2##_type_(obj,args[0], args[1], args[2]); \ break; \ case 4: \ gl_MultiTexCoord3##_type_(obj,args[0], args[1], args[2], args[3]); \ break; \ case 5: \ gl_MultiTexCoord4##_type_(obj,args[0], args[1], args[2], args[3], args[4]); \ break; \ default: \ rb_raise(rb_eArgError, "too many arguments"); \ break; \ } \ return Qnil; \ } GLMULTITEXCOORD_VFUNC(d) GLMULTITEXCOORD_VFUNC(f) GLMULTITEXCOORD_VFUNC(i) GLMULTITEXCOORD_VFUNC(s) #undef GLTEXCOORD_VFUNC static void (APIENTRY * fptr_glLoadTransposeMatrixf)(const GLfloat[]); static VALUE gl_LoadTransposeMatrixf(obj,arg1) VALUE obj,arg1; { GLfloat m[4*4]; LOAD_GL_FUNC(glLoadTransposeMatrixf) ary2cmat4x4flt(arg1, m); fptr_glLoadTransposeMatrixf(m); return Qnil; } static void (APIENTRY * fptr_glLoadTransposeMatrixd)(const GLdouble[]); static VALUE gl_LoadTransposeMatrixd(obj,arg1) VALUE obj,arg1; { GLdouble m[4*4]; LOAD_GL_FUNC(glLoadTransposeMatrixd) ary2cmat4x4dbl(arg1, m); fptr_glLoadTransposeMatrixd(m); return Qnil; } static void (APIENTRY * fptr_glMultTransposeMatrixf)(const GLfloat[]); static VALUE gl_MultTransposeMatrixf(obj,arg1) VALUE obj,arg1; { GLfloat m[4*4]; LOAD_GL_FUNC(glMultTransposeMatrixf) ary2cmat4x4flt(arg1, m); fptr_glMultTransposeMatrixf(m); return Qnil; } static void (APIENTRY * fptr_glMultTransposeMatrixd)(const GLdouble[]); static VALUE gl_MultTransposeMatrixd(obj,arg1) VALUE obj,arg1; { GLdouble m[4*4]; LOAD_GL_FUNC(glMultTransposeMatrixd) ary2cmat4x4dbl(arg1, m); fptr_glMultTransposeMatrixd(m); return Qnil; } static void (APIENTRY * fptr_glSampleCoverage)(GLclampf,GLboolean); static VALUE gl_SampleCoverage(obj,arg1,arg2) VALUE obj,arg1,arg2; { GLclampf value; GLboolean invert; LOAD_GL_FUNC(glSampleCoverage) value = (GLclampf)NUM2DBL(arg1); invert = (GLboolean)NUM2INT(arg2); fptr_glSampleCoverage(value,invert); return Qnil; } static void (APIENTRY * fptr_glCompressedTexImage3D)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLsizei,GLvoid*); static VALUE gl_CompressedTexImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9; { GLenum target; GLint level; GLenum internalformat; GLsizei width; GLsizei height; GLsizei depth; GLint border; GLsizei imagesize; GLvoid *pixels; LOAD_GL_FUNC(glCompressedTexImage3D) target = (GLenum)NUM2INT(arg1); level = (GLint)NUM2INT(arg2); internalformat = (GLenum)NUM2INT(arg3); width = (GLsizei)NUM2UINT(arg4); height = (GLsizei)NUM2UINT(arg5); depth = (GLsizei)NUM2UINT(arg6); border = (GLint)NUM2INT(arg7); imagesize = (GLsizei)NUM2UINT(arg8); if (TYPE(arg9) == T_STRING) { if (RSTRING(arg9)->len < imagesize) rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len); pixels = RSTRING(arg9)->ptr; } else if (NIL_P(arg9)) { pixels = NULL; } else { Check_Type(arg9,T_STRING); /* force exception */ return Qnil; } fptr_glCompressedTexImage3D(target,level,internalformat,width,height,depth,border,imagesize,pixels); return Qnil; } static void (APIENTRY * fptr_glCompressedTexImage2D)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLsizei,GLvoid*); static VALUE gl_CompressedTexImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8; { GLenum target; GLint level; GLenum internalformat; GLsizei width; GLsizei height; GLint border; GLsizei imagesize; GLvoid *pixels; LOAD_GL_FUNC(glCompressedTexImage2D) target = (GLenum)NUM2INT(arg1); level = (GLint)NUM2INT(arg2); internalformat = (GLenum)NUM2INT(arg3); width = (GLsizei)NUM2UINT(arg4); height = (GLsizei)NUM2UINT(arg5); border = (GLint)NUM2INT(arg6); imagesize = (GLsizei)NUM2UINT(arg7); if (TYPE(arg8) == T_STRING) { if (RSTRING(arg8)->len < imagesize) rb_raise(rb_eArgError, "string length:%d",RSTRING(arg8)->len); pixels = RSTRING(arg8)->ptr; } else if (NIL_P(arg8)) { pixels = NULL; } else { Check_Type(arg8,T_STRING); /* force exception */ return Qnil; } fptr_glCompressedTexImage2D(target,level,internalformat,width,height,border,imagesize,pixels); return Qnil; } static void (APIENTRY * fptr_glCompressedTexImage1D)(GLenum,GLint,GLenum,GLsizei,GLint,GLsizei,GLvoid*); static VALUE gl_CompressedTexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7) VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7; { GLenum target; GLint level; GLenum internalformat; GLsizei width; GLint border; GLsizei imagesize; GLvoid *pixels; LOAD_GL_FUNC(glCompressedTexImage1D) target = (GLenum)NUM2INT(arg1); level = (GLint)NUM2INT(arg2); internalformat = (GLenum)NUM2INT(arg3); width = (GLsizei)NUM2UINT(arg4); border = (GLint)NUM2INT(arg5); imagesize = (GLsizei)NUM2UINT(arg6); if (TYPE(arg7) == T_STRING) { if (RSTRING(arg7)->len < imagesize) rb_raise(rb_eArgError, "string length:%d",RSTRING(arg7)->len); pixels = RSTRING(arg7)->ptr; } else if (NIL_P(arg7)) { pixels = NULL; } else { Check_Type(arg7,T_STRING); /* force exception */ return Qnil; } fptr_glCompressedTexImage1D(target,level,internalformat,width,border,imagesize,pixels); return Qnil; } static void (APIENTRY * fptr_glCompressedTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLsizei,GLvoid*); static VALUE gl_CompressedTexSubImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11) VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11; { GLenum target; GLint level; GLint xoffset; GLint yoffset; GLint zoffset; GLsizei width; GLsizei height; GLsizei depth; GLenum format; GLsizei imagesize; GLvoid *pixels; LOAD_GL_FUNC(glCompressedTexSubImage3D) target = (GLenum)NUM2INT(arg1); level = (GLint)NUM2INT(arg2); xoffset = (GLint)NUM2INT(arg3); yoffset = (GLint)NUM2INT(arg4); zoffset = (GLint)NUM2INT(arg5); width = (GLsizei)NUM2UINT(arg6); height = (GLsizei)NUM2UINT(arg7); depth = (GLsizei)NUM2UINT(arg8); format = (GLenum)NUM2INT(arg9); imagesize = (GLsizei)NUM2UINT(arg10); if (TYPE(arg11) == T_STRING) { if (RSTRING(arg11)->len < imagesize) rb_raise(rb_eArgError, "string length:%d",RSTRING(arg11)->len); pixels = RSTRING(arg11)->ptr; } else { Check_Type(arg11,T_STRING); /* force exception */ return Qnil; } fptr_glCompressedTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,imagesize,pixels); return Qnil; } static void (APIENTRY * fptr_glCompressedTexSubImage2D)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLsizei,GLvoid*); static VALUE gl_CompressedTexSubImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9; { GLenum target; GLint level; GLint xoffset; GLint yoffset; GLsizei width; GLsizei height; GLenum format; GLsizei imagesize; GLvoid *pixels; LOAD_GL_FUNC(glCompressedTexSubImage2D) target = (GLenum)NUM2INT(arg1); level = (GLint)NUM2INT(arg2); xoffset = (GLint)NUM2INT(arg3); yoffset = (GLint)NUM2INT(arg4); width = (GLsizei)NUM2UINT(arg5); height = (GLsizei)NUM2UINT(arg6); format = (GLenum)NUM2INT(arg7); imagesize = (GLsizei)NUM2UINT(arg8); if (TYPE(arg9) == T_STRING) { if (RSTRING(arg9)->len < imagesize) rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len); pixels = RSTRING(arg9)->ptr; } else { Check_Type(arg9,T_STRING); /* force exception */ return Qnil; } fptr_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imagesize,pixels); return Qnil; } static void (APIENTRY * fptr_glCompressedTexSubImage1D)(GLenum,GLint,GLint,GLsizei,GLenum,GLsizei,GLvoid*); static VALUE gl_CompressedTexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7) VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7; { GLenum target; GLint level; GLint xoffset; GLsizei width; GLenum format; GLsizei imagesize; GLvoid *pixels; LOAD_GL_FUNC(glCompressedTexSubImage1D) target = (GLenum)NUM2INT(arg1); level = (GLint)NUM2INT(arg2); xoffset = (GLint)NUM2INT(arg3); width = (GLsizei)NUM2UINT(arg4); format = (GLenum)NUM2INT(arg5); imagesize = (GLsizei)NUM2UINT(arg6); if (TYPE(arg7) == T_STRING) { if (RSTRING(arg7)->len < imagesize) rb_raise(rb_eArgError, "string length:%d",RSTRING(arg7)->len); pixels = RSTRING(arg7)->ptr; } else { Check_Type(arg7,T_STRING); /* force exception */ return Qnil; } fptr_glCompressedTexSubImage1D(target,level,xoffset,width,format,imagesize,pixels); return Qnil; } static void (APIENTRY * fptr_glGetCompressedTexImage)(GLenum,GLint,GLvoid*); static VALUE gl_GetCompressedTexImage(obj,arg1,arg2) VALUE obj,arg1,arg2; { GLenum target; GLint lod; GLsizei size = 0; VALUE data; LOAD_GL_FUNC(glGetCompressedTexImage) target = (GLenum)NUM2INT(arg1); lod = (GLenum)NUM2INT(arg2); glGetTexLevelParameteriv(target,lod,GL_TEXTURE_COMPRESSED_IMAGE_SIZE,&size); /* 1.0 function */ data = allocate_buffer_with_string(size); fptr_glGetCompressedTexImage(target,lod,(GLvoid*)RSTRING(data)->ptr); return data; } void gl_init_functions_1_3(VALUE module) { rb_define_module_function(module, "glActiveTexture", gl_ActiveTexture, 1); rb_define_module_function(module, "glClientActiveTexture", gl_ClientActiveTexture, 1); rb_define_module_function(module, "glMultiTexCoord1d", gl_MultiTexCoord1d, 2); rb_define_module_function(module, "glMultiTexCoord1f", gl_MultiTexCoord1f, 2); rb_define_module_function(module, "glMultiTexCoord1i", gl_MultiTexCoord1i, 2); rb_define_module_function(module, "glMultiTexCoord1s", gl_MultiTexCoord1s, 2); rb_define_module_function(module, "glMultiTexCoord2d", gl_MultiTexCoord2d, 3); rb_define_module_function(module, "glMultiTexCoord2f", gl_MultiTexCoord2f, 3); rb_define_module_function(module, "glMultiTexCoord2i", gl_MultiTexCoord2i, 3); rb_define_module_function(module, "glMultiTexCoord2s", gl_MultiTexCoord2s, 3); rb_define_module_function(module, "glMultiTexCoord3d", gl_MultiTexCoord3d, 4); rb_define_module_function(module, "glMultiTexCoord3f", gl_MultiTexCoord3f, 4); rb_define_module_function(module, "glMultiTexCoord3i", gl_MultiTexCoord3i, 4); rb_define_module_function(module, "glMultiTexCoord3s", gl_MultiTexCoord3s, 4); rb_define_module_function(module, "glMultiTexCoord4d", gl_MultiTexCoord4d, 5); rb_define_module_function(module, "glMultiTexCoord4f", gl_MultiTexCoord4f, 5); rb_define_module_function(module, "glMultiTexCoord4i", gl_MultiTexCoord4i, 5); rb_define_module_function(module, "glMultiTexCoord4s", gl_MultiTexCoord4s, 5); rb_define_module_function(module, "glLoadTransposeMatrixf", gl_LoadTransposeMatrixf, 1); rb_define_module_function(module, "glLoadTransposeMatrixd", gl_LoadTransposeMatrixd, 1); rb_define_module_function(module, "glMultTransposeMatrixf", gl_MultTransposeMatrixf, 1); rb_define_module_function(module, "glMultTransposeMatrixd", gl_MultTransposeMatrixd, 1); rb_define_module_function(module, "glSampleCoverage", gl_SampleCoverage, 2); rb_define_module_function(module, "glCompressedTexImage3D", gl_CompressedTexImage3D, 9); rb_define_module_function(module, "glCompressedTexImage2D", gl_CompressedTexImage2D, 8); rb_define_module_function(module, "glCompressedTexImage1D", gl_CompressedTexImage1D, 7); rb_define_module_function(module, "glCompressedTexSubImage3D", gl_CompressedTexSubImage3D, 11); rb_define_module_function(module, "glCompressedTexSubImage2D", gl_CompressedTexSubImage2D, 9); rb_define_module_function(module, "glCompressedTexSubImage1D", gl_CompressedTexSubImage1D, 7); rb_define_module_function(module, "glGetCompressedTexImage", gl_GetCompressedTexImage, 2); /* Additional functions */ rb_define_module_function(module, "glMultiTexCoord", gl_MultiTexCoorddv, -1); rb_define_module_function(module, "glMultiTexCoord1dv", gl_MultiTexCoorddv, -1); rb_define_module_function(module, "glMultiTexCoord1fv", gl_MultiTexCoordfv, -1); rb_define_module_function(module, "glMultiTexCoord1iv", gl_MultiTexCoordiv, -1); rb_define_module_function(module, "glMultiTexCoord1sv", gl_MultiTexCoordsv, -1); rb_define_module_function(module, "glMultiTexCoord2dv", gl_MultiTexCoorddv, -1); rb_define_module_function(module, "glMultiTexCoord2fv", gl_MultiTexCoordfv, -1); rb_define_module_function(module, "glMultiTexCoord2iv", gl_MultiTexCoordiv, -1); rb_define_module_function(module, "glMultiTexCoord2sv", gl_MultiTexCoordsv, -1); rb_define_module_function(module, "glMultiTexCoord3dv", gl_MultiTexCoorddv, -1); rb_define_module_function(module, "glMultiTexCoord3fv", gl_MultiTexCoordfv, -1); rb_define_module_function(module, "glMultiTexCoord3iv", gl_MultiTexCoordiv, -1); rb_define_module_function(module, "glMultiTexCoord3sv", gl_MultiTexCoordsv, -1); rb_define_module_function(module, "glMultiTexCoord4dv", gl_MultiTexCoorddv, -1); rb_define_module_function(module, "glMultiTexCoord4fv", gl_MultiTexCoordfv, -1); rb_define_module_function(module, "glMultiTexCoord4iv", gl_MultiTexCoordiv, -1); rb_define_module_function(module, "glMultiTexCoord4sv", gl_MultiTexCoordsv, -1); }