Fixed for navmesh on FreeBSD. Oatch by sambler, thanks!
[blender.git] / extern / recastnavigation / Recast / Source / RecastMeshDetail.cpp
index ef17531d7bc63a506f447da2391edf6de827636a..dab94eaa7750242f57071f6821a6002bfab87f30 100644 (file)
@@ -95,7 +95,13 @@ static int circumCircle(const float xp, const float yp,
        return (drsqr <= rsqr) ? 1 : 0;
 }
 
+#if defined(_MSC_VER)
 static int ptcmp(void* up, const void *v1, const void *v2)
+#elif defined(__APPLE__) || defined(__FreeBSD__)
+static int ptcmp(void* up, const void *v1, const void *v2)
+#else
+static int ptcmp(const void *v1, const void *v2, void* up)
+#endif
 {
        const float* verts = (const float*)up;
        const float* p1 = &verts[(*(const int*)v1)*3];
@@ -116,10 +122,12 @@ static void delaunay(const int nv, float *verts, rcIntArray& idx, rcIntArray& tr
        idx.resize(nv);
        for (int i = 0; i < nv; ++i)
                idx[i] = i;
-#ifdef WIN32
+#if defined(_MSC_VER)
        qsort_s(&idx[0], idx.size(), sizeof(int), ptcmp, verts);
-#else
+#elif defined(__APPLE__) || defined(__FreeBSD__)
        qsort_r(&idx[0], idx.size(), sizeof(int), verts, ptcmp);
+#else
+       qsort_r(&idx[0], idx.size(), sizeof(int), ptcmp, verts);
 #endif
 
        // Find the maximum and minimum vertex bounds.
@@ -673,11 +681,15 @@ bool rcBuildPolyMeshDetail(const rcPolyMesh& mesh, const rcCompactHeightfield& c
                                                   const float sampleDist, const float sampleMaxError,
                                                   rcPolyMeshDetail& dmesh)
 {
-       rcTimeVal startTime = rcGetPerformanceTimer();
-       
        if (mesh.nverts == 0 || mesh.npolys == 0)
                return true;
-       
+
+       rcTimeVal startTime = rcGetPerformanceTimer();
+       rcTimeVal endTime;
+
+       int vcap;
+       int tcap;
+
        const int nvp = mesh.nvp;
        const float cs = mesh.cs;
        const float ch = mesh.ch;
@@ -760,8 +772,8 @@ bool rcBuildPolyMeshDetail(const rcPolyMesh& mesh, const rcCompactHeightfield& c
                goto failure;
        }
 
-       int vcap = nPolyVerts+nPolyVerts/2;
-       int tcap = vcap*2;
+       vcap = nPolyVerts+nPolyVerts/2;
+       tcap = vcap*2;
 
        dmesh.nverts = 0;
        dmesh.verts = new float[vcap*3];
@@ -882,7 +894,7 @@ bool rcBuildPolyMeshDetail(const rcPolyMesh& mesh, const rcCompactHeightfield& c
        delete [] bounds;
        delete [] poly;
        
-       rcTimeVal endTime = rcGetPerformanceTimer();
+       endTime = rcGetPerformanceTimer();
        
        if (rcGetBuildTimes())
                rcGetBuildTimes()->buildDetailMesh += rcGetDeltaTimeUsec(startTime, endTime);