Files
fn_registry/cpp/functions/gfx/shader_canvas.md
T
egutierrez c7821c4c99 feat(shaders_lab): uniform annotations → auto-generated ImGui controls
- cpp/functions/gfx/uniform_parser: regex-based parser of @slider/@color/@toggle/@xy annotations (+ inline tests)
- cpp/functions/gfx/uniform_panel: ImGui widgets + value store + glUniform* apply
- shader_canvas: optional uniforms callback invoked per-frame
- gl_loader: +glUniform1i/3f/4f
- seed plasma: demo uniforms u_speed + u_color
- rebuild Windows .exe

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 21:02:35 +02:00

2.4 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, framework, params, output
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path framework params output
shader_canvas component cpp gfx 1.1.0 impure void canvas_render(ShaderCanvas& c, float time_seconds, const std::function<void(unsigned int)>& uniforms_fn = {}) Componente ImGui que renderiza un fragment shader GLSL a un FBO y lo muestra en el panel actual. Compone gl_framebuffer, fullscreen_quad y gl_shader. Gestiona resize automático y coordenadas de mouse. Acepta callback opcional uniforms_fn invocado tras glUseProgram para uniforms custom.
opengl
shader
canvas
imgui
fbo
gfx
component
gl_shader_cpp_gfx
gl_framebuffer_cpp_gfx
fullscreen_quad_cpp_gfx
uniform_panel_cpp_gfx
false error_go_core
imgui
GL/gl.h
GL/glext.h
false
cpp/functions/gfx/shader_canvas.cpp imgui
name desc
c ShaderCanvas con estado GL interno (fb, quad, program). Inicializar con canvas_init() antes del primer frame.
name desc
time_seconds Tiempo en segundos para el uniform u_time. Usar ImGui::GetTime() o clock propio.
name desc
uniforms_fn Callback opcional invocado tras glUseProgram y antes de quad_draw. Recibe el program ID. Usar para aplicar uniforms custom (ej: uniforms_apply de uniform_panel).
Dibuja ImGui::Image con la textura del FBO renderizado. El panel ImGui debe estar abierto (entre Begin/End). Ocupa GetContentRegionAvail().

shader_canvas

Componente que encapsula el ciclo render-to-FBO + ImGui::Image. Llama a canvas_render() dentro de un ImGui::Begin/End activo.

Ciclo de vida

fn::gfx::ShaderCanvas canvas{};

// En el render loop:
if (!canvas.initialized) fn::gfx::canvas_init(canvas);

// Cargar un shader compilado:
auto r = fn::gfx::compile_fragment(src);
if (r.ok) fn::gfx::canvas_set_program(canvas, r.program);

// Dentro de ImGui::Begin/End:
fn::gfx::canvas_render(canvas, (float)ImGui::GetTime());

// Al destruir:
fn::gfx::canvas_destroy(canvas);

Notas

  • canvas_set_program borra el programa anterior automáticamente.
  • canvas_set_program(c, 0) deja la pantalla en negro (glClear sin draw call).
  • El flip de coordenadas UV (ImVec2(0,1) / ImVec2(1,0)) corrige el origen OpenGL bottom-left vs ImGui top-left.
  • Guarda y restaura GL_FRAMEBUFFER_BINDING y GL_VIEWPORT para compatibilidad con el render loop de ImGui.