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

///|
#module("@mizchi/three-mbt/constructors")
pub extern "js" fn Matrix4::Matrix4() -> Matrix4 = "matrix4"

///|
pub extern "js" fn Matrix4::clone(self : Matrix4) -> Matrix4 =
  #| (self) => self.clone()

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

///|
pub extern "js" fn Matrix4::equals(self : Matrix4, other : Matrix4) -> Bool =
  #| (self, other) => self.equals(other)

///|
pub extern "js" fn Matrix4::same_reference(
  self : Matrix4,
  other : Matrix4,
) -> Bool =
  #| (self, other) => self === other

///|
pub extern "js" fn Matrix4::identity(self : Matrix4) -> Matrix4 =
  #| (self) => self.identity()

///|
pub extern "js" fn Matrix4::multiply(
  self : Matrix4,
  other : Matrix4,
) -> Matrix4 =
  #| (self, other) => self.multiply(other)

///|
pub extern "js" fn Matrix4::premultiply(
  self : Matrix4,
  other : Matrix4,
) -> Matrix4 =
  #| (self, other) => self.premultiply(other)

///|
pub extern "js" fn Matrix4::multiply_matrices(
  self : Matrix4,
  left : Matrix4,
  right : Matrix4,
) -> Matrix4 =
  #| (self, left, right) => self.multiplyMatrices(left, right)

///|
pub extern "js" fn Matrix4::invert(self : Matrix4) -> Matrix4 =
  #| (self) => self.invert()

///|
pub extern "js" fn Matrix4::transpose(self : Matrix4) -> Matrix4 =
  #| (self) => self.transpose()

///|
pub extern "js" fn Matrix4::determinant(self : Matrix4) -> Double =
  #| (self) => self.determinant()

///|
pub extern "js" fn Matrix4::make_translation(
  self : Matrix4,
  x : Double,
  y : Double,
  z : Double,
) -> Matrix4 =
  #| (self, x, y, z) => self.makeTranslation(x, y, z)

///|
pub extern "js" fn Matrix4::make_scale(
  self : Matrix4,
  x : Double,
  y : Double,
  z : Double,
) -> Matrix4 =
  #| (self, x, y, z) => self.makeScale(x, y, z)

///|
pub extern "js" fn Matrix4::make_rotation_x(
  self : Matrix4,
  angle : Double,
) -> Matrix4 =
  #| (self, angle) => self.makeRotationX(angle)

///|
pub extern "js" fn Matrix4::make_rotation_y(
  self : Matrix4,
  angle : Double,
) -> Matrix4 =
  #| (self, angle) => self.makeRotationY(angle)

///|
pub extern "js" fn Matrix4::make_rotation_z(
  self : Matrix4,
  angle : Double,
) -> Matrix4 =
  #| (self, angle) => self.makeRotationZ(angle)

///|
pub extern "js" fn Matrix4::make_rotation_from_quaternion(
  self : Matrix4,
  quaternion : Quaternion,
) -> Matrix4 =
  #| (self, quaternion) => self.makeRotationFromQuaternion(quaternion)

///|
pub extern "js" fn Matrix4::compose(
  self : Matrix4,
  position : Vector3,
  quaternion : Quaternion,
  scale : Vector3,
) -> Matrix4 =
  #| (self, position, quaternion, scale) => self.compose(position, quaternion, scale)

///|
pub extern "js" fn Matrix4::decompose(
  self : Matrix4,
  position : Vector3,
  quaternion : Quaternion,
  scale : Vector3,
) -> Matrix4 =
  #| (self, position, quaternion, scale) => self.decompose(position, quaternion, scale)

///|
pub extern "js" fn Matrix4::elements(self : Matrix4) -> FixedArray[Double] =
  #| (self) => self.elements.slice()

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

///|
pub extern "js" fn Matrix4::to_array(self : Matrix4) -> FixedArray[Double] =
  #| (self) => self.toArray()

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

