小完能🔥 关门2000
极新科技工作室创始人
关注数: 10 粉丝数: 305 发帖数: 4,595 关注贴吧数: 54
Vulkan系列教程第一期第1节-VkInstance 大家肯定都接触过Windows编程吧,那么对于HINSTANCE肯定十分熟悉。和Windows编程类似,每个Vulkan程序都必须有且只能有一个VkInstance(这里的叙述可能不准确,应该是每个进程中只能有一个),通过它可以获取到Device等信息(下节会详细说明Device)。下面就是与VkInstance有关的一些函数和结构体,下列东西是按照代码的顺序来写的,所以大家可以按照这个顺序来定义变量和使用函数。 结构体: typedef struct VkApplicationInfo { VkStructureType sType; const void* pNext; const char* pApplicationName; uint32_t applicationVersion; const char* pEngineName; uint32_t engineVersion; uint32_t apiVersion; } VkApplicationInfo; 在这个结构体当中需要注意的是sType,在Vulkan当中,所有的结构体都有一个sType,它必须被设置为特定值。好在这些固定值比较好猜。拿这个结构体来举例:在这个结构体中,sType必须设置为VK_STRUCURE_TYPE_APPLICATION_INFO,从中我们可以看到这个值前三个单词是固定的,后几个词与结构体的名字有很大的联系。然后在这个结构体中pNext可以设置为NULL,apiVersion必须设置为0(然而官方参考手册中说可以设置为支持的版本,然而我没有看懂.....),其他东西就可以按照自己的程序进行设置了。 typedef struct VkInstanceCreateInfo { VkStructureType sType; const void* pNext; VkInstanceCreateFlags flags; const VkApplicationInfo* pApplicationInfo; uint32_t enableLayerCount; const char* const* ppEnableLayerName; uint32_t enableExtensionCount; const char* const* ppEnableExtensionName; } VKInstanceCreateInfo; 在这个结构体中,目前我们需要设置的只有sType和pApplicationInfo,其他的我们设置为NULL或者0就好了,暂时还用不到他们(其实是我还没看到那里.....)sType必须设置为VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,pApplicationInfo必须是一个有效的VkApplicationInfo指针(官方参考书中说设置为NULL也可以,我还没有试) 函数: vkCreateInstance ( const VKInstanceCreateInfo* pCreateInfo, const VKAllocationCallbacks* pAllocator, VKInstance* pInstance ); 其中,pCreateInfo为一个有效的VkInstanceCreateInfo类型的变量的指针,不能为NULL,pAllocator的目的不明,几乎所有Vulkan函数里都有他,可以设置为NULL。pInstance就是你提供的一个VKInstance类型变量的指针了,创建的Instance会放到这里。 关于返回值: 如果返回值为VK_SUCCESS,则为成功 为其他值的话则可以参考官方的手册或者在群文件中的PDF里都有介绍。 然后我们就成功的创建了一个VKInstance,接下来需要针对于Device进行操作,下一节中我们会介绍一些与显卡有关的内容。 若本节教程有任何纰漏,欢迎大家在下边留言,或者加入官方QQ群,群号在置顶里有。 (纯手敲,希望大家支持!)
1 下一页