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,78 @@
|
||||
#include "gl_loader.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
PFNGLATTACHSHADERPROC fn_glAttachShader = nullptr;
|
||||
PFNGLBINDBUFFERPROC fn_glBindBuffer = nullptr;
|
||||
PFNGLBINDFRAMEBUFFERPROC fn_glBindFramebuffer = nullptr;
|
||||
PFNGLBINDVERTEXARRAYPROC fn_glBindVertexArray = nullptr;
|
||||
PFNGLCOMPILESHADERPROC fn_glCompileShader = nullptr;
|
||||
PFNGLCREATEPROGRAMPROC fn_glCreateProgram = nullptr;
|
||||
PFNGLCREATESHADERPROC fn_glCreateShader = nullptr;
|
||||
PFNGLDELETEBUFFERSPROC fn_glDeleteBuffers = nullptr;
|
||||
PFNGLDELETEFRAMEBUFFERSPROC fn_glDeleteFramebuffers = nullptr;
|
||||
PFNGLDELETEPROGRAMPROC fn_glDeleteProgram = nullptr;
|
||||
PFNGLDELETESHADERPROC fn_glDeleteShader = nullptr;
|
||||
PFNGLDELETEVERTEXARRAYSPROC fn_glDeleteVertexArrays = nullptr;
|
||||
PFNGLFRAMEBUFFERTEXTURE2DPROC fn_glFramebufferTexture2D = nullptr;
|
||||
PFNGLGENBUFFERSPROC fn_glGenBuffers = nullptr;
|
||||
PFNGLGENFRAMEBUFFERSPROC fn_glGenFramebuffers = nullptr;
|
||||
PFNGLGENVERTEXARRAYSPROC fn_glGenVertexArrays = nullptr;
|
||||
PFNGLGETPROGRAMINFOLOGPROC fn_glGetProgramInfoLog = nullptr;
|
||||
PFNGLGETPROGRAMIVPROC fn_glGetProgramiv = nullptr;
|
||||
PFNGLGETSHADERINFOLOGPROC fn_glGetShaderInfoLog = nullptr;
|
||||
PFNGLGETSHADERIVPROC fn_glGetShaderiv = nullptr;
|
||||
PFNGLGETUNIFORMLOCATIONPROC fn_glGetUniformLocation = nullptr;
|
||||
PFNGLLINKPROGRAMPROC fn_glLinkProgram = nullptr;
|
||||
PFNGLSHADERSOURCEPROC fn_glShaderSource = nullptr;
|
||||
PFNGLUNIFORM1FPROC fn_glUniform1f = nullptr;
|
||||
PFNGLUNIFORM2FPROC fn_glUniform2f = nullptr;
|
||||
PFNGLUSEPROGRAMPROC fn_glUseProgram = nullptr;
|
||||
|
||||
namespace fn::gfx {
|
||||
|
||||
bool gl_loader_init() {
|
||||
#define LOAD(name) \
|
||||
fn_##name = (decltype(fn_##name))wglGetProcAddress(#name); \
|
||||
if (!fn_##name) return false
|
||||
|
||||
LOAD(glAttachShader);
|
||||
LOAD(glBindBuffer);
|
||||
LOAD(glBindFramebuffer);
|
||||
LOAD(glBindVertexArray);
|
||||
LOAD(glCompileShader);
|
||||
LOAD(glCreateProgram);
|
||||
LOAD(glCreateShader);
|
||||
LOAD(glDeleteBuffers);
|
||||
LOAD(glDeleteFramebuffers);
|
||||
LOAD(glDeleteProgram);
|
||||
LOAD(glDeleteShader);
|
||||
LOAD(glDeleteVertexArrays);
|
||||
LOAD(glFramebufferTexture2D);
|
||||
LOAD(glGenBuffers);
|
||||
LOAD(glGenFramebuffers);
|
||||
LOAD(glGenVertexArrays);
|
||||
LOAD(glGetProgramInfoLog);
|
||||
LOAD(glGetProgramiv);
|
||||
LOAD(glGetShaderInfoLog);
|
||||
LOAD(glGetShaderiv);
|
||||
LOAD(glGetUniformLocation);
|
||||
LOAD(glLinkProgram);
|
||||
LOAD(glShaderSource);
|
||||
LOAD(glUniform1f);
|
||||
LOAD(glUniform2f);
|
||||
LOAD(glUseProgram);
|
||||
|
||||
#undef LOAD
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace fn::gfx
|
||||
|
||||
#else
|
||||
|
||||
namespace fn::gfx {
|
||||
bool gl_loader_init() { return true; }
|
||||
} // namespace fn::gfx
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user