- fixed crash derived from changing mesh topology without updating internal data structures
This commit is contained in:
parent
f4feeb5d5b
commit
c8344bba1a
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue