1

1 つのプログラム (つまり、1 つの頂点シェーダーと 1 つのフラグメント シェーダー) で適切に描画される複数のオブジェクトを生成しました。これらはすべて同じコンテキストで実行されます。別のオブジェクトを追加したいと思い、それを別のプログラムで使用したいと考えました。

したがって、、、、、、およびいくつかの統一コマンドを呼び出す前にglActiveTexture()適切glBindTexture()なプログラム ID を使用して呼び出します。glBindBuffer()glBufferData()glEnableVertexAttribArray()glVertexAttribPointer()glUseProgram()

その結果、両方の種類のオブジェクトが描画される場合、何も描画されません。最初のプログラムで動作するオブジェクトを無効にすると、新しいオブジェクトが適切に描画され、その逆も同様です。

プログラムを切り替える際の注意事項を教えてください。

ありがとう。

編集:さらに調査したところ、消費されて印刷されなかったために見落としていたOpenGLエラーがスローされたことに気付きました(grrr)。結局のところ、これは OpenGl の間違いではなく、rubymotion の問題でした。(最初はそうは思いませんでした。) Rubymotion のガベージが OpenGL プログラムを収集しましたglUseProgram(GLuint x)。そのため、プログラムを ruby​​ でグローバルにしたところ、すべてのプログラムが正常に動作するようになりました。しかし、コメントをありがとう。あなたは知らなかったはずです、私の間違いです、悲しいです。

4

0 に答える 0