我正在使用 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);
}
我可能在 DirectXMath 中的 SIMD 标志上遇到了这类编译器错误:
error C2719: '_world': formal parameter with __declspec(align('16')) won't be aligned
error C2719: '_view': formal parameter with __declspec(align('16')) won't be aligned
error C2719: '_projection': formal parameter with __declspec(align('16')) won't be aligned
有没有不转为DirectX::XMFLOAT4X4的其他方式?
顺便说一句,我正在使用 x86 机器并在 Visual Studio 2012 Express 上编译。
最佳答案
通过 const 引用而不是值传递值。
void SetConstantBuffer(
ID3D11DeviceContext*_device_context,
const DirectX::XMMATRIX &_world,
const DirectX::XMMATRIX &_view,
const DirectX::XMMATRIX &_projection)
关于c++ - DirectX::XMMATRIX __declspec(align ('16' )) 不会对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15245378/