假设我调用了glGenBuffers(或WebGL中的createBuffer),后来我丢失了缓冲区名称。例如。它超出范围,是垃圾收集,无论情况如何。类似于C编程,这似乎是一个内存泄漏。实际上,有一块已分配的内存块(在GPU上)没有指向它的指针。我猜测GPU无法对内存进行垃圾收集,因为它无法自动推断出客户端应用程序已完成。
首先,这确实是内存泄漏吗?其次,如果我在丢失缓冲区名称之前调用glDeleteBuffers(或WebGL中的deleteBuffer),是否会释放内存并避免泄漏?
答案 0 :(得分:5)
是的,这会导致内存泄漏。您必须为每个分配的缓冲区调用glDeleteBuffers
。如果你调用它,它会释放GPU上的数据并将绑定恢复为0.如果你不打电话,GPU最终会耗尽内存而你的驱动程序可能会崩溃。
另请注意,每次调用glDeleteBuffers
后都不需要调用glBufferData
,它会销毁以前绑定到它的所有数据。当你不再使用缓冲区时,只调用glDeleteBuffers
一次。