Il y a plussieurs chose, coment initialyse tu ton screen ?
screen = SDL_SetVideoMode(640, 640, 32, SDL_SWSURFACE);
de cette manière tu es sûr d'avoir du 32 bit .
Pour fire, n'oublie pas tes mask !!
fire=SDL_CreateRGBSurface(SDL_SRCALPHA, 255, 255, 32, rmask, gmask, bmask, amask);
avec au préalable tes définitions:
Uint32 rmask, gmask, bmask, amask;
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;
#else
rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0xff000000;
#endif
Voici donc une mini démo ou le fil rouge disparait progressivement, le bleu apparait progressivement :
int main(int argc, char *argv[]) {
SDL_Surface *screen,*Rect,*fire;
SDL_Rect dest;
unsigned i;
Uint32 rmask, gmask, bmask, amask;
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
rmask = 0xff000000; gmask = 0x00ff0000; bmask = 0x0000ff00; amask = 0x000000ff;
#else
rmask = 0x000000ff; gmask = 0x0000ff00; bmask = 0x00ff0000; amask = 0xff000000;
#endif
screen = SDL_SetVideoMode(640, 640, 32, SDL_SWSURFACE);
fire=SDL_CreateRGBSurface(SDL_SRCALPHA, 255, 255, 32, rmask, gmask, bmask, amask);
for (i=0;i<255;i++)
{
putpixel(fire,i+1,i+1,SDL_MapRGBA(fire->format,0,0,255,i));
putpixel(fire,i+1,100,SDL_MapRGBA(fire->format,255,0,0,255-i));
}
//et je finis par afficher
SDL_BlitSurface(fire, NULL, screen, NULL);
SDL_UpdateRect(screen, 0, 0,0,0);
sleep(9);
}

:*)