环境
系统:Ubuntu 20.04
桌面环境:X11
OpenGL版本: 3.0
桌面环境怎么看呢?可以在终端输入echo $XDG_SESSION_TYPE
即可,或者查看桌面右上角的Settings
->About
,查看Windowing System
查看OpenGL版本
使用glxinfo
命令查看,没安装需要安装mesa-utils工具,sudo apt install mesa-utils
$ glxinfo | grep OpenGL
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 4600 (HSW GT2)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 21.2.6
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 21.2.6
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 21.2.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10
OpenGL ES profile extensions:
上面OpenGL version string: 3.0 Mesa 21.2.6
可以看出OpenGL
的版本为3.0
开始安装
2.1 安装xorg依赖(GLFW的依赖)
# 前面我们的x11,所以需要安装下面依赖,若为其他wayland,则需要参考glfw官方编译指导进行,[点这里](https://www.glfw.org/docs/latest/compile_guide.html)
$ sudo apt install xorg-dev
2.2 安装GLFW
GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口,允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入
glfw官网
下载glfw源码进行编译
git clone https://github.com/glfw/glfw
编译
cd glfw
cmake -S . -B build
cd build
make
安装
sudo make install
完成GLFW的编译及安装
2.3 安装GLAD
由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用,取得地址的方法代码非常复杂,而且很繁琐,GLAD是一个开源的库,能解决这个繁琐的问题
前面我们知道OpenGl的版本为3.0,这里我们需要对号入座
# 再次查看一下OpenGL版本,没毛病,是3.0
glxinfo | grep "OpenGL version"
OpenGL version string: 3.0 Mesa 21.2.6
登录到GLAD官网,点这里
API
->gl
处,选择OpenGL的版本3.0
,其他不用修改,点击下面的GENERATE
点击GENREATE
后,进入如下页面
下载glad.zip
到本地,并解压得到include
及src
文件夹,将include/*
下的内容拷贝到/usr/local/include
glad.zip解压后的目录结构如下
-- glad
| -- include
| -- glad
| -- KHR
| -- src
| -- glad.c
sudo mv include/* /usr/local/include
2.3 测试环境
创建一个目录code
,并创建CMakeLists.txt
、man.cpp
两个新文件,及一个build
新文件夹
同时把前面glad目录下的src的glad/src/glad.c
复制到code目录下,如下所示
-- code
| -- build
| -- CMakeLists.txt
| -- man.cpp
| -- glad.c
编辑main.cpp
文件,如下所示:
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);
const unsigned int SCR_WIDTH = 800