OpenGL(3)

πŸ¦‹ OpenGL(3) πŸ¦‹

okay so bestie, this is the OpenGL(3) page from User Contributed Perl Documentation β€” yes, the manual name is OpenGL(3), and it's all about the Perl OpenGL module. We're doing this in six parts; this is part one, and it's lowkey a lot, but we're gonna slay it together. πŸ’…


✨ NAME ✨

OpenGL - v0.70 β€” that's the module and the version, periodt. πŸŽ€


🌸 SYNOPSIS 🌸

Here's how you load this thing, and the vibes change depending on what you import:

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!
🚨 warning bestie: use OpenGL; is literally marked DEPRECATED! β€” same as above, and DEPRECATED! β€” so don't act surprised later, okay?

Also see: POGL Objects β€” the little side squad:

  • 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 🌈

okay so this module is assuming you already have OpenGL, GLU, and some flavor of GLUT properly installed on your system. Not "kinda installed," not "vibes only" β€” properly installed, bestie. 😭

These will be names like libGL.so, libGLU.so and libglut.so for unixen, and opengl32.dll and glu32.dll for MS Windows.

If you're using it with OpenGL::Image, use v1.03 or higher. No cap. πŸ’–


🧚 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 β€” the way that makes porting feel less like a boss fight. ✨

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 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 β€” iconic behavior, honestly.

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 πŸ”₯

The whole GLUT crew, every function name exactly as listed β€” do not lose a single one:

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 πŸ’œ

And here's the GLU lineup β€” again, every name exactly as given, including the _p, _c, and _s suffixes:

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 ✨

okay bestie, deep breath 🫢 β€” this is the list. Every single OpenGL entry point this page covers, in the exact order it covers them, nothing skipped, no "you get the idea". Grab a snack πŸ“ and settle in.

  • 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

and that's where this chunk runs out 😭 β€” the list is still going, obviously, so don't go anywhere πŸ’œ

oh also, before I forget: those _c, _p and _s suffixes are literally part of the names, so copy them exactly, they are not typos, do not "clean them up", iykyk πŸ’…

okay so we're STILL going through the roster and honestly? this is the longest guest list ever πŸ’€ but you asked for the whole thing so here's the whole thing, alphabetically, no skips, no cap. type these exactly, _c, _p, _s and all, because they are literally part of the name πŸŽ€

glMapGrid2d
glMapGrid2f
glMaterialf
glMaterialfv_c
glMaterialfv_p
glMaterialfv_s
glMateriali
glMaterialiv_c
glMaterialiv_p
glMaterialiv_s
glMatrixMode
glMultMatrixd_p
glMultMatrixf_p

okay now the part where the manpage really starts showing off 😭 sixty-four entries of multi-texture-coordinate energy. and bestie, imma be so fr with you: yes, the same _c line appears three times in a row underneath each one. that is how the page ships. we do not question it. we simply type it 🫢

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

we survived πŸŽ‰ and it just keeps rolling β€” new lists, normals, and the pointer variants:

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

then the P section hits, and it's giving range β€” ortho, pass-through, pixels, points, polygons:

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

pop pop pop 🫧 and then the program-parameter era, which is lowkey a lot of 4d/4dv/4f/4fv:

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
also can we talk about how glPrioritizeTexturesEXT_p shows up before glPrioritizeTextures_c?? we are not sorting, we are simply transcribing πŸ’…

raster positions next, and this is where the manpage gets thorough β€” every component count, every type, every suffix:

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

read, rect, render, rotate, scale, scissor, select, shade, shader, stencil β€” a whole little alphabet sandwich πŸ₯ͺ:

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

and now the texture-coordinate block, which is the multi-tex block's calmer cousin 😌 no ARB, no triple-stacking, just clean _c/_p/_s:

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

then the texture plumbing β€” pointers, env, gen, image, parameter, subimage 🧡 note that glTexEnvfv and glTexEnviv here only carry the _p and _s variants, and glSelectBuffer above only had _c. that's the page, not a typo I made. we copy exactly πŸ’–

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

uniforms time πŸ”₯ all the 1/2/3/4 flavours, f and i, each with _c/_p/_s, plus the matrix versions:

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

and finally the V's start showing up πŸ‘‘ vertices in every dimension, plus the very first vertex-attrib entry:

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

and that's exactly where this chunk of the list cuts off β€” mid-thought, right on glVertexAttrib1dvARB_c 😭 the list keeps going next part, so do NOT close the tab bestie πŸ¦‹

