From 660373cf386e487d22abbf5816a8eec45e569588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Fri, 24 Feb 2017 00:15:56 +0100 Subject: [PATCH 1/2] Fix unmatched memory free Before the memory of size 1 was deleted, more allocated. --- src/openrct2/rct12/SawyerChunkReader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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."); From 7360d0659288c59ddc1411f3005c1e2b5a7d4b87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Fri, 24 Feb 2017 00:18:11 +0100 Subject: [PATCH 2/2] Silently fallback to sorfware rendering If accelerated rendered cannot be created by SDL, fallback to software rendering. The config option is not changed. --- .../drawing/engines/SoftwareDrawingEngine.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/openrct2/drawing/engines/SoftwareDrawingEngine.cpp b/src/openrct2/drawing/engines/SoftwareDrawingEngine.cpp index a1a6a14f8e..b31a6290ec 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(); }