本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

FramebufferObject挙動違い -その3-

今回は今までの総合しての解決編になります。
デプスとステンシルを1つのテクスチャでOKとし、
さらにNVIDIAとAMDと双方で問題なく動く、という解法になります。

実装コード

やはりテクスチャの作成がポイントでした。

[cpp]
glTexImage2D(
GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8_EXT,
TEXTURE_WIDTH, TEXTURE_HEIGHT, 0,
GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT, 0 );
[/cpp]

内部フォーマットに D24S8の指定を行い、
ピクセルフォーマットとして、GL_DEPTH_STENCIL_EXTを設定
これに対応する型として GL_UNSIGNED_INT_24_8_EXT を設定

この組み合わせがすべてを解決してくれました。

このデプステクスチャがうまくいったので、
書いた値をファイルに書き出してみました。
こんな感じに記録されており、何らかの値がかかれているのがわかります。
値はちょっとわからないですが、形状からおおむね正しくデプステクスチャに書き込んでいるものと推測できます。

取得する際にはこんな感じで。

GL_DEPTH_STENCIL_EXT GL_UNSIGNED_INT_24_8_EXT
GL_DEPTH_COMPONENT GL_UNSIGNED_INT

組み合わせを間違えるとうまく値がとれません。
デプス確認するだけなら、下段の書き出し方法のほうが見やすいかも。

OpenGLプログラミング
すらりんをフォローする
すらりん日記
タイトルとURLをコピーしました