@@ -2,6 +2,7 @@ use lambda::{
22 core:: {
33 component:: Component ,
44 render:: {
5+ buffer:: BufferBuilder ,
56 command:: RenderCommand ,
67 mesh:: MeshBuilder ,
78 pipeline:: RenderPipelineBuilder ,
@@ -10,7 +11,11 @@ use lambda::{
1011 Shader ,
1112 ShaderBuilder ,
1213 } ,
13- vertex:: VertexBuilder ,
14+ vertex:: {
15+ VertexAttribute ,
16+ VertexBuilder ,
17+ VertexElement ,
18+ } ,
1419 viewport,
1520 ResourceId ,
1621 } ,
@@ -24,7 +29,10 @@ use lambda::{
2429 runtimes:: GenericRuntimeBuilder ,
2530} ;
2631use lambda_platform:: {
27- gfx:: pipeline:: PipelineStage ,
32+ gfx:: {
33+ pipeline:: PipelineStage ,
34+ surface:: ColorFormat ,
35+ } ,
2836 shaderc:: {
2937 ShaderKind ,
3038 VirtualShader ,
@@ -82,14 +90,8 @@ impl Component for PushConstantsExample {
8290 & mut self ,
8391 render_context : & mut lambda:: core:: render:: RenderContext ,
8492 ) {
85- let render_pass = RenderPassBuilder :: new ( ) . build ( & render_context) ;
93+ let render_pass = RenderPassBuilder :: new ( ) . build ( render_context) ;
8694 let push_constant_size = std:: mem:: size_of :: < PushConstant > ( ) as u32 ;
87- let pipeline = RenderPipelineBuilder :: new ( )
88- . with_push_constant ( PipelineStage :: VERTEX , push_constant_size)
89- . build ( render_context, & render_pass, & self . shader , None ) ;
90-
91- self . render_pass = Some ( render_context. attach_render_pass ( render_pass) ) ;
92- self . render_pipeline = Some ( render_context. attach_pipeline ( pipeline) ) ;
9395
9496 // Create triangle mesh.
9597 let vertices = [
@@ -114,6 +116,39 @@ impl Component for PushConstantsExample {
114116 vertices. iter ( ) . for_each ( |vertex| {
115117 mesh_builder. with_vertex ( vertex. clone ( ) ) ;
116118 } ) ;
119+
120+ let mesh = mesh_builder
121+ . with_attributes ( vec ! [
122+ VertexAttribute {
123+ location: 0 ,
124+ offset: 0 ,
125+ element: VertexElement {
126+ format: ColorFormat :: Rgb32Sfloat ,
127+ offset: 0 ,
128+ } ,
129+ } ,
130+ VertexAttribute {
131+ location: 1 ,
132+ offset: 0 ,
133+ element: VertexElement {
134+ format: ColorFormat :: Rgb32Sfloat ,
135+ offset: 12 ,
136+ } ,
137+ } ,
138+ ] )
139+ . build ( ) ;
140+
141+ let pipeline = RenderPipelineBuilder :: new ( )
142+ . with_push_constant ( PipelineStage :: VERTEX , push_constant_size)
143+ . with_buffer (
144+ BufferBuilder :: build_from_mesh ( & mesh, render_context)
145+ . expect ( "Failed to create buffer" ) ,
146+ mesh. attributes ( ) . to_vec ( ) ,
147+ )
148+ . build ( render_context, & render_pass, & self . shader , None ) ;
149+
150+ self . render_pass = Some ( render_context. attach_render_pass ( render_pass) ) ;
151+ self . render_pipeline = Some ( render_context. attach_pipeline ( pipeline) ) ;
117152 }
118153
119154 fn on_detach (
0 commit comments