文章目录
  1. 1. 基本C++环境搭建
  2. 2. 基本OpenGL开发环境配置
  3. 3. Hello Triangle
  4. 4. Debugging Tricks
  5. 5. 参考

最近做一个跨平台的绘制项目,尝试在Ubuntu上搭建C++的OpenGL开发环境,在这里把一些过程记录一下。

  • OpenGL工具库:GLAD+GLFW
  • 项目构建:CMake
  • 编辑/调试:VSCode
  • 实现Demo:Hello Triangle - Learn OpenGL(中文/英文),完整代码

基本C++环境搭建

  1. 安装编译工具,build-essential包括gcc,g++,make在内的编译器和工具

    1
    2
    sudo apt update
    sudo apt install build-essential
  2. 安装CMake,跨平台构建工程比较方便

    1
    sudo apt install cmake
  3. 创建C++基本工程
    创建一个项目路径HelloTriangle,在其之下创建源文件路径src和build路径。在src下创建代码文件main.cpp,写个Hello World

    1
    2
    3
    4
    5
    #include <iostream>

    int main(void) {
    std::cout << "Hello Triangle" << std::endl;
    }
  4. 在HelloTriangle根目录下创建CMakeLists.txt,为方便补全,可以安装VSCode的CMake插件和CMake Tools插件

  5. CMakeLists.txt填入以下配置内容

    1
    2
    3
    4
    5
    cmake_minimum_required(VERSION 3.6)

    add_executable(HelloTriangle
    src/main.cpp
    )
  6. 此时,项目路径如下图所示

    1
    2
    3
    4
    ├── build
    ├── CMakeLists.txt
    └── src
    └── main.cpp
  7. 进入build路径,运行cmake,在build路径下生成Makefile,然后运行make,生成HelloTriangle可执行文件,运行即可

    1
    2
    3
    4
    cd build
    cmake ../ # 运行cmake生成Makefile
    make # 运行make生成可执行文件
    ./HelloTriangle # 运行

至此,基本C++环境已经配好,接下来开始配置OpenGL的开发环境。

基本OpenGL开发环境配置

  1. 安装GLFW,下载GLFW源码,解压至任意路径,进行构建和安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 视情况apt安装如下工具库,缺的话再补
    sudo apt install libglfw3 libglfw3-dev glibc-doc libxmu-dev libxrandr-dev doxygen libsdl2-dev

    # 构建工程 & 安装
    cd glfw-3.3.3 && mkdir build && cd build
    cmake ../
    sudo make
    sudo make install

    # 运行simple程序,若绘制出旋转的三角形则安装已完成
    ./examples/simple
  2. 查询设备OpenGL版本,以选择合适版本的GLAD库,这里输出的是4.6

1
2
glxinfo | grep "OpenGL version"
输出示例:OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.0.8
  1. 安装GLAD,用于在运行时动态获取设备的OpenGL接口函数, 进入GLAD生成页面,选取Language、Specification、API - gl、Profile,勾选Generate a loader,然后点击右下角Generate,在新页面中下载glad.zip,解压至任意位置,后续在工程中配置

至此,基本OpenGL开发环境已经配置好,接下来开始配置Hello Triangle的工程代码。

Hello Triangle

  1. HelloTriangle示例代码贴入之前创建的main.cpp,如果编辑器提示有语法错误先暂时忽略。

  2. 修改CMakeLists.txt文件,增加glad.c为源文件,引用glad的include路径,并连接glfw3和OpenGL,完整CMakeLists.txt如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    cmake_minimum_required(VERSION 3.6)

    project(HelloTriangle)

    add_executable(HelloTriangle
    src/main.cpp
    /home/summersun/Projects/glad/src/glad.c # 新增源文件
    )

    include_directories(
    /home/summersun/Projects/glad/include # 新增include
    )

    # 链接glfw
    find_package(glfw3 3.3 REQUIRED)
    target_link_libraries(HelloTriangle
    glfw
    ${CMAKE_DL_LIBS}
    )

    # 链接opengl
    find_package(OpenGL REQUIRED)
    target_link_libraries(HelloTriangle OpenGL::GL)
  3. 回到HelloTriangle/build路径下,依次构建和编译工程,并运行即可

    1
    2
    cmake ../ && make
    ./HelloTriangle # 运行HelloTriangle

Debugging Tricks

  1. 代码补全、语法提示?

    在VSCode安装C/C++插件以获取此能力

  2. VSCode提示glad/glad.h头文件未找到,但可以正常编译运行?

    先在CMakeLists.txt中添加set(CMAKE_EXPORT_COMPILE_COMMANDS YES)定义,再次cmake时可以生成compile_commands.json文件,该文件记录了CMakeLists.txt中定义的头文件

    然后生成VSCode的配置文件c_cpp_properties.json文件,在其中加入compileCommands选项指向CMake刚生成的配置文件"compileCommands": "${workspaceFolder}/build/compile_commands.json"

  3. 如何调试?

    在CMakeLists.txt中添加set(CMAKE_BUILD_TYPE Debug)定义,编译时会加入调试flag,在launch.json的program中设置需要调试的程序位置,F5即可调试

参考

文章目录
  1. 1. 基本C++环境搭建
  2. 2. 基本OpenGL开发环境配置
  3. 3. Hello Triangle
  4. 4. Debugging Tricks
  5. 5. 参考