Rap*_*ers 2 c++ opengl glfw windows-subsystem-for-linux ubuntu-18.04
我在 WSL Ubuntu 上使用 g++。我使用 git 克隆了 GLFW 存储库,使用ccmake
命令来配置和生成二进制文件,然后make
在“build”目录中使用以最终创建文件.a
。我安装了所有与 OpenGL 相关的库/usr/ld
(我不记得到底安装了哪些库,因为我必须安装这么多。无论如何,g++ 命令有效,所以我认为它是成功的)。后来我在VS Code上做了一个项目,如下所示:
GLFW 包含文件夹来自上述克隆的存储库,GLAD 和 KHR 包含文件夹来自glad.dav1d.de,我将 GL 版本(在 API 下)设置为3.3,将 Profile 设置为Core。
在 中main.cpp
,我放置了一段用于初始化 GLFW 的简单代码片段:
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
int main()
{
// Initialize GLFW
if (!glfwInit()) {
std::cerr << "Failed to initialize GLFW" << std::endl;
return 1;
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
std::cout << "Success" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后使用这个命令来编译项目:g++ -Wall -I./include/ -L./lib/ src/*.{c,cpp} -lglfw3 -lGL -lX11 -lpthread -lXrandr -lXi -ldl -o main
。没有任何警告或错误或任何东西。运行可执行文件后,我收到 GLFW 无法初始化的错误消息。我有点困惑为什么会发生这种情况,所以我输入命令glxinfo
发现我的DISPLAY
环境变量还没有设置。
我完全不知道这个变量是什么,或者它代表什么。在网上搜索后,我发现了export DISPLAY=:0.0
和,export DISPLAY=1
但export DISPLAY=IP:0.0
都不起作用。关于如何解决这个问题有什么想法吗?
Windows 10 上的 WSL 不支持 GUI 应用程序。当然,您可以使用 OpenGL/X 库构建应用程序,但运行它需要一个 X 服务器来实际显示它。
一般来说,您有 3 个选择。我相信所有这些都可以与 OpenGL 一起使用,尽管我还没有以这种能力测试它们中的每一个:
“支持”的方法是将 Windows 11 与 WSLg 结合使用。Windows 11 使用受支持的 WDDMv3.0 驱动程序(适用于 AMD、Intel 和 nVidia GPU)在 WSL2 中开箱即用地支持硬件加速 OpenGL。请参阅Microsoft 文档以获取更多信息。
在 Windows 10 的 WSL 上运行 X 服务器的“正常”方法是安装第三方 X 服务器,例如 VcXsrv。请参阅此超级用户问题,了解有关该场景下 OpenGL 支持的一些详细信息。然而,我不相信这将是硬件加速的。
在这种情况下,您需要手动配置DISPLAY
变量以指向您的 Windows 主机。您会发现一些相当复杂的指示,但恕我直言,最简单的方法是通过mDNS。
在升级到 Windows 11 之前,当我需要 X 支持时,我使用 xrdp。这允许使用远程桌面协议和支持的应用程序(例如内置 Windows 远程桌面连接)访问 WSL 实例。我也不相信有办法使用 RDP 来硬件加速 OpenGL。在我看来,这比设置第 3 方 X 服务器要容易得多。请参阅我在询问 Ubuntu以了解启用步骤的答案。