GLFW在MinGW中找不到VK_KHR_win32_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"):返回非null函数指针
  • glfwGetError(...):返回65542Win32: Vulkan instance missing VK_KHR_win32_surface extension
  • vkEnumerateInstanceExtensionProperties(...):列出VK_KHR_win32_surface扩展名
  • glfwCreateWindowSurface(...):返回VK_ERROR_EXTENSION_NOT_PRESENT
  • glfwVulkanSupported():返回1
  • 它应该与https://vulkan-tutorial.com/code/26_depth_buffering.cpp相同的代码

解决方法

使用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!");
}

,

您是否有机会拥有更老的glfw?

我在{strong> glfw3 中有glfwCreateWindowSurface

我用MinGW-w64在源文件的MSYS2 shell中自己构建了glfw3(静态库和共享库) 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库。因此,使用针对Windows的MinGW,您可能需要手动针对vulkan-1.dll进行链接。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...