align_mallo c () против alignas () для постоянных буферов - PullRequest
1 голос
/ 18 января 2020

В C ++ у нас есть ключевое слово alignas(n), и у нас есть функция _aligned_malloc(m,n).
alignas работает с типом, а aligned_malloc работает с любым, как вы его называете.
Могу ли я использовать alignas(16) чтобы выполнить требование выравнивания 16 байтов для константных буферов Direct3D?

1 Ответ

1 голос
/ 18 января 2020

Да, вы можете использовать его следующим образом:

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) ...

РЕДАКТИРОВАТЬ : Если вы хотите чтобы использовать его в самой структуре, должно сработать что-то похожее на это:

struct alignas(16) SceneConstantBuffer
{
    DirectX::XMMATRIX ViewProjection; // 16-bytes
    ...
    DirectX::XMFLOAT3 LightDiffuseColor{};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...