2012-04-22 16 views
0

SDK GLES10を使用してAndroidゲームを開発していますが、Samsung Galaxy Aceのような優れた携帯電話ではパフォーマンスに関する問題が発生しています。だから、私はNDKに移植することを考えていましたし、少なくともCPU時間が最も長いレンダリング部分であるGLES20を使うようにすることもできます。Android SDK GLES 1.0からNDK GLES 2.0にゲームを移植しますか?

は(ギャラクシーS2にそれは90と20 FPSの間で変化する銀河エースに、一定の61 FPSで実行され、ほとんどの時間吃音される)の両方ギャラクシーS2とギャラクシーに

最もCPU時間consumnig方法をエースはGLES10.glDrawElements(),GLES10.glVertexPointer(),GLES10.TexCoordPointer()です。 Aceで使用されたCPU時間の85%、S2で82%のようになります。

パフォーマンスが大幅に向上しますか1.レンダリングにNDKを使用し、2. GLES20に移植しますか?

+0

おそらく、遅い理由を調べるためにコードを最初にプロファイリングする必要があります。また、GLES1からGLES2に変更しても、自動的にパフォーマンスが向上することはありません。 GLES2と同じことをGLES1と同じにすると、perfは同じになります。 – Tim

+0

私はすでにこれを行っていますが、レンダリングは私の質問でも述べたようにボトルネックです...そして、GLES20でも同じことをすることはできません.GLES20のコードとはGLES10のコードとはかなり異なっています –

+1

コード行あなたは独自のシェーダを書く必要がありますが、シェーダが固定機能パイプラインの機能をエミュレートするだけであれば、GPUが行っている作業は同じように出てくるでしょうし、 GLES2に準拠したGPUでGLES1コードを実行すると、おそらくすでに裏でシェーダが使用されている可能性があります。 – Tim

答えて

1

これは実際にあなたが何をしているかによって変わってきます。

私は、の具体的なのボトルネックを見つけました。 「レンダリング」がボトルネックであると言うと、あまりにも漠然として有用ではありません。

正確にあなたを抱きしめているのは何ですか?

  • SwapBuffers通話時間?
  • OpenGLの状態が多すぎますか?
  • GPUの頂点にバインドされていますか?
  • GPUフィルレートバインド?

NDKを使用すると、GPUが制限要因であるかどうかによって、NDKを使用した場合の回答に応じて、または役に立たないことがあります。

NDKを使用すると、オーバーヘッドが少ないGPUへのコールを手助けすることができますが、それが実際にあなたを後押ししているかどうかはわかりません。

まだDDMSトレースビューを使用していない場合は、ほとんどの時間が経過していることを確認してから、重要な書き換えの問題を踏む前に情報に基づいた決定を下すことができます。

+0

ほとんどのCPU時間の節約方法Galaxy S2とGalaxy Aceの両方では、Aceで使用されているCPU時間の85%、S2で82%のように、GLES10.glDrawElements()、GLES10.glVertexPointer()、およびGLES10.TexCoordPointer()アルこれらの情報で質問を更新しました) –

+0

@AndreasLinden:NDKを使用すると、おそらくいくつかの方法(OpenGLコールでSDKのオーバーヘッドが増えます)が助長されます。それは本当に高いパーセンテージのようですが、どのような種類のオブジェクトを描画していますか?いくつかのオブジェクトを組み合わせる方法はありますか? – Tim

+0

hm、私は主にインデックスといくつかの三角形を持つ長方形を描画しています。どちらもGL_TRIANGLESを使っています。私はすでにできるだけ少ない頂点しか持たないようにマップを最適化しました。 –

関連する問題