2010-10-17 48 views
0

如果要重新编译现有编译显示列表,是否需要先调用glDeleteLists()和glGenLists()?或者可以通过在现有编译的显示列表ID上调用glNewList()来重新编译显示列表?opengl重新编译显示列表

回答

4

只要调用glNewList/glEndList就足够了。

注意,删除只会变得对glEndList调用有效:

If a display list with name `list` already exists, 
it is replaced only when glEndList is called. 

如果你宁愿较早释放前面的列表,然后通过各种手段,做电glDeleteLists。明确表示并不会受到伤害。

最后一点... glGenLists从不需要。你总是可以在任何正整数上调用glNewList,即使它不是通过glGenLists提供的。 glGenLists API的主要原因是确保名称尚未被使用。但是你已经知道,如果你刚删除它。

+0

因此不调用glDeleteLists()不会导致某种服务器端内存泄漏?另外,它是否适用于其他服务器端对象,如纹理,缓冲区对象等? – 2010-10-18 21:22:39

+0

在重新分配该句柄之前,不要调用对象上的Delete *(不能泄漏)(但实现中的错误可能存在)。这是GL工作的一部分,以确保它不会泄漏到那里。对于可以决定名称的所有对象(如纹理和缓冲区对象)都是如此。 – Bahbar 2010-10-19 07:08:52