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 :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é.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
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 !
Partager