#pragma once #include #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(). // uniforms_fn se invoca tras glUseProgram y antes de quad_draw, recibe el program ID. void canvas_render(ShaderCanvas& c, float time_seconds, const std::function& uniforms_fn = {}); void canvas_destroy(ShaderCanvas& c); } // namespace fn::gfx