rust - wgpu 计算直接写入表面纹理 View

标签 rust graphics compute-shader wgpu-rs

我对使用 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/

相关文章:

opengl - 计算着色器在调用(线程)和工作组上的最佳数据划分

string - 如何在包含 &'static str 的结构上实现 serde::Deserialize?

string - 我可以在 Rust 中将字符串转换为没有宏的枚举吗?

error-handling - 处理输入数据未定义错误

c++ - 在C++中删除数组导致程序崩溃

unity3d - 从我的工作着色器转换为统一计算着色器时,流体模拟中的奇怪行为

rust - 如何为带盒封闭的结构派生Clone?

java - 消除滚动文本的闪烁/抖动

c++ - 在 MFC C++ 应用程序中在屏幕上绘制点的最快方法

ios - Metal Compute 内核尺度图像