diff options
author | Brecht Van Lommel <brecht@blender.org> | 2021-05-18 15:02:41 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2021-05-18 15:40:22 +0300 |
commit | b1584775515b9830d277343db7a25701fd054578 (patch) | |
tree | 03439d9adbe365076ffba4b0add26c129fe02deb /source/blender | |
parent | 53376ec7fcd51d16027e56993e91ce472d7982b5 (diff) |
Fix ocean modifier giving different result on Arm than x86
And re-enable the test on macOS Arm.
Ref T78710
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/ocean.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/ocean.c b/source/blender/blenkernel/intern/ocean.c index d2f4d0702ed..9d53dad8d03 100644 --- a/source/blender/blenkernel/intern/ocean.c +++ b/source/blender/blenkernel/intern/ocean.c @@ -911,8 +911,12 @@ void BKE_ocean_init(struct Ocean *o, for (i = 0; i < o->_M; i++) { for (j = 0; j < o->_N; j++) { /* This ensures we get a value tied to the surface location, avoiding dramatic surface - * change with changing resolution. */ - int new_seed = seed + BLI_hash_int_2d(o->_kx[i] * 360.0f, o->_kz[j] * 360.0f); + * change with changing resolution. + * Explicitly cast to signed int first to ensure consistent behavior on all processors, + * since behavior of float to unsigned int cast is undefined in C. */ + const int hash_x = o->_kx[i] * 360.0f; + const int hash_z = o->_kz[j] * 360.0f; + int new_seed = seed + BLI_hash_int_2d(hash_x, hash_z); BLI_rng_seed(rng, new_seed); float r1 = gaussRand(rng); |