mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-09-22 22:45:39 +00:00
Handle RGB15BE blit
This commit is contained in:
@@ -559,6 +559,7 @@ namespace PortabilityLayer
|
||||
}
|
||||
|
||||
const int componentSize = pixMapBE.m_componentSize;
|
||||
const int componentCount = pixMapBE.m_componentCount;
|
||||
|
||||
// We only support rect moves that are the same size
|
||||
if (srcRect.right - srcRect.left != destRect.right - destRect.left)
|
||||
@@ -685,7 +686,7 @@ namespace PortabilityLayer
|
||||
|
||||
if (!started)
|
||||
{
|
||||
context->Start(QDPictBlitSourceType_RGB15, params);
|
||||
context->Start(QDPictBlitSourceType_RGB15Native, params);
|
||||
started = true;
|
||||
}
|
||||
|
||||
@@ -758,8 +759,14 @@ namespace PortabilityLayer
|
||||
case 8:
|
||||
context->Start(QDPictBlitSourceType_Indexed8Bit, params);
|
||||
break;
|
||||
case 5:
|
||||
if (componentCount == 3)
|
||||
context->Start(QDPictBlitSourceType_RGB15BE, params);
|
||||
else
|
||||
return 52;
|
||||
break;
|
||||
default:
|
||||
return 52; // ???
|
||||
return 53; // ???
|
||||
}
|
||||
|
||||
started = true;
|
||||
@@ -768,14 +775,14 @@ namespace PortabilityLayer
|
||||
context->BlitScanlineAndAdvance(decompressedScanlineBuffer);
|
||||
}
|
||||
else
|
||||
return 53;
|
||||
return 54;
|
||||
}
|
||||
|
||||
// Either undocumented behavior or non-compliant PICT resources, not sure
|
||||
if (isPixMap && (stream->Tell() & 1) != 0)
|
||||
{
|
||||
if (!stream->SeekCurrent(1))
|
||||
return 54;
|
||||
return 55;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@@ -18,7 +18,8 @@ namespace PortabilityLayer
|
||||
QDPictBlitSourceType_Indexed2Bit,
|
||||
QDPictBlitSourceType_Indexed4Bit,
|
||||
QDPictBlitSourceType_Indexed8Bit,
|
||||
QDPictBlitSourceType_RGB15,
|
||||
QDPictBlitSourceType_RGB15Native,
|
||||
QDPictBlitSourceType_RGB15BE,
|
||||
QDPictBlitSourceType_RGB24_Interleaved,
|
||||
QDPictBlitSourceType_RGB24_Multiplane,
|
||||
};
|
||||
|
@@ -624,7 +624,7 @@ void BMPDumperContext::BlitScanlineAndAdvance(const void *scanlineData)
|
||||
outRowStart[i] = m_blitParams.m_colors[colorIndex];
|
||||
}
|
||||
break;
|
||||
case PortabilityLayer::QDPictBlitSourceType_RGB15:
|
||||
case PortabilityLayer::QDPictBlitSourceType_RGB15Native:
|
||||
for (size_t i = 0; i < rowSize; i++)
|
||||
{
|
||||
const size_t originCol = i + firstSrcCol;
|
||||
@@ -637,6 +637,20 @@ void BMPDumperContext::BlitScanlineAndAdvance(const void *scanlineData)
|
||||
outputItem.a = 255;
|
||||
}
|
||||
break;
|
||||
case PortabilityLayer::QDPictBlitSourceType_RGB15BE:
|
||||
for (size_t i = 0; i < rowSize; i++)
|
||||
{
|
||||
const size_t originCol = i + firstSrcCol;
|
||||
const uint8_t *itemBytes = (scanlineBytes + originCol * 2);
|
||||
const uint16_t item = static_cast<uint16_t>((itemBytes[0] << 8) | itemBytes[1]);
|
||||
PortabilityLayer::RGBAColor &outputItem = outRowStart[i];
|
||||
|
||||
outputItem.b = FiveToEight(item & 0x1f);
|
||||
outputItem.g = FiveToEight((item >> 5) & 0x1f);
|
||||
outputItem.r = FiveToEight((item >> 10) & 0x1f);
|
||||
outputItem.a = 255;
|
||||
}
|
||||
break;
|
||||
case PortabilityLayer::QDPictBlitSourceType_RGB24_Interleaved:
|
||||
for (size_t i = 0; i < rowSize; i++)
|
||||
{
|
||||
|
Reference in New Issue
Block a user