aboutsummaryrefslogtreecommitdiff
path: root/graphics/surface.cpp
diff options
context:
space:
mode:
authorMatthew Hoops2011-05-19 18:33:00 -0400
committerMatthew Hoops2011-05-19 18:38:09 -0400
commit1ee5ef9c6fd335ca00901e32dc3e05ba8474403b (patch)
tree18aab2431d7457efa9631c3fb53d24d4760f6ff8 /graphics/surface.cpp
parente27dd8ac4ea487d388c59db53d7d7ee1ce24e9c9 (diff)
downloadscummvm-rg350-1ee5ef9c6fd335ca00901e32dc3e05ba8474403b.tar.gz
scummvm-rg350-1ee5ef9c6fd335ca00901e32dc3e05ba8474403b.tar.bz2
scummvm-rg350-1ee5ef9c6fd335ca00901e32dc3e05ba8474403b.zip
GRAPHICS: Allow auxiliary surface functions to be used for 32bpp surfaces
Diffstat (limited to 'graphics/surface.cpp')
-rw-r--r--graphics/surface.cpp30
1 files changed, 25 insertions, 5 deletions
diff --git a/graphics/surface.cpp b/graphics/surface.cpp
index 3f53ce56f4..772ec12e54 100644
--- a/graphics/surface.cpp
+++ b/graphics/surface.cpp
@@ -42,8 +42,10 @@ void Surface::drawLine(int x0, int y0, int x1, int y1, uint32 color) {
Graphics::drawLine(x0, y0, x1, y1, color, plotPoint<byte>, this);
else if (format.bytesPerPixel == 2)
Graphics::drawLine(x0, y0, x1, y1, color, plotPoint<uint16>, this);
+ else if (format.bytesPerPixel == 4)
+ Graphics::drawLine(x0, y0, x1, y1, color, plotPoint<uint32>, this);
else
- error("Surface::drawLine: bytesPerPixel must be 1 or 2");
+ error("Surface::drawLine: bytesPerPixel must be 1, 2, or 4");
}
void Surface::create(uint16 width, uint16 height, const PixelFormat &f) {
@@ -92,8 +94,11 @@ void Surface::hLine(int x, int y, int x2, uint32 color) {
} else if (format.bytesPerPixel == 2) {
uint16 *ptr = (uint16 *)getBasePtr(x, y);
Common::set_to(ptr, ptr + (x2-x+1), (uint16)color);
+ } else if (format.bytesPerPixel == 4) {
+ uint32 *ptr = (uint32 *)getBasePtr(x, y);
+ Common::set_to(ptr, ptr + (x2-x+1), color);
} else {
- error("Surface::hLine: bytesPerPixel must be 1 or 2");
+ error("Surface::hLine: bytesPerPixel must be 1, 2, or 4");
}
}
@@ -122,8 +127,15 @@ void Surface::vLine(int x, int y, int y2, uint32 color) {
*ptr = (uint16)color;
ptr += pitch/2;
}
+
+ } else if (format.bytesPerPixel == 4) {
+ uint32 *ptr = (uint32 *)getBasePtr(x, y);
+ while (y++ <= y2) {
+ *ptr = color;
+ ptr += pitch / 4;
+ }
} else {
- error("Surface::vLine: bytesPerPixel must be 1 or 2");
+ error("Surface::vLine: bytesPerPixel must be 1, 2, or 4");
}
}
@@ -183,8 +195,8 @@ void Surface::move(int dx, int dy, int height) {
if ((dx == 0 && dy == 0) || height <= 0)
return;
- if (format.bytesPerPixel != 1 && format.bytesPerPixel != 2)
- error("Surface::move: bytesPerPixel must be 1 or 2");
+ if (format.bytesPerPixel != 1 && format.bytesPerPixel != 2 && format.bytesPerPixel != 4)
+ error("Surface::move: bytesPerPixel must be 1, 2, or 4");
byte *src, *dst;
int x, y;
@@ -223,6 +235,10 @@ void Surface::move(int dx, int dy, int height) {
*(uint16 *)dst = *(const uint16 *)src;
src -= 2;
dst -= 2;
+ } else if (format.bytesPerPixel == 4) {
+ *(uint32 *)dst = *(const uint32 *)src;
+ src -= 4;
+ dst -= 4;
}
}
src += pitch + (pitch - dx * format.bytesPerPixel);
@@ -240,6 +256,10 @@ void Surface::move(int dx, int dy, int height) {
*(uint16 *)dst = *(const uint16 *)src;
src += 2;
dst += 2;
+ } else if (format.bytesPerPixel == 4) {
+ *(uint32 *)dst = *(const uint32 *)src;
+ src += 4;
+ dst += 4;
}
}
src += pitch - (pitch + dx * format.bytesPerPixel);