From a9d889cba412eaa4e02806e50b631ae621521e23 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 4 Dec 2012 07:48:09 +0000 Subject: Fix #33405: preview render getting stuck in a particular .blend file, ObjectKey operator< had wrong brackets, changed it now to be more clear. Fix #33404: crash GPU rendering with OSL option still enabled. There was a check to disable OSL in this case, but it shouldn't have modified scene->params because this is used for comparison in scene->modified(). --- intern/cycles/blender/blender_shader.cpp | 2 +- intern/cycles/blender/blender_util.h | 24 +++++++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) (limited to 'intern/cycles/blender') diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp index da06f1d0a38..c9380d8d58b 100644 --- a/intern/cycles/blender/blender_shader.cpp +++ b/intern/cycles/blender/blender_shader.cpp @@ -445,7 +445,7 @@ static ShaderNode *add_node(Scene *scene, BL::BlendData b_data, BL::Scene b_scen } case BL::ShaderNode::type_SCRIPT: { #ifdef WITH_OSL - if(scene->params.shadingsystem != SceneParams::OSL) + if(!scene->shader_manager->use_osl()) break; /* create script node */ diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h index 4feb8b556d5..0a9f2dd06aa 100644 --- a/intern/cycles/blender/blender_util.h +++ b/intern/cycles/blender/blender_util.h @@ -367,12 +367,22 @@ struct ObjectKey { bool operator<(const ObjectKey& k) const { - return (parent < k.parent) || - (parent == k.parent && (memcmp(id, k.id, sizeof(id)) < 0)) || - (memcmp(id, k.id, sizeof(id)) == 0 && ob < k.ob); + if(ob < k.ob) { + return true; + } + else if(ob == k.ob) { + if(parent < k.parent) + return true; + else if(parent == k.parent) + return memcmp(id, k.id, sizeof(id)) < 0; + } + + return false; } }; +/* Particle System Key */ + struct ParticleSystemKey { void *ob; int id[OBJECT_PERSISTENT_ID_SIZE]; @@ -389,8 +399,12 @@ struct ParticleSystemKey { bool operator<(const ParticleSystemKey& k) const { /* first id is particle index, we don't compare that */ - return (ob < k.ob) || - (ob == k.ob && (memcmp(id+1, k.id+1, sizeof(int)*(OBJECT_PERSISTENT_ID_SIZE-1)) < 0)); + if(ob < k.ob) + return true; + else if(ob == k.ob) + return memcmp(id+1, k.id+1, sizeof(int)*(OBJECT_PERSISTENT_ID_SIZE-1)) < 0; + + return false; } }; -- cgit v1.2.3