私の友人と私は、C++ と OpenGL を使用するプロジェクトに取り組んでいます。「ModelObject」の C++ クラスを作成しました。各 ModelObject にはメンバー変数として Gluint vao があります。次に、ModelObject の初期化中に呼び出します。
glGenVertexArrays( 1, &vao );
glBindVertexArray( vao );
そして、初期化関数の最後に呼び出します
glBindVertexArray(0);
文脈から抜け出すこと。ここで、電車と立方体の 2 つのオブジェクトをレンダリングしようとしています。彼のマシン (Linux Mint) では、どちらも独自のテクスチャを使用して適切にレンダリングされ、vaos のオブジェクトをクエリすると、それぞれ 1 と 2 が返されます。
ただし、私のマシン (MacBook Pro) では、両方のオブジェクトが立方体としてレンダリングされます (ただし、一方は電車のテクスチャで、もう一方は立方体のテクスチャです)。それらの vaos を照会すると、0 と 0 が返されます。
実験として、glGenVertexArrays に ModelObject ごとに 5 つの vaos を作成するように指示しました。これにより、リスト 0、1、918273、8、7 (またはそれに類似したもの) が生成され、両方の ModelObject で同じリストになりました。
したがって、私が知る限り、glGenVertexArrays は、a) 有効なアドレスとして 0 を使用し、b) glDeleteVertexArray を呼び出していないにもかかわらず、呼び出しごとに同一のアドレスを生成します。彼のマシンではなく私のマシンでこれを行うのはなぜですか?どうすれば停止できますか?