Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp38
-rw-r--r--source/blender/blenkernel/intern/navmesh_conversion.cpp34
2 files changed, 12 insertions, 60 deletions
diff --git a/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp b/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp
index f1d2113a8c7..55ba28ae7cf 100644
--- a/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp
+++ b/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp
@@ -94,31 +94,12 @@ static int circumCircle(const float xp, const float yp,
return (drsqr <= rsqr) ? 1 : 0;
}
-#ifdef FREE_WINDOWS
-static float *_mingw_verts;
+
+static float *_qsort_verts;
static int ptcmp(const void *v1, const void *v2)
{
- const float* p1 = &_mingw_verts[(*(const int*)v1)*3];
- const float* p2 = &_mingw_verts[(*(const int*)v2)*3];
- if (p1[0] < p2[0])
- return -1;
- else if (p1[0] > p2[0])
- return 1;
- else
- return 0;
-}
-#else
-#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];
- const float* p2 = &verts[(*(const int*)v2)*3];
+ const float* p1 = &_qsort_verts[(*(const int*)v1)*3];
+ const float* p2 = &_qsort_verts[(*(const int*)v2)*3];
if (p1[0] < p2[0])
return -1;
else if (p1[0] > p2[0])
@@ -126,7 +107,6 @@ static int ptcmp(const void *v1, const void *v2, void* up)
else
return 0;
}
-#endif
// Based on Paul Bourke's triangulate.c
// http://astronomy.swin.edu.au/~pbourke/terrain/triangulate/triangulate.c
@@ -136,16 +116,8 @@ 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;
-#if defined(_MSC_VER)
- qsort_s(&idx[0], idx.size(), sizeof(int), ptcmp, verts);
-#elif defined(__APPLE__) || defined(__FreeBSD__)
- qsort_r(&idx[0], idx.size(), sizeof(int), verts, ptcmp);
-#elif defined(FREE_WINDOWS)
- _mingw_verts = verts;
+ _qsort_verts = verts;
qsort(&idx[0], idx.size(), sizeof(int), ptcmp);
-#else
- qsort_r(&idx[0], idx.size(), sizeof(int), ptcmp, verts);
-#endif
// Find the maximum and minimum vertex bounds.
// This is to allow calculation of the bounding triangle
diff --git a/source/blender/blenkernel/intern/navmesh_conversion.cpp b/source/blender/blenkernel/intern/navmesh_conversion.cpp
index 9b373db59ff..fbc4775cf34 100644
--- a/source/blender/blenkernel/intern/navmesh_conversion.cpp
+++ b/source/blender/blenkernel/intern/navmesh_conversion.cpp
@@ -290,27 +290,15 @@ struct SortContext
const int* trisToFacesMap;
};
-#ifdef FREE_WINDOWS
-static SortContext *_mingw_context;
+/* XXX: not thread-safe, but it's called only from modifiers stack
+ which isn't threaded. Anyway, better to avoid this in the future */
+static SortContext *_qsort_context;
+
static int compareByData(const void * a, const void * b)
{
- return ( _mingw_context->recastData[_mingw_context->trisToFacesMap[*(int*)a]] -
- _mingw_context->recastData[_mingw_context->trisToFacesMap[*(int*)b]] );
-}
-#else
-#if defined(_MSC_VER)
-static int compareByData(void* data, const void * a, const void * b)
-#elif defined(__APPLE__) || defined(__FreeBSD__)
-static int compareByData(void* data, const void * a, const void * b)
-#else
-static int compareByData(const void * a, const void * b, void* data)
-#endif
-{
- const SortContext* context = (const SortContext*)data;
- return ( context->recastData[context->trisToFacesMap[*(int*)a]] -
- context->recastData[context->trisToFacesMap[*(int*)b]] );
+ return ( _qsort_context->recastData[_qsort_context->trisToFacesMap[*(int*)a]] -
+ _qsort_context->recastData[_qsort_context->trisToFacesMap[*(int*)b]] );
}
-#endif
bool buildNavMeshData(const int nverts, const float* verts,
const int ntris, const unsigned short *tris,
@@ -333,16 +321,8 @@ bool buildNavMeshData(const int nverts, const float* verts,
SortContext context;
context.recastData = recastData;
context.trisToFacesMap = trisToFacesMap;
-#if defined(_MSC_VER)
- qsort_s(trisMapping, ntris, sizeof(int), compareByData, &context);
-#elif defined(__APPLE__) || defined(__FreeBSD__)
- qsort_r(trisMapping, ntris, sizeof(int), &context, compareByData);
-#elif defined(FREE_WINDOWS)
- _mingw_context = &context;
+ _qsort_context = &context;
qsort(trisMapping, ntris, sizeof(int), compareByData);
-#else
- qsort_r(trisMapping, ntris, sizeof(int), compareByData, &context);
-#endif
//search first valid triangle - triangle of convex polygon
int validTriStart = -1;
for (int i=0; i< ntris; i++)