Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
/*
|
|
|
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
*
|
|
|
|
|
* The Original Code is Copyright (C) 2014 Blender Foundation.
|
|
|
|
|
* All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* Original Author: Lukas Toenne
|
|
|
|
|
* Contributor(s): None Yet
|
|
|
|
|
*
|
|
|
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
|
|
|
*/
|
|
|
|
|
|
2017-12-21 12:56:44 +01:00
|
|
|
/** \file blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
* \ingroup depsgraph
|
|
|
|
|
*
|
|
|
|
|
* Implementation of tools for debugging the depsgraph
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "BLI_utildefines.h"
|
|
|
|
|
#include "BLI_ghash.h"
|
|
|
|
|
|
|
|
|
|
extern "C" {
|
|
|
|
|
#include "DNA_listBase.h"
|
2017-06-06 12:14:39 +02:00
|
|
|
} /* extern "C" */
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
|
|
|
|
|
#include "DEG_depsgraph.h"
|
|
|
|
|
#include "DEG_depsgraph_debug.h"
|
|
|
|
|
|
|
|
|
|
#include "intern/depsgraph_intern.h"
|
2017-12-20 16:35:48 +01:00
|
|
|
#include "intern/nodes/deg_node_id.h"
|
2017-12-20 16:27:08 +01:00
|
|
|
#include "intern/nodes/deg_node_time.h"
|
|
|
|
|
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
#include "util/deg_util_foreach.h"
|
|
|
|
|
|
|
|
|
|
/* ****************** */
|
|
|
|
|
/* Graphviz Debugging */
|
|
|
|
|
|
|
|
|
|
namespace DEG {
|
|
|
|
|
|
|
|
|
|
#define NL "\r\n"
|
|
|
|
|
|
|
|
|
|
/* Only one should be enabled, defines whether graphviz nodes
|
|
|
|
|
* get colored by individual types or classes.
|
|
|
|
|
*/
|
|
|
|
|
#define COLOR_SCHEME_NODE_CLASS 1
|
|
|
|
|
//#define COLOR_SCHEME_NODE_TYPE 2
|
|
|
|
|
|
|
|
|
|
static const char *deg_debug_graphviz_fontname = "helvetica";
|
|
|
|
|
static float deg_debug_graphviz_graph_label_size = 20.0f;
|
|
|
|
|
static float deg_debug_graphviz_node_label_size = 14.0f;
|
|
|
|
|
static const int deg_debug_max_colors = 12;
|
|
|
|
|
#ifdef COLOR_SCHEME_NODE_TYPE
|
|
|
|
|
static const char *deg_debug_colors[] = {
|
|
|
|
|
"#a6cee3", "#1f78b4", "#b2df8a",
|
|
|
|
|
"#33a02c", "#fb9a99", "#e31a1c",
|
|
|
|
|
"#fdbf6f", "#ff7f00", "#cab2d6",
|
|
|
|
|
"#6a3d9a", "#ffff99", "#b15928",
|
2018-11-14 11:24:54 +01:00
|
|
|
"#ff00ff",
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
};
|
|
|
|
|
#endif
|
|
|
|
|
static const char *deg_debug_colors_light[] = {
|
|
|
|
|
"#8dd3c7", "#ffffb3", "#bebada",
|
|
|
|
|
"#fb8072", "#80b1d3", "#fdb462",
|
|
|
|
|
"#b3de69", "#fccde5", "#d9d9d9",
|
|
|
|
|
"#bc80bd", "#ccebc5", "#ffed6f",
|
2018-11-14 11:24:54 +01:00
|
|
|
"#ff00ff",
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#ifdef COLOR_SCHEME_NODE_TYPE
|
|
|
|
|
static const int deg_debug_node_type_color_map[][2] = {
|
2017-06-13 14:12:54 +02:00
|
|
|
{DEG_NODE_TYPE_TIMESOURCE, 0},
|
2017-06-13 14:16:43 +02:00
|
|
|
{DEG_NODE_TYPE_ID_REF, 1},
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
|
|
|
|
|
/* Outer Types */
|
2018-11-14 11:24:54 +01:00
|
|
|
{DEG_NODE_TYPE_PARAMETERS, 2},
|
|
|
|
|
{DEG_NODE_TYPE_PROXY, 3},
|
|
|
|
|
{DEG_NODE_TYPE_ANIMATION, 4},
|
|
|
|
|
{DEG_NODE_TYPE_TRANSFORM, 5},
|
|
|
|
|
{DEG_NODE_TYPE_GEOMETRY, 6},
|
|
|
|
|
{DEG_NODE_TYPE_SEQUENCER, 7},
|
|
|
|
|
{DEG_NODE_TYPE_SHADING, 8},
|
2017-10-07 15:57:14 +11:00
|
|
|
{DEG_NODE_TYPE_SHADING_PARAMETERS, 9},
|
2018-11-14 11:24:54 +01:00
|
|
|
{DEG_NODE_TYPE_CACHE, 10},
|
|
|
|
|
{DEG_NODE_TYPE_POINT_CACHE, 11},
|
2018-11-15 18:50:18 +11:00
|
|
|
{DEG_NODE_TYPE_LAYER_COLLECTIONS, 12},
|
2018-11-14 11:24:54 +01:00
|
|
|
{DEG_NODE_TYPE_COPY_ON_WRITE, 13},
|
|
|
|
|
{-1, 0}
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
};
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static int deg_debug_node_color_index(const DepsNode *node)
|
|
|
|
|
{
|
|
|
|
|
#ifdef COLOR_SCHEME_NODE_CLASS
|
|
|
|
|
/* Some special types. */
|
|
|
|
|
switch (node->type) {
|
2017-06-01 15:40:02 +02:00
|
|
|
case DEG_NODE_TYPE_ID_REF:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
return 5;
|
2017-06-01 15:40:02 +02:00
|
|
|
case DEG_NODE_TYPE_OPERATION:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
{
|
|
|
|
|
OperationDepsNode *op_node = (OperationDepsNode *)node;
|
|
|
|
|
if (op_node->is_noop())
|
|
|
|
|
return 8;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
/* Do others based on class. */
|
2017-12-20 17:54:52 +01:00
|
|
|
switch (node->get_class()) {
|
2017-06-01 15:42:53 +02:00
|
|
|
case DEG_NODE_CLASS_OPERATION:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
return 4;
|
2017-06-01 15:42:53 +02:00
|
|
|
case DEG_NODE_CLASS_COMPONENT:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
return 1;
|
|
|
|
|
default:
|
|
|
|
|
return 9;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef COLOR_SCHEME_NODE_TYPE
|
|
|
|
|
const int (*pair)[2];
|
|
|
|
|
for (pair = deg_debug_node_type_color_map; (*pair)[0] >= 0; ++pair) {
|
|
|
|
|
if ((*pair)[0] == node->type) {
|
|
|
|
|
return (*pair)[1];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return -1;
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct DebugContext {
|
|
|
|
|
FILE *file;
|
|
|
|
|
bool show_tags;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static void deg_debug_fprintf(const DebugContext &ctx, const char *fmt, ...) ATTR_PRINTF_FORMAT(2, 3);
|
|
|
|
|
static void deg_debug_fprintf(const DebugContext &ctx, const char *fmt, ...)
|
|
|
|
|
{
|
|
|
|
|
va_list args;
|
|
|
|
|
va_start(args, fmt);
|
|
|
|
|
vfprintf(ctx.file, fmt, args);
|
|
|
|
|
va_end(args);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_legend_color(const DebugContext &ctx,
|
|
|
|
|
const char *name,
|
|
|
|
|
const char *color)
|
|
|
|
|
{
|
|
|
|
|
deg_debug_fprintf(ctx, "<TR>");
|
|
|
|
|
deg_debug_fprintf(ctx, "<TD>%s</TD>", name);
|
|
|
|
|
deg_debug_fprintf(ctx, "<TD BGCOLOR=\"%s\"></TD>", color);
|
|
|
|
|
deg_debug_fprintf(ctx, "</TR>" NL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_legend(const DebugContext &ctx)
|
|
|
|
|
{
|
|
|
|
|
deg_debug_fprintf(ctx, "{" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, "rank = sink;" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, "Legend [shape=none, margin=0, label=<" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, " <TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"4\">" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, "<TR><TD COLSPAN=\"2\"><B>Legend</B></TD></TR>" NL);
|
|
|
|
|
|
|
|
|
|
#ifdef COLOR_SCHEME_NODE_CLASS
|
|
|
|
|
const char **colors = deg_debug_colors_light;
|
|
|
|
|
deg_debug_graphviz_legend_color(ctx, "Operation", colors[4]);
|
|
|
|
|
deg_debug_graphviz_legend_color(ctx, "Component", colors[1]);
|
|
|
|
|
deg_debug_graphviz_legend_color(ctx, "ID Node", colors[5]);
|
|
|
|
|
deg_debug_graphviz_legend_color(ctx, "NOOP", colors[8]);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef COLOR_SCHEME_NODE_TYPE
|
|
|
|
|
const int (*pair)[2];
|
|
|
|
|
for (pair = deg_debug_node_type_color_map; (*pair)[0] >= 0; ++pair) {
|
2017-12-15 17:46:30 +01:00
|
|
|
DepsNodeFactory *nti = deg_type_get_factory((eDepsNode_Type)(*pair)[0]);
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_graphviz_legend_color(ctx,
|
|
|
|
|
nti->tname().c_str(),
|
|
|
|
|
deg_debug_colors_light[(*pair)[1] % deg_debug_max_colors]);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
deg_debug_fprintf(ctx, "</TABLE>" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, ">" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, ",fontname=\"%s\"", deg_debug_graphviz_fontname);
|
|
|
|
|
deg_debug_fprintf(ctx, "];" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, "}" NL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_node_color(const DebugContext &ctx,
|
|
|
|
|
const DepsNode *node)
|
|
|
|
|
{
|
|
|
|
|
const char *color_default = "black";
|
|
|
|
|
const char *color_modified = "orangered4";
|
|
|
|
|
const char *color_update = "dodgerblue3";
|
|
|
|
|
const char *color = color_default;
|
|
|
|
|
if (ctx.show_tags) {
|
2017-12-20 17:54:52 +01:00
|
|
|
if (node->get_class() == DEG_NODE_CLASS_OPERATION) {
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
OperationDepsNode *op_node = (OperationDepsNode *)node;
|
|
|
|
|
if (op_node->flag & DEPSOP_FLAG_DIRECTLY_MODIFIED) {
|
|
|
|
|
color = color_modified;
|
|
|
|
|
}
|
|
|
|
|
else if (op_node->flag & DEPSOP_FLAG_NEEDS_UPDATE) {
|
|
|
|
|
color = color_update;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
deg_debug_fprintf(ctx, "\"%s\"", color);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_node_penwidth(const DebugContext &ctx,
|
|
|
|
|
const DepsNode *node)
|
|
|
|
|
{
|
|
|
|
|
float penwidth_default = 1.0f;
|
|
|
|
|
float penwidth_modified = 4.0f;
|
|
|
|
|
float penwidth_update = 4.0f;
|
|
|
|
|
float penwidth = penwidth_default;
|
|
|
|
|
if (ctx.show_tags) {
|
2017-12-20 17:54:52 +01:00
|
|
|
if (node->get_class() == DEG_NODE_CLASS_OPERATION) {
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
OperationDepsNode *op_node = (OperationDepsNode *)node;
|
|
|
|
|
if (op_node->flag & DEPSOP_FLAG_DIRECTLY_MODIFIED) {
|
|
|
|
|
penwidth = penwidth_modified;
|
|
|
|
|
}
|
|
|
|
|
else if (op_node->flag & DEPSOP_FLAG_NEEDS_UPDATE) {
|
|
|
|
|
penwidth = penwidth_update;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
deg_debug_fprintf(ctx, "\"%f\"", penwidth);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_node_fillcolor(const DebugContext &ctx,
|
|
|
|
|
const DepsNode *node)
|
|
|
|
|
{
|
|
|
|
|
const char *defaultcolor = "gainsboro";
|
|
|
|
|
int color_index = deg_debug_node_color_index(node);
|
|
|
|
|
const char *fillcolor = color_index < 0 ? defaultcolor : deg_debug_colors_light[color_index % deg_debug_max_colors];
|
|
|
|
|
deg_debug_fprintf(ctx, "\"%s\"", fillcolor);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_relation_color(const DebugContext &ctx,
|
|
|
|
|
const DepsRelation *rel)
|
|
|
|
|
{
|
|
|
|
|
const char *color_default = "black";
|
2018-11-16 16:11:24 +01:00
|
|
|
const char *color_cyclic = "red4"; /* The color of crime scene. */
|
|
|
|
|
const char *color_godmode = "blue4"; /* The color of beautiful sky. */
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
const char *color = color_default;
|
|
|
|
|
if (rel->flag & DEPSREL_FLAG_CYCLIC) {
|
2018-11-16 16:11:24 +01:00
|
|
|
color = color_cyclic;
|
|
|
|
|
}
|
|
|
|
|
else if (rel->flag & DEPSREL_FLAG_GODMODE) {
|
|
|
|
|
color = color_godmode;
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
}
|
|
|
|
|
deg_debug_fprintf(ctx, "%s", color);
|
|
|
|
|
}
|
|
|
|
|
|
2018-04-23 16:42:37 +02:00
|
|
|
static void deg_debug_graphviz_relation_style(const DebugContext &ctx,
|
|
|
|
|
const DepsRelation *rel)
|
|
|
|
|
{
|
|
|
|
|
const char *style_default = "solid";
|
|
|
|
|
const char *style_no_flush = "dashed";
|
2018-11-14 11:24:54 +01:00
|
|
|
const char *style_flush_user_only = "dotted";
|
2018-04-23 16:42:37 +02:00
|
|
|
const char *style = style_default;
|
|
|
|
|
if (rel->flag & DEPSREL_FLAG_NO_FLUSH) {
|
|
|
|
|
style = style_no_flush;
|
|
|
|
|
}
|
2018-11-14 11:24:54 +01:00
|
|
|
if (rel->flag & DEPSREL_FLAG_FLUSH_USER_EDIT_ONLY) {
|
|
|
|
|
style = style_flush_user_only;
|
|
|
|
|
}
|
2018-04-23 16:42:37 +02:00
|
|
|
deg_debug_fprintf(ctx, "%s", style);
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-14 15:33:41 +02:00
|
|
|
static void deg_debug_graphviz_relation_arrowhead(const DebugContext &ctx,
|
|
|
|
|
const DepsRelation *rel)
|
|
|
|
|
{
|
|
|
|
|
const char *shape_default = "normal";
|
|
|
|
|
const char *shape_no_cow = "box";
|
|
|
|
|
const char *shape = shape_default;
|
|
|
|
|
if (rel->from->get_class() == DEG_NODE_CLASS_OPERATION &&
|
|
|
|
|
rel->to->get_class() == DEG_NODE_CLASS_OPERATION)
|
|
|
|
|
{
|
|
|
|
|
OperationDepsNode *op_from = (OperationDepsNode *)rel->from;
|
|
|
|
|
OperationDepsNode *op_to = (OperationDepsNode *)rel->to;
|
|
|
|
|
if (op_from->owner->type == DEG_NODE_TYPE_COPY_ON_WRITE &&
|
|
|
|
|
!op_to->owner->need_tag_cow_before_update())
|
|
|
|
|
{
|
|
|
|
|
shape = shape_no_cow;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
deg_debug_fprintf(ctx, "%s", shape);
|
|
|
|
|
}
|
|
|
|
|
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
static void deg_debug_graphviz_node_style(const DebugContext &ctx, const DepsNode *node)
|
|
|
|
|
{
|
|
|
|
|
const char *base_style = "filled"; /* default style */
|
|
|
|
|
if (ctx.show_tags) {
|
2017-12-20 17:54:52 +01:00
|
|
|
if (node->get_class() == DEG_NODE_CLASS_OPERATION) {
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
OperationDepsNode *op_node = (OperationDepsNode *)node;
|
|
|
|
|
if (op_node->flag & (DEPSOP_FLAG_DIRECTLY_MODIFIED | DEPSOP_FLAG_NEEDS_UPDATE)) {
|
|
|
|
|
base_style = "striped";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-12-20 17:54:52 +01:00
|
|
|
switch (node->get_class()) {
|
2017-06-01 15:42:53 +02:00
|
|
|
case DEG_NODE_CLASS_GENERIC:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_fprintf(ctx, "\"%s\"", base_style);
|
|
|
|
|
break;
|
2017-06-01 15:42:53 +02:00
|
|
|
case DEG_NODE_CLASS_COMPONENT:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_fprintf(ctx, "\"%s\"", base_style);
|
|
|
|
|
break;
|
2017-06-01 15:42:53 +02:00
|
|
|
case DEG_NODE_CLASS_OPERATION:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_fprintf(ctx, "\"%s,rounded\"", base_style);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_node_single(const DebugContext &ctx,
|
|
|
|
|
const DepsNode *node)
|
|
|
|
|
{
|
|
|
|
|
const char *shape = "box";
|
|
|
|
|
string name = node->identifier();
|
|
|
|
|
deg_debug_fprintf(ctx, "// %s\n", name.c_str());
|
|
|
|
|
deg_debug_fprintf(ctx, "\"node_%p\"", node);
|
|
|
|
|
deg_debug_fprintf(ctx, "[");
|
|
|
|
|
// deg_debug_fprintf(ctx, "label=<<B>%s</B>>", name);
|
2017-12-21 11:13:22 +01:00
|
|
|
deg_debug_fprintf(ctx, "label=<%s>", name.c_str());
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_fprintf(ctx, ",fontname=\"%s\"", deg_debug_graphviz_fontname);
|
|
|
|
|
deg_debug_fprintf(ctx, ",fontsize=%f", deg_debug_graphviz_node_label_size);
|
|
|
|
|
deg_debug_fprintf(ctx, ",shape=%s", shape);
|
|
|
|
|
deg_debug_fprintf(ctx, ",style="); deg_debug_graphviz_node_style(ctx, node);
|
|
|
|
|
deg_debug_fprintf(ctx, ",color="); deg_debug_graphviz_node_color(ctx, node);
|
|
|
|
|
deg_debug_fprintf(ctx, ",fillcolor="); deg_debug_graphviz_node_fillcolor(ctx, node);
|
|
|
|
|
deg_debug_fprintf(ctx, ",penwidth="); deg_debug_graphviz_node_penwidth(ctx, node);
|
|
|
|
|
deg_debug_fprintf(ctx, "];" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, NL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_node_cluster_begin(const DebugContext &ctx,
|
|
|
|
|
const DepsNode *node)
|
|
|
|
|
{
|
2016-11-03 14:45:47 +01:00
|
|
|
string name = node->identifier();
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_fprintf(ctx, "// %s\n", name.c_str());
|
|
|
|
|
deg_debug_fprintf(ctx, "subgraph \"cluster_%p\" {" NL, node);
|
|
|
|
|
// deg_debug_fprintf(ctx, "label=<<B>%s</B>>;" NL, name);
|
|
|
|
|
deg_debug_fprintf(ctx, "label=<%s>;" NL, name.c_str());
|
|
|
|
|
deg_debug_fprintf(ctx, "fontname=\"%s\";" NL, deg_debug_graphviz_fontname);
|
|
|
|
|
deg_debug_fprintf(ctx, "fontsize=%f;" NL, deg_debug_graphviz_node_label_size);
|
|
|
|
|
deg_debug_fprintf(ctx, "margin=\"%d\";" NL, 16);
|
|
|
|
|
deg_debug_fprintf(ctx, "style="); deg_debug_graphviz_node_style(ctx, node); deg_debug_fprintf(ctx, ";" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, "color="); deg_debug_graphviz_node_color(ctx, node); deg_debug_fprintf(ctx, ";" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, "fillcolor="); deg_debug_graphviz_node_fillcolor(ctx, node); deg_debug_fprintf(ctx, ";" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, "penwidth="); deg_debug_graphviz_node_penwidth(ctx, node); deg_debug_fprintf(ctx, ";" NL);
|
|
|
|
|
/* dummy node, so we can add edges between clusters */
|
|
|
|
|
deg_debug_fprintf(ctx, "\"node_%p\"", node);
|
|
|
|
|
deg_debug_fprintf(ctx, "[");
|
|
|
|
|
deg_debug_fprintf(ctx, "shape=%s", "point");
|
|
|
|
|
deg_debug_fprintf(ctx, ",style=%s", "invis");
|
|
|
|
|
deg_debug_fprintf(ctx, "];" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, NL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_node_cluster_end(const DebugContext &ctx)
|
|
|
|
|
{
|
|
|
|
|
deg_debug_fprintf(ctx, "}" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, NL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_graph_nodes(const DebugContext &ctx,
|
|
|
|
|
const Depsgraph *graph);
|
|
|
|
|
static void deg_debug_graphviz_graph_relations(const DebugContext &ctx,
|
|
|
|
|
const Depsgraph *graph);
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_node(const DebugContext &ctx,
|
|
|
|
|
const DepsNode *node)
|
|
|
|
|
{
|
|
|
|
|
switch (node->type) {
|
2017-06-01 15:40:02 +02:00
|
|
|
case DEG_NODE_TYPE_ID_REF:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
{
|
|
|
|
|
const IDDepsNode *id_node = (const IDDepsNode *)node;
|
2018-02-15 23:36:11 +11:00
|
|
|
if (BLI_ghash_len(id_node->components) == 0) {
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_graphviz_node_single(ctx, node);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
deg_debug_graphviz_node_cluster_begin(ctx, node);
|
|
|
|
|
GHASH_FOREACH_BEGIN(const ComponentDepsNode *, comp, id_node->components)
|
|
|
|
|
{
|
|
|
|
|
deg_debug_graphviz_node(ctx, comp);
|
|
|
|
|
}
|
|
|
|
|
GHASH_FOREACH_END();
|
|
|
|
|
deg_debug_graphviz_node_cluster_end(ctx);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
2017-06-01 15:40:02 +02:00
|
|
|
case DEG_NODE_TYPE_PARAMETERS:
|
|
|
|
|
case DEG_NODE_TYPE_ANIMATION:
|
|
|
|
|
case DEG_NODE_TYPE_TRANSFORM:
|
|
|
|
|
case DEG_NODE_TYPE_PROXY:
|
|
|
|
|
case DEG_NODE_TYPE_GEOMETRY:
|
|
|
|
|
case DEG_NODE_TYPE_SEQUENCER:
|
|
|
|
|
case DEG_NODE_TYPE_EVAL_POSE:
|
|
|
|
|
case DEG_NODE_TYPE_BONE:
|
|
|
|
|
case DEG_NODE_TYPE_SHADING:
|
2017-08-29 12:51:56 +02:00
|
|
|
case DEG_NODE_TYPE_SHADING_PARAMETERS:
|
2017-06-01 15:40:02 +02:00
|
|
|
case DEG_NODE_TYPE_CACHE:
|
2018-11-14 11:24:54 +01:00
|
|
|
case DEG_NODE_TYPE_POINT_CACHE:
|
2017-06-01 16:31:56 +02:00
|
|
|
case DEG_NODE_TYPE_LAYER_COLLECTIONS:
|
2018-12-10 15:09:46 +01:00
|
|
|
case DEG_NODE_TYPE_PARTICLE_SYSTEM:
|
|
|
|
|
case DEG_NODE_TYPE_PARTICLE_SETTINGS:
|
Depsgraph: Initial groundwork for copy-on-write support
< Dependency graph Copy-on-Write >
--------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
This is an initial commit of Copy-on-write support added to dependency graph.
Main priority for now: get playback (Alt-A) and all operators (selection,
transform etc) to work with the new concept of clear separation between
evaluated data coming from dependency graph and original data coming from
.blend file (and stored in bmain).
= How does this work? =
The idea is to support Copy-on-Write on the ID level. This means, we duplicate
the whole ID before we cann it's evaluaiton function. This is currently done
in the following way:
- At the depsgraph construction time we create "shallow" copy of the ID
datablock, just so we know it's pointer in memory and can use for function
bindings.
- At the evaluaiton time, the copy of ID get's "expanded" (needs a better
name internally, so it does not conflict with expanding datablocks during
library linking), which means the content of the datablock is being
copied over and all IDs are getting remapped to the copied ones.
Currently we do the whole copy, in the future we will support some tricks
here to prevent duplicating geometry arrays (verts, edges, loops, faces
and polys) when we don't need that.
- Evaluation functions are operating on copied datablocks and never touching
original datablock.
- There are some cases when we need to know non-ID pointers for function
bindings. This mainly applies to scene collections and armatures. The
idea of dealing with this is to "expand" copy-on-write datablock at
the dependency graph build time. This might introduce some slowdown to the
dependency graph construction time, but allows us to have minimal changes
in the code and avoid any hash look-up from evaluation function (one of
the ideas to avoid using pointers as function bindings is to pass name
of layer or a bone to the evaluation function and look up actual data based
on that name).
Currently there is a special function in depsgraph which does such a
synchronization, in the future we might want to make it more generic.
At some point we need to synchronize copy-on-write version of datablock with
the original version. This happens, i.e., when we change active object or
change selection. We don't want any actual evaluation of update flush happening
for such thins, so now we have a special update tag:
DEG_id_tag_update((id, DEG_TAG_COPY_ON_WRITE)
- For the render engines we now have special call for the dependency graph to
give evaluated datablock for the given original one. This isn't fully ideal
but allows to have Cycles viewport render.
This is definitely a subject for further investigation / improvement.
This call will tag copy-on-write component tagged for update without causing
updates to be flushed to any other objects, causing chain reaction of updates.
This tag is handy when selection in the scene changes.
This basically summarizes ideas underneath this commit. The code should be
reasonably documented.
Here is a demo of dependency graph with all copy-on-write stuff in it:
https://developer.blender.org/F635468
= What to expect to (not) work? =
- Only meshes are properly-ish aware of copy-on-write currently, Non-mesh
geometry will probably crash or will not work at all.
- Armatures will need similar depsgraph built-time expansion of the copied
datablock.
- There are some extra tags / relations added, to keep things demo-able but
which are slowing things down for evaluation.
- Edit mode works for until click selection is used (due to the selection
code using EditDerivedMesh created ad-hoc).
- Lots of tools will lack tagging synchronization of copied datablock for
sync with original ID.
= How to move forward? =
There is some tedious work related on going over all the tools, checking
whether they need to work with original or final evaluated object and make
the required changes.
Additionally, there need synchronization tag done in fair amount of tools
and operators as well. For example, currently it's not possible to change
render engine without re-opening the file or forcing dependency graph for
re-build via python console.
There is also now some thoughts required about copying evaluated properties
between objects or from collection to a new object. Perhaps easiest way
would be to move base flag flush to Object ID node and tag new objects for
update instead of doing manual copy.
here is some WIP patch which moves such evaluaiton / flush:
https://developer.blender.org/F635479
Lots of TODOs in the code, with possible optimization.
= How to test? =
This is a feature under heavy development, so obviously it is disabled by
default. The only reason it goes to 2.8 branch is to avoid possible merge
hell.
In order to enable this feature use WITH_DEPSGRAPH_COPY_ON_WRITE CMake
configuration option.
2017-06-14 10:26:24 +02:00
|
|
|
case DEG_NODE_TYPE_COPY_ON_WRITE:
|
2018-06-14 15:00:50 +02:00
|
|
|
case DEG_NODE_TYPE_OBJECT_FROM_LAYER:
|
2017-11-23 16:03:44 +01:00
|
|
|
case DEG_NODE_TYPE_BATCH_CACHE:
|
2018-09-19 15:09:55 +02:00
|
|
|
case DEG_NODE_TYPE_DUPLI:
|
2018-12-04 16:04:10 +01:00
|
|
|
case DEG_NODE_TYPE_SYNCHRONIZE:
|
2018-12-05 17:13:26 +01:00
|
|
|
case DEG_NODE_TYPE_GENERIC_DATABLOCK:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
{
|
|
|
|
|
ComponentDepsNode *comp_node = (ComponentDepsNode *)node;
|
|
|
|
|
if (!comp_node->operations.empty()) {
|
2016-05-27 18:30:01 +02:00
|
|
|
deg_debug_graphviz_node_cluster_begin(ctx, node);
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
foreach (DepsNode *op_node, comp_node->operations) {
|
|
|
|
|
deg_debug_graphviz_node(ctx, op_node);
|
|
|
|
|
}
|
|
|
|
|
deg_debug_graphviz_node_cluster_end(ctx);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
deg_debug_graphviz_node_single(ctx, node);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
2017-08-29 12:51:56 +02:00
|
|
|
case DEG_NODE_TYPE_UNDEFINED:
|
|
|
|
|
case DEG_NODE_TYPE_TIMESOURCE:
|
|
|
|
|
case DEG_NODE_TYPE_OPERATION:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_graphviz_node_single(ctx, node);
|
|
|
|
|
break;
|
2017-12-15 17:55:23 +01:00
|
|
|
case NUM_DEG_NODE_TYPES:
|
|
|
|
|
break;
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool deg_debug_graphviz_is_cluster(const DepsNode *node)
|
|
|
|
|
{
|
|
|
|
|
switch (node->type) {
|
2017-06-01 15:40:02 +02:00
|
|
|
case DEG_NODE_TYPE_ID_REF:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
{
|
|
|
|
|
const IDDepsNode *id_node = (const IDDepsNode *)node;
|
2018-02-15 23:36:11 +11:00
|
|
|
return BLI_ghash_len(id_node->components) > 0;
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
}
|
2017-06-01 15:40:02 +02:00
|
|
|
case DEG_NODE_TYPE_PARAMETERS:
|
|
|
|
|
case DEG_NODE_TYPE_ANIMATION:
|
|
|
|
|
case DEG_NODE_TYPE_TRANSFORM:
|
|
|
|
|
case DEG_NODE_TYPE_PROXY:
|
|
|
|
|
case DEG_NODE_TYPE_GEOMETRY:
|
|
|
|
|
case DEG_NODE_TYPE_SEQUENCER:
|
|
|
|
|
case DEG_NODE_TYPE_EVAL_POSE:
|
|
|
|
|
case DEG_NODE_TYPE_BONE:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
{
|
|
|
|
|
ComponentDepsNode *comp_node = (ComponentDepsNode *)node;
|
|
|
|
|
return !comp_node->operations.empty();
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool deg_debug_graphviz_is_owner(const DepsNode *node,
|
|
|
|
|
const DepsNode *other)
|
|
|
|
|
{
|
2017-12-20 17:54:52 +01:00
|
|
|
switch (node->get_class()) {
|
2017-06-01 15:42:53 +02:00
|
|
|
case DEG_NODE_CLASS_COMPONENT:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
{
|
|
|
|
|
ComponentDepsNode *comp_node = (ComponentDepsNode *)node;
|
|
|
|
|
if (comp_node->owner == other)
|
|
|
|
|
return true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
2017-06-01 15:42:53 +02:00
|
|
|
case DEG_NODE_CLASS_OPERATION:
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
{
|
|
|
|
|
OperationDepsNode *op_node = (OperationDepsNode *)node;
|
|
|
|
|
if (op_node->owner == other)
|
|
|
|
|
return true;
|
|
|
|
|
else if (op_node->owner->owner == other)
|
|
|
|
|
return true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default: break;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_node_relations(const DebugContext &ctx,
|
|
|
|
|
const DepsNode *node)
|
|
|
|
|
{
|
|
|
|
|
foreach (DepsRelation *rel, node->inlinks) {
|
|
|
|
|
float penwidth = 2.0f;
|
|
|
|
|
|
|
|
|
|
const DepsNode *tail = rel->to; /* same as node */
|
|
|
|
|
const DepsNode *head = rel->from;
|
|
|
|
|
deg_debug_fprintf(ctx, "// %s -> %s\n",
|
|
|
|
|
head->identifier().c_str(),
|
|
|
|
|
tail->identifier().c_str());
|
|
|
|
|
deg_debug_fprintf(ctx, "\"node_%p\"", head);
|
|
|
|
|
deg_debug_fprintf(ctx, " -> ");
|
|
|
|
|
deg_debug_fprintf(ctx, "\"node_%p\"", tail);
|
|
|
|
|
|
|
|
|
|
deg_debug_fprintf(ctx, "[");
|
|
|
|
|
/* Note: without label an id seem necessary to avoid bugs in graphviz/dot */
|
|
|
|
|
deg_debug_fprintf(ctx, "id=\"%s\"", rel->name);
|
2018-01-29 14:45:45 +01:00
|
|
|
// deg_debug_fprintf(ctx, "label=\"%s\"", rel->name);
|
2018-04-23 16:42:37 +02:00
|
|
|
deg_debug_fprintf(ctx, ",color=");
|
|
|
|
|
deg_debug_graphviz_relation_color(ctx, rel);
|
|
|
|
|
deg_debug_fprintf(ctx, ",style=");
|
|
|
|
|
deg_debug_graphviz_relation_style(ctx, rel);
|
2018-06-14 15:33:41 +02:00
|
|
|
deg_debug_fprintf(ctx, ",arrowhead=");
|
|
|
|
|
deg_debug_graphviz_relation_arrowhead(ctx, rel);
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_fprintf(ctx, ",penwidth=\"%f\"", penwidth);
|
|
|
|
|
/* NOTE: edge from node to own cluster is not possible and gives graphviz
|
|
|
|
|
* warning, avoid this here by just linking directly to the invisible
|
|
|
|
|
* placeholder node
|
|
|
|
|
*/
|
2018-04-23 16:42:37 +02:00
|
|
|
if (deg_debug_graphviz_is_cluster(tail) &&
|
|
|
|
|
!deg_debug_graphviz_is_owner(head, tail))
|
|
|
|
|
{
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_fprintf(ctx, ",ltail=\"cluster_%p\"", tail);
|
|
|
|
|
}
|
2018-04-23 16:42:37 +02:00
|
|
|
if (deg_debug_graphviz_is_cluster(head) &&
|
|
|
|
|
!deg_debug_graphviz_is_owner(tail, head))
|
|
|
|
|
{
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_fprintf(ctx, ",lhead=\"cluster_%p\"", head);
|
|
|
|
|
}
|
|
|
|
|
deg_debug_fprintf(ctx, "];" NL);
|
|
|
|
|
deg_debug_fprintf(ctx, NL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_graph_nodes(const DebugContext &ctx,
|
|
|
|
|
const Depsgraph *graph)
|
|
|
|
|
{
|
2017-11-08 14:48:25 +01:00
|
|
|
foreach (DepsNode *node, graph->id_nodes) {
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
deg_debug_graphviz_node(ctx, node);
|
|
|
|
|
}
|
2017-06-01 15:38:15 +02:00
|
|
|
TimeSourceDepsNode *time_source = graph->find_time_source();
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
if (time_source != NULL) {
|
|
|
|
|
deg_debug_graphviz_node(ctx, time_source);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void deg_debug_graphviz_graph_relations(const DebugContext &ctx,
|
|
|
|
|
const Depsgraph *graph)
|
|
|
|
|
{
|
2017-11-08 14:48:25 +01:00
|
|
|
foreach (IDDepsNode *id_node, graph->id_nodes) {
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
GHASH_FOREACH_BEGIN(ComponentDepsNode *, comp_node, id_node->components)
|
|
|
|
|
{
|
|
|
|
|
foreach (OperationDepsNode *op_node, comp_node->operations) {
|
|
|
|
|
deg_debug_graphviz_node_relations(ctx, op_node);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
GHASH_FOREACH_END();
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-01 15:38:15 +02:00
|
|
|
TimeSourceDepsNode *time_source = graph->find_time_source();
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
if (time_source != NULL) {
|
|
|
|
|
deg_debug_graphviz_node_relations(ctx, time_source);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace DEG
|
|
|
|
|
|
2017-12-21 12:56:44 +01:00
|
|
|
void DEG_debug_relations_graphviz(const Depsgraph *graph,
|
|
|
|
|
FILE *f,
|
|
|
|
|
const char *label)
|
Depsgraph: Cleanup and code simplification
This is mainly a maintenance commit which was aimed to make work with
this module more pleasant and solve such issues as:
- Annoyance with looong files, which had craftload in them
- Usage of STL for the data structures we've got in BLI
- Possible symbol conflicts
- Not real clear layout of what is located where
So in this commit the following changes are done:
- STL is prohibited, it's not really predictable on various compilers,
with our BLI algorithms we can predict things much better.
There are still few usages of std::vector, but that we'll be
solving later once we've got similar thing in BLI.
- Simplify foreach loops, avoid using const_iterator all over the place.
- New directory layout, which is hopefully easier to follow.
- Some files were split, some of them will be split soon.
The idea of this is to split huge functions into own files with
good documentation and everything.
- Removed stuff which was planned for use in the future but was never
finished, tested or anything.
Let's wipe it out for now, and bring back once we really start using
it, so it'll be more clear if it solves our needs.
- All the internal routines were moved to DEG namespace to separate
them better from rest of blender.
Some places now annoyingly using DEG::foo, but that we can olve by
moving some utility functions inside of the namespace.
While working on this we've found some hotspot in updates flush, so
now playback of blenrig is few percent faster (something like 96fps
with previous master and around 99-100fps after this change).
Not saying it's something final, there is still room for cleanup and
API simplification, but those might happen as a regular development
now without doing any global changes.
2016-05-27 18:01:18 +02:00
|
|
|
{
|
|
|
|
|
if (!graph) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const DEG::Depsgraph *deg_graph = reinterpret_cast<const DEG::Depsgraph *>(graph);
|
|
|
|
|
|
|
|
|
|
DEG::DebugContext ctx;
|
|
|
|
|
ctx.file = f;
|
|
|
|
|
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, "digraph depgraph {" NL);
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, "rankdir=LR;" NL);
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, "graph [");
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, "compound=true");
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, ",labelloc=\"t\"");
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, ",fontsize=%f", DEG::deg_debug_graphviz_graph_label_size);
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, ",fontname=\"%s\"", DEG::deg_debug_graphviz_fontname);
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, ",label=\"%s\"", label);
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, ",splines=ortho");
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, ",overlap=scalexy"); // XXX: only when using neato
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, "];" NL);
|
|
|
|
|
|
|
|
|
|
DEG::deg_debug_graphviz_graph_nodes(ctx, deg_graph);
|
|
|
|
|
DEG::deg_debug_graphviz_graph_relations(ctx, deg_graph);
|
|
|
|
|
|
|
|
|
|
DEG::deg_debug_graphviz_legend(ctx);
|
|
|
|
|
|
|
|
|
|
DEG::deg_debug_fprintf(ctx, "}" NL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#undef NL
|