Back
Featured image of post Visual Studio & OpenGL

Visual Studio & OpenGL

Vistual Studio 搭建 OpenGL 环境

Visual Studio & OpenGL

这里采用的方案与 LearnOpenGL 一样,使用 glfwglad。❗ 个人使用 win10 环境。

Table of Contents

1. 配置 Visual Studio

安装基本的开发包,有两个必装的包。这里我使用了英文,在语言包里,我还选择了 English 安装包。

安装模块
安装模块

2. 构建开发模块

新建一个 OpenGL 文件夹

  • 下载 CMake ,新电脑选择 x64 的安装包,安装 CMake。

  • 下载 GLFW官网,点击下载 Source package,并解压至 OpenGL 文件夹。

  • 使用 CMake 编译 GLFW。

    1. 当前文件目录如下:

      项目目录
      项目目录

      build 文件夹是我自己创建的,待会编译会用到。

    2. 双击 CMake-gui 程序,进行编译。

      先设置好对应文件夹,如下图所示:source code 是解压后的 glfw-3.3.2 文件目录,build binaries 是我们新建的 build 文件夹,对应关系如上图所示。

      Cmake build glfw
      Cmake build glfw

    3. 接下来点击下面的 Configure 按钮。

      Cmake 配置
      Cmake 配置

      会弹出下图右边的小弹窗,确定选择的是 Visual Studio 16 2019 平台,完成后,点击下面的 Finish 按钮。

    4. 真正开始编译

      上面点击完 Finish 后等一会会出现如下图左边的红色页面,此时我们点击左边的 Generate 开始编译。

      Cmake 编译
      Cmake 编译

      此时,CMake 已经完成了它的所有任务。

3. visual Studio 编译 GLFW

在 CMake 完成编译后,上图的右边部分,我们可以直接点击 Open Project 用 Visual Studio 打开 project ,或者双击 build 后里的 GLFW.sln 文件,打开 project 后,点击 build -> build solution, 完成后会在 build -> src -> Debug 里生成 glfw3.lib 文件,这是我们需要的。

4. 下载 GLAD

点击 这里 打开 GLAD 在线服务,设置如下:

下载GLAD
下载GLAD

确保 Options 下面勾选上了 Generate a loader,最后点击页面最下面的 GENERATE,此时会打开另一个页面,我们点击下面的 glad.zip ,下载 glad。将其解压在 OpenGL 文件夹下,此时 OpenGL 文件下会多出 include、src 文件夹。

5. 设置项目

这一步我们会重点关注两个文件夹,前面的 OpenGL 和接下来要创建的项目文件夹 Learn OpenGL

打开 Visual Studio 新建一个空的 project,结果如图:

创建空项目
创建空项目

在 LearnOpenGL 项目里新建文件夹 OpenGL_Stuff,并创建子文件夹 includes,lib,当前 LearnOpenGL 项目目录结构

项目目录
项目目录

当前的 OpenGL 目录如下:

项目目录
项目目录

OpenGL -> build -> src -> Debug 里生成 glfw3.lib 文件复制到 LearnOpenGL -> OpenGL_Stuff -> lib 文件夹中,将 OpenGL -> glfw-3.3.2 -> include 里的 GLFW 文件夹复制到 LearnOpenGL -> OpenGL_Stuff -> includes 文件夹中,将 **OpenGL -> include ** 里的 glad,KHR 文件夹复制到 LearnOpenGL -> OpenGL_Stuff -> includes 文件夹中。完成后的 LearnOpenGL 项目目录结构:

项目目录
项目目录

双击 LearnOpenGL.sln 打开项目,还要将 OpenGL -> src 里的 glad.c 文件添加进 Learn OpenGL 项目里。打开 Visual Studio 后,直接将 glad.c 文件拖拽至 Source Files 目录里。

2020-12-30-add-glad.c-file

项目目录
项目目录

接下来就是对 Learn OpenGL 项目属性设置了,打开项目后,Project -> Properties

左边点击 VC++ Directories

  1. 编辑右边的 General -> Include Directories,选择 includes 文件路径,点击一下右下角的 Apply 按钮;

  2. 编辑右边的 General -> Library Directories,选择 lib 文件路径,点击一下右下角的 Apply 按钮;

    Visual Studio 添加文件路径
    Visual Studio 添加文件路径

左边点击 Linker -> Input

编辑右边的 Additional Dependencies,输入 opengl32.lib 按一下回车继续输入 glfw3.lib ,点击一下右下角的 Apply 按钮;

Visual Studio 添加依赖
Visual Studio 添加依赖

到这儿,整个配置环境就搭建好了。

6. 测试用例

新建cpp文件并测试,下面的是测试代码

#include <glad/glad.h>
#include <GLFW/glfw3.h>

#include <iostream>

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

// 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);
#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);
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    // 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))
    {
        // input
        // -----
        processInput(window);

        // render
        // ------
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        // glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
        // -------------------------------------------------------------------------------
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    // glfw: terminate, clearing all previously allocated GLFW resources.
    // ------------------------------------------------------------------
    glfwTerminate();
    return 0;
}

// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly
// ---------------------------------------------------------------------------------------------------------
void processInput(GLFWwindow* window)
{
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
        glfwSetWindowShouldClose(window, true);
}

// glfw: whenever the window size changed (by OS or user resize) this callback function executes
// ---------------------------------------------------------------------------------------------
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    // make sure the viewport matches the new window dimensions; note that width and 
    // height will be significantly larger than specified on retina displays.
    glViewport(0, 0, width, height);
}

如果有报错的话,很可能是上一步的 Project -> Properties 的属性设置被复原了,此时查看一下对应的 Include Directories ,Library Directories,Additional Dependencies 的设置,如果被复原了,再重复一遍上一步的项目属性设置的操作。完成后,再编译上面代码就能看到一个窗口了。

2020-12-30-opengl-hello-window

OpenGL 简单窗口
OpenGL 简单窗口

总结

配置过程中可能会出现的问题在第六步的最下面有提到过,这里的问题产生的原因在于项目创建之后,没有创建一份文件cpp,属性设置为 Project -> Property,在创建一份cpp文件后,属性设置变为 Project -> [project name] Property。不过,没什么大的问题,重新设置一下第5步提到的 directory 就可以了。

Licensed under CC BY-NC-SA 4.0