forked from bartvdbraak/blender
Fix #35672: missing update when changing light ray visibility during viewport render.
This commit is contained in:
parent
e2c02c47ad
commit
0a54311450
@ -135,6 +135,7 @@ void Light::tag_update(Scene *scene)
|
|||||||
LightManager::LightManager()
|
LightManager::LightManager()
|
||||||
{
|
{
|
||||||
need_update = true;
|
need_update = true;
|
||||||
|
use_light_visibility = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LightManager::~LightManager()
|
LightManager::~LightManager()
|
||||||
@ -232,15 +233,15 @@ void LightManager::device_update_distribution(Device *device, DeviceScene *dscen
|
|||||||
|
|
||||||
if(!(object->visibility & PATH_RAY_DIFFUSE)) {
|
if(!(object->visibility & PATH_RAY_DIFFUSE)) {
|
||||||
shader_id |= SHADER_EXCLUDE_DIFFUSE;
|
shader_id |= SHADER_EXCLUDE_DIFFUSE;
|
||||||
scene->film->use_light_visibility = true;
|
use_light_visibility = true;
|
||||||
}
|
}
|
||||||
if(!(object->visibility & PATH_RAY_GLOSSY)) {
|
if(!(object->visibility & PATH_RAY_GLOSSY)) {
|
||||||
shader_id |= SHADER_EXCLUDE_GLOSSY;
|
shader_id |= SHADER_EXCLUDE_GLOSSY;
|
||||||
scene->film->use_light_visibility = true;
|
use_light_visibility = true;
|
||||||
}
|
}
|
||||||
if(!(object->visibility & PATH_RAY_TRANSMIT)) {
|
if(!(object->visibility & PATH_RAY_TRANSMIT)) {
|
||||||
shader_id |= SHADER_EXCLUDE_TRANSMIT;
|
shader_id |= SHADER_EXCLUDE_TRANSMIT;
|
||||||
scene->film->use_light_visibility = true;
|
use_light_visibility = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(size_t i = 0; i < mesh->triangles.size(); i++) {
|
for(size_t i = 0; i < mesh->triangles.size(); i++) {
|
||||||
@ -511,7 +512,6 @@ void LightManager::device_update_points(Device *device, DeviceScene *dscene, Sce
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scene->film->use_light_visibility = false;
|
|
||||||
|
|
||||||
for(size_t i = 0; i < scene->lights.size(); i++) {
|
for(size_t i = 0; i < scene->lights.size(); i++) {
|
||||||
Light *light = scene->lights[i];
|
Light *light = scene->lights[i];
|
||||||
@ -525,15 +525,15 @@ void LightManager::device_update_points(Device *device, DeviceScene *dscene, Sce
|
|||||||
|
|
||||||
if(!light->use_diffuse) {
|
if(!light->use_diffuse) {
|
||||||
shader_id |= SHADER_EXCLUDE_DIFFUSE;
|
shader_id |= SHADER_EXCLUDE_DIFFUSE;
|
||||||
scene->film->use_light_visibility = true;
|
use_light_visibility = true;
|
||||||
}
|
}
|
||||||
if(!light->use_glossy) {
|
if(!light->use_glossy) {
|
||||||
shader_id |= SHADER_EXCLUDE_GLOSSY;
|
shader_id |= SHADER_EXCLUDE_GLOSSY;
|
||||||
scene->film->use_light_visibility = true;
|
use_light_visibility = true;
|
||||||
}
|
}
|
||||||
if(!light->use_transmission) {
|
if(!light->use_transmission) {
|
||||||
shader_id |= SHADER_EXCLUDE_TRANSMIT;
|
shader_id |= SHADER_EXCLUDE_TRANSMIT;
|
||||||
scene->film->use_light_visibility = true;
|
use_light_visibility = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(light->type == LIGHT_POINT) {
|
if(light->type == LIGHT_POINT) {
|
||||||
@ -618,6 +618,8 @@ void LightManager::device_update(Device *device, DeviceScene *dscene, Scene *sce
|
|||||||
|
|
||||||
device_free(device, dscene);
|
device_free(device, dscene);
|
||||||
|
|
||||||
|
use_light_visibility = false;
|
||||||
|
|
||||||
device_update_points(device, dscene, scene);
|
device_update_points(device, dscene, scene);
|
||||||
if(progress.get_cancel()) return;
|
if(progress.get_cancel()) return;
|
||||||
|
|
||||||
@ -627,6 +629,11 @@ void LightManager::device_update(Device *device, DeviceScene *dscene, Scene *sce
|
|||||||
device_update_background(device, dscene, scene, progress);
|
device_update_background(device, dscene, scene, progress);
|
||||||
if(progress.get_cancel()) return;
|
if(progress.get_cancel()) return;
|
||||||
|
|
||||||
|
if(use_light_visibility != scene->film->use_light_visibility) {
|
||||||
|
scene->film->use_light_visibility = use_light_visibility;
|
||||||
|
scene->film->tag_update(scene);
|
||||||
|
}
|
||||||
|
|
||||||
need_update = false;
|
need_update = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,6 +65,7 @@ public:
|
|||||||
|
|
||||||
class LightManager {
|
class LightManager {
|
||||||
public:
|
public:
|
||||||
|
bool use_light_visibility;
|
||||||
bool need_update;
|
bool need_update;
|
||||||
|
|
||||||
LightManager();
|
LightManager();
|
||||||
|
Loading…
Reference in New Issue
Block a user