[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56663] trunk/blender/intern/cycles/render : Fix for recent bugfix with anisotropic node crash, could do invalid memory access.

Brecht Van Lommel brechtvanlommel at pandora.be
Fri May 10 17:10:54 CEST 2013


Revision: 56663
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56663
Author:   blendix
Date:     2013-05-10 15:10:54 +0000 (Fri, 10 May 2013)
Log Message:
-----------
Fix for recent bugfix with anisotropic node crash, could do invalid memory access.

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

Modified: trunk/blender/intern/cycles/render/graph.cpp
===================================================================
--- trunk/blender/intern/cycles/render/graph.cpp	2013-05-10 14:52:23 UTC (rev 56662)
+++ trunk/blender/intern/cycles/render/graph.cpp	2013-05-10 15:10:54 UTC (rev 56663)
@@ -135,6 +135,7 @@
 ShaderGraph::ShaderGraph()
 {
 	finalized = false;
+	num_node_ids = 0;
 	add(new OutputNode());
 }
 
@@ -147,7 +148,7 @@
 ShaderNode *ShaderGraph::add(ShaderNode *node)
 {
 	assert(!finalized);
-	node->id = nodes.size();
+	node->id = num_node_ids++;
 	nodes.push_back(node);
 	return node;
 }
@@ -314,7 +315,7 @@
 
 void ShaderGraph::remove_unneeded_nodes()
 {
-	vector<bool> removed(nodes.size(), false);
+	vector<bool> removed(num_node_ids, false);
 	bool any_node_removed = false;
 	
 	/* find and unlink proxy nodes */
@@ -459,11 +460,9 @@
 	 * nodes that don't feed into the output. how cycles are broken is
 	 * undefined, they are invalid input, the important thing is to not crash */
 
-	vector<bool> visited(nodes.size(), false);
-	vector<bool> on_stack(nodes.size(), false);
+	vector<bool> visited(num_node_ids, false);
+	vector<bool> on_stack(num_node_ids, false);
 	
-	list<ShaderNode*> newnodes;
-
 	/* break cycles */
 	break_cycles(output(), visited, on_stack);
 
@@ -482,6 +481,8 @@
 	}
 
 	/* remove unused nodes */
+	list<ShaderNode*> newnodes;
+
 	foreach(ShaderNode *node, nodes) {
 		if(visited[node->id])
 			newnodes.push_back(node);

Modified: trunk/blender/intern/cycles/render/graph.h
===================================================================
--- trunk/blender/intern/cycles/render/graph.h	2013-05-10 14:52:23 UTC (rev 56662)
+++ trunk/blender/intern/cycles/render/graph.h	2013-05-10 15:10:54 UTC (rev 56663)
@@ -226,6 +226,7 @@
 class ShaderGraph {
 public:
 	list<ShaderNode*> nodes;
+	size_t num_node_ids;
 	bool finalized;
 
 	ShaderGraph();




More information about the Bf-blender-cvs mailing list