1use std::path::Path;
2
3use shader_sense::{
4 shader::{GlslShadingLanguageTag, ShaderParams, ShadingLanguageTag},
5 symbols::{
6 shader_module_parser::ShaderModuleParser,
7 symbol_provider::{default_include_callback, SymbolProvider},
8 },
9 validator::validator::Validator,
10};
11
12fn validate_file<T: ShadingLanguageTag>(shader_path: &Path, shader_content: &str) {
13 let validator = Validator::from_shading_language(T::get_language());
15 match validator.validate_shader(
16 shader_content,
17 shader_path,
18 &ShaderParams::default(),
19 &mut |path: &Path| Some(std::fs::read_to_string(path).unwrap()),
20 ) {
21 Ok(diagnostic_list) => println!(
22 "Validated file and return following diagnostics: {:#?}",
23 diagnostic_list
24 ),
25 Err(err) => println!("Failed to validate file: {:#?}", err),
26 }
27}
28
29fn query_all_symbol<T: ShadingLanguageTag>(shader_path: &Path, shader_content: &str) {
30 let mut shader_module_parser = ShaderModuleParser::from_shading_language(T::get_language());
32 let symbol_provider = SymbolProvider::from_shading_language(T::get_language());
33 match shader_module_parser.create_module(shader_path, shader_content) {
34 Ok(shader_module) => {
35 let symbols = symbol_provider
36 .query_symbols(
37 &shader_module,
38 ShaderParams::default(),
39 &mut default_include_callback::<T>,
40 None,
41 )
42 .unwrap();
43 let symbol_list = symbols.get_all_symbols();
44 println!("Found symbols: {:#?}", symbol_list);
45 }
46 Err(err) => println!("Failed to create ast: {:#?}", err),
47 }
48}
49
50const SHADER: &str = r#"
51#version 450
52void symbol(uint i) {}
53void symbol(float b) {}
54void main() {
55 vec4 frags = gl_FragCoord;
56}
57"#;
58
59fn main() {
60 let shader_path = Path::new("dummy/shader.frag.glsl");
61 validate_file::<GlslShadingLanguageTag>(shader_path, SHADER);
62 query_all_symbol::<GlslShadingLanguageTag>(shader_path, SHADER);
63}