--- name: uniform_panel kind: component lang: cpp domain: gfx version: "1.0.0" purity: impure signature: "void uniforms_panel(UniformStore&, const std::vector&)" description: "Panel ImGui auto-generado a partir de UniformDescriptor. Sincroniza un UniformStore con los descriptores, renderiza widgets (slider/color/toggle/xy) y aplica los valores al programa GL activo vía glUniform*." tags: [opengl, shader, uniforms, imgui, controls, gfx, component] uses_functions: - uniform_parser_cpp_gfx - gl_loader_cpp_gfx uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [imgui, gl_loader, uniform_parser, array, unordered_map] tested: false tests: [] test_file_path: "" file_path: "cpp/functions/gfx/uniform_panel.cpp" framework: imgui params: - name: store desc: "Mapa nombre→array con los valores actuales de cada uniform. Se modifica in-place al interactuar con los widgets." - name: descs desc: "Descriptores parseados por parse_uniforms(). Determinan qué widgets se renderizan y con qué rangos." - name: program desc: "(uniforms_apply) ID del programa GL sobre el que aplicar los valores. Debe estar activo con glUseProgram antes de llamar." output: "Dibuja los widgets ImGui en el panel actual. uniforms_apply llama glUniform* actualizando los uniforms del programa para el frame actual." --- # uniform_panel Tres funciones que forman el ciclo completo de controles de uniforms: ``` parse_uniforms(src) → descs uniforms_sync(store, descs) // al compilar shader uniforms_panel(store, descs) // cada frame, dentro de ImGui::Begin/End uniforms_apply(store, descs, program) // cada frame, dentro de canvas_render callback ``` ## Widgets por tipo | GLSLType | WidgetKind | ImGui call | |----------|------------|-------------------------------------| | Float | Slider | SliderFloat (+ flag Logarithmic) | | Int | Slider | SliderInt | | Bool | Toggle | Checkbox | | Vec2 | XY | SliderFloat2 | | Vec3 | Color | ColorEdit3 | | Vec4 | Color | ColorEdit4 | ## Notas - `uniforms_sync` elimina entradas obsoletas y añade nuevas con sus defaults. Preserva valores actuales para uniforms que siguen presentes. - Si no hay descriptores, `uniforms_panel` muestra `"Declare uniforms with @slider ... annotations."`. - `uniforms_apply` usa `glGetUniformLocation` por nombre; si no existe (loc < 0), lo salta silenciosamente.