Au début je n'utilisais que des unsigned char pour copier de pixel en pixel et j'ai décidé de passer au unsigned long pour aller 4 fois plus vite.
void Fast_Draw_Sprite_32(unsigned char *sprite, unsigned short x, unsigned short y) { short i,j; unsigned long *sprite_long = sprite; unsigned long *dest = ((unsigned long *)gpDraw[nflip].ptbuffer + ((x<<8)-(x<<4) + (239-y-31))/4 ); i=32; while(i--) { *dest++ = *sprite_long++; *dest++ = *sprite_long++; *dest++ = *sprite_long++; *dest++ = *sprite_long++; *dest++ = *sprite_long++; *dest++ = *sprite_long++; *dest++ = *sprite_long++; *dest++ = *sprite_long++; dest = dest + ((240-32)/4); } }
Mais j'ai un petit problème : les sprites dessinés par cette routines bougent en y de 4 pixels en 4 pixels ce qui donne une impression de saccade lorsque la caméra se déplace verticalement... et puis les sprites sont décalé 3 fois sur 4 par rapport à ceux dessiné par la routine du sdk.