[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57290] trunk/blender/intern/cycles/render : Fix #35672: missing update when changing light ray visibility during viewport render.

Brecht Van Lommel brechtvanlommel at pandora.be
Sat Jun 8 15:43:39 CEST 2013


Revision: 57290
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57290
Author:   blendix
Date:     2013-06-08 13:43:38 +0000 (Sat, 08 Jun 2013)
Log Message:
-----------
Fix #35672: missing update when changing light ray visibility during viewport render.

Modified Paths:
--------------
    trunk/blender/intern/cycles/render/light.cpp
    trunk/blender/intern/cycles/render/light.h

Modified: trunk/blender/intern/cycles/render/light.cpp
===================================================================
--- trunk/blender/intern/cycles/render/light.cpp	2013-06-08 11:38:23 UTC (rev 57289)
+++ trunk/blender/intern/cycles/render/light.cpp	2013-06-08 13:43:38 UTC (rev 57290)
@@ -135,6 +135,7 @@
 LightManager::LightManager()
 {
 	need_update = true;
+	use_light_visibility = false;
 }
 
 LightManager::~LightManager()
@@ -232,15 +233,15 @@
 
 			if(!(object->visibility & PATH_RAY_DIFFUSE)) {
 				shader_id |= SHADER_EXCLUDE_DIFFUSE;
-				scene->film->use_light_visibility = true;
+				use_light_visibility = true;
 			}
 			if(!(object->visibility & PATH_RAY_GLOSSY)) {
 				shader_id |= SHADER_EXCLUDE_GLOSSY;
-				scene->film->use_light_visibility = true;
+				use_light_visibility = true;
 			}
 			if(!(object->visibility & PATH_RAY_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++) {
@@ -511,7 +512,6 @@
 			}
 		}
 	}
-	scene->film->use_light_visibility = false;
 
 	for(size_t i = 0; i < scene->lights.size(); i++) {
 		Light *light = scene->lights[i];
@@ -525,15 +525,15 @@
 
 		if(!light->use_diffuse) {
 			shader_id |= SHADER_EXCLUDE_DIFFUSE;
-			scene->film->use_light_visibility = true;
+			use_light_visibility = true;
 		}
 		if(!light->use_glossy) {
 			shader_id |= SHADER_EXCLUDE_GLOSSY;
-			scene->film->use_light_visibility = true;
+			use_light_visibility = true;
 		}
 		if(!light->use_transmission) {
 			shader_id |= SHADER_EXCLUDE_TRANSMIT;
-			scene->film->use_light_visibility = true;
+			use_light_visibility = true;
 		}
 
 		if(light->type == LIGHT_POINT) {
@@ -618,6 +618,8 @@
 
 	device_free(device, dscene);
 
+	use_light_visibility = false;
+
 	device_update_points(device, dscene, scene);
 	if(progress.get_cancel()) return;
 
@@ -627,6 +629,11 @@
 	device_update_background(device, dscene, scene, progress);
 	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;
 }
 

Modified: trunk/blender/intern/cycles/render/light.h
===================================================================
--- trunk/blender/intern/cycles/render/light.h	2013-06-08 11:38:23 UTC (rev 57289)
+++ trunk/blender/intern/cycles/render/light.h	2013-06-08 13:43:38 UTC (rev 57290)
@@ -65,6 +65,7 @@
 
 class LightManager {
 public:
+	bool use_light_visibility;
 	bool need_update;
 
 	LightManager();




More information about the Bf-blender-cvs mailing list