wgpu-rs:将Matrix3放入顶点着色器会导致奇怪的行为,但是使用Matrix4可以正常工作]]

问题描述 投票:3回答:1

[使用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 ...

rust shader
1个回答
2
投票

这是open issue中的wgpu-rs。实际上,最简单的解决方法可能是将mat3变成mat4,直到解决为止。

© www.soinside.com 2019 - 2024. All rights reserved.