comparison src/video/SDL_RLEaccel.c @ 2735:204be4fc2726

Final merge of Google Summer of Code 2008 work... Port SDL 1.3 to the Nintendo DS by Darren Alton, mentored by Sam Lantinga
author Sam Lantinga <slouken@libsdl.org>
date Wed, 27 Aug 2008 15:10:03 +0000
parents 91e601d9df8b
children 5f3831f1c3ea
comparison
equal deleted inserted replaced
2734:dd25eabe441c 2735:204be4fc2726
1152 if (run) { 1152 if (run) {
1153 srcbuf += 2 * run; 1153 srcbuf += 2 * run;
1154 ofs += run; 1154 ofs += run;
1155 } else if (!ofs) 1155 } else if (!ofs)
1156 goto done; 1156 goto done;
1157 } 1157 } while (ofs < w);
1158 while (ofs < w);
1159 1158
1160 /* skip padding */ 1159 /* skip padding */
1161 srcbuf += (uintptr_t) srcbuf & 2; 1160 srcbuf += (uintptr_t) srcbuf & 2;
1162 1161
1163 /* skip translucent line */ 1162 /* skip translucent line */
1166 int run; 1165 int run;
1167 ofs += ((Uint16 *) srcbuf)[0]; 1166 ofs += ((Uint16 *) srcbuf)[0];
1168 run = ((Uint16 *) srcbuf)[1]; 1167 run = ((Uint16 *) srcbuf)[1];
1169 srcbuf += 4 * (run + 1); 1168 srcbuf += 4 * (run + 1);
1170 ofs += run; 1169 ofs += run;
1171 } 1170 } while (ofs < w);
1172 while (ofs < w); 1171 } while (--vskip);
1173 }
1174 while (--vskip);
1175 } else { 1172 } else {
1176 /* the 32/32 interleaved format */ 1173 /* the 32/32 interleaved format */
1177 vskip <<= 1; /* opaque and translucent have same format */ 1174 vskip <<= 1; /* opaque and translucent have same format */
1178 do { 1175 do {
1179 ofs = 0; 1176 ofs = 0;
1185 if (run) { 1182 if (run) {
1186 srcbuf += 4 * run; 1183 srcbuf += 4 * run;
1187 ofs += run; 1184 ofs += run;
1188 } else if (!ofs) 1185 } else if (!ofs)
1189 goto done; 1186 goto done;
1190 } 1187 } while (ofs < w);
1191 while (ofs < w); 1188 } while (--vskip);
1192 }
1193 while (--vskip);
1194 } 1189 }
1195 } 1190 }
1196 } 1191 }
1197 1192
1198 /* if left or right edge clipping needed, call clip blit */ 1193 /* if left or right edge clipping needed, call clip blit */
1565 ADD_OPAQUE_COUNTS(0, len); 1560 ADD_OPAQUE_COUNTS(0, len);
1566 dst += copy_opaque(dst, src + runstart, len, sf, df); 1561 dst += copy_opaque(dst, src + runstart, len, sf, df);
1567 runstart += len; 1562 runstart += len;
1568 run -= len; 1563 run -= len;
1569 } 1564 }
1570 } 1565 } while (x < w);
1571 while (x < w);
1572 1566
1573 /* Make sure the next output address is 32-bit aligned */ 1567 /* Make sure the next output address is 32-bit aligned */
1574 dst += (uintptr_t) dst & 2; 1568 dst += (uintptr_t) dst & 2;
1575 1569
1576 /* Next, encode all translucent pixels of the same scan line */ 1570 /* Next, encode all translucent pixels of the same scan line */
1602 runstart += len; 1596 runstart += len;
1603 run -= len; 1597 run -= len;
1604 } 1598 }
1605 if (!blankline) 1599 if (!blankline)
1606 lastline = dst; 1600 lastline = dst;
1607 } 1601 } while (x < w);
1608 while (x < w);
1609 1602
1610 src += surface->pitch >> 2; 1603 src += surface->pitch >> 2;
1611 } 1604 }
1612 dst = lastline; /* back up past trailing blank lines */ 1605 dst = lastline; /* back up past trailing blank lines */
1613 ADD_OPAQUE_COUNTS(0, 0); 1606 ADD_OPAQUE_COUNTS(0, 0);
1769 runstart += len; 1762 runstart += len;
1770 run -= len; 1763 run -= len;
1771 } 1764 }
1772 if (!blankline) 1765 if (!blankline)
1773 lastline = dst; 1766 lastline = dst;
1774 } 1767 } while (x < w);
1775 while (x < w);
1776 1768
1777 srcbuf += surface->pitch; 1769 srcbuf += surface->pitch;
1778 } 1770 }
1779 dst = lastline; /* back up bast trailing blank lines */ 1771 dst = lastline; /* back up bast trailing blank lines */
1780 ADD_COUNTS(0, 0); 1772 ADD_COUNTS(0, 0);
1909 if (run) { 1901 if (run) {
1910 srcbuf += uncopy_opaque(dst + ofs, srcbuf, run, df, sf); 1902 srcbuf += uncopy_opaque(dst + ofs, srcbuf, run, df, sf);
1911 ofs += run; 1903 ofs += run;
1912 } else if (!ofs) 1904 } else if (!ofs)
1913 return (SDL_TRUE); 1905 return (SDL_TRUE);
1914 } 1906 } while (ofs < w);
1915 while (ofs < w);
1916 1907
1917 /* skip padding if needed */ 1908 /* skip padding if needed */
1918 if (bpp == 2) 1909 if (bpp == 2)
1919 srcbuf += (uintptr_t) srcbuf & 2; 1910 srcbuf += (uintptr_t) srcbuf & 2;
1920 1911
1927 srcbuf += 4; 1918 srcbuf += 4;
1928 if (run) { 1919 if (run) {
1929 srcbuf += uncopy_transl(dst + ofs, srcbuf, run, df, sf); 1920 srcbuf += uncopy_transl(dst + ofs, srcbuf, run, df, sf);
1930 ofs += run; 1921 ofs += run;
1931 } 1922 }
1932 } 1923 } while (ofs < w);
1933 while (ofs < w);
1934 dst += surface->pitch >> 2; 1924 dst += surface->pitch >> 2;
1935 } 1925 }
1936 /* Make the compiler happy */ 1926 /* Make the compiler happy */
1937 return (SDL_TRUE); 1927 return (SDL_TRUE);
1938 } 1928 }