Mac上使用VSCode+CMake搭建OpenGL开发环境

1,821 阅读1分钟

前置条件

  1. VSCode,安装好C/C++ CMakeTools插件

  2. 安装好 CMake

  3. OpenGL项目需要的第三方库:

    • GLFW 用于定义窗口、上下文以及处理用户输入等等

    编译glfw,参见:juejin.cn/post/704111…

    • GLAD提供了跨平台的访问 OpenGL 接口,因为 OpenGL 只是提供了标准,具体的实现是由各个显卡的驱动去做,由于驱动版本众多,很多函数在编译期没有办法确定,只能通过LoadLibrary的方式在运行时查找,每个函数都这么干非常麻烦,glad 就是用来完成这部分工作的

    准备glad wecom-temp-127e320447e408fd050e42630e272660.png

创建项目

打开一个空的文件目录,然后按下F1,执行CMake:Quick Start命令快速创建

image.png

安装glad

把上面下载好的glad解压,然后把include目录下的 glad KHR copy到项目的include,然后把src/glad.c copy到项目中

image.png

CMakeList.txt:

cmake_minimum_required(VERSION 3.0.0)
project(HelloGL VERSION 0.1.0)

# 使用C++ 11标准
set(CMAKE_CXX_STANDARD 11)

## 添加头文件
set(GLFW_H /usr/local/include)
set(GLAD_H ${PROJECT_SOURCE_DIR}/include)
include_directories(${GLAD_H} ${GLFW_H})


##添加目标链接
set(GLFW_LINK /usr/local/lib/libglfw.3.dylib)
link_libraries(${GLFW_LINK})

## 执行编译命令
set(SOURCES glad.c main.cpp)

add_executable(HelloGL ${SOURCES})

## 链接系统的OpenGL 框架
if (APPLE)
    target_link_libraries(HelloGL "-framework OpenGL")
endif()

include(CTest)
enable_testing()



set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

main.cpp:

#include <iostream>
#include <glad/glad.h>
#include <stdio.h>
#include <stdlib.h>
#include <GLFW/glfw3.h>

void framebuffer_size_callback(GLFWwindow *window, int width, int height);
void processInput(GLFWwindow *window);

int main(int, char **)
{
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__
//如果使用的是Mac OS X系统,你还需要加下面这行代码到你的初始化代码中这些配置才能起作用
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
    GLFWwindow *window = glfwCreateWindow(800, 600, "study OPenGL", NULL, NULL);
    if (window == NULL)
    {
        std::cout << "fail to create window" << std::endl;
        glfwTerminate();
        return -1;
    }

    glfwMakeContextCurrent(window);

    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "failed to initalize GLAD" << std::endl;
        return -1;
    }
    glViewport(0, 0, 800, 600);
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    while (!glfwWindowShouldClose(window))
    {
        processInput(window);
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

void framebuffer_size_callback(GLFWwindow *window, int width, int height)
{
    glViewport(0, 0, width, height);
}

void processInput(GLFWwindow *window)
{
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
    {
        glfwSetWindowShouldClose(window, true);
    }
}

生成与调试: 可以通过 CMake Tools提供的图形界面进行生成,也可以通过一下命令,打开 F1,执行命令CMake:Build image.png 如果需要调试程序,在 Debug 面板中点击齿轮按钮,然后选择C++(GDB/LLDB)调试器,再选择默认配置,最后修改 launch.json 中的 program 属性,指向生成的程序

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "clang++ - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/HelloGL",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "preLaunchTask": "C/C++: clang++ 生成活动文件"
        }
    ]
}

github:HelloGL