summaryrefslogtreecommitdiff
path: root/src/gpu/effect.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/effect.cc')
-rw-r--r--src/gpu/effect.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/gpu/effect.cc b/src/gpu/effect.cc
index 0d4dde7..96e7489 100644
--- a/src/gpu/effect.cc
+++ b/src/gpu/effect.cc
@@ -7,6 +7,7 @@
#include <algorithm>
#include <cstdio>
#include <vector>
+#include <typeinfo>
// --- PostProcessEffect ---
void PostProcessEffect::render(WGPURenderPassEncoder pass, float, float, float,
@@ -51,14 +52,27 @@ void Sequence::sort_items() {
}
void Sequence::update_active_list(float seq_time) {
+ // Check if sequence has ended (if explicit end time is set)
+ const bool sequence_ended = (end_time_ >= 0.0f && seq_time >= end_time_);
+
for (SequenceItem& item : items_) {
bool should_be_active =
+ !sequence_ended &&
(seq_time >= item.start_time && seq_time < item.end_time);
if (should_be_active && !item.active) {
+#if !defined(STRIP_ALL)
+ const char* effect_name = typeid(*item.effect).name();
+ printf(" [EFFECT START] %s (priority=%d, time=%.2f-%.2f)\n",
+ effect_name, item.priority, item.start_time, item.end_time);
+#endif
item.effect->start();
item.active = true;
} else if (!should_be_active && item.active) {
+#if !defined(STRIP_ALL)
+ const char* effect_name = typeid(*item.effect).name();
+ printf(" [EFFECT END] %s (priority=%d)\n", effect_name, item.priority);
+#endif
item.effect->end();
item.active = false;
}
@@ -216,6 +230,13 @@ void MainSequence::render_frame(float global_time, float beat, float peak,
std::vector<SequenceItem*> post_effects;
for (ActiveSequence& entry : sequences_) {
if (global_time >= entry.start_time) {
+#if !defined(STRIP_ALL)
+ if (!entry.activated) {
+ printf("[SEQUENCE START] priority=%d, start_time=%.2f\n",
+ entry.priority, entry.start_time);
+ entry.activated = true;
+ }
+#endif
float seq_time = global_time - entry.start_time;
entry.seq->update_active_list(seq_time);
entry.seq->collect_active_effects(scene_effects, post_effects);