Files
egutierrez b643321778 chore(cpp/gfx): add glUniform1ui binding to gl_loader
Necesario para que las funciones GPU compute (gpu_histogram_1d/2d, gpu_reduce,
mc_*_gpu) puedan setear uniforms uint en Windows. En Linux ya estaba
disponible via GL_GLEXT_PROTOTYPES.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 11:51:44 +02:00

131 lines
5.1 KiB
C++

#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;
PFNGLUNIFORM1IPROC fn_glUniform1i = nullptr;
PFNGLUNIFORM1UIPROC fn_glUniform1ui = nullptr;
PFNGLUNIFORM2FPROC fn_glUniform2f = nullptr;
PFNGLUNIFORM3FPROC fn_glUniform3f = nullptr;
PFNGLUNIFORM4FPROC fn_glUniform4f = nullptr;
PFNGLUNIFORM4FVPROC fn_glUniform4fv = nullptr;
PFNGLUNIFORMMATRIX4FVPROC fn_glUniformMatrix4fv = nullptr;
PFNGLUSEPROGRAMPROC fn_glUseProgram = nullptr;
PFNGLACTIVETEXTUREPROC fn_glActiveTexture = nullptr;
PFNGLGENERATEMIPMAPPROC fn_glGenerateMipmap = nullptr;
PFNGLBUFFERDATAPROC fn_glBufferData = nullptr;
PFNGLDRAWARRAYSINSTANCEDPROC fn_glDrawArraysInstanced = nullptr;
PFNGLENABLEVERTEXATTRIBARRAYPROC fn_glEnableVertexAttribArray = nullptr;
PFNGLVERTEXATTRIBDIVISORPROC fn_glVertexAttribDivisor = nullptr;
PFNGLVERTEXATTRIBPOINTERPROC fn_glVertexAttribPointer = nullptr;
PFNGLBINDRENDERBUFFERPROC fn_glBindRenderbuffer = nullptr;
PFNGLDELETERENDERBUFFERSPROC fn_glDeleteRenderbuffers = nullptr;
PFNGLFRAMEBUFFERRENDERBUFFERPROC fn_glFramebufferRenderbuffer = nullptr;
PFNGLGENRENDERBUFFERSPROC fn_glGenRenderbuffers = nullptr;
PFNGLRENDERBUFFERSTORAGEPROC fn_glRenderbufferStorage = nullptr;
PFNGLFRAMEBUFFERTEXTUREPROC fn_glFramebufferTexture = nullptr;
PFNGLBUFFERSUBDATAPROC fn_glBufferSubData = nullptr;
PFNGLVERTEXATTRIBIPOINTERPROC fn_glVertexAttribIPointer = nullptr;
PFNGLTEXBUFFERPROC fn_glTexBuffer = nullptr;
PFNGLDISPATCHCOMPUTEPROC fn_glDispatchCompute = nullptr;
PFNGLMEMORYBARRIERPROC fn_glMemoryBarrier = nullptr;
PFNGLBINDBUFFERBASEPROC fn_glBindBufferBase = nullptr;
PFNGLGETBUFFERSUBDATAPROC fn_glGetBufferSubData = 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(glUniform1i);
LOAD(glUniform1ui);
LOAD(glUniform2f);
LOAD(glUniform3f);
LOAD(glUniform4f);
LOAD(glUniform4fv);
LOAD(glUniformMatrix4fv);
LOAD(glUseProgram);
LOAD(glActiveTexture);
LOAD(glGenerateMipmap);
LOAD(glBufferData);
LOAD(glDrawArraysInstanced);
LOAD(glEnableVertexAttribArray);
LOAD(glVertexAttribDivisor);
LOAD(glVertexAttribPointer);
LOAD(glBindRenderbuffer);
LOAD(glDeleteRenderbuffers);
LOAD(glFramebufferRenderbuffer);
LOAD(glGenRenderbuffers);
LOAD(glRenderbufferStorage);
LOAD(glFramebufferTexture);
LOAD(glBufferSubData);
LOAD(glVertexAttribIPointer);
LOAD(glTexBuffer);
LOAD(glDispatchCompute);
LOAD(glMemoryBarrier);
LOAD(glBindBufferBase);
LOAD(glGetBufferSubData);
#undef LOAD
return true;
}
} // namespace fn::gfx
#else
namespace fn::gfx {
bool gl_loader_init() { return true; }
} // namespace fn::gfx
#endif