Beispiel #1
0
 void drawing_engine_resize()
 {
     if (_drawingEngine == nullptr)
     {
         drawing_engine_init();
     }
     _drawingEngine->Resize(gScreenWidth, gScreenHeight);
 }
Beispiel #2
0
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();
}
Beispiel #3
0
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;
}
Beispiel #4
0
    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();
                }
            }
        }
    }