| 385 | } |
| 386 | |
| 387 | void ClientApplication::render() { |
| 388 | m_framesSkipped = 0; |
| 389 | auto config = m_root->configuration(); |
| 390 | auto assets = m_root->assets(); |
| 391 | auto& renderer = Application::renderer(); |
| 392 | |
| 393 | renderer->setMultiSampling(config->get("antiAliasing").optBool().value(false) ? 4 : 0); |
| 394 | renderer->switchEffectConfig("interface"); |
| 395 | |
| 396 | if (auto interfaceScale = config->get("interfaceScale").optUInt().value()) |
| 397 | m_guiContext->setInterfaceScale(interfaceScale); |
| 398 | else if (m_guiContext->windowWidth() >= m_crossoverRes[0] && m_guiContext->windowHeight() >= m_crossoverRes[1]) |
| 399 | m_guiContext->setInterfaceScale(m_maxInterfaceScale); |
| 400 | else |
| 401 | m_guiContext->setInterfaceScale(m_minInterfaceScale); |
| 402 | |
| 403 | if (m_state == MainAppState::Mods || m_state == MainAppState::Splash) { |
| 404 | m_cinematicOverlay->render(); |
| 405 | |
| 406 | } else if (m_state == MainAppState::Title) { |
| 407 | m_titleScreen->render(); |
| 408 | m_cinematicOverlay->render(); |
| 409 | |
| 410 | } else if (m_state > MainAppState::Title) { |
| 411 | WorldClientPtr worldClient = m_universeClient->worldClient(); |
| 412 | if (worldClient) { |
| 413 | auto totalStart = Time::monotonicMicroseconds(); |
| 414 | renderer->switchEffectConfig("world"); |
| 415 | auto clientStart = totalStart; |
| 416 | worldClient->render(m_renderData, TilePainter::BorderTileSize); |
| 417 | LogMap::set("client_render_world_client", strf(u8"{:05d}\u00b5s", Time::monotonicMicroseconds() - clientStart)); |
| 418 | |
| 419 | auto paintStart = Time::monotonicMicroseconds(); |
| 420 | m_worldPainter->render(m_renderData, [&]() -> bool { |
| 421 | return worldClient->waitForLighting(&m_renderData); |
| 422 | }); |
| 423 | LogMap::set("client_render_world_painter", strf(u8"{:05d}\u00b5s", Time::monotonicMicroseconds() - paintStart)); |
| 424 | LogMap::set("client_render_world_total", strf(u8"{:05d}\u00b5s", Time::monotonicMicroseconds() - totalStart)); |
| 425 | |
| 426 | auto size = Vec2F(renderer->screenSize()); |
| 427 | auto quad = renderFlatRect(RectF::withSize(size / -2, size), Vec4B::filled(0), 0.0f); |
| 428 | for (auto& layer : m_postProcessLayers) { |
| 429 | if (layer.group ? layer.group->enabled : true) { |
| 430 | for (unsigned i = 0; i < layer.passes; i++) { |
| 431 | for (auto& effect : layer.effects) { |
| 432 | renderer->switchEffectConfig(effect); |
| 433 | renderer->render(quad); |
| 434 | } |
| 435 | } |
| 436 | } |
| 437 | } |
| 438 | } |
| 439 | renderer->switchEffectConfig("interface"); |
| 440 | auto start = Time::monotonicMicroseconds(); |
| 441 | m_mainInterface->renderInWorldElements(); |
| 442 | m_mainInterface->render(); |
| 443 | m_cinematicOverlay->render(); |
| 444 | LogMap::set("client_render_interface", strf(u8"{:05d}\u00b5s", Time::monotonicMicroseconds() - start)); |
nothing calls this directly
no test coverage detected