glsl/codegen
src/glsl/codegen.tur
GLSL code generation from a ColoredSDF tree.
Since: Phase 3
defn
csdf->glsl
(csdf->glsl [csdf :int] :cstr)
generate a GLSL sceneSDF function from a ColoredSDF tree.
Parameters
| csdf | ColoredSDF handle |
Returns
Heap-allocated GLSL source string, or "" on failure.
Example
(let [src (csdf->glsl scene)] (println src) (csdf-glsl-free src))
Since: Phase 3
defn
csdf-glsl-free
(csdf-glsl-free [s :cstr] :void)
free a GLSL source string returned by csdf->glsl. Since: Phase 3
Internal definitions
sb-new-- allocate a fresh string builder. Since: Phase 3sb-write-- append a C string to the builder. Since: Phase 3sb-str-- return a pointer into the builder's buffer. Since: Phase 3sb-free-- free the builder and its buffer. Since: Phase 3ctr-new-- allocate an integer counter starting at 0. Since: Phase 3ctr-next-- post-increment: returns current value then advances. Since: Phase 3ctr-free-- free a counter. Since: Phase 3glsl-f-- format a float as a GLSL literal (static buffer). Since: Phase 3glsl-i-- format an int as a decimal string (static buffer). Since: Phase 3pvar-name-- return "p" for idx 0, "p_N" otherwise (static buffer). Since: Phase 3csdf--emit-sphere-- emit GLSL for a sphere leaf. Since: Phase 3csdf--emit-box-- emit GLSL for a box leaf. Since: Phase 3csdf--emit-cylinder-- emit GLSL for an infinite XY-plane cylinder. Since: Phase 3csdf--emit-plane-- emit GLSL for an infinite plane. Since: Phase 3csdf--emit-node-- recursively emit GLSL for a ColoredSDF subtree.glsl--strdup-- heap-duplicate a C string. Since: Phase 3