diff options
author | Paul Gilbert | 2013-03-31 12:56:12 -0400 |
---|---|---|
committer | Paul Gilbert | 2013-03-31 12:56:12 -0400 |
commit | bcdd8f43cd126253069a111ecb62c5137ec033ca (patch) | |
tree | d8463bb8c2beb6ecaf811b659299f6f30efebff4 /engines/hopkins/graphics.cpp | |
parent | 97b00ad36274e88ec06b340d7e35eefa7ccf0ff0 (diff) | |
download | scummvm-rg350-bcdd8f43cd126253069a111ecb62c5137ec033ca.tar.gz scummvm-rg350-bcdd8f43cd126253069a111ecb62c5137ec033ca.tar.bz2 scummvm-rg350-bcdd8f43cd126253069a111ecb62c5137ec033ca.zip |
HOPKINS: Refactored use of TEMP.SCR for screen backups to use a memory buffer
Diffstat (limited to 'engines/hopkins/graphics.cpp')
-rw-r--r-- | engines/hopkins/graphics.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/engines/hopkins/graphics.cpp b/engines/hopkins/graphics.cpp index ee2c75cf55..7eeb5e5b3e 100644 --- a/engines/hopkins/graphics.cpp +++ b/engines/hopkins/graphics.cpp @@ -52,6 +52,7 @@ GraphicsManager::GraphicsManager(HopkinsEngine *vm) { _backBuffer = NULL; _frontBuffer = NULL; _screenBuffer = g_PTRNUL; + _backupScreen = g_PTRNUL; _showDirtyRects = false; _lineNbr2 = 0; @@ -97,6 +98,7 @@ GraphicsManager::~GraphicsManager() { _vm->_globals->freeMemory(_backBuffer); _vm->_globals->freeMemory(_frontBuffer); _vm->_globals->freeMemory(_screenBuffer); + _vm->_globals->freeMemory(_backupScreen); } void GraphicsManager::setGraphicalMode(int width, int height) { @@ -1826,4 +1828,30 @@ void GraphicsManager::drawVerticalLine(byte *surface, int xp, int yp, int height } } +/** + * Backup the current screen + */ +void GraphicsManager::backupScreen() { + // Allocate a new data block for the screen, if necessary + if (_vm->_graphicsManager->_backupScreen == g_PTRNUL) + _vm->_graphicsManager->_backupScreen = _vm->_globals->allocMemory(SCREEN_WIDTH * 2 * SCREEN_HEIGHT); + + // Backup the screen + Common::copy(_vm->_graphicsManager->_backBuffer, _vm->_graphicsManager->_backBuffer + + SCREEN_WIDTH * 2 * SCREEN_HEIGHT, _vm->_graphicsManager->_backupScreen); +} + +/** + * Restore a previously backed up screen + */ +void GraphicsManager::restoreScreen() { + assert(_vm->_graphicsManager->_backupScreen != g_PTRNUL); + + // Restore the screen and free the buffer + Common::copy(_vm->_graphicsManager->_backupScreen, _vm->_graphicsManager->_backupScreen + + SCREEN_WIDTH * 2 * SCREEN_HEIGHT, _vm->_graphicsManager->_backBuffer); + _vm->_globals->freeMemory(_vm->_graphicsManager->_backupScreen); + _backupScreen = g_PTRNUL; +} + } // End of namespace Hopkins |