void drawing_engine_resize() { if (_drawingEngine == nullptr) { drawing_engine_init(); } _drawingEngine->Resize(gScreenWidth, gScreenHeight); }
void platform_refresh_video(bool recreate_window) { if (recreate_window) { context_recreate_window(); } else { drawing_engine_dispose(); drawing_engine_init(); drawing_engine_resize(); } drawing_engine_set_palette(gPalette); gfx_invalidate_screen(); }
static std::vector<paint_session> extract_paint_session(const std::string parkFileName) { core_init(); gOpenRCT2Headless = true; auto context = OpenRCT2::CreateContext(); std::vector<paint_session> sessions; log_info("Starting..."); if (context->Initialise()) { drawing_engine_init(); if (!context->LoadParkFromFile(parkFileName)) { log_error("Failed to load park!"); return {}; } gIntroState = INTRO_STATE_NONE; gScreenFlags = SCREEN_FLAGS_PLAYING; int32_t mapSize = gMapSize; int32_t resolutionWidth = (mapSize * 32 * 2); int32_t resolutionHeight = (mapSize * 32 * 1); resolutionWidth += 8; resolutionHeight += 128; rct_viewport viewport; viewport.x = 0; viewport.y = 0; viewport.width = resolutionWidth; viewport.height = resolutionHeight; viewport.view_width = viewport.width; viewport.view_height = viewport.height; viewport.var_11 = 0; viewport.flags = 0; int32_t customX = (gMapSize / 2) * 32 + 16; int32_t customY = (gMapSize / 2) * 32 + 16; int32_t x = 0, y = 0; int32_t z = tile_element_height(customX, customY) & 0xFFFF; x = customY - customX; y = ((customX + customY) / 2) - z; viewport.view_x = x - ((viewport.view_width) / 2); viewport.view_y = y - ((viewport.view_height) / 2); viewport.zoom = 0; gCurrentRotation = 0; // Ensure sprites appear regardless of rotation reset_all_sprite_quadrant_placements(); rct_drawpixelinfo dpi; dpi.x = 0; dpi.y = 0; dpi.width = resolutionWidth; dpi.height = resolutionHeight; dpi.pitch = 0; dpi.bits = (uint8_t*)malloc(dpi.width * dpi.height); log_info("Obtaining sprite data..."); viewport_render(&dpi, &viewport, 0, 0, viewport.width, viewport.height, &sessions); free(dpi.bits); drawing_engine_dispose(); } log_info("Got %u paint sessions.", std::size(sessions)); return sessions; }
void drawing_engine_init() { assert(_drawingEngine == nullptr); IDrawingEngine * drawingEngine = nullptr; _drawingEngineType = gConfigGeneral.drawing_engine; switch (_drawingEngineType) { case DRAWING_ENGINE_SOFTWARE: drawingEngine = DrawingEngineFactory::CreateSoftware(); break; case DRAWING_ENGINE_SOFTWARE_WITH_HARDWARE_DISPLAY: drawingEngine = DrawingEngineFactory::CreateSoftwareWithHardwareDisplay(); break; case DRAWING_ENGINE_OPENGL: drawingEngine = DrawingEngineFactory::CreateOpenGL(); break; } if (drawingEngine == nullptr) { if (_drawingEngineType == DRAWING_ENGINE_SOFTWARE) { _drawingEngineType = DRAWING_ENGINE_NONE; log_fatal("Unable to create a drawing engine."); exit(-1); } else { log_error("Unable to create drawing engine. Falling back to software."); // Fallback to software gConfigGeneral.drawing_engine = DRAWING_ENGINE_SOFTWARE; config_save_default(); drawing_engine_init(); } } else { try { drawingEngine->Initialise(gWindow); drawingEngine->SetUncappedFrameRate(gConfigGeneral.uncap_fps == 1); _drawingEngine = drawingEngine; } catch (const Exception &ex) { delete drawingEngine; drawingEngine = nullptr; if (_drawingEngineType == DRAWING_ENGINE_SOFTWARE) { _drawingEngineType = DRAWING_ENGINE_NONE; log_error(ex.GetMessage()); log_fatal("Unable to initialise a drawing engine."); exit(-1); } else { log_error(ex.GetMessage()); log_error("Unable to initialise drawing engine. Falling back to software."); // Fallback to software gConfigGeneral.drawing_engine = DRAWING_ENGINE_SOFTWARE; config_save_default(); drawing_engine_init(); } } } }