use askama::Template;
use crate::{
shaders::{AwsmShaderError, Result},
shadows::shader::custom_vertex_cache_key::ShaderCacheKeyShadowCustomVertex,
};
#[derive(Template, Debug)]
#[template(
path = "shadow_custom_vertex_wgsl/vertex.wgsl",
whitespace = "minimize"
)]
pub struct ShaderTemplateShadowCustomVertex {
instancing_transforms: bool,
max_morph_unroll: u32,
max_skin_unroll: u32,
texture_pool_arrays_len: u32,
texture_pool_samplers_len: u32,
dynamic_vertex_struct_decl: String,
dynamic_vertex_loader_decl: String,
dynamic_wgsl_vertex: String,
}
impl TryFrom<&ShaderCacheKeyShadowCustomVertex> for ShaderTemplateShadowCustomVertex {
type Error = AwsmShaderError;
fn try_from(value: &ShaderCacheKeyShadowCustomVertex) -> Result<Self> {
Ok(Self {
instancing_transforms: value.instancing_transforms,
max_morph_unroll: 2,
max_skin_unroll: 2,
texture_pool_arrays_len: value.texture_pool_arrays_len,
texture_pool_samplers_len: value.texture_pool_samplers_len,
dynamic_vertex_struct_decl: value.dynamic_vertex.struct_decl.clone(),
dynamic_vertex_loader_decl: value.dynamic_vertex.loader_decl.clone(),
dynamic_wgsl_vertex: value.dynamic_vertex.wgsl_vertex.clone(),
})
}
}
impl ShaderTemplateShadowCustomVertex {
pub fn into_source(self) -> Result<String> {
Ok(self.render()?)
}
pub fn debug_label(&self) -> Option<&str> {
Some("Shadow Custom Vertex VS")
}
}