Fix Cycles Light Passes being always enabled, own regression in Clamp commit yesterday.

KernelIntegrator just doesn't have valid data at this point, so we need to go one level deeper.
This commit is contained in:
Thomas Dinges 2014-02-11 14:14:13 +01:00
parent 4bf4c4111e
commit 5a35034fb3
3 changed files with 8 additions and 4 deletions

@ -240,6 +240,10 @@ void BlenderSync::sync_film()
Film *film = scene->film; Film *film = scene->film;
Film prevfilm = *film; Film prevfilm = *film;
/* Clamping */
Integrator *integrator = scene->integrator;
film->use_sample_clamp = (integrator->sample_clamp_direct != 0.0f || integrator->sample_clamp_indirect != 0.0f);
film->exposure = get_float(cscene, "film_exposure"); film->exposure = get_float(cscene, "film_exposure");
film->filter_type = (FilterType)RNA_enum_get(&cscene, "filter_type"); film->filter_type = (FilterType)RNA_enum_get(&cscene, "filter_type");

@ -272,6 +272,7 @@ Film::Film()
mist_falloff = 1.0f; mist_falloff = 1.0f;
use_light_visibility = false; use_light_visibility = false;
use_sample_clamp = false;
need_update = true; need_update = true;
} }
@ -288,15 +289,12 @@ void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene)
device_free(device, dscene, scene); device_free(device, dscene, scene);
KernelFilm *kfilm = &dscene->data.film; KernelFilm *kfilm = &dscene->data.film;
KernelIntegrator *kintegrator = &dscene->data.integrator;
bool use_clamping = (kintegrator->sample_clamp_direct != FLT_MAX) || (kintegrator->sample_clamp_indirect != FLT_MAX);
/* update __data */ /* update __data */
kfilm->exposure = exposure; kfilm->exposure = exposure;
kfilm->pass_flag = 0; kfilm->pass_flag = 0;
kfilm->pass_stride = 0; kfilm->pass_stride = 0;
kfilm->use_light_pass = use_light_visibility || use_clamping; kfilm->use_light_pass = use_light_visibility || use_sample_clamp;
foreach(Pass& pass, passes) { foreach(Pass& pass, passes) {
kfilm->pass_flag |= pass.type; kfilm->pass_flag |= pass.type;
@ -431,6 +429,7 @@ bool Film::modified(const Film& film)
return !(exposure == film.exposure return !(exposure == film.exposure
&& Pass::equals(passes, film.passes) && Pass::equals(passes, film.passes)
&& pass_alpha_threshold == film.pass_alpha_threshold && pass_alpha_threshold == film.pass_alpha_threshold
&& use_sample_clamp == film.use_sample_clamp
&& filter_type == film.filter_type && filter_type == film.filter_type
&& filter_width == film.filter_width && filter_width == film.filter_width
&& mist_start == film.mist_start && mist_start == film.mist_start

@ -61,6 +61,7 @@ public:
float mist_falloff; float mist_falloff;
bool use_light_visibility; bool use_light_visibility;
bool use_sample_clamp;
bool need_update; bool need_update;