From 5770774e00d9e057a795225cba634973a59803a2 Mon Sep 17 00:00:00 2001 From: Daniel Trstenjak Date: Tue, 29 Jan 2019 14:40:16 +0100 Subject: [PATCH] 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. --- src/osg/OcclusionQueryNode.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/osg/OcclusionQueryNode.cpp b/src/osg/OcclusionQueryNode.cpp index f73dccf79..78ce7f3b5 100644 --- a/src/osg/OcclusionQueryNode.cpp +++ b/src/osg/OcclusionQueryNode.cpp @@ -483,8 +483,15 @@ bool OcclusionQueryNode::getPassed( const Camera* camera, NodeVisitor& nv ) return _passed; } + QueryGeometry* qg = static_cast< QueryGeometry* >( _queryGeode->getDrawable( 0 ) ); + 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 subgraphs. _passed = false; @@ -513,7 +520,6 @@ bool OcclusionQueryNode::getPassed( const Camera* camera, NodeVisitor& nv ) _passed = true; return _passed; } - QueryGeometry* qg = static_cast< QueryGeometry* >( _queryGeode->getDrawable( 0 ) ); // Get the near plane for the upcoming distance calculation. osg::Matrix::value_type nearPlane;