use crate::{ffi, mbvh, Error};
pub struct BVH {
pub(crate) inner: cxx::UniquePtr<ffi::BVH8_CPU>,
}
impl BVH {
pub fn new(original: &mbvh::BVH) -> Result<Self, Error> {
Self {
inner: ffi::BVH8_CPU_new(),
}
.convert(original)
}
pub fn convert(mut self, original: &mbvh::BVH) -> Result<Self, Error> {
Error::validate_leaf_count(4, original.max_primitives_per_leaf)?;
self.inner
.pin_mut()
.ConvertFrom(original.inner.as_ref().unwrap());
Ok(self)
}
}
#[cfg(target_feature = "avx2")]
impl crate::Intersector for BVH {
fn intersect(&self, ray: &mut crate::Ray) -> u32 {
self.inner.Intersect(ray) as u32
}
}