14 #define CURVE_NUM_BEZIER_SUBDIVISIONS 3
15 #define CURVE_NUM_BEZIER_SUBDIVISIONS_UNSTABLE (CURVE_NUM_BEZIER_SUBDIVISIONS + 1)
16 #define CURVE_NUM_BEZIER_STEPS 2
17 #define CURVE_NUM_JACOBIAN_ITERATIONS 5
26 const float s = 1.0f - u;
27 const float n0 = -
t * s * s;
28 const float n1 = 2.0f +
t *
t * (3.0f *
t - 5.0f);
29 const float n2 = 2.0f + s * s * (3.0f * s - 5.0f);
30 const float n3 = -s *
t *
t;
37 const float s = 1.0f - u;
38 const float n0 = -s * s + 2.0f * s *
t;
39 const float n1 = 2.0f *
t * (3.0f *
t - 5.0f) + 3.0f *
t *
t;
40 const float n2 = 2.0f * s * (3.0f *
t + 2.0f) - 3.0f * s * s;
41 const float n3 = -2.0f * s *
t +
t *
t;
49 const float n0 = -3.0f *
t + 2.0f;
50 const float n1 = 9.0f *
t - 5.0f;
51 const float n2 = -9.0f *
t + 4.0f;
52 const float n3 = 3.0f *
t - 1.0f;
60 const float pp =
dot(p, p);
61 const float pdp =
dot(p, dp);
62 return (pp * dp - pdp * p) / (pp *
sqrtf(pp));
74 const float cylinder_radius,
83 const float rl = 1.0f /
len(cylinder_end - cylinder_start);
84 const float3 P0 = cylinder_start, dP = (cylinder_end - cylinder_start) * rl;
85 const float3 O = -P0, dO = ray_D;
87 const float dOdO =
dot(dO, dO);
88 const float OdO =
dot(dO, O);
89 const float OO =
dot(O, O);
90 const float dOz =
dot(dP, dO);
91 const float Oz =
dot(dP, O);
93 const float A = dOdO -
sqr(dOz);
94 const float B = 2.0f * (OdO - dOz * Oz);
95 const float C = OO -
sqr(Oz) -
sqr(cylinder_radius);
98 const float D =
B *
B - 4.0f *
A *
C;
119 const float rcp_2A = 1.0f / (2.0f *
A);
120 const float t0 = (-
B - Q) * rcp_2A;
121 const float t1 = (-
B + Q) * rcp_2A;
125 *u0_o = (t0 * dOz + Oz) * rl;
126 const float3 Pr = t0 * ray_D;
127 const float3 Pl = (*u0_o) * (cylinder_end - cylinder_start) + cylinder_start;
133 *u1_o = (t1 * dOz + Oz) * rl;
134 const float3 Pr = t1 * ray_D;
135 const float3 Pl = (*u1_o) * (cylinder_end - cylinder_start) + cylinder_start;
148 const float ON =
dot(O,
N);
149 const float DN =
dot(
D,
N);
150 const float min_rcp_input = 1e-18f;
151 const bool eps =
fabsf(DN) < min_rcp_input;
152 const float t = -ON / DN;
153 const float lower = (
eps || DN < 0.0f) ? -FLT_MAX :
t;
154 const float upper = (
eps || DN > 0.0f) ? FLT_MAX :
t;
159 const float ray_tmin,
165 const bool use_backfacing,
168 const float length_ray_D =
len(ray_D);
174 const float P_err = 16.0f * FLT_EPSILON *
175 max(box_abs.x,
max(box_abs.y,
max(box_abs.z, box_abs.w)));
176 const float radius_max = box_max.w;
180 const float3 dQdt = ray_D;
181 const float Q_err = 16.0f * FLT_EPSILON * length_ray_D *
t;
183 const float4 P4 = catmull_rom_basis_eval(
curve, u);
184 const float4 dPdu4 = catmull_rom_basis_derivative(
curve, u);
188 const float radius = P4.w;
189 const float dradiusdu = dPdu4.w;
194 const float len_R =
len(
R);
195 const float R_err =
max(Q_err, P_err);
196 const float3 dRdu = -dPdu;
200 const float3 dTdu = dnormalize(dPdu, ddPdu);
201 const float cos_err = P_err /
len(dPdu);
203 const float f =
dot(
R,
T);
204 const float f_err = len_R * P_err + R_err + cos_err * (1.0f + len_R);
205 const float dfdu =
dot(dRdu,
T) +
dot(
R, dTdu);
206 const float dfdt =
dot(dRdt,
T);
209 const float dKdu = (
dot(
R, dRdu) - f * dfdu);
210 const float dKdt = (
dot(
R, dRdt) - f * dfdt);
213 const float g =
sqrtf(
K) - radius;
214 const float g_err = R_err + f_err + 16.0f * FLT_EPSILON * radius_max;
215 const float dgdu = dKdu * rsqrt_K - dradiusdu;
216 const float dgdt = dKdt * rsqrt_K;
218 const float invdet = 1.0f / (dfdu * dgdt - dgdu * dfdt);
219 u -= (dgdt * f - dfdt *
g) * invdet;
220 t -= (-dgdu * f + dfdu *
g) * invdet;
224 if (!(
t >= ray_tmin &&
t <= *ray_tmax)) {
227 if (!(u >= 0.0f && u <= 1.0f)) {
233 const float3 U = dradiusdu *
R + dPdu;
236 if (!use_backfacing &&
dot(ray_D, Ng) > 0.0f) {
254 const float ray_tmin,
261 const float dt =
dot(
center - ray_P, ray_D) /
dot(ray_D, ray_D);
262 const float3 ref = ray_P + ray_D * dt;
269 const bool use_backfacing =
false;
289 const float step = i * step_size;
292 const float dscale = (
u1 - u0) * (1.0f / 3.0f) * step_size;
293 const float vu0 =
mix(u0,
u1, step);
294 const float vu1 =
mix(u0,
u1, step + step_size);
296 const float4 P0 = catmull_rom_basis_eval(
curve, vu0);
297 const float4 dP0du = dscale * catmull_rom_basis_derivative(
curve, vu0);
298 const float4 P3 = catmull_rom_basis_eval(
curve, vu1);
299 const float4 dP3du = dscale * catmull_rom_basis_derivative(
curve, vu1);
301 const float4 P1 = P0 + dP0du;
302 const float4 P2 = P3 - dP3du;
309 const float maxr12 =
sqrtf(
max(rr1, rr2));
310 const float one_plus_ulp = 1.0f + 2.0f * FLT_EPSILON;
311 const float one_minus_ulp = 1.0f - 2.0f * FLT_EPSILON;
312 float r_outer =
max(
max(P0.w, P1.w),
max(P2.w, P3.w)) + maxr12;
313 float r_inner =
min(
min(P0.w, P1.w),
min(P2.w, P3.w)) - maxr12;
314 r_outer = one_plus_ulp * r_outer;
315 r_inner =
max(0.0f, one_minus_ulp * r_inner);
320 float u_outer0, u_outer1;
321 float3 Ng_outer0, Ng_outer1;
340 const float2 h1 = half_plane_intersect(
343 valid = tp.
x <= tp.
y;
349 u_outer0 =
clamp(u_outer0, 0.0f, 1.0f);
350 u_outer1 =
clamp(u_outer1, 0.0f, 1.0f);
356 float u_inner0, u_inner1;
357 float3 Ng_inner0, Ng_inner1;
370 const bool unstable0 = (!valid_inner) |
372 const bool unstable1 = (!valid_inner) |
378 const bool unstable0 =
true;
379 const bool unstable1 =
true;
385 bool valid0 = valid && (tp0.
x <= tp0.
y);
386 bool valid1 = valid && (tp1.
x <= tp1.
y);
387 if (!(valid0 || valid1)) {
392 bool recurse =
false;
396 if (depth >= termDepth) {
397 found |= curve_intersect_iterative(
398 ray_D, ray_tmin, &ray_tmax, dt,
curve, u_outer0, tp0.
x, use_backfacing, isect);
405 const float t1 = tp1.
x + dt;
406 if (valid1 && (t1 >= ray_tmin && t1 <= ray_tmax)) {
409 if (depth >= termDepth) {
410 found |= curve_intersect_iterative(
411 ray_D, ray_tmin, &ray_tmax, dt,
curve, u_outer1, tp1.
y, use_backfacing, isect);
419 stack[depth].u0 = u0;
420 stack[depth].u1 =
u1;
421 stack[depth].i = i + 1;
432 u0 = stack[depth].u0;
433 u1 = stack[depth].u1;
449 const float2 dp = p2 - p1;
450 const float num = dp.
x * p1.
y - dp.
y * p1.
x;
451 const float den2 =
dot(dp, dp);
452 return num * num <=
r *
r * den2;
462 const float ray_tmax,
474 const float3 va = quad_v0 - O;
475 const float3 vb = quad_v1 - O;
476 const float3 vc = quad_v2 - O;
477 const float3 vd = quad_v3 - O;
479 const float3 edb = vb - vd;
481 const float3 v0 = (WW <= 0.0f) ? va : vc;
482 const float3 v1 = (WW <= 0.0f) ? vb : vd;
483 const float3 v2 = (WW <= 0.0f) ? vd : vb;
492 if (!(
max(
U,
V) <= 0.0f)) {
498 const float den =
dot(Ng,
D);
499 const float rcpDen = 1.0f / den;
502 const float t = rcpDen *
dot(v0, Ng);
503 if (!(
t >= ray_tmin &&
t <= ray_tmax)) {
508 if (!(den != 0.0f)) {
516 *u_o = (WW <= 0.0f) ? *u_o : 1.0f - *u_o;
517 *v_o = (WW <= 0.0f) ? *v_o : 1.0f - *v_o;
522 const float ray_D_invlen,
525 const float3 D = ray_D * ray_D_invlen;
530 ray_space[2] =
D * ray_D_invlen;
543 const float ray_tmin,
550 const float ray_D_invlen = 1.0f /
len(ray_D);
552 ribbon_ray_space(ray_D, ray_D_invlen, ray_space);
554 curve[0] = ribbon_to_ray_space(ray_space, ray_org,
curve[0]);
555 curve[1] = ribbon_to_ray_space(ray_space, ray_org,
curve[1]);
556 curve[2] = ribbon_to_ray_space(ray_space, ray_org,
curve[2]);
557 curve[3] = ribbon_to_ray_space(ray_space, ray_org,
curve[3]);
560 const float eps = 4.0f * FLT_EPSILON *
max(
max(mx.x, mx.y),
max(mx.z, mx.w));
561 const float step_size = 1.0f / (
float)
N;
567 const float4 p1 = catmull_rom_basis_eval(
curve, step_size);
573 for (
int i = 0; i <
N; i++) {
574 const float u = i * step_size;
575 const float4 p1 = catmull_rom_basis_eval(
curve, u + step_size);
576 const bool valid = cylinder_culling_test(
593 bool valid0 = ribbon_intersect_quad(ray_tmin, ray_tmax, lp0, lp1, up1, up0, &vu, &vv, &vt);
597 const float avoidance_factor = 2.0f;
598 if (avoidance_factor != 0.0f) {
599 float r =
mix(p0.w, p1.w, vu);
600 valid0 = vt > avoidance_factor *
r * ray_D_invlen;
604 vv = 2.0f * vv - 1.0f;
609 isect->u = u + vu * step_size;
651 motion_curve_keys(kg,
object, prim,
time, ka, k0, k1, kb,
curve);
656 const int subdivisions =
kernel_data.bvh.curve_subdivisions;
657 if (ribbon_intersect(ray_P, ray_D, tmin, tmax, subdivisions,
curve, isect)) {
659 isect->object = object;
667 if (curve_intersect_recursive(ray_P, ray_D, tmin, tmax,
curve, isect)) {
669 isect->object = object;
683 const int isect_object,
684 const int isect_prim)
710 motion_curve_keys(kg, sd->object, sd->prim, sd->time, ka, k0, k1, kb, P_curve);
715 const float4 dPdu4 = catmull_rom_basis_derivative(P_curve, sd->u);
722 const float sine = sd->v;
723 const float cosine =
safe_sqrtf(1.0f - sine * sine);
729 const float dPdu_radius = dPdu4.w;
731 P += sd->N * dPdu_radius;
761 sd->dPdv =
cross(sd->dPdu, sd->Ng);
typedef float(TangentPoint)[2]
MINLINE float safe_sqrtf(float a)
NSNotificationCenter * center
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble u1
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to curves
__forceinline int reduce_max(const avxi &v)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
#define ccl_device_forceinline
#define ccl_device_inline
#define CCL_NAMESPACE_END
#define CURVE_NUM_BEZIER_SUBDIVISIONS_UNSTABLE
#define CURVE_NUM_BEZIER_STEPS
#define CURVE_NUM_JACOBIAN_ITERATIONS
#define CURVE_NUM_BEZIER_SUBDIVISIONS
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_fetch(name, index)
SyclQueue void void size_t num_bytes void
#define object_normal_transform_auto
#define object_position_transform_auto
#define object_dir_transform_auto
ccl_device_inline Transform object_get_inverse_transform(KernelGlobals kg, ccl_private const ShaderData *sd)
#define PRIMITIVE_UNPACK_SEGMENT(type)
@ SD_OBJECT_TRANSFORM_APPLIED
ccl_device_inline float2 fabs(const float2 &a)
ccl_device_inline bool isequal(const float3 a, const float3 b)
ccl_device_inline float3 safe_normalize_len(const float3 a, ccl_private float *t)
T dot(const vec_base< T, Size > &a, const vec_base< T, Size > &b)
vec_base< T, 3 > cross(const vec_base< T, 3 > &a, const vec_base< T, 3 > &b)
T clamp(const T &a, const T &min, const T &max)
vec_base< T, Size > normalize(const vec_base< T, Size > &v)
static const pxr::TfToken g("g", pxr::TfToken::Immortal)
ccl_device_inline float sqr(float a)
ccl_device_inline float inversesqrtf(float f)
ccl_device_inline float3 float4_to_float3(const float4 a)
BLI_INLINE float D(const float *data, const int res[3], int x, int y, int z)
CCL_NAMESPACE_BEGIN struct Window V