- fixed crash derived from changing mesh topology without updating internal data structures

This commit is contained in:
Guido Ranzuglia 2016-11-21 12:00:56 +01:00
parent f4feeb5d5b
commit c8344bba1a
1 changed files with 13 additions and 10 deletions

View File

@ -155,7 +155,7 @@ public:
Box3<ScalarType> reg =ComputeDCBox(x,y,width,height);
if(M!=lastM || &m != lastm)
if ((M != lastM) || (&m != lastm) || (pVec.size() != m.VN()))
{
FillProjectedVector(m,pVec,M,viewportF);
lastM = M;
@ -184,21 +184,24 @@ public:
reg.Add(CoordType(x-width/ScalarType(2.0),y-height/ScalarType(2.0),ScalarType(-1.0)));
reg.Add(CoordType(x+width/ScalarType(2.0),y+height/ScalarType(2.0),ScalarType(1.0)));
if(M!=lastM || &m != lastm)
if((M!=lastM) || (&m != lastm) || (pVec.size() != m.VN()))
{
FillProjectedVector(m,pVec,M,viewportF);
lastM = M;
lastm = &m;
}
for(size_t i=0;i<m.face.size();++i) if(!m.face[i].IsD())
{
const CoordType &p0 = pVec[tri::Index(m,m.face[i].V(0))];
const CoordType &p1 = pVec[tri::Index(m,m.face[i].V(1))];
const CoordType &p2 = pVec[tri::Index(m,m.face[i].V(2))];
if( (p0[2]>-1.0f) && (p1[2]>-1.0f) && (p2[2]>-1.0f) && IntersectionTriangleBox(reg,p0,p1,p2))
result.push_back(&m.face[i]);
}
for (size_t i = 0; i < m.face.size(); ++i)
{
if (!m.face[i].IsD())
{
const CoordType &p0 = pVec[tri::Index(m, m.face[i].V(0))];
const CoordType &p1 = pVec[tri::Index(m, m.face[i].V(1))];
const CoordType &p2 = pVec[tri::Index(m, m.face[i].V(2))];
if ((p0[2] > -1.0f) && (p1[2] > -1.0f) && (p2[2] > -1.0f) && IntersectionTriangleBox(reg, p0, p1, p2))
result.push_back(&m.face[i]);
}
}
return result.size();
}