Commit Graph
70 Commits
Author SHA1 Message Date
itsmattkc 690bdb6581 timeline: make sure track length is updated if a block is disconnected 2020-04-27 14:01:44 +10:00
itsmattkc ac3f49a845 nodes: moved matrix input on "video input" elsewhere
Rather than plugging a matrix into the video input node, the matrix is now
multiplied by the video input using a math node. This is probably more
sensible from a user perspective.

This also means the renderer is tolerant of texture sizes that are not equal
to the sequence size, however most nodes will downsample the texture to the
sequence size (and if not, it will be downsampled once it is cached). Textures
will still *always* be in reference space and the sequence's format. This seems
like the best compromise between backend and frontend congruity.
2020-04-27 04:11:24 +10:00
itsmattkc f61321d68b nodes/timeline: correctly detect when tracks are removed from the graph
Fixes several segfaults that could result from this occurring.
2020-04-27 01:01:12 +10:00
itsmattkc 53ae25a7cb nodes: optimize node graph changes by only updating from inputs that changed
A huge optimization that ensures only the parts of a node graph that have
changed get pushed to the renderer. For thread-safety, the node graph is
copied elsewhere so that users can make changes asynchronously and the graph
can update when its threads are ready. Up until now, if an input value changed,
every node's values would be re-copied, or worse, if a connection was changed,
the entire graph would be recopied. This has been negligible in testing since
we've been largely testing with small graphs, but for massive projects, it's
important that this be as optimized as possible.
2020-04-26 04:16:15 +10:00
itsmattkc 9d9825d8e1 trackviewitem: receive signal when mute is changed from another source 2020-04-19 16:26:48 +10:00
itsmattkc a796cb2c13 nodeparamview: separated the NodeParamView body into a separate widget for nesting
Will allow display of NodeInputArrays.
2020-04-18 23:28:11 +10:00
itsmattkc 832cc986b7 timeline/block: reimplemented enabling/disabling blocks 2020-04-17 02:16:04 +10:00
itsmattkc 9f89f57090 track: when length changes, force the new area to invalidate
The track limits cache invalidation signals to the length of the track. On some
platforms, if a block length was changed to the point that it changed the
track length, the track length would change AFTER the cache invalidation and
therefore never end up getting rendered.

