[openGL]在ubuntu20.06上搭建openGL环境

就在刚刚, 我跑上了一个6小时后出结果的测试程序. 离下班还有很久, 于是我打开了接单群 , 发现了很多可以写的openGL项目. 但是!!我的电脑现在是ubuntu呀, 但是不要慌!!!接下来我一步一步教你如何完美搭建一个ubuntu上的openGL环境. 保证一个坑也不会踩!

文章目录

  • 创建项目工作区
  • 工作区配置依赖
    • 1. glad
    • 2. glfw
      • 1. 安装依赖
      • 2. 下载源码, 编译
  • 编写opengl程序, 构建运行

创建项目工作区

在windows中开发opengl程序, 我们直接用visualStudio生成项目然后用GUI配置包含路径就行, 但是ubuntu没有那么方便的IDE, 所以我们手动来创建工作区. 假设咱的程序计划放在目录~/openGL下

  1. cd ~
  2. mkdir openGL
    我习惯将程序源码放到src下, 头文件放在include中, 所以建俩文件夹先(当然你也可以根据你喜欢的习惯配置路径)
  3. cd openGL
  4. mkdir src
  5. mkdir include
    初步建立好了工程代码的位置, 配置一下第三方依赖. 我们知道opengl主要依赖glfw, glad, 所以接下来主要配置这俩玩意儿. 为了保持项目文件的整洁, 我再新建一个目录叫3rdparty; 最后建一个文件夹用来放build相关的东西
  6. mkdir 3rdparty
  7. 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函数

  1. 首先到官网: https://glad.dav1d.de/
  2. 设置语言为c/c++, 选择你需要的gl版本,譬如我选最新的4.6, 然后选择core模式(如果你需要的是立即渲染模式, 也可以保持默认), 勾选Generate a loader, 然后generate!
    [openGL]在ubuntu20.06上搭建openGL环境_第1张图片

下载下来之后是个压缩包, 我们先在咱的项目文件夹的第三方依赖中新建一个叫glad的文件夹, 然后把压缩包解压到那里面.

  1. cd ~/openGL/3rdparty
  2. mkdir glad
  3. 找到刚才下载的glad压缩包->右键提取到->解压到~/openGL/3rdparty/glad
    最后咱这个~/openGL/3rdparty目录下是这样的
    [openGL]在ubuntu20.06上搭建openGL环境_第2张图片

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. 下载源码, 编译

  1. 下载源码: https://github.com/glfw/glfw/releases/download/3.3.9/glfw-3.3.9.zip
  2. 在你喜欢的位置新建一个文件夹叫glfw, 之后咱对glfw的编译就在这个文件夹下: mkdir ~/glfw && cd ~/glfw
  3. 我们把glfw这个文件夹分为两个部分来看: 第一部分放glfw的源码, 剩下的部分放源码build之后的结果; 因此, 我在glfw中新建一个文件夹叫src, 另一个叫build: mkdir src && mkdir build
  4. 我们把第一步下载的源码解压到刚才新建的src文件夹, 然后执行cmake构建命令: cmake -S ~/glfw/src -B ~/glfw/build
  5. 最后build一下就成功了: cd ~/glfw/build && make

编写opengl程序, 构建运行

现在依赖配好了, 咱浅写一个能跑就行的程序让它编译运行一下.
回到我们的工作区

  1. cd ~/openGL/src && vim main.cpp
  2. 写个测试程序 ~/openGL/src/main.cpp
#include 

#include 
#include 

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);
}

  1. 写完了之后咱写一下编译配置文件~/openGL/CMakeList.txt
    1. 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)

  1. 开编! cd ~/openGL/build && cmake .. && make
  2. 编完了运行: ./main
    [openGL]在ubuntu20.06上搭建openGL环境_第3张图片

大功告成!

你可能感兴趣的:(opengl,c++,opengl,ubuntu)