使用QT4.6.2的windows版本开发一个图形程序,其中在用gluTess函数绘制任意多边形的时候,一旦多边形轮廓点中出现相同点时,程序便出错,相同代码在QT4.6.2的linux版本和vs2008下都可以绘制成功。哪位知道问题的原因或解决方案请赐教。
源码如下:
void COpenGL::my_error(GLenum err)
{
    string str = (char*)(gluErrorString(err));
    cout << str <<endl;
}
void COpenGL::combineCallback(GLdouble coords[3],
                              GLdouble *vertex_data[4],
                              GLfloat weight[4], GLdouble **dataOut)
{
    int* ptr = (int*) malloc(3 * sizeof(int));
    memList.push_back(ptr);
    ptr[0] = (GLint)   coords[0];
    ptr[1] = (GLint)   coords[1];
    ptr[2] = (GLint)   coords[2];
    *dataOut = (GLdouble*)ptr;
}
typedef void (__stdcall *fn)(void);
void COpenGL::drawTess()const
{
    static GLUtriangulatorObj *tobj = NULL;
    if (tobj == NULL)
    {
        tobj = gluNewTess();
    }
    if (NULL != tobj)
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glColor3f(0.7,   0.5,   0.0);
        gluTessCallback(tobj,   GLU_TESS_BEGIN,  (fn)glBegin);
        gluTessCallback(tobj,   GLU_TESS_END,  (fn)glEnd);
        gluTessCallback(tobj,   GLU_TESS_ERROR,  (fn) my_error);
        gluTessCallback(tobj,   GLU_TESS_VERTEX,  (fn) glVertex2iv);
        gluTessCallback(tobj,   GLU_TESS_COMBINE,  (fn) combineCallback);
    }
    GLdouble   data[3];
    gluBeginPolygon(tobj);
    for (int j=0; j<=contours_cnt; ++j)
    {
        int point_cnt = contours[j].point_cnt;
        gluNextContour(tobj,GLU_UNKNOWN);
        for (int i=0; i<point_cnt; ++i)
        {
            data[0] = contours[j].p[0];
            data[1] = contours[j].p[1];
            data[2] = 0;
            gluTessVertex(tobj,data,(void*)contours[j].p);
        }
    }
    gluEndPolygon(tobj);
    for (size_t i=0; i<memList.size(); ++i)
    {
        free(memList);
    }
    memList.clear();
}