提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
1.引入头文件
代码如下:
#include <glad/glad.h>
#include <GLFW/glfw3.h>
注意:请确认是在包含GLFW的头文件之前包含了GLAD的头文件。GLAD的头文件包含了正确的OpenGL头文件(例如
GL/gl.h
),所以需要在其它依赖于OpenGL的头文件之前包含GLAD。
2.在main函数中实例化GLFW窗口
代码如下:
//回调函数:每次窗口大小被调整的时候被调用
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
//判断输入Esc
void processInput(GLFWwindow* window);
int main()
{
//1.初始化glfw
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//主版本号
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//次版本号
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//核心模式(Core-profile)
const int windowWidth = 800;
const int windowHeight = 600;
//2.创建一个窗口对象
GLFWwindow* window = glfwCreateWindow(windowWidth, windowHeight, "LearnOpenGLDomo1", NULL, NULL);
if (window == NULL)
{
cout << "Failed to create GLFW window!" << endl;
glfwTerminate();
return -1;
}
//OpenGL运行模式——单线程,不能多个线程同时调用
glfwMakeContextCurrent(window);
//3.GLAD是用来管理OpenGL的函数指针的,所以在调用任何OpenGL的函数之前我们需要初始化GLAD。
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
//4.视口:就是窗口中用来显示图形的一块矩形区域,它可以和窗口等大,也可以比窗口大或者小。
//只有绘制在视口区域中的图形才能被显示,如果图形有一部分超出了视口区域,
//那么那一部分是看不到的。通过glViewport()函数设置。
//OpenGL渲染窗口的尺寸大小,即视口(Viewport)
//glViewport(0, 0, windowWidth, windowHeight);
//注册回调函数
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
//5.渲染
while (!glfwWindowShouldClose(window))//检测窗口是否关闭
{
//输入
processInput(window);
//渲染
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);//清空color
//glfw: swap buffersand poll IO events(keys pressed / released, mouse moved etc.)
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);
}
3.总体流程图