2017-07-17 3 views

答えて

3

これはできません。あなたがタイプサンプリングされた画像合成画像サンプラーの記述で設定記述子を使用することができます

  1. :あなたは、シェーダ内の画像をサンプリングしたい場合は、二つの可能性(一般的に)持っています。この方法で、あなたは好きなようにそれに対処することができます。しかし、レンダーパス内の添付ファイルとして機能するイメージは、添付ファイルとして使用される同じレンダーパス内のそのような記述子には使用できません。この目的のために、レンダーパスを終了し、別のパスを開始する必要があります。 2番目のレンダーパスでは、そのような画像を使用して、シェーダー内からそれらの画像をサンプリングすることができます。

  2. イメージをレンダリングパス内の添付ファイルとして使用する場合、同じレンダリングパス内(ただし後のサブパス内)でイメージをサンプリングする場合は、入力添付ファイル記述子(シェイダー内のsubpassInput)この方法で、レンダリングパスを終了して別のパスを開始する必要はありませんが、フラグメントシェーダの座標に関連付けられた位置のみをサンプリングできます。

    この制限は、レンダリングが非常に平行であるという事実に起因します。次のサブパスの一部は、前のサブパスのすべての操作が完了する前に処理が開始されている可能性があります(タイルドレンダラーについて考える)。また、以前のサブパスでレンダリングしていたイメージからデータを読み込み、イメージの一部でこのレンダリングがまだ終了していない場合は、値が正しくない可能性があります。そのため、レンダリングパス内(入力添付ファイルを使用する場合)から単一の場所からのみ読み取ることができます。

これらの制約を解除する拡張機能がありますが、そのような拡張機能については読んでいないことがあります。コア仕様では、上記の2つのオプションのみが許可されます。

+0

出力に2つのポストエフェクトを適用したいと思います。最初のポストエフェクトは、フラグメントシェーダでレンダリングされた出力と一緒に再生され、2番目のポストエフェクトはイメージを反転します。最初のサブパスでは、私は最初のポストエフェクトを達成することができます。 2番目のサブパスにはそれを達成する方法がありますか?私がテクスチャに対処できない場合は、色を書き込むことができる場所を変更できますか? –

+1

@abhijitjagdale:いいえ。レンダリングパスを破る必要があります。 OpenGL ESでこのようなやり方をしたとき、あなたはあなたのパフォーマンスをかなり犠牲にしたことに注意してください。 Vulkanはこれが安い操作であると考えて離れさせません。 –

+0

私はビューポートを反転させ、表示された画像を反転させる拡張機能があると思います。しかし、これは拡張機能なので、すべてのデバイスでサポートされているわけではありません。コアスペックを使用する新しいレンダーパスを開始するか、計算シェーダーを使用してイメージを反転する必要があります。 – Ekzuzy

関連する問題