diff options
Diffstat (limited to 'backends')
-rw-r--r-- | backends/platform/iphone/osys_main.cpp | 2 | ||||
-rw-r--r-- | backends/platform/iphone/osys_main.h | 3 | ||||
-rw-r--r-- | backends/platform/iphone/osys_video.mm | 12 |
3 files changed, 13 insertions, 4 deletions
diff --git a/backends/platform/iphone/osys_main.cpp b/backends/platform/iphone/osys_main.cpp index f3e0d97b97..9a33cd8968 100644 --- a/backends/platform/iphone/osys_main.cpp +++ b/backends/platform/iphone/osys_main.cpp @@ -60,7 +60,7 @@ OSystem_IPHONE::OSystem_IPHONE() : _screenOrientation(kScreenOrientationFlippedLandscape), _mouseClickAndDragEnabled(false), _gestureStartX(-1), _gestureStartY(-1), _fullScreenIsDirty(false), _fullScreenOverlayIsDirty(false), _mouseDirty(false), _timeSuspended(0), _lastDragPosX(-1), _lastDragPosY(-1), _screenChangeCount(0), - _mouseCursorPaletteEnabled(false) { + _mouseCursorPaletteEnabled(false), _gfxTransactionError(kTransactionSuccess) { _queuedInputEvent.type = Common::EVENT_INVALID; _touchpadModeEnabled = !iPhone_isHighResDevice(); _fsFactory = new POSIXFilesystemFactory(); diff --git a/backends/platform/iphone/osys_main.h b/backends/platform/iphone/osys_main.h index 5d0f60c34c..b443e22f56 100644 --- a/backends/platform/iphone/osys_main.h +++ b/backends/platform/iphone/osys_main.h @@ -65,6 +65,9 @@ protected: Graphics::Surface _framebuffer; + // For signaling that screen format set up might have failed. + TransactionError _gfxTransactionError; + // For use with the game texture uint16 _gamePalette[256]; // For use with the mouse texture diff --git a/backends/platform/iphone/osys_video.mm b/backends/platform/iphone/osys_video.mm index 2b5e78bd35..6f80a6cba3 100644 --- a/backends/platform/iphone/osys_video.mm +++ b/backends/platform/iphone/osys_video.mm @@ -84,6 +84,13 @@ void OSystem_IPHONE::initSize(uint width, uint height, const Graphics::PixelForm // to the texture buffer to avoid an additional copy step. [g_iPhoneViewInstance performSelectorOnMainThread:@selector(createScreenTexture) withObject:nil waitUntilDone: YES]; + // In case the client code tries to set up a non supported mode, we will + // fall back to CLUT8 and set the transaction error accordingly. + if (format && format->bytesPerPixel != 1 && *format != _videoContext->screenTexture.format) { + format = 0; + _gfxTransactionError = kTransactionFormatNotSupported; + } + if (!format || format->bytesPerPixel == 1) { _framebuffer.create(width, height, Graphics::PixelFormat::createFormatCLUT8()); } else { @@ -92,7 +99,6 @@ void OSystem_IPHONE::initSize(uint width, uint height, const Graphics::PixelForm format->rLoss, format->gLoss, format->bLoss, format->aLoss, format->rShift, format->gShift, format->bShift, format->aShift); #endif - assert(_videoContext->screenTexture.format == *format); // We directly draw on the screen texture in hi-color mode. Thus // we copy over its settings here and just replace the width and // height to avoid any problems. @@ -107,6 +113,7 @@ void OSystem_IPHONE::initSize(uint width, uint height, const Graphics::PixelForm } void OSystem_IPHONE::beginGFXTransaction() { + _gfxTransactionError = kTransactionSuccess; } OSystem::TransactionError OSystem_IPHONE::endGFXTransaction() { @@ -114,8 +121,7 @@ OSystem::TransactionError OSystem_IPHONE::endGFXTransaction() { updateOutputSurface(); [g_iPhoneViewInstance performSelectorOnMainThread:@selector(setGraphicsMode) withObject:nil waitUntilDone: YES]; - // TODO: Can we return better error codes? - return kTransactionSuccess; + return _gfxTransactionError; } void OSystem_IPHONE::updateOutputSurface() { |