08/09/2020
Command buffers
Vulkan并不是使用函数调用来执行绘画或者内存转移等操作,而是保存这些操作到设置好的命令缓冲区中。这样绘画指令可以提前并且可以多线程执行。
创建Command Pools
指令池在指令缓冲之前被创建,指令池管理内存用于分配指令缓冲区
VkCommandPool commandPool;
void createCommandPool()
{
QueueFamilyIndices queueFamilyIndices = findQueueFamilies(physicalDevice);
VkCommandPoolCreateInfo poolInfo{
};
poolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
poolInfo.queueFamilyIndex = queueFamilyIndices.graphicsFamily.value(); //需要提供队列族
if (vkCreateCommandPool(device, &poolInfo, nullptr, &commandPool) != VK_SUCCESS) {
throw std::runtime_error("failed to create command pool!");
}
}
通过将命令缓冲区提交到设备队列之一(例如我们检索到的图形和演示队列)来执行命令缓冲区。每个命令池只能分配在单个队列类型上提交的命令缓冲区。我们将记录用于绘制的命令,这就是为什么我们选择了图形队列系列。