sig
  type usage =
      [ `Dynamic_copy
      | `Dynamic_draw
      | `Dynamic_read
      | `Static_copy
      | `Static_draw
      | `Static_read
      | `Stream_copy
      | `Stream_draw
      | `Stream_read ]
  val pp_usage : Format.formatter -> usage -> unit
  type ('a, 'b) init =
      [ `Cpu of Gg.Ba.scalar_type * int
      | `Float16 of (int, Bigarray.int16_unsigned_elt) Gg.bigarray
      | `Float32 of (float, Bigarray.float32_elt) Gg.bigarray
      | `Float64 of (float, Bigarray.float64_elt) Gg.bigarray
      | `Gpu of Gg.Ba.scalar_type * int
      | `Int16 of (int, Bigarray.int16_signed_elt) Gg.bigarray
      | `Int32 of (int32, Bigarray.int32_elt) Gg.bigarray
      | `Int64 of (int64, Bigarray.int64_elt) Gg.bigarray
      | `Int8 of (int, Bigarray.int8_signed_elt) Gg.bigarray
      | `UInt16 of (int, Bigarray.int16_unsigned_elt) Gg.bigarray
      | `UInt32 of (int32, Bigarray.int32_elt) Gg.bigarray
      | `UInt64 of (int64, Bigarray.int64_elt) Gg.bigarray
      | `UInt8 of (int, Bigarray.int8_unsigned_elt) Gg.bigarray ]
  type t = buf
  val create : ?cpu_autorelease:bool -> ?usage:usage -> ('a, 'b) init -> buf
  val usage : buf -> usage
  val scalar_type : buf -> Gg.Ba.scalar_type
  val pp : Format.formatter -> buf -> unit
  val gpu_count : buf -> int
  val gpu_exists : buf -> bool
  val gpu_upload : buf -> bool
  val set_gpu_upload : buf -> bool -> unit
  val sync_gpu_to_cpu : renderer -> buf -> unit
  val gpu_map :
    renderer ->
    [ `R | `RW | `W ] ->
    buf -> ('a, 'b) Gg.Ba.ba_scalar_type -> ('a, 'b) Gg.bigarray
  val gpu_unmap : renderer -> buf -> unit
  val cpu_count : buf -> int
  val cpu_exists : buf -> bool
  val cpu :
    buf -> ('a, 'b) Gg.Ba.ba_scalar_type -> ('a, 'b) Gg.bigarray option
  val cpu_buffer : buf -> Gg.buffer option
  val get_cpu : buf -> ('a, 'b) Gg.Ba.ba_scalar_type -> ('a, 'b) Gg.bigarray
  val get_cpu_buffer : buf -> Gg.buffer
  val set_cpu : buf -> ('a, 'b) Gg.bigarray option -> unit
  val set_cpu_buffer : buf -> Gg.buffer option -> unit
  val cpu_autorelease : buf -> bool
  val set_cpu_autorelease : buf -> bool -> unit
  val sync_cpu_to_gpu : renderer -> buf -> unit
  type bigarray_any =
      Ba : ('a, 'b) Gg.bigarray -> Lit.Renderer.Private.Buf.bigarray_any
  val create_bigarray_any :
    Gg.Ba.scalar_type -> int -> Lit.Renderer.Private.Buf.bigarray_any
  val gpu_byte_count : Lit.buf -> int
  val set_gpu_count : Lit.buf -> int -> unit
  val set_gpu_exists : Lit.buf -> bool -> unit
  val cpu_byte_count : Lit.buf -> int
  val cpu_p : Lit.buf -> Lit.Renderer.Private.Buf.bigarray_any option
  val set_cpu_p : Lit.buf -> Lit.Renderer.Private.Buf.bigarray_any -> unit
  val check_ba_scalar_type : Lit.buf -> ('a, 'b) Gg.Ba.ba_scalar_type -> unit
  val binfo : Lit.buf -> Lit.Renderer.Private.BInfo.t
  val set_binfo : Lit.buf -> Lit.Renderer.Private.BInfo.t -> unit
end