ff0eee3a88c20bab666961fa4ce812101e05223a
Fix three performance traps in the OFX plugin preview pipeline that
caused slideshow-like performance when any plugin was active.
1. Eliminate per-frame PluginRenderer creation (GL FBO alloc/free)
RenderProcessor is stack-allocated per ticket, so its
plugin_renderer_ member was constructed and destroyed every frame.
PluginRenderer inherits OpenGLRenderer, whose PostInit() calls
glGenFramebuffers() and whose destructor calls glDeleteFramebuffers().
On Apple Silicon's TBDR this is pathologically expensive.
Fix: use a thread_local cached PluginRenderer so each render thread
creates it only once and reuses it forever.
2. Call getClipPreferences() conditionally
The code unconditionally called instance->getClipPreferences() on
every single frame. This dispatches kOfxImageEffectActionGetClipPreferences
into the plugin even when no inputs or parameters have changed.
Fix: check areClipPrefsDirty() first. The OpenFX Host Support library
already tracks this flag and sets it to true when slave params or clip
connections change.
3. Call ApplyParamOverrides() before renderAction
ApplyParamOverrides() was defined but never invoked, so animated
plugin parameters were never pushed into the OFX instance before
rendering.
Fix: call it after beginRenderAction() and before renderAction(),
injecting the current NodeValueRow values at the correct OfxTime.
Oak Video Editor
Oak Video Editor is a free non-linear video editor for Windows, macOS, and Linux.
Unfortunately, the original author has not submitted code updates for over 7 months, and no public contact information (email or otherwise) is available to reach them directly.
This project is a community-maintained fork of Olive Video Editor.

NOTE: Oak Video Editor is alpha software and is considered highly unstable. While we highly appreciate users testing and providing usage information, please use at your own risk.
Binaries
The original author compiled following binaries:
OpenFX Support TODO
- Implement plugin discovery/loading from a given path and populate the cache (currently creates host/cache only).
app/pluginSupport/OliveHost.cpp - Wire output clip image storage: allocate a backing buffer, set
kOfxImagePropData, and update bounds/rowBytes before render.app/pluginSupport/OliveClip.cpp - Provide real input clip image fetches (currently returns an empty
Imagefor inputs).app/pluginSupport/OliveClip.cpp - Ensure render path sets per-frame output data and handles ROD/bounds correctly.
app/render/plugin/pluginrenderer.cpp - Add missing param instance types (String, Double3D/Integer3D, Group/Page, Custom/Bytes) and mapping to node inputs.
app/pluginSupport/OlivePluginInstance.cpp,app/node/plugins/Plugin.cpp - Implement
editBegin/editEnd, progress, and timeline hooks instead of stubs.app/pluginSupport/OlivePluginInstance.cpp,app/pluginSupport/OlivePluginInstance.h - Integrate persistent message handling with the app UI (currently TODO placeholders).
app/pluginSupport/OlivePluginInstance.cpp - Decide and enforce project extent/fielding behavior instead of the current placeholder comment.
app/pluginSupport/OlivePluginInstance.cpp - Add OpenGL texture render suite support or explicitly disable it (currently
loadTexturereturns null).app/pluginSupport/OliveClip.h
Languages
C++
87.8%
C
8.2%
CMake
3.3%
GLSL
0.5%