4a95407d0e
- cpp/functions/gfx/gl_loader.{h,cpp,md}: mini loader para OpenGL 2.0+
(Linux no-op via GL_GLEXT_PROTOTYPES, Windows wglGetProcAddress)
- Portar gl_shader/gl_framebuffer/fullscreen_quad/shader_canvas al loader
- CMakeLists: WIN32_EXECUTABLE para lanzar sin consola en Windows
- apps/shaders_lab/shaders_lab.exe: binario PE32+ precompilado
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.1 KiB
2.1 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.0.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().