根据learnopengl的教程,通过编写一遍代码,并记录代码笔记,便于后续查找使用。让我们开始吧!
示例:
代码:
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
// settings
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow* window);
//检查用户按键的输入,如果是esc则退出
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
//窗口注册一个回调函数,它会在每次窗口大小被调整的时候被调用
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
int main()
{
//初始化glfw库
glfwInit();
//将主版本号major和次版本号minor设置为3,告诉glfw采用的是核心模式,使用opengl功能的子集
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//创建窗口对象
//glfwCreateWindow需要宽和高作为两个参数,第三个参数是标题
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是用来管理opengl的函数指针
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
//渲染循环(Render Loop),它能在我们让GLFW退出前一直保持运行
while (!glfwWindowShouldClose(window))
{
processInput(window);
//使用一个自定义的颜色清空屏幕
//glClearColor函数是一个状态设置函数
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
//调用glClear函数来清空屏幕的颜色缓冲,它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲
//glClear函数则是一个状态使用的函数
glClear(GL_COLOR_BUFFER_BIT);
//函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲)
//,它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上。
glfwSwapBuffers(window);
//检查有没有触发什么事件(比如键盘输入、鼠标移动等)
glfwPollEvents();
}
//当渲染循环结束后我们需要正确释放/删除之前的分配的所有资源
glfwTerminate();
return 0;
}