signature GL32_DRAW =
sig
(* controlling the provoking vertex (Section 2.18) *)
eqtype provoke_mode
val FIRST_VERTEX_CONVENTION : provoke_mode
val LAST_VERTEX_CONVENTION : provoke_mode
val provokingVertex : provoke_mode -> unit
val getProvokingVertex : unit -> provoke_mode
(* primitive restart control (Section 2.8.1) *)
val enableRestart : bool -> unit
val restartIndex : Word32.word -> unit
(* drawing modes *)
type prim = PrimitiveType.t
(*
eqtype prim
val POINTS : prim
val LINES : prim
val LINE_LOOP : prim
val LINE_STRIP : prim
val TRIANGLES : prim
val TRIANGLE_STRIP : prim
val TRIANGLE_FAN : prim
val LINES_ADJACENCY : prim
val LINE_STRIP_ADJACENCY : prim
val TRIANGLES_ADJACENCY : prim
val TRIANGLE_STRIP_ADJACENCY : prim
*)
(* render primitives from the currently enabled arrays [glDrawArrays] *)
val arrays : prim * {first : int, count : int} -> unit
(* render multiple sets of primitives from the currently enabled arrays *)
val multiArrays : prim * {first : int, count : int} list -> unit
(* render multiple instances of primitives from the currently enabled arrays *)
val arraysInstanced : prim * {first : int, count : int} * int -> unit
(* render primitives using the given indices and the currently enabled arrays;
* the indices can be specified as vectors, arrays, or data buffers of
* 8, 16, or 32-bit words. There are also versions that use the whole sequence
* and versions that specify a count of the elements. If the count is greater
* than the number of elements, then the Size exception is raised.
*)
val elementsVecb : prim * Word8.word vector -> unit
val elementsArrb : prim * Word8.word array -> unit
val elementsBufb : prim * Word8.word DataBuffer.buffer -> unit
val elementsVecb' : prim * int * Word8.word vector -> unit
val elementsArrb' : prim * int * Word8.word array -> unit
val elementsBufb' : prim * int * Word8.word DataBuffer.buffer -> unit
val elementsVecs : prim * Word16.word vector -> unit
val elementsArrs : prim * Word16.word array -> unit
val elementsBufs : prim * Word16.word DataBuffer.buffer -> unit
val elementsVecs' : prim * int * Word16.word vector -> unit
val elementsArrs' : prim * int * Word16.word array -> unit
val elementsBufs' : prim * int * Word16.word DataBuffer.buffer -> unit
val elementsVeci : prim * Word32.word vector -> unit
val elementsArri : prim * Word32.word array -> unit
val elementsBufi : prim * Word32.word DataBuffer.buffer -> unit
val elementsVeci' : prim * int * Word32.word vector -> unit
val elementsArri' : prim * int * Word32.word array -> unit
val elementsBufi' : prim * int * Word32.word DataBuffer.buffer -> unit
(* render primitives using the given indices, offset, and the currently enabled arrays *)
val elementsBaseVertexVecub : {mode : prim, count : int, buf : Word8.word vector, base : int} -> unit
val elementsBaseVertexArrub : {mode : prim, count : int, buf : Word8.word array, base : int} -> unit
val elementsBaseVertexBufub : {mode : prim, count : int, buf : Word8.word DataBuffer.buffer, base : int} -> unit
val elementsBaseVertexVecus : {mode : prim, count : int, buf : Word16.word vector, base : int} -> unit
val elementsBaseVertexArrus : {mode : prim, count : int, buf : Word16.word array, base : int} -> unit
val elementsBaseVertexBufus : {mode : prim, count : int, buf : Word16.word DataBuffer.buffer, base : int} -> unit
val elementsBaseVertexVecui : {mode : prim, count : int, buf : Word32.word vector, base : int} -> unit
val elementsBaseVertexArrui : {mode : prim, count : int, buf : Word32.word array, base : int} -> unit
val elementsBaseVertexBufui : {mode : prim, count : int, buf : Word32.word DataBuffer.buffer, base : int} -> unit
(* render primitives using the given indices and the currently enabled arrays. These
* functions are similar to the elements* function above, except that the minimum and
* maximum index values are specified.
*)
val rangeElementsVecub : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word8.word vector} -> unit
val rangeElementsArrub : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word8.word array} -> unit
val rangeElementsBufub : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word8.word DataBuffer.buffer} -> unit
val rangeElementsVecus : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word16.word vector} -> unit
val rangeElementsArrus : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word16.word array} -> unit
val rangeElementsBufus : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word16.word DataBuffer.buffer} -> unit
val rangeElementsVecui : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word32.word vector} -> unit
val rangeElementsArrui : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word32.word array} -> unit
val rangeElementsBufui : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word32.word DataBuffer.buffer} -> unit
(* render primitives using the given indices and the currently enabled arrays. These
* functions are similar to the elementsBaseVertex* functions above, except that the
* minimum and maximum index values are specified.
*)
val rangeElementsBaseVertexVecub : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word8.word vector, base : int} -> unit
val rangeElementsBaseVertexArrub : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word8.word array, base : int} -> unit
val rangeElementsBaseVertexBufub : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word8.word DataBuffer.buffer, base : int} -> unit
val rangeElementsBaseVertexVecus : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word16.word vector, base : int} -> unit
val rangeElementsBaseVertexArrus : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word16.word array, base : int} -> unit
val rangeElementsBaseVertexBufus : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word16.word DataBuffer.buffer, base : int} -> unit
val rangeElementsBaseVertexVecui : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word32.word vector, base : int} -> unit
val rangeElementsBaseVertexArrui : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word32.word array, base : int} -> unit
val rangeElementsBaseVertexBufui : {mode : prim, min : GLuint.word, max : GLuint.word, count : int, buf : Word32.word DataBuffer.buffer, base : int} -> unit
(* render multiple instances of primitives using the given indices and the currently
* enabled arrays
*)
val elementsInstancedVecub : {mode : prim, count : int, buf : Word8.word vector, primCount : int} -> unit
val elementsInstancedArrub : {mode : prim, count : int, buf : Word8.word array, primCount : int} -> unit
val elementsInstancedBufub : {mode : prim, count : int, buf : Word8.word DataBuffer.buffer, primCount : int} -> unit
val elementsInstancedVecus : {mode : prim, count : int, buf : Word16.word vector, primCount : int} -> unit
val elementsInstancedArrus : {mode : prim, count : int, buf : Word16.word array, primCount : int} -> unit
val elementsInstancedBufus : {mode : prim, count : int, buf : Word16.word DataBuffer.buffer, primCount : int} -> unit
val elementsInstancedVecui : {mode : prim, count : int, buf : Word32.word vector, primCount : int} -> unit
val elementsInstancedArrui : {mode : prim, count : int, buf : Word32.word array, primCount : int} -> unit
val elementsInstancedBufui : {mode : prim, count : int, buf : Word32.word DataBuffer.buffer, primCount : int} -> unit
(* render multiple instances of primitives using the given indices, offset, and the currently
* enabled arrays
*)
val elementsInstancedBaseVertexVecub : {mode : prim, count : int, buf : Word8.word vector, primCount : int, base : int} -> unit
val elementsInstancedBaseVertexArrub : {mode : prim, count : int, buf : Word8.word array, primCount : int, base : int} -> unit
val elementsInstancedBaseVertexBufub : {mode : prim, count : int, buf : Word8.word DataBuffer.buffer, primCount : int, base : int} -> unit
val elementsInstancedBaseVertexVecus : {mode : prim, count : int, buf : Word16.word vector, primCount : int, base : int} -> unit
val elementsInstancedBaseVertexArrus : {mode : prim, count : int, buf : Word16.word array, primCount : int, base : int} -> unit
val elementsInstancedBaseVertexBufus : {mode : prim, count : int, buf : Word16.word DataBuffer.buffer, primCount : int, base : int} -> unit
val elementsInstancedBaseVertexVecui : {mode : prim, count : int, buf : Word32.word vector, primCount : int, base : int} -> unit
val elementsInstancedBaseVertexArrui : {mode : prim, count : int, buf : Word32.word array, primCount : int, base : int} -> unit
val elementsInstancedBaseVertexBufui : {mode : prim, count : int, buf : Word32.word DataBuffer.buffer, primCount : int, base : int} -> unit
end