IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Tutoriels Direct3D 10 : DXUT

logo msdn


précédentsommairesuivant

II-8. Tutoriel 8 : Introduction à DXUT

tuto0

II-8-a. résumé

Ce tutoriel présente DXUT. DXUT est une couche bâtie sur Direct3D pour aider à rendre les échantillons, les prototypes, les outils et les jeux professionnels plus robustes et faciles à bâtir. Il simplifie les interfaces de programmation Windows et Direct3D, sur la base d'un usage typique.

Le résultat de ce tutoriel est un exemple qui ressemble comme celui du précédent tutoriel. Toutefois, il est implémenté différemment.

II-8-b. source

 
Sélectionnez
(SDK root)\Samples\C++\Direct3D10\Tutorials\Tutorial08

II-8-c. DXUT

DXUT fournit un processus simplifié de création de fenêtre, de création (ou sélection) d'un appareil Direct3D et de traitement de messages Windows. Cela vous permet de passer moins de temps à vous demander comment effectuer ces tâches standard.

DXUT pour Direct3D 10 est aussi hautement modulaire. Le composant fondamental de DXUT contient la création de fenêtre standard, la création de device et les fonctions de gestion. Les composants en option de DXUT incluent des fonctions comme la manipulation de caméra, un système GUI et un traitement de maillage. Ce tutoriel explique les composants fondamentaux de DXUT. Les composants en option seront expliqués dans des tutoriels ultérieurs. Les caractéristiques présentées dans ce tutoriel incluent la création de device, la boucle principale et l'entrée simple au clavier.

DXUT expose une large gamme de fonctions de rappel que l'utilisateur peut utiliser. Les fonctions de rappel sont appelées par le DXUT à des points logiques pendant l'exécution d'un programme. Vous pouvez insérer un code personnalisé dans les fonctions de rappel pour construire l'application, tandis que DXUT gère les exigences d'implémentation de fenêtre et de device.

DXUT supporte des applications qui contiennent des voies de code Direct3D 9 et/ou Direct3D 10. Cela permet à DXUT de prendre le meilleur chemin de code pour le système sous lequel tourne l'application. Toutefois, ce tutoriel ne se concentre que sur le rendu Direct3D 10. Pour un exemple d'application duale Direct3D 9 et Direct3D 10 bâtie sur DXUT, voyez l'échantillon BasicHLSL10 dans le SDK DirectX.

II-8-d. Mettre en place les fonctions de Callback

Modifier la fonction WinMain d'une application est la première étape. Dans les précédents tutoriels, WinMain invoquait la fonction d'initialisation puis entrait la boucle de message. Dans l'environnement cadre DXUT, WinMain se comporte de façon similaire.

D'abord, les fonctions de rappel sont configurées par l'application. Ce sont les fonctions que DXUT appelle pendant des évènements spécifiques quand l'application tourne. Les évènements notables incluent la création de device, la création de swap chain, l'entrée au clavier, le déplacement et le rendu de trame.

 
Sélectionnez
    // Fonctions de rappel Direct3D10
    DXUTSetCallbackD3D10DeviceAcceptable( IsD3D10DeviceAcceptable );
    DXUTSetCallbackD3D10DeviceCreated( OnD3D10CreateDevice );
    DXUTSetCallbackD3D10SwapChainResized( OnD3D10ResizedSwapChain );
    DXUTSetCallbackD3D10SwapChainReleasing( OnD3D10ReleasingSwapChain );
    DXUTSetCallbackD3D10DeviceDestroyed( OnD3D10DestroyDevice );
    DXUTSetCallbackD3D10FrameRender( OnD3D10FrameRender );

    DXUTSetCallbackMsgProc( MsgProc );
    DXUTSetCallbackKeyboard( KeyboardProc );
    DXUTSetCallbackFrameMove( OnFrameMove );
    DXUTSetCallbackDeviceChanging( ModifyDeviceSettings );

