#
#
# Adaption of the delphi3d.net OpenGL units to FreePascal
# Sebastian Guenther (sg@freepascal.org) in 2002
# These units are free to use
#
#******************************************************************************
# Converted to Delphi by Tom Nuydens (tom@delphi3d.net)
# For the latest updates, visit Delphi3D: http://www.delphi3d.net
#******************************************************************************
when defined(windows):
{.push callconv: stdcall.}
else:
{.push callconv: cdecl.}
when defined(windows):
const dllname* = "opengl32.dll"
elif defined(macosx):
const dllname* = "/System/Library/Frameworks/OpenGL.framework/Libraries/libGL.dylib"
else:
const dllname* = "libGL.so.1"
type
PGLenum* = ptr TGLenum
PGLboolean* = ptr TGLboolean
PGLbitfield* = ptr TGLbitfield
TGLbyte* = int8
PGLbyte* = ptr TGlbyte
PGLshort* = ptr TGLshort
PGLint* = ptr TGLint
PGLsizei* = ptr TGLsizei
PGLubyte* = ptr TGLubyte
PGLushort* = ptr TGLushort
PGLuint* = ptr TGLuint
PGLfloat* = ptr TGLfloat
PGLclampf* = ptr TGLclampf
PGLdouble* = ptr TGLdouble
PGLclampd* = ptr TGLclampd
PGLvoid* = Pointer
PPGLvoid* = ptr PGLvoid
TGLenum* = cint
TGLboolean* = bool
TGLbitfield* = cint
TGLshort* = int16
TGLint* = cint
TGLsizei* = int
TGLubyte* = int8
TGLushort* = int16
TGLuint* = cint
TGLfloat* = float32
TGLclampf* = float32
TGLdouble* = float
TGLclampd* = float
const # Version
GL_VERSION_1_1* = 1 # AccumOp
constGL_ACCUM* = 0x00000100
GL_LOAD* = 0x00000101
GL_RETURN* = 0x00000102
GL_MULT* = 0x00000103
GL_ADD* = 0x00000104 # AlphaFunction
GL_NEVER* = 0x00000200
GL_LESS* = 0x00000201
GL_EQUAL* = 0x00000202
GL_LEQUAL* = 0x00000203
GL_GREATER* = 0x00000204
GL_NOTEQUAL* = 0x00000205
GL_GEQUAL* = 0x00000206
GL_ALWAYS* = 0x00000207 # AttribMask
GL_CURRENT_BIT* = 0x00000001
GL_POINT_BIT* = 0x00000002
GL_LINE_BIT* = 0x00000004
GL_POLYGON_BIT* = 0x00000008
GL_POLYGON_STIPPLE_BIT* = 0x00000010
GL_PIXEL_MODE_BIT* = 0x00000020
GL_LIGHTING_BIT* = 0x00000040
GL_FOG_BIT* = 0x00000080
GL_DEPTH_BUFFER_BIT* = 0x00000100
GL_ACCUM_BUFFER_BIT* = 0x00000200
GL_STENCIL_BUFFER_BIT* = 0x00000400
GL_VIEWPORT_BIT* = 0x00000800
GL_TRANSFORM_BIT* = 0x00001000
GL_ENABLE_BIT* = 0x00002000
GL_COLOR_BUFFER_BIT* = 0x00004000
GL_HINT_BIT* = 0x00008000
GL_EVAL_BIT* = 0x00010000
GL_LIST_BIT* = 0x00020000
GL_TEXTURE_BIT* = 0x00040000
GL_SCISSOR_BIT* = 0x00080000
GL_ALL_ATTRIB_BITS* = 0x000FFFFF # BeginMode
GL_POINTS* = 0x00000000
GL_LINES* = 0x00000001
GL_LINE_LOOP* = 0x00000002
GL_LINE_STRIP* = 0x00000003
GL_TRIANGLES* = 0x00000004
GL_TRIANGLE_STRIP* = 0x00000005
GL_TRIANGLE_FAN* = 0x00000006
GL_QUADS* = 0x00000007
GL_QUAD_STRIP* = 0x00000008
GL_POLYGON* = 0x00000009 # BlendingFactorDest
GL_ZERO* = 0
GL_ONE* = 1
GL_SRC_COLOR* = 0x00000300
GL_ONE_MINUS_SRC_COLOR* = 0x00000301
GL_SRC_ALPHA* = 0x00000302
GL_ONE_MINUS_SRC_ALPHA* = 0x00000303
GL_DST_ALPHA* = 0x00000304
GL_ONE_MINUS_DST_ALPHA* = 0x00000305 # BlendingFactorSrc
# GL_ZERO
# GL_ONE
GL_DST_COLOR* = 0x00000306
GL_ONE_MINUS_DST_COLOR* = 0x00000307
GL_SRC_ALPHA_SATURATE* = 0x00000308 # 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* = 0x00003000
GL_CLIP_PLANE1* = 0x00003001
GL_CLIP_PLANE2* = 0x00003002
GL_CLIP_PLANE3* = 0x00003003
GL_CLIP_PLANE4* = 0x00003004
GL_CLIP_PLANE5* = 0x00003005 # 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* = 0x00001400
GL_UNSIGNED_BYTE* = 0x00001401
GL_SHORT* = 0x00001402
GL_UNSIGNED_SHORT* = 0x00001403
GL_INT* = 0x00001404
GL_UNSIGNED_INT* = 0x00001405
GL_FLOAT* = 0x00001406
GL_2_BYTES* = 0x00001407
GL_3_BYTES* = 0x00001408
GL_4_BYTES* = 0x00001409
GL_DOUBLE* = 0x0000140A # DepthFunction
# GL_NEVER
# GL_LESS
# GL_EQUAL
# GL_LEQUAL
# GL_GREATER
# GL_NOTEQUAL
# GL_GEQUAL
# GL_ALWAYS
# DrawBufferMode
GL_NONE* = 0
GL_FRONT_LEFT* = 0x00000400
GL_FRONT_RIGHT* = 0x00000401
GL_BACK_LEFT* = 0x00000402
GL_BACK_RIGHT* = 0x00000403
GL_FRONT* = 0x00000404
GL_BACK* = 0x00000405
GL_LEFT* = 0x00000406
GL_RIGHT* = 0x00000407
GL_FRONT_AND_BACK* = 0x00000408
GL_AUX0* = 0x00000409
GL_AUX1* = 0x0000040A
GL_AUX2* = 0x0000040B
GL_AUX3* = 0x0000040C # 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* = 0x00000500
GL_INVALID_VALUE* = 0x00000501
GL_INVALID_OPERATION* = 0x00000502
GL_STACK_OVERFLOW* = 0x00000503
GL_STACK_UNDERFLOW* = 0x00000504
GL_OUT_OF_MEMORY* = 0x00000505 # FeedBackMode
GL_2D* = 0x00000600
GL_3D* = 0x00000601
GL_3D_COLOR* = 0x00000602
GL_3D_COLOR_TEXTURE* = 0x00000603
GL_4D_COLOR_TEXTURE* = 0x00000604 # FeedBackToken
GL_PASS_THROUGH_TOKEN* = 0x00000700
GL_POINT_TOKEN* = 0x00000701
GL_LINE_TOKEN* = 0x00000702
GL_POLYGON_TOKEN* = 0x00000703
GL_BITMAP_TOKEN* = 0x00000704
GL_DRAW_PIXEL_TOKEN* = 0x00000705
GL_COPY_PIXEL_TOKEN* = 0x00000706
GL_LINE_RESET_TOKEN* = 0x00000707 # FogMode
# GL_LINEAR
GL_EXP* = 0x00000800
GL_EXP2* = 0x00000801 # FogParameter
# GL_FOG_COLOR
# GL_FOG_DENSITY
# GL_FOG_END
# GL_FOG_INDEX
# GL_FOG_MODE
# GL_FOG_START
# FrontFaceDirection
GL_CW* = 0x00000900
GL_CCW* = 0x00000901 # GetMapTarget
GL_COEFF* = 0x00000A00
GL_ORDER* = 0x00000A01
GL_DOMAIN* = 0x00000A02 # 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* = 0x00000B00
GL_CURRENT_INDEX* = 0x00000B01
GL_CURRENT_NORMAL* = 0x00000B02
GL_CURRENT_TEXTURE_COORDS* = 0x00000B03
GL_CURRENT_RASTER_COLOR* = 0x00000B04
GL_CURRENT_RASTER_INDEX* = 0x00000B05
GL_CURRENT_RASTER_TEXTURE_COORDS* = 0x00000B06
GL_CURRENT_RASTER_POSITION* = 0x00000B07
GL_CURRENT_RASTER_POSITION_VALID* = 0x00000B08
GL_CURRENT_RASTER_DISTANCE* = 0x00000B09
GL_POINT_SMOOTH* = 0x00000B10
constGL_POINT_SIZE* = 0x00000B11
GL_POINT_SIZE_RANGE* = 0x00000B12
GL_POINT_SIZE_GRANULARITY* = 0x00000B13
GL_LINE_SMOOTH* = 0x00000B20
constGL_LINE_WIDTH* = 0x00000B21
GL_LINE_WIDTH_RANGE* = 0x00000B22
GL_LINE_WIDTH_GRANULARITY* = 0x00000B23
constGL_LINE_STIPPLE* = 0x00000B24
GL_LINE_STIPPLE_PATTERN* = 0x00000B25
GL_LINE_STIPPLE_REPEAT* = 0x00000B26
GL_LIST_MODE* = 0x00000B30
GL_MAX_LIST_NESTING* = 0x00000B31
constGL_LIST_BASE* = 0x00000B32
GL_LIST_INDEX* = 0x00000B33
constGL_POLYGON_MODE* = 0x00000B40
GL_POLYGON_SMOOTH* = 0x00000B41
constGL_POLYGON_STIPPLE* = 0x00000B42
constGL_EDGE_FLAG* = 0x00000B43
constGL_CULL_FACE* = 0x00000B44
GL_CULL_FACE_MODE* = 0x00000B45
constGL_FRONT_FACE* = 0x00000B46
GL_LIGHTING* = 0x00000B50
GL_LIGHT_MODEL_LOCAL_VIEWER* = 0x00000B51
GL_LIGHT_MODEL_TWO_SIDE* = 0x00000B52
GL_LIGHT_MODEL_AMBIENT* = 0x00000B53
constGL_SHADE_MODEL* = 0x00000B54
GL_COLOR_MATERIAL_FACE* = 0x00000B55
GL_COLOR_MATERIAL_PARAMETER* = 0x00000B56
constGL_COLOR_MATERIAL* = 0x00000B57
GL_FOG* = 0x00000B60
GL_FOG_INDEX* = 0x00000B61
GL_FOG_DENSITY* = 0x00000B62
GL_FOG_START* = 0x00000B63
GL_FOG_END* = 0x00000B64
GL_FOG_MODE* = 0x00000B65
GL_FOG_COLOR* = 0x00000B66
constGL_DEPTH_RANGE* = 0x00000B70
GL_DEPTH_TEST* = 0x00000B71
GL_DEPTH_WRITEMASK* = 0x00000B72
GL_DEPTH_CLEAR_VALUE* = 0x00000B73
constGL_DEPTH_FUNC* = 0x00000B74
GL_ACCUM_CLEAR_VALUE* = 0x00000B80
GL_STENCIL_TEST* = 0x00000B90
GL_STENCIL_CLEAR_VALUE* = 0x00000B91
constGL_STENCIL_FUNC* = 0x00000B92
GL_STENCIL_VALUE_MASK* = 0x00000B93
GL_STENCIL_FAIL* = 0x00000B94
GL_STENCIL_PASS_DEPTH_FAIL* = 0x00000B95
GL_STENCIL_PASS_DEPTH_PASS* = 0x00000B96
GL_STENCIL_REF* = 0x00000B97
GL_STENCIL_WRITEMASK* = 0x00000B98
constGL_MATRIX_MODE* = 0x00000BA0
GL_NORMALIZE* = 0x00000BA1
constGL_VIEWPORT* = 0x00000BA2
GL_MODELVIEW_STACK_DEPTH* = 0x00000BA3
GL_PROJECTION_STACK_DEPTH* = 0x00000BA4
GL_TEXTURE_STACK_DEPTH* = 0x00000BA5
GL_MODELVIEW_MATRIX* = 0x00000BA6
GL_PROJECTION_MATRIX* = 0x00000BA7
GL_TEXTURE_MATRIX* = 0x00000BA8
GL_ATTRIB_STACK_DEPTH* = 0x00000BB0
GL_CLIENT_ATTRIB_STACK_DEPTH* = 0x00000BB1
GL_ALPHA_TEST* = 0x00000BC0
GL_ALPHA_TEST_FUNC* = 0x00000BC1
GL_ALPHA_TEST_REF* = 0x00000BC2
GL_DITHER* = 0x00000BD0
GL_BLEND_DST* = 0x00000BE0
GL_BLEND_SRC* = 0x00000BE1
GL_BLEND* = 0x00000BE2
GL_LOGIC_OP_MODE* = 0x00000BF0
GL_INDEX_LOGIC_OP* = 0x00000BF1
GL_COLOR_LOGIC_OP* = 0x00000BF2
GL_AUX_BUFFERS* = 0x00000C00
constGL_DRAW_BUFFER* = 0x00000C01
constGL_READ_BUFFER* = 0x00000C02
GL_SCISSOR_BOX* = 0x00000C10
GL_SCISSOR_TEST* = 0x00000C11
GL_INDEX_CLEAR_VALUE* = 0x00000C20
GL_INDEX_WRITEMASK* = 0x00000C21
GL_COLOR_CLEAR_VALUE* = 0x00000C22
GL_COLOR_WRITEMASK* = 0x00000C23
GL_INDEX_MODE* = 0x00000C30
GL_RGBA_MODE* = 0x00000C31
GL_DOUBLEBUFFER* = 0x00000C32
GL_STEREO* = 0x00000C33
constGL_RENDER_MODE* = 0x00000C40
GL_PERSPECTIVE_CORRECTION_HINT* = 0x00000C50
GL_POINT_SMOOTH_HINT* = 0x00000C51
GL_LINE_SMOOTH_HINT* = 0x00000C52
GL_POLYGON_SMOOTH_HINT* = 0x00000C53
GL_FOG_HINT* = 0x00000C54
GL_TEXTURE_GEN_S* = 0x00000C60
GL_TEXTURE_GEN_T* = 0x00000C61
GL_TEXTURE_GEN_R* = 0x00000C62
GL_TEXTURE_GEN_Q* = 0x00000C63
GL_PIXEL_MAP_I_TO_I* = 0x00000C70
GL_PIXEL_MAP_S_TO_S* = 0x00000C71
GL_PIXEL_MAP_I_TO_R* = 0x00000C72
GL_PIXEL_MAP_I_TO_G* = 0x00000C73
GL_PIXEL_MAP_I_TO_B* = 0x00000C74
GL_PIXEL_MAP_I_TO_A* = 0x00000C75
GL_PIXEL_MAP_R_TO_R* = 0x00000C76
GL_PIXEL_MAP_G_TO_G* = 0x00000C77
GL_PIXEL_MAP_B_TO_B* = 0x00000C78
GL_PIXEL_MAP_A_TO_A* = 0x00000C79
GL_PIXEL_MAP_I_TO_I_SIZE* = 0x00000CB0
GL_PIXEL_MAP_S_TO_S_SIZE* = 0x00000CB1
GL_PIXEL_MAP_I_TO_R_SIZE* = 0x00000CB2
GL_PIXEL_MAP_I_TO_G_SIZE* = 0x00000CB3
GL_PIXEL_MAP_I_TO_B_SIZE* = 0x00000CB4
GL_PIXEL_MAP_I_TO_A_SIZE* = 0x00000CB5
GL_PIXEL_MAP_R_TO_R_SIZE* = 0x00000CB6
GL_PIXEL_MAP_G_TO_G_SIZE* = 0x00000CB7
GL_PIXEL_MAP_B_TO_B_SIZE* = 0x00000CB8
GL_PIXEL_MAP_A_TO_A_SIZE* = 0x00000CB9
GL_UNPACK_SWAP_BYTES* = 0x00000CF0
GL_UNPACK_LSB_FIRST* = 0x00000CF1
GL_UNPACK_ROW_LENGTH* = 0x00000CF2
GL_UNPACK_SKIP_ROWS* = 0x00000CF3
GL_UNPACK_SKIP_PIXELS* = 0x00000CF4
GL_UNPACK_ALIGNMENT* = 0x00000CF5
GL_PACK_SWAP_BYTES* = 0x00000D00
GL_PACK_LSB_FIRST* = 0x00000D01
GL_PACK_ROW_LENGTH* = 0x00000D02
GL_PACK_SKIP_ROWS* = 0x00000D03
GL_PACK_SKIP_PIXELS* = 0x00000D04
GL_PACK_ALIGNMENT* = 0x00000D05
GL_MAP_COLOR* = 0x00000D10
GL_MAP_STENCIL* = 0x00000D11
GL_INDEX_SHIFT* = 0x00000D12
GL_INDEX_OFFSET* = 0x00000D13
GL_RED_SCALE* = 0x00000D14
GL_RED_BIAS* = 0x00000D15
GL_ZOOM_X* = 0x00000D16
GL_ZOOM_Y* = 0x00000D17
GL_GREEN_SCALE* = 0x00000D18
GL_GREEN_BIAS* = 0x00000D19
GL_BLUE_SCALE* = 0x00000D1A
GL_BLUE_BIAS* = 0x00000D1B
GL_ALPHA_SCALE* = 0x00000D1C
GL_ALPHA_BIAS* = 0x00000D1D
GL_DEPTH_SCALE* = 0x00000D1E
GL_DEPTH_BIAS* = 0x00000D1F
GL_MAX_EVAL_ORDER* = 0x00000D30
GL_MAX_LIGHTS* = 0x00000D31
GL_MAX_CLIP_PLANES* = 0x00000D32
GL_MAX_TEXTURE_SIZE* = 0x00000D33
GL_MAX_PIXEL_MAP_TABLE* = 0x00000D34
GL_MAX_ATTRIB_STACK_DEPTH* = 0x00000D35
GL_MAX_MODELVIEW_STACK_DEPTH* = 0x00000D36
GL_MAX_NAME_STACK_DEPTH* = 0x00000D37
GL_MAX_PROJECTION_STACK_DEPTH* = 0x00000D38
GL_MAX_TEXTURE_STACK_DEPTH* = 0x00000D39
GL_MAX_VIEWPORT_DIMS* = 0x00000D3A
GL_MAX_CLIENT_ATTRIB_STACK_DEPTH* = 0x00000D3B
GL_SUBPIXEL_BITS* = 0x00000D50
GL_INDEX_BITS* = 0x00000D51
GL_RED_BITS* = 0x00000D52
GL_GREEN_BITS* = 0x00000D53
GL_BLUE_BITS* = 0x00000D54
GL_ALPHA_BITS* = 0x00000D55
GL_DEPTH_BITS* = 0x00000D56
GL_STENCIL_BITS* = 0x00000D57
GL_ACCUM_RED_BITS* = 0x00000D58
GL_ACCUM_GREEN_BITS* = 0x00000D59
GL_ACCUM_BLUE_BITS* = 0x00000D5A
GL_ACCUM_ALPHA_BITS* = 0x00000D5B
GL_NAME_STACK_DEPTH* = 0x00000D70
GL_AUTO_NORMAL* = 0x00000D80
GL_MAP1_COLOR_4* = 0x00000D90
GL_MAP1_INDEX* = 0x00000D91
GL_MAP1_NORMAL* = 0x00000D92
GL_MAP1_TEXTURE_COORD_1* = 0x00000D93
GL_MAP1_TEXTURE_COORD_2* = 0x00000D94
GL_MAP1_TEXTURE_COORD_3* = 0x00000D95
GL_MAP1_TEXTURE_COORD_4* = 0x00000D96
GL_MAP1_VERTEX_3* = 0x00000D97
GL_MAP1_VERTEX_4* = 0x00000D98
GL_MAP2_COLOR_4* = 0x00000DB0
GL_MAP2_INDEX* = 0x00000DB1
GL_MAP2_NORMAL* = 0x00000DB2
GL_MAP2_TEXTURE_COORD_1* = 0x00000DB3
GL_MAP2_TEXTURE_COORD_2* = 0x00000DB4
GL_MAP2_TEXTURE_COORD_3* = 0x00000DB5
GL_MAP2_TEXTURE_COORD_4* = 0x00000DB6
GL_MAP2_VERTEX_3* = 0x00000DB7
GL_MAP2_VERTEX_4* = 0x00000DB8
GL_MAP1_GRID_DOMAIN* = 0x00000DD0
GL_MAP1_GRID_SEGMENTS* = 0x00000DD1
GL_MAP2_GRID_DOMAIN* = 0x00000DD2
GL_MAP2_GRID_SEGMENTS* = 0x00000DD3
GL_TEXTURE_1D* = 0x00000DE0
GL_TEXTURE_2D* = 0x00000DE1
GL_FEEDBACK_BUFFER_POINTER* = 0x00000DF0
GL_FEEDBACK_BUFFER_SIZE* = 0x00000DF1
GL_FEEDBACK_BUFFER_TYPE* = 0x00000DF2
GL_SELECTION_BUFFER_POINTER* = 0x00000DF3
GL_SELECTION_BUFFER_SIZE* = 0x00000DF4 # 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* = 0x00001000
GL_TEXTURE_HEIGHT* = 0x00001001
GL_TEXTURE_INTERNAL_FORMAT* = 0x00001003
GL_TEXTURE_BORDER_COLOR* = 0x00001004
GL_TEXTURE_BORDER* = 0x00001005 # 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* = 0x00001100
GL_FASTEST* = 0x00001101
GL_NICEST* = 0x00001102 # HintTarget
# GL_PERSPECTIVE_CORRECTION_HINT
# GL_POINT_SMOOTH_HINT
# GL_LINE_SMOOTH_HINT
# GL_POLYGON_SMOOTH_HINT
# GL_FOG_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* = 0x00004000
GL_LIGHT1* = 0x00004001
GL_LIGHT2* = 0x00004002
GL_LIGHT3* = 0x00004003
GL_LIGHT4* = 0x00004004
GL_LIGHT5* = 0x00004005
GL_LIGHT6* = 0x00004006
GL_LIGHT7* = 0x00004007 # LightParameter
GL_AMBIENT* = 0x00001200
GL_DIFFUSE* = 0x00001201
GL_SPECULAR* = 0x00001202
GL_POSITION* = 0x00001203
GL_SPOT_DIRECTION* = 0x00001204
GL_SPOT_EXPONENT* = 0x00001205
GL_SPOT_CUTOFF* = 0x00001206
GL_CONSTANT_ATTENUATION* = 0x00001207
GL_LINEAR_ATTENUATION* = 0x00001208
GL_QUADRATIC_ATTENUATION* = 0x00001209 # 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* = 0x00001300
GL_COMPILE_AND_EXECUTE* = 0x00001301 # 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
constGL_CLEAR* = 0x00001500
GL_AND* = 0x00001501
GL_AND_REVERSE* = 0x00001502
GL_COPY* = 0x00001503
GL_AND_INVERTED* = 0x00001504
GL_NOOP* = 0x00001505
GL_XOR* = 0x00001506
GL_OR* = 0x00001507
GL_NOR* = 0x00001508
GL_EQUIV* = 0x00001509
GL_INVERT* = 0x0000150A
GL_OR_REVERSE* = 0x0000150B
GL_COPY_INVERTED* = 0x0000150C
GL_OR_INVERTED* = 0x0000150D
GL_NAND* = 0x0000150E
GL_SET* = 0x0000150F # 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* = 0x00001600
GL_SHININESS* = 0x00001601
GL_AMBIENT_AND_DIFFUSE* = 0x00001602
GL_COLOR_INDEXES* = 0x00001603 # GL_AMBIENT
# GL_DIFFUSE
# GL_SPECULAR
# MatrixMode
GL_MODELVIEW* = 0x00001700
GL_PROJECTION* = 0x00001701
GL_TEXTURE* = 0x00001702 # 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* = 0x00001800
GL_DEPTH* = 0x00001801
GL_STENCIL* = 0x00001802 # PixelFormat
GL_COLOR_INDEX* = 0x00001900
GL_STENCIL_INDEX* = 0x00001901
GL_DEPTH_COMPONENT* = 0x00001902
GL_RED* = 0x00001903
GL_GREEN* = 0x00001904
GL_BLUE* = 0x00001905
GL_ALPHA* = 0x00001906
GL_RGB* = 0x00001907
GL_RGBA* = 0x00001908
GL_LUMINANCE* = 0x00001909
GL_LUMINANCE_ALPHA* = 0x0000190A # 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
constGL_BITMAP* = 0x00001A00
GL_POINT* = 0x00001B00
GL_LINE* = 0x00001B01
GL_FILL* = 0x00001B02 # 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* = 0x00001C00
GL_FEEDBACK* = 0x00001C01
GL_SELECT* = 0x00001C02 # ShadingModel
GL_FLAT* = 0x00001D00
GL_SMOOTH* = 0x00001D01 # StencilFunction
# GL_NEVER
# GL_LESS
# GL_EQUAL
# GL_LEQUAL
# GL_GREATER
# GL_NOTEQUAL
# GL_GEQUAL
# GL_ALWAYS
# StencilOp
# GL_ZERO
GL_KEEP* = 0x00001E00
GL_REPLACE* = 0x00001E01
GL_INCR* = 0x00001E02
GL_DECR* = 0x00001E03 # GL_INVERT
# StringName
GL_VENDOR* = 0x00001F00
GL_RENDERER* = 0x00001F01
GL_VERSION* = 0x00001F02
GL_EXTENSIONS* = 0x00001F03 # TextureCoordName
GL_S* = 0x00002000
GL_T* = 0x00002001
GL_R* = 0x00002002
GL_Q* = 0x00002003 # TexCoordPointerType
# GL_SHORT
# GL_INT
# GL_FLOAT
# GL_DOUBLE
# TextureEnvMode
GL_MODULATE* = 0x00002100
GL_DECAL* = 0x00002101 # GL_BLEND
# GL_REPLACE
# TextureEnvParameter
GL_TEXTURE_ENV_MODE* = 0x00002200
GL_TEXTURE_ENV_COLOR* = 0x00002201 # TextureEnvTarget
GL_TEXTURE_ENV* = 0x00002300 # TextureGenMode
GL_EYE_LINEAR* = 0x00002400
GL_OBJECT_LINEAR* = 0x00002401
GL_SPHERE_MAP* = 0x00002402 # TextureGenParameter
GL_TEXTURE_GEN_MODE* = 0x00002500
GL_OBJECT_PLANE* = 0x00002501
GL_EYE_PLANE* = 0x00002502 # TextureMagFilter
GL_NEAREST* = 0x00002600
GL_LINEAR* = 0x00002601 # TextureMinFilter
# GL_NEAREST
# GL_LINEAR
GL_NEAREST_MIPMAP_NEAREST* = 0x00002700
GL_LINEAR_MIPMAP_NEAREST* = 0x00002701
GL_NEAREST_MIPMAP_LINEAR* = 0x00002702
GL_LINEAR_MIPMAP_LINEAR* = 0x00002703 # TextureParameterName
GL_TEXTURE_MAG_FILTER* = 0x00002800
GL_TEXTURE_MIN_FILTER* = 0x00002801
GL_TEXTURE_WRAP_S* = 0x00002802
GL_TEXTURE_WRAP_T* = 0x00002803 # 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* = 0x00002900
GL_REPEAT* = 0x00002901 # VertexPointerType
# GL_SHORT
# GL_INT
# GL_FLOAT
# GL_DOUBLE
# ClientAttribMask
GL_CLIENT_PIXEL_STORE_BIT* = 0x00000001
GL_CLIENT_VERTEX_ARRAY_BIT* = 0x00000002
GL_CLIENT_ALL_ATTRIB_BITS* = 0xFFFFFFFF # polygon_offset
GL_POLYGON_OFFSET_FACTOR* = 0x00008038
GL_POLYGON_OFFSET_UNITS* = 0x00002A00
GL_POLYGON_OFFSET_POINT* = 0x00002A01
GL_POLYGON_OFFSET_LINE* = 0x00002A02
GL_POLYGON_OFFSET_FILL* = 0x00008037 # texture
GL_ALPHA4* = 0x0000803B
GL_ALPHA8* = 0x0000803C
GL_ALPHA12* = 0x0000803D
GL_ALPHA16* = 0x0000803E
GL_LUMINANCE4* = 0x0000803F
GL_LUMINANCE8* = 0x00008040
GL_LUMINANCE12* = 0x00008041
GL_LUMINANCE16* = 0x00008042
GL_LUMINANCE4_ALPHA4* = 0x00008043
GL_LUMINANCE6_ALPHA2* = 0x00008044
GL_LUMINANCE8_ALPHA8* = 0x00008045
GL_LUMINANCE12_ALPHA4* = 0x00008046
GL_LUMINANCE12_ALPHA12* = 0x00008047
GL_LUMINANCE16_ALPHA16* = 0x00008048
GL_INTENSITY* = 0x00008049
GL_INTENSITY4* = 0x0000804A
GL_INTENSITY8* = 0x0000804B
GL_INTENSITY12* = 0x0000804C
GL_INTENSITY16* = 0x0000804D
GL_R3_G3_B2* = 0x00002A10
GL_RGB4* = 0x0000804F
GL_RGB5* = 0x00008050
GL_RGB8* = 0x00008051
GL_RGB10* = 0x00008052
GL_RGB12* = 0x00008053
GL_RGB16* = 0x00008054
GL_RGBA2* = 0x00008055
GL_RGBA4* = 0x00008056
GL_RGB5_A1* = 0x00008057
GL_RGBA8* = 0x00008058
GL_RGB10_A2* = 0x00008059
GL_RGBA12* = 0x0000805A
GL_RGBA16* = 0x0000805B
GL_TEXTURE_RED_SIZE* = 0x0000805C
GL_TEXTURE_GREEN_SIZE* = 0x0000805D
GL_TEXTURE_BLUE_SIZE* = 0x0000805E
GL_TEXTURE_ALPHA_SIZE* = 0x0000805F
GL_TEXTURE_LUMINANCE_SIZE* = 0x00008060
GL_TEXTURE_INTENSITY_SIZE* = 0x00008061
GL_PROXY_TEXTURE_1D* = 0x00008063
GL_PROXY_TEXTURE_2D* = 0x00008064 # texture_object
GL_TEXTURE_PRIORITY* = 0x00008066
GL_TEXTURE_RESIDENT* = 0x00008067
GL_TEXTURE_BINDING_1D* = 0x00008068
GL_TEXTURE_BINDING_2D* = 0x00008069 # vertex_array
GL_VERTEX_ARRAY* = 0x00008074
GL_NORMAL_ARRAY* = 0x00008075
GL_COLOR_ARRAY* = 0x00008076
GL_INDEX_ARRAY* = 0x00008077
GL_TEXTURE_COORD_ARRAY* = 0x00008078
GL_EDGE_FLAG_ARRAY* = 0x00008079
GL_VERTEX_ARRAY_SIZE* = 0x0000807A
GL_VERTEX_ARRAY_TYPE* = 0x0000807B
GL_VERTEX_ARRAY_STRIDE* = 0x0000807C
GL_NORMAL_ARRAY_TYPE* = 0x0000807E
GL_NORMAL_ARRAY_STRIDE* = 0x0000807F
GL_COLOR_ARRAY_SIZE* = 0x00008081
GL_COLOR_ARRAY_TYPE* = 0x00008082
GL_COLOR_ARRAY_STRIDE* = 0x00008083
GL_INDEX_ARRAY_TYPE* = 0x00008085
GL_INDEX_ARRAY_STRIDE* = 0x00008086
GL_TEXTURE_COORD_ARRAY_SIZE* = 0x00008088
GL_TEXTURE_COORD_ARRAY_TYPE* = 0x00008089
GL_TEXTURE_COORD_ARRAY_STRIDE* = 0x0000808A
GL_EDGE_FLAG_ARRAY_STRIDE* = 0x0000808C
GL_VERTEX_ARRAY_POINTER* = 0x0000808E
GL_NORMAL_ARRAY_POINTER* = 0x0000808F
GL_COLOR_ARRAY_POINTER* = 0x00008090
GL_INDEX_ARRAY_POINTER* = 0x00008091
GL_TEXTURE_COORD_ARRAY_POINTER* = 0x00008092
GL_EDGE_FLAG_ARRAY_POINTER* = 0x00008093
GL_V2F* = 0x00002A20
GL_V3F* = 0x00002A21
GL_C4UB_V2F* = 0x00002A22
GL_C4UB_V3F* = 0x00002A23
GL_C3F_V3F* = 0x00002A24
GL_N3F_V3F* = 0x00002A25
GL_C4F_N3F_V3F* = 0x00002A26
GL_T2F_V3F* = 0x00002A27
GL_T4F_V4F* = 0x00002A28
GL_T2F_C4UB_V3F* = 0x00002A29
GL_T2F_C3F_V3F* = 0x00002A2A
GL_T2F_N3F_V3F* = 0x00002A2B
GL_T2F_C4F_N3F_V3F* = 0x00002A2C
GL_T4F_C4F_N3F_V4F* = 0x00002A2D # Extensions
GL_EXT_vertex_array* = 1
GL_WIN_swap_hint* = 1
GL_EXT_bgra* = 1
GL_EXT_paletted_texture* = 1 # EXT_vertex_array
GL_VERTEX_ARRAY_EXT* = 0x00008074
GL_NORMAL_ARRAY_EXT* = 0x00008075
GL_COLOR_ARRAY_EXT* = 0x00008076
GL_INDEX_ARRAY_EXT* = 0x00008077
GL_TEXTURE_COORD_ARRAY_EXT* = 0x00008078
GL_EDGE_FLAG_ARRAY_EXT* = 0x00008079
GL_VERTEX_ARRAY_SIZE_EXT* = 0x0000807A
GL_VERTEX_ARRAY_TYPE_EXT* = 0x0000807B
GL_VERTEX_ARRAY_STRIDE_EXT* = 0x0000807C
GL_VERTEX_ARRAY_COUNT_EXT* = 0x0000807D
GL_NORMAL_ARRAY_TYPE_EXT* = 0x0000807E
GL_NORMAL_ARRAY_STRIDE_EXT* = 0x0000807F
GL_NORMAL_ARRAY_COUNT_EXT* = 0x00008080
GL_COLOR_ARRAY_SIZE_EXT* = 0x00008081
GL_COLOR_ARRAY_TYPE_EXT* = 0x00008082
GL_COLOR_ARRAY_STRIDE_EXT* = 0x00008083
GL_COLOR_ARRAY_COUNT_EXT* = 0x00008084
GL_INDEX_ARRAY_TYPE_EXT* = 0x00008085
GL_INDEX_ARRAY_STRIDE_EXT* = 0x00008086
GL_INDEX_ARRAY_COUNT_EXT* = 0x00008087
GL_TEXTURE_COORD_ARRAY_SIZE_EXT* = 0x00008088
GL_TEXTURE_COORD_ARRAY_TYPE_EXT* = 0x00008089
GL_TEXTURE_COORD_ARRAY_STRIDE_EXT* = 0x0000808A
GL_TEXTURE_COORD_ARRAY_COUNT_EXT* = 0x0000808B
GL_EDGE_FLAG_ARRAY_STRIDE_EXT* = 0x0000808C
GL_EDGE_FLAG_ARRAY_COUNT_EXT* = 0x0000808D
GL_VERTEX_ARRAY_POINTER_EXT* = 0x0000808E
GL_NORMAL_ARRAY_POINTER_EXT* = 0x0000808F
GL_COLOR_ARRAY_POINTER_EXT* = 0x00008090
GL_INDEX_ARRAY_POINTER_EXT* = 0x00008091
GL_TEXTURE_COORD_ARRAY_POINTER_EXT* = 0x00008092
GL_EDGE_FLAG_ARRAY_POINTER_EXT* = 0x00008093
GL_DOUBLE_EXT* = GL_DOUBLE # EXT_bgra
GL_BGR_EXT* = 0x000080E0
GL_BGRA_EXT* = 0x000080E1 # EXT_paletted_texture
# These must match the GL_COLOR_TABLE_*_SGI enumerants
GL_COLOR_TABLE_FORMAT_EXT* = 0x000080D8
GL_COLOR_TABLE_WIDTH_EXT* = 0x000080D9
GL_COLOR_TABLE_RED_SIZE_EXT* = 0x000080DA
GL_COLOR_TABLE_GREEN_SIZE_EXT* = 0x000080DB
GL_COLOR_TABLE_BLUE_SIZE_EXT* = 0x000080DC
GL_COLOR_TABLE_ALPHA_SIZE_EXT* = 0x000080DD
GL_COLOR_TABLE_LUMINANCE_SIZE_EXT* = 0x000080DE
GL_COLOR_TABLE_INTENSITY_SIZE_EXT* = 0x000080DF
GL_COLOR_INDEX1_EXT* = 0x000080E2
GL_COLOR_INDEX2_EXT* = 0x000080E3
GL_COLOR_INDEX4_EXT* = 0x000080E4
GL_COLOR_INDEX8_EXT* = 0x000080E5
GL_COLOR_INDEX12_EXT* = 0x000080E6
GL_COLOR_INDEX16_EXT* = 0x000080E7 # For compatibility with OpenGL v1.0
constGL_LOGIC_OP* = GL_INDEX_LOGIC_OP
GL_TEXTURE_COMPONENTS* = GL_TEXTURE_INTERNAL_FORMAT
proc glAccum*(op: TGLenum, value: TGLfloat){.dynlib: dllname, importc.}
proc glAlphaFunc*(func: TGLenum, theref: TGLclampf){.dynlib: dllname, importc.}
proc glAreTexturesResident*(n: TGLsizei, textures: PGLuint,
residences: PGLboolean): TGLboolean{.dynlib: dllname,
importc.}
proc glArrayElement*(i: TGLint){.dynlib: dllname, importc.}
proc glBegin*(mode: TGLenum){.dynlib: dllname, importc.}
proc glBindTexture*(target: TGLenum, texture: TGLuint){.dynlib: dllname, importc.}
proc glBitmap*(width, height: TGLsizei, xorig, yorig: TGLfloat,
xmove, ymove: TGLfloat, bitmap: PGLubyte){.dynlib: dllname,
importc.}
proc glBlendFunc*(sfactor, dfactor: TGLenum){.dynlib: dllname, importc.}
proc glCallList*(list: TGLuint){.dynlib: dllname, importc.}
proc glCallLists*(n: TGLsizei, atype: TGLenum, lists: Pointer){.dynlib: dllname,
importc.}
proc glClear*(mask: TGLbitfield){.dynlib: dllname, importc.}
proc glClearAccum*(red, green, blue, alpha: TGLfloat){.dynlib: dllname, importc.}
proc glClearColor*(red, green, blue, alpha: TGLclampf){.dynlib: dllname, importc.}
proc glClearDepth*(depth: TGLclampd){.dynlib: dllname, importc.}
proc glClearIndex*(c: TGLfloat){.dynlib: dllname, importc.}
proc glClearStencil*(s: TGLint){.dynlib: dllname, importc.}
proc glClipPlane*(plane: TGLenum, equation: PGLdouble){.dynlib: dllname, importc.}
proc glColor3b*(red, green, blue: TGlbyte){.dynlib: dllname, importc.}
proc glColor3bv*(v: PGLbyte){.dynlib: dllname, importc.}
proc glColor3d*(red, green, blue: TGLdouble){.dynlib: dllname, importc.}
proc glColor3dv*(v: PGLdouble){.dynlib: dllname, importc.}
proc glColor3f*(red, green, blue: TGLfloat){.dynlib: dllname, importc.}
proc glColor3fv*(v: PGLfloat){.dynlib: dllname, importc.}
proc glColor3i*(red, green, blue: TGLint){.dynlib: dllname, importc.}
proc glColor3iv*(v: PGLint){.dynlib: dllname, importc.}
proc glColor3s*(red, green, blue: TGLshort){.dynlib: dllname, importc.}
proc glColor3sv*(v: PGLshort){.dynlib: dllname, importc.}
proc glColor3ub*(red, green, blue: TGLubyte){.dynlib: dllname, importc.}
proc glColor3ubv*(v: PGLubyte){.dynlib: dllname, importc.}
proc glColor3ui*(red, green, blue: TGLuint){.dynlib: dllname, importc.}
proc glColor3uiv*(v: PGLuint){.dynlib: dllname, importc.}
proc glColor3us*(red, green, blue: TGLushort){.dynlib: dllname, importc.}
proc glColor3usv*(v: PGLushort){.dynlib: dllname, importc.}
proc glColor4b*(red, green, blue, alpha: TGlbyte){.dynlib: dllname, importc.}
proc glColor4bv*(v: PGLbyte){.dynlib: dllname, importc.}
proc glColor4d*(red, green, blue, alpha: TGLdouble){.dynlib: dllname, importc.}
proc glColor4dv*(v: PGLdouble){.dynlib: dllname, importc.}
proc glColor4f*(red, green, blue, alpha: TGLfloat){.dynlib: dllname, importc.}
proc glColor4fv*(v: PGLfloat){.dynlib: dllname, importc.}
proc glColor4i*(red, green, blue, alpha: TGLint){.dynlib: dllname, importc.}
proc glColor4iv*(v: PGLint){.dynlib: dllname, importc.}
proc glColor4s*(red, green, blue, alpha: TGLshort){.dynlib: dllname, importc.}
proc glColor4sv*(v: PGLshort){.dynlib: dllname, importc.}
proc glColor4ub*(red, green, blue, alpha: TGLubyte){.dynlib: dllname, importc.}
proc glColor4ubv*(v: PGLubyte){.dynlib: dllname, importc.}
proc glColor4ui*(red, green, blue, alpha: TGLuint){.dynlib: dllname, importc.}
proc glColor4uiv*(v: PGLuint){.dynlib: dllname, importc.}
proc glColor4us*(red, green, blue, alpha: TGLushort){.dynlib: dllname, importc.}
proc glColor4usv*(v: PGLushort){.dynlib: dllname, importc.}
proc glColorMask*(red, green, blue, alpha: TGLboolean){.dynlib: dllname, importc.}
proc glColorMaterial*(face, mode: TGLenum){.dynlib: dllname, importc.}
proc glColorPointer*(size: TGLint, atype: TGLenum, stride: TGLsizei,
pointer: Pointer){.dynlib: dllname, importc.}
proc glCopyPixels*(x, y: TGLint, width, height: TGLsizei, atype: TGLenum){.
dynlib: dllname, importc.}
proc glCopyTexImage1D*(target: TGLenum, level: TGLint, internalFormat: TGLenum,
x, y: , newTree(nkHiddenAddr, dest))
proc genCopy(t: PType; dest: PNode): PNode =
let t = t.skipTypes({tyGenericInst, tyAlias})
assert t.assignment != nil
patchHead t.assignment.ast[bodyPos]
result = newTree(nkCall, newSymNode(t.assignment), newTree(nkHiddenAddr, dest))
proc genDestroy(t: PType; dest: PNode): PNode =
let t = t.skipTypes({tyGenericInst, tyAlias})
assert t.destructor != nil
patchHead t.destructor.ast[bodyPos]
result = newTree(nkCall, newSymNode(t.destructor), newTree(nkHiddenAddr, dest))
proc addTopVar(c: var Con; v: PNode) =
c.topLevelVars.add newTree(nkIdentDefs, v, emptyNode, emptyNode)
proc p(n: PNode; c: var Con): PNode
template recurse(n, dest) =
for i in 0..<n.len:
dest.add p(n[i], c)
proc moveOrCopy(dest, ri: PNode; c: var Con): PNode =
if ri.kind in nkCallKinds:
result = genSink(ri.typ, dest)
# watch out and no not transform 'ri' twice if it's a call:
let ri2 = copyNode(ri)
recurse(ri, ri2)
result.add ri2
elif ri.kind == nkSym and isHarmlessVar(ri.sym, c):
result = genSink(ri.typ, dest)
result.add p(ri, c)
else:
result = genCopy(ri.typ, dest)
result.add p(ri, c)
proc p(n: PNode; c: var Con): PNode =
case n.kind
of nkVarSection, nkLetSection:
discard "transform; var x = y to var x; x op y where op is a move or copy"
result = newNodeI(nkStmtList, n.info)
for i in 0..<n.len:
let it = n[i]
let L = it.len-1
let ri = it[L]
if it.kind == nkVarTuple and hasDestructor(ri.typ):
let x = lowerTupleUnpacking(it, c.owner)
result.add p(x, c)
elif it.kind == nkIdentDefs and hasDestructor(it[0].typ):
for j in 0..L-2:
let v = it[j]
doAssert v.kind == nkSym
# move the variable declaration to the top of the frame:
c.addTopVar v
# make sure it's destroyed at the end of the proc:
c.destroys.add genDestroy(v.typ, v)
if ri.kind != nkEmpty:
let r = moveOrCopy(v, ri, c)
result.add r
else:
# keep it, but transform 'ri':
var varSection = copyNode(n)
var itCopy = copyNode(it)
for j in 0..L-1:
itCopy.add it[j]
itCopy.add p(ri, c)
varSection.add itCopy
result.add varSection
of nkCallKinds:
if n.typ != nil and hasDestructor(n.typ):
discard "produce temp creation"
result = newNodeIT(nkStmtListExpr, n.info, n.typ)
let f = newSym(skField, getIdent(":d" & $c.tmpObj.n.len), c.owner, n.info)
f.typ = n.typ
rawAddField c.tmpObj, f
var m = genSink(n.typ, rawDirectAccess(c.tmp, f))
var call = copyNode(n)
recurse(n, call)
m.add call
result.add m
result