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:
authorThomas Dinges <blender@dingto.org>2013-07-02 03:17:24 +0400
committerThomas Dinges <blender@dingto.org>2013-07-02 03:17:24 +0400
commit3a6e382d4aef6ad4bcba8a482d6d5fb5f96a6618 (patch)
tree649cf61ca52a5b493652be68a3256922e96a0ddb /intern/cycles/kernel
parent7f1005cd6a97f9ae44ee2b2243da66b91bffb7a1 (diff)
Cycles / Vector Transform Node:
* After some more thinking, solved the remaining ToDos. :) * Added is_object check to check if we have a valid object. * If we operate on the world, and try to convert from/to object space, we now assume world space instead, same as OSL.
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r--intern/cycles/kernel/svm/svm_vector_transform.h12
1 files changed, 4 insertions, 8 deletions
diff --git a/intern/cycles/kernel/svm/svm_vector_transform.h b/intern/cycles/kernel/svm/svm_vector_transform.h
index aa2c30a4831..8b5369ab626 100644
--- a/intern/cycles/kernel/svm/svm_vector_transform.h
+++ b/intern/cycles/kernel/svm/svm_vector_transform.h
@@ -18,11 +18,6 @@
CCL_NAMESPACE_BEGIN
-/* ToDo
-* if (object != ~0) null check?
-* differs from OSL when used for the world
-*/
-
/* Vector Transform */
__device void svm_node_vector_transform(KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node)
@@ -40,6 +35,7 @@ __device void svm_node_vector_transform(KernelGlobals *kg, ShaderData *sd, float
NodeVectorTransformConvertTo to = (NodeVectorTransformConvertTo)ito;
Transform tfm;
+ int is_object = (sd->object != ~0);
/* From world */
if(from == NODE_VECTOR_TRANSFORM_CONVERT_FROM_WORLD) {
@@ -50,7 +46,7 @@ __device void svm_node_vector_transform(KernelGlobals *kg, ShaderData *sd, float
else
in = transform_point(&tfm, in);
}
- else if (to == NODE_VECTOR_TRANSFORM_CONVERT_TO_OBJECT) {
+ else if (to == NODE_VECTOR_TRANSFORM_CONVERT_TO_OBJECT && is_object) {
if(type == NODE_VECTOR_TRANSFORM_TYPE_VECTOR)
object_inverse_dir_transform(kg, sd, &in);
else
@@ -67,7 +63,7 @@ __device void svm_node_vector_transform(KernelGlobals *kg, ShaderData *sd, float
else
in = transform_point(&tfm, in);
}
- if(to == NODE_VECTOR_TRANSFORM_CONVERT_TO_OBJECT) {
+ if(to == NODE_VECTOR_TRANSFORM_CONVERT_TO_OBJECT && is_object) {
if(type == NODE_VECTOR_TRANSFORM_TYPE_VECTOR)
object_inverse_dir_transform(kg, sd, &in);
else
@@ -77,7 +73,7 @@ __device void svm_node_vector_transform(KernelGlobals *kg, ShaderData *sd, float
/* From object */
else if(from == NODE_VECTOR_TRANSFORM_CONVERT_FROM_OBJECT) {
- if(to == NODE_VECTOR_TRANSFORM_CONVERT_TO_WORLD || to == NODE_VECTOR_TRANSFORM_CONVERT_TO_CAMERA) {
+ if((to == NODE_VECTOR_TRANSFORM_CONVERT_TO_WORLD || to == NODE_VECTOR_TRANSFORM_CONVERT_TO_CAMERA) && is_object) {
if(type == NODE_VECTOR_TRANSFORM_TYPE_VECTOR)
object_dir_transform(kg, sd, &in);
else