Acme-MITHALDU-BleedingOpenGL
view release on metacpan or search on metacpan
pogl_gl_Vert_Multi.xs view on Meta::CPAN
/* Last saved: Sun 06 Sep 2009 02:10:16 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 = Acme::MITHALDU::BleedingOpenGL::GL::VertMulti PACKAGE = Acme::MITHALDU::BleedingOpenGL
#ifdef HAVE_GL
#if defined(GL_VERSION_1_1) || defined(GL_EXT_vertex_array)
#//# glVertexPointerEXT_c($size, $type, $stride, $count, (CPTR)pointer);
void
glVertexPointerEXT_c(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
void * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glVertexPointerEXT,"glVertexPointerEXT");
#endif
CODE:
#ifdef GL_VERSION_1_1
glVertexPointer(size, type, stride, pointer);
#else // GL_EXT_vertex_array
glVertexPointerEXT(size, type, stride, count, pointer);
#endif
#//# glVertexPointerEXT_s($size, $type, $stride, $count, (PACKED)pointer);
void
glVertexPointerEXT_s(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
SV * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glVertexPointerEXT,"glVertexPointerEXT");
#endif
CODE:
{
int width = stride ? stride : (sizeof(type)*size);
void * pointer_s = EL(pointer, width*count);
#ifdef GL_VERSION_1_1
glVertexPointer(size, type, stride, pointer_s);
#else // GL_EXT_vertex_array
glVertexPointerEXT(size, type, stride, count, pointer_s);
#endif
}
#//# glVertexPointerEXT_p($size, (OGA)pointer);
void
glVertexPointerEXT_p(size, oga)
GLint size
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glVertexPointerEXT,"glVertexPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glVertexPointer(size, oga->types[0], 0, data);
#else // GL_EXT_vertex_array
glVertexPointerEXT(size, oga->types[0], 0, oga->item_count/size, data);
#endif
}
#//# glVertexPointer_p($size, (OGA)pointer);
void
glVertexPointer_p(size, oga)
GLint size
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glVertexPointerEXT,"glVertexPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glVertexPointer(size, oga->types[0], 0, data);
#else // GL_EXT_vertex_array
glVertexPointerEXT(size, oga->types[0], 0, oga->item_count/size, data);
#endif
}
#//# glNormalPointerEXT_c($size, $type, $stride, $count, (CPTR)pointer);
void
glNormalPointerEXT_c(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
void * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glNormalPointerEXT,"glNormalPointerEXT");
#endif
CODE:
#ifdef GL_VERSION_1_1
glNormalPointer(type, stride, pointer);
#else // GL_EXT_vertex_array
glNormalPointerEXT(type, stride, count, pointer);
#endif
#//# glNormalPointerEXT_s($size, $type, $stride, $count, (PACKED)pointer);
void
glNormalPointerEXT_s(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
SV * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glNormalPointerEXT,"glNormalPointerEXT");
#endif
CODE:
{
int width = stride ? stride : (sizeof(type)*size);
void * pointer_s = EL(pointer, width*count);
#ifdef GL_VERSION_1_1
glNormalPointer(type, stride, pointer_s);
#else // GL_EXT_vertex_array
glNormalPointerEXT(type, stride, count, pointer_s);
#endif
}
#//# glNormalPointerEXT_p((OGA)pointer);
void
glNormalPointerEXT_p(oga)
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glNormalPointerEXT,"glNormalPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glNormalPointer(oga->types[0], 0, data);
#else // GL_EXT_vertex_array
glNormalPointerEXT(oga->types[0], 0, oga->item_count/3, data);
#endif
}
#//# glNormalPointer_p((OGA)pointer);
void
glNormalPointer_p(oga)
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glNormalPointerEXT,"glNormalPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glNormalPointer(oga->types[0], 0, data);
#else // GL_EXT_vertex_array
glNormalPointerEXT(oga->types[0], 0, oga->item_count/3, data);
#endif
}
#//# glColorPointerEXT_c($size, $type, $stride, $count, (CPTR)pointer);
void
glColorPointerEXT_c(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
void * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glColorPointerEXT,"glColorPointerEXT");
#endif
CODE:
#ifdef GL_VERSION_1_1
glColorPointer(size, type, stride, pointer);
#else // GL_EXT_vertex_array
glColorPointerEXT(size, type, stride, count, pointer);
#endif
#//# glColorPointerEXT_s($size, $type, $stride, $count, (PACKED)pointer);
void
glColorPointerEXT_s(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
SV * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glColorPointerEXT,"glColorPointerEXT");
#endif
CODE:
{
int width = stride ? stride : (sizeof(type)*size);
void * pointer_s = EL(pointer, width*count);
#ifdef GL_VERSION_1_1
glColorPointer(size, type, stride, pointer_s);
#else // GL_EXT_vertex_array
glColorPointerEXT(size, type, stride, count, pointer_s);
#endif
}
#//# glColorPointerEXT_p($size, (OGA)pointer);
void
glColorPointerEXT_p(size, oga)
GLint size
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glColorPointerEXT,"glColorPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glColorPointer(size, oga->types[0], 0, data);
#else // GL_EXT_vertex_array
glColorPointerEXT(size, oga->types[0], 0, oga->item_count/size, data);
#endif
}
#//# glColorPointer_p($size, (OGA)pointer);
void
glColorPointer_p(size, oga)
GLint size
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glColorPointerEXT,"glColorPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glColorPointer(size, oga->types[0], 0, data);
#else // GL_EXT_vertex_array
glColorPointerEXT(size, oga->types[0], 0, oga->item_count/size, data);
#endif
}
#//# glIndexPointerEXT_c($size, $type, $stride, $count, (CPTR)pointer);
void
glIndexPointerEXT_c(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
void * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glIndexPointerEXT,"glIndexPointerEXT");
#endif
CODE:
#ifdef GL_VERSION_1_1
glIndexPointer(type, stride, pointer);
#else // GL_EXT_vertex_array
glIndexPointerEXT(type, stride, count, pointer);
#endif
#//# glIndexPointerEXT_s($size, $type, $stride, $count, (PACKED)pointer);
void
glIndexPointerEXT_s(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
SV * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glIndexPointerEXT,"glIndexPointerEXT");
#endif
CODE:
{
int width = stride ? stride : (sizeof(type)*size);
void * pointer_s = EL(pointer, width*count);
#ifdef GL_VERSION_1_1
glIndexPointer(type, stride, pointer_s);
#else // GL_EXT_vertex_array
glIndexPointerEXT(type, stride, count, pointer_s);
#endif
}
#//# glIndexPointerEXT_p((OGA)pointer);
void
glIndexPointerEXT_p(oga)
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glIndexPointerEXT,"glIndexPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glIndexPointer(oga->types[0], 0, data);
#else // GL_EXT_vertex_array
glIndexPointerEXT(oga->types[0], 0, oga->item_count, data);
#endif
}
#//# glIndexPointer_p((OGA)pointer);
void
glIndexPointer_p(oga)
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glIndexPointerEXT,"glIndexPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glIndexPointer(oga->types[0], 0, data);
#else // GL_EXT_vertex_array
glIndexPointerEXT(oga->types[0], 0, oga->item_count, data);
#endif
}
#//# glTexCoordPointerEXT_c($size, $type, $stride, $count, (CPTR)pointer);
void
glTexCoordPointerEXT_c(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
void * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glTexCoordPointerEXT,"glTexCoordPointerEXT");
#endif
CODE:
#ifdef GL_VERSION_1_1
glTexCoordPointer(size, type, stride, pointer);
#else // GL_EXT_vertex_array
glTexCoordPointerEXT(size, type, stride, count, pointer);
#endif
#//# glTexCoordPointerEXT_s($size, $type, $stride, $count, (PACKED)pointer);
void
glTexCoordPointerEXT_s(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
SV * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glTexCoordPointerEXT,"glTexCoordPointerEXT");
#endif
CODE:
{
int width = stride ? stride : (sizeof(type)*size);
void * pointer_s = EL(pointer, width*count);
#ifdef GL_VERSION_1_1
glTexCoordPointer(size, type, stride, pointer_s);
#else // GL_EXT_vertex_array
glTexCoordPointerEXT(size, type, stride, count, pointer_s);
#endif
}
#//# glTexCoordPointerEXT_p($size, (OGA)pointer);
void
glTexCoordPointerEXT_p(size, oga)
GLint size
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glTexCoordPointerEXT,"glTexCoordPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glTexCoordPointer(size, oga->types[0], 0, data);
#else // GL_EXT_vertex_array
glTexCoordPointerEXT(size, oga->types[0], 0, oga->item_count/size, data);
#endif
}
#//# glTexCoordPointer_p($size, (OGA)pointer);
void
glTexCoordPointer_p(size, oga)
GLint size
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glTexCoordPointerEXT,"glTexCoordPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glTexCoordPointer(size, oga->types[0], 0, data);
#else // GL_EXT_vertex_array
glTexCoordPointerEXT(size, oga->types[0], 0, oga->item_count/size, data);
#endif
}
#//# glEdgeFlagPointerEXT_c($size, $type, $stride, $count, (CPTR)pointer);
void
glEdgeFlagPointerEXT_c(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
void * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glTexCoordPointerEXT,"glEdgeFlagPointerEXT");
#endif
CODE:
#ifdef GL_VERSION_1_1
glEdgeFlagPointer(stride, pointer);
#else // GL_EXT_vertex_array
glEdgeFlagPointerEXT(stride, count, pointer);
#endif
#//# glEdgeFlagPointerEXT_s($size, $type, $stride, $count, (PACKED)pointer);
void
glEdgeFlagPointerEXT_s(size, type, stride, count, pointer)
GLint size
GLenum type
GLsizei stride
GLsizei count
SV * pointer
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glTexCoordPointerEXT,"glEdgeFlagPointerEXT");
#endif
CODE:
{
int width = stride ? stride : (sizeof(type)*size);
void * pointer_s = EL(pointer, width*count);
#ifdef GL_VERSION_1_1
glEdgeFlagPointer(stride, pointer_s);
#else // GL_EXT_vertex_array
glEdgeFlagPointerEXT(stride, count, pointer_s);
#endif
}
#//# glEdgeFlagPointerEXT_p((OGA)pointer);
void
glEdgeFlagPointerEXT_p(oga)
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glTexCoordPointerEXT,"glEdgeFlagPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glEdgeFlagPointer(0, data);
#else // GL_EXT_vertex_array
glEdgeFlagPointerEXT(0, oga->item_count, data);
#endif
}
#//# glEdgeFlagPointer_p((OGA)pointer);
void
glEdgeFlagPointer_p(oga)
OpenGL::Array oga
INIT:
#ifndef GL_VERSION_1_1 // GL_EXT_vertex_array
loadProc(glTexCoordPointerEXT,"glEdgeFlagPointerEXT");
#endif
CODE:
{
GLvoid * data = oga->data;
#ifdef GL_VERSION_2_0
glBindBuffer(GL_ARRAY_BUFFER, oga->bind);
data = NULL;
#elif defined(GL_ARB_vertex_buffer_object)
if (testProc(glBindBufferARB,"glBindBufferARB"))
{
glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind);
data = NULL;
}
#endif
#ifdef GL_VERSION_1_1
glEdgeFlagPointer(0, data);
#else // GL_EXT_vertex_array
glEdgeFlagPointerEXT(0, oga->item_count, data);
#endif
}
#endif // GL_EXT_vertex_array || GL_VERSION_1_1
#ifdef GL_VERSION_1_1
#// 1.1
#//# glVertexPointer_c($size, $type, $stride, (CPTR)pointer);
void
glVertexPointer_c(size, type, stride, pointer)
GLint size
GLenum type
GLsizei stride
void * pointer
CODE:
glVertexPointer(size, type, stride, pointer);
#//# glVertexPointer_s($size, $type, $stride, (PACKED)pointer);
void
glVertexPointer_s(size, type, stride, pointer)
GLint size
GLenum type
GLsizei stride
SV * pointer
CODE:
{
int width = stride ? stride : (sizeof(type)*size);
void * pointer_s = NULL;
if ( pointer ) {
pointer_s = EL(pointer, width);
}
glVertexPointer(size, type, stride, pointer_s);
}
#//# glNormalPointer_c($type, $stride, (CPTR)pointer);
void
glNormalPointer_c(type, stride, pointer)
GLenum type
GLsizei stride
void * pointer
CODE:
glNormalPointer(type, stride, pointer);
#//# glNormalPointer_s($type, $stride, (PACKED)pointer);
void
glNormalPointer_s(type, stride, pointer)
GLenum type
GLsizei stride
SV * pointer
CODE:
{
( run in 0.612 second using v1.01-cache-2.11-cpan-2398b32b56e )