#glsl-shader #shader #graphics #gamedev #shader-compiler

nightly app ve_shader

This utility compiles a custom GLSL shader format to the SPIR-V format using shader-c

3 releases

0.1.2 Feb 17, 2021
0.1.1 Feb 10, 2021
0.1.0 Feb 10, 2021

#26 in #glsl-shader

MIT license

18KB
338 lines

Vulkan Shader Compiler Utility

MIT License Continuous integration Crates.io

This utility transpiles a custom GLSL shader format (see below) to the SPIR-V format using shaderc.

Made for our game engine.

Building

Prerequisites

Then build with cargo build.

Execute

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.

Custom Format

Our custom format combines vertex, fragment, and geometry shader in one file.

Instructions

//# 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

Example

//# 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;
}

Dependencies

~43MB
~806K SLoC