《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
}