aboutsummaryrefslogtreecommitdiff
path: root/engines/hopkins/graphics.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2013-03-31 12:56:12 -0400
committerPaul Gilbert2013-03-31 12:56:12 -0400
commitbcdd8f43cd126253069a111ecb62c5137ec033ca (patch)
treed8463bb8c2beb6ecaf811b659299f6f30efebff4 /engines/hopkins/graphics.cpp
parent97b00ad36274e88ec06b340d7e35eefa7ccf0ff0 (diff)
downloadscummvm-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.cpp28
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