IASetInputLayout vérifie-t-il si vous passez une disposition d'entrée déjà définie?

StackOverflow https://stackoverflow.com/questions/8887205

  •  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?

Était-ce utile?

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 :)

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