2016-12-05 7 views
0

テクスチャに情報を保存して更新したい。つまり、私は現在の情報で新しいテクスチャを作成するという考えです。それをレンダリングプロセスに格納する間、私は実際には同じピクセルから情報を読み込み、両方の値の加重平均を保存したいと考えています。したがって、そのピクセルにレンダリングされた値と既にそのピクセルにあった値。1つのテクスチャで読み書きする(OpenGL)

今私は同じテクスチャで読み書きできないことが非常によく読まれます。今私の質問は、おそらく可能かもしれないということですか?レンダリングステップの前にテクスチャ情報をコピーして、シェーダに渡す必要がありますか?もしそうなら、どのようにテクスチャをコピーできますか?コピーのために余分なレンダリングステップを行う必要がありますか?

答えて

2

私はミックス方程式

  • アルファブレンディングによっては、ここでは2つの可能なオプションを参照してください。使用式はglBlendFunc機能の一つにマッピングすることができる場合、これは移動するための方法です。保存した値と新しい値に線形因子を使用する場合は、これが可能でなければなりません。これは最高のパフォーマンスが期待できるオプションです。

  • イメージロードストア:このメソッドを使用すると、同じテクスチャを同時に読み書きできます(see here)。ここでのパフォーマンスは通常非常に悪く、同じ場所の複数のフラグメントが常に正しい値を読み取るように、イメージのアトミック操作を使用する必要があります。

あなたが画像をレンダリングして、後でそれを1つの加重平均計算を行う場合には、私の意見では、唯一の仕事とテクスチャをコピーする(そうでない場合は、各ストア操作の後にテクスチャをコピーする必要があります)。しかし、これが当てはまる場合、平均計算の結果を異なるテクスチャに簡単にレンダリングし、入力データをコピーするすべての手間を完全に回避することができます。

0

オプションを使用する場合は、NV_texture_barrierを使用して同じテクスチャからの書き込みと読み取りが可能です。

+0

または、[1年以上前から存在していた]コア[テクスチャバリア機能](https://www.opengl.org/wiki/Memory_Model#Texture_barrier)を使用することができます。 –

関連する問題