3

特定のカスタマイズされたアルゴリズムを使用して、一部のレンダリング可能なテクスチャ (R16F & RGBA16F) のミップマップを生成したいと考えています。

必要なすべてのテクスチャのミップマップは、glGenerateMipmapEXT() を使用して事前に有効化されています。

これまでの最大の問題は、1+ ミップマップ レベルにレンダリングすることです。 より正確には、これは魅力のように機能します。

...
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, target, texType, texId, 0 );
checkFBOStatus();
...
render();

しかし、これにより、fboステータスを確認するときにGL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXTが表示されます

...
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, target, texType, texId, 1 );
checkFBOStatus();
...
render();

コードのすべての違いは、テクスチャを FBO にアタッチするためのロッド レベル パラメータです。

熱狂的な頭をひっかいた後も、まだうまくいきません。ですから、どんな答えでも大歓迎です。

[注: ターゲット プラットフォームは、FBO 拡張機能を備えた OpenGL 2.x です]

4

2 に答える 2

2

問題が解決しました


FBO が不完全な理由は、テクスチャの一貫性によるものです。glGenerateMipmapEXT/glGenerateMipmap を使用する場合、テクスチャのベース レベルにVALID DATAが含まれていることを確認する必要があります。それ以外の場合、その呼び出しはエラー通知なしで失敗します。

参考までに考えられる解決策は 2 つあります。

  1. TexImage または TexSubImage を使用して、glGenerateMipmap の前にレンダリング可能なテクスチャを塗りつぶします

  2. glGenerateMipmap の前に、レンダリング可能なテクスチャをダミー FBO にアタッチします。

どちらでも動作します (GF8、GF9 でテスト済み) ATI カードではテストされていません。

誰かが ATI GPU でテストできるなら、それは素晴らしいことです。

PS。これらのソリューションの使用に問題がある場合はお知らせください。

于 2010-02-16T04:07:46.420 に答える
0

うわー、私は ATI Radeon 9800 で同じ問題を抱えています。しかし、gltexImage2D で呼び出しを行いました。

最初のレベルへのレンダリングは可能ですが、他のレベルへのレンダリングはできません。ダミーのFBO方式を試してみるといいかもしれません。

于 2010-03-05T11:12:05.637 に答える