我试图通过创建一个全局变量来解决GLU回调中的内存泄漏,但是现在它没有绘制任何内容:
GLdouble *gluptr = NULL;
void CALLBACK combineCallback(GLdouble coords[3], GLdouble *vertex_data[4],
GLfloat weight[4], GLdouble **dataOut)
{
GLdouble *vertex;
if(gluptr == NULL)
{
gluptr = (GLdouble *) malloc(6 * sizeof(GLdouble));
}
vertex = (GLdouble*)gluptr;
vertex[0] = coords[0];
vertex[1] = coords[1];
vertex[2] = coords[2];
for (int i = 3; i < 6; i++)
{
vertex[i] = weight[0] * vertex_data[0][i] +
weight[1] * vertex_data[0][i] +
weight[2] * vertex_data[0][i] +
weight[3] * vertex_data[0][i];
}
*dataOut = vertex;
}
基本上,而不是每次使用全局指针都在循环中执行malloc(因此发生内存泄漏),但这不起作用(绘制到屏幕不起作用),这意味着dataOut没有接收到我的指针指向的顶点数据。为什么使用malloc指向在函数中创建的指针与全局变量有什么不同?
谢谢
最佳答案
您只分配一次数据-但是GLUtesselator一次需要多个数据!
您在这里所做的就是将所有顶点数据放入内存中的单个位置,在原始代码中,每个顶点有一个内存。 GLUtesselator需要一个以上的顶点才能正常运行。
您进行通话
void gluDeleteTess(GLUtesselator *tessobj);
...之后,你呢?