MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / _render

Method _render

modules/gui/renderer/src/render/skr_render_window.cpp:374–460  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

372 });
373}
374void SkrRenderWindow::_render()
375{
376 auto rg = _owner->render_graph();
377 auto target = _back_buffer;
378 auto depth = _depth_buffer;
379
380 // TODO. multi pass
381 rg->add_render_pass(
382 [&](render_graph::RenderGraph& g, render_graph::RenderPassBuilder& builder) {
383 SkrZoneScopedN("ConstructRenderPass");
384 const auto back_desc = g.resolve_descriptor(target);
385 builder.set_name(u8"gui_render_pass")
386 .use_buffer(_vertex_buffer, CGPU_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER)
387 .use_buffer(_transform_buffer, CGPU_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER)
388 .use_buffer(_projection_buffer, CGPU_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER)
389 .use_buffer(_render_data_buffer, CGPU_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER)
390 .use_buffer(_index_buffer, CGPU_RESOURCE_STATE_INDEX_BUFFER)
391 .set_depth_stencil(depth.clear_depth(1.f))
392 .write(0, target, CGPU_LOAD_ACTION_CLEAR);
393 if (back_desc->sample_count > 1)
394 {
395 skr::render_graph::TextureHandle real_target = rg->get_texture(u8"presentbuffer");
396 builder.resolve_msaa(0, real_target);
397 } },
398 [this, target](render_graph::RenderGraph& g, render_graph::RenderPassContext& ctx) {
399 SkrZoneScopedN("GUI-RenderPass");
400 const auto target_desc = g.resolve_descriptor(target);
401 auto resolved_ib = ctx.resolve(_index_buffer);
402 auto resolved_vb = ctx.resolve(_vertex_buffer);
403 auto resolved_tb = ctx.resolve(_transform_buffer);
404 auto resolved_pb = ctx.resolve(_projection_buffer);
405 auto resolved_rdata = ctx.resolve(_render_data_buffer);
406 CGPUBufferId vertex_streams[4] = { resolved_vb, resolved_tb, resolved_pb, resolved_rdata };
407 const uint32_t vertex_stream_strides[4] = { sizeof(PaintVertex), sizeof(rtm::matrix4x4f), sizeof(rtm::matrix4x4f), sizeof(skr_float4x4_t) };
408
409 cgpu_render_encoder_set_viewport(ctx.encoder,
410 0.0f, 0.0f,
411 (float)target_desc->width,
412 (float)target_desc->height,
413 0.f, 1.f);
414 cgpu_render_encoder_set_scissor(ctx.encoder,
415 0, 0,
416 (uint32_t)target_desc->width,
417 (uint32_t)target_desc->height);
418
419 SkrPipelineKey pipeline_key_cache = { ESkrPipelineFlag::__Count, CGPU_SAMPLE_COUNT_1 };
420
421 for (const auto& cmd : _commands)
422 {
423 const bool use_texture = cmd.texture && cmd.texture->state() == skr::gui::EResourceState::Okey;
424 SkrPipelineKey key = { cmd.pipeline_flags, target_desc->sample_count };
425 if (pipeline_key_cache != key)
426 {
427 CGPURenderPipelineId this_pipeline = _owner->get_pipeline(key.flags, key.sample_count);
428 cgpu_render_encoder_bind_pipeline(ctx.encoder, this_pipeline);
429 pipeline_key_cache = key;
430 }
431

Callers

nothing calls this directly

Tested by

no test coverage detected