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