什么时候应该在 OpenGL ES 2 中使用 glDeleteBuffers、glDeleteShader 和 glDeleteProgram?
When should glDeleteBuffers, glDeleteShader, and glDeleteProgram be used in OpenGL ES 2?
在 OpenGL ES 2 中使用 VBO 时,我遇到了 glDeleteBuffers
、glDeleteShader
和 glDeleteProgram
。我在网上四处张望,但找不到关于何时应该调用这些方法的任何好的答案。这些调用是否必要,或者计算机是否会自行自动删除对象?感谢任何答案,谢谢。
每个 glGen* 调用都应与相应的 glDelete* 调用配对,后者在您使用完资源后调用。
当您的应用程序还在时,计算机不会自行删除对象 运行,因为它不知道您是否打算稍后重新使用它们。如果您在应用程序的整个生命周期中都在创建新对象并且未能删除旧对象,那么这就是资源泄漏,最终会由于内存使用过多而导致应用程序关闭。
计算机会在应用程序终止时为您删除对象,因此删除在应用程序的整个生命周期中永久需要的对象并没有真正的好处,但通常认为无泄漏的良好做法清理。
您可以在完成对象后立即调用 glDelete* 函数(例如,在您完成最后一次使用它的绘制调用后立即调用)。你不需要担心对象是否还在GPU的队列或管道中,那是OpenGL驱动的问题。
在 OpenGL ES 2 中使用 VBO 时,我遇到了 glDeleteBuffers
、glDeleteShader
和 glDeleteProgram
。我在网上四处张望,但找不到关于何时应该调用这些方法的任何好的答案。这些调用是否必要,或者计算机是否会自行自动删除对象?感谢任何答案,谢谢。
每个 glGen* 调用都应与相应的 glDelete* 调用配对,后者在您使用完资源后调用。
当您的应用程序还在时,计算机不会自行删除对象 运行,因为它不知道您是否打算稍后重新使用它们。如果您在应用程序的整个生命周期中都在创建新对象并且未能删除旧对象,那么这就是资源泄漏,最终会由于内存使用过多而导致应用程序关闭。
计算机会在应用程序终止时为您删除对象,因此删除在应用程序的整个生命周期中永久需要的对象并没有真正的好处,但通常认为无泄漏的良好做法清理。
您可以在完成对象后立即调用 glDelete* 函数(例如,在您完成最后一次使用它的绘制调用后立即调用)。你不需要担心对象是否还在GPU的队列或管道中,那是OpenGL驱动的问题。