[Scummvm-cvs-logs] SF.net SVN: scummvm:[47089] scummvm/trunk/engines/sci
m_kiewitz at users.sourceforge.net
m_kiewitz at users.sourceforge.net
Wed Jan 6 19:59:40 CET 2010
Revision: 47089
http://scummvm.svn.sourceforge.net/scummvm/?rev=47089&view=rev
Author: m_kiewitz
Date: 2010-01-06 18:59:39 +0000 (Wed, 06 Jan 2010)
Log Message:
-----------
SCI: sync displayScreen with framebuffer after successful video playback (fixes background vanishing in mainmenu of gk1demo)
Modified Paths:
--------------
scummvm/trunk/engines/sci/engine/kgraphics.cpp
scummvm/trunk/engines/sci/graphics/gui.cpp
scummvm/trunk/engines/sci/graphics/gui.h
scummvm/trunk/engines/sci/graphics/screen.cpp
scummvm/trunk/engines/sci/graphics/screen.h
Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp 2010-01-06 18:25:43 UTC (rev 47088)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp 2010-01-06 18:59:39 UTC (rev 47089)
@@ -995,6 +995,8 @@
}
reg_t kShowMovie(EngineState *s, int argc, reg_t *argv) {
+ bool playedVideo = false;
+
// KQ6 Windows calls this with one argument. It doesn't seem
// to have a purpose...
if (argc == 1)
@@ -1009,10 +1011,12 @@
Graphics::AviDecoder *aviDecoder = new Graphics::AviDecoder(g_system->getMixer());
Graphics::VideoPlayer *player = new Graphics::VideoPlayer(aviDecoder);
- if (aviDecoder->loadFile(filename.c_str()))
+ if (aviDecoder->loadFile(filename.c_str())) {
player->playVideo();
- else
+ playedVideo = true;
+ } else {
warning("Failed to open movie file %s", filename.c_str());
+ }
aviDecoder->closeFile();
delete player;
delete aviDecoder;
@@ -1024,15 +1028,20 @@
SeqDecoder *seqDecoder = new SeqDecoder();
Graphics::VideoPlayer *player = new Graphics::VideoPlayer(seqDecoder);
- if (seqDecoder->loadFile(filename.c_str(), delay))
+ if (seqDecoder->loadFile(filename.c_str(), delay)) {
player->playVideo();
- else
+ playedVideo = true;
+ } else {
warning("Failed to open movie file %s", filename.c_str());
+ }
seqDecoder->closeFile();
delete player;
delete seqDecoder;
}
+ if (playedVideo)
+ s->_gui->syncWithFramebuffer();
+
return s->r_acc;
}
Modified: scummvm/trunk/engines/sci/graphics/gui.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/gui.cpp 2010-01-06 18:25:43 UTC (rev 47088)
+++ scummvm/trunk/engines/sci/graphics/gui.cpp 2010-01-06 18:59:39 UTC (rev 47089)
@@ -821,6 +821,10 @@
return _gfx->getView(viewId)->getLoopInfo(loopNo)->celCount;
}
+void SciGui::syncWithFramebuffer() {
+ _screen->syncWithFramebuffer();
+}
+
reg_t SciGui::portraitLoad(Common::String resourceName) {
return NULL_REG;
}
Modified: scummvm/trunk/engines/sci/graphics/gui.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/gui.h 2010-01-06 18:25:43 UTC (rev 47088)
+++ scummvm/trunk/engines/sci/graphics/gui.h 2010-01-06 18:59:39 UTC (rev 47089)
@@ -145,6 +145,8 @@
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);
Modified: scummvm/trunk/engines/sci/graphics/screen.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/screen.cpp 2010-01-06 18:25:43 UTC (rev 47088)
+++ scummvm/trunk/engines/sci/graphics/screen.cpp 2010-01-06 18:59:39 UTC (rev 47089)
@@ -91,6 +91,13 @@
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());
Modified: scummvm/trunk/engines/sci/graphics/screen.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/screen.h 2010-01-06 18:25:43 UTC (rev 47088)
+++ scummvm/trunk/engines/sci/graphics/screen.h 2010-01-06 18:59:39 UTC (rev 47089)
@@ -55,6 +55,7 @@
void copyToScreen();
void copyFromScreen(byte *buffer);
+ void syncWithFramebuffer();
void copyRectToScreen(const Common::Rect &rect);
void copyRectToScreen(const Common::Rect &rect, int16 x, int16 y);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list