[Bf-blender-cvs] [6f29dbd] master: Fix issue in with multiple importance sampling in recent code refactor.

Brecht Van Lommel noreply at git.blender.org
Wed May 18 01:53:01 CEST 2016


Commit: 6f29dbd0451d5d681cc475b704b0911d0ba10e86
Author: Brecht Van Lommel
Date:   Wed May 18 01:50:35 2016 +0200
Branches: master
https://developer.blender.org/rB6f29dbd0451d5d681cc475b704b0911d0ba10e86

Fix issue in with multiple importance sampling in recent code refactor.

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

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

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

diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp
index 4564b93..91a9f22 100644
--- a/intern/cycles/render/light.cpp
+++ b/intern/cycles/render/light.cpp
@@ -233,7 +233,9 @@ void LightManager::device_update_distribution(Device *device, DeviceScene *dscen
 		/* count triangles */
 		if(have_emission) {
 			for(size_t i = 0; i < mesh->triangles.size(); i++) {
-				Shader *shader = scene->shaders[mesh->shader[i]];
+				int shader_index = mesh->shader[i];
+				Shader *shader = (shader_index < mesh->used_shaders.size()) ?
+					mesh->used_shaders[shader_index] : scene->default_surface;
 
 				if(shader->use_mis && shader->has_surface_emission)
 					num_triangles++;
@@ -303,7 +305,9 @@ void LightManager::device_update_distribution(Device *device, DeviceScene *dscen
 			}
 
 			for(size_t i = 0; i < mesh->triangles.size(); i++) {
-				Shader *shader = scene->shaders[mesh->shader[i]];
+				int shader_index = mesh->shader[i];
+				Shader *shader = (shader_index < mesh->used_shaders.size()) ?
+					mesh->used_shaders[shader_index] : scene->default_surface;
 
 				if(shader->use_mis && shader->has_surface_emission) {
 					distribution[offset].x = totarea;
diff --git a/intern/cycles/render/mesh_displace.cpp b/intern/cycles/render/mesh_displace.cpp
index df8be4c..d19bf20 100644
--- a/intern/cycles/render/mesh_displace.cpp
+++ b/intern/cycles/render/mesh_displace.cpp
@@ -62,7 +62,9 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
 
 	for(size_t i = 0; i < mesh->triangles.size(); i++) {
 		Mesh::Triangle t = mesh->triangles[i];
-		Shader *shader = scene->shaders[mesh->shader[i]];
+		int shader_index = mesh->shader[i];
+		Shader *shader = (shader_index < mesh->used_shaders.size()) ?
+			mesh->used_shaders[shader_index] : scene->default_surface;
 
 		if(!shader->has_displacement)
 			continue;
@@ -146,7 +148,9 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
 	Attribute *attr_mP = mesh->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
 	for(size_t i = 0; i < mesh->triangles.size(); i++) {
 		Mesh::Triangle t = mesh->triangles[i];
-		Shader *shader = scene->shaders[mesh->shader[i]];
+		int shader_index = mesh->shader[i];
+		Shader *shader = (shader_index < mesh->used_shaders.size()) ?
+			mesh->used_shaders[shader_index] : scene->default_surface;
 
 		if(!shader->has_displacement)
 			continue;




More information about the Bf-blender-cvs mailing list