sig
  type primitive =
      GL_POINTS
    | GL_LINES
    | GL_LINE_LOOP
    | GL_LINE_STRIP
    | GL_TRIANGLES
    | GL_TRIANGLE_STRIP
    | GL_TRIANGLE_FAN
    | GL_QUADS
    | GL_QUAD_STRIP
    | GL_POLYGON
  external glBegin : primitive:GL.primitive -> unit = "ml_glbegin" "noalloc"
  external glEnd : unit -> unit = "ml_glend" "noalloc"
  external glVertex2 : x:float -> y:float -> unit = "ml_glvertex2" "noalloc"
  external glVertex3 : x:float -> y:float -> z:float -> unit = "ml_glvertex3"
    "noalloc"
  external glVertex4 : x:float -> y:float -> z:float -> w:float -> unit
    = "ml_glvertex4" "noalloc"
  external glVertex2v : float * float -> unit = "ml_glvertex2v" "noalloc"
  external glVertex3v : float * float * float -> unit = "ml_glvertex3v"
    "noalloc"
  external glVertex4v : float * float * float * float -> unit
    = "ml_glvertex4v" "noalloc"
  external glNormal3 : nx:float -> ny:float -> nz:float -> unit
    = "ml_glnormal3" "noalloc"
  external glNormal3v : v:float * float * float -> unit = "ml_glnormal3v"
    "noalloc"
  external glIndex : c:float -> unit = "ml_glindexd" "noalloc"
  external glIndexi : c:int -> unit = "ml_glindexi" "noalloc"
  external glColor3 : r:float -> g:float -> b:float -> unit = "ml_glcolor3"
    "noalloc"
  external glColor4 : r:float -> g:float -> b:float -> a:float -> unit
    = "ml_glcolor4" "noalloc"
  external glColor3v : v:float * float * float -> unit = "ml_glcolor3v"
    "noalloc"
  external glColor4v : v:float * float * float * float -> unit
    = "ml_glcolor4v" "noalloc"
  external glColor3c : r:char -> g:char -> b:char -> unit = "ml_glcolor3c"
    "noalloc"
  external glColor4c : r:char -> g:char -> b:char -> a:char -> unit
    = "ml_glcolor4c" "noalloc"
  external glColor3cv : v:char * char * char -> unit = "ml_glcolor3cv"
    "noalloc"
  external glColor4cv : v:char * char * char * char -> unit = "ml_glcolor4cv"
    "noalloc"
  external glEdgeFlag : flag:bool -> unit = "ml_gledgeflag" "noalloc"
  external glRasterPos2 : x:float -> y:float -> unit = "ml_glrasterpos2d"
    "noalloc"
  external glRasterPos3 : x:float -> y:float -> z:float -> unit
    = "ml_glrasterpos3d" "noalloc"
  external glRasterPos4 : x:float -> y:float -> z:float -> w:float -> unit
    = "ml_glrasterpos4d" "noalloc"
  external glRasterPos2i : x:int -> y:int -> unit = "ml_glrasterpos2i"
    "noalloc"
  external glRasterPos3i : x:int -> y:int -> z:int -> unit
    = "ml_glrasterpos3i" "noalloc"
  external glRasterPos4i : x:int -> y:int -> z:int -> w:int -> unit
    = "ml_glrasterpos4i" "noalloc"
  external glRasterPos2v : v:float * float -> unit = "ml_glrasterpos2dv"
    "noalloc"
  external glRasterPos3v : v:float * float * float -> unit
    = "ml_glrasterpos3dv" "noalloc"
  external glRasterPos4v : v:float * float * float * float -> unit
    = "ml_glrasterpos4dv" "noalloc"
  external glRasterPos2iv : v:int * int -> unit = "ml_glrasterpos2iv"
    "noalloc"
  external glRasterPos3iv : v:int * int * int -> unit = "ml_glrasterpos3iv"
    "noalloc"
  external glRasterPos4iv : v:int * int * int * int -> unit
    = "ml_glrasterpos4iv" "noalloc"
  external glRecti : x1:int -> y1:int -> x2:int -> y2:int -> unit
    = "ml_glrecti" "noalloc"
  external glRect : x1:float -> y1:float -> x2:float -> y2:float -> unit
    = "ml_glrect" "noalloc"
  type matrix_mode = GL_MODELVIEW | GL_PROJECTION | GL_TEXTURE
  external glMatrixMode : mode:GL.matrix_mode -> unit = "ml_glmatrixmode"
    "noalloc"
  external glViewport : x:int -> y:int -> width:int -> height:int -> unit
    = "ml_glviewport" "noalloc"
  external glOrtho :
    left:float ->
    right:float ->
    bottom:float -> top:float -> near:float -> far:float -> unit
    = "ml_glortho_bytecode" "ml_glortho_native"
  external glFrustum :
    left:float ->
    right:float ->
    bottom:float -> top:float -> near:float -> far:float -> unit
    = "ml_glfrustum_bytecode" "ml_glfrustum_native"
  external glPushMatrix : unit -> unit = "ml_glpushmatrix" "noalloc"
  external glPopMatrix : unit -> unit = "ml_glpopmatrix" "noalloc"
  external glLoadIdentity : unit -> unit = "ml_glloadidentity" "noalloc"
  external glRotatev : angle:float -> vec:float * float * float -> unit
    = "ml_glrotatev" "noalloc"
  external glRotate : angle:float -> x:float -> y:float -> z:float -> unit
    = "ml_glrotate" "noalloc"
  external glTranslatev : float * float * float -> unit = "ml_gltranslatev"
    "noalloc"
  external glTranslate : x:float -> y:float -> z:float -> unit
    = "ml_gltranslate" "noalloc"
  external glScalev : float * float * float -> unit = "ml_glscalev" "noalloc"
  external glScale : x:float -> y:float -> z:float -> unit = "ml_glscale"
    "noalloc"
  val glMultMatrix : mat:float array array -> unit
  external glMultMatrixFlat : float array -> unit = "ml_glmultmatrixd_flat"
    "noalloc"
  external glMultMatrixFlat_unsafe : float array -> unit
    = "ml_glmultmatrixd_flat_unsafe"
  val glLoadMatrix : mat:float array array -> unit
  external glLoadMatrixFlat : float array -> unit = "ml_glloadmatrixd_flat"
    "noalloc"
  external glLoadMatrixFlat_unsafe : float array -> unit
    = "ml_glloadmatrixd_flat_unsafe" "noalloc"
  external glFlush : unit -> unit = "ml_glflush" "noalloc"
  type orientation = GL_CW | GL_CCW
  external glFrontFace : orientation:GL.orientation -> unit
    = "ml_glfrontface" "noalloc"
  external glScissor : x:int -> y:int -> width:int -> height:int -> unit
    = "ml_glscissor" "noalloc"
  external glFinish : unit -> unit = "ml_glfinish" "noalloc"
  external glClearColor : r:float -> g:float -> b:float -> a:float -> unit
    = "ml_glclearcolor" "noalloc"
  external glClearIndex : float -> unit = "ml_glclearindex" "noalloc"
  external glColorMask : r:bool -> g:bool -> b:bool -> a:bool -> unit
    = "ml_glcolormask" "noalloc"
  module Attrib :
    sig
      type attrib_bit =
          GL_ACCUM_BUFFER_BIT
        | GL_COLOR_BUFFER_BIT
        | GL_CURRENT_BIT
        | GL_DEPTH_BUFFER_BIT
        | GL_ENABLE_BIT
        | GL_EVAL_BIT
        | GL_FOG_BIT
        | GL_HINT_BIT
        | GL_LIGHTING_BIT
        | GL_LINE_BIT
        | GL_LIST_BIT
        | GL_MULTISAMPLE_BIT
        | GL_PIXEL_MODE_BIT
        | GL_POINT_BIT
        | GL_POLYGON_BIT
        | GL_POLYGON_STIPPLE_BIT
        | GL_SCISSOR_BIT
        | GL_STENCIL_BUFFER_BIT
        | GL_TEXTURE_BIT
        | GL_TRANSFORM_BIT
        | GL_VIEWPORT_BIT
    end
  external glPushAttrib : attrib:GL.Attrib.attrib_bit list -> unit
    = "ml_glpushattrib" "noalloc"
  external glPopAttrib : unit -> unit = "ml_glpopattrib" "noalloc"
  type face_mode = GL_FRONT | GL_BACK | GL_FRONT_AND_BACK
  type polygon_mode = GL_POINT | GL_LINE | GL_FILL
  external glPolygonMode : face:GL.face_mode -> mode:GL.polygon_mode -> unit
    = "ml_glpolygonmode" "noalloc"
  external glGetPolygonMode : unit -> GL.polygon_mode * GL.polygon_mode
    = "ml_glgetpolygonmode"
  type clear_mask =
      GL_COLOR_BUFFER_BIT
    | GL_DEPTH_BUFFER_BIT
    | GL_ACCUM_BUFFER_BIT
    | GL_STENCIL_BUFFER_BIT
  external glClear : mask:GL.clear_mask list -> unit = "ml_glclear" "noalloc"
  external glLineWidth : width:float -> unit = "ml_gllinewidth" "noalloc"
  external glPointSize : size:float -> unit = "ml_glpointsize" "noalloc"
  type sprite_coord_origin = GL_LOWER_LEFT | GL_UPPER_LEFT
  type point_parameter =
      GL_POINT_SIZE_MIN of float
    | GL_POINT_SIZE_MAX of float
    | GL_POINT_FADE_THRESHOLD_SIZE of float
    | GL_POINT_DISTANCE_ATTENUATION of float * float * float
    | GL_POINT_SPRITE_COORD_ORIGIN of GL.sprite_coord_origin
  val glPointParameter : GL.point_parameter -> unit
  type gl_func =
      GL_NEVER
    | GL_LESS
    | GL_EQUAL
    | GL_LEQUAL
    | GL_GREATER
    | GL_NOTEQUAL
    | GL_GEQUAL
    | GL_ALWAYS
  external glAlphaFunc : func:GL.gl_func -> ref:float -> unit
    = "ml_glalphafunc" "noalloc"
  type hint_target =
      GL_FOG_HINT
    | GL_LINE_SMOOTH_HINT
    | GL_PERSPECTIVE_CORRECTION_HINT
    | GL_POINT_SMOOTH_HINT
    | GL_POLYGON_SMOOTH_HINT
    | GL_TEXTURE_COMPRESSION_HINT
    | GL_GENERATE_MIPMAP_HINT
    | GL_FRAGMENT_SHADER_DERIVATIVE_HINT
  type hint_mode = GL_FASTEST | GL_NICEST | GL_DONT_CARE
  external glHint : target:GL.hint_target -> mode:GL.hint_mode -> unit
    = "ml_glhint" "noalloc"
  external glCullFace : mode:GL.face_mode -> unit = "ml_glcullface" "noalloc"
  external glGetCullFaceMode : unit -> GL.face_mode = "ml_glgetcullfacemode"
    "noalloc"
  external glLineStipple : factor:int -> pattern:int -> unit
    = "ml_gllinestipple" "noalloc"
  type polygon_stipple_mask =
      (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t
  external glPolygonStipple : mask:GL.polygon_stipple_mask -> unit
    = "ml_glpolygonstipple" "noalloc"
  external glPolygonStipple_unsafe : mask:GL.polygon_stipple_mask -> unit
    = "ml_glpolygonstipple_unsafe" "noalloc"
  module DrawBuffer :
    sig
      type draw_buffer_mode =
          GL_NONE
        | GL_FRONT_LEFT
        | GL_FRONT_RIGHT
        | GL_BACK_LEFT
        | GL_BACK_RIGHT
        | GL_FRONT
        | GL_BACK
        | GL_LEFT
        | GL_RIGHT
        | GL_FRONT_AND_BACK
        | GL_AUX0
        | GL_AUX1
        | GL_AUX2
        | GL_AUX3
    end
  external glDrawBuffer : mode:GL.DrawBuffer.draw_buffer_mode -> unit
    = "ml_gldrawbuffer" "noalloc"
  module ReadBuffer :
    sig
      type read_buffer_mode =
          GL_FRONT_LEFT
        | GL_FRONT_RIGHT
        | GL_BACK_LEFT
        | GL_BACK_RIGHT
        | GL_FRONT
        | GL_BACK
        | GL_LEFT
        | GL_RIGHT
        | GL_AUX0
        | GL_AUX1
        | GL_AUX2
        | GL_AUX3
    end
  external glReadBuffer : mode:GL.ReadBuffer.read_buffer_mode -> unit
    = "ml_glreadbuffer" "noalloc"
  module Sfactor :
    sig
      type blend_sfactor =
          GL_ZERO
        | GL_ONE
        | GL_DST_COLOR
        | GL_ONE_MINUS_DST_COLOR
        | GL_SRC_ALPHA
        | GL_ONE_MINUS_SRC_ALPHA
        | GL_DST_ALPHA
        | GL_ONE_MINUS_DST_ALPHA
        | GL_SRC_ALPHA_SATURATE
    end
  module Dfactor :
    sig
      type blend_dfactor =
          GL_ZERO
        | GL_ONE
        | GL_SRC_COLOR
        | GL_ONE_MINUS_SRC_COLOR
        | GL_SRC_ALPHA
        | GL_ONE_MINUS_SRC_ALPHA
        | GL_DST_ALPHA
        | GL_ONE_MINUS_DST_ALPHA
    end
  external glBlendFunc :
    sfactor:GL.Sfactor.blend_sfactor ->
    dfactor:GL.Dfactor.blend_dfactor -> unit = "ml_glblendfunc" "noalloc"
  type blend_mode =
      GL_FUNC_ADD
    | GL_FUNC_SUBTRACT
    | GL_FUNC_REVERSE_SUBTRACT
    | GL_MIN
    | GL_MAX
  external glBlendEquation : mode:GL.blend_mode -> unit
    = "ml_glblendequation" "noalloc"
  module Op :
    sig
      type op_code =
          GL_CLEAR
        | GL_SET
        | GL_COPY
        | GL_COPY_INVERTED
        | GL_NOOP
        | GL_INVERT
        | GL_AND
        | GL_NAND
        | GL_OR
        | GL_NOR
        | GL_XOR
        | GL_EQUIV
        | GL_AND_REVERSE
        | GL_AND_INVERTED
        | GL_OR_REVERSE
        | GL_OR_INVERTED
    end
  external glLogicOp : opcode:GL.Op.op_code -> unit = "ml_gllogicop"
    "noalloc"
  external glPolygonOffset : factor:float -> units:float -> unit
    = "ml_glpolygonoffset" "noalloc"
  type shade_mode = GL_FLAT | GL_SMOOTH
  external glShadeModel : GL.shade_mode -> unit = "ml_glshademodel" "noalloc"
  module Light :
    sig
      type light_pname =
          GL_SPOT_EXPONENT of float
        | GL_SPOT_CUTOFF of float
        | GL_CONSTANT_ATTENUATION of float
        | GL_LINEAR_ATTENUATION of float
        | GL_QUADRATIC_ATTENUATION of float
        | GL_SPOT_DIRECTION of (float * float * float)
        | GL_AMBIENT of (float * float * float * float)
        | GL_DIFFUSE of (float * float * float * float)
        | GL_SPECULAR of (float * float * float * float)
        | GL_POSITION of (float * float * float * float)
    end
  type gl_light = GL_LIGHT of int
  val glLight : light:GL.gl_light -> pname:GL.Light.light_pname -> unit
  type color_control = GL_SEPARATE_SPECULAR_COLOR | GL_SINGLE_COLOR
  type light_model =
      GL_LIGHT_MODEL_AMBIENT of (float * float * float * float)
    | GL_LIGHT_MODEL_COLOR_CONTROL of GL.color_control
    | GL_LIGHT_MODEL_LOCAL_VIEWER of bool
    | GL_LIGHT_MODEL_TWO_SIDE of bool
  val glLightModel : light_model:GL.light_model -> unit
  module Material :
    sig
      type material_mode =
          GL_AMBIENT of (float * float * float * float)
        | GL_DIFFUSE of (float * float * float * float)
        | GL_SPECULAR of (float * float * float * float)
        | GL_EMISSION of (float * float * float * float)
        | GL_SHININESS of float
        | GL_AMBIENT_AND_DIFFUSE of (float * float * float * float)
        | GL_COLOR_INDEXES of (int * int * int)
    end
  val glMaterial :
    face:GL.face_mode -> mode:GL.Material.material_mode -> unit
  module GetMat :
    sig
      type face_mode = GL_FRONT | GL_BACK
      type get_material_4f =
          GL_AMBIENT
        | GL_DIFFUSE
        | GL_SPECULAR
        | GL_EMISSION
      type get_material_1f = GL_SHININESS
      type get_material_3i = GL_COLOR_INDEXES
    end
  external glGetMaterial4f :
    GL.GetMat.face_mode ->
    mode:GL.GetMat.get_material_4f -> float * float * float * float
    = "ml_glgetmaterial4f"
  external glGetMaterial1f :
    GL.GetMat.face_mode -> mode:GL.GetMat.get_material_1f -> float
    = "ml_glgetmaterial1f"
  external glGetMaterial3i :
    GL.GetMat.face_mode -> mode:GL.GetMat.get_material_3i -> int * int * int
    = "ml_glgetmaterial3i"
  type color_material_mode =
      GL_EMISSION
    | GL_AMBIENT
    | GL_DIFFUSE
    | GL_SPECULAR
    | GL_AMBIENT_AND_DIFFUSE
  external glColorMaterial :
    face:GL.face_mode -> mode:GL.color_material_mode -> unit
    = "ml_glcolormaterial" "noalloc"
  external glSecondaryColor3 : red:float -> green:float -> blue:float -> unit
    = "ml_glsecondarycolor3d" "noalloc"
  external glStencilFunc : func:GL.gl_func -> ref:int -> mask:int -> unit
    = "ml_glstencilfunc" "noalloc"
  external glStencilFuncn :
    func:GL.gl_func -> ref:int -> mask:nativeint -> unit
    = "ml_glstencilfuncn" "noalloc"
  external glStencilMask : mask:int -> unit = "ml_glstencilmask" "noalloc"
  type stencil_op =
      GL_KEEP
    | GL_ZERO
    | GL_REPLACE
    | GL_INCR
    | GL_INCR_WRAP
    | GL_DECR
    | GL_DECR_WRAP
    | GL_INVERT
  external glStencilOp :
    sfail:GL.stencil_op ->
    dpfail:GL.stencil_op -> dppass:GL.stencil_op -> unit = "ml_glstencilop"
    "noalloc"
  external glClearStencil : s:int -> unit = "ml_glclearstencil" "noalloc"
  external glDepthRange : near:float -> far:float -> unit = "ml_gldepthrange"
    "noalloc"
  external glClearDepth : depth:float -> unit = "ml_glcleardepth" "noalloc"
  external glDepthFunc : func:GL.gl_func -> unit = "ml_gldepthfunc" "noalloc"
  external glDepthMask : bool -> unit = "ml_gldepthmask" "noalloc"
  type accum_op = GL_ACCUM | GL_LOAD | GL_ADD | GL_MULT | GL_RETURN
  external glAccum : op:GL.accum_op -> value:float -> unit = "ml_glaccum"
    "noalloc"
  external glClearAccum : r:float -> g:float -> b:float -> a:float -> unit
    = "ml_glclearaccum" "noalloc"
  type gl_capability =
      GL_ALPHA_TEST
    | GL_AUTO_NORMAL
    | GL_BLEND
    | GL_CLIP_PLANE0
    | GL_CLIP_PLANE1
    | GL_CLIP_PLANE2
    | GL_CLIP_PLANE3
    | GL_CLIP_PLANE4
    | GL_CLIP_PLANE5
    | GL_COLOR_LOGIC_OP
    | GL_COLOR_MATERIAL
    | GL_COLOR_TABLE
    | GL_CONVOLUTION_1D
    | GL_CONVOLUTION_2D
    | GL_CULL_FACE
    | GL_DEPTH_TEST
    | GL_DITHER
    | GL_FOG
    | GL_HISTOGRAM
    | GL_INDEX_LOGIC_OP
    | GL_LIGHT0
    | GL_LIGHT1
    | GL_LIGHT2
    | GL_LIGHT3
    | GL_LIGHT4
    | GL_LIGHT5
    | GL_LIGHT6
    | GL_LIGHT7
    | GL_LIGHTING
    | GL_LINE_SMOOTH
    | GL_LINE_STIPPLE
    | GL_MAP1_COLOR_4
    | GL_MAP1_INDEX
    | GL_MAP1_NORMAL
    | GL_MAP1_TEXTURE_COORD_1
    | GL_MAP1_TEXTURE_COORD_2
    | GL_MAP1_TEXTURE_COORD_3
    | GL_MAP1_TEXTURE_COORD_4
    | GL_MAP1_VERTEX_3
    | GL_MAP1_VERTEX_4
    | GL_MAP2_COLOR_4
    | GL_MAP2_INDEX
    | GL_MAP2_NORMAL
    | GL_MAP2_TEXTURE_COORD_1
    | GL_MAP2_TEXTURE_COORD_2
    | GL_MAP2_TEXTURE_COORD_3
    | GL_MAP2_TEXTURE_COORD_4
    | GL_MAP2_VERTEX_3
    | GL_MAP2_VERTEX_4
    | GL_MINMAX
    | GL_MULTISAMPLE
    | GL_NORMALIZE
    | GL_POINT_SMOOTH
    | GL_POINT_SPRITE
    | GL_POLYGON_OFFSET_FILL
    | GL_POLYGON_OFFSET_LINE
    | GL_POLYGON_OFFSET_POINT
    | GL_POLYGON_SMOOTH
    | GL_POLYGON_STIPPLE
    | GL_POST_COLOR_MATRIX_COLOR_TABLE
    | GL_POST_CONVOLUTION_COLOR_TABLE
    | GL_RESCALE_NORMAL
    | GL_SAMPLE_ALPHA_TO_COVERAGE
    | GL_SAMPLE_ALPHA_TO_ONE
    | GL_SAMPLE_COVERAGE
    | GL_SEPARABLE_2D
    | GL_SCISSOR_TEST
    | GL_STENCIL_TEST
    | GL_TEXTURE_1D
    | GL_TEXTURE_2D
    | GL_TEXTURE_3D
    | GL_TEXTURE_CUBE_MAP
    | GL_TEXTURE_GEN_Q
    | GL_TEXTURE_GEN_R
    | GL_TEXTURE_GEN_S
    | GL_TEXTURE_GEN_T
    | GL_VERTEX_PROGRAM_POINT_SIZE
    | GL_VERTEX_PROGRAM_TWO_SIDE
  external glEnable : cap:GL.gl_capability -> unit = "ml_glenable" "noalloc"
  external glDisable : cap:GL.gl_capability -> unit = "ml_gldisable"
    "noalloc"
  module Enabled :
    sig
      type enabled_cap =
          GL_ALPHA_TEST
        | GL_AUTO_NORMAL
        | GL_BLEND
        | GL_CLIP_PLANE0
        | GL_CLIP_PLANE1
        | GL_CLIP_PLANE2
        | GL_CLIP_PLANE3
        | GL_CLIP_PLANE4
        | GL_CLIP_PLANE5
        | GL_COLOR_ARRAY
        | GL_COLOR_LOGIC_OP
        | GL_COLOR_MATERIAL
        | GL_COLOR_SUM
        | GL_COLOR_TABLE
        | GL_CONVOLUTION_1D
        | GL_CONVOLUTION_2D
        | GL_CULL_FACE
        | GL_DEPTH_TEST
        | GL_DITHER
        | GL_EDGE_FLAG_ARRAY
        | GL_FOG
        | GL_FOG_COORD_ARRAY
        | GL_HISTOGRAM
        | GL_INDEX_ARRAY
        | GL_INDEX_LOGIC_OP
        | GL_LIGHT0
        | GL_LIGHT1
        | GL_LIGHT2
        | GL_LIGHT3
        | GL_LIGHT4
        | GL_LIGHT5
        | GL_LIGHT6
        | GL_LIGHT7
        | GL_LIGHTING
        | GL_LINE_SMOOTH
        | GL_LINE_STIPPLE
        | GL_MAP1_COLOR_4
        | GL_MAP1_INDEX
        | GL_MAP1_NORMAL
        | GL_MAP1_TEXTURE_COORD_1
        | GL_MAP1_TEXTURE_COORD_2
        | GL_MAP1_TEXTURE_COORD_3
        | GL_MAP1_TEXTURE_COORD_4
        | GL_MAP2_COLOR_4
        | GL_MAP2_INDEX
        | GL_MAP2_NORMAL
        | GL_MAP2_TEXTURE_COORD_1
        | GL_MAP2_TEXTURE_COORD_2
        | GL_MAP2_TEXTURE_COORD_3
        | GL_MAP2_TEXTURE_COORD_4
        | GL_MAP2_VERTEX_3
        | GL_MAP2_VERTEX_4
        | GL_MINMAX
        | GL_MULTISAMPLE
        | GL_NORMAL_ARRAY
        | GL_NORMALIZE
        | GL_POINT_SMOOTH
        | GL_POINT_SPRITE
        | GL_POLYGON_SMOOTH
        | GL_POLYGON_OFFSET_FILL
        | GL_POLYGON_OFFSET_LINE
        | GL_POLYGON_OFFSET_POINT
        | GL_POLYGON_STIPPLE
        | GL_POST_COLOR_MATRIX_COLOR_TABLE
        | GL_POST_CONVOLUTION_COLOR_TABLE
        | GL_RESCALE_NORMAL
        | GL_SAMPLE_ALPHA_TO_COVERAGE
        | GL_SAMPLE_ALPHA_TO_ONE
        | GL_SAMPLE_COVERAGE
        | GL_SCISSOR_TEST
        | GL_SECONDARY_COLOR_ARRAY
        | GL_SEPARABLE_2D
        | GL_STENCIL_TEST
        | GL_TEXTURE_1D
        | GL_TEXTURE_2D
        | GL_TEXTURE_3D
        | GL_TEXTURE_COORD_ARRAY
        | GL_TEXTURE_CUBE_MAP
        | GL_TEXTURE_GEN_Q
        | GL_TEXTURE_GEN_R
        | GL_TEXTURE_GEN_S
        | GL_TEXTURE_GEN_T
        | GL_VERTEX_ARRAY
        | GL_VERTEX_PROGRAM_POINT_SIZE
        | GL_VERTEX_PROGRAM_TWO_SIDE
    end
  external glIsEnabled : GL.Enabled.enabled_cap -> bool = "ml_glisenabled"
    "noalloc"
  type texture_id = private int
  external glGenTextures : n:int -> GL.texture_id array = "ml_glgentextures"
  external glGenTexture : unit -> GL.texture_id = "ml_glgentexture" "noalloc"
  module BindTex :
    sig
      type texture_binding =
          GL_TEXTURE_1D
        | GL_TEXTURE_2D
        | GL_TEXTURE_3D
        | GL_TEXTURE_CUBE_MAP
    end
  external glBindTexture :
    target:GL.BindTex.texture_binding -> texture:GL.texture_id -> unit
    = "ml_glbindtexture" "noalloc"
  external glUnbindTexture : target:GL.BindTex.texture_binding -> unit
    = "ml_glunbindtexture" "noalloc"
  external glBindTexture2D : texture:GL.texture_id -> unit
    = "ml_glbindtexture2d" "noalloc"
  external glUnbindTexture2D : unit -> unit = "ml_glunbindtexture2d"
    "noalloc"
  external glDeleteTextures : textures:GL.texture_id array -> unit
    = "ml_gldeletetextures" "noalloc"
  external glDeleteTexture : texture:GL.texture_id -> unit
    = "ml_gldeletetexture" "noalloc"
  external glIsTexture : texture:GL.texture_id -> bool = "ml_glistexture"
    "noalloc"
  external glPrioritizeTextures :
    textures:GL.texture_id array -> priority:float array -> unit
    = "ml_glprioritizetextures" "noalloc"
  external glPrioritizeTexture :
    texture:GL.texture_id -> priority:float -> unit
    = "ml_glprioritizetexture" "noalloc"
  external glPrioritizeTexturesp :
    prioritized_textures:(GL.texture_id * float) array -> unit
    = "ml_glprioritizetexturesp" "noalloc"
  module TexEnv :
    sig
      type texenv_target =
          GL_TEXTURE_ENV
        | GL_TEXTURE_FILTER_CONTROL
        | GL_POINT_SPRITE
      type texenv_pname =
          GL_TEXTURE_ENV_MODE
        | GL_TEXTURE_LOD_BIAS
        | GL_COMBINE_RGB
        | GL_COMBINE_ALPHA
        | GL_SRC0_RGB
        | GL_SRC1_RGB
        | GL_SRC2_RGB
        | GL_SRC0_ALPHA
        | GL_SRC1_ALPHA
        | GL_SRC2_ALPHA
        | GL_OPERAND0_RGB
        | GL_OPERAND1_RGB
        | GL_OPERAND2_RGB
        | GL_OPERAND0_ALPHA
        | GL_OPERAND1_ALPHA
        | GL_OPERAND2_ALPHA
        | GL_RGB_SCALE
        | GL_ALPHA_SCALE
        | GL_COORD_REPLACE
      type texenv_param =
          GL_ADD
        | GL_ADD_SIGNED
        | GL_INTERPOLATE
        | GL_MODULATE
        | GL_DECAL
        | GL_BLEND
        | GL_REPLACE
        | GL_SUBTRACT
        | GL_COMBINE
        | GL_TEXTURE
        | GL_CONSTANT
        | GL_PRIMARY_COLOR
        | GL_PREVIOUS
        | GL_SRC_COLOR
        | GL_ONE_MINUS_SRC_COLOR
        | GL_SRC_ALPHA
        | GL_ONE_MINUS_SRC_ALPHA
        | GL_TRUE
        | GL_FALSE
    end
  external glTexEnv :
    GL.TexEnv.texenv_target ->
    GL.TexEnv.texenv_pname -> GL.TexEnv.texenv_param -> unit = "ml_gltexenv"
    "noalloc"
  type tex_coord = GL_S | GL_T | GL_R | GL_Q
  type tex_coord_gen_func = GL_TEXTURE_GEN_MODE
  type tex_gen_param =
      GL_OBJECT_LINEAR
    | GL_EYE_LINEAR
    | GL_SPHERE_MAP
    | GL_NORMAL_MAP
    | GL_REFLECTION_MAP
  external glTexGen :
    GL.tex_coord -> GL.tex_coord_gen_func -> GL.tex_gen_param -> unit
    = "ml_gltexgen" "noalloc"
  type tex_coord_fun_params = GL_OBJECT_PLANE | GL_EYE_PLANE
  external glTexGenv :
    GL.tex_coord ->
    GL.tex_coord_fun_params -> float * float * float * float -> unit
    = "ml_gltexgenv"
  external glTexGenva :
    GL.tex_coord -> GL.tex_coord_fun_params -> float array -> unit
    = "ml_gltexgenva"
  module TexTarget :
    sig
      type target_2d =
          GL_TEXTURE_2D
        | GL_PROXY_TEXTURE_2D
        | GL_TEXTURE_CUBE_MAP_POSITIVE_X
        | GL_TEXTURE_CUBE_MAP_NEGATIVE_X
        | GL_TEXTURE_CUBE_MAP_POSITIVE_Y
        | GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
        | GL_TEXTURE_CUBE_MAP_POSITIVE_Z
        | GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
        | GL_PROXY_TEXTURE_CUBE_MAP
      type target_1d = GL_TEXTURE_1D | GL_PROXY_TEXTURE_1D
      type target_3d = GL_TEXTURE_3D | GL_PROXY_TEXTURE_3D
    end
  module InternalFormat :
    sig
      type internal_format =
          GL_ALPHA
        | GL_ALPHA4
        | GL_ALPHA8
        | GL_ALPHA12
        | GL_ALPHA16
        | GL_COMPRESSED_ALPHA
        | GL_COMPRESSED_LUMINANCE
        | GL_COMPRESSED_LUMINANCE_ALPHA
        | GL_COMPRESSED_INTENSITY
        | GL_COMPRESSED_RGB
        | GL_COMPRESSED_RGBA
        | GL_DEPTH_COMPONENT
        | GL_DEPTH_COMPONENT16
        | GL_DEPTH_COMPONENT24
        | GL_DEPTH_COMPONENT32
        | GL_LUMINANCE
        | GL_LUMINANCE4
        | GL_LUMINANCE8
        | GL_LUMINANCE12
        | GL_LUMINANCE16
        | GL_LUMINANCE_ALPHA
        | GL_LUMINANCE4_ALPHA4
        | GL_LUMINANCE6_ALPHA2
        | GL_LUMINANCE8_ALPHA8
        | GL_LUMINANCE12_ALPHA4
        | GL_LUMINANCE12_ALPHA12
        | GL_LUMINANCE16_ALPHA16
        | GL_INTENSITY
        | GL_INTENSITY4
        | GL_INTENSITY8
        | GL_INTENSITY12
        | GL_INTENSITY16
        | GL_R3_G3_B2
        | GL_RGB
        | GL_RGB4
        | GL_RGB5
        | GL_RGB8
        | GL_RGB10
        | GL_RGB12
        | GL_RGB16
        | GL_RGBA
        | GL_RGBA2
        | GL_RGBA4
        | GL_RGB5_A1
        | GL_RGBA8
        | GL_RGB10_A2
        | GL_RGBA12
        | GL_RGBA16
        | GL_SLUMINANCE
        | GL_SLUMINANCE8
        | GL_SLUMINANCE_ALPHA
        | GL_SLUMINANCE8_ALPHA8
        | GL_SRGB
        | GL_SRGB8
        | GL_SRGB_ALPHA
        | GL_SRGB8_ALPHA8
    end
  type pixel_data_format =
      GL_COLOR_INDEX
    | GL_RED
    | GL_GREEN
    | GL_BLUE
    | GL_ALPHA
    | GL_RGB
    | GL_RGBA
    | GL_LUMINANCE
    | GL_LUMINANCE_ALPHA
  type pixel_data_type =
      GL_UNSIGNED_BYTE
    | GL_BYTE
    | GL_BITMAP
    | GL_UNSIGNED_SHORT
    | GL_SHORT
    | GL_UNSIGNED_INT
    | GL_INT
    | GL_FLOAT
    | GL_UNSIGNED_BYTE_3_3_2
    | GL_UNSIGNED_BYTE_2_3_3_REV
    | GL_UNSIGNED_SHORT_5_6_5
    | GL_UNSIGNED_SHORT_5_6_5_REV
    | GL_UNSIGNED_SHORT_4_4_4_4
    | GL_UNSIGNED_SHORT_4_4_4_4_REV
    | GL_UNSIGNED_SHORT_5_5_5_1
    | GL_UNSIGNED_SHORT_1_5_5_5_REV
    | GL_UNSIGNED_INT_8_8_8_8
    | GL_UNSIGNED_INT_8_8_8_8_REV
    | GL_UNSIGNED_INT_10_10_10_2
    | GL_UNSIGNED_INT_2_10_10_10_REV
  type img_input = Filename of string | Buffer of string
  type image_data =
      (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
      Bigarray.Genarray.t
  val assert_size : width:int -> height:int -> unit
  external glTexImage2D :
    target:GL.TexTarget.target_2d ->
    level:int ->
    internal_format:GL.InternalFormat.internal_format ->
    width:int ->
    height:int ->
    format_:GL.pixel_data_format ->
    type_:GL.pixel_data_type -> pixels:GL.image_data -> unit
    = "ml_glteximage2d_bytecode" "ml_glteximage2d_native"
  external glTexImage2D_str :
    target:GL.TexTarget.target_2d ->
    level:int ->
    internal_format:GL.InternalFormat.internal_format ->
    width:int ->
    height:int ->
    format_:GL.pixel_data_format ->
    type_:GL.pixel_data_type -> pixels:string -> unit
    = "ml_glteximage2d_str_bytecode" "ml_glteximage2d_str_native"
  external glTexImage1D :
    target:GL.TexTarget.target_1d ->
    level:int ->
    internal_format:GL.InternalFormat.internal_format ->
    width:int ->
    format_:GL.pixel_data_format ->
    type_:GL.pixel_data_type -> pixels:GL.image_data -> unit
    = "ml_glteximage1d_bytecode" "ml_glteximage1d_native"
  external glTexImage3D :
    target:GL.TexTarget.target_3d ->
    level:int ->
    internal_format:GL.InternalFormat.internal_format ->
    width:int ->
    height:int ->
    depth:int ->
    format_:GL.pixel_data_format ->
    type_:GL.pixel_data_type -> pixels:GL.image_data -> unit
    = "ml_glteximage3d_bytecode" "ml_glteximage3d_native"
  external glTexCoord1 : s:float -> unit = "ml_gltexcoord1" "noalloc"
  external glTexCoord2 : s:float -> t:float -> unit = "ml_gltexcoord2"
    "noalloc"
  external glTexCoord3 : s:float -> t:float -> r:float -> unit
    = "ml_gltexcoord3" "noalloc"
  external glTexCoord4 : s:float -> t:float -> r:float -> q:float -> unit
    = "ml_gltexcoord4" "noalloc"
  external glTexCoord2v : v:float * float -> unit = "ml_gltexcoord2v"
    "noalloc"
  external glTexCoord3v : v:float * float * float -> unit = "ml_gltexcoord3v"
    "noalloc"
  external glTexCoord4v : v:float * float * float * float -> unit
    = "ml_gltexcoord4v" "noalloc"
  module Min :
    sig
      type min_filter =
          GL_NEAREST
        | GL_LINEAR
        | GL_NEAREST_MIPMAP_NEAREST
        | GL_LINEAR_MIPMAP_NEAREST
        | GL_NEAREST_MIPMAP_LINEAR
        | GL_LINEAR_MIPMAP_LINEAR
    end
  module Mag : sig type mag_filter = GL_NEAREST | GL_LINEAR end
  type wrap_param =
      GL_CLAMP
    | GL_CLAMP_TO_BORDER
    | GL_CLAMP_TO_EDGE
    | GL_MIRRORED_REPEAT
    | GL_REPEAT
  module TexParam :
    sig
      type tex_param_target =
          GL_TEXTURE_1D
        | GL_TEXTURE_2D
        | GL_TEXTURE_3D
        | GL_TEXTURE_CUBE_MAP
      type texture_compare_mode = GL_NONE
      type depth_texture_mode = GL_LUMINANCE | GL_INTENSITY | GL_ALPHA
      type tex_param =
          GL_TEXTURE_MIN_FILTER of GL.Min.min_filter
        | GL_TEXTURE_MAG_FILTER of GL.Mag.mag_filter
        | GL_TEXTURE_MIN_LOD of float
        | GL_TEXTURE_MAX_LOD of float
        | GL_TEXTURE_BASE_LEVEL of int
        | GL_TEXTURE_MAX_LEVEL of int
        | GL_TEXTURE_WRAP_S of GL.wrap_param
        | GL_TEXTURE_WRAP_T of GL.wrap_param
        | GL_TEXTURE_WRAP_R of GL.wrap_param
        | GL_TEXTURE_BORDER_COLOR of (float * float * float * float)
        | GL_TEXTURE_PRIORITY of float
        | GL_TEXTURE_COMPARE_MODE of GL.TexParam.texture_compare_mode
        | GL_TEXTURE_COMPARE_FUNC of GL.gl_func
        | GL_DEPTH_TEXTURE_MODE of GL.TexParam.depth_texture_mode
        | GL_GENERATE_MIPMAP of bool
    end
  val glTexParameter :
    target:GL.TexParam.tex_param_target ->
    param:GL.TexParam.tex_param -> unit
  module CopyTex :
    sig
      type copy_tex_target =
          GL_TEXTURE_2D
        | GL_TEXTURE_CUBE_MAP_POSITIVE_X
        | GL_TEXTURE_CUBE_MAP_NEGATIVE_X
        | GL_TEXTURE_CUBE_MAP_POSITIVE_Y
        | GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
        | GL_TEXTURE_CUBE_MAP_POSITIVE_Z
        | GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
    end
  external glCopyTexImage2D :
    target:GL.CopyTex.copy_tex_target ->
    level:int ->
    internal_format:GL.InternalFormat.internal_format ->
    x:int -> y:int -> width:int -> height:int -> border:int -> unit
    = "ml_glcopyteximage2d_bytecode" "ml_glcopyteximage2d_native"
  external glSampleCoverage : value:float -> invert:bool -> unit
    = "ml_glsamplecoverage" "noalloc"
  type pixel_packing_b =
      GL_PACK_SWAP_BYTES
    | GL_PACK_LSB_FIRST
    | GL_UNPACK_SWAP_BYTES
    | GL_UNPACK_LSB_FIRST
  external glPixelStoreb :
    pixel_packing:GL.pixel_packing_b -> param:bool -> unit
    = "ml_glpixelstoreb" "noalloc"
  type pixel_packing_i =
      GL_PACK_ROW_LENGTH
    | GL_PACK_IMAGE_HEIGHT
    | GL_PACK_SKIP_PIXELS
    | GL_PACK_SKIP_ROWS
    | GL_PACK_SKIP_IMAGES
    | GL_PACK_ALIGNMENT
    | GL_UNPACK_ROW_LENGTH
    | GL_UNPACK_IMAGE_HEIGHT
    | GL_UNPACK_SKIP_PIXELS
    | GL_UNPACK_SKIP_ROWS
    | GL_UNPACK_SKIP_IMAGES
    | GL_UNPACK_ALIGNMENT
  external glPixelStorei :
    pixel_packing:GL.pixel_packing_i -> param:int -> unit
    = "ml_glpixelstorei" "noalloc"
  external glPixelZoom : xfactor:float -> yfactor:float -> unit
    = "ml_glpixelzoom" "noalloc"
  type pixel_map =
      GL_PIXEL_MAP_I_TO_I
    | GL_PIXEL_MAP_S_TO_S
    | GL_PIXEL_MAP_I_TO_R
    | GL_PIXEL_MAP_I_TO_G
    | GL_PIXEL_MAP_I_TO_B
    | GL_PIXEL_MAP_I_TO_A
    | GL_PIXEL_MAP_R_TO_R
    | GL_PIXEL_MAP_G_TO_G
    | GL_PIXEL_MAP_B_TO_B
    | GL_PIXEL_MAP_A_TO_A
  external glPixelMapfv : map:GL.pixel_map -> v:float array -> unit
    = "ml_glpixelmapfv"
  external glBitmap :
    width:int ->
    height:int ->
    xorig:float ->
    yorig:float ->
    xmove:float ->
    ymove:float -> bitmap:('a, 'b, 'c) Bigarray.Array1.t -> unit
    = "ml_glbitmap_bytecode" "ml_glbitmap_native"
  type pixel_type = GL_COLOR | GL_DEPTH | GL_STENCIL
  external glCopyPixels :
    x:int ->
    y:int -> width:int -> height:int -> pixel_type:GL.pixel_type -> unit
    = "ml_glcopypixels" "noalloc"
  type pixel_transfer_i = GL_INDEX_SHIFT | GL_INDEX_OFFSET
  type pixel_transfer_f =
      GL_RED_SCALE
    | GL_RED_BIAS
    | GL_GREEN_SCALE
    | GL_GREEN_BIAS
    | GL_BLUE_SCALE
    | GL_BLUE_BIAS
    | GL_ALPHA_SCALE
    | GL_ALPHA_BIAS
    | GL_DEPTH_SCALE
    | GL_DEPTH_BIAS
  type pixel_transfer_b = GL_MAP_COLOR | GL_MAP_STENCIL
  type pixel_transfer_f_ARB =
      GL_POST_COLOR_MATRIX_RED_SCALE
    | GL_POST_COLOR_MATRIX_GREEN_SCALE
    | GL_POST_COLOR_MATRIX_BLUE_SCALE
    | GL_POST_COLOR_MATRIX_ALPHA_SCALE
    | GL_POST_COLOR_MATRIX_RED_BIAS
    | GL_POST_COLOR_MATRIX_GREEN_BIAS
    | GL_POST_COLOR_MATRIX_BLUE_BIAS
    | GL_POST_COLOR_MATRIX_ALPHA_BIAS
    | GL_POST_CONVOLUTION_RED_SCALE
    | GL_POST_CONVOLUTION_GREEN_SCALE
    | GL_POST_CONVOLUTION_BLUE_SCALE
    | GL_POST_CONVOLUTION_ALPHA_SCALE
    | GL_POST_CONVOLUTION_RED_BIAS
    | GL_POST_CONVOLUTION_GREEN_BIAS
    | GL_POST_CONVOLUTION_BLUE_BIAS
    | GL_POST_CONVOLUTION_ALPHA_BIAS
  external glPixelTransferi : pname:GL.pixel_transfer_i -> param:int -> unit
    = "ml_glpixeltransferi"
  external glPixelTransferf :
    pname:GL.pixel_transfer_f -> param:float -> unit = "ml_glpixeltransferf"
  external glPixelTransferb : pname:GL.pixel_transfer_b -> param:bool -> unit
    = "ml_glpixeltransferb"
  external glPixelTransferfARB :
    pname:GL.pixel_transfer_f_ARB -> param:float -> unit
    = "ml_glpixeltransferfARB"
  module Framebuffer :
    sig
      type pixel_buffer_format =
          GL_COLOR_INDEX
        | GL_STENCIL_INDEX
        | GL_DEPTH_COMPONENT
        | GL_RED
        | GL_GREEN
        | GL_BLUE
        | GL_ALPHA
        | GL_RGB
        | GL_BGR
        | GL_RGBA
        | GL_BGRA
        | GL_LUMINANCE
        | GL_LUMINANCE_ALPHA
      type pixel_buffer_type =
          GL_UNSIGNED_BYTE
        | GL_BYTE
        | GL_BITMAP
        | GL_UNSIGNED_SHORT
        | GL_SHORT
        | GL_UNSIGNED_INT
        | GL_INT
        | GL_FLOAT
        | GL_UNSIGNED_BYTE_3_3_2
        | GL_UNSIGNED_BYTE_2_3_3_REV
        | GL_UNSIGNED_SHORT_5_6_5
        | GL_UNSIGNED_SHORT_5_6_5_REV
        | GL_UNSIGNED_SHORT_4_4_4_4
        | GL_UNSIGNED_SHORT_4_4_4_4_REV
        | GL_UNSIGNED_SHORT_5_5_5_1
        | GL_UNSIGNED_SHORT_1_5_5_5_REV
        | GL_UNSIGNED_INT_8_8_8_8
        | GL_UNSIGNED_INT_8_8_8_8_REV
        | GL_UNSIGNED_INT_10_10_10_2
        | GL_UNSIGNED_INT_2_10_10_10_REV
    end
  external glReadPixelsBA_unsafe :
    x:int ->
    y:int ->
    width:int ->
    height:int ->
    GL.Framebuffer.pixel_buffer_format ->
    GL.Framebuffer.pixel_buffer_type -> GL.image_data -> unit
    = "ml_glreadpixels_ba_unsafe_bytecode" "ml_glreadpixels_ba_unsafe_native"
  external glReadPixelsBA :
    x:int ->
    y:int ->
    width:int ->
    height:int ->
    GL.Framebuffer.pixel_buffer_format ->
    GL.Framebuffer.pixel_buffer_type -> GL.image_data -> unit
    = "ml_glreadpixels_ba_bytecode" "ml_glreadpixels_ba_native"
  external glDrawPixels_str :
    width:int ->
    height:int ->
    format_:GL.pixel_data_format ->
    type_:GL.pixel_data_type -> pixels:string -> unit = "ml_gldrawpixels_str"
  module Plane :
    sig
      type clip_plane =
          GL_CLIP_PLANE0
        | GL_CLIP_PLANE1
        | GL_CLIP_PLANE2
        | GL_CLIP_PLANE3
        | GL_CLIP_PLANE4
        | GL_CLIP_PLANE5
    end
  external glClipPlane :
    plane:GL.Plane.clip_plane -> equation:float array -> unit
    = "ml_glclipplane"
  external glClipPlane_unsafe :
    plane:GL.Plane.clip_plane -> equation:float array -> unit
    = "ml_glclipplane_unsafe"
  type clip_plane_i = GL_CLIP_PLANE of int
  val glClipPlanei : plane:GL.clip_plane_i -> equation:float array -> unit
  val glClipPlanei_unsafe :
    plane:GL.clip_plane_i -> equation:float array -> unit
  module Map1 :
    sig
      type map1_target =
          GL_MAP1_VERTEX_3
        | GL_MAP1_VERTEX_4
        | GL_MAP1_INDEX
        | GL_MAP1_COLOR_4
        | GL_MAP1_NORMAL
        | GL_MAP1_TEXTURE_COORD_1
        | GL_MAP1_TEXTURE_COORD_2
        | GL_MAP1_TEXTURE_COORD_3
        | GL_MAP1_TEXTURE_COORD_4
    end
  external glMap1 :
    target:GL.Map1.map1_target ->
    u1:float ->
    u2:float -> stride:int -> order:int -> points:float array -> unit
    = "ml_glmap1d_bytecode" "ml_glmap1d_native"
  module Map2 :
    sig
      type map2_target =
          GL_MAP2_VERTEX_3
        | GL_MAP2_VERTEX_4
        | GL_MAP2_INDEX
        | GL_MAP2_COLOR_4
        | GL_MAP2_NORMAL
        | GL_MAP2_TEXTURE_COORD_1
        | GL_MAP2_TEXTURE_COORD_2
        | GL_MAP2_TEXTURE_COORD_3
        | GL_MAP2_TEXTURE_COORD_4
    end
  external glMap2 :
    target:GL.Map2.map2_target ->
    u1:float ->
    u2:float ->
    ustride:int ->
    uorder:int ->
    v1:float ->
    v2:float ->
    vstride:int -> vorder:int -> points:float array array array -> unit
    = "ml_glmap2d_bytecode" "ml_glmap2d_native"
  external glEvalCoord1 : u:float -> unit = "ml_glevalcoord1d" "noalloc"
  external glEvalCoord2 : u:float -> v:float -> unit = "ml_glevalcoord2d"
    "noalloc"
  module EvalMesh1 : sig type eval_mesh_1 = GL_POINT | GL_LINE end
  module EvalMesh2 : sig type eval_mesh_2 = GL_POINT | GL_LINE | GL_FILL end
  external glEvalMesh1 :
    mode:GL.EvalMesh1.eval_mesh_1 -> i1:int -> i2:int -> unit
    = "ml_glevalmesh1" "noalloc"
  external glEvalMesh2 :
    mode:GL.EvalMesh2.eval_mesh_2 ->
    i1:int -> i2:int -> j1:int -> j2:int -> unit = "ml_glevalmesh2" "noalloc"
  external glEvalPoint1 : i:int -> unit = "ml_glevalpoint1" "noalloc"
  external glEvalPoint2 : i:int -> j:int -> unit = "ml_glevalpoint2"
    "noalloc"
  external glMapGrid1 : un:int -> u1:float -> u2:float -> unit
    = "ml_glmapgrid1d" "noalloc"
  external glMapGrid2 :
    un:int -> u1:float -> u2:float -> vn:int -> v1:float -> v2:float -> unit
    = "ml_glmapgrid2d_bytecode" "ml_glmapgrid2d_native"
  type list_mode = GL_COMPILE | GL_COMPILE_AND_EXECUTE
  external glNewList : gl_list:int -> mode:GL.list_mode -> unit
    = "ml_glnewlist" "noalloc"
  external glEndList : unit -> unit = "ml_glendlist" "noalloc"
  external glGenList : unit -> int = "ml_glgenlist" "noalloc"
  external glGenLists : range:int -> int = "ml_glgenlists" "noalloc"
  external glCallList : gl_list:int -> unit = "ml_glcalllist" "noalloc"
  external glCallLists : gl_lists:int array -> unit = "ml_glcalllists"
    "noalloc"
  external glDeleteLists : gl_list:int -> range:int -> unit
    = "ml_gldeletelists" "noalloc"
  external glListBase : base:int -> unit = "ml_gllistbase" "noalloc"
  external glIsList : gl_list:int -> bool = "ml_glislist" "noalloc"
  external glGetListMode : unit -> GL.list_mode = "ml_glgetlistmode"
    "noalloc"
  type render_mode = GL_RENDER | GL_SELECT | GL_FEEDBACK
  external glRenderMode : mode:GL.render_mode -> int = "ml_glrendermode"
    "noalloc"
  external glInitNames : unit -> unit = "ml_glinitnames" "noalloc"
  external glLoadName : name:int -> unit = "ml_glloadname" "noalloc"
  external glPushName : name:int -> unit = "ml_glpushname" "noalloc"
  external glPopName : unit -> unit = "ml_glpopname" "noalloc"
  type select_buffer
  external new_select_buffer : buffer_size:int -> GL.select_buffer
    = "ml_alloc_select_buffer" "noalloc"
  external free_select_buffer : select_buffer:GL.select_buffer -> unit
    = "ml_free_select_buffer" "noalloc"
  external select_buffer_get :
    select_buffer:GL.select_buffer -> index:int -> int
    = "ml_select_buffer_get" "noalloc"
  external glSelectBuffer :
    buffer_size:int -> select_buffer:GL.select_buffer -> unit
    = "ml_glselectbuffer" "noalloc"
  external glSelectBufferBA :
    (nativeint, Bigarray.nativeint_elt, Bigarray.c_layout) Bigarray.Array1.t ->
    unit = "ml_glselectbuffer_ba" "noalloc"
  type fog_mode = GL_LINEAR | GL_EXP | GL_EXP2
  type fog_coord_src = GL_FOG_COORD | GL_FRAGMENT_DEPTH
  type fog_param =
      GL_FOG_MODE of GL.fog_mode
    | GL_FOG_DENSITY of float
    | GL_FOG_START of float
    | GL_FOG_END of float
    | GL_FOG_INDEX of float
    | GL_FOG_COLOR of (float * float * float * float)
    | GL_FOG_COORD_SRC of GL.fog_coord_src
  val glFog : pname:GL.fog_param -> unit
  type shader_object
  type shader_program
  type shader_type =
      GL_VERTEX_SHADER
    | GL_FRAGMENT_SHADER
    | GL_GEOMETRY_SHADER
  external glCreateShader : shader_type:GL.shader_type -> GL.shader_object
    = "ml_glcreateshader"
  external glDeleteShader : shader:GL.shader_object -> unit
    = "ml_gldeleteshader"
  external glIsShader : shader:GL.shader_object -> bool = "ml_glisshader"
  external glShaderSource : shader:GL.shader_object -> string -> unit
    = "ml_glshadersource"
  external glCompileShader : shader:GL.shader_object -> unit
    = "ml_glcompileshader"
  external glCreateProgram : unit -> GL.shader_program = "ml_glcreateprogram"
  external glDeleteProgram : program:GL.shader_program -> unit
    = "ml_gldeleteprogram"
  external glAttachShader :
    program:GL.shader_program -> shader:GL.shader_object -> unit
    = "ml_glattachshader"
  external glDetachShader :
    program:GL.shader_program -> shader:GL.shader_object -> unit
    = "ml_gldetachshader"
  external glLinkProgram : program:GL.shader_program -> unit
    = "ml_gllinkprogram"
  external glUseProgram : program:GL.shader_program -> unit
    = "ml_gluseprogram"
  external glUnuseProgram : unit -> unit = "ml_glunuseprogram"
  external glGetShaderCompileStatus : shader:GL.shader_object -> bool
    = "ml_glgetshadercompilestatus"
  external glGetShaderCompileStatus_exn : shader:GL.shader_object -> unit
    = "ml_glgetshadercompilestatus_exn"
  external glGetUniformLocation :
    program:GL.shader_program -> name:string -> int
    = "ml_glgetuniformlocation"
  type get_program_bool =
      GL_DELETE_STATUS
    | GL_LINK_STATUS
    | GL_VALIDATE_STATUS
  type get_program_int =
      GL_INFO_LOG_LENGTH
    | GL_ATTACHED_SHADERS
    | GL_ACTIVE_ATTRIBUTES
    | GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
    | GL_ACTIVE_UNIFORMS
    | GL_ACTIVE_UNIFORM_MAX_LENGTH
  external glGetProgrami :
    program:GL.shader_program -> pname:GL.get_program_int -> int
    = "ml_glgetprogram_int"
  external glGetProgramb :
    program:GL.shader_program -> pname:GL.get_program_bool -> bool
    = "ml_glgetprogram_bool"
  external glUniform1f : location:int -> v0:float -> unit = "ml_gluniform1f"
    "noalloc"
  external glUniform2f : location:int -> v0:float -> v1:float -> unit
    = "ml_gluniform2f" "noalloc"
  external glUniform3f :
    location:int -> v0:float -> v1:float -> v2:float -> unit
    = "ml_gluniform3f" "noalloc"
  external glUniform4f :
    location:int -> v0:float -> v1:float -> v2:float -> v3:float -> unit
    = "ml_gluniform4f" "noalloc"
  external glUniform1i : location:int -> v0:int -> unit = "ml_gluniform1i"
    "noalloc"
  external glUniform2i : location:int -> v0:int -> v1:int -> unit
    = "ml_gluniform2i" "noalloc"
  external glUniform3i : location:int -> v0:int -> v1:int -> v2:int -> unit
    = "ml_gluniform3i" "noalloc"
  external glUniform4i :
    location:int -> v0:int -> v1:int -> v2:int -> v3:int -> unit
    = "ml_gluniform4i" "noalloc"
  external glUniform1fv : location:int -> value:float array -> unit
    = "ml_gluniform1fv"
  external glUniform2fv :
    location:int -> count:int -> value:float array -> unit
    = "ml_gluniform2fv"
  external glUniform3fv :
    location:int -> count:int -> value:float array -> unit
    = "ml_gluniform3fv"
  external glUniform4fv :
    location:int -> count:int -> value:float array -> unit
    = "ml_gluniform4fv"
  external glUniform1iv : location:int -> value:int array -> unit
    = "ml_gluniform1iv"
  external glUniform2iv :
    location:int -> count:int -> value:int array -> unit = "ml_gluniform2iv"
  external glUniform3iv :
    location:int -> count:int -> value:int array -> unit = "ml_gluniform3iv"
  external glUniform4iv :
    location:int -> count:int -> value:int array -> unit = "ml_gluniform4iv"
  external glUniformMatrix2f :
    location:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix2f"
  external glUniformMatrix3f :
    location:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix3f"
  external glUniformMatrix4f :
    location:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix4f"
  external glUniformMatrix2x3f :
    location:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix2x3f"
  external glUniformMatrix3x2f :
    location:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix3x2f"
  external glUniformMatrix2x4f :
    location:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix2x4f"
  external glUniformMatrix4x2f :
    location:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix4x2f"
  external glUniformMatrix3x4f :
    location:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix3x4f"
  external glUniformMatrix4x3f :
    location:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix4x3f"
  external glUniformMatrix2fv :
    location:int -> count:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix2fv"
  external glUniformMatrix3fv :
    location:int -> count:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix3fv"
  external glUniformMatrix4fv :
    location:int -> count:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix4fv"
  external glUniformMatrix2x3fv :
    location:int -> count:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix2x3fv"
  external glUniformMatrix3x2fv :
    location:int -> count:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix3x2fv"
  external glUniformMatrix2x4fv :
    location:int -> count:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix2x4fv"
  external glUniformMatrix4x2fv :
    location:int -> count:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix4x2fv"
  external glUniformMatrix3x4fv :
    location:int -> count:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix3x4fv"
  external glUniformMatrix4x3fv :
    location:int -> count:int -> transpose:bool -> value:float array -> unit
    = "ml_gluniformmatrix4x3fv"
  external glGetAttribLocation :
    program:GL.shader_program -> name:string -> int
    = "ml_glgetattriblocation" "noalloc"
  external glBindAttribLocation :
    program:GL.shader_program -> index:int -> name:string -> unit
    = "ml_glbindattriblocation" "noalloc"
  external glVertexAttrib1s : index:int -> v:int -> unit
    = "ml_glvertexattrib1s" "noalloc"
  external glVertexAttrib1d : index:int -> v:float -> unit
    = "ml_glvertexattrib1d" "noalloc"
  external glVertexAttrib2s : index:int -> v0:int -> v1:int -> unit
    = "ml_glvertexattrib2s" "noalloc"
  external glVertexAttrib2d : index:int -> v0:float -> v1:float -> unit
    = "ml_glvertexattrib2d" "noalloc"
  external glVertexAttrib3s : index:int -> v0:int -> v1:int -> v2:int -> unit
    = "ml_glvertexattrib3s" "noalloc"
  external glVertexAttrib3d :
    index:int -> v0:float -> v1:float -> v2:float -> unit
    = "ml_glvertexattrib3d" "noalloc"
  external glVertexAttrib4s :
    index:int -> v0:int -> v1:int -> v2:int -> v3:int -> unit
    = "ml_glvertexattrib4s" "noalloc"
  external glVertexAttrib4d :
    index:int -> v0:float -> v1:float -> v2:float -> v3:float -> unit
    = "ml_glvertexattrib4d" "noalloc"
  external glGetShaderInfoLog : shader:GL.shader_object -> string
    = "ml_glgetshaderinfolog"
  external glGetProgramInfoLog : program:GL.shader_program -> string
    = "ml_glgetprograminfolog"
  external glEnableVertexAttribArray : index:int -> unit
    = "ml_glenablevertexattribarray" "noalloc"
  external glDisableVertexAttribArray : index:int -> unit
    = "ml_gldisablevertexattribarray" "noalloc"
  module Get :
    sig
      type get_boolean_1 =
          GL_ALPHA_TEST
        | GL_AUTO_NORMAL
        | GL_BLEND
        | GL_CLIP_PLANE0
        | GL_CLIP_PLANE1
        | GL_CLIP_PLANE2
        | GL_CLIP_PLANE3
        | GL_CLIP_PLANE4
        | GL_CLIP_PLANE5
        | GL_COLOR_ARRAY
        | GL_COLOR_LOGIC_OP
        | GL_COLOR_MATERIAL
        | GL_COLOR_SUM
        | GL_COLOR_TABLE
        | GL_CONVOLUTION_1D
        | GL_CONVOLUTION_2D
        | GL_CULL_FACE
        | GL_CURRENT_RASTER_POSITION_VALID
        | GL_DEPTH_TEST
        | GL_DEPTH_WRITEMASK
        | GL_DITHER
        | GL_DOUBLEBUFFER
        | GL_EDGE_FLAG
        | GL_EDGE_FLAG_ARRAY
        | GL_FOG
        | GL_FOG_COORD_ARRAY
        | GL_HISTOGRAM
        | GL_INDEX_ARRAY
        | GL_INDEX_LOGIC_OP
        | GL_INDEX_MODE
        | GL_LIGHT0
        | GL_LIGHT1
        | GL_LIGHT2
        | GL_LIGHT3
        | GL_LIGHT4
        | GL_LIGHT5
        | GL_LIGHT6
        | GL_LIGHT7
        | GL_LIGHTING
        | GL_LIGHT_MODEL_LOCAL_VIEWER
        | GL_LIGHT_MODEL_TWO_SIDE
        | GL_LINE_SMOOTH
        | GL_LINE_STIPPLE
        | GL_MAP1_INDEX
        | GL_MAP1_NORMAL
        | GL_MAP1_TEXTURE_COORD_1
        | GL_MAP1_TEXTURE_COORD_2
        | GL_MAP1_TEXTURE_COORD_3
        | GL_MAP1_TEXTURE_COORD_4
        | GL_MAP1_VERTEX_3
        | GL_MAP1_VERTEX_4
        | GL_MAP2_COLOR_4
        | GL_MAP2_INDEX
        | GL_MAP2_NORMAL
        | GL_MAP2_TEXTURE_COORD_1
        | GL_MAP2_TEXTURE_COORD_2
        | GL_MAP2_TEXTURE_COORD_3
        | GL_MAP2_TEXTURE_COORD_4
        | GL_MAP2_VERTEX_3
        | GL_MAP2_VERTEX_4
        | GL_MAP_COLOR
        | GL_MAP_STENCIL
        | GL_MINMAX
        | GL_NORMAL_ARRAY
        | GL_NORMALIZE
        | GL_PACK_SWAP_BYTES
        | GL_POINT_SMOOTH
        | GL_POINT_SPRITE
        | GL_POLYGON_OFFSET_FILL
        | GL_POLYGON_OFFSET_LINE
        | GL_POLYGON_OFFSET_POINT
        | GL_POLYGON_SMOOTH
        | GL_POLYGON_STIPPLE
        | GL_POST_COLOR_MATRIX_COLOR_TABLE
        | GL_PACK_LSB_FIRST
        | GL_POST_CONVOLUTION_COLOR_TABLE
        | GL_RESCALE_NORMAL
        | GL_RGBA_MODE
        | GL_SAMPLE_COVERAGE_INVERT
        | GL_SCISSOR_TEST
        | GL_SECONDARY_COLOR_ARRAY
        | GL_SEPARABLE_2D
        | GL_STENCIL_TEST
        | GL_STEREO
        | GL_TEXTURE_1D
        | GL_TEXTURE_2D
        | GL_TEXTURE_3D
        | GL_TEXTURE_COORD_ARRAY
        | GL_TEXTURE_CUBE_MAP
        | GL_TEXTURE_GEN_Q
        | GL_TEXTURE_GEN_R
        | GL_TEXTURE_GEN_S
        | GL_TEXTURE_GEN_T
        | GL_UNPACK_LSB_FIRST
        | GL_UNPACK_SWAP_BYTES
        | GL_VERTEX_ARRAY
        | GL_VERTEX_PROGRAM_POINT_SIZE
        | GL_VERTEX_PROGRAM_TWO_SIDE
        | GL_PACK_ALIGNMENT
        | GL_PACK_IMAGE_HEIGHT
        | GL_PACK_ROW_LENGTH
        | GL_PACK_SKIP_IMAGES
        | GL_PACK_SKIP_PIXELS
        | GL_PACK_SKIP_ROWS
        | GL_UNPACK_IMAGE_HEIGHT
        | GL_UNPACK_ROW_LENGTH
        | GL_UNPACK_SKIP_IMAGES
        | GL_UNPACK_SKIP_PIXELS
        | GL_UNPACK_SKIP_ROWS
      type get_boolean_4 = GL_COLOR_WRITEMASK
      type get_integer_4 = GL_VIEWPORT | GL_SCISSOR_BOX
      type get_integer_2 = GL_MAX_VIEWPORT_DIMS
      type get_integer_1 =
          GL_ACCUM_RED_BITS
        | GL_ACCUM_GREEN_BITS
        | GL_ACCUM_BLUE_BITS
        | GL_ACCUM_ALPHA_BITS
        | GL_CURRENT_RASTER_INDEX
        | GL_LIST_BASE
        | GL_LIST_INDEX
        | GL_MAX_LIGHTS
        | GL_MAX_LIST_NESTING
        | GL_MAX_TEXTURE_SIZE
        | GL_MAX_TEXTURE_COORDS
        | GL_ACTIVE_TEXTURE
        | GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
        | GL_MAX_TEXTURE_UNITS
        | GL_MAX_ELEMENTS_INDICES
        | GL_MAX_ELEMENTS_VERTICES
        | GL_SUBPIXEL_BITS
        | GL_DEPTH_BITS
        | GL_STENCIL_BITS
        | GL_NAME_STACK_DEPTH
        | GL_COLOR_MATRIX_STACK_DEPTH
        | GL_MODELVIEW_STACK_DEPTH
        | GL_PROJECTION_STACK_DEPTH
        | GL_TEXTURE_STACK_DEPTH
        | GL_MAX_MODELVIEW_STACK_DEPTH
        | GL_MAX_PROJECTION_STACK_DEPTH
        | GL_MAX_TEXTURE_STACK_DEPTH
        | GL_SAMPLE_BUFFERS
        | GL_SAMPLES
        | GL_MAX_CLIP_PLANES
        | GL_AUX_BUFFERS
        | GL_RED_BITS
        | GL_GREEN_BITS
        | GL_BLUE_BITS
        | GL_ALPHA_BITS
        | GL_MAX_3D_TEXTURE_SIZE
        | GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
        | GL_MAX_ATTRIB_STACK_DEPTH
        | GL_MAX_COLOR_MATRIX_STACK_DEPTH
        | GL_MAX_CUBE_MAP_TEXTURE_SIZE
        | GL_MAX_DRAW_BUFFERS
        | GL_MAX_NAME_STACK_DEPTH
        | GL_NORMAL_ARRAY_STRIDE
        | GL_INDEX_ARRAY_STRIDE
        | GL_COLOR_ARRAY_STRIDE
        | GL_EDGE_FLAG_ARRAY_STRIDE
        | GL_TEXTURE_COORD_ARRAY_STRIDE
        | GL_VERTEX_ARRAY_STRIDE
        | GL_SECONDARY_COLOR_ARRAY_STRIDE
        | GL_FOG_COORD_ARRAY_STRIDE
        | GL_SECONDARY_COLOR_ARRAY_SIZE
        | GL_SELECTION_BUFFER_SIZE
        | GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
        | GL_MAX_VERTEX_UNIFORM_COMPONENTS
        | GL_NUM_EXTENSIONS
        | GL_MAX_VERTEX_ATTRIBS
      type get_float_3 = GL_CURRENT_NORMAL | GL_POINT_DISTANCE_ATTENUATION
      type get_float_4 =
          GL_ACCUM_CLEAR_VALUE
        | GL_BLEND_COLOR
        | GL_COLOR_CLEAR_VALUE
        | GL_CURRENT_COLOR
        | GL_CURRENT_RASTER_COLOR
        | GL_CURRENT_RASTER_POSITION
        | GL_CURRENT_RASTER_SECONDARY_COLOR
        | GL_CURRENT_RASTER_TEXTURE_COORDS
        | GL_CURRENT_SECONDARY_COLOR
        | GL_CURRENT_TEXTURE_COORDS
        | GL_FOG_COLOR
        | GL_LIGHT_MODEL_AMBIENT
        | GL_MAP2_GRID_DOMAIN
      type get_matrix =
          GL_COLOR_MATRIX
        | GL_MODELVIEW_MATRIX
        | GL_PROJECTION_MATRIX
        | GL_TEXTURE_MATRIX
        | GL_TRANSPOSE_COLOR_MATRIX
        | GL_TRANSPOSE_MODELVIEW_MATRIX
        | GL_TRANSPOSE_PROJECTION_MATRIX
        | GL_TRANSPOSE_TEXTURE_MATRIX
      type get_float_1 =
          GL_CURRENT_RASTER_DISTANCE
        | GL_FOG_DENSITY
        | GL_FOG_END
        | GL_FOG_INDEX
        | GL_FOG_START
        | GL_INDEX_CLEAR_VALUE
        | GL_LINE_WIDTH
        | GL_LINE_WIDTH_GRANULARITY
        | GL_POINT_SIZE
        | GL_STENCIL_CLEAR_VALUE
        | GL_DEPTH_CLEAR_VALUE
        | GL_SAMPLE_COVERAGE_VALUE
        | GL_ZOOM_X
        | GL_ZOOM_Y
        | GL_ALPHA_SCALE
        | GL_BLUE_SCALE
        | GL_DEPTH_SCALE
        | GL_GREEN_SCALE
        | GL_RED_SCALE
        | GL_POINT_SIZE_GRANULARITY
        | GL_POINT_SIZE_MAX
        | GL_POINT_SIZE_MIN
        | GL_POINT_FADE_THRESHOLD_SIZE
        | GL_CURRENT_INDEX
        | GL_POLYGON_OFFSET_FACTOR
        | GL_POLYGON_OFFSET_UNITS
      type get_float_2 =
          GL_LINE_WIDTH_RANGE
        | GL_POINT_SIZE_RANGE
        | GL_DEPTH_RANGE
      type get_texture_binding =
          GL_TEXTURE_BINDING_1D
        | GL_TEXTURE_BINDING_2D
        | GL_TEXTURE_BINDING_3D
        | GL_TEXTURE_BINDING_CUBE_MAP
      type get_light =
          GL_SPOT_EXPONENT
        | GL_SPOT_CUTOFF
        | GL_CONSTANT_ATTENUATION
        | GL_LINEAR_ATTENUATION
        | GL_QUADRATIC_ATTENUATION
        | GL_SPOT_DIRECTION
        | GL_AMBIENT
        | GL_DIFFUSE
        | GL_SPECULAR
        | GL_POSITION
        | GL_LIGHT_MODEL_COLOR_CONTROL
    end
  external glGetBoolean1 : GL.Get.get_boolean_1 -> bool = "ml_glgetboolean1"
    "noalloc"
  external glGetBoolean4 : GL.Get.get_boolean_4 -> bool * bool * bool * bool
    = "ml_glgetboolean4"
  external glGetInteger4 : GL.Get.get_integer_4 -> int * int * int * int
    = "ml_glgetinteger4"
  external glGetInteger1 : GL.Get.get_integer_1 -> int = "ml_glgetinteger1"
    "noalloc"
  external glGetInteger2 : GL.Get.get_integer_2 -> int * int
    = "ml_glgetinteger2"
  external glGetFloat4 : GL.Get.get_float_4 -> float * float * float * float
    = "ml_glgetfloat4"
  external glGetFloat3 : GL.Get.get_float_3 -> float * float * float
    = "ml_glgetfloat3"
  external glGetFloat2 : GL.Get.get_float_2 -> float * float
    = "ml_glgetfloat2"
  external glGetFloat1 : GL.Get.get_float_1 -> float = "ml_glgetfloat1"
  external glGetMatrix : GL.Get.get_matrix -> float array array
    = "ml_glgetmatrix"
  external glGetMatrixFlat : GL.Get.get_matrix -> float array
    = "ml_glgetmatrix_flat"
  external glGetTextureBinding : GL.Get.get_texture_binding -> GL.texture_id
    = "ml_glgettexturebinding" "noalloc"
  type get_string =
      GL_VENDOR
    | GL_RENDERER
    | GL_VERSION
    | GL_SHADING_LANGUAGE_VERSION
    | GL_EXTENSIONS
  external glGetString : name:GL.get_string -> string = "ml_glgetstring"
  type gl_error =
      GL_NO_ERROR
    | GL_INVALID_ENUM
    | GL_INVALID_VALUE
    | GL_INVALID_OPERATION
    | GL_STACK_OVERFLOW
    | GL_STACK_UNDERFLOW
    | GL_OUT_OF_MEMORY
    | GL_TABLE_TOO_LARGE
  external glGetError : unit -> GL.gl_error = "ml_glgeterror" "noalloc"
  type tuple_params =
      P1 of float
    | P3 of float * float * float
    | P4 of float * float * float * float
    | PCC of GL.color_control
  val glGetLight :
    light:GL.gl_light -> pname:GL.Get.get_light -> GL.tuple_params
  type texture_i =
      GL_TEXTURE0
    | GL_TEXTURE1
    | GL_TEXTURE2
    | GL_TEXTURE3
    | GL_TEXTURE4
    | GL_TEXTURE5
    | GL_TEXTURE6
    | GL_TEXTURE7
    | GL_TEXTURE8
    | GL_TEXTURE9
    | GL_TEXTURE10
    | GL_TEXTURE11
    | GL_TEXTURE12
    | GL_TEXTURE13
    | GL_TEXTURE14
    | GL_TEXTURE15
    | GL_TEXTURE16
    | GL_TEXTURE17
    | GL_TEXTURE18
    | GL_TEXTURE19
    | GL_TEXTURE20
    | GL_TEXTURE21
    | GL_TEXTURE22
    | GL_TEXTURE23
    | GL_TEXTURE24
    | GL_TEXTURE25
    | GL_TEXTURE26
    | GL_TEXTURE27
    | GL_TEXTURE28
    | GL_TEXTURE29
    | GL_TEXTURE30
    | GL_TEXTURE31
  external glActiveTexture : texture:GL.texture_i -> unit
    = "ml_glactivetexture" "noalloc"
  external glActiveTexturei : texture:int -> unit = "ml_glactivetexture_i"
    "noalloc"
  external glMultiTexCoord2 :
    texture:GL.texture_i -> s:float -> t:float -> unit
    = "ml_glmultitexcoord2d" "noalloc"
  external glMultiTexCoord2i : texture:int -> s:float -> t:float -> unit
    = "ml_glmultitexcoord2f_i"
  val glmlite_version : int * int * int
end