Irrlicht 3D Engine: SMesh.h Source File

| Irrlicht 3D Engine |

SMesh.h
Go to the documentation of this file.

    00001 // Copyright (C) 2002-2012 Nikolaus Gebhardt
    00002 // This file is part of the "Irrlicht Engine".
    00003 // For conditions of distribution and use, see copyright notice in irrlicht.h
    00004
    00005 #ifndef __S_MESH_H_INCLUDED__
    00006 #define __S_MESH_H_INCLUDED__
    00007
    00008 #include "IMesh.h"
    00009 #include "IMeshBuffer.h"
    00010 #include "aabbox3d.h"
    00011 #include "irrArray.h"
    00012
    00013 namespace irr
    00014 {
    00015 namespace scene
    00016 {
    00018     struct SMesh : public IMesh
    00019     {
    00021         SMesh()
    00022         {
    00023             #ifdef _DEBUG
    00024             setDebugName("SMesh");
    00025             #endif
    00026         }
    00027
    00029         virtual ~SMesh()
    00030         {
    00031             // drop buffers
    00032             for (u32 i=0; i<MeshBuffers.size(); ++i)
    00033                 MeshBuffers[i]->drop();
    00034         }
    00035
    00037         virtual void clear()
    00038         {
    00039             for (u32 i=0; i<MeshBuffers.size(); ++i)
    00040                 MeshBuffers[i]->drop();
    00041             MeshBuffers.clear();
    00042             BoundingBox.reset ( 0.f, 0.f, 0.f );
    00043         }
    00044
    00045
    00047         virtual u32 getMeshBufferCount() const
    00048         {
    00049             return MeshBuffers.size();
    00050         }
    00051
    00053         virtual IMeshBuffer* getMeshBuffer(u32 nr) const
    00054         {
    00055             return MeshBuffers[nr];
    00056         }
    00057
    00059
    00060         virtual IMeshBuffer* getMeshBuffer( const video::SMaterial & material) const
    00061         {
    00062             for (s32 i = (s32)MeshBuffers.size()-1; i >= 0; --i)
    00063             {
    00064                 if ( material == MeshBuffers[i]->getMaterial())
    00065                     return MeshBuffers[i];
    00066             }
    00067
    00068             return 0;
    00069         }
    00070
    00072         virtual const core::aabbox3d<f32>& getBoundingBox() const
    00073         {
    00074             return BoundingBox;
    00075         }
    00076
    00078         virtual void setBoundingBox( const core::aabbox3df& box)
    00079         {
    00080             BoundingBox = box;
    00081         }
    00082
    00084         void recalculateBoundingBox()
    00085         {
    00086             if (MeshBuffers.size())
    00087             {
    00088                 BoundingBox = MeshBuffers[0]->getBoundingBox();
    00089                 for (u32 i=1; i<MeshBuffers.size(); ++i)
    00090                     BoundingBox.addInternalBox(MeshBuffers[i]->getBoundingBox());
    00091             }
    00092             else
    00093                 BoundingBox.reset(0.0f, 0.0f, 0.0f);
    00094         }
    00095
    00097
    00098         void addMeshBuffer(IMeshBuffer* buf)
    00099         {
    00100             if (buf)
    00101             {
    00102                 buf->grab();
    00103                 MeshBuffers.push_back(buf);
    00104             }
    00105         }
    00106
    00108         virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue)
    00109         {
    00110             for (u32 i=0; i<MeshBuffers.size(); ++i)
    00111                 MeshBuffers[i]->getMaterial().setFlag(flag, newvalue);
    00112         }
    00113
    00115         virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX )
    00116         {
    00117             for (u32 i=0; i<MeshBuffers.size(); ++i)
    00118                 MeshBuffers[i]->setHardwareMappingHint(newMappingHint, buffer);
    00119         }
    00120
    00122         virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX)
    00123         {
    00124             for (u32 i=0; i<MeshBuffers.size(); ++i)
    00125                 MeshBuffers[i]->setDirty(buffer);
    00126         }
    00127
    00129         core::array<IMeshBuffer*> MeshBuffers;
    00130
    00132         core::aabbox3d<f32> BoundingBox;
    00133     };
    00134
    00135
    00136 } // end namespace scene
    00137 } // end namespace irr
    00138
    00139 #endif
    00140