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