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 -> Lit.Buf.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 = Lit.buf
  val create :
    ?cpu_autorelease:bool ->
    ?usage:Lit.Buf.usage -> ('a, 'b) Lit.Buf.init -> Lit.buf
  val usage : Lit.buf -> Lit.Buf.usage
  val scalar_type : Lit.buf -> Gg.Ba.scalar_type
  val pp : Format.formatter -> Lit.buf -> unit
  val gpu_count : Lit.buf -> int
  val gpu_exists : Lit.buf -> bool
  val gpu_upload : Lit.buf -> bool
  val set_gpu_upload : Lit.buf -> bool -> unit
  val sync_gpu_to_cpu : Lit.renderer -> Lit.buf -> unit
  val gpu_map :
    Lit.renderer ->
    [ `R | `RW | `W ] ->
    Lit.buf -> ('a, 'b) Gg.Ba.ba_scalar_type -> ('a, 'b) Gg.bigarray
  val gpu_unmap : Lit.renderer -> Lit.buf -> unit
  val cpu_count : Lit.buf -> int
  val cpu_exists : Lit.buf -> bool
  val cpu :
    Lit.buf -> ('a, 'b) Gg.Ba.ba_scalar_type -> ('a, 'b) Gg.bigarray option
  val cpu_buffer : Lit.buf -> Gg.buffer option
  val get_cpu :
    Lit.buf -> ('a, 'b) Gg.Ba.ba_scalar_type -> ('a, 'b) Gg.bigarray
  val get_cpu_buffer : Lit.buf -> Gg.buffer
  val set_cpu : Lit.buf -> ('a, 'b) Gg.bigarray option -> unit
  val set_cpu_buffer : Lit.buf -> Gg.buffer option -> unit
  val cpu_autorelease : Lit.buf -> bool
  val set_cpu_autorelease : Lit.buf -> bool -> unit
  val sync_cpu_to_gpu : Lit.renderer -> Lit.buf -> unit
end