codice:
void VGngineMesh::CreaMesh(const char *MeshFile,VGngineDevice *Device)
{
LPD3DXBUFFER MeshBuffer;
if(FAILED(D3DXLoadMeshFromX(MeshFile,D3DXMESH_MANAGED, (LPDIRECT3DDEVICE9)Device->GetDevice(),NULL,&MeshBuffer,
NULL,&NumMateriali,&g_pMesh)))
{
MessageBox(NULL,"Eh non ha caricato bene","Ciao",MB_OK);
}
D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)MeshBuffer->GetBufferPointer();
g_pMatMesh = new D3DMATERIAL9[NumMateriali];
g_pTexMesh = new LPDIRECT3DTEXTURE9[NumMateriali];
for (DWORD i = 0; i < NumMateriali; i++)
{
g_pMatMesh[i] = d3dxMaterials[i].MatD3D;
g_pMatMesh[i].Ambient = g_pMatMesh[i].Diffuse;
if(D3DXCreateTextureFromFile( (LPDIRECT3DDEVICE9)Device->GetDevice(),d3dxMaterials[i].pTextureFilename,
//Puntatore non valido &g_pTexMesh[i]) != D3D_OK)
{
MessageBox(0,"La texture non è stata caricata","muori",MB_OK);
}
}
MeshBuffer->Release();
}
Questo è il codice incriminato, che proviene da un mio progetto lib per facilitarmi l'uso delle directx9
Da come si può notare il puntatore d3dxmaterial viene dato in automatico dalla funzione, quindi dovrebbe essere valido
Il puntatore che da errore è
pTextureFilename, che è un char *.
Ora se la mesh è preimpostata per avere una texture, il char * restutisce il nome della texture, altrimenti mi da ecc. non gestita, in quanto, se passo col mouse su ptexturefilename (visual studio 2003) mi dice ptr. non valido
Ho provato anche a fare if d3dxmaterials[i].ptexturefilename == NULL ma a quanto pare il puntatore non è null...
Come risolvere?