我对OpenGL ES2.0有点困惑,我找不到任何关于处理2D砖块的正确过程的权威信息(或者我可能已经知道了,我也不明白)。
现在,我有一些基于画布的游戏(其实并不像人们说的那么糟糕,我在一个1 1GHz的CPU上得到了30-40之间的FPS ),而且性能很好,但是我有一些新的想法,我认为OpenGL是我展示我的炫目特效所需要的唯一方法。
我有一个包含数千个小时的GameEngine,所以我有点不愿意做巨大的架构更改,只为了“测试”是否可以避免它(特别是因为我对OpenGL并不熟悉,也没有时间花一个月的时间来获得最高性能(time = money) )。
我知道纹理转换是非常昂贵的。并且已经有了一个保持纹理区域在单一纹理上的系统。我还跟踪哪些对象在屏幕上,所以只有绘制调用是必要的,以显示现场将发送到GPU。
因此,我有大量的瓷砖/图层在屏幕上,必须重新绘制每一帧。最好是:
要在屏幕上重新定位对象,我应该是glTranslate (我知道这会给GPU带来压力)还是更新保存四坐标的FloatBuffer会更好呢?
谢谢你一吨!
发布于 2013-01-20 22:53:27
首先,如果您使用的是OpenGL es2.0,那么glTranslate()是不可用的;它仅在OpenGL es1.x中得到支持。
最好的解决方案将取决于您正在使用的平台。特别是,GPU的底层图形体系结构(无论是即时渲染系统还是平铺渲染系统)将决定你可以在场景中获得多少次绘图调用。由于OpenGL ES没有四边形基元(例如,GL_QUADS,您可以在桌面的兼容性配置文件中使用),所以您需要绘制一系列三角形(每个三角形条,每个三角形条都需要自己的绘制调用),或者作为一组独立的三角形集合,每对三角形组成一个四角(这种模式可以转换更多的位置,但减少了绘制调用的次数),或者如果您可以在1.建议中这样做,并跟踪所有使用相同纹理的四边形,你可以画一个带退化三角形的长三角条(那些面积为零的三角形,不会被栅格化到屏幕上)。这将需要更多的几何工作,但可以减少你需要做的纹理交换的数量。
最后,对于更新顶点位置缓冲区的问题,这也将是一个依赖于平台的解决方案,但是,无论如何,还是要使用顶点缓冲区对象(VBO)。几乎所有的移动GPU都将受益于以这种方式存储的顶点数据。
https://stackoverflow.com/questions/14407183
复制相似问题