0

「深刻な」(ゲームではない) Android アプリに OpenGL を追加するトレードオフはありますか?

私が OpenGL を使用したい理由は、いくつかのビューに 3D 動作を追加するためです。

このhttp://developer.android.com/guide/topics/graphics/opengl.htmlによると、OpenGL 1.0 はすべての Android デバイスで利用でき、マニフェスト ファイルを変更する必要はありません。したがって、互換性の問題は決してありません。

私が考えることができる唯一の2つのことは、1. OpenGLできない他の開発者による保守性です。可能性 2. 他のコンポーネントとの統合の問題 / 十分に再利用できない (確かではありませんが)。

他にも、予期しないこと、ある種のオーバーヘッド、合併症などはありますか?

あまり一般的な慣行ではないように思われるので尋ねると、人々は 3D を 2D で「偽造」するか、それを放棄することを好むようです。彼らが OpenGL を学びたくないという理由だけなのかどうかはわかりません。

4

2 に答える 2

0

リリースされたアプリの一部の視覚化に OpenGL を使用しています。GLThread からの例外をキャッチし、次にアプリを実行するときに OpenGL を無効にするために、キャッチされていない例外ハンドラーを配置しています。これは、GLSurfaceView の内部でいくつかのクラッシュ レポートがあったためです。バグの多いデバイスから入ってくる.java。3D レンダリングがアプリにとって重要でない場合、これらのデバイスを使用するユーザーがアプリを引き続き使用できるようにするために、これが 1 つのアプローチになります。

Android 3.0 以降では、GLSurfaceView を呼び出して EGL コンテキストを保持することもできます。setPreserveEGLContextOnPause(true);. レンダラーの初期化に非常にコストがかかる場合にのみこれを行う必要があり、その間に GLSurfaceView を破棄しない場合 (つまり、デバイスを回転させるときのアクティビティのデフォルトの動作) にのみ機能します。多くのリソースをロードしていない場合、OpenGL の初期化は通常十分に高速です。

于 2013-02-22T02:35:09.987 に答える
0

SurfaceView ドキ​​ュメントから(強調鉱山):

サーフェスは、SurfaceView を保持するウィンドウの背後にあるように Z オーダーされます。SurfaceView はウィンドウに穴を開けて、その表面を表示できるようにします。ビュー階層は、通常はその上に表示される SurfaceView の兄弟を Surface と正しく合成する処理を行います。これは、Surface の上にボタンなどのオーバーレイを配置するために使用できますが、Surface が変更されるたびに完全なアルファブレンド合成が実行されるため、パフォーマンスに影響を与える可能性があることに注意してください。

利点は、GL スレッドが UI スレッドとは独立して画面を更新できることです (つまり、テクスチャにレンダリングし、テクスチャを画面にレンダリングする必要はありません)。欠点は、ビューと画面を合成する必要があることです。運が良ければ、これは「ハードウェア コンポーザー」で実行できます。それ以外の場合は GPU で行われ、GPU リソースを少し浪費する可能性があります ( 27:3240:23の Android UIのパフォーマンスの平滑化をご覧ください)。

ビューが小さい場合は、TextureViewを使用することをお勧めします。これにより、テクスチャがレンダリングされ、テクスチャが通常のビュー階層の一部としてレンダリングされます。これはより良いかもしれませんが、レイテンシが増加する可能性があります。欠点は、API レベル 14 以降でしか利用できないことです。

于 2013-02-22T03:45:28.427 に答える