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!");
}
}
附加信息
vkGetInstanceProcAddr(..., "vkCreateWin32SurfaceKHR")
和glfwGetInstanceProcAddress(..., "vkCreateWin32SurfaceKHR")
:return一个非空函数指针
glfwGetError(...)
:returns 65542
和 Win32: Vulkan instance missing VK_KHR_win32_surface extension
vkEnumerateInstanceExtensionProperties(...)
:列出 VK_KHR_win32_surface
扩展
glfwCreateWindowSurface(...)
: returns VK_ERROR_EXTENSION_NOT_PRESENT
glfwVulkanSupported()
: returns 1
- 应该是和https://vulkan-tutorial.com/code/26_depth_buffering.cpp
一样的代码
你有没有可能有一个旧的 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!");
}
描述
目前我的程序在 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!");
}
}
附加信息
vkGetInstanceProcAddr(..., "vkCreateWin32SurfaceKHR")
和glfwGetInstanceProcAddress(..., "vkCreateWin32SurfaceKHR")
:return一个非空函数指针glfwGetError(...)
:returns65542
和Win32: Vulkan instance missing VK_KHR_win32_surface extension
vkEnumerateInstanceExtensionProperties(...)
:列出VK_KHR_win32_surface
扩展glfwCreateWindowSurface(...)
: returnsVK_ERROR_EXTENSION_NOT_PRESENT
glfwVulkanSupported()
: returns 1- 应该是和https://vulkan-tutorial.com/code/26_depth_buffering.cpp 一样的代码
你有没有可能有一个旧的 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
.
已通过使用 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!");
}