Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将游戏从Android SDK GLES 1.0移植到NDK GLES 2.0?_Android_Opengl Es_Android Ndk_Porting - Fatal编程技术网

将游戏从Android SDK GLES 1.0移植到NDK GLES 2.0?

将游戏从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

我目前正在使用SDK GLES10开发一款Android游戏,在三星Galaxy Ace等不太好的手机上,我遇到了一些性能问题。因此,我考虑将其移植到NDK,并可能使其使用GLES20,至少是消耗最多CPU时间的渲染部分

(在星系S2上,它以恒定的61 FPS的速度运行,在星系Ace上,它的速度在90到20 FPS之间变化,并且大部分时间都口吃)


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填充率界限
这取决于使用NDK的答案可能有帮助,也可能根本没有帮助,这取决于您的GPU是否是限制因素

NDK可能会帮助您以较少的开销获得对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