Une classe de mise en oeuvre de directx (directdraw)

Description

La classe "cDirectX" permet la gestion de l'affichage via DirectDraw. Je l'ai faite à partir d'exemples trouver sur le net mais qui intègrent ces fonctionnalités au niveau du code du formulaire.

L'idée ici est simplement d'initialiser ce qui est nécessaire à l'utilisation de DirectX à un endroit.
La classe contient notamment :
- une liste qui permet de charger des images de travail (ListSurface).
- une méthode de restauration des surfaces (celles définit via la liste) : RestoresSurfaces(). Elle déclenche un évènement (RestoreRequired) qui permet au code appelant de compléter cette fonction (mais pour l'instant je n'ai pas eu besoin de le faire).
- une méthode d'affichage qui gère les exceptions et le besoin de restauration.
Elle déclenche l'évènement "UpdateBuffer" qui doit être défini dans le code appelant afin de mettre à jour le buffer avant son affichage.

Conclusion :


Utilisation de la classe dans un Form :

Dans un formulaire, on définit un objet "cDirectX" et on l'initialise.
Exemple :
mAffichage = new cDirectX(this);
mAffichage.UpdateBuffer += new EventHandler(this.UpdateBuffer);
// Optionnel : on ajoute 2 images de travail.
mAffichage.LoadSrf_Image(0, Application.StartupPath + "\\directx9.bmp");
mAffichage.LoadSrf_Image(1, Application.StartupPath + "\\Mario.bmp", Color.Fuchsia);

Ensuite, il faut définir le code de l'evènement "UpdateBuffer" (il ne contient que la mise à jour de la surface "buffer" associée à la surface primaire). Exemple :
mAffichage.ClearBuffer(Color.Black); // Vide l'image
mAffichage.Srf_Buffer.DrawFast(0, 0, mAffichage[0].Surface, mAffichage[0].Rectangle, DrawFastFlags.DoNotWait);
mAffichage.Srf_Buffer.DrawFast(200, 50, mAffichage.ListSurface[1].Surface, rcRect, DrawFastFlags.DoNotWait | DrawFastFlags.SourceColorKey);

=> Rq : "rcRect" est à définir. il permet par exemple de découper l'image "Mario.bmp" en 3 parties et de prendre de façon cyclique telle ou telle partie (sur la base d'un exemple courant sur le net et sur ce "CSharpFr" aussi je crois...)
=> Les 2 notations mAffichage[0] et mAffichage.ListSurface[0] sont équivalentes ...

Enfin, il faut appeler la méthode Dispose() lorsque le formulaire est fermé :
mAffichage.Dispose();

La classe marche bien avec CooperativeLevelFlags.FullscreenExclusive, mais j'ai eu des petits problèmes si je prends d'autres valeurs.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.