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);
}
  • 双缓冲解释

    显示器只负责从显示缓冲区取数据。在显示复杂图形时,可能一次画不完,显示器就从显示缓冲器中读取数据,这样每次都只显示一部分,造成闪烁。

    使用双缓冲,可以将计算的结果放在另一个缓冲区中,等计算完,再一次性将该缓冲区中的数据复制到显示缓冲区。

posted @ 2021-11-24 17:46  blahhhh  阅读(73)  评论(0)    收藏  举报