我已经生成了多个使用一个程序(即一个顶点着色器和一个片段着色器)正确绘制的对象,它们都在相同的上下文中运行。我现在想添加另一个对象,并且想将它与不同的程序一起使用。
因此,在调用glActiveTexture()
、glBindTexture()
、glBindBuffer()
、glBufferData()
、glEnableVertexAttribArray()
和glVertexAttribPointer()
一些统一命令之前,我glUseProgram()
使用适当的程序 ID 进行调用。
结果是当两种对象都被绘制时,什么都没有被绘制。如果我停用与第一个程序一起使用的对象,则会正确绘制新对象,反之亦然。
切换程序时要记住哪些事项。
谢谢。
编辑:当我进一步调查时,我注意到抛出了一个我忽略的 OpenGL 错误,因为它被消耗而不是打印(grrr)。事实证明,这根本不是 OpenGL 错误,而是 rubymotion 问题。(起初没想到。)Rubymotion 垃圾收集了我的 OpenGL 程序,因为我在本地分配了它,后来才通过glUseProgram(GLuint x)
. 所以我只是在 ruby 中使程序全局化,现在所有程序都可以正常工作。不过,感谢您的评论。你不可能知道,我的错,sry。