我正在使用 GLUtesselator 来填充一些非凸多边形。
它工作得很好,但是对于一些多边形,它抱怨它需要一个组合函数,所以我提供了一个非常简单的 GLU_TESS_COMBINE 回调,它分配一个新顶点并只复制坐标(它是纯色的 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;
}
现在一切都按预期呈现,但它显然泄漏了内存。文档说:
分配另一个顶点,[...] 在调用 gluTessEndPolygon 后的某个时间释放内存。
但是在我发现的所有示例中,它们都没有显示如何处理内存。回调是免费函数,没有办法释放那里分配的内存,是吗?
我能想到的唯一方法是将它们存储在某个地方,然后自己删除它们。这是正确的方法吗?