forked from bartvdbraak/blender
fix compilation for MinGW by substituting qsort_r with qsort. What aversion do MinGW guys have for including '_r' variants of functions anyway?
Warning: a clean build will be needed probably to account for recent merge changes, or link errors will occur.
This commit is contained in:
parent
7548333b55
commit
8a977cbcc9
@ -94,7 +94,20 @@ static int circumCircle(const float xp, const float yp,
|
||||
|
||||
return (drsqr <= rsqr) ? 1 : 0;
|
||||
}
|
||||
|
||||
#ifdef FREE_WINDOWS
|
||||
static float *_mingw_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__)
|
||||
@ -113,6 +126,7 @@ 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
|
||||
@ -126,6 +140,9 @@ static void delaunay(const int nv, float *verts, rcIntArray& idx, rcIntArray& tr
|
||||
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(&idx[0], idx.size(), sizeof(int), ptcmp);
|
||||
#else
|
||||
qsort_r(&idx[0], idx.size(), sizeof(int), ptcmp, verts);
|
||||
#endif
|
||||
|
@ -289,6 +289,15 @@ struct SortContext
|
||||
const int* recastData;
|
||||
const int* trisToFacesMap;
|
||||
};
|
||||
|
||||
#ifdef FREE_WINDOWS
|
||||
static SortContext *_mingw_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__)
|
||||
@ -301,6 +310,7 @@ static int compareByData(const void * a, const void * b, void* data)
|
||||
return ( context->recastData[context->trisToFacesMap[*(int*)a]] -
|
||||
context->recastData[context->trisToFacesMap[*(int*)b]] );
|
||||
}
|
||||
#endif
|
||||
|
||||
bool buildNavMeshData(const int nverts, const float* verts,
|
||||
const int ntris, const unsigned short *tris,
|
||||
@ -327,6 +337,9 @@ bool buildNavMeshData(const int nverts, const float* verts,
|
||||
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(trisMapping, ntris, sizeof(int), compareByData);
|
||||
#else
|
||||
qsort_r(trisMapping, ntris, sizeof(int), compareByData, &context);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user