#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #ifndef CALLBACK #define CALLBACK #endif /* Use version-detection if available */ #if defined(HAVE_VER) || defined(_WIN32) #include "./include/GL/gl.h" /* Disable unsupported extensions here */ #include "gl_exclude.h" /* Include extension defs */ #ifdef _WIN32 #define GL_GLEXT_PROCS #else #define GL_GLEXT_PROTOTYPES #endif #include "glext_procs.h" #else // No version-detection - use installed header files #include #endif #ifndef GL_ADD #define GL_ADD 0x0104 #endif #ifndef GL_ADD_SIGNED_ARB #define GL_ADD_SIGNED_ARB GL_ADD_SIGNED_EXT #endif #ifndef GL_SUBTRACT_ARB #define GL_SUBTRACT_ARB GL_SUBTRACT_EXT #endif #ifndef GL_INTERPOLATE_ARB #define GL_INTERPOLATE_ARB GL_INTERPOLATE_EXT #endif #ifndef GL_VERSION_1_0 #define GL_VERSION_1_0 1 #endif #ifndef GL_TEXTURE_BINDING_3D #define GL_TEXTURE_BINDING_3D 0x806A #endif /* Remap 1.1 extensions */ #ifdef GL_VERSION_1_1 #ifndef GL_VERSION_1_2 #ifndef GL_EXT_polygon_offset #define GL_EXT_polygon_offset 1 #define GL_EXT_polygon_offset_is_faked 1 #define GL_POLYGON_OFFSET_EXT 0x8037 #define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 #define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 #define glPolygonOffsetEXT(factor,units) glPolygonOffset((factor),(units)*(float)0x10000) #endif #ifndef GL_EXT_texture_object #define GL_EXT_texture_object 1 #define GL_EXT_texture_object_is_faked 1 #define GL_TEXTURE_PRIORITY_EXT GL_TEXTURE_PRIORITY #define GL_TEXTURE_RESIDENT_EXT GL_TEXTURE_RESIDENT #define GL_TEXTURE_1D_BINDING_EXT GL_TEXTURE_BINDING_1D #define GL_TEXTURE_2D_BINDING_EXT GL_TEXTURE_BINDING_2D #define GL_TEXTURE_3D_BINDING_EXT GL_TEXTURE_BINDING_3D #define glAreTexturesResidentEXT(n,textures,residences) glAreTexturesResident(n,textures,residences) #define glBindTextureEXT(target,texture) glBindTexture((target),(texture)) #define glDeleteTexturesEXT(n,textures) glDeleteTextures((n),(textures)) #define glGenTexturesEXT(n,textures) glGenTextures((n),(textures)) #define glIsTextureEXT(list) glIsTexture(list) #define glPrioritizeTexturesEXT(n,textures,priorities) glPrioritizeTextures((n),(textures),(priorities)) #endif #ifndef GL_EXT_copy_texture #define GL_EXT_copy_texture 1 #define GL_EXT_copy_texture_is_faked 1 #define glCopyTexImage1DEXT(target,level,internalFormat,x,y,width,border) \ glCopyTexImage1D((target),(level),(internalFormat),(x),(y),(width),(border)) #define glCopyTexImage2DEXT(target,level,internalFormat,x,y,width,height,border) \ glCopyTexImage2D((target),(level),(internalFormat),(x),(y),(width),(height),(border)) #define glCopyTexSubImage1DEXT(target,level,xoffset,x,y,width) \ glCopyTexSubImage1D((target),(level),(xoffset),(x),(y),(width)) #define glCopyTexSubImage2DEXT(target,level,xoffset,yoffset,x,y,width,height) \ glCopyTexSubImage2D((target),(level),(xoffset),(yoffset),(x),(y),(width),(height)) #if defined(HAVE_VER) || defined(_WIN32) #define glCopyTexSubImage3DEXT(target,level,xoffset,yoffset,zoffset,x,y,width,height) \ glCopyTexSubImage3D((target),(level),(xoffset),(yoffset),(zoffset),(x),(y),(width),(height)) #else #define glCopyTexSubImage3DEXT(target,level,xoffset,yoffset,zoffset,x,y,width,height) #endif #endif #ifndef GL_EXT_vertex_array #define GL_EXT_vertex_array 1 #define GL_EXT_vertex_array_is_faked 1 #define GL_VERTEX_ARRAY_COUNT_EXT 0x807D #define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 #define GL_COLOR_ARRAY_COUNT_EXT 0x8084 #define GL_INDEX_ARRAY_COUNT_EXT 0x8087 #define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B #define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D #define GL_VERTEX_ARRAY_EXT GL_VERTEX_ARRAY #define GL_NORMAL_ARRAY_EXT GL_NORMAL_ARRAY #define GL_COLOR_ARRAY_EXT GL_COLOR_ARRAY #define GL_INDEX_ARRAY_EXT GL_INDEX_ARRAY #define GL_TEXCOORD_ARRAY_EXT GL_TEXCOORD_ARRAY #define GL_EDGEFLAG_ARRAY_EXT GL_EDGEFLAG_ARRAY #define GL_TEXTURE_COORD_ARRAY_EXT GL_TEXTURE_COORD_ARRAY #define GL_EDGE_FLAG_ARRAY_EXT GL_EDGE_FLAG_ARRAY #define GL_VERTEX_ARRAY_SIZE_EXT GL_VERTEX_ARRAY_SIZE #define GL_VERTEX_ARRAY_TYPE_EXT GL_VERTEX_ARRAY_TYPE #define GL_VERTEX_ARRAY_STRIDE_EXT GL_VERTEX_ARRAY_STRIDE #define GL_NORMAL_ARRAY_TYPE_EXT GL_NORMAL_ARRAY_TYPE #define GL_NORMAL_ARRAY_STRIDE_EXT GL_NORMAL_ARRAY_STRIDE #define GL_COLOR_ARRAY_SIZE_EXT GL_COLOR_ARRAY_SIZE #define GL_COLOR_ARRAY_TYPE_EXT GL_COLOR_ARRAY_TYPE #define GL_COLOR_ARRAY_STRIDE_EXT GL_COLOR_ARRAY_STRIDE #define GL_INDEX_ARRAY_TYPE_EXT GL_INDEX_ARRAY_TYPE #define GL_INDEX_ARRAY_STRIDE_EXT GL_INDEX_ARRAY_STRIDE #define GL_TEXTURE_COORD_ARRAY_SIZE_EXT GL_TEXTURE_COORD_ARRAY_SIZE #define GL_TEXTURE_COORD_ARRAY_TYPE_EXT GL_TEXTURE_COORD_ARRAY_TYPE #define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT GL_TEXTURE_COORD_ARRAY_STRIDE #define GL_EDGE_FLAG_ARRAY_STRIDE_EXT GL_EDGE_FLAG_ARRAY_STRIDE #define GL_VERTEX_ARRAY_POINTER_EXT GL_VERTEX_ARRAY_POINTER #define GL_NORMAL_ARRAY_POINTER_EXT GL_NORMAL_ARRAY_POINTER #define GL_COLOR_ARRAY_POINTER_EXT GL_COLOR_ARRAY_POINTER #define GL_INDEX_ARRAY_POINTER_EXT GL_INDEX_ARRAY_POINTER #define GL_TEXTURE_COORD_ARRAY_POINTER_EXT GL_TEXTURE_COORD_ARRAY_POINTER #define GL_EDGE_FLAG_ARRAY_POINTER_EXT GL_EDGE_FLAG_ARRAY_POINTER #define glArrayElementEXT(i) glArrayElement(i) #define glDrawArraysEXT(mode,first,count) glDrawArrays((mode),(first),(count)) #define glVertexPointerEXT(size,type,stride,count,pointer) \ glVertexPointer((size),(type),(stride),(pointer)) #define glNormalPointerEXT(type,stride,count,pointer) \ glNormalPointer((type),(stride),(pointer)) #define glColorPointerEXT(size,type,stride,count,pointer) \ glColorPointer((size),(type),(stride),(pointer)) #define glIndexPointerEXT(type,stride,count,pointer) \ glIndexPointer((type),(stride),(pointer)) #define glTexCoordPointerEXT(size,type,stride,count,pointer) \ glTexCoordPointer((size),(type),(stride),(pointer)) #define glEdgeFlagPointerEXT(stride,count,pointer) \ glEdgeFlagPointer((stride),(pointer)) #endif #endif #endif /* Remap 1.1 extensions */ #ifndef GL_EXT_Cg_shader #define GL_EXT_Cg_shader 1 #define GL_CG_VERTEX_SHADER_EXT 0x890E #define GL_CG_FRAGMENT_SHADER_EXT 0x890F #endif /* missing defs */ #ifndef GL_CMYK #define GL_CMYK GL_CMYK_EXT #endif #ifndef GL_CMYKA #define GL_CMYKA GL_CMYKA_EXT #endif #ifndef GL_PACK_CMYK_HINT #define GL_PACK_CMYK_HINT GL_PACK_CMYK_HINT_EXT #endif #ifndef GL_UNPACK_CMYK_HINT #define GL_UNPACK_CMYK_HINT GL_UNPACK_CMYK_HINT_EXT #endif #ifndef GL_BLEND_EQUATION_EXT #define GL_BLEND_EQUATION_EXT 0x8009 #endif #ifndef GL_BLEND_COLOR_EXT #define GL_BLEND_COLOR_EXT 0x8005 #endif /* 2.1 defintions */ #if defined(HAVE_VER) || defined(_WIN32) #ifndef NO_GL_VERSION_2_1 #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 #endif #define CURRENT_RASTER_SECONDARY_COLOR 0x845F #define FLOAT_MAT2x3 0x8B65 #define FLOAT_MAT2x4 0x8B66 #define FLOAT_MAT3x2 0x8B67 #define FLOAT_MAT3x4 0x8B68 #define FLOAT_MAT4x2 0x8B69 #define FLOAT_MAT4x3 0x8B6A #define SRGB 0x8C40 #define SRGB8 0x8C41 #define SRGB_ALPHA 0x8C42 #define SRGB8_ALPHA8 0x8C43 #define SLUMINANCE_ALPHA 0x8C44 #define SLUMINANCE8_ALPHA8 0x8C45 #define SLUMINANCE 0x8C46 #define SLUMINANCE8 0x8C47 #define COMPRESSED_SRGB 0x8C48 #define COMPRESSED_SRGB_ALPHA 0x8C49 #define COMPRESSED_SLUMINANCE 0x8C4A #define COMPRESSED_SLUMINANCE_ALPHA 0x8C4B #define PIXEL_PACK_BUFFER 0x88EB #define PIXEL_UNPACK_BUFFER 0x88EC #define PIXEL_PACK_BUFFER_BINDING 0x88ED #define PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniformMatrix2x3fv (GLint, GLsizei, GLboolean, const GLfloat *); GLAPI void APIENTRY glUniformMatrix3x2fv (GLint, GLsizei, GLboolean, const GLfloat *); GLAPI void APIENTRY glUniformMatrix2x4fv (GLint, GLsizei, GLboolean, const GLfloat *); GLAPI void APIENTRY glUniformMatrix4x2fv (GLint, GLsizei, GLboolean, const GLfloat *); GLAPI void APIENTRY glUniformMatrix3x4fv (GLint, GLsizei, GLboolean, const GLfloat *); GLAPI void APIENTRY glUniformMatrix4x3fv (GLint, GLsizei, GLboolean, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #ifdef GL_GLEXT_PROCS static PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv = NULL; static PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv = NULL; static PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv = NULL; static PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv = NULL; static PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv = NULL; static PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv = NULL; #endif /* GL_GLEXT_PROCS */ #endif #endif #define MAX_GL_TEXPARAMETER_COUNT 4 extern int gl_texparameter_count(GLenum pname); #define MAX_GL_TEXENV_COUNT 4 extern int gl_texenv_count(GLenum pname); #define MAX_GL_TEXGEN_COUNT 4 extern int gl_texgen_count(GLenum pname); #define MAX_GL_MATERIAL_COUNT 4 extern int gl_material_count(GLenum pname); #define MAX_GL_MAP_COUNT 4 extern int gl_map_count(GLenum target, GLenum query); #define MAX_GL_LIGHT_COUNT 4 extern int gl_light_count(GLenum pname); #define MAX_GL_LIGHTMODEL_COUNT 4 extern int gl_lightmodel_count(GLenum pname); #define MAX_GL_FOG_COUNT 4 extern int gl_fog_count(GLenum pname); #define MAX_GL_GET_COUNT 16 extern int gl_get_count(GLenum param); extern int gl_pixelmap_size(GLenum map); extern int gl_state_count(GLenum state); enum { gl_pixelbuffer_pack = 1, gl_pixelbuffer_unpack = 2, }; extern unsigned long gl_pixelbuffer_size( GLenum format, GLsizei width, GLsizei height, GLenum type, int mode); extern GLvoid * pack_image_ST(SV ** stack, int count, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, int mode); extern GLvoid * allocate_image_ST(GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, int mode); extern SV ** unpack_image_ST(SV ** SP, void * data, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, int mode); extern GLvoid * ELI(SV * sv, GLsizei width, GLsizei height, GLenum format, GLenum type, int mode); extern GLvoid * EL(SV * sv, int needlen); extern int gl_type_size(GLenum type); extern int gl_component_count(GLenum format, GLenum type); struct oga_struct { int type_count, item_count; GLenum * types; GLint * type_offset; int total_types_width; void * data; int data_length; int free_data; }; typedef struct oga_struct oga_struct; typedef oga_struct * OpenGL__Array;