0

最近、GL_TEXTURE_RECTANGLEを使用して小さなテストアプリを作成することに成功しました。現在、それをより大きなプロジェクトに統合しようとしていますが、render関数内でglBindTexture(GL_TEXTURE_RECTANGLE、_tex_id [0])を呼び出すと、GL_INVALID_OPERATIONエラーが発生します。テクスチャ画像がほんの一瞬表示された後、黒くなり、黒のままになることがあります。

頂点シェーダーとフラグメントシェーダーの2つのセット(1つは3Dシーン用、もう1つは2Dオーバーレイ用)を使用してこれを実行しようとしていますが、これまで試したことがないため、それが原因であるかどうかはわかりません。エラー、または私がこれを別の方法で行う必要がある場合。シェーダーはすべてコンパイルされ、正常にリンクされています。

どんな洞察も大歓迎です、そしてそれがいくつかのコードを見るのを助けるならば、私に知らせてください、そして私はそれのいくつかを投稿します(私は誰もが合理的に見るには多すぎるかもしれないと思いますが)。

編集: gDEBuggerはglBindTexture()の呼び出しで中断し、ブレークポイントをクリックすると、プロパティウィンドウに他のテクスチャの1つ(3Dシーンのシェーダーによってロードされているもの)の画像が表示され、ロードしようとしていることが示されますテクスチャ番号1ですが、この番号は、プロパティウィンドウに表示されているのと同じ3Dシーンのテクスチャを描画するためにすでに使用されていることを知っています...なぜglGenTextures()が重複するテクスチャID番号を与えるのでしょうか?これは正常ですか、それとも問題の一部ですか?

4

1 に答える 1

0

黒のテクスチャは、2Dオーバーレイシェーダーで法線を使用していないにもかかわらず、一部の頂点シェーダー入力(法線)をフラグメントシェーダーに転送しなかったことが原因でした。すべての入力に出力を追加し、それらをフラグメントシェーダーに転送するとすぐに、テクスチャは黒ではなくなりましたが、ほんの一瞬で消えていました。これは、レンダリング関数の最後にglBindTexture(GL_TEXTURE_RECTANGLE、0)を呼び出していて、状態がクリーンアップされることを期待していたためです...この呼び出しを削除すると、2Dテクスチャが画面にとどまります。さらに、GL_TEXTURE_RECTANGLEターゲットを使用してglBindTexture()を呼び出すと、テクスチャのセットアップ段階で機能するようです。しかし、レンダリング中にGL_TEXTURE_RECTANGLEターゲットがGL_INVALID_OPERATIONエラーを引き起こしていました。レンダリング関数でのみターゲットをGL_TEXTURE_2Dに変更すると、エラーがなくなり、すべてが正常に機能するようになりました。

于 2012-08-26T01:37:46.920 に答える