Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-10-16 17:20:57 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-10-16 17:20:57 +0400
commit7680f88f18d43e8a49576081c7527b157131d409 (patch)
tree90088e051060405ed8562b19acea31257fa00691
parent9be4c94204eaaddbfbbe4851eb517a684c853c54 (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.h3
-rw-r--r--intern/cycles/kernel/kernel_shader.h17
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 */