3

GLES20 コンテキストのみを使用して、サーフェス全体をカバーする 2 つの三角形をレンダリングします。問題は、この方法でテクスチャを 1 つだけ描画すると、不当に遅くなるように見えることです。フレームレートは 58fps から 21fps に低下します。

  • 問題は、すべてのクワッドを一緒に描画した全体的なピクセル領域にあるようです
  • ビットマップは読み込み時に pow2 にサイズ変更されます
  • ビットマップは正しい内部 GL 形式で読み込まれます
  • 8888 または 565 ビットマップを使用しても何も変わりません
  • 頂点シェーダーとフラグメント シェーダー コードの両方が完全に最小限
  • ブレンディングを有効/無効にしても何も変わらない
  • 1 つのタイルまたは複数のタイルにビットマップ全体を描画しても役に立たない
  • glDrawTexiOES が GLES20 で動作しないようです (GL 列挙エラー)

私はここで途方に暮れています。GL で 1 つの画像をブリッティングするのは、少なくとも Canvas で同じことを行うのと同じくらい速いはずだと思いましたが、そうではないようです。

誰かがこのパフォーマンス ヒットのヒントや説明を提供できますか?

アップデート:

EGL コンテキストの代わりにキャンバスをサポートするようにレンダリング スレッドを調整しただけで、まったく同じことを行います。fps テキストを表示し、背景テクスチャをブリットします。何を推測しますか: テキストのみを表示すると 58 fps になり、背景画像を追加すると... 57 fps になります!

今、私は公式に、そして非常に真剣に腹を立てています。私が GLES20 をうまく使うほど頭が良くないことを願っています。3Dで多くの三角形が必要な場合にのみ、OpenGLを使用します。

OpenGL は、少なくとも Canvas が提供する 2D API と同じくらい高速であるべきではありませんか?

4

2 に答える 2

1

これはおそらく、テクスチャ サイズが大きく、mipmap がない (メモリ アクセスを適切に最適化できないため) か、テクスチャが 2 の累乗でない (アドレス計算が難しく、乗算を使用する必要があるため) ことが原因である可能性があります。シフトではありません)。

お役に立てれば ...

于 2012-01-20T09:19:32.517 に答える
0

不快感はありませんが、フルスクリーンテクスチャで58fpsから57fpsに変更しても、それほど悪くはありません。2Dまたは3Dのいずれの場合でも、電話またはタブレットのCPU/GPUは常にフィルレートが制限されます。

于 2012-01-25T21:30:59.407 に答える