Hide Storage from Primitive for type-safety

This commit is contained in:
Héctor Ramón Jiménez 2025-09-06 20:23:31 +02:00
parent 6a1cd02b3a
commit 53a98bf7de
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
5 changed files with 129 additions and 45 deletions

View file

@ -128,26 +128,25 @@ impl Primitive {
}
impl shader::Primitive for Primitive {
fn prepare(
type Renderer = Pipeline;
fn initialize(
&self,
device: &wgpu::Device,
queue: &wgpu::Queue,
format: wgpu::TextureFormat,
storage: &mut shader::Storage,
) -> Pipeline {
Pipeline::new(device, queue, format)
}
fn prepare(
&self,
pipeline: &mut Pipeline,
device: &wgpu::Device,
queue: &wgpu::Queue,
_bounds: &Rectangle,
viewport: &Viewport,
) {
if !storage.has::<Pipeline>() {
storage.store(Pipeline::new(
device,
queue,
format,
viewport.physical_size(),
));
}
let pipeline = storage.get_mut::<Pipeline>().unwrap();
// Upload data to GPU
pipeline.update(
device,
@ -161,14 +160,11 @@ impl shader::Primitive for Primitive {
fn render(
&self,
pipeline: &Pipeline,
encoder: &mut wgpu::CommandEncoder,
storage: &shader::Storage,
target: &wgpu::TextureView,
clip_bounds: &Rectangle<u32>,
) {
// At this point our pipeline should always be initialized
let pipeline = storage.get::<Pipeline>().unwrap();
// Render primitive
pipeline.render(
target,

View file

@ -32,7 +32,6 @@ impl Pipeline {
device: &wgpu::Device,
queue: &wgpu::Queue,
format: wgpu::TextureFormat,
target_size: Size<u32>,
) -> Self {
//vertices of one cube
let vertices =
@ -62,8 +61,8 @@ impl Pipeline {
let depth_texture = device.create_texture(&wgpu::TextureDescriptor {
label: Some("cubes depth texture"),
size: wgpu::Extent3d {
width: target_size.width,
height: target_size.height,
width: 1,
height: 1,
depth_or_array_layers: 1,
},
mip_level_count: 1,
@ -297,7 +296,7 @@ impl Pipeline {
uniforms,
uniform_bind_group,
vertices,
depth_texture_size: target_size,
depth_texture_size: Size::new(1, 1),
depth_view,
depth_pipeline,
}