]> git.lizzy.rs Git - irrlicht.git/blobdiff - source/Irrlicht/CNullDriver.cpp
Drop obsolete configuration macros
[irrlicht.git] / source / Irrlicht / CNullDriver.cpp
index da647797b95e19a575c7e8605a9ed923e29774aa..5834e01caba97a8cb9dcba37ae6bf44c756349f9 100644 (file)
@@ -14,7 +14,7 @@
 #include "IAnimatedMeshSceneNode.h"\r
 #include "CMeshManipulator.h"\r
 #include "CColorConverter.h"\r
-#include "IAttributeExchangingObject.h"\r
+#include "IReferenceCounted.h"\r
 #include "IRenderTarget.h"\r
 \r
 \r
@@ -32,57 +32,15 @@ IImageLoader* createImageLoaderJPG();
 //! creates a loader which is able to load targa images\r
 IImageLoader* createImageLoaderTGA();\r
 \r
-//! creates a loader which is able to load psd images\r
-IImageLoader* createImageLoaderPSD();\r
-\r
-//! creates a loader which is able to load psd images\r
-IImageLoader* createImageLoaderPVR();\r
-\r
-//! creates a loader which is able to load dds images\r
-IImageLoader* createImageLoaderDDS();\r
-\r
-//! creates a loader which is able to load pcx images\r
-IImageLoader* createImageLoaderPCX();\r
-\r
 //! creates a loader which is able to load png images\r
 IImageLoader* createImageLoaderPNG();\r
 \r
-//! creates a loader which is able to load WAL images\r
-IImageLoader* createImageLoaderWAL();\r
-\r
-//! creates a loader which is able to load halflife images\r
-IImageLoader* createImageLoaderHalfLife();\r
-\r
-//! creates a loader which is able to load lmp images\r
-IImageLoader* createImageLoaderLMP();\r
-\r
-//! creates a loader which is able to load ppm/pgm/pbm images\r
-IImageLoader* createImageLoaderPPM();\r
-\r
-//! creates a loader which is able to load rgb images\r
-IImageLoader* createImageLoaderRGB();\r
-\r
-\r
-//! creates a writer which is able to save bmp images\r
-IImageWriter* createImageWriterBMP();\r
-\r
 //! creates a writer which is able to save jpg images\r
 IImageWriter* createImageWriterJPG();\r
 \r
-//! creates a writer which is able to save tga images\r
-IImageWriter* createImageWriterTGA();\r
-\r
-//! creates a writer which is able to save psd images\r
-IImageWriter* createImageWriterPSD();\r
-\r
-//! creates a writer which is able to save pcx images\r
-IImageWriter* createImageWriterPCX();\r
-\r
 //! creates a writer which is able to save png images\r
 IImageWriter* createImageWriterPNG();\r
 \r
-//! creates a writer which is able to save ppm images\r
-IImageWriter* createImageWriterPPM();\r
 \r
 //! constructor\r
 CNullDriver::CNullDriver(io::IFileSystem* io, const core::dimension2d<u32>& screenSize)\r
