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; } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs