| 70 | } |
| 71 | |
| 72 | skr_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 | } |
no test coverage detected