Acme-MITHALDU-BleedingOpenGL

 view release on metacpan or  search on metacpan

BleedingOpenGL.pm  view on Meta::CPAN

#  Copyright (c) 2009 Christopher Marshall. All rights reserved.
#  Copyright (c) 2015 Bob Free. All rights reserved.
#  Copyright (c) 2016 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.

=head1 NAME

Acme::MITHALDU::BleedingOpenG - bleeding edge OpenGL experiments - you WILL get cut

=head1 DESCRIPTION

This is a fork of the official L<OpenGL> in which i implement modern OpenGL
functions not available in L<OpenGL> crudely, cluelessly and without any error
checking. The only reason this is on CPAN is to make development of
L<Microidium|https://github.com/wchristian/Microidium> a little easier.

You'd be insane to use this. I make no guarantees to not break this horribly at
any point.

Seriously, just use L<OpenGL>.

(PS: I'll probably be force-pushing the repo at various points too.)

=cut

require Exporter;
require DynaLoader;

use Carp;

$VERSION = '0.67049';
$BUILD_VERSION = $XS_VERSION = $VERSION;
$VERSION = eval($VERSION);

@ISA = qw(Exporter AutoLoader DynaLoader);

our $gl_version;
our $glext_installed = {};

# Implemented extensions and their dependencies
our $glext_dependencies =
{
   GL_ARB_color_buffer_float=>'2.0', #39
   GL_ARB_depth_texture=>'1.1', #22
   GL_ARB_draw_buffers=>'1.3', #37
   GL_ARB_fragment_program=>'1.4;ARB_vertex_program', #27
   GL_ARB_fragment_program_shadow=>'1.4;ARB_fragment_program,ARB_shadow', #36
   GL_ARB_fragment_shader=>'1.4;ARB_shader_objects', #32
   GL_ARB_half_float_pixel=>'1.5', #40
   GL_ARB_multisample=>'1.0', #5
   GL_ARB_multitexture=>'1.1', # Moved to 1.2.1
   GL_ARB_pixel_buffer_object=>'1.5', #42
   GL_ARB_point_parameters=>'1.0', #14
   GL_ARB_point_sprite=>'1.4', #35
   GL_ARB_shading_language_100=>'1.4;ARB_shader_objects,ARB_fragment_shader,ARB_vertex_shader', #33
   GL_ARB_shader_objects=>'1.4', #30
   GL_ARB_shadow=>'1.1;ARB_depth_texture', #23
   GL_ARB_shadow_ambient=>'1.1;ARB_shadow,ARB_depth_texture', #23
   GL_ARB_texture_border_clamp=>'1.0', #13
   GL_ARB_texture_cube_map=>'1.0', #7
   GL_ARB_texture_env_add=>'1.0', #6
   GL_ARB_texture_env_combine=>'1.1;ARB_multitexture', #17
   GL_ARB_texture_env_dot3=>'1.1;ARB_multitexture,ARB_texture_env_combine', #19
   GL_ARB_texture_float=>'1.1', #41
   GL_ARB_texture_mirrored_repeat=>'1.0', #21
   GL_ARB_texture_non_power_of_two=>'1.4', #34
   GL_ARB_texture_rectangle=>'1.1', #38
   GL_ARB_vertex_buffer_object=>'1.4', #28
   GL_ARB_vertex_program=>'1.3', #26
   GL_ARB_vertex_shader=>'1.4;ARB_shader_objects', #31
   GL_ATI_texture_float=>'1.1', #280
   GL_ATI_texture_mirror_once=>'1.0;EXT_texture3D', #221
   GL_EXT_abgr=>'1.0', #1
   GL_EXT_bgra=>'1.0', #129
   GL_EXT_blend_color=>'1.0', #2
   GL_EXT_blend_subtract=>'1.0', #38
   GL_EXT_Cg_shader=>'1.0;ARB_shader_objects', #???
   GL_EXT_copy_texture=>'1.0', #10
   GL_EXT_framebuffer_object=>'1.1', #310
   GL_EXT_packed_pixels=>'1.0', #23
   GL_EXT_pixel_buffer_object=>'1.0', #???
   GL_EXT_rescale_normal=>'1.0', #27
   GL_EXT_separate_specular_color=>'1.0', #144
   GL_EXT_shadow_funcs=>'1.1;ARB_depth_texture,ARB_shadow', #267
   GL_EXT_stencil_wrap=>'1.0', #176
   GL_EXT_subtexture=>'1.0', #9
   GL_EXT_texture=>'1.0', #4
   GL_EXT_texture3D=>'1.1;EXT_abgr', #6
   GL_EXT_texture_cube_map=>'1.0', #6
   GL_EXT_texture_env_combine=>'1.0', #158
   GL_EXT_texture_env_dot3=>'1.0;EXT_texture_env_combine', #220
   GL_EXT_texture_filter_anisotropic=>'1.0', #187
   GL_EXT_texture_lod_bias=>'1.0', #186
   GL_EXT_texture_mirror_clamp=>'1.0', #298
   GL_EXT_vertex_array=>'1.0', #30
   GL_HP_occlusion_test=>'1.0', #137
   GL_IBM_rasterpos_clip=>'1.0', #110
   GL_NV_blend_square=>'1.0', #194
   GL_NV_copy_depth_to_color=>'1.0;NV_packed_depth_stencil', #243
   GL_NV_depth_clamp=>'1.0', #260
   GL_NV_fog_distance=>'1.0', #192
   GL_NV_fragment_program_option=>'1.0;ARB_fragment_program', #303
   GL_NV_fragment_program2=>'1.0;ARB_fragment_program,NV_fragment_program_option', #304
   GL_NV_light_max_exponent=>'1.0', #189
   GL_NV_multisample_filter_hint=>'1.0;ARB_multisample', #259
   GL_NV_packed_depth_stencil=>'1.0', #226
   GL_NV_texgen_reflection=>'1.0', #179
   GL_NV_texture_compression_vtc=>'1.0;ARB_texture_compression,EXT_texture_compression_s3tc,ARB_texture_non_power_of_two', #228
   GL_NV_texture_expand_normal=>'1.1', #286
   GL_NV_texture_rectangle=>'1.0', #229
   GL_NV_texture_shader=>'1.0;ARB_multitexture,ARB_texture_cube_map', #230
   GL_NV_texture_shader2=>'1.0;NV_texture_shader', #231
   GL_NV_texture_shader3=>'1.0;NV_texture_shader2', #265
   GL_NV_vertex_program1_1=>'1.0;NV_vertex_program', #266
   GL_NV_vertex_program2=>'1.0;NV_vertex_program', #287
   GL_NV_vertex_program2_option=>'1.0;ARB_vertex_program', #305
   GL_NV_vertex_program3=>'1.0;ARB_vertex_program,NV_vertex_program2_option', #306
   GL_S3_s3tc=>'1.1', #276
   GL_SGIS_generate_mipmap=>'1.1', #32
   GL_SGIS_texture_lod=>'1.1', #24
   GL_SGIX_depth_texture=>'1.1', #63
   GL_SGIX_shadow=>'1.0', #34
   GL_SUN_slice_accum=>'1.0' #258
};


@gl_func = qw(
   glAccum
   glAlphaFunc
   glAreTexturesResident_s
   glAreTexturesResident_c
   glAreTexturesResident_p
   glArrayElement
   glBegin
   glEnd
   glBindTexture
   glBitmap_s
   glBitmap_c
   glBitmap_p
   glBlendFunc
   glCallList
   glCallLists_s
   glCallLists_c
   glCallLists_p
   glClear
   glClearAccum
   glClearColor
   glClearDepth
   glClearIndex
   glClearStencil
   glClipPlane_p
   glClipPlane_s
   glClipPlane_c
   glColorMask
   glColorMaterial
   glColorPointer_c
   glColorPointer_s
   glColorPointer_p
   glCopyPixels
   glCopyTexImage1D
   glCopyTexImage2D
   glCopyTexSubImage1D
   glCopyTexSubImage2D
   glCopyTexSubImage3D
   glCullFace
   glDeleteLists
   glDeleteTextures_s
   glDeleteTextures_c
   glDeleteTextures_p
   glDepthFunc
   glDepthMask
   glDepthRange
   glDrawArrays
   glDrawBuffer
   glDrawBuffers_s
   glDrawBuffers_c
   glDrawBuffers_p
   glDrawBuffersARB_s
   glDrawBuffersARB_c
   glDrawBuffersARB_p
   glDrawElements_s
   glDrawElements_c
   glDrawElements_p
   glDrawPixels_s
   glDrawPixels_c
   glDrawPixels_p
   glDrawRangeElements_s
   glDrawRangeElements_c
   glDrawRangeElements_p
   glEdgeFlag
   glEdgeFlagPointer_c
   glEdgeFlagPointer_s
   glEdgeFlagPointer_p
   glEnable
   glDisable
   glEnableClientState
   glDisableClientState
   glEvalCoord1d
   glEvalCoord1f

BleedingOpenGL.pm  view on Meta::CPAN

   glCopyTexImage1DEXT
   glCopyTexImage2DEXT
   glCopyTexSubImage1DEXT
   glCopyTexSubImage2DEXT
   glCopyTexSubImage3DEXT
   glBlendEquationEXT
   glBlendColorEXT
   glArrayElementEXT
   glDrawArraysEXT
   glVertexPointerEXT_c
   glVertexPointerEXT_s
   glVertexPointerEXT_p
   glNormalPointerEXT_c
   glNormalPointerEXT_s
   glNormalPointerEXT_p
   glColorPointerEXT_c
   glColorPointerEXT_s
   glColorPointerEXT_p
   glIndexPointerEXT_c
   glIndexPointerEXT_s
   glIndexPointerEXT_p
   glTexCoordPointerEXT_c
   glTexCoordPointerEXT_s
   glTexCoordPointerEXT_p
   glEdgeFlagPointerEXT_c
   glEdgeFlagPointerEXT_s
   glEdgeFlagPointerEXT_p
   glWindowPos2iMESA
   glWindowPos2dMESA
   glWindowPos3iMESA
   glWindowPos3dMESA
   glWindowPos4iMESA
   glWindowPos4dMESA
   glResizeBuffersMESA
   glIsRenderbufferEXT
   glBindRenderbufferEXT
   glDeleteRenderbuffersEXT_c
   glDeleteRenderbuffersEXT_s
   glDeleteRenderbuffersEXT_p
   glGenRenderbuffersEXT_c
   glGenRenderbuffersEXT_s
   glGenRenderbuffersEXT_p
   glRenderbufferStorageEXT
   glGetRenderbufferParameterivEXT_c
   glGetRenderbufferParameterivEXT_s
   glIsFramebufferEXT
   glBindFramebufferEXT
   glDeleteFramebuffersEXT_c
   glDeleteFramebuffersEXT_s
   glDeleteFramebuffersEXT_p
   glGenFramebuffersEXT_c
   glGenFramebuffersEXT_s
   glGenFramebuffersEXT_p
   glCheckFramebufferStatusEXT
   glFramebufferTexture1DEXT
   glFramebufferTexture2DEXT
   glFramebufferTexture3DEXT
   glFramebufferRenderbufferEXT
   glGetFramebufferAttachmentParameterivEXT_c
   glGetFramebufferAttachmentParameterivEXT_s
   glGenerateMipmapEXT
   glVertexAttrib1dARB
   glVertexAttrib1dvARB_c
   glVertexAttrib1dvARB_s
   glVertexAttrib1dvARB_p
   glVertexAttrib1fARB
   glVertexAttrib1fvARB_c
   glVertexAttrib1fvARB_s
   glVertexAttrib1fvARB_p
   glVertexAttrib1sARB
   glVertexAttrib1svARB_c
   glVertexAttrib1svARB_s
   glVertexAttrib1svARB_p
   glVertexAttrib2dARB
   glVertexAttrib2dvARB_c
   glVertexAttrib2dvARB_s
   glVertexAttrib2dvARB_p
   glVertexAttrib2fARB
   glVertexAttrib2fvARB_c
   glVertexAttrib2fvARB_s
   glVertexAttrib2fvARB_p
   glVertexAttrib2sARB
   glVertexAttrib2svARB_c
   glVertexAttrib2svARB_s
   glVertexAttrib2svARB_p
   glVertexAttrib3dARB
   glVertexAttrib3dvARB_c
   glVertexAttrib3dvARB_s
   glVertexAttrib3dvARB_p
   glVertexAttrib3fARB
   glVertexAttrib3fvARB_c
   glVertexAttrib3fvARB_s
   glVertexAttrib3fvARB_p
   glVertexAttrib3sARB
   glVertexAttrib3svARB_c
   glVertexAttrib3svARB_s
   glVertexAttrib3svARB_p
   glVertexAttrib4NbvARB_c
   glVertexAttrib4NbvARB_s
   glVertexAttrib4NbvARB_p
   glVertexAttrib4NivARB_c
   glVertexAttrib4NivARB_s
   glVertexAttrib4NivARB_p
   glVertexAttrib4NsvARB_c
   glVertexAttrib4NsvARB_s
   glVertexAttrib4NsvARB_p
   glVertexAttrib4NubARB
   glVertexAttrib4NubvARB_c
   glVertexAttrib4NubvARB_s
   glVertexAttrib4NubvARB_p
   glVertexAttrib4NuivARB_c
   glVertexAttrib4NuivARB_s
   glVertexAttrib4NuivARB_p
   glVertexAttrib4NusvARB_c
   glVertexAttrib4NusvARB_s
   glVertexAttrib4NusvARB_p
   glVertexAttrib4bvARB_c
   glVertexAttrib4bvARB_s
   glVertexAttrib4bvARB_p
   glVertexAttrib4dARB
   glVertexAttrib4dvARB_c

BleedingOpenGL.pm  view on Meta::CPAN

   glProgramEnvParameter4fvARB_c
   glProgramEnvParameter4fvARB_s
   glProgramEnvParameter4fvARB_p
   glProgramLocalParameter4dARB
   glProgramLocalParameter4dvARB_c
   glProgramLocalParameter4dvARB_s
   glProgramLocalParameter4dvARB_p
   glProgramLocalParameter4fARB
   glProgramLocalParameter4fvARB_c
   glProgramLocalParameter4fvARB_s
   glProgramLocalParameter4fvARB_p
   glGetProgramEnvParameterdvARB_c
   glGetProgramEnvParameterdvARB_s
   glGetProgramEnvParameterdvARB_p
   glGetProgramEnvParameterfvARB_c
   glGetProgramEnvParameterfvARB_s
   glGetProgramEnvParameterfvARB_p
   glGetProgramLocalParameterdvARB_c
   glGetProgramLocalParameterdvARB_s
   glGetProgramLocalParameterdvARB_p
   glGetProgramLocalParameterfvARB_c
   glGetProgramLocalParameterfvARB_s
   glGetProgramLocalParameterfvARB_p
   glGetProgramivARB_c
   glGetProgramivARB_s
   glGetProgramivARB_p
   glGetProgramStringARB_c
   glGetProgramStringARB_s
   glGetProgramStringARB_p
   glGetVertexAttribdvARB_c
   glGetVertexAttribdvARB_s
   glGetVertexAttribdvARB_p
   glGetVertexAttribfvARB_c
   glGetVertexAttribfvARB_s
   glGetVertexAttribfvARB_p
   glGetVertexAttribivARB_c
   glGetVertexAttribivARB_s
   glGetVertexAttribivARB_p
   glGetVertexAttribPointervARB_c
   glGetVertexAttribPointervARB_p
   glIsProgramARB
   glBindBufferARB
   glDeleteBuffersARB_c
   glDeleteBuffersARB_s
   glDeleteBuffersARB_p
   glGenBuffersARB_c
   glGenBuffersARB_s
   glGenBuffersARB_p
   glIsBufferARB
   glBufferDataARB_c
   glBufferDataARB_s
   glBufferDataARB_p
   glBufferSubDataARB_c
   glBufferSubDataARB_s
   glBufferSubDataARB_p
   glGetBufferSubDataARB_c
   glGetBufferSubDataARB_s
   glGetBufferSubDataARB_p
   glMapBufferARB_c
   glMapBufferARB_p
   glUnmapBufferARB
   glGetBufferParameterivARB_c
   glGetBufferParameterivARB_s
   glGetBufferParameterivARB_p
   glGetBufferPointervARB_c
   glGetBufferPointervARB_s
   glGetBufferPointervARB_p
   glActiveTextureARB
   glClientActiveTextureARB
   glMultiTexCoord1dARB
   glMultiTexCoord1dvARB_c
   glMultiTexCoord1dvARB_s
   glMultiTexCoord1dvARB_p
   glMultiTexCoord1fARB
   glMultiTexCoord1fvARB_c
   glMultiTexCoord1fvARB_s
   glMultiTexCoord1fvARB_p
   glMultiTexCoord1iARB
   glMultiTexCoord1ivARB_c
   glMultiTexCoord1ivARB_s
   glMultiTexCoord1ivARB_p
   glMultiTexCoord1sARB
   glMultiTexCoord1svARB_c
   glMultiTexCoord1svARB_s
   glMultiTexCoord1svARB_p
   glMultiTexCoord2dARB
   glMultiTexCoord2dvARB_c
   glMultiTexCoord2dvARB_s
   glMultiTexCoord2dvARB_p
   glMultiTexCoord2fARB
   glMultiTexCoord2fvARB_c
   glMultiTexCoord2fvARB_s
   glMultiTexCoord2fvARB_p
   glMultiTexCoord2iARB
   glMultiTexCoord2ivARB_c
   glMultiTexCoord2ivARB_s
   glMultiTexCoord2ivARB_p
   glMultiTexCoord2sARB
   glMultiTexCoord2svARB_c
   glMultiTexCoord2svARB_s
   glMultiTexCoord2svARB_p
   glMultiTexCoord3dARB
   glMultiTexCoord3dvARB_c
   glMultiTexCoord3dvARB_s
   glMultiTexCoord3dvARB_p
   glMultiTexCoord3fARB
   glMultiTexCoord3fvARB_c
   glMultiTexCoord3fvARB_s
   glMultiTexCoord3fvARB_p
   glMultiTexCoord3iARB
   glMultiTexCoord3ivARB_c
   glMultiTexCoord3ivARB_s
   glMultiTexCoord3ivARB_p
   glMultiTexCoord3sARB
   glMultiTexCoord3svARB_c
   glMultiTexCoord3svARB_s
   glMultiTexCoord3svARB_p
   glMultiTexCoord4dARB
   glMultiTexCoord4dvARB_c
   glMultiTexCoord4dvARB_s
   glMultiTexCoord4dvARB_p

BleedingOpenGL.pm  view on Meta::CPAN

   glGetAttachedObjectsARB_c
   glGetAttachedObjectsARB_s
   glGetAttachedObjectsARB_p
   glGetUniformLocationARB_c
   glGetUniformLocationARB_p
   glGetActiveUniformARB_c
   glGetActiveUniformARB_s
   glGetActiveUniformARB_p
   glGetUniformfvARB_c
   glGetUniformfvARB_p
   glGetUniformivARB_c
   glGetUniformivARB_p
   glGetShaderSourceARB_c
   glGetShaderSourceARB_p
   glBindAttribLocationARB
   glGetActiveAttribARB_c
   glGetActiveAttribARB_s
   glGetActiveAttribARB_p
   glGetAttribLocationARB_c
   glGetAttribLocationARB_p
   glPointParameterfARB
   glPointParameterfvARB_c
   glPointParameterfvARB_s
   glPointParameterfvARB_p
   glSampleCoverageARB
   glClampColorARB
   
   glpHasGLUT
   glpCheckExtension
   glpFullScreen
   glpRestoreScreen
);
# gl_func

# gltut
push @gl_func, qw(
   glGenVertexArrays_p
   glBindVertexArray
   glAttachShader
   glDeleteShader
   glGetShaderiv_p
   glGetShaderInfoLog_p
   glGetProgramiv_p
   glDrawElementsBaseVertex_c

   glGenQueries_p
   glDeleteQueries
   glBeginQuery
   glEndQuery
   glGetQueryObjectiv
   glGetQueryObjectuiv
   glGetQueryiv

);

@glu_func = qw(
   gluBeginCurve
   gluBeginPolygon
   gluBeginSurface
   gluBeginTrim
   gluBuild1DMipmaps_c
   gluBuild1DMipmaps_s
   gluBuild2DMipmaps_c
   gluBuild2DMipmaps_s
   gluCylinder
   gluDeleteNurbsRenderer
   gluDeleteQuadric
   gluDeleteTess
   gluDisk
   gluEndCurve
   gluEndPolygon
   gluEndSurface
   gluEndTrim
   gluErrorString
   gluGetNurbsProperty_p
   gluGetString
   gluGetTessProperty_p
   gluLoadSamplingMatrices_p
   gluLookAt
   gluNewNurbsRenderer
   gluNewQuadric
   gluNewTess
   gluNextContour
   gluNurbsCurve_c
   gluNurbsSurface_c
   gluOrtho2D
   gluPartialDisk
   gluPerspective
   gluPickMatrix_p
   gluProject_p
   gluPwlCurve_c
   gluQuadricDrawStyle
   gluQuadricNormals
   gluQuadricOrientation
   gluQuadricTexture
   gluScaleImage_s
   gluSphere
   gluTessBeginContour
   gluTessBeginPolygon
   gluTessCallback
   gluTessEndContour
   gluTessEndPolygon
   gluTessNormal
   gluTessProperty
   gluTessVertex_p
   gluUnProject_p
);

@glut_func = qw(
   done_glutInit
   glutAddMenuEntry
   glutAddSubMenu
   glutAttachMenu
   glutBitmapCharacter
   glutBitmapHeight
   glutBitmapLength
   glutBitmapString
   glutBitmapWidth
   glutButtonBoxFunc
   glutChangeToMenuEntry
   glutChangeToSubMenu
   glutCloseFunc
   glutCopyColormap
   glutCreateMenu
   glutCreateSubWindow
   glutCreateWindow
   glutDestroyMenu
   glutDestroyWindow
   glutDetachMenu
   glutDeviceGet
   glutDialsFunc
   glutDisplayFunc
   glutEnterGameMode
   glutEntryFunc
   glutEstablishOverlay
   glutExtensionSupported
   glutForceJoystickFunc
   glutFullScreen
   glutGameModeGet
   glutGameModeString
   glutGet
   glutGetColor
   glutGetMenu
   glutGetModifiers
   glutGetWindow
   glutHideOverlay
   glutHideWindow
   glutIconifyWindow
   glutIdleFunc
   glutIgnoreKeyRepeat
   glutInit
   glutInitDisplayMode
   glutInitDisplayString
   glutInitWindowPosition
   glutInitWindowSize
   glutKeyboardFunc
   glutKeyboardUpFunc
   glutLayerGet
   glutLeaveGameMode
   glutLeaveMainLoop
   glutMainLoop
   glutMainLoopEvent
   glutMenuDestroyFunc
   glutMenuStateFunc
   glutMenuStatusFunc
   glutMotionFunc
   glutMouseFunc
   glutMouseWheelFunc
   glutOverlayDisplayFunc
   glutPassiveMotionFunc
   glutPopWindow
   glutPositionWindow
   glutPostOverlayRedisplay
   glutPostRedisplay
   glutPostWindowOverlayRedisplay
   glutPostWindowRedisplay
   glutPushWindow
   glutRemoveMenuItem
   glutRemoveOverlay
   glutReportErrors
   glutReshapeFunc
   glutReshapeWindow
   glutSetColor

BleedingOpenGL.pm  view on Meta::CPAN

   GLUT_CURSOR_INHERIT
   GLUT_CURSOR_NONE
   GLUT_CURSOR_FULL_CROSSHAIR
   GLUT_ACTION_EXIT
   GLUT_ACTION_GLUTMAINLOOP_RETURNS
   GLUT_ACTION_CONTINUE_EXECUTION
   GLUT_ACTION_ON_WINDOW_CLOSE
   GLUT_GAME_MODE_ACTIVE
   GLUT_GAME_MODE_POSSIBLE
   GLUT_GAME_MODE_WIDTH
   GLUT_GAME_MODE_HEIGHT
   GLUT_GAME_MODE_PIXEL_DEPTH
   GLUT_GAME_MODE_REFRESH_RATE
   GLUT_GAME_MODE_DISPLAY_CHANGED
   GLUT_CORE_PROFILE
   GLUT_DEBUG
);

@glx_const = qw(
   GLX_USE_GL
   GLX_BUFFER_SIZE
   GLX_LEVEL
   GLX_RGBA
   GLX_DOUBLEBUFFER
   GLX_STEREO
   GLX_AUX_BUFFERS
   GLX_RED_SIZE
   GLX_GREEN_SIZE
   GLX_BLUE_SIZE
   GLX_ALPHA_SIZE
   GLX_DEPTH_SIZE
   GLX_STENCIL_SIZE
   GLX_ACCUM_RED_SIZE
   GLX_ACCUM_GREEN_SIZE
   GLX_ACCUM_BLUE_SIZE
   GLX_ACCUM_ALPHA_SIZE
   GLX_X_VISUAL_TYPE_EXT
   GLX_TRANSPARENT_TYPE_EXT
   GLX_TRANSPARENT_INDEX_VALUE_EXT
   GLX_TRANSPARENT_RED_VALUE_EXT
   GLX_TRANSPARENT_GREEN_VALUE_EXT
   GLX_TRANSPARENT_BLUE_VALUE_EXT
   GLX_TRANSPARENT_ALPHA_VALUE_EXT
   X_PROTOCOL
   X_PROTOCOL_REVISION
   NoEventMask
   KeyPressMask
   KeyReleaseMask
   ButtonPressMask
   ButtonReleaseMask
   EnterWindowMask
   LeaveWindowMask
   PointerMotionMask
   PointerMotionHintMask
   Button1MotionMask
   Button2MotionMask
   Button3MotionMask
   Button4MotionMask
   Button5MotionMask
   ButtonMotionMask
   KeymapStateMask
   ExposureMask
   VisibilityChangeMask
   StructureNotifyMask
   ResizeRedirectMask
   SubstructureNotifyMask
   SubstructureRedirectMask
   FocusChangeMask
   PropertyChangeMask
   ColormapChangeMask
   OwnerGrabButtonMask
   KeyPress
   KeyRelease
   ButtonPress
   ButtonRelease
   MotionNotify
   EnterNotify
   LeaveNotify
   FocusIn
   FocusOut
   KeymapNotify
   Expose
   GraphicsExpose
   NoExpose
   VisibilityNotify
   CreateNotify
   DestroyNotify
   UnmapNotify
   MapNotify
   MapRequest
   ReparentNotify
   ConfigureNotify
   ConfigureRequest
   GravityNotify
   ResizeRequest
   CirculateNotify
   CirculateRequest
   PropertyNotify
   SelectionClear
   SelectionRequest
   SelectionNotify
   ColormapNotify
   ClientMessage
   MappingNotify
   LASTEvent
   ShiftMask
   LockMask
   ControlMask
   Mod1Mask
   Mod2Mask
   Mod3Mask
   Mod4Mask
   Mod5Mask
   ShiftMapIndex
   LockMapIndex
   ControlMapIndex
   Mod1MapIndex
   Mod2MapIndex
   Mod3MapIndex
   Mod4MapIndex
   Mod5MapIndex
   Button1Mask
   Button2Mask
   Button3Mask
   Button4Mask
   Button5Mask
   AnyModifier
   Button1
   Button2
   Button3
   Button4
   Button5
   NotifyNormal
   NotifyGrab
   NotifyUngrab
   NotifyWhileGrabbed
   NotifyHint
   NotifyAncestor
   NotifyVirtual
   NotifyInferior
   NotifyNonlinear
   NotifyNonlinearVirtual
   NotifyPointer
   NotifyPointerRoot
   NotifyDetailNone
   VisibilityUnobscured
   VisibilityPartiallyObscured
   VisibilityFullyObscured
   PlaceOnTop
   PlaceOnBottom
   FamilyInternet
   FamilyDECnet
   FamilyChaos
   PropertyNewValue
   PropertyDelete
   ColormapUninstalled
   ColormapInstalled
   GrabModeSync
   GrabModeAsync
   GrabSuccess
   AlreadyGrabbed
   GrabInvalidTime
   GrabNotViewable
   GrabFrozen
   AsyncPointer
   SyncPointer
   ReplayPointer
   AsyncKeyboard
   SyncKeyboard
   ReplayKeyboard
   AsyncBoth
   SyncBoth
   StaticGray
   GrayScale
   StaticColor
   PseudoColor
   TrueColor
   DirectColor
);


# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.

@oldfunctions = qw(
	glpOpenWindow
	glpMainLoop
	glpMoveResizeWindow
	glpMoveWindow
	glpResizeWindow
	glpDisplay
	glXSwapBuffers 
	XPending
	glpXNextEvent
	glpXQueryPointer

	glpFlush
	glpSolidSphere
	glpReadTex

	glpClipPlane
	glpGetClipPlane
	glpLoadMatrixf glpLoadMatrixd glpMultMatrixf glpMultMatrixd

	gluOrtho2D
	gluPerspective
	gluLookAt

	glAccum
	glAlphaFunc
	glBegin
	glBitmap
	glBlendColorEXT
	glBlendEquationEXT
	glBlendFunc
	glCallList
	glCallLists
	glClear
	glClearAccum
	glClearColor
	glClearDepth
	glClearIndex
	glClearStencil
	glClipPlane
	glColor3b
	glColor3bv
	glColor3d
	glColor3dv
	glColor3f
	glColor3fv
	glColor3i
	glColor3iv
	glColor3s
	glColor3sv
	glColor3ub
	glColor3ubv
	glColor3ui
	glColor3uiv
	glColor3us
	glColor3usv
	glColor4b
	glColor4bv
	glColor4d
	glColor4dv
	glColor4f
	glColor4fv
	glColor4i
	glColor4iv
	glColor4s
	glColor4sv
	glColor4ub
	glColor4ubv
	glColor4ui
	glColor4uiv
	glColor4us
	glColor4usv
	glColorMask
	glColorMaterial
	glConvolutionFilter1DEXT
	glConvolutionFilter2DEXT
	glConvolutionParameterfEXT
	glConvolutionParameterfvEXT
	glConvolutionParameteriEXT
	glConvolutionParameterivEXT
	glCopyConvolutionFilter1DEXT
	glCopyConvolutionFilter2DEXT
	glCopyPixels
	glCullFace
	glDeleteLists
	glDepthFunc
	glDepthMask
	glDepthRange

BleedingOpenGL.pm  view on Meta::CPAN

	glTexGendv
	glTexGenf
	glTexGenfv
	glTexGeni
	glTexGeniv
	glTexImage1D
	glTexImage2D
	glTexImage3DEXT
	glTexParameterf
	glTexParameterfv
	glTexParameteri
	glTexParameteriv
	glTexSubImage1DEXT
	glTexSubImage2DEXT
	glTexSubImage3DEXT
	glTranslated
	glTranslatef
	glVertex2d
	glVertex2dv
	glVertex2f
	glVertex2fv
	glVertex2i
	glVertex2iv
	glVertex2s
	glVertex2sv
	glVertex3d
	glVertex3dv
	glVertex3f
	glVertex3fv
	glVertex3i
	glVertex3iv
	glVertex3s
	glVertex3sv
	glVertex4d
	glVertex4dv
	glVertex4f
	glVertex4fv
	glVertex4i
	glVertex4iv
	glVertex4s
	glVertex4sv
	glViewport

	X_PROTOCOL
	X_PROTOCOL_REVISION
	NoEventMask
	KeyPressMask
	KeyReleaseMask
	ButtonPressMask
	ButtonReleaseMask
	EnterWindowMask
	LeaveWindowMask
	PointerMotionMask
	PointerMotionHintMask
	Button1MotionMask
	Button2MotionMask
	Button3MotionMask
	Button4MotionMask
	Button5MotionMask
	ButtonMotionMask
	KeymapStateMask
	ExposureMask
	VisibilityChangeMask
	StructureNotifyMask
	ResizeRedirectMask
	SubstructureNotifyMask
	SubstructureRedirectMask
	FocusChangeMask
	PropertyChangeMask
	ColormapChangeMask
	OwnerGrabButtonMask
	KeyPress
	KeyRelease
	ButtonPress
	ButtonRelease
	MotionNotify
	EnterNotify
	LeaveNotify
	FocusIn
	FocusOut
	KeymapNotify
	Expose
	GraphicsExpose
	NoExpose
	VisibilityNotify
	CreateNotify
	DestroyNotify
	UnmapNotify
	MapNotify
	MapRequest
	ReparentNotify
	ConfigureNotify
	ConfigureRequest
	GravityNotify
	ResizeRequest
	CirculateNotify
	CirculateRequest
	PropertyNotify
	SelectionClear
	SelectionRequest
	SelectionNotify
	ColormapNotify
	ClientMessage
	MappingNotify
	LASTEvent
	ShiftMask
	LockMask
	ControlMask
	Mod1Mask
	Mod2Mask
	Mod3Mask
	Mod4Mask
	Mod5Mask
	ShiftMapIndex
	LockMapIndex
	ControlMapIndex
	Mod1MapIndex
	Mod2MapIndex
	Mod3MapIndex
	Mod4MapIndex
	Mod5MapIndex
	Button1Mask
	Button2Mask
	Button3Mask
	Button4Mask
	Button5Mask
	AnyModifier
	Button1
	Button2
	Button3
	Button4
	Button5
	NotifyNormal
	NotifyGrab
	NotifyUngrab
	NotifyWhileGrabbed
	NotifyHint
	NotifyAncestor
	NotifyVirtual
	NotifyInferior
	NotifyNonlinear
	NotifyNonlinearVirtual
	NotifyPointer
	NotifyPointerRoot
	NotifyDetailNone
	VisibilityUnobscured
	VisibilityPartiallyObscured
	VisibilityFullyObscured
	PlaceOnTop
	PlaceOnBottom
	FamilyInternet
	FamilyDECnet
	FamilyChaos
	PropertyNewValue
	PropertyDelete
	ColormapUninstalled
	ColormapInstalled
	GrabModeSync
	GrabModeAsync
	GrabSuccess
	AlreadyGrabbed
	GrabInvalidTime
	GrabNotViewable
	GrabFrozen
	AsyncPointer
	SyncPointer
	ReplayPointer
	AsyncKeyboard
	SyncKeyboard
	ReplayKeyboard
	AsyncBoth
	SyncBoth
	StaticGray
	GrayScale
	StaticColor
	PseudoColor
	TrueColor
	DirectColor
);

@oldconstants = qw(
	GL_CURRENT_BIT
	GL_POINT_BIT
	GL_LINE_BIT
	GL_POLYGON_BIT
	GL_POLYGON_STIPPLE_BIT
	GL_PIXEL_MODE_BIT
	GL_LIGHTING_BIT
	GL_FOG_BIT
	GL_DEPTH_BUFFER_BIT
	GL_ACCUM_BUFFER_BIT
	GL_STENCIL_BUFFER_BIT
	GL_VIEWPORT_BIT
	GL_TRANSFORM_BIT
	GL_ENABLE_BIT
	GL_COLOR_BUFFER_BIT
	GL_HINT_BIT
	GL_EVAL_BIT
	GL_LIST_BIT
	GL_TEXTURE_BIT
	GL_SCISSOR_BIT
	GL_ALL_ATTRIB_BITS
	GL_FALSE
	GL_TRUE
	GL_POINTS
	GL_LINES
	GL_LINE_LOOP
	GL_LINE_STRIP
	GL_TRIANGLES
	GL_TRIANGLE_STRIP
	GL_TRIANGLE_FAN
	GL_QUADS
	GL_QUAD_STRIP
	GL_POLYGON
	GL_ACCUM
	GL_LOAD
	GL_RETURN

BleedingOpenGL.pm  view on Meta::CPAN

	GL_MAX_3D_TEXTURE_SIZE_EXT
	GL_DETAIL_TEXTURE_2D_SGIS
	GL_DETAIL_TEXTURE_2D_BINDING_SGIS
	GL_LINEAR_DETAIL_SGIS
	GL_LINEAR_DETAIL_ALPHA_SGIS
	GL_LINEAR_DETAIL_COLOR_SGIS
	GL_DETAIL_TEXTURE_LEVEL_SGIS
	GL_DETAIL_TEXTURE_MODE_SGIS
	GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS
	GL_MULTISAMPLE_BIT_EXT
	GL_MULTISAMPLE_SGIS
	GL_SAMPLE_ALPHA_TO_MASK_SGIS
	GL_SAMPLE_ALPHA_TO_ONE_SGIS
	GL_SAMPLE_MASK_SGIS
	GL_1PASS_SGIS
	GL_2PASS_0_SGIS
	GL_2PASS_1_SGIS
	GL_4PASS_0_SGIS
	GL_4PASS_1_SGIS
	GL_4PASS_2_SGIS
	GL_4PASS_3_SGIS
	GL_SAMPLE_BUFFERS_SGIS
	GL_SAMPLES_SGIS
	GL_SAMPLE_MASK_VALUE_SGIS
	GL_SAMPLE_MASK_INVERT_SGIS
	GL_SAMPLE_PATTERN_SGIS
	GL_LINEAR_SHARPEN_SGIS
	GL_LINEAR_SHARPEN_ALPHA_SGIS
	GL_LINEAR_SHARPEN_COLOR_SGIS
	GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS

	GLX_USE_GL
	GLX_BUFFER_SIZE
	GLX_LEVEL
	GLX_RGBA
	GLX_DOUBLEBUFFER
	GLX_STEREO
	GLX_AUX_BUFFERS
	GLX_RED_SIZE
	GLX_GREEN_SIZE
	GLX_BLUE_SIZE
	GLX_ALPHA_SIZE
	GLX_DEPTH_SIZE
	GLX_STENCIL_SIZE
	GLX_ACCUM_RED_SIZE
	GLX_ACCUM_GREEN_SIZE
	GLX_ACCUM_BLUE_SIZE
	GLX_ACCUM_ALPHA_SIZE
	GLX_SAMPLES_SGIS
	GLX_SAMPLE_BUFFER_SGIS
	GLX_BAD_SCREEN
	GLX_BAD_ATTRIBUTE
	GLX_NO_EXTENSION
	GLX_BAD_VISUAL
	GLX_BAD_CONTEXT
	GLX_BAD_VALUE
	GLX_BAD_ENUM
	GLXBadContext
	GLXBadContextState
	GLXBadDrawable
	GLXBadPixmap
	GLXBadContextTag
	GLXBadCurrentWindow
	GLXBadRenderRequest
	GLXBadLargeRequest
	GLXUnsupportedPrivateRequest
	__GLX_NUMBER_ERRORS
	__GLX_NUMBER_EVENTS
	GLX_EXTENSION_NAME
	GLX_EXTENSION_ALIAS
	GLX_VENDOR
	GLX_VERSION
	GLX_EXTENSIONS
	GLX_SGI_swap_control
	GLX_SGI_video_sync
	GLX_SGIS_multisample
	GLX_SWAP_DEFAULT_SGI
	GLX_SWAP_MUXPIPE_SGI
	GLX_SWAP_GANG_SGI
	GLX_MUXPIPE0_SGI
	GLX_MUXPIPE1_SGI
	GLX_MUXPIPE2_SGI

	GLU_VERSION_1_1
	GLU_INVALID_ENUM
	GLU_INVALID_VALUE
	GLU_OUT_OF_MEMORY
	GLU_INCOMPATIBLE_GL_VERSION
	GLU_VERSION
	GLU_EXTENSIONS
	GLU_TRUE
	GLU_FALSE
	GLU_SMOOTH
	GLU_FLAT
	GLU_NONE
	GLU_POINT
	GLU_LINE
	GLU_FILL
	GLU_SILHOUETTE
	GLU_OUTSIDE
	GLU_INSIDE
	GLU_BEGIN
	GLU_VERTEX
	GLU_END
	GLU_ERROR
	GLU_EDGE_FLAG
	GLU_CW
	GLU_CCW
	GLU_INTERIOR
	GLU_EXTERIOR
	GLU_UNKNOWN
	GLU_TESS_ERROR1
	GLU_TESS_ERROR2
	GLU_TESS_ERROR3
	GLU_TESS_ERROR4
	GLU_TESS_ERROR5
	GLU_TESS_ERROR6
	GLU_TESS_ERROR7
	GLU_TESS_ERROR8
	GLU_AUTO_LOAD_MATRIX
	GLU_CULLING

BleedingOpenGL.pm  view on Meta::CPAN

	GLU_PARAMETRIC_ERROR
	GLU_DOMAIN_DISTANCE
	GLU_MAP1_TRIM_2
	GLU_MAP1_TRIM_3
	GLU_OUTLINE_POLYGON
	GLU_OUTLINE_PATCH
	GLU_NURBS_ERROR1
	GLU_NURBS_ERROR2
	GLU_NURBS_ERROR3
	GLU_NURBS_ERROR4
	GLU_NURBS_ERROR5
	GLU_NURBS_ERROR6
	GLU_NURBS_ERROR7
	GLU_NURBS_ERROR8
	GLU_NURBS_ERROR9
	GLU_NURBS_ERROR10
	GLU_NURBS_ERROR11
	GLU_NURBS_ERROR12
	GLU_NURBS_ERROR13
	GLU_NURBS_ERROR14
	GLU_NURBS_ERROR15
	GLU_NURBS_ERROR16
	GLU_NURBS_ERROR17
	GLU_NURBS_ERROR18
	GLU_NURBS_ERROR19
	GLU_NURBS_ERROR20
	GLU_NURBS_ERROR21
	GLU_NURBS_ERROR22
	GLU_NURBS_ERROR23
	GLU_NURBS_ERROR24
	GLU_NURBS_ERROR25
	GLU_NURBS_ERROR26
	GLU_NURBS_ERROR27
	GLU_NURBS_ERROR28
	GLU_NURBS_ERROR29
	GLU_NURBS_ERROR30
	GLU_NURBS_ERROR31
	GLU_NURBS_ERROR32
	GLU_NURBS_ERROR33
	GLU_NURBS_ERROR34
	GLU_NURBS_ERROR35
	GLU_NURBS_ERROR36
	GLU_NURBS_ERROR37
);

@EXPORT = (@oldfunctions, @oldconstants);

# Other items we are prepared to export if requested
@EXPORT_OK = (@gl_extensions, @gl_func, @glu_func, @glut_func, @glx_func, @gl_const, @glu_const, @glut_const, @glx_const);

@constants = (@gl_const, @glu_const, @glut_const, @glx_const);
@functions = (@gl_func, @glu_func, @glut_func, @glx_func);

%EXPORT_TAGS = ('constants' => \@constants, 'functions' => \@functions, 'all' => \@EXPORT_OK, 'old' => \@EXPORT,
	'glconstants' => \@gl_const, 'gluconstants' => \@glu_const, 'glutconstants' => \@glut_const, 'glxconstants' => \@glx_const,
	'glfunctions' => \@gl_func, 'glufunctions' => \@glu_func, 'glutfunctions' => \@glut_func, 'glxfunctions' => \@glx_func,
	'oldfunctions' => \@oldfunctions, 'oldconstants' => \@oldconstants,
);

@rename_old = qw(
	glBitmap
	glCallLists
	glClipPlane
	glColor3bv
	glColor3dv
	glColor3fv
	glColor3iv
	glColor3sv
	glColor3ubv
	glColor3uiv
	glColor3usv
	glColor4bv
	glColor4dv
	glColor4fv
	glColor4iv
	glColor4sv
	glColor4ubv
	glColor4uiv
	glColor4usv
	glConvolutionFilter1DEXT
	glConvolutionFilter2DEXT
	glConvolutionParameterfvEXT
	glConvolutionParameterivEXT
	glDetailTexFuncSGIS
	glDrawPixels
	glEvalCoord1dv
	glEvalCoord1fv
	glEvalCoord2dv
	glEvalCoord2fv
	glFeedbackBuffer
	glFogfv
	glFogiv
	glGetBooleanv
	glGetClipPlane
	glGetConvolutionFilterEXT
	glGetConvolutionParameterfvEXT
	glGetConvolutionParameterivEXT
	glGetDetailTexFuncSGIS
	glGetDoublev
	glGetFloatv
	glGetHistogramEXT
	glGetHistogramParameterfvEXT
	glGetHistogramParameterivEXT
	glGetIntegerv
	glGetLightfv
	glGetLightiv
	glGetMapdv
	glGetMapfv
	glGetMapiv
	glGetMaterialfv
	glGetMaterialiv
	glGetMinmaxEXT
	glGetMinmaxParameterfvEXT
	glGetMinmaxParameterivEXT
	glGetPixelMapfv
	glGetPixelMapuiv
	glGetPixelMapusv
	glGetPolygonStipple
	glGetSeparableFilterEXT
	glGetSharpenTexFuncSGIS
	glGetTexEnvfv

BleedingOpenGL.pm  view on Meta::CPAN

	glRectfv
	glRectiv
	glRectsv
	glSeparableFilter2DEXT
	glSharpenTexFuncSGIS
	glTexCoord1dv
	glTexCoord1fv
	glTexCoord1iv
	glTexCoord1sv
	glTexCoord2dv
	glTexCoord2fv
	glTexCoord2iv
	glTexCoord2sv
	glTexCoord3dv
	glTexCoord3fv
	glTexCoord3iv
	glTexCoord3sv
	glTexCoord4dv
	glTexCoord4fv
	glTexCoord4iv
	glTexCoord4sv
	glTexEnvfv
	glTexEnviv
	glTexGendv
	glTexGenfv
	glTexGeniv
	glTexImage1D
	glTexImage2D
	glTexImage3DEXT
	glTexParameterfv
	glTexParameteriv
	glTexSubImage1DEXT
	glTexSubImage2DEXT
	glTexSubImage3DEXT
	glTranslated
	glTranslatef
	glVertex2dv
	glVertex2fv
	glVertex2iv
	glVertex2sv
	glVertex3dv
	glVertex3fv
	glVertex3iv
	glVertex3sv
	glVertex4dv
	glVertex4fv
	glVertex4iv
	glVertex4sv
	glViewport
);

sub AUTOLOAD {
    # This AUTOLOAD is used to 'autoload' constants from the constant()
    # XS function.  If a constant is not found then control is passed
    # to the AUTOLOAD in AutoLoader.

    # NOTE: THIS AUTOLOAD FUNCTION IS FLAWED (but is the best we can do for now).
    # Avoid old-style ``&CONST'' usage. Either remove the ``&'' or add ``()''.
    if (@_ > 0) {

	# Is it an old OpenGL-0.4 function? If so, remap it to newer variant
    local($constname);
    ($constname = $AUTOLOAD) =~ s/.*:://;
    if (grep ($_ eq $constname, @rename_old)) {
    	eval "sub $AUTOLOAD { $AUTOLOAD" . "_s(\@_) }";
    	goto &$AUTOLOAD;
    }
    
	$AutoLoader::AUTOLOAD = $AUTOLOAD;
	goto &AutoLoader::AUTOLOAD;
    }
    local($constname);
    ($constname = $AUTOLOAD) =~ s/.*:://;
    $val = constant($constname, @_ ? $_[0] : 0);
    if (not defined $val) {
	if ($! =~ /Invalid/) {
	    $AutoLoader::AUTOLOAD = $AUTOLOAD;
	    goto &AutoLoader::AUTOLOAD;
	}
	else {
	    ($pack,$file,$line) = caller;
	    die "Your vendor has not defined OpenGL macro $constname, used at $file line $line.
";
	}
    }
    eval "sub $AUTOLOAD { $val }";
    goto &$AUTOLOAD;
}

bootstrap Acme::MITHALDU::BleedingOpenGL;

*OpenGL::Array::CLONE_SKIP = sub { 1 };  # OpenGL::Array is not thread safe
*OpenGL::Matrix::CLONE_SKIP = sub { 1 };  # OpenGL::Matrix is not thread safe

# The following material is directly copied from Stan Melax's original OpenGL-0.4
# (with modifications for OS/2).

%window_defaults=(
   'x'         => 0,
   'y'         => 0,
   'width'     => 500,
   'height'    => 500,
   'parent'    => 0,
   'steal'     => 0,
   'mask'      => (_have_glx() ? StructureNotifyMask() : 0),
   'attributes'=> [],
);


sub glpOpenWindow {
        # default values
        my(%a) = @_;
        my(%p) = %window_defaults;
        foreach $k (keys(%a)){
                exists($p{$k}) || warn "Not a valid parameter to glpOpenWindow: `$k'\n";
                #print "parameter $k now ",$a{$k}," was ",$p{$k},"\n";  
                $p{$k} = $a{$k};
        }
        #
        # glpcOpenWindow() no longer exported.  Use fully qualified
        # package name or (better!) glpOpenWindow()

BleedingOpenGL.pm  view on Meta::CPAN

  return $params;
}

sub glpRestoreScreen
{
  my($params) = @_;

  glutPositionWindow($params->{original_x},$params->{original_y});
  glutReshapeWindow($params->{original_w},$params->{original_h});
  glutPostRedisplay();
}

sub glpCheckExtension
{
  my(@extensions) = @_;

  # Get/cache OpenGL Version
  if (!$gl_version)
  {
    $gl_version = glGetString(0x1F02); #GL_VERSION
    return 'Unable to retrieve OpenGL version; need context?' if (!$gl_version);
  }
  return "Not a numeric version: '$version'" if ($gl_version !~ m|^(\d+\.\d+)|);
  $gl_version = $1;

  # Get/cache OpenGL Extension Installations
  if (!scalar(%$glext_installed))
  {
    my $inst = glGetString(0x1F03); #GL_EXTENSIONS
    foreach my $ext (split(' ',$inst))
    {
      $glext_installed->{$ext} = $glext_dependencies->{$ext} || 0;
    }
  }
  if (!scalar(%$glext_installed))
  {
    return 'Unable to retrieve extensions; need context?' 
  }

  foreach my $ext (@extensions)
  {
    return "$ext not installed" if (!defined($glext_installed->{$ext}));

    # Check implementation
    my($ver,$deps) = split(';',$glext_installed->{$ext});
    return "$ext not implemented" if (!$ver);
    return "Needs at least OpenGL $ver" if ($gl_version < $ver);
    next if (!$deps);

    # Check dependencies
    foreach my $dep (split(',',$deps))
    {
      my $stat = glpCheckExtension("GL_$dep");
      return "Depends on $deps" if ($stat);
    }
  }
  return 0;
}
use Import::Into;
*OpenGL::import = sub {
   my %known = map { $_ => 1 } qw (OpenGL::Shader::Objects OpenGL::Shader::GLSL OpenGL::Shader::CG OpenGL::Shader::ARB OpenGL::Image::Magick OpenGL::Image::Targa);
   shift;
   my $target = caller;
   die "use Acme::MITHALDU::BleedingOpenGL" if !$known{$target};
   __PACKAGE__->import::into($target, @_);
};
$INC{"OpenGL.pm"} = 1;



#OpenGL::Array helper methods for normalizing names and chaining operations
@OpenGL::Matrix::ISA = 'OpenGL::Array';


1;
__END__



( run in 0.572 second using v1.01-cache-2.11-cpan-39bf76dae61 )