The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

OpenGL - v0.70

SYNOPSIS

    use OpenGL qw(:all); # exports all new functionality, without
                         # the OpenGL-0.4 compatibility functions
    
    use OpenGL qw(:glfunctions :glconstants); # exports functions and
                         # constants for using OpenGL, without exporting
			 # GLU, GLUT, or GLX stuff.
    
    use OpenGL qw(:old); # Exports much old functionality of OpenGL 0.4
    
    use OpenGL; # DEPRECATED!  Same as above.  DEPRECATED!

  See also: POGL Objects
    
    * OpenGL::Array - optimized data arrays via C pointers
    
    * OpenGL::Image - direct C pointer acces to ImageMagick image cache
    
    * OpenGL::Shader - abstracted shader interface: ARB, GLSL and Cg

PREREQUISITES

This module assumes that you have OpenGL, GLU, and some flavor of GLUT properly installed on your system. These will be names like libGL.so, libGLU.so and libglut.so for unixen, opengl32.dll and glu32.dll for MS Windows.

If used with OpenGL::Image, use v1.03 or higher.

DESCRIPTION

Naming convention:

Virtually all of the OpenGL 1.0, and 1.1 functions are available, and most of 1.2. In general, the calling sequence is identical in Perl as in C.

Most functions that have no pointer arguments are called identically in Perl as in C, and the same name is used.

Functions that use Perl array arguments and have been changed in "the obvious way" -- to take a variable number of arguments and/or to return an array -- have the the same names as their C counterparts, but with a _p suffix.

All functions that take pointers are available with their original calling syntax and a _c suffix. These are most useful when combined with the OpenGL::Array module, which lets you allocate C arrays from Perl.

A third variant, _s, exists for most pointer functions, and takes a string argument for each pointer or a reference to a Perl string containing packed data. The underlying OpenGL function will be passed a pointer to that data.

GLUT functions

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
glutSetCursor
glutSetIconTitle
glutSetKeyRepeat
glutSetMenu
glutSetOption
glutSetWindow
glutSetWindowTitle
glutShowOverlay
glutShowWindow
glutSolidCone
glutSolidCube
glutSolidCylinder
glutSolidDodecahedron
glutSolidIcosahedron
glutSolidOctahedron
glutSolidRhombicDodecahedron
glutSolidSphere
glutSolidTeapot
glutSolidTetrahedron
glutSolidTorus
glutSpaceballButtonFunc
glutSpaceballMotionFunc
glutSpaceballRotateFunc
glutSpecialFunc
glutSpecialUpFunc
glutStrokeCharacter
glutStrokeHeight
glutStrokeLength
glutStrokeString
glutStrokeWidth
glutSwapBuffers
glutTabletButtonFunc
glutTabletMotionFunc
glutTimerFunc
glutUseLayer
glutVisibilityFunc
glutWarpPointer
glutWindowStatusFunc
glutWireCone
glutWireCube
glutWireCylinder
glutWireDodecahedron
glutWireIcosahedron
glutWireOctahedron
glutWireRhombicDodecahedron
glutWireSphere
glutWireTeapot
glutWireTetrahedron
glutWireTorus

GLU functions

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
gluTessBeginCountour
gluTessBeginPolygon
gluTessCallback
gluTessEndContour
gluTessEndPolygon
gluTessNormal
gluTessProperty
gluTessVertex
gluUnProject_p

OpenGL functions

