VK_KHR_WIN32_SURFACE_EXTENSION_NAME未定义,在Vulkan代码中

VK_KHR_WIN32_SURFACE_EXTENSION_NAME undefined, in Vulkan code

本文关键字:Vulkan 代码 未定义 NAME KHR WIN32 SURFACE EXTENSION VK      更新时间:2023-10-16

我正试图编写一个简单的基于vulkan的应用程序,但当试图将surface扩展添加到启用的扩展列表中时,如下所示:

    enabledExtensions.push_back( VK_KHR_SURFACE_EXTENSION_NAME );
#if defined (_WIN32)
    enabledExtensions.push_back( VK_KHR_WIN32_SURFACE_EXTENSION_NAME );
#else
    enabledExtensions.push_back( VK_KHR_XCB_SURFACE_EXTENSION_NAME );
#endif

Visual studio抱怨VK_KHR_WIN32_SURFACE_EXTENSION_NAME未定义。

当我右键单击它并转到定义时,它打开vulkan.h。在检查VK_USE_PLATFORM_WIN32_KHR时,我发现它也是未定义的,这阻止了VK_KHR_WIN32_SURFACE_EXTENSION_NAME的定义。有人能解释一下如何解决这个问题吗?

事实证明,我在项目设置中缺少一些预处理器指令:

VK_PROTOTYPES
VK_USE_PLATFORM_WIN32_KHR

我希望这些信息能帮助任何有同样问题的人。

这似乎是一个常见的问题,目前您可以通过添加特定的头来解决这个问题

#if defined (_WIN32)
    #include <vulkan/vulkan_win32.h>
#elif defined(__linux__)
    #include <vulkan/vulkan_xcb.h>
#elif defined(__ANDROID__)
    #include <vulkan/vulkan_android.h>
#endif