[Bf-blender-cvs] [6080e43] temp-cycles-microdisplacement: Fix bug in offset calculation of attributes for subdivision patches
Mai Lavelle
noreply at git.blender.org
Tue Apr 12 18:46:12 CEST 2016
Commit: 6080e43e0b7f5461fa61ec3d612ed9ce564b677c
Author: Mai Lavelle
Date: Tue Apr 12 11:10:27 2016 -0400
Branches: temp-cycles-microdisplacement
https://developer.blender.org/rB6080e43e0b7f5461fa61ec3d612ed9ce564b677c
Fix bug in offset calculation of attributes for subdivision patches
===================================================================
M intern/cycles/kernel/geom/geom_cache_triangle.h
M intern/cycles/render/mesh.cpp
===================================================================
diff --git a/intern/cycles/kernel/geom/geom_cache_triangle.h b/intern/cycles/kernel/geom/geom_cache_triangle.h
index 1d95ed0..eef417b 100644
--- a/intern/cycles/kernel/geom/geom_cache_triangle.h
+++ b/intern/cycles/kernel/geom/geom_cache_triangle.h
@@ -181,7 +181,7 @@ ccl_device float cache_triangle_attribute_float(KernelGlobals *kg, const ShaderD
if(dx) *dx = 0.0f;
if(dy) *dy = 0.0f;
- return kernel_tex_fetch(__attributes_float, offset + ccl_fetch(sd, prim));
+ return kernel_tex_fetch(__attributes_float, offset + ccl_fetch(sd, cache_triangle).patch);
}
else if(elem == ATTR_ELEMENT_VERTEX || elem == ATTR_ELEMENT_VERTEX_MOTION) {
float2 uv[3];
@@ -263,7 +263,7 @@ ccl_device float3 cache_triangle_attribute_float3(KernelGlobals *kg, const Shade
if(dx) *dx = make_float3(0.0f, 0.0f, 0.0f);
if(dy) *dy = make_float3(0.0f, 0.0f, 0.0f);
- return float4_to_float3(kernel_tex_fetch(__attributes_float3, offset + ccl_fetch(sd, prim)));
+ return float4_to_float3(kernel_tex_fetch(__attributes_float3, offset + ccl_fetch(sd, cache_triangle).patch));
}
else if(elem == ATTR_ELEMENT_VERTEX || elem == ATTR_ELEMENT_VERTEX_MOTION) {
float2 uv[3];
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index e226b70..82365b5 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -978,22 +978,17 @@ static void update_attribute_element_offset(Mesh *mesh,
/* mesh vertex/curve index is global, not per object, so we sneak
* a correction for that in here */
- if(element == ATTR_ELEMENT_VERTEX)
+ if(prim == ATTR_PRIM_SUBD) {
+ /* subd requires no correction */
+ }
+ else if(element == ATTR_ELEMENT_VERTEX)
offset -= mesh->vert_offset;
else if(element == ATTR_ELEMENT_VERTEX_MOTION)
offset -= mesh->vert_offset;
- else if(element == ATTR_ELEMENT_FACE) {
- if(prim == ATTR_PRIM_TRIANGLE)
- offset -= mesh->tri_offset;
- else
- offset -= mesh->patch_offset;
- }
- else if(element == ATTR_ELEMENT_CORNER || element == ATTR_ELEMENT_CORNER_BYTE) {
- if(prim == ATTR_PRIM_TRIANGLE)
- offset -= 3*mesh->tri_offset;
- else
- offset -= 4*mesh->patch_offset;
- }
+ else if(element == ATTR_ELEMENT_FACE)
+ offset -= mesh->tri_offset;
+ else if(element == ATTR_ELEMENT_CORNER || element == ATTR_ELEMENT_CORNER_BYTE)
+ offset -= 3*mesh->tri_offset;
else if(element == ATTR_ELEMENT_CURVE)
offset -= mesh->curve_offset;
else if(element == ATTR_ELEMENT_CURVE_KEY)
More information about the Bf-blender-cvs
mailing list