2010-09-13 5 views
16

Dans le wiki SDL, il ditSDL: Qu'est-ce qu'un Blit?

Utilisez cette fonction pour effectuer une blit rapide de la surface de la source à la surface de destination.

Cependant cela ne m'aide pas beaucoup. Que signifie le terme «blitting de surface» dans ce contexte?

+6

http://en.wikipedia.org/wiki/Bit_blit –

Répondre

17

Fondamentalement, cela signifie copier l'image d'une surface à l'autre - éventuellement recadrée et décalée.

+1

... et mis à l'échelle, si nécessaire –

+0

StretchBlt() fait que l'échelle pour vous. – null

11

Blitting signifie transfert de bloc limite bit tel que défini par Wikipedia ou bloc d'informations Transfert, bien connu parmi les développeurs Pygame. Supposons que vous avez une surface (votre écran). Et vous souhaitez dessiner un cercle sur l'écran. Donc, ce que vous voulez faire est de dessiner le cercle et de transférer le bloc de cercle du tampon dans le tampon d'écran, ce processus est appelé "Blitting". Vous pouvez aller de l'avant et en savoir plus sur Blit here.

0

Exemple de code

Intuitivement, cela signifie « dessiner un sprite sur le dessus d'une autre surface ».

Cette opération peut être accélérée par GPU avec SDL_Texture + SDL_RenderCopy.

Jetez un oeil à http://hg.libsdl.org/SDL/file/e12c38730512/test/testsprite2.c pour un exemple, en particulier le commentaire:

/* Blit the sprite onto the screen */ 
SDL_RenderCopy(renderer, sprite, NULL, position); 

qui dit explicitement que SDL_RenderCopy est un moyen de blit.

Dans cet exemple, la texture est créé et envoyé à la mémoire GPU qu'une seule fois, et à partir de là il est réutilisé de manière efficace, voir aussi: Difference between surface and texture (SDL/general)

Quand je lance cet exemple sur Ubuntu 15.10, nvidia-settings dit que L'utilisation du GPU passe à 100%, et j'obtiens un FPS beaucoup plus élevé qu'en dessinant pixel par pixel à l'écran, donc c'est GPU accéléré.

1

Il copie la mémoire d'un endroit dans la mémoire (source) à un autre endroit dans la mémoire (destination).

Par exemple. Il peut copier les pixels d'un bitmap à un autre, d'un bitmap à la texture, ou n'importe lequel des éléments ci-dessus, à la surface de l'écran ou à la surface du tampon arrière de l'écran.

Supposons que vous ayez une image/mosaïque que vous souhaitez afficher à l'écran. Vous devez effectuer un "blit" pour copier la mémoire constituant l'image dans la mémoire utilisée à l'écran. Il s'agit, essentiellement, d'une fonction très similaire à memcpy() qui copie les octets spécifiés en tant que source une par une aux octets spécifiés comme destination.