2008-09-15 6 views
3

J'ai une question noobish pour tout programmeur graphique.Applications prenant en charge DirectX 9 et 10

Je suis confus comment certains jeux (comme Crysis) peuvent supporter à la fois DirectX 9 (sous XP) et 10 (sous Vista)? Ce que je comprends jusqu'à présent, c'est que si vous écrivez une application DX10, alors elle ne peut s'exécuter que sous Windows Vista.

Peut-être qu'ils ont 2 bases de code - un écrit en DX9 et un autre en DX10? Mais n'est-ce pas exagéré?

Répondre

5

Ils ont deux pipelines de rendu, l'un utilisant les appels DX9 et l'autre utilisant les appels DX10. Les API ne sont pas compatibles, même si la majorité des moteurs de jeu peuvent être réutilisés pour l'un ou l'autre. Si vous voulez des exemples Open Source de la façon dont les différents pipelines de rendu sont réalisés, regardez quelque chose comme Ogre3d, qui supporte OpenGL, DX9 et (bientôt) le rendu DX10.

1

Il est probable qu'ils ont une couche d'abstraction et ils se développent contre cela. Au moment de l'exécution, ils instancient les moteurs à béton DX9 ou DX10. J'imagine que leur abstraction est positionnée très près de la couche DirectX et fournit simplement au DX9 des implémentations manuelles sensibles des fonctions DX10 ou améliore la logique DX9 lors de l'exécution sur DX10.

2

La couche de rendu des jeux est généralement une partie assez bien isolée/abstraite de l'ensemble de l'application. En ce qui concerne le moteur de jeu, à chaque trame, vous créez simplement une liste d'objets conceptuels (arbres, personnages, etc.). Si le moteur de jeu choisit de rendre un objet particulier, il revient à la couche de rendu de traduire cette intention en appels DX. Un rendu DX10 va générer un ensemble différent d'appels draw à une couche DX9, mais conceptuellement, ils exécutent toujours la même action - 'render this tree'. Le rendu est bien abstrait, car il est rare que vous souhaitiez récupérer des informations à partir du calque de rendu, une fois que l'action 'render this tree' est exécutée, le moteur de jeu suppose simplement que le rendu est correct. Il est peu nécessaire de gérer différents résultats potentiels des appels de rendu DX9/DX10, car 99,9% des informations vont du moteur au système graphique, et les 0,1% qui reviennent prennent probablement la même forme entre les deux API. La configuration de l'application est un peu plus compliquée, car vous devez demander au système si le DX10 est pris en charge ou non et revenir en arrière sur DX9, mais c'est le tarif standard pour la configuration de l'application (de la même manière que le jeu doit choisir une résolution, un taux de rafraîchissement, un périphérique d'entrée, etc.).

Questions connexes