Question

J'ai une question noble pour tout programmeur graphique.

Je ne comprends pas comment certains jeux (comme Crysis) peuvent prendre en charge à la fois DirectX 9 (sous XP) et 10 (sous Vista)?

D'après ce que j'ai compris jusqu'à présent, si vous écrivez une application DX10, celle-ci ne peut s'exécuter que sous Vista.

Peut-être ont-ils 2 bases de code - une écrite en DX9 et une autre en DX10? Mais n’est-ce pas exagéré?

Était-ce utile?

La solution

Ils disposent de deux pipelines de rendu, l'un utilisant les appels DX9 et l'autre utilisant les appels DX10. Les API ne sont pas compatibles, bien que la majorité des moteurs de jeu puissent être réutilisés pour l'un ou l'autre. Si vous voulez des exemples Open Source montrant comment différents pipelines de rendu sont réalisés, regardez quelque chose comme Ogre3d, qui prend en charge le rendu OpenGL, DX9 et (bientôt) DX10.

Autres conseils

La couche de rendu des jeux est généralement une partie assez bien isolée / abstraite de l’application entière. En ce qui concerne le moteur de jeu, chaque image que vous créez est simplement une liste d'objets conceptuels (arbres, personnages, etc.). Si le moteur de jeu choisit de rendre un objet particulier, il appartient au calque de rendu de traduire cette intention en appels de dessin DX. Un rendu DX10 générera un ensemble différent d'appels dessinés vers un calque DX9, mais conceptuellement, ils effectuent toujours la même action: "rendre cet arbre".

Le rendu est bien résumé car il est rare que vous souhaitiez récupérer des informations à partir du calque de rendu. Une fois que l'action "restituer cet arbre" est effectuée, le moteur de jeu suppose simplement que le rendu semble 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 sont transmises 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 DX10 est pris en charge et vous replier gracieusement sur DX9, mais c’est le tarif standard pour la configuration de l’application (de la même manière que le Le jeu doit choisir une résolution, une fréquence de rafraîchissement, un périphérique d’entrée, etc.).

Il est probable qu’ils possèdent une couche d’abstraction et qu’ils développent contre cela. Au moment de l'exécution, ils instancient les moteurs à béton enveloppants DX9 ou DX10.

J'imagine que leur abstraction est positionnée très près de la couche DirectX et fournit simplement à DX9 des implémentations manuelles judicieuses des fonctions DX10 ou améliore la logique DX9 lors de l'exécution sur DX10.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top