DirectX 10/11 Постоянное содержимое буфера не проходит

Я сделал постоянный буфер, определенный как

cbuffer MatrixBuffer : register(b1) {
float4x4 aMatrixTransforms[24];
float aMatrixWeights[24];
uint UsedMatrices;
float3 Unused;  
}

в HLSL и

struct stMBuffer {
D3DXMATRIX aMatrixTransforms[24];
float aMatrixWeights[24];
unsigned int UsedMatrices;
D3DXVECTOR3 Unused;
};

in c++

Теперь все матрицы успешно доставлены, а также первые 5 элементов массива MatrixWeights, но после этого ничего не остается просто 0. Кто-нибудь знает, что происходит? Спасибо.


person Jake Freelander    schedule 10.04.2012    source источник


Ответы (1)


Проверьте размер буфера, который вы создаете. Также вы можете использовать уровень отладки - он покажет вам предупреждения для этого случая.

person asmi84    schedule 10.04.2012
comment
размер в порядке, оказывается, hlsl ожидает, что все элементы структуры будут проходить как 16-байтовые float4, а остальные данные действительно передаются, они просто теряются в пустоши между элементами массива, которые, хотя имеют данные только для 1 float, поступают как xyzw плавает. Итак... есть ли способ обойти 16-байтовую упаковку? - person Jake Freelander; 10.04.2012
comment
Странно - вы проверяли в PIX, что на самом деле поступает в буфер? - person asmi84; 10.04.2012