DirectX :: XMMATRIX __declspec(align('16'))将不会对齐

Edw*_*cay 3 c++ windows directx directx-11 visual-studio-2012

我正在使用DirectXMath来构建我的3D模拟项目

   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);
   }
Run Code Online (Sandbox Code Playgroud)

我可能在DirectXMath内的SIMD标志上得到这些编译器错误:

错误C2719:'_ world':带__declspec的形式参数(align('16'))将不会对齐
错误C2719:'_ view':带__declspec的形式参数(align('16'))将不会对齐
错误C2719 :'_ project':带有__declspec(align('16'))的形式参数将不会对齐

没有将其转换为DirectX :: XMFLOAT4X4还有其他方法吗?
顺便说一下,我正在使用x86机器并在Visual Studio 2012 Express上进行编译.

小智 5

通过const引用而不是值传递值.

void SetConstantBuffer(
    ID3D11DeviceContext*_device_context,
    const DirectX::XMMATRIX &_world,
    const DirectX::XMMATRIX &_view,
    const DirectX::XMMATRIX &_projection)
Run Code Online (Sandbox Code Playgroud)

  • 嗨,你能告诉我为什么这样吗? (4认同)