何时应该在OpenGL ES 2中使用glDeleteBuffers,glDeleteShader和glDeleteProgram?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了何时应该在OpenGL ES 2中使用glDeleteBuffers,glDeleteShader和glDeleteProgram?相关的知识,希望对你有一定的参考价值。

在OpenGL ES 2中使用VBO时,我遇到了glDeleteBuffersglDeleteShaderglDeleteProgram。我在网上环顾四周,但是当我们调用这些方法时,我找不到任何好的答案。这些调用是否必要或计算机是否自动删除对象?任何答案都表示赞赏,谢谢。

答案

每个glGen *调用都应与相应的glDelete *调用配对,该调用在您完成资源时调用。

当您的应用程序仍在运行时,计算机不会自行删除对象,因为它不知道您是否打算稍后重新使用它们。如果要在应用程序的整个生命周期中创建新对象并且无法删除旧对象,那么这是资源泄漏,最终会因内存使用过多而导致应用程序关闭。

当应用程序终止时,计算机将为您删除对象,因此删除在应用程序的整个生命周期中永久需要的对象没有任何实际好处,但通常认为进行无泄漏清理是一种好习惯。

您可以在完成对象后立即调用glDelete *函数(例如,一旦您完成了使用它的最后一次绘制调用)。您无需担心对象是否仍然在GPU的队列或管道中,这是OpenGL驱动程序的问题。

以上是关于何时应该在OpenGL ES 2中使用glDeleteBuffers,glDeleteShader和glDeleteProgram?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenGL ES 2 中创建和使用 VBO

绘制到纹理后的Opengl ES 2.0 glDeleteFramebuffers

Opengl ES 2.0:模型的某些部分在不应该被遮挡的地方被遮挡。 z-buffer 是罪魁祸首吗?

OpenGL (ES 2.0) 动态改变线宽

OpenGL ES 性能 2.0 与 1.1 (iPad)

OpenGL ES 2.0 坐标系