#include<GL\glew.h>
#include<GLFW\glfw3.h>
#include<iostream>
//#pragma comment(lib,"glew32.lib")
using namespace std;
void init(GLFWwindow* window) {}
void display(GLFWwindow* window, double currentTime)
{
glClearColor(1.0, 0.0, 0.0, 1.0);//重置缓冲区时填充的颜色
glClear(GL_COLOR_BUFFER_BIT);
//GL_COLOR_BUFFER_BIT引用了包含渲染后像素的颜色缓冲区
//glClear用glClearColor设置的颜色清除该缓冲区的颜色
}
int main(void)
{
if (!glfwInit()) { exit(EXIT_FAILURE); }//GLFW使用glfwInit()初始化
//WindowHint指定了机器必须与OpenGL版本4.3兼容
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);//“主版本号”=4
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//“次版本号”=3
//glfwCreateWindow创建GLFW窗口及相关的OpenGL上下文,其可选项由WindowHints设置
//“上下文”是指OpenGL实例及其状态信息,其中包括诸如颜色缓冲区之类的项
GLFWwindow* window = glfwCreateWindow(600, 600, "Chapter2 - program1", NULL, NULL);
//glfwCreateWindow参数(6个):窗口宽、高(以像素为单位)、窗口顶部标题、
//允许全屏显示、允许信息共享(本例中未用到,设置为NULL)
glfwMakeContextCurrent(window);//GLFW窗口不会自动将它与当前的OpenGL上下文关联起来
//因此需要glfwMakeContextCurrent
if (glewInit() != GLEW_OK) { exit(EXIT_FAILURE); }//GLEW使用glewInit()初始化
glfwSwapInterval(1);//glfwSwapInterval和glfwSwapBuffers用来开启垂直同步(Vsync)
//垂直同步是涉及到显卡和显示器的一个概念,当开启了垂直同步,显卡将在渲染完成一帧图像之后
//等待垂直同步信号的到来,否则无法绘制下一帧
init(window);
while (!glfwWindowShouldClose(window))
{
display(window, glfwGetTime());//将时间传入display函数
//方便保证动画在不同计算机上以相同速度播放
//glfwGetTime返回GLFW初始化后经过的时间
glfwSwapBuffers(window);//绘制屏幕
glfwPollEvents();//处理窗口相关事件,如按键事件
}
glfwDestroyWindow(window);//glfwDestoryWindow通知GLFW销毁窗口
glfwTerminate();//glfwTerminate通知GLFW终止运行
exit(EXIT_SUCCESS);
}
1、OpenGL实际上并不是把图像直接绘制到计算机屏幕上,而是渲染到一个帧缓冲区,然后需要这台机器负责把帧缓冲区的内容绘制到屏幕上的一个窗口中
2、GLFW窗口默认是双缓冲的