// This file is part of the "Irrlicht Engine".\r
// For conditions of distribution and use, see copyright notice in irrlicht.h\r
\r
-#include "IrrCompileConfig.h"\r
-\r
-#ifdef _IRR_COMPILE_WITH_X_LOADER_\r
\r
#include "CXMeshFileLoader.h"\r
-#include "CMeshTextureLoader.h"\r
#include "os.h"\r
\r
#include "fast_atof.h"\r
#include "coreutil.h"\r
#include "ISceneManager.h"\r
#include "IVideoDriver.h"\r
-#include "IFileSystem.h"\r
#include "IReadFile.h"\r
\r
#ifdef _DEBUG\r
{\r
\r
//! Constructor\r
-CXMeshFileLoader::CXMeshFileLoader(scene::ISceneManager* smgr, io::IFileSystem* fs)\r
-: SceneManager(smgr), FileSystem(fs), AnimatedMesh(0),\r
- Buffer(0), P(0), End(0), BinaryNumCount(0), Line(0),\r
+CXMeshFileLoader::CXMeshFileLoader(scene::ISceneManager* smgr)\r
+: AnimatedMesh(0), Buffer(0), P(0), End(0), BinaryNumCount(0), Line(0),\r
CurFrame(0), MajorVersion(0), MinorVersion(0), BinaryFormat(false), FloatSize(0)\r
{\r
#ifdef _DEBUG\r
setDebugName("CXMeshFileLoader");\r
#endif\r
-\r
- TextureLoader = new CMeshTextureLoader( FileSystem, SceneManager->getVideoDriver() );\r
}\r
\r
\r
if (!file)\r
return 0;\r
\r
- if ( getMeshTextureLoader() )\r
- getMeshTextureLoader()->setMeshFile(file);\r
-\r
#ifdef _XREADER_DEBUG\r
u32 time = os::Timer::getRealTime();\r
#endif\r
P=0;\r
End=0;\r
CurFrame=0;\r
- TemplateMaterials.clear();\r
\r
delete [] Buffer;\r
Buffer = 0;\r
\r
// parse specific object\r
#ifdef _XREADER_DEBUG\r
- os::Printer::log("debug DataObject:", objectName.c_str(), ELL_DEBUG);\r
+ os::Printer::log("debug DataObject", objectName.c_str(), ELL_DEBUG);\r
#endif\r
\r
if (objectName == "template")\r
else\r
if (objectName == "Material")\r
{\r
- // template materials now available thanks to joeWright\r
- TemplateMaterials.push_back(SXTemplateMaterial());\r
- TemplateMaterials.getLast().Name = getNextToken();\r
- return parseDataObjectMaterial(TemplateMaterials.getLast().Material);\r
+ return parseUnknownDataObject();\r
}\r
else\r
if (objectName == "}")\r
{\r
readVector3(mesh.Vertices[n].Pos);\r
mesh.Vertices[n].Color=0xFFFFFFFF;\r
+ mesh.Vertices[n].Normal=core::vector3df(0.0f);\r
}\r
\r
if (!checkForTwoFollowingSemicolons())\r
}\r
\r
#ifdef _XREADER_DEBUG\r
- os::Printer::log("debug DataObject in mesh:", objectName.c_str(), ELL_DEBUG);\r
+ os::Printer::log("debug DataObject in mesh", objectName.c_str(), ELL_DEBUG);\r
#endif\r
\r
if (objectName == "MeshNormals")\r
\r
if (!getNextTokenAsString(TransformNodeName))\r
{\r
- os::Printer::log("Unknown syntax while reading transfrom node name string in .x file", ELL_WARNING);\r
+ os::Printer::log("Unknown syntax while reading transform node name string in .x file", ELL_WARNING);\r
os::Printer::log("Line", core::stringc(Line).c_str(), ELL_WARNING);\r
return false;\r
}\r
{\r
// template materials now available thanks to joeWright\r
objectName = getNextToken();\r
- for (u32 i=0; i<TemplateMaterials.size(); ++i)\r
- if (TemplateMaterials[i].Name == objectName)\r
- mesh.Materials.push_back(TemplateMaterials[i].Material);\r
+ mesh.Materials.push_back(video::SMaterial());\r
getNextToken(); // skip }\r
}\r
else\r
if (objectName == "Material")\r
{\r
mesh.Materials.push_back(video::SMaterial());\r
- if (!parseDataObjectMaterial(mesh.Materials.getLast()))\r
+ if (!parseUnknownDataObject())\r
return false;\r
}\r
else\r
}\r
\r
\r
-bool CXMeshFileLoader::parseDataObjectMaterial(video::SMaterial& material)\r
-{\r
-#ifdef _XREADER_DEBUG\r
- os::Printer::log("CXFileReader: Reading mesh material", ELL_DEBUG);\r
-#endif\r
-\r
- if (!readHeadOfDataObject())\r
- {\r
- os::Printer::log("No opening brace in Mesh Material found in .x file", ELL_WARNING);\r
- os::Printer::log("Line", core::stringc(Line).c_str(), ELL_WARNING);\r
- return false;\r
- }\r
-\r
- // read RGBA\r
- readRGBA(material.DiffuseColor); checkForOneFollowingSemicolons();\r
-\r
- // read power\r
- material.Shininess = readFloat();\r
-\r
- // read specular\r
- readRGB(material.SpecularColor); checkForOneFollowingSemicolons();\r
-\r
- // read emissive\r
- readRGB(material.EmissiveColor); checkForOneFollowingSemicolons();\r
-\r
- // read other data objects\r
- int textureLayer=0;\r
- while(true)\r
- {\r
- core::stringc objectName = getNextToken();\r
-\r
- if (objectName.size() == 0)\r
- {\r
- os::Printer::log("Unexpected ending found in Mesh Material in .x file.", ELL_WARNING);\r
- os::Printer::log("Line", core::stringc(Line).c_str(), ELL_WARNING);\r
- return false;\r
- }\r
- else\r
- if (objectName == "}")\r
- {\r
- break; // material finished\r
- }\r
- else\r
- if (objectName.equals_ignore_case("TextureFilename"))\r
- {\r
- // some exporters write "TextureFileName" instead.\r
- core::stringc TextureFileName;\r
- if (!parseDataObjectTextureFilename(TextureFileName))\r
- return false;\r
-\r
- material.setTexture( textureLayer, getMeshTextureLoader() ? getMeshTextureLoader()->getTexture(TextureFileName) : NULL );\r
-\r
- ++textureLayer;\r
- if (textureLayer==2)\r
- material.MaterialType=video::EMT_LIGHTMAP;\r
- }\r
- else\r
- if (objectName.equals_ignore_case("NormalmapFilename"))\r
- {\r
- // some exporters write "NormalmapFileName" instead.\r
- core::stringc TextureFileName;\r
- if (!parseDataObjectTextureFilename(TextureFileName))\r
- return false;\r
-\r
- material.setTexture( 1, getMeshTextureLoader() ? getMeshTextureLoader()->getTexture(TextureFileName) : NULL );\r
-\r
- if (textureLayer==1)\r
- ++textureLayer;\r
- }\r
- else\r
- {\r
- os::Printer::log("Unknown data object in material in .x file", objectName.c_str(), ELL_WARNING);\r
- if (!parseUnknownDataObject())\r
- return false;\r
- }\r
- }\r
-\r
- return true;\r
-}\r
-\r
-\r
bool CXMeshFileLoader::parseDataObjectAnimationSet()\r
{\r
#ifdef _XREADER_DEBUG\r
\r
} // end namespace scene\r
} // end namespace irr\r
-\r
-#endif // _IRR_COMPILE_WITH_X_LOADER_\r
-\r