[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42523] trunk/blender/intern/cycles/ blender: Fix #29555: cycles crash rendering with no material in material slot.

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Dec 9 01:24:49 CET 2011


Revision: 42523
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42523
Author:   blendix
Date:     2011-12-09 00:24:48 +0000 (Fri, 09 Dec 2011)
Log Message:
-----------
Fix #29555: cycles crash rendering with no material in material slot.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_mesh.cpp
    trunk/blender/intern/cycles/blender/blender_object.cpp
    trunk/blender/intern/cycles/blender/blender_shader.cpp
    trunk/blender/intern/cycles/blender/blender_sync.h

Modified: trunk/blender/intern/cycles/blender/blender_mesh.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_mesh.cpp	2011-12-09 00:23:57 UTC (rev 42522)
+++ trunk/blender/intern/cycles/blender/blender_mesh.cpp	2011-12-09 00:24:48 UTC (rev 42523)
@@ -233,9 +233,9 @@
 	BL::Object::material_slots_iterator slot;
 	for(b_ob.material_slots.begin(slot); slot != b_ob.material_slots.end(); ++slot) {
 		if(render_layer.material_override)
-			find_shader(render_layer.material_override, used_shaders);
+			find_shader(render_layer.material_override, used_shaders, scene->default_surface);
 		else
-			find_shader(slot->material(), used_shaders);
+			find_shader(slot->material(), used_shaders, scene->default_surface);
 	}
 
 	if(used_shaders.size() == 0)

Modified: trunk/blender/intern/cycles/blender/blender_object.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_object.cpp	2011-12-09 00:23:57 UTC (rev 42522)
+++ trunk/blender/intern/cycles/blender/blender_object.cpp	2011-12-09 00:24:48 UTC (rev 42523)
@@ -137,7 +137,7 @@
 	/* shader */
 	vector<uint> used_shaders;
 
-	find_shader(b_lamp, used_shaders);
+	find_shader(b_lamp, used_shaders, scene->default_light);
 
 	if(used_shaders.size() == 0)
 		used_shaders.push_back(scene->default_light);

Modified: trunk/blender/intern/cycles/blender/blender_shader.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_shader.cpp	2011-12-09 00:23:57 UTC (rev 42522)
+++ trunk/blender/intern/cycles/blender/blender_shader.cpp	2011-12-09 00:24:48 UTC (rev 42523)
@@ -36,9 +36,9 @@
 
 /* Find */
 
-void BlenderSync::find_shader(BL::ID id, vector<uint>& used_shaders)
+void BlenderSync::find_shader(BL::ID id, vector<uint>& used_shaders, int default_shader)
 {
-	Shader *shader = shader_map.find(id);
+	Shader *shader = (id)? shader_map.find(id): scene->shaders[default_shader];
 
 	for(size_t i = 0; i < scene->shaders.size(); i++) {
 		if(scene->shaders[i] == shader) {

Modified: trunk/blender/intern/cycles/blender/blender_sync.h
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.h	2011-12-09 00:23:57 UTC (rev 42522)
+++ trunk/blender/intern/cycles/blender/blender_sync.h	2011-12-09 00:24:48 UTC (rev 42523)
@@ -81,7 +81,7 @@
 	void sync_light(BL::Object b_parent, int b_index, BL::Object b_ob, Transform& tfm);
 
 	/* util */
-	void find_shader(BL::ID id, vector<uint>& used_shaders);
+	void find_shader(BL::ID id, vector<uint>& used_shaders, int default_shader);
 	bool object_is_modified(BL::Object b_ob);
 	bool object_is_mesh(BL::Object b_ob);
 	bool object_is_light(BL::Object b_ob);




More information about the Bf-blender-cvs mailing list