December 14, 2015, 07:16 (GMT) |
Generalization of function caching to avoid unnecessary recompilation. The function cache allows callers to store functions in a cache (hash table). The functions also have a reference count, so replacing the function in the cache (when the node tree changes) does not immediately delete the current instance. This allows background threads to keep using the old function until they can cleanly return (tasks should be restarted when the nodes become outdated, but this is up to the caller system). |
December 12, 2015, 11:40 (GMT) |
New data type for constant (!) strings. The const-ness is very important: strings are only stored as const char* on the stack, which point to memory inside the instructions list. The instructions contain the actual char array, with a null terminator. This does not allow allocating new strings during eval, but it makes it possible to use static strings as identifiers and keys for global data. Eventually we could allow string operations through an allocation system similar to DerivedMesh handling, with init/release nodes to manage alloc/free. |
December 12, 2015, 10:56 (GMT) |
Merge branch 'master' into object_nodes |
December 11, 2015, 17:30 (GMT) |
Use the relative transform of target objects and the modified object to adjust modifiers. This affects modifiers which use an external target object (currently boolean and curve path). The modified object is a graph input argument, which the target object is looked up via its key. The relative transform means the values calculated from external geometry are always in the modified object's local space. Note that transform and its inverse are provided explicitly to nodes. This will allow optimization for constants later on. |
December 11, 2015, 15:24 (GMT) |
Merge branch 'master' into object_nodes |
December 11, 2015, 15:11 (GMT) |
Boolean modifier node, based on the new bmesh boolean operations. |
December 11, 2015, 09:55 (GMT) |
Merge branch 'master' into object_nodes |
December 11, 2015, 08:46 (GMT) |
Clamp the curve parameter in the curve path eval, because where_on_path is touchy about it. |
December 11, 2015, 08:44 (GMT) |
Reenabled the depsgraph relations for nested node trees, for the time being. This should also work through the API! However, it requires building the nodetree depsnodes before making relations which is not well supported yet. The forced relations are currently needed to make updates inside the component node trees trigger object recalc. |
December 11, 2015, 08:16 (GMT) |
Minimal RNA API of the depsgraph for registering object node dependencies. This simply reflects the existing C API for the depsgraph, as already used by modifiers. The object nodes gain two callbacks, one for depsgraph relations and one for registering globals. Since both of these should require the same objects and other ID blocks to be registered, they share a common `relations_update` function on the pynode level for convenience. |
December 10, 2015, 19:26 (GMT) |
New node "Curve Path" for reading interpolated curve data. This introduces an improved way of handling ID relations inside the node tree. Instead of storing simple indices to an object array, the nodes now generate a 'key' (currently just ID name + lib name). At eval time this key is then looked up from a hash table in globals, to produce the actual pointer to the object. Currently the node will not work, because the curve is not yet registered in the globals map. This should happen in conjunction with depsgraph updates. |
December 10, 2015, 14:21 (GMT) |
Merge branch 'master' into object_nodes |
December 10, 2015, 14:20 (GMT) |
EvalData is now deprecated and unused, removed it. |
December 10, 2015, 14:17 (GMT) |
Removed global data from the compile process, this should only be needed for eval. Global data is used primarily for blend_data pointers (objects primarily). These should not be stored directly inside the function instructions, but should be stored by a key (hash value) and resolved at eval time. |
December 10, 2015, 13:23 (GMT) |
A number of actual value nodes for simple input constants in the UI. |
December 10, 2015, 11:51 (GMT) |
Moved debugging code output node graph into a utility file. |
December 10, 2015, 11:37 (GMT) |
Represent local output behavior in the graphviz debug by showing additional links. |
December 10, 2015, 11:01 (GMT) |
Fix for graph debug: input arguments refer to outputs, can just use the ARG nodes themselves. |
December 10, 2015, 10:51 (GMT) |
Partial revert: need to allow pointer/mesh value nodes and constants. These are generated automatically as terminators in pass node chains. No pointer/mesh values will be stored in instructions though, the sockets are just dummies to ensure a consistent value node signature. |
December 10, 2015, 10:23 (GMT) |
Removed 'Value' node types for pointer and mesh data, and disallow hardcoding them as constants. Pointers in the instruction lists are bound to be invalid most of the time. They should only be supplied externally via graph input arguments. Note that opcodes still exist for POINTER/MESH, but these always store a NULL/empty DM default value, rather than reading from instructions. They are only used by the code generator as fallbacks if such sockets are not connected. |
|