MCPcopy Create free account
hub / github.com/defold/defold / FlushDebug

Function FlushDebug

engine/render/src/render/debug_renderer.cpp:242–297  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

240 }
241
242 void FlushDebug(HRenderContext render_context, uint32_t render_order)
243 {
244 if (!render_context->m_DebugRenderer.m_RenderContext)
245 return;
246 DebugRenderer& debug_renderer = render_context->m_DebugRenderer;
247 uint32_t total_vertex_count = 0;
248 uint32_t total_render_objects = 0;
249 dmGraphics::SetVertexBufferData(debug_renderer.m_VertexBuffer, 0, 0, dmGraphics::BUFFER_USAGE_STREAM_DRAW);
250 for (uint32_t i = 0; i < MAX_DEBUG_RENDER_TYPE_COUNT; ++i)
251 {
252 DebugRenderTypeData& type_data = debug_renderer.m_TypeData[i];
253 RenderObject& ro = type_data.m_RenderObject;
254 uint32_t vertex_count = ro.m_VertexCount;
255 if (vertex_count > 0)
256 {
257 ro.m_VertexStart = total_vertex_count;
258 total_vertex_count += vertex_count;
259 total_render_objects++;
260 }
261 }
262
263 dmGraphics::SetVertexBufferData(debug_renderer.m_VertexBuffer, total_vertex_count * sizeof(DebugVertex), 0, dmGraphics::BUFFER_USAGE_STREAM_DRAW);
264
265 dmRender::RenderListEntry* render_list = dmRender::RenderListAlloc(render_context, total_render_objects);
266 dmRender::HRenderListDispatch dispatch = dmRender::RenderListMakeDispatch(render_context, &DebugRenderListDispatch, &debug_renderer);
267 dmRender::RenderListEntry* write_ptr = render_list;
268
269 // Upgrade the batch key, since we might submit these render object multiple times
270 // during a frame (because render scripts might draw lines, and then we are forced to flush
271 // debug rendering during command queue execution, and thus submit the same objects again).
272 //
273 // TODO: Rewrite this so we can flush only what has been added since last time.
274 //
275 debug_renderer.m_RenderBatchVersion++;
276
277 for (uint32_t i = 0; i < MAX_DEBUG_RENDER_TYPE_COUNT; ++i)
278 {
279 DebugRenderTypeData& type_data = debug_renderer.m_TypeData[i];
280 RenderObject& ro = type_data.m_RenderObject;
281 uint32_t vertex_count = ro.m_VertexCount;
282 if (vertex_count > 0)
283 {
284 dmGraphics::SetVertexBufferSubData(debug_renderer.m_VertexBuffer, ro.m_VertexStart * sizeof(DebugVertex), vertex_count * sizeof(DebugVertex), type_data.m_ClientBuffer);
285 write_ptr->m_MinorOrder = 0;
286 write_ptr->m_MajorOrder = RENDER_ORDER_AFTER_WORLD;
287 write_ptr->m_Order = render_order;
288 write_ptr->m_UserData = (uintptr_t) &ro;
289 write_ptr->m_BatchKey = debug_renderer.m_RenderBatchVersion;
290 write_ptr->m_TagListKey = dmRender::GetMaterialTagListKey(ro.m_Material);
291 write_ptr->m_Dispatch = dispatch;
292 write_ptr++;
293 }
294 }
295
296 dmRender::RenderListSubmit(render_context, render_list, write_ptr);
297 }
298}

Callers 1

DrawRenderListFunction · 0.85

Calls 6

SetVertexBufferDataFunction · 0.85
RenderListAllocFunction · 0.85
RenderListMakeDispatchFunction · 0.85
SetVertexBufferSubDataFunction · 0.85
GetMaterialTagListKeyFunction · 0.85
RenderListSubmitFunction · 0.85

Tested by

no test coverage detected