aboutsummaryrefslogtreecommitdiff
path: root/sword2
diff options
context:
space:
mode:
authorJames Brown2004-03-01 04:05:10 +0000
committerJames Brown2004-03-01 04:05:10 +0000
commitb77231a9a365cdcbb268101141b99200e11173b7 (patch)
tree2b0189830d366b077f5aefffe9f64c3ecc5d05b1 /sword2
parent267a96ba4fb854643b55ba1f80607bbfd18b284b (diff)
downloadscummvm-rg350-b77231a9a365cdcbb268101141b99200e11173b7.tar.gz
scummvm-rg350-b77231a9a365cdcbb268101141b99200e11173b7.tar.bz2
scummvm-rg350-b77231a9a365cdcbb268101141b99200e11173b7.zip
Fix from Roever for bug #892827
svn-id: r13107
Diffstat (limited to 'sword2')
-rw-r--r--sword2/driver/animation.cpp18
-rw-r--r--sword2/driver/animation.h2
-rw-r--r--sword2/driver/render.cpp2
3 files changed, 11 insertions, 11 deletions
diff --git a/sword2/driver/animation.cpp b/sword2/driver/animation.cpp
index dcdc74069c..14accf6604 100644
--- a/sword2/driver/animation.cpp
+++ b/sword2/driver/animation.cpp
@@ -178,16 +178,16 @@ void AnimationState::buildLookup(int p, int lines) {
pos = 0;
}
- if (cr >= BITDEPTH)
+ if (cr > BITDEPTH)
return;
for (ii = 0; ii < lines; ii++) {
r = (-16 * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256;
- for (cb = 0; cb < BITDEPTH; cb++) {
+ for (cb = 0; cb <= BITDEPTH; cb++) {
g = (-16 * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256;
b = (-16 * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256;
- for (y = 0; y < BITDEPTH; y++) {
+ for (y = 0; y <= BITDEPTH; y++) {
int idx, bst = 0;
int dis = 2 * SQR(r - palettes[p].pal[0]) + 4 * SQR(g - palettes[p].pal[1]) + SQR(b - palettes[p].pal[2]);
@@ -204,10 +204,10 @@ void AnimationState::buildLookup(int p, int lines) {
g += (1 << SHIFT);
b += (1 << SHIFT);
}
- r -= 256;
+ r -= (BITDEPTH+1)*(1 << SHIFT);
}
cr++;
- if (cr >= BITDEPTH)
+ if (cr > BITDEPTH)
return;
}
}
@@ -235,14 +235,14 @@ void AnimationState::buildLookup() {
if (lookup)
return;
- lookup = (OverlayColor *)calloc(BITDEPTH * BITDEPTH * 256, sizeof(OverlayColor));
+ lookup = (OverlayColor *)calloc((BITDEPTH+1) * (BITDEPTH+1) * 256, sizeof(OverlayColor));
int y, cb, cr;
int r, g, b;
int pos = 0;
- for (cr = 0; cr < BITDEPTH; cr++) {
- for (cb = 0; cb < BITDEPTH; cb++) {
+ for (cr = 0; cr <= BITDEPTH; cr++) {
+ for (cb = 0; cb <= BITDEPTH; cb++) {
for (y = 0; y < 256; y++) {
r = ((y - 16) * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256;
g = ((y - 16) * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256;
@@ -274,7 +274,7 @@ void AnimationState::plotYUV(OverlayColor *lut, int width, int height, byte *con
for (y = 0; y < height; y += 2) {
for (x = 0; x < width; x += 2) {
- int i = ((((dat[2][cpos] + ROUNDADD) >> SHIFT) * BITDEPTH) + ((dat[1][cpos] + ROUNDADD)>>SHIFT)) * 256;
+ int i = ((((dat[2][cpos] + ROUNDADD) >> SHIFT) * (BITDEPTH+1)) + ((dat[1][cpos] + ROUNDADD)>>SHIFT)) * 256;
cpos++;
ptr[linepos ] = lut[i + dat[0][ ypos ]];
diff --git a/sword2/driver/animation.h b/sword2/driver/animation.h
index 117aadd094..28399d06d4 100644
--- a/sword2/driver/animation.h
+++ b/sword2/driver/animation.h
@@ -90,7 +90,7 @@ private:
int palnum;
int maxPalnum;
- byte lookup[2][BITDEPTH * BITDEPTH * BITDEPTH];
+ byte lookup[2][(BITDEPTH+1) * (BITDEPTH+1) * (BITDEPTH+1)];
byte *lut;
byte *lut2;
int lutcalcnum;
diff --git a/sword2/driver/render.cpp b/sword2/driver/render.cpp
index ce73ed49bd..0ffd82218f 100644
--- a/sword2/driver/render.cpp
+++ b/sword2/driver/render.cpp
@@ -841,7 +841,7 @@ void Graphics::plotYUV(byte *lut, int width, int height, byte *const *dat) {
for (y = 0; y < height; y += 2) {
for (x = 0; x < width; x += 2) {
- int i = ((((dat[2][cpos] + ROUNDADD) >> SHIFT) * BITDEPTH) + ((dat[1][cpos] + ROUNDADD)>>SHIFT)) * BITDEPTH;
+ int i = ((((dat[2][cpos] + ROUNDADD) >> SHIFT) * (BITDEPTH+1)) + ((dat[1][cpos] + ROUNDADD)>>SHIFT)) * (BITDEPTH+1);
cpos++;
buf[linepos ] = lut[i + ((dat[0][ ypos ] + ROUNDADD) >> SHIFT)];