![]()
LES SURFACES DIRECTDRAW
Dans cet article, nous couvrirons les bases de l'initialisation et de la création de surfaces DirectDraw.
| Notion de Surface DirectDraw |
Une surface DirectDraw est en fait une allocation mémoire. C'est un peu comme une surface de travaille où l'on dessine/écrit diverses sortes d'objets.
Il en existe quatre types:
- Surface Simple: permet de conserver une image, du texte...
- Surface Primaire: c'est celle qui s'affiche sur l'écran de l'utilisateur
- Surface Backbuffer: c'est la surface brouillon, vous y faites toutes vos manipulations
ensuite vous transférez le reste à la surface Primaire.
- Surface Z-Buffer: utilisé pour la profondeur des pixels [en relations avec Direct3DIM]
Dans cet article, nous nous interesserons seulement à la Surface Simple. Les surfaces Primaire et Backbuffer seront étudiées plus tard. Et la Surface Z-Buffer sera abordée dans Direct3D.
Pour les non-speaking english:
Buffer = mémoire tampon
| Notion de "Description de Surface": DDSURFACEDESC2 |
Toute surface que vous chargez a des propriétés (descriptions). Vous pouvez définir ces propriétés à l'aide de l'objet DDSURFACEDESC2.
| Dim ddsd As DDSURFACEDESC2 |
Ensuite, vous devez lier ddsd à la surface afin
d'attribuer à cette dernière les descriptions contenues dans ddsd.
Il faut donc définir les descriptions contenues dans ddsd.
Exemple: On spécifie la heuteur et la largeur
| DDSD.lFlags = DDSD_HEIGHT Or
DDSD_WIDTH DDSD.lHeight = 250 'la hauteur DDSD.lWidth = 300 'la largeur |
A présent créons une surface.
| Création d'une Surface Vide |
Nous allons ici créer une Surface Vide de dimensions
données par l'objet DDSURFACEDESC2.
On déclare d'abord un objet DirectDrawSurface7.
| Dim ddsd As DDSURFACEDESC2 |
Ensuite on crée la surface à partir de la méthode DirectDraw appelée CreateSurface en passant comme argument la description à associer à la surface.
| 'Objet Surface Public Surface As DirectDrawSurface7 'Procédure d'entrée du programme Sub Main() '... Initialisation DirectDraw avec 'Set dd = Direct.. 'dd.SetCooperativeLevel ... 'Descriptions de la surface Dim ddsd As DDSURFACEDESC2 'On définit les flags ddsd.lFlags = DDSD_HEIGHT Or DDSD_WIDTH ddsd.lHeight = 250 'la hauteur ddsd.lWidth = 300 'la largeur 'On crée finalement la surface avec les descriptions 'contenues dans ddsd Set Surface = DD.CreateSurface(ddsd) '... C'est pas fini ! End Sub |
On va maintenant voir comment créer une surface avec une image à l'interieur.
| Création d'une Surface Contenant une Image |
Avec DirectDraw, On peut aussi créer une Surface
contenant une image (bitmap) à l'interieur.
On utilise donc la méthode CreateSurfaceFromFile de l'objet DirectDraw en passant comme
arguments le fichier .bmp à charger et la description de la surface.
| 'Objet Surface Public Surface As DirectDrawSurface7 'Procédure d'entrée du programme Sub Main() '... Initialisation DirectDraw avec 'Set dd = Direct.. 'dd.SetCooperativeLevel ... 'Descriptions de la surface Dim ddsd As DDSURFACEDESC2 'On définit les flags ddsd.lFlags = DDSD_HEIGHT Or DDSD_WIDTH ddsd.lHeight = 250 'la hauteur ddsd.lWidth = 300 'la largeur 'On crée finalement la surface avec les descriptions 'contenues dans ddsd et contenant l'image image.bmp Set Surface = DD.CreateSurfaceFromFile("c:\vbpDD\image.bmp", ddsd) '... C'est pas fini ! End Sub |
Astuce: Si vous n'êtes pas sûr de la taille de votre
image bitmap (puisqu'il "faut" que la taille de votre surface corresponde à la
taille de votre image), vous pouvez laisser DirectDraw sélectionner automatiquement pour
vous les dimensions de la surface en fonction des dimensions de l'image.
Pour cela, il faut laisser ddsd vide (sans lui affecter des propriétés).
| '..... 'Descriptions de la surface Dim ddsd As DDSURFACEDESC2 'On crée finalement la surface contenant l'image image.bmp 'et ayant les mêmes dimensions que cette dernière Set Surface = DD.CreateSurfaceFromFile("c:\vbpDD\image.bmp", ddsd) '..... |
C'est tout !
| Conclusion |
Bien vous venez de découvrir les
différents types de surfaces en DirectDraw.
Mais ceci n'est qu'une étape préliminaire avant l'affichage proprement dite sur l'écran
final: celui de l'utilisateur [On utilisera alors les surfaces Primaires et les
Backbuffers]
Le principe DirectDraw est basé sur le transfère de
mémoire entre surfaces: c'est ce qu'on appelle le Blitting. Cette technique fera l'objet
du prochain article.
Encore une fois, pensez à gérer les erreurs dans chaque proédure.
[Home]
[Actualités]
[Trucs
& Astuces]
[Astuces Windows]
[ActiveX-Ocx/Dll]
[Articles]
[Codes Sources]
[VB
Games]
[Fichiers Sons]
[Fichiers Icônes]
[Programmes & Sources]
[Mailing-List]
[Divers]
[A Propos]