Fix uninitialized variable in CTriangleSelector and code cleanup

CTriangleSelector constructor with IAnimatedMeshSceneNode parameter didn't initialize MeshBuffer.
Not used internally, so no big problem, but it got passed back to users in some cases
Replaced SCollisionTriangleRange, by CTriangleSelector::SBufferTriangleRange. Was a bad idea to use a struct which is for something else just because some member were the same (my fault, sorry).
Also started unifying the case of using ranges vs not using them. 
Can maybe even get rid of the non-ranges case in future. Or unify the duplicated code for getting triangles at least.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6579 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
cutealien
2023-12-13 16:10:50 +00:00
parent 70b2e3a255
commit 8372a70f21
4 changed files with 39 additions and 17 deletions

View File

@ -15,7 +15,7 @@ namespace scene
//! constructor
CTriangleSelector::CTriangleSelector(ISceneNode* node)
: SceneNode(node), MeshBuffer(0), MaterialIndex(0), AnimatedNode(0), LastMeshFrame(0)
: SceneNode(node), AnimatedNode(0), LastMeshFrame(0)
{
#ifdef _DEBUG
setDebugName("CTriangleSelector");
@ -27,7 +27,7 @@ CTriangleSelector::CTriangleSelector(ISceneNode* node)
//! constructor
CTriangleSelector::CTriangleSelector(const core::aabbox3d<f32>& box, ISceneNode* node)
: SceneNode(node), MeshBuffer(0), MaterialIndex(0), AnimatedNode(0), LastMeshFrame(0)
: SceneNode(node), AnimatedNode(0), LastMeshFrame(0)
{
#ifdef _DEBUG
setDebugName("CTriangleSelector");
@ -40,7 +40,7 @@ CTriangleSelector::CTriangleSelector(const core::aabbox3d<f32>& box, ISceneNode*
//! constructor
CTriangleSelector::CTriangleSelector(const IMesh* mesh, ISceneNode* node, bool separateMeshbuffers)
: SceneNode(node), MeshBuffer(0), MaterialIndex(0), AnimatedNode(0), LastMeshFrame(0)
: SceneNode(node), AnimatedNode(0), LastMeshFrame(0)
{
#ifdef _DEBUG
setDebugName("CTriangleSelector");
@ -50,12 +50,14 @@ CTriangleSelector::CTriangleSelector(const IMesh* mesh, ISceneNode* node, bool s
}
CTriangleSelector::CTriangleSelector(const IMeshBuffer* meshBuffer, irr::u32 materialIndex, ISceneNode* node)
: SceneNode(node), MeshBuffer(meshBuffer), MaterialIndex(materialIndex), AnimatedNode(0), LastMeshFrame(0)
: SceneNode(node), AnimatedNode(0), LastMeshFrame(0)
{
#ifdef _DEBUG
setDebugName("CTriangleSelector");
#endif
SingleBufferRange.MeshBuffer = meshBuffer;
SingleBufferRange.MaterialIndex = materialIndex;
createFromMeshBuffer(meshBuffer);
}
@ -90,7 +92,7 @@ void CTriangleSelector::createFromMesh(const IMesh* mesh, bool createBufferRange
u32 totalFaceCount = 0;
for (u32 j=0; j<cnt; ++j)
{
SCollisionTriangleRange range;
SBufferTriangleRange range;
range.MeshBuffer = mesh->getMeshBuffer(j);
range.MaterialIndex = j;
range.RangeSize = range.MeshBuffer->getIndexCount() / 3;
@ -301,8 +303,8 @@ void CTriangleSelector::getTriangles(core::triangle3df* triangles,
triRange.RangeSize = cnt;
triRange.Selector = this;
triRange.SceneNode = SceneNode;
triRange.MeshBuffer = MeshBuffer;
triRange.MaterialIndex = MaterialIndex;
triRange.MeshBuffer = SingleBufferRange.MeshBuffer;
triRange.MaterialIndex = SingleBufferRange.MaterialIndex;
outTriangleInfo->push_back(triRange);
}
else
@ -445,8 +447,8 @@ void CTriangleSelector::getTriangles(core::triangle3df* triangles,
triRange.RangeSize = triangleCount;
triRange.Selector = this;
triRange.SceneNode = SceneNode;
triRange.MeshBuffer = MeshBuffer;
triRange.MaterialIndex = MaterialIndex;
triRange.MeshBuffer = SingleBufferRange.MeshBuffer;
triRange.MaterialIndex = SingleBufferRange.MaterialIndex;
outTriangleInfo->push_back(triRange);
}
}