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

Method produce_draw_packets

modules/render/renderer/src/render_mesh.cpp:72–107  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

70}
71
72skr_primitive_draw_packet_t IMeshRenderEffect::produce_draw_packets(const skr_primitive_draw_context_t* context) SKR_NOEXCEPT
73{
74 auto pass = context->pass;
75 auto storage = context->storage; (void)storage;
76
77 skr_primitive_draw_packet_t packet = {}; (void)packet;
78 // 0. only produce for forward pass
79 // TODO: refactor this to support multi-pass rendering
80 if (strcmp((const char*)pass->identity(), (const char*)u8"ForwardPass") != 0) return {};
81 // 1. calculate primitive count
82 uint32_t primitiveCount = 0;
83 auto counterF = [&](sugoi_chunk_view_t* r_cv) {
84 SkrZoneScopedN("PreCalculateDrawCallCount");
85 const skr::renderer::MeshComponent* meshes = nullptr;
86 {
87 SkrZoneScopedN("FetchRenderMeshes");
88 meshes = sugoi::get_component_ro<skr::renderer::MeshComponent>(r_cv);
89 }
90 for (uint32_t i = 0; i < r_cv->count; i++)
91 {
92 auto status = meshes[i].mesh_resource.get_status();
93 if (status == SKR_LOADING_STATUS_INSTALLED)
94 {
95 auto resourcePtr = (skr_mesh_resource_t*)meshes[i].mesh_resource.get_ptr();
96 auto renderMesh = resourcePtr->render_mesh;
97 primitiveCount += (uint32_t)renderMesh->primitive_commands.size();
98 }
99 else
100 {
101 primitiveCount++;
102 }
103 }
104 }; (void)counterF;
105
106 return {};
107}

Callers 2

produce_draw_packetsFunction · 0.45
renderFunction · 0.45

Calls 4

identityMethod · 0.45
get_statusMethod · 0.45
get_ptrMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected