~siretart/ubuntu/utopic/blender/libav10

« back to all changes in this revision

Viewing changes to intern/cycles/kernel/kernel_triangle.h

  • Committer: Reinhard Tartler
  • Date: 2014-05-31 01:50:05 UTC
  • mfrom: (14.2.27 sid)
  • Revision ID: siretart@tauware.de-20140531015005-ml6druahuj82nsav
mergeĀ fromĀ debian

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
CCL_NAMESPACE_BEGIN
18
18
 
19
19
/* Point on triangle for Moller-Trumbore triangles */
20
 
__device_inline float3 triangle_point_MT(KernelGlobals *kg, int tri_index, float u, float v)
 
20
ccl_device_inline float3 triangle_point_MT(KernelGlobals *kg, int tri_index, float u, float v)
21
21
{
22
22
        /* load triangle vertices */
23
23
        float3 tri_vindex = float4_to_float3(kernel_tex_fetch(__tri_vindex, tri_index));
31
31
        return (u*v0 + v*v1 + t*v2);
32
32
}
33
33
 
34
 
/* Sample point on triangle */
35
 
__device_inline float3 triangle_sample_MT(KernelGlobals *kg, int tri_index, float randu, float randv)
36
 
{
37
 
        /* compute point */
38
 
        randu = sqrtf(randu);
39
 
 
40
 
        float u = 1.0f - randu;
41
 
        float v = randv*randu;
42
 
 
43
 
        return triangle_point_MT(kg, tri_index, u, v);
44
 
}
45
 
 
46
34
/* Normal for Moller-Trumbore triangles */
47
 
__device_inline float3 triangle_normal_MT(KernelGlobals *kg, int tri_index, int *shader)
 
35
ccl_device_inline float3 triangle_normal_MT(KernelGlobals *kg, int tri_index, int *shader)
48
36
{
49
37
#if 0
50
38
        /* load triangle vertices */
64
52
}
65
53
 
66
54
/* Return 3 triangle vertex locations */
67
 
__device_inline void triangle_vertices(KernelGlobals *kg, int tri_index, float3 P[3])
 
55
ccl_device_inline void triangle_vertices(KernelGlobals *kg, int tri_index, float3 P[3])
68
56
{
69
57
        /* load triangle vertices */
70
58
        float3 tri_vindex = float4_to_float3(kernel_tex_fetch(__tri_vindex, tri_index));
74
62
        P[2] = float4_to_float3(kernel_tex_fetch(__tri_verts, __float_as_int(tri_vindex.z)));
75
63
}
76
64
 
77
 
__device_inline float3 triangle_smooth_normal(KernelGlobals *kg, int tri_index, float u, float v)
 
65
ccl_device_inline float3 triangle_smooth_normal(KernelGlobals *kg, int tri_index, float u, float v)
78
66
{
79
67
        /* load triangle vertices */
80
68
        float3 tri_vindex = float4_to_float3(kernel_tex_fetch(__tri_vindex, tri_index));
86
74
        return normalize((1.0f - u - v)*n2 + u*n0 + v*n1);
87
75
}
88
76
 
89
 
__device_inline void triangle_dPdudv(KernelGlobals *kg, float3 *dPdu, float3 *dPdv, int tri)
 
77
ccl_device_inline void triangle_dPdudv(KernelGlobals *kg, float3 *dPdu, float3 *dPdv, int tri)
90
78
{
91
79
        /* fetch triangle vertex coordinates */
92
80
        float3 tri_vindex = float4_to_float3(kernel_tex_fetch(__tri_vindex, tri));
102
90
 
103
91
/* attributes */
104
92
 
105
 
__device float triangle_attribute_float(KernelGlobals *kg, const ShaderData *sd, AttributeElement elem, int offset, float *dx, float *dy)
 
93
ccl_device float triangle_attribute_float(KernelGlobals *kg, const ShaderData *sd, AttributeElement elem, int offset, float *dx, float *dy)
106
94
{
107
95
        if(elem == ATTR_ELEMENT_FACE) {
108
96
                if(dx) *dx = 0.0f;
145
133
        }
146
134
}
147
135
 
148
 
__device float3 triangle_attribute_float3(KernelGlobals *kg, const ShaderData *sd, AttributeElement elem, int offset, float3 *dx, float3 *dy)
 
136
ccl_device float3 triangle_attribute_float3(KernelGlobals *kg, const ShaderData *sd, AttributeElement elem, int offset, float3 *dx, float3 *dy)
149
137
{
150
138
        if(elem == ATTR_ELEMENT_FACE) {
151
139
                if(dx) *dx = make_float3(0.0f, 0.0f, 0.0f);