SDL_BlitSurface

Nom

SDL_BlitSurface -- Effectue un blit rapide de la surface source vers la surface de destination

Synopsis

#include "SDL.h"

int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);

Description

Cette fonction effectue un blit rapide de la surface source vers la surface de destination

La largeur et la hauteur de srcrect déterminent la taille du rectangle copié. Seul la position est utilisée dans le dstrect (la largeur et la hauteur sont ignorées). Les blits avec des coordonnées dstrect négatives sont découpés correctement.

Si srcrect est NULL, la surface source est copiée entièrement. Si dstrect est NULL, la position de destination (du coin superieur gauche) est (0,0).

Le rectangle de blit final est sauvé dans dstrect aprés avoir effectué les découpages (srcrect n'est pas modifié).

Cette fonction ne doit pas être appelée sur des surfaces verrouillées. Par exemple, quand vous utilisez vos propres fonctions de dessin vous pouvez avoir besoin de verrouiller une surface, mais ce n'est pas le cas avec SDL_BlitSurface. Comme la plupart des fonctions de manipulation de surface dans SDL, elle ne doit pas être utilisée avec OpenGL.

Les résultats des opérations de blitting varient beaucoup en fonction de l'activation ou non de SDL_SRCALPHA. Voir SDL_SetAlpha pour une explication de la façon dont cela influence le rendu. Les attributs alpha et le colorkey interagissent également avec le blitting, comme le pseudo code suivant tente de l'expliquer:

if (source surface has SDL_SRCALPHA set) {
    if (source surface has alpha channel (that is, format->Amask != 0))
        blit using per-pixel alpha, ignoring any colour key
    else {
        if (source surface has SDL_SRCCOLORKEY set)
            blit using the colour key AND the per-surface alpha value
        else
            blit using the per-surface alpha value
    }
} else {
    if (source surface has SDL_SRCCOLORKEY set)
        blit using the colour key
    else
        ordinary opaque rectangular blit
}

Valeur de retour

Si le blit a réussi, la fonction renvoie 0, sinon, elle renvoie -1.

Si l'une des surfaces était dans la mémoire vidéo et que le blit renvoie -2, la mémoire vidéo a été perdue, et la surface doit être rechargée et re-blittée.

        while ( SDL_BlitSurface(image, imgrect, screen, dstrect) == -2 ) {
                while ( SDL_LockSurface(image)) < 0 )
                        SDL_Delay(10);
                -- Ecrit les pixels de image dans image->pixels --
                SDL_UnlockSurface(image);
        }

Cela arrive sous DirectX 5.0 quand le système passe du mode plein écran au mode fenêtré. Le verrouillage de la surface échouera également jusqu'à ce que vous ayez à nouveau accès à la mémoire vidéo.

Note: Le blitter SDL n'a pas (encore) la capacité d'agrandir ou de réduire la taille des surfaces blittées comme c'est le cas avec d'autres mécanismes de blitting plus sophistiqués. Si vous devez redimensionner vos images, vous devrez trouver une solution vous-même (ex: avec SDL_gfx).

Note: Quand vous blittez entre 2 surfaces alpha, normalement l'alpha de la destination agit comme un masque. Si vous voulez juste faire une "béte copie" sans mélange ou transparence, vous devez désactiver le flag SDL_SRCALPHA sur la surface source. C'est supposé marcher de cette façon, mais cela peut être surprenant quand vous essayez de combiner une image avec une autre et que les deux ont des fonds transparents.

Voir Aussi

SDL_FillRect, SDL_LockSurface, SDL_Rect, SDL_SetAlpha, SDL_SetColorKey, SDL_SurfaceSDL_Surface


CategorySDLVideoFr

SDLDoc-fr/SDL_BlitSurface (last edited 2009-07-12 21:26:37 by 88-122-163-164)