git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6000 dfc29bdd-3216-0410-991c-e03cc46cb475
		
			
				
	
	
		
			134 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (C) 2008-2012 Nikolaus Gebhardt
 | |
| // This file is part of the "Irrlicht Engine".
 | |
| // For conditions of distribution and use, see copyright notice in irrlicht.h
 | |
| 
 | |
| #ifndef __C_DYNAMIC_MESHBUFFER_H_INCLUDED__
 | |
| #define __C_DYNAMIC_MESHBUFFER_H_INCLUDED__
 | |
| 
 | |
| #include "IDynamicMeshBuffer.h"
 | |
| 
 | |
| #include "CVertexBuffer.h"
 | |
| #include "CIndexBuffer.h"
 | |
| 
 | |
| namespace irr
 | |
| {
 | |
| namespace scene
 | |
| {
 | |
| 
 | |
| 	class CDynamicMeshBuffer: public IDynamicMeshBuffer
 | |
| 	{
 | |
| 	public:
 | |
| 		//! constructor
 | |
| 		CDynamicMeshBuffer(video::E_VERTEX_TYPE vertexType, video::E_INDEX_TYPE indexType)
 | |
| 		: PrimitiveType(EPT_TRIANGLES)
 | |
| 		{
 | |
| 			VertexBuffer=new CVertexBuffer(vertexType);
 | |
| 			IndexBuffer=new CIndexBuffer(indexType);
 | |
| 		}
 | |
| 
 | |
| 		//! destructor
 | |
| 		virtual ~CDynamicMeshBuffer()
 | |
| 		{
 | |
| 			if (VertexBuffer)
 | |
| 				VertexBuffer->drop();
 | |
| 			if (IndexBuffer)
 | |
| 				IndexBuffer->drop();
 | |
| 		}
 | |
| 
 | |
| 		virtual IVertexBuffer& getVertexBuffer() const _IRR_OVERRIDE_
 | |
| 		{
 | |
| 			return *VertexBuffer;
 | |
| 		}
 | |
| 
 | |
| 		virtual IIndexBuffer& getIndexBuffer() const _IRR_OVERRIDE_
 | |
| 		{
 | |
| 			return *IndexBuffer;
 | |
| 		}
 | |
| 
 | |
| 		virtual void setVertexBuffer(IVertexBuffer *newVertexBuffer) _IRR_OVERRIDE_
 | |
| 		{
 | |
| 			if (newVertexBuffer)
 | |
| 				newVertexBuffer->grab();
 | |
| 			if (VertexBuffer)
 | |
| 				VertexBuffer->drop();
 | |
| 
 | |
| 			VertexBuffer=newVertexBuffer;
 | |
| 		}
 | |
| 
 | |
| 		virtual void setIndexBuffer(IIndexBuffer *newIndexBuffer) _IRR_OVERRIDE_
 | |
| 		{
 | |
| 			if (newIndexBuffer)
 | |
| 				newIndexBuffer->grab();
 | |
| 			if (IndexBuffer)
 | |
| 				IndexBuffer->drop();
 | |
| 
 | |
| 			IndexBuffer=newIndexBuffer;
 | |
| 		}
 | |
| 
 | |
| 		//! Get Material of this buffer.
 | |
| 		virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_
 | |
| 		{
 | |
| 			return Material;
 | |
| 		}
 | |
| 
 | |
| 		//! Get Material of this buffer.
 | |
| 		virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_
 | |
| 		{
 | |
| 			return Material;
 | |
| 		}
 | |
| 
 | |
| 		//! Get bounding box
 | |
| 		virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_
 | |
| 		{
 | |
| 			return BoundingBox;
 | |
| 		}
 | |
| 
 | |
| 		//! Set bounding box
 | |
| 		virtual void setBoundingBox( const core::aabbox3df& box) _IRR_OVERRIDE_
 | |
| 		{
 | |
| 			BoundingBox = box;
 | |
| 		}
 | |
| 
 | |
| 		//! Recalculate bounding box
 | |
| 		virtual void recalculateBoundingBox() _IRR_OVERRIDE_
 | |
| 		{
 | |
| 			if (!getVertexBuffer().size())
 | |
| 				BoundingBox.reset(0,0,0);
 | |
| 			else
 | |
| 			{
 | |
| 				BoundingBox.reset(getVertexBuffer()[0].Pos);
 | |
| 				for (u32 i=1; i<getVertexBuffer().size(); ++i)
 | |
| 					BoundingBox.addInternalPoint(getVertexBuffer()[i].Pos);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		//! Describe what kind of primitive geometry is used by the meshbuffer
 | |
| 		virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) _IRR_OVERRIDE_
 | |
| 		{
 | |
| 			PrimitiveType = type;
 | |
| 		}
 | |
| 
 | |
| 		//! Get the kind of primitive geometry which is used by the meshbuffer
 | |
| 		virtual E_PRIMITIVE_TYPE getPrimitiveType() const _IRR_OVERRIDE_
 | |
| 		{
 | |
| 			return PrimitiveType;
 | |
| 		}
 | |
| 
 | |
| 		video::SMaterial Material;
 | |
| 		core::aabbox3d<f32> BoundingBox;
 | |
| 		//! Primitive type used for rendering (triangles, lines, ...)
 | |
| 		E_PRIMITIVE_TYPE PrimitiveType;
 | |
| 	private:
 | |
| 		CDynamicMeshBuffer(const CDynamicMeshBuffer&); // = delete in c++11, prevent copying
 | |
| 
 | |
| 		IVertexBuffer *VertexBuffer;
 | |
| 		IIndexBuffer *IndexBuffer;
 | |
| 	};
 | |
| 
 | |
| 
 | |
| } // end namespace scene
 | |
| } // end namespace irr
 | |
| 
 | |
| #endif
 | |
| 
 |