2012-04-03 158 views
0

我正在尝试将球体绘制到屏幕上,但没有使用OpenGL(glut)将它们移除(获得一些“trail”效果的王者)。全屏闪烁

我在屏幕上也有我想要阅读的文本,所以我必须在旧文本上手动绘制一个黑色矩形,然后绘制新文本。

关键是我也想开启/关闭,同时运行的“创新”,但香港专业教育学院遇到了一个很奇怪的问题:

当我使用单缓冲,一切都蛮好,但是当我切换到双缓冲和只使用前缓冲区,我开始闪烁的文字。 这只发生在全屏。在具有相同分辨率(1920x1080)的窗口模式下,没有闪烁,尽管我获得了相同的fps(约250)。

有没有人知道是什么原因造成这种情况,为什么?

+0

“只使用前端缓冲区”是什么意思?您是否在使用'glutSwapBuffers()',这是如何避免双缓冲应用程序闪烁的。 – psalvaggio 2012-04-03 18:16:08

+0

不,正好相反。我避免使用glutSwapBuffers来获得单缓冲。我希望能够在单缓冲和双缓冲之间切换。我需要单缓冲才能获得足迹效果,而不是两次绘制所有内容。 – 2012-04-03 18:19:19

+1

我一直觉得你通过将'GLUT_SINGLE'或'GLUT_DOUBLE'传递给'glutInitDisplayMode'来切换两者。我发现这个例子,也许它可以帮助:http://www.sgi.com/products/software/opengl/examples/glut/examples/source/sb2db.c – psalvaggio 2012-04-03 18:22:56

回答

1

双缓冲的整个想法在this wikipedia article中有解释。我不知道为什么你没有看到任何问题没有双缓冲,但据我了解你的问题,你需要正确使用双缓冲。

编辑:你可能有兴趣在Is double buffering needed any more的答案。 This answer to PiP in OpenGL causing flickering也可能与您的程序有关。

+0

我知道双缓冲的想法,但正如我所说的,我有时需要获得“跟踪”效果。如果我使用了双缓冲,那么我需要将所有内容都绘制两次。 – 2012-04-03 18:24:25

+0

此外,它并没有解释为什么这只发生在全屏模式下 – 2012-04-03 18:24:50

+0

并绘制两次 - 双缓冲更多的CPU /内存密集;; wrt闪烁的文字 - 这是预期的,因为你也说你先画黑色的旧文本,然后再次绘制文本;; wrt **不**在窗口模式下闪烁 - 我想知道您使用的是什么操作系统,当我很久以前使用Windows时,发现窗口与非窗口应用程序性能存在很大差异。我猜测看到或看不到闪烁将取决于平台。也许试试看看在另一个平台或至少另一台机器上会发生什么? – akostadinov 2012-04-03 19:02:53