summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gpu/effect.h7
-rw-r--r--src/gpu/sequence.cc5
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) {