IASetInputLayout проверяет, передаете ли вы уже установленный макет ввода? - PullRequest
0 голосов
/ 17 января 2012

Я проектирую игровой движок в DirectX 11, и у меня возник вопрос о функции ID3D11DeviceContext :: IASetInputLayout.Из того, что я могу найти в документации, нет никакого упоминания о том, что будет делать функция, если вы установите макет ввода для устройства, которое было предварительно установлено.В контексте, если бы я сделал следующее:

//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

повлекло бы за собой снижение производительности из-за переключения состояния устройства или среда выполнения распознала бы макет ввода как эквивалентный уже установленному и возвращенному?

Ответы [ 2 ]

1 голос
/ 19 января 2012

Хотя я также не могу найти что-либо, связанное с тем, что InputLayout уже установлен, вы можете получить указатель на уже введенную структуру ввода, вызвав ID3D11DeviceContext :: IAGetInputLayout или выполнив внутреннюю проверку, сохранив собственную ссылку, таким образом.у вас нет вызова вашего объекта ID3D11DeviceContext.

0 голосов
/ 17 января 2012

Насколько я знаю, он должен обнаруживать, что нет никаких изменений, и поэтому вызов должен игнорироваться. Но это легко проверить - просто вызовите этот метод 10000 раз для каждого рендера и посмотрите, насколько плохое падение FPS:)

...