15
15
#include < gf2/graphics/RenderRecorder.h>
16
16
#include < gf2/graphics/Scene.h>
17
17
#include < gf2/graphics/Vertex.h>
18
+ #include " gf2/graphics/Descriptor.h"
18
19
19
20
namespace gf {
20
21
@@ -115,6 +116,13 @@ namespace gf {
115
116
} else if (record.type == RenderRecorder::RecordType::Scissor) {
116
117
assert (record.index < recorder.m_scissors .size ());
117
118
command_buffer.set_scissor (recorder.m_scissors [record.index ].scissor );
119
+ } else if (record.type == RenderRecorder::RecordType::Text) {
120
+ assert (record.index < recorder.m_texts .size ());
121
+ auto text = recorder.m_texts [record.index ];
122
+
123
+ auto text_descriptor = m_render_manager.allocate_descriptor_for_layout (&m_text_descriptor_layout);
124
+ text_descriptor.write (0 , &recorder.m_text_effect_buffers [text.text_effect_buffer_index ]);
125
+ command_buffer.bind_descriptor (&m_text_pipeline_layout, 2 , text_descriptor);
118
126
} else if (record.type == RenderRecorder::RecordType::Object) {
119
127
assert (record.index < recorder.m_objects .size ());
120
128
render_object (command_buffer, recorder.m_objects [record.index ]);
@@ -182,6 +190,14 @@ namespace gf {
182
190
183
191
m_sampler_descriptor_layout = DescriptorLayout (sampler_binding, render_manager ());
184
192
193
+ // text_descriptor_layout
194
+
195
+ const DescriptorBinding text_binding[] = {
196
+ { 0 , DescriptorType::Buffer, ShaderStage::Fragment }
197
+ };
198
+
199
+ m_text_descriptor_layout = DescriptorLayout (text_binding, render_manager ());
200
+
185
201
// default pipeline layout
186
202
187
203
RenderPipelineLayoutBuilder default_pipeline_layout_builder;
@@ -193,6 +209,18 @@ namespace gf {
193
209
m_default_pipeline_layout = default_pipeline_layout_builder.build (render_manager ());
194
210
m_default_pipeline_layout.set_debug_name (" [gf2] Default Pipeline Layout" );
195
211
212
+ // text pipeline layout
213
+
214
+ RenderPipelineLayoutBuilder text_pipeline_layout_builder;
215
+
216
+ text_pipeline_layout_builder.set_push_constant_parameters (ShaderStage::Vertex, sizeof (float ) * 16 )
217
+ .add_descriptor_layout (&m_camera_descriptor_layout)
218
+ .add_descriptor_layout (&m_sampler_descriptor_layout)
219
+ .add_descriptor_layout (&m_text_descriptor_layout);
220
+
221
+ m_text_pipeline_layout = text_pipeline_layout_builder.build (render_manager ());
222
+ m_text_pipeline_layout.set_debug_name (" [gf2] Text Pipeline Layout" );
223
+
196
224
// fullscreen pipeline layout
197
225
198
226
RenderPipelineLayoutBuilder fullscreen_pipeline_layout_builder;
@@ -219,7 +247,7 @@ namespace gf {
219
247
text_pipeline_builder.set_vertex_input (Vertex::compute_input ())
220
248
.add_shader (ShaderStage::Vertex, gf::span (default_vert_shader_code))
221
249
.add_shader (ShaderStage::Fragment, gf::span (text_frag_shader_code))
222
- .set_pipeline_layout (&m_default_pipeline_layout );
250
+ .set_pipeline_layout (&m_text_pipeline_layout );
223
251
224
252
m_text_pipeline = text_pipeline_builder.build (render_manager ());
225
253
m_text_pipeline.set_debug_name (" [gf2] Text Pipeline" );
0 commit comments