我在 iOS 上有一个非常奇怪的 VAO 问题。
问题是新创建的 VAO 在创建后几乎立即失效。
我有一段代码使用 glGenVertexArrayOES(1, &vao) 以通常的方式创建 VAO。然后绑定它(glBindVertexArrayOES),设置所有顶点绑定等,然后绑定零 VAO 以确保没有进一步的 glBind 调用意外写入它。如果此时我调用 glIsVertexArrayOES(vao),它会返回 true。
我的代码结构为作业图,其中作业被推入有序队列并被拾取以在线程池上执行。尽管如此,对于 OpenGL,我只在一个线程上执行调用 GL 的代码。我有线程亲和力来确保这一点。
现在。我的代码执行,生成 VAO,然后退出函数。然后它会选择下一个作业,在同一个线程上运行它,并尝试使用新创建的 VAO。如果我此时调用 glIsVertexArrayOES - 从字面上看,几乎是在构造后立即调用 - 它返回 false!
任何忽略它并使用它的尝试都会失败。
我在 glDeleteVertexArraysOES 上有一个断点,但没有被调用。太奇怪了……它成功地创建了一个 VAO,退出了一个函数,尝试在同一个线程上使用新创建的 VAO(从而避开上下文和共享组问题)并且失败了。
非常感谢任何帮助或见解!