2016-05-18 10 views
1

GLSLのマルチサンプルテクスチャにsampler2DMSでアクセスすると、このマルチサンプルテクスチャのテクセル内のどのサンプルが実際にカバーされているかをどのように知ることができますか?GLSLアクセスカバレッジのsampler2Dテクセル

"...各ピクセルフラグメントは、整数xとyのグリッド座標、色、SAMPLES_ARB深度値、テクスチャ座標、最大SAMPLES_ARBビットのカバレッジ値で構成されています。

私がアクセスしたいのは、テクセルのカバレッジ値です。現在処理されているFRAGMENTのカバレッジ値を書き込むために使用できるgl_SampleMask(https://www.opengl.org/sdk/docs/man/html/gl_SampleMask.xhtml)がありますが、マルチサンプルテクスチャからフェッチしているTEXELのカバレッジ値にどのようにアクセスできますか?

答えて

3

マルチサンプリングの考え方は、マルチサンプル画像にレンダリングするときに、ピクセルサイズの領域ごとにフラグメントシェーダを1回だけ実行することです。ラスタライザによって生成されたカバレッジマスクは、ピクセル内のどのサンプルがフラグメントの出力に行くかを決定します。

しかし、一度そのプロセスが完了すると、フラグメントシェーダがそのデータを書き込むと、マルチサンプル画像自体がには、これらのカバレッジマスクが何であるか全く分かりません。マルチサンプルテクスチャはテクセル当たり複数のサンプル値を持つだけです。フラグメントによってどのサンプルがどのサンプルマスクを生成したのかは分かりません。

サンプルマスクはレンダリングの一部に過ぎません。

このように考える。データが元々から来ている可能性があり

for(int sample_ix = 0; sample_ix < SAMPLE_COUNT; ++sample_ix) 
{ 
    if(sampleMask[sample_ix]) 
    pixel[sample_ix] = output; 
} 

pixelさん:これと同等のものをやった、

vec4 pixel[SAMPLE_COUNT]; 

あなたのフラグメントシェーダ、あなたはマルチサンプルテクスチャにレンダリングされた:これは、マルチサンプルテクスチャのピクセルでありますサンプルマスク。しかし、pixelはこれが起こることを知らない。それはちょうどvec4値の配列です。

現在のフラグメントのカバレッジ値を取得できます。しかし、これは、マルチサンプルテクスチャ内のピクセルを最初に構成するために使用された実際のカバレッジ値とは無関係です。

+0

ありがとう、Nicol、これは非常に明確で分かりやすい説明です!関連する質問として、マルチサンプルテクスチャ内のテクセルのサンプルがすべて同じかどうかを簡単に(反復せずに)チェックすることは可能ですか? – user1282931

+0

@ user1282931:Nope;)それはいいかもしれませんが、その情報を保存していないだけです。 –

関連する問題