[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