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