2010-10-17 33 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