--- name: shaders_lab lang: cpp domain: gfx description: "Live GLSL fragment shader editor con preview en tiempo real. Layout de 3 paneles: editor de código, canvas de preview y controles." tags: [gui, shaders, opengl, glsl, imgui] uses_functions: - gl_shader_cpp_gfx - gl_framebuffer_cpp_gfx - fullscreen_quad_cpp_gfx - shader_canvas_cpp_gfx - fps_overlay_cpp_core uses_types: [] framework: "imgui + opengl3" entry_point: "cpp/build/linux/apps/shaders_lab/shaders_lab" dir_path: "cpp/apps/shaders_lab" --- ## Descripción Editor interactivo de fragment shaders GLSL con preview en tiempo real. Incluye 3 presets (Plasma, Circle, Checker) y recompila automáticamente con debounce de 250ms al editar el código. ## Layout - **Code** (izquierda): editor de texto con botones de preset y footer de errores de compilación - **Canvas** (centro): preview del shader renderizado a FBO y mostrado via ImGui::Image - **Controls** (derecha): placeholder para fase 2 + FPS overlay ## Build ```bash ./fn run build_cpp_linux_bash_infra shaders_lab ``` Binario: `cpp/build/linux/apps/shaders_lab/shaders_lab` ## Uniforms disponibles en los shaders - `u_resolution`: vec2 — dimensiones del canvas en pixels - `u_time`: float — segundos desde inicio de la app (ImGui::GetTime()) - `u_mouse`: vec2 — posición del mouse relativa al canvas, origen bottom-left ## Notas No requiere dependencias externas más allá de lo ya vendorizado (GLFW, ImGui, OpenGL). Los fragment shaders se escriben sin `#version`, sin `out vec4 fragColor` ni declaraciones de uniforms — `compile_fragment()` los prepende automáticamente.