Irrlicht 3D Engine
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
CMeshBuffer.h
Go to the documentation of this file.
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 __T_MESH_BUFFER_H_INCLUDED__
6
#define __T_MESH_BUFFER_H_INCLUDED__
7
8
#include "
irrArray.h
"
9
#include "
IMeshBuffer.h
"
10
11
namespace
irr
12
{
13
namespace
scene
14
{
16
template
<
class
T>
17
class
CMeshBuffer
:
public
IMeshBuffer
18
{
19
public
:
21
CMeshBuffer
():
ChangedID_Vertex
(1),
ChangedID_Index
(1),
MappingHint_Vertex
(
EHM_NEVER
),
MappingHint_Index
(
EHM_NEVER
)
22
{
23
#ifdef _DEBUG
24
setDebugName
(
"SMeshBuffer"
);
25
#endif
26
}
27
28
30
31
virtual
const
video::SMaterial
&
getMaterial
()
const
32
{
33
return
Material
;
34
}
35
36
38
39
virtual
video::SMaterial
&
getMaterial
()
40
{
41
return
Material
;
42
}
43
44
46
47
virtual
const
void
*
getVertices
()
const
48
{
49
return
Vertices
.
const_pointer
();
50
}
51
52
54
55
virtual
void
*
getVertices
()
56
{
57
return
Vertices
.
pointer
();
58
}
59
60
62
63
virtual
u32
getVertexCount
()
const
64
{
65
return
Vertices
.
size
();
66
}
67
69
70
virtual
video::E_INDEX_TYPE
getIndexType
()
const
71
{
72
return
video::EIT_16BIT
;
73
}
74
76
77
virtual
const
u16
*
getIndices
()
const
78
{
79
return
Indices
.
const_pointer
();
80
}
81
82
84
85
virtual
u16
*
getIndices
()
86
{
87
return
Indices
.
pointer
();
88
}
89
90
92
93
virtual
u32
getIndexCount
()
const
94
{
95
return
Indices
.
size
();
96
}
97
98
100
101
virtual
const
core::aabbox3d<f32>
&
getBoundingBox
()
const
102
{
103
return
BoundingBox
;
104
}
105
106
108
109
110
virtual
void
setBoundingBox
(
const
core::aabbox3df
& box)
111
{
112
BoundingBox
= box;
113
}
114
115
117
118
virtual
void
recalculateBoundingBox
()
119
{
120
if
(
Vertices
.
empty
())
121
BoundingBox
.
reset
(0,0,0);
122
else
123
{
124
BoundingBox
.
reset
(
Vertices
[0].Pos);
125
for
(
u32
i=1; i<
Vertices
.
size
(); ++i)
126
BoundingBox
.
addInternalPoint
(
Vertices
[i].Pos);
127
}
128
}
129
130
132
133
virtual
video::E_VERTEX_TYPE
getVertexType
()
const
134
{
135
return
T().getType();
136
}
137
139
virtual
const
core::vector3df
&
getPosition
(
u32
i)
const
140
{
141
return
Vertices
[i].Pos;
142
}
143
145
virtual
core::vector3df
&
getPosition
(
u32
i)
146
{
147
return
Vertices
[i].Pos;
148
}
149
151
virtual
const
core::vector3df
&
getNormal
(
u32
i)
const
152
{
153
return
Vertices
[i].Normal;
154
}
155
157
virtual
core::vector3df
&
getNormal
(
u32
i)
158
{
159
return
Vertices
[i].Normal;
160
}
161
163
virtual
const
core::vector2df
&
getTCoords
(
u32
i)
const
164
{
165
return
Vertices
[i].TCoords;
166
}
167
169
virtual
core::vector2df
&
getTCoords
(
u32
i)
170
{
171
return
Vertices
[i].TCoords;
172
}
173
174
176
180
virtual
void
append
(
const
void
*
const
vertices,
u32
numVertices,
const
u16
*
const
indices,
u32
numIndices)
181
{
182
if
(vertices ==
getVertices
())
183
return
;
184
185
const
u32
vertexCount =
getVertexCount
();
186
u32
i;
187
188
Vertices
.
reallocate
(vertexCount+numVertices);
189
for
(i=0; i<numVertices; ++i)
190
{
191
Vertices
.
push_back
(reinterpret_cast<const T*>(vertices)[i]);
192
BoundingBox
.
addInternalPoint
(reinterpret_cast<const T*>(vertices)[i].Pos);
193
}
194
195
Indices
.
reallocate
(
getIndexCount
()+numIndices);
196
for
(i=0; i<numIndices; ++i)
197
{
198
Indices
.
push_back
(indices[i]+vertexCount);
199
}
200
}
201
202
204
209
virtual
void
append
(
const
IMeshBuffer
*
const
other)
210
{
211
/*
212
if (this==other)
213
return;
214
215
const u32 vertexCount = getVertexCount();
216
u32 i;
217
218
Vertices.reallocate(vertexCount+other->getVertexCount());
219
for (i=0; i<other->getVertexCount(); ++i)
220
{
221
Vertices.push_back(reinterpret_cast<const T*>(other->getVertices())[i]);
222
}
223
224
Indices.reallocate(getIndexCount()+other->getIndexCount());
225
for (i=0; i<other->getIndexCount(); ++i)
226
{
227
Indices.push_back(other->getIndices()[i]+vertexCount);
228
}
229
BoundingBox.addInternalBox(other->getBoundingBox());
230
*/
231
}
232
233
235
virtual
E_HARDWARE_MAPPING
getHardwareMappingHint_Vertex
()
const
236
{
237
return
MappingHint_Vertex
;
238
}
239
241
virtual
E_HARDWARE_MAPPING
getHardwareMappingHint_Index
()
const
242
{
243
return
MappingHint_Index
;
244
}
245
247
virtual
void
setHardwareMappingHint
(
E_HARDWARE_MAPPING
NewMappingHint,
E_BUFFER_TYPE
Buffer=
EBT_VERTEX_AND_INDEX
)
248
{
249
if
(Buffer==
EBT_VERTEX_AND_INDEX
|| Buffer==
EBT_VERTEX
)
250
MappingHint_Vertex
=NewMappingHint;
251
if
(Buffer==
EBT_VERTEX_AND_INDEX
|| Buffer==
EBT_INDEX
)
252
MappingHint_Index
=NewMappingHint;
253
}
254
255
257
virtual
void
setDirty
(
E_BUFFER_TYPE
Buffer=
EBT_VERTEX_AND_INDEX
)
258
{
259
if
(Buffer==
EBT_VERTEX_AND_INDEX
||Buffer==
EBT_VERTEX
)
260
++
ChangedID_Vertex
;
261
if
(Buffer==
EBT_VERTEX_AND_INDEX
|| Buffer==
EBT_INDEX
)
262
++
ChangedID_Index
;
263
}
264
266
267
virtual
u32
getChangedID_Vertex
()
const
{
return
ChangedID_Vertex
;}
268
270
271
virtual
u32
getChangedID_Index
()
const
{
return
ChangedID_Index
;}
272
273
u32
ChangedID_Vertex
;
274
u32
ChangedID_Index
;
275
277
E_HARDWARE_MAPPING
MappingHint_Vertex
;
278
E_HARDWARE_MAPPING
MappingHint_Index
;
279
281
video::SMaterial
Material
;
283
core::array<T>
Vertices
;
285
core::array<u16>
Indices
;
287
core::aabbox3d<f32>
BoundingBox
;
288
};
289
291
typedef
CMeshBuffer<video::S3DVertex>
SMeshBuffer
;
293
typedef
CMeshBuffer<video::S3DVertex2TCoords>
SMeshBufferLightMap
;
295
typedef
CMeshBuffer<video::S3DVertexTangents>
SMeshBufferTangents
;
296
}
// end namespace scene
297
}
// end namespace irr
298
299
#endif
300
301
Irrlicht Engine
Documentation © 2003-2012 by Nikolaus Gebhardt. Generated on Sun Apr 21 2019 20:57:27 for Irrlicht 3D Engine by
Doxygen
1.8.1.2