This utility compiles my custom GLSL shader format to the SPIR-V format using shader-c.
Made for our game engine.
Then build with cargo build
.
Get an overview of the parameters with cargo run -- -h
.
For example, cargo run -- ./shaders/*.glsl -o ./output
compiles all shaders in the /shaders
folder and outputs the artifacts to the /output
folder.
Our custom format combines vertex, fragment, and geometry shader in one file.
//#
at the beginning of a line denotes that a custom instruction follows. While the most instructions are optional, some are mandatory. One such instruction is TYPE
, which will instruct this utility to compile the following code until the next type-instruction appears, to a shader of that type.
|Instruction|Required?|Arguments|Description|Example|
|--- | --- | --- | --- | --- |
|NAME|no|String|pretty formatted name of the shader||//# NAME Phong Shader
|
|AUTHOR|no|String|author of the shader||//# AUTHOR John Doe
|
|DESCRIPTION|no|String|describes what the shader does|//# DESCRIPTION Applies the phong reflection model.
|
|VERSION|no|Version|adds #version <version>
to each shader|//# VERSION 450
|
|TYPE|yes|VERTEX,FRAGMENT,GEOMETRY|sets the type of the shader that follows|//# TYPE VERTEX
|
```glsl //# NAME Vertex Color //# AUTHOR Michael Lohr //# DESCRIPTION Renders the vertex colors
//# VERSION 450
//# TYPE VERTEX layout (location = 0) in vec3 iposition; layout (location = 1) in mat4 imodelmatrix; layout (location = 5) in vec4 icolor;
layout (location = 0) out vec4 o_color;
void main() { glPointSize = 1.0; glPosition = imodelmatrix * vec4(i_position, 1.0);
o_color = i_color;
}
//# TYPE FRAGMENT layout (location = 0) in vec4 icolor; layout (location = 0) out vec4 ocolor;
void main(){ ocolor = icolor; } ```