将游戏从Android SDK GLES 1.0移植到NDK GLES 2.0?
我目前正在使用SDK GLES10开发一款Android游戏,在三星Galaxy Ace等不太好的手机上,我遇到了一些性能问题。因此,我考虑将其移植到NDK,并可能使其使用GLES20,至少是消耗最多CPU时间的渲染部分 (在星系S2上,它以恒定的61 FPS的速度运行,在星系Ace上,它的速度在90到20 FPS之间变化,并且大部分时间都口吃)将游戏从Android SDK GLES 1.0移植到NDK GLES 2.0?,android,opengl-es,android-ndk,porting,Android,Opengl Es,Android Ndk,Porting,我目前正在使用SDK GLES10开发一款Android游戏,在三星Galaxy Ace等不太好的手机上,我遇到了一些性能问题。因此,我考虑将其移植到NDK,并可能使其使用GLES20,至少是消耗最多CPU时间的渲染部分 (在星系S2上,它以恒定的61 FPS的速度运行,在星系Ace上,它的速度在90到20 FPS之间变化,并且大部分时间都口吃) Galaxy S2和Galaxy Ace上的大多数CPU时间消耗方法是GLES10.glpaurements(),GLES10.glVertexPoi
Galaxy S2和Galaxy Ace上的大多数CPU时间消耗方法是
GLES10.glpaurements()
,GLES10.glVertexPointer()
和GLES10.TexCoordPointer()
。在Ace上使用了85%的CPU时间,在S2上使用了82%的CPU时间
它是否会将性能大幅提高到1。使用NDK进行渲染和2。将其移植到GLES20?这实际上可能只是取决于您已经在做什么 我会寻找特定的瓶颈。说“渲染”是一个瓶颈太模糊了,没有用处 到底是什么阻碍了你
- SwapBuffers的通话时间李>
- OpenGL状态更改过多
- GPU顶点绑定李>
- GPU填充率界限李>
如果您还没有使用DDMS traceview,请尝试使用它,看看您的大部分时间都花在了哪里,然后您就可以在经历重大重写之前做出明智的决定 也许你应该先分析一下你的代码,看看它为什么慢。同时,从GLES1更改为GLES2不会自动产生任何性能提升。如果你在GLES2中做与GLES1相同的事情,性能将是相同的。我已经做了,渲染是瓶颈,正如我在问题中所说的。。。顺便说一句,你不能“在GLES20中做同样的事情。为GLES20编写代码与为Gles10编写代码非常不同。代码行可能不同,但做同样的事情很容易”“。您必须编写自己的着色器,但如果着色器只是模拟固定函数管道所做的,那么GPU所做的工作将是相同的,除非您彻底更改渲染管道。如果您在兼容GLES2的GPU上运行GLES1代码,那么它可能已经在幕后使用了着色器。那么使用NDK会带来性能提升吗?Galaxy S2和Galaxy Ace上的大多数CPU时间消耗方法都是
GLES10.glpaurements()
,GLES10.glvertextoner()
和GLES10.TexCoordPointer()
。就像Ace上使用的85%的CPU时间和S2上使用的82%的CPU时间一样(也用这些信息更新了问题)@AndreasLinden:使用NDK可能会有助于解决某些问题(opengl调用在SDK中的开销更大),但如果能找到某种方法减少这些调用的数量,可能会更好。这似乎是一个很高的百分比,你在画什么样的对象?有什么方法可以把一些对象组合在一起吗?嗯,我主要是画带索引的矩形和一些三角形,两者都使用GL_三角形。我已经优化了我的贴图,使其具有尽可能少的顶点。@AndreasLinden如果它受CPU限制,您应该尝试优化它们,使其具有尽可能少的对象(绘制调用)。例如,将多个对象放在一个glpaurements
调用中。不要为每个单独的矩形或诸如此类的东西发出glpaurements
。@ChristianRau如何将多个对象传递给glpaurements
?