diff options
Diffstat (limited to 'source/blender/blenkernel/intern/navmesh_conversion.cpp')
-rw-r--r-- | source/blender/blenkernel/intern/navmesh_conversion.cpp | 34 |
1 files changed, 7 insertions, 27 deletions
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++) |