1
我正在使用GLUtesselator填充一些非凸多邊形。如何釋放在GLU_TESS_COMBINE回調中分配的內存
它做得很不錯,但與一些多邊形它抱怨它需要一個結合功能,所以我提供了一個非常簡單的GLU_TESS_COMBINE回調,其分配一個新的頂點,只是複製COORDS(它是2D純色,所以我不需要內插RGB值或任何東西):
void CALLBACK tessCombine(GLdouble coords[3], GLdouble * vertex_data[4], GLfloat weight[4], GLdouble **outData)
{
GLdouble *vertex = new GLdouble[3];
vertex[0] = coords[0];
vertex[1] = coords[1];
vertex[2] = coords[2];
*outData = vertex;
}
現在一切都按預期呈現,但它顯然會泄漏內存。該文檔說:
分配另一個頂點,[0121]在調用gluTessEndPolygon之後的某個時間釋放內存。
但是在我找到的所有例子中,它們並沒有顯示如何處理內存。回調是免費的功能,無法釋放分配的內存,是嗎?
我能想到的唯一方法是將它們存儲在某個地方,然後自己刪除它們。這是正確的方法嗎?
有一個很好的例子好文章!我已經結束了將新頂點存儲在向量中,但它幾乎相同。謝謝 – MikMik
順便說一句,不應該文件顯示正確的例子,而不是泄漏內存? – MikMik
@MikMik是的,他們應該,但在文檔中,我不認爲他們分配內存。它看起來像這樣:'VERTEX * new = new_vertex();',我相信他們不會在new_vertex()函數中分配新的內存。 –