From edc7fcf121bf56052858498d3168c344c00d7442 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Wed, 6 Jan 2010 18:59:39 +0000 Subject: SCI: sync displayScreen with framebuffer after successful video playback (fixes background vanishing in mainmenu of gk1demo) svn-id: r47089 --- engines/sci/graphics/gui.cpp | 4 ++++ engines/sci/graphics/gui.h | 2 ++ engines/sci/graphics/screen.cpp | 7 +++++++ engines/sci/graphics/screen.h | 1 + 4 files changed, 14 insertions(+) (limited to 'engines/sci/graphics') diff --git a/engines/sci/graphics/gui.cpp b/engines/sci/graphics/gui.cpp index b11be4ceb7..8eb83495fa 100644 --- a/engines/sci/graphics/gui.cpp +++ b/engines/sci/graphics/gui.cpp @@ -821,6 +821,10 @@ int16 SciGui::getCelCount(GuiResourceId viewId, int16 loopNo) { return _gfx->getView(viewId)->getLoopInfo(loopNo)->celCount; } +void SciGui::syncWithFramebuffer() { + _screen->syncWithFramebuffer(); +} + reg_t SciGui::portraitLoad(Common::String resourceName) { return NULL_REG; } diff --git a/engines/sci/graphics/gui.h b/engines/sci/graphics/gui.h index c5b1ad1892..293c41da70 100644 --- a/engines/sci/graphics/gui.h +++ b/engines/sci/graphics/gui.h @@ -145,6 +145,8 @@ public: virtual int16 getLoopCount(GuiResourceId viewId); virtual int16 getCelCount(GuiResourceId viewId, int16 loopNo); + virtual void syncWithFramebuffer(); + virtual reg_t portraitLoad(Common::String resourceName); virtual void portraitShow(Common::String resourceName, Common::Point position, uint16 resourceNum, uint16 noun, uint16 verb, uint16 cond, uint16 seq); virtual void portraitUnload(uint16 portraitId); diff --git a/engines/sci/graphics/screen.cpp b/engines/sci/graphics/screen.cpp index fce6827d43..a78b049e5e 100644 --- a/engines/sci/graphics/screen.cpp +++ b/engines/sci/graphics/screen.cpp @@ -91,6 +91,13 @@ void Screen::copyFromScreen(byte *buffer) { g_system->unlockScreen(); } +void Screen::syncWithFramebuffer() { + Graphics::Surface *screen = g_system->lockScreen(); + + memcpy(_displayScreen, screen->pixels, _displayPixels); + g_system->unlockScreen(); +} + void Screen::copyRectToScreen(const Common::Rect &rect) { if (!_upscaledHires) { g_system->copyRectToScreen(_activeScreen + rect.top * _displayWidth + rect.left, _displayWidth, rect.left, rect.top, rect.width(), rect.height()); diff --git a/engines/sci/graphics/screen.h b/engines/sci/graphics/screen.h index 447eb31d38..ba8d906631 100644 --- a/engines/sci/graphics/screen.h +++ b/engines/sci/graphics/screen.h @@ -55,6 +55,7 @@ public: void copyToScreen(); void copyFromScreen(byte *buffer); + void syncWithFramebuffer(); void copyRectToScreen(const Common::Rect &rect); void copyRectToScreen(const Common::Rect &rect, int16 x, int16 y); -- cgit v1.2.3