I am trying to update a matrix array, then send to GPU but it is not working. I tried 2 ways, first I updated a matrix array in a constant buffer using map/unmap. The second method is using SetMatrixArray() in an effect.
The first method source code.
HRESULT hr;
D3D11_MAPPED_SUBRESOURCE MappedResource;
V( pd3dImmediateContext->Map( g_pcbVSPerFrame11, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) );
CB_VS_PER_FRAME* pVSPerFrame = ( CB_VS_PER_FRAME* )MappedResource.pData;
XMMATRIX M1 = XMMatrixTranslation(30.0f, 2.0f, 10.0f);
XMMATRIX M2 = XMMatrixIdentity();
XMMATRIX M3 = XMMatrixIdentity();
pVSPerFrame->g_mMatrixArray[0] = M1;
pVSPerFrame->g_mMatrixArray[1] = M2;
pVSPerFrame->g_mMatrixArray[2] = M3;
pd3dImmediateContext->Unmap( g_pcbVSPerFrame11, 0 );
pd3dImmediateContext->VSSetConstantBuffers( 1, 1, &g_pcbVSPerFrame11 );
Shader:
VS_OUTPUT RenderSceneVS( VS_INPUT input )
{
VS_OUTPUT Output;
float3 vNormalWorldSpace;
float4 temp = 0;
float3 posL = float3(1.0f, 0.0f, 0.0f);
temp = mul(float4(input.Position, 1.0f), g_mMatrixArray[1]);
//temp = mul(float4(posL, 1.0f), g_mMatrixArray[1]);
//temp = mul(float4(posL, 1.0f), g_mMatrixArray[2]);
// Transform the position from object space to homogeneous projection space
Output.Position = mul( float4(temp.xyz, 1.0f), g_mWorldViewProjection );
// Just copy the texture coordinate through
Output.Color = input.Color;
return Output;
}
g_mMatrixArray[0], g_mMatrixArray[1] and g_mMatrixArray[2] are the same values (1.0f, 0.0f, 0.0f)
The second method source code:
XMMATRIX M1 = XMMatrixIdentity();
XMMATRIX M2 = XMMatrixTranslation(2.0f, 2.0f, 0.0f);
XMMATRIX M3 = XMMatrixIdentity();
g_mMatrixArray.resize(3);
XMFLOAT4X4* M = &g_mMatrixArray[0];
g_pMatrixArray->SetMatrixArray(reinterpret_cast<const float*>(&g_mMatrixArray[0]), 0, g_mMatrixArray.size());
In shader:
cbuffer cbPerFrame : register( b1 )
{
float4x4 g_mBoneTransform[96];
};
VS_OUTPUT RenderSceneVS( VS_INPUT input )
{
VS_OUTPUT Output;
float4 temp = 0;
float3 posL = float3(1.0f, 0.0f, 0.0f);
temp = mul(float4(posL, 1.0f), g_mBoneTransform[0]);
// Transform the position from object space to homogeneous projection space
Output.Position = mul( float4(temp.xyz, 1.0f), g_mWorldViewProjection );
// Just copy the texture coordinate through
Output.TextureUV = input.Color;
return Output;
}
Both of methods do not work
. Anybody helps me, please?
Edited by steven166, 28 January 2013 - 02:06 AM.







