[解決済み] OpenGLのプログラム性能に廃棄は不利か?
質問
を読んでいました。 これ の記事で、著者はこう書いています。
2つの簡単なステップで、あらゆるプラットフォームで高性能なアプリケーションを書く方法を紹介します。
[...]
ベストプラクティスに従うこと。AndroidとOpenGLの場合、これにはquot;batch draw calls"、"discard in fragment shaders"などのようなことが含まれます。
ディスカードがパフォーマンスに悪い影響を与えるなどということは今まで聞いたことがなく、細かいアルファが必要でないときにブレンドを避けるために使っていました。
どなたか、discardを使用することが悪い習慣と考えられる理由やタイミング、discard + depthtestとalpha + blendの比較について説明していただけませんか?
編集 この質問に対する回答を受け取った後、私は背景のグラデーションをレンダリングし、その上にテクスチャを貼った四角形をレンダリングすることでいくつかのテストを行いました。
-
GL_DEPTH_TEST と " という行で終わるフラグメントシェーダを使用します。
if( gl_FragColor.a < 0.5 ){ discard; }
については、以下のようになりました。 32 fps . - フラグメントシェーダーからif/discardステートメントを削除すると レンダリング速度が 44 fps .
- GL_BLEND をブレンド関数 "(GL_SRC_ALPHA.) と共に使用する。 GL_ONE_MINUS_SRC_ALPHA)" の代わりにGL_DEPTH_TESTを使用した場合にも、以下のような結果になりました。 44 fps .
解決方法は?
ハードウェアに依存します。PowerVR ハードウェアや、タイルベースのレンダリングを使用するその他の GPU の場合は
discard
これは、TBRが、描画されたすべてのフラグメントがピクセルになることをもはや仮定できないことを意味します。この仮定は、TBRがすべての深度(depth)、すなわち、1つのピクセルにつ いて評価することを可能にするため、重要である。
第一
その後、最上位のフラグメントに対してのみフラグメントシェーダを評価します。ハードウェアを除けば、一種のディファード・レンダリング・アプローチです。
アルファテストをオンにすると、同じ問題が発生することに注意してください。
関連
-
[解決済み】Android - SDKバージョン23のアップデート後、ACTION-VIEWインテントフィルタを持つアクティビティを少なくとも1つ追加する。
-
[解決済み] 現在のテーマでスタイル 'coordinatorLayoutStyle' を見つけることができませんでした。
-
[解決済み】Android Studioの初回起動。Android SDKアドオンリストにアクセスできない
-
[解決済み】'dependencies' を '(groovy.lang.Closure)' に適用できない。)
-
[解決済み] TypeError: cb.apply は関数ではありません。
-
[解決済み] BIOSのセキュリティ設定でVT-xを有効にする(お使いのコンピュータのドキュメントを参照)。
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] Android Fragment no view found for ID?
-
[解決済み] AndroidでBluetoothが有効かどうかのチェックに失敗する(REQUEST_ENABLE_BTを変数に解決できない)。
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッケージ名(Google Analytics)に一致するクライアントが見つからない - 複数のproductFlavorsとbuildTypes
-
[解決済み】Edit Textのandroid:ems属性とは何ですか?[重複しています]
-
[解決済み】java.lang.RuntimeException: アクティビティを開始できない ComponentInfo
-
[解決済み] [Solved] Error "File google-services.json is missing from module root folder. これがないとGoogle Services Pluginは機能しません" [重複]。
-
[解決済み】リストビューにonclicklistenerを追加する(android)
-
[解決済み】Android Studioで最新バージョンのgradleを使用する方法
-
[解決済み】アクティビティにない場所でのgetLayoutInflater()の呼び出し
-
[解決済み】Couldn't load memtrack module Logcat Error
-
[解決済み] com.android.supportのライブラリは全て全く同じバージョン表記である必要があります。
-
[解決済み] APKのインストール中にDELETE_FAILED_INTERNAL_ERRORエラーが発生する。