glAccum
glActiveTextureARB
glAlphaFunc
glAreTexturesResidentEXT_p
glAreTexturesResident_c
glAreTexturesResident_p
glAreTexturesResident_s
glArrayElement
glArrayElementEXT
glAttachObjectARB
glBegin
glBindAttribLocationARB
glBindBufferARB
glBindFramebufferEXT
glBindProgramARB
glBindRenderbufferEXT
glBindTexture
glBindTextureEXT
glBitmap_c
glBitmap_p
glBitmap_s
glBlendColorEXT
glBlendEquationEXT
glBlendFunc
glBufferDataARB_c
glBufferDataARB_p
glBufferDataARB_s
glBufferSubDataARB_c
glBufferSubDataARB_p
glBufferSubDataARB_s
glCallList
glCallLists_c
glCallLists_p
glCallLists_s
glCheckFramebufferStatusEXT
glClampColorARB
glClear
glClearAccum
glClearColor
glClearDepth
glClearIndex
glClearStencil
glClientActiveTextureARB
glClipPlane_c
glClipPlane_p
glClipPlane_s
glColor3b
glColor3bv_c
glColor3bv_p
glColor3bv_s
glColor3d
glColor3dv_c
glColor3dv_p
glColor3dv_s
glColor3f
glColor3fv_c
glColor3fv_p
glColor3fv_s
glColor3i
glColor3iv_c
glColor3iv_p
glColor3iv_s
glColor3s
glColor3sv_c
glColor3sv_p
glColor3sv_s
glColor3ub
glColor3ubv_c
glColor3ubv_p
glColor3ubv_s
glColor3ui
glColor3uiv_c
glColor3uiv_p
glColor3uiv_s
glColor3us
glColor3usv_c
glColor3usv_p
glColor3usv_s
glColor4b
glColor4bv_c
glColor4bv_p
glColor4bv_s
glColor4d
glColor4dv_c
glColor4dv_p
glColor4dv_s
glColor4f
glColor4fv_c
glColor4fv_p
glColor4fv_s
glColor4i
glColor4iv_c
glColor4iv_p
glColor4iv_s
glColor4s
glColor4sv_c
glColor4sv_p
glColor4sv_s
glColor4ub
glColor4ubv_c
glColor4ubv_p
glColor4ubv_s
glColor4ui
glColor4uiv_c
glColor4uiv_p
glColor4uiv_s
glColor4us
glColor4usv_c
glColor4usv_p
glColor4usv_s
glColorMask
glColorMaterial
glColorPointerEXT_c
glColorPointerEXT_p
glColorPointerEXT_s
glColorPointer_c
glColorPointer_p
glColorPointer_s
glCompileShaderARB
glCopyPixels
glCopyTexImage1D
glCopyTexImage1DEXT
glCopyTexImage2D
glCopyTexImage2DEXT
glCopyTexSubImage1D
glCopyTexSubImage1DEXT
glCopyTexSubImage2D
glCopyTexSubImage2DEXT
glCopyTexSubImage3D
glCopyTexSubImage3DEXT
glCreateProgramObjectARB
glCreateShaderObjectARB
glCullFace
glDeleteBuffersARB_c
glDeleteBuffersARB_p
glDeleteBuffersARB_s
glDeleteFramebuffersEXT_c
glDeleteFramebuffersEXT_p
glDeleteFramebuffersEXT_s
glDeleteLists
glDeleteObjectARB
glDeleteProgramsARB_c
glDeleteProgramsARB_p
glDeleteProgramsARB_s
glDeleteRenderbuffersEXT_c
glDeleteRenderbuffersEXT_p
glDeleteRenderbuffersEXT_s
glDeleteTexturesEXT_p
glDeleteTextures_c
glDeleteTextures_p
glDeleteTextures_s
glDepthFunc
glDepthMask
glDepthRange
glDetachObjectARB
glDisable
glDisableClientState
glDisableVertexAttribArrayARB
glDrawArrays
glDrawArraysEXT
glDrawBuffer
glDrawBuffersARB_c
glDrawBuffersARB_p
glDrawBuffersARB_s
glDrawBuffers_c
glDrawBuffers_p
glDrawBuffers_s
glDrawElements_c
glDrawElements_p
glDrawElements_s
glDrawPixels_c
glDrawPixels_p
glDrawPixels_s
glDrawRangeElements_c
glDrawRangeElements_p
glDrawRangeElements_s
glEdgeFlag
glEdgeFlagPointerEXT_c
glEdgeFlagPointerEXT_p
glEdgeFlagPointerEXT_s
glEdgeFlagPointer_c
glEdgeFlagPointer_p
glEdgeFlagPointer_s
glEnable
glEnableClientState
glEnableVertexAttribArrayARB
glEnd
glEndList
glEvalCoord1d
glEvalCoord1f
glEvalCoord2d
glEvalCoord2f
glEvalMesh1
glEvalMesh2
glEvalPoint1
glEvalPoint2
glFeedbackBuffer_c
glFeedbackBuffer_p -- not yet implemented
glFeedbackBuffer_s -- not yet implemented
glFinish
glFlush
glFogf
glFogfv_c
glFogfv_p
glFogfv_s
glFogi
glFogiv_c
glFogiv_p
glFogiv_s
glFramebufferRenderbufferEXT
glFramebufferTexture1DEXT
glFramebufferTexture2DEXT
glFramebufferTexture3DEXT
glFrontFace
glFrustum
glGenBuffersARB_c
glGenBuffersARB_p
glGenBuffersARB_s
glGenFramebuffersEXT_c
glGenFramebuffersEXT_p
glGenFramebuffersEXT_s
glGenLists
glGenProgramsARB_c
glGenProgramsARB_p
glGenProgramsARB_s
glGenRenderbuffersEXT_c
glGenRenderbuffersEXT_p
glGenRenderbuffersEXT_s
glGenTexturesEXT_p
glGenTextures_c
glGenTextures_p
glGenTextures_s
glGenerateMipmapEXT
glGetActiveAttribARB_c
glGetActiveAttribARB_p
glGetActiveAttribARB_s
glGetActiveUniformARB_c
glGetActiveUniformARB_p
glGetActiveUniformARB_s
glGetAttachedObjectsARB_c
glGetAttachedObjectsARB_p
glGetAttachedObjectsARB_s
glGetAttribLocationARB_c
glGetAttribLocationARB_p
glGetBooleanv_c
glGetBooleanv_p
glGetBooleanv_s
glGetBufferParameterivARB_c
glGetBufferParameterivARB_p
glGetBufferParameterivARB_s
glGetBufferPointervARB_c
glGetBufferPointervARB_p
glGetBufferPointervARB_s
glGetBufferSubDataARB_c
glGetBufferSubDataARB_p
glGetBufferSubDataARB_s
glGetClipPlane_c
glGetClipPlane_p
glGetClipPlane_s
glGetDoublev_c
glGetDoublev_p
glGetDoublev_s
glGetError
glGetFloatv_c
glGetFloatv_p
glGetFloatv_s
glGetFramebufferAttachmentParameterivEXT_c
glGetFramebufferAttachmentParameterivEXT_s
glGetGLhandleARB
glGetInfoLogARB_c
glGetInfoLogARB_p
glGetIntegerv_c
glGetIntegerv_p
glGetIntegerv_s
glGetLightfv_c
glGetLightfv_p
glGetLightfv_s
glGetLightiv_c
glGetLightiv_p
glGetLightiv_s
glGetMapdv_c
glGetMapdv_p
glGetMapdv_s
glGetMapfv_c
glGetMapfv_p
glGetMapfv_s
glGetMapiv_c
glGetMapiv_p
glGetMapiv_s
glGetMaterialfv_c
glGetMaterialfv_p
glGetMaterialfv_s
glGetMaterialiv_c
glGetMaterialiv_p
glGetMaterialiv_s
glGetObjectParameterfvARB_c
glGetObjectParameterfvARB_p
glGetObjectParameterfvARB_s
glGetObjectParameterivARB_c
glGetObjectParameterivARB_p
glGetObjectParameterivARB_s
glGetPixelMapfv_c
glGetPixelMapfv_p
glGetPixelMapfv_s
glGetPixelMapuiv_c
glGetPixelMapuiv_p
glGetPixelMapuiv_s
glGetPixelMapusv_c
glGetPixelMapusv_p
glGetPixelMapusv_s
glGetPointerv_c
glGetPointerv_p
glGetPointerv_s
glGetPolygonStipple_c
glGetPolygonStipple_p
glGetPolygonStipple_s
glGetProgramEnvParameterdvARB_c
glGetProgramEnvParameterdvARB_p
glGetProgramEnvParameterdvARB_s
glGetProgramEnvParameterfvARB_c
glGetProgramEnvParameterfvARB_p
glGetProgramEnvParameterfvARB_s
glGetProgramLocalParameterdvARB_c
glGetProgramLocalParameterdvARB_p
glGetProgramLocalParameterdvARB_s
glGetProgramLocalParameterfvARB_c
glGetProgramLocalParameterfvARB_p
glGetProgramLocalParameterfvARB_s
glGetProgramStringARB_c
glGetProgramStringARB_p
glGetProgramStringARB_s
glGetProgramivARB_c
glGetProgramivARB_p
glGetProgramivARB_s
glGetRenderbufferParameterivEXT_c
glGetRenderbufferParameterivEXT_s
glGetShaderSourceARB_c
glGetShaderSourceARB_p
glGetString
glGetTexEnvfv_c
glGetTexEnvfv_p
glGetTexEnvfv_s
glGetTexEnviv_c
glGetTexEnviv_p
glGetTexEnviv_s
glGetTexGendv_c
glGetTexGendv_p
glGetTexGendv_s
glGetTexGenfv_c
glGetTexGenfv_p
glGetTexGenfv_s
glGetTexGeniv_c
glGetTexGeniv_p
glGetTexGeniv_s
glGetTexImage_c
glGetTexImage_p
glGetTexImage_s
glGetTexLevelParameterfv_c
glGetTexLevelParameterfv_p
glGetTexLevelParameterfv_s
glGetTexLevelParameteriv_c
glGetTexLevelParameteriv_p
glGetTexLevelParameteriv_s
glGetTexParameterfv_c
glGetTexParameterfv_p
glGetTexParameterfv_s
glGetTexParameteriv_c
glGetTexParameteriv_p
glGetTexParameteriv_s
glGetUniformLocationARB_c
glGetUniformLocationARB_p
glGetUniformfvARB_c
glGetUniformfvARB_p
glGetUniformivARB_c
glGetUniformivARB_p
glGetVertexAttribPointervARB_c
glGetVertexAttribdvARB_c
glGetVertexAttribdvARB_p
glGetVertexAttribdvARB_s
glGetVertexAttribfvARB_c
glGetVertexAttribfvARB_p
glGetVertexAttribfvARB_s
glGetVertexAttribivARB_c
glGetVertexAttribivARB_p
glGetVertexAttribivARB_s
glHint
glIndexMask
glIndexPointerEXT_c
glIndexPointerEXT_p
glIndexPointerEXT_s
glIndexPointer_c
glIndexd
glIndexi
glInitNames
glInterleavedArrays_c
glIsBufferARB
glIsEnabled
glIsFramebufferEXT
glIsList
glIsProgramARB
glIsRenderbufferEXT
glIsTexture
glIsTextureEXT
glLightModelf
glLightModelfv_c
glLightModelfv_p
glLightModelfv_s
glLightModeli
glLightModeliv_c
glLightModeliv_p
glLightModeliv_s
glLightf
glLightfv_c
glLightfv_p
glLightfv_s
glLighti
glLightiv_c
glLightiv_p
glLightiv_s
glLineStipple
glLineWidth
glLinkProgramARB
glListBase
glLoadIdentity
glLoadMatrixd_c
glLoadMatrixd_p
glLoadMatrixd_s
glLoadMatrixf_c
glLoadMatrixf_p
glLoadMatrixf_s
glLoadName
glLogicOp
glMap1d_c
glMap1d_p
glMap1d_s
glMap1f_c
glMap1f_p
glMap1f_s
glMap2d_c
glMap2d_p
glMap2d_s
glMap2f_c
glMap2f_p
glMap2f_s
glMapBufferARB_c
glMapBufferARB_p
glMapGrid1d
glMapGrid1f
glMapGrid2d
glMapGrid2f
glMaterialf
glMaterialfv_c
glMaterialfv_p
glMaterialfv_s
glMateriali
glMaterialiv_c
glMaterialiv_p
glMaterialiv_s
glMatrixMode
glMultMatrixd_p
glMultMatrixf_p
glMultiTexCoord1dARB
glMultiTexCoord1dvARB_c
glMultiTexCoord1dvARB_c
glMultiTexCoord1dvARB_c
glMultiTexCoord1fARB
glMultiTexCoord1fvARB_c
glMultiTexCoord1fvARB_c
glMultiTexCoord1fvARB_c
glMultiTexCoord1iARB
glMultiTexCoord1ivARB_c
glMultiTexCoord1ivARB_c
glMultiTexCoord1ivARB_c
glMultiTexCoord1sARB
glMultiTexCoord1svARB_c
glMultiTexCoord1svARB_c
glMultiTexCoord1svARB_c
glMultiTexCoord2dARB
glMultiTexCoord2dvARB_c
glMultiTexCoord2dvARB_c
glMultiTexCoord2dvARB_c
glMultiTexCoord2fARB
glMultiTexCoord2fvARB_c
glMultiTexCoord2fvARB_c
glMultiTexCoord2fvARB_c
glMultiTexCoord2iARB
glMultiTexCoord2ivARB_c
glMultiTexCoord2ivARB_c
glMultiTexCoord2ivARB_c
glMultiTexCoord2sARB
glMultiTexCoord2svARB_c
glMultiTexCoord2svARB_c
glMultiTexCoord2svARB_c
glMultiTexCoord3dARB
glMultiTexCoord3dvARB_c
glMultiTexCoord3dvARB_c
glMultiTexCoord3dvARB_c
glMultiTexCoord3fARB
glMultiTexCoord3fvARB_c
glMultiTexCoord3fvARB_c
glMultiTexCoord3fvARB_c
glMultiTexCoord3iARB
glMultiTexCoord3ivARB_c
glMultiTexCoord3ivARB_c
glMultiTexCoord3ivARB_c
glMultiTexCoord3sARB
glMultiTexCoord3svARB_c
glMultiTexCoord3svARB_c
glMultiTexCoord3svARB_c
glMultiTexCoord4dARB
glMultiTexCoord4dvARB_c
glMultiTexCoord4dvARB_c
glMultiTexCoord4dvARB_c
glMultiTexCoord4fARB
glMultiTexCoord4fvARB_c
glMultiTexCoord4fvARB_c
glMultiTexCoord4fvARB_c
glMultiTexCoord4iARB
glMultiTexCoord4ivARB_c
glMultiTexCoord4ivARB_c
glMultiTexCoord4ivARB_c
glMultiTexCoord4sARB
glMultiTexCoord4svARB_c
glMultiTexCoord4svARB_c
glMultiTexCoord4svARB_c
glNewList
glNormal3b
glNormal3bv_c
glNormal3bv_p
glNormal3bv_s
glNormal3d
glNormal3dv_c
glNormal3dv_p
glNormal3dv_s
glNormal3f
glNormal3fv_c
glNormal3fv_p
glNormal3fv_s
glNormal3i
glNormal3iv_c
glNormal3iv_p
glNormal3iv_s
glNormal3s
glNormal3sv_c
glNormal3sv_p
glNormal3sv_s
glNormalPointerEXT_c
glNormalPointerEXT_p
glNormalPointerEXT_s
glNormalPointer_c
glOrtho
glPassThrough
glPixelMapfv_c
glPixelMapfv_p
glPixelMapfv_s
glPixelMapuiv_c
glPixelMapuiv_p
glPixelMapuiv_s
glPixelMapusv_c
glPixelMapusv_p
glPixelMapusv_s
glPixelStoref
glPixelStorei
glPixelTransferf
glPixelTransferi
glPixelZoom
glPointParameterfARB
glPointParameterfvARB_c
glPointParameterfvARB_p
glPointParameterfvARB_s
glPointSize
glPolygonMode
glPolygonOffset
glPolygonOffsetEXT
glPolygonStipple_c
glPolygonStipple_p
glPolygonStipple_s
glPopAttrib
glPopClientAttrib
glPopMatrix
glPopName
glPrioritizeTexturesEXT_p
glPrioritizeTextures_c
glPrioritizeTextures_p
glPrioritizeTextures_s
glProgramEnvParameter4dARB
glProgramEnvParameter4dvARB_c
glProgramEnvParameter4dvARB_p
glProgramEnvParameter4dvARB_s
glProgramEnvParameter4fARB
glProgramEnvParameter4fvARB_c
glProgramEnvParameter4fvARB_p
glProgramEnvParameter4fvARB_s
glProgramLocalParameter4dARB
glProgramLocalParameter4dvARB_c
glProgramLocalParameter4dvARB_p
glProgramLocalParameter4dvARB_s
glProgramLocalParameter4fARB
glProgramLocalParameter4fvARB_c
glProgramLocalParameter4fvARB_p
glProgramLocalParameter4fvARB_s
glProgramStringARB_c
glProgramStringARB_p
glProgramStringARB_s
glPushAttrib
glPushClientAttrib
glPushMatrix
glPushName
glRasterPos2d
glRasterPos2dv_c
glRasterPos2dv_p
glRasterPos2dv_s
glRasterPos2f
glRasterPos2fv_c
glRasterPos2fv_p
glRasterPos2fv_s
glRasterPos2i
glRasterPos2iv_c
glRasterPos2iv_p
glRasterPos2iv_s
glRasterPos2s
glRasterPos2sv_c
glRasterPos2sv_p
glRasterPos2sv_s
glRasterPos3d
glRasterPos3dv_c
glRasterPos3dv_p
glRasterPos3dv_s
glRasterPos3f
glRasterPos3fv_c
glRasterPos3fv_p
glRasterPos3fv_s
glRasterPos3i
glRasterPos3iv_c
glRasterPos3iv_p
glRasterPos3iv_s
glRasterPos3s
glRasterPos3sv_c
glRasterPos3sv_p
glRasterPos3sv_s
glRasterPos4d
glRasterPos4dv_c
glRasterPos4dv_p
glRasterPos4dv_s
glRasterPos4f
glRasterPos4fv_c
glRasterPos4fv_p
glRasterPos4fv_s
glRasterPos4i
glRasterPos4iv_c
glRasterPos4iv_p
glRasterPos4iv_s
glRasterPos4s
glRasterPos4sv_c
glRasterPos4sv_p
glRasterPos4sv_s
glReadBuffer
glReadPixels_c
glReadPixels_p
glReadPixels_s
glRectd
glRectdv_c
glRectdv_s
glRectf
glRectfv_c
glRectfv_s
glRecti
glRectiv_c
glRectiv_s
glRects
glRectsv_c
glRectsv_s
glRenderMode
glRenderbufferStorageEXT
glResizeBuffersMESA
glRotated
glRotatef
glSampleCoverageARB
glScaled
glScalef
glScissor
glSelectBuffer_c
glShadeModel
glShaderSourceARB_c
glShaderSourceARB_p
glStencilFunc
glStencilMask
glStencilOp
glTexCoord1d
glTexCoord1dv_c
glTexCoord1dv_p
glTexCoord1dv_s
glTexCoord1f
glTexCoord1fv_c
glTexCoord1fv_p
glTexCoord1fv_s
glTexCoord1i
glTexCoord1iv_c
glTexCoord1iv_p
glTexCoord1iv_s
glTexCoord1s
glTexCoord1sv_c
glTexCoord1sv_p
glTexCoord1sv_s
glTexCoord2d
glTexCoord2dv_c
glTexCoord2dv_p
glTexCoord2dv_s
glTexCoord2f
glTexCoord2fv_c
glTexCoord2fv_p
glTexCoord2fv_s
glTexCoord2i
glTexCoord2iv_c
glTexCoord2iv_p
glTexCoord2iv_s
glTexCoord2s
glTexCoord2sv_c
glTexCoord2sv_p
glTexCoord2sv_s
glTexCoord3d
glTexCoord3dv_c
glTexCoord3dv_p
glTexCoord3dv_s
glTexCoord3f
glTexCoord3fv_c
glTexCoord3fv_p
glTexCoord3fv_s
glTexCoord3i
glTexCoord3iv_c
glTexCoord3iv_p
glTexCoord3iv_s
glTexCoord3s
glTexCoord3sv_c
glTexCoord3sv_p
glTexCoord3sv_s
glTexCoord4d
glTexCoord4dv_c
glTexCoord4dv_p
glTexCoord4dv_s
glTexCoord4f
glTexCoord4fv_c
glTexCoord4fv_p
glTexCoord4fv_s
glTexCoord4i
glTexCoord4iv_c
glTexCoord4iv_p
glTexCoord4iv_s
glTexCoord4s
glTexCoord4sv_c
glTexCoord4sv_p
glTexCoord4sv_s
glTexCoordPointerEXT_c
glTexCoordPointerEXT_p
glTexCoordPointerEXT_s
glTexCoordPointer_c
glTexEnvf
glTexEnvfv_p
glTexEnvfv_s
glTexEnvi
glTexEnviv_p
glTexEnviv_s
glTexGend
glTexGendv_c
glTexGendv_p
glTexGendv_s
glTexGenf
glTexGenfv_c
glTexGenfv_p
glTexGenfv_s
glTexGeni
glTexGeniv_c
glTexGeniv_p
glTexGeniv_s
glTexImage1D_c
glTexImage1D_p
glTexImage1D_s
glTexImage2D_c
glTexImage2D_p
glTexImage2D_s
glTexImage3DEXT_c
glTexImage3DEXT_p
glTexImage3DEXT_s
glTexImage3D_c
glTexImage3D_p
glTexImage3D_s
glTexParameterf
glTexParameterfv_c
glTexParameterfv_p
glTexParameterfv_s
glTexParameteri
glTexParameteriv_c
glTexParameteriv_p
glTexParameteriv_s
glTexSubImage1DEXT_c
glTexSubImage1DEXT_p
glTexSubImage1DEXT_s
glTexSubImage1D_c
glTexSubImage1D_p
glTexSubImage1D_s
glTexSubImage2DEXT_c
glTexSubImage2DEXT_p
glTexSubImage2DEXT_s
glTexSubImage2D_c
glTexSubImage2D_p
glTexSubImage2D_s
glTexSubImage3D_c
glTexSubImage3D_p
glTexSubImage3D_s
glTranslated
glTranslatef
glUniform1fARB
glUniform1fvARB_c
glUniform1fvARB_p
glUniform1fvARB_s
glUniform1iARB
glUniform1ivARB_c
glUniform1ivARB_p
glUniform1ivARB_s
glUniform2fARB
glUniform2fvARB_c
glUniform2fvARB_p
glUniform2fvARB_s
glUniform2iARB
glUniform2ivARB_c
glUniform2ivARB_p
glUniform2ivARB_s
glUniform3fARB
glUniform3fvARB_c
glUniform3fvARB_p
glUniform3fvARB_s
glUniform3iARB
glUniform3ivARB_c
glUniform3ivARB_p
glUniform3ivARB_s
glUniform4fARB
glUniform4fvARB_c
glUniform4fvARB_p
glUniform4fvARB_s
glUniform4iARB
glUniform4ivARB_c
glUniform4ivARB_p
glUniform4ivARB_s
glUniformMatrix2fvARB_c
glUniformMatrix2fvARB_p
glUniformMatrix2fvARB_s
glUniformMatrix3fvARB_c
glUniformMatrix3fvARB_p
glUniformMatrix3fvARB_s
glUniformMatrix4fvARB_c
glUniformMatrix4fvARB_p
glUniformMatrix4fvARB_s
glUnmapBufferARB
glUseProgramObjectARB
glValidateProgramARB
glVertex2d
glVertex2dv_c
glVertex2dv_p
glVertex2dv_s
glVertex2f
glVertex2fv_c
glVertex2fv_p
glVertex2fv_s
glVertex2i
glVertex2iv_c
glVertex2iv_p
glVertex2iv_s
glVertex2s
glVertex2sv_c
glVertex2sv_p
glVertex2sv_s
glVertex3d
glVertex3dv_c
glVertex3dv_p
glVertex3dv_s
glVertex3f
glVertex3fv_c
glVertex3fv_p
glVertex3fv_s
glVertex3i
glVertex3iv_c
glVertex3iv_p
glVertex3iv_s
glVertex3s
glVertex3sv_c
glVertex3sv_p
glVertex3sv_s
glVertex4d
glVertex4dv_c
glVertex4dv_p
glVertex4dv_s
glVertex4f
glVertex4fv_c
glVertex4fv_p
glVertex4fv_s
glVertex4i
glVertex4iv_c
glVertex4iv_p
glVertex4iv_s
glVertex4s
glVertex4sv_c
glVertex4sv_p
glVertex4sv_s
glVertexAttrib1dARB
glVertexAttrib1dvARB_c
glVertexAttrib1dvARB_p
glVertexAttrib1dvARB_s
glVertexAttrib1fARB
glVertexAttrib1fvARB_c
glVertexAttrib1fvARB_p
glVertexAttrib1fvARB_s
glVertexAttrib1sARB
glVertexAttrib1svARB_c
glVertexAttrib1svARB_p
glVertexAttrib1svARB_s
glVertexAttrib2dARB
glVertexAttrib2dvARB_c
glVertexAttrib2dvARB_p
glVertexAttrib2dvARB_s
glVertexAttrib2fARB
glVertexAttrib2fvARB_c
glVertexAttrib2fvARB_p
glVertexAttrib2fvARB_s
glVertexAttrib2sARB
glVertexAttrib2svARB_c
glVertexAttrib2svARB_p
glVertexAttrib2svARB_s
glVertexAttrib3dARB
glVertexAttrib3dvARB_c
glVertexAttrib3dvARB_p
glVertexAttrib3dvARB_s
glVertexAttrib3fARB
glVertexAttrib3fvARB_c
glVertexAttrib3fvARB_p
glVertexAttrib3fvARB_s
glVertexAttrib3sARB
glVertexAttrib3svARB_c
glVertexAttrib3svARB_p
glVertexAttrib3svARB_s
glVertexAttrib4NbvARB_c
glVertexAttrib4NbvARB_p
glVertexAttrib4NbvARB_s
glVertexAttrib4NivARB_c
glVertexAttrib4NivARB_p
glVertexAttrib4NivARB_s
glVertexAttrib4NsvARB_c
glVertexAttrib4NsvARB_p
glVertexAttrib4NsvARB_s
glVertexAttrib4NubARB
glVertexAttrib4NubvARB_c
glVertexAttrib4NubvARB_p
glVertexAttrib4NubvARB_s
glVertexAttrib4NuivARB_c
glVertexAttrib4NuivARB_p
glVertexAttrib4NuivARB_s
glVertexAttrib4NusvARB_c
glVertexAttrib4NusvARB_p
glVertexAttrib4NusvARB_s
glVertexAttrib4bvARB_c
glVertexAttrib4bvARB_p
glVertexAttrib4bvARB_s
glVertexAttrib4dARB
glVertexAttrib4dvARB_c
glVertexAttrib4dvARB_p
glVertexAttrib4dvARB_s
glVertexAttrib4fARB
glVertexAttrib4fvARB_c
glVertexAttrib4fvARB_p
glVertexAttrib4fvARB_s
glVertexAttrib4ivARB_c
glVertexAttrib4ivARB_p
glVertexAttrib4ivARB_s
glVertexAttrib4sARB
glVertexAttrib4svARB_c
glVertexAttrib4svARB_p
glVertexAttrib4svARB_s
glVertexAttrib4ubvARB_c
glVertexAttrib4ubvARB_p
glVertexAttrib4ubvARB_s
glVertexAttrib4uivARB_c
glVertexAttrib4uivARB_p
glVertexAttrib4uivARB_s
glVertexAttrib4usvARB_c
glVertexAttrib4usvARB_p
glVertexAttrib4usvARB_s
glVertexAttribPointerARB_c
glVertexPointerEXT_c
glVertexPointerEXT_p
glVertexPointerEXT_s
glVertexPointer_c
glVertexPointer_p
glVertexPointer_s
glViewport
glWindowPos2dMESA
glWindowPos2iMESA
glWindowPos3dMESA
glWindowPos3iMESA
glWindowPos4dMESA
glWindowPos4iMESA

