4

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

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

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

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

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

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

如果为处理添加了额外的层(如发光移动角色),骨骼位置等也将被发送到 gpu 用于该发光程序。

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

以上逻辑在某些时候可能不正确,如果是这样,请告诉我。

谢谢。

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

4

0 回答 0