rust - 清除前设置剪刀矩形

标签 rust wgpu-rs

我目前正在将一些代码从使用 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/

相关文章:

rust - 为什么Rust似乎忽略了我的一生注释?

rust - write_buffer 不写入缓冲区而是输出零 WGPU

reference - 遍历迭代器并改变值是否会更改集合中的值?

struct - 结构的所有字段的相同生命周期参数

rust - 如何设置 actix websocket actorless 的消息大小限制?

rust - 如何将动态值传递到 WGPU 顶点着色器?

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

将 brainf*ck 代码解析为 Rust 中的树

module - 如何从私有(private)模块中的公共(public)函数引用私有(private)类型?