ranim_render/pipelines/
debug.rs

1use std::ops::Deref;
2
3use glam::Vec4;
4
5use crate::{OUTPUT_TEXTURE_FORMAT, RenderResource, WgpuContext};
6
7#[allow(unused)]
8pub struct DebugPipeline {
9    pipeline: wgpu::RenderPipeline,
10}
11
12impl Deref for DebugPipeline {
13    type Target = wgpu::RenderPipeline;
14    fn deref(&self) -> &Self::Target {
15        &self.pipeline
16    }
17}
18
19impl RenderResource for DebugPipeline {
20    fn new(wgpu_ctx: &WgpuContext) -> Self {
21        let WgpuContext { device, .. } = wgpu_ctx;
22
23        let module = &device.create_shader_module(wgpu::include_wgsl!("./shaders/debug.wgsl"));
24
25        let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
26            label: Some("Debug Pipeline Layout"),
27            bind_group_layouts: &[],
28            push_constant_ranges: &[],
29        });
30        let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
31            label: Some("Debug Pipeline"),
32            layout: Some(&pipeline_layout),
33            vertex: wgpu::VertexState {
34                module,
35                entry_point: Some("vs_main"),
36                buffers: &[wgpu::VertexBufferLayout {
37                    array_stride: std::mem::size_of::<Vec4>() as u64,
38                    step_mode: wgpu::VertexStepMode::Vertex,
39                    attributes: &[wgpu::VertexAttribute {
40                        shader_location: 0,
41                        format: wgpu::VertexFormat::Float32x4,
42                        offset: 0,
43                    }],
44                }],
45                compilation_options: wgpu::PipelineCompilationOptions::default(),
46            },
47            fragment: Some(wgpu::FragmentState {
48                module,
49                entry_point: Some("fs_main"),
50                compilation_options: wgpu::PipelineCompilationOptions::default(),
51                targets: &[Some(wgpu::ColorTargetState {
52                    format: OUTPUT_TEXTURE_FORMAT,
53                    blend: Some(wgpu::BlendState::ALPHA_BLENDING),
54                    write_mask: wgpu::ColorWrites::ALL,
55                })],
56            }),
57            primitive: wgpu::PrimitiveState {
58                topology: wgpu::PrimitiveTopology::PointList,
59                ..Default::default()
60            },
61            depth_stencil: None,
62            multisample: wgpu::MultisampleState {
63                count: 4,
64                mask: !0,
65                alpha_to_coverage_enabled: false,
66            },
67            multiview: None,
68            cache: None,
69        });
70
71        Self { pipeline }
72    }
73}