| Irrlicht 3D Engine |

IDynamicMeshBuffer.h
Go to the documentation of this file.

    00001 // Copyright (C) 2008-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 __I_DYNAMIC_MESH_BUFFER_H_INCLUDED__
    00006 #define __I_DYNAMIC_MESH_BUFFER_H_INCLUDED__
    00007
    00008 #include "IMeshBuffer.h"
    00009 #include "IVertexBuffer.h"
    00010 #include "IIndexBuffer.h"
    00011
    00012 namespace irr
    00013 {
    00014 namespace scene
    00015 {
    00016
    00018     class IDynamicMeshBuffer : public IMeshBuffer
    00019     {
    00020     public:
    00021         virtual IVertexBuffer &getVertexBuffer() const =0;
    00022         virtual IIndexBuffer &getIndexBuffer() const =0;
    00023
    00024         virtual void setVertexBuffer(IVertexBuffer *vertexBuffer) =0;
    00025         virtual void setIndexBuffer(IIndexBuffer *indexBuffer) =0;
    00026
    00028
    00029         virtual video::SMaterial& getMaterial() =0;
    00030
    00032
    00033         virtual const video::SMaterial& getMaterial() const =0;
    00034
    00036
    00037         virtual const core::aabbox3df& getBoundingBox() const =0;
    00038
    00040
    00042         virtual void setBoundingBox(const core::aabbox3df& box) =0;
    00043
    00045         virtual void recalculateBoundingBox() =0;
    00046
    00048
    00053         virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices)
    00054         {
    00055
    00056         }
    00057
    00059
    00061         virtual void append(const IMeshBuffer* const other)
    00062         {
    00063
    00064         }
    00065
    00066         // ------------------- To be removed? -------------------  //
    00067
    00069         virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const
    00070         {
    00071             return getVertexBuffer().getHardwareMappingHint();
    00072         }
    00073
    00075         virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const
    00076         {
    00077             return getIndexBuffer().getHardwareMappingHint();
    00078         }
    00079
    00081         virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX )
    00082         {
    00083             if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
    00084                 getVertexBuffer().setHardwareMappingHint(NewMappingHint);
    00085             if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
    00086                 getIndexBuffer().setHardwareMappingHint(NewMappingHint);
    00087         }
    00088
    00090         virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX)
    00091         {
    00092             if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
    00093                 getVertexBuffer().setDirty();
    00094             if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
    00095                 getIndexBuffer().setDirty();
    00096         }
    00097
    00098         virtual u32 getChangedID_Vertex() const
    00099         {
    00100             return getVertexBuffer().getChangedID();
    00101         }
    00102
    00103         virtual u32 getChangedID_Index() const
    00104         {
    00105             return getIndexBuffer().getChangedID();
    00106         }
    00107
    00108         // ------------------- Old interface -------------------  //
    00109
    00111
    00112         virtual video::E_VERTEX_TYPE getVertexType() const
    00113         {
    00114             return getVertexBuffer().getType();
    00115         }
    00116
    00118
    00120         virtual const void* getVertices() const
    00121         {
    00122             return getVertexBuffer().getData();
    00123         }
    00124
    00126
    00128         virtual void* getVertices()
    00129         {
    00130             return getVertexBuffer().getData();
    00131         }
    00132
    00134
    00135         virtual u32 getVertexCount() const
    00136         {
    00137             return getVertexBuffer().size();
    00138         }
    00139
    00141
    00142         virtual video::E_INDEX_TYPE getIndexType() const
    00143         {
    00144             return getIndexBuffer().getType();
    00145         }
    00146
    00148
    00149         virtual const u16* getIndices() const
    00150         {
    00151             return (u16*)getIndexBuffer().getData();
    00152         }
    00153
    00155
    00156         virtual u16* getIndices()
    00157         {
    00158             return (u16*)getIndexBuffer().getData();
    00159         }
    00160
    00162
    00163         virtual u32 getIndexCount() const
    00164         {
    00165             return getIndexBuffer().size();
    00166         }
    00167
    00169         virtual const core::vector3df& getPosition(u32 i) const
    00170         {
    00171             return getVertexBuffer()[i].Pos;
    00172         }
    00173
    00175         virtual core::vector3df& getPosition(u32 i)
    00176         {
    00177             return getVertexBuffer()[i].Pos;
    00178         }
    00179
    00181         virtual const core::vector2df& getTCoords(u32 i) const
    00182         {
    00183             return getVertexBuffer()[i].TCoords;
    00184         }
    00185
    00187         virtual core::vector2df& getTCoords(u32 i)
    00188         {
    00189             return getVertexBuffer()[i].TCoords;
    00190         }
    00191
    00193         virtual const core::vector3df& getNormal(u32 i) const
    00194         {
    00195             return getVertexBuffer()[i].Normal;
    00196         }
    00197
    00199         virtual core::vector3df& getNormal(u32 i)
    00200         {
    00201             return getVertexBuffer()[i].Normal;
    00202         }
    00203     };
    00204
    00205
    00206 } // end namespace scene
    00207 } // end namespace irr
    00208
    00209 #endif
    00210
    00211