home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue69 / OpenGL / OpenGL12.pas < prev   
Encoding:
Pascal/Delphi Source File  |  2000-12-30  |  169.8 KB  |  3,445 lines

  1. unit OpenGL12;
  2.  
  3. //----------------------------------------------------------------------------------------------------------------------
  4. //
  5. //  This is an interface unit for the use of OpenGL from within Delphi and contains
  6. //  the translations of gl.h, glu.h as well as some support functions.
  7. //  OpenGL12.pas contains bug fixes and enhancements of Delphi's and other translations
  8. //  as well as support for extensions.
  9. //
  10. //----------------------------------------------------------------------------------------------------------------------
  11. //
  12. // function InitOpenGL: Boolean;
  13. //   Needed to load the OpenGL DLLs and all addresses of the standard functions.
  14. //   In case OpenGL is already initialized this function does nothing. No error
  15. //   is raised, if something goes wrong, but you need to inspect the result in order
  16. //   to know if all went okay.
  17. //   RESULT: True if successful or already loaded, False otherwise
  18. //
  19. // function InitOpenGLFromLibrary(GL_Name, GLU_Name: String): Boolean;
  20. //   Same as InitOpenGL, but you can specify specific DLLs. Useful if you want to
  21. //   use different DLLs then those of Windows. This function closes eventually
  22. //   loaded DLLs before it tries to open the newly given.
  23. //   RESULT: True if successful, false otherwise
  24. //
  25. // procedure CloseOpenGL;
  26. //   Unloads the OpenGL DLLs and sets all function addresses to nil, including
  27. //   extensions. You can load and unload the DLLs as often as you like.
  28. //
  29. // procedure ClearExtensions;
  30. //   Sets all extension routines to nil. This is needed when you change the Pixelformat
  31. //   of your OpenGL window, since the availability of these routines changes from
  32. //   PixelFormat to Pixelformat (and also between various vendors).
  33. //
  34. // function  CreateRenderingContext(DC: HDC; Options: TRCOptions; ColorBits, StencilBits, AccumBits, AuxBuffers: Integer;
  35. //   Layer: Integer): HGLRC;
  36. //   Sets up a pixel format and creates a new rendering context depending of the
  37. //   given parameters:
  38. //     DC          - the device context for which the rc is to be created
  39. //     Options     - options for the context, which the application would like to have
  40. //                   (it is not guaranteed they will be available)
  41. //     ColorBits   - the color depth of the device context (Note: Because of the internal DC handling of the VCL you
  42. //                   should avoid using GetDeviceCaps for memory DCs which are members of a TBitmap class.
  43. //                   Translate the Pixelformat member instead!)
  44. //     StencilBits - wished size of the stencil buffer
  45. //     AccumBits   - wished size of the accumulation buffer
  46. //     AuxBuffers  - wished number of auxiliary buffers
  47. //     Layer       - ID for the layer for which the RC will be created (-1..-15 for underlays, 0 for main plane,
  48. //                   1..15 for overlay planes)
  49. //                   Note: The layer handling is not yet complete as there is very few information
  50. //                   available and (until now) no OpenGL implementation with layer support on the low budget market.
  51. //                   Hence use 0 (for the main plane) as layer ID.
  52. //   RESULT: the newly created context or 0 if setup failed
  53. //
  54. // procedure ActivateRenderingContext(DC: HDC; RC: HGLRC);
  55. //   Makes RC in DC 'current' (wglMakeCurrent(..)) and loads all extension addresses
  56. //   and flags if necessary.
  57. //
  58. // procedure DeactivateRenderingContext;
  59. //   Counterpart to ActivateRenderingContext.
  60. //
  61. // procedure DestroyRenderingContext(RC: HGLRC);
  62. //   RC will be destroyed and must be recreated if you want to use it again. No
  63. //   additional functionality to wglDeleteContext yet.
  64. //
  65. // procedure ReadExtensions;
  66. //   Determines which extensions for the current rendering context are available and
  67. //   loads their addresses. This procedure is called from ActivateRenderingContext
  68. //   if a new pixel format is used, but you can safely call it from where you want
  69. //   to actualize those values (under the condition that a rendering context MUST be
  70. //   active).
  71. //
  72. // procedure ReadImplementationProperties;
  73. //   Determines other properties of the OpenGL DLL (version, availability of extensions).
  74. //   Again, a valid rendering context must be active.
  75. //
  76. //----------------------------------------------------------------------------------------------------------------------
  77. //
  78. // This translation is based on different sources:
  79. //
  80. // - first translation from Artemis Alliance Inc.
  81. // - previous versions from Mike Lischke
  82. // - Alexander Staubo
  83. // - Borland OpenGL.pas (from Delphi 3)
  84. // - Microsoft and SGI OpenGL header files
  85. // - www.opengl.org, www.sgi.com/OpenGL
  86. // - NVidia extension reference as of December 1999
  87. //
  88. //  Contact: public@lischke-online.de
  89. //
  90. //  last change: 04. January 2000
  91. //
  92. //----------------------------------------------------------------------------------------------------------------------
  93.  
  94.  
  95. { ------ Original copyright notice by SGI -----
  96.  
  97.  Copyright 1996 Silicon Graphics, Inc.
  98.  All Rights Reserved.
  99.  
  100.  This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  101.  the contents of this file may not be disclosed to third parties, copied or
  102.  duplicated in any form, in whole or in part, without the prior written
  103.  permission of Silicon Graphics, Inc.
  104.  
  105.  RESTRICTED RIGHTS LEGEND:
  106.  Use, duplication or disclosure by the Government is subject to restrictions
  107.  as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  108.  and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  109.  successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  110.  rights reserved under the Copyright Laws of the United States.}
  111.  
  112.  
  113. interface
  114.  
  115. uses
  116.   Windows, Geometry;
  117.  
  118. type
  119.   TRCOptions = set of (opDoubleBuffered, opGDI, opStereo);
  120.  
  121.   TGLenum      = UINT;      PGLenum     = ^TGLenum;
  122.   TGLboolean   = UCHAR;     PGLboolean  = ^TGLboolean;
  123.   TGLbitfield  = UINT;      PGLbitfield = ^TGLbitfield;
  124.   TGLbyte      = ShortInt;  PGLbyte     = ^TGLbyte;
  125.   TGLshort     = SHORT;     PGLshort    = ^TGLshort;
  126.   TGLint       = Integer;   PGLint      = ^TGLint;
  127.   TGLsizei     = Integer;   PGLsizei    = ^TGLsizei;
  128.   TGLubyte     = UCHAR;     PGLubyte    = ^TGLubyte;
  129.   TGLushort    = Word;      PGLushort   = ^TGLushort;
  130.   TGLuint      = UINT;      PGLuint     = ^TGLuint;
  131.   TGLfloat     = Single;    PGLfloat    = ^TGLfloat;
  132.   TGLclampf    = Single;    PGLclampf   = ^TGLclampf;
  133.   TGLdouble    = Double;    PGLdouble   = ^TGLdouble;
  134.   TGLclampd    = Double;    PGLclampd   = ^TGLclampd;
  135.  
  136. var
  137.   GL_VERSION_1_0,
  138.   GL_VERSION_1_1,
  139.   GL_VERSION_1_2,
  140.   GLU_VERSION_1_1,
  141.   GLU_VERSION_1_2,
  142.   GLU_VERSION_1_3: Boolean;
  143.  
  144.   // Extensions (gl)
  145.   GL_EXT_abgr,
  146.   GL_EXT_bgra,
  147.   GL_EXT_packed_pixels,
  148.   GL_EXT_paletted_texture,
  149.   GL_EXT_vertex_array,
  150.   GL_EXT_index_array_formats,
  151.   GL_EXT_index_func,
  152.   GL_EXT_index_material,
  153.   GL_EXT_index_texture,
  154.   GL_WIN_swap_hint,
  155.   GL_EXT_blend_color,
  156.   GL_EXT_blend_logic_op,
  157.   GL_EXT_blend_minmax,
  158.   GL_EXT_blend_subtract,
  159.   GL_EXT_convolution,
  160.   GL_EXT_copy_texture,
  161.   GL_EXT_histogram,
  162.   GL_EXT_polygon_offset,
  163.   GL_EXT_subtexture,
  164.   GL_EXT_texture_object,
  165.   GL_EXT_texture3D,
  166.   GL_EXT_cmyka,
  167.   GL_EXT_rescale_normal,
  168.   GL_SGI_color_matrix,
  169.   GL_EXT_texture_color_table,
  170.   GL_SGI_color_table,
  171.   GL_EXT_clip_volume_hint,
  172.   GL_EXT_compiled_vertex_array,
  173.   GL_EXT_cull_vertex,
  174.   GL_EXT_point_parameters,
  175.   GL_EXT_texture_env_add,
  176.   GL_EXT_misc_attribute,
  177.   GL_EXT_scene_marker,
  178.   GL_EXT_shared_texture_palette,
  179.   GL_EXT_texture_edge_clamp, 
  180.   GL_EXT_texture_env_combine,
  181.   GL_NV_texgen_reflection,
  182.   GL_NV_texture_env_combine4,
  183.   GL_ARB_multitexture,
  184.   GL_ARB_imaging,
  185.  
  186.   GL_EXT_fog_coord,
  187.   GL_EXT_light_max_exponent,
  188.   GL_EXT_secondary_color,
  189.   GL_EXT_separate_specular_color,
  190.   GL_EXT_stencil_wrap,
  191.   GL_EXT_texture_cube_map,
  192.   GL_EXT_texture_filter_anisotropic,
  193.   GL_EXT_texture_lod_bias,
  194.   GL_EXT_vertex_weighting,
  195.   GL_KTX_buffer_region,
  196.   GL_NV_blend_square,
  197.   GL_NV_fog_distance,
  198.   GL_NV_register_combiners,
  199.   GL_NV_texgen_emboss,
  200.   GL_NV_vertex_array_range,
  201.   GL_SGIS_multitexture,
  202.   GL_SGIS_texture_lod,
  203.   WGL_EXT_swap_control,
  204.   
  205.   // Extensions (glu)
  206.   GLU_EXT_Texture, 
  207.   GLU_EXT_object_space_tess, 
  208.   GLU_EXT_nurbs_tessellator: Boolean;
  209.  
  210. const
  211.   // ********** GL generic constants **********
  212.  
  213.   // errors
  214.   GL_NO_ERROR                                = 0;
  215.   GL_INVALID_ENUM                            = $0500;
  216.   GL_INVALID_VALUE                           = $0501;
  217.   GL_INVALID_OPERATION                       = $0502;
  218.   GL_STACK_OVERFLOW                          = $0503;
  219.   GL_STACK_UNDERFLOW                         = $0504;
  220.   GL_OUT_OF_MEMORY                           = $0505;
  221.  
  222.   // attribute bits
  223.   GL_CURRENT_BIT                             = $00000001;
  224.   GL_POINT_BIT                               = $00000002;
  225.   GL_LINE_BIT                                = $00000004;
  226.   GL_POLYGON_BIT                             = $00000008;
  227.   GL_POLYGON_STIPPLE_BIT                     = $00000010;
  228.   GL_PIXEL_MODE_BIT                          = $00000020;
  229.   GL_LIGHTING_BIT                            = $00000040;
  230.   GL_FOG_BIT                                 = $00000080;
  231.   GL_DEPTH_BUFFER_BIT                        = $00000100;
  232.   GL_ACCUM_BUFFER_BIT                        = $00000200;
  233.   GL_STENCIL_BUFFER_BIT                      = $00000400;
  234.   GL_VIEWPORT_BIT                            = $00000800;
  235.   GL_TRANSFORM_BIT                           = $00001000;
  236.   GL_ENABLE_BIT                              = $00002000;
  237.   GL_COLOR_BUFFER_BIT                        = $00004000;
  238.   GL_HINT_BIT                                = $00008000;
  239.   GL_EVAL_BIT                                = $00010000;
  240.   GL_LIST_BIT                                = $00020000;
  241.   GL_TEXTURE_BIT                             = $00040000;
  242.   GL_SCISSOR_BIT                             = $00080000;
  243.   GL_ALL_ATTRIB_BITS                         = $000FFFFF;
  244.  
  245.   // client attribute bits
  246.   GL_CLIENT_PIXEL_STORE_BIT                  = $00000001;
  247.   GL_CLIENT_VERTEX_ARRAY_BIT                 = $00000002;
  248.   GL_CLIENT_ALL_ATTRIB_BITS                  = $FFFFFFFF;
  249.  
  250.   // boolean values
  251.   GL_FALSE                                   = 0;
  252.   GL_TRUE                                    = 1;
  253.  
  254.   // primitives
  255.   GL_POINTS                                  = $0000;
  256.   GL_LINES                                   = $0001;
  257.   GL_LINE_LOOP                               = $0002;
  258.   GL_LINE_STRIP                              = $0003;
  259.   GL_TRIANGLES                               = $0004;
  260.   GL_TRIANGLE_STRIP                          = $0005;
  261.   GL_TRIANGLE_FAN                            = $0006;
  262.   GL_QUADS                                   = $0007;
  263.   GL_QUAD_STRIP                              = $0008;
  264.   GL_POLYGON                                 = $0009;
  265.  
  266.   // blending 
  267.   GL_ZERO                                    = 0;
  268.   GL_ONE                                     = 1;
  269.   GL_SRC_COLOR                               = $0300;
  270.   GL_ONE_MINUS_SRC_COLOR                     = $0301;
  271.   GL_SRC_ALPHA                               = $0302;
  272.   GL_ONE_MINUS_SRC_ALPHA                     = $0303;
  273.   GL_DST_ALPHA                               = $0304;
  274.   GL_ONE_MINUS_DST_ALPHA                     = $0305;
  275.   GL_DST_COLOR                               = $0306;
  276.   GL_ONE_MINUS_DST_COLOR                     = $0307;
  277.   GL_SRC_ALPHA_SATURATE                      = $0308;
  278.   GL_BLEND_DST                               = $0BE0;
  279.   GL_BLEND_SRC                               = $0BE1;
  280.   GL_BLEND                                   = $0BE2;
  281.  
  282.   // blending (GL 1.2 ARB imaging)
  283.   GL_BLEND_COLOR                             = $8005;
  284.   GL_CONSTANT_COLOR                          = $8001;
  285.   GL_ONE_MINUS_CONSTANT_COLOR                = $8002;
  286.   GL_CONSTANT_ALPHA                          = $8003;
  287.   GL_ONE_MINUS_CONSTANT_ALPHA                = $8004;
  288.   GL_FUNC_ADD                                = $8006;
  289.   GL_MIN                                     = $8007;
  290.   GL_MAX                                     = $8008;
  291.   GL_FUNC_SUBTRACT                           = $800A;
  292.   GL_FUNC_REVERSE_SUBTRACT                   = $800B;
  293.  
  294.   // color table GL 1.2 ARB imaging
  295.   GL_COLOR_TABLE                             = $80D0;
  296.   GL_POST_CONVOLUTION_COLOR_TABLE            = $80D1;
  297.   GL_POST_COLOR_MATRIX_COLOR_TABLE           = $80D2;
  298.   GL_PROXY_COLOR_TABLE                       = $80D3;
  299.   GL_PROXY_POST_CONVOLUTION_COLOR_TABLE      = $80D4;
  300.   GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE     = $80D5;
  301.   GL_COLOR_TABLE_SCALE                       = $80D6;
  302.   GL_COLOR_TABLE_BIAS                        = $80D7;
  303.   GL_COLOR_TABLE_FORMAT                      = $80D8;
  304.   GL_COLOR_TABLE_WIDTH                       = $80D9;
  305.   GL_COLOR_TABLE_RED_SIZE                    = $80DA;
  306.   GL_COLOR_TABLE_GREEN_SIZE                  = $80DB;
  307.   GL_COLOR_TABLE_BLUE_SIZE                   = $80DC;
  308.   GL_COLOR_TABLE_ALPHA_SIZE                  = $80DD;
  309.   GL_COLOR_TABLE_LUMINANCE_SIZE              = $80DE;
  310.   GL_COLOR_TABLE_INTENSITY_SIZE              = $80DF;
  311.  
  312.   // convolutions GL 1.2 ARB imaging
  313.   GL_CONVOLUTION_1D                          = $8010;
  314.   GL_CONVOLUTION_2D                          = $8011;
  315.   GL_SEPARABLE_2D                            = $8012;
  316.   GL_CONVOLUTION_BORDER_MODE                 = $8013;
  317.   GL_CONVOLUTION_FILTER_SCALE                = $8014;
  318.   GL_CONVOLUTION_FILTER_BIAS                 = $8015;
  319.   GL_REDUCE                                  = $8016;
  320.   GL_CONVOLUTION_FORMAT                      = $8017;
  321.   GL_CONVOLUTION_WIDTH                       = $8018;
  322.   GL_CONVOLUTION_HEIGHT                      = $8019;
  323.   GL_MAX_CONVOLUTION_WIDTH                   = $801A;
  324.   GL_MAX_CONVOLUTION_HEIGHT                  = $801B;
  325.   GL_POST_CONVOLUTION_RED_SCALE              = $801C;
  326.   GL_POST_CONVOLUTION_GREEN_SCALE            = $801D;
  327.   GL_POST_CONVOLUTION_BLUE_SCALE             = $801E;
  328.   GL_POST_CONVOLUTION_ALPHA_SCALE            = $801F;
  329.   GL_POST_CONVOLUTION_RED_BIAS               = $8020;
  330.   GL_POST_CONVOLUTION_GREEN_BIAS             = $8021;
  331.   GL_POST_CONVOLUTION_BLUE_BIAS              = $8022;
  332.   GL_POST_CONVOLUTION_ALPHA_BIAS             = $8023;
  333.  
  334.   // histogram GL 1.2 ARB imaging
  335.   GL_HISTOGRAM                               = $8024;
  336.   GL_PROXY_HISTOGRAM                         = $8025;
  337.   GL_HISTOGRAM_WIDTH                         = $8026;
  338.   GL_HISTOGRAM_FORMAT                        = $8027;
  339.   GL_HISTOGRAM_RED_SIZE                      = $8028;
  340.   GL_HISTOGRAM_GREEN_SIZE                    = $8029;
  341.   GL_HISTOGRAM_BLUE_SIZE                     = $802A;
  342.   GL_HISTOGRAM_ALPHA_SIZE                    = $802B;
  343.   GL_HISTOGRAM_LUMINANCE_SIZE                = $802C;
  344.   GL_HISTOGRAM_SINK                          = $802D;
  345.   GL_MINMAX                                  = $802E;
  346.   GL_MINMAX_FORMAT                           = $802F;
  347.   GL_MINMAX_SINK                             = $8030;
  348.  
  349.   // buffers
  350.   GL_NONE                                    = 0;
  351.   GL_FRONT_LEFT                              = $0400;
  352.   GL_FRONT_RIGHT                             = $0401;
  353.   GL_BACK_LEFT                               = $0402;
  354.   GL_BACK_RIGHT                              = $0403;
  355.   GL_FRONT                                   = $0404;
  356.   GL_BACK                                    = $0405;
  357.   GL_LEFT                                    = $0406;
  358.   GL_RIGHT                                   = $0407;
  359.   GL_FRONT_AND_BACK                          = $0408;
  360.   GL_AUX0                                    = $0409;
  361.   GL_AUX1                                    = $040A;
  362.   GL_AUX2                                    = $040B;
  363.   GL_AUX3                                    = $040C;
  364.   GL_AUX_BUFFERS                             = $0C00;
  365.   GL_DRAW_BUFFER                             = $0C01;
  366.   GL_READ_BUFFER                             = $0C02;
  367.   GL_DOUBLEBUFFER                            = $0C32;
  368.   GL_STEREO                                  = $0C33;
  369.  
  370.   // depth buffer
  371.   GL_DEPTH_RANGE                             = $0B70;
  372.   GL_DEPTH_TEST                              = $0B71;
  373.   GL_DEPTH_WRITEMASK                         = $0B72;
  374.   GL_DEPTH_CLEAR_VALUE                       = $0B73;
  375.   GL_DEPTH_FUNC                              = $0B74;
  376.   GL_NEVER                                   = $0200;
  377.   GL_LESS                                    = $0201;
  378.   GL_EQUAL                                   = $0202;
  379.   GL_LEQUAL                                  = $0203;
  380.   GL_GREATER                                 = $0204;
  381.   GL_NOTEQUAL                                = $0205;
  382.   GL_GEQUAL                                  = $0206;
  383.   GL_ALWAYS                                  = $0207;
  384.  
  385.   // accumulation buffer
  386.   GL_ACCUM                                   = $0100;
  387.   GL_LOAD                                    = $0101;
  388.   GL_RETURN                                  = $0102;
  389.   GL_MULT                                    = $0103;
  390.   GL_ADD                                     = $0104;
  391.   GL_ACCUM_CLEAR_VALUE                       = $0B80;
  392.  
  393.   // feedback buffer
  394.   GL_FEEDBACK_BUFFER_POINTER                 = $0DF0;
  395.   GL_FEEDBACK_BUFFER_SIZE                    = $0DF1;
  396.   GL_FEEDBACK_BUFFER_TYPE                    = $0DF2;
  397.  
  398.   // feedback types
  399.   GL_2D                                      = $0600;
  400.   GL_3D                                      = $0601;
  401.   GL_3D_COLOR                                = $0602;
  402.   GL_3D_COLOR_TEXTURE                        = $0603;
  403.   GL_4D_COLOR_TEXTURE                        = $0604;
  404.  
  405.   // feedback tokens
  406.   GL_PASS_THROUGH_TOKEN                      = $0700;
  407.   GL_POINT_TOKEN                             = $0701;
  408.   GL_LINE_TOKEN                              = $0702;
  409.   GL_POLYGON_TOKEN                           = $0703;
  410.   GL_BITMAP_TOKEN                            = $0704;
  411.   GL_DRAW_PIXEL_TOKEN                        = $0705;
  412.   GL_COPY_PIXEL_TOKEN                        = $0706;
  413.   GL_LINE_RESET_TOKEN                        = $0707;
  414.  
  415.   // fog
  416.   GL_EXP                                     = $0800;
  417.   GL_EXP2                                    = $0801;
  418.   GL_FOG                                     = $0B60;
  419.   GL_FOG_INDEX                               = $0B61;
  420.   GL_FOG_DENSITY                             = $0B62;
  421.   GL_FOG_START                               = $0B63;
  422.   GL_FOG_END                                 = $0B64;
  423.   GL_FOG_MODE                                = $0B65;
  424.   GL_FOG_COLOR                               = $0B66;
  425.  
  426.   // pixel mode, transfer
  427.   GL_PIXEL_MAP_I_TO_I                        = $0C70;
  428.   GL_PIXEL_MAP_S_TO_S                        = $0C71;
  429.   GL_PIXEL_MAP_I_TO_R                        = $0C72;
  430.   GL_PIXEL_MAP_I_TO_G                        = $0C73;
  431.   GL_PIXEL_MAP_I_TO_B                        = $0C74;
  432.   GL_PIXEL_MAP_I_TO_A                        = $0C75;
  433.   GL_PIXEL_MAP_R_TO_R                        = $0C76;
  434.   GL_PIXEL_MAP_G_TO_G                        = $0C77;
  435.   GL_PIXEL_MAP_B_TO_B                        = $0C78;
  436.   GL_PIXEL_MAP_A_TO_A                        = $0C79;
  437.  
  438.   // vertex arrays
  439.   GL_VERTEX_ARRAY_POINTER                    = $808E;
  440.   GL_NORMAL_ARRAY_POINTER                    = $808F;
  441.   GL_COLOR_ARRAY_POINTER                     = $8090;
  442.   GL_INDEX_ARRAY_POINTER                     = $8091;
  443.   GL_TEXTURE_COORD_ARRAY_POINTER             = $8092;
  444.   GL_EDGE_FLAG_ARRAY_POINTER                 = $8093;
  445.  
  446.   // stenciling
  447.   GL_STENCIL_TEST                            = $0B90;
  448.   GL_STENCIL_CLEAR_VALUE                     = $0B91;
  449.   GL_STENCIL_FUNC                            = $0B92;
  450.   GL_STENCIL_VALUE_MASK                      = $0B93;
  451.   GL_STENCIL_FAIL                            = $0B94;
  452.   GL_STENCIL_PASS_DEPTH_FAIL                 = $0B95;
  453.   GL_STENCIL_PASS_DEPTH_PASS                 = $0B96;
  454.   GL_STENCIL_REF                             = $0B97;
  455.   GL_STENCIL_WRITEMASK                       = $0B98;
  456.   GL_KEEP                                    = $1E00;
  457.   GL_REPLACE                                 = $1E01;
  458.   GL_INCR                                    = $1E02;
  459.   GL_DECR                                    = $1E03;
  460.  
  461.   // color material
  462.   GL_COLOR_MATERIAL_FACE                     = $0B55;
  463.   GL_COLOR_MATERIAL_PARAMETER                = $0B56;
  464.   GL_COLOR_MATERIAL                          = $0B57;
  465.  
  466.   // points
  467.   GL_POINT_SMOOTH                            = $0B10;
  468.   GL_POINT_SIZE                              = $0B11;
  469.   GL_POINT_SIZE_RANGE                        = $0B12;
  470.   GL_POINT_SIZE_GRANULARITY                  = $0B13;
  471.  
  472.   // lines
  473.   GL_LINE_SMOOTH                             = $0B20;
  474.   GL_LINE_WIDTH                              = $0B21;
  475.   GL_LINE_WIDTH_RANGE                        = $0B22;
  476.   GL_LINE_WIDTH_GRANULARITY                  = $0B23;
  477.   GL_LINE_STIPPLE                            = $0B24;
  478.   GL_LINE_STIPPLE_PATTERN                    = $0B25;
  479.   GL_LINE_STIPPLE_REPEAT                     = $0B26;
  480.  
  481.   // polygons
  482.   GL_POLYGON_MODE                            = $0B40;
  483.   GL_POLYGON_SMOOTH                          = $0B41;
  484.   GL_POLYGON_STIPPLE                         = $0B42;
  485.   GL_EDGE_FLAG                               = $0B43;
  486.   GL_CULL_FACE                               = $0B44;
  487.   GL_CULL_FACE_MODE                          = $0B45;
  488.   GL_FRONT_FACE                              = $0B46;
  489.   GL_CW                                      = $0900;
  490.   GL_CCW                                     = $0901;
  491.   GL_POINT                                   = $1B00;
  492.   GL_LINE                                    = $1B01;
  493.   GL_FILL                                    = $1B02;
  494.  
  495.   // display lists
  496.   GL_LIST_MODE                               = $0B30;
  497.   GL_LIST_BASE                               = $0B32;
  498.   GL_LIST_INDEX                              = $0B33;
  499.   GL_COMPILE                                 = $1300;
  500.   GL_COMPILE_AND_EXECUTE                     = $1301;
  501.  
  502.   // lighting
  503.   GL_LIGHTING                                = $0B50;
  504.   GL_LIGHT_MODEL_LOCAL_VIEWER                = $0B51;
  505.   GL_LIGHT_MODEL_TWO_SIDE                    = $0B52;
  506.   GL_LIGHT_MODEL_AMBIENT                     = $0B53;
  507.   GL_LIGHT_MODEL_COLOR_CONTROL               = $81F8; // GL 1.2
  508.   GL_SHADE_MODEL                             = $0B54;
  509.   GL_NORMALIZE                               = $0BA1;
  510.   GL_AMBIENT                                 = $1200;
  511.   GL_DIFFUSE                                 = $1201;
  512.   GL_SPECULAR                                = $1202;
  513.   GL_POSITION                                = $1203;
  514.   GL_SPOT_DIRECTION                          = $1204;
  515.   GL_SPOT_EXPONENT                           = $1205;
  516.   GL_SPOT_CUTOFF                             = $1206;
  517.   GL_CONSTANT_ATTENUATION                    = $1207;
  518.   GL_LINEAR_ATTENUATION                      = $1208;
  519.   GL_QUADRATIC_ATTENUATION                   = $1209;
  520.   GL_EMISSION                                = $1600;
  521.   GL_SHININESS                               = $1601;
  522.   GL_AMBIENT_AND_DIFFUSE                     = $1602;
  523.   GL_COLOR_INDEXES                           = $1603;
  524.   GL_FLAT                                    = $1D00;
  525.   GL_SMOOTH                                  = $1D01;
  526.   GL_LIGHT0                                  = $4000;
  527.   GL_LIGHT1                                  = $4001;
  528.   GL_LIGHT2                                  = $4002;
  529.   GL_LIGHT3                                  = $4003;
  530.   GL_LIGHT4                                  = $4004;
  531.   GL_LIGHT5                                  = $4005;
  532.   GL_LIGHT6                                  = $4006;
  533.   GL_LIGHT7                                  = $4007;
  534.  
  535.   // matrix modes
  536.   GL_MATRIX_MODE                             = $0BA0;
  537.   GL_MODELVIEW                               = $1700;
  538.   GL_PROJECTION                              = $1701;
  539.   GL_TEXTURE                                 = $1702;
  540.  
  541.   // gets
  542.   GL_CURRENT_COLOR                           = $0B00;
  543.   GL_CURRENT_INDEX                           = $0B01;
  544.   GL_CURRENT_NORMAL                          = $0B02;
  545.   GL_CURRENT_TEXTURE_COORDS                  = $0B03;
  546.   GL_CURRENT_RASTER_COLOR                    = $0B04;
  547.   GL_CURRENT_RASTER_INDEX                    = $0B05;
  548.   GL_CURRENT_RASTER_TEXTURE_COORDS           = $0B06;
  549.   GL_CURRENT_RASTER_POSITION                 = $0B07;
  550.   GL_CURRENT_RASTER_POSITION_VALID           = $0B08;
  551.   GL_CURRENT_RASTER_DISTANCE                 = $0B09;
  552.   GL_MAX_LIST_NESTING                        = $0B31;
  553.   GL_VIEWPORT                                = $0BA2;
  554.   GL_MODELVIEW_STACK_DEPTH                   = $0BA3;
  555.   GL_PROJECTION_STACK_DEPTH                  = $0BA4;
  556.   GL_TEXTURE_STACK_DEPTH                     = $0BA5;
  557.   GL_MODELVIEW_MATRIX                        = $0BA6;
  558.   GL_PROJECTION_MATRIX                       = $0BA7;
  559.   GL_TEXTURE_MATRIX                          = $0BA8;
  560.   GL_ATTRIB_STACK_DEPTH                      = $0BB0;
  561.   GL_CLIENT_ATTRIB_STACK_DEPTH               = $0BB1;
  562.  
  563.   GL_SINGLE_COLOR                            = $81F9; // GL 1.2
  564.   GL_SEPARATE_SPECULAR_COLOR                 = $81FA; // GL 1.2
  565.  
  566.   // alpha testing
  567.   GL_ALPHA_TEST                              = $0BC0;
  568.   GL_ALPHA_TEST_FUNC                         = $0BC1;
  569.   GL_ALPHA_TEST_REF                          = $0BC2;
  570.  
  571.   GL_LOGIC_OP_MODE                           = $0BF0;
  572.   GL_INDEX_LOGIC_OP                          = $0BF1;
  573.   GL_LOGIC_OP                                = $0BF1;
  574.   GL_COLOR_LOGIC_OP                          = $0BF2;
  575.   GL_SCISSOR_BOX                             = $0C10;
  576.   GL_SCISSOR_TEST                            = $0C11;
  577.   GL_INDEX_CLEAR_VALUE                       = $0C20;
  578.   GL_INDEX_WRITEMASK                         = $0C21;
  579.   GL_COLOR_CLEAR_VALUE                       = $0C22;
  580.   GL_COLOR_WRITEMASK                         = $0C23;
  581.   GL_INDEX_MODE                              = $0C30;
  582.   GL_RGBA_MODE                               = $0C31;
  583.   GL_RENDER_MODE                             = $0C40;
  584.   GL_PERSPECTIVE_CORRECTION_HINT             = $0C50;
  585.   GL_POINT_SMOOTH_HINT                       = $0C51;
  586.   GL_LINE_SMOOTH_HINT                        = $0C52;
  587.   GL_POLYGON_SMOOTH_HINT                     = $0C53;
  588.   GL_FOG_HINT                                = $0C54;
  589.   GL_TEXTURE_GEN_S                           = $0C60;
  590.   GL_TEXTURE_GEN_T                           = $0C61;
  591.   GL_TEXTURE_GEN_R                           = $0C62;
  592.   GL_TEXTURE_GEN_Q                           = $0C63;
  593.   GL_PIXEL_MAP_I_TO_I_SIZE                   = $0CB0;
  594.   GL_PIXEL_MAP_S_TO_S_SIZE                   = $0CB1;
  595.   GL_PIXEL_MAP_I_TO_R_SIZE                   = $0CB2;
  596.   GL_PIXEL_MAP_I_TO_G_SIZE                   = $0CB3;
  597.   GL_PIXEL_MAP_I_TO_B_SIZE                   = $0CB4;
  598.   GL_PIXEL_MAP_I_TO_A_SIZE                   = $0CB5;
  599.   GL_PIXEL_MAP_R_TO_R_SIZE                   = $0CB6;
  600.   GL_PIXEL_MAP_G_TO_G_SIZE                   = $0CB7;
  601.   GL_PIXEL_MAP_B_TO_B_SIZE                   = $0CB8;
  602.   GL_PIXEL_MAP_A_TO_A_SIZE                   = $0CB9;
  603.   GL_UNPACK_SWAP_BYTES                       = $0CF0;
  604.   GL_UNPACK_LSB_FIRST                        = $0CF1;
  605.   GL_UNPACK_ROW_LENGTH                       = $0CF2;
  606.   GL_UNPACK_SKIP_ROWS                        = $0CF3;
  607.   GL_UNPACK_SKIP_PIXELS                      = $0CF4;
  608.   GL_UNPACK_ALIGNMENT                        = $0CF5;
  609.   GL_PACK_SWAP_BYTES                         = $0D00;
  610.   GL_PACK_LSB_FIRST                          = $0D01;
  611.   GL_PACK_ROW_LENGTH                         = $0D02;
  612.   GL_PACK_SKIP_ROWS                          = $0D03;
  613.   GL_PACK_SKIP_PIXELS                        = $0D04;
  614.   GL_PACK_ALIGNMENT                          = $0D05;
  615.   GL_PACK_SKIP_IMAGES                        = $806B; // GL 1.2
  616.   GL_PACK_IMAGE_HEIGHT                       = $806C; // GL 1.2
  617.   GL_UNPACK_SKIP_IMAGES                      = $806D; // GL 1.2
  618.   GL_UNPACK_IMAGE_HEIGHT                     = $806E; // GL 1.2
  619.   GL_MAP_COLOR                               = $0D10;
  620.   GL_MAP_STENCIL                             = $0D11;
  621.   GL_INDEX_SHIFT                             = $0D12;
  622.   GL_INDEX_OFFSET                            = $0D13;
  623.   GL_RED_SCALE                               = $0D14;
  624.   GL_RED_BIAS                                = $0D15;
  625.   GL_ZOOM_X                                  = $0D16;
  626.   GL_ZOOM_Y                                  = $0D17;
  627.   GL_GREEN_SCALE                             = $0D18;
  628.   GL_GREEN_BIAS                              = $0D19;
  629.   GL_BLUE_SCALE                              = $0D1A;
  630.   GL_BLUE_BIAS                               = $0D1B;
  631.   GL_ALPHA_SCALE                             = $0D1C;
  632.   GL_ALPHA_BIAS                              = $0D1D;
  633.   GL_DEPTH_SCALE                             = $0D1E;
  634.   GL_DEPTH_BIAS                              = $0D1F;
  635.   GL_MAX_EVAL_ORDER                          = $0D30;
  636.   GL_MAX_LIGHTS                              = $0D31;
  637.   GL_MAX_CLIP_PLANES                         = $0D32;
  638.   GL_MAX_TEXTURE_SIZE                        = $0D33;
  639.   GL_MAX_3D_TEXTURE_SIZE                     = $8073; // GL 1.2
  640.   GL_MAX_PIXEL_MAP_TABLE                     = $0D34;
  641.   GL_MAX_ATTRIB_STACK_DEPTH                  = $0D35;
  642.   GL_MAX_MODELVIEW_STACK_DEPTH               = $0D36;
  643.   GL_MAX_NAME_STACK_DEPTH                    = $0D37;
  644.   GL_MAX_PROJECTION_STACK_DEPTH              = $0D38;
  645.   GL_MAX_TEXTURE_STACK_DEPTH                 = $0D39;
  646.   GL_MAX_VIEWPORT_DIMS                       = $0D3A;
  647.   GL_MAX_CLIENT_ATTRIB_STACK_DEPTH           = $0D3B;
  648.   GL_MAX_ELEMENTS_VERTICES                   = $F0E8; // GL 1.2
  649.   GL_MAX_ELEMENTS_INDICES                    = $F0E9; // GL 1.2
  650.   GL_RESCALE_NORMAL                          = $803A; // GL 1.2
  651.   GL_SUBPIXEL_BITS                           = $0D50;
  652.   GL_INDEX_BITS                              = $0D51;
  653.   GL_RED_BITS                                = $0D52;
  654.   GL_GREEN_BITS                              = $0D53;
  655.   GL_BLUE_BITS                               = $0D54;
  656.   GL_ALPHA_BITS                              = $0D55;
  657.   GL_DEPTH_BITS                              = $0D56;
  658.   GL_STENCIL_BITS                            = $0D57;
  659.   GL_ACCUM_RED_BITS                          = $0D58;
  660.   GL_ACCUM_GREEN_BITS                        = $0D59;
  661.   GL_ACCUM_BLUE_BITS                         = $0D5A;
  662.   GL_ACCUM_ALPHA_BITS                        = $0D5B;
  663.   GL_NAME_STACK_DEPTH                        = $0D70;
  664.   GL_AUTO_NORMAL                             = $0D80;
  665.   GL_MAP1_COLOR_4                            = $0D90;
  666.   GL_MAP1_INDEX                              = $0D91;
  667.   GL_MAP1_NORMAL                             = $0D92;
  668.   GL_MAP1_TEXTURE_COORD_1                    = $0D93;
  669.   GL_MAP1_TEXTURE_COORD_2                    = $0D94;
  670.   GL_MAP1_TEXTURE_COORD_3                    = $0D95;
  671.   GL_MAP1_TEXTURE_COORD_4                    = $0D96;
  672.   GL_MAP1_VERTEX_3                           = $0D97;
  673.   GL_MAP1_VERTEX_4                           = $0D98;
  674.   GL_MAP2_COLOR_4                            = $0DB0;
  675.   GL_MAP2_INDEX                              = $0DB1;
  676.   GL_MAP2_NORMAL                             = $0DB2;
  677.   GL_MAP2_TEXTURE_COORD_1                    = $0DB3;
  678.   GL_MAP2_TEXTURE_COORD_2                    = $0DB4;
  679.   GL_MAP2_TEXTURE_COORD_3                    = $0DB5;
  680.   GL_MAP2_TEXTURE_COORD_4                    = $0DB6;
  681.   GL_MAP2_VERTEX_3                           = $0DB7;
  682.   GL_MAP2_VERTEX_4                           = $0DB8;
  683.   GL_MAP1_GRID_DOMAIN                        = $0DD0;
  684.   GL_MAP1_GRID_SEGMENTS                      = $0DD1;
  685.   GL_MAP2_GRID_DOMAIN                        = $0DD2;
  686.   GL_MAP2_GRID_SEGMENTS                      = $0DD3;
  687.   GL_TEXTURE_1D                              = $0DE0;
  688.   GL_TEXTURE_2D                              = $0DE1;
  689.   GL_TEXTURE_3D                              = $806F; // GL 1.2
  690.   GL_SELECTION_BUFFER_POINTER                = $0DF3;
  691.   GL_SELECTION_BUFFER_SIZE                   = $0DF4;
  692.   GL_POLYGON_OFFSET_UNITS                    = $2A00;
  693.   GL_POLYGON_OFFSET_POINT                    = $2A01;
  694.   GL_POLYGON_OFFSET_LINE                     = $2A02;
  695.   GL_POLYGON_OFFSET_FILL                     = $8037;
  696.   GL_POLYGON_OFFSET_FACTOR                   = $8038;
  697.   GL_TEXTURE_BINDING_1D                      = $8068;
  698.   GL_TEXTURE_BINDING_2D                      = $8069;
  699.   GL_VERTEX_ARRAY                            = $8074;
  700.   GL_NORMAL_ARRAY                            = $8075;
  701.   GL_COLOR_ARRAY                             = $8076;
  702.   GL_INDEX_ARRAY                             = $8077;
  703.   GL_TEXTURE_COORD_ARRAY                     = $8078;
  704.   GL_EDGE_FLAG_ARRAY                         = $8079;
  705.   GL_VERTEX_ARRAY_SIZE                       = $807A;
  706.   GL_VERTEX_ARRAY_TYPE                       = $807B;
  707.   GL_VERTEX_ARRAY_STRIDE                     = $807C;
  708.   GL_NORMAL_ARRAY_TYPE                       = $807E;
  709.   GL_NORMAL_ARRAY_STRIDE                     = $807F;
  710.   GL_COLOR_ARRAY_SIZE                        = $8081;
  711.   GL_COLOR_ARRAY_TYPE                        = $8082;
  712.   GL_COLOR_ARRAY_STRIDE                      = $8083;
  713.   GL_INDEX_ARRAY_TYPE                        = $8085;
  714.   GL_INDEX_ARRAY_STRIDE                      = $8086;
  715.   GL_TEXTURE_COORD_ARRAY_SIZE                = $8088;
  716.   GL_TEXTURE_COORD_ARRAY_TYPE                = $8089;
  717.   GL_TEXTURE_COORD_ARRAY_STRIDE              = $808A;
  718.   GL_EDGE_FLAG_ARRAY_STRIDE                  = $808C;
  719.   GL_COLOR_MATRIX                            = $80B1; // GL 1.2 ARB imaging
  720.   GL_COLOR_MATRIX_STACK_DEPTH                = $80B2; // GL 1.2 ARB imaging
  721.   GL_MAX_COLOR_MATRIX_STACK_DEPTH            = $80B3; // GL 1.2 ARB imaging
  722.   GL_POST_COLOR_MATRIX_RED_SCALE             = $80B4; // GL 1.2 ARB imaging
  723.   GL_POST_COLOR_MATRIX_GREEN_SCALE           = $80B5; // GL 1.2 ARB imaging
  724.   GL_POST_COLOR_MATRIX_BLUE_SCALE            = $80B6; // GL 1.2 ARB imaging
  725.   GL_POST_COLOR_MATRIX_ALPHA_SCALE           = $80B7; // GL 1.2 ARB imaging
  726.   GL_POST_COLOR_MATRIX_RED_BIAS              = $80B8; // GL 1.2 ARB imaging
  727.   GL_POST_COLOR_MATRIX_GREEN_BIAS            = $80B9; // GL 1.2 ARB imaging
  728.   GL_POST_COLOR_MATRIX_BLUE_BIAS             = $80BA; // GL 1.2 ARB imaging
  729.   GL_POST_COLOR_MATRIX_ALPHA_BIAS            = $80BB; // GL 1.2 ARB imaging
  730.  
  731.   // evaluators
  732.   GL_COEFF                                   = $0A00;
  733.   GL_ORDER                                   = $0A01;
  734.   GL_DOMAIN                                  = $0A02;
  735.   
  736.   // texture mapping
  737.   GL_TEXTURE_WIDTH                           = $1000;
  738.   GL_TEXTURE_HEIGHT                          = $1001;
  739.   GL_TEXTURE_INTERNAL_FORMAT                 = $1003;
  740.   GL_TEXTURE_COMPONENTS                      = $1003;
  741.   GL_TEXTURE_BORDER_COLOR                    = $1004;
  742.   GL_TEXTURE_BORDER                          = $1005;
  743.   GL_TEXTURE_RED_SIZE                        = $805C;
  744.   GL_TEXTURE_GREEN_SIZE                      = $805D;
  745.   GL_TEXTURE_BLUE_SIZE                       = $805E;
  746.   GL_TEXTURE_ALPHA_SIZE                      = $805F;
  747.   GL_TEXTURE_LUMINANCE_SIZE                  = $8060;
  748.   GL_TEXTURE_INTENSITY_SIZE                  = $8061;
  749.   GL_TEXTURE_PRIORITY                        = $8066;
  750.   GL_TEXTURE_RESIDENT                        = $8067;
  751.   GL_BGR                                     = $80E0; // v 1.2
  752.   GL_BGRA                                    = $80E1; // v 1.2
  753.   GL_S                                       = $2000;
  754.   GL_T                                       = $2001;
  755.   GL_R                                       = $2002;
  756.   GL_Q                                       = $2003;
  757.   GL_MODULATE                                = $2100;
  758.   GL_DECAL                                   = $2101;
  759.   GL_TEXTURE_ENV_MODE                        = $2200;
  760.   GL_TEXTURE_ENV_COLOR                       = $2201;
  761.   GL_TEXTURE_ENV                             = $2300;
  762.   GL_EYE_LINEAR                              = $2400;
  763.   GL_OBJECT_LINEAR                           = $2401;
  764.   GL_SPHERE_MAP                              = $2402;
  765.   GL_TEXTURE_GEN_MODE                        = $2500;
  766.   GL_OBJECT_PLANE                            = $2501;
  767.   GL_EYE_PLANE                               = $2502;
  768.   GL_NEAREST                                 = $2600;
  769.   GL_LINEAR                                  = $2601;
  770.   GL_NEAREST_MIPMAP_NEAREST                  = $2700;
  771.   GL_LINEAR_MIPMAP_NEAREST                   = $2701;
  772.   GL_NEAREST_MIPMAP_LINEAR                   = $2702;
  773.   GL_LINEAR_MIPMAP_LINEAR                    = $2703;
  774.   GL_TEXTURE_MAG_FILTER                      = $2800;
  775.   GL_TEXTURE_MIN_FILTER                      = $2801;
  776.   GL_TEXTURE_WRAP_R                          = $8072; // GL 1.2
  777.   GL_TEXTURE_WRAP_S                          = $2802;
  778.   GL_TEXTURE_WRAP_T                          = $2803;
  779.   GL_CLAMP_TO_EDGE                           = $812F; // GL 1.2
  780.   GL_TEXTURE_MIN_LOD                         = $813A; // GL 1.2
  781.   GL_TEXTURE_MAX_LOD                         = $813B; // GL 1.2
  782.   GL_TEXTURE_BASE_LEVEL                      = $813C; // GL 1.2
  783.   GL_TEXTURE_MAX_LEVEL                       = $813D; // GL 1.2
  784.   GL_TEXTURE_DEPTH                           = $8071; // GL 1.2
  785.   GL_PROXY_TEXTURE_1D                        = $8063;
  786.   GL_PROXY_TEXTURE_2D                        = $8064;
  787.   GL_PROXY_TEXTURE_3D                        = $8070; // GL 1.2
  788.   GL_CLAMP                                   = $2900;
  789.   GL_REPEAT                                  = $2901;
  790.  
  791.   // hints
  792.   GL_DONT_CARE                               = $1100;
  793.   GL_FASTEST                                 = $1101;
  794.   GL_NICEST                                  = $1102;
  795.  
  796.   // data types
  797.   GL_BYTE                                    = $1400;
  798.   GL_UNSIGNED_BYTE                           = $1401;
  799.   GL_SHORT                                   = $1402;
  800.   GL_UNSIGNED_SHORT                          = $1403;
  801.   GL_INT                                     = $1404;
  802.   GL_UNSIGNED_INT                            = $1405;
  803.   GL_FLOAT                                   = $1406;
  804.   GL_2_BYTES                                 = $1407;
  805.   GL_3_BYTES                                 = $1408;
  806.   GL_4_BYTES                                 = $1409;
  807.   GL_DOUBLE                                  = $140A;
  808.   GL_DOUBLE_EXT                              = $140A;
  809.  
  810.   // logic operations
  811.   GL_CLEAR                                   = $1500;
  812.   GL_AND                                     = $1501;
  813.   GL_AND_REVERSE                             = $1502;
  814.   GL_COPY                                    = $1503;
  815.   GL_AND_INVERTED                            = $1504;
  816.   GL_NOOP                                    = $1505;
  817.   GL_XOR                                     = $1506;
  818.   GL_OR                                      = $1507;
  819.   GL_NOR                                     = $1508;
  820.   GL_EQUIV                                   = $1509;
  821.   GL_INVERT                                  = $150A;
  822.   GL_OR_REVERSE                              = $150B;
  823.   GL_COPY_INVERTED                           = $150C;
  824.   GL_OR_INVERTED                             = $150D;
  825.   GL_NAND                                    = $150E;
  826.   GL_SET                                     = $150F;
  827.  
  828.   // PixelCopyType
  829.   GL_COLOR                                   = $1800;
  830.   GL_DEPTH                                   = $1801;
  831.   GL_STENCIL                                 = $1802;
  832.  
  833.   // pixel formats
  834.   GL_COLOR_INDEX                             = $1900;
  835.   GL_STENCIL_INDEX                           = $1901;
  836.   GL_DEPTH_COMPONENT                         = $1902;
  837.   GL_RED                                     = $1903;
  838.   GL_GREEN                                   = $1904;
  839.   GL_BLUE                                    = $1905;
  840.   GL_ALPHA                                   = $1906;
  841.   GL_RGB                                     = $1907;
  842.   GL_RGBA                                    = $1908;
  843.   GL_LUMINANCE                               = $1909;
  844.   GL_LUMINANCE_ALPHA                         = $190A;
  845.  
  846.   // pixel type
  847.   GL_BITMAP                                  = $1A00;
  848.  
  849.   // rendering modes
  850.   GL_RENDER                                  = $1C00;
  851.   GL_FEEDBACK                                = $1C01;
  852.   GL_SELECT                                  = $1C02;
  853.  
  854.   // implementation strings
  855.   GL_VENDOR                                  = $1F00;
  856.   GL_RENDERER                                = $1F01;
  857.   GL_VERSION                                 = $1F02;
  858.   GL_EXTENSIONS                              = $1F03;
  859.  
  860.   // pixel formats
  861.   GL_R3_G3_B2                                = $2A10;
  862.   GL_ALPHA4                                  = $803B;
  863.   GL_ALPHA8                                  = $803C;
  864.   GL_ALPHA12                                 = $803D;
  865.   GL_ALPHA16                                 = $803E;
  866.   GL_LUMINANCE4                              = $803F;
  867.   GL_LUMINANCE8                              = $8040;
  868.   GL_LUMINANCE12                             = $8041;
  869.   GL_LUMINANCE16                             = $8042;
  870.   GL_LUMINANCE4_ALPHA4                       = $8043;
  871.   GL_LUMINANCE6_ALPHA2                       = $8044;
  872.   GL_LUMINANCE8_ALPHA8                       = $8045;
  873.   GL_LUMINANCE12_ALPHA4                      = $8046;
  874.   GL_LUMINANCE12_ALPHA12                     = $8047;
  875.   GL_LUMINANCE16_ALPHA16                     = $8048;
  876.   GL_INTENSITY                               = $8049;
  877.   GL_INTENSITY4                              = $804A;
  878.   GL_INTENSITY8                              = $804B;
  879.   GL_INTENSITY12                             = $804C;
  880.   GL_INTENSITY16                             = $804D;
  881.   GL_RGB4                                    = $804F;
  882.   GL_RGB5                                    = $8050;
  883.   GL_RGB8                                    = $8051;
  884.   GL_RGB10                                   = $8052;
  885.   GL_RGB12                                   = $8053;
  886.   GL_RGB16                                   = $8054;
  887.   GL_RGBA2                                   = $8055;
  888.   GL_RGBA4                                   = $8056;
  889.   GL_RGB5_A1                                 = $8057;
  890.   GL_RGBA8                                   = $8058;
  891.   GL_RGB10_A2                                = $8059;
  892.   GL_RGBA12                                  = $805A;
  893.   GL_RGBA16                                  = $805B;
  894.   UNSIGNED_BYTE_3_3_2                        = $8032; // GL 1.2
  895.   UNSIGNED_BYTE_2_3_3_REV                    = $8362; // GL 1.2
  896.   UNSIGNED_SHORT_5_6_5                       = $8363; // GL 1.2
  897.   UNSIGNED_SHORT_5_6_5_REV                   = $8364; // GL 1.2
  898.   UNSIGNED_SHORT_4_4_4_4                     = $8033; // GL 1.2
  899.   UNSIGNED_SHORT_4_4_4_4_REV                 = $8365; // GL 1.2
  900.   UNSIGNED_SHORT_5_5_5_1                     = $8034; // GL 1.2
  901.   UNSIGNED_SHORT_1_5_5_5_REV                 = $8366; // GL 1.2
  902.   UNSIGNED_INT_8_8_8_8                       = $8035; // GL 1.2
  903.   UNSIGNED_INT_8_8_8_8_REV                   = $8367; // GL 1.2
  904.   UNSIGNED_INT_10_10_10_2                    = $8036; // GL 1.2
  905.   UNSIGNED_INT_2_10_10_10_REV                = $8368; // GL 1.2
  906.  
  907.   // interleaved arrays formats
  908.   GL_V2F                                     = $2A20;
  909.   GL_V3F                                     = $2A21;
  910.   GL_C4UB_V2F                                = $2A22;
  911.   GL_C4UB_V3F                                = $2A23;
  912.   GL_C3F_V3F                                 = $2A24;
  913.   GL_N3F_V3F                                 = $2A25;
  914.   GL_C4F_N3F_V3F                             = $2A26;
  915.   GL_T2F_V3F                                 = $2A27;
  916.   GL_T4F_V4F                                 = $2A28;
  917.   GL_T2F_C4UB_V3F                            = $2A29;
  918.   GL_T2F_C3F_V3F                             = $2A2A;
  919.   GL_T2F_N3F_V3F                             = $2A2B;
  920.   GL_T2F_C4F_N3F_V3F                         = $2A2C;
  921.   GL_T4F_C4F_N3F_V4F                         = $2A2D;
  922.  
  923.   // clip planes
  924.   GL_CLIP_PLANE0                             = $3000;
  925.   GL_CLIP_PLANE1                             = $3001;
  926.   GL_CLIP_PLANE2                             = $3002;
  927.   GL_CLIP_PLANE3                             = $3003;
  928.   GL_CLIP_PLANE4                             = $3004;
  929.   GL_CLIP_PLANE5                             = $3005;
  930.  
  931.   // miscellaneous
  932.   GL_DITHER                                  = $0BD0;
  933.   
  934.   // ----- extensions enumerants -----
  935.   // EXT_abgr
  936.   GL_ABGR_EXT                                = $8000;
  937.  
  938.   // EXT_packed_pixels
  939.   GL_UNSIGNED_BYTE_3_3_2_EXT                 = $8032;
  940.   GL_UNSIGNED_SHORT_4_4_4_4_EXT              = $8033;
  941.   GL_UNSIGNED_SHORT_5_5_5_1_EXT              = $8034;
  942.   GL_UNSIGNED_INT_8_8_8_8_EXT                = $8035;
  943.   GL_UNSIGNED_INT_10_10_10_2_EXT             = $8036;
  944.  
  945.   // EXT_vertex_array
  946.   GL_VERTEX_ARRAY_EXT                        = $8074;
  947.   GL_NORMAL_ARRAY_EXT                        = $8075;
  948.   GL_COLOR_ARRAY_EXT                         = $8076;
  949.   GL_INDEX_ARRAY_EXT                         = $8077;
  950.   GL_TEXTURE_COORD_ARRAY_EXT                 = $8078;
  951.   GL_EDGE_FLAG_ARRAY_EXT                     = $8079;
  952.   GL_VERTEX_ARRAY_SIZE_EXT                   = $807A;
  953.   GL_VERTEX_ARRAY_TYPE_EXT                   = $807B;
  954.   GL_VERTEX_ARRAY_STRIDE_EXT                 = $807C;
  955.   GL_VERTEX_ARRAY_COUNT_EXT                  = $807D;
  956.   GL_NORMAL_ARRAY_TYPE_EXT                   = $807E;
  957.   GL_NORMAL_ARRAY_STRIDE_EXT                 = $807F;
  958.   GL_NORMAL_ARRAY_COUNT_EXT                  = $8080;
  959.   GL_COLOR_ARRAY_SIZE_EXT                    = $8081;
  960.   GL_COLOR_ARRAY_TYPE_EXT                    = $8082;
  961.   GL_COLOR_ARRAY_STRIDE_EXT                  = $8083;
  962.   GL_COLOR_ARRAY_COUNT_EXT                   = $8084;
  963.   GL_INDEX_ARRAY_TYPE_EXT                    = $8085;
  964.   GL_INDEX_ARRAY_STRIDE_EXT                  = $8086;
  965.   GL_INDEX_ARRAY_COUNT_EXT                   = $8087;
  966.   GL_TEXTURE_COORD_ARRAY_SIZE_EXT            = $8088;
  967.   GL_TEXTURE_COORD_ARRAY_TYPE_EXT            = $8089;
  968.   GL_TEXTURE_COORD_ARRAY_STRIDE_EXT          = $808A;
  969.   GL_TEXTURE_COORD_ARRAY_COUNT_EXT           = $808B;
  970.   GL_EDGE_FLAG_ARRAY_STRIDE_EXT              = $808C;
  971.   GL_EDGE_FLAG_ARRAY_COUNT_EXT               = $808D;
  972.   GL_VERTEX_ARRAY_POINTER_EXT                = $808E;
  973.   GL_NORMAL_ARRAY_POINTER_EXT                = $808F;
  974.   GL_COLOR_ARRAY_POINTER_EXT                 = $8090;
  975.   GL_INDEX_ARRAY_POINTER_EXT                 = $8091;
  976.   GL_TEXTURE_COORD_ARRAY_POINTER_EXT         = $8092;
  977.   GL_EDGE_FLAG_ARRAY_POINTER_EXT             = $8093;
  978.  
  979.   // EXT_color_table
  980.   GL_TABLE_TOO_LARGE_EXT                     = $8031;
  981.   GL_COLOR_TABLE_EXT                         = $80D0;
  982.   GL_POST_CONVOLUTION_COLOR_TABLE_EXT        = $80D1;
  983.   GL_POST_COLOR_MATRIX_COLOR_TABLE_EXT       = $80D2;
  984.   GL_PROXY_COLOR_TABLE_EXT                   = $80D3;
  985.   GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_EXT  = $80D4;
  986.   GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_EXT = $80D5;
  987.   GL_COLOR_TABLE_SCALE_EXT                   = $80D6;
  988.   GL_COLOR_TABLE_BIAS_EXT                    = $80D7;
  989.   GL_COLOR_TABLE_FORMAT_EXT                  = $80D8;
  990.   GL_COLOR_TABLE_WIDTH_EXT                   = $80D9;
  991.   GL_COLOR_TABLE_RED_SIZE_EXT                = $80DA;
  992.   GL_COLOR_TABLE_GREEN_SIZE_EXT              = $80DB;
  993.   GL_COLOR_TABLE_BLUE_SIZE_EXT               = $80DC;
  994.   GL_COLOR_TABLE_ALPHA_SIZE_EXT              = $80DD;
  995.   GL_COLOR_TABLE_LUMINANCE_SIZE_EXT          = $80DE;
  996.   GL_COLOR_TABLE_INTENSITY_SIZE_EXT          = $80DF;
  997.  
  998.   // EXT_bgra
  999.   GL_BGR_EXT                                 = $80E0;
  1000.   GL_BGRA_EXT                                = $80E1;
  1001.  
  1002.   // EXT_paletted_texture
  1003.   GL_COLOR_INDEX1_EXT                        = $80E2;
  1004.   GL_COLOR_INDEX2_EXT                        = $80E3;
  1005.   GL_COLOR_INDEX4_EXT                        = $80E4;
  1006.   GL_COLOR_INDEX8_EXT                        = $80E5;
  1007.   GL_COLOR_INDEX12_EXT                       = $80E6;
  1008.   GL_COLOR_INDEX16_EXT                       = $80E7;
  1009.  
  1010.   // EXT_blend_color
  1011.   GL_CONSTANT_COLOR_EXT                      = $8001;
  1012.   GL_ONE_MINUS_CONSTANT_COLOR_EXT            = $8002;
  1013.   GL_CONSTANT_ALPHA_EXT                      = $8003;
  1014.   GL_ONE_MINUS_CONSTANT_ALPHA_EXT            = $8004;
  1015.   GL_BLEND_COLOR_EXT                         = $8005;
  1016.  
  1017.   // EXT_blend_minmax
  1018.   GL_FUNC_ADD_EXT                            = $8006;
  1019.   GL_MIN_EXT                                 = $8007;
  1020.   GL_MAX_EXT                                 = $8008;
  1021.   GL_BLEND_EQUATION_EXT                      = $8009;
  1022.  
  1023.   // EXT_blend_subtract
  1024.   GL_FUNC_SUBTRACT_EXT                       = $800A;
  1025.   GL_FUNC_REVERSE_SUBTRACT_EXT               = $800B;
  1026.  
  1027.   // EXT_convolution
  1028.   GL_CONVOLUTION_1D_EXT                      = $8010;
  1029.   GL_CONVOLUTION_2D_EXT                      = $8011;
  1030.   GL_SEPARABLE_2D_EXT                        = $8012;
  1031.   GL_CONVOLUTION_BORDER_MODE_EXT             = $8013;
  1032.   GL_CONVOLUTION_FILTER_SCALE_EXT            = $8014;
  1033.   GL_CONVOLUTION_FILTER_BIAS_EXT             = $8015;
  1034.   GL_REDUCE_EXT                              = $8016;
  1035.   GL_CONVOLUTION_FORMAT_EXT                  = $8017;
  1036.   GL_CONVOLUTION_WIDTH_EXT                   = $8018;
  1037.   GL_CONVOLUTION_HEIGHT_EXT                  = $8019;
  1038.   GL_MAX_CONVOLUTION_WIDTH_EXT               = $801A;
  1039.   GL_MAX_CONVOLUTION_HEIGHT_EXT              = $801B;
  1040.   GL_POST_CONVOLUTION_RED_SCALE_EXT          = $801C;
  1041.   GL_POST_CONVOLUTION_GREEN_SCALE_EXT        = $801D;
  1042.   GL_POST_CONVOLUTION_BLUE_SCALE_EXT         = $801E;
  1043.   GL_POST_CONVOLUTION_ALPHA_SCALE_EXT        = $801F;
  1044.   GL_POST_CONVOLUTION_RED_BIAS_EXT           = $8020;
  1045.   GL_POST_CONVOLUTION_GREEN_BIAS_EXT         = $8021;
  1046.   GL_POST_CONVOLUTION_BLUE_BIAS_EXT          = $8022;
  1047.   GL_POST_CONVOLUTION_ALPHA_BIAS_EXT         = $8023;
  1048.  
  1049.   // EXT_histogram
  1050.   GL_HISTOGRAM_EXT                           = $8024;
  1051.   GL_PROXY_HISTOGRAM_EXT                     = $8025;
  1052.   GL_HISTOGRAM_WIDTH_EXT                     = $8026;
  1053.   GL_HISTOGRAM_FORMAT_EXT                    = $8027;
  1054.   GL_HISTOGRAM_RED_SIZE_EXT                  = $8028;
  1055.   GL_HISTOGRAM_GREEN_SIZE_EXT                = $8029;
  1056.   GL_HISTOGRAM_BLUE_SIZE_EXT                 = $802A;
  1057.   GL_HISTOGRAM_ALPHA_SIZE_EXT                = $802B;
  1058.   GL_HISTOGRAM_LUMINANCE_SIZE_EXT            = $802C;
  1059.   GL_HISTOGRAM_SINK_EXT                      = $802D;
  1060.   GL_MINMAX_EXT                              = $802E;
  1061.   GL_MINMAX_FORMAT_EXT                       = $802F;
  1062.   GL_MINMAX_SINK_EXT                         = $8030;
  1063.  
  1064.   // EXT_polygon_offset
  1065.   GL_POLYGON_OFFSET_EXT                      = $8037;
  1066.   GL_POLYGON_OFFSET_FACTOR_EXT               = $8038;
  1067.   GL_POLYGON_OFFSET_BIAS_EXT                 = $8039;
  1068.  
  1069.   // EXT_texture
  1070.   GL_ALPHA4_EXT                              = $803B;
  1071.   GL_ALPHA8_EXT                              = $803C;
  1072.   GL_ALPHA12_EXT                             = $803D;
  1073.   GL_ALPHA16_EXT                             = $803E;
  1074.   GL_LUMINANCE4_EXT                          = $803F;
  1075.   GL_LUMINANCE8_EXT                          = $8040;
  1076.   GL_LUMINANCE12_EXT                         = $8041;
  1077.   GL_LUMINANCE16_EXT                         = $8042;
  1078.   GL_LUMINANCE4_ALPHA4_EXT                   = $8043;
  1079.   GL_LUMINANCE6_ALPHA2_EXT                   = $8044;
  1080.   GL_LUMINANCE8_ALPHA8_EXT                   = $8045;
  1081.   GL_LUMINANCE12_ALPHA4_EXT                  = $8046;
  1082.   GL_LUMINANCE12_ALPHA12_EXT                 = $8047;
  1083.   GL_LUMINANCE16_ALPHA16_EXT                 = $8048;
  1084.   GL_INTENSITY_EXT                           = $8049;
  1085.   GL_INTENSITY4_EXT                          = $804A;
  1086.   GL_INTENSITY8_EXT                          = $804B;
  1087.   GL_INTENSITY12_EXT                         = $804C;
  1088.   GL_INTENSITY16_EXT                         = $804D;
  1089.   GL_RGB2_EXT                                = $804E;
  1090.   GL_RGB4_EXT                                = $804F;
  1091.   GL_RGB5_EXT                                = $8050;
  1092.   GL_RGB8_EXT                                = $8051;
  1093.   GL_RGB10_EXT                               = $8052;
  1094.   GL_RGB12_EXT                               = $8053;
  1095.   GL_RGB16_EXT                               = $8054;
  1096.   GL_RGBA2_EXT                               = $8055;
  1097.   GL_RGBA4_EXT                               = $8056;
  1098.   GL_RGB5_A1_EXT                             = $8057;
  1099.   GL_RGBA8_EXT                               = $8058;
  1100.   GL_RGB10_A2_EXT                            = $8059;
  1101.   GL_RGBA12_EXT                              = $805A;
  1102.   GL_RGBA16_EXT                              = $805B;
  1103.   GL_TEXTURE_RED_SIZE_EXT                    = $805C;
  1104.   GL_TEXTURE_GREEN_SIZE_EXT                  = $805D;
  1105.   GL_TEXTURE_BLUE_SIZE_EXT                   = $805E;
  1106.   GL_TEXTURE_ALPHA_SIZE_EXT                  = $805F;
  1107.   GL_TEXTURE_LUMINANCE_SIZE_EXT              = $8060;
  1108.   GL_TEXTURE_INTENSITY_SIZE_EXT              = $8061;
  1109.   GL_REPLACE_EXT                             = $8062;
  1110.   GL_PROXY_TEXTURE_1D_EXT                    = $8063;
  1111.   GL_PROXY_TEXTURE_2D_EXT                    = $8064;
  1112.   GL_TEXTURE_TOO_LARGE_EXT                   = $8065;
  1113.  
  1114.   // EXT_texture_object 
  1115.   GL_TEXTURE_PRIORITY_EXT                    = $8066;
  1116.   GL_TEXTURE_RESIDENT_EXT                    = $8067;
  1117.   GL_TEXTURE_1D_BINDING_EXT                  = $8068;
  1118.   GL_TEXTURE_2D_BINDING_EXT                  = $8069;
  1119.   GL_TEXTURE_3D_BINDING_EXT                  = $806A;
  1120.  
  1121.   // EXT_texture3D
  1122.   GL_PACK_SKIP_IMAGES_EXT                    = $806B;
  1123.   GL_PACK_IMAGE_HEIGHT_EXT                   = $806C;
  1124.   GL_UNPACK_SKIP_IMAGES_EXT                  = $806D;
  1125.   GL_UNPACK_IMAGE_HEIGHT_EXT                 = $806E;
  1126.   GL_TEXTURE_3D_EXT                          = $806F;
  1127.   GL_PROXY_TEXTURE_3D_EXT                    = $8070;
  1128.   GL_TEXTURE_DEPTH_EXT                       = $8071;
  1129.   GL_TEXTURE_WRAP_R_EXT                      = $8072;
  1130.   GL_MAX_3D_TEXTURE_SIZE_EXT                 = $8073;
  1131.  
  1132.   // SGI_color_matrix
  1133.   GL_COLOR_MATRIX_SGI                        = $80B1;
  1134.   GL_COLOR_MATRIX_STACK_DEPTH_SGI            = $80B2;
  1135.   GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI        = $80B3;
  1136.   GL_POST_COLOR_MATRIX_RED_SCALE_SGI         = $80B4;
  1137.   GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI       = $80B5;
  1138.   GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI        = $80B6;
  1139.   GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI       = $80B7;
  1140.   GL_POST_COLOR_MATRIX_RED_BIAS_SGI          = $80B8;
  1141.   GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI        = $80B9;
  1142.   GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI         = $80BA;
  1143.   GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI        = $80BB;
  1144.  
  1145.   // SGI_texture_color_table
  1146.   GL_TEXTURE_COLOR_TABLE_SGI                 = $80BC;
  1147.   GL_PROXY_TEXTURE_COLOR_TABLE_SGI           = $80BD;
  1148.   GL_TEXTURE_COLOR_TABLE_BIAS_SGI            = $80BE;
  1149.   GL_TEXTURE_COLOR_TABLE_SCALE_SGI           = $80BF;
  1150.  
  1151.   // SGI_color_table
  1152.   GL_COLOR_TABLE_SGI                         = $80D0;
  1153.   GL_POST_CONVOLUTION_COLOR_TABLE_SGI        = $80D1;
  1154.   GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI       = $80D2;
  1155.   GL_PROXY_COLOR_TABLE_SGI                   = $80D3;
  1156.   GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI  = $80D4;
  1157.   GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI = $80D5;
  1158.   GL_COLOR_TABLE_SCALE_SGI                   = $80D6;
  1159.   GL_COLOR_TABLE_BIAS_SGI                    = $80D7;
  1160.   GL_COLOR_TABLE_FORMAT_SGI                  = $80D8;
  1161.   GL_COLOR_TABLE_WIDTH_SGI                   = $80D9;
  1162.   GL_COLOR_TABLE_RED_SIZE_SGI                = $80DA;
  1163.   GL_COLOR_TABLE_GREEN_SIZE_SGI              = $80DB;
  1164.   GL_COLOR_TABLE_BLUE_SIZE_SGI               = $80DC;
  1165.   GL_COLOR_TABLE_ALPHA_SIZE_SGI              = $80DD;
  1166.   GL_COLOR_TABLE_LUMINANCE_SIZE_SGI          = $80DE;
  1167.   GL_COLOR_TABLE_INTENSITY_SIZE_SGI          = $80DF;
  1168.  
  1169.   // EXT_cmyka
  1170.   GL_CMYK_EXT                                = $800C;
  1171.   GL_CMYKA_EXT                               = $800D;
  1172.   GL_PACK_CMYK_HINT_EXT                      = $800E;
  1173.   GL_UNPACK_CMYK_HINT_EXT                    = $800F;
  1174.  
  1175.   // EXT_rescale_normal
  1176.   GL_RESCALE_NORMAL_EXT                      = $803A;
  1177.  
  1178.   // EXT_clip_volume_hint
  1179.   GL_CLIP_VOLUME_CLIPPING_HINT_EXT         = $80F0;
  1180.  
  1181.   // EXT_cull_vertex
  1182.   GL_CULL_VERTEX_EXT                         = $81AA; 
  1183.   GL_CULL_VERTEX_EYE_POSITION_EXT            = $81AB;
  1184.   GL_CULL_VERTEX_OBJECT_POSITION_EXT         = $81AC;
  1185.  
  1186.   // EXT_index_array_formats
  1187.   GL_IUI_V2F_EXT                             = $81AD;
  1188.   GL_IUI_V3F_EXT                             = $81AE;
  1189.   GL_IUI_N3F_V2F_EXT                         = $81AF;
  1190.   GL_IUI_N3F_V3F_EXT                         = $81B0;
  1191.   GL_T2F_IUI_V2F_EXT                         = $81B1;
  1192.   GL_T2F_IUI_V3F_EXT                         = $81B2;
  1193.   GL_T2F_IUI_N3F_V2F_EXT                     = $81B3;
  1194.   GL_T2F_IUI_N3F_V3F_EXT                     = $81B4;
  1195.  
  1196.   // EXT_index_func
  1197.   GL_INDEX_TEST_EXT                          = $81B5;
  1198.   GL_INDEX_TEST_FUNC_EXT                     = $81B6;
  1199.   GL_INDEX_TEST_REF_EXT                      = $81B7;
  1200.  
  1201.   // EXT_index_material
  1202.   GL_INDEX_MATERIAL_EXT                      = $81B8;
  1203.   GL_INDEX_MATERIAL_PARAMETER_EXT            = $81B9;
  1204.   GL_INDEX_MATERIAL_FACE_EXT                 = $81BA;
  1205.  
  1206.   // EXT_misc_attribute
  1207.   GL_MISC_BIT_EXT                            = 0; // not yet defined
  1208.  
  1209.   // EXT_scene_marker
  1210.   GL_SCENE_REQUIRED_EXT                      = 0; // not yet defined
  1211.  
  1212.   // EXT_shared_texture_palette
  1213.   GL_SHARED_TEXTURE_PALETTE_EXT              = $81FB;
  1214.  
  1215.   // EXT_nurbs_tessellator
  1216.   GLU_NURBS_MODE_EXT                         = 100160;
  1217.   GLU_NURBS_TESSELLATOR_EXT                  = 100161;
  1218.   GLU_NURBS_RENDERER_EXT                     = 100162;
  1219.   GLU_NURBS_BEGIN_EXT                        = 100164;
  1220.   GLU_NURBS_VERTEX_EXT                       = 100165;
  1221.   GLU_NURBS_NORMAL_EXT                       = 100166;
  1222.   GLU_NURBS_COLOR_EXT                        = 100167;
  1223.   GLU_NURBS_TEX_COORD_EXT                    = 100168;
  1224.   GLU_NURBS_END_EXT                          = 100169;
  1225.   GLU_NURBS_BEGIN_DATA_EXT                   = 100170;
  1226.   GLU_NURBS_VERTEX_DATA_EXT                  = 100171;
  1227.   GLU_NURBS_NORMAL_DATA_EXT                  = 100172;
  1228.   GLU_NURBS_COLOR_DATA_EXT                   = 100173;
  1229.   GLU_NURBS_TEX_COORD_DATA_EXT               = 100174;
  1230.   GLU_NURBS_END_DATA_EXT                     = 100175;
  1231.  
  1232.   // EXT_object_space_tess
  1233.   GLU_OBJECT_PARAMETRIC_ERROR_EXT            = 100208;
  1234.   GLU_OBJECT_PATH_LENGTH_EXT                 = 100209;
  1235.  
  1236.   // EXT_point_parameters
  1237.   GL_POINT_SIZE_MIN_EXT                      = $8126;
  1238.   GL_POINT_SIZE_MAX_EXT                      = $8127;
  1239.   GL_POINT_FADE_THRESHOLD_SIZE_EXT           = $8128;
  1240.   GL_DISTANCE_ATTENUATION_EXT                = $8129;
  1241.  
  1242.   // EXT_compiled_vertex_array
  1243.   GL_ARRAY_ELEMENT_LOCK_FIRST_EXT            = $81A8;
  1244.   GL_ARRAY_ELEMENT_LOCK_COUNT_EXT            = $81A9;
  1245.  
  1246.   // ARB_multitexture
  1247.   GL_ACTIVE_TEXTURE_ARB                      = $84E0;
  1248.   GL_CLIENT_ACTIVE_TEXTURE_ARB               = $84E1;
  1249.   GL_MAX_TEXTURE_UNITS_ARB                   = $84E2;
  1250.   GL_TEXTURE0_ARB                            = $84C0;
  1251.   GL_TEXTURE1_ARB                            = $84C1;
  1252.   GL_TEXTURE2_ARB                            = $84C2;
  1253.   GL_TEXTURE3_ARB                            = $84C3;
  1254.   GL_TEXTURE4_ARB                            = $84C4;
  1255.   GL_TEXTURE5_ARB                            = $84C5;
  1256.   GL_TEXTURE6_ARB                            = $84C6;
  1257.   GL_TEXTURE7_ARB                            = $84C7;
  1258.   GL_TEXTURE8_ARB                            = $84C8;
  1259.   GL_TEXTURE9_ARB                            = $84C9;
  1260.   GL_TEXTURE10_ARB                           = $84CA;
  1261.   GL_TEXTURE11_ARB                           = $84CB;
  1262.   GL_TEXTURE12_ARB                           = $84CC;
  1263.   GL_TEXTURE13_ARB                           = $84CD;
  1264.   GL_TEXTURE14_ARB                           = $84CE;
  1265.   GL_TEXTURE15_ARB                           = $84CF;
  1266.   GL_TEXTURE16_ARB                           = $84D0;
  1267.   GL_TEXTURE17_ARB                           = $84D1;
  1268.   GL_TEXTURE18_ARB                           = $84D2;
  1269.   GL_TEXTURE19_ARB                           = $84D3;
  1270.   GL_TEXTURE20_ARB                           = $84D4;
  1271.   GL_TEXTURE21_ARB                           = $84D5;
  1272.   GL_TEXTURE22_ARB                           = $84D6;
  1273.   GL_TEXTURE23_ARB                           = $84D7;
  1274.   GL_TEXTURE24_ARB                           = $84D8;
  1275.   GL_TEXTURE25_ARB                           = $84D9;
  1276.   GL_TEXTURE26_ARB                           = $84DA;
  1277.   GL_TEXTURE27_ARB                           = $84DB;
  1278.   GL_TEXTURE28_ARB                           = $84DC;
  1279.   GL_TEXTURE29_ARB                           = $84DD;
  1280.   GL_TEXTURE30_ARB                           = $84DE;
  1281.   GL_TEXTURE31_ARB                           = $84DF;
  1282.  
  1283.   // EXT_stencil_wrap
  1284.   GL_INCR_WRAP_EXT                           = $8507;
  1285.   GL_DECR_WRAP_EXT                           = $8508;
  1286.  
  1287.   // NV_texgen_reflection
  1288.   GL_NORMAL_MAP_NV                           = $8511;
  1289.   GL_REFLECTION_MAP_NV                       = $8512;
  1290.  
  1291.   // EXT_texture_env_combine
  1292.   GL_COMBINE_EXT                             = $8570;
  1293.   GL_COMBINE_RGB_EXT                         = $8571;
  1294.   GL_COMBINE_ALPHA_EXT                       = $8572;
  1295.   GL_RGB_SCALE_EXT                           = $8573;
  1296.   GL_ADD_SIGNED_EXT                          = $8574;
  1297.   GL_INTERPOLATE_EXT                         = $8575;
  1298.   GL_CONSTANT_EXT                            = $8576;
  1299.   GL_PRIMARY_COLOR_EXT                       = $8577;
  1300.   GL_PREVIOUS_EXT                            = $8578;
  1301.   GL_SOURCE0_RGB_EXT                         = $8580;
  1302.   GL_SOURCE1_RGB_EXT                         = $8581;
  1303.   GL_SOURCE2_RGB_EXT                         = $8582;
  1304.   GL_SOURCE0_ALPHA_EXT                       = $8588;
  1305.   GL_SOURCE1_ALPHA_EXT                       = $8589;
  1306.   GL_SOURCE2_ALPHA_EXT                       = $858A;
  1307.   GL_OPERAND0_RGB_EXT                        = $8590;
  1308.   GL_OPERAND1_RGB_EXT                        = $8591;
  1309.   GL_OPERAND2_RGB_EXT                        = $8592;
  1310.   GL_OPERAND0_ALPHA_EXT                      = $8598;
  1311.   GL_OPERAND1_ALPHA_EXT                      = $8599;
  1312.   GL_OPERAND2_ALPHA_EXT                      = $859A;
  1313.  
  1314.   // NV_texture_env_combine4
  1315.   GL_COMBINE4_NV                             = $8503;
  1316.   GL_SOURCE3_RGB_NV                          = $8583;
  1317.   GL_SOURCE3_ALPHA_NV                        = $858B;
  1318.   GL_OPERAND3_RGB_NV                         = $8593;
  1319.   GL_OPERAND3_ALPHA_NV                       = $859B;
  1320.   
  1321. const
  1322.   // ********** GLU generic constants **********
  1323.  
  1324.   // Errors: (return value 0 = no error)
  1325.   GLU_INVALID_ENUM                           = 100900;
  1326.   GLU_INVALID_VALUE                          = 100901;
  1327.   GLU_OUT_OF_MEMORY                          = 100902;
  1328.   GLU_INCOMPATIBLE_GL_VERSION                = 100903;
  1329.  
  1330.   // StringName
  1331.   GLU_VERSION                                = 100800;
  1332.   GLU_EXTENSIONS                             = 100801;
  1333.  
  1334.   // Boolean
  1335.   GLU_TRUE                                   = GL_TRUE;
  1336.   GLU_FALSE                                  = GL_FALSE;
  1337.  
  1338.   // Quadric constants
  1339.   // QuadricNormal
  1340.   GLU_SMOOTH                                 = 100000;
  1341.   GLU_FLAT                                   = 100001;
  1342.   GLU_NONE                                   = 100002;
  1343.  
  1344.   // QuadricDrawStyle
  1345.   GLU_POINT                                  = 100010;
  1346.   GLU_LINE                                   = 100011;
  1347.   GLU_FILL                                   = 100012;
  1348.   GLU_SILHOUETTE                             = 100013;
  1349.  
  1350.   // QuadricOrientation
  1351.   GLU_OUTSIDE                                = 100020;
  1352.   GLU_INSIDE                                 = 100021;
  1353.  
  1354.   // Tesselation constants
  1355.   GLU_TESS_MAX_COORD                         = 1.0e150;
  1356.  
  1357.   // TessProperty
  1358.   GLU_TESS_WINDING_RULE                      = 100140;
  1359.   GLU_TESS_BOUNDARY_ONLY                     = 100141;
  1360.   GLU_TESS_TOLERANCE                         = 100142;
  1361.  
  1362.   // TessWinding
  1363.   GLU_TESS_WINDING_ODD                       = 100130;
  1364.   GLU_TESS_WINDING_NONZERO                   = 100131;
  1365.   GLU_TESS_WINDING_POSITIVE                  = 100132;
  1366.   GLU_TESS_WINDING_NEGATIVE                  = 100133;
  1367.   GLU_TESS_WINDING_ABS_GEQ_TWO               = 100134;
  1368.  
  1369.   // TessCallback
  1370.   GLU_TESS_BEGIN                             = 100100; // TGLUTessBeginProc
  1371.   GLU_TESS_VERTEX                            = 100101; // TGLUTessVertexProc
  1372.   GLU_TESS_END                               = 100102; // TGLUTessEndProc
  1373.   GLU_TESS_ERROR                             = 100103; // TGLUTessErrorProc
  1374.   GLU_TESS_EDGE_FLAG                         = 100104; // TGLUTessEdgeFlagProc
  1375.   GLU_TESS_COMBINE                           = 100105; // TGLUTessCombineProc
  1376.   GLU_TESS_BEGIN_DATA                        = 100106; // TGLUTessBeginDataProc
  1377.   GLU_TESS_VERTEX_DATA                       = 100107; // TGLUTessVertexDataProc
  1378.   GLU_TESS_END_DATA                          = 100108; // TGLUTessEndDataProc
  1379.   GLU_TESS_ERROR_DATA                        = 100109; // TGLUTessErrorDataProc
  1380.   GLU_TESS_EDGE_FLAG_DATA                    = 100110; // TGLUTessEdgeFlagDataProc
  1381.   GLU_TESS_COMBINE_DATA                      = 100111; // TGLUTessCombineDataProc
  1382.  
  1383.   // TessError
  1384.   GLU_TESS_ERROR1                            = 100151;
  1385.   GLU_TESS_ERROR2                            = 100152;
  1386.   GLU_TESS_ERROR3                            = 100153;
  1387.   GLU_TESS_ERROR4                            = 100154;
  1388.   GLU_TESS_ERROR5                            = 100155;
  1389.   GLU_TESS_ERROR6                            = 100156;
  1390.   GLU_TESS_ERROR7                            = 100157;
  1391.   GLU_TESS_ERROR8                            = 100158;
  1392.  
  1393.   GLU_TESS_MISSING_BEGIN_POLYGON             = GLU_TESS_ERROR1;
  1394.   GLU_TESS_MISSING_BEGIN_CONTOUR             = GLU_TESS_ERROR2;
  1395.   GLU_TESS_MISSING_END_POLYGON               = GLU_TESS_ERROR3;
  1396.   GLU_TESS_MISSING_END_CONTOUR               = GLU_TESS_ERROR4;
  1397.   GLU_TESS_COORD_TOO_LARGE                   = GLU_TESS_ERROR5;
  1398.   GLU_TESS_NEED_COMBINE_CALLBACK             = GLU_TESS_ERROR6;
  1399.  
  1400.   // NURBS constants
  1401.  
  1402.   // NurbsProperty
  1403.   GLU_AUTO_LOAD_MATRIX                       = 100200;
  1404.   GLU_CULLING                                = 100201;
  1405.   GLU_SAMPLING_TOLERANCE                     = 100203;
  1406.   GLU_DISPLAY_MODE                           = 100204;
  1407.   GLU_PARAMETRIC_TOLERANCE                   = 100202;
  1408.   GLU_SAMPLING_METHOD                        = 100205;
  1409.   GLU_U_STEP                                 = 100206;
  1410.   GLU_V_STEP                                 = 100207;
  1411.  
  1412.   // NurbsSampling
  1413.   GLU_PATH_LENGTH                            = 100215;
  1414.   GLU_PARAMETRIC_ERROR                       = 100216;
  1415.   GLU_DOMAIN_DISTANCE                        = 100217;
  1416.  
  1417.   // NurbsTrim
  1418.   GLU_MAP1_TRIM_2                            = 100210;
  1419.   GLU_MAP1_TRIM_3                            = 100211;
  1420.  
  1421.   // NurbsDisplay
  1422.   GLU_OUTLINE_POLYGON                        = 100240;
  1423.   GLU_OUTLINE_PATCH                          = 100241;
  1424.  
  1425.   // NurbsErrors
  1426.   GLU_NURBS_ERROR1                           = 100251;
  1427.   GLU_NURBS_ERROR2                           = 100252;
  1428.   GLU_NURBS_ERROR3                           = 100253;
  1429.   GLU_NURBS_ERROR4                           = 100254;
  1430.   GLU_NURBS_ERROR5                           = 100255;
  1431.   GLU_NURBS_ERROR6                           = 100256;
  1432.   GLU_NURBS_ERROR7                           = 100257;
  1433.   GLU_NURBS_ERROR8                           = 100258;
  1434.   GLU_NURBS_ERROR9                           = 100259;
  1435.   GLU_NURBS_ERROR10                          = 100260;
  1436.   GLU_NURBS_ERROR11                          = 100261;
  1437.   GLU_NURBS_ERROR12                          = 100262;
  1438.   GLU_NURBS_ERROR13                          = 100263;
  1439.   GLU_NURBS_ERROR14                          = 100264;
  1440.   GLU_NURBS_ERROR15                          = 100265;
  1441.   GLU_NURBS_ERROR16                          = 100266;
  1442.   GLU_NURBS_ERROR17                          = 100267;
  1443.   GLU_NURBS_ERROR18                          = 100268;
  1444.   GLU_NURBS_ERROR19                          = 100269;
  1445.   GLU_NURBS_ERROR20                          = 100270;
  1446.   GLU_NURBS_ERROR21                          = 100271;
  1447.   GLU_NURBS_ERROR22                          = 100272;
  1448.   GLU_NURBS_ERROR23                          = 100273;
  1449.   GLU_NURBS_ERROR24                          = 100274;
  1450.   GLU_NURBS_ERROR25                          = 100275;
  1451.   GLU_NURBS_ERROR26                          = 100276;
  1452.   GLU_NURBS_ERROR27                          = 100277;
  1453.   GLU_NURBS_ERROR28                          = 100278;
  1454.   GLU_NURBS_ERROR29                          = 100279;
  1455.   GLU_NURBS_ERROR30                          = 100280;
  1456.   GLU_NURBS_ERROR31                          = 100281;
  1457.   GLU_NURBS_ERROR32                          = 100282;
  1458.   GLU_NURBS_ERROR33                          = 100283;
  1459.   GLU_NURBS_ERROR34                          = 100284;
  1460.   GLU_NURBS_ERROR35                          = 100285;
  1461.   GLU_NURBS_ERROR36                          = 100286;
  1462.   GLU_NURBS_ERROR37                          = 100287;
  1463.  
  1464.   // Contours types -- obsolete!
  1465.   GLU_CW                                     = 100120;
  1466.   GLU_CCW                                    = 100121;
  1467.   GLU_INTERIOR                               = 100122;
  1468.   GLU_EXTERIOR                               = 100123;
  1469.   GLU_UNKNOWN                                = 100124;
  1470.  
  1471.   // Names without "TESS_" prefix
  1472.   GLU_BEGIN                                  = GLU_TESS_BEGIN;
  1473.   GLU_VERTEX                                 = GLU_TESS_VERTEX;
  1474.   GLU_END                                    = GLU_TESS_END;
  1475.   GLU_ERROR                                  = GLU_TESS_ERROR;
  1476.   GLU_EDGE_FLAG                              = GLU_TESS_EDGE_FLAG;
  1477.  
  1478. type
  1479.   // GLU types
  1480.   TGLUNurbs = record end;
  1481.   TGLUQuadric = record end;
  1482.   TGLUTesselator = record end;
  1483.  
  1484.   PGLUNurbs = ^TGLUNurbs;
  1485.   PGLUQuadric = ^TGLUQuadric;
  1486.   PGLUTesselator = ^TGLUTesselator;
  1487.  
  1488.   // backwards compatibility
  1489.   TGLUNurbsObj = TGLUNurbs;
  1490.   TGLUQuadricObj = TGLUQuadric;
  1491.   TGLUTesselatorObj = TGLUTesselator;
  1492.   TGLUTriangulatorObj = TGLUTesselator;
  1493.  
  1494.   PGLUNurbsObj = PGLUNurbs;
  1495.   PGLUQuadricObj = PGLUQuadric;
  1496.   PGLUTesselatorObj = PGLUTesselator;
  1497.   PGLUTriangulatorObj = PGLUTesselator;
  1498.  
  1499.   // Callback function prototypes
  1500.   // GLUQuadricCallback
  1501.   TGLUQuadricErrorProc = procedure(errorCode: TGLEnum); stdcall;
  1502.  
  1503.   // GLUTessCallback
  1504.   TGLUTessBeginProc = procedure(AType: TGLEnum); stdcall;
  1505.   TGLUTessEdgeFlagProc = procedure(Flag: TGLboolean); stdcall;
  1506.   TGLUTessVertexProc = procedure(VertexData: Pointer); stdcall;
  1507.   TGLUTessEndProc = procedure; stdcall;
  1508.   TGLUTessErrorProc = procedure(ErrNo: TGLEnum); stdcall;
  1509.   TGLUTessCombineProc = procedure(Coords: TVector3d; VertexData: TVector4p; Weight: TVector4f;
  1510.     OutData: PPointer); stdcall;
  1511.   TGLUTessBeginDataProc = procedure(AType: TGLEnum; UserData: Pointer); stdcall;
  1512.   TGLUTessEdgeFlagDataProc = procedure(Flag: TGLboolean; UserData: Pointer); stdcall;
  1513.   TGLUTessVertexDataProc = procedure(VertexData: Pointer; UserData: Pointer); stdcall;
  1514.   TGLUTessEndDataProc = procedure(UserData: Pointer); stdcall;
  1515.   TGLUTessErrorDataProc = procedure(ErrNo: TGLEnum; UserData: Pointer); stdcall;
  1516.   TGLUTessCombineDataProc = procedure(Coords: TVector3d; VertexData: TVector4p; Weight: TVector4f; OutData: PPointer;
  1517.     UserData: Pointer); stdcall;
  1518.  
  1519.   // GLUNurbsCallback
  1520.   TGLUNurbsErrorProc = procedure(ErrorCode: TGLEnum); stdcall;
  1521.  
  1522. var
  1523.   // GL functions and procedures
  1524.   glAccum: procedure(op: TGLuint; value: TGLfloat); stdcall;
  1525.   glAlphaFunc: procedure(func: TGLEnum; ref: TGLclampf); stdcall;
  1526.   glAreTexturesResident: function(n: TGLsizei; Textures: PGLuint; residences: PGLboolean): TGLboolean; stdcall;
  1527.   glArrayElement: procedure(i: TGLint); stdcall;
  1528.   glBegin: procedure(mode: TGLEnum); stdcall;
  1529.   glBindTexture: procedure(target: TGLEnum; texture: TGLuint); stdcall;
  1530.   glBitmap: procedure(width: TGLsizei; height: TGLsizei; xorig, yorig: TGLfloat; xmove: TGLfloat; ymove: TGLfloat;
  1531.     bitmap: Pointer); stdcall;
  1532.   glBlendFunc: procedure(sfactor: TGLEnum; dfactor: TGLEnum); stdcall;
  1533.   glCallList: procedure(list: TGLuint); stdcall;
  1534.   glCallLists: procedure(n: TGLsizei; atype: TGLEnum; lists: Pointer); stdcall;
  1535.   glClear: procedure(mask: TGLbitfield); stdcall;
  1536.   glClearAccum: procedure(red, green, blue, alpha: TGLfloat); stdcall;
  1537.   glClearColor: procedure(red, green, blue, alpha: TGLclampf); stdcall;
  1538.   glClearDepth: procedure(depth: TGLclampd); stdcall;
  1539.   glClearIndex: procedure(c: TGLfloat); stdcall;
  1540.   glClearStencil: procedure(s: TGLint ); stdcall;
  1541.   glClipPlane: procedure(plane: TGLEnum; equation: PGLdouble); stdcall;
  1542.   glColor3b: procedure(red, green, blue: TGLbyte); stdcall;
  1543.   glColor3bv: procedure(v: PGLbyte); stdcall;
  1544.   glColor3d: procedure(red, green, blue: TGLdouble); stdcall;
  1545.   glColor3dv: procedure(v: PGLdouble); stdcall;
  1546.   glColor3f: procedure(red, green, blue: TGLfloat); stdcall;
  1547.   glColor3fv: procedure(v: PGLfloat); stdcall;
  1548.   glColor3i: procedure(red, green, blue: TGLint); stdcall;
  1549.   glColor3iv: procedure(v: PGLint); stdcall;
  1550.   glColor3s: procedure(red, green, blue: TGLshort); stdcall;
  1551.   glColor3sv: procedure(v: PGLshort); stdcall;
  1552.   glColor3ub: procedure(red, green, blue: TGLubyte); stdcall;
  1553.   glColor3ubv: procedure(v: PGLubyte); stdcall;
  1554.   glColor3ui: procedure(red, green, blue: TGLuint); stdcall;
  1555.   glColor3uiv: procedure(v: PGLuint); stdcall;
  1556.   glColor3us: procedure(red, green, blue: TGLushort); stdcall;
  1557.   glColor3usv: procedure(v: PGLushort); stdcall;
  1558.   glColor4b: procedure(red, green, blue, alpha: TGLbyte); stdcall;
  1559.   glColor4bv: procedure(v: PGLbyte); stdcall;
  1560.   glColor4d: procedure(red, green, blue, alpha: TGLdouble ); stdcall;
  1561.   glColor4dv: procedure(v: PGLdouble); stdcall;
  1562.   glColor4f: procedure(red, green, blue, alpha: TGLfloat); stdcall;
  1563.   glColor4fv: procedure(v: PGLfloat); stdcall;
  1564.   glColor4i: procedure(red, green, blue, alpha: TGLint); stdcall;
  1565.   glColor4iv: procedure(v: PGLint); stdcall;
  1566.   glColor4s: procedure(red, green, blue, alpha: TGLshort); stdcall;
  1567.   glColor4sv: procedure(v: TGLshort); stdcall;
  1568.   glColor4ub: procedure(red, green, blue, alpha: TGLubyte); stdcall;
  1569.   glColor4ubv: procedure(v: PGLubyte); stdcall;
  1570.   glColor4ui: procedure(red, green, blue, alpha: TGLuint); stdcall;
  1571.   glColor4uiv: procedure(v: PGLuint); stdcall;
  1572.   glColor4us: procedure(red, green, blue, alpha: TGLushort); stdcall;
  1573.   glColor4usv: procedure(v: PGLushort); stdcall;
  1574.   glColorMask: procedure(red, green, blue, alpha: TGLboolean); stdcall;
  1575.   glColorMaterial: procedure(face: TGLEnum; mode: TGLEnum); stdcall;
  1576.   glColorPointer: procedure(size: TGLint; atype: TGLEnum; stride: TGLsizei; data: pointer); stdcall;
  1577.   glCopyPixels: procedure(x, y: TGLint; width, height: TGLsizei; atype: TGLEnum); stdcall;
  1578.   glCopyTexImage1D: procedure(target: TGLEnum; level: TGLint; internalFormat: TGLEnum; x, y: TGLint; width: TGLsizei;
  1579.     border: TGLint); stdcall;
  1580.   glCopyTexImage2D: procedure(target: TGLEnum; level: TGLint; internalFormat: TGLEnum; x, y: TGLint; width,
  1581.     height: TGLsizei; border: TGLint); stdcall;
  1582.   glCopyTexSubImage1D: procedure(target: TGLEnum; level, xoffset, x, y: TGLint; width: TGLsizei); stdcall;
  1583.   glCopyTexSubImage2D: procedure(target: TGLEnum; level, xoffset, yoffset, x, y: TGLint; width,
  1584.     height: TGLsizei); stdcall;
  1585.   glCullFace: procedure(mode: TGLEnum); stdcall;
  1586.   glDeleteLists: procedure(list: TGLuint; range: TGLsizei); stdcall;
  1587.   glDeleteTextures: procedure(n: TGLsizei; textures: PGLuint); stdcall;
  1588.   glDepthFunc: procedure(func: TGLEnum); stdcall;
  1589.   glDepthMask: procedure(flag: TGLboolean); stdcall;
  1590.   glDepthRange: procedure(zNear, zFar: TGLclampd); stdcall;
  1591.   glDisable: procedure(cap: TGLEnum); stdcall;
  1592.   glDisableClientState: procedure(aarray: TGLEnum); stdcall;
  1593.   glDrawArrays: procedure(mode: TGLEnum; first: TGLint; count: TGLsizei); stdcall;
  1594.   glDrawBuffer: procedure(mode: TGLEnum); stdcall;
  1595.   glDrawElements: procedure(mode: TGLEnum; count: TGLsizei; atype: TGLEnum; indices: Pointer); stdcall;
  1596.   glDrawPixels: procedure(width, height: TGLsizei; format, atype: TGLEnum; pixels: Pointer); stdcall;
  1597.   glEdgeFlag: procedure(flag: TGLboolean); stdcall;
  1598.   glEdgeFlagPointer: procedure(stride: TGLsizei; data: pointer); stdcall;
  1599.   glEdgeFlagv: procedure(flag: PGLboolean); stdcall;
  1600.   glEnable: procedure(cap: TGLEnum); stdcall;
  1601.   glEnableClientState: procedure(aarray: TGLEnum); stdcall;
  1602.   glEnd: procedure; stdcall;
  1603.   glEndList: procedure; stdcall;
  1604.   glEvalCoord1d: procedure(u: TGLdouble); stdcall;
  1605.   glEvalCoord1dv: procedure(u: PGLdouble); stdcall;
  1606.   glEvalCoord1f: procedure(u: TGLfloat); stdcall;
  1607.   glEvalCoord1fv: procedure(u: PGLfloat); stdcall;
  1608.   glEvalCoord2d: procedure(u: TGLdouble; v: TGLdouble); stdcall;
  1609.   glEvalCoord2dv: procedure(u: PGLdouble); stdcall;
  1610.   glEvalCoord2f: procedure(u, v: TGLfloat); stdcall;
  1611.   glEvalCoord2fv: procedure(u: PGLfloat); stdcall;
  1612.   glEvalMesh1: procedure(mode: TGLEnum; i1, i2: TGLint); stdcall;
  1613.   glEvalMesh2: procedure(mode: TGLEnum; i1, i2, j1, j2: TGLint); stdcall;
  1614.   glEvalPoint1: procedure(i: TGLint); stdcall;
  1615.   glEvalPoint2: procedure(i, j: TGLint); stdcall;
  1616.   glFeedbackBuffer: procedure(size: TGLsizei; atype: TGLEnum; buffer: PGLfloat); stdcall;
  1617.   glFinish: procedure; stdcall;
  1618.   glFlush: procedure; stdcall;
  1619.   glFogf: procedure(pname: TGLEnum; param: TGLfloat); stdcall;
  1620.   glFogfv: procedure(pname: TGLEnum; params: PGLfloat); stdcall;
  1621.   glFogi: procedure(pname: TGLEnum; param: TGLint); stdcall;
  1622.   glFogiv: procedure(pname: TGLEnum; params: PGLint); stdcall;
  1623.   glFrontFace: procedure(mode: TGLEnum); stdcall;
  1624.   glFrustum: procedure(left, right, bottom, top, zNear, zFar: TGLdouble); stdcall;
  1625.   glGenLists: function(range: TGLsizei): TGLuint; stdcall;
  1626.   glGenTextures: procedure(n: TGLsizei; textures: PGLuint); stdcall;
  1627.   glGetBooleanv: procedure(pname: TGLEnum; params: PGLboolean); stdcall;
  1628.   glGetClipPlane: procedure(plane: TGLEnum; equation: PGLdouble); stdcall;
  1629.   glGetDoublev: procedure(pname: TGLEnum; params: PGLdouble); stdcall;
  1630.   glGetError: function : TGLuint; stdcall;
  1631.   glGetFloatv: procedure(pname: TGLEnum; params: PGLfloat); stdcall;
  1632.   glGetIntegerv: procedure(pname: TGLEnum; params: PGLint); stdcall;
  1633.   glGetLightfv: procedure(light, pname: TGLEnum; params: PGLfloat); stdcall;
  1634.   glGetLightiv: procedure(light, pname: TGLEnum; params: PGLint); stdcall;
  1635.   glGetMapdv: procedure(target, query: TGLEnum; v: PGLdouble); stdcall;
  1636.   glGetMapfv: procedure(target, query: TGLEnum; v: PGLfloat); stdcall;
  1637.   glGetMapiv: procedure(target, query: TGLEnum; v: PGLint); stdcall;
  1638.   glGetMaterialfv: procedure(face, pname: TGLEnum; params: PGLfloat); stdcall;
  1639.   glGetMaterialiv: procedure(face, pname: TGLEnum; params: PGLint); stdcall;
  1640.   glGetPixelMapfv: procedure(map: TGLEnum; values: PGLfloat); stdcall;
  1641.   glGetPixelMapuiv: procedure(map: TGLEnum; values: PGLuint); stdcall;
  1642.   glGetPixelMapusv: procedure(map: TGLEnum; values: PGLushort); stdcall;
  1643.   glGetPointerv: procedure(pname: TGLEnum; var params); stdcall;
  1644.   glGetPolygonStipple: procedure(mask: PGLubyte); stdcall;
  1645.   glGetString: function(name: TGLEnum): PChar; stdcall;
  1646.   glGetTexEnvfv: procedure(target, pname: TGLEnum; params: PGLfloat); stdcall;
  1647.   glGetTexEnviv: procedure(target, pname: TGLEnum; params: PGLint); stdcall;
  1648.   glGetTexGendv: procedure(coord, pname: TGLEnum; params: PGLdouble); stdcall;
  1649.   glGetTexGenfv: procedure(coord, pname: TGLEnum; params: PGLfloat); stdcall;
  1650.   glGetTexGeniv: procedure(coord, pname: TGLEnum; params: PGLint); stdcall;
  1651.   glGetTexImage: procedure(target: TGLEnum; level: TGLint; format, atype: TGLEnum; pixels: Pointer); stdcall;
  1652.   glGetTexLevelParameterfv: procedure(target: TGLEnum; level: TGLint; pname: TGLEnum; params: PGLfloat); stdcall;
  1653.   glGetTexLevelParameteriv: procedure(target: TGLEnum; level: TGLint; pname: TGLEnum; params: PGLint); stdcall;
  1654.   glGetTexParameterfv: procedure(target, pname: TGLEnum; params: PGLfloat); stdcall;
  1655.   glGetTexParameteriv: procedure(target, pname: TGLEnum; params: PGLint); stdcall;
  1656.   glHint: procedure(target, mode: TGLEnum); stdcall;
  1657.   glIndexMask: procedure(mask: TGLuint); stdcall;
  1658.   glIndexPointer: procedure(atype: TGLEnum; stride: TGLsizei; data: pointer); stdcall;
  1659.   glIndexd: procedure(c: TGLdouble); stdcall;
  1660.   glIndexdv: procedure(c: PGLdouble); stdcall;
  1661.   glIndexf: procedure(c: TGLfloat); stdcall;
  1662.   glIndexfv: procedure(c: PGLfloat); stdcall;
  1663.   glIndexi: procedure(c: TGLint); stdcall;
  1664.   glIndexiv: procedure(c: PGLint); stdcall;
  1665.   glIndexs: procedure(c: TGLshort); stdcall;
  1666.   glIndexsv: procedure(c: PGLshort); stdcall;
  1667.   glIndexub: procedure(c: TGLubyte); stdcall;
  1668.   glIndexubv: procedure(c: PGLubyte); stdcall;
  1669.   glInitNames: procedure; stdcall;
  1670.   glInterleavedArrays: procedure(format: TGLEnum; stride: TGLsizei; data: pointer); stdcall;
  1671.   glIsEnabled: function(cap: TGLEnum): TGLboolean; stdcall;
  1672.   glIsList: function(list: TGLuint): TGLboolean; stdcall;
  1673.   glIsTexture: function(texture: TGLuint): TGLboolean; stdcall;
  1674.   glLightModelf: procedure(pname: TGLEnum; param: TGLfloat); stdcall;
  1675.   glLightModelfv: procedure(pname: TGLEnum; params: PGLfloat); stdcall;
  1676.   glLightModeli: procedure(pname: TGLEnum; param: TGLint); stdcall;
  1677.   glLightModeliv: procedure(pname: TGLEnum; params: PGLint); stdcall;
  1678.   glLightf: procedure(light, pname: TGLEnum; param: TGLfloat); stdcall;
  1679.   glLightfv: procedure(light, pname: TGLEnum; params: PGLfloat); stdcall;
  1680.   glLighti: procedure(light, pname: TGLEnum; param: TGLint); stdcall;
  1681.   glLightiv: procedure(light, pname: TGLEnum; params: PGLint); stdcall;
  1682.   glLineStipple: procedure(factor: TGLint; pattern: TGLushort); stdcall;
  1683.   glLineWidth: procedure(width: TGLfloat); stdcall;
  1684.   glListBase: procedure(base: TGLuint); stdcall;
  1685.   glLoadIdentity: procedure; stdcall;
  1686.   glLoadMatrixd: procedure(m: PGLdouble); stdcall;
  1687.   glLoadMatrixf: procedure(m: PGLfloat); stdcall;
  1688.   glLoadName: procedure(name: TGLuint); stdcall;
  1689.   glLogicOp: procedure(opcode: TGLEnum); stdcall;
  1690.   glMap1d: procedure(target: TGLEnum; u1, u2: TGLdouble; stride, order: TGLint; points: PGLdouble); stdcall;
  1691.   glMap1f: procedure(target: TGLEnum; u1, u2: TGLfloat; stride, order: TGLint; points: PGLfloat);   stdcall;
  1692.   glMap2d: procedure(target: TGLEnum; u1, u2: TGLdouble; ustride, uorder: TGLint; v1, v2: TGLdouble; vstride,
  1693.     vorder: TGLint; points: PGLdouble); stdcall;
  1694.   glMap2f: procedure(target: TGLEnum; u1, u2: TGLfloat; ustride, uorder: TGLint; v1, v2: TGLfloat; vstride,
  1695.     vorder: TGLint; points: PGLfloat); stdcall;
  1696.   glMapGrid1d: procedure(un: TGLint; u1, u2: TGLdouble); stdcall;
  1697.   glMapGrid1f: procedure(un: TGLint; u1, u2: TGLfloat); stdcall;
  1698.   glMapGrid2d: procedure(un: TGLint; u1, u2: TGLdouble; vn: TGLint; v1, v2: TGLdouble); stdcall;
  1699.   glMapGrid2f: procedure(un: TGLint; u1, u2: TGLfloat; vn: TGLint; v1, v2: TGLfloat); stdcall;
  1700.   glMaterialf: procedure(face, pname: TGLEnum; param: TGLfloat); stdcall;
  1701.   glMaterialfv: procedure(face, pname: TGLEnum; params: PGLfloat); stdcall;
  1702.   glMateriali: procedure(face, pname: TGLEnum; param: TGLint); stdcall;
  1703.   glMaterialiv: procedure(face, pname: TGLEnum; params: PGLint); stdcall;
  1704.   glMatrixMode: procedure(mode: TGLEnum); stdcall;
  1705.   glMultMatrixd: procedure(m: PGLdouble); stdcall;
  1706.   glMultMatrixf: procedure(m: PGLfloat); stdcall;
  1707.   glNewList: procedure(list: TGLuint; mode: TGLEnum); stdcall;
  1708.   glNormal3b: procedure(nx, ny, nz: TGLbyte); stdcall;
  1709.   glNormal3bv: procedure(v: PGLbyte); stdcall;
  1710.   glNormal3d: procedure(nx, ny, nz: TGLdouble); stdcall;
  1711.   glNormal3dv: procedure(v: PGLdouble); stdcall;
  1712.   glNormal3f: procedure(nx, ny, nz: TGLfloat); stdcall;
  1713.   glNormal3fv: procedure(v: PGLfloat); stdcall;
  1714.   glNormal3i: procedure(nx, ny, nz: TGLint); stdcall;
  1715.   glNormal3iv: procedure(v: PGLint); stdcall;
  1716.   glNormal3s: procedure(nx, ny, nz: TGLshort); stdcall;
  1717.   glNormal3sv: procedure(v: PGLshort); stdcall;
  1718.   glNormalPointer: procedure(atype: TGLEnum; stride: TGLsizei; data: pointer); stdcall;
  1719.   glOrtho: procedure(left, right, bottom, top, zNear, zFar: TGLdouble); stdcall;
  1720.   glPassThrough: procedure(token: TGLfloat); stdcall;
  1721.   glPixelMapfv: procedure(map: TGLEnum; mapsize: TGLsizei; values: PGLfloat); stdcall;
  1722.   glPixelMapuiv: procedure(map: TGLEnum; mapsize: TGLsizei; values: PGLuint); stdcall;
  1723.   glPixelMapusv: procedure(map: TGLEnum; mapsize: TGLsizei; values: PGLushort); stdcall;
  1724.   glPixelStoref: procedure(pname: TGLEnum; param: TGLfloat); stdcall;
  1725.   glPixelStorei: procedure(pname: TGLEnum; param: TGLint); stdcall;
  1726.   glPixelTransferf: procedure(pname: TGLEnum; param: TGLfloat); stdcall;
  1727.   glPixelTransferi: procedure(pname: TGLEnum; param: TGLint); stdcall;
  1728.   glPixelZoom: procedure(xfactor, yfactor: TGLfloat); stdcall;
  1729.   glPointSize: procedure(size: TGLfloat); stdcall;
  1730.   glPolygonMode: procedure(face, mode: TGLEnum); stdcall;
  1731.   glPolygonOffset: procedure(factor, units: TGLfloat); stdcall;
  1732.   glPolygonStipple: procedure(mask: PGLubyte); stdcall;
  1733.   glPopAttrib: procedure; stdcall;
  1734.   glPopClientAttrib: procedure; stdcall;
  1735.   glPopMatrix: procedure; stdcall;
  1736.   glPopName: procedure; stdcall;
  1737.   glPrioritizeTextures: procedure(n: TGLsizei; textures: PGLuint; priorities: PGLclampf); stdcall;
  1738.   glPushAttrib: procedure(mask: TGLbitfield); stdcall;
  1739.   glPushClientAttrib: procedure(mask: TGLbitfield); stdcall;
  1740.   glPushMatrix: procedure; stdcall;
  1741.   glPushName: procedure(name: TGLuint); stdcall;
  1742.   glRasterPos2d: procedure(x, y: TGLdouble); stdcall;
  1743.   glRasterPos2dv: procedure(v: PGLdouble); stdcall;
  1744.   glRasterPos2f: procedure(x, y: TGLfloat); stdcall;
  1745.   glRasterPos2fv: procedure(v: PGLfloat); stdcall;
  1746.   glRasterPos2i: procedure(x, y: TGLint); stdcall;
  1747.   glRasterPos2iv: procedure(v: PGLint); stdcall;
  1748.   glRasterPos2s: procedure(x, y: PGLshort); stdcall;
  1749.   glRasterPos2sv: procedure(v: PGLshort); stdcall;
  1750.   glRasterPos3d: procedure(x, y, z: TGLdouble); stdcall;
  1751.   glRasterPos3dv: procedure(v: PGLdouble); stdcall;
  1752.   glRasterPos3f: procedure(x, y, z: TGLfloat); stdcall;
  1753.   glRasterPos3fv: procedure(v: PGLfloat); stdcall;
  1754.   glRasterPos3i: procedure(x, y, z: TGLint); stdcall;
  1755.   glRasterPos3iv: procedure(v: PGLint); stdcall;
  1756.   glRasterPos3s: procedure(x, y, z: TGLshort); stdcall;
  1757.   glRasterPos3sv: procedure(v: PGLshort); stdcall;
  1758.   glRasterPos4d: procedure(x, y, z, w: TGLdouble); stdcall;
  1759.   glRasterPos4dv: procedure(v: PGLdouble); stdcall;
  1760.   glRasterPos4f: procedure(x, y, z, w: TGLfloat); stdcall;
  1761.   glRasterPos4fv: procedure(v: PGLfloat); stdcall;
  1762.   glRasterPos4i: procedure(x, y, z, w: TGLint); stdcall;
  1763.   glRasterPos4iv: procedure(v: PGLint); stdcall;
  1764.   glRasterPos4s: procedure(x, y, z, w: TGLshort); stdcall;
  1765.   glRasterPos4sv: procedure(v: PGLshort); stdcall;
  1766.   glReadBuffer: procedure(mode: TGLEnum); stdcall;
  1767.   glReadPixels: procedure(x, y: TGLint; width, height: TGLsizei; format, atype: TGLEnum; pixels: Pointer); stdcall;
  1768.   glRectd: procedure(x1, y1, x2, y2: TGLdouble); stdcall;
  1769.   glRectdv: procedure(v1, v2: PGLdouble); stdcall;
  1770.   glRectf: procedure(x1, y1, x2, y2: TGLfloat); stdcall;
  1771.   glRectfv: procedure(v1, v2: PGLfloat); stdcall;
  1772.   glRecti: procedure(x1, y1, x2, y2: TGLint); stdcall;
  1773.   glRectiv: procedure(v1, v2: PGLint); stdcall;
  1774.   glRects: procedure(x1, y1, x2, y2: TGLshort); stdcall;
  1775.   glRectsv: procedure(v1, v2: PGLshort); stdcall;
  1776.   glRenderMode: function(mode: TGLEnum): TGLint; stdcall;
  1777.   glRotated: procedure(angle, x, y, z: TGLdouble); stdcall;
  1778.   glRotatef: procedure(angle, x, y, z: TGLfloat); stdcall;
  1779.   glScaled: procedure(x, y, z: TGLdouble); stdcall;
  1780.   glScalef: procedure(x, y, z: TGLfloat); stdcall;
  1781.   glScissor: procedure(x, y: TGLint; width, height: TGLsizei); stdcall;
  1782.   glSelectBuffer: procedure(size: TGLsizei; buffer: PGLuint); stdcall;
  1783.   glShadeModel: procedure(mode: TGLEnum); stdcall;
  1784.   glStencilFunc: procedure(func: TGLEnum; ref: TGLint; mask: TGLuint); stdcall;
  1785.   glStencilMask: procedure(mask: TGLuint); stdcall;
  1786.   glStencilOp: procedure(fail, zfail, zpass: TGLEnum); stdcall;
  1787.   glTexCoord1d: procedure(s: TGLdouble); stdcall;
  1788.   glTexCoord1dv: procedure(v: PGLdouble); stdcall;
  1789.   glTexCoord1f: procedure(s: TGLfloat); stdcall;
  1790.   glTexCoord1fv: procedure(v: PGLfloat); stdcall;
  1791.   glTexCoord1i: procedure(s: TGLint); stdcall;
  1792.   glTexCoord1iv: procedure(v: PGLint); stdcall;
  1793.   glTexCoord1s: procedure(s: TGLshort); stdcall;
  1794.   glTexCoord1sv: procedure(v: PGLshort); stdcall;
  1795.   glTexCoord2d: procedure(s, t: TGLdouble); stdcall;
  1796.   glTexCoord2dv: procedure(v: PGLdouble); stdcall;
  1797.   glTexCoord2f: procedure(s, t: TGLfloat); stdcall;
  1798.   glTexCoord2fv: procedure(v: PGLfloat); stdcall;
  1799.   glTexCoord2i: procedure(s, t: TGLint); stdcall;
  1800.   glTexCoord2iv: procedure(v: PGLint); stdcall;
  1801.   glTexCoord2s: procedure(s, t: TGLshort); stdcall;
  1802.   glTexCoord2sv: procedure(v: PGLshort); stdcall;
  1803.   glTexCoord3d: procedure(s, t, r: TGLdouble); stdcall;
  1804.   glTexCoord3dv: procedure(v: PGLdouble); stdcall;
  1805.   glTexCoord3f: procedure(s, t, r: TGLfloat); stdcall;
  1806.   glTexCoord3fv: procedure(v: PGLfloat); stdcall;
  1807.   glTexCoord3i: procedure(s, t, r: TGLint); stdcall;
  1808.   glTexCoord3iv: procedure(v: PGLint); stdcall;
  1809.   glTexCoord3s: procedure(s, t, r: TGLshort); stdcall;
  1810.   glTexCoord3sv: procedure(v: PGLshort); stdcall;
  1811.   glTexCoord4d: procedure(s, t, r, q: TGLdouble); stdcall;
  1812.   glTexCoord4dv: procedure(v: PGLdouble); stdcall;
  1813.   glTexCoord4f: procedure(s, t, r, q: TGLfloat); stdcall;
  1814.   glTexCoord4fv: procedure(v: PGLfloat); stdcall;
  1815.   glTexCoord4i: procedure(s, t, r, q: TGLint); stdcall;
  1816.   glTexCoord4iv: procedure(v: PGLint); stdcall;
  1817.   glTexCoord4s: procedure(s, t, r, q: TGLshort); stdcall;
  1818.   glTexCoord4sv: procedure(v: PGLshort); stdcall;
  1819.   glTexCoordPointer: procedure(size: TGLint; atype: TGLEnum; stride: TGLsizei; data: pointer); stdcall;
  1820.   glTexEnvf: procedure(target, pname: TGLEnum; param: TGLfloat); stdcall;
  1821.   glTexEnvfv: procedure(target, pname: TGLEnum; params: PGLfloat); stdcall;
  1822.   glTexEnvi: procedure(target, pname: TGLEnum; param: TGLint); stdcall;
  1823.   glTexEnviv: procedure(target, pname: TGLEnum; params: PGLint); stdcall;
  1824.   glTexGend: procedure(coord, pname: TGLEnum; param: TGLdouble); stdcall;
  1825.   glTexGendv: procedure(coord, pname: TGLEnum; params: PGLdouble); stdcall;
  1826.   glTexGenf: procedure(coord, pname: TGLEnum; param: TGLfloat); stdcall;
  1827.   glTexGenfv: procedure(coord, pname: TGLEnum; params: PGLfloat); stdcall;
  1828.   glTexGeni: procedure(coord, pname: TGLEnum; param: TGLint); stdcall;
  1829.   glTexGeniv: procedure(coord, pname: TGLEnum; params: PGLint); stdcall;
  1830.   glTexImage1D: procedure(target: TGLEnum; level, internalformat: TGLint; width: TGLsizei; border: TGLint; format,
  1831.     atype: TGLEnum; pixels: Pointer); stdcall;
  1832.   glTexImage2D: procedure(target: TGLEnum; level, internalformat: TGLint; width, height: TGLsizei; border: TGLint;
  1833.     format, atype: TGLEnum; Pixels:Pointer); stdcall;
  1834.   glTexParameterf: procedure(target, pname: TGLEnum; param: TGLfloat); stdcall;
  1835.   glTexParameterfv: procedure(target, pname: TGLEnum; params: PGLfloat); stdcall;
  1836.   glTexParameteri: procedure(target, pname: TGLEnum; param: TGLint); stdcall;
  1837.   glTexParameteriv: procedure(target, pname: TGLEnum; params: PGLint); stdcall;
  1838.   glTexSubImage1D: procedure(target: TGLEnum; level, xoffset: TGLint; width: TGLsizei; format, atype: TGLEnum;
  1839.     pixels: Pointer); stdcall;
  1840.   glTexSubImage2D: procedure(target: TGLEnum; level, xoffset, yoffset: TGLint; width, height: TGLsizei; format,
  1841.     atype: TGLEnum; pixels: Pointer); stdcall;
  1842.   glTranslated: procedure(x, y, z: TGLdouble); stdcall;
  1843.   glTranslatef: procedure(x, y, z: TGLfloat); stdcall;
  1844.   glVertex2d: procedure(x, y: TGLdouble); stdcall;
  1845.   glVertex2dv: procedure(v: PGLdouble); stdcall;
  1846.   glVertex2f: procedure(x, y: TGLfloat); stdcall;
  1847.   glVertex2fv: procedure(v: PGLfloat); stdcall;
  1848.   glVertex2i: procedure(x, y: TGLint); stdcall;
  1849.   glVertex2iv: procedure(v: PGLint); stdcall;
  1850.   glVertex2s: procedure(x, y: TGLshort); stdcall;
  1851.   glVertex2sv: procedure(v: PGLshort); stdcall;
  1852.   glVertex3d: procedure(x, y, z: TGLdouble); stdcall;
  1853.   glVertex3dv: procedure(v: PGLdouble); stdcall;
  1854.   glVertex3f: procedure(x, y, z: TGLfloat); stdcall;
  1855.   glVertex3fv: procedure(v: PGLfloat); stdcall;
  1856.   glVertex3i: procedure(x, y, z: TGLint); stdcall;
  1857.   glVertex3iv: procedure(v: PGLint); stdcall;
  1858.   glVertex3s: procedure(x, y, z: TGLshort); stdcall;
  1859.   glVertex3sv: procedure(v: PGLshort); stdcall;
  1860.   glVertex4d: procedure(x, y, z, w: TGLdouble); stdcall;
  1861.   glVertex4dv: procedure(v: PGLdouble); stdcall;
  1862.   glVertex4f: procedure(x, y, z, w: TGLfloat); stdcall;
  1863.   glVertex4fv: procedure(v: PGLfloat); stdcall;
  1864.   glVertex4i: procedure(x, y, z, w: TGLint); stdcall;
  1865.   glVertex4iv: procedure(v: PGLint); stdcall;
  1866.   glVertex4s: procedure(x, y, z, w: TGLshort); stdcall;
  1867.   glVertex4sv: procedure(v: PGLshort); stdcall;
  1868.   glVertexPointer: procedure(size: TGLint; atype: TGLEnum; stride: TGLsizei; data: pointer); stdcall;
  1869.   glViewport: procedure(x, y: TGLint; width, height: TGLsizei); stdcall;
  1870.  
  1871.   // GL 1.2
  1872.   glDrawRangeElements: procedure(mode: TGLEnum; Astart, Aend: TGLuint; count: TGLsizei; Atype: TGLEnum;
  1873.     indices: Pointer); stdcall;
  1874.   glTexImage3D: procedure(target: TGLEnum; level: TGLint; internalformat: TGLEnum; width, height, depth: TGLsizei;
  1875.     border: TGLint; format: TGLEnum; Atype: TGLEnum; pixels: Pointer); stdcall;
  1876.  
  1877.   // GL 1.2 ARB imaging
  1878.   glBlendColor: procedure(red, green, blue, alpha: TGLclampf); stdcall;
  1879.   glBlendEquation: procedure(mode: TGLEnum); stdcall;
  1880.   glColorSubTable: procedure(target: TGLEnum; start, count: TGLsizei; format, Atype: TGLEnum; data: Pointer); stdcall;
  1881.   glCopyColorSubTable: procedure(target: TGLEnum; start: TGLsizei; x, y: TGLint; width: TGLsizei); stdcall;
  1882.   glColorTable: procedure(target, internalformat: TGLEnum; width: TGLsizei; format, Atype: TGLEnum;
  1883.     table: Pointer); stdcall;
  1884.   glCopyColorTable: procedure(target, internalformat: TGLEnum; x, y: TGLint; width: TGLsizei); stdcall;
  1885.   glColorTableParameteriv: procedure(target, pname: TGLEnum; params: PGLint); stdcall;
  1886.   glColorTableParameterfv: procedure(target, pname: TGLEnum; params: PGLfloat); stdcall;
  1887.   glGetColorTable: procedure(target, format, Atype: TGLEnum; table: Pointer); stdcall;
  1888.   glGetColorTableParameteriv: procedure(target, pname: TGLEnum; params: PGLint); stdcall;
  1889.   glGetColorTableParameterfv: procedure(target, pname: TGLEnum; params: PGLfloat); stdcall;
  1890.   glConvolutionFilter1D: procedure(target, internalformat: TGLEnum; width: TGLsizei; format, Atype: TGLEnum;
  1891.     image: Pointer); stdcall;
  1892.   glConvolutionFilter2D: procedure(target, internalformat: TGLEnum; width, height: TGLsizei; format, Atype: TGLEnum;
  1893.     image: Pointer); stdcall;
  1894.   glCopyConvolutionFilter1D: procedure(target, internalformat: TGLEnum; x, y: TGLint; width: TGLsizei); stdcall;
  1895.   glCopyConvolutionFilter2D: procedure(target, internalformat: TGLEnum; x, y: TGLint; width, height: TGLsizei); stdcall;
  1896.   glGetConvolutionFilter: procedure(target, internalformat, Atype: TGLEnum; image: Pointer); stdcall;
  1897.   glSeparableFilter2D: procedure(target, internalformat: TGLEnum; width, height: TGLsizei; format, Atype: TGLEnum; row,
  1898.     column: Pointer); stdcall;
  1899.   glGetSeparableFilter: procedure(target, format, Atype: TGLEnum; row, column, span: Pointer); stdcall;
  1900.   glConvolutionParameteri: procedure(target, pname: TGLEnum; param: TGLint); stdcall;
  1901.   glConvolutionParameteriv: procedure(target, pname: TGLEnum; params: PGLint); stdcall;
  1902.   glConvolutionParameterf: procedure(target, pname: TGLEnum; param: TGLfloat); stdcall;
  1903.   glConvolutionParameterfv: procedure(target, pname: TGLEnum; params: PGLfloat); stdcall;
  1904.   glGetConvolutionParameteriv: procedure(target, pname: TGLEnum; params: PGLint); stdcall;
  1905.   glGetConvolutionParameterfv: procedure(target, pname: TGLEnum; params: PGLfloat); stdcall;
  1906.   glHistogram: procedure(target: TGLEnum; width: TGLsizei; internalformat: TGLEnum; sink: TGLboolean); stdcall;
  1907.   glResetHistogram: procedure(target: TGLEnum); stdcall;
  1908.   glGetHistogram: procedure(target: TGLEnum; reset: TGLboolean; format, Atype: TGLEnum; values: Pointer); stdcall;
  1909.   glGetHistogramParameteriv: procedure(target, pname: TGLEnum; params: PGLint); stdcall;
  1910.   glGetHistogramParameterfv: procedure(target, pname: TGLEnum; params: PGLfloat); stdcall;
  1911.   glMinmax: procedure(target, internalformat: TGLEnum; sink: TGLboolean); stdcall;
  1912.   glResetMinmax: procedure(target: TGLEnum); stdcall;
  1913.   glGetMinmax: procedure(target: TGLEnum; reset: TGLboolean; format, Atype: TGLEnum; values: Pointer); stdcall;
  1914.   glGetMinmaxParameteriv: procedure(target, pname: TGLEnum; params: PGLint); stdcall;
  1915.   glGetMinmaxParameterfv: procedure(target, pname: TGLEnum; params: PGLfloat); stdcall;
  1916.  
  1917.   // GL utility functions and procedures
  1918.   gluErrorString: function(errCode: TGLEnum): PChar; stdcall;
  1919.   gluGetString: function(name: TGLEnum): PChar; stdcall;
  1920.   gluOrtho2D: procedure(left, right, bottom, top: TGLdouble); stdcall;
  1921.   gluPerspective: procedure(fovy, aspect, zNear, zFar: TGLdouble); stdcall;
  1922.   gluPickMatrix: procedure(x, y, width, height: TGLdouble; viewport: TVector4i); stdcall;
  1923.   gluLookAt: procedure(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz: TGLdouble); stdcall;
  1924.   gluProject: function(objx, objy, objz: TGLdouble; modelMatrix: TMatrix4d; projMatrix: TMatrix4d; viewport: TVector4i;
  1925.     winx, winy, winz: PGLdouble): TGLint; stdcall;
  1926.   gluUnProject: function(winx, winy, winz: TGLdouble; modelMatrix: TMatrix4d; projMatrix: TMatrix4d; viewport: TVector4i;
  1927.     objx, objy, objz: PGLdouble): TGLint; stdcall;
  1928.   gluScaleImage: function(format: TGLEnum; widthin, heightin: TGLint; typein: TGLEnum; datain: Pointer; widthout,
  1929.     heightout: TGLint; typeout: TGLEnum; dataout: Pointer): TGLint; stdcall;
  1930.   gluBuild1DMipmaps: function(target: TGLEnum; components, width: TGLint; format, atype: TGLEnum;
  1931.     data: Pointer): TGLint; stdcall;
  1932.   gluBuild2DMipmaps: function(target: TGLEnum; components, width, height: TGLint; format, atype: TGLEnum;
  1933.     Data: Pointer): TGLint; stdcall;
  1934.   gluNewQuadric: function : PGLUquadric; stdcall;
  1935.   gluDeleteQuadric: procedure(state: PGLUquadric); stdcall;
  1936.   gluQuadricNormals: procedure(quadObject: PGLUquadric; normals: TGLEnum); stdcall;
  1937.   gluQuadricTexture: procedure(quadObject: PGLUquadric; textureCoords: TGLboolean); stdcall;
  1938.   gluQuadricOrientation: procedure(quadObject: PGLUquadric; orientation: TGLEnum); stdcall;
  1939.   gluQuadricDrawStyle: procedure(quadObject: PGLUquadric; drawStyle: TGLEnum); stdcall;
  1940.   gluCylinder: procedure(quadObject: PGLUquadric; baseRadius, topRadius, height: TGLdouble; slices,
  1941.     stacks: TGLint); stdcall;
  1942.   gluDisk: procedure(quadObject: PGLUquadric; innerRadius, outerRadius: TGLdouble; slices, loops: TGLint); stdcall;
  1943.   gluPartialDisk: procedure(quadObject: PGLUquadric; innerRadius, outerRadius: TGLdouble; slices, loops: TGLint;
  1944.     startAngle, sweepAngle: TGLdouble); stdcall;
  1945.   gluSphere: procedure(quadObject: PGLUquadric; radius: TGLdouble; slices, stacks: TGLint); stdcall;
  1946.   gluQuadricCallback: procedure(quadObject: PGLUquadric; which: TGLEnum; fn: TGLUQuadricErrorProc); stdcall;
  1947.   gluNewTess: function : PGLUtesselator; stdcall;
  1948.   gluDeleteTess: procedure(tess: PGLUtesselator); stdcall;
  1949.   gluTessBeginPolygon: procedure(tess: PGLUtesselator; polygon_data: Pointer); stdcall;
  1950.   gluTessBeginContour: procedure(tess: PGLUtesselator); stdcall;
  1951.   gluTessVertex: procedure(tess: PGLUtesselator; coords: TVector3d; data: Pointer); stdcall;
  1952.   gluTessEndContour: procedure(tess: PGLUtesselator); stdcall;
  1953.   gluTessEndPolygon: procedure(tess: PGLUtesselator); stdcall;
  1954.   gluTessProperty: procedure(tess: PGLUtesselator; which: TGLEnum; value: TGLdouble); stdcall;
  1955.   gluTessNormal: procedure(tess: PGLUtesselator; x, y, z: TGLdouble); stdcall;
  1956.   gluTessCallback: procedure(tess: PGLUtesselator; which: TGLEnum; fn: Pointer); stdcall;
  1957.   gluGetTessProperty: procedure(tess: PGLUtesselator; which: TGLEnum; value: PGLdouble); stdcall;
  1958.   gluNewNurbsRenderer: function : PGLUnurbs; stdcall;
  1959.   gluDeleteNurbsRenderer: procedure(nobj: PGLUnurbs); stdcall;
  1960.   gluBeginSurface: procedure(nobj: PGLUnurbs); stdcall;
  1961.   gluBeginCurve: procedure(nobj: PGLUnurbs); stdcall;
  1962.   gluEndCurve: procedure(nobj: PGLUnurbs); stdcall;
  1963.   gluEndSurface: procedure(nobj: PGLUnurbs); stdcall;
  1964.   gluBeginTrim: procedure(nobj: PGLUnurbs); stdcall;
  1965.   gluEndTrim: procedure(nobj: PGLUnurbs); stdcall;
  1966.   gluPwlCurve: procedure(nobj: PGLUnurbs; count: TGLint; points: PGLfloat; stride: TGLint; atype: TGLEnum); stdcall;
  1967.   gluNurbsCurve: procedure(nobj: PGLUnurbs; nknots: TGLint; knot: PGLfloat; stride: TGLint; ctlarray: PGLfloat;
  1968.     order: TGLint; atype: TGLEnum); stdcall;
  1969.   gluNurbsSurface: procedure(nobj: PGLUnurbs; sknot_count: TGLint; sknot: PGLfloat; tknot_count: TGLint;
  1970.     tknot: PGLfloat; s_stride, t_stride: TGLint; ctlarray: PGLfloat; sorder, torder: TGLint; atype: TGLEnum); stdcall;
  1971.   gluLoadSamplingMatrices: procedure(nobj: PGLUnurbs; modelMatrix, projMatrix: TMatrix4f; viewport: TVector4i); stdcall;
  1972.   gluNurbsProperty: procedure(nobj: PGLUnurbs; aproperty: TGLEnum; value: TGLfloat); stdcall;
  1973.   gluGetNurbsProperty: procedure(nobj: PGLUnurbs; aproperty: TGLEnum; value: PGLfloat); stdcall;
  1974.   gluNurbsCallback: procedure(nobj: PGLUnurbs; which: TGLEnum; fn: TGLUNurbsErrorProc); stdcall;
  1975.   gluBeginPolygon: procedure(tess: PGLUtesselator); stdcall;
  1976.   gluNextContour: procedure(tess: PGLUtesselator; atype: TGLEnum); stdcall;
  1977.   gluEndPolygon: procedure(tess: PGLUtesselator); stdcall;
  1978.  
  1979.   // window support functions
  1980.   wglGetProcAddress: function(ProcName: PChar): Pointer; stdcall;
  1981.  
  1982.   // ARB_multitexture
  1983.   glMultiTexCoord1dARB: procedure(target: TGLenum; s: TGLdouble); stdcall;
  1984.   glMultiTexCoord1dVARB: procedure(target: TGLenum; v: PGLdouble); stdcall;
  1985.   glMultiTexCoord1fARBP: procedure(target: TGLenum; s: TGLfloat); stdcall;
  1986.   glMultiTexCoord1fVARB: procedure(target: TGLenum; v: TGLfloat); stdcall;
  1987.   glMultiTexCoord1iARB: procedure(target: TGLenum; s: TGLint); stdcall;
  1988.   glMultiTexCoord1iVARB: procedure(target: TGLenum; v: PGLInt); stdcall;
  1989.   glMultiTexCoord1sARBP: procedure(target: TGLenum; s: TGLshort); stdcall;
  1990.   glMultiTexCoord1sVARB: procedure(target: TGLenum; v: PGLshort); stdcall;
  1991.   glMultiTexCoord2dARB: procedure(target: TGLenum; s, t: TGLdouble); stdcall;
  1992.   glMultiTexCoord2dvARB: procedure(target: TGLenum; v: PGLdouble); stdcall;
  1993.   glMultiTexCoord2fARB: procedure(target: TGLenum; s, t: TGLfloat); stdcall;
  1994.   glMultiTexCoord2fvARB: procedure(target: TGLenum; v: PGLfloat); stdcall;
  1995.   glMultiTexCoord2iARB: procedure(target: TGLenum; s, t: TGLint); stdcall;
  1996.   glMultiTexCoord2ivARB: procedure(target: TGLenum; v: PGLint); stdcall;
  1997.   glMultiTexCoord2sARB: procedure(target: TGLenum; s, t: TGLshort); stdcall;
  1998.   glMultiTexCoord2svARB: procedure(target: TGLenum; v: PGLshort); stdcall;
  1999.   glMultiTexCoord3dARB: procedure(target: TGLenum; s, t, r: TGLdouble); stdcall;
  2000.   glMultiTexCoord3dvARB: procedure(target: TGLenum; v: PGLdouble); stdcall;
  2001.   glMultiTexCoord3fARB: procedure(target: TGLenum; s, t, r: TGLfloat); stdcall;
  2002.   glMultiTexCoord3fvARB: procedure(target: TGLenum; v: PGLfloat); stdcall;
  2003.   glMultiTexCoord3iARB: procedure(target: TGLenum; s, t, r: TGLint); stdcall;
  2004.   glMultiTexCoord3ivARB: procedure(target: TGLenum; v: PGLint); stdcall;
  2005.   glMultiTexCoord3sARB: procedure(target: TGLenum; s, t, r: TGLshort); stdcall;
  2006.   glMultiTexCoord3svARB: procedure(target: TGLenum; v: PGLshort); stdcall;
  2007.   glMultiTexCoord4dARB: procedure(target: TGLenum; s, t, r, q: TGLdouble); stdcall;
  2008.   glMultiTexCoord4dvARB: procedure(target: TGLenum; v: PGLdouble); stdcall;
  2009.   glMultiTexCoord4fARB: procedure(target: TGLenum; s, t, r, q: TGLfloat); stdcall;
  2010.   glMultiTexCoord4fvARB: procedure(target: TGLenum; v: PGLfloat); stdcall;
  2011.   glMultiTexCoord4iARB: procedure(target: TGLenum; s, t, r, q: TGLint); stdcall;
  2012.   glMultiTexCoord4ivARB: procedure(target: TGLenum; v: PGLint); stdcall;
  2013.   glMultiTexCoord4sARB: procedure(target: TGLenum; s, t, r, q: TGLshort); stdcall;
  2014.   glMultiTexCoord4svARB: procedure(target: TGLenum; v: PGLshort); stdcall;
  2015.   glActiveTextureARB: procedure(target: TGLenum); stdcall;
  2016.   glClientActiveTextureARB: procedure(target: TGLenum); stdcall;
  2017.  
  2018.   // GLU extensions
  2019.   gluNurbsCallbackDataEXT: procedure(nurb: PGLUnurbs; userData: Pointer); stdcall;
  2020.   gluNewNurbsTessellatorEXT: function: PGLUnurbs; stdcall;
  2021.   gluDeleteNurbsTessellatorEXT: procedure(nurb: PGLUnurbs); stdcall;
  2022.  
  2023.   // Extension functions
  2024.   glAreTexturesResidentEXT: function(n: TGLsizei; textures: PGLuint; residences: PGLBoolean): TGLboolean; stdcall;
  2025.   glArrayElementArrayEXT: procedure(mode: TGLEnum; count: TGLsizei; pi: Pointer); stdcall;
  2026.   glBeginSceneEXT: procedure; stdcall;
  2027.   glBindTextureEXT: procedure(target: TGLEnum; texture: TGLuint); stdcall;
  2028.   glColorTableEXT: procedure(target, internalFormat: TGLEnum; width: TGLsizei; format, atype: TGLEnum;
  2029.     data: Pointer); stdcall;
  2030.   glColorSubTableExt: procedure(target: TGLEnum; start, count: TGLsizei; format, atype: TGLEnum; data: Pointer); stdcall;
  2031.   glCopyTexImage1DEXT: procedure(target: TGLEnum; level: TGLint; internalFormat: TGLEnum; x, y: TGLint;
  2032.     width: TGLsizei; border: TGLint); stdcall;
  2033.   glCopyTexSubImage1DEXT: procedure(target: TGLEnum; level, xoffset, x, y: TGLint; width: TGLsizei); stdcall;
  2034.   glCopyTexImage2DEXT: procedure(target: TGLEnum; level: TGLint; internalFormat: TGLEnum; x, y: TGLint; width,
  2035.     height: TGLsizei; border: TGLint); stdcall;
  2036.   glCopyTexSubImage2DEXT: procedure(target: TGLEnum; level, xoffset, yoffset, x, y: TGLint; width,
  2037.     height: TGLsizei); stdcall;
  2038.   glCopyTexSubImage3DEXT: procedure(target: TGLEnum; level, xoffset, yoffset, zoffset, x, y: TGLint; width,
  2039.     height: TGLsizei); stdcall;
  2040.   glDeleteTexturesEXT: procedure(n: TGLsizei; textures: PGLuint); stdcall;
  2041.   glEndSceneEXT: procedure; stdcall;
  2042.   glGenTexturesEXT: procedure(n: TGLsizei; textures: PGLuint); stdcall;
  2043.   glGetColorTableEXT: procedure(target, format, atype: TGLEnum; data: Pointer); stdcall;
  2044.   glGetColorTablePameterfvEXT: procedure(target, pname: TGLEnum; params: Pointer); stdcall;
  2045.   glGetColorTablePameterivEXT: procedure(target, pname: TGLEnum; params: Pointer); stdcall;
  2046.   glIndexFuncEXT: procedure(func: TGLEnum; ref: TGLfloat); stdcall;
  2047.   glIndexMaterialEXT: procedure(face: TGLEnum; mode: TGLEnum); stdcall;
  2048.   glIsTextureEXT: function(texture: TGLuint): TGLboolean; stdcall;
  2049.   glLockArraysEXT: procedure(first: TGLint; count: TGLsizei); stdcall;
  2050.   glPolygonOffsetEXT: procedure(factor, bias: TGLfloat); stdcall;
  2051.   glPrioritizeTexturesEXT: procedure(n: TGLsizei; textures: PGLuint; priorities: PGLclampf); stdcall;
  2052.   glTexSubImage1DEXT: procedure(target: TGLEnum; level, xoffset: TGLint; width: TGLsizei; format, Atype: TGLEnum;
  2053.     pixels: Pointer); stdcall;
  2054.   glTexSubImage2DEXT: procedure(target: TGLEnum; level, xoffset, yoffset: TGLint; width, height: TGLsizei; format,
  2055.     Atype: TGLEnum; pixels: Pointer); stdcall;
  2056.   glTexSubImage3DEXT: procedure(target: TGLEnum; level, xoffset, yoffset, zoffset: TGLint; width, height,
  2057.     depth: TGLsizei; format, Atype: TGLEnum; pixels: Pointer); stdcall;
  2058.   glUnlockArraysEXT: procedure; stdcall;
  2059.  
  2060.   // EXT_vertex_array
  2061.   glArrayElementEXT: procedure(I: TGLint); stdcall;
  2062.   glColorPointerEXT: procedure(size: TGLInt; atype: TGLenum; stride, count: TGLsizei; data: Pointer); stdcall;
  2063.   glDrawArraysEXT: procedure(mode: TGLenum; first: TGLInt; count: TGLsizei); stdcall;
  2064.   glEdgeFlagPointerEXT: procedure(stride, count: TGLsizei; data: PGLboolean); stdcall;
  2065.   glGetPointervEXT: procedure(pname: TGLEnum; var params); stdcall;
  2066.   glIndexPointerEXT: procedure(AType: TGLEnum; stride, count: TGLsizei; P: Pointer); stdcall;
  2067.   glNormalPointerEXT: procedure(AType: TGLsizei; stride, count: TGLsizei; P: Pointer); stdcall;
  2068.   glTexCoordPointerEXT: procedure(size: TGLint; AType: TGLenum;  stride, count: TGLsizei; P: Pointer); stdcall;
  2069.   glVertexPointerEXT: procedure(size: TGLint; AType: TGLenum; stride, count: TGLsizei; P: Pointer); stdcall;
  2070.  
  2071.   // EXT_compiled_vertex_array
  2072.   glLockArrayEXT: procedure(first: TGLint; count: TGLsizei); stdcall;
  2073.   glUnlockArrayEXT: procedure; stdcall;
  2074.  
  2075.   // EXT_cull_vertex
  2076.   glCullParameterdvEXT: procedure(pname: TGLenum; params: PGLdouble); stdcall;
  2077.   glCullParameterfvEXT: procedure(pname: TGLenum; params: PGLfloat); stdcall;
  2078.  
  2079.   // WIN_swap_hint
  2080.   glAddSwapHintRectWIN: procedure(x, y: TGLint; width, height: TGLsizei); stdcall;
  2081.  
  2082.   // EXT_point_parameter
  2083.   glPointParameterfEXT: procedure(pname: TGLenum; param: TGLfloat); stdcall;
  2084.   glPointParameterfvEXT: procedure(pname: TGLenum; params: PGLfloat); stdcall;
  2085.  
  2086. //----------------------------------------------------------------------------------------------------------------------
  2087.  
  2088. procedure CloseOpenGL;
  2089. function InitOpenGL: Boolean;
  2090. function InitOpenGLFromLibrary(GL_Name, GLU_Name: String): Boolean;
  2091.  
  2092. procedure ClearExtensions;
  2093. procedure ActivateRenderingContext(DC: HDC; RC: HGLRC);
  2094. function  CreateRenderingContext(DC: HDC; Options: TRCOptions; ColorBits, StencilBits, AccumBits, AuxBuffers: Integer;
  2095.   Layer: Integer): HGLRC;
  2096. procedure DeactivateRenderingContext;
  2097. procedure DestroyRenderingContext(RC: HGLRC);
  2098. procedure ReadExtensions;
  2099. procedure ReadImplementationProperties;
  2100. //----------------------------------------------------------------------------------------------------------------------
  2101.  
  2102. implementation
  2103.  
  2104. uses
  2105.   SysUtils;
  2106.  
  2107. threadvar
  2108.   LastPixelFormat: Integer;
  2109.  
  2110. var
  2111.   GLHandle, GLUHandle: HINST;
  2112.  
  2113. //----------------------------------------------------------------------------------------------------------------------
  2114.  
  2115. procedure ClearProcAddresses;
  2116.  
  2117. begin
  2118.   glAccum := nil;
  2119.   glAlphaFunc := nil;
  2120.   glAreTexturesResident := nil;
  2121.   glArrayElement := nil;
  2122.   glBegin := nil;
  2123.   glBindTexture := nil;
  2124.   glBitmap := nil;
  2125.   glBlendFunc := nil;
  2126.   glCallList := nil;
  2127.   glCallLists := nil;
  2128.   glClear := nil;
  2129.   glClearAccum := nil;
  2130.   glClearColor := nil;
  2131.   glClearDepth := nil;
  2132.   glClearIndex := nil;
  2133.   glClearStencil := nil;
  2134.   glClipPlane := nil;
  2135.   glColor3b := nil;
  2136.   glColor3bv := nil;
  2137.   glColor3d := nil;
  2138.   glColor3dv := nil;
  2139.   glColor3f := nil;
  2140.   glColor3fv := nil;
  2141.   glColor3i := nil;
  2142.   glColor3iv := nil;
  2143.   glColor3s := nil;
  2144.   glColor3sv := nil;
  2145.   glColor3ub := nil;
  2146.   glColor3ubv := nil;
  2147.   glColor3ui := nil;
  2148.   glColor3uiv := nil;
  2149.   glColor3us := nil;
  2150.   glColor3usv := nil;
  2151.   glColor4b := nil;
  2152.   glColor4bv := nil;
  2153.   glColor4d := nil;
  2154.   glColor4dv := nil;
  2155.   glColor4f := nil;
  2156.   glColor4fv := nil;
  2157.   glColor4i := nil;
  2158.   glColor4iv := nil;
  2159.   glColor4s := nil;
  2160.   glColor4sv := nil;
  2161.   glColor4ub := nil;
  2162.   glColor4ubv := nil;
  2163.   glColor4ui := nil;
  2164.   glColor4uiv := nil;
  2165.   glColor4us := nil;
  2166.   glColor4usv := nil;
  2167.   glColorMask := nil;
  2168.   glColorMaterial := nil;
  2169.   glColorPointer := nil;
  2170.   glCopyPixels := nil;                   
  2171.   glCopyTexImage1D := nil;               
  2172.   glCopyTexImage2D := nil;               
  2173.   glCopyTexSubImage1D := nil;            
  2174.   glCopyTexSubImage2D := nil;            
  2175.   glCullFace := nil;                     
  2176.   glDeleteLists := nil;                  
  2177.   glDeleteTextures := nil;               
  2178.   glDepthFunc := nil;                    
  2179.   glDepthMask := nil;                    
  2180.   glDepthRange := nil;                   
  2181.   glDisable := nil;                      
  2182.   glDisableClientState := nil;           
  2183.   glDrawArrays := nil;                   
  2184.   glDrawBuffer := nil;                   
  2185.   glDrawElements := nil;                 
  2186.   glDrawPixels := nil;                   
  2187.   glEdgeFlag := nil;                     
  2188.   glEdgeFlagPointer := nil;              
  2189.   glEdgeFlagv := nil;                    
  2190.   glEnable := nil;                       
  2191.   glEnableClientState := nil;
  2192.   glEnd := nil;                          
  2193.   glEndList := nil;                      
  2194.   glEvalCoord1d := nil;                  
  2195.   glEvalCoord1dv := nil;
  2196.   glEvalCoord1f := nil;                  
  2197.   glEvalCoord1fv := nil;                 
  2198.   glEvalCoord2d := nil;                  
  2199.   glEvalCoord2dv := nil;                 
  2200.   glEvalCoord2f := nil;                  
  2201.   glEvalCoord2fv := nil;
  2202.   glEvalMesh1 := nil;                    
  2203.   glEvalMesh2 := nil;                    
  2204.   glEvalPoint1 := nil;                   
  2205.   glEvalPoint2 := nil;                   
  2206.   glFeedbackBuffer := nil;               
  2207.   glFinish := nil;                       
  2208.   glFlush := nil;                        
  2209.   glFogf := nil;                         
  2210.   glFogfv := nil;                        
  2211.   glFogi := nil;                         
  2212.   glFogiv := nil;                        
  2213.   glFrontFace := nil;
  2214.   glFrustum := nil;                      
  2215.   glGenLists := nil;                     
  2216.   glGenTextures := nil;                  
  2217.   glGetBooleanv := nil;                  
  2218.   glGetClipPlane := nil;                 
  2219.   glGetDoublev := nil;                   
  2220.   glGetError := nil;                     
  2221.   glGetFloatv := nil;                    
  2222.   glGetIntegerv := nil;                  
  2223.   glGetLightfv := nil;                   
  2224.   glGetLightiv := nil;                   
  2225.   glGetMapdv := nil;                     
  2226.   glGetMapfv := nil;                     
  2227.   glGetMapiv := nil;
  2228.   glGetMaterialfv := nil;                
  2229.   glGetMaterialiv := nil;                
  2230.   glGetPixelMapfv := nil;                
  2231.   glGetPixelMapuiv := nil;
  2232.   glGetPixelMapusv := nil;               
  2233.   glGetPointerv := nil;                  
  2234.   glGetPolygonStipple := nil;
  2235.   glGetString := nil;                    
  2236.   glGetTexEnvfv := nil;                  
  2237.   glGetTexEnviv := nil;                  
  2238.   glGetTexGendv := nil;                  
  2239.   glGetTexGenfv := nil;                  
  2240.   glGetTexGeniv := nil;                  
  2241.   glGetTexImage := nil;                  
  2242.   glGetTexLevelParameterfv := nil;       
  2243.   glGetTexLevelParameteriv := nil;       
  2244.   glGetTexParameterfv := nil;            
  2245.   glGetTexParameteriv := nil;            
  2246.   glHint := nil;                         
  2247.   glIndexMask := nil;                    
  2248.   glIndexPointer := nil;                 
  2249.   glIndexd := nil;                       
  2250.   glIndexdv := nil;                      
  2251.   glIndexf := nil;                       
  2252.   glIndexfv := nil;                      
  2253.   glIndexi := nil;                       
  2254.   glIndexiv := nil;                      
  2255.   glIndexs := nil;                       
  2256.   glIndexsv := nil;                      
  2257.   glIndexub := nil;                      
  2258.   glIndexubv := nil;                     
  2259.   glInitNames := nil;                    
  2260.   glInterleavedArrays := nil;            
  2261.   glIsEnabled := nil;                    
  2262.   glIsList := nil;
  2263.   glIsTexture := nil;
  2264.   glLightModelf := nil;                  
  2265.   glLightModelfv := nil;                 
  2266.   glLightModeli := nil;                  
  2267.   glLightModeliv := nil;
  2268.   glLightf := nil;                       
  2269.   glLightfv := nil;                      
  2270.   glLighti := nil;                       
  2271.   glLightiv := nil;                      
  2272.   glLineStipple := nil;                  
  2273.   glLineWidth := nil;                    
  2274.   glListBase := nil;                     
  2275.   glLoadIdentity := nil;                 
  2276.   glLoadMatrixd := nil;                  
  2277.   glLoadMatrixf := nil;                  
  2278.   glLoadName := nil;                     
  2279.   glLogicOp := nil;                      
  2280.   glMap1d := nil;                        
  2281.   glMap1f := nil;                        
  2282.   glMap2d := nil;                        
  2283.   glMap2f := nil;                        
  2284.   glMapGrid1d := nil;                    
  2285.   glMapGrid1f := nil;                    
  2286.   glMapGrid2d := nil;                    
  2287.   glMapGrid2f := nil;                    
  2288.   glMaterialf := nil;                    
  2289.   glMaterialfv := nil;                   
  2290.   glMateriali := nil;                    
  2291.   glMaterialiv := nil;                   
  2292.   glMatrixMode := nil;                   
  2293.   glMultMatrixd := nil;                  
  2294.   glMultMatrixf := nil;                  
  2295.   glNewList := nil;                      
  2296.   glNormal3b := nil;                     
  2297.   glNormal3bv := nil;                    
  2298.   glNormal3d := nil;                     
  2299.   glNormal3dv := nil;
  2300.   glNormal3f := nil;
  2301.   glNormal3fv := nil;                    
  2302.   glNormal3i := nil;                     
  2303.   glNormal3iv := nil;
  2304.   glNormal3s := nil;                     
  2305.   glNormal3sv := nil;                    
  2306.   glNormalPointer := nil;                
  2307.   glOrtho := nil;                        
  2308.   glPassThrough := nil;                  
  2309.   glPixelMapfv := nil;                   
  2310.   glPixelMapuiv := nil;                  
  2311.   glPixelMapusv := nil;
  2312.   glPixelStoref := nil;                  
  2313.   glPixelStorei := nil;                  
  2314.   glPixelTransferf := nil;               
  2315.   glPixelTransferi := nil;               
  2316.   glPixelZoom := nil;                    
  2317.   glPointSize := nil;                    
  2318.   glPolygonMode := nil;                  
  2319.   glPolygonOffset := nil;                
  2320.   glPolygonStipple := nil;               
  2321.   glPopAttrib := nil;                    
  2322.   glPopClientAttrib := nil;              
  2323.   glPopMatrix := nil;                    
  2324.   glPopName := nil;                      
  2325.   glPrioritizeTextures := nil;           
  2326.   glPushAttrib := nil;                   
  2327.   glPushClientAttrib := nil;             
  2328.   glPushMatrix := nil;                   
  2329.   glPushName := nil;                     
  2330.   glRasterPos2d := nil;                  
  2331.   glRasterPos2dv := nil;                 
  2332.   glRasterPos2f := nil;                  
  2333.   glRasterPos2fv := nil;
  2334.   glRasterPos2i := nil;                  
  2335.   glRasterPos2iv := nil;
  2336.   glRasterPos2s := nil;                  
  2337.   glRasterPos2sv := nil;                 
  2338.   glRasterPos3d := nil;                  
  2339.   glRasterPos3dv := nil;
  2340.   glRasterPos3f := nil;                  
  2341.   glRasterPos3fv := nil;                 
  2342.   glRasterPos3i := nil;                  
  2343.   glRasterPos3iv := nil;                 
  2344.   glRasterPos3s := nil;                  
  2345.   glRasterPos3sv := nil;                 
  2346.   glRasterPos4d := nil;                  
  2347.   glRasterPos4dv := nil;                 
  2348.   glRasterPos4f := nil;                  
  2349.   glRasterPos4fv := nil;                 
  2350.   glRasterPos4i := nil;                  
  2351.   glRasterPos4iv := nil;                 
  2352.   glRasterPos4s := nil;                  
  2353.   glRasterPos4sv := nil;                 
  2354.   glReadBuffer := nil;                   
  2355.   glReadPixels := nil;                   
  2356.   glRectd := nil;                        
  2357.   glRectdv := nil;                       
  2358.   glRectf := nil;                        
  2359.   glRectfv := nil;                       
  2360.   glRecti := nil;
  2361.   glRectiv := nil;                       
  2362.   glRects := nil;                        
  2363.   glRectsv := nil;                       
  2364.   glRenderMode := nil;                   
  2365.   glRotated := nil;                      
  2366.   glRotatef := nil;
  2367.   glScaled := nil;                       
  2368.   glScalef := nil;                       
  2369.   glScissor := nil;                      
  2370.   glSelectBuffer := nil;                 
  2371.   glShadeModel := nil;
  2372.   glStencilFunc := nil;                  
  2373.   glStencilMask := nil;                  
  2374.   glStencilOp := nil;                    
  2375.   glTexCoord1d := nil;
  2376.   glTexCoord1dv := nil;                  
  2377.   glTexCoord1f := nil;                   
  2378.   glTexCoord1fv := nil;                  
  2379.   glTexCoord1i := nil;                   
  2380.   glTexCoord1iv := nil;                  
  2381.   glTexCoord1s := nil;                   
  2382.   glTexCoord1sv := nil;                  
  2383.   glTexCoord2d := nil;                   
  2384.   glTexCoord2dv := nil;                  
  2385.   glTexCoord2f := nil;                   
  2386.   glTexCoord2fv := nil;                  
  2387.   glTexCoord2i := nil;                   
  2388.   glTexCoord2iv := nil;                  
  2389.   glTexCoord2s := nil;                   
  2390.   glTexCoord2sv := nil;                  
  2391.   glTexCoord3d := nil;                   
  2392.   glTexCoord3dv := nil;                  
  2393.   glTexCoord3f := nil;                   
  2394.   glTexCoord3fv := nil;                  
  2395.   glTexCoord3i := nil;                   
  2396.   glTexCoord3iv := nil;                  
  2397.   glTexCoord3s := nil;                   
  2398.   glTexCoord3sv := nil;                  
  2399.   glTexCoord4d := nil;
  2400.   glTexCoord4dv := nil;                  
  2401.   glTexCoord4f := nil;                   
  2402.   glTexCoord4fv := nil;                  
  2403.   glTexCoord4i := nil;                   
  2404.   glTexCoord4iv := nil;                  
  2405.   glTexCoord4s := nil;                   
  2406.   glTexCoord4sv := nil;                  
  2407.   glTexCoordPointer := nil;
  2408.   glTexEnvf := nil;                      
  2409.   glTexEnvfv := nil;
  2410.   glTexEnvi := nil;                      
  2411.   glTexEnviv := nil;
  2412.   glTexGend := nil;                      
  2413.   glTexGendv := nil;                     
  2414.   glTexGenf := nil;                      
  2415.   glTexGenfv := nil;                     
  2416.   glTexGeni := nil;                      
  2417.   glTexGeniv := nil;                     
  2418.   glTexImage1D := nil;                   
  2419.   glTexImage2D := nil;                   
  2420.   glTexParameterf := nil;                
  2421.   glTexParameterfv := nil;               
  2422.   glTexParameteri := nil;                
  2423.   glTexParameteriv := nil;               
  2424.   glTexSubImage1D := nil;                
  2425.   glTexSubImage2D := nil;                
  2426.   glTranslated := nil;                   
  2427.   glTranslatef := nil;
  2428.   glVertex2d := nil;                     
  2429.   glVertex2dv := nil;                    
  2430.   glVertex2f := nil;                     
  2431.   glVertex2fv := nil;                    
  2432.   glVertex2i := nil;
  2433.   glVertex2iv := nil;                    
  2434.   glVertex2s := nil;                     
  2435.   glVertex2sv := nil;                    
  2436.   glVertex3d := nil;
  2437.   glVertex3dv := nil;                    
  2438.   glVertex3f := nil;                     
  2439.   glVertex3fv := nil;                    
  2440.   glVertex3i := nil;                     
  2441.   glVertex3iv := nil;
  2442.   glVertex3s := nil;
  2443.   glVertex3sv := nil;
  2444.   glVertex4d := nil;
  2445.   glVertex4dv := nil;
  2446.   glVertex4f := nil;
  2447.   glVertex4fv := nil;
  2448.   glVertex4i := nil;
  2449.   glVertex4iv := nil;
  2450.   glVertex4s := nil;
  2451.   glVertex4sv := nil;
  2452.   glVertexPointer := nil;
  2453.   glViewport := nil;
  2454.  
  2455.   wglGetProcAddress := nil;
  2456.  
  2457.   // GL 1.2
  2458.   glDrawRangeElements := nil;
  2459.   glTexImage3D := nil;
  2460.   // GL 1.2 ARB imaging
  2461.   glBlendColor := nil;
  2462.   glBlendEquation := nil;
  2463.   glColorSubTable := nil;
  2464.   glCopyColorSubTable := nil;
  2465.   glColorTable := nil;
  2466.   glCopyColorTable := nil;
  2467.   glColorTableParameteriv := nil;
  2468.   glColorTableParameterfv := nil;
  2469.   glGetColorTable := nil;
  2470.   glGetColorTableParameteriv := nil;
  2471.   glGetColorTableParameterfv := nil;
  2472.   glConvolutionFilter1D := nil;
  2473.   glConvolutionFilter2D := nil;
  2474.   glCopyConvolutionFilter1D := nil;
  2475.   glCopyConvolutionFilter2D := nil;
  2476.   glGetConvolutionFilter := nil;
  2477.   glSeparableFilter2D := nil;
  2478.   glGetSeparableFilter := nil;
  2479.   glConvolutionParameteri := nil;
  2480.   glConvolutionParameteriv := nil;
  2481.   glConvolutionParameterf := nil;
  2482.   glConvolutionParameterfv := nil;
  2483.   glGetConvolutionParameteriv := nil;
  2484.   glGetConvolutionParameterfv := nil;
  2485.   glHistogram := nil;
  2486.   glResetHistogram := nil;
  2487.   glGetHistogram := nil;
  2488.   glGetHistogramParameteriv := nil;
  2489.   glGetHistogramParameterfv := nil;
  2490.   glMinmax := nil;
  2491.   glResetMinmax := nil;
  2492.   glGetMinmax := nil;
  2493.   glGetMinmaxParameteriv := nil;
  2494.   glGetMinmaxParameterfv := nil;
  2495. end;
  2496.  
  2497. //----------------------------------------------------------------------------------------------------------------------
  2498.  
  2499. procedure LoadProcAddresses;
  2500.  
  2501. begin
  2502.   if GLHandle > 0 then
  2503.   begin
  2504.     glAccum := GetProcAddress(GLHandle, 'glAccum');
  2505.     glAlphaFunc := GetProcAddress(GLHandle, 'glAlphaFunc');
  2506.     glAreTexturesResident := GetProcAddress(GLHandle, 'glAreTexturesResident');
  2507.     glArrayElement := GetProcAddress(GLHandle, 'glArrayElement');
  2508.     glBegin := GetProcAddress(GLHandle, 'glBegin');
  2509.     glBindTexture := GetProcAddress(GLHandle, 'glBindTexture');
  2510.     glBitmap := GetProcAddress(GLHandle, 'glBitmap');
  2511.     glBlendFunc := GetProcAddress(GLHandle, 'glBlendFunc');
  2512.     glCallList := GetProcAddress(GLHandle, 'glCallList');
  2513.     glCallLists := GetProcAddress(GLHandle, 'glCallLists');
  2514.     glClear := GetProcAddress(GLHandle, 'glClear');
  2515.     glClearAccum := GetProcAddress(GLHandle, 'glClearAccum');
  2516.     glClearColor := GetProcAddress(GLHandle, 'glClearColor');
  2517.     glClearDepth := GetProcAddress(GLHandle, 'glClearDepth');
  2518.     glClearIndex := GetProcAddress(GLHandle, 'glClearIndex');
  2519.     glClearStencil := GetProcAddress(GLHandle, 'glClearStencil');
  2520.     glClipPlane := GetProcAddress(GLHandle, 'glClipPlane');
  2521.     glColor3b := GetProcAddress(GLHandle, 'glColor3b');
  2522.     glColor3bv := GetProcAddress(GLHandle, 'glColor3bv');
  2523.     glColor3d := GetProcAddress(GLHandle, 'glColor3d');
  2524.     glColor3dv := GetProcAddress(GLHandle, 'glColor3dv');
  2525.     glColor3f := GetProcAddress(GLHandle, 'glColor3f');
  2526.     glColor3fv := GetProcAddress(GLHandle, 'glColor3fv');
  2527.     glColor3i := GetProcAddress(GLHandle, 'glColor3i');
  2528.     glColor3iv := GetProcAddress(GLHandle, 'glColor3iv');
  2529.     glColor3s := GetProcAddress(GLHandle, 'glColor3s');
  2530.     glColor3sv := GetProcAddress(GLHandle, 'glColor3sv');
  2531.     glColor3ub := GetProcAddress(GLHandle, 'glColor3ub');
  2532.     glColor3ubv := GetProcAddress(GLHandle, 'glColor3ubv');
  2533.     glColor3ui := GetProcAddress(GLHandle, 'glColor3ui');
  2534.     glColor3uiv := GetProcAddress(GLHandle, 'glColor3uiv');
  2535.     glColor3us := GetProcAddress(GLHandle, 'glColor3us');
  2536.     glColor3usv := GetProcAddress(GLHandle, 'glColor3usv');
  2537.     glColor4b := GetProcAddress(GLHandle, 'glColor4b');
  2538.     glColor4bv := GetProcAddress(GLHandle, 'glColor4bv');
  2539.     glColor4d := GetProcAddress(GLHandle, 'glColor4d');
  2540.     glColor4dv := GetProcAddress(GLHandle, 'glColor4dv');
  2541.     glColor4f := GetProcAddress(GLHandle, 'glColor4f');
  2542.     glColor4fv := GetProcAddress(GLHandle, 'glColor4fv');
  2543.     glColor4i := GetProcAddress(GLHandle, 'glColor4i');
  2544.     glColor4iv := GetProcAddress(GLHandle, 'glColor4iv');
  2545.     glColor4s := GetProcAddress(GLHandle, 'glColor4s');
  2546.     glColor4sv := GetProcAddress(GLHandle, 'glColor4sv');
  2547.     glColor4ub := GetProcAddress(GLHandle, 'glColor4ub');
  2548.     glColor4ubv := GetProcAddress(GLHandle, 'glColor4ubv');
  2549.     glColor4ui := GetProcAddress(GLHandle, 'glColor4ui');
  2550.     glColor4uiv := GetProcAddress(GLHandle, 'glColor4uiv');
  2551.     glColor4us := GetProcAddress(GLHandle, 'glColor4us');
  2552.     glColor4usv := GetProcAddress(GLHandle, 'glColor4usv');
  2553.     glColorMask := GetProcAddress(GLHandle, 'glColorMask');
  2554.     glColorMaterial := GetProcAddress(GLHandle, 'glColorMaterial');
  2555.     glColorPointer := GetProcAddress(GLHandle, 'glColorPointer');
  2556.     glCopyPixels := GetProcAddress(GLHandle, 'glCopyPixels');
  2557.     glCopyTexImage1D := GetProcAddress(GLHandle, 'glCopyTexImage1D');
  2558.     glCopyTexImage2D := GetProcAddress(GLHandle, 'glCopyTexImage2D');
  2559.     glCopyTexSubImage1D := GetProcAddress(GLHandle, 'glCopyTexSubImage1D');
  2560.     glCopyTexSubImage2D := GetProcAddress(GLHandle, 'glCopyTexSubImage2D');
  2561.     glCullFace := GetProcAddress(GLHandle, 'glCullFace');
  2562.     glDeleteLists := GetProcAddress(GLHandle, 'glDeleteLists');
  2563.     glDeleteTextures := GetProcAddress(GLHandle, 'glDeleteTextures');
  2564.     glDepthFunc := GetProcAddress(GLHandle, 'glDepthFunc');
  2565.     glDepthMask := GetProcAddress(GLHandle, 'glDepthMask');
  2566.     glDepthRange := GetProcAddress(GLHandle, 'glDepthRange');
  2567.     glDisable := GetProcAddress(GLHandle, 'glDisable');
  2568.     glDisableClientState := GetProcAddress(GLHandle, 'glDisableClientState');
  2569.     glDrawArrays := GetProcAddress(GLHandle, 'glDrawArrays');
  2570.     glDrawBuffer := GetProcAddress(GLHandle, 'glDrawBuffer');
  2571.     glDrawElements := GetProcAddress(GLHandle, 'glDrawElements');
  2572.     glDrawPixels := GetProcAddress(GLHandle, 'glDrawPixels');
  2573.     glEdgeFlag := GetProcAddress(GLHandle, 'glEdgeFlag');
  2574.     glEdgeFlagPointer := GetProcAddress(GLHandle, 'glEdgeFlagPointer');
  2575.     glEdgeFlagv := GetProcAddress(GLHandle, 'glEdgeFlagv');
  2576.     glEnable := GetProcAddress(GLHandle, 'glEnable');
  2577.     glEnableClientState := GetProcAddress(GLHandle, 'glEnableClientState');
  2578.     glEnd := GetProcAddress(GLHandle, 'glEnd');
  2579.     glEndList := GetProcAddress(GLHandle, 'glEndList');
  2580.     glEvalCoord1d := GetProcAddress(GLHandle, 'glEvalCoord1d');
  2581.     glEvalCoord1dv := GetProcAddress(GLHandle, 'glEvalCoord1dv');
  2582.     glEvalCoord1f := GetProcAddress(GLHandle, 'glEvalCoord1f');
  2583.     glEvalCoord1fv := GetProcAddress(GLHandle, 'glEvalCoord1fv');
  2584.     glEvalCoord2d := GetProcAddress(GLHandle, 'glEvalCoord2d');
  2585.     glEvalCoord2dv := GetProcAddress(GLHandle, 'glEvalCoord2dv');
  2586.     glEvalCoord2f := GetProcAddress(GLHandle, 'glEvalCoord2f');
  2587.     glEvalCoord2fv := GetProcAddress(GLHandle, 'glEvalCoord2fv');
  2588.     glEvalMesh1 := GetProcAddress(GLHandle, 'glEvalMesh1');
  2589.     glEvalMesh2 := GetProcAddress(GLHandle, 'glEvalMesh2');
  2590.     glEvalPoint1 := GetProcAddress(GLHandle, 'glEvalPoint1');
  2591.     glEvalPoint2 := GetProcAddress(GLHandle, 'glEvalPoint2');
  2592.     glFeedbackBuffer := GetProcAddress(GLHandle, 'glFeedbackBuffer');
  2593.     glFinish := GetProcAddress(GLHandle, 'glFinish');
  2594.     glFlush := GetProcAddress(GLHandle, 'glFlush');
  2595.     glFogf := GetProcAddress(GLHandle, 'glFogf');
  2596.     glFogfv := GetProcAddress(GLHandle, 'glFogfv');
  2597.     glFogi := GetProcAddress(GLHandle, 'glFogi');
  2598.     glFogiv := GetProcAddress(GLHandle, 'glFogiv');
  2599.     glFrontFace := GetProcAddress(GLHandle, 'glFrontFace');
  2600.     glFrustum := GetProcAddress(GLHandle, 'glFrustum');
  2601.     glGenLists := GetProcAddress(GLHandle, 'glGenLists');
  2602.     glGenTextures := GetProcAddress(GLHandle, 'glGenTextures');
  2603.     glGetBooleanv := GetProcAddress(GLHandle, 'glGetBooleanv');
  2604.     glGetClipPlane := GetProcAddress(GLHandle, 'glGetClipPlane');
  2605.     glGetDoublev := GetProcAddress(GLHandle, 'glGetDoublev');
  2606.     glGetError := GetProcAddress(GLHandle, 'glGetError');
  2607.     glGetFloatv := GetProcAddress(GLHandle, 'glGetFloatv');
  2608.     glGetIntegerv := GetProcAddress(GLHandle, 'glGetIntegerv');
  2609.     glGetLightfv := GetProcAddress(GLHandle, 'glGetLightfv');
  2610.     glGetLightiv := GetProcAddress(GLHandle, 'glGetLightiv');
  2611.     glGetMapdv := GetProcAddress(GLHandle, 'glGetMapdv');
  2612.     glGetMapfv := GetProcAddress(GLHandle, 'glGetMapfv');
  2613.     glGetMapiv := GetProcAddress(GLHandle, 'glGetMapiv');
  2614.     glGetMaterialfv := GetProcAddress(GLHandle, 'glGetMaterialfv');
  2615.     glGetMaterialiv := GetProcAddress(GLHandle, 'glGetMaterialiv');
  2616.     glGetPixelMapfv := GetProcAddress(GLHandle, 'glGetPixelMapfv');
  2617.     glGetPixelMapuiv := GetProcAddress(GLHandle, 'glGetPixelMapuiv');
  2618.     glGetPixelMapusv := GetProcAddress(GLHandle, 'glGetPixelMapusv');
  2619.     glGetPointerv := GetProcAddress(GLHandle, 'glGetPointerv');
  2620.     glGetPolygonStipple := GetProcAddress(GLHandle, 'glGetPolygonStipple');
  2621.     glGetString := GetProcAddress(GLHandle, 'glGetString');
  2622.     glGetTexEnvfv := GetProcAddress(GLHandle, 'glGetTexEnvfv');
  2623.     glGetTexEnviv := GetProcAddress(GLHandle, 'glGetTexEnviv');
  2624.     glGetTexGendv := GetProcAddress(GLHandle, 'glGetTexGendv');
  2625.     glGetTexGenfv := GetProcAddress(GLHandle, 'glGetTexGenfv');
  2626.     glGetTexGeniv := GetProcAddress(GLHandle, 'glGetTexGeniv');
  2627.     glGetTexImage := GetProcAddress(GLHandle, 'glGetTexImage');
  2628.     glGetTexLevelParameterfv := GetProcAddress(GLHandle, 'glGetTexLevelParameterfv');
  2629.     glGetTexLevelParameteriv := GetProcAddress(GLHandle, 'glGetTexLevelParameteriv');
  2630.     glGetTexParameterfv := GetProcAddress(GLHandle, 'glGetTexParameterfv');
  2631.     glGetTexParameteriv := GetProcAddress(GLHandle, 'glGetTexParameteriv');
  2632.     glHint := GetProcAddress(GLHandle, 'glHint');
  2633.     glIndexMask := GetProcAddress(GLHandle, 'glIndexMask');
  2634.     glIndexPointer := GetProcAddress(GLHandle, 'glIndexPointer');
  2635.     glIndexd := GetProcAddress(GLHandle, 'glIndexd');
  2636.     glIndexdv := GetProcAddress(GLHandle, 'glIndexdv');
  2637.     glIndexf := GetProcAddress(GLHandle, 'glIndexf');
  2638.     glIndexfv := GetProcAddress(GLHandle, 'glIndexfv');
  2639.     glIndexi := GetProcAddress(GLHandle, 'glIndexi');
  2640.     glIndexiv := GetProcAddress(GLHandle, 'glIndexiv');
  2641.     glIndexs := GetProcAddress(GLHandle, 'glIndexs');
  2642.     glIndexsv := GetProcAddress(GLHandle, 'glIndexsv');
  2643.     glIndexub := GetProcAddress(GLHandle, 'glIndexub');
  2644.     glIndexubv := GetProcAddress(GLHandle, 'glIndexubv');
  2645.     glInitNames := GetProcAddress(GLHandle, 'glInitNames');
  2646.     glInterleavedArrays := GetProcAddress(GLHandle, 'glInterleavedArrays');
  2647.     glIsEnabled := GetProcAddress(GLHandle, 'glIsEnabled');
  2648.     glIsList := GetProcAddress(GLHandle, 'glIsList');
  2649.     glIsTexture := GetProcAddress(GLHandle, 'glIsTexture');
  2650.     glLightModelf := GetProcAddress(GLHandle, 'glLightModelf');
  2651.     glLightModelfv := GetProcAddress(GLHandle, 'glLightModelfv');
  2652.     glLightModeli := GetProcAddress(GLHandle, 'glLightModeli');
  2653.     glLightModeliv := GetProcAddress(GLHandle, 'glLightModeliv');
  2654.     glLightf := GetProcAddress(GLHandle, 'glLightf');
  2655.     glLightfv := GetProcAddress(GLHandle, 'glLightfv');
  2656.     glLighti := GetProcAddress(GLHandle, 'glLighti');
  2657.     glLightiv := GetProcAddress(GLHandle, 'glLightiv');
  2658.     glLineStipple := GetProcAddress(GLHandle, 'glLineStipple');
  2659.     glLineWidth := GetProcAddress(GLHandle, 'glLineWidth');
  2660.     glListBase := GetProcAddress(GLHandle, 'glListBase');
  2661.     glLoadIdentity := GetProcAddress(GLHandle, 'glLoadIdentity');
  2662.     glLoadMatrixd := GetProcAddress(GLHandle, 'glLoadMatrixd');
  2663.     glLoadMatrixf := GetProcAddress(GLHandle, 'glLoadMatrixf');
  2664.     glLoadName := GetProcAddress(GLHandle, 'glLoadName');
  2665.     glLogicOp := GetProcAddress(GLHandle, 'glLogicOp');
  2666.     glMap1d := GetProcAddress(GLHandle, 'glMap1d');
  2667.     glMap1f := GetProcAddress(GLHandle, 'glMap1f');
  2668.     glMap2d := GetProcAddress(GLHandle, 'glMap2d');
  2669.     glMap2f := GetProcAddress(GLHandle, 'glMap2f');
  2670.     glMapGrid1d := GetProcAddress(GLHandle, 'glMapGrid1d');
  2671.     glMapGrid1f := GetProcAddress(GLHandle, 'glMapGrid1f');
  2672.     glMapGrid2d := GetProcAddress(GLHandle, 'glMapGrid2d');
  2673.     glMapGrid2f := GetProcAddress(GLHandle, 'glMapGrid2f');
  2674.     glMaterialf := GetProcAddress(GLHandle, 'glMaterialf');
  2675.     glMaterialfv := GetProcAddress(GLHandle, 'glMaterialfv');
  2676.     glMateriali := GetProcAddress(GLHandle, 'glMateriali');
  2677.     glMaterialiv := GetProcAddress(GLHandle, 'glMaterialiv');
  2678.     glMatrixMode := GetProcAddress(GLHandle, 'glMatrixMode');
  2679.     glMultMatrixd := GetProcAddress(GLHandle, 'glMultMatrixd');
  2680.     glMultMatrixf := GetProcAddress(GLHandle, 'glMultMatrixf');
  2681.     glNewList := GetProcAddress(GLHandle, 'glNewList');
  2682.     glNormal3b := GetProcAddress(GLHandle, 'glNormal3b');
  2683.     glNormal3bv := GetProcAddress(GLHandle, 'glNormal3bv');
  2684.     glNormal3d := GetProcAddress(GLHandle, 'glNormal3d');
  2685.     glNormal3dv := GetProcAddress(GLHandle, 'glNormal3dv');
  2686.     glNormal3f := GetProcAddress(GLHandle, 'glNormal3f');
  2687.     glNormal3fv := GetProcAddress(GLHandle, 'glNormal3fv');
  2688.     glNormal3i := GetProcAddress(GLHandle, 'glNormal3i');
  2689.     glNormal3iv := GetProcAddress(GLHandle, 'glNormal3iv');
  2690.     glNormal3s := GetProcAddress(GLHandle, 'glNormal3s');
  2691.     glNormal3sv := GetProcAddress(GLHandle, 'glNormal3sv');
  2692.     glNormalPointer := GetProcAddress(GLHandle, 'glNormalPointer');
  2693.     glOrtho := GetProcAddress(GLHandle, 'glOrtho');
  2694.     glPassThrough := GetProcAddress(GLHandle, 'glPassThrough');
  2695.     glPixelMapfv := GetProcAddress(GLHandle, 'glPixelMapfv');
  2696.     glPixelMapuiv := GetProcAddress(GLHandle, 'glPixelMapuiv');
  2697.     glPixelMapusv := GetProcAddress(GLHandle, 'glPixelMapusv');
  2698.     glPixelStoref := GetProcAddress(GLHandle, 'glPixelStoref');
  2699.     glPixelStorei := GetProcAddress(GLHandle, 'glPixelStorei');
  2700.     glPixelTransferf := GetProcAddress(GLHandle, 'glPixelTransferf');
  2701.     glPixelTransferi := GetProcAddress(GLHandle, 'glPixelTransferi');
  2702.     glPixelZoom := GetProcAddress(GLHandle, 'glPixelZoom');
  2703.     glPointSize := GetProcAddress(GLHandle, 'glPointSize');
  2704.     glPolygonMode := GetProcAddress(GLHandle, 'glPolygonMode');
  2705.     glPolygonOffset := GetProcAddress(GLHandle, 'glPolygonOffset');
  2706.     glPolygonStipple := GetProcAddress(GLHandle, 'glPolygonStipple');
  2707.     glPopAttrib := GetProcAddress(GLHandle, 'glPopAttrib');
  2708.     glPopClientAttrib := GetProcAddress(GLHandle, 'glPopClientAttrib');
  2709.     glPopMatrix := GetProcAddress(GLHandle, 'glPopMatrix');
  2710.     glPopName := GetProcAddress(GLHandle, 'glPopName');
  2711.     glPrioritizeTextures := GetProcAddress(GLHandle, 'glPrioritizeTextures');
  2712.     glPushAttrib := GetProcAddress(GLHandle, 'glPushAttrib');
  2713.     glPushClientAttrib := GetProcAddress(GLHandle, 'glPushClientAttrib');
  2714.     glPushMatrix := GetProcAddress(GLHandle, 'glPushMatrix');
  2715.     glPushName := GetProcAddress(GLHandle, 'glPushName');
  2716.     glRasterPos2d := GetProcAddress(GLHandle, 'glRasterPos2d');
  2717.     glRasterPos2dv := GetProcAddress(GLHandle, 'glRasterPos2dv');
  2718.     glRasterPos2f := GetProcAddress(GLHandle, 'glRasterPos2f');
  2719.     glRasterPos2fv := GetProcAddress(GLHandle, 'glRasterPos2fv');
  2720.     glRasterPos2i := GetProcAddress(GLHandle, 'glRasterPos2i');
  2721.     glRasterPos2iv := GetProcAddress(GLHandle, 'glRasterPos2iv');
  2722.     glRasterPos2s := GetProcAddress(GLHandle, 'glRasterPos2s');
  2723.     glRasterPos2sv := GetProcAddress(GLHandle, 'glRasterPos2sv');
  2724.     glRasterPos3d := GetProcAddress(GLHandle, 'glRasterPos3d');
  2725.     glRasterPos3dv := GetProcAddress(GLHandle, 'glRasterPos3dv');
  2726.     glRasterPos3f := GetProcAddress(GLHandle, 'glRasterPos3f');
  2727.     glRasterPos3fv := GetProcAddress(GLHandle, 'glRasterPos3fv');
  2728.     glRasterPos3i := GetProcAddress(GLHandle, 'glRasterPos3i');
  2729.     glRasterPos3iv := GetProcAddress(GLHandle, 'glRasterPos3iv');
  2730.     glRasterPos3s := GetProcAddress(GLHandle, 'glRasterPos3s');
  2731.     glRasterPos3sv := GetProcAddress(GLHandle, 'glRasterPos3sv');
  2732.     glRasterPos4d := GetProcAddress(GLHandle, 'glRasterPos4d');
  2733.     glRasterPos4dv := GetProcAddress(GLHandle, 'glRasterPos4dv');
  2734.     glRasterPos4f := GetProcAddress(GLHandle, 'glRasterPos4f');
  2735.     glRasterPos4fv := GetProcAddress(GLHandle, 'glRasterPos4fv');
  2736.     glRasterPos4i := GetProcAddress(GLHandle, 'glRasterPos4i');
  2737.     glRasterPos4iv := GetProcAddress(GLHandle, 'glRasterPos4iv');
  2738.     glRasterPos4s := GetProcAddress(GLHandle, 'glRasterPos4s');
  2739.     glRasterPos4sv := GetProcAddress(GLHandle, 'glRasterPos4sv');
  2740.     glReadBuffer := GetProcAddress(GLHandle, 'glReadBuffer');
  2741.     glReadPixels := GetProcAddress(GLHandle, 'glReadPixels');
  2742.     glRectd := GetProcAddress(GLHandle, 'glRectd');
  2743.     glRectdv := GetProcAddress(GLHandle, 'glRectdv');
  2744.     glRectf := GetProcAddress(GLHandle, 'glRectf');
  2745.     glRectfv := GetProcAddress(GLHandle, 'glRectfv');
  2746.     glRecti := GetProcAddress(GLHandle, 'glRecti');
  2747.     glRectiv := GetProcAddress(GLHandle, 'glRectiv');
  2748.     glRects := GetProcAddress(GLHandle, 'glRects');
  2749.     glRectsv := GetProcAddress(GLHandle, 'glRectsv');
  2750.     glRenderMode := GetProcAddress(GLHandle, 'glRenderMode');
  2751.     glRotated := GetProcAddress(GLHandle, 'glRotated');
  2752.     glRotatef := GetProcAddress(GLHandle, 'glRotatef');
  2753.     glScaled := GetProcAddress(GLHandle, 'glScaled');
  2754.     glScalef := GetProcAddress(GLHandle, 'glScalef');
  2755.     glScissor := GetProcAddress(GLHandle, 'glScissor');
  2756.     glSelectBuffer := GetProcAddress(GLHandle, 'glSelectBuffer');
  2757.     glShadeModel := GetProcAddress(GLHandle, 'glShadeModel');
  2758.     glStencilFunc := GetProcAddress(GLHandle, 'glStencilFunc');
  2759.     glStencilMask := GetProcAddress(GLHandle, 'glStencilMask');
  2760.     glStencilOp := GetProcAddress(GLHandle, 'glStencilOp');
  2761.     glTexCoord1d := GetProcAddress(GLHandle, 'glTexCoord1d');
  2762.     glTexCoord1dv := GetProcAddress(GLHandle, 'glTexCoord1dv');
  2763.     glTexCoord1f := GetProcAddress(GLHandle, 'glTexCoord1f');
  2764.     glTexCoord1fv := GetProcAddress(GLHandle, 'glTexCoord1fv');
  2765.     glTexCoord1i := GetProcAddress(GLHandle, 'glTexCoord1i');
  2766.     glTexCoord1iv := GetProcAddress(GLHandle, 'glTexCoord1iv');
  2767.     glTexCoord1s := GetProcAddress(GLHandle, 'glTexCoord1s');
  2768.     glTexCoord1sv := GetProcAddress(GLHandle, 'glTexCoord1sv');
  2769.     glTexCoord2d := GetProcAddress(GLHandle, 'glTexCoord2d');
  2770.     glTexCoord2dv := GetProcAddress(GLHandle, 'glTexCoord2dv');
  2771.     glTexCoord2f := GetProcAddress(GLHandle, 'glTexCoord2f');
  2772.     glTexCoord2fv := GetProcAddress(GLHandle, 'glTexCoord2fv');
  2773.     glTexCoord2i := GetProcAddress(GLHandle, 'glTexCoord2i');
  2774.     glTexCoord2iv := GetProcAddress(GLHandle, 'glTexCoord2iv');
  2775.     glTexCoord2s := GetProcAddress(GLHandle, 'glTexCoord2s');
  2776.     glTexCoord2sv := GetProcAddress(GLHandle, 'glTexCoord2sv');
  2777.     glTexCoord3d := GetProcAddress(GLHandle, 'glTexCoord3d');
  2778.     glTexCoord3dv := GetProcAddress(GLHandle, 'glTexCoord3dv');
  2779.     glTexCoord3f := GetProcAddress(GLHandle, 'glTexCoord3f');
  2780.     glTexCoord3fv := GetProcAddress(GLHandle, 'glTexCoord3fv');
  2781.     glTexCoord3i := GetProcAddress(GLHandle, 'glTexCoord3i');
  2782.     glTexCoord3iv := GetProcAddress(GLHandle, 'glTexCoord3iv');
  2783.     glTexCoord3s := GetProcAddress(GLHandle, 'glTexCoord3s');
  2784.     glTexCoord3sv := GetProcAddress(GLHandle, 'glTexCoord3sv');
  2785.     glTexCoord4d := GetProcAddress(GLHandle, 'glTexCoord4d');
  2786.     glTexCoord4dv := GetProcAddress(GLHandle, 'glTexCoord4dv');
  2787.     glTexCoord4f := GetProcAddress(GLHandle, 'glTexCoord4f');
  2788.     glTexCoord4fv := GetProcAddress(GLHandle, 'glTexCoord4fv');
  2789.     glTexCoord4i := GetProcAddress(GLHandle, 'glTexCoord4i');
  2790.     glTexCoord4iv := GetProcAddress(GLHandle, 'glTexCoord4iv');
  2791.     glTexCoord4s := GetProcAddress(GLHandle, 'glTexCoord4s');
  2792.     glTexCoord4sv := GetProcAddress(GLHandle, 'glTexCoord4sv');
  2793.     glTexCoordPointer := GetProcAddress(GLHandle, 'glTexCoordPointer');
  2794.     glTexEnvf := GetProcAddress(GLHandle, 'glTexEnvf');
  2795.     glTexEnvfv := GetProcAddress(GLHandle, 'glTexEnvfv');
  2796.     glTexEnvi := GetProcAddress(GLHandle, 'glTexEnvi');
  2797.     glTexEnviv := GetProcAddress(GLHandle, 'glTexEnviv');
  2798.     glTexGend := GetProcAddress(GLHandle, 'glTexGend');
  2799.     glTexGendv := GetProcAddress(GLHandle, 'glTexGendv');
  2800.     glTexGenf := GetProcAddress(GLHandle, 'glTexGenf');
  2801.     glTexGenfv := GetProcAddress(GLHandle, 'glTexGenfv');
  2802.     glTexGeni := GetProcAddress(GLHandle, 'glTexGeni');
  2803.     glTexGeniv := GetProcAddress(GLHandle, 'glTexGeniv');
  2804.     glTexImage1D := GetProcAddress(GLHandle, 'glTexImage1D');
  2805.     glTexImage2D := GetProcAddress(GLHandle, 'glTexImage2D');
  2806.     glTexParameterf := GetProcAddress(GLHandle, 'glTexParameterf');
  2807.     glTexParameterfv := GetProcAddress(GLHandle, 'glTexParameterfv');
  2808.     glTexParameteri := GetProcAddress(GLHandle, 'glTexParameteri');
  2809.     glTexParameteriv := GetProcAddress(GLHandle, 'glTexParameteriv');
  2810.     glTexSubImage1D := GetProcAddress(GLHandle, 'glTexSubImage1D');
  2811.     glTexSubImage2D := GetProcAddress(GLHandle, 'glTexSubImage2D');
  2812.     glTranslated := GetProcAddress(GLHandle, 'glTranslated');
  2813.     glTranslatef := GetProcAddress(GLHandle, 'glTranslatef');
  2814.     glVertex2d := GetProcAddress(GLHandle, 'glVertex2d');
  2815.     glVertex2dv := GetProcAddress(GLHandle, 'glVertex2dv');
  2816.     glVertex2f := GetProcAddress(GLHandle, 'glVertex2f');
  2817.     glVertex2fv := GetProcAddress(GLHandle, 'glVertex2fv');
  2818.     glVertex2i := GetProcAddress(GLHandle, 'glVertex2i');
  2819.     glVertex2iv := GetProcAddress(GLHandle, 'glVertex2iv');
  2820.     glVertex2s := GetProcAddress(GLHandle, 'glVertex2s');
  2821.     glVertex2sv := GetProcAddress(GLHandle, 'glVertex2sv');
  2822.     glVertex3d := GetProcAddress(GLHandle, 'glVertex3d');
  2823.     glVertex3dv := GetProcAddress(GLHandle, 'glVertex3dv');
  2824.     glVertex3f := GetProcAddress(GLHandle, 'glVertex3f');
  2825.     glVertex3fv := GetProcAddress(GLHandle, 'glVertex3fv');
  2826.     glVertex3i := GetProcAddress(GLHandle, 'glVertex3i');
  2827.     glVertex3iv := GetProcAddress(GLHandle, 'glVertex3iv');
  2828.     glVertex3s := GetProcAddress(GLHandle, 'glVertex3s');
  2829.     glVertex3sv := GetProcAddress(GLHandle, 'glVertex3sv');
  2830.     glVertex4d := GetProcAddress(GLHandle, 'glVertex4d');
  2831.     glVertex4dv := GetProcAddress(GLHandle, 'glVertex4dv');
  2832.     glVertex4f := GetProcAddress(GLHandle, 'glVertex4f');
  2833.     glVertex4fv := GetProcAddress(GLHandle, 'glVertex4fv');
  2834.     glVertex4i := GetProcAddress(GLHandle, 'glVertex4i');
  2835.     glVertex4iv := GetProcAddress(GLHandle, 'glVertex4iv');
  2836.     glVertex4s := GetProcAddress(GLHandle, 'glVertex4s');
  2837.     glVertex4sv := GetProcAddress(GLHandle, 'glVertex4sv');
  2838.     glVertexPointer := GetProcAddress(GLHandle, 'glVertexPointer');
  2839.     glViewport := GetProcAddress(GLHandle, 'glViewport');
  2840.     wglGetProcAddress := GetprocAddress(GLHandle, 'wglGetProcAddress');
  2841.     // GL 1.2
  2842.     glDrawRangeElements := GetProcAddress(GLHandle, 'glDrawRangeElements');
  2843.     glTexImage3D := GetProcAddress(GLHandle, 'glTexImage3D');
  2844.     // GL 1.2 ARB imaging
  2845.     glBlendColor := GetProcAddress(GLHandle, 'glBlendColor');
  2846.     glBlendEquation := GetProcAddress(GLHandle, 'glBlendEquation');
  2847.     glColorSubTable := GetProcAddress(GLHandle, 'glColorSubTable');
  2848.     glCopyColorSubTable := GetProcAddress(GLHandle, 'glCopyColorSubTable');
  2849.     glColorTable := GetProcAddress(GLHandle, 'glCopyColorSubTable');
  2850.     glCopyColorTable := GetProcAddress(GLHandle, 'glCopyColorTable');
  2851.     glColorTableParameteriv := GetProcAddress(GLHandle, 'glColorTableParameteriv');
  2852.     glColorTableParameterfv := GetProcAddress(GLHandle, 'glColorTableParameterfv');
  2853.     glGetColorTable := GetProcAddress(GLHandle, 'glGetColorTable');
  2854.     glGetColorTableParameteriv := GetProcAddress(GLHandle, 'glGetColorTableParameteriv');
  2855.     glGetColorTableParameterfv := GetProcAddress(GLHandle, 'glGetColorTableParameterfv');
  2856.     glConvolutionFilter1D := GetProcAddress(GLHandle, 'glConvolutionFilter1D');
  2857.     glConvolutionFilter2D := GetProcAddress(GLHandle, 'glConvolutionFilter2D');
  2858.     glCopyConvolutionFilter1D := GetProcAddress(GLHandle, 'glCopyConvolutionFilter1D');
  2859.     glCopyConvolutionFilter2D := GetProcAddress(GLHandle, 'glCopyConvolutionFilter2D');
  2860.     glGetConvolutionFilter := GetProcAddress(GLHandle, 'glGetConvolutionFilter');
  2861.     glSeparableFilter2D := GetProcAddress(GLHandle, 'glSeparableFilter2D');
  2862.     glGetSeparableFilter := GetProcAddress(GLHandle, 'glGetSeparableFilter');
  2863.     glConvolutionParameteri := GetProcAddress(GLHandle, 'glConvolutionParameteri');
  2864.     glConvolutionParameteriv := GetProcAddress(GLHandle, 'glConvolutionParameteriv');
  2865.     glConvolutionParameterf := GetProcAddress(GLHandle, 'glConvolutionParameterf');
  2866.     glConvolutionParameterfv := GetProcAddress(GLHandle, 'glConvolutionParameterfv');
  2867.     glGetConvolutionParameteriv := GetProcAddress(GLHandle, 'glGetConvolutionParameteriv');
  2868.     glGetConvolutionParameterfv := GetProcAddress(GLHandle, 'glGetConvolutionParameterfv');
  2869.     glHistogram := GetProcAddress(GLHandle, 'glHistogram');
  2870.     glResetHistogram := GetProcAddress(GLHandle, 'glResetHistogram');
  2871.     glGetHistogram := GetProcAddress(GLHandle, 'glGetHistogram');
  2872.     glGetHistogramParameteriv := GetProcAddress(GLHandle, 'glGetHistogramParameteriv');
  2873.     glGetHistogramParameterfv := GetProcAddress(GLHandle, 'glGetHistogramParameterfv');
  2874.     glMinmax := GetProcAddress(GLHandle, 'glMinmax');
  2875.     glResetMinmax := GetProcAddress(GLHandle, 'glResetMinmax');
  2876.     glGetMinmax := GetProcAddress(GLHandle, 'glGetMinmax');
  2877.     glGetMinmaxParameteriv := GetProcAddress(GLHandle, 'glGetMinmaxParameteriv');
  2878.     glGetMinmaxParameterfv := GetProcAddress(GLHandle, 'glGetMinmaxParameterfv');
  2879.   end;
  2880.  
  2881.   if GLUHandle > 0 then
  2882.   begin
  2883.     gluBeginCurve := GetProcAddress(GLUHandle, 'gluBeginCurve');
  2884.     gluBeginPolygon := GetProcAddress(GLUHandle, 'gluBeginPolygon');
  2885.     gluBeginSurface := GetProcAddress(GLUHandle, 'gluBeginSurface');
  2886.     gluBeginTrim := GetProcAddress(GLUHandle, 'gluBeginTrim');
  2887.     gluBuild1DMipmaps := GetProcAddress(GLUHandle, 'gluBuild1DMipmaps');
  2888.     gluBuild2DMipmaps := GetProcAddress(GLUHandle, 'gluBuild2DMipmaps');
  2889.     gluCylinder := GetProcAddress(GLUHandle, 'gluCylinder');
  2890.     gluDeleteNurbsRenderer := GetProcAddress(GLUHandle, 'gluDeleteNurbsRenderer');
  2891.     gluDeleteQuadric := GetProcAddress(GLUHandle, 'gluDeleteQuadric');
  2892.     gluDeleteTess := GetProcAddress(GLUHandle, 'gluDeleteTess');
  2893.     gluDisk := GetProcAddress(GLUHandle, 'gluDisk');
  2894.     gluEndCurve := GetProcAddress(GLUHandle, 'gluEndCurve');
  2895.     gluEndPolygon := GetProcAddress(GLUHandle, 'gluEndPolygon');
  2896.     gluEndSurface := GetProcAddress(GLUHandle, 'gluEndSurface');
  2897.     gluEndTrim := GetProcAddress(GLUHandle, 'gluEndTrim');
  2898.     gluErrorString := GetProcAddress(GLUHandle, 'gluErrorString');
  2899.     gluGetNurbsProperty := GetProcAddress(GLUHandle, 'gluGetNurbsProperty');
  2900.     gluGetString := GetProcAddress(GLUHandle, 'gluGetString');
  2901.     gluGetTessProperty := GetProcAddress(GLUHandle, 'gluGetTessProperty');
  2902.     gluLoadSamplingMatrices := GetProcAddress(GLUHandle, 'gluLoadSamplingMatrices');
  2903.     gluLookAt := GetProcAddress(GLUHandle, 'gluLookAt');
  2904.     gluNewNurbsRenderer := GetProcAddress(GLUHandle, 'gluNewNurbsRenderer');
  2905.     gluNewQuadric := GetProcAddress(GLUHandle, 'gluNewQuadric');
  2906.     gluNewTess := GetProcAddress(GLUHandle, 'gluNewTess');
  2907.     gluNextContour := GetProcAddress(GLUHandle, 'gluNextContour');
  2908.     gluNurbsCallback := GetProcAddress(GLUHandle, 'gluNurbsCallback');
  2909.     gluNurbsCurve := GetProcAddress(GLUHandle, 'gluNurbsCurve');
  2910.     gluNurbsProperty := GetProcAddress(GLUHandle, 'gluNurbsProperty');
  2911.     gluNurbsSurface := GetProcAddress(GLUHandle, 'gluNurbsSurface');
  2912.     gluOrtho2D := GetProcAddress(GLUHandle, 'gluOrtho2D');
  2913.     gluPartialDisk := GetProcAddress(GLUHandle, 'gluPartialDisk');
  2914.     gluPerspective := GetProcAddress(GLUHandle, 'gluPerspective');
  2915.     gluPickMatrix := GetProcAddress(GLUHandle, 'gluPickMatrix');
  2916.     gluProject := GetProcAddress(GLUHandle, 'gluProject');
  2917.     gluPwlCurve := GetProcAddress(GLUHandle, 'gluPwlCurve');
  2918.     gluQuadricCallback := GetProcAddress(GLUHandle, 'gluQuadricCallback');
  2919.     gluQuadricDrawStyle := GetProcAddress(GLUHandle, 'gluQuadricDrawStyle');
  2920.     gluQuadricNormals := GetProcAddress(GLUHandle, 'gluQuadricNormals');
  2921.     gluQuadricOrientation := GetProcAddress(GLUHandle, 'gluQuadricOrientation');
  2922.     gluQuadricTexture := GetProcAddress(GLUHandle, 'gluQuadricTexture');
  2923.     gluScaleImage := GetProcAddress(GLUHandle, 'gluScaleImage');
  2924.     gluSphere := GetProcAddress(GLUHandle, 'gluSphere');
  2925.     gluTessBeginContour := GetProcAddress(GLUHandle, 'gluTessBeginContour');
  2926.     gluTessBeginPolygon := GetProcAddress(GLUHandle, 'gluTessBeginPolygon');
  2927.     gluTessCallback := GetProcAddress(GLUHandle, 'gluTessCallback');
  2928.     gluTessEndContour := GetProcAddress(GLUHandle, 'gluTessEndContour');
  2929.     gluTessEndPolygon := GetProcAddress(GLUHandle, 'gluTessEndPolygon');
  2930.     gluTessNormal := GetProcAddress(GLUHandle, 'gluTessNormal');
  2931.     gluTessProperty := GetProcAddress(GLUHandle, 'gluTessProperty');
  2932.     gluTessVertex := GetProcAddress(GLUHandle, 'gluTessVertex');
  2933.     gluUnProject := GetProcAddress(GLUHandle, 'gluUnProject');
  2934.   end;
  2935. end;
  2936.  
  2937. //----------------------------------------------------------------------------------------------------------------------
  2938.  
  2939. procedure ClearExtensions;
  2940.  
  2941. begin
  2942.   glArrayElementEXT := nil;
  2943.   glDrawArraysEXT := nil;
  2944.   glVertexPointerEXT := nil;
  2945.   glNormalPointerEXT := nil;
  2946.   glColorPointerEXT := nil;
  2947.   glIndexPointerEXT := nil;
  2948.   glTexCoordPointerEXT := nil;
  2949.   glEdgeFlagPointerEXT := nil;
  2950.   glGetPointervEXT := nil;
  2951.   glArrayElementArrayEXT := nil;
  2952.   glAddSwapHintRectWIN := nil;
  2953.   glColorTableEXT := nil;
  2954.   glColorSubTableEXT := nil;
  2955.   glGetColorTableEXT := nil;
  2956.   glGetColorTablePameterivEXT := nil;
  2957.   glGetColorTablePameterfvEXT := nil;
  2958.   gluNurbsCallbackDataEXT := nil;
  2959.   gluNewNurbsTessellatorEXT := nil;
  2960.   gluDeleteNurbsTessellatorEXT := nil;
  2961.   glLockArraysEXT := nil;
  2962.   glUnlockArraysEXT := nil;
  2963.   glCopyTexImage1DEXT := nil;
  2964.   glCopyTexSubImage1DEXT := nil;
  2965.   glCopyTexImage2DEXT := nil;
  2966.   glCopyTexSubImage2DEXT := nil;
  2967.   glCopyTexSubImage3DEXT := nil;
  2968.   glCullParameterfvEXT := nil;
  2969.   glCullParameterdvEXT := nil;
  2970.   glIndexFuncEXT := nil;
  2971.   glIndexMaterialEXT := nil;
  2972.   glPolygonOffsetEXT := nil;
  2973.   glTexSubImage1DEXT := nil;
  2974.   glTexSubImage2DEXT := nil;
  2975.   glTexSubImage3DEXT := nil;
  2976.   glGenTexturesEXT := nil;
  2977.   glDeleteTexturesEXT := nil;
  2978.   glBindTextureEXT := nil;
  2979.   glPrioritizeTexturesEXT := nil;
  2980.   glAreTexturesResidentEXT := nil;
  2981.   glIsTextureEXT := nil;
  2982.  
  2983.   LastPixelFormat := 0; // to get synchronized again, if this proc was called from outside
  2984. end;
  2985.  
  2986. //----------------------------------------------------------------------------------------------------------------------
  2987.  
  2988. procedure ReadExtensions;
  2989.  
  2990. // to be used in an active rendering context only!
  2991.  
  2992. begin
  2993.   // GL extensions
  2994.   glArrayElementEXT := wglGetProcAddress('glArrayElementEXT');
  2995.   glDrawArraysEXT := wglGetProcAddress('glDrawArraysEXT');
  2996.   glVertexPointerEXT := wglGetProcAddress('glVertexPointerEXT');
  2997.   glNormalPointerEXT := wglGetProcAddress('glNormalPointerEXT');
  2998.   glColorPointerEXT := wglGetProcAddress('glColorPointerEXT');
  2999.   glIndexPointerEXT := wglGetProcAddress('glIndexPointerEXT');
  3000.   glTexCoordPointerEXT := wglGetProcAddress('glTexCoordPointerEXT');
  3001.   glEdgeFlagPointerEXT := wglGetProcAddress('glEdgeFlagPointerEXT');
  3002.   glGetPointervEXT := wglGetProcAddress('glGetPointervEXT');
  3003.   glArrayElementArrayEXT := wglGetProcAddress('glArrayElementArrayEXT');
  3004.   glAddSwapHintRectWIN := wglGetProcAddress('glAddSwapHintRectWIN');
  3005.   glColorTableEXT := wglGetProcAddress('glColorTableEXT');
  3006.   glColorSubTableEXT := wglGetProcAddress('glColorSubTableEXT');
  3007.   glGetColorTableEXT := wglGetProcAddress('glGetColorTableEXT');
  3008.   glGetColorTablePameterivEXT := wglGetProcAddress('glGetColorTablePameterivEXT');
  3009.   glGetColorTablePameterfvEXT := wglGetProcAddress('glGetColorTablePameterfvEXT');
  3010.   glLockArraysEXT := wglGetProcAddress('glLockArraysEXT');
  3011.   glUnlockArraysEXT := wglGetProcAddress('glUnlockArraysEXT');
  3012.   glCopyTexImage1DEXT := wglGetProcAddress('glCopyTexImage1DEXT');
  3013.   glCopyTexSubImage1DEXT := wglGetProcAddress('glCopyTexSubImage1DEXT');
  3014.   glCopyTexImage2DEXT := wglGetProcAddress('glCopyTexImage2DEXT');
  3015.   glCopyTexSubImage2DEXT := wglGetProcAddress('glCopyTexSubImage2DEXT');
  3016.   glCopyTexSubImage3DEXT := wglGetProcAddress('glCopyTexSubImage3DEXT');
  3017.   glCullParameterfvEXT := wglGetProcAddress('glCullParameterfvEXT');
  3018.   glCullParameterdvEXT := wglGetProcAddress('glCullParameterdvEXT');
  3019.   glIndexFuncEXT := wglGetProcAddress('glIndexFuncEXT');
  3020.   glIndexMaterialEXT := wglGetProcAddress('glIndexMaterialEXT');
  3021.   glPolygonOffsetEXT := wglGetProcAddress('glPolygonOffsetEXT');
  3022.   glTexSubImage1dEXT := wglGetProcAddress('glTexSubImage1DEXT');
  3023.   glTexSubImage2dEXT := wglGetProcAddress('glTexSubImage2DEXT');
  3024.   glTexSubImage3dEXT := wglGetProcAddress('glTexSubImage3DEXT');
  3025.   glGenTexturesEXT := wglGetProcAddress('glGenTexturesEXT');
  3026.   glDeleteTexturesEXT := wglGetProcAddress('glDeleteTexturesEXT');
  3027.   glBindTextureEXT := wglGetProcAddress('glBindTextureEXT');
  3028.   glPrioritizeTexturesEXT := wglGetProcAddress('glPrioritizeTexturesEXT');
  3029.   glAreTexturesResidentEXT := wglGetProcAddress('glAreTexturesResidentEXT');
  3030.   glIsTextureEXT := wglGetProcAddress('glIsTextureEXT');
  3031.  
  3032.   // EXT_vertex_array
  3033.   glArrayElementEXT := wglGetProcAddress('glArrayElementEXT');
  3034.   glColorPointerEXT := wglGetProcAddress('glColorPointerEXT');
  3035.   glDrawArraysEXT := wglGetProcAddress('glDrawArraysEXT');
  3036.   glEdgeFlagPointerEXT := wglGetProcAddress('glEdgeFlagPointerEXT');
  3037.   glGetPointervEXT := wglGetProcAddress('glGetPointervEXT');
  3038.   glIndexPointerEXT := wglGetProcAddress('glIndexPointerEXT');
  3039.   glNormalPointerEXT := wglGetProcAddress('glNormalPointerEXT');
  3040.   glTexCoordPointerEXT := wglGetProcAddress('glTexCoordPointerEXT');
  3041.   glVertexPointerEXT := wglGetProcAddress('glVertexPointerEXT');
  3042.  
  3043.   // ARB_multitexture
  3044.   glMultiTexCoord1dARB := wglGetProcAddress('glMultiTexCoord1dARB');
  3045.   glMultiTexCoord1dVARB := wglGetProcAddress('glMultiTexCoord1dVARB');
  3046.   glMultiTexCoord1fARBP := wglGetProcAddress('glMultiTexCoord1fARBP');
  3047.   glMultiTexCoord1fVARB := wglGetProcAddress('glMultiTexCoord1fVARB');
  3048.   glMultiTexCoord1iARB := wglGetProcAddress('glMultiTexCoord1iARB');
  3049.   glMultiTexCoord1iVARB := wglGetProcAddress('glMultiTexCoord1iVARB');
  3050.   glMultiTexCoord1sARBP := wglGetProcAddress('glMultiTexCoord1sARBP');
  3051.   glMultiTexCoord1sVARB := wglGetProcAddress('glIsTextureEXT');
  3052.   glMultiTexCoord2dARB := wglGetProcAddress('glMultiTexCoord2dARB');
  3053.   glMultiTexCoord2dvARB := wglGetProcAddress('glMultiTexCoord2dvARB');
  3054.   glMultiTexCoord2fARB := wglGetProcAddress('glMultiTexCoord2fARB');
  3055.   glMultiTexCoord2fvARB := wglGetProcAddress('glMultiTexCoord2fvARB');
  3056.   glMultiTexCoord2iARB := wglGetProcAddress('glMultiTexCoord2iARB');
  3057.   glMultiTexCoord2ivARB := wglGetProcAddress('glMultiTexCoord2ivARB');
  3058.   glMultiTexCoord2sARB := wglGetProcAddress('glMultiTexCoord2sARB');
  3059.   glMultiTexCoord2svARB := wglGetProcAddress('glMultiTexCoord2svARB');
  3060.   glMultiTexCoord3dARB := wglGetProcAddress('glMultiTexCoord3dARB');
  3061.   glMultiTexCoord3dvARB := wglGetProcAddress('glMultiTexCoord3dvARB');
  3062.   glMultiTexCoord3fARB := wglGetProcAddress('glMultiTexCoord3fARB');
  3063.   glMultiTexCoord3fvARB := wglGetProcAddress('glMultiTexCoord3fvARB');
  3064.   glMultiTexCoord3iARB := wglGetProcAddress('glMultiTexCoord3iARB');
  3065.   glMultiTexCoord3ivARB := wglGetProcAddress('glMultiTexCoord3ivARB');
  3066.   glMultiTexCoord3sARB := wglGetProcAddress('glMultiTexCoord3sARB');
  3067.   glMultiTexCoord3svARB := wglGetProcAddress('glMultiTexCoord3svARB');
  3068.   glMultiTexCoord4dARB := wglGetProcAddress('glMultiTexCoord4dARB');
  3069.   glMultiTexCoord4dvARB := wglGetProcAddress('glMultiTexCoord4dvARB');
  3070.   glMultiTexCoord4fARB := wglGetProcAddress('glMultiTexCoord4fARB');
  3071.   glMultiTexCoord4fvARB := wglGetProcAddress('glMultiTexCoord4fvARB');
  3072.   glMultiTexCoord4iARB := wglGetProcAddress('glMultiTexCoord4iARB');
  3073.   glMultiTexCoord4ivARB := wglGetProcAddress('glMultiTexCoord4ivARB');
  3074.   glMultiTexCoord4sARB := wglGetProcAddress('glMultiTexCoord4sARB');
  3075.   glMultiTexCoord4svARB := wglGetProcAddress('glMultiTexCoord4svARB');
  3076.   glActiveTextureARB := wglGetProcAddress('glActiveTextureARB');
  3077.   glClientActiveTextureARB := wglGetProcAddress('glClientActiveTextureARB');
  3078.  
  3079.   // EXT_compiled_vertex_array
  3080.   glLockArrayEXT := wglGetProcAddress('glLockArrayEXT');
  3081.   glUnlockArrayEXT := wglGetProcAddress('glUnlockArrayEXT');
  3082.  
  3083.   // EXT_cull_vertex
  3084.   glCullParameterdvEXT := wglGetProcAddress('glCullParameterdvEXT');
  3085.   glCullParameterfvEXT := wglGetProcAddress('glCullParameterfvEXT');
  3086.  
  3087.   // WIN_swap_hint
  3088.   glAddSwapHintRectWIN := wglGetProcAddress('glAddSwapHintRectWIN');
  3089.  
  3090.   // EXT_point_parameter
  3091.   glPointParameterfEXT := wglGetProcAddress('glPointParameterfEXT');
  3092.   glPointParameterfvEXT := wglGetProcAddress('glPointParameterfvEXT');
  3093.  
  3094.   // GLU extensions
  3095.   gluNurbsCallbackDataEXT := wglGetProcAddress('gluNurbsCallbackDataEXT');
  3096.   gluNewNurbsTessellatorEXT := wglGetProcAddress('gluNewNurbsTessellatorEXT');
  3097.   gluDeleteNurbsTessellatorEXT := wglGetProcAddress('gluDeleteNurbsTessellatorEXT');
  3098.  
  3099.   // to get synchronized again, if this proc was called externally
  3100.   LastPixelFormat := 0;
  3101. end;
  3102.  
  3103. //----------------------------------------------------------------------------------------------------------------------
  3104.  
  3105. procedure TrimAndSplitVersionString(Buffer: String; var Max, Min: Integer);
  3106.  
  3107. // peel out the X.Y form
  3108.  
  3109. var
  3110.   Separator: Integer;
  3111.  
  3112. begin
  3113.   try
  3114.     // there must be at least one dot to separate major and minor version number
  3115.     Separator := Pos('.', Buffer);
  3116.     // at least one number must be before and one after the dot
  3117.     if (Separator > 1) and (Separator < Length(Buffer)) and
  3118.        (Buffer[Separator - 1] in ['0'..'9']) and (Buffer[Separator + 1] in ['0'..'9']) then
  3119.     begin
  3120.       // ok, it's a valid version string
  3121.       // now remove unnecessary parts
  3122.       Dec(Separator);
  3123.       // find last non-numeric character before version number
  3124.       while (Separator > 0) and (Buffer[Separator] in ['0'..'9']) do Dec(Separator);
  3125.       // delete leading characters not belonging to the version string
  3126.       Delete(Buffer, 1, Separator);
  3127.       Separator := Pos('.', Buffer) + 1;
  3128.       // find first non-numeric character after version number
  3129.       while (Separator <= Length(Buffer)) and (Buffer[Separator] in ['0'..'9']) do Inc(Separator);
  3130.       // delete trailing characters not belonging to the version string
  3131.       Delete(Buffer, Separator, 255);
  3132.       // now translate the numbers
  3133.       Separator := Pos('.', Buffer); // necessary, because the buffer length may be changed
  3134.       Max := StrToInt(Copy(Buffer, 1, Separator - 1));
  3135.       Min := StrToInt(Copy(Buffer, Separator + 1, 255));
  3136.     end
  3137.     else Abort;
  3138.   except
  3139.     Min := 0;
  3140.     Max := 0;
  3141.   end;
  3142. end;
  3143.  
  3144. //----------------------------------------------------------------------------------------------------------------------
  3145.  
  3146. procedure ReadImplementationProperties;
  3147.  
  3148. var
  3149.   Buffer: String;
  3150.   MajorVersion,
  3151.   MinorVersion: Integer;
  3152.  
  3153. begin
  3154.   // determine version of implementation
  3155.   // GL
  3156.   Buffer := glGetString(GL_VERSION);
  3157.   TrimAndSplitVersionString(Buffer, Majorversion, MinorVersion);
  3158.   GL_VERSION_1_0 := True;
  3159.   GL_VERSION_1_1 := False;
  3160.   GL_VERSION_1_2 := False;
  3161.   if MajorVersion > 0 then
  3162.   begin
  3163.     if MinorVersion > 0 then
  3164.     begin
  3165.       GL_VERSION_1_1 := True;
  3166.       if MinorVersion > 1 then GL_VERSION_1_2 := True;
  3167.     end;
  3168.   end;
  3169.   // GLU
  3170.   GLU_VERSION_1_1 := False;
  3171.   GLU_VERSION_1_2 := False;
  3172.   GLU_VERSION_1_3 := False;
  3173.   // gluGetString is valid for version 1.1 or later
  3174.   if assigned(gluGetString) then
  3175.   begin
  3176.     Buffer := gluGetString(GLU_VERSION);
  3177.     TrimAndSplitVersionString(Buffer, Majorversion, MinorVersion);
  3178.     GLU_VERSION_1_1 := True;
  3179.     if MinorVersion > 1 then
  3180.     begin
  3181.       GLU_VERSION_1_2 := True;
  3182.       if MinorVersion > 2 then GLU_VERSION_1_3 := True;
  3183.     end;
  3184.   end;
  3185.  
  3186.   // check supported extensions
  3187.   // GL
  3188.   Buffer := glGetString(GL_EXTENSIONS);
  3189.   GL_EXT_abgr := Pos('GL_EXT_abgr', Buffer) > 0;
  3190.   GL_EXT_bgra := Pos('GL_EXT_bgra', Buffer) > 0;
  3191.   GL_EXT_packed_pixels := Pos('GL_EXT_packed_pixels', Buffer) > 0;
  3192.   GL_EXT_paletted_texture := Pos('GL_EXT_paletted_texture', Buffer) > 0;
  3193.   GL_EXT_vertex_array := Pos('GL_EXT_vertex_array', Buffer) > 0;
  3194.   GL_EXT_index_array_formats := Pos('GL_EXT_index_array_formats', Buffer) > 0;
  3195.   GL_EXT_index_func := Pos('GL_EXT_index_func', Buffer) > 0;
  3196.   GL_EXT_index_material := Pos('GL_EXT_index_material', Buffer) > 0;
  3197.   GL_EXT_index_texture := Pos('GL_EXT_index_texture', Buffer) > 0;
  3198.   GL_WIN_swap_hint := Pos('GL_WIN_swap_hint', Buffer) > 0;
  3199.   GL_EXT_blend_color := Pos('GL_EXT_blend_color', Buffer) > 0;
  3200.   GL_EXT_blend_logic_op := Pos('GL_EXT_blend_logic_op', Buffer) > 0;
  3201.   GL_EXT_blend_minmax := Pos('GL_EXT_blend_minmax', Buffer) > 0;
  3202.   GL_EXT_blend_subtract := Pos('GL_EXT_blend_subtract', Buffer) > 0;
  3203.   GL_EXT_convolution := Pos('GL_EXT_convolution', Buffer) > 0;
  3204.   GL_EXT_copy_texture := Pos('GL_EXT_copy_texture', Buffer) > 0;
  3205.   GL_EXT_histogram := Pos('GL_EXT_histogram', Buffer) > 0;
  3206.   GL_EXT_polygon_offset := Pos('GL_EXT_polygon_offset', Buffer) > 0;
  3207.   GL_EXT_subtexture := Pos('GL_EXT_subtexture', Buffer) > 0;
  3208.   GL_EXT_texture_object := Pos('GL_EXT_texture_object', Buffer) > 0;
  3209.   GL_EXT_texture3D := Pos('GL_EXT_texture3D', Buffer) > 0;
  3210.   GL_EXT_cmyka := Pos('GL_EXT_cmyka', Buffer) > 0;
  3211.   GL_EXT_rescale_normal := Pos('GL_EXT_rescale_normal', Buffer) > 0;
  3212.   GL_SGI_color_matrix := Pos('GL_SGI_color_matrix', Buffer) > 0;
  3213.   GL_EXT_texture_color_table := Pos('GL_EXT_texture_color_table', Buffer) > 0;
  3214.   GL_SGI_color_table := Pos('GL_SGI_color_table', Buffer) > 0;
  3215.   GL_EXT_clip_volume_hint := Pos('GL_EXT_clip_volume_hint', Buffer) > 0;
  3216.   GL_EXT_compiled_vertex_array := Pos('GL_EXT_compiled_vertex_array', Buffer) > 0;
  3217.   GL_EXT_cull_vertex := Pos('GL_EXT_cull_vertex', Buffer) > 0;
  3218.   GL_EXT_point_parameters := Pos('GL_EXT_point_parameters', Buffer) > 0;
  3219.   GL_EXT_texture_env_add := Pos('GL_EXT_texture_env_add', Buffer) > 0;
  3220.   GL_EXT_misc_attribute := Pos('GL_EXT_misc_attribute', Buffer) > 0;
  3221.   GL_EXT_scene_marker := Pos('GL_EXT_scene_marker', Buffer) > 0;
  3222.   GL_EXT_shared_texture_palette := Pos('GL_EXT_shared_texture_palette', Buffer) > 0;
  3223.   GL_EXT_texture_edge_clamp := Pos('GL_EXT_texture_edge_clamp', Buffer) > 0;
  3224.   GL_EXT_texture_env_combine := Pos('GL_EXT_texture_env_combine', Buffer) > 0;
  3225.   GL_NV_texgen_reflection := Pos('GL_NV_texgen_reflection', Buffer) > 0;
  3226.   GL_NV_texture_env_combine4 := Pos('GL_NV_texture_env_combine4', Buffer) > 0;
  3227.   GL_ARB_multitexture := Pos('GL_ARB_multitexture', Buffer) > 0;
  3228.   GL_ARB_imaging := Pos('GL_ARB_imaging', Buffer) > 0;
  3229.  
  3230.   GL_EXT_fog_coord := Pos('GL_EXT_fog_coord', Buffer) > 0;
  3231.   GL_EXT_light_max_exponent := Pos('GL_EXT_light_max_exponent', Buffer) > 0;
  3232.   GL_EXT_secondary_color := Pos('GL_EXT_secondary_color', Buffer) > 0;
  3233.   GL_EXT_separate_specular_color := Pos('GL_EXT_separate_specular_color', Buffer) > 0;
  3234.   GL_EXT_stencil_wrap := Pos('GL_EXT_stencil_wrap', Buffer) > 0;
  3235.   GL_EXT_texture_cube_map := Pos('GL_EXT_texture_cube_map', Buffer) > 0;
  3236.   GL_EXT_texture_filter_anisotropic := Pos('GL_EXT_texture_filter_anisotropic', Buffer) > 0;
  3237.   GL_EXT_texture_lod_bias := Pos('GL_EXT_texture_lod_bias', Buffer) > 0;
  3238.   GL_EXT_vertex_weighting := Pos('GL_EXT_vertex_weighting', Buffer) > 0;
  3239.   GL_KTX_buffer_region := Pos('GL_KTX_buffer_region', Buffer) > 0;
  3240.   GL_NV_blend_square := Pos('GL_NV_blend_square', Buffer) > 0;
  3241.   GL_NV_fog_distance := Pos('GL_NV_fog_distance', Buffer) > 0;
  3242.   GL_NV_register_combiners := Pos('GL_NV_register_combiners', Buffer) > 0;
  3243.   GL_NV_texgen_emboss := Pos('GL_NV_texgen_emboss', Buffer) > 0;
  3244.   GL_NV_vertex_array_range := Pos('GL_NV_vertex_array_range', Buffer) > 0;
  3245.   GL_SGIS_multitexture := Pos('GL_SGIS_multitexture', Buffer) > 0;
  3246.   GL_SGIS_texture_lod := Pos('GL_SGIS_texture_lod', Buffer) > 0;
  3247.   WGL_EXT_swap_control := Pos('WGL_EXT_swap_control', Buffer) > 0;
  3248.  
  3249.   // GLU
  3250.   Buffer := gluGetString(GLU_EXTENSIONS);
  3251.   GLU_EXT_TEXTURE := Pos('GLU_EXT_TEXTURE', Buffer) > 0;
  3252.   GLU_EXT_object_space_tess := Pos('GLU_EXT_object_space_tess', Buffer) > 0;
  3253.   GLU_EXT_nurbs_tessellator := Pos('GLU_EXT_nurbs_tessellator', Buffer) > 0;
  3254. end;
  3255.  
  3256. //----------------------------------------------------------------------------------------------------------------------
  3257.  
  3258. procedure SetupPalette(DC: HDC; PFD: TPixelFormatDescriptor);
  3259.  
  3260. var
  3261.   nColors,
  3262.   I: Integer;
  3263.   LogPalette: TMaxLogPalette;
  3264.   RedMask,
  3265.   GreenMask,
  3266.   BlueMask: Byte;
  3267.   Palette: HPalette;
  3268.  
  3269. begin
  3270.   nColors := 1 shl Pfd.cColorBits;
  3271.   LogPalette.palVersion := $300;
  3272.   LogPalette.palNumEntries := nColors;
  3273.   RedMask := (1 shl Pfd.cRedBits) - 1;
  3274.   GreenMask := (1 shl Pfd.cGreenBits) - 1;
  3275.   BlueMask := (1 shl Pfd.cBlueBits) - 1;
  3276.   with LogPalette, PFD do
  3277.     for I := 0 to nColors - 1 do
  3278.     begin
  3279.       palPalEntry[I].peRed := (((I shr cRedShift) and RedMask) * 255) div RedMask;
  3280.       palPalEntry[I].peGreen := (((I shr cGreenShift) and GreenMask) * 255) div GreenMask;
  3281.       palPalEntry[I].peBlue := (((I shr cBlueShift) and BlueMask) * 255) div BlueMask;
  3282.       palPalEntry[I].peFlags := 0;
  3283.     end;
  3284.  
  3285.   Palette := CreatePalette(PLogPalette(@LogPalette)^);
  3286.   if Palette <> 0 then
  3287.   begin
  3288.     SelectPalette(DC, Palette, False);
  3289.     RealizePalette(DC);
  3290.   end
  3291.   else RaiseLastWin32Error;
  3292. end;
  3293.  
  3294. //----------------------------------------------------------------------------------------------------------------------
  3295.  
  3296. function  CreateRenderingContext(DC: HDC; Options: TRCOptions; ColorBits, StencilBits, AccumBits, AuxBuffers: Integer;
  3297.   Layer: Integer): HGLRC;
  3298.  
  3299. // Set the OpenGL properties required to draw to the given canvas and
  3300. // create a rendering context for it.
  3301.  
  3302. const
  3303.   MemoryDCs = [OBJ_MEMDC, OBJ_METADC, OBJ_ENHMETADC];
  3304.  
  3305. var
  3306.   PFDescriptor: TPixelFormatDescriptor;
  3307.   PixelFormat: Integer;
  3308.   AType: DWORD;
  3309.  
  3310. begin
  3311.   FillChar(PFDescriptor, SizeOf(PFDescriptor), 0);
  3312.   with PFDescriptor do
  3313.   begin
  3314.     nSize := SizeOf(PFDescriptor);
  3315.     nVersion := 1;
  3316.     dwFlags := PFD_SUPPORT_OPENGL;
  3317.     AType := GetObjectType(DC);
  3318.     if AType = 0 then RaiseLastWin32Error;
  3319.     if AType in MemoryDCs then dwFlags := dwFlags or PFD_DRAW_TO_BITMAP
  3320.                           else dwFlags := dwFlags or PFD_DRAW_TO_WINDOW;
  3321.     if opDoubleBuffered in Options then dwFlags := dwFlags or PFD_DOUBLEBUFFER;
  3322.     if opGDI in Options then dwFlags := dwFlags or PFD_SUPPORT_GDI;
  3323.     if opStereo in Options then dwFlags := dwFlags or PFD_STEREO;
  3324.     iPixelType := PFD_TYPE_RGBA;
  3325.     cColorBits := ColorBits;
  3326.     cDepthBits := 32;
  3327.     cStencilBits := StencilBits;
  3328.     cAccumBits := AccumBits;
  3329.     cAuxBuffers := AuxBuffers;
  3330.     if Layer = 0 then iLayerType := PFD_MAIN_PLANE
  3331.                  else
  3332.       if Layer > 0 then iLayerType := PFD_OVERLAY_PLANE
  3333.                    else iLayerType := Byte(-1) {PFD_UNDERLAY_PLANE, only Inprise knows why they have declared
  3334.                                                 an obvious Byte value as LongWord};
  3335.   end;
  3336.  
  3337.   // just in case it didn't happen already
  3338.   if not InitOpenGL then RaiseLastWin32Error;
  3339.   PixelFormat := ChoosePixelFormat(DC, @PFDescriptor);
  3340.   if PixelFormat = 0 then RaiseLastWin32Error;
  3341.   // NOTE: It is not allowed to change a pixel format of a device context once it has been set.
  3342.   //       So cache DC and RC always somewhere to avoid re-setting the pixel format!
  3343.   if not SetPixelFormat(DC, PixelFormat, @PFDescriptor) then RaiseLastWin32Error;
  3344.   // check the properties just set
  3345.   DescribePixelFormat(DC, PixelFormat, SizeOf(PFDescriptor), PFDescriptor);
  3346.   with PFDescriptor do
  3347.     if (dwFlags and PFD_NEED_PALETTE) <> 0 then SetupPalette(DC, PFDescriptor);
  3348.  
  3349.   Result := wglCreateLayerContext(DC, Layer);
  3350.   if Result = 0 then RaiseLastWin32Error
  3351.                 else LastPixelFormat := 0;
  3352. end;
  3353.  
  3354. //----------------------------------------------------------------------------------------------------------------------
  3355.  
  3356. procedure ActivateRenderingContext(DC: HDC; RC: HGLRC);
  3357.  
  3358. // read extension addresses
  3359.  
  3360. var
  3361.   PixelFormat: Integer;
  3362.  
  3363. begin
  3364.   // The extension function addresses are unique for each pixel format. All rendering
  3365.   // contexts of a given pixel format share the same extension function addresses.
  3366.   PixelFormat := GetPixelFormat(DC);
  3367.   wglMakeCurrent(DC, RC);
  3368.   if PixelFormat <> LastPixelFormat then
  3369.   begin
  3370.     ClearExtensions;
  3371.     ReadImplementationProperties;
  3372.     ReadExtensions;
  3373.     LastPixelFormat := PixelFormat;
  3374.   end;
  3375. end;
  3376.  
  3377. //----------------------------------------------------------------------------------------------------------------------
  3378.  
  3379. procedure DeactivateRenderingContext;
  3380.  
  3381. begin
  3382.   wglMakeCurrent(0, 0);
  3383. end;
  3384.  
  3385. //----------------------------------------------------------------------------------------------------------------------
  3386.  
  3387. procedure DestroyRenderingContext(RC: HGLRC);
  3388.  
  3389. begin
  3390.   if RC <> 0 then wglDeleteContext(RC);
  3391. end;
  3392.  
  3393. //----------------------------------------------------------------------------------------------------------------------
  3394.  
  3395. procedure CloseOpenGL;
  3396.  
  3397. begin
  3398.   if GLHandle <> 0 then begin FreeLibrary(GLHandle); GLHandle := 0; end;
  3399.   if GLUHandle <> 0 then begin FreeLibrary(GLUHandle); GLUHandle := 0; end;
  3400.   ClearProcAddresses;
  3401.   ClearExtensions;
  3402. end;
  3403.  
  3404. //----------------------------------------------------------------------------------------------------------------------
  3405.  
  3406. function InitOpenGL: Boolean;
  3407.  
  3408. begin
  3409.   if (GLHandle = 0) or (GLUHandle = 0) then
  3410.   begin
  3411.     Result := InitOpenGLFromLibrary('OpenGL32.DLL', 'GLU32.DLL');
  3412.   end
  3413.   else Result := True;
  3414. end;
  3415.  
  3416. //----------------------------------------------------------------------------------------------------------------------
  3417.  
  3418. function InitOpenGLFromLibrary(GL_Name, GLU_Name: String): Boolean;
  3419.  
  3420. begin
  3421.   Result := False;
  3422.   CloseOpenGL;
  3423.   GLHandle := LoadLibrary(PChar(GL_Name));
  3424.   GLUHandle := LoadLibrary(PChar(GLU_Name));
  3425.   if (GLHandle <> 0) and (GLUHandle <> 0) then
  3426.   begin
  3427.     LoadProcAddresses;
  3428.     Result := True;
  3429.   end
  3430.   else
  3431.   begin
  3432.     if GLHandle <> 0 then FreeLibrary(GLHandle);
  3433.     if GLUHandle <> 0 then FreeLibrary(GLUHandle);
  3434.   end;
  3435. end;
  3436.  
  3437. //----------------------------------------------------------------------------------------------------------------------
  3438.  
  3439. initialization
  3440.   Set8087CW($133F);
  3441. finalization
  3442.   CloseOpenGL;
  3443.   // we don't need to reset the FPU control word as the previous set call is process specific
  3444. end.
  3445.