Files
fn_registry/cpp/functions/gfx/gl_shader.md
T
egutierrez 08cc179ca8 chore(registry): añadir uses_functions a consumidores reales (gfx)
Auditoria del issue 0044: 14 archivos .md de cpp/functions/gfx/ con
uses_functions actualizado. Resuelve dependencias detectadas via
#include: gl_loader (consumido por casi todo el dominio gfx),
dag_catalog (consumido por la familia dag_*), fullscreen_quad,
gl_framebuffer, gl_shader, mesh_obj_load, uniform_parser y
dag_node_previews.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 23:40:31 +02:00

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, notes
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 notes
gl_shader function cpp gfx 1.0.0 impure CompileResult compile_fragment(const std::string& user_fragment_src) Compila un cuerpo de fragment shader GLSL 330 y retorna un GL program listo para usar. Prepende automáticamente version, out vec4 fragColor y uniforms u_resolution/u_time/u_mouse. Usa GL_GLEXT_PROTOTYPES + GL/glext.h.
opengl
shader
glsl
compile
fragment
gfx
gl_loader_cpp_gfx
false error_go_core
GL/gl.h
GL/glext.h
false
cpp/functions/gfx/gl_shader.cpp opengl
name desc
user_fragment_src Cuerpo del fragment shader GLSL sin #version, sin 'out vec4 fragColor' ni declaraciones de uniforms. Solo el void main() y funciones auxiliares.
CompileResult con program=GL id si ok=true, o err_msg/err_line si falla. program=0 indica error. consumido por cpp/apps/shaders_lab/main.cpp; scaffolding/demo en primitives_gallery

gl_shader

Compila y enlaza un fragment shader GLSL 330 contra un vertex shader fijo que genera un fullscreen quad via gl_VertexID.

Vertex shader fijo

#version 330 core
const vec2 verts[6] = vec2[](
    vec2(-1,-1), vec2(1,-1), vec2(-1,1),
    vec2(1,-1),  vec2(1,1),  vec2(-1,1)
);
void main() { gl_Position = vec4(verts[gl_VertexID], 0.0, 1.0); }

Preamble prepended al fragment

#version 330 core
out vec4 fragColor;
uniform vec2 u_resolution;
uniform float u_time;
uniform vec2 u_mouse;

Ejemplo

auto r = fn::gfx::compile_fragment("void main() { fragColor = vec4(1,0,0,1); }");
if (r.ok) {
    glUseProgram(r.program);
} else {
    fprintf(stderr, "line %d: %s\n", r.err_line, r.err_msg.c_str());
}

Notas

Usa #define GL_GLEXT_PROTOTYPES + <GL/gl.h> + <GL/glext.h> (mismo patrón que graph_renderer). El loader de ImGui ya ha inicializado los symbols GL antes de que esta función sea llamada. El err_line del fragment se ajusta restando las 4 líneas del preamble.