use crate::math::Pose;
use crate::shaders::dynamics::GpuRbdPrepRender;
pub use crate::shaders::dynamics::RbdInstanceDesc;
use khal::Shader;
use khal::backend::{Encoder, GpuBackendError, GpuBufferSliceMut, GpuEncoder};
use vortx::tensor::Tensor;
#[derive(Shader)]
pub struct WgRbdPrepRender {
prep_render: GpuRbdPrepRender,
}
impl WgRbdPrepRender {
#[allow(clippy::too_many_arguments)]
pub fn launch(
&self,
encoder: &mut GpuEncoder,
positions: &mut GpuBufferSliceMut<f32>,
deformations: &mut GpuBufferSliceMut<f32>,
colors: &mut GpuBufferSliceMut<f32>,
body_poses: &Tensor<Pose>,
descriptors: &Tensor<RbdInstanceDesc>,
count: &Tensor<u32>,
instance_count: u32,
) -> Result<(), GpuBackendError> {
if instance_count == 0 {
return Ok(());
}
let mut pass = encoder.begin_pass("rbd-prep-render", None);
self.prep_render.call(
&mut pass,
[instance_count, 1, 1],
positions,
deformations,
colors,
body_poses,
descriptors,
count,
)?;
Ok(())
}
}