37ca9562c3
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>
68 lines
2.1 KiB
Markdown
68 lines
2.1 KiB
Markdown
---
|
|
name: gl_shader
|
|
kind: function
|
|
lang: cpp
|
|
domain: gfx
|
|
version: "1.0.0"
|
|
purity: impure
|
|
signature: "CompileResult compile_fragment(const std::string& user_fragment_src)"
|
|
description: "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."
|
|
tags: [opengl, shader, glsl, compile, fragment, gfx]
|
|
uses_functions: ["gl_loader_cpp_gfx"]
|
|
uses_types: []
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: "error_go_core"
|
|
imports: [GL/gl.h, GL/glext.h]
|
|
tested: false
|
|
tests: []
|
|
test_file_path: ""
|
|
file_path: "cpp/functions/gfx/gl_shader.cpp"
|
|
framework: opengl
|
|
params:
|
|
- name: user_fragment_src
|
|
desc: "Cuerpo del fragment shader GLSL sin #version, sin 'out vec4 fragColor' ni declaraciones de uniforms. Solo el void main() y funciones auxiliares."
|
|
output: "CompileResult con program=GL id si ok=true, o err_msg/err_line si falla. program=0 indica error."
|
|
notes: "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
|
|
|
|
```glsl
|
|
#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
|
|
|
|
```glsl
|
|
#version 330 core
|
|
out vec4 fragColor;
|
|
uniform vec2 u_resolution;
|
|
uniform float u_time;
|
|
uniform vec2 u_mouse;
|
|
```
|
|
|
|
## Ejemplo
|
|
|
|
```cpp
|
|
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.
|