///|
pub extern "js" fn Matrix4::set(
  self : Matrix4,
  n11 : Double,
  n12 : Double,
  n13 : Double,
  n14 : Double,
  n21 : Double,
  n22 : Double,
  n23 : Double,
  n24 : Double,
  n31 : Double,
  n32 : Double,
  n33 : Double,
  n34 : Double,
  n41 : Double,
  n42 : Double,
  n43 : Double,
  n44 : Double,
) -> Matrix4 =
  #| (self, n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) => self.set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44)

///|
pub extern "js" fn Matrix4::extract_basis(
  self : Matrix4,
  x_axis : Vector3,
  y_axis : Vector3,
  z_axis : Vector3,
) -> Matrix4 =
  #| (self, x_axis, y_axis, z_axis) => self.extractBasis(x_axis, y_axis, z_axis)

///|
pub extern "js" fn Matrix4::multiply_scalar(
  self : Matrix4,
  scale : Double,
) -> Matrix4 =
  #| (self, scale) => self.multiplyScalar(scale)

///|
pub extern "js" fn Matrix4::copy_position(
  self : Matrix4,
  matrix : Matrix4,
) -> Matrix4 =
  #| (self, matrix) => self.copyPosition(matrix)

///|
pub extern "js" fn Matrix4::extract_rotation(
  self : Matrix4,
  matrix : Matrix4,
) -> Matrix4 =
  #| (self, matrix) => self.extractRotation(matrix)

///|
pub extern "js" fn Matrix4::set_from_matrix3(
  self : Matrix4,
  matrix : Matrix3,
) -> Matrix4 =
  #| (self, matrix) => self.setFromMatrix3(matrix)

///|
pub extern "js" fn Matrix4::make_basis(
  self : Matrix4,
  x_axis : Vector3,
  y_axis : Vector3,
  z_axis : Vector3,
) -> Matrix4 =
  #| (self, x_axis, y_axis, z_axis) => self.makeBasis(x_axis, y_axis, z_axis)

///|
pub extern "js" fn Matrix4::make_rotation_from_euler(
  self : Matrix4,
  euler : Euler,
) -> Matrix4 =
  #| (self, euler) => self.makeRotationFromEuler(euler)

///|
pub extern "js" fn Matrix4::look_at(
  self : Matrix4,
  eye : Vector3,
  target : Vector3,
  up : Vector3,
) -> Matrix4 =
  #| (self, eye, target, up) => self.lookAt(eye, target, up)

///|
pub extern "js" fn Matrix4::determinant_affine(self : Matrix4) -> Double =
  #| (self) => self.determinantAffine()

///|
pub extern "js" fn Matrix4::set_position(
  self : Matrix4,
  position : Vector3,
) -> Matrix4 =
  #| (self, position) => self.setPosition(position)

///|
pub extern "js" fn Matrix4::scale(self : Matrix4, scale : Vector3) -> Matrix4 =
  #| (self, scale) => self.scale(scale)

///|
pub extern "js" fn Matrix4::get_max_scale_on_axis(self : Matrix4) -> Double =
  #| (self) => self.getMaxScaleOnAxis()

///|
pub extern "js" fn Matrix4::make_rotation_axis(
  self : Matrix4,
  axis : Vector3,
  angle : Double,
) -> Matrix4 =
  #| (self, axis, angle) => self.makeRotationAxis(axis, angle)

///|
pub extern "js" fn Matrix4::make_shear(
  self : Matrix4,
  xy : Double,
  xz : Double,
  yx : Double,
  yz : Double,
  zx : Double,
  zy : Double,
) -> Matrix4 =
  #| (self, xy, xz, yx, yz, zx, zy) => self.makeShear(xy, xz, yx, yz, zx, zy)

///|
pub extern "js" fn Matrix4::make_perspective(
  self : Matrix4,
  left : Double,
  right : Double,
  top : Double,
  bottom : Double,
  near : Double,
  far : Double,
) -> Matrix4 =
  #| (self, left, right, top, bottom, near, far) => self.makePerspective(left, right, top, bottom, near, far)

///|
pub extern "js" fn Matrix4::make_orthographic(
  self : Matrix4,
  left : Double,
  right : Double,
  top : Double,
  bottom : Double,
  near : Double,
  far : Double,
) -> Matrix4 =
  #| (self, left, right, top, bottom, near, far) => self.makeOrthographic(left, right, top, bottom, near, far)