1

次のようなテクスチャを生成します。

GLuint id;

glGenTextures(1, &id);

glBindTexture(GL_TEXTURE_2D, id);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexImage2D(
    GL_TEXTURE_2D, 0,
    GL_RGBA16,
    //GL_RGBA16F_ARB, //< Won't work
    256, 256, 0, GL_RGBA, GL_FLOAT, NULL
);

glBindTexture(GL_TEXTURE_2D, 0);

レンダリング用にフレームバッファオブジェクト(FBO)にアタッチします。内部形式をに設定すると、これらすべてが魅力のように機能しますGL_RGBA16。しかし、私はより高いダイナミックレンジが必要であり、それでうまくいくGL_RGBA16F_ARBかもしれないと考えていました。

残念ながら、上記のコードでに置き換えるGL_RGBA16と、テクスチャが機能しなくなったようです。GL_RGBA16F_ARBFBO /テクスチャスティックにレンダリングしようとするものは何もありません。テクスチャを使用すると、ランダムなゴミが含まれます。(紫が多いのですが)何が悪いのかを示唆するエラーメッセージが表示されていれば、それほどイライラすることはありませんが、見つからないようです。つまり、-callの後にglGetError()戻り、テクスチャをアタッチすると戻ります。0glTexImage2DglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)GL_FRAMEBUFFER_COMPLETE_EXT

私はまだいじっていglClampColorARB(...)ません...まだ:)

  1. 思いもよらなかった場所・道の間違いをチェックするのを忘れてしまいましたか?
  2. -texturesGL_RGBA16F_ARBには、私が行っていない特別な処理が必要ですか?
  3. 他に間違っている可能性のあるものはありますか?

すべてがスムーズに動作するので、私は困惑していGL_RGBA16ます... :(

編集:を使用GL_RGBA16F_ARBすると、画面にレンダリングしようとした最初のフレームが作成されません。どこかでエラーメッセージが表示されるはずです。

編集: ShadowIceの動作するコード例を調べることにより、FBOの深度バッファーglRenderBufferStorageEXT(...) GL_DEPTH_COMPONENT24を変更すると問題が解消され、2番目のパラメーターとしてではなくを指定することがわかりましたGL_DEPTH_COMPONENT16なぜこれが機能するのかわかりませんが、どうやら機能しているようです。

また、ShadowIceのコードは、そこで反対の置換を行うと私のように壊れます。

4

2 に答える 2

4

フロート テクスチャを使用してフレーム バッファを設定するために特別なことを行う必要はありません。私がチェックするいくつかのこと:

  1. glCheckFramebufferStatusEXT を呼び出す前に、FBO がバインドされ、描画/読み取りバッファーが正しく設定されていますか? また、描画する直前にテストしてみてください。
  2. 特定のクリア カラーを使用した単純な glClear の後、テクスチャは問題ないように見えますか? はいの場合、シェーダー (使用している場合) または FBO への描画方法に問題がある可能性があります。
  3. ドライバは最新ですか? また、別のハードウェアを搭載した PC でも問題は解決しますか?
  4. GL_RGBA32F_ARB はどうですか?

編集:

  1. フレームバッファとテクスチャの ID を確認し、テクスチャ ID が fbo にアタッチされているものと一致するかどうかも確認します (glGetFramebufferAttachmentParameteriv を使用)。通常、RGBA テクスチャで動作する場合はすべて問題ないと思いますが、ランダム データ (特に紫) は、テクスチャに何も書き込まれていないか、適切にクリアされていないことを示す良い兆候です。

私は動作するはずの小さなサンプル アプリケーションを作成しました。Windows でのみテストしたので、Linux の場合は少し変更する必要があるかもしれません:リンク

于 2009-03-12T22:35:10.090 に答える
1

GL_HALF_FLOAT_ARB は、GL_FLOAT の代わりに型として機能する場合があります。

于 2009-03-13T08:12:56.737 に答える