Macro include_shader::include_shader
source · include_shader!() { /* proc-macro */ }
Expand description
Includes a shader file as a string with dependencies support.
By default, the file is located relative to the workspace root directory.
If the relative-path
feature is enabled, then the file is located relative
to the current file.
Panics
Panics if:
- A file specified cannot be found
- A circular dependency is detected
Examples
ⓘ
use include_shader::include_shader;
fn main() {
// ...
let frag_shader = compile_shader(
&context,
WebGl2RenderingContext::FRAGMENT_SHADER,
include_shader!("src/shaders/fragment_shader.glsl"),
)?;
// ...
}
Dependencies
Dependencies are supported within shader files using the #include
preprocessor directive.
rand.glsl
:
float rand(vec2 co) {
return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453);
}
fragment_shader.glsl
:
uniform vec2 u_resolution;
#include "./src/shaders/functions/rand.glsl"
void main() {
vec2 st = gl_FragCoord.xy / u_resolution.xy;
gl_FragColor = vec4(vec3(rand(st)), 1.0);
}