Ensuite, l'application configure tout réglage supplémentaire de DXUT, comme dans l'exemple suivant :

 
Sélectionnez
    // Affiche le curseur et le clippe quand on est en plein écran
    DXUTSetCursorSettings( true, true );

Finalement, les fonctions d'initialisation sont appelées. La différence entre ce tutoriel et les didacticiels de base, c'est que vous ne devez traiter que du code spécifique de l'application pendant l'initialisation. C'est dû au fait que la création de device et de fenêtre est traitée par DXUT. On peut insérer du code spécifique de l'application pendant chaque fonction de rappel associée. DXUT invoque ces fonctions à mesure de la progression du processus d'initialisation.

 
Sélectionnez
    // Initialise DXUT et créer la fenêtre Win32 désirée et le device 
    // Direct3D pour l'application. Appeler chacune de ces fonctions est 
    // facultatif, mais elles vous permettent de régler des options qui
    // contrôlent le comportement de l'environnement cadre.
    DXUTInit( true, true ); // Analyse la ligne de commande, traite les  
    // raccourcis clavier par défaut et affiche les msgboxes
    DXUTCreateWindow( L"Tutorial8" );
    DXUTCreateDevice( true, 640, 480 );

II-8-e. Débogage avec DXUTTrace

DXUTTrace est une macro-commande que l'on peut appeler pour créer un débogage de l'application. Elle fonctionne largement comme les fonctions de débogage standard, mais elle autorise un nombre variable d'arguments. Par exemple :

 
Sélectionnez
    DXUTTRACE( L"Hit points left: %d\n", nHitPoints );

Dans ce tutoriel, elle est placée à côté de l'entrée de fonction pour rapporter l'état de l'application. Par exemple, au début de OnD3D10ResizedSwapChain(), le débogueur rapporte "SwapChain Reset called".

 
Sélectionnez
    DXUTTRACE( L"SwapChain Reset called\n" );

II-8-f. Gestion et initialisation de Device

DXUT fournit diverses méthodes de création et de configuration de la fenêtre et du device Direct3D. Les méthodes utilisées dans ce tutoriel sont énumérées ci-dessous. Elles suffisent à complexifier modérément l'application Direct3D.

La procédure du tutoriel précédent dans InitDevice() et CleanupDevice() a été convenablement gérée la scindant entre les fonctions suivantes :

Parce que toutes les ressources ne sont pas créées en même temps, on peut minimiser la perte de temps en réduisant le nombre d'appels répétés. On atteint ce résultat en ne recréant que les ressources qui dépendent du contexte. Par soucis de simplicité, les tutoriels précédents recréaient tout quand l'écran était redimensionné.

II-8-f-1. Callback IsD3D10DeviceAcceptable

Cette fonction est invoquée pour chaque combinaison de réglages de device valide que l'on trouve dans le système. Elle permet à l'application d'accepter ou de rejeter chaque combinaison. Par exemple, l'application peut rejeter tous les devices REF ou rejeter des combinaisons de réglages plein écran.

Dans ce tutoriel, tous les devices sont acceptables, parce qu'on n'a besoin d'aucune fonctionnalité avancée.

II-8-f-2. Callback ModifyDeviceSettings

Cette fonction de rappel permet à l'application de modifier tout réglage de device immédiatement avant que DXUT crée le device. Dans ce tutoriel, il n'y a rien qu'il faille faire dans le rappel, parce qu'on n'a besoin d'aucune fonctionnalité avancée.

II-8-f-3. Callback OnD3D10CreateDevice

Cette fonction est appelée après la création du device Direct3D10. Après la création du device, une application peut utiliser ce rappel pour allouer des ressources, régler des mémoires tampons, gérer d'autres tâches nécessaires.

Dans ce tutoriel, l'essentiel de la fonction InitDevice() du tutoriel 7 est copié dans la fonction de rappel. Le code pour la création de device et de swap chain est omis, parce que ces fonctions sont gérées par DXUT. OnD3D10CreateDevice crée l'effet, les mémoires tampons vertex/index, les textures et les matrices de transformation. Le code a été copié à partir du tutoriel 7 avec des altérations minimales.

