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 : 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);
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 !