GLFW 在 MinGW 中找不到 VK_KHR_win32_surface

GLFW can't find VK_KHR_win32_surface in MinGW

描述

目前我的程序在 MSVC 上运行没有任何问题,但在 MinGW 上 glfwCreateWindowSurface(...) 奇怪地抛出一个错误,它缺少 VK_KHR_win32_surface 扩展。

表面代码

void createSurface() {
    if (glfwCreateWindowSurface(instance, window, nullptr, &surface) != VK_SUCCESS) {
        throw std::runtime_error("failed to create window surface!");
    }
}

附加信息

你有没有可能有一个旧的 glfw?

我在 glfw3 中有 glfwCreateWindowSurface

我在 MSYS2 shell 的源文件中使用 MinGW-w64 自己构建了 glfw3(包括静态库和共享库)shell http://downloads.sourceforge.net/project/glfw/glfw/3.3.2/glfw-3.3.2.tar.bz2 使用这些命令:

cmake.exe -G"MSYS Makefiles" -DCMAKE_INSTALL_PREFIX:PATH=$INSTALLPREFIX -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DGLFW_BUILD_EXAMPLES:BOOL=OFF -DGLFW_BUILD_TESTS:BOOL=OFF -S. -Bbuild_static &&
cmake.exe -G"MSYS Makefiles" -DCMAKE_INSTALL_PREFIX:PATH=$INSTALLPREFIX -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=ON -DGLFW_BUILD_EXAMPLES:BOOL=OFF -DGLFW_BUILD_TESTS:BOOL=OFF -S. -Bbuild_shared &&
make -Cbuild_static install/strip &&
make -Cbuild_shared install/strip &&
echo Success

确保您的应用程序使用适合您目标平台的 Vulkan 库。对于 MinGW 目标 Windows,您可能需要针对 vulkan-1.dll.

手动 link

已通过使用 GLFW Native 修复,因为它有效:

#define GLFW_EXPOSE_NATIVE_WIN32
#include <GLFW/glfw3native.h>

// ...

VkWin32SurfaceCreateInfoKHR surfaceInfo {};
surfaceInfo.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
surfaceInfo.hinstance = GetModuleHandle(nullptr);
surfaceInfo.hwnd = glfwGetWin32Window(window);

if (vkCreateWin32SurfaceKHR(instance, &surfaceInfo, nullptr, &surface) != VK_SUCCESS) {
    throw std::runtime_error("failed to create window surface!");
}