[OpenGL] wsl2上安装使用OpenGL教程

一、前提

  1. 系统为windows11,并且使用wsl2(ubuntu);
  2. ubuntu中安装了基本的g++, cmake编译工具;
  3. 在windows中使用X-Server作为wsl2的显示GUI; 最新版本的wsl已经支持自带的窗口显示,不需要额外自己安装X Server了。

二、安装OpenGL

安装OpenGL的基本步骤为:
1. 安装GLFW-> 2.安装GLAD-> 3.修改wsl渲染方式-> 4.编写C++代码运行

OpenGL, GLFW 和 GLAD 的简要说明(glfw和glad有什么区别呢-coskgid的回答):

  • OpenGL:是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。
  • GLFW:是一个专门针对OpenGL的C语言库,提供了一些渲染物体所需的最低限度的接口。它帮助用户创建OpenGL上下文、定义窗口参数以及处理用户键盘鼠标输入;
  • GLAD:是用来管理OpenGL的函数指针的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异,代码非常复杂,而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,其中GLAD是目前最新,也是最流行的库。

简而言之:OpenGL 是一种调用显卡进行显示的规范GLFW是一种管理窗口、鼠标键盘的库glad是一种帮助用户管理OpenGL函数指针的库(即使不安装glad也可以使用OpenGL,但是代码写起来很复杂)。

下面是详细步骤:

1. 安装 GLFW

a. 去GLFW官网下载glfw源代码,本文假设文件名为glfw-3.3.8.zip

b. 将glfw-3.3.8.zip复制到ubuntu中,本文假设将文件复制到/home/user/目录下;

c. 在/home/user/目录下解压glfw-3.3.8.zip

	unzip glfw-3.3.8.zip

d. 编译并安装glfw

	# 进入 解压目录
	cd glfw-3.3.8
	# 新建build目录 用于存储编译glfw的文件
	mkdir build
	# 进入build目录
	cd build
	# 使用cmake生成Makefile文件用于编译glfw
	cmake ..
	# 编译安装 glfw
	sudo make install

若编译安装成功,在/usr/local/include/目录下应该存在GLFW头文件目录,在/usr/local/lib/目录下存在libglfw3.a链接库文件。

2. 安装 GLAD

a. 查看系统的OpenGL版本

	glxinfo | grep "OpenGL version"

如果没有glxinfo命令需要先安装mesa-utils, 安装命令如下:

sudo apt-get install mesa-utils

可能的显示结果如下:

OpenGL version string: 4.1 (Compatibility Profile) Mesa 22.2.5-0ubuntu0.1~22.04.3

可以看到我的电脑OpenGL版本为4.1profileCompatibility(兼容模式)。

b. 去glad官网gl下拉框中选择对应版本,本文中选择4.1。将profile设置为Compatibility(跟上面查询的结果一致即可),其他不用变。点击最后的GENERATE按钮,会自动生成需要的glad.zip文件,点击下载glad.zip

c. glad.zip解压后文件结构如下:

.
├── include
│   ├── KHR
│   │   └── khrplatform.h
│   └── glad
│       └── glad.h
└── src
    └── glad.c

include/中的KHR/glad/目录复制到usr/local/include/目录下。
src/目录下的glad.c暂时不管(glad.c需要放到编写的C++代码工程中,在4.编写代码运行部分有示例)。

3. 修改wsl渲染

将wsl中的OpenGL渲染方式改为direct render,如果不修改运行OpenGL程序时可能会出现Failed to create GLFW window报错。
修改方式如下:
将下面一句话写入~/.bashrc文件里

# 设置opengl 直接渲染, 用于使用 x-service 显示glfw窗口
LIBGL_ALWAYS_INDIRECT=0

使.bashrc文件生效

source .barshrc

4. 编写代码运行

wsl2下使用C++cmakeOpenGL的示例代码如下:

a. 将步骤2. 安装 glad中的glad.c文件复制到main.cpp同目录下;

b. 代码内容:
main.cpp文件:

	#include <glad/glad.h>
	#include <GLFW/glfw3.h>
	
	int main(void)
	{
	    GLFWwindow* window;
	
	    /* Initialize the library */
	    if (!glfwInit())
	        return -1;
	
	    /* Create a windowed mode window and its OpenGL context */
	    window = glfwCreateWindow(640, 480, "GLFW CMake starter", NULL, NULL);
	    if (!window)
	    {
	        glfwTerminate();
	        return -1;
	    }
	
	    /* Make the window's context current */
	    glfwMakeContextCurrent(window);
	
	    /* 使用 glad 管理函数地址 */
	    gladLoadGLLoader((GLADloadproc) glfwGetProcAddress);
	
	    glClearColor( 1.0f, 0.3f, 0.4f, 0.0f );
	
	    /* Loop until the user closes the window */
	    while (!glfwWindowShouldClose(window))
	    {
	        /* Render here */
	        glClear(GL_COLOR_BUFFER_BIT);
	
	        /* Swap front and back buffers */
	        glfwSwapBuffers(window);
	
	        /* Poll for and process events */
	        glfwPollEvents();
	    }
	
	    glfwTerminate();
	    return 0;
	}

CMakeLists.txt文件:

	cmake_minimum_required(VERSION 3.10)
	set(CMAKE_C_STANDARD 11)
	set(CMAKE_CXX_STANDARD 14)
	project(test)
	find_package(glfw3 REQUIRED)
	file(GLOB project_file main.cpp glad.c)
	add_executable(${PROJECT_NAME} ${project_file})
	target_link_libraries(${PROJECT_NAME} glfw)

c. 编译运行示例程序:

	mkdir build
	cd build
	cmake ..
	make
	# 运行示例程序
	./test

运行结果如下:
glfw+glad+cmake运行示例

三、注意事项

若你的电脑显卡是英特尔显卡,在wsl中运行 glxgears不能正确显示3D齿轮转动的结果,而是显示黑屏,那么在使用OpenGL绘制2D图案时没问题,但是绘制3D的结果就会出现错误。
解决方案是更新显卡驱动,请参考glxgears displays black screen, no gears

四、OpenGL 版本升级

wsl 中的 OpenGL 可以通过更新 mesa实现,但是官方仓库中的 mesa 版本较旧,可以通过添加第三方仓库,再更新 mesa 的方式实现。
更新mesa,升级OpenGL版本的命令如下:

sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update
sudo apt upgrade

五、参考

1.Compiling GLFW-Generating files with CMake
2.Building applications-With CMake and GLFW source
3.Context guide-Loading extension with a loader library
4.glxgears displays black screen, no gears

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值