The edit-time form of an expression program: input slots and output expressions. More...
| Header: | #include <Graph> |
| bool | allowRecursion(bool on) |
A caller declares input slots with declareInput() and output expressions with declareOutput(), in any order. compile() sorts the outputs by their dependencies, type-checks the whole program, and returns an immutable eval::Program, or the diagnostics that stopped it.
One Graph serves one editing session. It is move-only, and the Program it compiles does not refer back to it. Every backend shares one front end: the program's GLSL goes through glslang to SPIR-V, and the Backend only selects what runs that SPIR-V.
See also eval::Program and eval::evaluate().
`SUP-88` — an empty element list is a caller error, not an empty slot.
A zero-length wide output would size to nothing in the flat buffer and silently overlap the next slot. `SUP-74` made a graph with NO outputs a legal empty program, and that is a different thing: an output that exists and carries no values has no meaning the ABI can express. Refused by returning the invalid handle, which is what every other declare verb returns for a request it cannot honour.