diff options
author | Robin Allen <roblovski@gmail.com> | 2009-06-02 01:22:43 +0400 |
---|---|---|
committer | Robin Allen <roblovski@gmail.com> | 2009-06-02 01:22:43 +0400 |
commit | a3f097c646a4b91bfae7ddb7029597dfa41d35d8 (patch) | |
tree | c01dad8c025464e759ca96f50272a0db5674ba5d /source/blender/nodes | |
parent | 4c7a02f6a1d517f8af6e4cf9200c067e9c71cf78 (diff) |
Bugfix for faulty noise function in bricks node
Diffstat (limited to 'source/blender/nodes')
-rw-r--r-- | source/blender/nodes/intern/TEX_nodes/TEX_bricks.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c b/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c index c9fa3528b02..80cbd6188ee 100644 --- a/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c +++ b/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c @@ -49,12 +49,21 @@ static void init(bNode *node) { node->custom4 = 1.0; /* squash */ } +static float noise(int n) /* fast integer noise */ +{ + int nn; + n = (n >> 13) ^ n; + nn = (n * (n * n * 60493 + 19990303) + 1376312589) & 0x7fffffff; + return 0.5f * ((float)nn / 1073741824.0f); +} + static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread) { float x = coord[0]; float y = coord[1]; - float bricknum, rownum, offset = 0; + int bricknum, rownum; + float offset = 0; float ins_x, ins_y; float tint; @@ -71,20 +80,19 @@ static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, shor tex_input_rgba(bricks2, in[1], coord, thread); tex_input_rgba(mortar, in[2], coord, thread); - rownum = floor(y / row_height); + rownum = (int)floor(y / row_height); if( node->custom1 && node->custom2 ) { brick_width *= ((int)(rownum) % node->custom2 ) ? 1.0f : node->custom4; /* squash */ offset = ((int)(rownum) % node->custom1 ) ? 0 : (brick_width*node->custom3); /* offset */ } - bricknum = floor((x+offset) / brick_width); + bricknum = (int)floor((x+offset) / brick_width); ins_x = (x+offset) - brick_width*bricknum; ins_y = y - row_height*rownum; - srand( (123456*rownum) + bricknum ); - tint = rand() / (float)RAND_MAX + bias; + tint = noise((rownum << 16) + (bricknum & 0xFFFF)) + bias; CLAMP(tint,0.0f,1.0f); if( ins_x < mortar_thickness || ins_y < mortar_thickness || |