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>2011-02-18 15:34:31 +0300
committerTon Roosendaal <ton@blender.org>2011-02-18 15:34:31 +0300
commit538ad31bfbf80dadb2c70dade8d83b9e4aad18a6 (patch)
treead17973d7d9ee83ea1527872d0ba1f0b51318832 /source/blender/nodes/intern/CMP_nodes
parentb74601078d08a923241d3b52e065afd663e2ff3f (diff)
Bugfix #26128
Compositor/texture nodes: math node now allows to use pow() for negative raising too, but only when that value is near-integer. For other negative cases result is zero. Patch provided by Aurel W
Diffstat (limited to 'source/blender/nodes/intern/CMP_nodes')
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_math.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_math.c b/source/blender/nodes/intern/CMP_nodes/CMP_math.c
index 7a8dadafb86..adeef050ec0 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_math.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_math.c
@@ -94,11 +94,18 @@ static void do_math(bNode *node, float *out, float *in, float *in2)
break;
case 10: /* Power */
{
- /* Don't want any imaginary numbers... */
- if( in[0] >= 0 )
+ /* Only raise negative numbers by full integers */
+ if( in[0] >= 0 ) {
out[0]= pow(in[0], in2[0]);
- else
- out[0]= 0.0;
+ } else {
+ float y_mod_1 = fmod(in2[0], 1);
+ /* if input value is not nearly an integer, fall back to zero, nicer than straight rounding */
+ if (y_mod_1 > 0.999 || y_mod_1 < 0.001) {
+ out[0]= pow(in[0], round(in2[0]));
+ } else {
+ out[0] = 0.0;
+ }
+ }
}
break;
case 11: /* Logarithm */