Commit Graph
72 Commits
Author SHA1 Message Date
itsmattkc 373eeaeacd renderer: when invalidating visible, kick the workers into emit mode 2020-05-07 01:29:05 +10:00
itsmattkc cfc5ce24a3 Merge branch 'master' into gizmos 2020-05-02 17:06:49 +10:00
itsmattkc 4906bb7d53 scopes: don't use shared context
OpenGL shared contexts (through Qt at least) seem to be buggy. Scopes have been
shifted to a non-shared approach as a result.
2020-04-28 17:08:52 +10:00
itsmattkc 1cca9de7c5 gizmos: implemented pathway for node to draw on the viewer 2020-04-27 04:34:36 +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 acef99eb17 renamed viewerglwidget to viewerdisplaywidget
Initially this class was named to provide the possibility of supporting other
APIs, however this abstraction has been done with a base class instead.
2020-04-25 14:46:30 +10:00
itsmattkc 8c44f8d03d viewer/various: split off color management into separate base class
Also moves scopes to said base class.
2020-04-24 03:45:07 +10:00
itsmattkc 6c1e90665f colormanagement: moved from passing DVL strings everywhere to a consolidated ColorTransform struct 2020-04-23 01:17:58 +10:00
itsmattkc 0ced48d4df histogram: implemented color management 2020-04-21 01:59:06 +10:00
itsmattkc 6f4bf70d3e scope: implemented waveform scope 2020-04-20 22:58:29 +10:00
itsmattkc 2849ae210c timeline/viewer: reimplemented "play in to out" and "loop" 2020-04-19 17:22:32 +10:00
itsmattkc 77c0db55a5 viewer: implemented display of title/action safe margins 2020-04-17 18:59:17 +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 1319d7141f viewer: re-implemented auto viewer full screen from menubar/keyboard shortcut 2020-04-01 19:22:53 +11:00
itsmattkc ed48d24cbc viewerwindow: implemented displaying a viewer image fullscreen on another monitor
Implements an extra widget to display images on a separate monitor. Both
viewers have separate display color controls since different monitors may
conform to different standards/transforms.
2020-04-01 19:21:25 +11:00
itsmattkc 6ea6dd810e pixelsampler: added pixel sampler panel
When visible, this panel will show the current reference and display transformed
color under the cursor of any viewer.
2020-04-01 16:57:10 +11:00
itsmattkc 9f3b9fdc70 footageviewer: allows users to drag video or audio only
Updates drag mime data to include a variable determining which streams are
enabled and which ones aren't (a binary qint64 where the 0s are disabled
and the 1s are enabled) rather than relying solely on the stream->enabled
values which can't be modified as part of the drag process.
2020-03-23 18:55:59 +11:00
itsmattkc fed17e35fa audiowaveformview: optimizes waveform to only redraw when necessary
Draws to a pixmap only when the waveform changes so it doesn't have to be
regenerated on every draw. Also renames WaveformView to AudioWaveformView
2020-03-18 14:44:05 +11:00
itsmattkc a56484d3e6 timelinescaledobject: implemented minimum scale
Used by Viewer to keep TimeRuler and WaveformView within restrictions.
2020-03-14 22:34:23 +11:00
itsmattkc 73d693f2d5 waveformview: implemented basic waveformview display 2020-03-14 01:22:03 +11:00
itsmattkc c1c8067ee7 viewer: implemented basic zoom
No scrolling functionality yet, but the zoom is functional and efficient.
2020-03-13 16:41:09 +11:00
itsmattkc 0418c8ab85 viewer: began waveformview widget 2020-03-13 16:02:18 +11:00
itsmattkc e2fe9ad548 viewer: folded waveform view into base viewer widget class 2020-03-13 15:48:09 +11:00
itsmattkc 9e4c79699e node: split off traversing functions from renderer for usage elsewhere
Fixes issue where Viewer node wouldn't pick up correct length if a tracks
weren't in use.
2020-03-13 15:31:15 +11:00
itsmattkc 8daac83b19 footageviewer: allow dragging footage from footage viewer 2020-03-03 20:35:54 +11:00
itsmattkc 3cffffdcee viewer: use vsync for updates rather than a timer
Improves viewer appearance and performance. Rather than using a timer roughly
set to the sequence's frame rate to update the viewer, the viewer synchronizes
itself to the display's refresh rate resulting in much smoother playback.
2020-02-21 00:42:46 +11:00
itsmattkc ceb70a1870 viewer: use internal texture to allow viewer to control texture as part of its
context

