mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-13 07:14:59 +00:00
ZVISION: Remove duplicate code
This commit is contained in:
parent
c93776e1e0
commit
702adaf9f8
@ -162,97 +162,8 @@ void RenderManager::renderImageToBackground(const Common::String &fileName, int1
|
||||
}
|
||||
|
||||
void RenderManager::readImageToSurface(const Common::String &fileName, Graphics::Surface &destination) {
|
||||
Common::File file;
|
||||
|
||||
if (!_engine->getSearchManager()->openFile(file, fileName)) {
|
||||
warning("Could not open file %s", fileName.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
// Read the magic number
|
||||
// Some files are true TGA, while others are TGZ
|
||||
uint32 fileType = file.readUint32BE();
|
||||
|
||||
uint32 imageWidth;
|
||||
uint32 imageHeight;
|
||||
Image::TGADecoder tga;
|
||||
uint16 *buffer;
|
||||
bool isTransposed = _renderTable.getRenderState() == RenderTable::PANORAMA;
|
||||
// All ZVision images are in RGB 555
|
||||
Graphics::PixelFormat pixelFormat555 = Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0);
|
||||
destination.format = pixelFormat555;
|
||||
|
||||
bool isTGZ;
|
||||
|
||||
// Check for TGZ files
|
||||
if (fileType == MKTAG('T', 'G', 'Z', '\0')) {
|
||||
isTGZ = true;
|
||||
|
||||
// TGZ files have a header and then Bitmap data that is compressed with LZSS
|
||||
uint32 decompressedSize = file.readSint32LE();
|
||||
imageWidth = file.readSint32LE();
|
||||
imageHeight = file.readSint32LE();
|
||||
|
||||
LzssReadStream lzssStream(&file);
|
||||
buffer = (uint16 *)(new uint16[decompressedSize]);
|
||||
lzssStream.read(buffer, decompressedSize);
|
||||
} else {
|
||||
isTGZ = false;
|
||||
|
||||
// Reset the cursor
|
||||
file.seek(0);
|
||||
|
||||
// Decode
|
||||
if (!tga.loadStream(file)) {
|
||||
warning("Error while reading TGA image");
|
||||
return;
|
||||
}
|
||||
|
||||
Graphics::Surface tgaSurface = *(tga.getSurface());
|
||||
imageWidth = tgaSurface.w;
|
||||
imageHeight = tgaSurface.h;
|
||||
|
||||
buffer = (uint16 *)tgaSurface.getPixels();
|
||||
}
|
||||
|
||||
// Flip the width and height if transposed
|
||||
if (isTransposed) {
|
||||
uint16 temp = imageHeight;
|
||||
imageHeight = imageWidth;
|
||||
imageWidth = temp;
|
||||
}
|
||||
|
||||
// If the destination internal buffer is the same size as what we're copying into it,
|
||||
// there is no need to free() and re-create
|
||||
if (imageWidth != destination.w || imageHeight != destination.h) {
|
||||
destination.create(imageWidth, imageHeight, pixelFormat555);
|
||||
}
|
||||
|
||||
// If transposed, 'un-transpose' the data while copying it to the destination
|
||||
// Otherwise, just do a simple copy
|
||||
if (isTransposed) {
|
||||
uint16 *dest = (uint16 *)destination.getPixels();
|
||||
|
||||
for (uint32 y = 0; y < imageHeight; ++y) {
|
||||
uint32 columnIndex = y * imageWidth;
|
||||
|
||||
for (uint32 x = 0; x < imageWidth; ++x) {
|
||||
dest[columnIndex + x] = buffer[x * imageHeight + y];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
memcpy(destination.getPixels(), buffer, imageWidth * imageHeight * _pixelFormat.bytesPerPixel);
|
||||
}
|
||||
|
||||
// Cleanup
|
||||
if (isTGZ) {
|
||||
delete[] buffer;
|
||||
} else {
|
||||
tga.destroy();
|
||||
}
|
||||
|
||||
// Convert in place to RGB 565 from RGB 555
|
||||
destination.convertToInPlace(_pixelFormat);
|
||||
readImageToSurface(fileName, destination, isTransposed);
|
||||
}
|
||||
|
||||
void RenderManager::readImageToSurface(const Common::String &fileName, Graphics::Surface &destination, bool transposed) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user