sms, add fast renderer, remove 1st column (8 px) if blanked

This commit is contained in:
kub 2022-09-21 23:26:48 +00:00
parent 23e4719638
commit 96948bdfc8
15 changed files with 454 additions and 181 deletions

View file

@ -6,6 +6,8 @@
* See COPYING file in the top-level directory.
*/
#include <string.h>
// Convert 0000bbb0 ggg0rrr0 0000bbb0 ggg0rrr0
// to 00000000 rrr00000 ggg00000 bbb00000 ...
// TODO: rm when gp2x/emu.c is no longer used
@ -52,40 +54,88 @@ void bgr444_to_rgb32_sh(void *to, void *from)
}
}
void vidcpy_m2(void *dest, void *src, int m32col, int with_32c_border)
#define X (x_y >> 16)
#define Y (x_y & 0xffff)
#define W (w_h >> 16)
#define H (w_h & 0xffff)
// gp2x: 0-> X wiz: Y <-0
// | |
// v v
//
// Y X
void vidcpy_8bit(void *dest, void *src, int x_y, int w_h)
{
unsigned char *pd = dest, *ps = src;
int i;
pd += X + Y*320;
ps += X + Y*328 + 8;
for (i = 0; i < H; i++) {
memcpy(pd, ps, W);
ps += 328; pd += 320;
}
}
void vidcpy_8bit_rot(void *dest, void *src, int x_y, int w_h)
{
unsigned char *pd = dest, *ps = src;
int i, u;
if (m32col) {
for (i = 0; i < 224; i++)
{
ps += 8;
ps += 32;
pd += 32;
for (u = 0; u < 256; u++)
*pd++ = *ps++;
ps += 32;
pd += 32;
}
} else {
for (i = 0; i < 224; i++)
{
ps += 8;
for (u = 0; u < 320; u++)
*pd++ = *ps++;
pd += Y + (319-X)*240;
ps += X + Y*328 + 8;
for (i = 0; i < H; i += 4) {
unsigned char *p = (void *)ps;
unsigned int *q = (void *)pd;
for (u = 0; u < W; u++) {
*q = (p[3*328]<<24) + (p[2*328]<<16) + (p[1*328]<<8) + p[0*328];
p += 1;
q -= 240/4;
}
ps += 4*328; pd += 4;
}
}
void vidcpy_m2_rot(void *dest, void *src, int m32col, int with_32c_border)
{
}
void rotated_blit8 (void *dst, void *linesx4, int y, int is_32col)
{
unsigned char *pd = dst, *ps = linesx4;
int x, w, u;
x = (is_32col ? 32 : 0);
w = (is_32col ? 256 : 320);
y -= 4;
pd += y + (319-x)*240;
ps += x;
unsigned char *p = (void *)ps;
unsigned int *q = (void *)pd;
for (u = 0; u < w; u++) {
*q = (p[3*328]<<24) + (p[2*328]<<16) + (p[1*328]<<8) + p[0*328];
p += 1;
q -= 240/4;
}
}
void rotated_blit16(void *dst, void *linesx4, int y, int is_32col)
{
unsigned short *pd = dst, *ps = linesx4;
int x, w, u;
x = (is_32col ? 32 : 0);
w = (is_32col ? 256 : 320);
y -= 4;
pd += y + (319-x)*240;
ps += x;
unsigned short *p = (void *)ps;
unsigned int *q = (void *)pd;
for (u = 0; u < w; u++) {
q[0] = (p[1*328]<<16) + p[0*328];
q[1] = (p[3*328]<<16) + p[2*328];
p += 1;
q -= 2*240/4;
}
}