|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
const bool Mesh::create(std::string const& mesh) // Soll jemand was am return-Wert ändern können? Willst du was an mesh ändern? Wofür ne Kopie?
{
LPD3DXBUFFER badjacency(NULL);
LPD3DXBUFFER bmaterials(NULL);
LPD3DXBUFFER beffectinstances(NULL);
//string cmesh; Nutz du nirgendwo cmesh? Wenn ++i, aber hier wohl eher substr?
//for(int i=0; i<mesh.length()-1; i++)
//{
// cmesh+=mesh[i];
//}
HRESULT hr = D3DXLoadMeshFromX(mesh.c_str(), D3DXMESH_MANAGED, Direct3D->Device, &badjacency, &bmaterials, &beffectinstances, &NumMaterials, &Mesh);
if (hr != D3D_OK)
{
Log->Write("Mesh", "Fehler beim Laden eines des Mesh, hr); // Fehlercode-Formatierung hat hier nix zu suchen?!
return false;
}
D3DXMATERIAL* materials = reinterpret_cast<D3DXMATERIAL*>(bmaterials->GetBufferPointer()); // c++-style ;)
Materials = new D3DMATERIAL9[NumMaterials];
for (unsigned int i(0); i < NumMaterials; ++i) // wenns wirklich ne Schleife sein muss ;) ++i u. unsigned
{
Materials[i] = materials[i].MatD3D;
}
safe_release(badjacency); // is von dir übernommen.
safe_release(bmaterials);
safe_release(beffectinstances);
return true;
}
|
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
CMesh::CMesh() : Mesh(NULL), NumMaterials(0L), Position(D3DXVECTOR3(0.0f, 0.0f, 0.0f)), Rotation(D3DXVECTOR3(0.0f, 0.0f, 0.0f)), Scaling(D3DXVECTOR3(1.0f, 1.0f, 1.0f)), CRot(D3DXVECTOR3(0.0f, 0.0f, 0.0f))
{} // Initialisierungsliste
CMesh::~CMesh()
{
safe_release(Mesh);
safe_delete_array(Materials);
}
|
Schreib dir nen Template safe_delete_pointer, safe_delete_array, safe_release, dann passiert dir da nimmer viel
Materials ist z.B. ein Array, freigegeben wird aber nur das erste Element. delete statt delete[]
Tatsächlich? Dann hätte sich was am C++-Std. geändert seid ich weg war
Das löscht schlicht garnix weils nicht definiert ist!