Files
fn_registry/cpp/functions/gfx/code_to_generator.md
T
egutierrez 24efee80e2 feat(cpp/gfx): code_to_generator + shaderlab_db
Dos primitivas del pipeline de shaders_lab que ya estaban en uso pero sin
indexar al registry:

- code_to_generator_cpp_gfx (function, pure)
  Traduce un fragment shader GLSL escrito a mano (modo Code, con void main()
  + fragColor = ...) en un body de DAG Gen + DagControl[]. Cada uniform
  anotado se convierte en un control; el body usa el parametro uv y reemplaza
  fragColor= por return. Empaqueta uniforms en vec4 (4 x n_uniforms).

- shaderlab_db_cpp_gfx (function, impure)
  CRUD persistente para generators custom de shaders_lab via sqlite3.
  Guarda el GLSL original, el body traducido para el DAG, los DagControl y
  los param_defaults en una BD local (shaders_lab.db). Soporta open(:memory:)
  para tests.

Ambas se indexan ahora en registry.db y son reusables fuera de shaders_lab
si en el futuro hay otra app que componga DAGs de shaders.
2026-04-25 21:26:03 +02:00

3.1 KiB
Raw Blame History

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, 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 params output
code_to_generator function cpp gfx 1.0.0 pure CodeToGeneratorResult code_to_generator(const std::string& source); DagNodeDef make_generator_def(const std::string& name, const std::string& label, const std::string& desc, const CodeToGeneratorResult& tr) Traduce un fragment shader GLSL del modo Code (con `void main()` + `fragColor = ...`) en un body de DAG Gen + DagControl[]. Cada uniform anotado se convierte en un control; el body usa el parametro `uv` de la funcion (lineas `vec2 uv = ...;` se eliminan) y reemplaza `fragColor =` por `return`. Empaqueta cada uniform en su propio vec4 (parametros = 4 × n_uniforms).
glsl
codegen
dag
generators
shaders_lab
parser
gfx
uniform_parser_cpp_gfx
dag_types_cpp_gfx
false
code_to_generator
uniform_parser
dag_types
regex
sstream
string
true
plasma-like (float + vec3) → Slider + Color, defaults preservados, base placeholder
make_generator_def substituye __BASE__ con el indice runtime
missing void main → error
missing fragColor → error
sampler2D → error
vec2 con @xy → XY control
shader sin uniforms → controls vacios, body ok
cpp/functions/gfx/code_to_generator.cpp cpp/functions/gfx/code_to_generator.cpp
name desc
source Fuente GLSL del modo Code: uniforms anotados (// @slider, @color, @xy, @toggle), `void main()` con `vec2 uv = gl_FragCoord.xy / u_resolution;` opcional y `fragColor = ...;`.
name desc
name Identificador snake_case del generator, unico en el catalogo (no debe colisionar con built-ins).
name desc
label Etiqueta visible en la paleta. Si vacio, se usa name.
name desc
desc Descripcion libre del generator.
name desc
tr Resultado de `code_to_generator`. Solo se usa si `tr.ok == true`.
CodeToGeneratorResult con body_template (con tokens __BASE__), param_count, param_defaults, param_names y DagControl[]. make_generator_def envuelve esto en un DagNodeDef listo para `dag_register_node()`.

Layout de parametros

Cada uniform reclama 1 vec4 entero, sin importar su tipo. Esto desperdicia hasta 3 floats por uniform pero hace trivial el mapeo:

GLSL type Slot Alias Control
float 1 float n = u_params[B+i].x; Slider
int 1 int n = int(u_params[B+i].x); Slider
bool 1 bool n = bool(u_params[B+i].x>0.5) Slider 0/1
vec2 1 vec2 n = u_params[B+i].xy; XY (con @xy)
vec3 1 vec3 n = u_params[B+i].xyz; Color (con @color)
vec4 1 vec4 n = u_params[B+i]; Color (alpha en .w, sin control) — solo soportado con @color
sampler2D - - error

__BASE__ es el placeholder que make_generator_def sustituye por el base_vec4 del nodo en runtime.