diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gpu/effect.h | 7 | ||||
| -rw-r--r-- | src/gpu/sequence.cc | 5 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/gpu/effect.h b/src/gpu/effect.h index 8055783..566faba 100644 --- a/src/gpu/effect.h +++ b/src/gpu/effect.h @@ -34,6 +34,13 @@ class Effect { const UniformsSequenceParams& params, NodeRegistry& nodes) = 0; + // Called after ALL effects in the sequence have rendered for this frame. + // Use for end-of-frame bookkeeping (e.g. copying temporal feedback buffers). + virtual void post_render(WGPUCommandEncoder encoder, NodeRegistry& nodes) { + (void)encoder; + (void)nodes; + } + virtual void resize(int width, int height) { width_ = width; height_ = height; diff --git a/src/gpu/sequence.cc b/src/gpu/sequence.cc index 91ca187..78647b2 100644 --- a/src/gpu/sequence.cc +++ b/src/gpu/sequence.cc @@ -269,6 +269,11 @@ void Sequence::render_effects(WGPUCommandEncoder encoder) { for (const auto& dag_node : effect_dag_) { dag_node.effect->dispatch_render(encoder, params_, nodes_); } + // End-of-frame hook: allows effects to persist data for the next frame + // (e.g. temporal feedback copies) after all rendering is done. + for (const auto& dag_node : effect_dag_) { + dag_node.effect->post_render(encoder, nodes_); + } } void Sequence::resize(int width, int height) { |
