首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单缓冲(GLUT_SINGLE)和双缓冲(GLUT_DOUBLE)绘图的区别

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

Stack Overflow用户
提问于 2015-02-03 20:08:52
回答 2查看 21K关注 0票数 5

我使用的是example here,它可以在

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

但当我将它设置为

代码语言:javascript
复制
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);

但我需要该示例与GLUT_DOUBLE模式下的一些绘图工作。

那么GLUT_DOUBLEGLUT_SINGLE有什么不同呢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-04 15:11:01

使用GL_SINGLE时,您可以将代码绘图直接显示在显示器上。

当使用GL_DOUBLE时,你可以想象有两个缓冲区。其中一个总是可见的,另一个则不可见。您始终渲染到当前不可见的缓冲区。渲染完帧后,交换两个缓冲区,使刚才渲染的那个可见。以前可见的帧现在不可见,您可以使用它来渲染下一帧。因此,两个缓冲区的角色在每一帧中颠倒。

实际上,底层实现在大多数现代系统上的工作方式略有不同。例如,一些平台使用三重缓冲来防止在请求缓冲区交换时阻塞。但这通常不会影响到你。关键是它的行为就像你有两个一样。

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

  • 在单缓冲区模式下,您可以在结束时调用以下代码:

glFlush();

  • In双缓冲区模式,您可以调用:

glutSwapBuffers();

因此,在使用GLUT_DOUBLE时,您需要做的就是将DrawCube()末尾的glFlush()替换为glutSwapBuffers()

票数 28
EN

Stack Overflow用户

发布于 2015-02-03 20:15:01

当绘制到单个缓冲上下文(GLUT_SINGLE)时,只有一个帧缓冲区用于绘制和显示内容。这意味着,您或多或少直接在屏幕上绘制。此外,在一帧中最后绘制的对象显示的时间段比开始的对象显示的时间更短。

在双缓冲方案(GLUT_DOUBLE)中,存在两个帧缓冲器。一个用于绘图,另一个用于显示。在每一帧的末尾,这些缓冲区被交换。执行此操作后,仅当帧完成且所有对象在同一时间可见时,视图才会立即更改。

那只蜜蜂说:你确定透明窗口是由GL_DOUBLE造成的,而不是使用GL_RGBA而不是GL_RGB?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28298540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档