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:
authorAlexander Romanov <a.romanov@blend4web.com>2016-02-01 18:46:32 +0300
committerAlexander Romanov <a.romanov@blend4web.com>2016-02-01 18:46:32 +0300
commit25de685d3668b6ed10af144ff33e2d44da00df61 (patch)
treea9e1a5669c08427e860df0cfd494c9189647cee7 /source/blender/nodes
parent80a540903359210fe882c42d59b976f3f91ffe06 (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.c20
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);