就在刚刚, 我跑上了一个6小时后出结果的测试程序. 离下班还有很久, 于是我打开了接单群 , 发现了很多可以写的openGL项目. 但是!!我的电脑现在是ubuntu呀, 但是不要慌!!!接下来我一步一步教你如何完美搭建一个ubuntu上的openGL环境. 保证一个坑也不会踩!
文章目录
- 创建项目工作区
- 工作区配置依赖
- 1. glad
- 2. glfw
- 1. 安装依赖
- 2. 下载源码, 编译
- 编写opengl程序, 构建运行
创建项目工作区
在windows中开发opengl程序, 我们直接用visualStudio生成项目然后用GUI配置包含路径就行, 但是ubuntu没有那么方便的IDE, 所以我们手动来创建工作区. 假设咱的程序计划放在目录~/openGL下
cd ~
mkdir openGL
我习惯将程序源码放到src下, 头文件放在include中, 所以建俩文件夹先(当然你也可以根据你喜欢的习惯配置路径)cd openGL
mkdir src
mkdir include
初步建立好了工程代码的位置, 配置一下第三方依赖. 我们知道opengl主要依赖glfw, glad, 所以接下来主要配置这俩玩意儿. 为了保持项目文件的整洁, 我再新建一个目录叫3rdparty; 最后建一个文件夹用来放build相关的东西mkdir 3rdparty
mkdir build
工作区配置依赖
接下来正式地配置依赖.
#0、安装查看OpenGL版本支持的工具
sudo apt-get install mesa-utils
glxinfo | grep OpenGL
#1、安装opengl的核心库
sudo apt-get install libgl1-mesa-dev*
sudo apt-get install build-essential
#2、安装OpenGL Library
sudo apt-get install libgl1-mesa-dev
#3、安装OpenGL Utilities,
sudo apt-get install libglu1-mesa-dev
sudo apt-get install libegl1-mesa-dev
#4、安装OpenGL Utility Toolkit
sudo apt-get install libglut-dev
然后单独配置glad和glew
1. glad
首先配置glad, 它是一个开源库, 提供了在线配置的服务, 咱访问这个服务, 指定需要的版本就能让它自动加载所有相关opengl函数
- 首先到官网: https://glad.dav1d.de/
- 设置语言为c/c++, 选择你需要的gl版本,譬如我选最新的4.6, 然后选择core模式(如果你需要的是立即渲染模式, 也可以保持默认), 勾选Generate a loader, 然后generate!
下载下来之后是个压缩包, 我们先在咱的项目文件夹的第三方依赖中新建一个叫glad的文件夹, 然后把压缩包解压到那里面.
cd ~/openGL/3rdparty
mkdir glad
- 找到刚才下载的glad压缩包->右键提取到->解压到
~/openGL/3rdparty/glad
最后咱这个~/openGL/3rdparty
目录下是这样的
2. glfw
1. 安装依赖
据我所知ubuntu20.04有两种桌面环境: X11和Wayland, 这两种需要安装的东西不一样, 先看一下自己的是哪一种, 再分别安装
查看的命令:
echo $XDG_SESSION_TYPE
如果是X11,执行这个:
sudo apt install xorg-dev
如果是Wayland, 执行这个:
sudo apt install libwayland-dev libxkbcommon-dev wayland-protocols extra-cmake-modules
2. 下载源码, 编译
- 下载源码: https://github.com/glfw/glfw/releases/download/3.3.9/glfw-3.3.9.zip
- 在你喜欢的位置新建一个文件夹叫glfw, 之后咱对glfw的编译就在这个文件夹下:
mkdir ~/glfw && cd ~/glfw
- 我们把glfw这个文件夹分为两个部分来看: 第一部分放glfw的源码, 剩下的部分放源码build之后的结果; 因此, 我在glfw中新建一个文件夹叫src, 另一个叫build:
mkdir src && mkdir build
- 我们把第一步下载的源码解压到刚才新建的src文件夹, 然后执行cmake构建命令:
cmake -S ~/glfw/src -B ~/glfw/build
- 最后build一下就成功了:
cd ~/glfw/build && make
编写opengl程序, 构建运行
现在依赖配好了, 咱浅写一个能跑就行的程序让它编译运行一下.
回到我们的工作区
cd ~/openGL/src && vim main.cpp
- 写个测试程序
~/openGL/src/main.cpp
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
void framebufer_size_callback(GLFWwindow *_window, int _width, int _height);
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow *win_handle = glfwCreateWindow(600, 600, "终于配好环境了感动+10086", NULL, NULL);
if (win_handle == NULL)
{
std::cout << "Failed to crate GLFW Window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(win_handle);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
glViewport(0, 0, 600, 600);
glfwSetFramebufferSizeCallback(win_handle, framebufer_size_callback);
while (!glfwWindowShouldClose(win_handle))
{
glfwSwapBuffers(win_handle);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
void framebufer_size_callback(GLFWwindow *_window, int _width, int _height)
{
glViewport(0, 0, _width, _height);
}
- 写完了之后咱写一下编译配置文件
~/openGL/CMakeList.txt
cd ~/openGL && vim CMakeList.txt
cmake_minimum_required(VERSION 2.8)
project(opengl_test)
# Include files
#glad
include_directories(${PROJECT_SOURCE_DIR}/3rdparty/glad/include/)
add_executable(main
${PROJECT_SOURCE_DIR}/src/main.cpp
${PROJECT_SOURCE_DIR}/3rdparty/glad/src/glad.c)
target_link_libraries(main glfw GL dl)
- 开编!
cd ~/openGL/build && cmake .. && make
- 编完了运行:
./main
大功告成!