// Generated by scripts/generate.mjs from bindings/api.mjs. Do not edit.

///|
#external
pub type InterleavedBuffer

///|
#module("@mizchi/three-mbt/geometry")
pub extern "js" fn InterleavedBuffer::InterleavedBuffer(
  values : FixedArray[Double],
  stride : Int,
) -> InterleavedBuffer = "interleavedBuffer"

///|
pub extern "js" fn InterleavedBuffer::count(self : InterleavedBuffer) -> Int =
  #| (self) => self.count

///|
pub extern "js" fn InterleavedBuffer::stride(self : InterleavedBuffer) -> Int =
  #| (self) => self.stride

///|
pub extern "js" fn InterleavedBuffer::usage(
  self : InterleavedBuffer,
) -> BufferUsage =
  #| (self) => self.usage

///|
pub extern "js" fn InterleavedBuffer::set_usage(
  self : InterleavedBuffer,
  value : BufferUsage,
) -> InterleavedBuffer =
  #| (self, value) => { self.setUsage(value); return self; }

///|
pub extern "js" fn InterleavedBuffer::add_update_range(
  self : InterleavedBuffer,
  start : Int,
  count : Int,
) -> Unit =
  #| (self, start, count) => self.addUpdateRange(start, count)

///|
pub extern "js" fn InterleavedBuffer::clear_update_ranges(
  self : InterleavedBuffer,
) -> Unit =
  #| (self) => self.clearUpdateRanges()

///|
pub extern "js" fn InterleavedBuffer::update_ranges(
  self : InterleavedBuffer,
) -> FixedArray[BufferUpdateRange] =
  #| (self) => self.updateRanges.map(range => ({...range}))

///|
pub extern "js" fn InterleavedBuffer::values(
  self : InterleavedBuffer,
) -> FixedArray[Double] =
  #| (self) => Array.from(self.array)

///|
pub extern "js" fn InterleavedBuffer::mark_needs_update(
  self : InterleavedBuffer,
) -> Unit =
  #| (self) => { self.needsUpdate = true; }

///|
pub extern "js" fn InterleavedBuffer::version(self : InterleavedBuffer) -> Int =
  #| (self) => self.version

///|
pub extern "js" fn InterleavedBuffer::uuid(self : InterleavedBuffer) -> String =
  #| (self) => self.uuid

///|
pub extern "js" fn InterleavedBuffer::set(
  self : InterleavedBuffer,
  values : FixedArray[Double],
  offset : Int,
) -> InterleavedBuffer =
  #| (self, values, offset) => self.set(values, offset)

///|
pub extern "js" fn InterleavedBuffer::copy(
  self : InterleavedBuffer,
  source : InterleavedBuffer,
) -> InterleavedBuffer =
  #| (self, source) => self.copy(source)

///|
pub extern "js" fn InterleavedBuffer::copy_at(
  self : InterleavedBuffer,
  index : Int,
  source : InterleavedBuffer,
  source_index : Int,
) -> InterleavedBuffer =
  #| (self, index, source, source_index) => self.copyAt(index, source, source_index)

///|
pub extern "js" fn InterleavedBuffer::clone(
  self : InterleavedBuffer,
) -> InterleavedBuffer =
  #| (self) => self.clone({})

///|
pub extern "js" fn InterleavedBuffer::on_upload(
  self : InterleavedBuffer,
  callback : () -> Unit,
) -> InterleavedBuffer =
  #| (self, callback) => self.onUpload(callback)