#pragma once #include #include #include "gfx/dag_types.h" namespace fn::gfx { // Compila un pipeline DAG a GLSL 330 core completo (listo para gl_shader::compile_fragment). // El preamble de gl_shader ya declara #version, fragColor, u_time, u_resolution, u_mouse. // Este compilador emite uniform vec4 u_params[64], las funciones node_ y void main(). // Si el pipeline esta vacio, emite un fragment que pinta gris oscuro. std::string compile_dag_to_glsl(const std::vector& pipeline); // Devuelve el indice base (vec4) en u_params[] que ocupa cada nodo del pipeline. // Cada nodo ocupa ceil(param_count / 4) vec4s consecutivos. Nodos con 0 params ocupan 0. // El compilador y dag_uniforms_apply usan el mismo layout. std::vector dag_param_layout(const std::vector& pipeline); // Variante de compile_dag_to_glsl que sustituye `uniform vec4 u_params[64]` // por un `const vec4 u_params[N] = vec4[N](...)` con los valores actuales del // pipeline empaquetados, y `uniform int u_preview_target` por // `const int u_preview_target = -1`. El resultado es un fragment shader // autocontenido: no depende de ningun uniform externo y se puede pegar tal cual // en el editor Code para reproducir el DAG actual. std::string compile_dag_to_glsl_baked(const std::vector& pipeline); } // namespace fn::gfx