Code cleanup: Replace magic number with verbose name for math node operations

Should be no functional changes, just much less cryptic code.
This commit is contained in:
Sergey Sharybin
2014-11-05 11:27:52 +01:00
parent 1073c6ae8e
commit 035026f48a
5 changed files with 117 additions and 94 deletions

View File

@@ -29,61 +29,61 @@ void MathNode::convertToOperations(NodeConverter &converter, const CompositorCon
MathBaseOperation *operation = NULL; MathBaseOperation *operation = NULL;
switch (this->getbNode()->custom1) { switch (this->getbNode()->custom1) {
case 0: /* Add */ case NODE_MATH_ADD:
operation = new MathAddOperation(); operation = new MathAddOperation();
break; break;
case 1: /* Subtract */ case NODE_MATH_SUB:
operation = new MathSubtractOperation(); operation = new MathSubtractOperation();
break; break;
case 2: /* Multiply */ case NODE_MATH_MUL:
operation = new MathMultiplyOperation(); operation = new MathMultiplyOperation();
break; break;
case 3: /* Divide */ case NODE_MATH_DIVIDE:
operation = new MathDivideOperation(); operation = new MathDivideOperation();
break; break;
case 4: /* Sine */ case NODE_MATH_SIN:
operation = new MathSineOperation(); operation = new MathSineOperation();
break; break;
case 5: /* Cosine */ case NODE_MATH_COS:
operation = new MathCosineOperation(); operation = new MathCosineOperation();
break; break;
case 6: /* Tangent */ case NODE_MATH_TAN:
operation = new MathTangentOperation(); operation = new MathTangentOperation();
break; break;
case 7: /* Arc-Sine */ case NODE_MATH_ASIN:
operation = new MathArcSineOperation(); operation = new MathArcSineOperation();
break; break;
case 8: /* Arc-Cosine */ case NODE_MATH_ACOS:
operation = new MathArcCosineOperation(); operation = new MathArcCosineOperation();
break; break;
case 9: /* Arc-Tangent */ case NODE_MATH_ATAN:
operation = new MathArcTangentOperation(); operation = new MathArcTangentOperation();
break; break;
case 10: /* Power */ case NODE_MATH_POW:
operation = new MathPowerOperation(); operation = new MathPowerOperation();
break; break;
case 11: /* Logarithm */ case NODE_MATH_LOG:
operation = new MathLogarithmOperation(); operation = new MathLogarithmOperation();
break; break;
case 12: /* Minimum */ case NODE_MATH_MIN:
operation = new MathMinimumOperation(); operation = new MathMinimumOperation();
break; break;
case 13: /* Maximum */ case NODE_MATH_MAX:
operation = new MathMaximumOperation(); operation = new MathMaximumOperation();
break; break;
case 14: /* Round */ case NODE_MATH_ROUND:
operation = new MathRoundOperation(); operation = new MathRoundOperation();
break; break;
case 15: /* Less Than */ case NODE_MATH_LESS:
operation = new MathLessThanOperation(); operation = new MathLessThanOperation();
break; break;
case 16: /* Greater Than */ case NODE_MATH_GREATER:
operation = new MathGreaterThanOperation(); operation = new MathGreaterThanOperation();
break; break;
case 17: /* Modulo */ case NODE_MATH_MOD:
operation = new MathModuloOperation(); operation = new MathModuloOperation();
break; break;
case 18: /* Absolute Value */ case NODE_MATH_ABS:
operation = new MathAbsoluteOperation(); operation = new MathAbsoluteOperation();
break; break;
} }

View File

@@ -988,6 +988,29 @@ typedef struct NodeSunBeams {
/* math node clamp */ /* math node clamp */
#define SHD_MATH_CLAMP 1 #define SHD_MATH_CLAMP 1
/* Math node operation/ */
enum {
NODE_MATH_ADD = 0,
NODE_MATH_SUB = 1,
NODE_MATH_MUL = 2,
NODE_MATH_DIVIDE = 3,
NODE_MATH_SIN = 4,
NODE_MATH_COS = 5,
NODE_MATH_TAN = 6,
NODE_MATH_ASIN = 7,
NODE_MATH_ACOS = 8,
NODE_MATH_ATAN = 9,
NODE_MATH_POW = 10,
NODE_MATH_LOG = 11,
NODE_MATH_MIN = 12,
NODE_MATH_MAX = 13,
NODE_MATH_ROUND = 14,
NODE_MATH_LESS = 15,
NODE_MATH_GREATER = 16,
NODE_MATH_MOD = 17,
NODE_MATH_ABS = 18,
};
/* mix rgb node flags */ /* mix rgb node flags */
#define SHD_MIXRGB_USE_ALPHA 1 #define SHD_MIXRGB_USE_ALPHA 1
#define SHD_MIXRGB_CLAMP 2 #define SHD_MIXRGB_CLAMP 2

View File

@@ -112,25 +112,25 @@ EnumPropertyItem node_icon_items[] = {
#undef DEF_VICO #undef DEF_VICO
EnumPropertyItem node_math_items[] = { EnumPropertyItem node_math_items[] = {
{ 0, "ADD", 0, "Add", ""}, {NODE_MATH_ADD, "ADD", 0, "Add", ""},
{ 1, "SUBTRACT", 0, "Subtract", ""}, {NODE_MATH_SUB, "SUBTRACT", 0, "Subtract", ""},
{ 2, "MULTIPLY", 0, "Multiply", ""}, {NODE_MATH_MUL, "MULTIPLY", 0, "Multiply", ""},
{ 3, "DIVIDE", 0, "Divide", ""}, {NODE_MATH_DIVIDE, "DIVIDE", 0, "Divide", ""},
{ 4, "SINE", 0, "Sine", ""}, {NODE_MATH_SIN, "SINE", 0, "Sine", ""},
{ 5, "COSINE", 0, "Cosine", ""}, {NODE_MATH_COS, "COSINE", 0, "Cosine", ""},
{ 6, "TANGENT", 0, "Tangent", ""}, {NODE_MATH_TAN, "TANGENT", 0, "Tangent", ""},
{ 7, "ARCSINE", 0, "Arcsine", ""}, {NODE_MATH_ASIN, "ARCSINE", 0, "Arcsine", ""},
{ 8, "ARCCOSINE", 0, "Arccosine", ""}, {NODE_MATH_ACOS, "ARCCOSINE", 0, "Arccosine", ""},
{ 9, "ARCTANGENT", 0, "Arctangent", ""}, {NODE_MATH_ATAN, "ARCTANGENT", 0, "Arctangent", ""},
{10, "POWER", 0, "Power", ""}, {NODE_MATH_POW, "POWER", 0, "Power", ""},
{11, "LOGARITHM", 0, "Logarithm", ""}, {NODE_MATH_LOG, "LOGARITHM", 0, "Logarithm", ""},
{12, "MINIMUM", 0, "Minimum", ""}, {NODE_MATH_MIN, "MINIMUM", 0, "Minimum", ""},
{13, "MAXIMUM", 0, "Maximum", ""}, {NODE_MATH_MAX, "MAXIMUM", 0, "Maximum", ""},
{14, "ROUND", 0, "Round", ""}, {NODE_MATH_ROUND, "ROUND", 0, "Round", ""},
{15, "LESS_THAN", 0, "Less Than", ""}, {NODE_MATH_LESS, "LESS_THAN", 0, "Less Than", ""},
{16, "GREATER_THAN", 0, "Greater Than", ""}, {NODE_MATH_GREATER, "GREATER_THAN", 0, "Greater Than", ""},
{17, "MODULO", 0, "Modulo", ""}, {NODE_MATH_MOD, "MODULO", 0, "Modulo", ""},
{18, "ABSOLUTE", 0, "Absolute", ""}, {NODE_MATH_ABS, "ABSOLUTE", 0, "Absolute", ""},
{0, NULL, 0, NULL, NULL} {0, NULL, 0, NULL, NULL}
}; };

View File

@@ -54,16 +54,16 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
switch (node->custom1) { switch (node->custom1) {
case 0: /* Add */ case NODE_MATH_ADD:
r = a + b; r = a + b;
break; break;
case 1: /* Subtract */ case NODE_MATH_SUB:
r = a - b; r = a - b;
break; break;
case 2: /* Multiply */ case NODE_MATH_MUL:
r = a * b; r = a * b;
break; break;
case 3: /* Divide */ case NODE_MATH_DIVIDE:
{ {
if (b == 0) /* We don't want to divide by zero. */ if (b == 0) /* We don't want to divide by zero. */
r = 0.0; r = 0.0;
@@ -71,7 +71,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = a / b; r = a / b;
break; break;
} }
case 4: /* Sine */ case NODE_MATH_SIN:
{ {
if (in[0]->hasinput || !in[1]->hasinput) /* This one only takes one input, so we've got to choose. */ if (in[0]->hasinput || !in[1]->hasinput) /* This one only takes one input, so we've got to choose. */
r = sinf(a); r = sinf(a);
@@ -79,7 +79,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = sinf(b); r = sinf(b);
break; break;
} }
case 5: /* Cosine */ case NODE_MATH_COS:
{ {
if (in[0]->hasinput || !in[1]->hasinput) /* This one only takes one input, so we've got to choose. */ if (in[0]->hasinput || !in[1]->hasinput) /* This one only takes one input, so we've got to choose. */
r = cosf(a); r = cosf(a);
@@ -87,7 +87,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = cosf(b); r = cosf(b);
break; break;
} }
case 6: /* Tangent */ case NODE_MATH_TAN:
{ {
if (in[0]->hasinput || !in[1]->hasinput) /* This one only takes one input, so we've got to choose. */ if (in[0]->hasinput || !in[1]->hasinput) /* This one only takes one input, so we've got to choose. */
r = tanf(a); r = tanf(a);
@@ -95,7 +95,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = tanf(b); r = tanf(b);
break; break;
} }
case 7: /* Arc-Sine */ case NODE_MATH_ASIN:
{ {
if (in[0]->hasinput || !in[1]->hasinput) { /* This one only takes one input, so we've got to choose. */ if (in[0]->hasinput || !in[1]->hasinput) { /* This one only takes one input, so we've got to choose. */
/* Can't do the impossible... */ /* Can't do the impossible... */
@@ -113,7 +113,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
} }
break; break;
} }
case 8: /* Arc-Cosine */ case NODE_MATH_ACOS:
{ {
if (in[0]->hasinput || !in[1]->hasinput) { /* This one only takes one input, so we've got to choose. */ if (in[0]->hasinput || !in[1]->hasinput) { /* This one only takes one input, so we've got to choose. */
/* Can't do the impossible... */ /* Can't do the impossible... */
@@ -131,7 +131,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
} }
break; break;
} }
case 9: /* Arc-Tangent */ case NODE_MATH_ATAN:
{ {
if (in[0]->hasinput || !in[1]->hasinput) /* This one only takes one input, so we've got to choose. */ if (in[0]->hasinput || !in[1]->hasinput) /* This one only takes one input, so we've got to choose. */
r = atan(a); r = atan(a);
@@ -139,7 +139,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = atan(b); r = atan(b);
break; break;
} }
case 10: /* Power */ case NODE_MATH_POW:
{ {
/* Only raise negative numbers by full integers */ /* Only raise negative numbers by full integers */
if (a >= 0) { if (a >= 0) {
@@ -159,7 +159,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
break; break;
} }
case 11: /* Logarithm */ case NODE_MATH_LOG:
{ {
/* Don't want any imaginary numbers... */ /* Don't want any imaginary numbers... */
if (a > 0 && b > 0) if (a > 0 && b > 0)
@@ -168,7 +168,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = 0.0; r = 0.0;
break; break;
} }
case 12: /* Minimum */ case NODE_MATH_MIN:
{ {
if (a < b) if (a < b)
r = a; r = a;
@@ -176,7 +176,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = b; r = b;
break; break;
} }
case 13: /* Maximum */ case NODE_MATH_MAX:
{ {
if (a > b) if (a > b)
r = a; r = a;
@@ -184,7 +184,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = b; r = b;
break; break;
} }
case 14: /* Round */ case NODE_MATH_ROUND:
{ {
if (in[0]->hasinput || !in[1]->hasinput) /* This one only takes one input, so we've got to choose. */ if (in[0]->hasinput || !in[1]->hasinput) /* This one only takes one input, so we've got to choose. */
r = (a < 0) ? (int)(a - 0.5f) : (int)(a + 0.5f); r = (a < 0) ? (int)(a - 0.5f) : (int)(a + 0.5f);
@@ -192,7 +192,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = (b < 0) ? (int)(b - 0.5f) : (int)(b + 0.5f); r = (b < 0) ? (int)(b - 0.5f) : (int)(b + 0.5f);
break; break;
} }
case 15: /* Less Than */ case NODE_MATH_LESS:
{ {
if (a < b) if (a < b)
r = 1.0f; r = 1.0f;
@@ -200,7 +200,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = 0.0f; r = 0.0f;
break; break;
} }
case 16: /* Greater Than */ case NODE_MATH_GREATER:
{ {
if (a > b) if (a > b)
r = 1.0f; r = 1.0f;
@@ -208,7 +208,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = 0.0f; r = 0.0f;
break; break;
} }
case 17: /* Modulo */ case NODE_MATH_MOD:
{ {
if (b == 0.0f) if (b == 0.0f)
r = 0.0f; r = 0.0f;
@@ -216,7 +216,7 @@ static void node_shader_exec_math(void *UNUSED(data), int UNUSED(thread), bNode
r = fmod(a, b); r = fmod(a, b);
break; break;
} }
case 18: /* Absolute */ case NODE_MATH_ABS:
{ {
r = fabsf(a); r = fabsf(a);
break; break;
@@ -236,26 +236,26 @@ static int gpu_shader_math(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(
"math_round", "math_less_than", "math_greater_than", "math_modulo", "math_absolute"}; "math_round", "math_less_than", "math_greater_than", "math_modulo", "math_absolute"};
switch (node->custom1) { switch (node->custom1) {
case 0: case NODE_MATH_ADD:
case 1: case NODE_MATH_SUB:
case 2: case NODE_MATH_MUL:
case 3: case NODE_MATH_DIVIDE:
case 10: case NODE_MATH_POW:
case 11: case NODE_MATH_LOG:
case 12: case NODE_MATH_MIN:
case 13: case NODE_MATH_MAX:
case 15: case NODE_MATH_LESS:
case 16: case NODE_MATH_GREATER:
case 17: case NODE_MATH_MOD:
GPU_stack_link(mat, names[node->custom1], in, out); GPU_stack_link(mat, names[node->custom1], in, out);
break; break;
case 4: case NODE_MATH_SIN:
case 5: case NODE_MATH_COS:
case 6: case NODE_MATH_TAN:
case 7: case NODE_MATH_ASIN:
case 8: case NODE_MATH_ACOS:
case 9: case NODE_MATH_ATAN:
case 14: case NODE_MATH_ROUND:
if (in[0].hasinput || !in[1].hasinput) { if (in[0].hasinput || !in[1].hasinput) {
/* use only first item and terminator */ /* use only first item and terminator */
GPUNodeStack tmp_in[2]; GPUNodeStack tmp_in[2];

View File

@@ -53,16 +53,16 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
switch (node->custom1) { switch (node->custom1) {
case 0: /* Add */ case NODE_MATH_ADD:
*out = in0 + in1; *out = in0 + in1;
break; break;
case 1: /* Subtract */ case NODE_MATH_SUB:
*out = in0 - in1; *out = in0 - in1;
break; break;
case 2: /* Multiply */ case NODE_MATH_MUL:
*out = in0 * in1; *out = in0 * in1;
break; break;
case 3: /* Divide */ case NODE_MATH_DIVIDE:
{ {
if (in1 == 0) /* We don't want to divide by zero. */ if (in1 == 0) /* We don't want to divide by zero. */
*out = 0.0; *out = 0.0;
@@ -70,22 +70,22 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
*out = in0 / in1; *out = in0 / in1;
break; break;
} }
case 4: /* Sine */ case NODE_MATH_SIN:
{ {
*out = sinf(in0); *out = sinf(in0);
break; break;
} }
case 5: /* Cosine */ case NODE_MATH_COS:
{ {
*out = cosf(in0); *out = cosf(in0);
break; break;
} }
case 6: /* Tangent */ case NODE_MATH_TAN:
{ {
*out = tanf(in0); *out = tanf(in0);
break; break;
} }
case 7: /* Arc-Sine */ case NODE_MATH_ASIN:
{ {
/* Can't do the impossible... */ /* Can't do the impossible... */
if (in0 <= 1 && in0 >= -1) if (in0 <= 1 && in0 >= -1)
@@ -94,7 +94,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
*out = 0.0; *out = 0.0;
break; break;
} }
case 8: /* Arc-Cosine */ case NODE_MATH_ACOS:
{ {
/* Can't do the impossible... */ /* Can't do the impossible... */
if (in0 <= 1 && in0 >= -1) if (in0 <= 1 && in0 >= -1)
@@ -103,12 +103,12 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
*out = 0.0; *out = 0.0;
break; break;
} }
case 9: /* Arc-Tangent */ case NODE_MATH_ATAN:
{ {
*out = atan(in0); *out = atan(in0);
break; break;
} }
case 10: /* Power */ case NODE_MATH_POW:
{ {
/* Only raise negative numbers by full integers */ /* Only raise negative numbers by full integers */
if (in0 >= 0) { if (in0 >= 0) {
@@ -125,7 +125,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
} }
break; break;
} }
case 11: /* Logarithm */ case NODE_MATH_LOG:
{ {
/* Don't want any imaginary numbers... */ /* Don't want any imaginary numbers... */
if (in0 > 0 && in1 > 0) if (in0 > 0 && in1 > 0)
@@ -134,7 +134,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
*out = 0.0; *out = 0.0;
break; break;
} }
case 12: /* Minimum */ case NODE_MATH_MIN:
{ {
if (in0 < in1) if (in0 < in1)
*out = in0; *out = in0;
@@ -142,7 +142,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
*out = in1; *out = in1;
break; break;
} }
case 13: /* Maximum */ case NODE_MATH_MAX:
{ {
if (in0 > in1) if (in0 > in1)
*out = in0; *out = in0;
@@ -150,13 +150,13 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
*out = in1; *out = in1;
break; break;
} }
case 14: /* Round */ case NODE_MATH_ROUND:
{ {
*out = (in0 < 0) ? (int)(in0 - 0.5f) : (int)(in0 + 0.5f); *out = (in0 < 0) ? (int)(in0 - 0.5f) : (int)(in0 + 0.5f);
break; break;
} }
case 15: /* Less Than */ case NODE_MATH_LESS:
{ {
if (in0 < in1) if (in0 < in1)
*out = 1.0f; *out = 1.0f;
@@ -165,7 +165,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
break; break;
} }
case 16: /* Greater Than */ case NODE_MATH_GREATER:
{ {
if (in0 > in1) if (in0 > in1)
*out = 1.0f; *out = 1.0f;
@@ -174,7 +174,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
break; break;
} }
case 17: /* Modulo */ case NODE_MATH_MOD:
{ {
if (in1 == 0.0f) if (in1 == 0.0f)
*out = 0.0f; *out = 0.0f;
@@ -183,7 +183,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
break; break;
} }
case 18: /* Absolute */ case NODE_MATH_ABS:
{ {
*out = fabsf(in0); *out = fabsf(in0);
break; break;