[SDL] Blit et canal alpha
Bonjour à tous !
Mon problème concerne plus SDL que Free Pascal lui-même, mais je ne travaille pas en C/C++, d'où mon choix de poster dans ce forum (je m'excuse d'avance si ce n'était pas le bon). J'utilise Jedi-SDL (http://sourceforge.net/projects/jedi-sdl).
J'ai pas mal cherché sur le net comment, lors d'un blit entre deux surfaces munies d'un canal alpha, comment conserver la valeur de l'alpha de la surface source. Exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [...]
screen := SDL_SetVideoMode([...]);
source := SDL_DisplayFormatAlpha(une_autre_surface);
surf_temp := SDL_CreateRGBSurface(
SDL_SWSURFACE or SDL_SRCALPHA,
150, 50,
32,
0, 0, 0, 0
);
dest := SDL_DisplayFormatAlpha(surf_temp);
SDL_FillRect(dest, nil, SDL_MapRGBA(dest.format, 0, 0, 0, 0));
SDL_BlitSurface(source, nil, dest, nil);
SDL_BlitSurface(dest, nil, screen, nil);
SDL_UpdateRect(screen, 0, 0, 0, 0); |
Malgré ces appels à blit, ma surface « dest » reste transparente (car SDL_BlitSurface conserve par défaut le canal alpha de la surface de destination, ce que je ne veux pas) et donc screen reste inchangé.
J'ai pensé à d'abord faire un blit de « screen » sur « dest » puis de « source » vers « dest » et enfin de « dest » vers « screen », mais cela suppose de connaître d'avance la position de blit de « dest » sur « screen » et je ne trouve pas ça très propre. Existe-t-il une méthode sans bidouillage pour changer le comportement de SDL_BlitSurface ?
Merci !