Skip to content

Commit 7125638

Browse files
committed
[update] builders to accept the gpu and other resources directly to prepare for generalizing render contexts.
1 parent 1020d1e commit 7125638

16 files changed

+232
-132
lines changed

crates/lambda-rs/examples/indexed_multi_vertex_buffers.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,11 @@ impl Component<ComponentResult, String> for IndexedMultiBufferExample {
111111
&mut self,
112112
render_context: &mut RenderContext,
113113
) -> Result<ComponentResult, String> {
114-
let render_pass = RenderPassBuilder::new().build(render_context);
114+
let render_pass = RenderPassBuilder::new().build(
115+
render_context.gpu(),
116+
render_context.surface_format(),
117+
render_context.depth_format(),
118+
);
115119

116120
// Quad composed from two triangles in clip space.
117121
let positions: Vec<PositionVertex> = vec![
@@ -153,15 +157,15 @@ impl Component<ComponentResult, String> for IndexedMultiBufferExample {
153157
.with_properties(Properties::DEVICE_LOCAL)
154158
.with_buffer_type(BufferType::Vertex)
155159
.with_label("indexed-positions")
156-
.build(render_context, positions)
160+
.build(render_context.gpu(), positions)
157161
.map_err(|e| e.to_string())?;
158162

159163
let color_buffer = BufferBuilder::new()
160164
.with_usage(Usage::VERTEX)
161165
.with_properties(Properties::DEVICE_LOCAL)
162166
.with_buffer_type(BufferType::Vertex)
163167
.with_label("indexed-colors")
164-
.build(render_context, colors)
168+
.build(render_context.gpu(), colors)
165169
.map_err(|e| e.to_string())?;
166170

167171
// Build a 16-bit index buffer.
@@ -170,7 +174,7 @@ impl Component<ComponentResult, String> for IndexedMultiBufferExample {
170174
.with_properties(Properties::DEVICE_LOCAL)
171175
.with_buffer_type(BufferType::Index)
172176
.with_label("indexed-indices")
173-
.build(render_context, indices)
177+
.build(render_context.gpu(), indices)
174178
.map_err(|e| e.to_string())?;
175179

176180
let pipeline = RenderPipelineBuilder::new()
@@ -198,7 +202,9 @@ impl Component<ComponentResult, String> for IndexedMultiBufferExample {
198202
}],
199203
)
200204
.build(
201-
render_context,
205+
render_context.gpu(),
206+
render_context.surface_format(),
207+
render_context.depth_format(),
202208
&render_pass,
203209
&self.vertex_shader,
204210
Some(&self.fragment_shader),

crates/lambda-rs/examples/instanced_quads.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,11 @@ impl Component<ComponentResult, String> for InstancedQuadsExample {
116116
&mut self,
117117
render_context: &mut RenderContext,
118118
) -> Result<ComponentResult, String> {
119-
let render_pass = RenderPassBuilder::new().build(render_context);
119+
let render_pass = RenderPassBuilder::new().build(
120+
render_context.gpu(),
121+
render_context.surface_format(),
122+
render_context.depth_format(),
123+
);
120124

121125
// Quad geometry in clip space centered at the origin.
122126
let quad_vertices: Vec<QuadVertex> = vec![
@@ -168,23 +172,23 @@ impl Component<ComponentResult, String> for InstancedQuadsExample {
168172
.with_properties(Properties::DEVICE_LOCAL)
169173
.with_buffer_type(BufferType::Vertex)
170174
.with_label("instanced-quads-vertices")
171-
.build(render_context, quad_vertices)
175+
.build(render_context.gpu(), quad_vertices)
172176
.map_err(|error| error.to_string())?;
173177

174178
let instance_buffer = BufferBuilder::new()
175179
.with_usage(Usage::VERTEX)
176180
.with_properties(Properties::DEVICE_LOCAL)
177181
.with_buffer_type(BufferType::Vertex)
178182
.with_label("instanced-quads-instances")
179-
.build(render_context, instances)
183+
.build(render_context.gpu(), instances)
180184
.map_err(|error| error.to_string())?;
181185

182186
let index_buffer = BufferBuilder::new()
183187
.with_usage(Usage::INDEX)
184188
.with_properties(Properties::DEVICE_LOCAL)
185189
.with_buffer_type(BufferType::Index)
186190
.with_label("instanced-quads-indices")
187-
.build(render_context, indices)
191+
.build(render_context.gpu(), indices)
188192
.map_err(|error| error.to_string())?;
189193

190194
// Vertex attributes for per-vertex positions in slot 0.
@@ -222,7 +226,9 @@ impl Component<ComponentResult, String> for InstancedQuadsExample {
222226
.with_buffer(vertex_buffer, vertex_attributes)
223227
.with_instance_buffer(instance_buffer, instance_attributes)
224228
.build(
225-
render_context,
229+
render_context.gpu(),
230+
render_context.surface_format(),
231+
render_context.depth_format(),
226232
&render_pass,
227233
&self.vertex_shader,
228234
Some(&self.fragment_shader),

crates/lambda-rs/examples/push_constants.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,11 @@ impl Component<ComponentResult, String> for PushConstantsExample {
126126
&mut self,
127127
render_context: &mut lambda::render::RenderContext,
128128
) -> Result<ComponentResult, String> {
129-
let render_pass = RenderPassBuilder::new().build(render_context);
129+
let render_pass = RenderPassBuilder::new().build(
130+
render_context.gpu(),
131+
render_context.surface_format(),
132+
render_context.depth_format(),
133+
);
130134
let push_constant_size = std::mem::size_of::<PushConstant>() as u32;
131135

132136
// Create triangle mesh.
@@ -188,11 +192,18 @@ impl Component<ComponentResult, String> for PushConstantsExample {
188192
.with_culling(lambda::render::pipeline::CullingMode::None)
189193
.with_push_constant(PipelineStage::VERTEX, push_constant_size)
190194
.with_buffer(
191-
BufferBuilder::build_from_mesh(&mesh, render_context)
195+
BufferBuilder::build_from_mesh(&mesh, render_context.gpu())
192196
.expect("Failed to create buffer"),
193197
mesh.attributes().to_vec(),
194198
)
195-
.build(render_context, &render_pass, &self.shader, Some(&self.fs));
199+
.build(
200+
render_context.gpu(),
201+
render_context.surface_format(),
202+
render_context.depth_format(),
203+
&render_pass,
204+
&self.shader,
205+
Some(&self.fs),
206+
);
196207

197208
self.render_pass = Some(render_context.attach_render_pass(render_pass));
198209
self.render_pipeline = Some(render_context.attach_pipeline(pipeline));

crates/lambda-rs/examples/reflective_room.rs

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,11 @@ impl ReflectiveRoomExample {
587587
.with_stencil_clear(0)
588588
.with_multi_sample(self.msaa_samples)
589589
.without_color()
590-
.build(render_context),
590+
.build(
591+
render_context.gpu(),
592+
render_context.surface_format(),
593+
render_context.depth_format(),
594+
),
591595
)
592596
} else {
593597
None
@@ -606,7 +610,11 @@ impl ReflectiveRoomExample {
606610
if self.stencil_enabled {
607611
rp_color_builder = rp_color_builder.with_stencil_load();
608612
}
609-
let rp_color_desc = rp_color_builder.build(render_context);
613+
let rp_color_desc = rp_color_builder.build(
614+
render_context.gpu(),
615+
render_context.surface_format(),
616+
render_context.depth_format(),
617+
);
610618

611619
// Floor mask pipeline (stencil write)
612620
self.pipe_floor_mask = if self.stencil_enabled {
@@ -626,7 +634,7 @@ impl ReflectiveRoomExample {
626634
.with_usage(Usage::VERTEX)
627635
.with_properties(Properties::DEVICE_LOCAL)
628636
.with_buffer_type(BufferType::Vertex)
629-
.build(render_context, floor_mesh.vertices().to_vec())
637+
.build(render_context.gpu(), floor_mesh.vertices().to_vec())
630638
.map_err(|e| format!("Failed to create floor buffer: {}", e))?,
631639
floor_mesh.attributes().to_vec(),
632640
)
@@ -648,7 +656,9 @@ impl ReflectiveRoomExample {
648656
})
649657
.with_multi_sample(self.msaa_samples)
650658
.build(
651-
render_context,
659+
render_context.gpu(),
660+
render_context.surface_format(),
661+
render_context.depth_format(),
652662
rp_mask_desc
653663
.as_ref()
654664
.expect("mask pass missing for stencil"),
@@ -676,7 +686,7 @@ impl ReflectiveRoomExample {
676686
.with_usage(Usage::VERTEX)
677687
.with_properties(Properties::DEVICE_LOCAL)
678688
.with_buffer_type(BufferType::Vertex)
679-
.build(render_context, cube_mesh.vertices().to_vec())
689+
.build(render_context.gpu(), cube_mesh.vertices().to_vec())
680690
.map_err(|e| format!("Failed to create cube buffer: {}", e))?,
681691
cube_mesh.attributes().to_vec(),
682692
)
@@ -702,7 +712,9 @@ impl ReflectiveRoomExample {
702712
.with_depth_write(false)
703713
.with_depth_compare(CompareFunction::Always);
704714
let p = builder.build(
705-
render_context,
715+
render_context.gpu(),
716+
render_context.surface_format(),
717+
render_context.depth_format(),
706718
&rp_color_desc,
707719
&self.shader_vs,
708720
Some(&self.shader_fs_lit),
@@ -727,7 +739,7 @@ impl ReflectiveRoomExample {
727739
.with_usage(Usage::VERTEX)
728740
.with_properties(Properties::DEVICE_LOCAL)
729741
.with_buffer_type(BufferType::Vertex)
730-
.build(render_context, floor_mesh.vertices().to_vec())
742+
.build(render_context.gpu(), floor_mesh.vertices().to_vec())
731743
.map_err(|e| format!("Failed to create floor buffer: {}", e))?,
732744
floor_mesh.attributes().to_vec(),
733745
)
@@ -743,7 +755,9 @@ impl ReflectiveRoomExample {
743755
});
744756
}
745757
let floor_pipe = floor_builder.build(
746-
render_context,
758+
render_context.gpu(),
759+
render_context.surface_format(),
760+
render_context.depth_format(),
747761
&rp_color_desc,
748762
&self.shader_vs,
749763
Some(&self.shader_fs_floor),
@@ -763,7 +777,7 @@ impl ReflectiveRoomExample {
763777
.with_usage(Usage::VERTEX)
764778
.with_properties(Properties::DEVICE_LOCAL)
765779
.with_buffer_type(BufferType::Vertex)
766-
.build(render_context, cube_mesh.vertices().to_vec())
780+
.build(render_context.gpu(), cube_mesh.vertices().to_vec())
767781
.map_err(|e| format!("Failed to create cube buffer: {}", e))?,
768782
cube_mesh.attributes().to_vec(),
769783
)
@@ -779,7 +793,9 @@ impl ReflectiveRoomExample {
779793
});
780794
}
781795
let normal_pipe = normal_builder.build(
782-
render_context,
796+
render_context.gpu(),
797+
render_context.surface_format(),
798+
render_context.depth_format(),
783799
&rp_color_desc,
784800
&self.shader_vs,
785801
Some(&self.shader_fs_lit),

crates/lambda-rs/examples/textured_cube.rs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,11 @@ impl Component<ComponentResult, String> for TexturedCubeExample {
172172
let render_pass = RenderPassBuilder::new()
173173
.with_label("textured-cube-pass")
174174
.with_depth()
175-
.build(render_context);
175+
.build(
176+
render_context.gpu(),
177+
render_context.surface_format(),
178+
render_context.depth_format(),
179+
);
176180

177181
let mut shader_builder = ShaderBuilder::new();
178182
let shader_vs = shader_builder.build(VirtualShader::Source {
@@ -310,32 +314,41 @@ impl Component<ComponentResult, String> for TexturedCubeExample {
310314
.with_size(tex_w, tex_h)
311315
.with_data(&pixels)
312316
.with_label("checkerboard")
313-
.build(render_context)
317+
.build(render_context.gpu())
314318
.expect("Failed to create 2D texture");
315-
let sampler = SamplerBuilder::new().linear_clamp().build(render_context);
319+
let sampler = SamplerBuilder::new()
320+
.linear_clamp()
321+
.build(render_context.gpu());
316322

317323
let layout = BindGroupLayoutBuilder::new()
318324
.with_sampled_texture(1)
319325
.with_sampler(2)
320-
.build(render_context);
326+
.build(render_context.gpu());
321327
let bind_group = BindGroupBuilder::new()
322328
.with_layout(&layout)
323329
.with_texture(1, &texture2d)
324330
.with_sampler(2, &sampler)
325-
.build(render_context);
331+
.build(render_context.gpu());
326332

327333
let push_constants_size = std::mem::size_of::<PushConstant>() as u32;
328334
let pipeline = RenderPipelineBuilder::new()
329335
.with_culling(lambda::render::pipeline::CullingMode::Back)
330336
.with_depth()
331337
.with_push_constant(PipelineStage::VERTEX, push_constants_size)
332338
.with_buffer(
333-
BufferBuilder::build_from_mesh(&mesh, render_context)
339+
BufferBuilder::build_from_mesh(&mesh, render_context.gpu())
334340
.expect("Failed to create vertex buffer"),
335341
mesh.attributes().to_vec(),
336342
)
337343
.with_layouts(&[&layout])
338-
.build(render_context, &render_pass, &shader_vs, Some(&shader_fs));
344+
.build(
345+
render_context.gpu(),
346+
render_context.surface_format(),
347+
render_context.depth_format(),
348+
&render_pass,
349+
&shader_vs,
350+
Some(&shader_fs),
351+
);
339352

340353
self.render_pass = Some(render_context.attach_render_pass(render_pass));
341354
self.render_pipeline = Some(render_context.attach_pipeline(pipeline));

crates/lambda-rs/examples/textured_quad.rs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,11 @@ impl Component<ComponentResult, String> for TexturedQuadExample {
106106
// Build render pass and shaders
107107
let render_pass = RenderPassBuilder::new()
108108
.with_label("textured-quad-pass")
109-
.build(render_context);
109+
.build(
110+
render_context.gpu(),
111+
render_context.surface_format(),
112+
render_context.depth_format(),
113+
);
110114

111115
let mut shader_builder = ShaderBuilder::new();
112116
let shader_vs = shader_builder.build(VirtualShader::Source {
@@ -209,35 +213,42 @@ impl Component<ComponentResult, String> for TexturedQuadExample {
209213
.with_size(tex_w, tex_h)
210214
.with_data(&pixels)
211215
.with_label("checkerboard")
212-
.build(render_context)
216+
.build(render_context.gpu())
213217
.expect("Failed to create texture");
214218

215219
let sampler = SamplerBuilder::new()
216220
.linear_clamp()
217221
.with_label("linear-clamp")
218-
.build(render_context);
222+
.build(render_context.gpu());
219223

220224
// Layout: binding(1) texture2D, binding(2) sampler
221225
let layout = BindGroupLayoutBuilder::new()
222226
.with_sampled_texture(1)
223227
.with_sampler(2)
224-
.build(render_context);
228+
.build(render_context.gpu());
225229

226230
let bind_group = BindGroupBuilder::new()
227231
.with_layout(&layout)
228232
.with_texture(1, &texture)
229233
.with_sampler(2, &sampler)
230-
.build(render_context);
234+
.build(render_context.gpu());
231235

232236
let pipeline = RenderPipelineBuilder::new()
233237
.with_culling(CullingMode::None)
234238
.with_layouts(&[&layout])
235239
.with_buffer(
236-
BufferBuilder::build_from_mesh(&mesh, render_context)
240+
BufferBuilder::build_from_mesh(&mesh, render_context.gpu())
237241
.expect("Failed to create vertex buffer"),
238242
mesh.attributes().to_vec(),
239243
)
240-
.build(render_context, &render_pass, &shader_vs, Some(&shader_fs));
244+
.build(
245+
render_context.gpu(),
246+
render_context.surface_format(),
247+
render_context.depth_format(),
248+
&render_pass,
249+
&shader_vs,
250+
Some(&shader_fs),
251+
);
241252

242253
self.render_pass = Some(render_context.attach_render_pass(render_pass));
243254
self.render_pipeline = Some(render_context.attach_pipeline(pipeline));

crates/lambda-rs/examples/triangle.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,16 @@ impl Component<ComponentResult, String> for DemoComponent {
4242
render_context: &mut RenderContext,
4343
) -> Result<ComponentResult, String> {
4444
logging::info!("Attached the demo component to the renderer");
45-
let render_pass =
46-
render_pass::RenderPassBuilder::new().build(&render_context);
45+
let render_pass = render_pass::RenderPassBuilder::new().build(
46+
render_context.gpu(),
47+
render_context.surface_format(),
48+
render_context.depth_format(),
49+
);
4750

4851
let pipeline = pipeline::RenderPipelineBuilder::new().build(
49-
render_context,
52+
render_context.gpu(),
53+
render_context.surface_format(),
54+
render_context.depth_format(),
5055
&render_pass,
5156
&self.vertex_shader,
5257
Some(&self.fragment_shader),

0 commit comments

Comments
 (0)