Cycles code refactor: replace magic ~0 values in the code with defines.
This commit is contained in:
parent
6997908afc
commit
e8b1cfed0a
|
@ -51,10 +51,10 @@ ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersectio
|
|||
const float tmax = ray->t;
|
||||
float3 P = ray->P;
|
||||
float3 idir = bvh_inverse_direction(ray->D);
|
||||
int object = ~0;
|
||||
int object = OBJECT_NONE;
|
||||
float isect_t = tmax;
|
||||
|
||||
const uint visibility = ~0;
|
||||
const uint visibility = PATH_RAY_ALL_VISIBILITY;
|
||||
uint num_hits = 0;
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
|
@ -205,7 +205,7 @@ ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersectio
|
|||
/* primitive intersection */
|
||||
for(; primAddr < primAddr2; primAddr++) {
|
||||
/* only primitives from the same object */
|
||||
uint tri_object = (object == ~0)? kernel_tex_fetch(__prim_object, primAddr): object;
|
||||
uint tri_object = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, primAddr): object;
|
||||
|
||||
if(tri_object != subsurface_object)
|
||||
continue;
|
||||
|
@ -267,7 +267,7 @@ ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersectio
|
|||
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
if(stackPtr >= 0) {
|
||||
kernel_assert(object != ~0);
|
||||
kernel_assert(object != OBJECT_NONE);
|
||||
|
||||
/* instance pop */
|
||||
#if FEATURE(BVH_MOTION)
|
||||
|
@ -286,7 +286,7 @@ ccl_device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersectio
|
|||
gen_idirsplat_swap(pn, shuf_identity, shuf_swap, idir, idirsplat, shufflexyz);
|
||||
#endif
|
||||
|
||||
object = ~0;
|
||||
object = OBJECT_NONE;
|
||||
nodeAddr = traversalStack[stackPtr];
|
||||
--stackPtr;
|
||||
}
|
||||
|
|
|
@ -56,15 +56,15 @@ ccl_device bool BVH_FUNCTION_NAME
|
|||
const float tmax = ray->t;
|
||||
float3 P = ray->P;
|
||||
float3 idir = bvh_inverse_direction(ray->D);
|
||||
int object = ~0;
|
||||
int object = OBJECT_NONE;
|
||||
|
||||
#if FEATURE(BVH_MOTION)
|
||||
Transform ob_tfm;
|
||||
#endif
|
||||
|
||||
isect->t = tmax;
|
||||
isect->object = ~0;
|
||||
isect->prim = ~0;
|
||||
isect->object = OBJECT_NONE;
|
||||
isect->prim = PRIM_NONE;
|
||||
isect->u = 0.0f;
|
||||
isect->v = 0.0f;
|
||||
|
||||
|
@ -332,7 +332,7 @@ ccl_device bool BVH_FUNCTION_NAME
|
|||
|
||||
#if FEATURE(BVH_INSTANCING)
|
||||
if(stackPtr >= 0) {
|
||||
kernel_assert(object != ~0);
|
||||
kernel_assert(object != OBJECT_NONE);
|
||||
|
||||
/* instance pop */
|
||||
#if FEATURE(BVH_MOTION)
|
||||
|
@ -351,14 +351,14 @@ ccl_device bool BVH_FUNCTION_NAME
|
|||
gen_idirsplat_swap(pn, shuf_identity, shuf_swap, idir, idirsplat, shufflexyz);
|
||||
#endif
|
||||
|
||||
object = ~0;
|
||||
object = OBJECT_NONE;
|
||||
nodeAddr = traversalStack[stackPtr];
|
||||
--stackPtr;
|
||||
}
|
||||
#endif
|
||||
} while(nodeAddr != ENTRYPOINT_SENTINEL);
|
||||
|
||||
return (isect->prim != ~0);
|
||||
return (isect->prim != PRIM_NONE);
|
||||
}
|
||||
|
||||
#undef FEATURE
|
||||
|
|
|
@ -241,7 +241,7 @@ ccl_device_inline bool bvh_cardinal_curve_intersect(KernelGlobals *kg, Intersect
|
|||
P_curve[3] = _mm_load_ps(&kg->__curve_keys.data[kb].x);
|
||||
}
|
||||
else {
|
||||
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, curveAddr): object;
|
||||
int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, curveAddr): object;
|
||||
motion_cardinal_curve_keys(kg, fobject, prim, time, ka, k0, k1, kb, (float4*)&P_curve);
|
||||
}
|
||||
|
||||
|
@ -308,7 +308,7 @@ ccl_device_inline bool bvh_cardinal_curve_intersect(KernelGlobals *kg, Intersect
|
|||
P_curve[3] = kernel_tex_fetch(__curve_keys, kb);
|
||||
}
|
||||
else {
|
||||
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, curveAddr): object;
|
||||
int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, curveAddr): object;
|
||||
motion_cardinal_curve_keys(kg, fobject, prim, time, ka, k0, k1, kb, P_curve);
|
||||
}
|
||||
|
||||
|
@ -618,7 +618,7 @@ ccl_device_inline bool bvh_curve_intersect(KernelGlobals *kg, Intersection *isec
|
|||
P_curve[1]= kernel_tex_fetch(__curve_keys, k1);
|
||||
}
|
||||
else {
|
||||
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, curveAddr): object;
|
||||
int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, curveAddr): object;
|
||||
motion_curve_keys(kg, fobject, prim, time, k0, k1, P_curve);
|
||||
}
|
||||
|
||||
|
@ -653,7 +653,7 @@ ccl_device_inline bool bvh_curve_intersect(KernelGlobals *kg, Intersection *isec
|
|||
P_curve[1] = _mm_load_ps(&kg->__curve_keys.data[k1].x);
|
||||
}
|
||||
else {
|
||||
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, curveAddr): object;
|
||||
int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, curveAddr): object;
|
||||
motion_curve_keys(kg, fobject, prim, time, k0, k1, (float4*)&P_curve);
|
||||
}
|
||||
|
||||
|
@ -863,7 +863,7 @@ ccl_device_inline float3 bvh_curve_refine(KernelGlobals *kg, ShaderData *sd, con
|
|||
float3 P = ray->P;
|
||||
float3 D = ray->D;
|
||||
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_itfm;
|
||||
#else
|
||||
|
@ -981,7 +981,7 @@ ccl_device_inline float3 bvh_curve_refine(KernelGlobals *kg, ShaderData *sd, con
|
|||
/*sd->curve_transparency = isect->v;*/
|
||||
/*sd->curve_radius = sd->u * gd * l + r1;*/
|
||||
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_tfm;
|
||||
#else
|
||||
|
|
|
@ -117,7 +117,7 @@ ccl_device_inline float3 motion_triangle_refine(KernelGlobals *kg, ShaderData *s
|
|||
float t = isect->t;
|
||||
|
||||
#ifdef __INTERSECTION_REFINE__
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_itfm;
|
||||
#else
|
||||
|
@ -144,7 +144,7 @@ ccl_device_inline float3 motion_triangle_refine(KernelGlobals *kg, ShaderData *s
|
|||
/* compute refined position */
|
||||
P = P + D*rt;
|
||||
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_tfm;
|
||||
#else
|
||||
|
@ -168,7 +168,7 @@ ccl_device_inline float3 motion_triangle_refine_subsurface(KernelGlobals *kg, Sh
|
|||
float t = isect->t;
|
||||
|
||||
#ifdef __INTERSECTION_REFINE__
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_itfm;
|
||||
#else
|
||||
|
@ -194,7 +194,7 @@ ccl_device_inline float3 motion_triangle_refine_subsurface(KernelGlobals *kg, Sh
|
|||
|
||||
P = P + D*rt;
|
||||
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_tfm;
|
||||
#else
|
||||
|
@ -293,7 +293,7 @@ ccl_device_inline bool motion_triangle_intersect(KernelGlobals *kg, Intersection
|
|||
{
|
||||
/* primitive index for vertex location lookup */
|
||||
int prim = kernel_tex_fetch(__prim_index, triAddr);
|
||||
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, triAddr): object;
|
||||
int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, triAddr): object;
|
||||
|
||||
/* get vertex locations for intersection */
|
||||
float3 verts[3];
|
||||
|
@ -327,7 +327,7 @@ ccl_device_inline void motion_triangle_intersect_subsurface(KernelGlobals *kg, I
|
|||
{
|
||||
/* primitive index for vertex location lookup */
|
||||
int prim = kernel_tex_fetch(__prim_index, triAddr);
|
||||
int fobject = (object == ~0)? kernel_tex_fetch(__prim_object, triAddr): object;
|
||||
int fobject = (object == OBJECT_NONE)? kernel_tex_fetch(__prim_object, triAddr): object;
|
||||
|
||||
/* get vertex locations for intersection */
|
||||
float3 verts[3];
|
||||
|
|
|
@ -162,7 +162,7 @@ ccl_device_inline void object_inverse_dir_transform(KernelGlobals *kg, ShaderDat
|
|||
|
||||
ccl_device_inline float3 object_location(KernelGlobals *kg, ShaderData *sd)
|
||||
{
|
||||
if(sd->object == ~0)
|
||||
if(sd->object == OBJECT_NONE)
|
||||
return make_float3(0.0f, 0.0f, 0.0f);
|
||||
|
||||
#ifdef __OBJECT_MOTION__
|
||||
|
@ -182,7 +182,7 @@ ccl_device_inline float object_surface_area(KernelGlobals *kg, int object)
|
|||
|
||||
ccl_device_inline float object_pass_id(KernelGlobals *kg, int object)
|
||||
{
|
||||
if(object == ~0)
|
||||
if(object == OBJECT_NONE)
|
||||
return 0.0f;
|
||||
|
||||
int offset = object*OBJECT_SIZE + OBJECT_PROPERTIES;
|
||||
|
@ -192,7 +192,7 @@ ccl_device_inline float object_pass_id(KernelGlobals *kg, int object)
|
|||
|
||||
ccl_device_inline float object_random_number(KernelGlobals *kg, int object)
|
||||
{
|
||||
if(object == ~0)
|
||||
if(object == OBJECT_NONE)
|
||||
return 0.0f;
|
||||
|
||||
int offset = object*OBJECT_SIZE + OBJECT_PROPERTIES;
|
||||
|
@ -202,7 +202,7 @@ ccl_device_inline float object_random_number(KernelGlobals *kg, int object)
|
|||
|
||||
ccl_device_inline uint object_particle_id(KernelGlobals *kg, int object)
|
||||
{
|
||||
if(object == ~0)
|
||||
if(object == OBJECT_NONE)
|
||||
return 0.0f;
|
||||
|
||||
int offset = object*OBJECT_SIZE + OBJECT_PROPERTIES;
|
||||
|
@ -212,7 +212,7 @@ ccl_device_inline uint object_particle_id(KernelGlobals *kg, int object)
|
|||
|
||||
ccl_device_inline float3 object_dupli_generated(KernelGlobals *kg, int object)
|
||||
{
|
||||
if(object == ~0)
|
||||
if(object == OBJECT_NONE)
|
||||
return make_float3(0.0f, 0.0f, 0.0f);
|
||||
|
||||
int offset = object*OBJECT_SIZE + OBJECT_DUPLI;
|
||||
|
@ -222,7 +222,7 @@ ccl_device_inline float3 object_dupli_generated(KernelGlobals *kg, int object)
|
|||
|
||||
ccl_device_inline float3 object_dupli_uv(KernelGlobals *kg, int object)
|
||||
{
|
||||
if(object == ~0)
|
||||
if(object == OBJECT_NONE)
|
||||
return make_float3(0.0f, 0.0f, 0.0f);
|
||||
|
||||
int offset = object*OBJECT_SIZE + OBJECT_DUPLI;
|
||||
|
|
|
@ -28,7 +28,7 @@ ccl_device_inline float3 triangle_refine(KernelGlobals *kg, ShaderData *sd, cons
|
|||
float t = isect->t;
|
||||
|
||||
#ifdef __INTERSECTION_REFINE__
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_itfm;
|
||||
#else
|
||||
|
@ -49,7 +49,7 @@ ccl_device_inline float3 triangle_refine(KernelGlobals *kg, ShaderData *sd, cons
|
|||
|
||||
P = P + D*rt;
|
||||
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_tfm;
|
||||
#else
|
||||
|
@ -73,7 +73,7 @@ ccl_device_inline float3 triangle_refine_subsurface(KernelGlobals *kg, ShaderDat
|
|||
float t = isect->t;
|
||||
|
||||
#ifdef __INTERSECTION_REFINE__
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_itfm;
|
||||
#else
|
||||
|
@ -94,7 +94,7 @@ ccl_device_inline float3 triangle_refine_subsurface(KernelGlobals *kg, ShaderDat
|
|||
|
||||
P = P + D*rt;
|
||||
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_tfm;
|
||||
#else
|
||||
|
|
|
@ -266,7 +266,7 @@ ccl_device_inline float3 camera_world_to_ndc(KernelGlobals *kg, ShaderData *sd,
|
|||
{
|
||||
if(kernel_data.cam.type != CAMERA_PANORAMA) {
|
||||
/* perspective / ortho */
|
||||
if(sd->object == ~0 && kernel_data.cam.type == CAMERA_PERSPECTIVE)
|
||||
if(sd->object == PRIM_NONE && kernel_data.cam.type == CAMERA_PERSPECTIVE)
|
||||
P += camera_position(kg);
|
||||
|
||||
Transform tfm = kernel_data.cam.worldtondc;
|
||||
|
@ -276,7 +276,7 @@ ccl_device_inline float3 camera_world_to_ndc(KernelGlobals *kg, ShaderData *sd,
|
|||
/* panorama */
|
||||
Transform tfm = kernel_data.cam.worldtocamera;
|
||||
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
P = normalize(transform_point(&tfm, P));
|
||||
else
|
||||
P = normalize(transform_direction(&tfm, P));
|
||||
|
|
|
@ -70,7 +70,7 @@ ccl_device_noinline bool direct_emission(KernelGlobals *kg, ShaderData *sd, int
|
|||
LightSample ls;
|
||||
|
||||
#ifdef __BRANCHED_PATH__
|
||||
if(lindex != -1) {
|
||||
if(lindex != LAMP_NONE) {
|
||||
/* sample position on a specified light */
|
||||
light_select(kg, lindex, randu, randv, sd->P, &ls);
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ ccl_device_noinline bool direct_emission(KernelGlobals *kg, ShaderData *sd, int
|
|||
float bsdf_pdf;
|
||||
|
||||
#ifdef __VOLUME__
|
||||
if(sd->prim != ~0)
|
||||
if(sd->prim != PRIM_NONE)
|
||||
shader_bsdf_eval(kg, sd, ls.D, eval, &bsdf_pdf);
|
||||
else
|
||||
shader_volume_phase_eval(kg, sd, ls.D, eval, &bsdf_pdf);
|
||||
|
@ -153,7 +153,7 @@ ccl_device_noinline bool direct_emission(KernelGlobals *kg, ShaderData *sd, int
|
|||
}
|
||||
|
||||
/* return if it's a lamp for shadow pass */
|
||||
*is_lamp = (ls.prim == ~0 && ls.type != LIGHT_BACKGROUND);
|
||||
*is_lamp = (ls.prim == PRIM_NONE && ls.type != LIGHT_BACKGROUND);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -188,7 +188,7 @@ ccl_device_noinline bool indirect_lamp_emission(KernelGlobals *kg, Ray *ray, int
|
|||
LightSample ls;
|
||||
int lamp = lamp_light_eval_sample(kg, randt);
|
||||
|
||||
if(lamp == ~0)
|
||||
if(lamp == LAMP_NONE)
|
||||
return false;
|
||||
|
||||
if(!lamp_light_eval(kg, lamp, ray->P, ray->D, ray->t, &ls))
|
||||
|
|
|
@ -217,8 +217,8 @@ ccl_device void lamp_light_sample(KernelGlobals *kg, int lamp,
|
|||
LightType type = (LightType)__float_as_int(data0.x);
|
||||
ls->type = type;
|
||||
ls->shader = __float_as_int(data1.x);
|
||||
ls->object = ~0;
|
||||
ls->prim = ~0;
|
||||
ls->object = PRIM_NONE;
|
||||
ls->prim = PRIM_NONE;
|
||||
ls->lamp = lamp;
|
||||
ls->u = randu;
|
||||
ls->v = randv;
|
||||
|
@ -309,8 +309,8 @@ ccl_device bool lamp_light_eval(KernelGlobals *kg, int lamp, float3 P, float3 D,
|
|||
LightType type = (LightType)__float_as_int(data0.x);
|
||||
ls->type = type;
|
||||
ls->shader = __float_as_int(data1.x);
|
||||
ls->object = ~0;
|
||||
ls->prim = ~0;
|
||||
ls->object = PRIM_NONE;
|
||||
ls->prim = PRIM_NONE;
|
||||
ls->lamp = lamp;
|
||||
/* todo: missing texture coordinates */
|
||||
ls->u = 0.0f;
|
||||
|
@ -461,7 +461,7 @@ ccl_device void triangle_light_sample(KernelGlobals *kg, int prim, int object,
|
|||
triangle_point_normal(kg, prim, u, v, &ls->P, &ls->Ng, &ls->shader);
|
||||
ls->object = object;
|
||||
ls->prim = prim;
|
||||
ls->lamp = ~0;
|
||||
ls->lamp = LAMP_NONE;
|
||||
ls->shader |= SHADER_USE_MIS;
|
||||
ls->t = 0.0f;
|
||||
ls->u = u;
|
||||
|
@ -566,7 +566,7 @@ ccl_device int lamp_light_eval_sample(KernelGlobals *kg, float randt)
|
|||
return lamp;
|
||||
}
|
||||
else
|
||||
return ~0;
|
||||
return LAMP_NONE;
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
|
|
@ -74,7 +74,7 @@ ccl_device_inline bool kernel_path_integrate_scatter_lighting(KernelGlobals *kg,
|
|||
light_ray.time = sd->time;
|
||||
#endif
|
||||
|
||||
if(direct_emission(kg, sd, -1, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
|
||||
if(direct_emission(kg, sd, LAMP_NONE, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
|
||||
/* trace shadow ray */
|
||||
float3 shadow;
|
||||
|
||||
|
@ -188,7 +188,7 @@ ccl_device void kernel_branched_path_integrate_direct_lighting(KernelGlobals *kg
|
|||
if(kernel_data.integrator.num_all_lights)
|
||||
light_t = 0.5f*light_t;
|
||||
|
||||
if(direct_emission(kg, sd, -1, light_t, 0.0f, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
|
||||
if(direct_emission(kg, sd, LAMP_NONE, light_t, 0.0f, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
|
||||
/* trace shadow ray */
|
||||
float3 shadow;
|
||||
|
||||
|
@ -206,7 +206,7 @@ ccl_device void kernel_branched_path_integrate_direct_lighting(KernelGlobals *kg
|
|||
path_state_rng_2D(kg, rng, state, PRNG_LIGHT_U, &light_u, &light_v);
|
||||
|
||||
/* sample random light */
|
||||
if(direct_emission(kg, sd, -1, light_t, 0.0f, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
|
||||
if(direct_emission(kg, sd, LAMP_NONE, light_t, 0.0f, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
|
||||
/* trace shadow ray */
|
||||
float3 shadow;
|
||||
|
||||
|
@ -257,7 +257,7 @@ ccl_device void kernel_path_indirect(KernelGlobals *kg, RNG *rng, Ray ray, ccl_g
|
|||
|
||||
#ifdef __VOLUME__
|
||||
/* volume attenuation, emission, scatter */
|
||||
if(state.volume_stack[0].shader != SHADER_NO_ID) {
|
||||
if(state.volume_stack[0].shader != SHADER_NONE) {
|
||||
Ray volume_ray = ray;
|
||||
volume_ray.t = (hit)? isect.t: FLT_MAX;
|
||||
|
||||
|
@ -492,7 +492,7 @@ ccl_device_inline bool kernel_path_integrate_lighting(KernelGlobals *kg, RNG *rn
|
|||
light_ray.time = sd->time;
|
||||
#endif
|
||||
|
||||
if(direct_emission(kg, sd, -1, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
|
||||
if(direct_emission(kg, sd, LAMP_NONE, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state->bounce)) {
|
||||
/* trace shadow ray */
|
||||
float3 shadow;
|
||||
|
||||
|
@ -646,7 +646,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample,
|
|||
|
||||
#ifdef __VOLUME__
|
||||
/* volume attenuation, emission, scatter */
|
||||
if(state.volume_stack[0].shader != SHADER_NO_ID) {
|
||||
if(state.volume_stack[0].shader != SHADER_NONE) {
|
||||
Ray volume_ray = ray;
|
||||
volume_ray.t = (hit)? isect.t: FLT_MAX;
|
||||
|
||||
|
@ -853,7 +853,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample,
|
|||
light_ray.time = sd.time;
|
||||
#endif
|
||||
|
||||
if(direct_emission(kg, &sd, -1, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state.bounce)) {
|
||||
if(direct_emission(kg, &sd, LAMP_NONE, light_t, light_o, light_u, light_v, &light_ray, &L_light, &is_lamp, state.bounce)) {
|
||||
/* trace shadow ray */
|
||||
float3 shadow;
|
||||
|
||||
|
@ -1088,7 +1088,7 @@ ccl_device float4 kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in
|
|||
|
||||
#ifdef __VOLUME__
|
||||
/* volume attenuation, emission, scatter */
|
||||
if(state.volume_stack[0].shader != SHADER_NO_ID) {
|
||||
if(state.volume_stack[0].shader != SHADER_NONE) {
|
||||
Ray volume_ray = ray;
|
||||
volume_ray.t = (hit)? isect.t: FLT_MAX;
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ ccl_device_inline void path_state_init(KernelGlobals *kg, PathState *state, RNG
|
|||
state->rng_congruential = lcg_init(*rng + sample*0x51633e2d);
|
||||
}
|
||||
else {
|
||||
state->volume_stack[0].shader = SHADER_NO_ID;
|
||||
state->volume_stack[0].shader = SHADER_NONE;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ CCL_NAMESPACE_BEGIN
|
|||
|
||||
ccl_device_inline int find_attribute(KernelGlobals *kg, ShaderData *sd, uint id, AttributeElement *elem)
|
||||
{
|
||||
if(sd->object == ~0)
|
||||
if(sd->object == PRIM_NONE)
|
||||
return (int)ATTR_STD_NOT_FOUND;
|
||||
|
||||
#ifdef __OSL__
|
||||
|
@ -47,7 +47,7 @@ ccl_device_inline int find_attribute(KernelGlobals *kg, ShaderData *sd, uint id,
|
|||
|
||||
*elem = (AttributeElement)attr_map.y;
|
||||
|
||||
if(sd->prim == ~0 && (AttributeElement)attr_map.y != ATTR_ELEMENT_MESH)
|
||||
if(sd->prim == PRIM_NONE && (AttributeElement)attr_map.y != ATTR_ELEMENT_MESH)
|
||||
return ATTR_STD_NOT_FOUND;
|
||||
|
||||
/* return result */
|
||||
|
|
|
@ -52,7 +52,7 @@ ccl_device void shader_setup_from_ray(KernelGlobals *kg, ShaderData *sd,
|
|||
const Intersection *isect, const Ray *ray, int bounce)
|
||||
{
|
||||
#ifdef __INSTANCING__
|
||||
sd->object = (isect->object == ~0)? kernel_tex_fetch(__prim_object, isect->prim): isect->object;
|
||||
sd->object = (isect->object == PRIM_NONE)? kernel_tex_fetch(__prim_object, isect->prim): isect->object;
|
||||
#endif
|
||||
|
||||
sd->type = isect->type;
|
||||
|
@ -113,7 +113,7 @@ ccl_device void shader_setup_from_ray(KernelGlobals *kg, ShaderData *sd,
|
|||
sd->flag |= kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2);
|
||||
|
||||
#ifdef __INSTANCING__
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
/* instance transform */
|
||||
object_normal_transform(kg, sd, &sd->N);
|
||||
object_normal_transform(kg, sd, &sd->Ng);
|
||||
|
@ -190,7 +190,7 @@ ccl_device_inline void shader_setup_from_subsurface(KernelGlobals *kg, ShaderDat
|
|||
sd->flag |= kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2);
|
||||
|
||||
#ifdef __INSTANCING__
|
||||
if(isect->object != ~0) {
|
||||
if(isect->object != OBJECT_NONE) {
|
||||
/* instance transform */
|
||||
object_normal_transform(kg, sd, &sd->N);
|
||||
object_normal_transform(kg, sd, &sd->Ng);
|
||||
|
@ -236,7 +236,7 @@ ccl_device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
|
|||
sd->Ng = Ng;
|
||||
sd->I = I;
|
||||
sd->shader = shader;
|
||||
sd->type = (prim == ~0)? PRIMITIVE_NONE: PRIMITIVE_TRIANGLE;
|
||||
sd->type = (prim == PRIM_NONE)? PRIMITIVE_NONE: PRIMITIVE_TRIANGLE;
|
||||
|
||||
/* primitive */
|
||||
#ifdef __INSTANCING__
|
||||
|
@ -255,7 +255,7 @@ ccl_device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
|
|||
#ifdef __INSTANCING__
|
||||
bool instanced = false;
|
||||
|
||||
if(sd->prim != ~0) {
|
||||
if(sd->prim != PRIM_NONE) {
|
||||
if(sd->object >= 0)
|
||||
instanced = true;
|
||||
else
|
||||
|
@ -266,7 +266,7 @@ ccl_device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
|
|||
#endif
|
||||
|
||||
sd->flag = kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2);
|
||||
if(sd->object != -1) {
|
||||
if(sd->object != OBJECT_NONE) {
|
||||
sd->flag |= kernel_tex_fetch(__object_flag, sd->object);
|
||||
|
||||
#ifdef __OBJECT_MOTION__
|
||||
|
@ -309,7 +309,7 @@ ccl_device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
|
|||
}
|
||||
|
||||
/* backfacing test */
|
||||
if(sd->prim != ~0) {
|
||||
if(sd->prim != PRIM_NONE) {
|
||||
bool backfacing = (dot(sd->Ng, sd->I) < 0.0f);
|
||||
|
||||
if(backfacing) {
|
||||
|
@ -368,9 +368,9 @@ ccl_device_inline void shader_setup_from_background(KernelGlobals *kg, ShaderDat
|
|||
sd->ray_depth = bounce;
|
||||
|
||||
#ifdef __INSTANCING__
|
||||
sd->object = ~0;
|
||||
sd->object = PRIM_NONE;
|
||||
#endif
|
||||
sd->prim = ~0;
|
||||
sd->prim = PRIM_NONE;
|
||||
#ifdef __UV__
|
||||
sd->u = 0.0f;
|
||||
sd->v = 0.0f;
|
||||
|
@ -402,7 +402,7 @@ ccl_device_inline void shader_setup_from_volume(KernelGlobals *kg, ShaderData *s
|
|||
sd->N = -ray->D;
|
||||
sd->Ng = -ray->D;
|
||||
sd->I = -ray->D;
|
||||
sd->shader = SHADER_NO_ID;
|
||||
sd->shader = SHADER_NONE;
|
||||
sd->flag = 0;
|
||||
#ifdef __OBJECT_MOTION__
|
||||
sd->time = ray->time;
|
||||
|
@ -411,9 +411,9 @@ ccl_device_inline void shader_setup_from_volume(KernelGlobals *kg, ShaderData *s
|
|||
sd->ray_depth = bounce;
|
||||
|
||||
#ifdef __INSTANCING__
|
||||
sd->object = ~0; /* todo: fill this for texture coordinates */
|
||||
sd->object = PRIM_NONE; /* todo: fill this for texture coordinates */
|
||||
#endif
|
||||
sd->prim = ~0;
|
||||
sd->prim = PRIM_NONE;
|
||||
sd->type = PRIMITIVE_NONE;
|
||||
|
||||
#ifdef __UV__
|
||||
|
@ -1056,7 +1056,7 @@ ccl_device void shader_eval_volume(KernelGlobals *kg, ShaderData *sd,
|
|||
#endif
|
||||
sd->flag = 0;
|
||||
|
||||
for(int i = 0; stack[i].shader != SHADER_NO_ID; i++) {
|
||||
for(int i = 0; stack[i].shader != SHADER_NONE; i++) {
|
||||
/* setup shaderdata from stack. it's mostly setup already in
|
||||
* shader_setup_from_volume, this switching should be quick */
|
||||
sd->object = stack[i].object;
|
||||
|
@ -1065,7 +1065,7 @@ ccl_device void shader_eval_volume(KernelGlobals *kg, ShaderData *sd,
|
|||
sd->flag &= ~(SD_SHADER_FLAGS|SD_OBJECT_FLAGS);
|
||||
sd->flag |= kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2);
|
||||
|
||||
if(sd->object != ~0) {
|
||||
if(sd->object != OBJECT_NONE) {
|
||||
sd->flag |= kernel_tex_fetch(__object_flag, sd->object);
|
||||
|
||||
#ifdef __OBJECT_MOTION__
|
||||
|
|
|
@ -73,7 +73,7 @@ ccl_device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray *
|
|||
|
||||
#ifdef __VOLUME__
|
||||
/* attenuation for last line segment towards light */
|
||||
if(ps.volume_stack[0].shader != SHADER_NO_ID)
|
||||
if(ps.volume_stack[0].shader != SHADER_NONE)
|
||||
kernel_volume_shadow(kg, &ps, ray, &throughput);
|
||||
#endif
|
||||
|
||||
|
@ -86,7 +86,7 @@ ccl_device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray *
|
|||
|
||||
#ifdef __VOLUME__
|
||||
/* attenuation between last surface and next surface */
|
||||
if(ps.volume_stack[0].shader != SHADER_NO_ID) {
|
||||
if(ps.volume_stack[0].shader != SHADER_NONE) {
|
||||
Ray segment_ray = *ray;
|
||||
segment_ray.t = isect.t;
|
||||
kernel_volume_shadow(kg, &ps, &segment_ray, &throughput);
|
||||
|
@ -118,7 +118,7 @@ ccl_device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray *
|
|||
}
|
||||
}
|
||||
#ifdef __VOLUME__
|
||||
else if(!result && state->volume_stack[0].shader != SHADER_NO_ID) {
|
||||
else if(!result && state->volume_stack[0].shader != SHADER_NONE) {
|
||||
/* apply attenuation from current volume shader */
|
||||
kernel_volume_shadow(kg, state, ray, shadow);
|
||||
}
|
||||
|
|
|
@ -46,7 +46,10 @@ CCL_NAMESPACE_BEGIN
|
|||
|
||||
#define TEX_NUM_FLOAT_IMAGES 5
|
||||
|
||||
#define SHADER_NO_ID -1
|
||||
#define SHADER_NONE (~0)
|
||||
#define OBJECT_NONE (~0)
|
||||
#define PRIM_NONE (~0)
|
||||
#define LAMP_NONE (~0)
|
||||
|
||||
#define VOLUME_STACK_SIZE 16
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ ccl_device float3 volume_color_attenuation(float3 sigma, float t)
|
|||
|
||||
ccl_device bool volume_stack_is_heterogeneous(KernelGlobals *kg, VolumeStack *stack)
|
||||
{
|
||||
for(int i = 0; stack[i].shader != SHADER_NO_ID; i++) {
|
||||
for(int i = 0; stack[i].shader != SHADER_NONE; i++) {
|
||||
int shader_flag = kernel_tex_fetch(__shader_flag, (stack[i].shader & SHADER_MASK)*2);
|
||||
|
||||
if(shader_flag & SD_HETEROGENEOUS_VOLUME)
|
||||
|
@ -557,13 +557,13 @@ ccl_device_noinline VolumeIntegrateResult kernel_volume_integrate(KernelGlobals
|
|||
ccl_device void kernel_volume_stack_init(KernelGlobals *kg, VolumeStack *stack)
|
||||
{
|
||||
/* todo: this assumes camera is always in air, need to detect when it isn't */
|
||||
if(kernel_data.background.volume_shader == SHADER_NO_ID) {
|
||||
stack[0].shader = SHADER_NO_ID;
|
||||
if(kernel_data.background.volume_shader == SHADER_NONE) {
|
||||
stack[0].shader = SHADER_NONE;
|
||||
}
|
||||
else {
|
||||
stack[0].shader = kernel_data.background.volume_shader;
|
||||
stack[0].object = ~0;
|
||||
stack[1].shader = SHADER_NO_ID;
|
||||
stack[0].object = PRIM_NONE;
|
||||
stack[1].shader = SHADER_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -578,14 +578,14 @@ ccl_device void kernel_volume_stack_enter_exit(KernelGlobals *kg, ShaderData *sd
|
|||
|
||||
if(sd->flag & SD_BACKFACING) {
|
||||
/* exit volume object: remove from stack */
|
||||
for(int i = 0; stack[i].shader != SHADER_NO_ID; i++) {
|
||||
for(int i = 0; stack[i].shader != SHADER_NONE; i++) {
|
||||
if(stack[i].object == sd->object) {
|
||||
/* shift back next stack entries */
|
||||
do {
|
||||
stack[i] = stack[i+1];
|
||||
i++;
|
||||
}
|
||||
while(stack[i].shader != SHADER_NO_ID);
|
||||
while(stack[i].shader != SHADER_NONE);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -595,7 +595,7 @@ ccl_device void kernel_volume_stack_enter_exit(KernelGlobals *kg, ShaderData *sd
|
|||
/* enter volume object: add to stack */
|
||||
int i;
|
||||
|
||||
for(i = 0; stack[i].shader != SHADER_NO_ID; i++) {
|
||||
for(i = 0; stack[i].shader != SHADER_NONE; i++) {
|
||||
/* already in the stack? then we have nothing to do */
|
||||
if(stack[i].object == sd->object)
|
||||
return;
|
||||
|
@ -608,7 +608,7 @@ ccl_device void kernel_volume_stack_enter_exit(KernelGlobals *kg, ShaderData *sd
|
|||
/* add to the end of the stack */
|
||||
stack[i].shader = sd->shader;
|
||||
stack[i].object = sd->object;
|
||||
stack[i+1].shader = SHADER_NO_ID;
|
||||
stack[i+1].shader = SHADER_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -130,7 +130,7 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr
|
|||
KernelGlobals *kg = sd->osl_globals;
|
||||
int object = sd->object;
|
||||
|
||||
if (object != ~0) {
|
||||
if (object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm;
|
||||
|
||||
|
@ -160,7 +160,7 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::Transform
|
|||
KernelGlobals *kg = sd->osl_globals;
|
||||
int object = sd->object;
|
||||
|
||||
if (object != ~0) {
|
||||
if (object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform itfm;
|
||||
|
||||
|
@ -245,7 +245,7 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr
|
|||
const ShaderData *sd = (const ShaderData *)xform;
|
||||
int object = sd->object;
|
||||
|
||||
if (object != ~0) {
|
||||
if (object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_tfm;
|
||||
#else
|
||||
|
@ -270,7 +270,7 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::Transform
|
|||
const ShaderData *sd = (const ShaderData *)xform;
|
||||
int object = sd->object;
|
||||
|
||||
if (object != ~0) {
|
||||
if (object != OBJECT_NONE) {
|
||||
#ifdef __OBJECT_MOTION__
|
||||
Transform tfm = sd->ob_itfm;
|
||||
#else
|
||||
|
@ -708,7 +708,7 @@ bool OSLRenderServices::get_background_attribute(KernelGlobals *kg, ShaderData *
|
|||
OSL::ShaderGlobals *globals = &tdata->globals;
|
||||
float3 ndc[3];
|
||||
|
||||
if((globals->raytype & PATH_RAY_CAMERA) && sd->object == ~0 && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC) {
|
||||
if((globals->raytype & PATH_RAY_CAMERA) && sd->object == OBJECT_NONE && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC) {
|
||||
ndc[0] = camera_world_to_ndc(kg, sd, sd->ray_P);
|
||||
|
||||
if(derivatives) {
|
||||
|
@ -747,7 +747,7 @@ bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustri
|
|||
return false;
|
||||
|
||||
object = it->second;
|
||||
prim = ~0;
|
||||
prim = PRIM_NONE;
|
||||
is_curve = false;
|
||||
}
|
||||
else {
|
||||
|
@ -755,7 +755,7 @@ bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustri
|
|||
prim = sd->prim;
|
||||
is_curve = (sd->type & PRIMITIVE_ALL_CURVE) != 0;
|
||||
|
||||
if (object == ~0)
|
||||
if (object == OBJECT_NONE)
|
||||
return get_background_attribute(kg, sd, name, type, derivatives, val);
|
||||
}
|
||||
|
||||
|
@ -769,7 +769,7 @@ bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustri
|
|||
|
||||
if (attr.elem != ATTR_ELEMENT_OBJECT) {
|
||||
/* triangle and vertex attributes */
|
||||
if (prim != ~0)
|
||||
if (prim != PRIM_NONE)
|
||||
return get_mesh_element_attribute(kg, sd, attr, type, derivatives, val);
|
||||
else
|
||||
return get_mesh_attribute(kg, sd, attr, type, derivatives, val);
|
||||
|
@ -1005,9 +1005,9 @@ bool OSLRenderServices::trace(TraceOpt &options, OSL::ShaderGlobals *sg,
|
|||
|
||||
/* raytrace */
|
||||
#ifdef __HAIR__
|
||||
return scene_intersect(sd->osl_globals, &ray, ~0, &tracedata->isect, NULL, 0.0f, 0.0f);
|
||||
return scene_intersect(sd->osl_globals, &ray, PATH_RAY_ALL_VISIBILITY, &tracedata->isect, NULL, 0.0f, 0.0f);
|
||||
#else
|
||||
return scene_intersect(sd->osl_globals, &ray, ~0, &tracedata->isect);
|
||||
return scene_intersect(sd->osl_globals, &ray, PATH_RAY_ALL_VISIBILITY, &tracedata->isect);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1019,9 +1019,9 @@ bool OSLRenderServices::getmessage(OSL::ShaderGlobals *sg, ustring source, ustri
|
|||
|
||||
if(source == u_trace && tracedata->init) {
|
||||
if(name == u_hit) {
|
||||
return set_attribute_int((tracedata->isect.prim != ~0), type, derivatives, val);
|
||||
return set_attribute_int((tracedata->isect.prim != PRIM_NONE), type, derivatives, val);
|
||||
}
|
||||
else if(tracedata->isect.prim != ~0) {
|
||||
else if(tracedata->isect.prim != PRIM_NONE) {
|
||||
if(name == u_hitdist) {
|
||||
float f[3] = {tracedata->isect.t, 0.0f, 0.0f};
|
||||
return set_attribute_float(f, type, derivatives, val);
|
||||
|
|
|
@ -113,7 +113,7 @@ static void shaderdata_to_shaderglobals(KernelGlobals *kg, ShaderData *sd,
|
|||
globals->dvdy = sd->dv.dy;
|
||||
globals->dPdu = TO_VEC3(sd->dPdu);
|
||||
globals->dPdv = TO_VEC3(sd->dPdv);
|
||||
globals->surfacearea = (sd->object == ~0) ? 1.0f : object_surface_area(kg, sd->object);
|
||||
globals->surfacearea = (sd->object == OBJECT_NONE) ? 1.0f : object_surface_area(kg, sd->object);
|
||||
globals->time = sd->time;
|
||||
|
||||
/* booleans */
|
||||
|
@ -547,7 +547,7 @@ int OSLShader::find_attribute(KernelGlobals *kg, const ShaderData *sd, uint id,
|
|||
const OSLGlobals::Attribute &osl_attr = it->second;
|
||||
*elem = osl_attr.elem;
|
||||
|
||||
if(sd->prim == ~0 && (AttributeElement)osl_attr.elem != ATTR_ELEMENT_MESH)
|
||||
if(sd->prim == PRIM_NONE && (AttributeElement)osl_attr.elem != ATTR_ELEMENT_MESH)
|
||||
return ATTR_STD_NOT_FOUND;
|
||||
|
||||
/* return result */
|
||||
|
|
|
@ -22,7 +22,7 @@ ccl_device void svm_node_attr_init(KernelGlobals *kg, ShaderData *sd,
|
|||
uint4 node, NodeAttributeType *type,
|
||||
NodeAttributeType *mesh_type, AttributeElement *elem, int *offset, uint *out_offset)
|
||||
{
|
||||
if(sd->object != ~0 && sd->prim != ~0) {
|
||||
if(sd->object != OBJECT_NONE && sd->prim != PRIM_NONE) {
|
||||
/* find attribute by unique id */
|
||||
uint id = node.y;
|
||||
uint attr_offset = sd->object*kernel_data.bvh.attributes_map_stride;
|
||||
|
|
|
@ -637,7 +637,7 @@ ccl_device void svm_node_emission_set_weight_total(KernelGlobals *kg, ShaderData
|
|||
{
|
||||
float3 weight = make_float3(__uint_as_float(r), __uint_as_float(g), __uint_as_float(b));
|
||||
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
weight /= object_surface_area(kg, sd->object);
|
||||
|
||||
svm_node_closure_store_weight(sd, weight);
|
||||
|
@ -659,7 +659,7 @@ ccl_device void svm_node_emission_weight(KernelGlobals *kg, ShaderData *sd, floa
|
|||
float strength = stack_load_float(stack, strength_offset);
|
||||
float3 weight = stack_load_float3(stack, color_offset)*strength;
|
||||
|
||||
if(total_power && sd->object != ~0)
|
||||
if(total_power && sd->object != OBJECT_NONE)
|
||||
weight /= object_surface_area(kg, sd->object);
|
||||
|
||||
svm_node_closure_store_weight(sd, weight);
|
||||
|
|
|
@ -322,7 +322,7 @@ ccl_device void svm_node_tex_image_box(KernelGlobals *kg, ShaderData *sd, float
|
|||
float3 N = sd->N;
|
||||
|
||||
N = sd->N;
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
object_inverse_normal_transform(kg, sd, &N);
|
||||
|
||||
/* project from direction vector to barycentric coordinates in triangles */
|
||||
|
|
|
@ -25,27 +25,27 @@ ccl_device void svm_node_tex_coord(KernelGlobals *kg, ShaderData *sd, int path_f
|
|||
switch(type) {
|
||||
case NODE_TEXCO_OBJECT: {
|
||||
data = sd->P;
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
object_inverse_position_transform(kg, sd, &data);
|
||||
break;
|
||||
}
|
||||
case NODE_TEXCO_NORMAL: {
|
||||
data = sd->N;
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
object_inverse_normal_transform(kg, sd, &data);
|
||||
break;
|
||||
}
|
||||
case NODE_TEXCO_CAMERA: {
|
||||
Transform tfm = kernel_data.cam.worldtocamera;
|
||||
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
data = transform_point(&tfm, sd->P);
|
||||
else
|
||||
data = transform_point(&tfm, sd->P + camera_position(kg));
|
||||
break;
|
||||
}
|
||||
case NODE_TEXCO_WINDOW: {
|
||||
if((path_flag & PATH_RAY_CAMERA) && sd->object == ~0 && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC)
|
||||
if((path_flag & PATH_RAY_CAMERA) && sd->object == OBJECT_NONE && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC)
|
||||
data = camera_world_to_ndc(kg, sd, sd->ray_P);
|
||||
else
|
||||
data = camera_world_to_ndc(kg, sd, sd->P);
|
||||
|
@ -53,7 +53,7 @@ ccl_device void svm_node_tex_coord(KernelGlobals *kg, ShaderData *sd, int path_f
|
|||
break;
|
||||
}
|
||||
case NODE_TEXCO_REFLECTION: {
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I;
|
||||
else
|
||||
data = sd->I;
|
||||
|
@ -70,7 +70,7 @@ ccl_device void svm_node_tex_coord(KernelGlobals *kg, ShaderData *sd, int path_f
|
|||
case NODE_TEXCO_VOLUME_GENERATED: {
|
||||
data = sd->P;
|
||||
|
||||
if(sd->object != ~0) {
|
||||
if(sd->object != OBJECT_NONE) {
|
||||
AttributeElement attr_elem;
|
||||
int attr_offset = find_attribute(kg, sd, ATTR_STD_GENERATED_TRANSFORM, &attr_elem);
|
||||
|
||||
|
@ -96,27 +96,27 @@ ccl_device void svm_node_tex_coord_bump_dx(KernelGlobals *kg, ShaderData *sd, in
|
|||
switch(type) {
|
||||
case NODE_TEXCO_OBJECT: {
|
||||
data = sd->P + sd->dP.dx;
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
object_inverse_position_transform(kg, sd, &data);
|
||||
break;
|
||||
}
|
||||
case NODE_TEXCO_NORMAL: {
|
||||
data = sd->N;
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
object_inverse_normal_transform(kg, sd, &data);
|
||||
break;
|
||||
}
|
||||
case NODE_TEXCO_CAMERA: {
|
||||
Transform tfm = kernel_data.cam.worldtocamera;
|
||||
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
data = transform_point(&tfm, sd->P + sd->dP.dx);
|
||||
else
|
||||
data = transform_point(&tfm, sd->P + sd->dP.dx + camera_position(kg));
|
||||
break;
|
||||
}
|
||||
case NODE_TEXCO_WINDOW: {
|
||||
if((path_flag & PATH_RAY_CAMERA) && sd->object == ~0 && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC)
|
||||
if((path_flag & PATH_RAY_CAMERA) && sd->object == OBJECT_NONE && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC)
|
||||
data = camera_world_to_ndc(kg, sd, sd->ray_P + sd->ray_dP.dx);
|
||||
else
|
||||
data = camera_world_to_ndc(kg, sd, sd->P + sd->dP.dx);
|
||||
|
@ -124,7 +124,7 @@ ccl_device void svm_node_tex_coord_bump_dx(KernelGlobals *kg, ShaderData *sd, in
|
|||
break;
|
||||
}
|
||||
case NODE_TEXCO_REFLECTION: {
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I;
|
||||
else
|
||||
data = sd->I;
|
||||
|
@ -141,7 +141,7 @@ ccl_device void svm_node_tex_coord_bump_dx(KernelGlobals *kg, ShaderData *sd, in
|
|||
case NODE_TEXCO_VOLUME_GENERATED: {
|
||||
data = sd->P + sd->dP.dx;
|
||||
|
||||
if(sd->object != ~0) {
|
||||
if(sd->object != OBJECT_NONE) {
|
||||
AttributeElement attr_elem;
|
||||
int attr_offset = find_attribute(kg, sd, ATTR_STD_GENERATED_TRANSFORM, &attr_elem);
|
||||
|
||||
|
@ -170,27 +170,27 @@ ccl_device void svm_node_tex_coord_bump_dy(KernelGlobals *kg, ShaderData *sd, in
|
|||
switch(type) {
|
||||
case NODE_TEXCO_OBJECT: {
|
||||
data = sd->P + sd->dP.dy;
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
object_inverse_position_transform(kg, sd, &data);
|
||||
break;
|
||||
}
|
||||
case NODE_TEXCO_NORMAL: {
|
||||
data = sd->N;
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
object_inverse_normal_transform(kg, sd, &data);
|
||||
break;
|
||||
}
|
||||
case NODE_TEXCO_CAMERA: {
|
||||
Transform tfm = kernel_data.cam.worldtocamera;
|
||||
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
data = transform_point(&tfm, sd->P + sd->dP.dy);
|
||||
else
|
||||
data = transform_point(&tfm, sd->P + sd->dP.dy + camera_position(kg));
|
||||
break;
|
||||
}
|
||||
case NODE_TEXCO_WINDOW: {
|
||||
if((path_flag & PATH_RAY_CAMERA) && sd->object == ~0 && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC)
|
||||
if((path_flag & PATH_RAY_CAMERA) && sd->object == OBJECT_NONE && kernel_data.cam.type == CAMERA_ORTHOGRAPHIC)
|
||||
data = camera_world_to_ndc(kg, sd, sd->ray_P + sd->ray_dP.dy);
|
||||
else
|
||||
data = camera_world_to_ndc(kg, sd, sd->P + sd->dP.dy);
|
||||
|
@ -198,7 +198,7 @@ ccl_device void svm_node_tex_coord_bump_dy(KernelGlobals *kg, ShaderData *sd, in
|
|||
break;
|
||||
}
|
||||
case NODE_TEXCO_REFLECTION: {
|
||||
if(sd->object != ~0)
|
||||
if(sd->object != OBJECT_NONE)
|
||||
data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I;
|
||||
else
|
||||
data = sd->I;
|
||||
|
@ -215,7 +215,7 @@ ccl_device void svm_node_tex_coord_bump_dy(KernelGlobals *kg, ShaderData *sd, in
|
|||
case NODE_TEXCO_VOLUME_GENERATED: {
|
||||
data = sd->P + sd->dP.dy;
|
||||
|
||||
if(sd->object != ~0) {
|
||||
if(sd->object != OBJECT_NONE) {
|
||||
AttributeElement attr_elem;
|
||||
int attr_offset = find_attribute(kg, sd, ATTR_STD_GENERATED_TRANSFORM, &attr_elem);
|
||||
|
||||
|
@ -248,7 +248,7 @@ ccl_device void svm_node_normal_map(KernelGlobals *kg, ShaderData *sd, float *st
|
|||
|
||||
if(space == NODE_NORMAL_MAP_TANGENT) {
|
||||
/* tangent space */
|
||||
if(sd->object == ~0) {
|
||||
if(sd->object == OBJECT_NONE) {
|
||||
stack_store_float3(stack, normal_offset, make_float3(0.0f, 0.0f, 0.0f));
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ ccl_device void svm_node_vector_transform(KernelGlobals *kg, ShaderData *sd, flo
|
|||
NodeVectorTransformConvertSpace to = (NodeVectorTransformConvertSpace)ito;
|
||||
|
||||
Transform tfm;
|
||||
bool is_object = (sd->object != ~0);
|
||||
bool is_object = (sd->object != OBJECT_NONE);
|
||||
bool is_direction = (type == NODE_VECTOR_TRANSFORM_TYPE_VECTOR || type == NODE_VECTOR_TRANSFORM_TYPE_NORMAL);
|
||||
|
||||
/* From world */
|
||||
|
|
|
@ -45,9 +45,9 @@ ccl_device void svm_node_wireframe(KernelGlobals *kg, ShaderData *sd, float *sta
|
|||
|
||||
/* Calculate wireframe */
|
||||
#ifdef __HAIR__
|
||||
if (sd->prim != ~0 && sd->type & PRIMITIVE_ALL_TRIANGLE) {
|
||||
if (sd->prim != PRIM_NONE && sd->type & PRIMITIVE_ALL_TRIANGLE) {
|
||||
#else
|
||||
if (sd->prim != ~0) {
|
||||
if (sd->prim != PRIM_NONE) {
|
||||
#endif
|
||||
float3 Co[3];
|
||||
float pixelwidth = 1.0f;
|
||||
|
|
|
@ -35,7 +35,7 @@ Background::Background()
|
|||
|
||||
use = true;
|
||||
|
||||
visibility = ~0;
|
||||
visibility = PATH_RAY_ALL_VISIBILITY;
|
||||
shader = 0;
|
||||
|
||||
transparent = false;
|
||||
|
@ -70,7 +70,7 @@ void Background::device_update(Device *device, DeviceScene *dscene, Scene *scene
|
|||
if(scene->shaders[shader]->has_volume)
|
||||
kbackground->volume_shader = kbackground->surface_shader;
|
||||
else
|
||||
kbackground->volume_shader = SHADER_NO_ID;
|
||||
kbackground->volume_shader = SHADER_NONE;
|
||||
|
||||
if(!(visibility & PATH_RAY_DIFFUSE))
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_DIFFUSE;
|
||||
|
|
|
@ -44,7 +44,7 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
|
|||
progress.set_status("Updating Mesh", msg);
|
||||
|
||||
/* find object index. todo: is arbitrary */
|
||||
size_t object_index = ~0;
|
||||
size_t object_index = OBJECT_NONE;
|
||||
|
||||
for(size_t i = 0; i < scene->objects.size(); i++) {
|
||||
if(scene->objects[i]->mesh == mesh) {
|
||||
|
|
Loading…
Reference in New Issue