[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57919] branches/soc-2013-dingto/intern/ cycles/kernel/svm/svm_vector_transform.h: Cycles / Vector Transform Node:

Thomas Dinges blender at dingto.org
Tue Jul 2 01:17:25 CEST 2013


Revision: 57919
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57919
Author:   dingto
Date:     2013-07-01 23:17:24 +0000 (Mon, 01 Jul 2013)
Log Message:
-----------
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. 

Modified Paths:
--------------
    branches/soc-2013-dingto/intern/cycles/kernel/svm/svm_vector_transform.h

Modified: branches/soc-2013-dingto/intern/cycles/kernel/svm/svm_vector_transform.h
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/svm/svm_vector_transform.h	2013-07-01 22:56:56 UTC (rev 57918)
+++ branches/soc-2013-dingto/intern/cycles/kernel/svm/svm_vector_transform.h	2013-07-01 23:17:24 UTC (rev 57919)
@@ -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 @@
 	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 @@
 			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 @@
 			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 @@
 	
 	/* 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




More information about the Bf-blender-cvs mailing list