Wave 1 de parallel-fix-issues integrada a master: - 0025: text_editor_cpp_core + file_watcher_cpp_core - 0026: gl_texture_load_cpp_gfx (vendor: stb_image v2.30) Ademas se commitea WIP previo de master que estaba sin commitear (cambios en shaders_lab, dag_*, framework, tokens, kpi_card, gl_loader.md, etc.) para dejar HEAD buildable. Notas: - Algunos deps del gallery (button.cpp, toolbar.cpp, modal_dialog.cpp...) siguen UNTRACKED — gating con FN_BUILD_GALLERY=ON (default OFF) para que master build (sin flag) no los necesite. - Build OK con y sin flag. fn index registra 904 functions. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.9 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 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| gl_loader | function | cpp | gfx | 1.1.0 | impure | bool gl_loader_init() | Loader minimo de simbolos OpenGL 2.0+ para cross-compile a Windows. En Linux es no-op (simbolos resueltos via GL_GLEXT_PROTOTYPES). En Windows resuelve punteros con wglGetProcAddress. Redirige las llamadas con macros para que el codigo fuente sea portable. |
|
false | error_go_core |
|
false | cpp/functions/gfx/gl_loader.cpp | opengl | true si todos los simbolos se resolvieron (Linux siempre true; Windows depende de que el contexto GL este activo antes de llamar). false si algun simbolo no esta disponible en el driver. |
gl_loader
Loader minimo de simbolos OpenGL 2.0+ sin dependencias externas (sin GLAD, GLEW, gl3w). Resuelve el problema de que opengl32.dll en Windows solo exporta OpenGL 1.1 — todo lo moderno (shaders, FBO, VAO) requiere resolucion dinamica via wglGetProcAddress.
Uso
#include "gfx/gl_loader.h"
// Despues de crear el contexto GL (p.ej. tras el primer frame de ImGui):
fn::gfx::gl_loader_init();
// A partir de aqui, todos los simbolos funcionan identicamente en Linux y Windows:
glCreateShader(GL_FRAGMENT_SHADER);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
// ...
Como funciona
En Windows, el header declara extern PFNGL... por cada simbolo y los renombra con macros: #define glCreateShader fn_glCreateShader. El .cpp instancia los punteros y los resuelve con wglGetProcAddress en gl_loader_init().
En Linux, el header activa GL_GLEXT_PROTOTYPES e incluye <GL/gl.h> + <GL/glext.h> directamente; los simbolos son exportados por libGL y no hace falta resolver nada.
Anadir un simbolo nuevo
- Declarar
extern PFNGL<NAME>PROC fn_gl<Name>;en el.h. - Anadir
#define gl<Name> fn_gl<Name>en el bloque#ifdef _WIN32. - Instanciar el puntero en el
.cppy anadirLOAD(gl<Name>);dentro degl_loader_init().
Cobertura [v1.1]
Funciones cubiertas (todas con macro #define gl* fn_gl* y LOAD() en el init):
| Grupo | Simbolos |
|---|---|
| Shaders / programs | glCreateShader, glShaderSource, glCompileShader, glGetShaderiv, glGetShaderInfoLog, glCreateProgram, glAttachShader, glLinkProgram, glGetProgramiv, glGetProgramInfoLog, glUseProgram, glDeleteShader, glDeleteProgram |
| Uniforms | glGetUniformLocation, glUniform1f, glUniform1i, glUniform2f, glUniform3f, glUniform4f, glUniform4fv |
| Buffers + VAO | glGenBuffers, glBindBuffer, glDeleteBuffers, glBufferData, glGenVertexArrays, glBindVertexArray, glDeleteVertexArrays, glEnableVertexAttribArray, glVertexAttribPointer, glVertexAttribDivisor |
| Framebuffers + renderbuffers | glGenFramebuffers, glBindFramebuffer, glDeleteFramebuffers, glFramebufferTexture, glFramebufferTexture2D, glGenRenderbuffers, glBindRenderbuffer, glDeleteRenderbuffers, glRenderbufferStorage, glFramebufferRenderbuffer |
| Draw | glDrawArraysInstanced (resto de glDraw* viene en opengl32.dll) |
v1.1 (2026-04-25) anade los grupos Buffers/VAO, Framebuffers/renderbuffers y Draw para que graph_renderer_cpp_viz y otros consumidores compilen en cross-compile MinGW. Funciones de opengl32.dll 1.1 (glClear, glEnable, glViewport, glDrawArrays, etc.) se siguen resolviendo estaticamente — no necesitan loader.
Compilador MinGW
El cross-compile a Windows requiere MinGW-w64 con thread model -posix para que std::mutex / std::thread funcionen (otros primitivos como process_runner y toast lo necesitan). Configurado en cpp/toolchains/mingw-w64.cmake via x86_64-w64-mingw32-gcc-posix / g++-posix + link static de libwinpthread.