[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36486] branches/cycles/intern/cycles: Cycles: fix for UV texture coordinates lookup with more than one mesh, bug in corner attribute storage.

Brecht Van Lommel brechtvanlommel at pandora.be
Wed May 4 16:01:39 CEST 2011


Revision: 36486
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36486
Author:   blendix
Date:     2011-05-04 14:01:38 +0000 (Wed, 04 May 2011)
Log Message:
-----------
Cycles: fix for UV texture coordinates lookup with more than one mesh, bug in corner attribute storage.

Modified Paths:
--------------
    branches/cycles/intern/cycles/kernel/kernel_triangle.h
    branches/cycles/intern/cycles/render/mesh.cpp

Modified: branches/cycles/intern/cycles/kernel/kernel_triangle.h
===================================================================
--- branches/cycles/intern/cycles/kernel/kernel_triangle.h	2011-05-04 13:15:42 UTC (rev 36485)
+++ branches/cycles/intern/cycles/kernel/kernel_triangle.h	2011-05-04 14:01:38 UTC (rev 36486)
@@ -116,10 +116,10 @@
 		return sd->u*f0 + sd->v*f1 + (1.0f - sd->u - sd->v)*f2;
 	}
 	else if(elem == ATTR_ELEMENT_CORNER) {
-		int tri = offset + sd->prim;
-		float f0 = kernel_tex_fetch(__attributes_float, tri*3 + 0);
-		float f1 = kernel_tex_fetch(__attributes_float, tri*3 + 1);
-		float f2 = kernel_tex_fetch(__attributes_float, tri*3 + 2);
+		int tri = offset + sd->prim*3;
+		float f0 = kernel_tex_fetch(__attributes_float, tri + 0);
+		float f1 = kernel_tex_fetch(__attributes_float, tri + 1);
+		float f2 = kernel_tex_fetch(__attributes_float, tri + 2);
 
 #ifdef __RAY_DIFFERENTIALS__
 		if(dx) *dx = sd->du.dx*f0 + sd->dv.dx*f1 - (sd->du.dx + sd->dv.dx)*f2;
@@ -159,10 +159,10 @@
 		return sd->u*f0 + sd->v*f1 + (1.0f - sd->u - sd->v)*f2;
 	}
 	else if(elem == ATTR_ELEMENT_CORNER) {
-		int tri = offset + sd->prim;
-		float3 f0 = as_float3(kernel_tex_fetch(__attributes_float3, tri*3 + 0));
-		float3 f1 = as_float3(kernel_tex_fetch(__attributes_float3, tri*3 + 1));
-		float3 f2 = as_float3(kernel_tex_fetch(__attributes_float3, tri*3 + 2));
+		int tri = offset + sd->prim*3;
+		float3 f0 = as_float3(kernel_tex_fetch(__attributes_float3, tri + 0));
+		float3 f1 = as_float3(kernel_tex_fetch(__attributes_float3, tri + 1));
+		float3 f2 = as_float3(kernel_tex_fetch(__attributes_float3, tri + 2));
 
 #ifdef __RAY_DIFFERENTIALS__
 		if(dx) *dx = sd->du.dx*f0 + sd->dv.dx*f1 - (sd->du.dx + sd->dv.dx)*f2;

Modified: branches/cycles/intern/cycles/render/mesh.cpp
===================================================================
--- branches/cycles/intern/cycles/render/mesh.cpp	2011-05-04 13:15:42 UTC (rev 36485)
+++ branches/cycles/intern/cycles/render/mesh.cpp	2011-05-04 14:01:38 UTC (rev 36486)
@@ -469,11 +469,13 @@
 			}
 
 			/* mesh vertex/triangle index is global, not per object, so we sneak
-			   a correct for that in here */
+			   a correction for that in here */
 			if(req.element == ATTR_ELEMENT_VERTEX)
 				req.offset -= mesh->vert_offset;
-			else
+			else if(mattr->element == Attribute::FACE)
 				req.offset -= mesh->tri_offset;
+			else if(mattr->element == Attribute::CORNER)
+				req.offset -= 3*mesh->tri_offset;
 
 			if(progress.get_cancel()) return;
 		}




More information about the Bf-blender-cvs mailing list