3008b56e76
- cpp/functions/gfx: gl_shader, gl_framebuffer, fullscreen_quad, shader_canvas - cpp/apps/shaders_lab: main + 3 seed shaders (plasma, circle, checker) - ImGui docking layout: Code | Canvas | Controls Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.0 KiB
2.0 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
| 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 | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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. |
|
false | error_go_core |
|
false | cpp/functions/gfx/gl_shader.cpp | opengl |
|
CompileResult con program=GL id si ok=true, o err_msg/err_line si falla. program=0 indica error. |
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.