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

FramebufferObject挙動違い

NVIDIAとAMD*1でFramebufferObject使用時に若干動作が異なる模様です。

*1 : ATIブランドを廃止して、AMDになっていくとのことなので、今後AMD製RADEONと表記したりすることにします

■発生現象

NVIDIA製グラフィックボード時は、デプステクスチャをセット時にでも
デプス判定を行って描画することができる。
しかしながら、AMD製グラフィックボード時はデプステクスチャを設定したときに挙動がおかしくなる。
デプス判定が行われていない風な感じに。
このとき、Framebuffer Objectの状態はcompleteのままなので謎である。

■実装コード

[cpp]
glBindTexture( GL_TEXTURE_2D, depthTex );
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8_EXT, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
glBindFramebuffer( GL_FRAMEBUFFER, fbo );
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, depthTex, 0 );
[/cpp]

こんな感じでデプステクスチャ生成、FBOにセットしています。
ちなみにカラー用テクスチャもRGBA8形式にて生成してセット済みという前提です。

このコードでNVIDIAでしか正常に動かなかったりします。

■AMDではどうするか?

Renderbufferを使用するという手もあります。
試しにデプステクスチャをやめて、レンダーバッファにしてみたところ
NVIDIAでもAMDででも正常に動作しました。

動作チェックは必要になりますが、デプス用にレンダーバッファとテクスチャと両方設定してしまうってのはありなのかなぁ?

OpenGL環境では、デプス用テクスチャをそのまま使いたいとかそんな要求きっとあると思うのでなんとかしたいところではあります。

OpenGLプログラミング
すらりんをフォローする
すらりん日記

コメント

タイトルとURLをコピーしました