初始Vulkun(12):命令缓冲区(Command buffers)

Vulkan使用命令缓冲区执行绘画和内存转移操作,而非直接调用函数。本文介绍如何创建和管理命令池,分配命令缓冲区,并详细阐述命令缓冲区的记录流程,包括vkCmdBeginRenderPass、vkCmdBindPipeline等基本绘图命令。
摘要由CSDN通过智能技术生成

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!");
	}
}

通过将命令缓冲区提交到设备队列之一(例如我们检索到的图形和演示队列)来执行命令缓冲区。每个命令池只能分配在单个队列类型上提交的命令缓冲区。我们将记录用于绘制的命令,这就是为什么我们选择了图形队列系列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值