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の拡張が何かあったけど、これがテクスチャで使えたりしないだろうか。
要調査と言うことで。
コメント