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を呼び出した後、いつかメモリを解放します。
しかし、私が見つけたすべての例では、メモリの処理方法を示していません。コールバックはフリー関数であり、そこに割り当てられたメモリを解放する方法はありませんか?
私が考えることができる唯一の方法は、それらをどこかに保存してから、自分で削除することです。これは正しい方法ですか?