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:
authorTautvydas Andrikys <esminis>2020-05-14 18:41:37 +0300
committerBrecht Van Lommel <brecht@blender.org>2020-05-14 18:56:50 +0300
commit33ce0cb5a1edea4b5aaa7d37f6ad74b3b35b95f8 (patch)
treebacf9e3a70ee28c8647491f3bcadd4f0d79ebcc3 /intern/cycles/render/light.cpp
parent59404853698d01892ee5c609755ffad7ee57c3b9 (diff)
Fix T63588: Cycles unnecessarily updates background importance sampling map
Diffstat (limited to 'intern/cycles/render/light.cpp')
-rw-r--r--intern/cycles/render/light.cpp22
1 files changed, 15 insertions, 7 deletions
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)