2012-03-22 16 views
1

image2Dとsampler2Dと同じテクスチャを使用することは合法ですか?OpenGL 4.2では、画像と同じテクスチャをサンプラとして使用します。

現在、GLSLシェーダ内でimageLoad()およびimageStore()を使用して、image2Dから書き込みおよび読み込みを行います。しかし、私はテクスチャのいくつかのミップマップレベルからも(書き込みではなく)読みたいですが、これはimageLoadではサポートされていません(それぞれのmipMapレベルを個別のimage2Dとしてバインドする必要がありますが、かなり限られている)。ですから私の質問は、imageLoad()用のimage2Dとして使用するのと同じテクスチャをtextureLod()で使用するsampler2Dとしても使用できますか?

答えて

1

法的?はい。明確に定義されていますか?それは彼らと何をしているのかによって異なります。

イメージに書き込んだり、テクスチャからミップマップをサンプルしたりするとします。あなたが書いたのと同じミップマップからサンプリングしていますか?もしそうなら...それは問題になるだろう。テクスチャのアクセスはcoherantである必要はありませんので、これが動作するという保証はありません。明示的なCPUなしでは、書き込まれた時間とそれがサンプリングされる時間との間の呼び出し。また、CPUの介入が必要なため、同じシェーダ内で実行することはできません。

は、に書かれていないミップマップからのサンプリングを防止するための保護を提供していれば、「あなたが使っているすべてのシェーダ呼び出し」という意味になります。 textureLodを使用するか、テクスチャなどのBASE_LEVELを設定しても問題ありません。

+0

現在、ミップマップはまったく使用していません。私はimage2Dとして使用するのと同じテクスチャをsampler2Dとして使用しようとしています(imageLoadとimageSaveを使用する前に、今はtexelFetchでimageLoadを再開したい)。しかし、サンプラー上でtexelFetchを使用すると(前のimageLoadと同じ座標で)、私はただ黒くなります。 – user1282931

+0

@ user1282931:「それは問題になるだろう」のどの部分を理解できませんでしたか?私はあなたのためにそれを綴りましょう:あなたは*これをすることはできません。それは実際に動作するので(単にあなたが適切なメモリの壁などを持っていると仮定して) 'imageLoad'を使用してください。 1回のパスで –

+0

、私は決して同じテクセルから読み書きします。私はいつも特定のピクセルを読んだり、書き込んだりするだけです – user1282931

関連する問題