重绘旧缓冲问题

时间:2011-08-16 21:14:41

标签: objective-c ios opengl-es framebuffer

我的主场景由3D空间中的GL_POINTS组成。我想要做的是当用户在屏幕上移动手指同时保留底层3D GL_POINTS状态时,能够在场景顶部绘制单个GL_LINES线(2d叠加)。我很难理解这是否可行。我需要2个帧缓冲区吗?如何保存GL_POINTS的先前帧缓冲数据并在后续帧中重新渲染?我是否需要混合帧缓冲区 - 一个用于GL_LINE层,一个用于GL_POINTS数据?

我尝试只调用presentFramebuffer而不调用setFramebuffer,但是保留了从前一帧中提取的每个GL_LINES - 这是我不想要的。如何保留帧缓冲区的部分并删除其他部分?

1 个答案:

答案 0 :(得分:0)

  1. 您根本不需要2个帧缓冲区

    • 帧缓冲区是您的屏幕内存
    • 只渲染你所拥有的所有东西
  2. 如果你的意思是帧缓冲区VBO(VertexBufferObject)那么它们根本就不一样了

    • 如果渲染相同的数据(顶点)
    • 那么你只需1x VBO
    • 并且两次调用glDrawArrays / glDrawElements
    • 一次使用GL_POINTS,一次使用GL_LINES / GL_LINE_LOOP或其他

    • 如果您呈现不同的数据

    • 然后你需要2x VBO
    • 或者如果只有几行,那么你仍然可以使用glBegin / glEnd代替它们。
  3. 如果您只需要单独的视图区域,则可以使用

    • 剪辑,更改视口,用四边形覆盖边框,......
    • 绘制到纹理,等等......还有很多选项