本教程参考《计算机图形学编程》
仅作个人学习记录
前提
此教程使用如下环境:
GLFW、GLEW
渲染一个简单的窗体代码如下
#include <iostream>
#include <string>
#include <vector>
#include "glew.h"
#include "glfw3.h"
void init(GLFWwindow* window)
{
}
void display(GLFWwindow* window,double deltaTime)
{
glClearColor(0.5f,0.5f,0.0f,0.5f);
glClear(GL_COLOR_BUFFER_BIT);
}
int main()
{
int major=0, minor=0,rev = 0;
//获取GLFW使用的版本号
glfwGetVersion(&major, &minor, &rev);
std::cout << "GLFW Version: " << major << "." << minor << "." << rev << std::endl;
if(glfwInit() != GLFW_TRUE)
{
std::cout << "Failed to initialize GLFW" << std::endl;
return -1;
}
//设置窗口属性
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, major);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, minor);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//创建窗口
GLFWwindow* window = glfwCreateWindow(600, 600, "Hello", NULL, NULL);
//使调用线程的指定窗口的上下文成为当前的
glfwMakeContextCurrent(window);
//初始化GLEW
if(glewInit() != GLEW_OK)
{
std::cout << "Failed to initialize GLEW" << std::endl;
return 0;
}
std::cout << "GLEW Version: " << glewGetString(GLEW_VERSION) << std::endl;
//交换间隔表示交换缓冲区之前等待的帧数,通常称为vsync。
//默认情况下,交换间隔为0,但因为屏幕每秒只更新60-75次,所以大部分的画面不会被显示。
//而且,缓冲区有可能在屏幕更新的中间交换,出现屏幕撕裂的情况。
//所以,可以将该间隔设为1,即每帧更新一次。它可以设置为更高的值,但这可能导致输入延迟。
glfwSwapInterval(1);
init(window);
while(!glfwWindowShouldClose(window))
{
display(window,glfwGetTime());
//交换缓冲区。GLFW在默认情况下使用两个缓冲区。每个窗口有两个渲染缓冲区——前缓冲区和后缓冲区。
//前缓冲区是正在显示的缓冲区,后缓冲区是即将显示的缓冲区。
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}