La fonction rendu

On rajoute au fichier principal la fonction suivante. Il s'agit du rendu de la scène.

VOID Rendu(unsigned int param, LPDIRECT3DDEVICE9 *D3DD, _module_ *rp, _module_ *rp2, _mesh_ *mtm_modulea, _mesh_ *mtm_laby, _mesh_ *mtm_missile, _mesh_ *mtm_moduleb, clavier *etm)
{
if (timer(25000, temps)) return;

(*D3DD)->Clear( 0, NULL, param, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );

// début de la scène
(*D3DD)->BeginScene();

// fin de la scène
(*D3DD)->EndScene();

// affiche le back buffer à l'écran
(*D3DD)->Present(NULL, NULL, NULL, NULL);

}

On commence par vérifier si le temps écoulé, n'est pas inférieur à 25 millisecondes. S'il est inférieur il n'y aura pas de rendu image.

On nettoie le back buffer par la méthode Clear, avec une couleur noir.
Le flux est le numéro 0, qui est associé à la source de données qui permet de récupérer le flot de vertices.


Puis on indique à DirectX que la scène commence, ensuite on affiche la scène, on indique la fin de la scène et pour finir on affiche le back buffer à l'écran grâce à la méthode Present.

Dans la fonction main on a les deux lignes suivantes :

_mesh_ *mtm[8];

LONGLONG *temps;

clavier et_module = {0, 0, 0, 0};
clavier et_module2 = {0, 0, 0, 0};

while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else {
Rendu(D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, &obj_Direct3DDevice, module1, module2, mtm[0], mtm[4], mtm[6], mtm[2], &et_module);
Rendu(D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, &obj_Direct3DDevice2, module2, module1, mtm[3], mtm[5], mtm[7], mtm[1], &et_module2);
}
}

UnregisterClass("Superbattle", wc.hInstance);
return 0;

Tant que msg.message est différent de WM_QUIT on aura une boucle infinie appelant la fonction Rendu.

Téléchargez la source, cliquez ci-dessous :