【发布时间】:2013-08-07 20:26:47
【问题描述】:
这是针对 Android 上的 OpenGL ES 2.0 游戏,但我怀疑正确答案适用于任何 opengl 情况。
TL;DR - 将 N 个数据发送到 GPU 一次然后用它进行 K 个绘图调用是否更好;还是将 K*N 数据发送到 gpu 一次,然后进行 1 次绘制调用?
更多详情 我想知道适合我的情况的最佳做法。我有一个动态网格,我会重新计算每一帧的顶点——把它想象成一个水面——我需要在我的游戏中将这些顶点投影到 K 个不同的四边形上。 (在每种情况下,投影都略有不同;保留细节,您可以将它们想象为围绕网格的 K 个不同的镜子。)K 大约为 10-25;我还在想办法。
我可以想到两种广泛的选择:
按原样绑定网格,并调用 draw K 不同时间,要么 更改着色器的制服或弄乱固定功能 状态渲染到正确的四边形(在屏幕上)或不同的 纹理的片段(我稍后可以在渲染四边形时使用它来实现 效果一样)。
将网格中的所有顶点复制 K 次,本质上是制作一个 包含 K 个网格的单个顶点流,并添加一个属性(或 少数)指示每个网格克隆应该投影哪个四边形 到(以及如何到达那里),并使用顶点着色器进行投影。一世 会调用一次绘图,但发送 K 倍的数据。
问题:在这两个选项中,通常哪个更好?
(另外:有没有更好的方法来做到这一点?
我考虑了第三种选择,我将网格细节渲染到纹理,并将我的 K 克隆几何体创建为一种虚拟流,我可以一劳永逸地绑定它,在顶点着色器中查找进入每个顶点的纹理,找出它真正代表的顶点;但有人告诉我,顶点着色器中的纹理支持很差或在 OpenGL ES 2.0 中被禁止,因此我宁愿避免使用这种方法。)
【问题讨论】: