我目前正在将一些代码从使用 OpenGL 转换为 WGPU,我遇到了一个我似乎无法解决的问题。在我的原始代码中,我在清除渲染区域之前设置剪刀矩形,因为我想保持大部分帧缓冲区完好无损并且只重新渲染已修改的区域。
但是,据我所知,在创建渲染过程时,清除操作似乎只能作为 WGPU 中的加载操作使用。所以当我设置剪刀矩形时,这是在渲染 channel 本身上完成的,清除已经在创建期间执行,清除了整个帧缓冲区。
我是不是遗漏了什么,或者这目前在 WGPU 上是不可能的?
问候,
古斯塔夫
let mut render_pass = encoder.begin_render_pass(
&wgpu::RenderPassDescriptor {
label: Some("Render Pass"),
color_attachments: &[Some(
wgpu::RenderPassColorAttachment {
view: &view,
resolve_target: None,
ops: wgpu::Operations {
load: wgpu::LoadOp::Clear(
wgpu::Color {
r: 0.04,
g: 0.08,
b: 0.08,
a: 1.0,
}
),
store: true,
},
}
)],
depth_stencil_attachment: None,
}
);
render_pass.set_scissor_rect(
render_area.x,
render_area.y,
render_area.width(),
render_area.height()
);
最佳答案
在wgpu/WebGPU中,只更新部分framebuffer意味着需要加载之前的framebuffer:
let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: Some("Render Pass"),
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
view: &view,
resolve_target: None,
ops: wgpu::Operations {
load: wgpu::LoadOp::Load,
store: true,
},
})],
depth_stencil_attachment: None,
});
然后可以设置scissor_rect绘制到指定区域。
关于rust - 清除前设置剪刀矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73769626/