More intuitive code flow and allows the user to undock the viewer (which
forcibly destroys and recreates the context) and the viewer will handle
creation of the new texture in said new context.
2020-02-16 18:24:49 +11:00
itsmattkc d66425c324 prepared gl improvements for merge 2020-02-14 02:35:10 +11:00
itsmattkc 6a47b05ab8 work on oslworker 2020-02-14 02:13:38 +11:00
itsmattkc 9b7cbb3fbd viewer: automatically update maximum scroll from media length 2020-02-01 23:09:25 +11:00
itsmattkc 17c1493aa7 all time-based panels are now derived from a common base class
Cuts down on a lot of duplicate code between
TimelineWidget/ViewerWidget/CurveWidget/NodeParamView
and TimelinePanel/ViewerPanel/CurvePanel/ParamPanel since they all use similar
time functions.
2020-02-01 19:39:43 +11:00
itsmattkc 0469fac4a9 node: send invalidatevisible signal through graph
When dragging a value in the UI, we use a "single frame update" because we want
to prioritize the currently visible frame to give visual feedback as soon as
possible. Previously, we generated a single frame InvalidateCache() signal
from the widgets themselves, but this had the major downside of not necessarily
emitting the time that the viewer was actually showing (due to either node time
transformations or times differing between the effects panels and the viewer
panels). Now, we send a different signal that viewers can handle themselves to
update the time that they're currently showing. This means the fast updating
will work no matter how many viewers are connected at whatever time each viewer
is set to.
2020-01-26 14:16:22 +11:00
itsmattkc f068c425d2 viewer: provide UI to set preview resolution
Previews don't need to be rendered full resolution, particularly since the
preview is hardly ever 1:1 size of the sequence. The functionality to render
at lower resolutions already existed, but there was no UI for it. This commit
implements UI to set the resolution divider on the viewer.
2020-01-26 13:27:06 +11:00
itsmattkc fdbaa75dff renderer: allow parameters to be changed mid-session 2020-01-22 14:05:37 +11:00
itsmattkc c6710b1359 correctly update the panel subtitles based on the media connected 2020-01-16 14:57:16 +11:00
itsmattkc 3a8a509f1a clear frame caches and renderers if the viewer node is ever changed
Clears the state if a viewer node is disconnected.
2020-01-03 21:17:20 +11:00
itsmattkc db146b376a implemented core UI caching feedback functionality
Not a perfect implementation yet, but this shows UI feedback on what frames are
cached and which ones aren't.
2020-01-03 05:38:20 +11:00
itsmattkc 0db13a96ab implemented a footage viewer
Essentially a minor derivation of a viewer type that can automatically view
footage from the project (i.e. not in a sequence).
2019-12-30 20:17:48 +11:00
itsmattkc 38d35d1b88 updated viewer to set render backend format/mode
Yes, it's still hardcoded in the viewer for the time being, but moving it out
of the backend makes the backend format flexible for exporting.
2019-12-20 04:38:19 +11:00
itsmattkc 0ef00245ad added functions to override the resolution and matrix transform of the viewer widget
While in most circumstances these shouldn't be used, they're useful for
showing things like export previews
2019-12-19 15:55:08 +11:00
itsmattkc baab21a3ab added option to disable color management menu on viewer
While the Viewer is _always_ color managed, In some contexts, the color
management may be controlled from an external UI making the menu unnecessary.
2019-12-16 16:43:27 +11:00
itsmattkc b96fd7ae45 allowed access to the viewer node from the viewer widgets 2019-12-16 03:02:28 +11:00
itsmattkc 83cf67fe7b implemented majority of export dialog widget layout 2019-12-15 19:56:12 +11:00
itsmattkc 7385e3dc56 fixes jitters by using signals/slots to pass image buffers around
Updating values rapidly would cause strange jitters as a
byproduct of the viewer trying to update from the renderer while
it was still working. Rather than the viewer trying to access the
the renderer, we now send textures in the initial update signal
to keep everything synchronized.
2019-11-18 02:14:54 +09:00
itsmattkc 823e820bfa update length value from signals/slots
I was looking for a way to update the length value automatically with signals
and slots (rather than just checking every time the viewer time changes). This
should do the trick.
2019-11-17 13:46:14 +09:00
itsmattkc 0a68b2a1c3 make viewer work with new audio renderer setup
Previously, the viewer could be set up with a custom PCM file to test playback
and scrubbing. Now these functions are connected to the audio renderer to
work within the render system.
2019-11-15 13:56:14 +09:00
itsmattkc 7a6dd02e5b furthered development of audio renderers
Mostly reimplementing functions from other workers to produce audio samples
2019-11-11 11:35:01 +09:00
itsmattkc 429514b1fd separation of previous renderer into base and derivation complete
The previous iteration was fairly OpenGL-heavy. It's now been separated into
a base class that is OpenGL independent and a derived class that is
OpenGL-based. Over time this should allow for portability away from OpenGL
if necessary.
2019-11-01 12:58:38 +11:00
itsmattkc b56fbaae51 began port of previous renderer iteration to new iteration
This will essentially be a full rewrite, but very incrementally to save time
and energy.
2019-10-31 21:59:20 +11:00
itsmattkc e03e0007e4 adjusted viewer widget 2019-10-31 20:11:08 +11:00