use crate::{render::bind_group::AsBindGroup, RenderState};
pub struct SpriteMaterial {
pub texture_id: u32,
}
impl AsBindGroup for SpriteMaterial {
fn bind_group_layout(device: &wgpu::Device) -> wgpu::BindGroupLayout {
device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
label: None,
entries: &[
wgpu::BindGroupLayoutEntry {
binding: 0,
visibility: wgpu::ShaderStages::FRAGMENT,
ty: wgpu::BindingType::Texture {
sample_type: wgpu::TextureSampleType::Float { filterable: true },
view_dimension: wgpu::TextureViewDimension::D2,
multisampled: false,
},
count: None,
},
wgpu::BindGroupLayoutEntry {
binding: 1,
visibility: wgpu::ShaderStages::FRAGMENT,
ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering),
count: None,
},
],
})
}
fn as_bind_group(&self, render_state: &RenderState) -> wgpu::BindGroup {
render_state
.device
.create_bind_group(&wgpu::BindGroupDescriptor {
label: None,
layout: &Self::bind_group_layout(&render_state.device),
entries: &[
wgpu::BindGroupEntry {
binding: 0,
resource: wgpu::BindingResource::TextureView(
&render_state.textures[self.texture_id].texture_view,
),
},
wgpu::BindGroupEntry {
binding: 1,
resource: wgpu::BindingResource::Sampler(&render_state.default_sampler),
},
],
})
}
}