《OGL dev》Etay Meiri Tutorial 01 - Open a window 笔记
创建窗口必须的代码:
#include <GL/freeglut.h>
int main(int argc, char** argv)
{
glutInit(&argc, argv); // 初始化glut,支持接收控制台参数,如-sync,进行定制化初始化
glutCreateWindow("Tutorial 01"); // 创建一个窗口,参数为标题,返回窗口ID
glutMainLoop(); // glut主循环。死循环,如果没有它,创建的窗口将在main结束时销毁
}
以下两个函数设置窗口的大小和位置,必须在glutCreateWindow之前调用:
glutInitWindowSize(width, height);
glutInitWindowPosition(x, y);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
GLUT_DOUBLE启用双buffer(一个用于显示,另一个在后台绘制,之后交换)。双buffer与GLUT_SINGLE单buffer相对,GLUT_SINGLE的值为0,即默认值。单buffer可能出现闪烁。
GLUT_RGBA启用颜色buffer。GLUT_RGB和GLUT_RGBA的值都为0,没有区别。并且因为是0,即默认值,不写也行。
教程中这行代码是写在glutCreateWindow之前的。
glClearColor(Red, Green, Blue, Alpha);
,设定清空颜色buffer所使用的颜色,默认为黑色。
glutDisplayFunc(RenderSceneCB);
,设定渲染回调函数为RenderSceneCB,每帧调用一次。如果不调用glutDisplayFunc,屏幕呈现白色。
static void RenderSceneCB()
{
glClear(GL_COLOR_BUFFER_BIT); // 使用设定的颜色清空颜色buffer
glutSwapBuffers(); // 交换buffer区,因为是双buffer
}