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();
Run Code Online (Sandbox Code Playgroud)在双缓冲模式下,您调用:
glutSwapBuffers();
Run Code Online (Sandbox Code Playgroud)因此,您需要做的就是glFlush()在DrawCube()使用glutSwapBuffers()时更换最后的内容GLUT_DOUBLE.