在新的Vulkan API中,创建VkInstance
:VkApplicationInfo
需要一个结构。以下是定义:
typedef struct VkApplicationInfo {
VkStructureType sType;
const void* pNext;
const char* pApplicationName;
uint32_t applicationVersion;
const char* pEngineName;
uint32_t engineVersion;
uint32_t apiVersion;
} VkApplicationInfo;
我认为不必传递应用程序名称,应用程序版本,引擎名称或引擎版本。也许实现可以使用pNext
成员进行任何操作,或者检查实现是否支持指定的apiVersion
。除此之外,我不明白为什么指定其他成员。 Vulkan规范说你甚至可以使用NULL
而不是使用实际的VkApplicationInfo
,这使得它更加无用。可以使用(例如)vkGetAppInfo(instance)
或类似的方法在应用程序中稍后检索此结构中的信息吗?这个结构后面有evil master plan吗?或者只是一个糟糕的设计?无论如何,我很好奇为什么它存在以及为什么我应该使用它。
答案 0 :(得分:9)
来自规范:
如果不为NULL,[pApplicationInfo]可帮助实现识别应用程序类固有的行为。
这就是它的用途。
特定于应用程序的优化将适用于任何足以吸引这种兴趣的程序。这是不可避免的。
所以Vulkan有两个选择:它可以假装不可避免的某种方式不会发生,这意味着IHV无论如何都会这样做,使用各种启发式检测你的应用程序。或者你的应用程序可以自我介绍并切断中间人。
Vulkan允许你做后者。表现良好的引擎也可能代表您的计划。