diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-10-16 17:20:57 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-10-16 17:20:57 +0400 |
commit | 7680f88f18d43e8a49576081c7527b157131d409 (patch) | |
tree | 90088e051060405ed8562b19acea31257fa00691 | |
parent | 9be4c94204eaaddbfbbe4851eb517a684c853c54 (diff) |
Fix object motion blur crash with lamp sampling(?), missed a check.
Motion blur documentation is here:
http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.65/Cycles#Motion_Blur
-rw-r--r-- | intern/cycles/kernel/kernel_object.h | 3 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_shader.h | 17 |
2 files changed, 13 insertions, 7 deletions
diff --git a/intern/cycles/kernel/kernel_object.h b/intern/cycles/kernel/kernel_object.h index d8ea2cf9926..602574cb736 100644 --- a/intern/cycles/kernel/kernel_object.h +++ b/intern/cycles/kernel/kernel_object.h @@ -134,6 +134,9 @@ __device_inline void object_dir_transform(KernelGlobals *kg, ShaderData *sd, flo __device_inline float3 object_location(KernelGlobals *kg, ShaderData *sd) { + if(sd->object == ~0) + return make_float3(0.0f, 0.0f, 0.0f); + #ifdef __OBJECT_MOTION__ return make_float3(sd->ob_tfm.x.w, sd->ob_tfm.y.w, sd->ob_tfm.z.w); #else diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h index 02f7b9b193f..534f0941134 100644 --- a/intern/cycles/kernel/kernel_shader.h +++ b/intern/cycles/kernel/kernel_shader.h @@ -179,19 +179,22 @@ __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 != -1) { sd->flag |= kernel_tex_fetch(__object_flag, sd->object); #ifdef __OBJECT_MOTION__ - if(sd->flag & SD_OBJECT_MOTION) { - sd->ob_tfm = object_fetch_transform_motion(kg, sd->object, time, &sd->ob_itfm); - } - else { - sd->ob_tfm = object_fetch_transform(kg, sd->object, OBJECT_TRANSFORM); - sd->ob_itfm = object_fetch_transform(kg, sd->object, OBJECT_INVERSE_TRANSFORM); + if(sd->flag & SD_OBJECT_MOTION) { + sd->ob_tfm = object_fetch_transform_motion(kg, sd->object, time, &sd->ob_itfm); + } + else { + sd->ob_tfm = object_fetch_transform(kg, sd->object, OBJECT_TRANSFORM); + sd->ob_itfm = object_fetch_transform(kg, sd->object, OBJECT_INVERSE_TRANSFORM); + } } sd->time = time; +#else + } #endif /* smooth normal */ |