在OpenGL ES 2中使用VBO时,我遇到了glDeleteBuffers
,glDeleteShader
和glDeleteProgram
。我在网上环顾四周,但是当我们调用这些方法时,我找不到任何好的答案。这些调用是否必要或计算机是否自动删除对象?任何答案都表示赞赏,谢谢。
每个glGen *调用都应与相应的glDelete *调用配对,该调用在您完成资源时调用。
当您的应用程序仍在运行时,计算机不会自行删除对象,因为它不知道您是否打算稍后重新使用它们。如果要在应用程序的整个生命周期中创建新对象并且无法删除旧对象,那么这是资源泄漏,最终会因内存使用过多而导致应用程序关闭。
当应用程序终止时,计算机将为您删除对象,因此删除在应用程序的整个生命周期中永久需要的对象没有任何实际好处,但通常认为进行无泄漏清理是一种好习惯。
您可以在完成对象后立即调用glDelete *函数(例如,一旦您完成了使用它的最后一次绘制调用)。您无需担心对象是否仍然在GPU的队列或管道中,这是OpenGL驱动程序的问题。