OpenGL学习笔记 入门-窗口
程序组成
- 首先
glfw初始化和设置
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
- 创建窗口和将窗口的上下文设置为主上下文
GLFWwindow* window = glfwCreateWindow(800, 600, "myFirstWindow", NULL, NULL);
if(!window)
{
std::cout << "filed to create a window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window); // 将窗口的上下文设置为主上下文
-
glad 初始化
任何的OpenGL接口调用都必须在初始化GLAD库后才可以正常访问
if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
return -1;
}
- 视口
glViewport(0, 0, 800, 600);
前两个参数控制窗口左下角的位置,第三第四个参数控制渲染窗口的宽度和高度
- 渲染循环
while(!glfwWindowShouldClose(window))
{
processInput(window);
glfwSetFramebufferSizeCallback(window, FramebufferSizeCallback);
glClearColor(0.2, 0.3, 0.3, 0.1);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window); // 双缓冲
glfwPollEvents();
}
// 处理输入的
void processInput(GLFWwindow* window)
{
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
{
glfwSetWindowShouldClose(window, true);
}
}
// 设置大小的回调函数
void FramebufferSizeCallback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
-
双缓冲解释
显示器只负责从显示缓冲区取数据。在显示复杂图形时,可能一次画不完,显示器就从显示缓冲器中读取数据,这样每次都只显示一部分,造成闪烁。
使用双缓冲,可以将计算的结果放在另一个缓冲区中,等计算完,再一次性将该缓冲区中的数据复制到显示缓冲区。

浙公网安备 33010602011771号