本文介绍了常量缓冲区的aligned_malloc()和alignas()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在C ++中,我们有关键字 alignas(n)
和 _aligned_malloc(m,n)
函数. alignas
适用于该类型,而 aligned_malloc
适用于您所调用的任何类型.
我可以使用 alignas(16)
满足Direct3D常量缓冲区的16字节对齐要求吗?
In C++, we have the keyword alignas(n)
and we have the _aligned_malloc(m,n)
function.alignas
works on the type while aligned_malloc
works on whatever you call it.
Can I use alignas(16)
to fullfil the 16-byte alignment requirement for Direct3D Constant Buffers?
推荐答案
是的,您可以像这样使用它:
Yes, you could use it like this:
struct SceneConstantBuffer
{
alignas(16) DirectX::XMFLOAT4X4 ViewProjection[2];
alignas(16) DirectX::XMFLOAT4 EyePosition[2];
alignas(16) DirectX::XMFLOAT3 LightDirection{};
alignas(16) DirectX::XMFLOAT3 LightDiffuseColor{};
alignas(16) int NumSpecularMipLevels{ 1 };
};
不起作用的是 __ declspec(align)
...
What won't work is __declspec(align)
...
编辑:如果您想在结构本身上使用它,类似的东西也应该起作用:
EDIT: If you want to use it on the struct itself something similar to this should work too:
struct alignas(16) SceneConstantBuffer
{
DirectX::XMMATRIX ViewProjection; // 16-bytes
...
DirectX::XMFLOAT3 LightDiffuseColor{};
}
这篇关于常量缓冲区的aligned_malloc()和alignas()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!