Commit Graph
1878 Commits
Author SHA1 Message Date
itsmattkc 91c7d8aa4d implemented texture cache for performance
Creating and destroying textures is a slow process, particularly when we can
re-use them throughout most of the render chain. We now keep them stored so
they can be re-used which improves performance substantially.
2019-12-10 14:53:47 +11:00
itsmattkc 6ac33d8dc4 created simple texture cache object ready for implementation into the workers 2019-12-10 13:24:12 +11:00
itsmattkc 1f5ae6f9bd use mutexes to prevent threads from interfering with each other while sharing shaders 2019-12-10 01:45:39 +11:00
itsmattkc da3ff98774 alphaover: return black if no textures are enabled
Not doing this appeared to corrupt the composited buffer somehow and return a
black image if there were two empty texture connections daisychained together
on two AlphaOver instances.
2019-12-10 01:33:48 +11:00
itsmattkc 92776b877d implement texture null check flag on shaders
Sets a flag if the texture being sent to the shader is null
2019-12-10 01:20:57 +11:00
itsmattkc c35a6d009d removed unnecessary debug messages 2019-12-10 00:57:28 +11:00
itsmattkc 3bfe333878 replaced QString uses with QStringLiteral
Minor code optimization according to Qt documentation.
2019-12-10 00:42:31 +11:00
itsmattkc f46b1245c4 reduced the output of some nodes
Some nodes don't need to provide all their inputs merged as outputs.
2019-12-10 00:37:06 +11:00
itsmattkc 2fb4047e6f moved all shader code out of C++ source and into external shader files
General code cleanup and easier maintenance.
2019-12-10 00:10:00 +11:00
itsmattkc 3dc563b697 removed double buffered textures
These functions never ended up getting used, and have the potential to become
confusing in implementation.
2019-12-09 23:59:00 +11:00
itsmattkc 26b3993b9d made vast improvements to rendering engine and node structure
This was many changes that were largely fundamentally related. They included:
- More const modifiers to enforce read only node graphs
- Support for fragment and vertex shaders from the nodes
- Support for node code loaded externally (embedded into the binary)
- Fixed issue preventing two textures from being used in a shader
- Removed several unused functions and cleaned up code
- Fixed video media node misreading its matrix input
2019-12-09 23:50:52 +11:00
itsmattkc daafcbfc95 began external shader files that can be compiled into the program
Helps write shaders rather than embedding them into the C++ code.
2019-12-09 23:49:44 +11:00
itsmattkc 5819b451fd enforce read-only/stateless structure of new rendering system
Most if not all Node references are const now, so their state is entirely
held in the renderers rather than the Nodes themselves.
2019-12-09 23:48:25 +11:00
itsmattkc 5affc37699 added custom category and data types to transition base class 2019-12-09 23:46:50 +11:00
itsmattkc c1b96927a2 this files were actually renamed in an earlier commit but i forgot to add them 2019-12-09 23:46:15 +11:00
itsmattkc 3f76f4cb00 correctly identify openimageio data as alpha associated
Also added note for potential concern regarding alpha association.
2019-12-09 23:45:16 +11:00
itsmattkc cc8aeea672 started pair of transition derivatives
These will serve as stock transitions and as a reference implementation for
hardware accelerated transitions.
2019-12-09 23:44:27 +11:00
itsmattkc 0448451bc2 fixed alpha over algorithm and node recursion issue 2019-12-09 23:43:47 +11:00
itsmattkc 4bb874a154 fix sigfpe on timecode function if the timebase isn't valid 2019-12-09 23:43:03 +11:00
itsmattkc 110c479954 Merge branch 'master' into transitions 2019-12-08 21:48:19 +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 2207aa3fd5 moved slider's focusable line edit to a separate distinct reusable widget
Some of the widgets designed for Slider have uses elsewhere so now they have
been moved to allow more generic usage.
2019-12-08 15:13:55 +11:00
itsmattkc 50f4e8767d wrangled QWidgets to allow for resizable tracks with track headers 2019-12-08 05:13:43 +11:00
itsmattkc dd8d1e84b0 small visual improvements to the timeline's timecode label 2019-12-08 00:24:50 +11:00
itsmattkc 00c06e3e6b update timeslider's label automatically when the timebase changes 2019-12-08 00:14:45 +11:00
itsmattkc d6fe49aad3 started trackview widgets for timeline view 2019-12-08 00:12:46 +11:00
itsmattkc 0080e01af6 use drop-frame timecode by default 2019-12-08 00:12:19 +11:00
itsmattkc f2013a6f3d created time slider UI widget
Based on the integer slider, this can be used to interactively control time.
2019-12-08 00:11:47 +11:00
itsmattkc 2fe03debec reimplement string timecode to frame number conversion 2019-12-08 00:10:43 +11:00
itsmattkc 94be06e33e use O2 optimization for now due to performance and stability concerns 2019-12-08 00:10:02 +11:00
itsmattkc 0c6ec926b6 started base transition type
Like the base "Block" type, the "Transition" type will not be a node used on its
own, it will have to be derived. This type defines some basic behavior for a
transition (e.g. how much it overlaps its "from" and "to" blocks).
2019-12-07 02:49:30 +11:00
itsmattkc eac89cd685 fixed qobject warning emitted when TrackOutputs are destroyed 2019-12-07 02:02:44 +11:00
itsmattkc b2910757a0 use compiler optimizations when building 2019-12-07 02:02:32 +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 9140479940 Merge branch 'master' into track-arrays 2019-12-06 19:42:26 +11:00
itsmattkc f6064b40df hold worker busy state in renderbackend rather than in renderworker
Workers run in different threads and the backends can poll whether the worker
is currently busy or not. However the previous iteration has the worker (and an
atomic int) provide the busy state which could easily desync with the main
thread (since all workers run in different threads). By holding the busy states
in the main thread, the main thread will always be able to poll the busy state
accurately.
2019-12-06 19:38:57 +11:00
Peter Eszlari 052ae7325a use APPVERSION define
...and display version in about dialog
2019-12-06 06:45:08 +01:00
itsmattkc 5227e10f39 render one frame per thread for increased parallelism
If the nodes are now stateless, there's nothing stopping the renderer from
rendering multiple frames at once. Earlier since the nodes held some of their
input/output data (and that data could change per frame), it was not possible
to render multiple frames at once without conflicts. Now that the node state is
held in render threads, they can do whatever they want at any time.
2019-12-06 15:37:31 +11:00
itsmattkc 33f73e0e90 reimplemented color management and alpha association in new renderer system
Color management is now as functional as it was before.
2019-12-06 13:33:53 +11:00
itsmattkc 927e2252f3 fixed bug where several frames being cached at the same time would lead to most
of them returning blank
2019-12-06 13:32:02 +11:00
itsmattkc b8b9ae878b generalized object render caches so they can be used for any object types 2019-12-06 13:30:57 +11:00
itsmattkc ffdd56c582 created StreamID object
Intended as a more robust solution than mapping to the Stream* pointer, this
will map directly to the file and its index regardless of the Stream* pointer.
2019-12-06 13:29:09 +11:00
itsmattkc f719ac027a improved Footage class semantics
Set const functions to const and use DISABLE_COPY_MOVE instead of manually
deleting copy and move constructors.
2019-12-06 13:28:13 +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 694f424627 finished conforming renderers to new node structure
Stateless node system is done! Functionality is about equal to the functionality
in master meaning this is ready for merging.
2019-12-06 03:43:24 +11:00
itsmattkc d6247078b4 improved various functions to support nodeinputarrays 2019-12-06 03:42:53 +11:00
itsmattkc 50f7fac156 fixed signal/slot connections which had been renamed and weren't resolving 2019-12-06 00:43:51 +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 f424d8b44e rewrote renderers where necessary for new node structure
Largely conforming renderers to new NodeValue system. Code seems a lot cleaner
this way which is a nice advantage. Likely non-functional as this won't
compile just yet and still needs probably another day or two of testing to get
it back to where it was before.
2019-12-05 03:53:52 +11:00