我和我的朋友正在开发一个使用 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。为什么它会在我的机器上而不是他的机器上执行此操作,我该如何阻止它?