[使用wgpu-rs,我正在尝试将3x3 cgmath矩阵放入着色器(使用glsl-to-spirv编译)。但是,着色器中生成的mat3的数据不正确。当我用mat4和Matrix4替换mat3和Matrix3时,一切正常,矩阵具有正确的数据。
顶点着色器:
layout(set=0, binding=0) uniform Uniforms { mat3 camera_transform; };
渲染循环:
let mut encoder = self.device.create_command_encoder( &wgpu::CommandEncoderDescriptor { label: Some("update encoder"), }, ); let staging_buffer = self.device.create_buffer_with_data( bytemuck::cast_slice(&[self.uniforms]), wgpu::BufferUsage::COPY_SRC, ); encoder.copy_buffer_to_buffer(&staging_buffer, 0, &self.uniform_buffer, 0, std::mem::size_of::<Uniforms>() as wgpu::BufferAddress); self.queue.submit(&[encoder.finish()]); // ... render_pass.set_bind_group(0, &self.uniform_bind_group, &[]);
制服:
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct Uniforms {
pub camera_transform: Matrix3::<f32>,
}
unsafe impl bytemuck::Pod for Uniforms {}
unsafe impl bytemuck::Zeroable for Uniforms {}
impl Uniforms {
pub fn new() -> Self {
Self {
camera_transform: Matrix3::identity(),
}
}
}
[使用wgpu-rs,我正在尝试将3x3 cgmath矩阵放入着色器(使用glsl-to-spirv编译)。但是,着色器中生成的mat3的数据不正确。当我替换mat3和Matrix3 ...
这是open issue中的wgpu-rs
。实际上,最简单的解决方法可能是将mat3变成mat4,直到解决为止。