diff options
author | Alexander Romanov <a.romanov@blend4web.com> | 2016-02-01 18:46:32 +0300 |
---|---|---|
committer | Alexander Romanov <a.romanov@blend4web.com> | 2016-02-01 18:46:32 +0300 |
commit | 25de685d3668b6ed10af144ff33e2d44da00df61 (patch) | |
tree | a9e1a5669c08427e860df0cfd494c9189647cee7 /source/blender/nodes | |
parent | 80a540903359210fe882c42d59b976f3f91ffe06 (diff) |
Fix T47288 Vector transform not behaving correctly with camera space and cycles
Diffstat (limited to 'source/blender/nodes')
-rw-r--r-- | source/blender/nodes/shader/nodes/node_shader_vectTransform.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/source/blender/nodes/shader/nodes/node_shader_vectTransform.c b/source/blender/nodes/shader/nodes/node_shader_vectTransform.c index d31a175b9b4..35a12d52b2d 100644 --- a/source/blender/nodes/shader/nodes/node_shader_vectTransform.c +++ b/source/blender/nodes/shader/nodes/node_shader_vectTransform.c @@ -163,6 +163,8 @@ static int gpu_shader_vect_transform(GPUMaterial *mat, bNode *node, bNodeExecDat const char *ptransform = "point_transform_m4v3"; const char *func_name = 0; + bool new_shading = GPU_material_use_new_shading_nodes(mat); + NodeShaderVectTransform *nodeprop = (NodeShaderVectTransform *)node->storage; if (in[0].hasinput) @@ -173,8 +175,22 @@ static int gpu_shader_vect_transform(GPUMaterial *mat, bNode *node, bNodeExecDat fromto = get_gpulink_matrix_from_to(nodeprop->convert_from, nodeprop->convert_to); func_name = (nodeprop->type == SHD_VECT_TRANSFORM_TYPE_POINT) ? ptransform : vtransform; - if (fromto) - ret = GPU_link(mat, func_name, inputlink, fromto, &out[0].link); + if (fromto) { + if (new_shading) { + /* For cycles we have inverted Z */ + /* TODO: pass here the correct matrices */ + if (nodeprop->convert_from == SHD_VECT_TRANSFORM_SPACE_CAMERA && nodeprop->convert_to != SHD_VECT_TRANSFORM_SPACE_CAMERA) { + ret = GPU_link(mat, "invert_z", inputlink, &inputlink); + } + ret = GPU_link(mat, func_name, inputlink, fromto, &out[0].link); + if (nodeprop->convert_to == SHD_VECT_TRANSFORM_SPACE_CAMERA && nodeprop->convert_from != SHD_VECT_TRANSFORM_SPACE_CAMERA) { + ret = GPU_link(mat, "invert_z", out[0].link, &out[0].link); + } + } + else { + ret = GPU_link(mat, func_name, inputlink, fromto, &out[0].link); + } + } else ret = GPU_link(mat, "set_rgb", inputlink, &out[0].link); |