5#ifndef __T_MESH_BUFFER_H_INCLUDED__
6#define __T_MESH_BUFFER_H_INCLUDED__
8#include "IMeshBuffer.h"
9#include "IVertexDescriptor.h"
34 VertexBufferCompatible =
false;
38 VertexBufferCompatible =
false;
54 for (
u32 i = 0; i < vbCount; ++i)
68 Transformation = meshBuffer.Transformation;
69 BoundingBoxNeedsRecalculated = meshBuffer.BoundingBoxNeedsRecalculated;
70 VertexBufferCompatible = meshBuffer.VertexBufferCompatible;
78 for (
u32 i = 0; i < vbCount; ++i)
106 bool vertexBufferCompatible =
true;
112 vertexBufferCompatible =
false;
117 VertexBufferCompatible = vertexBufferCompatible;
125 virtual bool addVertexBuffer(IVertexBuffer* vertexBuffer)
132 VertexBufferCompatible =
false;
134 vertexBuffer->grab();
143 virtual IVertexBuffer* getVertexBuffer(
u32 id = 0)
const
145 IVertexBuffer* vb = 0;
153 virtual u32 getVertexBufferCount()
const
158 virtual void removeVertexBuffer(
u32 id)
165 bool vertexBufferCompatible =
true;
173 vertexBufferCompatible =
false;
180 vertexBufferCompatible =
false;
183 VertexBufferCompatible = vertexBufferCompatible;
187 virtual bool setVertexBuffer(IVertexBuffer* vertexBuffer,
u32 id = 0)
193 vertexBuffer->grab();
197 bool vertexBufferCompatible =
true;
205 vertexBufferCompatible =
false;
212 vertexBufferCompatible =
false;
215 VertexBufferCompatible = vertexBufferCompatible;
220 virtual IIndexBuffer* getIndexBuffer()
const
225 virtual bool setIndexBuffer(IIndexBuffer* indexBuffer)
274 BoundingBoxNeedsRecalculated =
true;
284 BoundingBoxNeedsRecalculated =
false;
288 if (!attribute || attribute->getBufferID() >=
VertexBuffer.size() ||
VertexBuffer[attribute->getBufferID()]->getVertexCount() == 0)
292 const u32 bufferID = attribute->getBufferID();
295 offset += attribute->getOffset();
306 for(
u32 j = 1; j < vertexCount; ++j)
308 offset += vertexSize;
323 vertexBuffer->getVertexSize() ==
VertexDescriptor->getVertexSize(vertexBufferID) &&
324 vertexBuffer->getVertexSize() ==
VertexBuffer[vertexBufferID]->getVertexSize())
326 const u32 vertexCount = vertexBuffer->getVertexCount();
327 const u32 vertexSize = vertexBuffer->getVertexSize();
333 u8* offset =
static_cast<u8*
>(vertexBuffer->getVertices());
335 const u32 attributeOffset = attribute ? attribute->getOffset() : 0;
337 for (
u32 i = 0; i < vertexCount; ++i)
343 u8* positionBuffer = offset + attributeOffset;
350 offset += vertexSize;
356 const u32 indexCount = indexBuffer->getIndexCount();
360 for (
u32 i = 0; i < indexCount; ++i)
371 virtual void append(IMeshBuffer* meshBuffer)
373 if (!meshBuffer || meshBuffer ==
this)
376 append(meshBuffer->getVertexBuffer(0), 0, meshBuffer->getIndexBuffer());
378 const u32 bufferCount = meshBuffer->getVertexBufferCount();
381 append(meshBuffer->getVertexBuffer(i), i, 0);
432 return Transformation;
435 virtual void setUseForHardwareInstancing(
bool b)
437 UseForHardwareInstancing = b;
440 virtual bool useForHardwareInstancing()
442 return UseForHardwareInstancing;
bool drop() const
Drops the object. Decrements the reference counter by one.
Definition IReferenceCounted.h:126
void grab() const
Grabs the object. Increments the reference counter by one.
Definition IReferenceCounted.h:96
void setDebugName(const c8 *newName)
Sets the debug name of the object.
Definition IReferenceCounted.h:163
Axis aligned bounding box in 3d dimensional space.
Definition aabbox3d.h:22
Definition CIndexBuffer.h:15
Implementation of the IMeshBuffer interface.
Definition CMeshBuffer.h:18
virtual const core::aabbox3d< f32 > & getBoundingBox() const
Get the axis aligned bounding box.
Definition CMeshBuffer.h:259
virtual void append(IVertexBuffer *vertexBuffer, u32 vertexBufferID, IIndexBuffer *indexBuffer)
Append the vertices and indices to the current buffer.
Definition CMeshBuffer.h:320
virtual u32 getChangedID_Vertex(u32 id=0) const
Get the currently used ID for identification of changes.
Definition CMeshBuffer.h:418
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const
get the current hardware mapping hint
Definition CMeshBuffer.h:391
CMeshBuffer(video::IVertexDescriptor *vertexDescriptor, video::E_INDEX_TYPE type=video::EIT_16BIT)
Constructor.
Definition CMeshBuffer.h:21
virtual core::aabbox3d< f32 > & getBoundingBox()
Get the axis aligned bounding box.
Definition CMeshBuffer.h:266
virtual void append(IMeshBuffer *meshBuffer)
Append the meshbuffer to the current buffer.
Definition CMeshBuffer.h:371
virtual ~CMeshBuffer()
Destructor.
Definition CMeshBuffer.h:74
virtual video::SMaterial & getMaterial()
Get material of this meshbuffer.
Definition CMeshBuffer.h:247
virtual void boundingBoxNeedsRecalculated()
Call this after changing the positions of any vertex.
Definition CMeshBuffer.h:272
virtual void setHardwareMappingHint(E_HARDWARE_MAPPING pMappingHint, E_BUFFER_TYPE type=EBT_VERTEX_AND_INDEX, u32 id=0)
set the hardware mapping hint, for driver
Definition CMeshBuffer.h:397
virtual void recalculateBoundingBox()
Recalculate the bounding box.
Definition CMeshBuffer.h:279
virtual const video::SMaterial & getMaterial() const
Get material of this meshbuffer.
Definition CMeshBuffer.h:240
virtual u32 getChangedID_Index() const
Get the currently used ID for identification of changes.
Definition CMeshBuffer.h:425
virtual void setDirty(E_BUFFER_TYPE type=EBT_VERTEX_AND_INDEX, u32 id=0)
flags the mesh as changed, reloads hardware buffers
Definition CMeshBuffer.h:407
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex(u32 id=0) const
get the current hardware mapping hint
Definition CMeshBuffer.h:385
Definition CVertexBuffer.h:17
Definition IIndexBuffer.h:25
Struct for holding a mesh with a single material.
Definition IMeshBuffer.h:42
core::array< scene::IVertexBuffer * > VertexBuffer
Vertex buffer array.
Definition IMeshBuffer.h:186
video::IVertexDescriptor * VertexDescriptor
Vertex descriptor.
Definition IMeshBuffer.h:180
core::aabbox3d< f32 > BoundingBox
Bounding box.
Definition IMeshBuffer.h:201
scene::IIndexBuffer * IndexBuffer
Index buffer.
Definition IMeshBuffer.h:189
video::SMaterial Material
Material.
Definition IMeshBuffer.h:195
Definition IVertexBuffer.h:17
Definition IVertexDescriptor.h:70
Definition IVertexDescriptor.h:154
Struct for holding parameters for a material renderer.
Definition SMaterial.h:255
vector3d< f32 > vector3df
Typedef for a f32 3d vector.
Definition vector3d.h:445
CMatrix4< f32 > matrix4
Typedef for f32 matrix.
Definition matrix4.h:2241
All scene management can be found in this namespace: Mesh loading, special scene nodes like octrees a...
Definition CIndexBuffer.h:13
E_BUFFER_TYPE
Definition EHardwareBufferFlags.h:29
@ EBT_VERTEX_AND_INDEX
Change both vertex and index mapping to the same value.
Definition EHardwareBufferFlags.h:37
@ EBT_INDEX
Change the index mapping.
Definition EHardwareBufferFlags.h:35
@ EBT_VERTEX
Change the vertex mapping.
Definition EHardwareBufferFlags.h:33
E_HARDWARE_MAPPING
Definition EHardwareBufferFlags.h:14
@ EHM_NEVER
Don't store on the hardware.
Definition EHardwareBufferFlags.h:16
E_VERTEX_TYPE
Enumeration for all vertex types there are.
Definition S3DVertex.h:19
Everything in the Irrlicht Engine can be found in this namespace.
Definition Skylicht.h:33
unsigned int u32
32 bit unsigned variable.
Definition irrTypes.h:58
unsigned char u8
8 bit unsigned variable.
Definition irrTypes.h:18