use bevy::prelude::*;
use bevy::render::render_resource::{AsBindGroup, ShaderType};
use bevy::shader::ShaderRef;
#[derive(Debug, Clone, Copy, ShaderType)]
pub struct GridScalarUniforms {
pub origin_counts: Vec4,
pub grid_params: Vec4,
pub scene_origin: Vec4,
pub value_params: Vec4,
pub base_altitude: Vec4,
}
impl Default for GridScalarUniforms {
fn default() -> Self {
Self {
origin_counts: Vec4::ZERO,
grid_params: Vec4::ZERO,
scene_origin: Vec4::ZERO,
value_params: Vec4::new(0.0, 1.0, 0.0, 0.0),
base_altitude: Vec4::ZERO,
}
}
}
#[derive(Asset, AsBindGroup, TypePath, Debug, Clone)]
pub struct GridScalarMaterial {
#[uniform(0)]
pub grid: GridScalarUniforms,
#[texture(1, sample_type = "float", filterable = false)]
pub scalar_texture: Handle<Image>,
#[texture(2)]
#[sampler(3)]
pub ramp_texture: Handle<Image>,
}
impl Material for GridScalarMaterial {
fn vertex_shader() -> ShaderRef {
"embedded://rustial_renderer_bevy/shaders/grid_scalar_overlay.wgsl".into()
}
fn fragment_shader() -> ShaderRef {
"embedded://rustial_renderer_bevy/shaders/grid_scalar_overlay.wgsl".into()
}
fn alpha_mode(&self) -> AlphaMode {
AlphaMode::Blend
}
fn enable_prepass() -> bool {
false
}
fn enable_shadows() -> bool {
false
}
fn specialize(
_pipeline: &bevy::pbr::MaterialPipeline,
descriptor: &mut bevy::render::render_resource::RenderPipelineDescriptor,
_layout: &bevy::mesh::MeshVertexBufferLayoutRef,
_key: bevy::pbr::MaterialPipelineKey<Self>,
) -> Result<(), bevy::render::render_resource::SpecializedMeshPipelineError> {
descriptor.primitive.cull_mode = None;
Ok(())
}
}