II-8-f-4. Callback OnD3D10DestroyDevice

Cette fonction de rappel est appelée immédiatement avant que ID3D10Device soit mise à jour par DXUT. Ce rappel est utilisé pour mettre à jour les ressources qui étaient utilisées par le device.

Dans ce tutoriel, OnD3D10DestroyDevice met à jour les ressources crées par la fonction OnD3D10CreateDevice. Ces ressources incluent les mémoires tampon vertex/index, la mise en page, les textures et les effets. Le code est copié à partir de la fonction CleanupDevice(), mais il a été modifié pour utiliser la macro SAFE_RELEASE.

II-8-g. Affichage

Pour l'affichage, DXUT fournit deux fonctions de rappel pour initialiser le rendu de votre application. La première, OnFrameMove, est appelée avant que chaque trame soit rendue. Elle accélère le temps dans l'application. La seconde, OnD3D10FrameRender, fournit le rendu pour DXUT.

Ces deux fonctions divisent le travail de la fonction Render() en deux étapes logiques. OnFrameMove actualise toutes les matrices pour animation. OnD3D10FrameRender contient les appels de rendu.

II-8-g-1. Callback OnFrameMove

Cette fonction est appelée avant le rendu d'une trame. Elle sert à traiter l'état du monde. Toutefois, sa fréquence d'actualisation dépend de la vitesse du système. Sur des systèmes relativement rapides, elle est appelée plus d'une fois par seconde. Cela signifie que tout code d'actualisation d'état doit être régulé en fonction du temps. Sinon, elle fonctionnera différemment sur un système lent par rapport à un système rapide.

Chaque fois que la fonction est appelée dans le tutoriel, le monde est actualisé une fois et la couleur du maillage est ajustée. Ce code est copié directement à partir de la fonction Render() du tutoriel 7. Notez que les appels de rendu ne sont pas inclus.

II-8-g-2. Callback OnD3D10FrameRender

Cette fonction est appelée chaque fois qu'une trame est redessinée. Dans cette fonction, des effets sont appliqués, des ressources sont associées et le dessin de la scène est appelé.

Dans ce tutoriel, cette fonction contient les appels pour effacer le back buffer et le stencil buffer, pour initialiser les matrices et dessiner les cubes.

II-8-h. Traitement des messages

Le traitement des messages est une propriété intrinsèque de toutes les applications de fenêtre. DXUT expose ces messages pour les applications avancées.

II-8-h-1. Callback MsgProc

DXUT invoque cette fonction quand des messages de fenêtre sont reçus. La fonction permet à l'application de traiter les messages comme il semble adéquat.

Dans ce tutoriel, aucun message additionnel n'est traité.

II-8-h-2. Callback KeyboardProc

Cette fonction de rappel est invoqué par DXUT quand une touche est appuyée. On peut l'utiliser comme une simple fonction pour traiter des commandes au clavier.

La fonction de rappel KeyboardProc n'est pas utilisée dans ce tutoriel, parce qu'aucune interaction au clavier n'est nécessaire. Toutefois, il existe un cas pour F1 que vous pouvez expérimenter. Essayez d'insérer du code pour déclencher la rotation des cubes.

II-8-i. Conclusion

Les fonctions couvertes par ce tutoriel vous permettent de démarrer un projet sous DXUT. Les tutoriel 9 et 10 couvrent des caractéristiques plus avancées de DXUT.

Pour lancer un nouveau projet avec DXUT, vous pouvez utiliser le Sample Browser pour copier et renommer tout projet dans le SDK DirectX. EmptyProject est un bon point de départ vierge pour des applications DXUT, ou vous pouvez choisir un autre échantillon.


précédentsommairesuivant

Cet article est une traduction d'un article original de Microsoft en anglais. Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Microsoft. Lire l'article original Ici.