Hi Robbert,
the _resultmask is now inherited from an unrelated node, and not set to _maskStack.back() like it would be if osg::Polytope::contains(const osg::BoundingSphere& bs) would do if culling was enabled.

Laurens.

On 1/25/2013 5:13 PM, Robert Osfield wrote:
Hi Laurens,

I've tried to understand what you think might a bug several times,
looking at the CullingSet/CullingStack and CullVisitor code, as well
as testing your model but still can't grasp what is thought to be
wrong.  A _resultMask that is not modified should be safe to push and
pop as it shouldn't change anything.  You suggested changes are
awkward, to me if there is a bug in the management of _resultMask then
pushing workarounds into CullVisitor is not the way to solve it.

Robert.

On 25 January 2013 14:54, Laurens Voerman <[email protected]> wrote:
Hi Robert,

attached in CullVisitor.zip is an update for src/osgUtil/CullVisitor.cpp
(based on svn rev 13311 - 25 Jan 2013)

The funcion "isCulled(node)" might return true because
node->_numChildrenWithCullingDisabled is not 0, and in that case
"getCurrentCullingSet().isCulled(node.getBound())" is never executed. The
getCurrentCullingSet()->_frustrum->_resultMask is never updated, and should
not be pushed.
The current code results in a failure to cull nodes, so the bug never has a
visible impact, only a performance impact.

I have created an example showing the bug, abusing the option of a proxynode
to indicate a bounding sphere.
The shiny cow is culled as if it's on the position of the white wire-frame
cow.
The red sphere has it's culling disabled.
The blue and green spere set the _resultmask, causing the cow not to be
culled against the frustrum planes they are fully inside off.

This example should show a blinking cow, not culled with the green sphere
fully inside the right clipping plane, while disappearing when the blue
sphere is crossing the right screen edge.

set OSG_OPTIMIZER=OFF
osgviewer --window 10 10 800 600 lying_cow_proxy.osg -p saved_animation.path

To be clear: the cow should not blink, it should be culled.

The patch resolves the problem, only the call to pushCurrentMask() in the
function void CullVisitor::apply(Projection& node) remains. It might need
the same treatment as the other calls, but if I read the code correctly it
does not do anything anyway and could simply be removed.

Regards, Laurens.

_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

Reply via email to