use askama::Template;
use crate::{
shaders::{AwsmShaderError, Result},
shadows::shader::cache_key::ShaderCacheKeyShadow,
};
#[derive(Template, Debug)]
#[template(path = "shadow_wgsl/vertex.wgsl", whitespace = "minimize")]
pub struct ShaderTemplateShadow {
pub instancing_transforms: bool,
pub max_morph_unroll: u32,
pub max_skin_unroll: u32,
pub has_custom_vertex: bool,
pub dynamic_wgsl_vertex: String,
pub dynamic_vertex_struct_decl: String,
pub dynamic_vertex_loader_decl: String,
}
impl TryFrom<&ShaderCacheKeyShadow> for ShaderTemplateShadow {
type Error = AwsmShaderError;
fn try_from(value: &ShaderCacheKeyShadow) -> Result<Self> {
Ok(Self {
instancing_transforms: value.instancing_transforms,
max_morph_unroll: 2,
max_skin_unroll: 2,
has_custom_vertex: false,
dynamic_wgsl_vertex: String::new(),
dynamic_vertex_struct_decl: String::new(),
dynamic_vertex_loader_decl: String::new(),
})
}
}
impl ShaderTemplateShadow {
pub fn into_source(self) -> Result<String> {
Ok(self.render()?)
}
pub fn debug_label(&self) -> Option<&str> {
Some("Shadow Generation VS")
}
}