vulkan学习笔记十六

创建VkDescriptorPool

在SceneWidget.h中添加bool CreateDescriptorPool函数,并添加成员变量:VkDescriptorPool m_descriptorPool = VK_NULL_HANDLE;

在SceneWidget.cpp中实现这个函数,先还先写创建函数:

VkResult result = vkCreateDescriptorPool();

其参数:

第一个参数:m_device,之前创建好的。

第二个参数:VkDescriptorPoolCreateInfo类型的指针,补一个VkDescriptorPoolCreateInfo createInfo = {};变量。

第三个参数:还是nullptr。

第四个参数:传入descriptorPool的引用。

判断返回值,是否创建成功。

createInfo的属性赋值:

固定写法

createInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;

默认就行

createInfo.pNext = nullptr;

createInfo.flags = 0;

在pool中允许创建的最大的descriptor set的值,每帧都会创建描述符,所以可以赋值为m_swapchainImage.size().

createInfo.maxSets = m_swapchainImage.size();

下面的两个属性的赋值,还要补充VkDescriptorPoolSize的结构。并将对象保存在std::vector<VkDescriptorPoolSize> poolSizes;中。

createInfo.poolSizeCount = poolSizes.size();

createInfo.pPoolSizes = poolSize.data();

这里的poolSizes中的对象要有两个,与CreateDescriptorSetLayout中的bindings中的个数和顺序保持一致。

包含一个类型为VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER和一个类型为VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER的对象,且descriptorCount属性的值都为m_swapchainImages.size()。

在SceneWidget::Init中调用CreateDescriptorPool(),在SceneWidget::UnInit中清理生成m_descriptorPool对象。vkDestroyDescriptorPool(m_device, m_descriptorPool, nullptr);

运行程序看一下结果:

没有报错:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值