This commit ensures that when a track's length changes, the new section is
invalidated regardless of ordering.
2020-04-07 02:34:59 +10:00
itsmattkc 1aa87cbda6 various: encapsulate all code in the olive namespace to avoid name collisions
Large-scale code cleanup. Also adds a license to the top of all files that were
missing it.
2020-04-06 15:29:53 +10:00
itsmattkc 2bda306866 timeline/various: implemented block copy/paste
Implemented the ability to copy/paste blocks/clips in the timeline. This did
require some large scale changes and reworking of the copy/paste system
introduced a few commits ago, but should be largely functional now.
2020-03-31 02:19:05 +11:00
itsmattkc 7bca61608a node: added qstringliterals to node IDs
Minor code optimization.
2020-03-28 18:02:34 +11:00
itsmattkc 38a30b584a timeline: implemented some base ripple delete functionality 2020-03-07 18:07:55 +11:00
itsmattkc f5fe87d959 track: reimplemented invalidate cache block
Optimizes working in the timeline by only invalidating cache when necessary.
2020-01-25 16:38:18 +11:00
itsmattkc 0ea98be443 ensure objects are in the correct thread when loading
Since we load in a separate thread, when the QObject based objects are
instantiated, they're created with affinity to that separate thread. Now we
specifically ensure they are moved to the main thread after their creation.
2020-01-14 00:10:21 +11:00
itsmattkc c8baf4aa3e implemented rubberband zoom in timeline 2020-01-07 20:24:07 +11:00
itsmattkc 7bf2422c44 moved timeline tracktypes into timelinecommon.h 2020-01-06 15:34:12 +11:00
itsmattkc 2b24fae26f implemented vertical "zooming" in the TimelineWidget and CurveView
This comes in the form of changing the vertical scale in the CurveView and
adjusting all track heights in the Timeline.
2019-12-31 00:23:28 +11:00
itsmattkc bbef9badc7 implemented moving keyframes around in the NodeParamView
Can now change the time in the parameter panel.
2019-12-27 22:13:00 +11:00
itsmattkc e32376a8b7 updated NodeInputs to use a standard value as well as keyframed values
Previously the non-keyframed value was stored as a static keyframe but this
introduced issues when an input was in a state of keyframes being enabled but
0 keyframes existing. Having a standard value makes much more sense.
2019-12-27 02:06:41 +11:00
itsmattkc c62b59965e updated nodes for new input structure
Since all NodeInputs will generally only need their data type and default
value set once, we place it all into the constructor for cleaner and easier
to manage code.
2019-12-26 16:29:56 +11:00
itsmattkc 3fb7b40b61 fixed bug that would sometimes cause the track lengths to return 0 2019-12-19 01:43:10 +11:00
itsmattkc 323718bc11 moved timeline undoable commands to using the new NodeAddCommand
Previous iteration used some "magic code" that added clips automatically to the
timeline. This was functional but ultimately outside of the undo commands'
control meaning nodes could be infinitely added and abandoned. This makes the
add process part of the undo command which means it's all undoable as the user
would expect.
2019-12-14 00:04:57 +11:00
itsmattkc 79c2953662 implemented track locking in the timeline widget 2019-12-11 16:34:38 +11:00
itsmattkc 7117616635 allow track muting 2019-12-11 13:54:40 +11:00
itsmattkc 58bcbca4c5 wrote mechanisms that allow the tracks to be resized from the trackview 2019-12-08 15:14:43 +11:00
itsmattkc 351d4a246e use NodeInputArray for tracks as well
These were introduced for the new Block system and make just as much sense for
the Track system. They've now been implemented for both.
2019-12-06 20:34:19 +11:00
itsmattkc a8f435bc5c started removing track_input from track 2019-12-06 04:34:03 +11:00
itsmattkc c32a1c8be2 removed last of the NodeOutput dependencies
Since all Nodes have an output that provides all output values now, we now
never need to add an output from a Node derivative. These changes remove the
last of them and disable the ability to add more outputs from a derivative.
2019-12-06 04:21:55 +11:00
itsmattkc d25dda5275 removed all dependence on NodeOutputs
If Nodes only have the one output, we don't need to do so much differentiation
between them. Previous iteration used outputs as like a distinct function
within a Node (e.g. length output would return one result, buffer output would
produce a different result - each run different code to produce their results).
Now in this iteration, it's more accurate to say a Node is just one function
(which seems more appropriate for a node system anyway).
2019-12-06 00:23:26 +11:00
itsmattkc bc0f01d9a3 make nodes more const friendly and prepare their functions for stateless work
Since the nodes won't be holding any rendering data themselves in this system,
we may as well enforce some level of non-write access by setting all the
functions to const. They were already const-friendly, they just weren't
labelled as such.
2019-12-04 20:10:42 +11:00
itsmattkc 9aa50175ac use existing IsTrack() function for checking type instead of dynamic_cast 2019-12-02 01:39:45 +11:00
itsmattkc 7503542286 use existing IsBlock() function for checking type rather than dynamic_cast 2019-12-02 01:37:54 +11:00
itsmattkc 79ee3bc3df implemented new block system
Fixes recurring design issue that the Blocks were a frequent exception to the
DAG concept. The Blocks connecting to each others inputs/outputs while not
necessarily being "dependent" on each other to produce an image continually
causes issues while trying to create a rendering code path. This redesign
should provide a more "directed" approach to the directed acyclic graph.
2019-12-02 00:37:03 +11:00
itsmattkc 8b1dab8296 moved track to take an array of blocks rather than a non-directed graph 2019-12-01 00:03:59 +11:00
itsmattkc a478b11fd0 removed "previous_input" param from block
It was becoming inevitable to get rid of this, it was continuously an exception
that had to be made to the DAG concept seeing as blocks are never really
"dependents" on each other, i.e. the images they produce have nothing to do
with other blocks. The only exception is a transition which will also be
easier to accomplish with this slightly different design.
2019-11-30 23:24:01 +11:00
itsmattkc 073176a45d added function for returning a block at a time
Assists with certain timeline-related functions.
2019-11-19 22:25:04 +09:00
itsmattkc 788502cd11 removed another unnecessary node function 2019-11-02 18:12:54 +11:00
itsmattkc 16ac2fc0e1 sweeping node graph changes for new rendering pipeline
The new rendering pipeline strives to simplify the nodes themselves as much
as possible and move much of the logic to an external rendering engine. This
change removes all of the responsibilities that no longer belong to the
nodes themselves and will soon be folded into the renderer.
2019-11-02 01:39:37 +11:00
itsmattkc 77bcb70dac started porting renderer to new portable form 2019-10-31 19:14:58 +11:00
itsmattkc d96395ea27 don't use track as the time chooser
This design, while not completely illogical, seems to betray the DAG design
and borders on impossible to actually recompile. The plan is to build this
functionality into the renderer instead.
2019-10-29 01:41:08 +11:00
itsmattkc 4d96ac9e39 don't police data type connections between nodes
Nodes were previously written to be "strongly typed" in that a parameter's
"type" enforced whether it could be connected to another. All code related
to that has now been removed since not only is it hard to maintain and
likely unnecessary, it's possible the nodes will work differently later on
anyway.
2019-10-25 00:44:14 +11:00
itsmattkc 7dec79ceaa various changes to rendering flow and structure 2019-10-23 00:42:52 +11:00
itsmattkc 5f86b9b9c7 nodes are given a time range 2019-10-22 14:58:06 +11:00
itsmattkc 1ded30c1d9 base support for multiple timeline sections 2019-10-11 18:26:56 +11:00
itsmattkc 3411e45774 preliminary support for multiple timeline sections 2019-10-05 07:33:27 +10:00
itsmattkc cf3e8d80d1 implemented 'ripple to' timeline actions 2019-09-24 22:45:30 +10:00
itsmattkc 9fa22938b9 work towards making timeline actions all undoable 2019-09-23 23:00:15 +10:00
itsmattkc d0d4756129 some ripple behavior fixes 2019-09-21 01:01:15 +10:00
itsmattkc 814ee14c0b minor improvements 2019-09-20 04:45:17 +10:00
itsmattkc 03d81c7003 flipped timeline node/panel affinity 2019-09-20 04:40:38 +10:00