Files
fn_registry/cpp/functions/gfx/dag_compile.md
T
egutierrez 5d83c11169 feat(shaders_lab): DAG pipeline mode with node catalog
- cpp/functions/gfx/dag_types: DagStep, DagNodeDef, DagControl (header-only)
- cpp/functions/gfx/dag_catalog: 10 hardcoded nodes (4 gen, 3 op, 3 blend) ported from shader-dag-blends.jsx
- cpp/functions/gfx/dag_compile: pipeline → GLSL 330 core with fan-in via source_id
- cpp/functions/gfx/dag_uniforms: upload u_params[16] via glUniform4fv
- cpp/functions/gfx/dag_panel: ImGui pipeline editor (add/remove/reorder/controls)
- main.cpp: Code/DAG mode toggle, per-mode compile path and uniforms
- gl_loader: +glUniform4fv
- rebuild Windows .exe

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 21:15:21 +02:00

52 lines
1.9 KiB
Markdown

---
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<DagStep>& 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_<i> 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<float,4> 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_<i> 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).