#pragma once #include #include "gfx/gl_framebuffer.h" #include "gfx/gl_shader.h" #include "gfx/fullscreen_quad.h" namespace fn::gfx { struct ShaderCanvas { Framebuffer fb; Quad quad; unsigned int program = 0; bool initialized = false; }; // Inicializa recursos GL (idempotente). void canvas_init(ShaderCanvas& c); // Sustituye el programa activo (borra el anterior). Acepta program=0 para pantalla en negro. void canvas_set_program(ShaderCanvas& c, unsigned int program); // Renderiza el shader al FBO y dibuja la textura resultante como contenido del panel ImGui. // Llamar DENTRO de un ImGui::Begin/End. Ocupa GetContentRegionAvail(). void canvas_render(ShaderCanvas& c, float time_seconds); void canvas_destroy(ShaderCanvas& c); } // namespace fn::gfx