37ca9562c3
Auditoria del issue 0044: 14 archivos .md de cpp/functions/gfx/ con uses_functions actualizado. Resuelve dependencias detectadas via #include: gl_loader (consumido por casi todo el dominio gfx), dag_catalog (consumido por la familia dag_*), fullscreen_quad, gl_framebuffer, gl_shader, mesh_obj_load, uniform_parser y dag_node_previews. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
63 lines
1.8 KiB
Markdown
63 lines
1.8 KiB
Markdown
---
|
|
name: gl_framebuffer
|
|
kind: function
|
|
lang: cpp
|
|
domain: gfx
|
|
version: "1.0.0"
|
|
purity: impure
|
|
signature: "void fb_init(Framebuffer& f); void fb_resize(Framebuffer& f, int w, int h); void fb_destroy(Framebuffer& f)"
|
|
description: "CRUD de un framebuffer OpenGL (FBO + textura RGBA8). fb_resize es no-op si las dimensiones no cambian. Listo para uso con ImGui::Image."
|
|
tags: [opengl, framebuffer, fbo, texture, gfx, offscreen]
|
|
uses_functions: ["gl_loader_cpp_gfx"]
|
|
uses_types: []
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: "error_go_core"
|
|
imports: [GL/gl.h, GL/glext.h]
|
|
tested: false
|
|
tests: []
|
|
test_file_path: ""
|
|
file_path: "cpp/functions/gfx/gl_framebuffer.cpp"
|
|
framework: opengl
|
|
params:
|
|
- name: f
|
|
desc: "Struct Framebuffer con campos fbo, tex (GL ids), width, height. Inicializar a {0} antes de fb_init."
|
|
- name: w
|
|
desc: "Ancho deseado en pixels (fb_resize)"
|
|
- name: h
|
|
desc: "Alto deseado en pixels (fb_resize)"
|
|
output: "Modifica f in-place. Después de fb_init, f.fbo y f.tex son IDs GL válidos. fb_destroy pone todos los campos a 0."
|
|
---
|
|
|
|
# gl_framebuffer
|
|
|
|
FBO con textura color RGBA8 (GL_CLAMP_TO_EDGE, GL_LINEAR). Diseñado para renderizado offscreen y posterior display via `ImGui::Image`.
|
|
|
|
## Ciclo de vida
|
|
|
|
```cpp
|
|
fn::gfx::Framebuffer fb{};
|
|
fn::gfx::fb_init(fb); // fbo + tex 1x1
|
|
|
|
// En el render loop:
|
|
fn::gfx::fb_resize(fb, w, h); // no-op si mismas dimensiones
|
|
|
|
// Al destruir:
|
|
fn::gfx::fb_destroy(fb);
|
|
```
|
|
|
|
## Uso con ImGui::Image
|
|
|
|
```cpp
|
|
// Flip Y porque OpenGL tiene origen bottom-left
|
|
ImGui::Image(
|
|
reinterpret_cast<ImTextureID>(static_cast<uintptr_t>(fb.tex)),
|
|
size,
|
|
ImVec2(0, 1), ImVec2(1, 0)
|
|
);
|
|
```
|
|
|
|
## Notas
|
|
|
|
`fb_resize` recrea solo la textura (no el FBO) cuando las dimensiones cambian, reattachando la nueva textura al FBO existente. Esto minimiza el overhead de resize.
|