ve_shader

Crates.iove_shader
lib.rsve_shader
version0.1.2
sourcesrc
created_at2021-02-10 17:20:48.645182
updated_at2021-02-17 17:44:14.339918
descriptionThis utility compiles a custom GLSL shader format to the SPIR-V format using shader-c.
homepage
repositoryhttps://github.com/michidk/ve-shader
max_upload_size
id353317
size31,038
Michael Lohr (michidk)

documentation

README

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;
}
Commit count: 20

cargo fmt