| Crates.io | ve_shader |
| lib.rs | ve_shader |
| version | 0.1.2 |
| created_at | 2021-02-10 17:20:48.645182+00 |
| updated_at | 2021-02-17 17:44:14.339918+00 |
| description | This utility compiles a custom GLSL shader format to the SPIR-V format using shader-c. |
| homepage | |
| repository | https://github.com/michidk/ve-shader |
| max_upload_size | |
| id | 353317 |
| size | 31,038 |
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;
}