...and bestie, the glVertexAttrib ARB fam just keeps going 😭 like it's giving "I have 74 cousins and you're meeting all of them at the reunion." Higherkey iconic for completeness though. Here's the rest of the _c/_p/_s crew:

         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

✨ breathe. okay. ✨ Now we're out of vertex-attrib land and into the pointer / viewport / window-pos girlies:

         glVertexPointerEXT_c
         glVertexPointerEXT_p
         glVertexPointerEXT_s
         glVertexPointer_c
         glVertexPointer_p
         glVertexPointer_s
         glViewport
         glWindowPos2dMESA
         glWindowPos2iMESA
         glWindowPos3dMESA
         glWindowPos3iMESA
         glWindowPos4dMESA
         glWindowPos4iMESA

And that's the end of that list, periodt. πŸ’…


Then there's a whole lil squad of glp helpers doing their own thing:

         glpCheckExtension
         glpFullScreen
         glpHasGLUT
         glpRestoreScreen

Not a single _c/_p/_s suffix in sight β€” they're built different, lowkey main character energy. 🫢


🌈 GLX functions 🌈

Okay so here's the tea on GLX, and I need you to hear me out πŸŽ€: GLX is only supported to the degree that Stan's original module supported it. Like, that's the ceiling, that's the vibe check, that's the whole story.

Without an entire X binding it is of limited use, and β€” real talk β€” the recommendation is to use GLUT/FreeGLUT instead. Fr fr. Save yourself. πŸ’€

Here's what's in the GLX corner:

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

         glpcOpenWindow        (Not exported, must use fully qualified package name)
Heads up bestie: those first four are flagged (X11 only) β€” no X11, no entry. And glpcOpenWindow is not exported, so you gotta use the fully qualified package name to get to it. No shortcuts, iykyk. πŸ™ˆ

🧸 Old functions 🧸

okay so bestie, this next bit is the throwback shelf πŸ’… β€” literally every name below is listed in the page under Old functions. We're not skipping a single one, because they're all still here and they all still matter for anyone reading old code (iykyk). Buckle up, this list is long and it's giving "my older cousin's codebase from 2004" energy πŸŽ€

The first chunk is the X11-flavoured crew β€” masks, events, notify modes, grabs, all of it β€” exactly as the page has them:

  • 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

and then the GL side of the old-functions fam β€” the gl* crowd, then the little glu trio at the end. no cap, this is a lot of them, but every single one gets its moment 🌸

  • 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
πŸ’‘ heads up bestie: glXSwapBuffers is marked (X11 only) in the original, so don't come for me when it's not there on your fancy non-X11 setup πŸ™ˆ

πŸͺ "Perl" GL access shortcuts πŸͺ

okay and then there's this whole other little pocket of the page β€” the glp* shortcuts, literally tagged as the "Perl" GL access shortcuts section. Some of these are flagged (X11 only), and a few are flagged as coming (from PDL) β€” and yes, glpRasterFont is both, because it's an overachiever like that ✨

  • 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)
🫢 tiny note because I love you: those parentheses are part of the deal β€” (X11 only) and (from PDL) are exactly how the page marks them, so copy them along if you're quoting this at someone πŸ’–

and that's where this chunk wraps β€” but hold up, we're not done, there's more page to go, so keep scrolling bestie 🌈

okay so glpOpenWindow() is literally the preferred interface to glpcOpenWindow() πŸ’…βœ¨. Both of these functions have a special little (mis)feature for when you don’t 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. No cap, that’s the whole tea πŸ«–.

Since "finishing drawing" with and without GLX_DOUBLEBUFFER should be done in different ways, there’s a convenience function called glpFlush() πŸŽ€. It operates the same as glFlush() if no enable-GLX_DOUBLEBUFFER hack was needed; otherwise it acts as glFlush() followed by glXSwapBuffers().

bestie, use glpFlush() only in the case no GLX_DOUBLEBUFFER attribute was given to glpOpenWindow() β€” that’s the rule, okay? πŸ’–

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 released 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 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 β€” there’s 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. It’s giving β€œglow-up in progress” ✨.

✨ EXPORTS ✨

The following tags can be used to selectively import symbols into the main namespace β€” pick your faves, bestie πŸ’…:

  • :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 are 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

okay that’s the whole page, bestie 🫢 β€” it’s OpenGL(3) from perl v5.32.1, dated 2024-01-25, and that’s a wrap πŸ’–βœ¨

πŸ“¦ where this page comes from