Files
fn_registry/cpp/functions/gfx/shaderlab_db.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

2.8 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, 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
shaderlab_db function cpp gfx 1.0.0 impure bool shaderlab_db_save_generator(GeneratorRecord& gen, std::string* err); std::vector<GeneratorRecord> shaderlab_db_list_generators(); bool shaderlab_db_get_generator(const std::string& id, GeneratorRecord& out); bool shaderlab_db_delete_generator(const std::string& id); 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.
sqlite
shaders
glsl
dag
gfx
persistence
crud
shaders_lab
dag_types_cpp_gfx
false error_go_core
sqlite3
string
vector
chrono
ctime
iomanip
sstream
true
open in-memory + list empty
save + get roundtrip preserva controls/params/defaults
list ordenado por label
update preserva created_at y bumps updated_at
delete devuelve true solo si existia
cpp/functions/gfx/shaderlab_db.cpp cpp/functions/gfx/shaderlab_db.cpp
name desc
gen Registro del generator. Debe llevar id (snake_case), label, source_glsl original, body_glsl traducido, param_count y los param_defaults/controls coherentes.
name desc
id ID snake_case del generator (clave primaria de la tabla).
name desc
out Registro de salida en get; queda relleno solo si la funcion devuelve true.
name desc
err Mensaje de error opcional si save falla (constraint, schema, IO).
Persistencia en la tabla generators de shaders_lab.db. Las listas vienen ordenadas por label.

Schema

CREATE TABLE generators (
  id              TEXT PRIMARY KEY,
  label           TEXT NOT NULL,
  description     TEXT NOT NULL DEFAULT '',
  source_glsl     TEXT NOT NULL,
  body_glsl       TEXT NOT NULL,
  param_count     INTEGER NOT NULL,
  param_defaults  TEXT NOT NULL,   -- CSV de floats
  param_names     TEXT NOT NULL,   -- LF-separated strings
  controls        TEXT NOT NULL,   -- LF-separated, fields '|': kind|label|p0|p1|p2|min|max|step
  tags            TEXT NOT NULL DEFAULT '',
  created_at      TEXT NOT NULL,
  updated_at      TEXT NOT NULL
);

Notas

  • Formato de serializacion custom (no JSON): CSV para floats, LF para strings, | para fields de control. Sin escape de separadores; los labels no deben contener \n ni |.
  • shaderlab_db_open es idempotente: re-abrir con el mismo path es no-op.
  • :memory: como path crea una BD temporal en memoria (usado en tests).
  • save_generator hace upsert (ON CONFLICT DO UPDATE). Setea created_at solo si esta vacio.
  • Tests inline activables con -DSHADERLAB_DB_TEST y linkando sqlite3 (amalgamation o -lsqlite3).