我在建設我的3D仿真項目的DirectX :: XMMATRIX __declspec(對齊('16' ))將不會對齊
void SetConstantBuffer(ID3D11DeviceContext*_device_context, DirectX::XMMATRIX _world, DirectX::XMMATRIX _view, DirectX::XMMATRIX _projection)
{
ConstantBuffer const_buffer;
const_buffer.View = DirectX::XMMatrixTranspose(_world);
const_buffer.World = DirectX::XMMatrixTranspose(_view);
const_buffer.Projection = DirectX::XMMatrixTranspose(_projection);
_device_context->UpdateSubresource(m_const_buffer, 0, NULL, &const_buffer, 0, 0);
}
使用DirectXMath我得到這些類型的編譯器錯誤的可能對SIMD標誌內DirectXMath:
錯誤C2719: '_world':用__declspec(對齊('16' 形式參數))不會被對齊
錯誤C2719: '_view':用__declspec形式參數(對齊('16 '))將不會對齊
錯誤C2719:'_projection ':用__declspec形式參數(對齊('16'))將不會對齊
是否有任何其他方式而不將其轉換爲DirectX :: XMFLOAT4X4?
順便說一下,我正在使用x86機器並在Visual Studio 2012 Express上進行編譯。
x86編譯器不執行堆棧對齊,所以它不能保證參數結束。 – 2013-03-06 11:14:02
如果沒有'__declspec(align('16'))'聲明,但使用對齊類型(如「XMFLOAT4A」),則可能引發此錯誤。以下解決方案也適用。 – PinkTurtle 2015-08-16 21:54:00