mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-12 20:17:49 +00:00
GRAPHICS: Prefer getBasePtr over direct Surface::pixels access.
This commit is contained in:
parent
6fce92b0ea
commit
dbef9fef3b
@ -130,14 +130,14 @@ bool BitmapDecoder::loadStream(Common::SeekableReadStream &stream) {
|
||||
const int extraDataLength = (srcPitch % 4) ? 4 - (srcPitch % 4) : 0;
|
||||
|
||||
if (bitsPerPixel == 8) {
|
||||
byte *dst = (byte *)_surface->pixels;
|
||||
byte *dst = (byte *)_surface->getBasePtr(0, 0);
|
||||
|
||||
for (int32 i = 0; i < height; i++) {
|
||||
stream.read(dst + (height - i - 1) * width, width);
|
||||
stream.skip(extraDataLength);
|
||||
}
|
||||
} else if (bitsPerPixel == 24) {
|
||||
byte *dst = (byte *)_surface->pixels + (height - 1) * _surface->pitch;
|
||||
byte *dst = (byte *)_surface->getBasePtr(0, height - 1);
|
||||
|
||||
for (int32 i = 0; i < height; i++) {
|
||||
for (uint32 j = 0; j < width; j++) {
|
||||
@ -154,7 +154,7 @@ bool BitmapDecoder::loadStream(Common::SeekableReadStream &stream) {
|
||||
dst -= _surface->pitch * 2;
|
||||
}
|
||||
} else { // 32 bpp
|
||||
byte *dst = (byte *)_surface->pixels + (height - 1) * _surface->pitch;
|
||||
byte *dst = (byte *)_surface->getBasePtr(0, height - 1);
|
||||
|
||||
for (int32 i = 0; i < height; i++) {
|
||||
for (uint32 j = 0; j < width; j++) {
|
||||
|
@ -170,7 +170,7 @@ void IFFDecoder::loadBitmap(Common::SeekableReadStream &stream) {
|
||||
if (_type == TYPE_ILBM) {
|
||||
uint32 scanlinePitch = ((_header.width + 15) >> 4) << 1;
|
||||
byte *scanlines = new byte[scanlinePitch * _header.numPlanes];
|
||||
byte *data = (byte *)_surface->pixels;
|
||||
byte *data = (byte *)_surface->getBasePtr(0, 0);
|
||||
|
||||
for (uint16 i = 0; i < _header.height; ++i) {
|
||||
byte *scanline = scanlines;
|
||||
@ -194,7 +194,7 @@ void IFFDecoder::loadBitmap(Common::SeekableReadStream &stream) {
|
||||
|
||||
delete[] scanlines;
|
||||
} else if (_type == TYPE_PBM) {
|
||||
byte *data = (byte *)_surface->pixels;
|
||||
byte *data = (byte *)_surface->getBasePtr(0, 0);
|
||||
uint32 outSize = _header.width * _header.height;
|
||||
|
||||
if (_header.compression) {
|
||||
|
@ -81,7 +81,7 @@ const Surface *JPEGDecoder::getSurface() const {
|
||||
const Graphics::Surface *uComponent = getComponent(2);
|
||||
const Graphics::Surface *vComponent = getComponent(3);
|
||||
|
||||
YUVToRGBMan.convert444(_rgbSurface, Graphics::YUVToRGBManager::kScaleFull, (byte *)yComponent->pixels, (byte *)uComponent->pixels, (byte *)vComponent->pixels, yComponent->w, yComponent->h, yComponent->pitch, uComponent->pitch);
|
||||
YUVToRGBMan.convert444(_rgbSurface, Graphics::YUVToRGBManager::kScaleFull, (const byte *)yComponent->getBasePtr(0, 0), (const byte *)uComponent->getBasePtr(0, 0), (const byte *)vComponent->getBasePtr(0, 0), yComponent->w, yComponent->h, yComponent->pitch, uComponent->pitch);
|
||||
|
||||
return _rgbSurface;
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ bool PCXDecoder::loadStream(Common::SeekableReadStream &stream) {
|
||||
if (nPlanes == 3 && bitsPerPixel == 8) { // 24bpp
|
||||
Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0);
|
||||
_surface->create(width, height, format);
|
||||
dst = (byte *)_surface->pixels;
|
||||
dst = (byte *)_surface->getBasePtr(0, 0);
|
||||
_paletteColorCount = 0;
|
||||
|
||||
for (y = 0; y < height; y++) {
|
||||
@ -135,7 +135,7 @@ bool PCXDecoder::loadStream(Common::SeekableReadStream &stream) {
|
||||
}
|
||||
} else if (nPlanes == 1 && bitsPerPixel == 8) { // 8bpp indexed
|
||||
_surface->create(width, height, Graphics::PixelFormat::createFormatCLUT8());
|
||||
dst = (byte *)_surface->pixels;
|
||||
dst = (byte *)_surface->getBasePtr(0, 0);
|
||||
_paletteColorCount = 16;
|
||||
|
||||
for (y = 0; y < height; y++, dst += _surface->pitch) {
|
||||
@ -163,7 +163,7 @@ bool PCXDecoder::loadStream(Common::SeekableReadStream &stream) {
|
||||
}
|
||||
} else if ((nPlanes == 2 || nPlanes == 3 || nPlanes == 4) && bitsPerPixel == 1) { // planar, 4, 8 or 16 colors
|
||||
_surface->create(width, height, Graphics::PixelFormat::createFormatCLUT8());
|
||||
dst = (byte *)_surface->pixels;
|
||||
dst = (byte *)_surface->getBasePtr(0, 0);
|
||||
_paletteColorCount = 16;
|
||||
|
||||
for (y = 0; y < height; y++, dst += _surface->pitch) {
|
||||
|
@ -364,7 +364,7 @@ void PICTDecoder::unpackBitsRect(Common::SeekableReadStream &stream, bool withPa
|
||||
case 1:
|
||||
// Just copy to the image
|
||||
_outputSurface->create(width, height, PixelFormat::createFormatCLUT8());
|
||||
memcpy(_outputSurface->pixels, buffer, _outputSurface->w * _outputSurface->h);
|
||||
memcpy(_outputSurface->getBasePtr(0, 0), buffer, _outputSurface->w * _outputSurface->h);
|
||||
break;
|
||||
case 2:
|
||||
// We have a 16-bit surface
|
||||
|
@ -164,7 +164,7 @@ bool PNGDecoder::loadStream(Common::SeekableReadStream &stream) {
|
||||
png_set_packing(pngPtr);
|
||||
} else {
|
||||
_outputSurface->create(width, height, Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0));
|
||||
if (!_outputSurface->pixels) {
|
||||
if (!_outputSurface->getBasePtr(0, 0)) {
|
||||
error("Could not allocate memory for output image.");
|
||||
}
|
||||
if (bitDepth == 16)
|
||||
|
@ -272,7 +272,7 @@ bool TGADecoder::readData(Common::SeekableReadStream &tga, byte imageType, byte
|
||||
} else if (imageType == TYPE_BW) {
|
||||
_surface.create(_surface.w, _surface.h, _format);
|
||||
|
||||
byte *data = (byte *)_surface.pixels;
|
||||
byte *data = (byte *)_surface.getBasePtr(0, 0);
|
||||
uint32 count = _surface.w * _surface.h;
|
||||
|
||||
while (count-- > 0) {
|
||||
@ -318,7 +318,7 @@ bool TGADecoder::readDataRLE(Common::SeekableReadStream &tga, byte imageType, by
|
||||
if (imageType == TYPE_RLE_TRUECOLOR || imageType == TYPE_RLE_BW || imageType == TYPE_RLE_CMAP) {
|
||||
_surface.create(_surface.w, _surface.h, _format);
|
||||
uint32 count = _surface.w * _surface.h;
|
||||
byte *data = (byte *)_surface.pixels;
|
||||
byte *data = (byte *)_surface.getBasePtr(0, 0);
|
||||
|
||||
while (count > 0) {
|
||||
uint32 header = tga.readByte();
|
||||
|
@ -77,13 +77,13 @@ void createThumbnail_4(const uint8 *src, uint32 srcPitch, uint8 *dstPtr, uint32
|
||||
|
||||
static void scaleThumbnail(Graphics::Surface &in, Graphics::Surface &out) {
|
||||
while (in.w / out.w >= 4 || in.h / out.h >= 4) {
|
||||
createThumbnail_4<565>((const uint8 *)in.pixels, in.pitch, (uint8 *)in.pixels, in.pitch, in.w, in.h);
|
||||
createThumbnail_4<565>((const uint8 *)in.getBasePtr(0, 0), in.pitch, (uint8 *)in.getBasePtr(0, 0), in.pitch, in.w, in.h);
|
||||
in.w /= 4;
|
||||
in.h /= 4;
|
||||
}
|
||||
|
||||
while (in.w / out.w >= 2 || in.h / out.h >= 2) {
|
||||
createThumbnail_2<565>((const uint8 *)in.pixels, in.pitch, (uint8 *)in.pixels, in.pitch, in.w, in.h);
|
||||
createThumbnail_2<565>((const uint8 *)in.getBasePtr(0, 0), in.pitch, (uint8 *)in.getBasePtr(0, 0), in.pitch, in.w, in.h);
|
||||
in.w /= 2;
|
||||
in.h /= 2;
|
||||
}
|
||||
@ -172,7 +172,7 @@ static bool grabScreen565(Graphics::Surface *surf) {
|
||||
return false;
|
||||
|
||||
assert(screen->format.bytesPerPixel == 1 || screen->format.bytesPerPixel == 2);
|
||||
assert(screen->pixels != 0);
|
||||
assert(screen->getBasePtr(0, 0) != 0);
|
||||
|
||||
Graphics::PixelFormat screenFormat = g_system->getScreenFormat();
|
||||
|
||||
@ -190,15 +190,16 @@ static bool grabScreen565(Graphics::Surface *surf) {
|
||||
byte r = 0, g = 0, b = 0;
|
||||
|
||||
if (screenFormat.bytesPerPixel == 1) {
|
||||
r = palette[((uint8 *)screen->pixels)[y * screen->pitch + x] * 3];
|
||||
g = palette[((uint8 *)screen->pixels)[y * screen->pitch + x] * 3 + 1];
|
||||
b = palette[((uint8 *)screen->pixels)[y * screen->pitch + x] * 3 + 2];
|
||||
uint8 pixel = *(uint8 *)screen->getBasePtr(x, y);
|
||||
r = palette[pixel * 3 + 0];
|
||||
g = palette[pixel * 3 + 1];
|
||||
b = palette[pixel * 3 + 2];
|
||||
} else if (screenFormat.bytesPerPixel == 2) {
|
||||
uint16 col = READ_UINT16(screen->getBasePtr(x, y));
|
||||
screenFormat.colorToRGB(col, r, g, b);
|
||||
}
|
||||
|
||||
((uint16 *)surf->pixels)[y * surf->w + x] = Graphics::RGBToColor<Graphics::ColorMasks<565> >(r, g, b);
|
||||
*((uint16 *)surf->getBasePtr(x, y)) = Graphics::RGBToColor<Graphics::ColorMasks<565> >(r, g, b);
|
||||
}
|
||||
}
|
||||
|
||||
@ -246,7 +247,7 @@ bool createThumbnail(Graphics::Surface *surf, const uint8 *pixels, int w, int h,
|
||||
g = palette[pixels[y * w + x] * 3 + 1];
|
||||
b = palette[pixels[y * w + x] * 3 + 2];
|
||||
|
||||
((uint16 *)screen.pixels)[y * screen.w + x] = Graphics::RGBToColor<Graphics::ColorMasks<565> >(r, g, b);
|
||||
*((uint16 *)screen.getBasePtr(y, x)) = Graphics::RGBToColor<Graphics::ColorMasks<565> >(r, g, b);
|
||||
}
|
||||
}
|
||||
|
||||
@ -272,7 +273,7 @@ bool createScreenShot(Graphics::Surface &surf) {
|
||||
byte r = 0, g = 0, b = 0, a = 0;
|
||||
uint32 col = READ_UINT32(screen->getBasePtr(x, y));
|
||||
screenFormat.colorToARGB(col, a, r, g, b);
|
||||
((uint32 *)surf.pixels)[y * surf.w + x] = Graphics::ARGBToColor<Graphics::ColorMasks<8888> >(a, r, g, b);
|
||||
*((uint32 *)surf.getBasePtr(x, y)) = Graphics::ARGBToColor<Graphics::ColorMasks<8888> >(a, r, g, b);
|
||||
}
|
||||
}
|
||||
g_system->unlockScreen();
|
||||
|
@ -229,7 +229,7 @@ void convertYUV444ToRGB(byte *dstPtr, int dstPitch, const YUVToRGBLookup *lookup
|
||||
|
||||
void YUVToRGBManager::convert444(Graphics::Surface *dst, YUVToRGBManager::LuminanceScale scale, const byte *ySrc, const byte *uSrc, const byte *vSrc, int yWidth, int yHeight, int yPitch, int uvPitch) {
|
||||
// Sanity checks
|
||||
assert(dst && dst->pixels);
|
||||
assert(dst && dst->getBasePtr(0, 0));
|
||||
assert(dst->format.bytesPerPixel == 2 || dst->format.bytesPerPixel == 4);
|
||||
assert(ySrc && uSrc && vSrc);
|
||||
|
||||
@ -237,9 +237,9 @@ void YUVToRGBManager::convert444(Graphics::Surface *dst, YUVToRGBManager::Lumina
|
||||
|
||||
// Use a templated function to avoid an if check on every pixel
|
||||
if (dst->format.bytesPerPixel == 2)
|
||||
convertYUV444ToRGB<uint16>((byte *)dst->pixels, dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
convertYUV444ToRGB<uint16>((byte *)dst->getBasePtr(0, 0), dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
else
|
||||
convertYUV444ToRGB<uint32>((byte *)dst->pixels, dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
convertYUV444ToRGB<uint32>((byte *)dst->getBasePtr(0, 0), dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
}
|
||||
|
||||
template<typename PixelInt>
|
||||
@ -283,7 +283,7 @@ void convertYUV420ToRGB(byte *dstPtr, int dstPitch, const YUVToRGBLookup *lookup
|
||||
|
||||
void YUVToRGBManager::convert420(Graphics::Surface *dst, YUVToRGBManager::LuminanceScale scale, const byte *ySrc, const byte *uSrc, const byte *vSrc, int yWidth, int yHeight, int yPitch, int uvPitch) {
|
||||
// Sanity checks
|
||||
assert(dst && dst->pixels);
|
||||
assert(dst && dst->getBasePtr(0, 0));
|
||||
assert(dst->format.bytesPerPixel == 2 || dst->format.bytesPerPixel == 4);
|
||||
assert(ySrc && uSrc && vSrc);
|
||||
assert((yWidth & 1) == 0);
|
||||
@ -293,9 +293,9 @@ void YUVToRGBManager::convert420(Graphics::Surface *dst, YUVToRGBManager::Lumina
|
||||
|
||||
// Use a templated function to avoid an if check on every pixel
|
||||
if (dst->format.bytesPerPixel == 2)
|
||||
convertYUV420ToRGB<uint16>((byte *)dst->pixels, dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
convertYUV420ToRGB<uint16>((byte *)dst->getBasePtr(0, 0), dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
else
|
||||
convertYUV420ToRGB<uint32>((byte *)dst->pixels, dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
convertYUV420ToRGB<uint32>((byte *)dst->getBasePtr(0, 0), dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
}
|
||||
|
||||
#define READ_QUAD(ptr, prefix) \
|
||||
@ -368,7 +368,7 @@ void convertYUV410ToRGB(byte *dstPtr, int dstPitch, const YUVToRGBLookup *lookup
|
||||
|
||||
void YUVToRGBManager::convert410(Graphics::Surface *dst, YUVToRGBManager::LuminanceScale scale, const byte *ySrc, const byte *uSrc, const byte *vSrc, int yWidth, int yHeight, int yPitch, int uvPitch) {
|
||||
// Sanity checks
|
||||
assert(dst && dst->pixels);
|
||||
assert(dst && dst->getBasePtr(0, 0));
|
||||
assert(dst->format.bytesPerPixel == 2 || dst->format.bytesPerPixel == 4);
|
||||
assert(ySrc && uSrc && vSrc);
|
||||
assert((yWidth & 3) == 0);
|
||||
@ -378,9 +378,9 @@ void YUVToRGBManager::convert410(Graphics::Surface *dst, YUVToRGBManager::Lumina
|
||||
|
||||
// Use a templated function to avoid an if check on every pixel
|
||||
if (dst->format.bytesPerPixel == 2)
|
||||
convertYUV410ToRGB<uint16>((byte *)dst->pixels, dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
convertYUV410ToRGB<uint16>((byte *)dst->getBasePtr(0, 0), dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
else
|
||||
convertYUV410ToRGB<uint32>((byte *)dst->pixels, dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
convertYUV410ToRGB<uint32>((byte *)dst->getBasePtr(0, 0), dst->pitch, lookup, _colorTab, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch);
|
||||
}
|
||||
|
||||
} // End of namespace Graphics
|
||||
|
Loading…
Reference in New Issue
Block a user