Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
1544 lines (1354 sloc) 27.3 KB
/* Last saved: Sun 06 Sep 2009 02:32:19 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 <stdio.h>
#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::AccuGetM PACKAGE = OpenGL
#ifdef HAVE_GL
#// 1.0
#//# glAccum($op, $value);
void
glAccum(op, value)
GLenum op
GLfloat value
#// 1.0
#//# glAlphaFunc($func, $ref);
void
glAlphaFunc(func, ref)
GLenum func
GLclampf ref
#ifdef GL_VERSION_1_1
#//# glAreTexturesResident_c($n, (CPTR)textures, (CPTR)residences);
void
glAreTexturesResident_c(n, textures, residences)
GLsizei n
void * textures
void * residences
CODE:
glAreTexturesResident(n, textures, residences);
#//# glAreTexturesResident_s($n, (PACKED)textures, (PACKED)residences);
void
glAreTexturesResident_s(n, textures, residences)
GLsizei n
SV * textures
SV * residences
CODE:
{
void * textures_s = EL(textures, sizeof(GLuint)*n);
void * residences_s = EL(residences, sizeof(GLboolean)*n);
glAreTexturesResident(n, textures_s, residences_s);
}
#// 1.1
#//# (result,@residences) = glAreTexturesResident_p(@textureIDs);
void
glAreTexturesResident_p(...)
PPCODE:
{
GLsizei n = items;
GLuint * textures = malloc(sizeof(GLuint) * (n+1));
GLboolean * residences = malloc(sizeof(GLboolean) * (n+1));
GLboolean result;
int i;
for (i=0;i<n;i++)
textures[i] = SvIV(ST(i));
result = glAreTexturesResident(n, textures, residences);
if ((result == GL_TRUE) || (GIMME != G_ARRAY))
PUSHs(sv_2mortal(newSViv(result)));
else {
EXTEND(sp, n+1);
PUSHs(sv_2mortal(newSViv(result)));
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSViv(residences[i])));
}
free(textures);
free(residences);
}
#// 1.1
#//# glArrayElement($i);
void
glArrayElement(i)
GLint i
#endif
#// 1.0
#//# glBegin($mode);
void
glBegin(mode)
GLenum mode
#// 1.0
#//# glEnd()
void
glEnd()
#ifdef GL_VERSION_1_1
#//# glBindTexture($target, $texture);
void
glBindTexture(target, texture)
GLenum target
GLuint texture
#endif
#// 1.0
#//# glBitmap_c($width, $height, $xorig, $yorig, $xmove, $ymove, (CPTR)bitmap);
void
glBitmap_c(width, height, xorig, yorig, xmove, ymove, bitmap)
GLsizei width
GLsizei height
GLfloat xorig
GLfloat yorig
GLfloat xmove
GLfloat ymove
void * bitmap
CODE:
glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap);
#//# glBitmap_s($width, $height, $xorig, $yorig, $xmove, $ymove, (PACKED)bitmap);
void
glBitmap_s(width, height, xorig, yorig, xmove, ymove, bitmap)
GLsizei width
GLsizei height
GLfloat xorig
GLfloat yorig
GLfloat xmove
GLfloat ymove
SV * bitmap
CODE:
{
GLubyte * bitmap_s = ELI(bitmap, width, height,
GL_COLOR_INDEX, GL_BITMAP, gl_pixelbuffer_unpack);
glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap_s);
}
#//# glBitmap_p($width, $height, $xorig, $yorig, $xmove, $ymove, @bitmap);
void
glBitmap_p(width, height, xorig, yorig, xmove, ymove, ...)
GLsizei width
GLsizei height
GLfloat xorig
GLfloat yorig
GLfloat xmove
GLfloat ymove
CODE:
{
GLvoid * ptr;
glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
ptr = pack_image_ST(&(ST(6)), items-6, width, height,
1, GL_COLOR_INDEX, GL_BITMAP, 0);
glBitmap(width, height, xorig, yorig, xmove, ymove, ptr);
glPopClientAttrib();
free(ptr);
}
#// 1.0
#//# glBlendFunc($sfactor, $dfactor);
void
glBlendFunc(sfactor, dfactor)
GLenum sfactor
GLenum dfactor
#// 1.0
#//# glCallList($list);
void
glCallList(list)
GLuint list
#// 1.0
#//# glCallLists_c($n, $type, (CPTR)lists);
void
glCallLists_c(n, type, lists)
GLsizei n
GLenum type
void * lists
CODE:
glCallLists(n, type, lists);
#// 1.0
#//# glCallLists_s($n, $type, (PACKED)lists);
void
glCallLists_s(n, type, lists)
GLsizei n
GLenum type
SV * lists
CODE:
{
void * lists_s = EL(lists, gl_type_size(type) * n);
glCallLists(n, type, lists_s);
}
#// 1.0
#//# glCallLists_p(@lists);
#//- Assumes GLint type
void
glCallLists_p(...)
CODE:
if (items) {
int * list = malloc(sizeof(int) * items);
int i;
for(i=0;i<items;i++)
list[i] = SvIV(ST(i));
glCallLists(items, GL_INT, list);
free(list);
}
#// 1.0
#//# glClear($mask);
void
glClear(mask)
GLbitfield mask
#// 1.0
#//# glClearAccum($red, $green, $blue, $alpha);
void
glClearAccum(red, green, blue, alpha)
GLfloat red
GLfloat green
GLfloat blue
GLfloat alpha
#// 1.0
#//# glClearColor($red, $green, $blue, $alpha);
void
glClearColor(red, green, blue, alpha)
GLclampf red
GLclampf green
GLclampf blue
GLclampf alpha
#// 1.0
#//# glClearDepth($depth);
void
glClearDepth(depth)
GLclampd depth
#// 1.0
#//# glClearIndex($c);
void
glClearIndex(c)
GLfloat c
#// 1.0
#//# glClearStencil($s);
void
glClearStencil(s)
GLint s
#// 1.0
#//# glClipPlane_c($plane, (CPTR)eqn);
void
glClipPlane_c(plane, eqn)
GLenum plane
void * eqn
CODE:
glClipPlane(plane, eqn);
#// 1.0
#//# glClipPlane_s($plane, (PACKED)eqn);
void
glClipPlane_s(plane, eqn)
GLenum plane
SV * eqn
CODE:
{
GLdouble * eqn_s = EL(eqn, sizeof(GLdouble) * 4);
glClipPlane(plane, eqn_s);
}
#// 1.0
#//# glClipPlane_p($plane, $eqn0, $eqn1, $eqn2, $eqn3);
void
glClipPlane_p(plane, eqn0, eqn1, eqn2, eqn3)
GLenum plane
double eqn0
double eqn1
double eqn2
double eqn3
CODE:
{
double eqn[4];
eqn[0] = eqn0;
eqn[1] = eqn1;
eqn[2] = eqn2;
eqn[3] = eqn3;
glClipPlane(plane, &eqn[0]);
}
#// 1.0
#//# glColorMask($red, $green, $blue, $alpha);
void
glColorMask(red, green, blue, alpha)
GLboolean red
GLboolean green
GLboolean blue
GLboolean alpha
#// 1.0
#//# glColorMaterial($face, $mode);
void
glColorMaterial(face, mode)
GLenum face
GLenum mode
#ifdef GL_VERSION_1_1
#// 1.1
#//# glColorPointer_c($size, $type, $stride, (CPTR)pointer);
void
glColorPointer_c(size, type, stride, pointer)
GLint size
GLenum type
GLsizei stride
void * pointer
CODE:
glColorPointer(size, type, stride, pointer);
#//# glColorPointer_s($size, $type, $stride, (PACKED)pointer);
void
glColorPointer_s(size, type, stride, pointer)
GLint size
GLenum type
GLsizei stride
SV * pointer
CODE:
{
int width = stride ? stride : (sizeof(type)*size);
void * pointer_s = EL(pointer, width);
glColorPointer(size, type, stride, pointer_s);
}
#//# glColorPointer_p($size, $type, $stride, (OGA)pointer);
void
glColorPointer_p(size, oga)
GLint size
OpenGL::Array oga
CODE:
{
#ifdef GL_ARB_vertex_buffer_object
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
}
glColorPointer(size, oga->types[0], 0, oga->bind ? 0 : oga->data);
#else
glColorPointer(size, oga->types[0], 0, oga->data);
#endif
}
#endif
#// 1.0
#//# glCopyPixels($x, $y, $width, $height, $type);
void
glCopyPixels(x, y, width, height, type)
GLint x
GLint y
GLsizei width
GLsizei height
GLenum type
#ifdef GL_VERSION_1_1
#// 1.1
#//# glCopyTexImage1D($target, $level, $internalFormat, $x, $y, $width, $border);
void
glCopyTexImage1D(target, level, internalFormat, x, y, width, border)
GLenum target
GLint level
GLenum internalFormat
GLint x
GLint y
GLsizei width
GLint border
#// 1.1
#//# glCopyTexImage2D($target, $level, $internalFormat, $x, $y, $width, $height, $border);
void
glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border)
GLenum target
GLint level
GLenum internalFormat
GLint x
GLint y
GLsizei width
GLsizei height
GLint border
#// 1.1
#//# glCopyTexSubImage1D($target, $level, $xoffset, $x, $y, $width);
void
glCopyTexSubImage1D(target, level, xoffset, x, y, width)
GLenum target
GLint level
GLint xoffset
GLint x
GLint y
GLsizei width
#// 1.1
#//# glCopyTexSubImage2D($target, $level, $xoffset, $yoffset, $x, $y, $width, $height);
void
glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height)
GLenum target
GLint level
GLint xoffset
GLint yoffset
GLint x
GLint y
GLsizei width
GLsizei height
#ifdef GL_VERSION_1_2
#// 1.2
#//# glCopyTexSubImage3D($target, $level, $xoffset, $yoffset, $zoffset, $x, $y, $width, $height);
void
glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height)
GLenum target
GLint level
GLint xoffset
GLint yoffset
GLint zoffset
GLint x
GLint y
GLsizei width
GLsizei height
INIT:
loadProc(glCopyTexSubImage3D,"glCopyTexSubImage3D");
CODE:
{
glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset,
x, y, width, height);
}
#endif
#endif
#// 1.0
#//# glCullFace($mode);
void
glCullFace(mode)
GLenum mode
#// 1.0
#//# glDeleteLists($list, $range);
void
glDeleteLists(list, range)
GLenum list
GLsizei range
#ifdef GL_VERSION_1_1
#// 1.1
#//# glDeleteTextures_c($items, (CPTR)list);
void
glDeleteTextures_c(items, list)
GLint items
void * list
CODE:
glDeleteTextures(items,list);
#// 1.1
#//# glDeleteTextures_s($items, (PACKED)list);
void
glDeleteTextures_s(items, list)
GLint items
SV * list
CODE:
{
void * list_s = EL(list, sizeof(GLuint) * items);
glDeleteTextures(items,list_s);
}
#// 1.1
#//# glDeleteTextures_p(@textureIDs);
void
glDeleteTextures_p(...)
CODE:
if (items) {
GLuint * list = malloc(sizeof(GLuint) * items);
int i;
for(i=0;i<items;i++)
list[i] = SvIV(ST(i));
glDeleteTextures(items, list);
free(list);
}
#endif
#// 1.0
#//# glDepthFunc($func);
void
glDepthFunc(func)
GLenum func
#// 1.0
#//# glDepthMask($flag);
void
glDepthMask(flag)
GLboolean flag
#// 1.0
#//# glDepthRange($zNear, $zFar);
void
glDepthRange(zNear, zFar)
GLclampd zNear
GLclampd zFar
#ifdef GL_VERSION_1_1
#// 1.1
#//# glDrawArrays($mode, $first, $count);
void
glDrawArrays(mode, first, count)
GLenum mode
GLint first
GLsizei count
#endif
#// 1.0
#//# glDrawBuffer($mode);
void
glDrawBuffer(mode)
GLenum mode
#ifdef GL_VERSION_1_1
#// 1.1
#//# glDrawElements_c($mode, $count, $type, (CPTR)indices);
void
glDrawElements_c(mode, count, type, indices)
GLenum mode
GLint count
GLenum type
void * indices
CODE:
glDrawElements(mode, count, type, indices);
#// 1.1
#//# glDrawElements_s($mode, $count, $type, (PACKED)indices);
void
glDrawElements_s(mode, count, type, indices)
GLenum mode
GLint count
GLenum type
SV * indices
CODE:
{
void * indices_s = EL(indices, gl_type_size(type)*count);
glDrawElements(mode, count, type, indices_s);
}
#//# glDrawElements_p($mode, @indices);
#//- Assumes GLuint for indices
void
glDrawElements_p(mode, ...)
GLenum mode
CODE:
{
GLuint * indices = malloc(sizeof(GLuint) * items);
int i;
for (i=1; i<items; i++)
indices[i-1] = SvIV(ST(i));
glDrawElements(mode, items-1, GL_UNSIGNED_INT, indices);
free(indices);
}
#endif
#// 1.0
#//# glDrawPixels_c($width, $height, $format, $type, (CPTR)pixels);
void
glDrawPixels_c(width, height, format, type, pixels)
GLsizei width
GLsizei height
GLenum format
GLenum type
void * pixels
CODE:
glDrawPixels(width, height, format, type, pixels);
#// 1.0
#//# glDrawPixels_s($width, $height, $format, $type, (PACKED)pixels);
void
glDrawPixels_s(width, height, format, type, pixels)
GLsizei width
GLsizei height
GLenum format
GLenum type
SV * pixels
CODE:
{
GLvoid * ptr = ELI(pixels, width, height,
format, type, gl_pixelbuffer_unpack);
glDrawPixels(width, height, format, type, ptr);
}
#// 1.0
#//# glDrawPixels_p($width, $height, $format, $type, @pixels);
void
glDrawPixels_p(width, height, format, type, ...)
GLsizei width
GLsizei height
GLenum format
GLenum type
CODE:
{
GLvoid * ptr;
glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
ptr = pack_image_ST(&(ST(4)), items-4, width, height, 1, format, type, 0);
glDrawPixels(width, height, format, type, ptr);
glPopClientAttrib();
free(ptr);
}
#ifdef GL_VERSION_1_2
#// 1.2
#//# glDrawRangeElements_c($mode, $start, $end, $count, $type, (CPTR)indices);
void
glDrawRangeElements_c(mode, start, end, count, type, indices)
GLenum mode
GLuint start
GLuint end
GLsizei count
GLenum type
void * indices
INIT:
loadProc(glDrawRangeElements,"glDrawRangeElements");
CODE:
glDrawRangeElements(mode, start, end, count, type, indices);
#//# glDrawRangeElements_s($mode, $start, $end, $count, $type, (PACKED)indices);
void
glDrawRangeElements_s(mode, start, end, count, type, indices)
GLenum mode
GLuint start
GLuint end
GLsizei count
GLenum type
SV * indices
INIT:
loadProc(glDrawRangeElements,"glDrawRangeElements");
CODE:
{
void * indices_s = EL(indices, gl_type_size(type) * count);
glDrawRangeElements(mode, start, end, count, type, indices_s);
}
#//# glDrawRangeElements_p($mode, $start, $end, $count, $type, @indices);
#//- Assumes GLuint indices
void
glDrawRangeElements_p(mode, start, count, ...)
GLenum mode
GLuint start
GLuint count
INIT:
loadProc(glDrawRangeElements,"glDrawRangeElements");
CODE:
{
if (items > 3)
{
if (start < (GLuint)items-3)
{
GLuint * indices;
GLuint i;
if (start+count > (GLuint)(items-3))
count = (GLuint)items-(start+3);
indices = malloc(sizeof(GLuint) * count);
for (i=start; i<count; i++)
indices[i] = SvIV(ST(i+3));
glDrawRangeElements(mode, start, start+count-1,
count, GL_UNSIGNED_INT, indices);
free(indices);
}
}
else
{
glDrawRangeElements(mode, start, start+count-1,
count, GL_UNSIGNED_INT, 0);
}
}
#endif
#// 1.0
#//# glEdgeFlag($flag);
void
glEdgeFlag(flag)
GLboolean flag
#ifdef GL_VERSION_1_1
#// 1.1
#//# glEdgeFlagPointer_c($stride, (CPTR)pointer);
void
glEdgeFlagPointer_c(stride, pointer)
GLint stride
void * pointer
CODE:
glEdgeFlagPointer(stride, pointer);
#//# glEdgeFlagPointer_s($stride, (PACKED)pointer);
void
glEdgeFlagPointer_s(stride, pointer)
GLsizei stride
SV * pointer
CODE:
{
int width = stride ? stride : sizeof(GLboolean);
void * pointer_s = EL(pointer, width);
glEdgeFlagPointer(stride, pointer_s);
}
#//# glEdgeFlagPointer_p($stride, (OGA)pointer);
void
glEdgeFlagPointer_p(oga)
OpenGL::Array oga
CODE:
{
#ifdef GL_ARB_vertex_buffer_object
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
}
glEdgeFlagPointer(0, oga->bind ? 0 : oga->data);
#else
glEdgeFlagPointer(0, oga->data);
#endif
}
#endif
#// 1.0
#//# glEnable($cap);
void
glEnable(cap)
GLenum cap
#// 1.0
#//# glDisable($cap);
void
glDisable(cap)
GLenum cap
#ifdef GL_VERSION_1_1
#// 1.1
#//# glEnableClientState($cap);
void
glEnableClientState(cap)
GLenum cap
#// 1.1
#//# glDisableClientState($cap);
void
glDisableClientState(cap)
GLenum cap
#endif
#// 1.0
#//# glEvalCoord1d($u);
void
glEvalCoord1d(u)
GLdouble u
#// 1.0
#//# glEvalCoord1f($u);
void
glEvalCoord1f(u)
GLfloat u
#// 1.0
#//# glEvalCoord2d($u, $v);
void
glEvalCoord2d(u, v)
GLdouble u
GLdouble v
#// 1.0
#//# glEvalCoord2f($u, $v);
void
glEvalCoord2f(u, v)
GLfloat u
GLfloat v
#// 1.0
#//# glEvalMesh1($mode, $i1, $i2);
void
glEvalMesh1(mode, i1, i2)
GLenum mode
GLint i1
GLint i2
#// 1.0
#//# glEvalMesh2($mode, $i1, $i2, $j1, $j2);
void
glEvalMesh2(mode, i1, i2, j1, j2)
GLenum mode
GLint i1
GLint i2
GLint j1
GLint j2
#// 1.0
#//# glEvalPoint1($i);
void
glEvalPoint1(i)
GLint i
#// 1.0
#//# glEvalPoint2($i, $j);
void
glEvalPoint2(i, j)
GLint i
GLint j
#// 1.0
#//# glFeedbackBuffer_c($size, $type, (CPTR)buffer);
void
glFeedbackBuffer_c(size, type, buffer)
GLsizei size
GLenum type
void * buffer
CODE:
glFeedbackBuffer(size, type, (GLfloat*)(buffer));
#// 1.0
#//# glFinish();
void
glFinish()
#// 1.0
#//# glFlush();
void
glFlush()
#// 1.0
#//# glFogf($pname, $param);
void
glFogf(pname, param)
GLenum pname
GLfloat param
#// 1.0
#//# glFogi($pname, $param);
void
glFogi(pname, param)
GLenum pname
GLint param
#// 1.0
#//# glFogfv_c($pname, (CPTR)params);
void
glFogfv_c(pname, params)
GLenum pname
void * params
CODE:
glFogfv(pname, params);
#// 1.0
#//# glFogiv_c($pname, (CPTR)params);
void
glFogiv_c(pname, params)
GLenum pname
void * params
CODE:
glFogiv(pname, params);
#// 1.0
#//# glFogfv_s($pname, (PACKED)params);
void
glFogfv_s(pname, params)
GLenum pname
SV * params
CODE:
{
GLfloat * params_s = EL(params, sizeof(GLfloat)*gl_fog_count(pname));
glFogfv(pname, params_s);
}
#// 1.0
#//# glFogiv_s($pname, (PACKED)params);
void
glFogiv_s(pname, params)
GLenum pname
SV * params
CODE:
{
GLint * params_s = EL(params, sizeof(GLint)*gl_fog_count(pname));
glFogiv(pname, params_s);
}
#// 1.0
#//# glFogfv_p($pname, $param1, $param2=0, $param3=0, $param4=0);
void
glFogfv_p(pname, param1, param2=0, param3=0, param4=0)
GLenum pname
GLfloat param1
GLfloat param2
GLfloat param3
GLfloat param4
CODE:
{
GLfloat p[4];
p[0] = param1;
p[1] = param2;
p[2] = param3;
p[3] = param4;
glFogfv(pname, &p[0]);
}
#// 1.0
#//# glFogiv_p($pname, $param1, $param2=0, $param3=0, $param4=0);
void
glFogiv_p(pname, param1, param2=0, param3=0, param4=0)
GLenum pname
GLint param1
GLint param2
GLint param3
GLint param4
CODE:
{
GLint p[4];
p[0] = param1;
p[1] = param2;
p[2] = param3;
p[3] = param4;
glFogiv(pname, &p[0]);
}
#// 1.0
#//# glFrontFace($mode);
void
glFrontFace(mode)
GLenum mode
#// 1.0
#//# glFrustum($left, $right, $bottom, $top, $zNear, $zFar);
void
glFrustum(left, right, bottom, top, zNear, zFar)
GLdouble left
GLdouble right
GLdouble bottom
GLdouble top
GLdouble zNear
GLdouble zFar
#// 1.0
#//# glGenLists($range);
GLuint
glGenLists(range)
GLsizei range
#ifdef GL_VERSION_1_1
#// 1.1
#//# glGenTextures_c($n, (CPTR)textures);
void
glGenTextures_c(n, textures)
GLint n
void * textures
CODE:
glGenTextures(n, textures);
#// 1.1
#//# glGenTextures_s($n, (PACKED)textures);
void
glGenTextures_s(n, textures)
GLint n
SV * textures
CODE:
{
void * textures_s = EL(textures, sizeof(GLuint)*n);
glGenTextures(n, textures_s);
}
#// 1.1
#//# @textureIDs = glGenTextures_p($n);
void
glGenTextures_p(n)
GLint n
PPCODE:
if (n) {
GLuint * textures = malloc(sizeof(GLuint) * n);
int i;
glGenTextures(n, textures);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSViv(textures[i])));
free(textures);
}
#endif
#// 1.0
#//# glGetDoublev_c($pname, (CPTR)params);
void
glGetDoublev_c(pname, params)
GLenum pname
void * params
CODE:
glGetDoublev(pname, params);
#// 1.0
#//# glGetDoublev_c($pname, (PACKED)params);
void
glGetDoublev_s(pname, params)
GLenum pname
SV * params
CODE:
{
void * params_s = EL(params, sizeof(GLdouble) * gl_get_count(pname));
glGetDoublev(pname, params_s);
}
#// 1.0
#//# glGetBooleanv_c($pname, (CPTR)params);
void
glGetBooleanv_c(pname, params)
GLenum pname
void * params
CODE:
glGetBooleanv(pname, params);
#// 1.0
#//# glGetBooleanv_s($pname, (PACKED)params);
void
glGetBooleanv_s(pname, params)
GLenum pname
SV * params
CODE:
{
void * params_s = EL(params, sizeof(GLboolean) * gl_get_count(pname));
glGetBooleanv(pname, params_s);
}
#// 1.0
#//# glGetIntegerv_c($pname, (CPTR)params);
void
glGetIntegerv_c(pname, params)
GLenum pname
void * params
CODE:
glGetIntegerv(pname, params);
#// 1.0
#//# glGetIntegerv_s($pname, (PACKED)params);
void
glGetIntegerv_s(pname, params)
GLenum pname
SV * params
CODE:
{
void * params_s = EL(params, sizeof(GLint) * gl_get_count(pname));
glGetIntegerv(pname, params_s);
}
#// 1.0
#//# glGetFloatv_c($pname, (CPTR)params);
void
glGetFloatv_c(pname, params)
GLenum pname
void * params
CODE:
glGetFloatv(pname, params);
#// 1.0
#//# glGetFloatv_s($pname, (PACKED)params);
void
glGetFloatv_s(pname, params)
GLenum pname
void * params
CODE:
{
void * params_s = EL(params, sizeof(GLfloat) * gl_get_count(pname));
glGetFloatv(pname, params_s);
}
#// 1.0
#//# @data = glGetDoublev_p($param);
void
glGetDoublev_p(param)
GLenum param
PPCODE:
{
GLdouble ret[MAX_GL_GET_COUNT];
int n = gl_get_count(param);
int i;
glGetDoublev(param, &ret[0]);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSVnv(ret[i])));
}
#// 1.0
#//# @data = glGetBooleanv_p($param);
void
glGetBooleanv_p(param)
GLenum param
PPCODE:
{
GLboolean ret[MAX_GL_GET_COUNT];
int n = gl_get_count(param);
int i;
glGetBooleanv(param, &ret[0]);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSViv(ret[i])));
}
#// 1.0
#//# @data = glGetIntegerv_p($param);
void
glGetIntegerv_p(param)
GLenum param
PPCODE:
{
GLint ret[MAX_GL_GET_COUNT];
int n = gl_get_count(param);
int i;
glGetIntegerv(param, &ret[0]);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSViv(ret[i])));
}
#// 1.0
#//# @data = glGetFloatv_p($param);
void
glGetFloatv_p(param)
GLenum param
PPCODE:
{
GLfloat ret[MAX_GL_GET_COUNT];
int n = gl_get_count(param);
int i;
glGetFloatv(param, &ret[0]);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSVnv(ret[i])));
}
#// 1.0
#//# glGetClipPlane_c($plane, (CPTR)eqn);
void
glGetClipPlane_c(plane, eqn)
GLenum plane
void * eqn
CODE:
glGetClipPlane(plane, eqn);
#// 1.0
#//# glGetClipPlane_s($plane, (PACKED)eqn);
void
glGetClipPlane_s(plane, eqn)
GLenum plane
SV * eqn
CODE:
{
GLdouble * eqn_s = EL(eqn, sizeof(GLdouble)*4);
glGetClipPlane(plane, eqn_s);
}
#// 1.0
#//# @data = glGetClipPlane_p($plane);
void
glGetClipPlane_p(plane)
GLenum plane
PPCODE:
{
int i;
GLdouble eqn[4];
eqn[0] = eqn[1] = eqn[2] = eqn[3] = 0;
glGetClipPlane(plane, &eqn[0]);
EXTEND(sp, 4);
for(i=0;i<4;i++)
PUSHs(sv_2mortal(newSVnv(eqn[i])));
}
#// 1.0
#//# glGetError();
GLenum
glGetError()
#// 1.0
#//# glGetLightfv_c($light, $pname, (CPTR)p);
void
glGetLightfv_c(light, pname, p)
GLenum light
GLenum pname
void * p
CODE:
glGetLightfv(light, pname, p);
#// 1.0
#//# glGetLightiv_c($light, $pname, (CPTR)p);
void
glGetLightiv_c(light, pname, p)
GLenum light
GLenum pname
void * p
CODE:
glGetLightiv(light, pname, p);
#// 1.0
#//# glGetLightfv_s($light, $pname, (PACKED)p);
void
glGetLightfv_s(light, pname, p)
GLenum light
GLenum pname
SV * p
CODE:
{
void * p_s = EL(p, sizeof(GLfloat)*gl_light_count(pname));
glGetLightfv(light, pname, p_s);
}
#// 1.0
#//# glGetLightiv_s($light, $pname, (PACKED)p);
void
glGetLightiv_s(light, pname, p)
GLenum light
GLenum pname
SV * p
CODE:
{
void * p_s = EL(p, sizeof(GLint)*gl_light_count(pname));
glGetLightiv(light, pname, p_s);
}
#// 1.0
#//# @data = glGetLightfv_p($light, $pname);
void
glGetLightfv_p(light, pname)
GLenum light
GLenum pname
PPCODE:
{
GLfloat ret[MAX_GL_LIGHT_COUNT];
int n = gl_light_count(pname);
int i;
glGetLightfv(light, pname, &ret[0]);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSVnv(ret[i])));
}
#// 1.0
#//# @data = glGetLightiv_p($light, $pname);
void
glGetLightiv_p(light, pname)
GLenum light
GLenum pname
PPCODE:
{
GLint ret[MAX_GL_LIGHT_COUNT];
int n = gl_light_count(pname);
int i;
glGetLightiv(light, pname, &ret[0]);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSViv(ret[i])));
}
#// 1.0
#//# glGetMapiv_c($target, $query, (CPTR)v);
void
glGetMapiv_c(target, query, v)
GLenum target
GLenum query
void * v
CODE:
glGetMapiv(target, query, (GLint*)v);
#// 1.0
#//# glGetMapfv_c($target, $query, (CPTR)v);
void
glGetMapfv_c(target, query, v)
GLenum target
GLenum query
void * v
CODE:
glGetMapfv(target, query, (GLfloat*)v);
#// 1.0
#//# glGetMapdv_c($target, $query, (CPTR)v);
void
glGetMapdv_c(target, query, v)
GLenum target
GLenum query
void * v
CODE:
glGetMapdv(target, query, (GLdouble*)v);
#// 1.0
#//# glGetMapdv_s($target, $query, (PACKED)v);
void
glGetMapdv_s(target, query, v)
GLenum target
GLenum query
SV * v
CODE:
{
GLdouble * v_s = EL(v,
sizeof(GLdouble)*gl_map_count(target, query));
glGetMapdv(target, query, v_s);
}
#// 1.0
#//# glGetMapfv_s($target, $query, (PACKED)v);
void
glGetMapfv_s(target, query, v)
GLenum target
GLenum query
SV * v
CODE:
{
GLfloat * v_s = EL(v, sizeof(GLfloat)*gl_map_count(target, query));
glGetMapfv(target, query, v_s);
}
#// 1.0
#//# glGetMapiv_s($target, $query, (PACKED)v);
void
glGetMapiv_s(target, query, v)
GLenum target
GLenum query
SV * v
CODE:
{
GLint * v_s = EL(v, sizeof(GLint)*gl_map_count(target, query));
glGetMapiv(target, query, v_s);
}
#// 1.0
#//# @data = glGetMapfv_p($target, $query);
void
glGetMapfv_p(target, query)
GLenum target
GLenum query
PPCODE:
{
GLfloat ret[MAX_GL_MAP_COUNT];
int n = gl_map_count(target, query);
int i;
glGetMapfv(target, query, &ret[0]);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSVnv(ret[i])));
}
#// 1.0
#//# @data = glGetMapdv_p($target, $query);
void
glGetMapdv_p(target, query)
GLenum target
GLenum query
PPCODE:
{
GLdouble ret[MAX_GL_MAP_COUNT];
int n = gl_map_count(target, query);
int i;
glGetMapdv(target, query, &ret[0]);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSVnv(ret[i])));
}
#// 1.0
#//# @data = glGetMapiv_p($target, $query);
void
glGetMapiv_p(target, query)
GLenum target
GLenum query
PPCODE:
{
GLint ret[MAX_GL_MAP_COUNT];
int n = gl_map_count(target, query);
int i;
glGetMapiv(target, query, &ret[0]);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSViv(ret[i])));
}
#// 1.0
#//# glGetMaterialfv_c($face, $query, (CPTR)params);
void
glGetMaterialfv_c(face, query, params)
GLenum face
GLenum query
void * params
CODE:
glGetMaterialfv(face, query, params);
#// 1.0
#//# glGetMaterialiv_c($face, $query, (CPTR)params);
void
glGetMaterialiv_c(face, query, params)
GLenum face
GLenum query
void * params
CODE:
glGetMaterialiv(face, query, params);
#// 1.0
#//# glGetMaterialfv_s($face, $query, (PACKED)params);
void
glGetMaterialfv_s(face, query, params)
GLenum face
GLenum query
SV * params
CODE:
{
GLfloat * params_s = EL(params,
sizeof(GLfloat)*gl_material_count(query));
glGetMaterialfv(face, query, params_s);
}
#// 1.0
#//# glGetMaterialiv_s($face, $query, (PACKED)params);
void
glGetMaterialiv_s(face, query, params)
GLenum face
GLenum query
SV * params
CODE:
{
GLint * params_s = EL(params,
sizeof(GLfloat)*gl_material_count(query));
glGetMaterialiv(face, query, params_s);
}
#// 1.0
#//# @params = glGetMaterialfv_p($face, $query);
void
glGetMaterialfv_p(face, query)
GLenum face
GLenum query
PPCODE:
{
GLfloat ret[MAX_GL_MATERIAL_COUNT];
int n = gl_material_count(query);
int i;
glGetMaterialfv(face, query, &ret[0]);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSVnv(ret[i])));
}
#// 1.0
#//# @params = glGetMaterialiv_p($face, $query);
void
glGetMaterialiv_p(face, query)
GLenum face
GLenum query
PPCODE:
{
GLint ret[MAX_GL_MATERIAL_COUNT];
int n = gl_material_count(query);
int i;
glGetMaterialiv(face, query, &ret[0]);
EXTEND(sp, n);
for(i=0;i<n;i++)
PUSHs(sv_2mortal(newSViv(ret[i])));
}
#endif /* HAVE_GL */