Files
fn_registry/cpp/functions/gfx/gl_loader.cpp
T
egutierrez e115c2e3fd feat(shaders_lab): DAG pipeline mode with node catalog
- cpp/functions/gfx/dag_types: DagStep, DagNodeDef, DagControl (header-only)
- cpp/functions/gfx/dag_catalog: 10 hardcoded nodes (4 gen, 3 op, 3 blend) ported from shader-dag-blends.jsx
- cpp/functions/gfx/dag_compile: pipeline → GLSL 330 core with fan-in via source_id
- cpp/functions/gfx/dag_uniforms: upload u_params[16] via glUniform4fv
- cpp/functions/gfx/dag_panel: ImGui pipeline editor (add/remove/reorder/controls)
- main.cpp: Code/DAG mode toggle, per-mode compile path and uniforms
- gl_loader: +glUniform4fv
- rebuild Windows .exe

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 21:15:21 +02:00

87 lines
3.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;
PFNGLUNIFORM2FPROC fn_glUniform2f = nullptr;
PFNGLUNIFORM3FPROC fn_glUniform3f = nullptr;
PFNGLUNIFORM4FPROC fn_glUniform4f = nullptr;
PFNGLUNIFORM4FVPROC fn_glUniform4fv = 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(glUniform1i);
LOAD(glUniform2f);
LOAD(glUniform3f);
LOAD(glUniform4f);
LOAD(glUniform4fv);
LOAD(glUseProgram);
#undef LOAD
return true;
}
} // namespace fn::gfx
#else
namespace fn::gfx {
bool gl_loader_init() { return true; }
} // namespace fn::gfx
#endif