我使用的是example here,它可以在
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
但当我将它设置为
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);但我需要该示例与GLUT_DOUBLE模式下的一些绘图工作。
那么GLUT_DOUBLE和GLUT_SINGLE有什么不同呢
发布于 2015-02-04 15:11:01
使用GL_SINGLE时,您可以将代码绘图直接显示在显示器上。
当使用GL_DOUBLE时,你可以想象有两个缓冲区。其中一个总是可见的,另一个则不可见。您始终渲染到当前不可见的缓冲区。渲染完帧后,交换两个缓冲区,使刚才渲染的那个可见。以前可见的帧现在不可见,您可以使用它来渲染下一帧。因此,两个缓冲区的角色在每一帧中颠倒。
实际上,底层实现在大多数现代系统上的工作方式略有不同。例如,一些平台使用三重缓冲来防止在请求缓冲区交换时阻塞。但这通常不会影响到你。关键是它的行为就像你有两个一样。
除了在glutInitDisplayMode()的参数中指定不同的标志之外,主要的区别在于您在display函数结束时进行的调用。这是向glutDisplayFunc()注册的函数,它是您链接的代码中的DrawCube()。
glFlush();
glutSwapBuffers();
因此,在使用GLUT_DOUBLE时,您需要做的就是将DrawCube()末尾的glFlush()替换为glutSwapBuffers()。
发布于 2015-02-03 20:15:01
当绘制到单个缓冲上下文(GLUT_SINGLE)时,只有一个帧缓冲区用于绘制和显示内容。这意味着,您或多或少直接在屏幕上绘制。此外,在一帧中最后绘制的对象显示的时间段比开始的对象显示的时间更短。
在双缓冲方案(GLUT_DOUBLE)中,存在两个帧缓冲器。一个用于绘图,另一个用于显示。在每一帧的末尾,这些缓冲区被交换。执行此操作后,仅当帧完成且所有对象在同一时间可见时,视图才会立即更改。
那只蜜蜂说:你确定透明窗口是由GL_DOUBLE造成的,而不是使用GL_RGBA而不是GL_RGB?
https://stackoverflow.com/questions/28298540
复制相似问题