Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Example: GLSL shaders

This example shows how to build SPIR-V shaders using glslc. It also showcases capture groups in pattern matching, where the same build rule is used for all three types of shaders (fragment, vertex, compute).

Additionally, this also creates an “asset pack” containing all the shaders, using tar.

Werkfile:

default target = "build"

let glslc = which "glslc"
let tar = which "tar"

build "%.(frag|vert|comp).spv" {
    from "%.{0}"
    depfile "%.{0}.d"
    run "{glslc} -MD -MF <depfile> -o <out> <in>"
}

build "shaders.tar.gz" {
    # Note: Using "native" glob syntax.
    from glob "*.\{frag,vert,comp\}" | map "{}.spv"
    run "{tar} -zcf <out> <in*>"
}

task build {
    build "shaders.tar.gz"
}