pub const SHADER: &str = cranpose_ui_graphics::framework_shaders::SHAPE_WGSL;
pub const IMAGE_SHADER: &str = cranpose_ui_graphics::framework_shaders::IMAGE_WGSL;
pub const GLYPH_ATLAS_SHADER: &str = cranpose_ui_graphics::framework_shaders::GLYPH_ATLAS_WGSL;
pub const FULLSCREEN_QUAD_VS: &str =
cranpose_ui_graphics::framework_shaders::FULLSCREEN_QUAD_VS_WGSL;
pub const SDF_ROUNDED_RECT_FN: &str =
cranpose_ui_graphics::framework_shaders::SDF_ROUNDED_RECT_FN_WGSL;
pub const COMPOSITE_SAMPLE_FN: &str =
cranpose_ui_graphics::framework_shaders::COMPOSITE_SAMPLE_FN_WGSL;
pub(crate) const RUN_TABLE_DECLARATIONS: [(&str, &str); 3] = [
(
"var<uniform> brushes: array<BrushRecord, 256>;",
"var<storage, read> brushes: array<BrushRecord>;",
),
(
"var<uniform> gradient_stops: array<GradientStop, 256>;",
"var<storage, read> gradient_stops: array<GradientStop>;",
),
(
"var<uniform> placements: array<Placement, 4>;",
"var<storage, read> placements: array<Placement>;",
),
];
pub(crate) fn storage_shape_shader() -> String {
let mut source = SHADER.to_string();
for (uniform, storage) in RUN_TABLE_DECLARATIONS {
assert!(
source.contains(uniform),
"shape.wgsl must declare `{uniform}`"
);
source = source.replace(uniform, storage);
}
source
}
pub fn blur_shader() -> String {
format!(
"{FULLSCREEN_QUAD_VS}{}",
cranpose_ui_graphics::framework_shaders::BLUR_FS_WGSL
)
}
pub fn offset_shader() -> String {
format!(
"{FULLSCREEN_QUAD_VS}{}",
cranpose_ui_graphics::framework_shaders::OFFSET_FS_WGSL
)
}
pub fn blit_shader() -> String {
let mut shader = format!(
"{FULLSCREEN_QUAD_VS}{SDF_ROUNDED_RECT_FN}{}",
cranpose_ui_graphics::framework_shaders::BLIT_FS_WGSL
);
shader.push_str(COMPOSITE_SAMPLE_FN);
shader.push_str(cranpose_ui_graphics::framework_shaders::BLIT_FS_MAIN_WGSL);
shader
}
pub fn projective_blit_shader() -> String {
let mut shader = cranpose_ui_graphics::framework_shaders::PROJECTIVE_BLIT_FS_WGSL.to_string();
shader.push_str(COMPOSITE_SAMPLE_FN);
shader.push_str(cranpose_ui_graphics::framework_shaders::PROJECTIVE_BLIT_MAIN_WGSL);
shader
}
#[cfg(test)]
#[path = "tests/shaders_tests.rs"]
mod tests;