PDA

Visualizza la versione completa : [C++] Controllo di un puntatore


XWolverineX
19-02-2006, 23:14
Salve.
In Direct3D ho bisogno di caricare una mesh e appicargli una texture.

Ora per se la mesh effettivamente settata per una texture, allora
d3dxMaterials[i].pTextureFilename sar il puntatore a char che avr la texture.
Ma se la mesh non ha una sua texture predefinita, il puntatore non valido, quindi mi da errore e crasha tutto.
Come posso verificare se il puntatore valido o no? Ho provat a fare

if (d3dxMaterials[i].pTextureFilename != NULL) prima del blocco di codice, ma non sembra funzionare..

oregon
20-02-2006, 01:57
Quando quel puntatore non e' valido, chi lo azzera ?

Da dove proviene il puntatore ?

XWolverineX
20-02-2006, 20:16
void VGngineMesh::CreaMesh(const char *MeshFile,VGngineDevice *Device)
{

LPD3DXBUFFER MeshBuffer;
if(FAILED(D3DXLoadMeshFromX(MeshFile,D3DXMESH_MANA GED, (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?

XWolverineX
20-02-2006, 22:35
up

XWolverineX
20-02-2006, 23:19
Ho risolto.
Per un mio errore invece di

== NULL avevo scritto == NUL che stranamente definito a 3120989 in un toolkit che avevo incluso, e quindi dava erorre

oregon
20-02-2006, 23:54
La prossima volta, invece di scrivere



if (d3dxMaterials[i].pTextureFilename != NULL)


scrivi



if (d3dxMaterials[i].pTextureFilename)


e vai sul sicuro

XWolverineX
21-02-2006, 00:02
Ma come funzionano queste cose sottointese? Utilizzano gli overloading degli operatori?

oregon
21-02-2006, 00:16
Niente di tutto cio' e niente di sottointeso.

In C una espressione viene valutata come vera se diversa da zero, falsa se 0.

Loading