1 // Copyright (C) 2008-2012 Nikolaus Gebhardt
\r
2 // This file is part of the "Irrlicht Engine".
\r
3 // For conditions of distribution and use, see copyright notice in irrlicht.h
\r
5 #ifndef __C_DYNAMIC_MESHBUFFER_H_INCLUDED__
\r
6 #define __C_DYNAMIC_MESHBUFFER_H_INCLUDED__
\r
8 #include "IDynamicMeshBuffer.h"
\r
10 #include "CVertexBuffer.h"
\r
11 #include "CIndexBuffer.h"
\r
18 class CDynamicMeshBuffer: public IDynamicMeshBuffer
\r
22 CDynamicMeshBuffer(video::E_VERTEX_TYPE vertexType, video::E_INDEX_TYPE indexType)
\r
23 : PrimitiveType(EPT_TRIANGLES)
\r
25 VertexBuffer=new CVertexBuffer(vertexType);
\r
26 IndexBuffer=new CIndexBuffer(indexType);
\r
30 virtual ~CDynamicMeshBuffer()
\r
33 VertexBuffer->drop();
\r
35 IndexBuffer->drop();
\r
38 virtual IVertexBuffer& getVertexBuffer() const _IRR_OVERRIDE_
\r
40 return *VertexBuffer;
\r
43 virtual IIndexBuffer& getIndexBuffer() const _IRR_OVERRIDE_
\r
45 return *IndexBuffer;
\r
48 virtual void setVertexBuffer(IVertexBuffer *newVertexBuffer) _IRR_OVERRIDE_
\r
50 if (newVertexBuffer)
\r
51 newVertexBuffer->grab();
\r
53 VertexBuffer->drop();
\r
55 VertexBuffer=newVertexBuffer;
\r
58 virtual void setIndexBuffer(IIndexBuffer *newIndexBuffer) _IRR_OVERRIDE_
\r
61 newIndexBuffer->grab();
\r
63 IndexBuffer->drop();
\r
65 IndexBuffer=newIndexBuffer;
\r
68 //! Get Material of this buffer.
\r
69 virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_
\r
74 //! Get Material of this buffer.
\r
75 virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_
\r
80 //! Get bounding box
\r
81 virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_
\r
86 //! Set bounding box
\r
87 virtual void setBoundingBox( const core::aabbox3df& box) _IRR_OVERRIDE_
\r
92 //! Recalculate bounding box
\r
93 virtual void recalculateBoundingBox() _IRR_OVERRIDE_
\r
95 if (!getVertexBuffer().size())
\r
96 BoundingBox.reset(0,0,0);
\r
99 BoundingBox.reset(getVertexBuffer()[0].Pos);
\r
100 for (u32 i=1; i<getVertexBuffer().size(); ++i)
\r
101 BoundingBox.addInternalPoint(getVertexBuffer()[i].Pos);
\r
105 //! Describe what kind of primitive geometry is used by the meshbuffer
\r
106 virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) _IRR_OVERRIDE_
\r
108 PrimitiveType = type;
\r
111 //! Get the kind of primitive geometry which is used by the meshbuffer
\r
112 virtual E_PRIMITIVE_TYPE getPrimitiveType() const _IRR_OVERRIDE_
\r
114 return PrimitiveType;
\r
117 video::SMaterial Material;
\r
118 core::aabbox3d<f32> BoundingBox;
\r
119 //! Primitive type used for rendering (triangles, lines, ...)
\r
120 E_PRIMITIVE_TYPE PrimitiveType;
\r
122 CDynamicMeshBuffer(const CDynamicMeshBuffer&); // = delete in c++11, prevent copying
\r
124 IVertexBuffer *VertexBuffer;
\r
125 IIndexBuffer *IndexBuffer;
\r
129 } // end namespace scene
\r
130 } // end namespace irr
\r