summaryrefslogtreecommitdiff
path: root/tools/seq_compiler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tools/seq_compiler.cc')
-rw-r--r--tools/seq_compiler.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/tools/seq_compiler.cc b/tools/seq_compiler.cc
index 4a671f4..fad2d88 100644
--- a/tools/seq_compiler.cc
+++ b/tools/seq_compiler.cc
@@ -995,6 +995,38 @@ int main(int argc, char* argv[]) {
<< eff.class_name << ">(ctx, p), " << eff.start << "f, "
<< eff.end << "f, " << eff.priority << ");\n";
out_file << " }\n";
+ } else if (!eff.params.empty() && eff.class_name == "CNNEffect") {
+ // Generate parameter struct initialization for CNNEffect
+ // If layers>1, expand into multiple chained effect instances
+ int num_layers = 1;
+ float blend_amount = 1.0f;
+
+ for (const auto& [key, value] : eff.params) {
+ if (key == "layers") {
+ num_layers = std::stoi(value);
+ } else if (key == "blend") {
+ blend_amount = std::stof(value);
+ }
+ }
+
+ // Generate one effect per layer
+ for (int layer = 0; layer < num_layers; ++layer) {
+ out_file << " {\n";
+ out_file << " CNNEffectParams p;\n";
+ out_file << " p.layer_index = " << layer << ";\n";
+ out_file << " p.total_layers = " << num_layers << ";\n";
+ // Only apply blend_amount on the last layer
+ if (layer == num_layers - 1) {
+ out_file << " p.blend_amount = " << blend_amount << "f;\n";
+ } else {
+ out_file << " p.blend_amount = 1.0f;\n";
+ }
+ out_file << " seq->add_effect(std::make_shared<"
+ << eff.class_name << ">(ctx, p), " << eff.start << "f, "
+ << eff.end << "f, " << (std::stoi(eff.priority) + layer)
+ << ");\n";
+ out_file << " }\n";
+ }
} else {
// No parameters or unsupported effect - use default constructor
out_file << " seq->add_effect(std::make_shared<" << eff.class_name