cbuffer cbJointTransforms : register(b6)
{
float4x4 gBoneTransforms[96];
};
//Constant buffer
D3D11_BUFFER_DESC cbDesc;
cbDesc.ByteWidth = sizeof(XMMATRIX)*aFinalMatrices.size();
cbDesc.Usage = D3D11_USAGE_DYNAMIC;
cbDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
cbDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
cbDesc.MiscFlags = 0;
cbDesc.StructureByteStride = 0;
D3D11_SUBRESOURCE_DATA InitData;
InitData.pSysMem = &aFinalMatrices[0];
InitData.SysMemPitch = 0;
InitData.SysMemSlicePitch = 0;
hr = this->device->CreateBuffer(&cbDesc, &InitData, &cbJointTransforms);
aFinalMatrices is a vector<DirectX::XMMATRIX>
I tried using Graphics Debugging but it doesn't show me any values in the buffer.
cbuffer cbJointTransforms : register(b6)
{
float4x4 gBoneTransforms[96];
};
struct VS_IN
{
float3 pos : POSITION;
float3 nor : NORMAL;
//float2 UV : TEXCOORD;
float4 weights : WEIGHTS;
int4 boneIndices : BONEINDICES;
};
VS_OUT VS(VS_IN input)
{
VS_OUT output;
//FRANK D. LUNA (p.781)
//init array
float weights[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
weights[0] = input.weights.x;
weights[1] = input.weights.y;
weights[2] = input.weights.z;
weights[3] = input.weights.w;
//Blend verts
float3 position = float3(0.0f, 0.0f, 0.0f);
float3 nor = float3(0.0f, 0.0f, 0.0f);
for (int i = 0; i < 4; i++)
{
if (input.boneIndices[i] >= 0) //unused bone indices are negative
{
position += weights[i] * mul(float3(input.pos),
gBoneTransforms[input.boneIndices[i]]).xyz;
position = float3(position.xyz);
nor += weights[i] * mul(input.nor,
(float3x3)gBoneTransforms[input.boneIndices[i]]);
}
}
output.pos = mul(Proj, mul(View, mul(World, float4(position, 1.0))));
output.wPos = mul(World, float4(position, 1.0f));
output.nor = mul(NormalMatrix, nor);
output.nor = normalize(output.nor);
output.uv = float2(0.0f, 0.0f);
return output;
}