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>2012-11-05 17:43:02 +0400
committerTon Roosendaal <ton@blender.org>2012-11-05 17:43:02 +0400
commit6ee3bf5300cb345a02563a4137c8b0e651b2a564 (patch)
treed23488d9f63b3eae830909713729b143cc3621b1 /source/blender
parentcf30cb2cff9c45a2562e5ad3619fe3631e9dd076 (diff)
Bugfix #33087
Shader nodes (Blender Internal), Math node Power() didn't accept negative values for input. Added same code as for compositor case - only allow to raise with integer values for negatives.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_math.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/source/blender/nodes/shader/nodes/node_shader_math.c b/source/blender/nodes/shader/nodes/node_shader_math.c
index a70134b2325..f4e0faf2110 100644
--- a/source/blender/nodes/shader/nodes/node_shader_math.c
+++ b/source/blender/nodes/shader/nodes/node_shader_math.c
@@ -137,11 +137,22 @@ bNodeStack **out)
break;
case 10: /* Power */
{
- /* Don't want any imaginary numbers... */
- if ( in[0]->vec[0] >= 0 )
+ /* Only raise negative numbers by full integers */
+ if ( in[0]->vec[0] >= 0 ) {
out[0]->vec[0] = pow(in[0]->vec[0], in[1]->vec[0]);
- else
- out[0]->vec[0] = 0.0;
+ }
+ else {
+ float y_mod_1 = fmod(in[1]->vec[0], 1);
+
+ /* if input value is not nearly an integer, fall back to zero, nicer than straight rounding */
+ if (y_mod_1 > 0.999f || y_mod_1 < 0.001f) {
+ out[0]->vec[0] = powf(in[0]->vec[0], floorf(in[1]->vec[0] + 0.5f));
+ }
+ else {
+ out[0]->vec[0] = 0.0f;
+ }
+ }
+
}
break;
case 11: /* Logarithm */