Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalf Hölzemer <r.hoelzemer@googlemail.com>2016-05-23 16:12:52 +0300
committerAlexander Romanov <a.romanov@blend4web.com>2016-05-23 16:25:44 +0300
commita6b218af2e62f5f0b37c05458072c7a4fb8ebf3d (patch)
tree9e69caf3f6e26d20993b8384218afa0c750d3594 /source/blender/nodes
parent66dceb2bedd2184f00a71513fa80fd56fc5f8ed2 (diff)
Enable correct GLSL output for cycles normalmap node
See T48453 for details and test scenes Reviewers: a.romanov, sergey Reviewed By: a.romanov, sergey Projects: #opengl_gfx, #nodes Differential Revision: https://developer.blender.org/D2011
Diffstat (limited to 'source/blender/nodes')
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_normal_map.c61
1 files changed, 47 insertions, 14 deletions
diff --git a/source/blender/nodes/shader/nodes/node_shader_normal_map.c b/source/blender/nodes/shader/nodes/node_shader_normal_map.c
index 642e5b296be..d2695609a88 100644
--- a/source/blender/nodes/shader/nodes/node_shader_normal_map.c
+++ b/source/blender/nodes/shader/nodes/node_shader_normal_map.c
@@ -121,35 +121,69 @@ static int gpu_shader_normal_map(GPUMaterial *mat, bNode *node, bNodeExecData *U
else
strength = GPU_uniform(in[0].vec);
- if (in[1].link) {
- GPU_link(mat, "color_to_normal", in[1].link, &realnorm);
- GPU_link(mat, "mtex_negate_texnormal", realnorm, &realnorm);
- }
+ if (in[1].link)
+ realnorm = in[1].link;
+ else
+ realnorm = GPU_uniform(in[1].vec);
+ negnorm = GPU_builtin(GPU_VIEW_NORMAL);
GPU_link(mat, "math_max", strength, GPU_uniform(d), &strength);
- GPU_link(mat, "vec_math_negate", GPU_builtin(GPU_VIEW_NORMAL), &negnorm);
- if (in[1].link) {
+ if (GPU_material_use_new_shading_nodes(mat)) {
+
+ /* **************** CYCLES ******************** */
+
+ GPU_link(mat, "direction_transform_m4v3", negnorm, GPU_builtin(GPU_INVERSE_VIEW_MATRIX), &negnorm);
+
switch (nm->space) {
case SHD_NORMAL_MAP_TANGENT:
- GPU_link(mat, "node_normal_map", GPU_attribute(CD_TANGENT, nm->uv_map), negnorm, realnorm, &out[0].link);
+ GPU_link(mat, "color_to_normal_new_shading", realnorm, &realnorm);
+ GPU_link(mat, "node_normal_map", GPU_attribute(CD_TANGENT, nm->uv_map), negnorm, realnorm, &realnorm);
break;
case SHD_NORMAL_MAP_OBJECT:
+ GPU_link(mat, "color_to_normal_new_shading", realnorm, &realnorm);
+ GPU_link(mat, "direction_transform_m4v3", realnorm, GPU_builtin(GPU_OBJECT_MATRIX), &realnorm);
+ break;
case SHD_NORMAL_MAP_BLENDER_OBJECT:
- GPU_link(mat, "direction_transform_m4v3", realnorm, GPU_builtin(GPU_LOC_TO_VIEW_MATRIX), &out[0].link);
+ GPU_link(mat, "color_to_blender_normal_new_shading", realnorm, &realnorm);
+ GPU_link(mat, "direction_transform_m4v3", realnorm, GPU_builtin(GPU_OBJECT_MATRIX), &realnorm);
break;
case SHD_NORMAL_MAP_WORLD:
+ GPU_link(mat, "color_to_normal_new_shading", realnorm, &realnorm);
+ break;
case SHD_NORMAL_MAP_BLENDER_WORLD:
- GPU_link(mat, "direction_transform_m4v3", realnorm, GPU_builtin(GPU_VIEW_MATRIX), &out[0].link);
+ GPU_link(mat, "color_to_blender_normal_new_shading", realnorm, &realnorm);
break;
+
+ GPU_link(mat, "vect_normalize", realnorm, &realnorm);
}
- }
- if (out[0].link) {
- GPU_link(mat, "vec_math_mix", strength, out[0].link, negnorm, &out[0].link);
- GPU_link(mat, "vect_normalize", out[0].link, &out[0].link);
+ } else {
+
+ /* *********** BLENDER INTERNAL *************** */
+
+ GPU_link(mat, "color_to_normal", realnorm, &realnorm);
+ GPU_link(mat, "mtex_negate_texnormal", realnorm, &realnorm);
+ GPU_link(mat, "vec_math_negate", negnorm, &negnorm);
+
+ switch (nm->space) {
+ case SHD_NORMAL_MAP_TANGENT:
+ GPU_link(mat, "node_normal_map", GPU_attribute(CD_TANGENT, nm->uv_map), negnorm, realnorm, &realnorm);
+ break;
+ case SHD_NORMAL_MAP_OBJECT:
+ case SHD_NORMAL_MAP_BLENDER_OBJECT:
+ GPU_link(mat, "direction_transform_m4v3", realnorm, GPU_builtin(GPU_LOC_TO_VIEW_MATRIX), &realnorm);
+ break;
+ case SHD_NORMAL_MAP_WORLD:
+ case SHD_NORMAL_MAP_BLENDER_WORLD:
+ GPU_link(mat, "direction_transform_m4v3", realnorm, GPU_builtin(GPU_VIEW_MATRIX), &realnorm);
+ break;
+ }
}
+ GPU_link(mat, "vec_math_mix", strength, realnorm, negnorm, &out[0].link);
+ GPU_link(mat, "vect_normalize", out[0].link, &out[0].link);
+
return true;
}
@@ -169,4 +203,3 @@ void register_node_type_sh_normal_map(void)
nodeRegisterType(&ntype);
}
-