Commit 6d7357c3 authored by hybrid's avatar hybrid

Fixed some bugs in the collada loader and activated proper material usage....

Fixed some bugs in the collada loader and activated proper material usage. Now, collada 1.4 meshes are also textured and colored.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1204 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 78b1d0f1
...@@ -1096,8 +1096,8 @@ void CColladaFileLoader::readImage(io::IXMLReaderUTF8* reader) ...@@ -1096,8 +1096,8 @@ void CColladaFileLoader::readImage(io::IXMLReaderUTF8* reader)
SColladaImage& image=Images.getLast(); SColladaImage& image=Images.getLast();
image.Id = readId(reader); image.Id = readId(reader);
image.Dimension.Height = (u32)reader->getAttributeValue("height"); image.Dimension.Height = (u32)reader->getAttributeValueAsInt("height");
image.Dimension.Width = (u32)reader->getAttributeValue("width"); image.Dimension.Width = (u32)reader->getAttributeValueAsInt("width");
if (Version >= 10400) // start with 1.4 if (Version >= 10400) // start with 1.4
{ {
...@@ -1110,6 +1110,7 @@ void CColladaFileLoader::readImage(io::IXMLReaderUTF8* reader) ...@@ -1110,6 +1110,7 @@ void CColladaFileLoader::readImage(io::IXMLReaderUTF8* reader)
else else
if (initFromName == reader->getNodeName()) if (initFromName == reader->getNodeName())
{ {
reader->read();
image.Source = reader->getNodeData(); image.Source = reader->getNodeData();
image.Source.trim(); image.Source.trim();
image.SourceIsFilename=true; image.SourceIsFilename=true;
...@@ -1117,6 +1118,7 @@ void CColladaFileLoader::readImage(io::IXMLReaderUTF8* reader) ...@@ -1117,6 +1118,7 @@ void CColladaFileLoader::readImage(io::IXMLReaderUTF8* reader)
else else
if (dataName == reader->getNodeName()) if (dataName == reader->getNodeName())
{ {
reader->read();
image.Source = reader->getNodeData(); image.Source = reader->getNodeData();
image.Source.trim(); image.Source.trim();
image.SourceIsFilename=false; image.SourceIsFilename=false;
...@@ -1273,8 +1275,8 @@ void CColladaFileLoader::readEffect(io::IXMLReaderUTF8* reader, SColladaEffect * ...@@ -1273,8 +1275,8 @@ void CColladaFileLoader::readEffect(io::IXMLReaderUTF8* reader, SColladaEffect *
if (reader->getNodeType() == io::EXN_ELEMENT) if (reader->getNodeType() == io::EXN_ELEMENT)
{ {
// first come the tags we descend, but ignore the top-levels // first come the tags we descend, but ignore the top-levels
if ((profileCOMMONSectionName == reader->getNodeName()) || if (!reader->isEmptyElement() && ((profileCOMMONSectionName == reader->getNodeName()) ||
(techniqueNodeName == reader->getNodeName())) (techniqueNodeName == reader->getNodeName())))
readEffect(reader,effect); readEffect(reader,effect);
else else
if (newParamName == reader->getNodeName()) if (newParamName == reader->getNodeName())
...@@ -1391,7 +1393,7 @@ void CColladaFileLoader::readEffect(io::IXMLReaderUTF8* reader, SColladaEffect * ...@@ -1391,7 +1393,7 @@ void CColladaFileLoader::readEffect(io::IXMLReaderUTF8* reader, SColladaEffect *
} }
} }
else else
if (extraNodeName == reader->getNodeName()) if (!reader->isEmptyElement() && (extraNodeName == reader->getNodeName()))
readEffect(reader,effect); readEffect(reader,effect);
else else
if (doubleSidedName == reader->getNodeName()) if (doubleSidedName == reader->getNodeName())
...@@ -1950,6 +1952,8 @@ void CColladaFileLoader::readPolygonSection(io::IXMLReaderUTF8* reader, ...@@ -1950,6 +1952,8 @@ void CColladaFileLoader::readPolygonSection(io::IXMLReaderUTF8* reader,
for (u32 i=0; i<polygons.size(); ++i) for (u32 i=0; i<polygons.size(); ++i)
{ {
core::array<u16> indices; core::array<u16> indices;
const u32 vertexCount = polygons[i].Indices.size() / maxOffset;
mbuffer->Vertices.reallocate(mbuffer->Vertices.size()+vertexCount);
// for all index/semantic groups // for all index/semantic groups
for (u32 v=0; v<polygons[i].Indices.size(); v+=maxOffset) for (u32 v=0; v<polygons[i].Indices.size(); v+=maxOffset)
...@@ -2039,8 +2043,8 @@ void CColladaFileLoader::readPolygonSection(io::IXMLReaderUTF8* reader, ...@@ -2039,8 +2043,8 @@ void CColladaFileLoader::readPolygonSection(io::IXMLReaderUTF8* reader,
for (u32 i=0; i<polygons.size(); ++i) for (u32 i=0; i<polygons.size(); ++i)
{ {
u32 vertexCount = polygons[i].Indices.size() / maxOffset; const u32 vertexCount = polygons[i].Indices.size() / maxOffset;
mbuffer->Vertices.reallocate(mbuffer->Vertices.size()+vertexCount);
// for all vertices in array // for all vertices in array
for (u32 v=0; v<polygons[i].Indices.size(); v+=maxOffset) for (u32 v=0; v<polygons[i].Indices.size(); v+=maxOffset)
{ {
...@@ -2103,6 +2107,9 @@ void CColladaFileLoader::readPolygonSection(io::IXMLReaderUTF8* reader, ...@@ -2103,6 +2107,9 @@ void CColladaFileLoader::readPolygonSection(io::IXMLReaderUTF8* reader,
} // end for all polygons } // end for all polygons
} }
const SColladaMaterial* m = findMaterial(materialName);
if (m)
buffer->getMaterial() = m->Mat;
// add future bind reference for the material // add future bind reference for the material
core::stringc materialReference = geometryId+"/"+materialName; core::stringc materialReference = geometryId+"/"+materialName;
if (!MaterialsToBind.find(materialReference)) if (!MaterialsToBind.find(materialReference))
......
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