目录
一 RenderPass(渲染流程)
渲染管线不是整个渲染过程
渲染流程有可能需要走多遍渲染管线
renderpass用来指定真正的渲染流程是什么样子的
渲染管线就是一系列操作 它就像流水线一样 但是它并不关心数据怎么来怎么去
在许多图形应用中,会在一次draw的时候同时启动多个render pass,这样做的目的大多数是在于提升效率,在一个draw中多个pass可以共同使用一些相同配置,避免重复的配置。或者,有一些图形算法,有必要将一些特定的场景按照不同的着色器算法进行着色渲染,把不同的渲染过程放在同一个draw的不同pass中,最终汇入到framebuffer的多个attachment中保存起来。
Vulkan将这个多通道渲染(multiple passes)技术,收入囊中,作为一个核心标准。将多个通道渲染的规则汇总到一个Object中 ---- Graphics Pipelines,这也是为什么在创建Graphics piepline object的时候需要传入renderpass对象的原因之一。pipeline需要知道这次绘制过程,会有几个render pass会被启用。
一个renderpass可以包含多个subpasses,每个subpass都会为了最终的绘制,渲染相应的场景。在多个subpass运行的时候,他们之间可以产生依赖关系,实现控制多个subpass的执行先后顺序,因为有可能会出现subpassA去使用subpassB渲染结果的情况。
二 Vulkan代码示例
render_process.hpp
#pragma once
#include "vulkan/vulkan.hpp"
namespace duan{
class RenderProcess final{
public:
// 管线名称
vk::Pipeline pipeline;
// layout就是你在传一些数据的时候,例如uniform数据,你需要知道这些数据的布局
vk::PipelineLayout layout;
vk::RenderPass renderPa