跳转至

vkBeginCommandBuffer

函数原型

1
2
3
VkResult vkBeginCommandBuffer(
    VkCommandBuffer                             commandBuffer,
    const VkCommandBufferBeginInfo*             pBeginInfo);

描述

开始录制命令缓冲。

参数

  • commandBuffer : 录制指令的命令缓冲区。
  • pBeginInfo : VkCommandBufferBeginInfo 结构体指针,描述了命令缓冲区如何开始录制的附加信息。

补充

VkCommandBufferBeginInfo 结构体定义:

1
2
3
4
5
6
typedef struct VkCommandBufferBeginInfo {
    VkStructureType                          sType;
    const void*                              pNext;
    VkCommandBufferUsageFlags                flags;
    const VkCommandBufferInheritanceInfo*    pInheritanceInfo;
} VkCommandBufferBeginInfo;

  • sType : VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
  • flags : VkCommandBufferUsageFlagBits 的位掩码,用于指定命令缓冲区的使用行为。
    1
    2
    3
    4
    5
    typedef enum VkCommandBufferUsageFlagBits {
        VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,           //每次记录的命令缓冲区只提交一次,在每次提交前重置再开始记录。
        VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,  //辅助命令缓冲区完全位于渲染通道内,主命令缓冲区忽略此位。
        VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,          //命令缓冲区可以在挂起状态时重新提交到队列,并记录到多个主命令缓冲区中。
    } VkCommandBufferUsageFlagBits;
    
  • pInheritanceInfo : VkCommandBufferInheritanceInfo 结构体指针,如果commandBuffer是辅助命令缓冲器,则使用该命令缓冲器。如果是主命令缓冲区,则忽略此值。

返回值

  • VK_SUCCESS : 成功开始录制命令缓冲。
  • 其他 : 命令缓冲开始录制失败。

代码示例

1
2
3
4
VkCommandBuffer commandBuffer = create_command_buffer(device, commandPool);
VkCommandBufferBeginInfo beginInfo{};
beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
vkBeginCommandBuffer(commandBuffer, &beginInfo);