You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vulkan窗口无法打开:Arch Linux教程代码执行无窗口显示

Vulkan程序仅输出扩展数,无窗口弹出问题

在Arch Linux上跟随Vulkan教程操作,vkcube可正常运行并显示旋转立方体,但完成Makefile配置后,自己编写的代码执行时只输出支持的扩展数量,没有Vulkan窗口弹出,其他教程环境下无此问题。


相关文件

main.cpp

#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>

#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/vec4.hpp>
#include <glm/mat4x4.hpp>

#include <iostream>

int main(){
  glfwInit();

  glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
  GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan Window", nullptr, nullptr);

  uint32_t extensionCount = 0;
  vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);

  std::cout << extensionCount << "extesions supported\n";

  glm::mat4 matrix;
  glm::vec4 vec;
  auto test = matrix * vec;

  while(!glfwWindowShouldClose(window)) {
    glfwPollEvents();
  }

  glfwDestroyWindow(window);

  glfwTerminate();

  return 0;
}

Makefile

CFLAGS = -std=c++17 -O2
LDFLAGS = -lglfw -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi

VulkanTest: main.cpp
    g++ $(CFLAGS) -o VulkanTest main.cpp $(LDFLAGS)

.PHONY: test clean

test: VulkanTest
    ./VulkanTest

clean:
    rm -f VulkanTest

执行输出

./VulkanTest
24extesions supported

解决方法

你的代码只是创建了一个不关联任何图形API的GLFW窗口(通过GLFW_NO_API禁用了默认的OpenGL/ES),但没有任何Vulkan渲染相关逻辑,所以窗口不会被绘制显示。要让窗口正常显示,需要补充以下核心步骤:

  1. 创建Vulkan实例,启用窗口系统必需的扩展(如VK_KHR_surface和Linux平台的VK_KHR_xlib_surface)
  2. 创建与GLFW窗口绑定的Vulkan表面(Surface)
  3. 挑选适配的GPU物理设备,创建逻辑设备
  4. 配置交换链、图像视图、帧缓冲等渲染资源
  5. 在主循环中添加渲染命令提交、图像交换等逻辑

另外可以给glfwCreateWindow添加错误检查,确认窗口是否成功创建:

GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan Window", nullptr, nullptr);
if (!window) {
    std::cerr << "GLFW窗口创建失败!" << std::endl;
    glfwTerminate();
    return -1;
}

注:代码中std::cout的输出少了空格(应为" extensions supported\n"),但这不是窗口不显示的原因。


内容的提问来源于stack exchange,提问作者Fardin Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:52:34