Home | Namespaces | Hierarchy | Alphabetical List | Class list | Files | Namespace Members | Class members | File members | Tutorials

CDynamicMeshBuffer.h

Go to the documentation of this file.
00001 // Copyright (C) 2008-2010 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 __C_DYNAMIC_MESHBUFFER_H_INCLUDED__
00006 #define __C_DYNAMIC_MESHBUFFER_H_INCLUDED__
00007 
00008 #include "IDynamicMeshBuffer.h"
00009 
00010 #include "CVertexBuffer.h"
00011 #include "CIndexBuffer.h"
00012 
00013 namespace irr
00014 {
00015 namespace scene
00016 {
00017 
00018         class CDynamicMeshBuffer: public IDynamicMeshBuffer
00019         {
00020         public:
00022                 CDynamicMeshBuffer(video::E_VERTEX_TYPE vertexType, video::E_INDEX_TYPE indexType)
00023                 {
00024                         VertexBuffer=new CVertexBuffer(vertexType);
00025                         IndexBuffer=new CIndexBuffer(indexType);
00026                 }
00027 
00029                 virtual ~CDynamicMeshBuffer()
00030                 {
00031                         if (VertexBuffer)
00032                                 VertexBuffer->drop();
00033                         if (IndexBuffer)
00034                                 IndexBuffer->drop();
00035                 }
00036 
00037                 virtual IVertexBuffer& getVertexBuffer() const
00038                 {
00039                         return *VertexBuffer;
00040                 }
00041 
00042                 virtual IIndexBuffer& getIndexBuffer() const
00043                 {
00044                         return *IndexBuffer;
00045                 }
00046 
00047                 virtual void setVertexBuffer(IVertexBuffer *newVertexBuffer)
00048                 {
00049                         if (newVertexBuffer)
00050                                 newVertexBuffer->grab();
00051                         if (VertexBuffer)
00052                                 VertexBuffer->drop();
00053 
00054                         VertexBuffer=newVertexBuffer;
00055                 }
00056 
00057                 virtual void setIndexBuffer(IIndexBuffer *newIndexBuffer)
00058                 {
00059                         if (newIndexBuffer)
00060                                 newIndexBuffer->grab();
00061                         if (IndexBuffer)
00062                                 IndexBuffer->drop();
00063 
00064                         IndexBuffer=newIndexBuffer;
00065                 }
00066 
00068                 virtual const video::SMaterial& getMaterial() const
00069                 {
00070                         return Material;
00071                 }
00072 
00074                 virtual video::SMaterial& getMaterial()
00075                 {
00076                         return Material;
00077                 }
00078 
00080                 virtual const core::aabbox3d<f32>& getBoundingBox() const
00081                 {
00082                         return BoundingBox;
00083                 }
00084 
00086                 virtual void setBoundingBox( const core::aabbox3df& box)
00087                 {
00088                         BoundingBox = box;
00089                 }
00090 
00092                 virtual void recalculateBoundingBox()
00093                 {
00094                         if (!getVertexBuffer().size())
00095                                 BoundingBox.reset(0,0,0);
00096                         else
00097                         {
00098                                 BoundingBox.reset(getVertexBuffer()[0].Pos);
00099                                 for (u32 i=1; i<getVertexBuffer().size(); ++i)
00100                                         BoundingBox.addInternalPoint(getVertexBuffer()[i].Pos);
00101                         }
00102                 }
00103 
00104                 video::SMaterial Material;
00105                 core::aabbox3d<f32> BoundingBox;
00106         private:
00107                 IVertexBuffer *VertexBuffer;
00108                 IIndexBuffer *IndexBuffer;
00109         };
00110 
00111 
00112 } // end namespace scene
00113 } // end namespace irr
00114 
00115 #endif
00116 

The Irrlicht Engine
The Irrlicht Engine Documentation © 2003-2010 by Nikolaus Gebhardt. Generated on Sun Oct 24 12:41:56 2010 by Doxygen (1.6.2)