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 __I_MESH_BUFFER_H_INCLUDED__ 00006 #define __I_MESH_BUFFER_H_INCLUDED__ 00007 00008 #include "IReferenceCounted.h" 00009 #include "SMaterial.h" 00010 #include "aabbox3d.h" 00011 #include "S3DVertex.h" 00012 #include "SVertexIndex.h" 00013 #include "EHardwareBufferFlags.h" 00014 #include "EPrimitiveTypes.h" 00015 00016 namespace irr 00017 { 00018 namespace scene 00019 { 00021 00039 class IMeshBuffer : public virtual IReferenceCounted 00040 { 00041 public: 00042 00044 00045 virtual video::SMaterial& getMaterial() = 0; 00046 00048 00049 virtual const video::SMaterial& getMaterial() const = 0; 00050 00052 00053 virtual video::E_VERTEX_TYPE getVertexType() const = 0; 00054 00056 00058 virtual const void* getVertices() const = 0; 00059 00061 00063 virtual void* getVertices() = 0; 00064 00066 00067 virtual u32 getVertexCount() const = 0; 00068 00070 00071 virtual video::E_INDEX_TYPE getIndexType() const =0; 00072 00074 00075 virtual const u16* getIndices() const = 0; 00076 00078 00079 virtual u16* getIndices() = 0; 00080 00082 00083 virtual u32 getIndexCount() const = 0; 00084 00086 00087 virtual const core::aabbox3df& getBoundingBox() const = 0; 00088 00090 00092 virtual void setBoundingBox(const core::aabbox3df& box) = 0; 00093 00095 virtual void recalculateBoundingBox() = 0; 00096 00098 virtual const core::vector3df& getPosition(u32 i) const = 0; 00099 00101 virtual core::vector3df& getPosition(u32 i) = 0; 00102 00104 virtual const core::vector3df& getNormal(u32 i) const = 0; 00105 00107 virtual core::vector3df& getNormal(u32 i) = 0; 00108 00110 virtual const core::vector2df& getTCoords(u32 i) const = 0; 00111 00113 virtual core::vector2df& getTCoords(u32 i) = 0; 00114 00116 00121 virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) = 0; 00122 00124 00126 virtual void append(const IMeshBuffer* const other) = 0; 00127 00129 virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const = 0; 00130 00132 virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const = 0; 00133 00135 virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) = 0; 00136 00138 virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0; 00139 00141 00142 virtual u32 getChangedID_Vertex() const = 0; 00143 00145 00146 virtual u32 getChangedID_Index() const = 0; 00147 }; 00148 00149 } // end namespace scene 00150 } // end namespace irr 00151 00152 #endif 00153 00154