.. _program_listing_file__home_runner_work_Legion-Engine_Legion-Engine_legion_engine_rendering_pipeline_default_stages_meshbatchingstage.cpp: Program Listing for File meshbatchingstage.cpp ============================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/home/runner/work/Legion-Engine/Legion-Engine/legion/engine/rendering/pipeline/default/stages/meshbatchingstage.cpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include namespace legion::rendering { void MeshBatchingStage::setup(app::window& context) { OPTICK_EVENT(); create_meta>>>("mesh batches"); } void MeshBatchingStage::render(app::window& context, camera& cam, const camera::camera_input& camInput, time::span deltaTime) { OPTICK_EVENT(); (void)deltaTime; (void)camInput; (void)cam; (void)context; static id_type batchesId = nameHash("mesh batches"); auto* batches = get_meta>>>(batchesId); static auto renderablesQuery = createQuery(); renderablesQuery.queryEntities(); auto& positions = renderablesQuery.get(); auto& rotations = renderablesQuery.get(); auto& scales = renderablesQuery.get(); auto& filters = renderablesQuery.get(); auto& renderers = renderablesQuery.get(); { OPTICK_EVENT("Clear instances"); for (auto [_, models] : *batches) for (auto [_, instances] : models) instances.clear(); } { OPTICK_EVENT("Calculate instances"); for (int i = 0; i < renderablesQuery.size(); i++) { OPTICK_EVENT("instance"); (*batches)[renderers[i].material][model_handle{ filters[i].id }].push_back(math::compose(scales[i], rotations[i], positions[i])); } } } priority_type MeshBatchingStage::priority() { return setup_priority; } }