[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40189] trunk/blender: fix compilation for MinGW by substituting qsort_r with qsort.
Antony Riakiotakis
kalast at gmail.com
Tue Sep 13 21:51:59 CEST 2011
Revision: 40189
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40189
Author: psy-fi
Date: 2011-09-13 19:51:58 +0000 (Tue, 13 Sep 2011)
Log Message:
-----------
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.
Modified Paths:
--------------
trunk/blender/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp
trunk/blender/source/blender/blenkernel/intern/navmesh_conversion.cpp
Modified: trunk/blender/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp
===================================================================
--- trunk/blender/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp 2011-09-13 16:54:01 UTC (rev 40188)
+++ trunk/blender/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp 2011-09-13 19:51:58 UTC (rev 40189)
@@ -94,7 +94,20 @@
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 @@
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 @@
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
Modified: trunk/blender/source/blender/blenkernel/intern/navmesh_conversion.cpp
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/navmesh_conversion.cpp 2011-09-13 16:54:01 UTC (rev 40188)
+++ trunk/blender/source/blender/blenkernel/intern/navmesh_conversion.cpp 2011-09-13 19:51:58 UTC (rev 40189)
@@ -289,6 +289,15 @@
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 @@
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 @@
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
More information about the Bf-blender-cvs
mailing list