Releases: CodyJasonBennett/shaderkit
Releases · CodyJasonBennett/shaderkit
v0.7.0
What's Changed
- feat(minify): use AST parser for safe GLSL mangle by @CodyJasonBennett in #36
- perf(tokenizer): reduce allocations by @CodyJasonBennett in 099975a, 99588ed
Full Changelog: v0.6.4...v0.7.0
v0.6.4
What's Changed
- fix(parser): handle comma operator by @CodyJasonBennett in 5f5695f
Full Changelog: v0.6.3...v0.6.4
v0.6.3
What's Changed
- fix(parser): handle invariant on builtins by @CodyJasonBennett in 741b782
Full Changelog: v0.6.2...v0.6.3
v0.6.2
What's Changed
- fix(parser): single-line control flow by @CodyJasonBennett in 0caeef5
- fix(parser): handle block statement by @CodyJasonBennett in 0e94cd1
Full Changelog: v0.6.1...v0.6.2
v0.6.1
v0.6.0
What's Changed
- feat: Support for WebGL 1 layout syntax by @iwoplaza in #31
- fix: Call should have more precedence than assignment by @iwoplaza in #32
- fix(generator): ternary arms were swapped by @CodyJasonBennett in 3c3476c
New Contributors
Full Changelog: v0.5.0...v0.6.0
v0.5.0
What's Changed
- fix: add InvariantStatement by @CodyJasonBennett in #28
- feat: GLSL ES 3.1 support by @CodyJasonBennett in #29
- fix(minifier): don't use reserved words for mangled identifiers by @CodyJasonBennett in #30
Full Changelog: v0.4.1...v0.5.0
v0.4.1
What's Changed
- fix: add main key for Bundlephobia resolver by @CodyJasonBennett in #27
Full Changelog: v0.4.0...v0.4.1
v0.4.0
What's Changed
- feat: visit API by @CodyJasonBennett in #26
This release follows up v0.3.0 with a visitor API to recurse AST. Useful for reflecting or modifying a shader program.
import { type Program, parse, visit, generate } from 'shaderkit'
// https://github.com/CodyJasonBennett/shaderkit#ast
const program: Program = parse(glsl)
// optionally reflect program here (e.g. collect all global uniforms)
const uniforms: string[] = []
visit(program, {
VariableDeclarator(node) {
if (node.qualifiers.includes('uniform')) {
uniforms.push(node.id.name)
}
},
})
// optionally modify program here (e.g. remove version header)
visit(program, {
PreprocessorStatement(node, ancestors) {
const parent = ancestors.at(-1)
if (node.name === 'version' && parent?.type === 'Program') {
parent.body.splice(parent.body.indexOf(node), 1)
}
},
})
// Compile back into GLSL
const output: string = generate(program, { target: 'GLSL' })Full Changelog: v0.3.1...v0.4.0
v0.3.1
What's Changed
- fix(minifier): preserve whitespace after #if directives by @CodyJasonBennett in #24
- fix(parser): handle preprocessor in struct declarations by @CodyJasonBennett in #25
Full Changelog: v0.3.0...v0.3.1