Vulkan RAII。尝试创建 VkSurfaceKHR 时遇到 VK_ERROR_NATIVE_WINDOW_IN_USE_KHR

ral*_*lex 1 c++ glfw vulkan

我正在学习 Vulkan_raii API 并遇到了这个问题:

我有源文件:

#include <vulkan/vulkan_raii.hpp>
#include <GLFW/glfw3.h>
#include <iostream>

int main() {

  glfwInit();
  GLFWwindow *window =
      glfwCreateWindow(800, 600, "First window", nullptr, nullptr);
  if (!window) {
    std::cerr << "Failed to create a window!" << std::endl;
    return 0;
  }

  vk ::raii::Context context;
  uint32_t version = context.enumerateInstanceVersion();
  vk::ApplicationInfo appInfo{"instance", version, "instance", version, version};
  vk::InstanceCreateInfo create_info{
    vk::InstanceCreateFlags{},nullptr, 0, nullptr, 0, nullptr
  };
  vk::raii::Instance instance{context, create_info};

  VkSurfaceKHR c_style_surface;
  auto res = glfwCreateWindowSurface(*instance, window, nullptr, &c_style_surface);
  if (res != VK_SUCCESS) {
    std::cerr << "Failed to create a surface! ERROR: " << res << std::endl;
    return 0;
  }
}
Run Code Online (Sandbox Code Playgroud)

当我编译并运行它时,我得到了这个:

Failed to create a surface! ERROR: -1000000001
Run Code Online (Sandbox Code Playgroud)

我发现这个错误代码是VK_ERROR_NATIVE_WINDOW_IN_USE_KHR。GLFW 源代码将此代码描述为“请求的窗口已连接到 VkSurfaceKHR 或某些其他非 Vulkan API”。但我什至无法想象我的窗户如何能够连接到表面。

有谁知道导致此错误的原因以及如何在我的示例中修复它?先感谢您。

Nic*_*las 5

但我什至无法想象我的窗户如何能够连接到表面。

因为那就是它的glfwCreateWindow作用。该库称为“GLFW”,因为默认情况下它创建OpenGL窗口。这算作“一些其他非 Vulkan API”。

如果您想将其与 Vulkan 一起使用,则必须遵循特殊规则。规则包括告诉它不要通过OpenGL 将 OpenGL 连接到窗口glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API)