创建Vulkan实例

创建Vulkan实例
Vulkan实例是一种收集应用程序状态信息的对象,它用于封装应用程序的名称、创建应用程序引擎的名称和版本,以及已启用的实例级扩展和逻辑层等信息。
通过Vulkan实例我们还可以查明可用的物理设备,以及创建执行标准操作(如创建和绘制图像)的逻辑设备。因此,在使用Vulkan前,需要创建新的实例。

具体处理过程
(1)在应用程序的源代码中创建一个std::vector<char const*>类型的变量,将其命名为desired_extensions。将想要启用的所有扩展的名称都存储在desired_extensions变量中。
(2)创建一个std::vector<VkExtensionProperties>类型的变量,将其命名为available_extensions。获取所有可用扩展的名单(请参阅前面的内容),将该名单存储在available_extensions变量中。
(3)确保desired_extensions变量中保存的所有扩展名称,也都出现在available_extensions变量中。
(4)创建一个VkApplicationInfo类型的变量,将其命名为application_info。将下列值赋予application_info变量存储结构中的各个成员。

① 将成员sType的值设置为VK_STRUCTURE_TYPE_APPLICATION_INFO。
② 将成员pNext的值设置为nullptr。
③ 使用编写的应用程序的名称设置pApplicationName成员。
④ 使用编写的应用程序的版本设置applicationVersion结构成员;可通过设置好主要版本、次要版本和路径值的VK_MAKE_VERSION宏,做到这一点。
⑤ 使用创建应用程序的引擎的名称设置pEngineName成员。
⑥ 使用创建应用程序的引擎的版本设置engineVersion成员;可使用VK_MAKE_V ERSION宏执行该操作。
⑦ 将成员apiVersion的值设置为VK_MAKE_VERSION(1,0,0)
(5)创建一个VkInstanceCreateInfo类型的变量,将其命名为instance_create_info。将下列值赋予instance_create_info变量存储结构中的各个成员。
① 将成员sType的值设置为VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO。
② 将成员pNext的值设置为nullptr。
③ 将0赋予flags成员。
④ 将指向application_info变量的指针赋予pApplicationInfo成员。
⑤ 将成员enabledLayerCount的值设置为0。
⑥ 将成员ppEnabledLayerNames的值设置为nullptr。
⑦ 将vector容器desired_extensions中含有的元素数量赋予enabledExtensionCount成员。
⑧ 将指向vector容器desired_extensions中第一个元素的指针(如果该容器是空的,则该指针的值为nullptr),赋予ppEnabledExtensionNames成员。
(6)创建一个VkInstance类型的变量,将其命名为instance。
(7)调用vkCreateInstance(&instance_create_info,nullptr,&instance)函数。将该函数的第一个参数设置为指向instance_create_info变量的指针;将第二个参数设置为nullptr;将第三个参数设置为指向instance变量的指针。
(8)通过查明vkCreateInstance()函数的返回值等于VK_SUCCESS,确认调用该函数的操作成功完成。

具体运行情况
在创建Vulkan实例前,需要收集一些信息。首先,需要将我们想要启用的实例级扩展的名单存储到一个数组中。然后,查明指定的硬件平台是否支持这些扩展。通过获取所有可用实例级扩展名单并查明其中是否包含我们想要启用的所有扩展,可以做到这一点。

创建Vulkan实例
创建Vulkan实例


还需要创建一个变量,以便在该变量中存储编写的应用程序的信息,如应用程序的名称和版本号、创建应用程序的引擎的名称和版本号,以及我们想要使用的Vulkan的版本号(目前只能使用Vulkan的第一个版本)。
创建Vulkan实例
前面示例中指向application_info变量的指针,是由用于创建实例的变量(instance_create_info,该变量中含有多个用于创建实例的实际参数)提供的。除了提供指向application_info变量的指针,使用instance_create_info变量还可以提供我们想要启用的扩展的名称和数量,以及我们想要启用的Vulkan逻辑层的数量和名称。启用扩展和Vulkan逻辑层都不需要创建合法的Vulkan实例。然而,有些扩展非常重要,没有这些扩展就很难开发出具有完整功能的应用程序,因而最好还是使用这些扩展,但可以忽略Vulkan逻辑层。下面的示例创建了一个用于定义实例参数的变量。

创建Vulkan实例
创建Vulkan实例


准备好上述数据后,就可以创建Vulkan实例了。使用vkCreateInstance()函数可以做到这一点,该函数的第一个参数必须是指向VkInstanceCreateInfo类型变量的指针;第三个参数必须是指向VkInstance类型变量的指针。创建好的实例会存储在这个VkInstance类型的变量中;第二个参数极少会用到,它可以是指向VkAllocationCallbacks类型变量的指针,VkAllocationCallbacks类型的变量用于存储定位器回调函数。这些定位器回调函数用于控制定位主机内存的方式,并且主要用于调试。在大多数情况中,可以将定义定位器回调函数的第二个参数设置为nullptr。

创建Vulkan实例

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!

 

Vulkan实战