// picogkffi types: Core data types for the PicoGK FFI.

///|
pub struct Vec3 {
  x : Double
  y : Double
  z : Double
}

///|
pub fn Vec3::new(x : Double, y : Double, z : Double) -> Vec3 {
  Vec3::{ x, y, z }
}

///|
pub struct BBox3 {
  min : Vec3
  max : Vec3
}

///|
pub fn BBox3::new(min_v : Vec3, max_v : Vec3) -> BBox3 {
  BBox3::{ min: min_v, max: max_v }
}

///|
pub struct Triangle {
  a : Int
  b : Int
  c : Int
}

///|
pub fn Triangle::new(a : Int, b : Int, c : Int) -> Triangle {
  Triangle::{ a, b, c }
}

///|
pub struct ColorFloat {
  r : Double
  g : Double
  b : Double
  a : Double
}

///|
pub fn ColorFloat::new(
  r : Double,
  g : Double,
  b : Double,
  a : Double,
) -> ColorFloat {
  ColorFloat::{ r, g, b, a }
}

///|
pub type Handle = Int64

///|
pub const FIELD_TYPE_VOXELS : Int = 0

///|
pub const FIELD_TYPE_SCALAR : Int = 1

///|
pub const FIELD_TYPE_VECTOR : Int = 2

///|
pub const FIELD_TYPE_UNKNOWN : Int = -1

///|
pub const META_TYPE_STRING : Int = 0

///|
pub const META_TYPE_FLOAT : Int = 1

///|
pub const META_TYPE_VECTOR : Int = 2

///|
pub const META_TYPE_UNKNOWN : Int = -1