[Bf-blender-cvs] [55e6d5428d] blender2.8: Depsgraph: Remove legacy implementation of depsgraph

Sergey Sharybin noreply at git.blender.org
Tue Jan 24 14:11:06 CET 2017


Commit: 55e6d5428d377844ce9f958ae364c5d0b9aefa93
Author: Sergey Sharybin
Date:   Tue Jan 24 12:46:56 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB55e6d5428d377844ce9f958ae364c5d0b9aefa93

Depsgraph: Remove legacy implementation of depsgraph

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

M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/depsgraph.c

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

diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 157c4408d6..2ccbed58b0 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -535,8 +535,4 @@ endif()
 #	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX")
 #endif()
 
-if(WITH_LEGACY_DEPSGRAPH)
-	add_definitions(-DWITH_LEGACY_DEPSGRAPH)
-endif()
-
 blender_add_lib(bf_blenkernel "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index a834193969..c5b8a18fd6 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -40,3367 +40,19 @@
 #endif
 
 #include "BLI_utildefines.h"
-#include "BLI_listbase.h"
-#include "BLI_ghash.h"
-#include "BLI_threads.h"
 
-#include "DNA_anim_types.h"
-#include "DNA_camera_types.h"
-#include "DNA_cachefile_types.h"
-#include "DNA_group_types.h"
-#include "DNA_lamp_types.h"
-#include "DNA_lattice_types.h"
-#include "DNA_key_types.h"
-#include "DNA_material_types.h"
-#include "DNA_mesh_types.h"
-#include "DNA_node_types.h"
+#include "DNA_object_types.h"
 #include "DNA_scene_types.h"
-#include "DNA_screen_types.h"
-#include "DNA_windowmanager_types.h"
-#include "DNA_movieclip_types.h"
-#include "DNA_mask_types.h"
-#include "DNA_modifier_types.h"
-#include "DNA_rigidbody_types.h"
 
-#include "BKE_anim.h"
-#include "BKE_animsys.h"
-#include "BKE_action.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_collision.h"
-#include "BKE_effect.h"
-#include "BKE_fcurve.h"
 #include "BKE_global.h"
-#include "BKE_idcode.h"
-#include "BKE_image.h"
-#include "BKE_key.h"
-#include "BKE_library.h"
 #include "BKE_main.h"
-#include "BKE_node.h"
-#include "BKE_material.h"
-#include "BKE_mball.h"
-#include "BKE_modifier.h"
-#include "BKE_object.h"
-#include "BKE_paint.h"
-#include "BKE_particle.h"
-#include "BKE_pointcache.h"
-#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_tracking.h"
 
-#include "GPU_buffers.h"
-
-#include "atomic_ops.h"
-
-#include "depsgraph_private.h"
-
-#include "DEG_depsgraph.h"
-#include "DEG_depsgraph_build.h"
-#include "DEG_depsgraph_debug.h"
-#include "DEG_depsgraph_query.h"
-
-#ifdef WITH_LEGACY_DEPSGRAPH
-
-static SpinLock threaded_update_lock;
-
-void DAG_init(void)
-{
-	BLI_spin_init(&threaded_update_lock);
-	DEG_register_node_types();
-}
-
-void DAG_exit(void)
-{
-	BLI_spin_end(&threaded_update_lock);
-	DEG_free_node_types();
-}
-
-/* Queue and stack operations for dag traversal 
- *
- * the queue store a list of freenodes to avoid successive alloc/dealloc
- */
-
-DagNodeQueue *queue_create(int slots)
-{
-	DagNodeQueue *queue;
-	DagNodeQueueElem *elem;
-	int i;
-	
-	queue = MEM_mallocN(sizeof(DagNodeQueue), "DAG queue");
-	queue->freenodes = MEM_mallocN(sizeof(DagNodeQueue), "DAG queue");
-	queue->count = 0;
-	queue->maxlevel = 0;
-	queue->first = queue->last = NULL;
-	elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem3");
-	elem->node = NULL;
-	elem->next = NULL;
-	queue->freenodes->first = queue->freenodes->last = elem;
-	
-	for (i = 1; i < slots; i++) {
-		elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem4");
-		elem->node = NULL;
-		elem->next = NULL;
-		queue->freenodes->last->next = elem;
-		queue->freenodes->last = elem;
-	}
-	queue->freenodes->count = slots;
-	return queue;
-}
-
-void queue_raz(DagNodeQueue *queue)
-{
-	DagNodeQueueElem *elem;
-	
-	elem = queue->first;
-	if (queue->freenodes->last)
-		queue->freenodes->last->next = elem;
-	else
-		queue->freenodes->first = queue->freenodes->last = elem;
-	
-	elem->node = NULL;
-	queue->freenodes->count++;
-	while (elem->next) {
-		elem = elem->next;
-		elem->node = NULL;
-		queue->freenodes->count++;
-	}
-	queue->freenodes->last = elem;
-	queue->count = 0;
-}
-
-void queue_delete(DagNodeQueue *queue)
-{
-	DagNodeQueueElem *elem;
-	DagNodeQueueElem *temp;
-	
-	elem = queue->first;
-	while (elem) {
-		temp = elem;
-		elem = elem->next;
-		MEM_freeN(temp);
-	}
-	
-	elem = queue->freenodes->first;
-	while (elem) {
-		temp = elem;
-		elem = elem->next;
-		MEM_freeN(temp);
-	}
-	
-	MEM_freeN(queue->freenodes);
-	MEM_freeN(queue);
-}
-
-/* insert in queue, remove in front */
-void push_queue(DagNodeQueue *queue, DagNode *node)
-{
-	DagNodeQueueElem *elem;
-	int i;
-
-	if (node == NULL) {
-		fprintf(stderr, "pushing null node\n");
-		return;
-	}
-	/*fprintf(stderr, "BFS push : %s %d\n", ((ID *) node->ob)->name, queue->count);*/
-
-	elem = queue->freenodes->first;
-	if (elem != NULL) {
-		queue->freenodes->first = elem->next;
-		if (queue->freenodes->last == elem) {
-			queue->freenodes->last = NULL;
-			queue->freenodes->first = NULL;
-		}
-		queue->freenodes->count--;
-	}
-	else { /* alllocating more */
-		elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem1");
-		elem->node = NULL;
-		elem->next = NULL;
-		queue->freenodes->first = queue->freenodes->last = elem;
-
-		for (i = 1; i < DAGQUEUEALLOC; i++) {
-			elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem2");
-			elem->node = NULL;
-			elem->next = NULL;
-			queue->freenodes->last->next = elem;
-			queue->freenodes->last = elem;
-		}
-		queue->freenodes->count = DAGQUEUEALLOC;
-			
-		elem = queue->freenodes->first;
-		queue->freenodes->first = elem->next;
-	}
-	elem->next = NULL;
-	elem->node = node;
-	if (queue->last != NULL)
-		queue->last->next = elem;
-	queue->last = elem;
-	if (queue->first == NULL) {
-		queue->first = elem;
-	}
-	queue->count++;
-}
-
-
-/* insert in front, remove in front */
-void push_stack(DagNodeQueue *queue, DagNode *node)
-{
-	DagNodeQueueElem *elem;
-	int i;
-
-	elem = queue->freenodes->first;
-	if (elem != NULL) {
-		queue->freenodes->first = elem->next;
-		if (queue->freenodes->last == elem) {
-			queue->freenodes->last = NULL;
-			queue->freenodes->first = NULL;
-		}
-		queue->freenodes->count--;
-	}
-	else { /* alllocating more */
-		elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem1");
-		elem->node = NULL;
-		elem->next = NULL;
-		queue->freenodes->first = queue->freenodes->last = elem;
-
-		for (i = 1; i < DAGQUEUEALLOC; i++) {
-			elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem2");
-			elem->node = NULL;
-			elem->next = NULL;
-			queue->freenodes->last->next = elem;
-			queue->freenodes->last = elem;
-		}
-		queue->freenodes->count = DAGQUEUEALLOC;
-			
-		elem = queue->freenodes->first;
-		queue->freenodes->first = elem->next;
-	}
-	elem->next = queue->first;
-	elem->node = node;
-	queue->first = elem;
-	if (queue->last == NULL)
-		queue->last = elem;
-	queue->count++;
-}
-
-
-DagNode *pop_queue(DagNodeQueue *queue)
-{
-	DagNodeQueueElem *elem;
-	DagNode *node;
-
-	elem = queue->first;
-	if (elem) {
-		queue->first = elem->next;
-		if (queue->last == elem) {
-			queue->last = NULL;
-			queue->first = NULL;
-		}
-		queue->count--;
-		if (queue->freenodes->last)
-			queue->freenodes->last->next = elem;
-		queue->freenodes->last = elem;
-		if (queue->freenodes->first == NULL)
-			queue->freenodes->first = elem;
-		node = elem->node;
-		elem->node = NULL;
-		elem->next = NULL;
-		queue->freenodes->count++;
-		return node;
-	}
-	else {
-		fprintf(stderr, "return null\n");
-		return NULL;
-	}
-}
-
-DagNode *get_top_node_queue(DagNodeQueue *queue)
-{
-	return queue->first->node;
-}
-
-DagForest *dag_init(void)
-{
-	DagForest *forest;
-	/* use callocN to init all zero */
-	forest = MEM_callocN(sizeof(DagForest), "DAG root");
-	forest->ugly_hack_sorry = true;
-	return forest;
-}
-
-/* isdata = object data... */
-/* XXX this needs to be extended to be more flexible (so that not only objects are evaluated via depsgraph)... */
-static void dag_add_driver_relation(AnimData *adt, DagForest *dag, DagNode *node, int isdata)
-{
-	FCurve *fcu;
-	DagNode *node1;
-	
-	for (fcu = adt->drivers.first; fcu; fcu = fcu->next) {
-		ChannelDriver *driver = fcu->driver;
-		DriverVar *dvar;
-		int isdata_fcu = (isdata) || (fcu->rna_path && strstr(fcu->rna_path, "modifiers["));
-		
-		/* loop over variables to get the target relationships */
-		for (dvar = driver->variables.first; dvar; dvar = dvar->next) {
-			/* only used targets */
-			DRIVER_TARGETS_USED_LOOPER(dvar) 
-			{
-				if (dtar->id) {
-					/* FIXME: other data types need to be added here so that they can work! */
-					if (GS(dtar->id->name) == ID_OB) {
-						Object *ob = (Object *)dtar->id;
-						
-						/* normal channel-drives-channel */
-						node1 = dag_get_node(dag, dtar->id);
-						
-						/* check if bone... */
-						if ((ob->type == OB_ARMATURE) &&
-						    ( ((dtar->rna_path) && strstr(dtar->rna_path, "pose.bones[")) ||
-						      ((dtar->flag & DTAR_FLAG_STRUCT_REF) && (dtar->pchan_name[0])) ))
-						{
-							dag_add_relation(dag, node1, node, isdata_fcu ? DAG_RL_DATA_DATA : DAG_RL_DATA_OB, "Driver");
-						}
-						/* check if ob data */
-						else if (dtar->rna_path && strstr(dtar->rna_path, "data."))
-							dag_add_relation(dag, node1, node, isdata_fcu ? DAG_RL_DATA_DATA : DAG_RL_DATA_OB, "Driver");
-						/* normal */
-						else
-							dag_add_relation(dag, node1, node, isdata_fcu ? DAG_RL_OB_DATA : DAG_RL_OB_OB, "Driver");
-					}
-				}
-			}
-			DRIVER_TARGETS_LOOPER_END
-		}
-	}
-}
-
-/* XXX: forward def for material driver handling... */
-static void dag_add_material_driver_relations(DagForest *dag, DagNode *node, Material *ma);
-
-/* recursive handling for shader nodetree drivers */
-static void dag_add_shader_nodetree_driver_relations(DagForest *dag, DagNode *node, bNodeTree *ntree)
-{
-	bNode *n;
-
-	/* nodetree itself */
-	if (ntree->adt) {
-		dag_add_driver_relation(ntree->adt, dag, node, 1);
-	}
-	
-	/* nodetree's nodes... */
-	for (n = ntree->nodes.first; n; n = n->next) {
-		if (n->id) {
-			if (GS(n->id->name) == ID_MA) {
-				dag_add_material_driver_relations(dag, node, (Material *)n->id);
-			}
-			else if (n->type == NODE_GROUP) {
-				dag_add_shader_nodetree_driver_relations(dag, node, (bNodeTree *)n->id);
-			}
-		}
-	}
-}
-
-/* recursive handling for material drivers */
-static void dag_add_material_driver_relations(DagForest *dag, DagNode *node, Material *ma)
-{
-	/* Prevent infinite recursion by checking (and tagging the mat

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list