--- name: dag_panel kind: component lang: cpp domain: gfx version: "1.0.0" purity: impure signature: "bool dag_panel(std::vector& 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.