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:
authorTon Roosendaal <ton@blender.org>2005-11-06 00:17:55 +0300
committerTon Roosendaal <ton@blender.org>2005-11-06 00:17:55 +0300
commitebfd6de1dc3f787e52189b7f072a0c309a328cc3 (patch)
treeb610453921d0efe3179cc6b10acd1eb3e4ec3eb9 /source/blender/blenlib/intern/rand.c
parent165ed1b1160de14d7348c39acec172873155c0a0 (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.c15
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);