是否可以使用 OpenGL ES 2.0 单次渲染到多个帧缓冲区?
假设我有一个角色,我需要在渲染最终结果之前对这个角色进行一些图像处理。处理操作后,所有帧缓冲区将合并为一个最终帧。例如;
创建 5 个帧缓冲区(使用
glGenFramebuffers, glGenTextures, glGenRenderbuffers
)- (#1) 一个用于角色的法线贴图
- (#2) 一个用于角色的深度图
- (#3) 一个用于处理法线贴图的结果纹理
- (#4) 一个用于处理深度图的结果纹理
- (#5) (#3) 和 (#4) 最终组合的一个 ((#1) 和 (#2) 仅用于处理,最终结果中没有任何迹象)
我的问题是关于(#1)和(#2)。创建这些缓冲区的步骤如下:
- 绑定帧缓冲区
- 使用相关程序(深度和普通程序是分开的程序)
glUniformMatrix4fv, glUniform3f, glBindBuffer, glVertexAttribPointer
使用等(光照、骨骼位置等)将资源加载到 gpu- 并渲染
glDrawElements
- 对于 (#1) 和 (#2) 重复上述步骤,因为它们具有单独的程序。
我想要的是合并 (#1) 和 (#2),以便一次创建 (#3) 和 (#4),这样骨骼位置等资源就不会被发送到 gpu 两次。
如果为处理添加了额外的层(如发光移动角色),骨骼位置等也将被发送到 gpu 用于该发光程序。
我想要的是加载资源之一,创建多个结果帧缓冲区。
以上逻辑在某些时候可能不正确,如果是这样,请告诉我。
谢谢。
注意:由于我使用的是 ES,因此删除了 OpenGL 标记。