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渲染相关逻辑,所以窗口不会被绘制显示。要让窗口正常显示,需要补充以下核心步骤:
- 创建Vulkan实例,启用窗口系统必需的扩展(如
VK_KHR_surface和Linux平台的VK_KHR_xlib_surface) - 创建与GLFW窗口绑定的Vulkan表面(Surface)
- 挑选适配的GPU物理设备,创建逻辑设备
- 配置交换链、图像视图、帧缓冲等渲染资源
- 在主循环中添加渲染命令提交、图像交换等逻辑
另外可以给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
相关产品推荐
相关产品推荐

