Code:
LPDIRECT3DTEXTURE9* m_pMeshTextures[2];
Looks suspicious.
LPDIRECT3DTEXTURE9 is the declaration you use to declare a pointer to the interface.
IDirect3DTexture9 is the declaration you use to declare the actual interface. - NOTE I said declaration. You cannot create an IDirect3DTexture9 object on the stack.
From the SDK:
The LPDIRECT3DTEXTURE9 and PDIRECT3DTEXTURE9 types are defined as pointers to the IDirect3DTexture9 interface.
typedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9;
Code:
LPDIRECT3DTEXTURE9 m_pTexture;
IDirect3DTexture9 *m_pTexture;
These two lines accomplish the same thing.
Code:
class CTextureMgr;
class CTexture
{
friend class CTextureMgr;
IDirect3DTexture9 *m_pTexture;
IDirect3DDevice9 *m_pDevice;
...
void CreateFromFile(std::string File,IDirect3DDevice9 *pDevice)
{
D3DXCreateTextureFromFile(File.c_str(),pDevice,m_pTexture);
}
void CreateFromResource(std::string File);
void CreateFromMemory(DWORD *pBuffer,DWORD dwSize);
public:
virtual ~CTexture()
{
if (m_pTexture)
{
m_pTexture->Release();
m_pTexture=NULL;
}
};
class CTextureMgr
{
std::vector<CTexture *> m_vTextures;
public:
virtual ~CTextureMgr()
{
for (DWORD i=0;i<static_cast<DWORD>m_vTextures.size();i++)
{
if (m_vTextures[i]) delete m_vTextures[i];
}
m_vTextures.clear();
}
DWORD AddFromFile(std::string File,IDirect3DDevice9 *pDevice)
{
CTexture *pTex=new CTexture;
pTex->CreateFromFile(File,pDevice);
m_vTextures.push_back(pTex);
return static_cast<DWORD>(m_vTextures.size()-1);
}
...
};