一、 GLFW
1、下载glfw源码
前往GLFW官网下载源码,如下图
2、使用cmake生成glfw项目工程文件
1 前往cmake官网下载,如下图
cmake安装步骤,注意:如需要添加环境变量,和创建桌面快捷方式如下图勾选,其他都默认next
2 生成工程文件
解压下载的glfw源码,在源码目录下新建build文件夹,打开cmake-gui,配置路径如下图
点击Configure选择vs的版本,我这里选择vs2019,其他默认,点击finish,如下图
等待Configuring done完成后,其他默认,点击Generate,如下图Generating done即可完成
3 编译glfw
打开build文件夹下的GLFW.sln,重新生成解决方案,成功后在src/Debug文件夹下生成glfw3.lib
4 GLAD
前往GLAD官网,配置如下图后点击Generate,下载生成glad.zip
5 环境准备
使用vs新建一个空工程,可以把构建号的第三方库都放在一起,方便以后其他工程使用如下图,解压glad.zip,拷贝解压后include文件夹下的glad和KHR两个文件夹到library/include文件夹下,拷贝解压后src文件夹下的glad.c文件到你的工程里,拷贝glfw源码的include文件夹下的GLFW文件夹到library/include文件夹下,把glfw3.lib拷贝到
library/lib文件夹下。如下图
给新建的空工程添加包含目录和类库,如下图
6 使用glfw
#include <stdio.h>
#include <iostream>
#include "glad/glad.h"
#include "GLFW/glfw3.h"
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE); Mac OS X系统使用
//获取GLFW版本
int Major, Minor, Rev;
glfwGetVersion(&Major, &Minor, &Rev);
printf("GLFW %d.%d.%d initalized\n", Major, Minor, Rev);
//绘制窗口对象
GLFWwindow* window = glfwCreateWindow(800, 600, "window", NULL, NULL);
if (window == NULL) {
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
//初始化GLAD
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)) //glfw是否被要求退出
{
glfwSwapBuffers(window); //该函数会交换颜色缓冲
glfwPollEvents(); //检查触发事件
}
//渲染结束正确释放/删除之前分配的所有资源
glfwTerminate();
return 0;
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
7 常见问题
error LNK2019: 无法解析的外部符号 _glfwInit,该符号在函数 _main 中被引用
检查是否有添加glfw3.lib到附加依赖项;
检查库目录中是否包含glfw3.lib的文件目录;
检查工程下图的是否和编译glfw时使用的是相同得