aboutsummaryrefslogtreecommitdiff
path: root/gfx.cpp
diff options
context:
space:
mode:
authorVincent Hamm2002-03-20 22:58:41 +0000
committerVincent Hamm2002-03-20 22:58:41 +0000
commitfbf9c5b318004c8f83464c4158b4325489e00d04 (patch)
tree5bed7f34ef257ff51782b5ba307acb15c528894c /gfx.cpp
parent718392239c0025a7e1e0af586fc54ecf7df6f58b (diff)
downloadscummvm-rg350-fbf9c5b318004c8f83464c4158b4325489e00d04.tar.gz
scummvm-rg350-fbf9c5b318004c8f83464c4158b4325489e00d04.tar.bz2
scummvm-rg350-fbf9c5b318004c8f83464c4158b4325489e00d04.zip
Preliminary redesigned of the virtual screen system. Now all the screen buffers are in a single 320*200 buffer, making video subprocess far more easy to do. On glitch remain in inventory's black area
svn-id: r3793
Diffstat (limited to 'gfx.cpp')
-rw-r--r--gfx.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/gfx.cpp b/gfx.cpp
index 6203998c7a..7a18cf6902 100644
--- a/gfx.cpp
+++ b/gfx.cpp
@@ -48,7 +48,7 @@ void Scumm::initScreens(int a, int b, int w, int h) {
int i;
for (i=0; i<3; i++) {
- nukeResource(rtBuffer, i+1);
+// nukeResource(rtBuffer, i+1);
nukeResource(rtBuffer, i+5);
}
@@ -81,10 +81,13 @@ void Scumm::initVirtScreen(int slot, int top, int height, bool twobufs, bool fou
vs->xstart = 0;
size = vs->width * vs->height;
vs->size = size;
+ vs->backBuf = NULL;
if (vs->scrollable)
size += 320*4;
- createResource(rtBuffer, slot+1, size);
+// createResource(rtBuffer, slot+1, size);
+
+ vs->screenPtr = _videoBuffer+320*top;
if (twobufs) {
createResource(rtBuffer, slot+5, size);
@@ -125,7 +128,7 @@ void Scumm::drawDirtyScreenParts() {
} else {
vs = &virtscr[0];
- blitToScreen(this, getResourceAddress(rtBuffer, 1) + _screenStartStrip*8,
+ blitToScreen(this, vs->screenPtr + _screenStartStrip*8,
0, vs->topline, 320, vs->height);
for (i = 0; i<40; i++) {
@@ -210,7 +213,7 @@ void Gdi::drawStripToScreen(VirtScreen *vs, int x, int w, int t, int b) {
if (b > vs->height)
b = vs->height;
- ptr = _vm->getResourceAddress(rtBuffer, vs->number+1) + (t*40+x)*8 + _readOffs;
+ ptr = vs->screenPtr + (t*40+x)*8 + _readOffs;
blitToScreen(_vm, ptr, x*8, vs->topline+t, w, b-t);
}
@@ -522,7 +525,7 @@ void Scumm::unkVirtScreen4(int a) {
return;
vs = &virtscr[0];
- gdi._backbuff_ptr = getResourceAddress(rtBuffer, 1) + vs->xstart;
+ gdi._backbuff_ptr = vs->screenPtr + vs->xstart;
memset(gdi._backbuff_ptr, 0, vs->size);
switch(a) {
@@ -663,7 +666,7 @@ void Gdi::drawBitmap(byte *ptr, VirtScreen *vs, int x, int y, int h, int stripnr
if (bottom > vs->bdirty[sx])
vs->bdirty[sx] = bottom;
- _backbuff_ptr = _vm->getResourceAddress(rtBuffer, vs->number+1) + (y*40+x)*8;
+ _backbuff_ptr = vs->screenPtr + (y*40+x)*8;
_bgbak_ptr = _vm->getResourceAddress(rtBuffer, vs->number+5) + (y*40+x)*8;
if (!twobufs) {
_bgbak_ptr = _backbuff_ptr;
@@ -1445,7 +1448,7 @@ void Scumm::restoreBG(int left, int top, int right, int bottom) {
height = (top-topline) * 320 + vs->xstart + left;
- backbuff = getResourceAddress(rtBuffer, vs->number+1) + height;
+ backbuff = vs->screenPtr + height;
bgbak = getResourceAddress(rtBuffer, vs->number+5) + height;
mask = getResourceAddress(rtBuffer, 9) + top * 40 + (left>>3) + _screenStartStrip;
if (vs->number==0) {
@@ -2021,7 +2024,7 @@ void Gdi::resetBackground(byte top, byte bottom, int strip) {
offs = (top * 40 + _vm->_screenStartStrip + strip);
_mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + offs;
_bgbak_ptr = _vm->getResourceAddress(rtBuffer, 5) + (offs<<3);
- _backbuff_ptr = _vm->getResourceAddress(rtBuffer, 1) + (offs<<3);
+ _backbuff_ptr = vs->screenPtr + (offs<<3);
_numLinesToProcess = bottom - top;
if (_numLinesToProcess) {
@@ -2180,7 +2183,7 @@ void Scumm::grabCursor(int x, int y, int w, int h) {
}
grabCursor(
- getResourceAddress(rtBuffer, vs->number+1) + (y-vs->topline)*320 + x,
+ vs->screenPtr + (y-vs->topline)*320 + x,
w,h);
}
@@ -2244,9 +2247,9 @@ void Scumm::useIm01Cursor(byte *im, int w, int h) {
vs->alloctwobuffers = true;
gdi._disable_zbuffer = false;
- grabCursor(getResourceAddress(rtBuffer, 1) + vs->xstart, w, h);
+ grabCursor(vs->screenPtr + vs->xstart, w, h);
- blit(getResourceAddress(rtBuffer, 1) + vs->xstart, getResourceAddress(rtBuffer, 5) + vs->xstart, w, h);
+ blit(vs->screenPtr + vs->xstart, getResourceAddress(rtBuffer, 5) + vs->xstart, w, h);
}
void Scumm::useBompCursor(byte *im, int width, int height) {