feat(shaders_lab): add gl_loader + Windows cross-compile
- 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>
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef _WIN32
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#include <windows.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glext.h>
|
||||
|
||||
extern PFNGLATTACHSHADERPROC fn_glAttachShader;
|
||||
extern PFNGLBINDBUFFERPROC fn_glBindBuffer;
|
||||
extern PFNGLBINDFRAMEBUFFERPROC fn_glBindFramebuffer;
|
||||
extern PFNGLBINDVERTEXARRAYPROC fn_glBindVertexArray;
|
||||
extern PFNGLCOMPILESHADERPROC fn_glCompileShader;
|
||||
extern PFNGLCREATEPROGRAMPROC fn_glCreateProgram;
|
||||
extern PFNGLCREATESHADERPROC fn_glCreateShader;
|
||||
extern PFNGLDELETEBUFFERSPROC fn_glDeleteBuffers;
|
||||
extern PFNGLDELETEFRAMEBUFFERSPROC fn_glDeleteFramebuffers;
|
||||
extern PFNGLDELETEPROGRAMPROC fn_glDeleteProgram;
|
||||
extern PFNGLDELETESHADERPROC fn_glDeleteShader;
|
||||
extern PFNGLDELETEVERTEXARRAYSPROC fn_glDeleteVertexArrays;
|
||||
extern PFNGLFRAMEBUFFERTEXTURE2DPROC fn_glFramebufferTexture2D;
|
||||
extern PFNGLGENBUFFERSPROC fn_glGenBuffers;
|
||||
extern PFNGLGENFRAMEBUFFERSPROC fn_glGenFramebuffers;
|
||||
extern PFNGLGENVERTEXARRAYSPROC fn_glGenVertexArrays;
|
||||
extern PFNGLGETPROGRAMINFOLOGPROC fn_glGetProgramInfoLog;
|
||||
extern PFNGLGETPROGRAMIVPROC fn_glGetProgramiv;
|
||||
extern PFNGLGETSHADERINFOLOGPROC fn_glGetShaderInfoLog;
|
||||
extern PFNGLGETSHADERIVPROC fn_glGetShaderiv;
|
||||
extern PFNGLGETUNIFORMLOCATIONPROC fn_glGetUniformLocation;
|
||||
extern PFNGLLINKPROGRAMPROC fn_glLinkProgram;
|
||||
extern PFNGLSHADERSOURCEPROC fn_glShaderSource;
|
||||
extern PFNGLUNIFORM1FPROC fn_glUniform1f;
|
||||
extern PFNGLUNIFORM2FPROC fn_glUniform2f;
|
||||
extern PFNGLUSEPROGRAMPROC fn_glUseProgram;
|
||||
|
||||
#define glAttachShader fn_glAttachShader
|
||||
#define glBindBuffer fn_glBindBuffer
|
||||
#define glBindFramebuffer fn_glBindFramebuffer
|
||||
#define glBindVertexArray fn_glBindVertexArray
|
||||
#define glCompileShader fn_glCompileShader
|
||||
#define glCreateProgram fn_glCreateProgram
|
||||
#define glCreateShader fn_glCreateShader
|
||||
#define glDeleteBuffers fn_glDeleteBuffers
|
||||
#define glDeleteFramebuffers fn_glDeleteFramebuffers
|
||||
#define glDeleteProgram fn_glDeleteProgram
|
||||
#define glDeleteShader fn_glDeleteShader
|
||||
#define glDeleteVertexArrays fn_glDeleteVertexArrays
|
||||
#define glFramebufferTexture2D fn_glFramebufferTexture2D
|
||||
#define glGenBuffers fn_glGenBuffers
|
||||
#define glGenFramebuffers fn_glGenFramebuffers
|
||||
#define glGenVertexArrays fn_glGenVertexArrays
|
||||
#define glGetProgramInfoLog fn_glGetProgramInfoLog
|
||||
#define glGetProgramiv fn_glGetProgramiv
|
||||
#define glGetShaderInfoLog fn_glGetShaderInfoLog
|
||||
#define glGetShaderiv fn_glGetShaderiv
|
||||
#define glGetUniformLocation fn_glGetUniformLocation
|
||||
#define glLinkProgram fn_glLinkProgram
|
||||
#define glShaderSource fn_glShaderSource
|
||||
#define glUniform1f fn_glUniform1f
|
||||
#define glUniform2f fn_glUniform2f
|
||||
#define glUseProgram fn_glUseProgram
|
||||
#else
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glext.h>
|
||||
#endif
|
||||
|
||||
namespace fn::gfx {
|
||||
|
||||
// Load OpenGL 2.0+ function pointers. On Linux it's a no-op (symbols resolved
|
||||
// statically via GL_GLEXT_PROTOTYPES). On Windows it uses wglGetProcAddress;
|
||||
// the GL context must be current before calling.
|
||||
bool gl_loader_init();
|
||||
|
||||
} // namespace fn::gfx
|
||||
Reference in New Issue
Block a user