@@ -97,7 +55,6 @@ CNullDriver::CNullDriver(io::IFileSystem* io, const core::dimension2d<u32>& scre
        DriverAttributes = new io::CAttributes();\r
        DriverAttributes->addInt("MaxTextures", _IRR_MATERIAL_MAX_TEXTURES_);\r
        DriverAttributes->addInt("MaxSupportedTextures", _IRR_MATERIAL_MAX_TEXTURES_);\r
-       DriverAttributes->addInt("MaxLights", getMaximalDynamicLightAmount());\r
        DriverAttributes->addInt("MaxAnisotropy", 1);\r
 //     DriverAttributes->addInt("MaxUserClipPlanes", 0);\r
 //     DriverAttributes->addInt("MaxAuxBuffers", 0);\r
@@ -125,68 +82,14 @@ CNullDriver::CNullDriver(io::IFileSystem* io, const core::dimension2d<u32>& scre
        if (FileSystem)\r
                FileSystem->grab();\r
 \r
-       // create surface loader\r
-\r
-#ifdef _IRR_COMPILE_WITH_WAL_LOADER_\r
-       SurfaceLoader.push_back(video::createImageLoaderHalfLife());\r
-       SurfaceLoader.push_back(video::createImageLoaderWAL());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_LMP_LOADER_\r
-       SurfaceLoader.push_back(video::createImageLoaderLMP());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PPM_LOADER_\r
-       SurfaceLoader.push_back(video::createImageLoaderPPM());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_RGB_LOADER_\r
-       SurfaceLoader.push_back(video::createImageLoaderRGB());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PSD_LOADER_\r
-       SurfaceLoader.push_back(video::createImageLoaderPSD());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PVR_LOADER_\r
-       SurfaceLoader.push_back(video::createImageLoaderPVR());\r
-#endif\r
-#if defined(_IRR_COMPILE_WITH_DDS_LOADER_) || defined(_IRR_COMPILE_WITH_DDS_DECODER_LOADER_)\r
-       SurfaceLoader.push_back(video::createImageLoaderDDS());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PCX_LOADER_\r
-       SurfaceLoader.push_back(video::createImageLoaderPCX());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_TGA_LOADER_\r
+       // create surface loaders and writers\r
        SurfaceLoader.push_back(video::createImageLoaderTGA());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PNG_LOADER_\r
        SurfaceLoader.push_back(video::createImageLoaderPNG());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_JPG_LOADER_\r
        SurfaceLoader.push_back(video::createImageLoaderJPG());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_BMP_LOADER_\r
        SurfaceLoader.push_back(video::createImageLoaderBMP());\r
-#endif\r
-\r
-\r
-#ifdef _IRR_COMPILE_WITH_PPM_WRITER_\r
-       SurfaceWriter.push_back(video::createImageWriterPPM());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PCX_WRITER_\r
-       SurfaceWriter.push_back(video::createImageWriterPCX());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PSD_WRITER_\r
-       SurfaceWriter.push_back(video::createImageWriterPSD());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_TGA_WRITER_\r
-       SurfaceWriter.push_back(video::createImageWriterTGA());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_JPG_WRITER_\r
+\r
        SurfaceWriter.push_back(video::createImageWriterJPG());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PNG_WRITER_\r
        SurfaceWriter.push_back(video::createImageWriterPNG());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_BMP_WRITER_\r
-       SurfaceWriter.push_back(video::createImageWriterBMP());\r
-#endif\r
 \r
 \r
        // set ExposedData to 0\r
@@ -1095,61 +998,6 @@ void CNullDriver::drawStencilShadow(bool clearStencilBuffer,
 }\r
 \r
 \r
-//! deletes all dynamic lights there are\r
-void CNullDriver::deleteAllDynamicLights()\r
-{\r
-       Lights.set_used(0);\r
-}\r
-\r
-\r
-//! adds a dynamic light\r
-s32 CNullDriver::addDynamicLight(const SLight& light)\r
-{\r
-       Lights.push_back(light);\r
-       return Lights.size() - 1;\r
-}\r
-\r
-//! Turns a dynamic light on or off\r
-//! \param lightIndex: the index returned by addDynamicLight\r
-//! \param turnOn: true to turn the light on, false to turn it off\r
-void CNullDriver::turnLightOn(s32 lightIndex, bool turnOn)\r
-{\r
-       // Do nothing\r
-}\r
-\r
-\r
-//! returns the maximal amount of dynamic lights the device can handle\r
-u32 CNullDriver::getMaximalDynamicLightAmount() const\r
-{\r
-       return 0;\r
-}\r
-\r
-\r
-//! Returns current amount of dynamic lights set\r
-//! \return Current amount of dynamic lights set\r
-u32 CNullDriver::getDynamicLightCount() const\r
-{\r
-       return Lights.size();\r
-}\r
-\r
-\r
-//! Returns light data which was previously set by IVideoDriver::addDynamicLight().\r
-//! \param idx: Zero based index of the light. Must be greater than 0 and smaller\r
-//! than IVideoDriver()::getDynamicLightCount.\r
-//! \return Light data.\r
-const SLight& CNullDriver::getDynamicLight(u32 idx) const\r
-{\r
-       if ( idx < Lights.size() )\r
-               return Lights[idx];\r
-       else\r
-       {\r
-               _IRR_DEBUG_BREAK_IF(true)\r
-               static const SLight dummy;\r
-               return dummy;\r
-       }\r
-}\r
-\r
-\r
 //! Creates a boolean alpha channel of the texture based of an color key.\r
 void CNullDriver::makeColorKeyTexture(video::ITexture* texture,\r
                                                                        video::SColor color,\r
@@ -1307,8 +1155,8 @@ bool CNullDriver::checkPrimitiveCount(u32 prmCount) const
 \r
        if (prmCount > m)\r
        {\r
-               char tmp[1024];\r
-               sprintf(tmp,"Could not draw triangles, too many primitives(%u), maximum is %u.", prmCount, m);\r
+               char tmp[128];\r
+               snprintf_irr(tmp, sizeof(tmp), "Could not draw triangles, too many primitives(%u), maximum is %u.", prmCount, m);\r
                os::Printer::log(tmp, ELL_ERROR);\r
                return false;\r
        }\r
@@ -1689,9 +1537,9 @@ CNullDriver::SHWBufferLink *CNullDriver::getBufferLink(const scene::IMeshBuffer*
                return 0;\r
 \r
        //search for hardware links\r
-       core::map< const scene::IMeshBuffer*,SHWBufferLink* >::Node* node = HWBufferMap.find(mb);\r
-       if (node)\r
-               return node->getValue();\r
+       SHWBufferLink *HWBuffer = reinterpret_cast<SHWBufferLink*>(mb->getHWBuffer());\r
+       if (HWBuffer)\r
+               return HWBuffer;\r
 \r
        return createHardwareBuffer(mb); //no hardware links, and mesh wants one, create it\r
 }\r
@@ -1700,20 +1548,13 @@ CNullDriver::SHWBufferLink *CNullDriver::getBufferLink(const scene::IMeshBuffer*
 //! Update all hardware buffers, remove unused ones\r
 void CNullDriver::updateAllHardwareBuffers()\r
 {\r
-       core::map<const scene::IMeshBuffer*,SHWBufferLink*>::ParentFirstIterator Iterator=HWBufferMap.getParentFirstIterator();\r
-\r
-       for (;!Iterator.atEnd();Iterator++)\r
-       {\r
-               SHWBufferLink *Link=Iterator.getNode()->getValue();\r
+       auto it = HWBufferList.begin();\r
+       while (it != HWBufferList.end()) {\r
+               SHWBufferLink *Link = *it;\r
+               ++it;\r
 \r
-               Link->LastUsed++;\r
-               if (Link->LastUsed>20000)\r
-               {\r
+               if (!Link->MeshBuffer || Link->MeshBuffer->getReferenceCount() == 1)\r
                        deleteHardwareBuffer(Link);\r
-\r
-                       // todo: needs better fix\r
-                       Iterator = HWBufferMap.getParentFirstIterator();\r
-               }\r
        }\r
 }\r
 \r
@@ -1722,7 +1563,7 @@ void CNullDriver::deleteHardwareBuffer(SHWBufferLink *HWBuffer)
 {\r
        if (!HWBuffer)\r
                return;\r
-       HWBufferMap.remove(HWBuffer->MeshBuffer);\r
+       HWBufferList.erase(HWBuffer->listPosition);\r
        delete HWBuffer;\r
 }\r
 \r
@@ -1730,17 +1571,19 @@ void CNullDriver::deleteHardwareBuffer(SHWBufferLink *HWBuffer)
 //! Remove hardware buffer\r
 void CNullDriver::removeHardwareBuffer(const scene::IMeshBuffer* mb)\r
 {\r
-       core::map<const scene::IMeshBuffer*,SHWBufferLink*>::Node* node = HWBufferMap.find(mb);\r
-       if (node)\r
-               deleteHardwareBuffer(node->getValue());\r
+       if (!mb)\r
+               return;\r
+       SHWBufferLink *HWBuffer = reinterpret_cast<SHWBufferLink*>(mb->getHWBuffer());\r
+       if (HWBuffer)\r
+               deleteHardwareBuffer(HWBuffer);\r
 }\r
 \r
 \r
 //! Remove all hardware buffers\r
 void CNullDriver::removeAllHardwareBuffers()\r
 {\r
-       while (HWBufferMap.size())\r
-               deleteHardwareBuffer(HWBufferMap.getRoot()->getValue());\r
+       while (!HWBufferList.empty())\r
+               deleteHardwareBuffer(HWBufferList.front());\r
 }\r
 \r
 \r
@@ -2000,193 +1843,6 @@ void CNullDriver::swapMaterialRenderers(u32 idx1, u32 idx2, bool swapNames)
        }\r
 }\r
 \r
-//! Creates material attributes list from a material, usable for serialization and more.\r
-io::IAttributes* CNullDriver::createAttributesFromMaterial(const video::SMaterial& material,\r
-       io::SAttributeReadWriteOptions* options)\r
-{\r
-       io::CAttributes* attr = new io::CAttributes(this);\r
-\r
-       attr->addEnum("Type", material.MaterialType, sBuiltInMaterialTypeNames);\r
-\r
-       attr->addColor("Ambient", material.AmbientColor);\r
-       attr->addColor("Diffuse", material.DiffuseColor);\r
-       attr->addColor("Emissive", material.EmissiveColor);\r
-       attr->addColor("Specular", material.SpecularColor);\r
-\r
-       attr->addFloat("Shininess", material.Shininess);\r
-       attr->addFloat("Param1", material.MaterialTypeParam);\r
-       attr->addFloat("Param2", material.MaterialTypeParam2);\r
-       attr->addFloat("Thickness", material.Thickness);\r
-\r
-       core::stringc prefix="Texture";\r
-       u32 i;\r
-       for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-       {\r
-               video::ITexture* texture = material.getTexture(i);\r
-               if (options && (options->Flags&io::EARWF_USE_RELATIVE_PATHS) && options->Filename && texture)\r
-               {\r
-                       io::path path = FileSystem->getRelativeFilename(\r
-                               FileSystem->getAbsolutePath(material.getTexture(i)->getName()), options->Filename);\r
-                       attr->addTexture((prefix+core::stringc(i+1)).c_str(), material.getTexture(i), path);\r
-               }\r
-               else\r
-               {\r
-                       attr->addTexture((prefix+core::stringc(i+1)).c_str(), texture);\r
-               }\r
-       }\r
-\r
-       attr->addBool("Wireframe", material.Wireframe);\r
-       attr->addBool("PointCloud", material.PointCloud);\r
-       attr->addBool("GouraudShading", material.GouraudShading);\r
-       attr->addBool("Lighting", material.Lighting);\r
-       attr->addEnum("ZWriteEnable", (irr::s32)material.ZWriteEnable, video::ZWriteNames);\r
-       attr->addInt("ZBuffer", material.ZBuffer);\r
-       attr->addBool("BackfaceCulling", material.BackfaceCulling);\r
-       attr->addBool("FrontfaceCulling", material.FrontfaceCulling);\r
-       attr->addBool("FogEnable", material.FogEnable);\r
-       attr->addBool("NormalizeNormals", material.NormalizeNormals);\r
-       attr->addBool("UseMipMaps", material.UseMipMaps);\r
-       attr->addInt("AntiAliasing", material.AntiAliasing);\r
-       attr->addInt("ColorMask", material.ColorMask);\r
-       attr->addInt("ColorMaterial", material.ColorMaterial);\r
-       attr->addInt("BlendOperation", material.BlendOperation);\r
-       attr->addFloat("BlendFactor", material.BlendFactor);\r
-       attr->addInt("PolygonOffsetFactor", material.PolygonOffsetFactor);\r
-       attr->addEnum("PolygonOffsetDirection", material.PolygonOffsetDirection, video::PolygonOffsetDirectionNames);\r
-       attr->addFloat("PolygonOffsetDepthBias", material.PolygonOffsetDepthBias);\r
-       attr->addFloat("PolygonOffsetSlopeScale", material.PolygonOffsetSlopeScale);\r
-\r
-       // TODO: Would be nice to have a flag that only serializes rest of texture data when a texture pointer exists.\r
-       prefix = "BilinearFilter";\r
-       for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-               attr->addBool((prefix+core::stringc(i+1)).c_str(), material.TextureLayer[i].BilinearFilter);\r
-       prefix = "TrilinearFilter";\r
-       for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-               attr->addBool((prefix+core::stringc(i+1)).c_str(), material.TextureLayer[i].TrilinearFilter);\r
-       prefix = "AnisotropicFilter";\r
-       for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-               attr->addInt((prefix+core::stringc(i+1)).c_str(), material.TextureLayer[i].AnisotropicFilter);\r
-       prefix="TextureWrapU";\r
-       for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-               attr->addEnum((prefix+core::stringc(i+1)).c_str(), material.TextureLayer[i].TextureWrapU, aTextureClampNames);\r
-       prefix="TextureWrapV";\r
-       for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-               attr->addEnum((prefix+core::stringc(i+1)).c_str(), material.TextureLayer[i].TextureWrapV, aTextureClampNames);\r
-       prefix="TextureWrapW";\r
-       for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-               attr->addEnum((prefix+core::stringc(i+1)).c_str(), material.TextureLayer[i].TextureWrapW, aTextureClampNames);\r
-       prefix="LODBias";\r
-       for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-               attr->addInt((prefix+core::stringc(i+1)).c_str(), material.TextureLayer[i].LODBias);\r
-\r
-       return attr;\r
-}\r
-\r
-\r
-//! Fills an SMaterial structure from attributes.\r
-void CNullDriver::fillMaterialStructureFromAttributes(video::SMaterial& outMaterial, io::IAttributes* attr)\r
-{\r
-       outMaterial.MaterialType = video::EMT_SOLID;\r
-\r
-       core::stringc name = attr->getAttributeAsString("Type");\r
-\r
-       u32 i;\r
-\r
-       for ( i=0; i < MaterialRenderers.size(); ++i)\r
-               if ( name == MaterialRenderers[i].Name )\r
-               {\r
-                       outMaterial.MaterialType = (video::E_MATERIAL_TYPE)i;\r
-                       break;\r
-               }\r
-\r
-       outMaterial.AmbientColor = attr->getAttributeAsColor("Ambient", outMaterial.AmbientColor);\r
-       outMaterial.DiffuseColor = attr->getAttributeAsColor("Diffuse", outMaterial.DiffuseColor);\r
-       outMaterial.EmissiveColor = attr->getAttributeAsColor("Emissive", outMaterial.EmissiveColor);\r
-       outMaterial.SpecularColor = attr->getAttributeAsColor("Specular", outMaterial.SpecularColor);\r
-\r
-       outMaterial.Shininess = attr->getAttributeAsFloat("Shininess", outMaterial.Shininess);\r
-       outMaterial.MaterialTypeParam = attr->getAttributeAsFloat("Param1", outMaterial.MaterialTypeParam);\r
-       outMaterial.MaterialTypeParam2 = attr->getAttributeAsFloat("Param2", outMaterial.MaterialTypeParam2);\r
-       outMaterial.Thickness = attr->getAttributeAsFloat("Thickness", outMaterial.Thickness);\r
-\r
-       core::stringc prefix="Texture";\r
-       for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-               outMaterial.setTexture(i, attr->getAttributeAsTexture((prefix+core::stringc(i+1)).c_str()));\r
-\r
-       outMaterial.Wireframe = attr->getAttributeAsBool("Wireframe", outMaterial.Wireframe);\r
-       outMaterial.PointCloud = attr->getAttributeAsBool("PointCloud", outMaterial.PointCloud);\r
-       outMaterial.GouraudShading = attr->getAttributeAsBool("GouraudShading", outMaterial.GouraudShading);\r
-       outMaterial.Lighting = attr->getAttributeAsBool("Lighting", outMaterial.Lighting);\r
-\r
-       io::E_ATTRIBUTE_TYPE attType = attr->getAttributeType("ZWriteEnable");\r
-       if (attType == io::EAT_BOOL )   // Before Irrlicht 1.9\r
-               outMaterial.ZWriteEnable = attr->getAttributeAsBool("ZWriteEnable", outMaterial.ZWriteEnable != video::EZW_OFF ) ? video::EZW_AUTO : video::EZW_OFF;\r
-       else if (attType == io::EAT_ENUM )\r
-               outMaterial.ZWriteEnable = (video::E_ZWRITE)attr->getAttributeAsEnumeration("ZWriteEnable", video::ZWriteNames, outMaterial.ZWriteEnable);\r
-\r
-       outMaterial.ZBuffer = (u8)attr->getAttributeAsInt("ZBuffer", outMaterial.ZBuffer);\r
-       outMaterial.BackfaceCulling = attr->getAttributeAsBool("BackfaceCulling", outMaterial.BackfaceCulling);\r
-       outMaterial.FrontfaceCulling = attr->getAttributeAsBool("FrontfaceCulling", outMaterial.FrontfaceCulling);\r
-       outMaterial.FogEnable = attr->getAttributeAsBool("FogEnable", outMaterial.FogEnable);\r
-       outMaterial.NormalizeNormals = attr->getAttributeAsBool("NormalizeNormals", outMaterial.NormalizeNormals);\r
-       outMaterial.UseMipMaps = attr->getAttributeAsBool("UseMipMaps", outMaterial.UseMipMaps);\r
-\r
-       outMaterial.AntiAliasing = attr->getAttributeAsInt("AntiAliasing", outMaterial.AntiAliasing);\r
-       outMaterial.ColorMask = attr->getAttributeAsInt("ColorMask", outMaterial.ColorMask);\r
-       outMaterial.ColorMaterial = attr->getAttributeAsInt("ColorMaterial", outMaterial.ColorMaterial);\r
-       outMaterial.BlendOperation = (video::E_BLEND_OPERATION)attr->getAttributeAsInt("BlendOperation", outMaterial.BlendOperation);\r
-       outMaterial.BlendFactor = attr->getAttributeAsFloat("BlendFactor", outMaterial.BlendFactor);\r
-       outMaterial.PolygonOffsetFactor = attr->getAttributeAsInt("PolygonOffsetFactor", outMaterial.PolygonOffsetFactor);\r
-       outMaterial.PolygonOffsetDirection = (video::E_POLYGON_OFFSET)attr->getAttributeAsEnumeration("PolygonOffsetDirection", video::PolygonOffsetDirectionNames, outMaterial.PolygonOffsetDirection);\r
-       outMaterial.PolygonOffsetDepthBias = attr->getAttributeAsFloat("PolygonOffsetDepthBias", outMaterial.PolygonOffsetDepthBias);\r
-       outMaterial.PolygonOffsetSlopeScale = attr->getAttributeAsFloat("PolygonOffsetSlopeScale", outMaterial.PolygonOffsetSlopeScale);\r
-\r
-       prefix = "BilinearFilter";\r
-       if (attr->existsAttribute(prefix.c_str())) // legacy\r
-               outMaterial.setFlag(EMF_BILINEAR_FILTER, attr->getAttributeAsBool(prefix.c_str()));\r
-       else\r
-               for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-                       outMaterial.TextureLayer[i].BilinearFilter = attr->getAttributeAsBool((prefix+core::stringc(i+1)).c_str(), outMaterial.TextureLayer[i].BilinearFilter);\r
-\r
-       prefix = "TrilinearFilter";\r
-       if (attr->existsAttribute(prefix.c_str())) // legacy\r
-               outMaterial.setFlag(EMF_TRILINEAR_FILTER, attr->getAttributeAsBool(prefix.c_str()));\r
-       else\r
-               for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-                       outMaterial.TextureLayer[i].TrilinearFilter = attr->getAttributeAsBool((prefix+core::stringc(i+1)).c_str(), outMaterial.TextureLayer[i].TrilinearFilter);\r
-\r
-       prefix = "AnisotropicFilter";\r
-       if (attr->existsAttribute(prefix.c_str())) // legacy\r
-               outMaterial.setFlag(EMF_ANISOTROPIC_FILTER, attr->getAttributeAsBool(prefix.c_str()));\r
-       else\r
-               for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-                       outMaterial.TextureLayer[i].AnisotropicFilter = attr->getAttributeAsInt((prefix+core::stringc(i+1)).c_str(), outMaterial.TextureLayer[i].AnisotropicFilter);\r
-\r
-       prefix = "TextureWrap";\r
-       if (attr->existsAttribute(prefix.c_str())) // legacy\r
-       {\r
-               for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-               {\r
-                       outMaterial.TextureLayer[i].TextureWrapU = (E_TEXTURE_CLAMP)attr->getAttributeAsEnumeration((prefix+core::stringc(i+1)).c_str(), aTextureClampNames);\r
-                       outMaterial.TextureLayer[i].TextureWrapV = outMaterial.TextureLayer[i].TextureWrapU;\r
-                       outMaterial.TextureLayer[i].TextureWrapW = outMaterial.TextureLayer[i].TextureWrapW;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-               {\r
-                       outMaterial.TextureLayer[i].TextureWrapU = (E_TEXTURE_CLAMP)attr->getAttributeAsEnumeration((prefix+"U"+core::stringc(i+1)).c_str(), aTextureClampNames, outMaterial.TextureLayer[i].TextureWrapU);\r
-                       outMaterial.TextureLayer[i].TextureWrapV = (E_TEXTURE_CLAMP)attr->getAttributeAsEnumeration((prefix+"V"+core::stringc(i+1)).c_str(), aTextureClampNames, outMaterial.TextureLayer[i].TextureWrapV);\r
-                       outMaterial.TextureLayer[i].TextureWrapW = (E_TEXTURE_CLAMP)attr->getAttributeAsEnumeration((prefix+"W"+core::stringc(i+1)).c_str(), aTextureClampNames, outMaterial.TextureLayer[i].TextureWrapW);\r
-               }\r
-       }\r
-\r
-       prefix="LODBias";\r
-       for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)\r
-               outMaterial.TextureLayer[i].LODBias = attr->getAttributeAsInt((prefix+core::stringc(i+1)).c_str(), outMaterial.TextureLayer[i].LODBias);\r
-}\r
-\r
 \r
 //! Returns driver and operating system specific data about the IVideoDriver.\r
 const SExposedVideoData& CNullDriver::getExposedVideoData()\r