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] lienie.gif (941 octets)[Actualités]  [Trucs & Astuces] [Astuces Windows] [ActiveX-Ocx/Dll] [Articles] [Codes Sources] [VB Games] [Fichiers Sons] [Fichiers Icônes] [Programmes & Sources]  mailing.gif (910 octets)[Mailing-List] smiley.gif (359 octets)[Divers] about.gif (920 octets)[A Propos]