Я работаю над проектом Directx C++/CX (Universal Windows).Как добавить переменную в константубуфер
Я не так уж хорошо знаком с Directx11.
Мой код в основном основан на примерах проектов на MSDN, связанных с рендерингом directx в UWP с использованием swapchainpanels.
Теперь я хотел добавить переменную float в шейдер. Я считаю, что это нужно делать с помощью константного буфера. В настоящее время это выглядит следующим образом (и работает):
//c++:
struct ModelViewProjectionConstantBuffer
{
DirectX::XMFLOAT4X4 model;
DirectX::XMFLOAT4X4 view;
DirectX::XMFLOAT4X4 projection;
//float distance;
};
//hlsl:
cbuffer ModelViewProjectionConstantBuffer : register(b0)
{
matrix model;
matrix view;
matrix projection;
//float distance;
};
Теперь, когда я добавляю поплавок, он перестает работать. Он бросает исключение, когда я обновляю постоянный буфер (который происходит перед каждым оказанным кадром):
_d3dContext->UpdateSubresource(
_constantBuffer.Get(),
0,
NULL,
&_constantBufferData,
0,
0
);
Исключения составляет SEHException (так, насколько я могу найти, это не говорит мне ничего).
Я основывая все это на следующей странице: https://msdn.microsoft.com/en-us/library/ff476896(v=vs.85).aspx
Может кто-нибудь сказать мне, что я делаю неправильно?
Если ваше рассуждение правильно, и это основной проблемой было бы проще и безопаснее использовать «XMFLOAT4X4A» вместо 'XMFLOAT4X4'. Таким образом, отступы больше не нужны. – IInspectable
@IInpectable Не совсем, некоторые правила более тонкие и не могут воспроизводиться с языком C++, даже если в случае OP это будет трюк. Другим решением было бы обеспечить правильный размер объекта кода для «UpdateSubResource», но тогда слой отладки наполнил бы журнал предупреждением о том, что вы загружаете меньше, чем размер cbuffer (что в нашем случае на 100% безопаснее). – galop1n
Спасибо, да, это исправляет. Я понимаю, что это то, что они пытались сказать на этих страницах msdn (но я чувствую, что они могли быть намного понятнее). Было бы также полезно, если бы исключение содержало какую-либо полезную информацию. : | – Stef