Files
oak-editor/app/render
Mike-Solar ff0eee3a88 perf(plugin): cache PluginRenderer per-thread and skip redundant clip prefs
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.
2026-05-16 17:34:29 +08:00
..
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-05 16:22:26 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-05 16:22:26 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-04-12 01:08:22 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00