This utility transpiles a custom GLSL shader format (see below) to the SPIR-V format using shaderc.
Made for our game engine.
Then build with cargo build
.
Get an overview of the parameters with ve_shader -h
.
For example, ve_shader "./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 | |
AUTHOR | no | String | author of the shader | |
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 |
//# NAME Vertex Color
//# AUTHOR Michael Lohr
//# DESCRIPTION Renders the vertex colors
//# VERSION 450
//# TYPE VERTEX
layout (location = 0) in vec3 i_position;
layout (location = 1) in mat4 i_model_matrix;
layout (location = 5) in vec4 i_color;
layout (location = 0) out vec4 o_color;
void main() {
gl_PointSize = 1.0;
gl_Position = i_model_matrix * vec4(i_position, 1.0);
o_color = i_color;
}
//# TYPE FRAGMENT
layout (location = 0) in vec4 i_color;
layout (location = 0) out vec4 o_color;
void main(){
o_color = i_color;
}