本文介绍了常量缓冲区的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()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-27 11:02