:material-chevron-right-circle: vkCmdBeginRenderPass
函数原型
void vkCmdBeginRenderPass(
VkCommandBuffer commandBuffer,
const VkRenderPassBeginInfo* pRenderPassBegin,
VkSubpassContents contents);
描述
开启一个渲染通道。
参数
commandBuffer
: 录制指令的命令缓冲区。pRenderPassBegin
:VkRenderPassBeginInfo
结构体指针,指定要开始的渲染通道以及使用的帧缓冲区。contents
:VkSubpassContents
值,用于指定第一个子通道中的命令提供的方式。
补充
VkRenderPassBeginInfo
结构体定义:
typedef struct VkRenderPassBeginInfo {
VkStructureType sType;
const void* pNext;
VkRenderPass renderPass;
VkFramebuffer framebuffer;
VkRect2D renderArea;
uint32_t clearValueCount;
const VkClearValue* pClearValues;
} VkRenderPassBeginInfo;
sType
: VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFOrenderPass
: 开始的渲染通道。framebuffer
: 帧缓冲区,帧缓冲区包含渲染通道使用的附件。renderArea
: 渲染区域。clearValueCount
: pClearValues数组中的元素个数。pClearValues
: 如果附件的loadOp
/stencilLoadOp
的值是VK_ATTACHMENT_LOAD_OP_CLEAR
, 则按照顺序使用pClearValues
数组里的值进行清除。
VkSubpassContents
枚举定义:
typedef enum VkSubpassContents {
VK_SUBPASS_CONTENTS_INLINE = 0,
VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
} VkSubpassContents;
VK_SUBPASS_CONTENTS_INLINE
: 表示渲染命令直接写在当前 commandbuffer 中。VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
: 用于vkCmdExecuteCommands
执行预先录制的二级 commandbuffer。
返回值
无
代码示例
VkClearValue clearValues[2] = {};
clearValues[0].color = { {0.1f, 0.1f, 0.1f, 1.0f} };
clearValues[1].depthStencil = {1.0f, 0};
VkRenderPassBeginInfo renderPassInfo{};
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
renderPassInfo.renderPass = myRenderPass;
renderPassInfo.framebuffer = myFramebuffer;
renderPassInfo.renderArea.offset = {0, 0};
renderPassInfo.renderArea.extent = swapchainExtent;
renderPassInfo.clearValueCount = 2;
renderPassInfo.pClearValues = clearValues;
vkCmdBeginRenderPass(cmdBuffer, &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE);
// 绑定管线并绘制
vkCmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, myPipeline);
vkCmdDraw(cmdBuffer, 3, 1, 0, 0);
vkCmdEndRenderPass(cmdBuffer);