MCPcopy Create free account
hub / github.com/OpenRCT2/OpenRCT2 / InitialiseDrawingEngine

Method InitialiseDrawingEngine

src/openrct2/Context.cpp:571–636  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

569
570 public:
571 void InitialiseDrawingEngine() final override
572 {
573 assert(_drawingEngine == nullptr);
574
575 const auto initializeEngine = [&](DrawingEngine engine) -> std::unique_ptr<Drawing::IDrawingEngine> {
576 try
577 {
578 auto drawingEngineFactory = _uiContext->GetDrawingEngineFactory();
579 auto drawingEngine = drawingEngineFactory->Create(engine, *_uiContext);
580 if (drawingEngine == nullptr)
581 {
582 LOG_FATAL("Unable to create a drawing engine.");
583 return nullptr;
584 }
585
586 drawingEngine->Initialise();
587 drawingEngine->SetVSync(Config::Get().general.useVSync);
588
589 return drawingEngine;
590 }
591 catch (std::exception& ex)
592 {
593 LOG_ERROR(ex.what());
594 LOG_ERROR("Unable to initialise drawing engine.");
595 }
596 return nullptr;
597 };
598
599 auto drawingEngineType = Config::Get().general.drawingEngine;
600
601 // Attempt to create drawing engine of the type specified in the config.
602 {
603 auto drawingEngine = initializeEngine(drawingEngineType);
604 if (drawingEngine != nullptr)
605 {
606 _drawingEngine = std::move(drawingEngine);
607 }
608 else
609 {
610 // If the drawing engine creation failed, try to create a software engine.
611 if (drawingEngineType == DrawingEngine::OpenGL)
612 {
613 drawingEngineType = DrawingEngine::SoftwareWithHardwareDisplay;
614 LOG_ERROR("Trying fallback back to software...");
615
616 drawingEngine = initializeEngine(drawingEngineType);
617 if (drawingEngine != nullptr)
618 {
619 _drawingEngine = std::move(drawingEngine);
620 }
621 else
622 {
623 LOG_FATAL("Unable to create any renderer.");
624 exit(-1);
625 }
626 }
627 }
628 }

Callers 1

DrawingEngineInitFunction · 0.80

Calls 7

SaveFunction · 0.85
WindowCheckAllValidZoomFunction · 0.85
CreateMethod · 0.45
InitialiseMethod · 0.45
SetVSyncMethod · 0.45
whatMethod · 0.45

Tested by

no test coverage detected