glpCheckExtension
glpFullScreen
glpHasGLUT
glpRestoreScreen

GLX functions

GLX is only supported to the degree that Stan's original module supported it. Without an entire X binding it is of limited use, and I recommend using GLUT/FreeGLUT instead.

XPending              (X11 only)
glXSwapBuffers        (X11 only)
glpXNextEvent         (X11 only)
glpXQueryPointer      (X11 only)

glpcOpenWindow	(Not exported, must use fully qualified package name)

Old functions

AlreadyGrabbed
AnyModifier
AsyncBoth
AsyncKeyboard
AsyncPointer
Button1
Button1Mask
Button1MotionMask
Button2
Button2Mask
Button2MotionMask
Button3
Button3Mask
Button3MotionMask
Button4
Button4Mask
Button4MotionMask
Button5
Button5Mask
Button5MotionMask
ButtonMotionMask
ButtonPress
ButtonPressMask
ButtonRelease
ButtonReleaseMask
CirculateNotify
CirculateRequest
ClientMessage
ColormapChangeMask
ColormapInstalled
ColormapNotify
ColormapUninstalled
ConfigureNotify
ConfigureRequest
ControlMapIndex
ControlMask
CreateNotify
DestroyNotify
DirectColor
EnterNotify
EnterWindowMask
Expose
ExposureMask
FamilyChaos
FamilyDECnet
FamilyInternet
FocusChangeMask
FocusIn
FocusOut
GrabFrozen
GrabInvalidTime
GrabModeAsync
GrabModeSync
GrabNotViewable
GrabSuccess
GraphicsExpose
GravityNotify
GrayScale
KeyPress
KeyPressMask
KeyRelease
KeyReleaseMask
KeymapNotify
KeymapStateMask
LASTEvent
LeaveNotify
LeaveWindowMask
LockMapIndex
LockMask
MapNotify
MapRequest
MappingNotify
Mod1MapIndex
Mod1Mask
Mod2MapIndex
Mod2Mask
Mod3MapIndex
Mod3Mask
Mod4MapIndex
Mod4Mask
Mod5MapIndex
Mod5Mask
MotionNotify
NoEventMask
NoExpose
NotifyAncestor
NotifyDetailNone
NotifyGrab
NotifyHint
NotifyInferior
NotifyNonlinear
NotifyNonlinearVirtual
NotifyNormal
NotifyPointer
NotifyPointerRoot
NotifyUngrab
NotifyVirtual
NotifyWhileGrabbed
OwnerGrabButtonMask
PlaceOnBottom
PlaceOnTop
PointerMotionHintMask
PointerMotionMask
PropertyChangeMask
PropertyDelete
PropertyNewValue
PropertyNotify
PseudoColor
ReparentNotify
ReplayKeyboard
ReplayPointer
ResizeRedirectMask
ResizeRequest
SelectionClear
SelectionNotify
SelectionRequest
ShiftMapIndex
ShiftMask
StaticColor
StaticGray
StructureNotifyMask
SubstructureNotifyMask
SubstructureRedirectMask
SyncBoth
SyncKeyboard
SyncPointer
TrueColor
UnmapNotify
VisibilityChangeMask
VisibilityFullyObscured
VisibilityNotify
VisibilityPartiallyObscured
VisibilityUnobscured
XPending
X_PROTOCOL
X_PROTOCOL_REVISION
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
glDetailTexFuncSGIS
glDisable
glDrawBuffer
glDrawPixels
glEdgeFlag
glEdgeFlagv
glEnable
glEnd
glEndList
glEvalCoord1d
glEvalCoord1dv
glEvalCoord1f
glEvalCoord1fv
glEvalCoord2d
glEvalCoord2dv
glEvalCoord2f
glEvalCoord2fv
glEvalMesh1
glEvalMesh2
glEvalPoint1
glEvalPoint2
glFeedbackBuffer
glFinish
glFlush
glFogf
glFogfv
glFogi
glFogiv
glFrontFace
glFrustum
glGenLists
glGetBooleanv
glGetClipPlane
glGetConvolutionFilterEXT
glGetConvolutionParameterfvEXT
glGetConvolutionParameterivEXT
glGetDetailTexFuncSGIS
glGetDoublev
glGetError
glGetFloatv
glGetHistogramEXT
glGetHistogramParameterfvEXT
glGetHistogramParameterivEXT
glGetIntegerv
glGetLightfv
glGetLightiv
glGetMapdv
glGetMapfv
glGetMapiv
glGetMaterialfv
glGetMaterialiv
glGetMinmaxEXT
glGetMinmaxParameterfvEXT
glGetMinmaxParameterivEXT
glGetPixelMapfv
glGetPixelMapuiv
glGetPixelMapusv
glGetPolygonStipple
glGetSeparableFilterEXT
glGetSharpenTexFuncSGIS
glGetTexEnvfv
glGetTexEnviv
glGetTexGendv
glGetTexGenfv
glGetTexGeniv
glGetTexImage
glGetTexLevelParameterfv
glGetTexLevelParameteriv
glGetTexParameterfv
glGetTexParameteriv
glHint
glHistogramEXT
glIndexMask
glIndexd
glIndexdv
glIndexf
glIndexfv
glIndexi
glIndexiv
glIndexs
glIndexsv
glInitNames
glIsEnabled
glIsList
glLightModelf
glLightModelfv
glLightModeli
glLightModeliv
glLightf
glLightfv
glLighti
glLightiv
glLineStipple
glLineWidth
glListBase
glLoadIdentity
glLoadMatrixd
glLoadMatrixf
glLoadName
glLogicOp
glMap1d
glMap1f
glMap2d
glMap2f
glMapGrid1d
glMapGrid1f
glMapGrid2d
glMapGrid2f
glMaterialf
glMaterialfv
glMateriali
glMaterialiv
glMatrixMode
glMinmaxEXT
glMultMatrixd
glMultMatrixf
glNewList
glNormal3b
glNormal3bv
glNormal3d
glNormal3dv
glNormal3f
glNormal3fv
glNormal3i
glNormal3iv
glNormal3s
glNormal3sv
glOrtho
glPassThrough
glPixelMapfv
glPixelMapuiv
glPixelMapusv
glPixelStoref
glPixelStorei
glPixelTransferf
glPixelTransferi
glPixelZoom
glPointSize
glPolygonMode
glPolygonOffsetEXT
glPolygonStipple
glPopAttrib
glPopMatrix
glPopName
glPushAttrib
glPushMatrix
glPushName
glRasterPos2d
glRasterPos2dv
glRasterPos2f
glRasterPos2fv
glRasterPos2i
glRasterPos2iv
glRasterPos2s
glRasterPos2sv
glRasterPos3d
glRasterPos3dv
glRasterPos3f
glRasterPos3fv
glRasterPos3i
glRasterPos3iv
glRasterPos3s
glRasterPos3sv
glRasterPos4d
glRasterPos4dv
glRasterPos4f
glRasterPos4fv
glRasterPos4i
glRasterPos4iv
glRasterPos4s
glRasterPos4sv
glReadBuffer
glReadPixels
glRectd
glRectdv
glRectf
glRectfv
glRecti
glRectiv
glRects
glRectsv
glRenderMode
glResetHistogramEXT
glResetMinmaxEXT
glRotated
glRotatef
glSampleMaskSGIS
glSamplePatternSGIS
glScaled
glScalef
glScissor
glSelectBuffer
glSeparableFilter2DEXT
glShadeModel
glSharpenTexFuncSGIS
glStencilFunc
glStencilMask
glStencilOp
glTagSampleBufferSGIX
glTexCoord1d
glTexCoord1dv
glTexCoord1f
glTexCoord1fv
glTexCoord1i
glTexCoord1iv
glTexCoord1s
glTexCoord1sv
glTexCoord2d
glTexCoord2dv
glTexCoord2f
glTexCoord2fv
glTexCoord2i
glTexCoord2iv
glTexCoord2s
glTexCoord2sv
glTexCoord3d
glTexCoord3dv
glTexCoord3f
glTexCoord3fv
glTexCoord3i
glTexCoord3iv
glTexCoord3s
glTexCoord3sv
glTexCoord4d
glTexCoord4dv
glTexCoord4f
glTexCoord4fv
glTexCoord4i
glTexCoord4iv
glTexCoord4s
glTexCoord4sv
glTexEnvf
glTexEnvfv
glTexEnvi
glTexEnviv
glTexGend
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
glXSwapBuffers        (X11 only)
gluLookAt
gluOrtho2D
gluPerspective

