纹理splat opengl最有效的方法?

时间:2011-01-30 06:49:46

标签: c++ opengl textures splat

我必须组合多达17个纹理,然后使用openGL将其渲染为四边形(井,2个三角形)。我必须渲染大量的这些四边形 - 也许是500个。

我想知道最快/最好的方法是什么:

一个。在许多通行证中呈现 B.在FBO中组合纹理并渲染一次 C.使用opengl multitexture并在几次传递中渲染 D.将纹理与CPU组合,上传到opengl纹理,然后渲染 E.其他?

2 个答案:

答案 0 :(得分:1)

多次传递意味着多个像素着色器执行以及多个ROP /混合操作,这很容易成为上一代和当前一代硬件的瓶颈。 因此,将其全部填充到一次通过或几次通过(C)应该是有利的。

我不确定“在FBO中合并”的事情,虽然我无法为此提供确凿证据,但“感觉”它可能会更慢(因为你将至少有2个FBO重新绑定,至少一个管道摊位)。虽然它当然取决于...如果你将相同的17个纹理组合一次并将单个组合纹理绘制一千次,它可能会更快。如果您对这17种纹理的组合方式有十几种不同的组合,那么它可能看起来会有所不同。

现代GPU在片段着色器中最多可以采样17个纹理(GL 3.x硬件至少有48个),而且很简单。

答案 1 :(得分:0)

A,B和C应该是相同的表现。

这一切都取决于你的GPU和CPU有多强大。这将决定是否使用a,b或c或d中的一个。