VkApplicationInfo有什么意义?

时间:2016-07-07 23:10:40

标签: c graphics api-design vulkan

在新的Vulkan API中,创建VkInstanceVkApplicationInfo需要一个结构。以下是定义:

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吗?或者只是一个糟糕的设计?无论如何,我很好奇为什么它存在以及为什么我应该使用它。

1 个答案:

答案 0 :(得分:9)

来自规范:

  

如果不为NULL,[pApplicationInfo]可帮助实现识别应用程序类固有的行为。

这就是它的用途。

特定于应用程序的优化将适用于任何足以吸引这种兴趣的程序。这是不可避免的。

所以Vulkan有两个选择:它可以假装不可避免的某种方式不会发生,这意味着IHV无论如何都会这样做,使用各种启发式检测你的应用程序。或者你的应用程序可以自我介绍并切断中间人。

Vulkan允许你做后者。表现良好的引擎也可能代表您的计划。