ranim_render/pipelines/
debug.rs

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