文档列表见:Rust 移动端跨平台复杂图形渲染项目开发系列总结(目录)
创建CommandPool
Vulkan接口实现
VkCommandPoolCreateInfo cmdPoolInfo;
memset(static_cast<void *>(&cmdPoolInfo), 0 ,sizeof(cmdPoolInfo));
cmdPoolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
cmdPoolInfo.pNext = nullptr;
cmdPoolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
cmdPoolInfo.queueFamilyIndex = mVkGraphicsQueueNodeIndex;
VkResult err = vkCreateCommandPool(mVkDevice, &cmdPoolInfo, nullptr, &mVkCmdPool);
if(err != VK_SUCCESS) {
return false;
}
复制代码
销毁CommandPool
Vulkan接口实现
if(mVkCmdPool != VK_NULL_HANDLE) {
vkDestroyCommandPool(mVkDevice, mVkCmdPool, nullptr);
mVkCmdPool = VK_NULL_HANDLE;
}
复制代码
从CommandBufferPool中分配CommandBuffer
VkCommandBufferAllocateInfo cmdAllocInfo;
cmdAllocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
cmdAllocInfo.pNext = nullptr;
cmdAllocInfo.commandPool = mVkCmdPool;
cmdAllocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
cmdAllocInfo.commandBufferCount = NUM_COMMAND_BUFFERS /* 3 */;
VkResult err = vkAllocateCommandBuffers(mVkDevice, &cmdAllocInfo, mVkCommandBuffers.commandBuffer.data());
if(err != VK_SUCCESS) {
return false;
}
复制代码
销毁从CommandBufferPool中分配的CommandBuffer
vkFreeCommandBuffers(mVkDevice, mVkCmdPool, mVkCommandBuffers.commandBuffer.size(), mVkCommandBuffers.commandBuffer.data());
复制代码