aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/others/irrlicht-1.8.1/include/SMesh.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/others/irrlicht-1.8.1/include/SMesh.h')
-rw-r--r--src/others/irrlicht-1.8.1/include/SMesh.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/src/others/irrlicht-1.8.1/include/SMesh.h b/src/others/irrlicht-1.8.1/include/SMesh.h
new file mode 100644
index 0000000..77a695d
--- /dev/null
+++ b/src/others/irrlicht-1.8.1/include/SMesh.h
@@ -0,0 +1,140 @@
1// Copyright (C) 2002-2012 Nikolaus Gebhardt
2// This file is part of the "Irrlicht Engine".
3// For conditions of distribution and use, see copyright notice in irrlicht.h
4
5#ifndef __S_MESH_H_INCLUDED__
6#define __S_MESH_H_INCLUDED__
7
8#include "IMesh.h"
9#include "IMeshBuffer.h"
10#include "aabbox3d.h"
11#include "irrArray.h"
12
13namespace irr
14{
15namespace scene
16{
17 //! Simple implementation of the IMesh interface.
18 struct SMesh : public IMesh
19 {
20 //! constructor
21 SMesh()
22 {
23 #ifdef _DEBUG
24 setDebugName("SMesh");
25 #endif
26 }
27
28 //! destructor
29 virtual ~SMesh()
30 {
31 // drop buffers
32 for (u32 i=0; i<MeshBuffers.size(); ++i)
33 MeshBuffers[i]->drop();
34 }
35
36 //! clean mesh
37 virtual void clear()
38 {
39 for (u32 i=0; i<MeshBuffers.size(); ++i)
40 MeshBuffers[i]->drop();
41 MeshBuffers.clear();
42 BoundingBox.reset ( 0.f, 0.f, 0.f );
43 }
44
45
46 //! returns amount of mesh buffers.
47 virtual u32 getMeshBufferCount() const
48 {
49 return MeshBuffers.size();
50 }
51
52 //! returns pointer to a mesh buffer
53 virtual IMeshBuffer* getMeshBuffer(u32 nr) const
54 {
55 return MeshBuffers[nr];
56 }
57
58 //! returns a meshbuffer which fits a material
59 /** reverse search */
60 virtual IMeshBuffer* getMeshBuffer( const video::SMaterial & material) const
61 {
62 for (s32 i = (s32)MeshBuffers.size()-1; i >= 0; --i)
63 {
64 if ( material == MeshBuffers[i]->getMaterial())
65 return MeshBuffers[i];
66 }
67
68 return 0;
69 }
70
71 //! returns an axis aligned bounding box
72 virtual const core::aabbox3d<f32>& getBoundingBox() const
73 {
74 return BoundingBox;
75 }
76
77 //! set user axis aligned bounding box
78 virtual void setBoundingBox( const core::aabbox3df& box)
79 {
80 BoundingBox = box;
81 }
82
83 //! recalculates the bounding box
84 void recalculateBoundingBox()
85 {
86 if (MeshBuffers.size())
87 {
88 BoundingBox = MeshBuffers[0]->getBoundingBox();
89 for (u32 i=1; i<MeshBuffers.size(); ++i)
90 BoundingBox.addInternalBox(MeshBuffers[i]->getBoundingBox());
91 }
92 else
93 BoundingBox.reset(0.0f, 0.0f, 0.0f);
94 }
95
96 //! adds a MeshBuffer
97 /** The bounding box is not updated automatically. */
98 void addMeshBuffer(IMeshBuffer* buf)
99 {
100 if (buf)
101 {
102 buf->grab();
103 MeshBuffers.push_back(buf);
104 }
105 }
106
107 //! sets a flag of all contained materials to a new value
108 virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue)
109 {
110 for (u32 i=0; i<MeshBuffers.size(); ++i)
111 MeshBuffers[i]->getMaterial().setFlag(flag, newvalue);
112 }
113
114 //! set the hardware mapping hint, for driver
115 virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX )
116 {
117 for (u32 i=0; i<MeshBuffers.size(); ++i)
118 MeshBuffers[i]->setHardwareMappingHint(newMappingHint, buffer);
119 }
120
121 //! flags the meshbuffer as changed, reloads hardware buffers
122 virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX)
123 {
124 for (u32 i=0; i<MeshBuffers.size(); ++i)
125 MeshBuffers[i]->setDirty(buffer);
126 }
127
128 //! The meshbuffers of this mesh
129 core::array<IMeshBuffer*> MeshBuffers;
130
131 //! The bounding box of this mesh
132 core::aabbox3d<f32> BoundingBox;
133 };
134
135
136} // end namespace scene
137} // end namespace irr
138
139#endif
140