diff options
author | Antonio Vazquez <blendergit@gmail.com> | 2020-05-14 20:54:15 +0300 |
---|---|---|
committer | Antonio Vazquez <blendergit@gmail.com> | 2020-05-14 20:54:15 +0300 |
commit | 4ac748c0993f2555abc879c630a0efe893909fe3 (patch) | |
tree | fe1a34e2a94c3d775b11a201625e710ad2c71027 /intern | |
parent | cc3d3a453e769a57399b1eae371d7bde9b67731c (diff) | |
parent | 5f31e5031cb8c65a3379cb7c309268fc6cececf3 (diff) |
Merge branch 'blender-v2.83-release'
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/blender/blender_shader.cpp | 3 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.cpp | 15 | ||||
-rw-r--r-- | intern/cycles/render/graph.h | 4 | ||||
-rw-r--r-- | intern/cycles/render/light.cpp | 22 | ||||
-rw-r--r-- | intern/cycles/render/light.h | 5 | ||||
-rw-r--r-- | intern/cycles/render/nodes.h | 8 | ||||
-rw-r--r-- | intern/cycles/render/osl.cpp | 5 | ||||
-rw-r--r-- | intern/cycles/render/shader.cpp | 10 | ||||
-rw-r--r-- | intern/cycles/render/shader.h | 2 | ||||
-rw-r--r-- | intern/cycles/render/svm.cpp | 5 |
10 files changed, 25 insertions, 54 deletions
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp index edde1fd243e..7297ce829c5 100644 --- a/intern/cycles/blender/blender_shader.cpp +++ b/intern/cycles/blender/blender_shader.cpp @@ -1231,12 +1231,11 @@ void BlenderSync::sync_materials(BL::Depsgraph &b_depsgraph, bool update_all) Shader *shader; /* test if we need to sync */ - if (shader_map.add_or_update(&shader, b_mat) || shader->need_sync_object || update_all) { + if (shader_map.add_or_update(&shader, b_mat) || update_all) { ShaderGraph *graph = new ShaderGraph(); shader->name = b_mat.name().c_str(); shader->pass_id = b_mat.pass_index(); - shader->need_sync_object = false; /* create nodes */ if (b_mat.use_nodes() && b_mat.node_tree()) { diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index 0c120b944a7..e8031be7dd1 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -85,8 +85,6 @@ void BlenderSync::sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d /* Sync recalc flags from blender to cycles. Actual update is done separate, * so we can do it later on if doing it immediate is not suitable. */ - bool has_updated_objects = b_depsgraph.id_type_updated(BL::DriverTarget::id_type_OBJECT); - if (experimental) { /* Mark all meshes as needing to be exported again if dicing changed. */ PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles"); @@ -189,19 +187,6 @@ void BlenderSync::sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d if (viewport_parameters.modified(new_viewport_parameters)) { world_recalc = true; } - - /* Updates shader with object dependency if objects changed. */ - if (has_updated_objects) { - if (scene->default_background->has_object_dependency) { - world_recalc = true; - } - - foreach (Shader *shader, scene->shaders) { - if (shader->has_object_dependency) { - shader->need_sync_object = true; - } - } - } } void BlenderSync::sync_data(BL::RenderSettings &b_render, diff --git a/intern/cycles/render/graph.h b/intern/cycles/render/graph.h index 0ea7935f714..febd7a76f03 100644 --- a/intern/cycles/render/graph.h +++ b/intern/cycles/render/graph.h @@ -204,10 +204,6 @@ class ShaderNode : public Node { { return false; } - virtual bool has_object_dependency() - { - return false; - } virtual bool has_attribute_dependency() { return false; diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index 9adf8e5341a..cd19b03ac53 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -181,6 +181,7 @@ bool Light::has_contribution(Scene *scene) LightManager::LightManager() { need_update = true; + need_update_background = true; use_light_visibility = false; } @@ -901,7 +902,7 @@ void LightManager::device_update(Device *device, VLOG(1) << "Total " << scene->lights.size() << " lights."; - device_free(device, dscene); + device_free(device, dscene, need_update_background); use_light_visibility = false; @@ -915,9 +916,11 @@ void LightManager::device_update(Device *device, if (progress.get_cancel()) return; - device_update_background(device, dscene, scene, progress); - if (progress.get_cancel()) - return; + if (need_update_background) { + device_update_background(device, dscene, scene, progress); + if (progress.get_cancel()) + return; + } device_update_ies(dscene); if (progress.get_cancel()) @@ -929,14 +932,17 @@ void LightManager::device_update(Device *device, } need_update = false; + need_update_background = false; } -void LightManager::device_free(Device *, DeviceScene *dscene) +void LightManager::device_free(Device *, DeviceScene *dscene, const bool free_background) { dscene->light_distribution.free(); dscene->lights.free(); - dscene->light_background_marginal_cdf.free(); - dscene->light_background_conditional_cdf.free(); + if (free_background) { + dscene->light_background_marginal_cdf.free(); + dscene->light_background_conditional_cdf.free(); + } dscene->ies_lights.free(); } @@ -989,6 +995,7 @@ int LightManager::add_ies(const string &content) ies_slots[slot]->hash = hash; need_update = true; + need_update_background = true; return slot; } @@ -1007,6 +1014,7 @@ void LightManager::remove_ies(int slot) /* If the slot has no more users, update the device to remove it. */ need_update |= (ies_slots[slot]->users == 0); + need_update_background |= need_update; } void LightManager::device_update_ies(DeviceScene *dscene) diff --git a/intern/cycles/render/light.h b/intern/cycles/render/light.h index 4f3048c1f32..1a99b2b76ae 100644 --- a/intern/cycles/render/light.h +++ b/intern/cycles/render/light.h @@ -88,6 +88,9 @@ class LightManager { bool use_light_visibility; bool need_update; + /* Need to update background (including multiple importance map) */ + bool need_update_background; + LightManager(); ~LightManager(); @@ -97,7 +100,7 @@ class LightManager { void remove_ies(int slot); void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress &progress); - void device_free(Device *device, DeviceScene *dscene); + void device_free(Device *device, DeviceScene *dscene, const bool free_background = true); void tag_update(Scene *scene); diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h index 8316fa3cf9b..83c3ad071ae 100644 --- a/intern/cycles/render/nodes.h +++ b/intern/cycles/render/nodes.h @@ -359,10 +359,6 @@ class PointDensityTextureNode : public ShaderNode { { return true; } - bool has_object_dependency() - { - return true; - } /* Parameters. */ ustring filename; @@ -896,10 +892,6 @@ class TextureCoordinateNode : public ShaderNode { { return true; } - bool has_object_dependency() - { - return use_transform; - } float3 normal_osl; bool from_dupli; diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp index 06d832a29ca..5c62ae73e47 100644 --- a/intern/cycles/render/osl.cpp +++ b/intern/cycles/render/osl.cpp @@ -764,10 +764,6 @@ void OSLCompiler::add(ShaderNode *node, const char *name, bool isfilepath) current_shader->has_volume_attribute_dependency = true; } - if (node->has_object_dependency()) { - current_shader->has_object_dependency = true; - } - if (node->has_integrator_dependency()) { current_shader->has_integrator_dependency = true; } @@ -1142,7 +1138,6 @@ void OSLCompiler::compile(OSLGlobals *og, Shader *shader) shader->has_surface_spatial_varying = false; shader->has_volume_spatial_varying = false; shader->has_volume_attribute_dependency = false; - shader->has_object_dependency = false; shader->has_integrator_dependency = false; /* generate surface shader */ diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp index 747fc58f81a..39ba45a751a 100644 --- a/intern/cycles/render/shader.cpp +++ b/intern/cycles/render/shader.cpp @@ -206,7 +206,6 @@ Shader::Shader() : Node(node_type) has_surface_spatial_varying = false; has_volume_spatial_varying = false; has_volume_attribute_dependency = false; - has_object_dependency = false; has_integrator_dependency = false; has_volume_connected = false; prev_volume_step_rate = 0.0f; @@ -218,7 +217,6 @@ Shader::Shader() : Node(node_type) need_update = true; need_update_geometry = true; - need_sync_object = false; } Shader::~Shader() @@ -320,9 +318,11 @@ void Shader::tag_update(Scene *scene) * has use_mis set to false. We are quite close to release now, so * better to be safe. */ - if (this == scene->background->get_shader(scene) && - scene->light_manager->has_background_light(scene)) { - scene->light_manager->need_update = true; + if (this == scene->background->get_shader(scene)) { + scene->light_manager->need_update_background = true; + if (scene->light_manager->has_background_light(scene)) { + scene->light_manager->need_update = true; + } } /* quick detection of which kind of shaders we have to avoid loading diff --git a/intern/cycles/render/shader.h b/intern/cycles/render/shader.h index 7801fd29276..993b467b396 100644 --- a/intern/cycles/render/shader.h +++ b/intern/cycles/render/shader.h @@ -98,7 +98,6 @@ class Shader : public Node { /* synchronization */ bool need_update; bool need_update_geometry; - bool need_sync_object; /* If the shader has only volume components, the surface is assumed to * be transparent. @@ -121,7 +120,6 @@ class Shader : public Node { bool has_surface_spatial_varying; bool has_volume_spatial_varying; bool has_volume_attribute_dependency; - bool has_object_dependency; bool has_integrator_dependency; /* displacement */ diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp index b4858f488c3..ea3dbaf8e03 100644 --- a/intern/cycles/render/svm.cpp +++ b/intern/cycles/render/svm.cpp @@ -448,10 +448,6 @@ void SVMCompiler::generate_node(ShaderNode *node, ShaderNodeSet &done) current_shader->has_volume_attribute_dependency = true; } - if (node->has_object_dependency()) { - current_shader->has_object_dependency = true; - } - if (node->has_integrator_dependency()) { current_shader->has_integrator_dependency = true; } @@ -863,7 +859,6 @@ void SVMCompiler::compile(Shader *shader, array<int4> &svm_nodes, int index, Sum shader->has_surface_spatial_varying = false; shader->has_volume_spatial_varying = false; shader->has_volume_attribute_dependency = false; - shader->has_object_dependency = false; shader->has_integrator_dependency = false; /* generate bump shader */ |