---
name: dag_panel
kind: component
lang: cpp
domain: gfx
version: "1.0.0"
purity: impure
signature: "bool dag_panel(std::vector<DagStep>& pipeline)"
description: "Panel ImGui para editar un pipeline DAG de shaders. Toolbar con Add Node (popup por kind) y Clear. Lista scrollable de pasos con CollapsingHeader coloreado por kind, selector de source para blends, widgets de control (Slider/XY/Color) y botones Move Up/Down/Delete. Devuelve true si la topologia cambio."
tags: [dag, shader, imgui, pipeline, editor, gfx, component]
uses_functions:
  - dag_catalog_cpp_gfx
uses_types:
  - dag_types_cpp_gfx
returns: []
returns_optional: false
error_type: "error_go_core"
imports: [dag_panel, dag_catalog, dag_types, imgui, algorithm, string, vector]
tested: false
tests: []
test_file_path: ""
file_path: "cpp/functions/gfx/dag_panel.cpp"
framework: imgui
params:
  - name: pipeline
    desc: "Vector de DagStep modificado in-place. Add/Delete/Move cambian la topologia. Los sliders solo cambian params."
output: "true si la topologia cambio (add/delete/move/source_id change). false si solo cambiaron valores de params (sliders). El caller usa este flag para decidir si recompilar el shader."
---

## Estructura del panel

```
[+ Add Node]  [N/16 nodes]  [Clear]
─────────────────────────────────────
▼ #0 plasma [Gen]
    velocidad  [slider]
    escala     [slider]
    [Move Up(disabled)] [Move Down] [Delete]

▶ #1 blend_mix [Blend]
    ...
```

## Colores por kind

- Gen: azul (0.25, 0.55, 0.90)
- Op: violeta (0.65, 0.40, 0.90)
- Blend: ambar (0.90, 0.65, 0.15)

## Notas

Los IDs de paso se generan con contador estatico `s_next_id`. Unicos dentro de la sesion. Al anadir un Blend, asigna automaticamente el source_id al paso de hace dos (o el primero si el pipeline tiene menos de 2 pasos). Las mutaciones (delete/move) se aplican al final del loop para no invalidar iteradores.
