1 つのプログラム (つまり、1 つの頂点シェーダーと 1 つのフラグメント シェーダー) で適切に描画される複数のオブジェクトを生成しました。これらはすべて同じコンテキストで実行されます。別のオブジェクトを追加したいと思い、それを別のプログラムで使用したいと考えました。
したがって、、、、、、およびいくつかの統一コマンドを呼び出す前に、glActiveTexture()
適切glBindTexture()
なプログラム ID を使用して呼び出します。glBindBuffer()
glBufferData()
glEnableVertexAttribArray()
glVertexAttribPointer()
glUseProgram()
その結果、両方の種類のオブジェクトが描画される場合、何も描画されません。最初のプログラムで動作するオブジェクトを無効にすると、新しいオブジェクトが適切に描画され、その逆も同様です。
プログラムを切り替える際の注意事項を教えてください。
ありがとう。
編集:さらに調査したところ、消費されて印刷されなかったために見落としていたOpenGLエラーがスローされたことに気付きました(grrr)。結局のところ、これは OpenGl の間違いではなく、rubymotion の問題でした。(最初はそうは思いませんでした。) Rubymotion のガベージが OpenGL プログラムを収集しましたglUseProgram(GLuint x)
。そのため、プログラムを ruby でグローバルにしたところ、すべてのプログラムが正常に動作するようになりました。しかし、コメントをありがとう。あなたは知らなかったはずです、私の間違いです、悲しいです。