mirror of
https://github.com/cc65/cc65.git
synced 2025-02-03 22:32:24 +00:00
Optimize low color packed sprites
git-svn-id: svn://svn.cc65.org/cc65/trunk@5951 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
4697cf255f
commit
2f860697b8
@ -189,7 +189,7 @@ static void AssembleByte(unsigned bits, char val)
|
||||
} while (--bits);
|
||||
}
|
||||
|
||||
static unsigned char ChoosePackagingMode(signed len, signed index, char LineBuffer[512])
|
||||
static unsigned char ChoosePackagingMode(signed len, signed index, char ColorBits, char LineBuffer[512])
|
||||
{
|
||||
--len;
|
||||
if (!len) {
|
||||
@ -198,6 +198,18 @@ static unsigned char ChoosePackagingMode(signed len, signed index, char LineBuff
|
||||
if (LineBuffer[index] != LineBuffer[index + 1]) {
|
||||
return 0;
|
||||
}
|
||||
if (ColorBits > 2) {
|
||||
return 1;
|
||||
}
|
||||
if (LineBuffer[index] != LineBuffer[index + 2]) {
|
||||
return 0;
|
||||
}
|
||||
if (ColorBits > 1) {
|
||||
return 1;
|
||||
}
|
||||
if (LineBuffer[index] != LineBuffer[index + 3]) {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -260,7 +272,7 @@ static void encodeSprite(StrBuf *D, enum Mode M, char ColorBits, char ColorMask,
|
||||
case smPacked:
|
||||
i = 0;
|
||||
while (len) {
|
||||
if (ChoosePackagingMode(len, i, LineBuffer)) {
|
||||
if (ChoosePackagingMode(len, i, ColorBits, LineBuffer)) {
|
||||
/* Make runlength packet */
|
||||
V = LineBuffer[i];
|
||||
++i;
|
||||
@ -282,7 +294,7 @@ static void encodeSprite(StrBuf *D, enum Mode M, char ColorBits, char ColorMask,
|
||||
*d_ptr++ = V;
|
||||
--len;
|
||||
count = 0;
|
||||
while (ChoosePackagingMode(len, i, LineBuffer) == 0 && len && count != 15) {
|
||||
while (ChoosePackagingMode(len, i, ColorBits, LineBuffer) == 0 && len && count != 15) {
|
||||
V = LineBuffer[i++];
|
||||
*d_ptr++ = V;
|
||||
++count;
|
||||
@ -309,7 +321,7 @@ static void encodeSprite(StrBuf *D, enum Mode M, char ColorBits, char ColorMask,
|
||||
}
|
||||
i = 0;
|
||||
while (len) {
|
||||
if (ChoosePackagingMode(len, i, LineBuffer)) {
|
||||
if (ChoosePackagingMode(len, i, ColorBits, LineBuffer)) {
|
||||
/* Make runlength packet */
|
||||
V = LineBuffer[i];
|
||||
++i;
|
||||
@ -331,7 +343,7 @@ static void encodeSprite(StrBuf *D, enum Mode M, char ColorBits, char ColorMask,
|
||||
*d_ptr++ = V;
|
||||
--len;
|
||||
count = 0;
|
||||
while (ChoosePackagingMode(len, i, LineBuffer) == 0 && len && count != 15) {
|
||||
while (ChoosePackagingMode(len, i, ColorBits, LineBuffer) == 0 && len && count != 15) {
|
||||
V = LineBuffer[i++];
|
||||
*d_ptr++ = V;
|
||||
++count;
|
||||
|
Loading…
x
Reference in New Issue
Block a user