OpenGL:暂停屏幕内容一段时间

时间:2014-08-21 03:25:52

标签: opengl

我是Open GL的新手(我使用的是旧的Open GL API),我试图按照以下步骤实施第3步:

1. Draw something
2. Draw some more things.
3. Don't draw anything NEW for some time t. But keep displaying whatever has been drawn so far.
4. Time t has elapsed, move on to drawing new things.

sleep()和其他类似的功能显然不起作用,因为它在睡眠时间内不会绘制任何的东西,所以你只需得到一个空白屏幕时间t。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

一个选项是您绘制到前缓冲区。假如你想先绘制A,然后等待几秒钟,然后画B:

  1. 画A ..
  2. SwapBuffers
  3. 睡眠。
  4. glDrawBuffer(GL_FRONT)
  5. 画B.
  6. glFlush()
  7. glDrawBuffer(GL_BACK)
  8. 现在通常不推荐绘制到前端缓冲区,甚至在OpenGL的某些变体(例如OpenGL ES)中也不支持。

    更标准的选项是,当您想要使用更多内容更新整个场景时,再次绘制整个场景:

    1. 画A ..
    2. SwapBuffers
    3. 睡眠。
    4. 画A
    5. 画B.
    6. SwapBuffers
    7. 如果绘图A非常昂贵,您可以考虑将其渲染到屏幕外帧缓冲区(FBO)的方法,然后在需要时将其复制到默认的帧缓冲区:

      1. 绑定FBO。
      2. 画A ..
      3. 取消绑定FBO。
      4. 复制FBO渲染 - >默认FB。
      5. SwapBuffers
      6. 睡眠。
      7. 复制FBO渲染 - >默认FB。
      8. 画B.
      9. SwapBuffers