From 7680f88f18d43e8a49576081c7527b157131d409 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 16 Oct 2012 13:20:57 +0000 Subject: 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 --- intern/cycles/kernel/kernel_object.h | 3 +++ 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 */ -- cgit v1.2.3