]> gitweb.factorcode.org Git - factor.git/commitdiff
initial import of gl bindings into contrib/gl. simple-gl doesn't work yet...
authorAlex Chapman <chapman.alex@gmail.com>
Sat, 21 May 2005 08:48:12 +0000 (08:48 +0000)
committerAlex Chapman <chapman.alex@gmail.com>
Sat, 21 May 2005 08:48:12 +0000 (08:48 +0000)
contrib/gl/gl-internals.factor [new file with mode: 0644]
contrib/gl/gl.factor [new file with mode: 0644]
contrib/gl/glu.factor [new file with mode: 0644]
contrib/gl/load.factor [new file with mode: 0644]
contrib/gl/sdl-gl.factor [new file with mode: 0644]
contrib/gl/simple-gl.factor [new file with mode: 0644]

diff --git a/contrib/gl/gl-internals.factor b/contrib/gl/gl-internals.factor
new file mode 100644 (file)
index 0000000..774be10
--- /dev/null
@@ -0,0 +1,62 @@
+IN: gl-internals
+USING: alien kernel sequences stdio math test parser namespaces lists strings words compiler ;
+
+! usage of 'LIBRARY:' and 'FUNCTION:' :
+!
+!     LIBRARY: gl
+!     FUNCTION: void glTranslatef ( GLfloat x, GLfloat y, GLfloat z ) ;
+!
+! should be the same as doing:
+!
+!     : glTranslatef ( x y z -- )
+!         "void" "gl" "glTranslatef" [ "GLfloat" "GLfloat" "GLfloat" ] alien-invoke ;
+!     \ glTranslatef compile
+!
+! other forms:
+!
+!    FUNCTION: void glEnd ( ) ; -> : glEnd ( -- ) "void" "gl" "glEnd" [ ] alien-invoke ; 
+!
+!    FUNCTION: TODO: something with a return...
+
+: LIBRARY: scan "c-library" set ; parsing
+
+: compile-function-call ( type lib func types stack-effect -- )
+    >r over create-in >r 
+    [ alien-invoke ] cons cons cons cons r> swap define-compound
+    word r> "stack-effect" set-word-prop
+    word compile ;
+
+: (list-split) ( list1 list2 quot -- list1 list2 )
+    dup >r >r dup
+      [ unswons dup r> call
+        [ r> 2drop ]
+        [ rot cons swap r> (list-split) ] ifte ]
+      [ r> r> 2drop ] ifte ;
+
+: list-split ( list quot -- list1 list2 )
+    #! split the list at the first element where 'elem quot call' is t, removing that element.
+    #! if no elements return true, return 'list [ ]'
+    [ ] -rot (list-split) >r reverse r> ;
+
+: unpair ( list -- list1 list2 )
+    [ uncons uncons unpair rot swons >r cons r> ]
+    [ f f ] ifte* ;
+
+: remove-trailing-char ( str ch -- str )
+    >r dup length 1 - swap 2dup nth r> =
+      [ head ] 
+      [ nip ] ifte ;
+
+: join-stack-effect ( lst -- str )
+    [ CHAR: , remove-trailing-char " " append ] map " " swons concat ;
+
+: parse-stack-effect ( lst -- types stack-effect )
+    [ "--" = ] list-split >r unpair r> "--" swons append join-stack-effect ;
+
+: (function) ( type lib func function-args -- )
+    unswons drop reverse unswons drop reverse
+    parse-stack-effect compile-function-call ;
+
+: FUNCTION:
+    scan "c-library" get scan string-mode on
+      [ string-mode off (function) ] [ ] ; parsing
diff --git a/contrib/gl/gl.factor b/contrib/gl/gl.factor
new file mode 100644 (file)
index 0000000..7a5eca4
--- /dev/null
@@ -0,0 +1,1275 @@
+! Copyright (C) 2005 Alex Chapman.
+! See http://factor.sf.net/license.txt for BSD license.
+
+! This file is based on the gl.h that comes with xorg-x11 6.8.2
+
+IN: gl 
+USING: alien gl-internals ;
+
+ALIAS: uint   GLenum
+ALIAS: uchar  GLboolean
+ALIAS: uint   GLbitfield
+ALIAS: char   GLbyte
+ALIAS: short  GLshort
+ALIAS: int    GLint
+ALIAS: int    GLsizei
+ALIAS: uchar  GLubyte
+ALIAS: ushort GLushort
+ALIAS: uint   GLuint
+ALIAS: float  GLfloat
+ALIAS: float  GLclampf
+ALIAS: double GLdouble
+ALIAS: double GLclampd
+ALIAS: void*  GLvoid*
+
+! Constants
+
+! Boolean values
+: GL_FALSE                          HEX: 0 ;
+: GL_TRUE                           HEX: 1 ;
+
+! Data types
+: GL_BYTE                           HEX: 1400 ;
+: GL_UNSIGNED_BYTE                  HEX: 1401 ;
+: GL_SHORT                          HEX: 1402 ;
+: GL_UNSIGNED_SHORT                 HEX: 1403 ;
+: GL_INT                            HEX: 1404 ;
+: GL_UNSIGNED_INT                   HEX: 1405 ;
+: GL_FLOAT                          HEX: 1406 ;
+: GL_2_BYTES                        HEX: 1407 ;
+: GL_3_BYTES                        HEX: 1408 ;
+: GL_4_BYTES                        HEX: 1409 ;
+: GL_DOUBLE                         HEX: 140A ;
+
+! Primitives
+: GL_POINTS                         HEX: 0000 ;
+: GL_LINES                          HEX: 0001 ;
+: GL_LINE_LOOP                      HEX: 0002 ;
+: GL_LINE_STRIP                     HEX: 0003 ;
+: GL_TRIANGLES                      HEX: 0004 ;
+: GL_TRIANGLE_STRIP                 HEX: 0005 ;
+: GL_TRIANGLE_FAN                   HEX: 0006 ;
+: GL_QUADS                          HEX: 0007 ;
+: GL_QUAD_STRIP                     HEX: 0008 ;
+: GL_POLYGON                        HEX: 0009 ;
+
+! Vertex arrays
+: GL_VERTEX_ARRAY                   HEX: 8074 ;
+: GL_NORMAL_ARRAY                   HEX: 8075 ;
+: GL_COLOR_ARRAY                    HEX: 8076 ;
+: GL_INDEX_ARRAY                    HEX: 8077 ;
+: GL_TEXTURE_COORD_ARRAY            HEX: 8078 ;
+: GL_EDGE_FLAG_ARRAY                HEX: 8079 ;
+: GL_VERTEX_ARRAY_SIZE              HEX: 807A ;
+: GL_VERTEX_ARRAY_TYPE              HEX: 807B ;
+: GL_VERTEX_ARRAY_STRIDE            HEX: 807C ;
+: GL_NORMAL_ARRAY_TYPE              HEX: 807E ;
+: GL_NORMAL_ARRAY_STRIDE            HEX: 807F ;
+: GL_COLOR_ARRAY_SIZE               HEX: 8081 ;
+: GL_COLOR_ARRAY_TYPE               HEX: 8082 ;
+: GL_COLOR_ARRAY_STRIDE             HEX: 8083 ;
+: GL_INDEX_ARRAY_TYPE               HEX: 8085 ;
+: GL_INDEX_ARRAY_STRIDE             HEX: 8086 ;
+: GL_TEXTURE_COORD_ARRAY_SIZE       HEX: 8088 ;
+: GL_TEXTURE_COORD_ARRAY_TYPE       HEX: 8089 ;
+: GL_TEXTURE_COORD_ARRAY_STRIDE     HEX: 808A ;
+: GL_EDGE_FLAG_ARRAY_STRIDE         HEX: 808C ;
+: GL_VERTEX_ARRAY_POINTER           HEX: 808E ;
+: GL_NORMAL_ARRAY_POINTER           HEX: 808F ;
+: GL_COLOR_ARRAY_POINTER            HEX: 8090 ;
+: GL_INDEX_ARRAY_POINTER            HEX: 8091 ;
+: GL_TEXTURE_COORD_ARRAY_POINTER    HEX: 8092 ;
+: GL_EDGE_FLAG_ARRAY_POINTER        HEX: 8093 ;
+: GL_V2F                            HEX: 2A20 ;
+: GL_V3F                            HEX: 2A21 ;
+: GL_C4UB_V2F                       HEX: 2A22 ;
+: GL_C4UB_V3F                       HEX: 2A23 ;
+: GL_C3F_V3F                        HEX: 2A24 ;
+: GL_N3F_V3F                        HEX: 2A25 ;
+: GL_C4F_N3F_V3F                    HEX: 2A26 ;
+: GL_T2F_V3F                        HEX: 2A27 ;
+: GL_T4F_V4F                        HEX: 2A28 ;
+: GL_T2F_C4UB_V3F                   HEX: 2A29 ;
+: GL_T2F_C3F_V3F                    HEX: 2A2A ;
+: GL_T2F_N3F_V3F                    HEX: 2A2B ;
+: GL_T2F_C4F_N3F_V3F                HEX: 2A2C ;
+: GL_T4F_C4F_N3F_V4F                HEX: 2A2D ;
+
+! Matrix mode
+: GL_MATRIX_MODE                    HEX: 0BA0 ;
+: GL_MODELVIEW                      HEX: 1700 ;
+: GL_PROJECTION                     HEX: 1701 ;
+: GL_TEXTURE                        HEX: 1702 ;
+
+! Points
+: GL_POINT_SMOOTH                   HEX: 0B10 ;
+: GL_POINT_SIZE                     HEX: 0B11 ;
+: GL_POINT_SIZE_GRANULARITY         HEX: 0B13 ;
+: GL_POINT_SIZE_RANGE               HEX: 0B12 ;
+
+! Lines
+: GL_LINE_SMOOTH                    HEX: 0B20 ;
+: GL_LINE_STIPPLE                   HEX: 0B24 ;
+: GL_LINE_STIPPLE_PATTERN           HEX: 0B25 ;
+: GL_LINE_STIPPLE_REPEAT            HEX: 0B26 ;
+: GL_LINE_WIDTH                     HEX: 0B21 ;
+: GL_LINE_WIDTH_GRANULARITY         HEX: 0B23 ;
+: GL_LINE_WIDTH_RANGE               HEX: 0B22 ;
+
+! Polygons
+: GL_POINT                          HEX: 1B00 ;
+: GL_LINE                           HEX: 1B01 ;
+: GL_FILL                           HEX: 1B02 ;
+: GL_CW                             HEX: 0900 ;
+: GL_CCW                            HEX: 0901 ;
+: GL_FRONT                          HEX: 0404 ;
+: GL_BACK                           HEX: 0405 ;
+: GL_POLYGON_MODE                   HEX: 0B40 ;
+: GL_POLYGON_SMOOTH                 HEX: 0B41 ;
+: GL_POLYGON_STIPPLE                HEX: 0B42 ;
+: GL_EDGE_FLAG                      HEX: 0B43 ;
+: GL_CULL_FACE                      HEX: 0B44 ;
+: GL_CULL_FACE_MODE                 HEX: 0B45 ;
+: GL_FRONT_FACE                     HEX: 0B46 ;
+: GL_POLYGON_OFFSET_FACTOR          HEX: 8038 ;
+: GL_POLYGON_OFFSET_UNITS           HEX: 2A00 ;
+: GL_POLYGON_OFFSET_POINT           HEX: 2A01 ;
+: GL_POLYGON_OFFSET_LINE            HEX: 2A02 ;
+: GL_POLYGON_OFFSET_FILL            HEX: 8037 ;
+
+! Display Lists
+: GL_COMPILE                        HEX: 1300 ;
+: GL_COMPILE_AND_EXECUTE            HEX: 1301 ;
+: GL_LIST_BASE                      HEX: 0B32 ;
+: GL_LIST_INDEX                     HEX: 0B33 ;
+: GL_LIST_MODE                      HEX: 0B30 ;
+
+! Depth buffer
+: GL_NEVER                          HEX: 0200 ;
+: GL_LESS                           HEX: 0201 ;
+: GL_EQUAL                          HEX: 0202 ;
+: GL_LEQUAL                         HEX: 0203 ;
+: GL_GREATER                        HEX: 0204 ;
+: GL_NOTEQUAL                       HEX: 0205 ;
+: GL_GEQUAL                         HEX: 0206 ;
+: GL_ALWAYS                         HEX: 0207 ;
+: GL_DEPTH_TEST                     HEX: 0B71 ;
+: GL_DEPTH_BITS                     HEX: 0D56 ;
+: GL_DEPTH_CLEAR_VALUE              HEX: 0B73 ;
+: GL_DEPTH_FUNC                     HEX: 0B74 ;
+: GL_DEPTH_RANGE                    HEX: 0B70 ;
+: GL_DEPTH_WRITEMASK                HEX: 0B72 ;
+: GL_DEPTH_COMPONENT                HEX: 1902 ;
+
+! Lighting
+: GL_LIGHTING                       HEX: 0B50 ;
+: GL_LIGHT0                         HEX: 4000 ;
+: GL_LIGHT1                         HEX: 4001 ;
+: GL_LIGHT2                         HEX: 4002 ;
+: GL_LIGHT3                         HEX: 4003 ;
+: GL_LIGHT4                         HEX: 4004 ;
+: GL_LIGHT5                         HEX: 4005 ;
+: GL_LIGHT6                         HEX: 4006 ;
+: GL_LIGHT7                         HEX: 4007 ;
+: GL_SPOT_EXPONENT                  HEX: 1205 ;
+: GL_SPOT_CUTOFF                    HEX: 1206 ;
+: GL_CONSTANT_ATTENUATION           HEX: 1207 ;
+: GL_LINEAR_ATTENUATION             HEX: 1208 ;
+: GL_QUADRATIC_ATTENUATION          HEX: 1209 ;
+: GL_AMBIENT                        HEX: 1200 ;
+: GL_DIFFUSE                        HEX: 1201 ;
+: GL_SPECULAR                       HEX: 1202 ;
+: GL_SHININESS                      HEX: 1601 ;
+: GL_EMISSION                       HEX: 1600 ;
+: GL_POSITION                       HEX: 1203 ;
+: GL_SPOT_DIRECTION                 HEX: 1204 ;
+: GL_AMBIENT_AND_DIFFUSE            HEX: 1602 ;
+: GL_COLOR_INDEXES                  HEX: 1603 ;
+: GL_LIGHT_MODEL_TWO_SIDE           HEX: 0B52 ;
+: GL_LIGHT_MODEL_LOCAL_VIEWER       HEX: 0B51 ;
+: GL_LIGHT_MODEL_AMBIENT            HEX: 0B53 ;
+: GL_FRONT_AND_BACK                 HEX: 0408 ;
+: GL_SHADE_MODEL                    HEX: 0B54 ;
+: GL_FLAT                           HEX: 1D00 ;
+: GL_SMOOTH                         HEX: 1D01 ;
+: GL_COLOR_MATERIAL                 HEX: 0B57 ;
+: GL_COLOR_MATERIAL_FACE            HEX: 0B55 ;
+: GL_COLOR_MATERIAL_PARAMETER       HEX: 0B56 ;
+: GL_NORMALIZE                      HEX: 0BA1 ;
+
+! User clipping planes
+: GL_CLIP_PLANE0                    HEX: 3000 ;
+: GL_CLIP_PLANE1                    HEX: 3001 ;
+: GL_CLIP_PLANE2                    HEX: 3002 ;
+: GL_CLIP_PLANE3                    HEX: 3003 ;
+: GL_CLIP_PLANE4                    HEX: 3004 ;
+: GL_CLIP_PLANE5                    HEX: 3005 ;
+
+! Accumulation buffer
+: GL_ACCUM_RED_BITS                 HEX: 0D58 ;
+: GL_ACCUM_GREEN_BITS               HEX: 0D59 ;
+: GL_ACCUM_BLUE_BITS                HEX: 0D5A ;
+: GL_ACCUM_ALPHA_BITS               HEX: 0D5B ;
+: GL_ACCUM_CLEAR_VALUE              HEX: 0B80 ;
+: GL_ACCUM                          HEX: 0100 ;
+: GL_ADD                            HEX: 0104 ;
+: GL_LOAD                           HEX: 0101 ;
+: GL_MULT                           HEX: 0103 ;
+: GL_RETURN                         HEX: 0102 ;
+
+! Alpha testing
+: GL_ALPHA_TEST                     HEX: 0BC0 ;
+: GL_ALPHA_TEST_REF                 HEX: 0BC2 ;
+: GL_ALPHA_TEST_FUNC                HEX: 0BC1 ;
+
+! Blending
+: GL_BLEND                          HEX: 0BE2 ;
+: GL_BLEND_SRC                      HEX: 0BE1 ;
+: GL_BLEND_DST                      HEX: 0BE0 ;
+: GL_ZERO                           HEX: 0 ;
+: GL_ONE                            HEX: 1 ;
+: GL_SRC_COLOR                      HEX: 0300 ;
+: GL_ONE_MINUS_SRC_COLOR            HEX: 0301 ;
+: GL_SRC_ALPHA                      HEX: 0302 ;
+: GL_ONE_MINUS_SRC_ALPHA            HEX: 0303 ;
+: GL_DST_ALPHA                      HEX: 0304 ;
+: GL_ONE_MINUS_DST_ALPHA            HEX: 0305 ;
+: GL_DST_COLOR                      HEX: 0306 ;
+: GL_ONE_MINUS_DST_COLOR            HEX: 0307 ;
+: GL_SRC_ALPHA_SATURATE             HEX: 0308 ;
+
+! Render Mode
+: GL_FEEDBACK                       HEX: 1C01 ;
+: GL_RENDER                         HEX: 1C00 ;
+: GL_SELECT                         HEX: 1C02 ;
+
+! Feedback
+: GL_2D                             HEX: 0600 ;
+: GL_3D                             HEX: 0601 ;
+: GL_3D_COLOR                       HEX: 0602 ;
+: GL_3D_COLOR_TEXTURE               HEX: 0603 ;
+: GL_4D_COLOR_TEXTURE               HEX: 0604 ;
+: GL_POINT_TOKEN                    HEX: 0701 ;
+: GL_LINE_TOKEN                     HEX: 0702 ;
+: GL_LINE_RESET_TOKEN               HEX: 0707 ;
+: GL_POLYGON_TOKEN                  HEX: 0703 ;
+: GL_BITMAP_TOKEN                   HEX: 0704 ;
+: GL_DRAW_PIXEL_TOKEN               HEX: 0705 ;
+: GL_COPY_PIXEL_TOKEN               HEX: 0706 ;
+: GL_PASS_THROUGH_TOKEN             HEX: 0700 ;
+: GL_FEEDBACK_BUFFER_POINTER        HEX: 0DF0 ;
+: GL_FEEDBACK_BUFFER_SIZE           HEX: 0DF1 ;
+: GL_FEEDBACK_BUFFER_TYPE           HEX: 0DF2 ;
+
+! Selection
+: GL_SELECTION_BUFFER_POINTER       HEX: 0DF3 ;
+: GL_SELECTION_BUFFER_SIZE          HEX: 0DF4 ;
+
+! Fog
+: GL_FOG                            HEX: 0B60 ;
+: GL_FOG_MODE                       HEX: 0B65 ;
+: GL_FOG_DENSITY                    HEX: 0B62 ;
+: GL_FOG_COLOR                      HEX: 0B66 ;
+: GL_FOG_INDEX                      HEX: 0B61 ;
+: GL_FOG_START                      HEX: 0B63 ;
+: GL_FOG_END                        HEX: 0B64 ;
+: GL_LINEAR                         HEX: 2601 ;
+: GL_EXP                            HEX: 0800 ;
+: GL_EXP2                           HEX: 0801 ;
+
+! Logic Ops
+: GL_LOGIC_OP                       HEX: 0BF1 ;
+: GL_INDEX_LOGIC_OP                 HEX: 0BF1 ;
+: GL_COLOR_LOGIC_OP                 HEX: 0BF2 ;
+: GL_LOGIC_OP_MODE                  HEX: 0BF0 ;
+: GL_CLEAR                          HEX: 1500 ;
+: GL_SET                            HEX: 150F ;
+: GL_COPY                           HEX: 1503 ;
+: GL_COPY_INVERTED                  HEX: 150C ;
+: GL_NOOP                           HEX: 1505 ;
+: GL_INVERT                         HEX: 150A ;
+: GL_AND                            HEX: 1501 ;
+: GL_NAND                           HEX: 150E ;
+: GL_OR                             HEX: 1507 ;
+: GL_NOR                            HEX: 1508 ;
+: GL_XOR                            HEX: 1506 ;
+: GL_EQUIV                          HEX: 1509 ;
+: GL_AND_REVERSE                    HEX: 1502 ;
+: GL_AND_INVERTED                   HEX: 1504 ;
+: GL_OR_REVERSE                     HEX: 150B ;
+: GL_OR_INVERTED                    HEX: 150D ;
+
+! Stencil
+: GL_STENCIL_TEST                   HEX: 0B90 ;
+: GL_STENCIL_WRITEMASK              HEX: 0B98 ;
+: GL_STENCIL_BITS                   HEX: 0D57 ;
+: GL_STENCIL_FUNC                   HEX: 0B92 ;
+: GL_STENCIL_VALUE_MASK             HEX: 0B93 ;
+: GL_STENCIL_REF                    HEX: 0B97 ;
+: GL_STENCIL_FAIL                   HEX: 0B94 ;
+: GL_STENCIL_PASS_DEPTH_PASS        HEX: 0B96 ;
+: GL_STENCIL_PASS_DEPTH_FAIL        HEX: 0B95 ;
+: GL_STENCIL_CLEAR_VALUE            HEX: 0B91 ;
+: GL_STENCIL_INDEX                  HEX: 1901 ;
+: GL_KEEP                           HEX: 1E00 ;
+: GL_REPLACE                        HEX: 1E01 ;
+: GL_INCR                           HEX: 1E02 ;
+: GL_DECR                           HEX: 1E03 ;
+
+! Buffers, Pixel Drawing/Reading
+: GL_NONE                           HEX:    0 ;
+: GL_LEFT                           HEX: 0406 ;
+: GL_RIGHT                          HEX: 0407 ;
+! defined elsewhere
+! GL_FRONT                          HEX: 0404
+! GL_BACK                           HEX: 0405
+! GL_FRONT_AND_BACK                 HEX: 0408
+: GL_FRONT_LEFT                     HEX: 0400 ;
+: GL_FRONT_RIGHT                    HEX: 0401 ;
+: GL_BACK_LEFT                      HEX: 0402 ;
+: GL_BACK_RIGHT                     HEX: 0403 ;
+: GL_AUX0                           HEX: 0409 ;
+: GL_AUX1                           HEX: 040A ;
+: GL_AUX2                           HEX: 040B ;
+: GL_AUX3                           HEX: 040C ;
+: GL_COLOR_INDEX                    HEX: 1900 ;
+: GL_RED                            HEX: 1903 ;
+: GL_GREEN                          HEX: 1904 ;
+: GL_BLUE                           HEX: 1905 ;
+: GL_ALPHA                          HEX: 1906 ;
+: GL_LUMINANCE                      HEX: 1909 ;
+: GL_LUMINANCE_ALPHA                HEX: 190A ;
+: GL_ALPHA_BITS                     HEX: 0D55 ;
+: GL_RED_BITS                       HEX: 0D52 ;
+: GL_GREEN_BITS                     HEX: 0D53 ;
+: GL_BLUE_BITS                      HEX: 0D54 ;
+: GL_INDEX_BITS                     HEX: 0D51 ;
+: GL_SUBPIXEL_BITS                  HEX: 0D50 ;
+: GL_AUX_BUFFERS                    HEX: 0C00 ;
+: GL_READ_BUFFER                    HEX: 0C02 ;
+: GL_DRAW_BUFFER                    HEX: 0C01 ;
+: GL_DOUBLEBUFFER                   HEX: 0C32 ;
+: GL_STEREO                         HEX: 0C33 ;
+: GL_BITMAP                         HEX: 1A00 ;
+: GL_COLOR                          HEX: 1800 ;
+: GL_DEPTH                          HEX: 1801 ;
+: GL_STENCIL                        HEX: 1802 ;
+: GL_DITHER                         HEX: 0BD0 ;
+: GL_RGB                            HEX: 1907 ;
+: GL_RGBA                           HEX: 1908 ;
+
+! Implementation limits
+: GL_MAX_LIST_NESTING               HEX: 0B31 ;
+: GL_MAX_ATTRIB_STACK_DEPTH         HEX: 0D35 ;
+: GL_MAX_MODELVIEW_STACK_DEPTH      HEX: 0D36 ;
+: GL_MAX_NAME_STACK_DEPTH           HEX: 0D37 ;
+: GL_MAX_PROJECTION_STACK_DEPTH     HEX: 0D38 ;
+: GL_MAX_TEXTURE_STACK_DEPTH        HEX: 0D39 ;
+: GL_MAX_EVAL_ORDER                 HEX: 0D30 ;
+: GL_MAX_LIGHTS                     HEX: 0D31 ;
+: GL_MAX_CLIP_PLANES                HEX: 0D32 ;
+: GL_MAX_TEXTURE_SIZE               HEX: 0D33 ;
+: GL_MAX_PIXEL_MAP_TABLE            HEX: 0D34 ;
+: GL_MAX_VIEWPORT_DIMS              HEX: 0D3A ;
+: GL_MAX_CLIENT_ATTRIB_STACK_DEPTH  HEX: 0D3B ;
+
+! Gets
+: GL_ATTRIB_STACK_DEPTH             HEX: 0BB0 ;
+: GL_CLIENT_ATTRIB_STACK_DEPTH      HEX: 0BB1 ;
+: GL_COLOR_CLEAR_VALUE              HEX: 0C22 ;
+: GL_COLOR_WRITEMASK                HEX: 0C23 ;
+: GL_CURRENT_INDEX                  HEX: 0B01 ;
+: GL_CURRENT_COLOR                  HEX: 0B00 ;
+: GL_CURRENT_NORMAL                 HEX: 0B02 ;
+: GL_CURRENT_RASTER_COLOR           HEX: 0B04 ;
+: GL_CURRENT_RASTER_DISTANCE        HEX: 0B09 ;
+: GL_CURRENT_RASTER_INDEX           HEX: 0B05 ;
+: GL_CURRENT_RASTER_POSITION        HEX: 0B07 ;
+: GL_CURRENT_RASTER_TEXTURE_COORDS  HEX: 0B06 ;
+: GL_CURRENT_RASTER_POSITION_VALID  HEX: 0B08 ;
+: GL_CURRENT_TEXTURE_COORDS         HEX: 0B03 ;
+: GL_INDEX_CLEAR_VALUE              HEX: 0C20 ;
+: GL_INDEX_MODE                     HEX: 0C30 ;
+: GL_INDEX_WRITEMASK                HEX: 0C21 ;
+: GL_MODELVIEW_MATRIX               HEX: 0BA6 ;
+: GL_MODELVIEW_STACK_DEPTH          HEX: 0BA3 ;
+: GL_NAME_STACK_DEPTH               HEX: 0D70 ;
+: GL_PROJECTION_MATRIX              HEX: 0BA7 ;
+: GL_PROJECTION_STACK_DEPTH         HEX: 0BA4 ;
+: GL_RENDER_MODE                    HEX: 0C40 ;
+: GL_RGBA_MODE                      HEX: 0C31 ;
+: GL_TEXTURE_MATRIX                 HEX: 0BA8 ;
+: GL_TEXTURE_STACK_DEPTH            HEX: 0BA5 ;
+: GL_VIEWPORT                       HEX: 0BA2 ;
+
+! Evaluators
+: GL_AUTO_NORMAL                    HEX: 0D80 ;
+: GL_MAP1_COLOR_4                   HEX: 0D90 ;
+: GL_MAP1_INDEX                     HEX: 0D91 ;
+: GL_MAP1_NORMAL                    HEX: 0D92 ;
+: GL_MAP1_TEXTURE_COORD_1           HEX: 0D93 ;
+: GL_MAP1_TEXTURE_COORD_2           HEX: 0D94 ;
+: GL_MAP1_TEXTURE_COORD_3           HEX: 0D95 ;
+: GL_MAP1_TEXTURE_COORD_4           HEX: 0D96 ;
+: GL_MAP1_VERTEX_3                  HEX: 0D97 ;
+: GL_MAP1_VERTEX_4                  HEX: 0D98 ;
+: GL_MAP2_COLOR_4                   HEX: 0DB0 ;
+: GL_MAP2_INDEX                     HEX: 0DB1 ;
+: GL_MAP2_NORMAL                    HEX: 0DB2 ;
+: GL_MAP2_TEXTURE_COORD_1           HEX: 0DB3 ;
+: GL_MAP2_TEXTURE_COORD_2           HEX: 0DB4 ;
+: GL_MAP2_TEXTURE_COORD_3           HEX: 0DB5 ;
+: GL_MAP2_TEXTURE_COORD_4           HEX: 0DB6 ;
+: GL_MAP2_VERTEX_3                  HEX: 0DB7 ;
+: GL_MAP2_VERTEX_4                  HEX: 0DB8 ;
+: GL_MAP1_GRID_DOMAIN               HEX: 0DD0 ;
+: GL_MAP1_GRID_SEGMENTS             HEX: 0DD1 ;
+: GL_MAP2_GRID_DOMAIN               HEX: 0DD2 ;
+: GL_MAP2_GRID_SEGMENTS             HEX: 0DD3 ;
+: GL_COEFF                          HEX: 0A00 ;
+: GL_DOMAIN                         HEX: 0A02 ;
+: GL_ORDER                          HEX: 0A01 ;
+
+! Hints
+: GL_FOG_HINT                       HEX: 0C54 ;
+: GL_LINE_SMOOTH_HINT               HEX: 0C52 ;
+: GL_PERSPECTIVE_CORRECTION_HINT    HEX: 0C50 ;
+: GL_POINT_SMOOTH_HINT              HEX: 0C51 ;
+: GL_POLYGON_SMOOTH_HINT            HEX: 0C53 ;
+: GL_DONT_CARE                      HEX: 1100 ;
+: GL_FASTEST                        HEX: 1101 ;
+: GL_NICEST                         HEX: 1102 ;
+
+! Scissor box
+: GL_SCISSOR_TEST                   HEX: 0C11 ;
+: GL_SCISSOR_BOX                    HEX: 0C10 ;
+
+! Pixel Mode / Transfer
+: GL_MAP_COLOR                      HEX: 0D10 ;
+: GL_MAP_STENCIL                    HEX: 0D11 ;
+: GL_INDEX_SHIFT                    HEX: 0D12 ;
+: GL_INDEX_OFFSET                   HEX: 0D13 ;
+: GL_RED_SCALE                      HEX: 0D14 ;
+: GL_RED_BIAS                       HEX: 0D15 ;
+: GL_GREEN_SCALE                    HEX: 0D18 ;
+: GL_GREEN_BIAS                     HEX: 0D19 ;
+: GL_BLUE_SCALE                     HEX: 0D1A ;
+: GL_BLUE_BIAS                      HEX: 0D1B ;
+: GL_ALPHA_SCALE                    HEX: 0D1C ;
+: GL_ALPHA_BIAS                     HEX: 0D1D ;
+: GL_DEPTH_SCALE                    HEX: 0D1E ;
+: GL_DEPTH_BIAS                     HEX: 0D1F ;
+: GL_PIXEL_MAP_S_TO_S_SIZE          HEX: 0CB1 ;
+: GL_PIXEL_MAP_I_TO_I_SIZE          HEX: 0CB0 ;
+: GL_PIXEL_MAP_I_TO_R_SIZE          HEX: 0CB2 ;
+: GL_PIXEL_MAP_I_TO_G_SIZE          HEX: 0CB3 ;
+: GL_PIXEL_MAP_I_TO_B_SIZE          HEX: 0CB4 ;
+: GL_PIXEL_MAP_I_TO_A_SIZE          HEX: 0CB5 ;
+: GL_PIXEL_MAP_R_TO_R_SIZE          HEX: 0CB6 ;
+: GL_PIXEL_MAP_G_TO_G_SIZE          HEX: 0CB7 ;
+: GL_PIXEL_MAP_B_TO_B_SIZE          HEX: 0CB8 ;
+: GL_PIXEL_MAP_A_TO_A_SIZE          HEX: 0CB9 ;
+: GL_PIXEL_MAP_S_TO_S               HEX: 0C71 ;
+: GL_PIXEL_MAP_I_TO_I               HEX: 0C70 ;
+: GL_PIXEL_MAP_I_TO_R               HEX: 0C72 ;
+: GL_PIXEL_MAP_I_TO_G               HEX: 0C73 ;
+: GL_PIXEL_MAP_I_TO_B               HEX: 0C74 ;
+: GL_PIXEL_MAP_I_TO_A               HEX: 0C75 ;
+: GL_PIXEL_MAP_R_TO_R               HEX: 0C76 ;
+: GL_PIXEL_MAP_G_TO_G               HEX: 0C77 ;
+: GL_PIXEL_MAP_B_TO_B               HEX: 0C78 ;
+: GL_PIXEL_MAP_A_TO_A               HEX: 0C79 ;
+: GL_PACK_ALIGNMENT                 HEX: 0D05 ;
+: GL_PACK_LSB_FIRST                 HEX: 0D01 ;
+: GL_PACK_ROW_LENGTH                HEX: 0D02 ;
+: GL_PACK_SKIP_PIXELS               HEX: 0D04 ;
+: GL_PACK_SKIP_ROWS                 HEX: 0D03 ;
+: GL_PACK_SWAP_BYTES                HEX: 0D00 ;
+: GL_UNPACK_ALIGNMENT               HEX: 0CF5 ;
+: GL_UNPACK_LSB_FIRST               HEX: 0CF1 ;
+: GL_UNPACK_ROW_LENGTH              HEX: 0CF2 ;
+: GL_UNPACK_SKIP_PIXELS             HEX: 0CF4 ;
+: GL_UNPACK_SKIP_ROWS               HEX: 0CF3 ;
+: GL_UNPACK_SWAP_BYTES              HEX: 0CF0 ;
+: GL_ZOOM_X                         HEX: 0D16 ;
+: GL_ZOOM_Y                         HEX: 0D17 ;
+
+! Texture mapping
+: GL_TEXTURE_ENV                    HEX: 2300 ;
+: GL_TEXTURE_ENV_MODE               HEX: 2200 ;
+: GL_TEXTURE_1D                     HEX: 0DE0 ;
+: GL_TEXTURE_2D                     HEX: 0DE1 ;
+: GL_TEXTURE_WRAP_S                 HEX: 2802 ;
+: GL_TEXTURE_WRAP_T                 HEX: 2803 ;
+: GL_TEXTURE_MAG_FILTER             HEX: 2800 ;
+: GL_TEXTURE_MIN_FILTER             HEX: 2801 ;
+: GL_TEXTURE_ENV_COLOR              HEX: 2201 ;
+: GL_TEXTURE_GEN_S                  HEX: 0C60 ;
+: GL_TEXTURE_GEN_T                  HEX: 0C61 ;
+: GL_TEXTURE_GEN_MODE               HEX: 2500 ;
+: GL_TEXTURE_BORDER_COLOR           HEX: 1004 ;
+: GL_TEXTURE_WIDTH                  HEX: 1000 ;
+: GL_TEXTURE_HEIGHT                 HEX: 1001 ;
+: GL_TEXTURE_BORDER                 HEX: 1005 ;
+: GL_TEXTURE_COMPONENTS             HEX: 1003 ;
+: GL_TEXTURE_RED_SIZE               HEX: 805C ;
+: GL_TEXTURE_GREEN_SIZE             HEX: 805D ;
+: GL_TEXTURE_BLUE_SIZE              HEX: 805E ;
+: GL_TEXTURE_ALPHA_SIZE             HEX: 805F ;
+: GL_TEXTURE_LUMINANCE_SIZE         HEX: 8060 ;
+: GL_TEXTURE_INTENSITY_SIZE         HEX: 8061 ;
+: GL_NEAREST_MIPMAP_NEAREST         HEX: 2700 ;
+: GL_NEAREST_MIPMAP_LINEAR          HEX: 2702 ;
+: GL_LINEAR_MIPMAP_NEAREST          HEX: 2701 ;
+: GL_LINEAR_MIPMAP_LINEAR           HEX: 2703 ;
+: GL_OBJECT_LINEAR                  HEX: 2401 ;
+: GL_OBJECT_PLANE                   HEX: 2501 ;
+: GL_EYE_LINEAR                     HEX: 2400 ;
+: GL_EYE_PLANE                      HEX: 2502 ;
+: GL_SPHERE_MAP                     HEX: 2402 ;
+: GL_DECAL                          HEX: 2101 ;
+: GL_MODULATE                       HEX: 2100 ;
+: GL_NEAREST                        HEX: 2600 ;
+: GL_REPEAT                         HEX: 2901 ;
+: GL_CLAMP                          HEX: 2900 ;
+: GL_S                              HEX: 2000 ;
+: GL_T                              HEX: 2001 ;
+: GL_R                              HEX: 2002 ;
+: GL_Q                              HEX: 2003 ;
+: GL_TEXTURE_GEN_R                  HEX: 0C62 ;
+: GL_TEXTURE_GEN_Q                  HEX: 0C63 ;
+
+! Utility
+: GL_VENDOR                         HEX: 1F00 ;
+: GL_RENDERER                       HEX: 1F01 ;
+: GL_VERSION                        HEX: 1F02 ;
+: GL_EXTENSIONS                     HEX: 1F03 ;
+
+! Errors
+: GL_NO_ERROR                       HEX:    0 ;
+: GL_INVALID_VALUE                  HEX: 0501 ;
+: GL_INVALID_ENUM                   HEX: 0500 ;
+: GL_INVALID_OPERATION              HEX: 0502 ;
+: GL_STACK_OVERFLOW                 HEX: 0503 ;
+: GL_STACK_UNDERFLOW                HEX: 0504 ;
+: GL_OUT_OF_MEMORY                  HEX: 0505 ;
+
+! glPush/PopAttrib bits
+: GL_CURRENT_BIT                    HEX: 00000001 ;
+: GL_POINT_BIT                      HEX: 00000002 ;
+: GL_LINE_BIT                       HEX: 00000004 ;
+: GL_POLYGON_BIT                    HEX: 00000008 ;
+: GL_POLYGON_STIPPLE_BIT            HEX: 00000010 ;
+: GL_PIXEL_MODE_BIT                 HEX: 00000020 ;
+: GL_LIGHTING_BIT                   HEX: 00000040 ;
+: GL_FOG_BIT                        HEX: 00000080 ;
+: GL_DEPTH_BUFFER_BIT               HEX: 00000100 ;
+: GL_ACCUM_BUFFER_BIT               HEX: 00000200 ;
+: GL_STENCIL_BUFFER_BIT             HEX: 00000400 ;
+: GL_VIEWPORT_BIT                   HEX: 00000800 ;
+: GL_TRANSFORM_BIT                  HEX: 00001000 ;
+: GL_ENABLE_BIT                     HEX: 00002000 ;
+: GL_COLOR_BUFFER_BIT               HEX: 00004000 ;
+: GL_HINT_BIT                       HEX: 00008000 ;
+: GL_EVAL_BIT                       HEX: 00010000 ;
+: GL_LIST_BIT                       HEX: 00020000 ;
+: GL_TEXTURE_BIT                    HEX: 00040000 ;
+: GL_SCISSOR_BIT                    HEX: 00080000 ;
+: GL_ALL_ATTRIB_BITS                HEX: 000FFFFF ;
+
+! OpenGL 1.1
+: GL_PROXY_TEXTURE_1D               HEX: 8063 ;
+: GL_PROXY_TEXTURE_2D               HEX: 8064 ;
+: GL_TEXTURE_PRIORITY               HEX: 8066 ;
+: GL_TEXTURE_RESIDENT               HEX: 8067 ;
+: GL_TEXTURE_BINDING_1D             HEX: 8068 ;
+: GL_TEXTURE_BINDING_2D             HEX: 8069 ;
+: GL_TEXTURE_INTERNAL_FORMAT        HEX: 1003 ;
+: GL_ALPHA4                         HEX: 803B ;
+: GL_ALPHA8                         HEX: 803C ;
+: GL_ALPHA12                        HEX: 803D ;
+: GL_ALPHA16                        HEX: 803E ;
+: GL_LUMINANCE4                     HEX: 803F ;
+: GL_LUMINANCE8                     HEX: 8040 ;
+: GL_LUMINANCE12                    HEX: 8041 ;
+: GL_LUMINANCE16                    HEX: 8042 ;
+: GL_LUMINANCE4_ALPHA4              HEX: 8043 ;
+: GL_LUMINANCE6_ALPHA2              HEX: 8044 ;
+: GL_LUMINANCE8_ALPHA8              HEX: 8045 ;
+: GL_LUMINANCE12_ALPHA4             HEX: 8046 ;
+: GL_LUMINANCE12_ALPHA12            HEX: 8047 ;
+: GL_LUMINANCE16_ALPHA16            HEX: 8048 ;
+: GL_INTENSITY                      HEX: 8049 ;
+: GL_INTENSITY4                     HEX: 804A ;
+: GL_INTENSITY8                     HEX: 804B ;
+: GL_INTENSITY12                    HEX: 804C ;
+: GL_INTENSITY16                    HEX: 804D ;
+: GL_R3_G3_B2                       HEX: 2A10 ;
+: GL_RGB4                           HEX: 804F ;
+: GL_RGB5                           HEX: 8050 ;
+: GL_RGB8                           HEX: 8051 ;
+: GL_RGB10                          HEX: 8052 ;
+: GL_RGB12                          HEX: 8053 ;
+: GL_RGB16                          HEX: 8054 ;
+: GL_RGBA2                          HEX: 8055 ;
+: GL_RGBA4                          HEX: 8056 ;
+: GL_RGB5_A1                        HEX: 8057 ;
+: GL_RGBA8                          HEX: 8058 ;
+: GL_RGB10_A2                       HEX: 8059 ;
+: GL_RGBA12                         HEX: 805A ;
+: GL_RGBA16                         HEX: 805B ;
+: GL_CLIENT_PIXEL_STORE_BIT         HEX: 00000001 ;
+: GL_CLIENT_VERTEX_ARRAY_BIT        HEX: 00000002 ;
+: GL_ALL_CLIENT_ATTRIB_BITS         HEX: FFFFFFFF ;
+: GL_CLIENT_ALL_ATTRIB_BITS         HEX: FFFFFFFF ;
+
+LIBRARY: gl
+
+! Miscellaneous
+
+FUNCTION: void glClearIndex ( GLfloat c ) ;
+FUNCTION: void glClearColor ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ) ;
+FUNCTION: void glClear ( GLbitfield mask ) ;
+FUNCTION: void glIndexMask ( GLuint mask ) ;
+FUNCTION: void glColorMask ( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ) ;
+FUNCTION: void glAlphaFunc ( GLenum func, GLclampf ref ) ;
+FUNCTION: void glBlendFunc ( GLenum sfactor, GLenum dfactor ) ;
+FUNCTION: void glLogicOp ( GLenum opcode ) ;
+FUNCTION: void glCullFace ( GLenum mode ) ;
+FUNCTION: void glFrontFace ( GLenum mode ) ;
+FUNCTION: void glPointSize ( GLfloat size ) ;
+FUNCTION: void glLineWidth ( GLfloat width ) ;
+FUNCTION: void glLineStipple ( GLint factor, GLushort pattern ) ;
+FUNCTION: void glPolygonMode ( GLenum face, GLenum mode ) ;
+FUNCTION: void glPolygonOffset ( GLfloat factor, GLfloat units ) ;
+! FUNCTION: void glPolygonStipple ( const GLubyte* mask ) ;
+! FUNCTION: void glGetPolygonStipple ( GLubyte* mask ) ;
+FUNCTION: void glEdgeFlag ( GLboolean flag ) ;
+! FUNCTION: void glEdgeFlagv ( const GLboolean* flag ) ;
+FUNCTION: void glScissor ( GLint x, GLint y, GLsizei width, GLsizei height ) ;
+! FUNCTION: void glClipPlane ( GLenum plane, const GLdouble* equation ) ;
+! FUNCTION: void glGetClipPlane ( GLenum plane, GLdouble* equation ) ;
+FUNCTION: void glDrawBuffer ( GLenum mode ) ;
+FUNCTION: void glReadBuffer ( GLenum mode ) ;
+FUNCTION: void glEnable ( GLenum cap ) ;
+FUNCTION: void glDisable ( GLenum cap ) ;
+FUNCTION: GLboolean glIsEnabled ( GLenum cap ) ;
+FUNCTION: void glEnableClientState ( GLenum cap ) ;
+FUNCTION: void glDisableClientState ( GLenum cap ) ;
+! FUNCTION: void glGetBooleanv (- GLenum pname, GLboolean* params -) ;
+! FUNCTION: void glGetDoublev (- GLenum pname, GLdouble* params -) ;
+! FUNCTION: void glGetFloatv (- GLenum pname, GLfloat* params -) ;
+! FUNCTION: void glGetIntegerv (- GLenum pname, GLint* params -) ;
+
+FUNCTION: void glPushAttrib ( GLbitfield mask ) ;
+FUNCTION: void glPopAttrib ( ) ;
+
+FUNCTION: void glPushClientAttrib ( GLbitfield mask ) ;
+FUNCTION: void glPopClientAttrib ( ) ;
+
+FUNCTION: GLint glRenderMode ( GLenum mode ) ;
+FUNCTION: GLenum glGetError ( ) ;
+! FUNCTION: const GLubyte* glGetString ( GLenum name ) ;
+FUNCTION: void glFinish ( ) ;
+FUNCTION: void glFlush ( ) ;
+FUNCTION: void glHint ( GLenum target, GLenum mode ) ;
+
+FUNCTION: void glClearDepth ( GLclampd depth ) ;
+FUNCTION: void glDepthFunc ( GLenum func ) ;
+FUNCTION: void glDepthMask ( GLboolean flag ) ;
+FUNCTION: void glDepthRange ( GLclampd near_val, GLclampd far_val ) ;
+
+FUNCTION: void glClearAccum ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) ;
+FUNCTION: void glAccum ( GLenum op, GLfloat value ) ;
+
+FUNCTION: void glMatrixMode ( GLenum mode ) ;
+FUNCTION: void glOrtho ( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val ) ;
+FUNCTION: void glFrustum ( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val ) ;
+FUNCTION: void glViewport ( GLint x, GLint y, GLsizei width, GLsizei height ) ;
+FUNCTION: void glPushMatrix ( ) ;
+FUNCTION: void glPopMatrix ( ) ;
+FUNCTION: void glLoadIdentity ( ) ;
+! FUNCTION: void glLoadMatrixd ( const GLdouble *m ) ;
+! FUNCTION: void glLoadMatrixf ( const GLfloat *m ) ;
+! FUNCTION: void glMultMatrixd ( const GLdouble *m ) ;
+! FUNCTION: void glMultMatrixf ( const GLfloat *m ) ;
+FUNCTION: void glRotated ( GLdouble angle, GLdouble x, GLdouble y, GLdouble z ) ;
+FUNCTION: void glRotatef ( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ) ;
+FUNCTION: void glScaled ( GLdouble x, GLdouble y, GLdouble z ) ;
+FUNCTION: void glScalef ( GLfloat x, GLfloat y, GLfloat z ) ;
+FUNCTION: void glTranslated ( GLdouble x, GLdouble y, GLdouble z ) ;
+FUNCTION: void glTranslatef ( GLfloat x, GLfloat y, GLfloat z ) ;
+
+
+FUNCTION: GLboolean glIsList ( GLuint list ) ;
+FUNCTION: void glDeleteLists ( GLuint list, GLsizei range ) ;
+FUNCTION: GLuint glGenLists ( GLsizei range ) ;
+FUNCTION: void glNewList ( GLuint list, GLenum mode ) ;
+FUNCTION: void glEndList ( ) ;
+FUNCTION: void glCallList ( GLuint list ) ;
+! FUNCTION: void glCallLists ( GLsizei n, GLenum type, const GLvoid *lists ) ;
+FUNCTION: void glListBase ( GLuint base ) ;
+
+FUNCTION: void glBegin ( GLenum mode ) ;
+FUNCTION: void glEnd ( ) ;
+
+FUNCTION: void glVertex2d ( GLdouble x, GLdouble y ) ;
+FUNCTION: void glVertex2f ( GLfloat x, GLfloat y ) ;
+FUNCTION: void glVertex2i ( GLint x, GLint y ) ;
+FUNCTION: void glVertex2s ( GLshort x, GLshort y ) ;
+
+FUNCTION: void glVertex3d ( GLdouble x, GLdouble y, GLdouble z ) ;
+FUNCTION: void glVertex3f ( GLfloat x, GLfloat y, GLfloat z ) ;
+FUNCTION: void glVertex3i ( GLint x, GLint y, GLint z ) ;
+FUNCTION: void glVertex3s ( GLshort x, GLshort y, GLshort z ) ;
+
+FUNCTION: void glVertex4d ( GLdouble x, GLdouble y, GLdouble z, GLdouble w ) ;
+FUNCTION: void glVertex4f ( GLfloat x, GLfloat y, GLfloat z, GLfloat w ) ;
+FUNCTION: void glVertex4i ( GLint x, GLint y, GLint z, GLint w ) ;
+FUNCTION: void glVertex4s ( GLshort x, GLshort y, GLshort z, GLshort w ) ;
+
+! FUNCTION: void glVertex2dv ( const GLdouble *v ) ;
+! FUNCTION: void glVertex2fv ( const GLfloat *v ) ;
+! FUNCTION: void glVertex2iv ( const GLint *v ) ;
+! FUNCTION: void glVertex2sv ( const GLshort *v ) ;
+! 
+! FUNCTION: void glVertex3dv ( const GLdouble *v ) ;
+! FUNCTION: void glVertex3fv ( const GLfloat *v ) ;
+! FUNCTION: void glVertex3iv ( const GLint *v ) ;
+! FUNCTION: void glVertex3sv ( const GLshort *v ) ;
+! 
+! FUNCTION: void glVertex4dv ( const GLdouble *v ) ;
+! FUNCTION: void glVertex4fv ( const GLfloat *v ) ;
+! FUNCTION: void glVertex4iv ( const GLint *v ) ;
+! FUNCTION: void glVertex4sv ( const GLshort *v ) ;
+
+FUNCTION: void glNormal3b ( GLbyte nx, GLbyte ny, GLbyte nz ) ;
+FUNCTION: void glNormal3d ( GLdouble nx, GLdouble ny, GLdouble nz ) ;
+FUNCTION: void glNormal3f ( GLfloat nx, GLfloat ny, GLfloat nz ) ;
+FUNCTION: void glNormal3i ( GLint nx, GLint ny, GLint nz ) ;
+FUNCTION: void glNormal3s ( GLshort nx, GLshort ny, GLshort nz ) ;
+
+! FUNCTION: void glNormal3bv ( const GLbyte *v ) ;
+! FUNCTION: void glNormal3dv ( const GLdouble *v ) ;
+! FUNCTION: void glNormal3fv ( const GLfloat *v ) ;
+! FUNCTION: void glNormal3iv ( const GLint *v ) ;
+! FUNCTION: void glNormal3sv ( const GLshort *v ) ;
+
+FUNCTION: void glIndexd ( GLdouble c ) ;
+FUNCTION: void glIndexf ( GLfloat c ) ;
+FUNCTION: void glIndexi ( GLint c ) ;
+FUNCTION: void glIndexs ( GLshort c ) ;
+FUNCTION: void glIndexub ( GLubyte c ) ;
+
+! FUNCTION: void glIndexdv ( const GLdouble *c ) ;
+! FUNCTION: void glIndexfv ( const GLfloat *c ) ;
+! FUNCTION: void glIndexiv ( const GLint *c ) ;
+! FUNCTION: void glIndexsv ( const GLshort *c ) ;
+! FUNCTION: void glIndexubv ( const GLubyte *c ) ;
+
+FUNCTION: void glColor3b ( GLbyte red, GLbyte green, GLbyte blue ) ;
+FUNCTION: void glColor3d ( GLdouble red, GLdouble green, GLdouble blue ) ;
+FUNCTION: void glColor3f ( GLfloat red, GLfloat green, GLfloat blue ) ;
+FUNCTION: void glColor3i ( GLint red, GLint green, GLint blue ) ;
+FUNCTION: void glColor3s ( GLshort red, GLshort green, GLshort blue ) ;
+FUNCTION: void glColor3ub ( GLubyte red, GLubyte green, GLubyte blue ) ;
+FUNCTION: void glColor3ui ( GLuint red, GLuint green, GLuint blue ) ;
+FUNCTION: void glColor3us ( GLushort red, GLushort green, GLushort blue ) ;
+
+FUNCTION: void glColor4b ( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha ) ;
+FUNCTION: void glColor4d ( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha ) ;
+FUNCTION: void glColor4f ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) ;
+FUNCTION: void glColor4i ( GLint red, GLint green, GLint blue, GLint alpha ) ;
+FUNCTION: void glColor4s ( GLshort red, GLshort green, GLshort blue, GLshort alpha ) ;
+FUNCTION: void glColor4ub ( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ) ;
+FUNCTION: void glColor4ui ( GLuint red, GLuint green, GLuint blue, GLuint alpha ) ;
+FUNCTION: void glColor4us ( GLushort red, GLushort green, GLushort blue, GLushort alpha ) ;
+
+! FUNCTION: void glColor3bv ( const GLbyte *v ) ;
+! FUNCTION: void glColor3dv ( const GLdouble *v ) ;
+! FUNCTION: void glColor3fv ( const GLfloat *v ) ;
+! FUNCTION: void glColor3iv ( const GLint *v ) ;
+! FUNCTION: void glColor3sv ( const GLshort *v ) ;
+! FUNCTION: void glColor3ubv ( const GLubyte *v ) ;
+! FUNCTION: void glColor3uiv ( const GLuint *v ) ;
+! FUNCTION: void glColor3usv ( const GLushort *v ) ;
+
+! FUNCTION: void glColor4bv ( const GLbyte *v ) ;
+! FUNCTION: void glColor4dv ( const GLdouble *v ) ;
+! FUNCTION: void glColor4fv ( const GLfloat *v ) ;
+! FUNCTION: void glColor4iv ( const GLint *v ) ;
+! FUNCTION: void glColor4sv ( const GLshort *v ) ;
+! FUNCTION: void glColor4ubv ( const GLubyte *v ) ;
+! FUNCTION: void glColor4uiv ( const GLuint *v ) ;
+! FUNCTION: void glColor4usv ( const GLushort *v ) ;
+
+
+FUNCTION: void glTexCoord1d ( GLdouble s ) ;
+FUNCTION: void glTexCoord1f ( GLfloat s ) ;
+FUNCTION: void glTexCoord1i ( GLint s ) ;
+FUNCTION: void glTexCoord1s ( GLshort s ) ;
+
+FUNCTION: void glTexCoord2d ( GLdouble s, GLdouble t ) ;
+FUNCTION: void glTexCoord2f ( GLfloat s, GLfloat t ) ;
+FUNCTION: void glTexCoord2i ( GLint s, GLint t ) ;
+FUNCTION: void glTexCoord2s ( GLshort s, GLshort t ) ;
+
+FUNCTION: void glTexCoord3d ( GLdouble s, GLdouble t, GLdouble r ) ;
+FUNCTION: void glTexCoord3f ( GLfloat s, GLfloat t, GLfloat r ) ;
+FUNCTION: void glTexCoord3i ( GLint s, GLint t, GLint r ) ;
+FUNCTION: void glTexCoord3s ( GLshort s, GLshort t, GLshort r ) ;
+
+FUNCTION: void glTexCoord4d ( GLdouble s, GLdouble t, GLdouble r, GLdouble q ) ;
+FUNCTION: void glTexCoord4f ( GLfloat s, GLfloat t, GLfloat r, GLfloat q ) ;
+FUNCTION: void glTexCoord4i ( GLint s, GLint t, GLint r, GLint q ) ;
+FUNCTION: void glTexCoord4s ( GLshort s, GLshort t, GLshort r, GLshort q ) ;
+
+! FUNCTION: void glTexCoord1dv ( const GLdouble *v ) ;
+! FUNCTION: void glTexCoord1fv ( const GLfloat *v ) ;
+! FUNCTION: void glTexCoord1iv ( const GLint *v ) ;
+! FUNCTION: void glTexCoord1sv ( const GLshort *v ) ;
+! 
+! FUNCTION: void glTexCoord2dv ( const GLdouble *v ) ;
+! FUNCTION: void glTexCoord2fv ( const GLfloat *v ) ;
+! FUNCTION: void glTexCoord2iv ( const GLint *v ) ;
+! FUNCTION: void glTexCoord2sv ( const GLshort *v ) ;
+! 
+! FUNCTION: void glTexCoord3dv ( const GLdouble *v ) ;
+! FUNCTION: void glTexCoord3fv ( const GLfloat *v ) ;
+! FUNCTION: void glTexCoord3iv ( const GLint *v ) ;
+! FUNCTION: void glTexCoord3sv ( const GLshort *v ) ;
+! 
+! FUNCTION: void glTexCoord4dv ( const GLdouble *v ) ;
+! FUNCTION: void glTexCoord4fv ( const GLfloat *v ) ;
+! FUNCTION: void glTexCoord4iv ( const GLint *v ) ;
+! FUNCTION: void glTexCoord4sv ( const GLshort *v ) ;
+
+FUNCTION: void glRasterPos2d ( GLdouble x, GLdouble y ) ;
+FUNCTION: void glRasterPos2f ( GLfloat x, GLfloat y ) ;
+FUNCTION: void glRasterPos2i ( GLint x, GLint y ) ;
+FUNCTION: void glRasterPos2s ( GLshort x, GLshort y ) ;
+
+FUNCTION: void glRasterPos3d ( GLdouble x, GLdouble y, GLdouble z ) ;
+FUNCTION: void glRasterPos3f ( GLfloat x, GLfloat y, GLfloat z ) ;
+FUNCTION: void glRasterPos3i ( GLint x, GLint y, GLint z ) ;
+FUNCTION: void glRasterPos3s ( GLshort x, GLshort y, GLshort z ) ;
+
+FUNCTION: void glRasterPos4d ( GLdouble x, GLdouble y, GLdouble z, GLdouble w ) ;
+FUNCTION: void glRasterPos4f ( GLfloat x, GLfloat y, GLfloat z, GLfloat w ) ;
+FUNCTION: void glRasterPos4i ( GLint x, GLint y, GLint z, GLint w ) ;
+FUNCTION: void glRasterPos4s ( GLshort x, GLshort y, GLshort z, GLshort w ) ;
+
+! FUNCTION: void glRasterPos2dv ( const GLdouble *v ) ;
+! FUNCTION: void glRasterPos2fv ( const GLfloat *v ) ;
+! FUNCTION: void glRasterPos2iv ( const GLint *v ) ;
+! FUNCTION: void glRasterPos2sv ( const GLshort *v ) ;
+! 
+! FUNCTION: void glRasterPos3dv ( const GLdouble *v ) ;
+! FUNCTION: void glRasterPos3fv ( const GLfloat *v ) ;
+! FUNCTION: void glRasterPos3iv ( const GLint *v ) ;
+! FUNCTION: void glRasterPos3sv ( const GLshort *v ) ;
+! 
+! FUNCTION: void glRasterPos4dv ( const GLdouble *v ) ;
+! FUNCTION: void glRasterPos4fv ( const GLfloat *v ) ;
+! FUNCTION: void glRasterPos4iv ( const GLint *v ) ;
+! FUNCTION: void glRasterPos4sv ( const GLshort *v ) ;
+
+
+FUNCTION: void glRectd ( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ) ;
+FUNCTION: void glRectf ( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ) ;
+FUNCTION: void glRecti ( GLint x1, GLint y1, GLint x2, GLint y2 ) ;
+FUNCTION: void glRects ( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ) ;
+
+! FUNCTION: void glRectdv ( const GLdouble *v1, const GLdouble *v2 ) ;
+! FUNCTION: void glRectfv ( const GLfloat *v1, const GLfloat *v2 ) ;
+! FUNCTION: void glRectiv ( const GLint *v1, const GLint *v2 ) ;
+! FUNCTION: void glRectsv ( const GLshort *v1, const GLshort *v2 ) ;
+
+
+! Vertex Arrays (1.1)
+
+! FUNCTION: void glVertexPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid* ptr );
+! FUNCTION: void glNormalPointer ( GLenum type, GLsizei stride, const GLvoid* ptr ) ;
+! FUNCTION: void glColorPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid* ptr );
+! FUNCTION: void glIndexPointer ( GLenum type, GLsizei stride, const GLvoid* ptr ) ;
+! FUNCTION: void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid* ptr );
+! FUNCTION: void glEdgeFlagPointer ( GLsizei stride, const GLvoid* ptr ) ;
+! FUNCTION: void glGetPointerv ( GLenum pname, GLvoid** params ) ;
+! FUNCTION: void glArrayElement ( GLint i ) ;
+! FUNCTION: void glDrawArrays ( GLenum mode, GLint first, GLsizei count ) ;
+! FUNCTION: void glDrawElements ( GLenum mode, GLsizei count, GLenum type, const GLvoid* indices );
+! FUNCTION: void glInterleavedArrays ( GLenum format, GLsizei stride, const GLvoid* pointer ) ;
+
+
+! Lighting
+
+FUNCTION: void glShadeModel ( GLenum mode ) ;
+
+FUNCTION: void glLightf ( GLenum light, GLenum pname, GLfloat param ) ;
+FUNCTION: void glLighti ( GLenum light, GLenum pname, GLint param ) ;
+! FUNCTION: void glLightfv ( GLenum light, GLenum pname, const GLfloat *params ) ;
+! FUNCTION: void glLightiv ( GLenum light, GLenum pname, const GLint *params ) ;
+! FUNCTION: void glGetLightfv ( GLenum light, GLenum pname, GLfloat *params ) ;
+! FUNCTION: void glGetLightiv ( GLenum light, GLenum pname, GLint *params ) ;
+
+FUNCTION: void glLightModelf ( GLenum pname, GLfloat param ) ;
+FUNCTION: void glLightModeli ( GLenum pname, GLint param ) ;
+! FUNCTION: void glLightModelfv ( GLenum pname, const GLfloat *params ) ;
+! FUNCTION: void glLightModeliv ( GLenum pname, const GLint *params ) ;
+
+FUNCTION: void glMaterialf ( GLenum face, GLenum pname, GLfloat param ) ;
+FUNCTION: void glMateriali ( GLenum face, GLenum pname, GLint param ) ;
+! FUNCTION: void glMaterialfv ( GLenum face, GLenum pname, const GLfloat *params ) ;
+! FUNCTION: void glMaterialiv ( GLenum face, GLenum pname, const GLint *params ) ;
+
+! FUNCTION: void glGetMaterialfv ( GLenum face, GLenum pname, GLfloat *params ) ;
+! FUNCTION: void glGetMaterialiv ( GLenum face, GLenum pname, GLint *params ) ;
+
+FUNCTION: void glColorMaterial ( GLenum face, GLenum mode ) ;
+
+
+! Raster functions
+
+FUNCTION: void glPixelZoom ( GLfloat xfactor, GLfloat yfactor ) ;
+
+FUNCTION: void glPixelStoref ( GLenum pname, GLfloat param ) ;
+FUNCTION: void glPixelStorei ( GLenum pname, GLint param ) ;
+
+FUNCTION: void glPixelTransferf ( GLenum pname, GLfloat param ) ;
+FUNCTION: void glPixelTransferi ( GLenum pname, GLint param ) ;
+
+! FUNCTION: void glPixelMapfv ( GLenum map, GLsizei mapsize, const GLfloat *values ) ;
+! FUNCTION: void glPixelMapuiv ( GLenum map, GLsizei mapsize, const GLuint *values ) ;
+! FUNCTION: void glPixelMapusv ( GLenum map, GLsizei mapsize, const GLushort *values ) ;
+
+! FUNCTION: void glGetPixelMapfv ( GLenum map, GLfloat *values ) ;
+! FUNCTION: void glGetPixelMapuiv ( GLenum map, GLuint *values ) ;
+! FUNCTION: void glGetPixelMapusv ( GLenum map, GLushort *values ) ;
+
+! FUNCTION: void glBitmap ( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap ) ;
+
+FUNCTION: void glReadPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels ) ;
+
+! FUNCTION: void glDrawPixels ( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels ) ;
+FUNCTION: void glCopyPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type ) ;
+
+! Stenciling
+FUNCTION: void glStencilFunc ( GLenum func, GLint ref, GLuint mask ) ;
+FUNCTION: void glStencilMask ( GLuint mask ) ;
+FUNCTION: void glStencilOp ( GLenum fail, GLenum zfail, GLenum zpass ) ;
+FUNCTION: void glClearStencil ( GLint s ) ;
+
+
+! Texture mapping
+
+FUNCTION: void glTexGend ( GLenum coord, GLenum pname, GLdouble param ) ;
+FUNCTION: void glTexGenf ( GLenum coord, GLenum pname, GLfloat param ) ;
+FUNCTION: void glTexGeni ( GLenum coord, GLenum pname, GLint param ) ;
+
+! FUNCTION: void glTexGendv ( GLenum coord, GLenum pname, const GLdouble *params ) ;
+! FUNCTION: void glTexGenfv ( GLenum coord, GLenum pname, const GLfloat *params ) ;
+! FUNCTION: void glTexGeniv ( GLenum coord, GLenum pname, const GLint *params ) ;
+
+! FUNCTION: void glGetTexGendv ( GLenum coord, GLenum pname, GLdouble *params ) ;
+! FUNCTION: void glGetTexGenfv ( GLenum coord, GLenum pname, GLfloat *params ) ;
+! FUNCTION: void glGetTexGeniv ( GLenum coord, GLenum pname, GLint *params ) ;
+
+FUNCTION: void glTexEnvf ( GLenum target, GLenum pname, GLfloat param ) ;
+FUNCTION: void glTexEnvi ( GLenum target, GLenum pname, GLint param ) ;
+! FUNCTION: void glTexEnvfv ( GLenum target, GLenum pname, const GLfloat *params ) ;
+! FUNCTION: void glTexEnviv ( GLenum target, GLenum pname, const GLint *params ) ;
+
+! FUNCTION: void glGetTexEnvfv ( GLenum target, GLenum pname, GLfloat *params ) ;
+! FUNCTION: void glGetTexEnviv ( GLenum target, GLenum pname, GLint *params ) ;
+
+FUNCTION: void glTexParameterf ( GLenum target, GLenum pname, GLfloat param ) ;
+FUNCTION: void glTexParameteri ( GLenum target, GLenum pname, GLint param ) ;
+
+! FUNCTION: void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params ) ;
+! FUNCTION: void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params ) ;
+
+! FUNCTION: void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params) ;
+! FUNCTION: void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params ) ;
+
+! FUNCTION: void glGetTexLevelParameterfv ( GLenum target, GLint level, GLenum pname, GLfloat *params );                                       
+! FUNCTION: void glGetTexLevelParameteriv ( GLenum target, GLint level, GLenum pname, GLint *params );                                         
+
+! FUNCTION: void glTexImage1D ( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid* pixels ) ;
+
+! FUNCTION: void glTexImage2D ( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels ) ;
+
+! FUNCTION: void glGetTexImage ( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels );                          
+
+
+! 1.1 functions
+
+! FUNCTION: void glGenTextures ( GLsizei n, GLuint *textures ) ;
+
+! FUNCTION: void glDeleteTextures ( GLsizei n, const GLuint *textures) ;
+
+FUNCTION: void glBindTexture ( GLenum target, GLuint texture ) ;
+
+! FUNCTION: void glPrioritizeTextures ( GLsizei n, const GLuint *textures, const GLclampf *priorities ) ;
+
+! FUNCTION: GLboolean glAreTexturesResident ( GLsizei n, const GLuint *textures, GLboolean *residences ) ;
+
+FUNCTION: GLboolean glIsTexture ( GLuint texture ) ;
+
+! FUNCTION: void glTexSubImage1D ( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels ) ;
+
+! FUNCTION: void glTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ) ;
+
+FUNCTION: void glCopyTexImage1D ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border ) ;
+
+FUNCTION: void glCopyTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ) ;
+
+FUNCTION: void glCopyTexSubImage1D ( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width ) ;
+
+FUNCTION: void glCopyTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height ) ;
+
+
+! Evaluators
+
+! FUNCTION: void glMap1d ( GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points ) ;
+! FUNCTION: void glMap1f ( GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points ) ;
+
+! FUNCTION: void glMap2d ( GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points ) ;
+! FUNCTION: void glMap2f ( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points ) ;
+
+! GFUNCTION: void glGetMapdv ( GLenum target, GLenum query, GLdouble *v ) ;
+! FUNCTION: void glGetMapfv ( GLenum target, GLenum query, GLfloat *v ) ;
+! FUNCTION: void glGetMapiv ( GLenum target, GLenum query, GLint *v ) ;
+
+FUNCTION: void glEvalCoord1d ( GLdouble u ) ;
+FUNCTION: void glEvalCoord1f ( GLfloat u ) ;
+
+! FUNCTION: void glEvalCoord1dv ( const GLdouble *u ) ;
+! FUNCTION: void glEvalCoord1fv ( const GLfloat *u ) ;
+
+FUNCTION: void glEvalCoord2d ( GLdouble u, GLdouble v ) ;
+FUNCTION: void glEvalCoord2f ( GLfloat u, GLfloat v ) ;
+
+! FUNCTION: void glEvalCoord2dv ( const GLdouble *u ) ;
+! FUNCTION: void glEvalCoord2fv ( const GLfloat *u ) ;
+
+! FUNCTION: void glMapGrid1d ( GLint un, GLdouble u1, GLdouble u2 ) ;
+! FUNCTION: void glMapGrid1f ( GLint un, GLfloat u1, GLfloat u2 ) ;
+
+FUNCTION: void glMapGrid2d ( GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2 ) ;
+FUNCTION: void glMapGrid2f ( GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2 ) ;
+
+FUNCTION: void glEvalPoint1 ( GLint i ) ;
+FUNCTION: void glEvalPoint2 ( GLint i, GLint j ) ;
+
+FUNCTION: void glEvalMesh1 ( GLenum mode, GLint i1, GLint i2 ) ;
+FUNCTION: void glEvalMesh2 ( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ) ;
+
+
+! Fog
+
+FUNCTION: void glFogf ( GLenum pname, GLfloat param ) ;
+FUNCTION: void glFogi ( GLenum pname, GLint param ) ;
+! FUNCTION: void glFogfv ( GLenum pname, const GLfloat *params ) ;
+! FUNCTION: void glFogiv ( GLenum pname, const GLint *params ) ;
+
+
+! Selection and Feedback
+
+! FUNCTION: void glFeedbackBuffer ( GLsizei size, GLenum type, GLfloat *buffer ) ;
+
+FUNCTION: void glPassThrough ( GLfloat token ) ;
+! FUNCTION: void glSelectBuffer ( GLsizei size, GLuint *buffer ) ;
+FUNCTION: void glInitNames ( ) ;
+FUNCTION: void glLoadName ( GLuint name ) ;
+FUNCTION: void glPushName ( GLuint name ) ;
+FUNCTION: void glPopName ( ) ;
+
+
+! OpenGL 1.2
+
+: GL_PACK_SKIP_IMAGES               HEX: 806B ;
+: GL_PACK_IMAGE_HEIGHT              HEX: 806C ;
+: GL_UNPACK_SKIP_IMAGES             HEX: 806D ;
+: GL_UNPACK_IMAGE_HEIGHT            HEX: 806E ;
+: GL_TEXTURE_3D                     HEX: 806F ;
+: GL_PROXY_TEXTURE_3D               HEX: 8070 ;
+: GL_TEXTURE_DEPTH                  HEX: 8071 ;
+: GL_TEXTURE_WRAP_R                 HEX: 8072 ;
+: GL_MAX_3D_TEXTURE_SIZE            HEX: 8073 ;
+: GL_BGR                            HEX: 80E0 ;
+: GL_BGRA                           HEX: 80E1 ;
+: GL_UNSIGNED_BYTE_3_3_2            HEX: 8032 ;
+: GL_UNSIGNED_BYTE_2_3_3_REV        HEX: 8362 ;
+: GL_UNSIGNED_SHORT_5_6_5           HEX: 8363 ;
+: GL_UNSIGNED_SHORT_5_6_5_REV       HEX: 8364 ;
+: GL_UNSIGNED_SHORT_4_4_4_4         HEX: 8033 ;
+: GL_UNSIGNED_SHORT_4_4_4_4_REV     HEX: 8365 ;
+: GL_UNSIGNED_SHORT_5_5_5_1         HEX: 8034 ;
+: GL_UNSIGNED_SHORT_1_5_5_5_REV     HEX: 8366 ;
+: GL_UNSIGNED_INT_8_8_8_8           HEX: 8035 ;
+: GL_UNSIGNED_INT_8_8_8_8_REV       HEX: 8367 ;
+: GL_UNSIGNED_INT_10_10_10_2        HEX: 8036 ;
+: GL_UNSIGNED_INT_2_10_10_10_REV    HEX: 8368 ;
+: GL_RESCALE_NORMAL                 HEX: 803A ;
+: GL_LIGHT_MODEL_COLOR_CONTROL      HEX: 81F8 ;
+: GL_SINGLE_COLOR                   HEX: 81F9 ;
+: GL_SEPARATE_SPECULAR_COLOR        HEX: 81FA ;
+: GL_CLAMP_TO_EDGE                  HEX: 812F ;
+: GL_TEXTURE_MIN_LOD                HEX: 813A ;
+: GL_TEXTURE_MAX_LOD                HEX: 813B ;
+: GL_TEXTURE_BASE_LEVEL             HEX: 813C ;
+: GL_TEXTURE_MAX_LEVEL              HEX: 813D ;
+: GL_MAX_ELEMENTS_VERTICES          HEX: 80E8 ;
+: GL_MAX_ELEMENTS_INDICES           HEX: 80E9 ;
+: GL_ALIASED_POINT_SIZE_RANGE       HEX: 846D ;
+: GL_ALIASED_LINE_WIDTH_RANGE       HEX: 846E ;
+
+! FUNCTION: void glDrawRangeElements ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices ) ;
+
+! FUNCTION: void glTexImage3D ( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) ;
+
+! FUNCTION: void glTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) ;
+
+! FUNCTION: void glCopyTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height ) ;
+
+! TODO: the rest. looks fiddly
+
+! OpenGL 1.3
+: GL_ACTIVE_TEXTURE                 HEX: 84E0 ;
+: GL_CLIENT_ACTIVE_TEXTURE          HEX: 84E1 ;
+: GL_MAX_TEXTURE_UNITS              HEX: 84E2 ;
+: GL_TEXTURE0                       HEX: 84C0 ;
+: GL_TEXTURE1                       HEX: 84C1 ;
+: GL_TEXTURE2                       HEX: 84C2 ;
+: GL_TEXTURE3                       HEX: 84C3 ;
+: GL_TEXTURE4                       HEX: 84C4 ;
+: GL_TEXTURE5                       HEX: 84C5 ;
+: GL_TEXTURE6                       HEX: 84C6 ;
+: GL_TEXTURE7                       HEX: 84C7 ;
+: GL_TEXTURE8                       HEX: 84C8 ;
+: GL_TEXTURE9                       HEX: 84C9 ;
+: GL_TEXTURE10                      HEX: 84CA ;
+: GL_TEXTURE11                      HEX: 84CB ;
+: GL_TEXTURE12                      HEX: 84CC ;
+: GL_TEXTURE13                      HEX: 84CD ;
+: GL_TEXTURE14                      HEX: 84CE ;
+: GL_TEXTURE15                      HEX: 84CF ;
+: GL_TEXTURE16                      HEX: 84D0 ;
+: GL_TEXTURE17                      HEX: 84D1 ;
+: GL_TEXTURE18                      HEX: 84D2 ;
+: GL_TEXTURE19                      HEX: 84D3 ;
+: GL_TEXTURE20                      HEX: 84D4 ;
+: GL_TEXTURE21                      HEX: 84D5 ;
+: GL_TEXTURE22                      HEX: 84D6 ;
+: GL_TEXTURE23                      HEX: 84D7 ;
+: GL_TEXTURE24                      HEX: 84D8 ;
+: GL_TEXTURE25                      HEX: 84D9 ;
+: GL_TEXTURE26                      HEX: 84DA ;
+: GL_TEXTURE27                      HEX: 84DB ;
+: GL_TEXTURE28                      HEX: 84DC ;
+: GL_TEXTURE29                      HEX: 84DD ;
+: GL_TEXTURE30                      HEX: 84DE ;
+: GL_TEXTURE31                      HEX: 84DF ;
+: GL_NORMAL_MAP                     HEX: 8511 ;
+: GL_REFLECTION_MAP                 HEX: 8512 ;
+: GL_TEXTURE_CUBE_MAP               HEX: 8513 ;
+: GL_TEXTURE_BINDING_CUBE_MAP       HEX: 8514 ;
+: GL_TEXTURE_CUBE_MAP_POSITIVE_X    HEX: 8515 ;
+: GL_TEXTURE_CUBE_MAP_NEGATIVE_X    HEX: 8516 ;
+: GL_TEXTURE_CUBE_MAP_POSITIVE_Y    HEX: 8517 ;
+: GL_TEXTURE_CUBE_MAP_NEGATIVE_Y    HEX: 8518 ;
+: GL_TEXTURE_CUBE_MAP_POSITIVE_Z    HEX: 8519 ;
+: GL_TEXTURE_CUBE_MAP_NEGATIVE_Z    HEX: 851A ;
+: GL_PROXY_TEXTURE_CUBE_MAP         HEX: 851B ;
+: GL_MAX_CUBE_MAP_TEXTURE_SIZE      HEX: 851C ;
+: GL_COMBINE                        HEX: 8570 ;
+: GL_COMBINE_RGB                    HEX: 8571 ;
+: GL_COMBINE_ALPHA                  HEX: 8572 ;
+: GL_RGB_SCALE                      HEX: 8573 ;
+: GL_ADD_SIGNED                     HEX: 8574 ;
+: GL_INTERPOLATE                    HEX: 8575 ;
+: GL_CONSTANT                       HEX: 8576 ;
+: GL_PRIMARY_COLOR                  HEX: 8577 ;
+: GL_PREVIOUS                       HEX: 8578 ;
+: GL_SOURCE0_RGB                    HEX: 8580 ;
+: GL_SOURCE1_RGB                    HEX: 8581 ;
+: GL_SOURCE2_RGB                    HEX: 8582 ;
+: GL_SOURCE0_ALPHA                  HEX: 8588 ;
+: GL_SOURCE1_ALPHA                  HEX: 8589 ;
+: GL_SOURCE2_ALPHA                  HEX: 858A ;
+: GL_OPERAND0_RGB                   HEX: 8590 ;
+: GL_OPERAND1_RGB                   HEX: 8591 ;
+: GL_OPERAND2_RGB                   HEX: 8592 ;
+: GL_OPERAND0_ALPHA                 HEX: 8598 ;
+: GL_OPERAND1_ALPHA                 HEX: 8599 ;
+: GL_OPERAND2_ALPHA                 HEX: 859A ;
+: GL_SUBTRACT                       HEX: 84E7 ;
+: GL_TRANSPOSE_MODELVIEW_MATRIX     HEX: 84E3 ;
+: GL_TRANSPOSE_PROJECTION_MATRIX    HEX: 84E4 ;
+: GL_TRANSPOSE_TEXTURE_MATRIX       HEX: 84E5 ;
+: GL_TRANSPOSE_COLOR_MATRIX         HEX: 84E6 ;
+: GL_COMPRESSED_ALPHA               HEX: 84E9 ;
+: GL_COMPRESSED_LUMINANCE           HEX: 84EA ;
+: GL_COMPRESSED_LUMINANCE_ALPHA     HEX: 84EB ;
+: GL_COMPRESSED_INTENSITY           HEX: 84EC ;
+: GL_COMPRESSED_RGB                 HEX: 84ED ;
+: GL_COMPRESSED_RGBA                HEX: 84EE ;
+: GL_TEXTURE_COMPRESSION_HINT       HEX: 84EF ;
+: GL_TEXTURE_COMPRESSED_IMAGE_SIZE  HEX: 86A0 ;
+: GL_TEXTURE_COMPRESSED             HEX: 86A1 ;
+: GL_NUM_COMPRESSED_TEXTURE_FORMATS HEX: 86A2 ;
+: GL_COMPRESSED_TEXTURE_FORMATS     HEX: 86A3 ;
+: GL_DOT3_RGB                       HEX: 86AE ;
+: GL_DOT3_RGBA                      HEX: 86AF ;
+: GL_CLAMP_TO_BORDER                HEX: 812D ;
+: GL_MULTISAMPLE                    HEX: 809D ;
+: GL_SAMPLE_ALPHA_TO_COVERAGE       HEX: 809E ;
+: GL_SAMPLE_ALPHA_TO_ONE            HEX: 809F ;
+: GL_SAMPLE_COVERAGE                HEX: 80A0 ;
+: GL_SAMPLE_BUFFERS                 HEX: 80A8 ;
+: GL_SAMPLES                        HEX: 80A9 ;
+: GL_SAMPLE_COVERAGE_VALUE          HEX: 80AA ;
+: GL_SAMPLE_COVERAGE_INVERT         HEX: 80AB ;
+: GL_MULTISAMPLE_BIT                HEX: 20000000 ;
+
+! OpenGL 1.4
+: GL_POINT_SIZE_MIN                 HEX: 8126 ;
+: GL_POINT_SIZE_MAX                 HEX: 8127 ;
+: GL_POINT_FADE_THRESHOLD_SIZE      HEX: 8128 ;
+: GL_POINT_DISTANCE_ATTENUATION     HEX: 8129 ;
+: GL_FOG_COORDINATE_SOURCE          HEX: 8450 ;
+: GL_FOG_COORDINATE                 HEX: 8451 ;
+: GL_FRAGMENT_DEPTH                 HEX: 8452 ;
+: GL_CURRENT_FOG_COORDINATE         HEX: 8453 ;
+: GL_FOG_COORDINATE_ARRAY_TYPE      HEX: 8454 ;
+: GL_FOG_COORDINATE_ARRAY_STRIDE    HEX: 8455 ;
+: GL_FOG_COORDINATE_ARRAY_POINTER   HEX: 8456 ;
+: GL_FOG_COORDINATE_ARRAY           HEX: 8457 ;
+: GL_COLOR_SUM                      HEX: 8458 ;
+: GL_CURRENT_SECONDARY_COLOR        HEX: 8459 ;
+: GL_SECONDARY_COLOR_ARRAY_SIZE     HEX: 845A ;
+: GL_SECONDARY_COLOR_ARRAY_TYPE     HEX: 845B ;
+: GL_SECONDARY_COLOR_ARRAY_STRIDE   HEX: 845C ;
+: GL_SECONDARY_COLOR_ARRAY_POINTER  HEX: 845D ;
+: GL_SECONDARY_COLOR_ARRAY          HEX: 845E ;
+: GL_INCR_WRAP                      HEX: 8507 ;
+: GL_DECR_WRAP                      HEX: 8508 ;
+: GL_MAX_TEXTURE_LOD_BIAS           HEX: 84FD ;
+: GL_TEXTURE_FILTER_CONTROL         HEX: 8500 ;
+: GL_TEXTURE_LOD_BIAS               HEX: 8501 ;
+: GL_GENERATE_MIPMAP                HEX: 8191 ;
+: GL_GENERATE_MIPMAP_HINT           HEX: 8192 ;
+: GL_BLEND_DST_RGB                  HEX: 80C8 ;
+: GL_BLEND_SRC_RGB                  HEX: 80C9 ;
+: GL_BLEND_DST_ALPHA                HEX: 80CA ;
+: GL_BLEND_SRC_ALPHA                HEX: 80CB ;
+: GL_MIRRORED_REPEAT                HEX: 8370 ;
+: GL_DEPTH_COMPONENT16              HEX: 81A5 ;
+: GL_DEPTH_COMPONENT24              HEX: 81A6 ;
+: GL_DEPTH_COMPONENT32              HEX: 81A7 ;
+: GL_TEXTURE_DEPTH_SIZE             HEX: 884A ;
+: GL_DEPTH_TEXTURE_MODE             HEX: 884B ;
+: GL_TEXTURE_COMPARE_MODE           HEX: 884C ;
+: GL_TEXTURE_COMPARE_FUNC           HEX: 884D ;
+: GL_COMPARE_R_TO_TEXTURE           HEX: 884E ;
diff --git a/contrib/gl/glu.factor b/contrib/gl/glu.factor
new file mode 100644 (file)
index 0000000..172f28f
--- /dev/null
@@ -0,0 +1,253 @@
+! Copyright (C) 2005 Alex Chapman.
+! See http://factor.sf.net/license.txt for BSD license.
+IN: gl
+USING: alien gl-internals gl ;
+
+! These are defined as structs in glu.h, but we only ever use pointers to them
+ALIAS: void* GLUnurbs*
+ALIAS: void* GLUquadric*
+ALIAS: void* GLUtesselator*
+ALIAS: char* GLubyte* ! is this right?
+ALIAS: void* GLUfuncptr ! will this work?
+
+! StringName
+: GLU_VERSION                        100800 ;
+: GLU_EXTENSIONS                     100801 ;
+
+! ErrorCode
+: GLU_INVALID_ENUM                   100900 ;
+: GLU_INVALID_VALUE                  100901 ;
+: GLU_OUT_OF_MEMORY                  100902 ;
+: GLU_INCOMPATIBLE_GL_VERSION        100903 ;
+: GLU_INVALID_OPERATION              100904 ;
+
+! NurbsDisplay
+: GLU_OUTLINE_POLYGON                100240 ;
+: GLU_OUTLINE_PATCH                  100241 ;
+
+! NurbsCallback
+: GLU_NURBS_ERROR                    100103 ;
+: GLU_ERROR                          100103 ;
+: GLU_NURBS_BEGIN                    100164 ;
+: GLU_NURBS_BEGIN_EXT                100164 ;
+: GLU_NURBS_VERTEX                   100165 ;
+: GLU_NURBS_VERTEX_EXT               100165 ;
+: GLU_NURBS_NORMAL                   100166 ;
+: GLU_NURBS_NORMAL_EXT               100166 ;
+: GLU_NURBS_COLOR                    100167 ;
+: GLU_NURBS_COLOR_EXT                100167 ;
+: GLU_NURBS_TEXTURE_COORD            100168 ;
+: GLU_NURBS_TEX_COORD_EXT            100168 ;
+: GLU_NURBS_END                      100169 ;
+: GLU_NURBS_END_EXT                  100169 ;
+: GLU_NURBS_BEGIN_DATA               100170 ;
+: GLU_NURBS_BEGIN_DATA_EXT           100170 ;
+: GLU_NURBS_VERTEX_DATA              100171 ;
+: GLU_NURBS_VERTEX_DATA_EXT          100171 ;
+: GLU_NURBS_NORMAL_DATA              100172 ;
+: GLU_NURBS_NORMAL_DATA_EXT          100172 ;
+: GLU_NURBS_COLOR_DATA               100173 ;
+: GLU_NURBS_COLOR_DATA_EXT           100173 ;
+: GLU_NURBS_TEXTURE_COORD_DATA       100174 ;
+: GLU_NURBS_TEX_COORD_DATA_EXT       100174 ;
+: GLU_NURBS_END_DATA                 100175 ;
+: GLU_NURBS_END_DATA_EXT             100175 ;
+
+! NurbsError
+: GLU_NURBS_ERROR1                   100251 ;
+: GLU_NURBS_ERROR2                   100252 ;
+: GLU_NURBS_ERROR3                   100253 ;
+: GLU_NURBS_ERROR4                   100254 ;
+: GLU_NURBS_ERROR5                   100255 ;
+: GLU_NURBS_ERROR6                   100256 ;
+: GLU_NURBS_ERROR7                   100257 ;
+: GLU_NURBS_ERROR8                   100258 ;
+: GLU_NURBS_ERROR9                   100259 ;
+: GLU_NURBS_ERROR10                  100260 ;
+: GLU_NURBS_ERROR11                  100261 ;
+: GLU_NURBS_ERROR12                  100262 ;
+: GLU_NURBS_ERROR13                  100263 ;
+: GLU_NURBS_ERROR14                  100264 ;
+: GLU_NURBS_ERROR15                  100265 ;
+: GLU_NURBS_ERROR16                  100266 ;
+: GLU_NURBS_ERROR17                  100267 ;
+: GLU_NURBS_ERROR18                  100268 ;
+: GLU_NURBS_ERROR19                  100269 ;
+: GLU_NURBS_ERROR20                  100270 ;
+: GLU_NURBS_ERROR21                  100271 ;
+: GLU_NURBS_ERROR22                  100272 ;
+: GLU_NURBS_ERROR23                  100273 ;
+: GLU_NURBS_ERROR24                  100274 ;
+: GLU_NURBS_ERROR25                  100275 ;
+: GLU_NURBS_ERROR26                  100276 ;
+: GLU_NURBS_ERROR27                  100277 ;
+: GLU_NURBS_ERROR28                  100278 ;
+: GLU_NURBS_ERROR29                  100279 ;
+: GLU_NURBS_ERROR30                  100280 ;
+: GLU_NURBS_ERROR31                  100281 ;
+: GLU_NURBS_ERROR32                  100282 ;
+: GLU_NURBS_ERROR33                  100283 ;
+: GLU_NURBS_ERROR34                  100284 ;
+: GLU_NURBS_ERROR35                  100285 ;
+: GLU_NURBS_ERROR36                  100286 ;
+: GLU_NURBS_ERROR37                  100287 ;
+
+! NurbsProperty
+: GLU_AUTO_LOAD_MATRIX               100200 ;
+: GLU_CULLING                        100201 ;
+: GLU_SAMPLING_TOLERANCE             100203 ;
+: GLU_DISPLAY_MODE                   100204 ;
+: GLU_PARAMETRIC_TOLERANCE           100202 ;
+: GLU_SAMPLING_METHOD                100205 ;
+: GLU_U_STEP                         100206 ;
+: GLU_V_STEP                         100207 ;
+: GLU_NURBS_MODE                     100160 ;
+: GLU_NURBS_MODE_EXT                 100160 ;
+: GLU_NURBS_TESSELLATOR              100161 ;
+: GLU_NURBS_TESSELLATOR_EXT          100161 ;
+: GLU_NURBS_RENDERER                 100162 ;
+: GLU_NURBS_RENDERER_EXT             100162 ;
+
+! NurbsSampling
+: GLU_OBJECT_PARAMETRIC_ERROR        100208 ;
+: GLU_OBJECT_PARAMETRIC_ERROR_EXT    100208 ;
+: GLU_OBJECT_PATH_LENGTH             100209 ;
+: GLU_OBJECT_PATH_LENGTH_EXT         100209 ;
+: GLU_PATH_LENGTH                    100215 ;
+: GLU_PARAMETRIC_ERROR               100216 ;
+: GLU_DOMAIN_DISTANCE                100217 ;
+
+! NurbsTrim
+: GLU_MAP1_TRIM_2                    100210 ;
+: GLU_MAP1_TRIM_3                    100211 ;
+
+! QuadricDrawStyle
+: GLU_POINT                          100010 ;
+: GLU_LINE                           100011 ;
+: GLU_FILL                           100012 ;
+: GLU_SILHOUETTE                     100013 ;
+
+! QuadricNormal
+: GLU_SMOOTH                         100000 ;
+: GLU_FLAT                           100001 ;
+: GLU_NONE                           100002 ;
+
+! QuadricOrientation
+: GLU_OUTSIDE                        100020 ;
+: GLU_INSIDE                         100021 ;
+
+! TessCallback
+: GLU_TESS_BEGIN                     100100 ;
+: GLU_BEGIN                          100100 ;
+: GLU_TESS_VERTEX                    100101 ;
+: GLU_VERTEX                         100101 ;
+: GLU_TESS_END                       100102 ;
+: GLU_END                            100102 ;
+: GLU_TESS_ERROR                     100103 ;
+: GLU_TESS_EDGE_FLAG                 100104 ;
+: GLU_EDGE_FLAG                      100104 ;
+: GLU_TESS_COMBINE                   100105 ;
+: GLU_TESS_BEGIN_DATA                100106 ;
+: GLU_TESS_VERTEX_DATA               100107 ;
+: GLU_TESS_END_DATA                  100108 ;
+: GLU_TESS_ERROR_DATA                100109 ;
+: GLU_TESS_EDGE_FLAG_DATA            100110 ;
+: GLU_TESS_COMBINE_DATA              100111 ;
+
+! TessContour
+: GLU_CW                             100120 ;
+: GLU_CCW                            100121 ;
+: GLU_INTERIOR                       100122 ;
+: GLU_EXTERIOR                       100123 ;
+: GLU_UNKNOWN                        100124 ;
+
+! TessProperty
+: GLU_TESS_WINDING_RULE              100140 ;
+: GLU_TESS_BOUNDARY_ONLY             100141 ;
+: GLU_TESS_TOLERANCE                 100142 ;
+
+! TessError
+: GLU_TESS_ERROR1                    100151 ;
+: GLU_TESS_ERROR2                    100152 ;
+: GLU_TESS_ERROR3                    100153 ;
+: GLU_TESS_ERROR4                    100154 ;
+: GLU_TESS_ERROR5                    100155 ;
+: GLU_TESS_ERROR6                    100156 ;
+: GLU_TESS_ERROR7                    100157 ;
+: GLU_TESS_ERROR8                    100158 ;
+: GLU_TESS_MISSING_BEGIN_POLYGON     100151 ;
+: GLU_TESS_MISSING_BEGIN_CONTOUR     100152 ;
+: GLU_TESS_MISSING_END_POLYGON       100153 ;
+: GLU_TESS_MISSING_END_CONTOUR       100154 ;
+: GLU_TESS_COORD_TOO_LARGE           100155 ;
+: GLU_TESS_NEED_COMBINE_CALLBACK     100156 ;
+
+! TessWinding
+: GLU_TESS_WINDING_ODD               100130 ;
+: GLU_TESS_WINDING_NONZERO           100131 ;
+: GLU_TESS_WINDING_POSITIVE          100132 ;
+: GLU_TESS_WINDING_NEGATIVE          100133 ;
+: GLU_TESS_WINDING_ABS_GEQ_TWO       100134 ;
+
+LIBRARY: glu
+
+FUNCTION: void gluBeginCurve ( GLUnurbs* nurb ) ;
+FUNCTION: void gluBeginPolygon ( GLUtesselator* tess ) ;
+FUNCTION: void gluBeginSurface ( GLUnurbs* nurb ) ;
+FUNCTION: void gluBeginTrim ( GLUnurbs* nurb ) ;
+! FUNCTION: GLint gluBuild1DMipmapLevels ( GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data -- error? ) ;
+! FUNCTION: GLint gluBuild1DMipmaps ( GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, const void *data ) ;
+! FUNCTION: GLint gluBuild2DMipmapLevels ( GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data ) ;
+! FUNCTION: GLint gluBuild2DMipmaps ( GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data ) ;
+! FUNCTION: GLint gluBuild3DMipmapLevels ( GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data ) ;
+! FUNCTION: GLint gluBuild3DMipmaps ( GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data ) ;
+! FUNCTION: GLboolean gluCheckExtension ( const GLubyte *extName, GLubyte* extString ) ; -- check return for GL_TRUE or GL_FALSE
+FUNCTION: void gluCylinder ( GLUquadric* quad, GLdouble base, GLdouble top, GLdouble height, GLint slices, GLint stacks ) ;
+FUNCTION: void gluDeleteNurbsRenderer ( GLUnurbs* nurb ) ;
+FUNCTION: void gluDeleteQuadric ( GLUquadric* quad ) ;
+FUNCTION: void gluDeleteTess ( GLUtesselator* tess ) ;
+FUNCTION: void gluDisk ( GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops ) ;
+FUNCTION: void gluEndCurve ( GLUnurbs* nurb ) ;
+FUNCTION: void gluEndPolygon ( GLUtesselator* tess ) ;
+FUNCTION: void gluEndSurface ( GLUnurbs* nurb ) ;
+FUNCTION: void gluEndTrim ( GLUnurbs* nurb ) ;
+FUNCTION: GLubyte* gluErrorString ( GLenum error -- str ) ;
+! FUNCTION: void gluGetNurbsProperty ( GLUnurbs* nurb, GLenum property, GLfloat* data ) ;
+FUNCTION: GLubyte* gluGetString ( GLenum name ) ;
+! FUNCTION: void gluGetTessProperty ( GLUtesselator* tess, GLenum which, GLdouble* data ) ;
+! FUNCTION: void gluLoadSamplingMatrices ( GLUnurbs* nurb, const GLfloat *model, const GLfloat *perspective, const GLint *view ) ;
+FUNCTION: void gluLookAt ( GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ ) ;
+FUNCTION: GLUnurbs* gluNewNurbsRenderer ( -- nurbs ) ;
+FUNCTION: GLUquadric* gluNewQuadric ( -- quadric ) ;
+FUNCTION: GLUtesselator* gluNewTess ( -- tess ) ;
+FUNCTION: void gluNextContour ( GLUtesselator* tess, GLenum type ) ;
+FUNCTION: void gluNurbsCallback ( GLUnurbs* nurb, GLenum which, GLUfuncptr CallBackFunc ) ;
+FUNCTION: void gluNurbsCallbackData ( GLUnurbs* nurb, GLvoid* userData ) ;
+FUNCTION: void gluNurbsCallbackDataEXT ( GLUnurbs* nurb, GLvoid* userData ) ;
+FUNCTION: void gluNurbsCurve ( GLUnurbs* nurb, GLint knotCount, GLfloat *knots, GLint stride, GLfloat *control, GLint order, GLenum type ) ;
+FUNCTION: void gluNurbsProperty ( GLUnurbs* nurb, GLenum property, GLfloat value ) ;
+! FUNCTION: void gluNurbsSurface ( GLUnurbs* nurb, GLint sKnotCount, GLfloat* sKnots, GLint tKnotCount, GLfloat* tKnots, GLint sStride, GLint tStride, GLfloat* control, GLint sOrder, GLint tOrder, GLenum type ) ;
+FUNCTION: void gluOrtho2D ( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top ) ;
+FUNCTION: void gluPartialDisk ( GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops, GLdouble start, GLdouble sweep ) ;
+FUNCTION: void gluPerspective ( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar ) ;
+FUNCTION: void gluPickMatrix ( GLdouble x, GLdouble y, GLdouble delX, GLdouble delY, GLint *viewport ) ;
+! FUNCTION: GLint gluProject ( GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* winX, GLdouble* winY, GLdouble* winZ ) ;
+! FUNCTION: void gluPwlCurve ( GLUnurbs* nurb, GLint count, GLfloat* data, GLint stride, GLenum type ) ;
+FUNCTION: void gluQuadricCallback ( GLUquadric* quad, GLenum which, GLUfuncptr CallBackFunc ) ;
+FUNCTION: void gluQuadricDrawStyle ( GLUquadric* quad, GLenum draw ) ;
+FUNCTION: void gluQuadricNormals ( GLUquadric* quad, GLenum normal ) ;
+FUNCTION: void gluQuadricOrientation ( GLUquadric* quad, GLenum orientation ) ;
+FUNCTION: void gluQuadricTexture ( GLUquadric* quad, GLboolean texture ) ;
+! FUNCTION: GLint gluScaleImage ( GLenum format, GLsizei wIn, GLsizei hIn, GLenum typeIn, const void *dataIn, GLsizei wOut, GLsizei hOut, GLenum typeOut, GLvoid* dataOut -- error? ) ;
+FUNCTION: void gluSphere ( GLUquadric* quad, GLdouble radius, GLint slices, GLint stacks ) ;
+FUNCTION: void gluTessBeginContour ( GLUtesselator* tess ) ;
+FUNCTION: void gluTessBeginPolygon ( GLUtesselator* tess, GLvoid* data ) ;
+FUNCTION: void gluTessCallback ( GLUtesselator* tess, GLenum which, GLUfuncptr CallBackFunc ) ;
+FUNCTION: void gluTessEndContour ( GLUtesselator* tess ) ;
+FUNCTION: void gluTessEndPolygon ( GLUtesselator* tess ) ;
+FUNCTION: void gluTessNormal ( GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ ) ;
+FUNCTION: void gluTessProperty ( GLUtesselator* tess, GLenum which, GLdouble data ) ;
+FUNCTION: void gluTessVertex ( GLUtesselator* tess, GLdouble *location, GLvoid* data ) ;
+! FUNCTION: GLint gluUnProject ( GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* objX, GLdouble* objY, GLdouble* objZ ) ;
+! FUNCTION: GLint gluUnProject4 ( GLdouble winX, GLdouble winY, GLdouble winZ, GLdouble clipW, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble nearVal, GLdouble farVal, GLdouble* objX, GLdouble* objY, GLdouble* objZ, GLdouble* objW ) ;
+
diff --git a/contrib/gl/load.factor b/contrib/gl/load.factor
new file mode 100644 (file)
index 0000000..aab90b9
--- /dev/null
@@ -0,0 +1,6 @@
+IN: gl
+USING: alien parser sequences kernel ;
+
+"gl" "libGL.so" "stdcall" add-library
+"glu" "libGLU.so" "stdcall" add-library
+[ "gl-internals.factor" "sdl-gl.factor" "gl.factor" "glu.factor" ] [ "contrib/gl/" swap append run-file ] each
diff --git a/contrib/gl/sdl-gl.factor b/contrib/gl/sdl-gl.factor
new file mode 100644 (file)
index 0000000..b01b4f8
--- /dev/null
@@ -0,0 +1,9 @@
+IN: sdl
+
+USING: alien compiler ;
+
+: SDL_GL_SwapBuffers ( -- )
+    "void" "sdl" "SDL_GL_SwapBuffers" [ ] alien-invoke ;
+
+\ SDL_GL_SwapBuffers compile
+
diff --git a/contrib/gl/simple-gl.factor b/contrib/gl/simple-gl.factor
new file mode 100644 (file)
index 0000000..5b85689
--- /dev/null
@@ -0,0 +1,62 @@
+! Copyright (C) 2005 Alex Chapman.
+! See http://factor.sf.net/license.txt for BSD license.
+IN: simple-gl
+USING: kernel sdl gl glu math words sequences namespaces ;
+
+: colour-depth 16 ; inline
+: fov          60.0 ; inline
+: near         0.1 ; inline
+: far          100.0 ; inline
+
+SYMBOL: theta
+
+: flags ( lst -- enum )
+    [ execute ] map 0 swap [ bitor ] each ;
+
+: resize ( width height -- )
+    2dup colour-depth [ SDL_OPENGL SDL_RESIZABLE SDL_HWSURFACE SDL_DOUBLEBUF ] flags init-screen
+    GL_PROJECTION glMatrixMode
+    glLoadIdentity
+    /f fov swap near far gluPerspective
+    GL_MODELVIEW glMatrixMode
+    glLoadIdentity ;
+
+: render ( -- )
+    GL_COLOR_BUFFER_BIT glClear
+    GL_MODELVIEW glMatrixMode
+    glLoadIdentity
+    0.0 0.0 -2.0 glTranslatef
+    theta get 0.0 1.0 0.0 glRotatef
+    GL_TRIANGLES glBegin
+        0.0 0.5 0.0 glVertex3f
+       -0.5 0.0 0.0 glVertex3f
+        0.5 0.0 0.0 glVertex3f
+    glEnd
+    SDL_GL_SwapBuffers ;
+
+: event-loop ( event -- )
+    theta [ 1 + ] change
+    render
+    dup SDL_PollEvent [
+        dup quit-event? [
+           drop
+        ] [
+           dup resize-event? [
+               dup resize-event-w resize-event-h resize ! broken
+           ] when
+           event-loop
+       ] ifte
+    ] [
+        event-loop
+    ] ifte ;
+
+: simple-gl
+    800 600 colour-depth [ SDL_OPENGL SDL_RESIZABLE SDL_HWSURFACE SDL_DOUBLEBUF ] flags [
+       0 theta set
+        800 600 resize
+        GL_FLAT glShadeModel
+        0.0 0.0 0.0 0.0 glClearColor 
+        1.0 0.0 0.0 glColor3f
+       <event> event-loop
+    ] with-screen ;
+