--- name: dag_compile kind: function lang: cpp domain: gfx version: "1.0.0" purity: pure signature: "std::string compile_dag_to_glsl(const std::vector& pipeline)" description: "Compila un pipeline DAG a GLSL 330 core listo para pasarle a gl_shader::compile_fragment. Emite uniform vec4 u_params[16], una funcion node_ por paso y void main() que encadena los outputs. Blends usan source_id para fan-in estable ante reorders." tags: [dag, shader, glsl, compiler, gfx, pipeline] uses_functions: - dag_catalog_cpp_gfx uses_types: - dag_types_cpp_gfx returns: [] returns_optional: false error_type: "" imports: [dag_compile, dag_catalog, dag_types, string, vector, sstream, algorithm] tested: false tests: [] test_file_path: "" file_path: "cpp/functions/gfx/dag_compile.cpp" params: - name: pipeline desc: "Vector de DagStep. Cada paso tiene un nombre de nodo del catalogo, params array y source_id para blends." output: "String GLSL que se pega tras el preamble de gl_shader (que ya declara #version 330 core, fragColor, u_time, u_resolution, u_mouse). Incluye uniform vec4 u_params[16], funciones node_ y void main()." --- ## Estructura del GLSL emitido ```glsl uniform vec4 u_params[16]; vec4 node_0(vec4 c, vec2 uv) { ... } vec4 node_1(vec4 a, vec4 b, vec2 uv) { ... } // blend void main() { vec2 uv = gl_FragCoord.xy / u_resolution; vec4 c = vec4(0.04, 0.04, 0.06, 1.0); vec4 out_0 = node_0(vec4(0.0, 0.0, 0.0, 1.0), uv); vec4 out_1 = node_1(out_0, out_0, uv); fragColor = out_1; } ``` ## Notas - El preamble de gl_shader::compile_fragment ya declara los 3 uniforms basicos. compile_dag_to_glsl NO los redeclara. - Si el pipeline esta vacio, emite void main() que pinta gris oscuro (0.04, 0.04, 0.06). - MAX_NODES = 16. Pipelines mas largos se truncan silenciosamente. - source_id fallback: si el id no se encuentra o apunta a un indice >= idx, usa max(0, idx-2).