je cherche a afficher les sprites de manière plus rapide autre que de faire pixel par pixel comme n2DLib le fait...
- Code: Select all
void drawSprite(const unsigned short *src, int _x, int _y, int flash, unsigned short flashColor)
{
int x, y, w = src[0] + _x, h = src[1] + _y, c = 3;
for(y = _y; y < h; y++)
{
for(x = _x; x < w; x++, c++)
{
if(src[c] != src[2])
setPixel(x, y, flash ? flashColor : src[c]);
}
if(y > 239) break;
}
}
Comparé a un simple memcpy, c'est loin de efficient...
J'ai essayé d'écrire cette routine la :
(Pour l'instant, on va assumer que je veux pas que mon sprite soit transparent. (question de vitesse))
- Code: Select all
typedef struct tagBITMAP
{
unsigned short width;
unsigned short height;
unsigned long tsize;
unsigned char *data;
} BITMAP;
#define SCREEN_WIDTH 320
void CopySprite(BITMAP* b, u32* dst, short x, short y)
{
int j;
for(j = 0; j < b->height; j++)
{
memcpy(dst+((b->width/2)*j), bmp->data+((b->width*2)*j), (b->width*2)*2);
dst += (SCREEN_WIDTH - b->width);
}
}
tsize correspond a la taille totale du fichier (320*240*2 pour l'écran de la nspire par exemple)
Le problème de cette routine est qu'elle ne fonctionne pas correctement si l'image (le bitmap en question) a une taille qui n'est pas 320 pixels en largeur.
Est-ce que quelqu'un pourrait corriger ma routine ou m'en passer une meilleure qui peut correspondre a mes besoins ?
Car j'ai pas d'idée <_<
De préference en C svp
Merci