Original Post
Hello, I've started tinkering around in D3D10 and so far am having a nice time. But I've hit a snag. I keep getting the following error: I am setting the IA like this: If I don't try to send the tangent data the mesh draws correctly, so I assume the mesh conversion from 9 to 10 is successful, but I am not knowledgable enough yet to know how to check this. I've also tried not calling D3DXComputeTangent. I'm hoping it's something simple in my element description but google turns up no real results when I google the error. Anybody have any tips or advice for me on this issue? Thanks.
D3D10: CORRUPTION: ID3D10Device::CreateInputLayout: Semantic name cannot be NULL (or pointer is corrupt). Declaration entry [3]. [ MISCELLANEOUS CORRUPTION #13: CORRUPTED_PARAMETER1 ]
Now this is down to me trying to get tangent information in to my shader. Everything previously has worked. I am currently using an X file exported from Max9 using kw xport, I made sure the tangent data box was checked on export. I am loading it into D3D10 using the code found here: http://www.gamedev.net/community/forums/mod/journal/journal.asp?jn=316777&reply_id=2747161 Called in the following fashion:
IDirect3DDevice9 *pDevice9;
ID3DXMesh *pMesh9;
CreateD3D9NullRef(&pDevice9);
D3DXLoadMeshFromX(Filename.c_str(), D3DXMESH_SYSTEMMEM, pDevice9, NULL, NULL, NULL, NULL, &pMesh9);
ID3DXMesh *sMesh;
D3DVERTEXELEMENT9 test_decl[] =
{
{0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
{0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0},
{0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
{0, 36, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0},
{0, 48, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BINORMAL, 0},
D3DDECL_END()
};
pMesh9->CloneMesh(D3DXMESH_MANAGED, test_decl, pDevice9, &sMesh);
D3DXComputeTangent(sMesh, 0, 0, 0, 0, NULL);
CreateD3DX10MeshFromD3DX9Mesh(sMesh, &geom_Mesh, p_Device);
geom_Mesh->CommitToDevice();
D3D10_INPUT_ELEMENT_DESC layout[] =
{
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D10_INPUT_PER_VERTEX_DATA, 0},
("TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 36, D3D10_INPUT_PER_VERTEX_DATA, 0)
};
UINT numElements = 4;
D3D10_PASS_DESC PassDesc;
if(FAILED(p_Technique->GetPassByIndex(0)->GetDesc(&PassDesc))) ERR_OUT("PassDesc FAILED");
p_Device->CreateInputLayout(layout, numElements, PassDesc.pIAInputSignature, PassDesc.IAInputSignatureSize, &p_VertexLayout);
p_Device->IASetInputLayout(p_VertexLayout);