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

Method on_update

samples/application/game/src/render/forward_pass.cpp:14–137  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12using namespace game;
13
14void RenderPassForward::on_update(const skr_primitive_pass_context_t* context)
15{
16 namespace rg = skr::render_graph;
17 SkrZoneScopedN("ForwardPass Update");
18
19 need_clear = true;
20
21 auto render_graph = context->render_graph;
22 auto storage = context->storage;
23
24 if (!anim_query)
25 {
26 auto sig = u8"[in]skr::renderer::MeshComponent, [in]skr::anim::AnimComponent";
27 *anim_query = sugoiQ_from_literal(storage, sig);
28 }
29 // upload skin mesh data
30 {
31 uint64_t skinVerticesSize = 0;
32 {
33 SkrZoneScopedN("CalculateSkinMeshSize");
34
35 auto calcUploadBufferSize = [&](sugoi_chunk_view_t* r_cv) {
36 const auto anims = sugoi::get_component_ro<skr::anim::AnimComponent>(r_cv);
37 for (uint32_t i = 0; i < r_cv->count; i++)
38 {
39 auto* anim = anims + i;
40 const bool use_dynamic_buffer = anim->use_dynamic_buffer;
41 if (use_dynamic_buffer) continue;
42 for (size_t j = 0u; j < anim->buffers.size(); j++)
43 {
44 skinVerticesSize += anim->buffers[j]->get_size();
45 }
46 }
47 };
48 sugoiQ_get_views(*anim_query, SUGOI_LAMBDA(calcUploadBufferSize));
49 }
50 if (skinVerticesSize == 0) return;
51
52 auto upload_buffer_handle = render_graph->create_buffer(
53 [=](rg::RenderGraph& g, rg::BufferBuilder& builder) {
54 builder.set_name(SKR_UTF8("SkinMeshUploadBuffer"))
55 .size(skinVerticesSize)
56 .with_tags(kRenderGraphDefaultResourceTag)
57 .as_upload_buffer();
58 });
59
60 render_graph->add_copy_pass(
61 [=](rg::RenderGraph& g, rg::CopyPassBuilder& builder) {
62 builder.set_name(SKR_UTF8("CopySkinMesh"))
63 .from_buffer(upload_buffer_handle.range(0, skinVerticesSize))
64 .can_be_lone();
65 },
66 [this, upload_buffer_handle](rg::RenderGraph& g, rg::CopyPassContext& context) {
67 SkrZoneScopedN("CopySkinMesh");
68
69 auto uploadVertices = [&](sugoi_chunk_view_t* r_cv) {
70 const skr::anim::AnimComponent* anims = nullptr;
71 {

Callers

nothing calls this directly

Calls 15

sugoiQ_from_literalFunction · 0.85
sugoiQ_get_viewsFunction · 0.85
memcpyFunction · 0.85
create_bufferMethod · 0.80
add_copy_passMethod · 0.80
sizeMethod · 0.45
get_sizeMethod · 0.45
set_nameMethod · 0.45
rangeMethod · 0.45
resolveMethod · 0.45

Tested by

no test coverage detected