FramebufferObject挙動違い -その2-

AMD製グラフィックボード時でも正常動作できる組み合わせを発見しました。テクスチャの生成時がポイントです。

■解決方法(AMDオンリー)

[cpp]
glTexImage2D(
GL_TEXTURE_2D, 0,
GL_DEPTH_COMPONENT16,
TEXTURE_WIDTH, TEXTURE_HEIGHT, 0,
GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, 0 ); //< ATI用 [/cpp] これを従来通りにFramebufferObjectにデプス用としてアタッチしてあげると、 正常に動作することができました。

■問題点

このコード、AMD製カード搭載時はうまくいくのですが、
NVIDIA製カード搭載時にはうまく動作しないのです。

■解決方法

前述の方法を発展させて、NVIDIA/AMD双方で動く設定を以下に示します。
やはりテクスチャの作成がポイントです。

[cpp]
glTexImage2D(
GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24,
TEXTURE_WIDTH, TEXTURE_HEIGHT, 0,
GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0 );
[/cpp]

このコードを見て、「あぁNVIDIAはデプス D24以上しか対応してなかった」と思い出しました。
D16とかNVIDIAでは使えないんですよね。

■懸念点

この方法だとStencil使いたくなったときに、もう1枚テクスチャが必要に。
さてさて、どうするか。
packed depth stencilの拡張が何かあったけど、これがテクスチャで使えたりしないだろうか。
要調査と言うことで。

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

コメント

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