OcclusionQueryNode: reset the test result of the invalid geometry

There're cases that the occlusion test result has been retrieved
after the query geometry has been changed, it's the result of the
geometry before the change.
This commit is contained in:
Daniel Trstenjak 2019-01-29 14:40:16 +01:00 committed by Julien Valentin
parent 3ef5d2b331
commit 8fb5ba4a3f

View File

@ -483,8 +483,15 @@ bool OcclusionQueryNode::getPassed( const Camera* camera, NodeVisitor& nv )
return _passed; return _passed;
} }
QueryGeometry* qg = static_cast< QueryGeometry* >( _queryGeode->getDrawable( 0 ) );
if ( !_validQueryGeometry ) if ( !_validQueryGeometry )
{ {
// There're cases that the occlusion test result has been retrieved
// after the query geometry has been changed, it's the result of the
// geometry before the change.
qg->reset();
// The box of the query geometry is invalid, return false to not traverse // The box of the query geometry is invalid, return false to not traverse
// the subgraphs. // the subgraphs.
_passed = false; _passed = false;
@ -513,7 +520,6 @@ bool OcclusionQueryNode::getPassed( const Camera* camera, NodeVisitor& nv )
_passed = true; _passed = true;
return _passed; return _passed;
} }
QueryGeometry* qg = static_cast< QueryGeometry* >( _queryGeode->getDrawable( 0 ) );
// Get the near plane for the upcoming distance calculation. // Get the near plane for the upcoming distance calculation.
osg::Matrix::value_type nearPlane; osg::Matrix::value_type nearPlane;