May 20, 2014, 19:16 (GMT) |
Removed deprecated code. |
May 20, 2014, 18:23 (GMT) |
Inverted the direction of relations in graphviz debug output to get a better left->right direction and indicate the logical ordering of operations. |
May 20, 2014, 18:22 (GMT) |
Minor fix for indentation errors. |
May 20, 2014, 17:59 (GMT) |
Fix for operation categorization by type, NOOP is now the first real operation type. |
May 20, 2014, 16:25 (GMT) |
Removed the IDKey for building relations, due to ambiguity and failing to add relations. To add a relations between operations we need to address a specific component or operation directly. |
May 19, 2014, 17:41 (GMT) |
Transitive reduction optimization for operation relations. This removed redundant relations between operations, implementing the transitive reduction algorithm: http://en.wikipedia.org/wiki/Transitive_reduction The current implementation is a bit naive, but can be improved later. Using this optimization gives more flexibility in the build procedure, since we don't need to have fully defined relations in a component before adding external relations. Performance would only be improved in some extreme cases probably (huge amount of redundant relations), it should be much more dependent on a good scheduling heuristic. |
May 19, 2014, 16:10 (GMT) |
Added back registration of operation nodes in the central Depsgraph container. Ownership is still a bit mushy here, but at least this makes it easier to apply algorithms on the operations with a single-level loop. |
May 19, 2014, 10:30 (GMT) |
Added a few missing debug function stubs for release mode. |
May 19, 2014, 08:37 (GMT) |
Merge branch 'master' into depsgraph_refactor |
May 13, 2014, 16:33 (GMT) |
Use current id->component->operation nesting for displaying debug relations. Eventually operations will get a single container in the graph, but this is not working yet. |
May 13, 2014, 16:25 (GMT) |
Entry/Exit operations in components for replacing outer relations. Each component now has one designated entry and one exit operation. If all nodes depend on a single entry/exit already after the main build step, these will be used directly. Otherwise an explicit No-Op node will be created to cut down the number of necessary relations. |
May 13, 2014, 09:10 (GMT) |
Fix for crash when tagging new ID blocks which don't have a depsgraph node yet. |
May 13, 2014, 08:57 (GMT) |
Removed the build_operations methods and OperationBuilder class again. The few places where this has been used (pose and bone components) have been integrated into the regular build functions. Eventually we may want to do dispatching like this again, but for the time being it's easier to keep these things in a central place until it is clear how the build procedure is best organized. |
May 12, 2014, 17:52 (GMT) |
Added upcast functions for safely converting a generic ID pointer into one of the DNA structs. This uses the GS macro to compare an ID block's prefix to the associated DNA struct. The static_cast_id variant only does contains an assert, while the dynamic_cast_id variant safely checks and returns a NULL pointer in case the ID type doesn't match. A new utility header for type traits has been added. These are standard techniques used in boost and C++11, but added as own implementation here to avoid nasty dependencies. |
May 11, 2014, 10:11 (GMT) |
Replaced the `validate_links` method by `build_operations`. The `build_operations` will need to be complemented with all the build steps for operations currently mixed in with the node/relations builder. |
May 11, 2014, 08:35 (GMT) |
Added new node method 'build_operations' which will replace the current 'validate_link' for constructing the inner nodes from ID- and component nodes. |
May 11, 2014, 08:29 (GMT) |
Removed the unused "Color" enum. This was part of old depsgraph algorithms, but is not used in the new code so far. Can be added back easily if required, but preferably in a more transparent way (color meaning is far from intuitive). |
May 11, 2014, 08:26 (GMT) |
Clean up DepsNode flag fields. The OperationDepsNode.flag field would shadow the DepsNode.flag field. These flags are only used for eval tagging atm, so it's safe to move these into the OperationDepsNode class. If necessary, similar flags for "directly modified" etc. could be added to ID nodes or components too, but they can and should be conceptually separate and use a non-conflicting flag in the respective subclasses. |
May 11, 2014, 06:46 (GMT) |
Moved relations from generic DepsNode base class into OperationDepsNode. Rationale here is that only relations between operations matter for the final evaluation. Keeping this specific makes it easier to avoid implicit assumptions and confusing upcasts in the evaluation code. Relations between "outer" nodes (ID nodes and components) will be translated directly into relations of their inner operation nodes (this will require fully built operations lists at the time relations are constructed). Higher level relations may be used for debugging purposes, but they are not required for evaluation and should be handled in a separate structure. |
May 7, 2014, 13:53 (GMT) |
Fix for strict compiler flags: Avoid variable declarations after code. |
|