我必须组合多达 17 个纹理,然后使用 openGL 将其渲染为四边形(嗯,2 个三角形)。我必须渲染大量这些四边形——也许是 500 个。
我想知道最快/最好的方法是什么:
A. 多次渲染 B. 在 FBO 中组合纹理并渲染一次 C. 使用 opengl 多重纹理并在几次通道中渲染 D. 将纹理与 CPU 组合,上传到 opengl 纹理,然后渲染 E. 其他?
多次通过意味着多个像素着色器执行以及多个 ROP/混合操作,这很容易成为上一代和当前一代硬件的瓶颈。因此,将其全部塞进一次或几遍(C)应该是有利的。
我不确定“在 FBO 中合并”的事情,虽然我不能为此提供确凿的证据,但它“感觉”它可能会更慢(因为你将有至少 2 个 FBO 重新绑定和至少一个管道停顿)。当然,这取决于...如果您将相同的 17 个纹理组合一次并绘制单个组合纹理一千次,它可能会更快。如果你有十几种不同的组合来组合这 17 种纹理,它可能看起来会有所不同。
现代 GPU 在片段着色器中采样多达 17 个纹理应该没有问题(GL 3.x 硬件至少有 48 个),而且很简单。
A、B 和 C 在性能方面应该是相同的。
这一切都取决于您的 GPU 和 CPU 有多强大。这将决定是否使用 a、b 或 c 或 d 之一。