forked from bartvdbraak/blender
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
This commit is contained in:
parent
b74601078d
commit
538ad31bfb
@ -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 */
|
||||
|
@ -106,11 +106,17 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
|
||||
break;
|
||||
case 10: /* Power */
|
||||
{
|
||||
/* Don't want any imaginary numbers... */
|
||||
if( in0 >= 0 )
|
||||
*out= pow(in0, in1);
|
||||
else
|
||||
*out= 0.0;
|
||||
/* Only raise negative numbers by full integers */
|
||||
if( in0 >= 0 ) {
|
||||
out[0]= pow(in0, in1);
|
||||
} else {
|
||||
float y_mod_1 = fmod(in1, 1);
|
||||
if (y_mod_1 > 0.999 || y_mod_1 < 0.001) {
|
||||
*out = pow(in0, round(in1));
|
||||
} else {
|
||||
*out = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 11: /* Logarithm */
|
||||
|
Loading…
Reference in New Issue
Block a user