一次渲染到多个帧缓冲区

时间:2018-07-22 02:29:18

标签: rendering opengl-es-2.0 framebuffer multipass

是否可以使用OpenGL ES 2.0一次渲染到多个帧缓冲区?

假设我有一个角色,并且需要在渲染最终结果之前对此角色进行一些图像处理。在处理操作之后,所有帧缓冲器将被组合为一个最终帧。例如;

  1. 创建5个帧缓冲区(使用glGenFramebuffers, glGenTextures, glGenRenderbuffers

    • (#1)一个用于角色的法线贴图
    • (#2)一个用于角色深度图的
    • (#3)一种用于处理法线贴图的结果纹理
    • (#4)一种用于处理深度图的结果纹理
    • (#5)(#3)和(#4)的最终组合之一((#1和(#2)仅用于处理,在最终结果中没有任何迹象)< / li>
  2. 我的问题是关于(#1)和(#2)。创建这些缓冲区的步骤如下:

    • 绑定帧缓冲区
    • 使用相关程序(深度程序和普通程序是单独的程序)
    • 使用glUniformMatrix4fv, glUniform3f, glBindBuffer, glVertexAttribPointer等将资源加载到gpu(ligth,骨骼位置等)
    • 并渲染glDrawElements
    • (#1)和(#2)重复上述步骤,因为它们具有单独的程序。

我想要的是合并(#1)和(#2),以便一次创建(#3)和(#4),这样就不会像骨骼位置这样的资源两次发送到gpu。

如果添加了额外的图层来进行处理(例如使移动角色发光),骨骼位置等也将发送至该发光程序的gpu。

我想要的是加载资源一,创建多个结果帧缓冲区。

以上逻辑有时​​可能不正确,如果是这样,请告诉我。

谢谢。

注意:由于我使用的是ES,因此OpenGL标签已删除。

0 个答案:

没有答案