Commit 35fe8766 authored by hybrid's avatar hybrid

Some dmf simplifications.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2875 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 06379558
......@@ -57,7 +57,8 @@ IAnimatedMesh* CDMFLoader::createMesh(io::IReadFile* file)
video::IVideoDriver* driver = SceneMgr->getVideoDriver();
//Load stringlist
StringList dmfRawFile(file);
StringList dmfRawFile;
LoadFromFile(file, dmfRawFile);
if (dmfRawFile.size()==0)
return 0;
......@@ -69,13 +70,13 @@ IAnimatedMesh* CDMFLoader::createMesh(io::IReadFile* file)
dmfHeader header;
//load header
core::array<dmfMaterial> materiali;
if (GetDMFHeader(dmfRawFile, header))
{
//let's set ambient light
SceneMgr->setAmbientLight(header.dmfAmbient);
//let's create the correct number of materials, vertices and faces
core::array<dmfMaterial> materiali;
dmfVert *verts=new dmfVert[header.numVertices];
dmfFace *faces=new dmfFace[header.numFaces];
......@@ -113,7 +114,7 @@ IAnimatedMesh* CDMFLoader::createMesh(io::IReadFile* file)
for (i = 0; i < header.numFaces; i++)
{
#ifdef _IRR_DMF_DEBUG_
// os::Printer::log("Polygon with #vertices", core::stringc(faces[i].numVerts).c_str());
os::Printer::log("Polygon with #vertices", core::stringc(faces[i].numVerts).c_str());
#endif
if (faces[i].numVerts < 3)
continue;
......@@ -187,6 +188,33 @@ IAnimatedMesh* CDMFLoader::createMesh(io::IReadFile* file)
}
}
delete verts;
delete faces;
}
// delete all buffers without geometry in it.
#ifdef _IRR_DMF_DEBUG_
os::Printer::log("Cleaning meshbuffers.");
#endif
i = 0;
while(i < mesh->MeshBuffers.size())
{
if (mesh->MeshBuffers[i]->getVertexCount() == 0 ||
mesh->MeshBuffers[i]->getIndexCount() == 0)
{
// Meshbuffer is empty -- drop it
mesh->MeshBuffers[i]->drop();
mesh->MeshBuffers.erase(i);
materiali.erase(i);
}
else
{
i++;
}
}
{
//load textures and lightmaps in materials.
//don't worry if you receive a could not load texture, cause if you don't need
//a particular material in your scene it will be loaded and then destroyed.
......@@ -202,7 +230,7 @@ IAnimatedMesh* CDMFLoader::createMesh(io::IReadFile* file)
path = FileSystem->getFileDir(file->getFileName());
path += ('/');
for (i=0; i<header.numMaterials; i++)
for (i=0; i<mesh->getMeshBufferCount(); i++)
{
//texture and lightmap
video::ITexture *tex = 0;
......@@ -368,29 +396,6 @@ IAnimatedMesh* CDMFLoader::createMesh(io::IReadFile* file)
mat.setTexture(0, tex);
mat.setTexture(1, lig);
}
delete verts;
delete faces;
}
// delete all buffers without geometry in it.
#ifdef _IRR_DMF_DEBUG_
os::Printer::log("Cleaning meshbuffers.");
#endif
i = 0;
while(i < mesh->MeshBuffers.size())
{
if (mesh->MeshBuffers[i]->getVertexCount() == 0 ||
mesh->MeshBuffers[i]->getIndexCount() == 0)
{
// Meshbuffer is empty -- drop it
mesh->MeshBuffers[i]->drop();
mesh->MeshBuffers.erase(i);
}
else
{
i++;
}
}
// create bounding box
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment