diff --git a/src/openrct2/drawing/engines/SoftwareDrawingEngine.cpp b/src/openrct2/drawing/engines/SoftwareDrawingEngine.cpp index 87ab3a7459..d22aff5ffd 100644 --- a/src/openrct2/drawing/engines/SoftwareDrawingEngine.cpp +++ b/src/openrct2/drawing/engines/SoftwareDrawingEngine.cpp @@ -185,7 +185,6 @@ class SoftwareDrawingEngine final : public IDrawingEngine private: bool _hardwareDisplay; - SDL_Window * _window = nullptr; SDL_Surface * _surface = nullptr; SDL_Surface * _RGBASurface = nullptr; SDL_Palette * _palette = nullptr; @@ -244,7 +243,11 @@ public: void Initialise(SDL_Window * window) override { - _window = window; + if (_hardwareDisplay) + { + // Try to create the accelerated renderer. + _sdlRenderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + } } void Resize(uint32 width, uint32 height) override @@ -254,15 +257,11 @@ public: SDL_FreePalette(_palette); SDL_DestroyTexture(_screenTexture); SDL_FreeFormat(_screenTextureFormat); - SDL_DestroyRenderer(_sdlRenderer); - if (_hardwareDisplay) + if (_sdlRenderer != nullptr) { - _sdlRenderer = SDL_CreateRenderer(_window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); - SDL_RendererInfo rendererInfo; SDL_GetRendererInfo(_sdlRenderer, &rendererInfo); - uint32 pixelFormat = SDL_PIXELFORMAT_UNKNOWN; for (uint32 i = 0; i < rendererInfo.num_texture_formats; i++) { @@ -310,7 +309,7 @@ public: void SetPalette(SDL_Color * palette) override { - if (_hardwareDisplay) + if (_sdlRenderer != nullptr) { if (_screenTextureFormat != nullptr) { @@ -416,7 +415,7 @@ public: rct2_draw(&_bitsDPI); } - if (_hardwareDisplay) + if (_sdlRenderer != nullptr) { DisplayViaTexture(); } diff --git a/src/openrct2/rct12/SawyerChunkReader.cpp b/src/openrct2/rct12/SawyerChunkReader.cpp index 65e3269f22..63ce7e8d07 100644 --- a/src/openrct2/rct12/SawyerChunkReader.cpp +++ b/src/openrct2/rct12/SawyerChunkReader.cpp @@ -67,7 +67,7 @@ std::shared_ptr SawyerChunkReader::ReadChunk() case CHUNK_ENCODING_RLECOMPRESSED: case CHUNK_ENCODING_ROTATE: { - std::unique_ptr compressedData = std::unique_ptr(Memory::Allocate(header.length)); + std::unique_ptr compressedData(new uint8[header.length]); if (_stream->TryRead(compressedData.get(), header.length) != header.length) { throw SawyerChunkException("Corrupt chunk size.");