"Perl" GL access shortcuts

glpClipPlane
glpDisplay            (X11 only)
glpFlush
glpFullScreen
glpGetClipPlane
glpLoadMatrixd
glpLoadMatrixf
glpMainLoop
glpMoveResizeWindow   (X11 only)
glpMoveWindow         (X11 only)
glpMultMatrixd
glpMultMatrixf
glpOpenWindow         (X11 only)
glpPrintString	(from PDL)
glpRasterFont 	(from PDL, X11 only)
glpReadTex
glpResizeWindow       (X11 only)
glpRestoreScreen
glpSetDebug		(from PDL)
glpSolidSphere
glpXNextEvent         (X11 only)
glpXQueryPointer      (X11 only)

glpOpenWindow() provides the preferred interface to glpcOpenWindow(). Both these functions have a special (mis)feature to handle cases when one does not need double buffering: if no GLX_DOUBLEBUFFER is specified, and creation of a "visual" fails, the creation is retried with GLX_DOUBLEBUFFER specified (to make it easier to support implementation which do not have SINGLEBUFFER visuals - which is typical on Suns).

Since "finishing drawing" with and without GLX_DOUBLEBUFFER should be done in different ways, a convenience function glpFlush() is provided; it operates the same as glFlush() if no enable-GLX_DOUBLEBUFFER hack was need, otherwise it acts as glFlush() followed by glXSwapBuffers(). This function should be used only in the case no GLX_DOUBLEBUFFER attribute was given to glpOpenWindow().

