我对使用 gpu api 相对较新,甚至对 wgpu 还比较新,并且想搞乱绘制到表面的计算着色器。 不过,好像直接不允许这样?
在运行时尝试从表面创建到纹理 View 的绑定(bind)时,会出现错误,指出需要存储绑定(bind)位,但是不允许在表面配置期间定义该位。我还尝试让着色器接受纹理作为常规纹理而不是存储纹理,但这会带来绑定(bind)无效的错误。
有没有好的方法可以直接写入表面纹理,还是需要创建单独的存储纹理?引擎盖下的渲染管道是否不直接写入表面的纹理 View ? 如果是单独的纹理(我猜是这样),是否有最好的方法可以遵循?
最佳答案
您可以使用textureStore
写入纹理,然后使用render_pass将该纹理渲染到最终表面
@group(0) @binding(0)
var out_texture: texture_storage_2d<rgba8unorm, write>;
@compute @workgroup_size(16 , 16)
fn main(@builtin(global_invocation_id) global_id: vec3u) {
textureStore(out_texture, vec2<u32>(global_id.x, global_id.y), vec4<f32>(your_color.xyz, 1.0));
}
关于rust - wgpu 计算直接写入表面纹理 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71599251/