1. 环境要求
- CMake
- OpenGL
- GLFW
- GLAD
2. 配置 GLFW
2.1 手动配置
维护一个自己的 GLFW 库
2.1.1 下载 GLFW 源码
https://www.glfw.org/download.html
2.1.2 进行 CMake
使用 CMake 生成 build
文件
CMake 详细使用方法见本章 6.2
2.1.3 获取头文件和库文件
- 先打开
GLFW.sln
,生成解决方案- 在源代码文件中
include
可以找到GLFW
的头文件 - 在生成的解决方案中可以找到库文件
.\src\Debug\glfw3.lib
- 在源代码文件中
保存到一个第三方目录中,提供给后面的项目使用
2.2 自动配置
直接使用 vs2019 内部的 NuGet(仅限 vs2019)
2.2.1 创建项目
2.2.2 添加 GLFW
在 NuGet 中下载 glfw
3. 配置 GLAD 库
3.1 查看电脑 OpenGL 版本
下载使用 OpenGL Extension Viewer:
3.2 下载 GLAD 库
库生成网址:
设置对应信息:
下载压缩包:
此时获得:
-
include
:glad
+KHR
-
src
:glad.c
4. 库的导入
4.1 维护一个自己的 OpenGL 库
将需要的库按类别放入 include 和 lib 中
每在创建工程之后,将 OpenGLBaseEv
文件复制进工程目录下。
4.2 设置路径
当需要添加其他库的时候需要先设置路径
- 右键项目,点击
属性
- 点击
VC++ 目录
,按需求添加 包含目录 和 库目录 的路径
4.3 设置链接器
添加:
opengl32.lib
glfw3.lib
Note :
注意保持编译器和库的一致性(主要看 CMake 用的 x64
还是 x86
生成 GLFW 库)
4.4 添加 glad.c
在 源文件
中添加 glad.c
5. 测试用例
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow* window);
// 窗口参数
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;
int main()
{
// glfw: 初始化和设置
// ------------------------------
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
// 创建一个窗口对象
// --------------------
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);
// 告诉GLFW我们希望每当窗口调整大小的时候调用这个函数
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// glad: 加载所有的 OpenGL 函数指针
// ---------------------------------------
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
// 渲染循环
// -----------
while (!glfwWindowShouldClose(window))
{
// 输入
// -----
processInput(window);
// 渲染
// ------
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// glfw: 渲染缓存帧以及监听输入事件 (键盘 按下 / 弹起, 鼠标移动 etc.)
// -------------------------------------------------------------------------------
glfwSwapBuffers(window);
glfwPollEvents();
}
// glfw: 终止,清除所有先前分配的GLFW资源
// ------------------------------------------------------------------
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);
}
6. 《OpenGL 编程指南》源码
6.1 下载资源
6.1.1 下载 CMake
下载地址 :
https://cmake.org/download/
6.1.2 下载 《OpenGL 编程指南》 源码
官方网址 :
下载地址 :
6.2 使用 CMake
6.2.1 设置路径
也可以直接设置当前路径
6.2.2 点击 Configure
Note :必须选择 Win32
6.2.3 点击 Generate
生成解决方案后点击 .sln
文件打开项目
6.3 更换 GLAD 库
GLAD 库是跟当前机器上的 OpenGL 版本挂钩的,将上述网址生成的 GLAD 库内的内容依次替换以下文件夹的相关文件:
glad
KHR
glad.c