Additionally, in absence of GLUT, glpSolidSphere() is aliased to glutSolidSphere(), to make writing simple portable backward-compatible scripts easier.

Historical Compatibility

The original OpenGL-0.4 library, written by Stan Melax, was releaseed to CPAN on 16-Feb-1996.

The OpenGL-0.5 library, by Kenneth Albanowski, was released to CPAN on 24-Apr-1999.

Ilya Zakharevich released OpenGL-0.53 on 05-Nov-2000 and and OpenGL-0.54 on 26-May-2002.

Bob Free has been responsible for the OpenGL module development starting with OpenGL-0.55 on 26-Apr-2007.

Chris Marshall has been responsible for the OpenGL module development starting with OpenGL-0.58 on 06-Sep-2009.

Compatibility with these earlier libraries is in a state of flux with with on-going work to refactor the Perl OpenGL module to improve support for other GUI toolkits with Perl bindings and to update the version of OpenGL API supported.

EXPORTS

The following tags can be used to selectively import symbols into the main namespace.

:all

Exports all symbols (constants and functions).

:functions

Exports all functions.

:constants

Exports all constants.

:glfunctions

Exports all gl* functions.

:glconstants

Exports all symbols needed for the gl* functions.

:glufunctions

Exports all glu* functions.

:gluconstants

