私は以前、次のようなことをして画像ユニットの色の値をブレンドしたいという問題をすでに抱えていました。
vec4 texelCol = imageLoad(myImage, myTexel);
imageStore(myImage, myTexel, texelCol+newCol);
複数のフラグメントが「myTexel」に同じ値を持つ可能性があるシナリオでは、imageLoadコマンドとimageStoreコマンドの間にアトミック性を作成できず、他のシェード呼び出しによってその間のテクセルカラーが変更される可能性があるため、これは明らかに不可能です。
今、誰かが私に、シェーダーがテクセルにアクセスする前にしばらくループで待機し、フリーになるとすぐに整数をアトミックに書き込むように、uintテクスチャでアトミックコマンドを使用してセマフォを作成することで、この問題を回避していると言いましたテクスチャを使用して他のフラグメントシェーダーの呼び出しをブロックし、カラーテクセルを処理し、終了したら整数テクセルを再びアトミックに解放します。
しかし、これが実際にどのように機能するのか、そしてそのようなコードがどのように見えるのかについて頭を悩ませることはできませんか?
これを行うことは本当に可能ですか?GLSLフラグメントシェーダーをwhileループで待機するように設定できますか?可能であれば、誰かが例を挙げてもらえますか?