# How can I use D3DXLoadMeshFromX with Direct3D 11?

I'm trying to write some class for loading meshes from X files.

But I can't use the function D3DXLoadMeshFromX because its third parameter is LPDirect3DDevice9.

In my D3D initialization code I don't have variable of this type. Did I initialize D3D incorrectly? How can I call this function?

• LPDirect3DDevice9 is a typedef for IDirect3DDevice9*. Try passing a pointer to your device. – Nikola Dimitroff Jul 19 '13 at 9:21
• In my code it is just ID3D11Device* – Loryan55 Jul 19 '13 at 9:25
• My guess is that ID3D11Device11 implements ID3D11Device9 so that should work to. Just test it. – Nikola Dimitroff Jul 19 '13 at 9:34
• Its definition looks like this: ID3D11Device : public IUnknown So i dont understand... I tried this: ..., (LPDIRECT3DDEVICE9)m_pd3dDevice, .. But i dont think it will work. I cant test right now.. – Loryan55 Jul 19 '13 at 9:45
• @NikolaDimitroff The D3D9 and 11 device interfaces are not related at all; D3DXLoadMeshFromX doesn't work with 11. – user1430 Jul 19 '13 at 22:33

LPDirect3DDevice9 is an alias for the type IDirect3DDevice9 *, which is a pointer to a Direct3D 9 device object. You are using D3D11, which means you have a completely incompatible device interface. Your device initialization is (probably) fine, you will just not be able to use D3DXLoadMeshFromX because it's only supported on an older version of Direct3D.
You can either write your own, for any number of file formats including .X (.obj is popular and Google can help you find tutorials) or utilize a 3rd party library such as Assimp.