[Bf-blender-cvs] [d3d1313] master: Cycles: De-duplicate more checks around light emisive meshes

Sergey Sharybin noreply at git.blender.org
Thu Jul 28 12:51:45 CEST 2016


Commit: d3d1313ca4fff7566d84ba4f3495977791d8c895
Author: Sergey Sharybin
Date:   Thu Jul 28 12:27:24 2016 +0200
Branches: master
https://developer.blender.org/rBd3d1313ca4fff7566d84ba4f3495977791d8c895

Cycles: De-duplicate more checks around light emisive meshes

Once again, should be no functional changes.

===================================================================

M	intern/cycles/render/light.cpp
M	intern/cycles/render/light.h

===================================================================

diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp
index 41af209..d97c1ae 100644
--- a/intern/cycles/render/light.cpp
+++ b/intern/cycles/render/light.cpp
@@ -209,6 +209,23 @@ void LightManager::disable_ineffective_light(Device *device, Scene *scene)
 	}
 }
 
+bool LightManager::object_usable_as_light(Object *object) {
+	Mesh *mesh = object->mesh;
+	/* Skip if we are not visible for BSDFs. */
+	if(!(object->visibility & (PATH_RAY_DIFFUSE|PATH_RAY_GLOSSY|PATH_RAY_TRANSMIT))) {
+		return false;
+	}
+	/* Skip motion blurred deforming meshes, not supported yet. */
+	if(mesh->has_motion_blur()) {
+		return false;
+	}
+	/* Skip if we have no emission shaders. */
+	if(!mesh->has_mis_emission) {
+		return false;
+	}
+	return true;
+}
+
 void LightManager::device_update_distribution(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress)
 {
 	progress.set_status("Updating Lights", "Computing distribution");
@@ -226,23 +243,13 @@ void LightManager::device_update_distribution(Device *device, DeviceScene *dscen
 	}
 
 	foreach(Object *object, scene->objects) {
-		Mesh *mesh = object->mesh;
-
-		/* Skip if we are not visible for BSDFs. */
-		if(!(object->visibility & (PATH_RAY_DIFFUSE|PATH_RAY_GLOSSY|PATH_RAY_TRANSMIT)))
-			continue;
-
-		/* Skip motion blurred deforming meshes, not supported yet. */
-		if(mesh->has_motion_blur()) {
-			continue;
-		}
+		if(progress.get_cancel()) return;
 
-		/* Skip if we have no emission shaders. */
-		if(!mesh->has_mis_emission) {
+		if(!object_usable_as_light(object)) {
 			continue;
 		}
-
 		/* Count triangles. */
+		Mesh *mesh = object->mesh;
 		size_t mesh_num_triangles = mesh->num_triangles();
 		for(size_t i = 0; i < mesh_num_triangles; i++) {
 			int shader_index = mesh->shader[i];
@@ -270,27 +277,12 @@ void LightManager::device_update_distribution(Device *device, DeviceScene *dscen
 	foreach(Object *object, scene->objects) {
 		if(progress.get_cancel()) return;
 
-		Mesh *mesh = object->mesh;
-
-		/* Skip if we are not visible for BSDFs. */
-		if(!(object->visibility & (PATH_RAY_DIFFUSE|PATH_RAY_GLOSSY|PATH_RAY_TRANSMIT))) {
-			j++;
-			continue;
-		}
-
-		/* Skip motion blurred deforming meshes, not supported yet. */
-		if(mesh->has_motion_blur()) {
+		if(!object_usable_as_light(object)) {
 			j++;
 			continue;
 		}
-
-		/* Skip if we have no emission shaders. */
-		if(!mesh->has_mis_emission) {
-			j++;
-			continue;
-		}
-
-		/* sum area */
+		/* Sum area. */
+		Mesh *mesh = object->mesh;
 		bool transform_applied = mesh->transform_applied;
 		Transform tfm = object->tfm;
 		int object_id = j;
diff --git a/intern/cycles/render/light.h b/intern/cycles/render/light.h
index 2f1df1c..745caa9 100644
--- a/intern/cycles/render/light.h
+++ b/intern/cycles/render/light.h
@@ -28,6 +28,7 @@ CCL_NAMESPACE_BEGIN
 
 class Device;
 class DeviceScene;
+class Object;
 class Progress;
 class Scene;
 class Shader;
@@ -108,6 +109,9 @@ protected:
 	                              DeviceScene *dscene,
 	                              Scene *scene,
 	                              Progress& progress);
+
+	/* Check whether light manager can use the object as a light-emissive. */
+	bool object_usable_as_light(Object *object);
 };
 
 CCL_NAMESPACE_END




More information about the Bf-blender-cvs mailing list