Move multiple calls to random() out of parameter lists so that the

evaluation order is consistent across compilers.



git-svn-id: http://skia.googlecode.com/svn/trunk@2173 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
tomhudson@google.com 2011-08-25 19:56:04 +00:00
parent 8185f33b38
commit 3f088e3651
3 changed files with 14 additions and 4 deletions

View File

@ -28,8 +28,14 @@ protected:
}
static void fill_pts(SkPoint pts[], size_t n, SkRandom* rand) {
for (size_t i = 0; i < n; i++)
pts[i].set(rand->nextUScalar1() * 640, rand->nextUScalar1() * 480);
for (size_t i = 0; i < n; i++) {
// Compute these independently and store in variables, rather
// than in the parameter-passing expression, to get consistent
// evaluation order across compilers.
float y = rand->nextUScalar1() * 480;
float x = rand->nextUScalar1() * 640;
pts[i].set(x, y);
}
}
virtual void onDraw(SkCanvas* canvas) {

View File

@ -38,9 +38,11 @@ protected:
SkScalar y = rand.nextUScalar1() * H;
SkScalar w = rand.nextUScalar1() * (W >> 2);
SkScalar h = rand.nextUScalar1() * (H >> 2);
SkScalar hoffset = rand.nextSScalar1();
SkScalar woffset = rand.nextSScalar1();
r->set(x, y, x + w, y + h);
r->offset(-w/2 + rand.nextSScalar1(), -h/2 + + rand.nextSScalar1());
r->offset(-w/2 + woffset, -h/2 + hoffset);
}
virtual void onDraw(SkCanvas* canvas) {

View File

@ -25,9 +25,11 @@ static void rnd_rect(SkRect* r, SkPaint* paint, SkRandom& rand) {
SkScalar y = rand.nextUScalar1() * H;
SkScalar w = rand.nextUScalar1() * (W >> 2);
SkScalar h = rand.nextUScalar1() * (H >> 2);
SkScalar hoffset = rand.nextSScalar1();
SkScalar woffset = rand.nextSScalar1();
r->set(x, y, x + w, y + h);
r->offset(-w/2 + rand.nextSScalar1(), -h/2 + + rand.nextSScalar1());
r->offset(-w/2 + woffset, -h/2 + hoffset);
paint->setColor(rand.nextU());
paint->setAlpha(0xFF);