[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51905] trunk/blender/source/blender/nodes /shader/nodes/node_shader_math.c: Bugfix #33087
Ton Roosendaal
ton at blender.org
Mon Nov 5 14:43:04 CET 2012
Revision: 51905
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51905
Author: ton
Date: 2012-11-05 13:43:02 +0000 (Mon, 05 Nov 2012)
Log Message:
-----------
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.
Modified Paths:
--------------
trunk/blender/source/blender/nodes/shader/nodes/node_shader_math.c
Modified: trunk/blender/source/blender/nodes/shader/nodes/node_shader_math.c
===================================================================
--- trunk/blender/source/blender/nodes/shader/nodes/node_shader_math.c 2012-11-05 13:33:48 UTC (rev 51904)
+++ trunk/blender/source/blender/nodes/shader/nodes/node_shader_math.c 2012-11-05 13:43:02 UTC (rev 51905)
@@ -137,11 +137,22 @@
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 */
More information about the Bf-blender-cvs
mailing list