单缓冲(GLUT_SINGLE)和双缓冲绘图(GLUT_DOUBLE)之间的区别

Shi*_*ang 3 opengl

我在这里使用它的例子

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

但是当我将它设置为透明窗口时它会变成透明窗口

glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
Run Code Online (Sandbox Code Playgroud)

但是我需要这个例子在GLUT_DOUBLE模式下使用一些绘图.

那么GLUT_DOUBLE和之间的区别是GLUT_SINGLE什么?

Ret*_*adi 23

使用时GL_SINGLE,您可以将代码绘图直接绘制到显示屏上.

使用时GL_DOUBLE,您可以拍摄两个缓冲区.其中一个总是可见的,另一个则不然.您始终渲染到当前可见的缓冲区.渲染完帧后,交换两个缓冲区,使刚才渲染的缓冲区可见.之前可见的那个现在是不可见的,您可以使用它来渲染下一帧.因此,每帧反转两个缓冲区的作用.

实际上,在大多数现代系统中,底层实现的工作方式有所不同.例如,某些平台使用三重缓冲来防止在请求缓冲区交换时发生阻塞.但这通常不关心你.关键是它的行为就好像你有两个缓冲区.

除了在参数中指定不同的标志之外,主要区别glutInitDisplayMode()在于您在显示功能结束时进行的调用.这是注册的函数glutDisplayFunc(),它DrawCube()在您链接的代码中.

因此,您需要做的就是glFlush()DrawCube()使用glutSwapBuffers()时更换最后的内容GLUT_DOUBLE.