2017-10-04 8 views
1

ベンチマーク:またはglDisable(GL_BLEND):を有する多角形の同じ組のレンダリング時間のAndroidデバイスには、パフォーマンスへの影響

A) glEnable(GL_BLEND); 
    glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

B) glDisable(GL_BLEND); 
    glBlendFunc(GL_ONE, GL_ZERO); 

がイネーブルされるブレンドしたレンダリングが実際にわずかに遅くなることを示しています

  • デスクトップ、OpenGLの2.0
  • レノボP90ProインテルAtom/PowerVRのG6430、OpenGL ESの2.0
ARM-A7と

  • サムスンギャラクシータブ:0

    と私の混乱には、これらのデバイス上でベンチマークすることは有意な差、Iが無効にブレンドしてレンダリングする、と仮定し、意味を示さないパフォーマンス、コストのかかるブレンドと同様に有効にされているようです/ ARM-A57 /副腎と

  • ソニーのXperia Z3 +オンボードクアルコム副腎305は430

それはなぜですか?違いがあるはずですね、そうですか?使用されているフラグメントシェーダは非常に簡単です:

precision highp float; 
uniform sampler2D tex; 
varying vec4 v_fragmentColor; 
varying vec2 v_texCoord; 

void main() { 
    gl_FragColor = v_fragmentColor * texture2D(tex, v_texCoord); 
} 

申し訳ありませんが、状況の定義があまりにも一般的なものであれば、それはSOの質問に適合するのに適した、最小限の作業サンプルを生成するために、かなり難しいです。私はここに、私が行方不明になっているいくつかの知られている悪夢があることを願っています。

ps:テストされたすべてのデバイスで、結果としてイメージは予期されたとおりに見え、ブレンドが有効な透過領域と無効の場合は不透明な黒が表示されます。全体の問題は単にパフォーマンスに関するものです。

+0

どのように測定しましたか? –

+0

私はグラフィックス、GPUなどの専門家ではありませんが、「ブレンドが無効の_renderingは、ブレンドが有効な場合と同様にパフォーマンスが高くなります」と表示されます。「ブレンドが有効な_レンダリング」は、 **(a)**より良い(それはプラス、問題ではない)、**(b)**は私には、[それらのデバイスで]ハードウェアが利用可能であることを示唆しているブレンド "はレンダリングの通常の部分として、それを使用することは事実上自由です。 – TripeHound

+0

いずれの場合も、ドライバ/ハードウェアの制限である60 fpsが表示されます。つまり、性能の違いを見るのに十分なほどgpuを読み込まないということです。違いを見るために何千もの画像をレンダリングしてみてください。 – Dave

答えて

0

あなたが言及しているプラ​​ットフォームについての知識がなくても、私は自分の経験によって、それほど多くないとは言えません。場合によっては、コードやhwの分岐が冗長な操作よりも遅くなることがあります。たとえば、glDisable(GL_BLEND)を選択すると、実際には無効になっているように、ドライバはfuncパラメータとeqパラメータを設定して無効になるように設定するかもしれません。ベンダーが最適化しようとしていたものに依存します。 「最悪の場合」はしばしば最適化するのが最善ですが、一般的なケースもよくあります。珍しいものや性能が低いものを最適化することは、めったに努力する価値がありません。

私はプラットフォームで30〜50%高速にテクスチャを使用可能にし、無効にするよりも、プリミティブな色で1x1の白いピクセルのテクスチャをブレンドしました。それは最初は心配でしたが、私はそれについて考えたところ、プラットフォームはラスターマップをほぼ10年にわたって連続的に最適化していました。

関連する問題