diff options
Diffstat (limited to 'intern/cycles/kernel/kernel_primitive.h')
-rw-r--r-- | intern/cycles/kernel/kernel_primitive.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/intern/cycles/kernel/kernel_primitive.h b/intern/cycles/kernel/kernel_primitive.h index ababad28f35..0e39c489fbc 100644 --- a/intern/cycles/kernel/kernel_primitive.h +++ b/intern/cycles/kernel/kernel_primitive.h @@ -89,6 +89,25 @@ ccl_device float3 primitive_uv(KernelGlobals *kg, ShaderData *sd) return uv; } +ccl_device bool primitive_ptex(KernelGlobals *kg, ShaderData *sd, float2 *uv, int *face_id) +{ + /* storing ptex data as attributes is not memory efficient but simple for tests */ + AttributeElement elem_face_id, elem_uv; + int offset_face_id = find_attribute(kg, sd, ATTR_STD_PTEX_FACE_ID, &elem_face_id); + int offset_uv = find_attribute(kg, sd, ATTR_STD_PTEX_UV, &elem_uv); + + if(offset_face_id == ATTR_STD_NOT_FOUND || offset_uv == ATTR_STD_NOT_FOUND) + return false; + + float3 uv3 = primitive_attribute_float3(kg, sd, elem_uv, offset_uv, NULL, NULL); + float face_id_f = primitive_attribute_float(kg, sd, elem_face_id, offset_face_id, NULL, NULL); + + *uv = make_float2(uv3.x, uv3.y); + *face_id = (int)face_id_f; + + return true; +} + ccl_device float3 primitive_tangent(KernelGlobals *kg, ShaderData *sd) { #ifdef __HAIR__ |