Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/geom/motion_triangle_intersect.h
| Show First 20 Lines • Show All 157 Lines • ▼ Show 20 Lines | ccl_device_inline bool motion_triangle_intersect(KernelGlobals kg, | ||||
| /* Primitive index for vertex location lookup. */ | /* Primitive index for vertex location lookup. */ | ||||
| int prim = kernel_tex_fetch(__prim_index, prim_addr); | int prim = kernel_tex_fetch(__prim_index, prim_addr); | ||||
| int fobject = (object == OBJECT_NONE) ? kernel_tex_fetch(__prim_object, prim_addr) : object; | int fobject = (object == OBJECT_NONE) ? kernel_tex_fetch(__prim_object, prim_addr) : object; | ||||
| /* Get vertex locations for intersection. */ | /* Get vertex locations for intersection. */ | ||||
| float3 verts[3]; | float3 verts[3]; | ||||
| motion_triangle_vertices(kg, fobject, prim, time, verts); | motion_triangle_vertices(kg, fobject, prim, time, verts); | ||||
| /* Ray-triangle intersection, unoptimized. */ | /* Ray-triangle intersection, unoptimized. */ | ||||
| float t, u, v; | float t, u, v; | ||||
| if (ray_triangle_intersect(P, | if (ray_triangle_intersect(P, dir, tmax, verts[0], verts[1], verts[2], &u, &v, &t)) { | ||||
| dir, | |||||
| tmax, | |||||
| #if defined(__KERNEL_SSE2__) && defined(__KERNEL_SSE__) | |||||
| (ssef *)verts, | |||||
| #else | |||||
| verts[0], | |||||
| verts[1], | |||||
| verts[2], | |||||
| #endif | |||||
| &u, | |||||
| &v, | |||||
| &t)) { | |||||
| #ifdef __VISIBILITY_FLAG__ | #ifdef __VISIBILITY_FLAG__ | ||||
| /* Visibility flag test. we do it here under the assumption | /* Visibility flag test. we do it here under the assumption | ||||
| * that most triangles are culled by node flags. | * that most triangles are culled by node flags. | ||||
| */ | */ | ||||
| if (kernel_tex_fetch(__prim_visibility, prim_addr) & visibility) | if (kernel_tex_fetch(__prim_visibility, prim_addr) & visibility) | ||||
| #endif | #endif | ||||
| { | { | ||||
| isect->t = t; | isect->t = t; | ||||
| Show All 37 Lines | ccl_device_inline bool motion_triangle_intersect_local(KernelGlobals kg, | ||||
| /* Primitive index for vertex location lookup. */ | /* Primitive index for vertex location lookup. */ | ||||
| int prim = kernel_tex_fetch(__prim_index, prim_addr); | int prim = kernel_tex_fetch(__prim_index, prim_addr); | ||||
| /* Get vertex locations for intersection. */ | /* Get vertex locations for intersection. */ | ||||
| float3 verts[3]; | float3 verts[3]; | ||||
| motion_triangle_vertices(kg, local_object, prim, time, verts); | motion_triangle_vertices(kg, local_object, prim, time, verts); | ||||
| /* Ray-triangle intersection, unoptimized. */ | /* Ray-triangle intersection, unoptimized. */ | ||||
| float t, u, v; | float t, u, v; | ||||
| if (!ray_triangle_intersect(P, | if (!ray_triangle_intersect(P, dir, tmax, verts[0], verts[1], verts[2], &u, &v, &t)) { | ||||
| dir, | |||||
| tmax, | |||||
| # if defined(__KERNEL_SSE2__) && defined(__KERNEL_SSE__) | |||||
| (ssef *)verts, | |||||
| # else | |||||
| verts[0], | |||||
| verts[1], | |||||
| verts[2], | |||||
| # endif | |||||
| &u, | |||||
| &v, | |||||
| &t)) { | |||||
| return false; | return false; | ||||
| } | } | ||||
| /* If no actual hit information is requested, just return here. */ | /* If no actual hit information is requested, just return here. */ | ||||
| if (max_hits == 0) { | if (max_hits == 0) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 51 Lines • Show Last 20 Lines | |||||