Commit 78a68119 authored by hybrid's avatar hybrid

Made the scenenode parameter for selectors const.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1120 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 379b7570
...@@ -29,7 +29,7 @@ CMetaTriangleSelector::~CMetaTriangleSelector() ...@@ -29,7 +29,7 @@ CMetaTriangleSelector::~CMetaTriangleSelector()
s32 CMetaTriangleSelector::getTriangleCount() const s32 CMetaTriangleSelector::getTriangleCount() const
{ {
s32 count = 0; s32 count = 0;
for (s32 i=0; i<(s32)TriangleSelectors.size(); ++i) for (u32 i=0; i<TriangleSelectors.size(); ++i)
count += TriangleSelectors[i]->getTriangleCount(); count += TriangleSelectors[i]->getTriangleCount();
return count; return count;
...@@ -43,14 +43,14 @@ void CMetaTriangleSelector::getTriangles(core::triangle3df* triangles, s32 array ...@@ -43,14 +43,14 @@ void CMetaTriangleSelector::getTriangles(core::triangle3df* triangles, s32 array
{ {
s32 outWritten = 0; s32 outWritten = 0;
for (s32 i=0; i<(s32)TriangleSelectors.size(); ++i) for (u32 i=0; i<TriangleSelectors.size(); ++i)
{ {
s32 t = 0; s32 t = 0;
TriangleSelectors[i]->getTriangles(triangles + outWritten, arraySize - outWritten, t, transform); TriangleSelectors[i]->getTriangles(triangles + outWritten, arraySize - outWritten, t, transform);
outWritten += t; outWritten += t;
} }
outTriangleCount = outWritten; outTriangleCount = outWritten;
} }
...@@ -62,7 +62,7 @@ void CMetaTriangleSelector::getTriangles(core::triangle3df* triangles, s32 array ...@@ -62,7 +62,7 @@ void CMetaTriangleSelector::getTriangles(core::triangle3df* triangles, s32 array
{ {
s32 outWritten = 0; s32 outWritten = 0;
for (s32 i=0; i<(s32)TriangleSelectors.size(); ++i) for (u32 i=0; i<TriangleSelectors.size(); ++i)
{ {
s32 t = 0; s32 t = 0;
TriangleSelectors[i]->getTriangles(triangles + outWritten, arraySize - outWritten, t, TriangleSelectors[i]->getTriangles(triangles + outWritten, arraySize - outWritten, t,
...@@ -70,7 +70,7 @@ void CMetaTriangleSelector::getTriangles(core::triangle3df* triangles, s32 array ...@@ -70,7 +70,7 @@ void CMetaTriangleSelector::getTriangles(core::triangle3df* triangles, s32 array
outWritten += t; outWritten += t;
} }
outTriangleCount = outWritten; outTriangleCount = outWritten;
} }
...@@ -82,7 +82,7 @@ void CMetaTriangleSelector::getTriangles(core::triangle3df* triangles, s32 array ...@@ -82,7 +82,7 @@ void CMetaTriangleSelector::getTriangles(core::triangle3df* triangles, s32 array
{ {
s32 outWritten = 0; s32 outWritten = 0;
for (s32 i=0; i<(s32)TriangleSelectors.size(); ++i) for (u32 i=0; i<TriangleSelectors.size(); ++i)
{ {
s32 t = 0; s32 t = 0;
TriangleSelectors[i]->getTriangles(triangles + outWritten, arraySize - outWritten, t, TriangleSelectors[i]->getTriangles(triangles + outWritten, arraySize - outWritten, t,
...@@ -90,7 +90,7 @@ void CMetaTriangleSelector::getTriangles(core::triangle3df* triangles, s32 array ...@@ -90,7 +90,7 @@ void CMetaTriangleSelector::getTriangles(core::triangle3df* triangles, s32 array
outWritten += t; outWritten += t;
} }
outTriangleCount = outWritten; outTriangleCount = outWritten;
} }
...@@ -111,7 +111,7 @@ void CMetaTriangleSelector::addTriangleSelector(ITriangleSelector* toAdd) ...@@ -111,7 +111,7 @@ void CMetaTriangleSelector::addTriangleSelector(ITriangleSelector* toAdd)
//! Removes a specific triangle selector which was added before from the collection. //! Removes a specific triangle selector which was added before from the collection.
bool CMetaTriangleSelector::removeTriangleSelector(ITriangleSelector* toRemove) bool CMetaTriangleSelector::removeTriangleSelector(ITriangleSelector* toRemove)
{ {
for (s32 i=0; i<(s32)TriangleSelectors.size(); ++i) for (u32 i=0; i<TriangleSelectors.size(); ++i)
if (toRemove == TriangleSelectors[i]) if (toRemove == TriangleSelectors[i])
{ {
TriangleSelectors[i]->drop(); TriangleSelectors[i]->drop();
...@@ -127,14 +127,13 @@ bool CMetaTriangleSelector::removeTriangleSelector(ITriangleSelector* toRemove) ...@@ -127,14 +127,13 @@ bool CMetaTriangleSelector::removeTriangleSelector(ITriangleSelector* toRemove)
//! Removes all triangle selectors from the collection. //! Removes all triangle selectors from the collection.
void CMetaTriangleSelector::removeAllTriangleSelectors() void CMetaTriangleSelector::removeAllTriangleSelectors()
{ {
for (s32 i=0; i<(s32)TriangleSelectors.size(); ++i) for (u32 i=0; i<TriangleSelectors.size(); ++i)
TriangleSelectors[i]->drop(); TriangleSelectors[i]->drop();
TriangleSelectors.clear(); TriangleSelectors.clear();
} }
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
...@@ -13,8 +13,8 @@ namespace scene ...@@ -13,8 +13,8 @@ namespace scene
{ {
//! constructor //! constructor
COctTreeTriangleSelector::COctTreeTriangleSelector(IMesh* mesh, COctTreeTriangleSelector::COctTreeTriangleSelector(const IMesh* mesh,
ISceneNode* node, s32 minimalPolysPerNode) const ISceneNode* node, s32 minimalPolysPerNode)
: CTriangleSelector(mesh, node), Root(0), NodeCount(0), : CTriangleSelector(mesh, node), Root(0), NodeCount(0),
MinimalPolysPerNode(minimalPolysPerNode) MinimalPolysPerNode(minimalPolysPerNode)
{ {
......
...@@ -20,12 +20,12 @@ class COctTreeTriangleSelector : public CTriangleSelector ...@@ -20,12 +20,12 @@ class COctTreeTriangleSelector : public CTriangleSelector
public: public:
//! Constructs a selector based on a mesh //! Constructs a selector based on a mesh
COctTreeTriangleSelector(IMesh* mesh, ISceneNode* node, s32 minimalPolysPerNode); COctTreeTriangleSelector(const IMesh* mesh, const ISceneNode* node, s32 minimalPolysPerNode);
~COctTreeTriangleSelector(); virtual ~COctTreeTriangleSelector();
//! Gets all triangles which lie within a specific bounding box. //! Gets all triangles which lie within a specific bounding box.
void getTriangles(core::triangle3df* triangles, s32 arraySize, s32& outTriangleCount, virtual void getTriangles(core::triangle3df* triangles, s32 arraySize, s32& outTriangleCount,
const core::aabbox3d<f32>& box, const core::matrix4* transform=0) const; const core::aabbox3d<f32>& box, const core::matrix4* transform=0) const;
//! Gets all triangles which have or may have contact with a 3d line. //! Gets all triangles which have or may have contact with a 3d line.
...@@ -64,7 +64,6 @@ private: ...@@ -64,7 +64,6 @@ private:
SOctTreeNode* Root; SOctTreeNode* Root;
s32 NodeCount; s32 NodeCount;
s32 MinimalPolysPerNode; s32 MinimalPolysPerNode;
}; };
} // end namespace scene } // end namespace scene
......
...@@ -47,11 +47,11 @@ void CTerrainTriangleSelector::setTriangleData(ITerrainSceneNode* node, s32 LOD) ...@@ -47,11 +47,11 @@ void CTerrainTriangleSelector::setTriangleData(ITerrainSceneNode* node, s32 LOD)
for (int o=0; o<TrianglePatches.NumPatches; ++o) for (int o=0; o<TrianglePatches.NumPatches; ++o)
TrianglePatches.TrianglePatchArray.push_back(SGeoMipMapTrianglePatch()); TrianglePatches.TrianglePatchArray.push_back(SGeoMipMapTrianglePatch());
s32 tIndex = 0;
for(s32 x = 0; x < terrainNode->TerrainData.PatchCount; ++x ) for(s32 x = 0; x < terrainNode->TerrainData.PatchCount; ++x )
{ {
for(s32 z = 0; z < terrainNode->TerrainData.PatchCount; ++z ) for(s32 z = 0; z < terrainNode->TerrainData.PatchCount; ++z )
{ {
s32 tIndex = x * terrainNode->TerrainData.PatchCount + z;
TrianglePatches.TrianglePatchArray[tIndex].NumTriangles = 0; TrianglePatches.TrianglePatchArray[tIndex].NumTriangles = 0;
TrianglePatches.TrianglePatchArray[tIndex].Box = terrainNode->getBoundingBox( x, z ); TrianglePatches.TrianglePatchArray[tIndex].Box = terrainNode->getBoundingBox( x, z );
u32 indexCount = terrainNode->getIndicesForPatch( indices, x, z, LOD ); u32 indexCount = terrainNode->getIndicesForPatch( indices, x, z, LOD );
...@@ -67,6 +67,7 @@ void CTerrainTriangleSelector::setTriangleData(ITerrainSceneNode* node, s32 LOD) ...@@ -67,6 +67,7 @@ void CTerrainTriangleSelector::setTriangleData(ITerrainSceneNode* node, s32 LOD)
} }
TrianglePatches.TotalTriangles += TrianglePatches.TrianglePatchArray[tIndex].NumTriangles; TrianglePatches.TotalTriangles += TrianglePatches.TrianglePatchArray[tIndex].NumTriangles;
++tIndex;
} }
} }
} }
...@@ -146,10 +147,7 @@ void CTerrainTriangleSelector::getTriangles(core::triangle3df* triangles, s32 ar ...@@ -146,10 +147,7 @@ void CTerrainTriangleSelector::getTriangles(core::triangle3df* triangles, s32 ar
s32& outTriangleCount, const core::line3d<f32>& line, s32& outTriangleCount, const core::line3d<f32>& line,
const core::matrix4* transform) const const core::matrix4* transform) const
{ {
s32 count = TrianglePatches.TotalTriangles; const s32 count = core::min_((s32)TrianglePatches.TotalTriangles, arraySize);
if (count > arraySize)
count = arraySize;
core::matrix4 mat; core::matrix4 mat;
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#define __C_TERRAIN_TRIANGLE_SELECTOR_H__ #define __C_TERRAIN_TRIANGLE_SELECTOR_H__
#include "ITriangleSelector.h" #include "ITriangleSelector.h"
#include "IMesh.h"
#include "irrArray.h" #include "irrArray.h"
namespace irr namespace irr
...@@ -32,7 +31,7 @@ public: ...@@ -32,7 +31,7 @@ public:
CTerrainTriangleSelector(ITerrainSceneNode* node, s32 LOD ); CTerrainTriangleSelector(ITerrainSceneNode* node, s32 LOD );
//! Destructor //! Destructor
~CTerrainTriangleSelector(); virtual ~CTerrainTriangleSelector();
//! Clears and sets triangle data //! Clears and sets triangle data
virtual void setTriangleData ( ITerrainSceneNode* node, s32 LOD ); virtual void setTriangleData ( ITerrainSceneNode* node, s32 LOD );
...@@ -47,7 +46,7 @@ public: ...@@ -47,7 +46,7 @@ public:
//! Gets all triangles which have or may have contact with a 3d line. //! Gets all triangles which have or may have contact with a 3d line.
virtual void getTriangles ( core::triangle3df* triangles, s32 arraySize, virtual void getTriangles ( core::triangle3df* triangles, s32 arraySize,
s32& outTriangleCount, const core::line3d<f32>& line, s32& outTriangleCount, const core::line3d<f32>& line,
const core::matrix4* transform = 0 ) const; const core::matrix4* transform = 0 ) const;
//! Returns amount of all available triangles in this selector //! Returns amount of all available triangles in this selector
......
...@@ -11,7 +11,7 @@ namespace scene ...@@ -11,7 +11,7 @@ namespace scene
{ {
//! constructor //! constructor
CTriangleBBSelector::CTriangleBBSelector(ISceneNode* node) CTriangleBBSelector::CTriangleBBSelector(const ISceneNode* node)
: CTriangleSelector(node) : CTriangleSelector(node)
{ {
#ifdef _DEBUG #ifdef _DEBUG
...@@ -32,7 +32,7 @@ void CTriangleBBSelector::getTriangles(core::triangle3df* triangles, ...@@ -32,7 +32,7 @@ void CTriangleBBSelector::getTriangles(core::triangle3df* triangles,
return; return;
// construct triangles // construct triangles
core::aabbox3d<f32> box = SceneNode->getBoundingBox(); const core::aabbox3d<f32>& box = SceneNode->getBoundingBox();
core::vector3df edges[8]; core::vector3df edges[8];
box.getEdges(edges); box.getEdges(edges);
......
...@@ -18,7 +18,7 @@ class CTriangleBBSelector : public CTriangleSelector ...@@ -18,7 +18,7 @@ class CTriangleBBSelector : public CTriangleSelector
public: public:
//! Constructs a selector based on a mesh //! Constructs a selector based on a mesh
CTriangleBBSelector(ISceneNode* node); CTriangleBBSelector(const ISceneNode* node);
//! Gets all triangles. //! Gets all triangles.
virtual void getTriangles(core::triangle3df* triangles, s32 arraySize, s32& outTriangleCount, virtual void getTriangles(core::triangle3df* triangles, s32 arraySize, s32& outTriangleCount,
......
...@@ -12,7 +12,7 @@ namespace scene ...@@ -12,7 +12,7 @@ namespace scene
{ {
//! constructor //! constructor
CTriangleSelector::CTriangleSelector(ISceneNode* node) CTriangleSelector::CTriangleSelector(const ISceneNode* node)
: SceneNode(node) : SceneNode(node)
{ {
#ifdef _DEBUG #ifdef _DEBUG
...@@ -22,7 +22,7 @@ CTriangleSelector::CTriangleSelector(ISceneNode* node) ...@@ -22,7 +22,7 @@ CTriangleSelector::CTriangleSelector(ISceneNode* node)
//! constructor //! constructor
CTriangleSelector::CTriangleSelector(IMesh* mesh, ISceneNode* node) CTriangleSelector::CTriangleSelector(const IMesh* mesh, const ISceneNode* node)
: SceneNode(node) : SceneNode(node)
{ {
#ifdef _DEBUG #ifdef _DEBUG
...@@ -30,6 +30,12 @@ CTriangleSelector::CTriangleSelector(IMesh* mesh, ISceneNode* node) ...@@ -30,6 +30,12 @@ CTriangleSelector::CTriangleSelector(IMesh* mesh, ISceneNode* node)
#endif #endif
const u32 cnt = mesh->getMeshBufferCount(); const u32 cnt = mesh->getMeshBufferCount();
u32 totalFaceCount = 0;
for (u32 j=0; j<cnt; ++j)
totalFaceCount += mesh->getMeshBuffer(j)->getIndexCount();
totalFaceCount /= 3;
Triangles.reallocate(totalFaceCount);
for (u32 i=0; i<cnt; ++i) for (u32 i=0; i<cnt; ++i)
{ {
const IMeshBuffer* buf = mesh->getMeshBuffer(i); const IMeshBuffer* buf = mesh->getMeshBuffer(i);
...@@ -49,7 +55,7 @@ CTriangleSelector::CTriangleSelector(IMesh* mesh, ISceneNode* node) ...@@ -49,7 +55,7 @@ CTriangleSelector::CTriangleSelector(IMesh* mesh, ISceneNode* node)
//! constructor //! constructor
CTriangleSelector::CTriangleSelector(core::aabbox3d<f32> box, ISceneNode* node) CTriangleSelector::CTriangleSelector(const core::aabbox3d<f32>& box, const ISceneNode* node)
: SceneNode(node) : SceneNode(node)
{ {
#ifdef _DEBUG #ifdef _DEBUG
......
...@@ -22,13 +22,13 @@ class CTriangleSelector : public ITriangleSelector ...@@ -22,13 +22,13 @@ class CTriangleSelector : public ITriangleSelector
public: public:
//! Constructs a selector based on a mesh //! Constructs a selector based on a mesh
CTriangleSelector(ISceneNode* node); CTriangleSelector(const ISceneNode* node);
//! Constructs a selector based on a mesh //! Constructs a selector based on a mesh
CTriangleSelector(IMesh* mesh, ISceneNode* node); CTriangleSelector(const IMesh* mesh, const ISceneNode* node);
//! Constructs a selector based on a bounding box //! Constructs a selector based on a bounding box
CTriangleSelector(core::aabbox3d<f32> box, ISceneNode* node); CTriangleSelector(const core::aabbox3d<f32>& box, const ISceneNode* node);
//! Gets all triangles. //! Gets all triangles.
void getTriangles(core::triangle3df* triangles, s32 arraySize, s32& outTriangleCount, void getTriangles(core::triangle3df* triangles, s32 arraySize, s32& outTriangleCount,
...@@ -48,7 +48,7 @@ public: ...@@ -48,7 +48,7 @@ public:
protected: protected:
ISceneNode* SceneNode; const ISceneNode* SceneNode;
mutable core::array<core::triangle3df> Triangles; mutable core::array<core::triangle3df> Triangles;
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment