/* Last saved: Sun 06 Sep 2009 02:10:02 PM */ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ /* OpenGL GLX bindings */ #define IN_POGL_GLX_XS #include #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" /* Note: this is caching procs once for all contexts */ /* !!! This should instead cache per context */ #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_W32API)) #define loadProc(proc,name) \ { \ if (!proc) \ { \ proc = (void *)wglGetProcAddress(name); \ if (!proc) croak(name " is not supported by this renderer"); \ } \ } #define testProc(proc,name) ((proc) ? 1 : !!(proc = (void *)wglGetProcAddress(name))) #else /* not using WGL */ #define loadProc(proc,name) #define testProc(proc,name) 1 #endif /* not defined _WIN32, __CYGWIN__, and HAVE_W32API */ #endif /* defined HAVE_GL */ #ifdef HAVE_GLX #include "glx_util.h" #endif /* defined HAVE_GLX */ #ifdef HAVE_GLU #include "glu_util.h" #endif /* defined HAVE_GLU */ MODULE = OpenGL::GL::PixeVer2 PACKAGE = OpenGL #ifdef HAVE_GL #// 1.0 #//# glPixelMapfv_c($map, $mapsize, (CPTR)values); void glPixelMapfv_c(map, mapsize, values) GLenum map GLsizei mapsize void * values CODE: glPixelMapfv(map, mapsize, values); #// 1.0 #//# glPixelMapuiv_c($map, $mapsize, (CPTR)values); void glPixelMapuiv_c(map, mapsize, values) GLenum map GLsizei mapsize void * values CODE: glPixelMapuiv(map, mapsize, values); #// 1.0 #//# glPixelMapusv_c($map, $mapsize, (CPTR)values); void glPixelMapusv_c(map, mapsize, values) GLenum map GLsizei mapsize void * values CODE: glPixelMapusv(map, mapsize, values); #// 1.0 #//# glPixelMapfv_s($map, $mapsize, (PACKED)values); void glPixelMapfv_s(map, mapsize, values) GLenum map GLsizei mapsize SV * values CODE: { GLfloat * values_s = EL(values, sizeof(GLfloat)*mapsize); glPixelMapfv(map, mapsize, values_s); } #// 1.0 #//# glPixelMapuiv_s($map, $mapsize, (PACKED)values); void glPixelMapuiv_s(map, mapsize, values) GLenum map GLsizei mapsize SV * values CODE: { GLuint * values_s = EL(values, sizeof(GLuint)*mapsize); glPixelMapuiv(map, mapsize, values_s); } #// 1.0 #//# glPixelMapusv_s($map, $mapsize, (PACKED)values); void glPixelMapusv_s(map, mapsize, values) GLenum map GLsizei mapsize SV * values CODE: { GLushort * values_s = EL(values, sizeof(GLushort)*mapsize); glPixelMapusv(map, mapsize, values_s); } #// 1.0 #//# glPixelMapfv_p($map, @values); void glPixelMapfv_p(map, ...) GLenum map CODE: { GLint mapsize = items-1; GLfloat * values; int i; values = malloc(sizeof(GLfloat) * (mapsize+1)); for (i=0;ibind); } glTexCoordPointer(size, oga->types[0], 0, oga->bind ? 0 : oga->data); #else glTexCoordPointer(size, oga->types[0], 0, oga->data); #endif } #endif #// 1.0 #//# glTexEnvf($target, $pname, $param); void glTexEnvf(target, pname, param) GLenum target GLenum pname GLfloat param #// 1.0 #//# glTexEnvi($target, $pname, $param); void glTexEnvi(target, pname, param) GLenum target GLenum pname GLint param #// 1.0 #//# glTexEnvfv_s(target, pname, (PACKED)params); void glTexEnvfv_s(target, pname, params) GLenum target GLenum pname SV * params CODE: { GLfloat * params_s = EL(params, sizeof(GLfloat)*gl_texenv_count(pname)); glTexEnvfv(target, pname, params_s); } #// 1.0 #//# glTexEnviv_s(target, pname, (PACKED)params); void glTexEnviv_s(target, pname, params) GLenum target GLenum pname SV * params CODE: { GLint * params_s = EL(params, sizeof(GLint)*gl_texenv_count(pname)); glTexEnviv(target, pname, params_s); } #// 1.0 #//# glTexEnvfv_p(target, pname, @params); void glTexEnvfv_p(target, pname, ...) GLenum target GLenum pname CODE: { GLfloat p[MAX_GL_TEXENV_COUNT]; int n = items-2; int i; if (n != gl_texenv_count(pname)) croak("Incorrect number of arguments"); for (i=2;ibind); } glVertexPointer(size, oga->types[0], 0, oga->bind ? 0 : oga->data); #else glVertexPointer(size, oga->types[0], 0, oga->data); #endif } #endif #// 1.0 #//# glViewport($x, $y, $width, $height); void glViewport(x, y, width, height) GLint x GLint y GLsizei width GLsizei height # Generated declarations #//# glVertex2d($x, $y); void glVertex2d(x, y) GLdouble x GLdouble y #//# glVertex2dv_c((CPTR)v); void glVertex2dv_c(v) void * v CODE: glVertex2dv(v); #//# glVertex2dv_s((PACKED)v); void glVertex2dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*2); glVertex2dv(v_s); } #//!!! Do we really need this? It duplicates glVertex2d #//# glVertex2dv_p($x, $y); void glVertex2dv_p(x, y) GLdouble x GLdouble y CODE: { GLdouble param[2]; param[0] = x; param[1] = y; glVertex2dv(param); } #//# glVertex2f($x, $y); void glVertex2f(x, y) GLfloat x GLfloat y #//# glVertex2f_s((PACKED)v); void glVertex2fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*2); glVertex2fv(v_s); } #//# glVertex2f_s((CPTR)v); void glVertex2fv_c(v) void * v CODE: glVertex2fv(v); #//!!! Do we really need this? It duplicates glVertex2f #//# glVertex2fv_p($x, $y); void glVertex2fv_p(x, y) GLfloat x GLfloat y CODE: { GLfloat param[2]; param[0] = x; param[1] = y; glVertex2fv(param); } #//# glVertex2i($x, $y); void glVertex2i(x, y) GLint x GLint y #//# glVertex2iv_c((CPTR)v); void glVertex2iv_c(v) void * v CODE: glVertex2iv(v); #//# glVertex2iv_s((PACKED)v); void glVertex2iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*2); glVertex2iv(v_s); } #//!!! Do we really need this? It duplicates glVertex2i #//# glVertex2iv_p($x, $y); void glVertex2iv_p(x, y) GLint x GLint y CODE: { GLint param[2]; param[0] = x; param[1] = y; glVertex2iv(param); } #//# glVertex2s($x, $y); void glVertex2s(x, y) GLshort x GLshort y #//# glVertex2sv_c((CPTR)v); void glVertex2sv_c(v) void * v CODE: glVertex2sv(v); #//# glVertex2sv_c((PACKED)v); void glVertex2sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*2); glVertex2sv(v_s); } #//!!! Do we really need this? It duplicates glVertex2s #//# glVertex2sv_p($x, $y); void glVertex2sv_p(x, y) GLshort x GLshort y CODE: { GLshort param[2]; param[0] = x; param[1] = y; glVertex2sv(param); } #endif /* HAVE_GL */