Commit: 18c7dfa8dc082f78b55d5dd59bee6c532682bf3f
Author: Joshua Leung
Date:   Thu Aug 23 15:54:58 2018 +1200
Branches: blender2.8
https://developer.blender.org/rB18c7dfa8dc082f78b55d5dd59bee6c532682bf3f

Cleanup: Remove the conditional ID node removal stuff, copied from 
clear_id_nodes()

This was just randomly leaving all the Particle datablocks in the
filtered graph (and causing and extra/excess pass over the ID's
to get run). Unless we actually need those specially kept for
some reason later, it's better to leave those out for now.

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

M       source/blender/depsgraph/intern/depsgraph_query_filter.cc

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

diff --git a/source/blender/depsgraph/intern/depsgraph_query_filter.cc 
b/source/blender/depsgraph/intern/depsgraph_query_filter.cc
index 4038f0cb135..8cfbacd6e4d 100644
--- a/source/blender/depsgraph/intern/depsgraph_query_filter.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query_filter.cc
@@ -116,61 +116,6 @@ void deg_unlink_opnode(Depsgraph *graph, OperationDepsNode 
*op_node)
        }
 }
 
-/* Remove and free given ID Node */
-// XXX: Use id_cow or id_orig?
-bool deg_filter_free_idnode(Depsgraph *graph, IDDepsNode *id_node,
-                            const std::function <bool (ID_Type id_type)>& 
filter)
-{
-       if (id_node->done == 0) {
-               /* This node has not been marked for deletion */
-               return false;
-       }
-       else {
-               const ID_Type id_type = GS(id_node->id_orig->name);
-               if (filter(id_type)) {
-                       //printf("  id_type (T) = %d ");
-                       id_node->destroy();
-                       return true;
-               }
-               else {
-                       //printf("  id_type (F) = %d ");
-                       return false;
-               }
-       }
-}
-
-/* Remove and free ID Nodes of a particular type from the graph
- *
- * See Depsgraph::clear_id_nodes() and Depsgraph::clear_id_nodes_conditional()
- * for more details about why we need these type filters
- */
-void deg_filter_clear_ids_conditional(
-        Depsgraph *graph,
-        const std::function <bool (ID_Type id_type)>& filter)
-{
-       /* Based on Depsgraph::clear_id_nodes_conditional()... */
-       for (Depsgraph::IDDepsNodes::const_iterator it = 
graph->id_nodes.begin();
-            it != graph->id_nodes.end();
-            )
-       {
-               IDDepsNode *id_node = *it;
-               ID *id = id_node->id_orig;
-               
-               if (deg_filter_free_idnode(graph, id_node, filter)) {
-                       /* Node data got destroyed. Remove from collections, 
and free */
-                       //printf("  culling %s\n", id->name);
-                       BLI_ghash_remove(graph->id_hash, id, NULL, NULL);
-                       it = graph->id_nodes.erase(it);
-                       OBJECT_GUARDED_DELETE(id_node, IDDepsNode);
-               }
-               else {
-                       /* Node wasn't freed. Increment iterator */
-                       //printf("  skipping %s\n", id->name);
-                       ++it;
-               }
-       }
-}
-
 /* Remove every ID Node (and its associated subnodes, COW data) */
 void deg_filter_remove_unwanted_ids(Depsgraph *graph, GSet *retained_ids)
 {
@@ -207,13 +152,34 @@ void deg_filter_remove_unwanted_ids(Depsgraph *graph, 
GSet *retained_ids)
        }
        
        /* Free ID nodes that are no longer wanted
-        * NOTE: See clear_id_nodes() for more details about what's happening 
here
-        *       (e.g. regarding the lambdas used for freeing order hacks)
+        *
+        * This is loosely based on Depsgraph::clear_id_nodes().
+        * However, we don't worry about the conditional freeing for physics
+        * stuff, since it's rarely needed currently.
         */
-       printf("Culling ID's scene:\n");
-       deg_filter_clear_ids_conditional(graph,  [](ID_Type id_type) { return 
id_type == ID_SCE; });
-       printf("Culling ID's other:\n");
-       deg_filter_clear_ids_conditional(graph,  [](ID_Type id_type) { return 
id_type != ID_PA; });
+       for (Depsgraph::IDDepsNodes::const_iterator it_id = 
graph->id_nodes.begin();
+            it_id != graph->id_nodes.end();
+            )
+       {
+               IDDepsNode *id_node = *it_id;
+               ID *id = id_node->id_orig;
+               
+               if (id_node->done) {
+                       /* Destroy node data, then remove from collections, and 
free */
+                       //printf("  culling %s\n", id->name);
+                       id_node->destroy();
+                       
+                       BLI_ghash_remove(graph->id_hash, id, NULL, NULL);
+                       it_id = graph->id_nodes.erase(it_id);
+                       
+                       OBJECT_GUARDED_DELETE(id_node, IDDepsNode);
+               }
+               else {
+                       /* This node has not been marked for deletion. 
Increment iterator */
+                       //printf("  skipping %s\n", id->name);
+                       ++it_id;
+               }
+       }
 }
 
 } //namespace DEG

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to