[Bf-blender-cvs] [630a2623d68] soc-2019-cycles-procedural: Refactor Math node GPU code.
OmarSquircleArt
noreply at git.blender.org
Fri Aug 2 14:26:15 CEST 2019
Commit: 630a2623d68609b90f89656e4cf414235270d6a6
Author: OmarSquircleArt
Date: Fri Aug 2 14:27:10 2019 +0200
Branches: soc-2019-cycles-procedural
https://developer.blender.org/rB630a2623d68609b90f89656e4cf414235270d6a6
Refactor Math node GPU code.
===================================================================
M source/blender/gpu/shaders/gpu_shader_material.glsl
M source/blender/nodes/shader/nodes/node_shader_math.c
M source/blender/nodes/shader/nodes/node_shader_vectMath.c
===================================================================
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index 8f1d4a0504d..b327e821653 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -368,12 +368,12 @@ void math_logarithm(float a, float b, out float result)
result = (a > 0.0 && b > 0.0) ? log2(a) / log2(b) : 0.0;
}
-void math_sqrt(float a, out float result)
+void math_sqrt(float a, float b, out float result)
{
result = (a > 0.0) ? sqrt(a) : 0.0;
}
-void math_absolute(float a, out float result)
+void math_absolute(float a, float b, out float result)
{
result = abs(a);
}
@@ -398,22 +398,22 @@ void math_greater_than(float a, float b, out float result)
result = (a > b) ? 1.0 : 0.0;
}
-void math_round(float a, out float result)
+void math_round(float a, float b, out float result)
{
result = floor(a + 0.5);
}
-void math_floor(float a, out float result)
+void math_floor(float a, float b, out float result)
{
result = floor(a);
}
-void math_ceil(float a, out float result)
+void math_ceil(float a, float b, out float result)
{
result = ceil(a);
}
-void math_fraction(float a, out float result)
+void math_fraction(float a, float b, out float result)
{
result = a - floor(a);
}
@@ -428,32 +428,32 @@ void math_modulo(float a, float b, out float result)
result = (a > 0.0) ? result : result - b;
}
-void math_sine(float a, out float result)
+void math_sine(float a, float b, out float result)
{
result = sin(a);
}
-void math_cosine(float a, out float result)
+void math_cosine(float a, float b, out float result)
{
result = cos(a);
}
-void math_tangent(float a, out float result)
+void math_tangent(float a, float b, out float result)
{
result = tan(a);
}
-void math_arcsine(float a, out float result)
+void math_arcsine(float a, float b, out float result)
{
result = (a <= 1.0 && a >= -1.0) ? asin(a) : 0.0;
}
-void math_arccosine(float a, out float result)
+void math_arccosine(float a, float b, out float result)
{
result = (a <= 1.0 && a >= -1.0) ? acos(a) : 0.0;
}
-void math_arctangent(float a, out float result)
+void math_arctangent(float a, float b, out float result)
{
result = atan(a);
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_math.c b/source/blender/nodes/shader/nodes/node_shader_math.c
index 6e99841429d..0bd1e882f47 100644
--- a/source/blender/nodes/shader/nodes/node_shader_math.c
+++ b/source/blender/nodes/shader/nodes/node_shader_math.c
@@ -68,29 +68,7 @@ static int gpu_shader_math(GPUMaterial *mat,
[NODE_MATH_ARCTAN2] = "math_arctan2",
};
- switch (node->custom1) {
- case NODE_MATH_SQRT:
- case NODE_MATH_CEIL:
- case NODE_MATH_SINE:
- case NODE_MATH_ROUND:
- case NODE_MATH_FLOOR:
- case NODE_MATH_COSINE:
- case NODE_MATH_ARCSINE:
- case NODE_MATH_TANGENT:
- case NODE_MATH_ABSOLUTE:
- case NODE_MATH_FRACTION:
- case NODE_MATH_ARCCOSINE:
- case NODE_MATH_ARCTANGENT: {
- /* use only first item and terminator */
- GPUNodeStack tmp_in[2];
- memcpy(&tmp_in[0], &in[0], sizeof(GPUNodeStack));
- memcpy(&tmp_in[1], &in[2], sizeof(GPUNodeStack));
- GPU_stack_link(mat, node, names[node->custom1], tmp_in, out);
- break;
- }
- default:
- GPU_stack_link(mat, node, names[node->custom1], in, out);
- }
+ GPU_stack_link(mat, node, names[node->custom1], in, out);
return 1;
}
@@ -98,24 +76,20 @@ static void node_shader_update_math(bNodeTree *UNUSED(ntree), bNode *node)
{
bNodeSocket *sock = nodeFindSocket(node, SOCK_IN, "B");
- switch (node->custom1) {
- case NODE_MATH_SQRT:
- case NODE_MATH_CEIL:
- case NODE_MATH_SINE:
- case NODE_MATH_ROUND:
- case NODE_MATH_FLOOR:
- case NODE_MATH_COSINE:
- case NODE_MATH_ARCSINE:
- case NODE_MATH_TANGENT:
- case NODE_MATH_ABSOLUTE:
- case NODE_MATH_FRACTION:
- case NODE_MATH_ARCCOSINE:
- case NODE_MATH_ARCTANGENT:
- sock->flag |= SOCK_UNAVAIL;
- break;
- default:
- sock->flag &= ~SOCK_UNAVAIL;
- }
+ nodeSetSocketAvailability(sock,
+ !ELEM(node->custom1,
+ NODE_MATH_SQRT,
+ NODE_MATH_CEIL,
+ NODE_MATH_SINE,
+ NODE_MATH_ROUND,
+ NODE_MATH_FLOOR,
+ NODE_MATH_COSINE,
+ NODE_MATH_ARCSINE,
+ NODE_MATH_TANGENT,
+ NODE_MATH_ABSOLUTE,
+ NODE_MATH_FRACTION,
+ NODE_MATH_ARCCOSINE,
+ NODE_MATH_ARCTANGENT));
}
void register_node_type_sh_math(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_vectMath.c b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
index 85015b014cf..5b538c6b7c9 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vectMath.c
+++ b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
@@ -77,9 +77,9 @@ static void node_shader_update_vec_math(bNodeTree *UNUSED(ntree), bNode *node)
nodeSetSocketAvailability(sockB,
!ELEM(node->custom1,
- NODE_VECTOR_MATH_ABSOLUTE,
NODE_VECTOR_MATH_SCALE,
NODE_VECTOR_MATH_LENGTH,
+ NODE_VECTOR_MATH_ABSOLUTE,
NODE_VECTOR_MATH_NORMALIZE));
nodeSetSocketAvailability(sockScale, node->custom1 == NODE_VECTOR_MATH_SCALE);
nodeSetSocketAvailability(sockVector,
More information about the Bf-blender-cvs
mailing list