vscode OpenGL 环境搭建

vscode OpenGL环境搭建

文章目录

  • vscode OpenGL环境搭建
    • 一.准备阶段
    • 二.开始配置
      • 1.构建GLFW
      • 2.配置GLAD
      • 3.第一个项目
    • 三.总结

一.准备阶段

环境:win10 mingw

  1. LearnOpenGL CN的教程地址
  2. vscode c++环境。若没有配置好,可以查看这里,vscode c++环境配置。
  3. 点击这里下载CMake,选择msi版本。

二.开始配置

1.构建GLFW

官网上的预编译的二进制版本不一定能满足自己电脑的运行环境。点击这里下载GLFW源代码包,从源代码编译可以保证能在自己的机器上运行。

  • 解压源代码,打开CMake。

  • 输入 source code 目录,以及 build 目录(自行创建)。

  • 点击 Configure,选择 MinGW Makefiles。

    vscode OpenGL 环境搭建_第1张图片
  • 完成后,我们勾选 BUILD_SHARED_LIBS,创建动态库。

  • 然后点击 Generate。中途没有弹窗报错应该就ok了,这时候 build 目录里会生成一堆文件。

  • powershell 或者 cmd 进入到 build 目录,输入make(有些版本为更名的话叫做 mingw32-make),等待编译 100%。

    vscode OpenGL 环境搭建_第2张图片
  • 进入 build 目录中的src,拷贝 glfw3.dlllibglfw3dll.a

    vscode OpenGL 环境搭建_第3张图片
  • 库文件有了,那么头文件呢?当然在 source code 目录里啦,拷贝 include文件夹。

      可能遇到的错误:CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
      则需要指定 build tool,我们使用的是mingw,build tool 则是 make.exe。由于配置好了环境变量,我们直接在 CMAKE_MAKE_PROGRAM(勾选Advance 才会出现) 一栏输入 make 就 ok了。
    
    vscode OpenGL 环境搭建_第4张图片

2.配置GLAD

点击这里打开 GLAD 在线服务,将language设置为 C/C++,在API选项中,选择 3.3以上的GL版本(推荐使用3.3吧)。之后将Profile设置为 Core,并保证Generate a loader是 选中的。现在可以暂时忽略Extensions中的内容。点击Generate生成库文件。

现在GLAD应该给你提供了一个zip压缩包,解压,我们就获得一个 include文件夹,里面有两个目录(glad和KHR),以及一个 src 文件夹,里面有 glad.c 文件。

我们将 glad.c编译成一个静态库,这样方便我们使用。

  • gcc .\src\glad.c -c -I.\include\
  • ar -rc libglad.a glad.o

输入上面两行命令,会得到 glad.o 和 libglad.a 文件,libglad.a是我需要的。

vscode OpenGL 环境搭建_第5张图片

3.第一个项目

完成上面的步骤后,我们得到了 两个 include文件夹,以及glfw3.dlllibglfw3dll.alibglad.a文件。
那么我们开始吧。新建一个vscode c++项目(使用C/C++ Project Generator插能快速帮助创建基本项目结构),创建include、lib、src文件夹。项目结构如下图。

vscode OpenGL 环境搭建_第6张图片

然后我们编写makefile。makefile需要严格按照格式,最好不要有多余的换行、多余的空格。若还是提示makefile格式出错,请参照C/C++ Project Generator插件。

CXX		:= g++
CXX_FLAGS       := -g -std=c++17 #-Wextra -Wall

SRC		:= src
INCLUDE         := ./include
LIB		:= ./lib

LIBRARIES	:= -lglad -lglfw3dll
EXECUTABLE	:= main

all:./$(EXECUTABLE)

run: all
    ./$(EXECUTABLE)

$(EXECUTABLE):$(SRC)/*.cpp
    $(CXX) $(CXX_FLAGS) -I$(INCLUDE) -L$(LIB) $^ -o $@ $(LIBRARIES)

接着我们拷贝以下代码到main.cpp,测试环境的正确性。

    #include 
    #include 
    #include 
    // settings
    const unsigned int SCR_WIDTH = 800;
    const unsigned int SCR_HEIGHT = 600;
    int main()
    {
        // glfw: initialize and configure
        // ------------------------------
        glfwInit();
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
        glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    #ifdef __APPLE__
        glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); //uncomment this statement to fix compilation on OS X
    #endif
        // glfw window creation
        // --------------------
        GLFWwindow *window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT,"LearnOpenGL", NULL, NULL);
        if (window == NULL)
        {
            std::cout << "Failed to create GLFW window" << std::endl;
            glfwTerminate();
            return -1;
        }
        glfwMakeContextCurrent(window);
        // glad: load all OpenGL function pointers
        // ---------------------------------------
        if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
        {
            std::cout << "Failed to initialize GLAD" << std::endl;
            return -1;
        }
        // render loop
        // -----------
        while (!glfwWindowShouldClose(window))
        {
            glClearColor(0.0f, 1.f, 0.0f,1.0f);
            glClear(GL_COLOR_BUFFER_BIT);
            // glfw: swap buffers and poll IO events (keyspressed/released, mouse moved etc.)
            // ---------------------------------------------------
            glfwSwapBuffers(window);
            glfwPollEvents();
        }
        // glfw: terminate, clearing all previously allocated GLFWresources.
        //---------------------------------------------------------------
        glfwTerminate();
        return 0;
    }

最后,我们在vscode的终端,输入make run。一个绿色的框框便出现在我们眼前。

vscode OpenGL 环境搭建_第7张图片

glad.c 不编译成静态库直接使用也是可行的,在 生成exe的时候需要加上 glad.c 一同编译,否则会出现 undefined reference错误。

g++ -g -std=c++17  -I./include -L./lib src/main.cpp src/glad.c -o main  -lglfw3dll

细心的童鞋就发现了,C/C++ tool会报绿字warning,由于头文件无法找到。我们将项目里include的路径复制到 c_cpp_properties.json的includePath里去就ok啦。就像这样 “${workspaceFolder}/include”。完成后,就能智能提示头文件啦。

三.总结

以上就是整个vscode OpenGL环境搭建过程,学了一下GNU的一些命令,库的编译和链接。后面使用其他的库,也是相似的过程。vs有Nuget包可以直接使用,无需这些配置(小声bb), 祝大家学习愉快!

你可能感兴趣的:(OpenGL)