对于2D游戏,我需要每帧绘制许多纹理四边形。它们不共享任何顶点,应该被认为具有随时改变每一帧的位置。当我使用opengl 3+时,我不能再使用四边形(它已被删除)。我可以使用2个三角形来制作每个四边形,但这会产生大量冗余重用数据,每帧传递给GPU。所以我想知道实现目标的最佳途径是什么?
我可以创建一个几何着色器,然后简单地将它传递给四边形的左上角以及它的宽度,高度和纹理位置。然后着色器可以创建2个三角形。但是我认为这会很慢?
答案 0 :(得分:2)
您有两种可能的方法:
您可能不应该使用几何着色器。它们通常并不意味着每帧运行,尽管它们当然可以。您可以获得一些好处,特别是使用的内存带宽非常少,但硬件要求明显更高,API更加严格。如果您的数据来自可以在那里优化的CPU计算,那么您最终也可能获得更好的性能;至多你必须翻译计算或将数据下载到视频内存。
您绝对不希望从几何着色器计算两个三角形,除非您指的是每平方两个。着色器的主要好处是并行性,因此您希望尽可能多地使用正方形并大量绘制它们。批处理几乎总能为您带来性能提升,并且有多种方法可以实现。更改API中的转换之类的事情非常缓慢且最好避免(如果您使用的是3.0以上,可能不是很大的问题,但它曾经是一个巨大的问题)。