写一个renderpass吧
为什么我不翻译了?因为renderpass
的术语特别的模糊,容易引起歧义,就这么说吧,现在我有一堆盒子,我把这堆盒子进行上色叫一个pass
,每个pass
就是一个绘制调用(其实很多时候进行一次渲染经过很多次绘制调用因为单次渲染大批量效率并不是特别的高)
这里随着延迟渲染技术,多pass
渲染其实现在的立足和地位都受到了某种程度的打击,但是因为概念好理解然后遍布了所有的教科书所以还是讲一下比较好.
// 创建一个 RenderPass
let render_pass = {
let color_attachment = Attachment {
format: Some(format), // 之前还记的创建swapchain的时候的那个format吗
samples: 1,
ops: AttachmentOps {
load: AttachmentLoadOp::Clear,
store: AttachmentStoreOp::Store,
},
stencil_ops: AttachmentOps::DONT_CARE,
layouts: Layout::Undefined..Layout::Present,
};
// sub pass 就是每一个render pass里的实际对attachments进行读写操作的组件.
// 效果越复杂subpass越多
let subpass = SubpassDesc {
colors: &[(0, Layout::ColorAttachmentOptimal)],
depth_stencil: None,
inputs: &[],
resolves: &[],
preserves: &[],
};
unsafe {
device
.create_render_pass(&[color_attachment], &[subpass], &[])
.map_err(|_| "创建render pass 失败")?
}
};