1use std::ptr;
2
3pub struct DummyResources {
4 pub size: blade_graphics::Extent,
5 pub white_texture: blade_graphics::Texture,
6 pub white_view: blade_graphics::TextureView,
7 pub black_texture: blade_graphics::Texture,
8 pub black_view: blade_graphics::TextureView,
9 pub red_texture: blade_graphics::Texture,
10 pub red_view: blade_graphics::TextureView,
11 staging_buf: blade_graphics::Buffer,
12}
13
14impl DummyResources {
15 pub fn new(
16 command_encoder: &mut blade_graphics::CommandEncoder,
17 gpu: &blade_graphics::Context,
18 ) -> Self {
19 let size = blade_graphics::Extent {
20 width: 1,
21 height: 1,
22 depth: 1,
23 };
24 let white_texture = gpu.create_texture(blade_graphics::TextureDesc {
25 name: "dummy/white",
26 format: blade_graphics::TextureFormat::Rgba8Unorm,
27 size,
28 array_layer_count: 1,
29 mip_level_count: 1,
30 dimension: blade_graphics::TextureDimension::D2,
31 usage: blade_graphics::TextureUsage::COPY | blade_graphics::TextureUsage::RESOURCE,
32 sample_count: 1,
33 });
34 let white_view = gpu.create_texture_view(
35 white_texture,
36 blade_graphics::TextureViewDesc {
37 name: "dummy/white",
38 format: blade_graphics::TextureFormat::Rgba8Unorm,
39 dimension: blade_graphics::ViewDimension::D2,
40 subresources: &blade_graphics::TextureSubresources::default(),
41 },
42 );
43 let black_texture = gpu.create_texture(blade_graphics::TextureDesc {
44 name: "dummy/black",
45 format: blade_graphics::TextureFormat::Rgba8Unorm,
46 size,
47 array_layer_count: 1,
48 mip_level_count: 1,
49 dimension: blade_graphics::TextureDimension::D2,
50 usage: blade_graphics::TextureUsage::COPY | blade_graphics::TextureUsage::RESOURCE,
51 sample_count: 1,
52 });
53 let black_view = gpu.create_texture_view(
54 black_texture,
55 blade_graphics::TextureViewDesc {
56 name: "dummy/black",
57 format: blade_graphics::TextureFormat::Rgba8Unorm,
58 dimension: blade_graphics::ViewDimension::D2,
59 subresources: &blade_graphics::TextureSubresources::default(),
60 },
61 );
62 let red_texture = gpu.create_texture(blade_graphics::TextureDesc {
63 name: "dummy/red",
64 format: blade_graphics::TextureFormat::Rgba8Unorm,
65 size,
66 array_layer_count: 1,
67 mip_level_count: 1,
68 dimension: blade_graphics::TextureDimension::D2,
69 usage: blade_graphics::TextureUsage::COPY | blade_graphics::TextureUsage::RESOURCE,
70 sample_count: 1,
71 });
72 let red_view = gpu.create_texture_view(
73 red_texture,
74 blade_graphics::TextureViewDesc {
75 name: "dummy/red",
76 format: blade_graphics::TextureFormat::Rgba8Unorm,
77 dimension: blade_graphics::ViewDimension::D2,
78 subresources: &blade_graphics::TextureSubresources::default(),
79 },
80 );
81
82 command_encoder.init_texture(white_texture);
83 command_encoder.init_texture(black_texture);
84 command_encoder.init_texture(red_texture);
85 let mut transfers = command_encoder.transfer("init dummy");
86 let staging_buf = gpu.create_buffer(blade_graphics::BufferDesc {
87 name: "dummy/staging",
88 size: 4 * 3,
89 memory: blade_graphics::Memory::Upload,
90 });
91 unsafe {
92 ptr::write(
93 staging_buf.data() as *mut _,
94 [!0u8, !0, !0, !0, 0, 0, 0, 0, !0, 0, 0, 0],
95 );
96 }
97 transfers.copy_buffer_to_texture(staging_buf.at(0), 4, white_texture.into(), size);
98 transfers.copy_buffer_to_texture(staging_buf.at(4), 4, black_texture.into(), size);
99 transfers.copy_buffer_to_texture(staging_buf.at(8), 4, red_texture.into(), size);
100
101 Self {
102 size,
103 white_texture,
104 white_view,
105 black_texture,
106 black_view,
107 red_texture,
108 red_view,
109 staging_buf,
110 }
111 }
112
113 pub fn destroy(&mut self, gpu: &blade_graphics::Context) {
114 gpu.destroy_texture_view(self.white_view);
115 gpu.destroy_texture(self.white_texture);
116 gpu.destroy_texture_view(self.black_view);
117 gpu.destroy_texture(self.black_texture);
118 gpu.destroy_texture_view(self.red_view);
119 gpu.destroy_texture(self.red_texture);
120 gpu.destroy_buffer(self.staging_buf);
121 }
122}