]> git.lizzy.rs Git - irrlicht.git/blobdiff - source/Irrlicht/CXMeshFileLoader.cpp
SDL: Support clipboard
[irrlicht.git] / source / Irrlicht / CXMeshFileLoader.cpp
index feddb4086f66d49193cf80338b41a6a676ce7bb5..c06cd1772be66c85bbdfce03c5fa8dc84fda083f 100644 (file)
@@ -2,19 +2,14 @@
 // 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
@@ -28,16 +23,13 @@ namespace scene
 {\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
@@ -58,9 +50,6 @@ IAnimatedMesh* CXMeshFileLoader::createMesh(io::IReadFile* file)
        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
@@ -95,7 +84,6 @@ IAnimatedMesh* CXMeshFileLoader::createMesh(io::IReadFile* file)
        P=0;\r
        End=0;\r
        CurFrame=0;\r
-       TemplateMaterials.clear();\r
 \r
        delete [] Buffer;\r
        Buffer = 0;\r
@@ -491,7 +479,7 @@ bool CXMeshFileLoader::parseDataObject()
 \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
@@ -527,10 +515,7 @@ bool CXMeshFileLoader::parseDataObject()
        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
@@ -764,6 +749,7 @@ bool CXMeshFileLoader::parseDataObjectMesh(SXMesh &mesh)
        {\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
@@ -846,7 +832,7 @@ bool CXMeshFileLoader::parseDataObjectMesh(SXMesh &mesh)
                }\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
@@ -1116,7 +1102,7 @@ bool CXMeshFileLoader::parseDataObjectSkinWeights(SXMesh &mesh)
 \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
@@ -1468,16 +1454,14 @@ bool CXMeshFileLoader::parseDataObjectMeshMaterialList(SXMesh &mesh)
                {\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
@@ -1496,87 +1480,6 @@ bool CXMeshFileLoader::parseDataObjectMeshMaterialList(SXMesh &mesh)
 }\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
@@ -2452,6 +2355,3 @@ bool CXMeshFileLoader::readMatrix(core::matrix4& mat)
 \r
 } // end namespace scene\r
 } // end namespace irr\r
-\r
-#endif // _IRR_COMPILE_WITH_X_LOADER_\r
-\r