欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 【Vulkan入门】11-CreateCommandBuffer

【Vulkan入门】11-CreateCommandBuffer

2025/9/22 1:04:18 来源:https://blog.csdn.net/patronwa/article/details/144401906  浏览:    关键词:【Vulkan入门】11-CreateCommandBuffer

@[TOC]目录

先叨叨

先叠个甲,我个人都觉得本篇有点灌水的嫌疑。
到上篇为止,已经创建好了Pipeline。接下来就是要给Pipeline发指令进行渲染了。
从一开始就不断强调,发给Vulkan的指令要通过Queue发送给Device。命令不是一条一条推到Queue中的,而是要将命令先装到CommandBuffer中,本篇主要介绍如何创建CommandBuffer。

关键代码

Git信息

  • repository: https://gitee.com/J8_series/easy-car-ui
  • tag: 10-CreatePipeline
  • url: https://gitee.com/J8_series/easy-car-ui/tree/10-CreatePipeline

VulkanEnv::CreateCommandPool()

CommandBuffer不是直接创建的,而是从CommandPool中分配的,因此需要先创建CommandPool。

void VulkanEnv::CreateCommandPool()
{//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkCommandPoolCreateInfoVkCommandPoolCreateInfo createInfo{};createInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;createInfo.pNext = nullptr;createInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;createInfo.queueFamilyIndex = m_graphicsQueueFamilyIndex;if (VK_SUCCESS != vkCreateCommandPool(m_device, &createInfo, nullptr, &m_commandPool)){throw std::runtime_error("To create command pool is failed");}
}

VulkanEnv::CreateCommandBuffer()

有了CommandPool之后,便可以从中分配CommandBuffer了()

void VulkanEnv::CreateCommandBuffer()
{VkCommandBufferAllocateInfo allocInfo{};allocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;allocInfo.commandPool = m_commandPool;allocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;allocInfo.commandBufferCount = 1;if (VK_SUCCESS != vkAllocateCommandBuffers(m_device, &allocInfo, &m_commandBuffer)){throw std::runtime_error("To allocate command buffers is failed");}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词