Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/shader/nodes/node_shader_vectMath.c
| Show First 20 Lines • Show All 90 Lines • ▼ Show 20 Lines | else if (node->custom1 == 5) { /* Normalize */ | ||||
| else { | else { | ||||
| out[0]->vec[0] = vec2[0]; | out[0]->vec[0] = vec2[0]; | ||||
| out[0]->vec[1] = vec2[1]; | out[0]->vec[1] = vec2[1]; | ||||
| out[0]->vec[2] = vec2[2]; | out[0]->vec[2] = vec2[2]; | ||||
| } | } | ||||
| out[1]->vec[0] = normalize_v3(out[0]->vec); | out[1]->vec[0] = normalize_v3(out[0]->vec); | ||||
| } | } | ||||
| else if (node->custom1 == 6) { /* Multiply */ | |||||
| out[0]->vec[0] = vec1[0] * vec2[0]; | |||||
| out[0]->vec[1] = vec1[1] * vec2[1]; | |||||
| out[0]->vec[2] = vec1[2] * vec2[2]; | |||||
| out[1]->vec[0] = (fabsf(out[0]->vec[0]) + fabsf(out[0]->vec[1]) + fabsf(out[0]->vec[2])) / 3.0f; | |||||
| } | |||||
| } | } | ||||
| static int gpu_shader_vect_math(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out) | static int gpu_shader_vect_math(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out) | ||||
| { | { | ||||
| static const char *names[] = {"vec_math_add", "vec_math_sub", | static const char *names[] = {"vec_math_add", "vec_math_sub", | ||||
| "vec_math_average", "vec_math_dot", "vec_math_cross", | "vec_math_average", "vec_math_dot", "vec_math_cross", | ||||
| "vec_math_normalize"}; | "vec_math_normalize","vec_math_multiply"}; | ||||
| switch (node->custom1) { | switch (node->custom1) { | ||||
| case 0: | case 0: | ||||
| case 1: | case 1: | ||||
| case 2: | case 2: | ||||
| case 3: | case 3: | ||||
| case 4: | case 4: | ||||
| case 6: | |||||
| GPU_stack_link(mat, node, names[node->custom1], in, out); | GPU_stack_link(mat, node, names[node->custom1], in, out); | ||||
| break; | break; | ||||
| case 5: | case 5: | ||||
| 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]; | ||||
| memcpy(&tmp_in[0], &in[0], sizeof(GPUNodeStack)); | memcpy(&tmp_in[0], &in[0], sizeof(GPUNodeStack)); | ||||
| memcpy(&tmp_in[1], &in[2], sizeof(GPUNodeStack)); | memcpy(&tmp_in[1], &in[2], sizeof(GPUNodeStack)); | ||||
| Show All 30 Lines | |||||