Exports all symbols needed for the glu* functions.

:glutfunctions

Exports all glut* functions.

:glutconstants

Exports all symbols needed for the glut* functions.

:glxfunctions

Exports all glx* functions. No longer exports glpcOpenWindow().

:glxconstants

Exports all symbols needed for the glx* functions.

:old

Exports all old functions and constants.

:oldfunctions

Exports all old functions.

:oldconstants

Exports all symbols needed for the old functions.

AUTHORS

Primary OpenGL Maintainer Chris Marshall (PAUSE id CHM) Co-Maintainer: Bob "grafman" Free - http://graphcomp.com/opengl

Original Author: Stan Melax

Primary author of 0.50: Kenneth Albanowski; derived from Stan's OpenGL 0.4, with pinches of Cass Everitt's OpenGL work.

Copyright (c) 1998,1999 Kenneth Albanowski. All rights reserved.

Copyright (c) 2000 Ilya Zakharevich. All rights reserved.

Windows port: Jean-Louis Morel - http://www.bribes.org/perl/wopengl.html

Primary author of 0.55+: Bob Free; added support for 52 OpenGL extensions, including FBO, VBO and Vertex/Fragment Programs.

Copyright (c) 2007 Bob Free. All rights reserved.

Contributing developer of 0.57+: Chris Marshall: cygwin port, PDL integration, release support. Copyright (c) 2009 Christopher Marshall. All rights reserved.

MacOSX port: Sherm Pendley

FreeBSD support: Nomura-san

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

DISTRIBUTIONS

POGL Project site: http://sourceforge.net/projects/pogl/

OTHER DOCUMENTATION

Documentation, tips, sample source, benchmarks and available at http://graphcomp.com/opengl.

SOURCE

CPAN: http://search.cpan.org/~chm/
GIT:  git clone git://git.code.sf.net/p/pogl/code pogl-code (Read only)
TARBALL: http://sourceforge.net/p/pogl/code/ci/master/tarball

WINDOWS BINARIES

For 32-bit perls 5.8.x and later:
  ppm install http://www.sisyphusion.tk/ppm/OpenGL.ppd

For 64-bit perls 5.8.x and later:
  ppm install http://www.sisyphusion.tk/ppm/OpenGL.ppd