IASetInputLayout vérifie-t-il si vous passez une disposition d'entrée déjà définie?
-
29-10-2019 - |
Question
Je conçois un moteur de jeu dans DirectX 11 et j'avais une question sur la fonction ID3D11DeviceContext :: IASetInputLayout.D'après ce que je peux trouver dans la documentation, il n'y a aucune mention de ce que la fonction fera si vous définissez une disposition d'entrée sur le périphérique qui a été précédemment défini.En contexte, si je devais faire ce qui suit:
//this assumes dc is a valid ID3D11DeviceContex interface and that
//ia is a valid ID3D11InputLayout interface.
dc->IASetInputLayout(&ia);
//other program lines: drawing, setting vertex shaders/pixel shaders, etc.
dc->IASetInputLayout(&ia);
//continue execution
Cela entraînerait-il une pénalité de performances par le changement d'état de l'appareil, ou le moteur d'exécution reconnaît-il la disposition d'entrée comme étant équivalente à celle déjà définie et renvoyée?
La solution
Bien que je ne trouve pas non plus quoi que ce soit lié à si InputLayout est déjà défini, vous pouvez obtenir un pointeur vers la disposition d'entrée déjà liée en appelant ID3D11DeviceContext :: IAGetInputLayout ou en effectuant une vérification interne en gardant votre propre référence, de cette façonvous n'avez pas d'appel à votre objet ID3D11DeviceContext.
Autres conseils
Autant que je sache, il devrait détecter qu'il n'y a pas de changement et donc l'appel doit être ignoré.Mais cela peut être facilement testé - il suffit d'appeler cette méthode 10000 fois à chaque rendu et de voir à quel point la baisse de FPS est mauvaise :)