sig
  type (+'a, +'b) t
  val create :
    ([< Gl.kind ] as 'a) ->
    format:([< Gl.format ] as 'b) ->
    width:int -> height:int -> ('b, 'a) GlPix.t
  val of_raw :
    ([< Gl.kind ] as 'a) Raw.t ->
    format:([< Gl.format ] as 'b) ->
    width:int -> height:int -> ('b, 'a) GlPix.t
  val to_raw : ('a, 'b) GlPix.t -> 'Raw.t
  val format : ('a, 'b) GlPix.t -> 'a
  val width : ('a, 'b) GlPix.t -> int
  val height : ('a, 'b) GlPix.t -> int
  val raw_pos :
    ([< Gl.format ], [< Gl.kind ]) GlPix.t -> x:int -> y:int -> int
  val read :
    x:int ->
    y:int ->
    width:int ->
    height:int ->
    format:([< Gl.format ] as 'a) ->
    kind:([< Gl.kind ] as 'b) -> ('a, 'b) GlPix.t
  type bitmap = ([ `color_index ], [ `bitmap ]) GlPix.t
  val bitmap : GlPix.bitmap -> orig:Gl.point2 -> move:Gl.point2 -> unit
  val draw : ([< Gl.format ], [< Gl.kind ]) GlPix.t -> unit
  type map =
      [ `a_to_a
      | `b_to_b
      | `g_to_g
      | `i_to_a
      | `i_to_b
      | `i_to_g
      | `i_to_i
      | `i_to_r
      | `r_to_r
      | `s_to_s ]
  val map : GlPix.map -> [ `float ] Raw.t -> unit
  type store_param =
      [ `pack_alignment of int
      | `pack_lsb_first of bool
      | `pack_row_length of int
      | `pack_skip_pixels of int
      | `pack_skip_rows of int
      | `pack_swap_bytes of bool
      | `unpack_alignment of int
      | `unpack_lsb_first of bool
      | `unpack_row_length of int
      | `unpack_skip_pixels of int
      | `unpack_skip_rows of int
      | `unpack_swap_bytes of bool ]
  val store : GlPix.store_param -> unit
  type transfer_param =
      [ `alpha_bias of float
      | `alpha_scale of float
      | `blue_bias of float
      | `blue_scale of float
      | `depth_bias of float
      | `depth_scale of float
      | `green_bias of float
      | `green_scale of float
      | `index_offset of int
      | `index_shift of int
      | `map_color of bool
      | `map_stencil of bool
      | `red_bias of float
      | `red_scale of float ]
  val transfer : GlPix.transfer_param -> unit
  val zoom : x:float -> y:float -> unit
  val raster_pos : x:float -> y:float -> ?z:float -> ?w:float -> unit -> unit
  val copy :
    x:int ->
    y:int ->
    width:int -> height:int -> buffer:[ `color | `depth | `stencil ] -> unit
end