diff options
author | Ton Roosendaal <ton@blender.org> | 2005-11-06 00:17:55 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2005-11-06 00:17:55 +0300 |
commit | ebfd6de1dc3f787e52189b7f072a0c309a328cc3 (patch) | |
tree | b610453921d0efe3179cc6b10acd1eb3e4ec3eb9 /source/blender/blenlib/intern/rand.c | |
parent | 165ed1b1160de14d7348c39acec172873155c0a0 (diff) |
Bugfix #3249
Error in BLI_array_randomize(), an unused call in Blender until the
Build Modifier was added. It did a weird modulus I don't really grasp...
somehow that caused the bug (create a corrupt mesh). But why? Dunno...
Diffstat (limited to 'source/blender/blenlib/intern/rand.c')
-rw-r--r-- | source/blender/blenlib/intern/rand.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/source/blender/blenlib/intern/rand.c b/source/blender/blenlib/intern/rand.c index 526f190f545..e80ab07f8a9 100644 --- a/source/blender/blenlib/intern/rand.c +++ b/source/blender/blenlib/intern/rand.c @@ -101,13 +101,14 @@ void rng_shuffleArray(RNG *rng, void *data, int elemSize, int numElems) void *temp = malloc(elemSize); while (--i) { - int j = rng_getInt(rng)%i; - void *iElem = (unsigned char*)data + i*elemSize; - void *jElem = (unsigned char*)data + j*elemSize; - - memcpy(temp, iElem, elemSize); - memcpy(iElem, jElem, elemSize); - memcpy(jElem, temp, elemSize); + int j = rng_getInt(rng)%numElems; + if(i!=j) { + void *iElem = (unsigned char*)data + i*elemSize; + void *jElem = (unsigned char*)data + j*elemSize; + memcpy(temp, iElem, elemSize); + memcpy(iElem, jElem, elemSize); + memcpy(jElem, temp, elemSize); + } } free(temp); |