OpenGL with GL, GLU and GLUT

Linux specific forum
Foz
Addict
Addict
Posts: 1359
Joined: Tue Nov 13, 2007 12:42 pm
Location: Manchester, UK

OpenGL with GL, GLU and GLUT

Post by Foz »

I've gotten as far as I can with my limited knowledge of attempting this, but I need somebody who as done C wrappers before to help me out :)

Basically, the biggest trouble I have are the program parameters.

the C code starts out like this:

Code: Select all

int main(int argc, char **argv) 
{  
  glutInit(&argc, argv);
Now, I've taken the ProgramParameters and made them an array of strings, and in the Prototype, I've specified that it's argv.s(), but when I come to run it, it complains about expecting a Linked List!

Erm, help!

The first file is familiar but has a few more constants defined.
OpenGL.pbi

Code: Select all

; ++ BUILD Version: 0004    // Increment this if a change has global effects
; 
; Copyright (c) 1985-96, Microsoft Corporation
; 
; Module Name:
; 
;     gl.h
; 
; Abstract:
; 
;     Procedure declarations, constant definitions and macros for the OpenGL
;     component.
; 
; --

; 
; ** Copyright 1996 Silicon Graphics, Inc.
; ** All Rights Reserved.
; **
; ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
; ** the contents of this file may not be disclosed to third parties, copied or
; ** duplicated in any form, in whole or in part, without the prior written
; ** permission of Silicon Graphics, Inc.
; **
; ** RESTRICTED RIGHTS LEGEND:
; ** Use, duplication or disclosure by the Government is subject to restrictions
; ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
; ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
; ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
; ** rights reserved under the Copyright Laws of the United States.
; 

; ***********************************************************

;  Version 
#GL_VERSION_1_1                    = 1

;  AccumOp 
#GL_ACCUM                          = $0100
#GL_LOAD                           = $0101
#GL_RETURN                         = $0102
#GL_MULT                           = $0103
#GL_ADD                            = $0104

;  AlphaFunction 
#GL_NEVER                          = $0200
#GL_LESS                           = $0201
#GL_EQUAL                          = $0202
#GL_LEQUAL                         = $0203
#GL_GREATER                        = $0204
#GL_NOTEQUAL                       = $0205
#GL_GEQUAL                         = $0206
#GL_ALWAYS                         = $0207

;  AttribMask 
#GL_CURRENT_BIT                    = $00000001
#GL_POINT_BIT                      = $00000002
#GL_LINE_BIT                       = $00000004
#GL_POLYGON_BIT                    = $00000008
#GL_POLYGON_STIPPLE_BIT            = $00000010
#GL_PIXEL_MODE_BIT                 = $00000020
#GL_LIGHTING_BIT                   = $00000040
#GL_FOG_BIT                        = $00000080
#GL_DEPTH_BUFFER_BIT               = $00000100
#GL_ACCUM_BUFFER_BIT               = $00000200
#GL_STENCIL_BUFFER_BIT             = $00000400
#GL_VIEWPORT_BIT                   = $00000800
#GL_TRANSFORM_BIT                  = $00001000
#GL_ENABLE_BIT                     = $00002000
#GL_COLOR_BUFFER_BIT               = $00004000
#GL_HINT_BIT                       = $00008000
#GL_EVAL_BIT                       = $00010000
#GL_LIST_BIT                       = $00020000
#GL_TEXTURE_BIT                    = $00040000
#GL_SCISSOR_BIT                    = $00080000
#GL_ALL_ATTRIB_BITS                = $000fffff

;  BeginMode 
#GL_POINTS                         = $0000
#GL_LINES                          = $0001
#GL_LINE_LOOP                      = $0002
#GL_LINE_STRIP                     = $0003
#GL_TRIANGLES                      = $0004
#GL_TRIANGLE_STRIP                 = $0005
#GL_TRIANGLE_FAN                   = $0006
#GL_QUADS                          = $0007
#GL_QUAD_STRIP                     = $0008
#GL_POLYGON                        = $0009

;  BlendingFactorDest 
#GL_ZERO                           = 0
#GL_ONE                            = 1
#GL_SRC_COLOR                      = $0300
#GL_ONE_MINUS_SRC_COLOR            = $0301
#GL_SRC_ALPHA                      = $0302
#GL_ONE_MINUS_SRC_ALPHA            = $0303
#GL_DST_ALPHA                      = $0304
#GL_ONE_MINUS_DST_ALPHA            = $0305

;  BlendingFactorSrc 
;       GL_ZERO 
;       GL_ONE 
#GL_DST_COLOR                      = $0306
#GL_ONE_MINUS_DST_COLOR            = $0307
#GL_SRC_ALPHA_SATURATE             = $0308
;       GL_SRC_ALPHA 
;       GL_ONE_MINUS_SRC_ALPHA 
;       GL_DST_ALPHA 
;       GL_ONE_MINUS_DST_ALPHA 

;  Boolean 
#GL_TRUE                           = 1
#GL_FALSE                          = 0

;  ClearBufferMask 
;       GL_COLOR_BUFFER_BIT 
;       GL_ACCUM_BUFFER_BIT 
;       GL_STENCIL_BUFFER_BIT 
;       GL_DEPTH_BUFFER_BIT 

;  ClientArrayType 
;       GL_VERTEX_ARRAY 
;       GL_NORMAL_ARRAY 
;       GL_COLOR_ARRAY 
;       GL_INDEX_ARRAY 
;       GL_TEXTURE_COORD_ARRAY 
;       GL_EDGE_FLAG_ARRAY 

;  ClipPlaneName 
#GL_CLIP_PLANE0                    = $3000
#GL_CLIP_PLANE1                    = $3001
#GL_CLIP_PLANE2                    = $3002
#GL_CLIP_PLANE3                    = $3003
#GL_CLIP_PLANE4                    = $3004
#GL_CLIP_PLANE5                    = $3005

;  ColorMaterialFace 
;       GL_FRONT 
;       GL_BACK 
;       GL_FRONT_AND_BACK 

;  ColorMaterialParameter 
;       GL_AMBIENT 
;       GL_DIFFUSE 
;       GL_SPECULAR 
;       GL_EMISSION 
;       GL_AMBIENT_AND_DIFFUSE 

;  ColorPointerType 
;       GL_BYTE 
;       GL_UNSIGNED_BYTE 
;       GL_SHORT 
;       GL_UNSIGNED_SHORT 
;       GL_INT 
;       GL_UNSIGNED_INT 
;       GL_FLOAT 
;       GL_DOUBLE 

;  CullFaceMode 
;       GL_FRONT 
;       GL_BACK 
;       GL_FRONT_AND_BACK 

;  DataType 
#GL_BYTE                           = $1400
#GL_UNSIGNED_BYTE                  = $1401
#GL_SHORT                          = $1402
#GL_UNSIGNED_SHORT                 = $1403
#GL_INT                            = $1404
#GL_UNSIGNED_INT                   = $1405
#GL_FLOAT                          = $1406
#GL_2_BYTES                        = $1407
#GL_3_BYTES                        = $1408
#GL_4_BYTES                        = $1409
#GL_DOUBLE                         = $140A

;  DepthFunction 
#GL_NEVER                          = $0200
#GL_LESS                           = $0201
#GL_EQUAL                          = $0202
#GL_LEQUAL                         = $0203
#GL_GREATER                        = $0204
#GL_NOTEQUAL                       = $0205
#GL_GEQUAL                         = $0206
#GL_ALWAYS                         = $0207
#GL_DEPTH_TEST                     = $0B71
#GL_DEPTH_BITS                     = $0D56
#GL_DEPTH_CLEAR_VALUE              = $0B73
#GL_DEPTH_FUNC                     = $0B74
#GL_DEPTH_RANGE                    = $0B70
#GL_DEPTH_WRITEMASK                = $0B72
#GL_DEPTH_COMPONENT                = $1902

;  DrawBufferMode 
#GL_NONE                           = 0
#GL_FRONT_LEFT                     = $0400
#GL_FRONT_RIGHT                    = $0401
#GL_BACK_LEFT                      = $0402
#GL_BACK_RIGHT                     = $0403
#GL_FRONT                          = $0404
#GL_BACK                           = $0405
#GL_LEFT                           = $0406
#GL_RIGHT                          = $0407
#GL_FRONT_AND_BACK                 = $0408
#GL_AUX0                           = $0409
#GL_AUX1                           = $040A
#GL_AUX2                           = $040B
#GL_AUX3                           = $040C

;  Enable 
;       GL_FOG 
;       GL_LIGHTING 
;       GL_TEXTURE_1D 
;       GL_TEXTURE_2D 
;       GL_LINE_STIPPLE 
;       GL_POLYGON_STIPPLE 
;       GL_CULL_FACE 
;       GL_ALPHA_TEST 
;       GL_BLEND 
;       GL_INDEX_LOGIC_OP 
;       GL_COLOR_LOGIC_OP 
;       GL_DITHER 
;       GL_STENCIL_TEST 
;       GL_DEPTH_TEST 
;       GL_CLIP_PLANE0 
;       GL_CLIP_PLANE1 
;       GL_CLIP_PLANE2 
;       GL_CLIP_PLANE3 
;       GL_CLIP_PLANE4 
;       GL_CLIP_PLANE5 
;       GL_LIGHT0 
;       GL_LIGHT1 
;       GL_LIGHT2 
;       GL_LIGHT3 
;       GL_LIGHT4 
;       GL_LIGHT5 
;       GL_LIGHT6 
;       GL_LIGHT7 
;       GL_TEXTURE_GEN_S 
;       GL_TEXTURE_GEN_T 
;       GL_TEXTURE_GEN_R 
;       GL_TEXTURE_GEN_Q 
;       GL_MAP1_VERTEX_3 
;       GL_MAP1_VERTEX_4 
;       GL_MAP1_COLOR_4 
;       GL_MAP1_INDEX 
;       GL_MAP1_NORMAL 
;       GL_MAP1_TEXTURE_COORD_1 
;       GL_MAP1_TEXTURE_COORD_2 
;       GL_MAP1_TEXTURE_COORD_3 
;       GL_MAP1_TEXTURE_COORD_4 
;       GL_MAP2_VERTEX_3 
;       GL_MAP2_VERTEX_4 
;       GL_MAP2_COLOR_4 
;       GL_MAP2_INDEX 
;       GL_MAP2_NORMAL 
;       GL_MAP2_TEXTURE_COORD_1 
;       GL_MAP2_TEXTURE_COORD_2 
;       GL_MAP2_TEXTURE_COORD_3 
;       GL_MAP2_TEXTURE_COORD_4 
;       GL_POINT_SMOOTH 
;       GL_LINE_SMOOTH 
;       GL_POLYGON_SMOOTH 
;       GL_SCISSOR_TEST 
;       GL_COLOR_MATERIAL 
;       GL_NORMALIZE 
;       GL_AUTO_NORMAL 
;       GL_VERTEX_ARRAY 
;       GL_NORMAL_ARRAY 
;       GL_COLOR_ARRAY 
;       GL_INDEX_ARRAY 
;       GL_TEXTURE_COORD_ARRAY 
;       GL_EDGE_FLAG_ARRAY 
;       GL_POLYGON_OFFSET_POINT 
;       GL_POLYGON_OFFSET_LINE 
;       GL_POLYGON_OFFSET_FILL 

;  ErrorCode 
#GL_NO_ERROR                       = 0
#GL_INVALID_ENUM                   = $0500
#GL_INVALID_VALUE                  = $0501
#GL_INVALID_OPERATION              = $0502
#GL_STACK_OVERFLOW                 = $0503
#GL_STACK_UNDERFLOW                = $0504
#GL_OUT_OF_MEMORY                  = $0505

;  FeedBackMode 
#GL_2D                             = $0600
#GL_3D                             = $0601
#GL_3D_COLOR                       = $0602
#GL_3D_COLOR_TEXTURE               = $0603
#GL_4D_COLOR_TEXTURE               = $0604

;  FeedBackToken 
#GL_PASS_THROUGH_TOKEN             = $0700
#GL_POINT_TOKEN                    = $0701
#GL_LINE_TOKEN                     = $0702
#GL_POLYGON_TOKEN                  = $0703
#GL_BITMAP_TOKEN                   = $0704
#GL_DRAW_PIXEL_TOKEN               = $0705
#GL_COPY_PIXEL_TOKEN               = $0706
#GL_LINE_RESET_TOKEN               = $0707

;  FogMode 
;       GL_LINEAR 
#GL_EXP                            = $0800
#GL_EXP2                           = $0801


;  FogParameter 
;       GL_FOG_COLOR 
;       GL_FOG_DENSITY 
;       GL_FOG_END 
;       GL_FOG_INDEX 
;       GL_FOG_MODE 
;       GL_FOG_START 

;  FrontFaceDirection 
#GL_CW                             = $0900
#GL_CCW                            = $0901

;  GetMapTarget 
#GL_COEFF                          = $0A00
#GL_ORDER                          = $0A01
#GL_DOMAIN                         = $0A02

;  GetPixelMap 
;       GL_PIXEL_MAP_I_TO_I 
;       GL_PIXEL_MAP_S_TO_S 
;       GL_PIXEL_MAP_I_TO_R 
;       GL_PIXEL_MAP_I_TO_G 
;       GL_PIXEL_MAP_I_TO_B 
;       GL_PIXEL_MAP_I_TO_A 
;       GL_PIXEL_MAP_R_TO_R 
;       GL_PIXEL_MAP_G_TO_G 
;       GL_PIXEL_MAP_B_TO_B 
;       GL_PIXEL_MAP_A_TO_A 

;  GetPointerTarget 
;       GL_VERTEX_ARRAY_POINTER 
;       GL_NORMAL_ARRAY_POINTER 
;       GL_COLOR_ARRAY_POINTER 
;       GL_INDEX_ARRAY_POINTER 
;       GL_TEXTURE_COORD_ARRAY_POINTER 
;       GL_EDGE_FLAG_ARRAY_POINTER 

;  GetTarget 
#GL_CURRENT_COLOR                  = $0B00
#GL_CURRENT_INDEX                  = $0B01
#GL_CURRENT_NORMAL                 = $0B02
#GL_CURRENT_TEXTURE_COORDS         = $0B03
#GL_CURRENT_RASTER_COLOR           = $0B04
#GL_CURRENT_RASTER_INDEX           = $0B05
#GL_CURRENT_RASTER_TEXTURE_COORDS  = $0B06
#GL_CURRENT_RASTER_POSITION        = $0B07
#GL_CURRENT_RASTER_POSITION_VALID  = $0B08
#GL_CURRENT_RASTER_DISTANCE        = $0B09
#GL_POINT_SMOOTH                   = $0B10
#GL_POINT_SIZE                     = $0B11
#GL_POINT_SIZE_RANGE               = $0B12
#GL_POINT_SIZE_GRANULARITY         = $0B13
#GL_LINE_SMOOTH                    = $0B20
#GL_LINE_WIDTH                     = $0B21
#GL_LINE_WIDTH_RANGE               = $0B22
#GL_LINE_WIDTH_GRANULARITY         = $0B23
#GL_LINE_STIPPLE                   = $0B24
#GL_LINE_STIPPLE_PATTERN           = $0B25
#GL_LINE_STIPPLE_REPEAT            = $0B26
#GL_LIST_MODE                      = $0B30
#GL_MAX_LIST_NESTING               = $0B31
#GL_LIST_BASE                      = $0B32
#GL_LIST_INDEX                     = $0B33
#GL_POLYGON_MODE                   = $0B40
#GL_POLYGON_SMOOTH                 = $0B41
#GL_POLYGON_STIPPLE                = $0B42
#GL_EDGE_FLAG                      = $0B43
#GL_CULL_FACE                      = $0B44
#GL_CULL_FACE_MODE                 = $0B45
#GL_FRONT_FACE                     = $0B46
#GL_LIGHTING                       = $0B50
#GL_LIGHT_MODEL_LOCAL_VIEWER       = $0B51
#GL_LIGHT_MODEL_TWO_SIDE           = $0B52
#GL_LIGHT_MODEL_AMBIENT            = $0B53
#GL_SHADE_MODEL                    = $0B54
#GL_COLOR_MATERIAL_FACE            = $0B55
#GL_COLOR_MATERIAL_PARAMETER       = $0B56
#GL_COLOR_MATERIAL                 = $0B57
#GL_FOG                            = $0B60
#GL_FOG_INDEX                      = $0B61
#GL_FOG_DENSITY                    = $0B62
#GL_FOG_START                      = $0B63
#GL_FOG_END                        = $0B64
#GL_FOG_MODE                       = $0B65
#GL_FOG_COLOR                      = $0B66
#GL_DEPTH_RANGE                    = $0B70
#GL_DEPTH_TEST                     = $0B71
#GL_DEPTH_WRITEMASK                = $0B72
#GL_DEPTH_CLEAR_VALUE              = $0B73
#GL_DEPTH_FUNC                     = $0B74
#GL_ACCUM_CLEAR_VALUE              = $0B80
#GL_STENCIL_TEST                   = $0B90
#GL_STENCIL_CLEAR_VALUE            = $0B91
#GL_STENCIL_FUNC                   = $0B92
#GL_STENCIL_VALUE_MASK             = $0B93
#GL_STENCIL_FAIL                   = $0B94
#GL_STENCIL_PASS_DEPTH_FAIL        = $0B95
#GL_STENCIL_PASS_DEPTH_PASS        = $0B96
#GL_STENCIL_REF                    = $0B97
#GL_STENCIL_WRITEMASK              = $0B98
#GL_MATRIX_MODE                    = $0BA0
#GL_NORMALIZE                      = $0BA1
#GL_VIEWPORT                       = $0BA2
#GL_MODELVIEW_STACK_DEPTH          = $0BA3
#GL_PROJECTION_STACK_DEPTH         = $0BA4
#GL_TEXTURE_STACK_DEPTH            = $0BA5
#GL_MODELVIEW_MATRIX               = $0BA6
#GL_PROJECTION_MATRIX              = $0BA7
#GL_TEXTURE_MATRIX                 = $0BA8
#GL_ATTRIB_STACK_DEPTH             = $0BB0
#GL_CLIENT_ATTRIB_STACK_DEPTH      = $0BB1
#GL_ALPHA_TEST                     = $0BC0
#GL_ALPHA_TEST_FUNC                = $0BC1
#GL_ALPHA_TEST_REF                 = $0BC2
#GL_DITHER                         = $0BD0
#GL_BLEND_DST                      = $0BE0
#GL_BLEND_SRC                      = $0BE1
#GL_BLEND                          = $0BE2
#GL_LOGIC_OP_MODE                  = $0BF0
#GL_INDEX_LOGIC_OP                 = $0BF1
#GL_COLOR_LOGIC_OP                 = $0BF2
#GL_AUX_BUFFERS                    = $0C00
#GL_DRAW_BUFFER                    = $0C01
#GL_READ_BUFFER                    = $0C02
#GL_SCISSOR_BOX                    = $0C10
#GL_SCISSOR_TEST                   = $0C11
#GL_INDEX_CLEAR_VALUE              = $0C20
#GL_INDEX_WRITEMASK                = $0C21
#GL_COLOR_CLEAR_VALUE              = $0C22
#GL_COLOR_WRITEMASK                = $0C23
#GL_INDEX_MODE                     = $0C30
#GL_RGBA_MODE                      = $0C31
#GL_DOUBLEBUFFER                   = $0C32
#GL_STEREO                         = $0C33
#GL_RENDER_MODE                    = $0C40
#GL_PERSPECTIVE_CORRECTION_HINT    = $0C50
#GL_POINT_SMOOTH_HINT              = $0C51
#GL_LINE_SMOOTH_HINT               = $0C52
#GL_POLYGON_SMOOTH_HINT            = $0C53
#GL_FOG_HINT                       = $0C54
#GL_TEXTURE_GEN_S                  = $0C60
#GL_TEXTURE_GEN_T                  = $0C61
#GL_TEXTURE_GEN_R                  = $0C62
#GL_TEXTURE_GEN_Q                  = $0C63
#GL_PIXEL_MAP_I_TO_I               = $0C70
#GL_PIXEL_MAP_S_TO_S               = $0C71
#GL_PIXEL_MAP_I_TO_R               = $0C72
#GL_PIXEL_MAP_I_TO_G               = $0C73
#GL_PIXEL_MAP_I_TO_B               = $0C74
#GL_PIXEL_MAP_I_TO_A               = $0C75
#GL_PIXEL_MAP_R_TO_R               = $0C76
#GL_PIXEL_MAP_G_TO_G               = $0C77
#GL_PIXEL_MAP_B_TO_B               = $0C78
#GL_PIXEL_MAP_A_TO_A               = $0C79
#GL_PIXEL_MAP_I_TO_I_SIZE          = $0CB0
#GL_PIXEL_MAP_S_TO_S_SIZE          = $0CB1
#GL_PIXEL_MAP_I_TO_R_SIZE          = $0CB2
#GL_PIXEL_MAP_I_TO_G_SIZE          = $0CB3
#GL_PIXEL_MAP_I_TO_B_SIZE          = $0CB4
#GL_PIXEL_MAP_I_TO_A_SIZE          = $0CB5
#GL_PIXEL_MAP_R_TO_R_SIZE          = $0CB6
#GL_PIXEL_MAP_G_TO_G_SIZE          = $0CB7
#GL_PIXEL_MAP_B_TO_B_SIZE          = $0CB8
#GL_PIXEL_MAP_A_TO_A_SIZE          = $0CB9
#GL_UNPACK_SWAP_BYTES              = $0CF0
#GL_UNPACK_LSB_FIRST               = $0CF1
#GL_UNPACK_ROW_LENGTH              = $0CF2
#GL_UNPACK_SKIP_ROWS               = $0CF3
#GL_UNPACK_SKIP_PIXELS             = $0CF4
#GL_UNPACK_ALIGNMENT               = $0CF5
#GL_PACK_SWAP_BYTES                = $0D00
#GL_PACK_LSB_FIRST                 = $0D01
#GL_PACK_ROW_LENGTH                = $0D02
#GL_PACK_SKIP_ROWS                 = $0D03
#GL_PACK_SKIP_PIXELS               = $0D04
#GL_PACK_ALIGNMENT                 = $0D05
#GL_MAP_COLOR                      = $0D10
#GL_MAP_STENCIL                    = $0D11
#GL_INDEX_SHIFT                    = $0D12
#GL_INDEX_OFFSET                   = $0D13
#GL_RED_SCALE                      = $0D14
#GL_RED_BIAS                       = $0D15
#GL_ZOOM_X                         = $0D16
#GL_ZOOM_Y                         = $0D17
#GL_GREEN_SCALE                    = $0D18
#GL_GREEN_BIAS                     = $0D19
#GL_BLUE_SCALE                     = $0D1A
#GL_BLUE_BIAS                      = $0D1B
#GL_ALPHA_SCALE                    = $0D1C
#GL_ALPHA_BIAS                     = $0D1D
#GL_DEPTH_SCALE                    = $0D1E
#GL_DEPTH_BIAS                     = $0D1F
#GL_MAX_EVAL_ORDER                 = $0D30
#GL_MAX_LIGHTS                     = $0D31
#GL_MAX_CLIP_PLANES                = $0D32
#GL_MAX_TEXTURE_SIZE               = $0D33
#GL_MAX_PIXEL_MAP_TABLE            = $0D34
#GL_MAX_ATTRIB_STACK_DEPTH         = $0D35
#GL_MAX_MODELVIEW_STACK_DEPTH      = $0D36
#GL_MAX_NAME_STACK_DEPTH           = $0D37
#GL_MAX_PROJECTION_STACK_DEPTH     = $0D38
#GL_MAX_TEXTURE_STACK_DEPTH        = $0D39
#GL_MAX_VIEWPORT_DIMS              = $0D3A
#GL_MAX_CLIENT_ATTRIB_STACK_DEPTH  = $0D3B
#GL_SUBPIXEL_BITS                  = $0D50
#GL_INDEX_BITS                     = $0D51
#GL_RED_BITS                       = $0D52
#GL_GREEN_BITS                     = $0D53
#GL_BLUE_BITS                      = $0D54
#GL_ALPHA_BITS                     = $0D55
#GL_DEPTH_BITS                     = $0D56
#GL_STENCIL_BITS                   = $0D57
#GL_ACCUM_RED_BITS                 = $0D58
#GL_ACCUM_GREEN_BITS               = $0D59
#GL_ACCUM_BLUE_BITS                = $0D5A
#GL_ACCUM_ALPHA_BITS               = $0D5B
#GL_NAME_STACK_DEPTH               = $0D70
#GL_AUTO_NORMAL                    = $0D80
#GL_MAP1_COLOR_4                   = $0D90
#GL_MAP1_INDEX                     = $0D91
#GL_MAP1_NORMAL                    = $0D92
#GL_MAP1_TEXTURE_COORD_1           = $0D93
#GL_MAP1_TEXTURE_COORD_2           = $0D94
#GL_MAP1_TEXTURE_COORD_3           = $0D95
#GL_MAP1_TEXTURE_COORD_4           = $0D96
#GL_MAP1_VERTEX_3                  = $0D97
#GL_MAP1_VERTEX_4                  = $0D98
#GL_MAP2_COLOR_4                   = $0DB0
#GL_MAP2_INDEX                     = $0DB1
#GL_MAP2_NORMAL                    = $0DB2
#GL_MAP2_TEXTURE_COORD_1           = $0DB3
#GL_MAP2_TEXTURE_COORD_2           = $0DB4
#GL_MAP2_TEXTURE_COORD_3           = $0DB5
#GL_MAP2_TEXTURE_COORD_4           = $0DB6
#GL_MAP2_VERTEX_3                  = $0DB7
#GL_MAP2_VERTEX_4                  = $0DB8
#GL_MAP1_GRID_DOMAIN               = $0DD0
#GL_MAP1_GRID_SEGMENTS             = $0DD1
#GL_MAP2_GRID_DOMAIN               = $0DD2
#GL_MAP2_GRID_SEGMENTS             = $0DD3
#GL_TEXTURE_1D                     = $0DE0
#GL_TEXTURE_2D                     = $0DE1
#GL_FEEDBACK_BUFFER_POINTER        = $0DF0
#GL_FEEDBACK_BUFFER_SIZE           = $0DF1
#GL_FEEDBACK_BUFFER_TYPE           = $0DF2
#GL_SELECTION_BUFFER_POINTER       = $0DF3
#GL_SELECTION_BUFFER_SIZE          = $0DF4
;       GL_TEXTURE_BINDING_1D 
;       GL_TEXTURE_BINDING_2D 
;       GL_VERTEX_ARRAY 
;       GL_NORMAL_ARRAY 
;       GL_COLOR_ARRAY 
;       GL_INDEX_ARRAY 
;       GL_TEXTURE_COORD_ARRAY 
;       GL_EDGE_FLAG_ARRAY 
;       GL_VERTEX_ARRAY_SIZE 
;       GL_VERTEX_ARRAY_TYPE 
;       GL_VERTEX_ARRAY_STRIDE 
;       GL_NORMAL_ARRAY_TYPE 
;       GL_NORMAL_ARRAY_STRIDE 
;       GL_COLOR_ARRAY_SIZE 
;       GL_COLOR_ARRAY_TYPE 
;       GL_COLOR_ARRAY_STRIDE 
;       GL_INDEX_ARRAY_TYPE 
;       GL_INDEX_ARRAY_STRIDE 
;       GL_TEXTURE_COORD_ARRAY_SIZE 
;       GL_TEXTURE_COORD_ARRAY_TYPE 
;       GL_TEXTURE_COORD_ARRAY_STRIDE 
;       GL_EDGE_FLAG_ARRAY_STRIDE 
;       GL_POLYGON_OFFSET_FACTOR 
;       GL_POLYGON_OFFSET_UNITS 

;  GetTextureParameter 
;       GL_TEXTURE_MAG_FILTER 
;       GL_TEXTURE_MIN_FILTER 
;       GL_TEXTURE_WRAP_S 
;       GL_TEXTURE_WRAP_T 
#GL_TEXTURE_WIDTH                  = $1000
#GL_TEXTURE_HEIGHT                 = $1001
#GL_TEXTURE_INTERNAL_FORMAT        = $1003
#GL_TEXTURE_BORDER_COLOR           = $1004
#GL_TEXTURE_BORDER                 = $1005
;       GL_TEXTURE_RED_SIZE 
;       GL_TEXTURE_GREEN_SIZE 
;       GL_TEXTURE_BLUE_SIZE 
;       GL_TEXTURE_ALPHA_SIZE 
;       GL_TEXTURE_LUMINANCE_SIZE 
;       GL_TEXTURE_INTENSITY_SIZE 
;       GL_TEXTURE_PRIORITY 
;       GL_TEXTURE_RESIDENT 

;  HintMode 
#GL_DONT_CARE                      = $1100
#GL_FASTEST                        = $1101
#GL_NICEST                         = $1102

;  HintTarget 
;       GL_PERSPECTIVE_CORRECTION_HINT 
;       GL_POINT_SMOOTH_HINT 
;       GL_LINE_SMOOTH_HINT 
;       GL_POLYGON_SMOOTH_HINT 
;       GL_FOG_HINT 
;       GL_PHONG_HINT 

;  IndexPointerType 
;       GL_SHORT 
;       GL_INT 
;       GL_FLOAT 
;       GL_DOUBLE 

;  LightModelParameter 
;       GL_LIGHT_MODEL_AMBIENT 
;       GL_LIGHT_MODEL_LOCAL_VIEWER 
;       GL_LIGHT_MODEL_TWO_SIDE 

;  LightName 
#GL_LIGHT0                         = $4000
#GL_LIGHT1                         = $4001
#GL_LIGHT2                         = $4002
#GL_LIGHT3                         = $4003
#GL_LIGHT4                         = $4004
#GL_LIGHT5                         = $4005
#GL_LIGHT6                         = $4006
#GL_LIGHT7                         = $4007

;  LightParameter 
#GL_AMBIENT                        = $1200
#GL_DIFFUSE                        = $1201
#GL_SPECULAR                       = $1202
#GL_POSITION                       = $1203
#GL_SPOT_DIRECTION                 = $1204
#GL_SPOT_EXPONENT                  = $1205
#GL_SPOT_CUTOFF                    = $1206
#GL_CONSTANT_ATTENUATION           = $1207
#GL_LINEAR_ATTENUATION             = $1208
#GL_QUADRATIC_ATTENUATION          = $1209

;  InterleavedArrays 
;       GL_V2F 
;       GL_V3F 
;       GL_C4UB_V2F 
;       GL_C4UB_V3F 
;       GL_C3F_V3F 
;       GL_N3F_V3F 
;       GL_C4F_N3F_V3F 
;       GL_T2F_V3F 
;       GL_T4F_V4F 
;       GL_T2F_C4UB_V3F 
;       GL_T2F_C3F_V3F 
;       GL_T2F_N3F_V3F 
;       GL_T2F_C4F_N3F_V3F 
;       GL_T4F_C4F_N3F_V4F 

;  ListMode 
#GL_COMPILE                        = $1300
#GL_COMPILE_AND_EXECUTE            = $1301

;  ListNameType 
;       GL_BYTE 
;       GL_UNSIGNED_BYTE 
;       GL_SHORT 
;       GL_UNSIGNED_SHORT 
;       GL_INT 
;       GL_UNSIGNED_INT 
;       GL_FLOAT 
;       GL_2_BYTES 
;       GL_3_BYTES 
;       GL_4_BYTES 

;  LogicOp 
#GL_CLEAR                          = $1500
#GL_AND                            = $1501
#GL_AND_REVERSE                    = $1502
#GL_COPY                           = $1503
#GL_AND_INVERTED                   = $1504
#GL_NOOP                           = $1505
#GL_XOR                            = $1506
#GL_OR                             = $1507
#GL_NOR                            = $1508
#GL_EQUIV                          = $1509
#GL_INVERT                         = $150A
#GL_OR_REVERSE                     = $150B
#GL_COPY_INVERTED                  = $150C
#GL_OR_INVERTED                    = $150D
#GL_NAND                           = $150E
#GL_SET                            = $150F

;  MapTarget 
;       GL_MAP1_COLOR_4 
;       GL_MAP1_INDEX 
;       GL_MAP1_NORMAL 
;       GL_MAP1_TEXTURE_COORD_1 
;       GL_MAP1_TEXTURE_COORD_2 
;       GL_MAP1_TEXTURE_COORD_3 
;       GL_MAP1_TEXTURE_COORD_4 
;       GL_MAP1_VERTEX_3 
;       GL_MAP1_VERTEX_4 
;       GL_MAP2_COLOR_4 
;       GL_MAP2_INDEX 
;       GL_MAP2_NORMAL 
;       GL_MAP2_TEXTURE_COORD_1 
;       GL_MAP2_TEXTURE_COORD_2 
;       GL_MAP2_TEXTURE_COORD_3 
;       GL_MAP2_TEXTURE_COORD_4 
;       GL_MAP2_VERTEX_3 
;       GL_MAP2_VERTEX_4 

;  MaterialFace 
;       GL_FRONT 
;       GL_BACK 
;       GL_FRONT_AND_BACK 

;  MaterialParameter 
#GL_EMISSION                       = $1600
#GL_SHININESS                      = $1601
#GL_AMBIENT_AND_DIFFUSE            = $1602
#GL_COLOR_INDEXES                  = $1603
;       GL_AMBIENT 
;       GL_DIFFUSE 
;       GL_SPECULAR 

;  MatrixMode 
#GL_MODELVIEW                      = $1700
#GL_PROJECTION                     = $1701
#GL_TEXTURE                        = $1702

;  MeshMode1 
;       GL_POINT 
;       GL_LINE 

;  MeshMode2 
;       GL_POINT 
;       GL_LINE 
;       GL_FILL 

;  NormalPointerType 
;       GL_BYTE 
;       GL_SHORT 
;       GL_INT 
;       GL_FLOAT 
;       GL_DOUBLE 

;  PixelCopyType 
#GL_COLOR                          = $1800
#GL_DEPTH                          = $1801
#GL_STENCIL                        = $1802

;  PixelFormat 
#GL_COLOR_INDEX                    = $1900
#GL_STENCIL_INDEX                  = $1901
#GL_DEPTH_COMPONENT                = $1902
#GL_RED                            = $1903
#GL_GREEN                          = $1904
#GL_BLUE                           = $1905
#GL_ALPHA                          = $1906
#GL_RGB                            = $1907
#GL_RGBA                           = $1908
#GL_LUMINANCE                      = $1909
#GL_LUMINANCE_ALPHA                = $190A

;  PixelMap 
;       GL_PIXEL_MAP_I_TO_I 
;       GL_PIXEL_MAP_S_TO_S 
;       GL_PIXEL_MAP_I_TO_R 
;       GL_PIXEL_MAP_I_TO_G 
;       GL_PIXEL_MAP_I_TO_B 
;       GL_PIXEL_MAP_I_TO_A 
;       GL_PIXEL_MAP_R_TO_R 
;       GL_PIXEL_MAP_G_TO_G 
;       GL_PIXEL_MAP_B_TO_B 
;       GL_PIXEL_MAP_A_TO_A 

;  PixelStore 
;       GL_UNPACK_SWAP_BYTES 
;       GL_UNPACK_LSB_FIRST 
;       GL_UNPACK_ROW_LENGTH 
;       GL_UNPACK_SKIP_ROWS 
;       GL_UNPACK_SKIP_PIXELS 
;       GL_UNPACK_ALIGNMENT 
;       GL_PACK_SWAP_BYTES 
;       GL_PACK_LSB_FIRST 
;       GL_PACK_ROW_LENGTH 
;       GL_PACK_SKIP_ROWS 
;       GL_PACK_SKIP_PIXELS 
;       GL_PACK_ALIGNMENT 

;  PixelTransfer 
;       GL_MAP_COLOR 
;       GL_MAP_STENCIL 
;       GL_INDEX_SHIFT 
;       GL_INDEX_OFFSET 
;       GL_RED_SCALE 
;       GL_RED_BIAS 
;       GL_GREEN_SCALE 
;       GL_GREEN_BIAS 
;       GL_BLUE_SCALE 
;       GL_BLUE_BIAS 
;       GL_ALPHA_SCALE 
;       GL_ALPHA_BIAS 
;       GL_DEPTH_SCALE 
;       GL_DEPTH_BIAS 

;  PixelType 
#GL_BITMAP                         = $1A00
;       GL_BYTE 
;       GL_UNSIGNED_BYTE 
;       GL_SHORT 
;       GL_UNSIGNED_SHORT 
;       GL_INT 
;       GL_UNSIGNED_INT 
;       GL_FLOAT 

;  PolygonMode 
#GL_POINT                          = $1B00
#GL_LINE                           = $1B01
#GL_FILL                           = $1B02

;  ReadBufferMode 
;       GL_FRONT_LEFT 
;       GL_FRONT_RIGHT 
;       GL_BACK_LEFT 
;       GL_BACK_RIGHT 
;       GL_FRONT 
;       GL_BACK 
;       GL_LEFT 
;       GL_RIGHT 
;       GL_AUX0 
;       GL_AUX1 
;       GL_AUX2 
;       GL_AUX3 

;  RenderingMode 
#GL_RENDER                         = $1C00
#GL_FEEDBACK                       = $1C01
#GL_SELECT                         = $1C02

;  ShadingModel 
#GL_FLAT                           = $1D00
#GL_SMOOTH                         = $1D01


;  StencilFunction 
;       GL_NEVER 
;       GL_LESS 
;       GL_EQUAL 
;       GL_LEQUAL 
;       GL_GREATER 
;       GL_NOTEQUAL 
;       GL_GEQUAL 
;       GL_ALWAYS 

;  StencilOp 
;       GL_ZERO 
#GL_KEEP                           = $1E00
#GL_REPLACE                        = $1E01
#GL_INCR                           = $1E02
#GL_DECR                           = $1E03
;       GL_INVERT 

;  StringName 
#GL_VENDOR                         = $1F00
#GL_RENDERER                       = $1F01
#GL_VERSION                        = $1F02
#GL_EXTENSIONS                     = $1F03

;  TextureCoordName 
#GL_S                              = $2000
#GL_T                              = $2001
#GL_R                              = $2002
#GL_Q                              = $2003

;  TexCoordPointerType 
;       GL_SHORT 
;       GL_INT 
;       GL_FLOAT 
;       GL_DOUBLE 

;  TextureEnvMode 
#GL_MODULATE                       = $2100
#GL_DECAL                          = $2101
;       GL_BLEND 
;       GL_REPLACE 

;  TextureEnvParameter 
#GL_TEXTURE_ENV_MODE               = $2200
#GL_TEXTURE_ENV_COLOR              = $2201

;  TextureEnvTarget 
#GL_TEXTURE_ENV                    = $2300

;  TextureGenMode 
#GL_EYE_LINEAR                     = $2400
#GL_OBJECT_LINEAR                  = $2401
#GL_SPHERE_MAP                     = $2402

;  TextureGenParameter 
#GL_TEXTURE_GEN_MODE               = $2500
#GL_OBJECT_PLANE                   = $2501
#GL_EYE_PLANE                      = $2502

;  TextureMagFilter 
#GL_NEAREST                        = $2600
#GL_LINEAR                         = $2601

;  TextureMinFilter 
;       GL_NEAREST 
;       GL_LINEAR 
#GL_NEAREST_MIPMAP_NEAREST         = $2700
#GL_LINEAR_MIPMAP_NEAREST          = $2701
#GL_NEAREST_MIPMAP_LINEAR          = $2702
#GL_LINEAR_MIPMAP_LINEAR           = $2703

;  TextureParameterName 
#GL_TEXTURE_MAG_FILTER             = $2800
#GL_TEXTURE_MIN_FILTER             = $2801
#GL_TEXTURE_WRAP_S                 = $2802
#GL_TEXTURE_WRAP_T                 = $2803
;       GL_TEXTURE_BORDER_COLOR 
;       GL_TEXTURE_PRIORITY 

;  TextureTarget 
;       GL_TEXTURE_1D 
;       GL_TEXTURE_2D 
;       GL_PROXY_TEXTURE_1D 
;       GL_PROXY_TEXTURE_2D 

;  TextureWrapMode 
#GL_CLAMP                          = $2900
#GL_REPEAT                         = $2901

;  VertexPointerType 
;       GL_SHORT 
;       GL_INT 
;       GL_FLOAT 
;       GL_DOUBLE 

;  ClientAttribMask 
#GL_CLIENT_PIXEL_STORE_BIT         = $00000001
#GL_CLIENT_VERTEX_ARRAY_BIT        = $00000002
#GL_CLIENT_ALL_ATTRIB_BITS         = $ffffffff

;  polygon_offset 
#GL_POLYGON_OFFSET_FACTOR          = $8038
#GL_POLYGON_OFFSET_UNITS           = $2A00
#GL_POLYGON_OFFSET_POINT           = $2A01
#GL_POLYGON_OFFSET_LINE            = $2A02
#GL_POLYGON_OFFSET_FILL            = $8037

;  texture 
#GL_ALPHA4                         = $803B
#GL_ALPHA8                         = $803C
#GL_ALPHA12                        = $803D
#GL_ALPHA16                        = $803E
#GL_LUMINANCE4                     = $803F
#GL_LUMINANCE8                     = $8040
#GL_LUMINANCE12                    = $8041
#GL_LUMINANCE16                    = $8042
#GL_LUMINANCE4_ALPHA4              = $8043
#GL_LUMINANCE6_ALPHA2              = $8044
#GL_LUMINANCE8_ALPHA8              = $8045
#GL_LUMINANCE12_ALPHA4             = $8046
#GL_LUMINANCE12_ALPHA12            = $8047
#GL_LUMINANCE16_ALPHA16            = $8048
#GL_INTENSITY                      = $8049
#GL_INTENSITY4                     = $804A
#GL_INTENSITY8                     = $804B
#GL_INTENSITY12                    = $804C
#GL_INTENSITY16                    = $804D
#GL_R3_G3_B2                       = $2A10
#GL_RGB4                           = $804F
#GL_RGB5                           = $8050
#GL_RGB8                           = $8051
#GL_RGB10                          = $8052
#GL_RGB12                          = $8053
#GL_RGB16                          = $8054
#GL_RGBA2                          = $8055
#GL_RGBA4                          = $8056
#GL_RGB5_A1                        = $8057
#GL_RGBA8                          = $8058
#GL_RGB10_A2                       = $8059
#GL_RGBA12                         = $805A
#GL_RGBA16                         = $805B
#GL_TEXTURE_RED_SIZE               = $805C
#GL_TEXTURE_GREEN_SIZE             = $805D
#GL_TEXTURE_BLUE_SIZE              = $805E
#GL_TEXTURE_ALPHA_SIZE             = $805F
#GL_TEXTURE_LUMINANCE_SIZE         = $8060
#GL_TEXTURE_INTENSITY_SIZE         = $8061
#GL_PROXY_TEXTURE_1D               = $8063
#GL_PROXY_TEXTURE_2D               = $8064

;  texture_object 
#GL_TEXTURE_PRIORITY               = $8066
#GL_TEXTURE_RESIDENT               = $8067
#GL_TEXTURE_BINDING_1D             = $8068
#GL_TEXTURE_BINDING_2D             = $8069

;  vertex_array 
#GL_VERTEX_ARRAY                   = $8074
#GL_NORMAL_ARRAY                   = $8075
#GL_COLOR_ARRAY                    = $8076
#GL_INDEX_ARRAY                    = $8077
#GL_TEXTURE_COORD_ARRAY            = $8078
#GL_EDGE_FLAG_ARRAY                = $8079
#GL_VERTEX_ARRAY_SIZE              = $807A
#GL_VERTEX_ARRAY_TYPE              = $807B
#GL_VERTEX_ARRAY_STRIDE            = $807C
#GL_NORMAL_ARRAY_TYPE              = $807E
#GL_NORMAL_ARRAY_STRIDE            = $807F
#GL_COLOR_ARRAY_SIZE               = $8081
#GL_COLOR_ARRAY_TYPE               = $8082
#GL_COLOR_ARRAY_STRIDE             = $8083
#GL_INDEX_ARRAY_TYPE               = $8085
#GL_INDEX_ARRAY_STRIDE             = $8086
#GL_TEXTURE_COORD_ARRAY_SIZE       = $8088
#GL_TEXTURE_COORD_ARRAY_TYPE       = $8089
#GL_TEXTURE_COORD_ARRAY_STRIDE     = $808A
#GL_EDGE_FLAG_ARRAY_STRIDE         = $808C
#GL_VERTEX_ARRAY_POINTER           = $808E
#GL_NORMAL_ARRAY_POINTER           = $808F
#GL_COLOR_ARRAY_POINTER            = $8090
#GL_INDEX_ARRAY_POINTER            = $8091
#GL_TEXTURE_COORD_ARRAY_POINTER    = $8092
#GL_EDGE_FLAG_ARRAY_POINTER        = $8093
#GL_V2F                            = $2A20
#GL_V3F                            = $2A21
#GL_C4UB_V2F                       = $2A22
#GL_C4UB_V3F                       = $2A23
#GL_C3F_V3F                        = $2A24
#GL_N3F_V3F                        = $2A25
#GL_C4F_N3F_V3F                    = $2A26
#GL_T2F_V3F                        = $2A27
#GL_T4F_V4F                        = $2A28
#GL_T2F_C4UB_V3F                   = $2A29
#GL_T2F_C3F_V3F                    = $2A2A
#GL_T2F_N3F_V3F                    = $2A2B
#GL_T2F_C4F_N3F_V3F                = $2A2C
#GL_T4F_C4F_N3F_V4F                = $2A2D

;  Extensions 
#GL_EXT_vertex_array               = 1
#GL_EXT_bgra                       = 1
#GL_EXT_paletted_texture           = 1
#GL_WIN_swap_hint                  = 1
#GL_WIN_draw_range_elements        = 1
;  #define GL_WIN_phong_shading              1
;  #define GL_WIN_specular_fog               1

;  EXT_vertex_array 
#GL_VERTEX_ARRAY_EXT               = $8074
#GL_NORMAL_ARRAY_EXT               = $8075
#GL_COLOR_ARRAY_EXT                = $8076
#GL_INDEX_ARRAY_EXT                = $8077
#GL_TEXTURE_COORD_ARRAY_EXT        = $8078
#GL_EDGE_FLAG_ARRAY_EXT            = $8079
#GL_VERTEX_ARRAY_SIZE_EXT          = $807A
#GL_VERTEX_ARRAY_TYPE_EXT          = $807B
#GL_VERTEX_ARRAY_STRIDE_EXT        = $807C
#GL_VERTEX_ARRAY_COUNT_EXT         = $807D
#GL_NORMAL_ARRAY_TYPE_EXT          = $807E
#GL_NORMAL_ARRAY_STRIDE_EXT        = $807F
#GL_NORMAL_ARRAY_COUNT_EXT         = $8080
#GL_COLOR_ARRAY_SIZE_EXT           = $8081
#GL_COLOR_ARRAY_TYPE_EXT           = $8082
#GL_COLOR_ARRAY_STRIDE_EXT         = $8083
#GL_COLOR_ARRAY_COUNT_EXT          = $8084
#GL_INDEX_ARRAY_TYPE_EXT           = $8085
#GL_INDEX_ARRAY_STRIDE_EXT         = $8086
#GL_INDEX_ARRAY_COUNT_EXT          = $8087
#GL_TEXTURE_COORD_ARRAY_SIZE_EXT   = $8088
#GL_TEXTURE_COORD_ARRAY_TYPE_EXT   = $8089
#GL_TEXTURE_COORD_ARRAY_STRIDE_EXT = $808A
#GL_TEXTURE_COORD_ARRAY_COUNT_EXT  = $808B
#GL_EDGE_FLAG_ARRAY_STRIDE_EXT     = $808C
#GL_EDGE_FLAG_ARRAY_COUNT_EXT      = $808D
#GL_VERTEX_ARRAY_POINTER_EXT       = $808E
#GL_NORMAL_ARRAY_POINTER_EXT       = $808F
#GL_COLOR_ARRAY_POINTER_EXT        = $8090
#GL_INDEX_ARRAY_POINTER_EXT        = $8091
#GL_TEXTURE_COORD_ARRAY_POINTER_EXT = $8092
#GL_EDGE_FLAG_ARRAY_POINTER_EXT    = $8093
#GL_DOUBLE_EXT                     = #GL_DOUBLE

;  EXT_bgra 
#GL_BGR_EXT                        = $80E0
#GL_BGRA_EXT                       = $80E1

;  EXT_paletted_texture 

;  These must match the GL_COLOR_TABLE_*_SGI enumerants 
#GL_COLOR_TABLE_FORMAT_EXT         = $80D8
#GL_COLOR_TABLE_WIDTH_EXT          = $80D9
#GL_COLOR_TABLE_RED_SIZE_EXT       = $80DA
#GL_COLOR_TABLE_GREEN_SIZE_EXT     = $80DB
#GL_COLOR_TABLE_BLUE_SIZE_EXT      = $80DC
#GL_COLOR_TABLE_ALPHA_SIZE_EXT     = $80DD
#GL_COLOR_TABLE_LUMINANCE_SIZE_EXT = $80DE
#GL_COLOR_TABLE_INTENSITY_SIZE_EXT = $80DF

#GL_COLOR_INDEX1_EXT               = $80E2
#GL_COLOR_INDEX2_EXT               = $80E3
#GL_COLOR_INDEX4_EXT               = $80E4
#GL_COLOR_INDEX8_EXT               = $80E5
#GL_COLOR_INDEX12_EXT              = $80E6
#GL_COLOR_INDEX16_EXT              = $80E7

;  WIN_draw_range_elements 
#GL_MAX_ELEMENTS_VERTICES_WIN      = $80E8
#GL_MAX_ELEMENTS_INDICES_WIN       = $80E9

;  WIN_phong_shading 
#GL_PHONG_WIN                      = $80EA
#GL_PHONG_HINT_WIN                 = $80EB

;  WIN_specular_fog 
#GL_FOG_SPECULAR_TEXTURE_WIN       = $80EC

;  For compatibility with OpenGL v1.0 
#GL_LOGIC_OP = #GL_INDEX_LOGIC_OP
#GL_TEXTURE_COMPONENTS = #GL_TEXTURE_INTERNAL_FORMAT

; ***********************************************************

; GLUT API macro definitions -- the display mode definitions
#GLUT_RGB                          = $0000
#GLUT_RGBA                         = $0000
#GLUT_INDEX                        = $0001
#GLUT_SINGLE                       = $0000
#GLUT_DOUBLE                       = $0002
#GLUT_ACCUM                        = $0004
#GLUT_ALPHA                        = $0008
#GLUT_DEPTH                        = $0010
#GLUT_STENCIL                      = $0020
#GLUT_MULTISAMPLE                  = $0080
#GLUT_STEREO                       = $0100
#GLUT_LUMINANCE                    = $0200
This is my wrapper code:
OpenGL Library.pbi

Code: Select all

Prototype.l Proto_glPushMatrix()
Global glPushMatrix.Proto_glPushMatrix

Prototype.l Proto_glPopMatrix()
Global glPushMatrix.Proto_glPopMatrix

Prototype.l Proto_glMatrixMode(mode.w)
Global glMatrixMode.Proto_glMatrixMode

Prototype.l Proto_glTranslatef(x.f, y.f, z.f)
Global glTranslatef.Proto_glTranslatef

Prototype.l Proto_glTranslated(x.d, y.d, z.d)
Global glTranslated.Proto_glTranslated

Prototype.l Proto_glRotatef(angle.f, x.f, y.f, z.f)
Global glRotatef.Proto_glRotatef

Prototype.l Proto_glRotated(angle.d, x.d, y.d, z.d)
Global glRotated.Proto_glRotated

Prototype.l Proto_glClear(mask.l)
Global glClear.Proto_glClear

Prototype.l Proto_glDisable(capability.l)
Global glDisable.Proto_glDisable

Prototype.l Proto_glEnable(capability.l)
Global glEnable.Proto_glEnable

Prototype.l Proto_glBegin(mode.w)
Global glBegin.Proto_glBegin

Prototype.l Proto_glNormal3f(nx.f, ny.f, nz.f)
Global glNormal3f.Proto_glNormal3f

Prototype.l Proto_glColor3f(red.f, green.f, blue.f)
Global glColor3f.Proto_glColor3f

Prototype.l Proto_glVertex3f(x.f, y.f, z.f)
Global glVertex3f.Proto_glVertex3f

Prototype.l Proto_glEnd()
Global glEnd.Proto_glEnd

Prototype.l Proto_glFinish()
Global glFinish.Proto_glFinish

Prototype.l Proto_glClearColor(red.f, green.f, blue.f, alpha.f)
Global glClearColor.Proto_glClearColor

Prototype.l Proto_glClearDepth(depth.d)
Global glClearDepth.Proto_glClearDepth

Prototype.l Proto_glDepthFunc(func.w)
Global glDepthFunc.Proto_glDepthFunc

Prototype.l Proto_glShadeModel(mode.w)
Global glShadeModel.Proto_glShadeModel

Prototype.l Proto_glLoadIdentity()
Global glLoadIdentity.Proto_glLoadIdentity

Prototype.l Proto_gluPerspective(fovy.d, aspect.d, zNear.d, zFar.d)
Global gluPerspective.Proto_gluPerspective

Prototype.l Proto_glViewport(x.l, y.l, width.l, height.l)
Global glViewport.Proto_glViewport

Prototype.l Proto_glutSwapBuffers()
Global glutSwapBuffers.Proto_glutSwapBuffers

Prototype.l Proto_glutDestroyWindow(window.l)
Global glutDestroyWindow.Proto_glutDestroyWindow

Prototype.l Proto_glutInit(argc.l, argv.s())
Global glutInit.Proto_glutInit

Prototype.l Proto_glutInitDisplayMode(mode.w)
Global glutInitDisplayMode.Proto_glutInitDisplayMode

Prototype.l Proto_glutInitWindowSize(width.l, height.l)
Global glutInitWindowSize.Proto_glutInitWindowSize

Prototype.l Proto_glutInitWindowPosition(x.l, y.l)
Global glutInitWindowPosition.Proto_glutInitWindowPosition

Prototype.l Proto_glutCreateWindow(title.s)
Global glutCreateWindow.Proto_glutCreateWindow

Prototype.l Proto_glutDisplayFunc(func.l)
Global glutDisplayFunc.Proto_glutDisplayFunc

Prototype.l Proto_glutFullScreen()
Global glutFullScreen.Proto_glutFullScreen

Prototype.l Proto_glutIdleFunc(func.l)
Global glutIdleFunc.Proto_glutIdleFunc

Prototype.l Proto_glutReshapeFunc(func.l)
Global glutReshapeFunc.Proto_glutReshapeFunc

Prototype.l Proto_glutKeyboardFunc(func.l)
Global glutKeyboardFunc.Proto_glutKeyboardFunc

Prototype.l Proto_glutMainLoop()
Global glutMainLoop.Proto_glutMainLoop

If OpenLibrary(0, "/usr/lib/libGL.so")
  glPushMatrix.Proto_glPushMatrix = GetFunction(0, "glPushMatrix")
  glPopMatrix.Proto_glPopMatrix = GetFunction(0, "glPopMatrix")
  glMatrixMode.Proto_glMatrixMode = GetFunction(0, "glMatrixMode")
  glTranslatef.Proto_glTranslatef = GetFunction(0, "glTranslatef")
  glTranslated.Proto_glTranslated = GetFunction(0, "glTranslated")
  glRotatef.Proto_glRotatef = GetFunction(0, "glRotatef")
  glRotated.Proto_glRotated = GetFunction(0, "glRotated")
  glClear.Proto_glClear = GetFunction(0, "glClear")
  glDisable.Proto_glDisable = GetFunction(0, "")
  glEnable.Proto_glEnable = GetFunction(0, "glEnable")
  glBegin.Proto_glBegin = GetFunction(0, "glBegin")
  glNormal3f.Proto_glNormal3f = GetFunction(0, "glNormal3f")
  glColor3f.Proto_glColor3f = GetFunction(0, "glColor3f")
  glVertex3f.Proto_glVertex3f = GetFunction(0, "glVertex3f")
  glEnd.Proto_glEnd = GetFunction(0, "glEnd")
  glFinish.Proto_glFinish = GetFunction(0, "glFinish")
  glClearColor.Proto_glClearColor = GetFunction(0, "glClearColor")
  glClearDepth.Proto_glClearDepth = GetFunction(0, "glClearDepth")
  glDepthFunc.Proto_glDepthFunc = GetFunction(0, "glDepthFunc")
  glShadeModel.Proto_glShadeModel = GetFunction(0, "glShadeModel")
  glLoadIdentity.Proto_glLoadIdentity = GetFunction(0, "glLoadIdentity")
  glViewport.Proto_glViewport = GetFunction(0, "glViewport")
EndIf

If OpenLibrary(1, "/usr/lib/libGLU.so")
  gluPerspective.Proto_gluPerspective = GetFunction(0, "gluPerspective")
EndIf

If OpenLibrary(1, "/usr/lib/libglut.so")
  glutSwapBuffers.Proto_glutSwapBuffers = GetFunction(0, "glutSwapBuffers")
  glutDestroyWindow.Proto_glutDestroyWindow = GetFunction(0, "glutDestroyWindow")
  glutInit.Proto_glutInit = GetFunction(0, "glutInit")
  glutInitDisplayMode.Proto_glutInitDisplayMode = GetFunction(0, "glutInitDisplayMode")
  glutInitWindowSize.Proto_glutInitWindowSize = GetFunction(0, "glutInitWindowSize")
  glutInitWindowPosition.Proto_glutInitWindowPosition = GetFunction(0, "glutInitWindowPosition")
  glutCreateWindow.Proto_glutCreateWindow = GetFunction(0, "glutCreateWindow")
  glutDisplayFunc.Proto_glutDisplayFunc = GetFunction(0, "glutDisplayFunc")
  glutFullScreen.Proto_glutFullScreen = GetFunction(0, "glutFullScreen")
  glutIdleFunc.Proto_glutIdleFunc = GetFunction(0, "glutIdleFunc")
  glutReshapeFunc.Proto_glutReshapeFunc = GetFunction(0, "glutReshapeFunc")
  glutKeyboardFunc.Proto_glutKeyboardFunc = GetFunction(0, "glutKeyboardFunc")
  glutMainLoop.Proto_glutMainLoop = GetFunction(0, "glutMainLoop")
EndIf
And finally, Nehe lesson 2:
Nehe02.pb

Code: Select all

; //
; // This code was created by Jeff Molofee '99 (ported to Linux/GLUT by Richard Campbell '99)
; //
; // If you've found this code useful, please let me know.
; //
; // Visit me at www.demonews.com/hosted/nehe 
; // (email Richard Campbell at ulmont@bellsouth.net)
; //

IncludeFile "OpenGL.pbi"
IncludeFile "OpenGL Library.pbi"

; The number of our GLUT window
Define window.l

; A general OpenGL initialization function.  Sets all of the initial parameters.
Procedure InitGL(Width.l, Height.l)	; We call this right after our OpenGL window is created.
  glClearColor(0.0, 0.0, 0.0, 0.0);		// This Will Clear The Background Color To Black
  glClearDepth(1.0);				// Enables Clearing Of The Depth Buffer
  glDepthFunc(#GL_LESS);				// The Type Of Depth Test To Do
  glEnable(#GL_DEPTH_TEST);			// Enables Depth Testing
  glShadeModel(#GL_SMOOTH);			// Enables Smooth Color Shading

  glMatrixMode(#GL_PROJECTION);
  glLoadIdentity();				// Reset The Projection Matrix

  gluPerspective(45.0,Width/Height,0.1,100.0);	// Calculate The Aspect Ratio Of The Window

  glMatrixMode(#GL_MODELVIEW);
EndProcedure

; The function called when our window is resized (which shouldn't happen, because we're fullscreen)
Procedure ReSizeGLScene(Width.l, Height.l)
  If Height = 0				;// Prevent A Divide By Zero If The Window Is Too Small
    Height=1;
  EndIf

  glViewport(0, 0, Width, Height);		// Reset The Current Viewport And Perspective Transformation

  glMatrixMode(#GL_PROJECTION);
  glLoadIdentity();

  gluPerspective(45.0,Width/Height,0.1,100.0);
  glMatrixMode(#GL_MODELVIEW);
EndProcedure

; The main drawing function.
Procedure DrawGLScene()
  glClear(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT);		// Clear The Screen And The Depth Buffer
  glLoadIdentity();				// Reset The View

  glTranslatef(-1.5,0.0,-6.0);		// Move Left 1.5 Units And Into The Screen 6.0
	
  ;// draw a triangle
  glBegin(#GL_POLYGON);				// start drawing a polygon
  glVertex3f( 0.0, 1.0, 0.0);		// Top
  glVertex3f( 1.0,-1.0, 0.0);		// Bottom Right
  glVertex3f(-1.0,-1.0, 0.0);		// Bottom Left	
  glEnd();					// we're done with the polygon

  glTranslatef(3.0,0.0,0.0);		        // Move Right 3 Units
	
  ;// draw a square (quadrilateral)
  glBegin(GL_QUADS);				// start drawing a polygon (4 sided)
  glVertex3f(-1.0, 1.0, 0.0);		// Top Left
  glVertex3f( 1.0, 1.0, 0.0);		// Top Right
  glVertex3f( 1.0,-1.0, 0.0);		// Bottom Right
  glVertex3f(-1.0,-1.0, 0.0);		// Bottom Left	
  glEnd();					// done with the polygon

  ;// Swap buffers To display, since we're double buffered.
  glutSwapBuffers();
EndProcedure

; The function called whenever a key is pressed.
Procedure keyPressed(key.c, x.l, y.l) 
  ;/* avoid thrashing this Procedure */
  Delay(100)

  ;/* If escape is pressed, kill everything. */
  If key = 27 
  	;/* shut down our window */
  	glutDestroyWindow(window); 
  	
  	;/* exit the program...normal termination. */
  	End
  EndIf
EndProcedure

Procedure.l main() 
  ; Initialize GLUT state - glut will take any command line arguments that pertain To it Or 
  ;   X Windows - look at its documentation at http://reality.sgi.com/mjk/spec3/spec3.html */  
  argc = CountProgramParameters()
  Dim argv.s(argc)
  For a=0 To argc : argv(a) = ProgramParameter(a) : Next
  glutInit(@argc, @argv)

  ; Select type of Display mode:   
  ;   Double buffer 
  ;   RGBA color
  ;   Alpha components supported 
  ;   Depth buffer
  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH);  

  ; get a 640 x 480 window
  glutInitWindowSize(640, 480);  

  ; the window starts at the upper left corner of the screen
  glutInitWindowPosition(0, 0);  

  ; Open a window
  window = glutCreateWindow("Jeff Molofee's GL Code Tutorial ... NeHe '99");  

  ; Register the function To do all our OpenGL drawing.
  glutDisplayFunc(@DrawGLScene());  

  ; Go fullscreen.  This is the soonest we could possibly go fullscreen.
  glutFullScreen();

  ; Even If there are no events, redraw our gl scene.
  glutIdleFunc(@DrawGLScene());

  ; Register the function called when our window is resized.
  glutReshapeFunc(@ReSizeGLScene());

  ; Register the function called when the keyboard is pressed.
  glutKeyboardFunc(@keyPressed());

  ; Initialize our window.
  InitGL(640, 480);
  
  ; Start Event Processing Engine 
  glutMainLoop();  

  End
EndProcedure

main()
traumatic
PureBasic Expert
PureBasic Expert
Posts: 1661
Joined: Sun Apr 27, 2003 4:41 pm
Location: Germany
Contact:

Re: OpenGL with GL, GLU and GLUT

Post by traumatic »

Hello Foz!
Foz wrote:[..]but when I come to run it, it complains about expecting a Linked List!
...because you told PB to expect that. ->

Code: Select all

Prototype.l Proto_glutInit(argc.l, argv.s())
Shouldn't the prototype look someting like Proto_glutInit(argc.l, *argv.l) ?


I didn't run your code (no linux here) but the following looks wrong as well:

Code: Select all

Dim argv.s(argc)
For a=0 To argc : argv(a) = ProgramParameter(a) : Next
  glutInit(@argc, @argv)  ; <- argv without () is a different variable, use @argv() instead
  .
  .
  .
Good programmers don't comment their code. It was hard to write, should be hard to read.
Foz
Addict
Addict
Posts: 1359
Joined: Tue Nov 13, 2007 12:42 pm
Location: Manchester, UK

Re: OpenGL with GL, GLU and GLUT

Post by Foz »

traumatic wrote:Hello Foz!
Foz wrote:[..]but when I come to run it, it complains about expecting a Linked List!
...because you told PB to expect that. ->

Code: Select all

Prototype.l Proto_glutInit(argc.l, argv.s())
Shouldn't the prototype look someting like Proto_glutInit(argc.l, *argv.l) ?

I didn't run your code (no linux here) but the following looks wrong as well:

Code: Select all

Dim argv.s(argc)
For a=0 To argc : argv(a) = ProgramParameter(a) : Next
  glutInit(@argc, @argv)  ; <- argv without () is a different variable, use @argv() instead
I've given this a whirl, but I just get an "Invalid Memory Access". :(

Unfortunately, I just don't have the knowledge of C and how to translate it to PB Prototypes, which is why I've put it up for grabs here. I don't mind doing the grunt work, but there are things I've guessed at - the biggest one is this glutInit function, and I've obviously got it very very wrong.

Any other ideas?
walker
Enthusiast
Enthusiast
Posts: 634
Joined: Wed May 05, 2004 4:04 pm
Location: Germany

Post by walker »

I guess you have to use PrototypeC instead of Prototype...

not sure and it's too late in the evening today to have a closer look....
traumatic
PureBasic Expert
PureBasic Expert
Posts: 1661
Joined: Sun Apr 27, 2003 4:41 pm
Location: Germany
Contact:

Post by traumatic »

walker wrote:I guess you have to use PrototypeC instead of Prototype...
Absolutely yes!
I forgot about that. Other than that, it's difficult for me to test so if anyone else got any ideas...
Good programmers don't comment their code. It was hard to write, should be hard to read.
Foz
Addict
Addict
Posts: 1359
Joined: Tue Nov 13, 2007 12:42 pm
Location: Manchester, UK

Post by Foz »

Is PrototypeC exactly the same as Prototype? Or are there some syntax differences?
traumatic
PureBasic Expert
PureBasic Expert
Posts: 1661
Joined: Sun Apr 27, 2003 4:41 pm
Location: Germany
Contact:

Post by traumatic »

No, there's no difference in syntax (it's just using a different calling convention)
Good programmers don't comment their code. It was hard to write, should be hard to read.
remi_meier
Enthusiast
Enthusiast
Posts: 468
Joined: Sat Dec 20, 2003 6:19 pm
Location: Switzerland

Post by remi_meier »

Just in case, I've imported GL/GLU/GLUT for Linux here:
http://remi.secretly.de/downloads/OpenG ... nux.tar.gz
-> Includes\glu.pbi

Works pretty nice here.
Athlon64 3700+, 1024MB Ram, Radeon X1600
Foz
Addict
Addict
Posts: 1359
Joined: Tue Nov 13, 2007 12:42 pm
Location: Manchester, UK

Post by Foz »

Well that works, which is far better than my offering :D

Thank you for that, I can start doing something in 3d now :)
Niffo
Enthusiast
Enthusiast
Posts: 504
Joined: Tue Jan 31, 2006 9:43 am
Location: France

Post by Niffo »

@remi_meier

Very good multi-platform work !
Niffo
Post Reply