From beeda386ef2547bdd3b28325a4ee0424d08ae432 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 22 Aug 2014 19:00:53 +0000 Subject: [PATCH] Improved handling of setting of the depth of the UI. git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14418 16af8721-9629-0410-8352-f15c8da7e697 --- include/osgUI/Style | 1 + src/osgUI/Popup.cpp | 7 +++++-- src/osgUI/Style.cpp | 12 ++++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/include/osgUI/Style b/include/osgUI/Style index bd7b17675..b6ba03af4 100644 --- a/include/osgUI/Style +++ b/include/osgUI/Style @@ -52,6 +52,7 @@ public: virtual osg::Node* createText(const osg::BoundingBox& extents, const AlignmentSettings* as, const TextSettings* textSettings, const std::string& text); virtual osg::Node* createIcon(const osg::BoundingBox& extents, const std::string& filename, const osg::Vec4& colour); virtual void setupDialogStateSet(osg::StateSet* stateset, int binNum); + virtual void setupPopupStateSet(osg::StateSet* stateset, int binNum); virtual void setupClipStateSet(const osg::BoundingBox& extents, osg::StateSet* stateset); protected: diff --git a/src/osgUI/Popup.cpp b/src/osgUI/Popup.cpp index 1ac139d1d..de01aab7b 100644 --- a/src/osgUI/Popup.cpp +++ b/src/osgUI/Popup.cpp @@ -76,8 +76,11 @@ void Popup::createGraphicsImplementation() bool requiresFrame = (getFrameSettings() && getFrameSettings()->getShape()!=osgUI::FrameSettings::NO_FRAME); if (requiresFrame) { _transform->addChild(style->createFrame(_extents, getFrameSettings(), dialogBackgroundColor)); } - - style->setupDialogStateSet(getOrCreateStateSet(), 6); +#if 1 + style->setupDialogStateSet(getOrCreateStateSet(),6); +#else + style->setupPopupStateSet(getOrCreateStateSet(),6); +#endif style->setupClipStateSet(_extents, getOrCreateStateSet()); diff --git a/src/osgUI/Style.cpp b/src/osgUI/Style.cpp index 8147a014d..fcc91aabe 100644 --- a/src/osgUI/Style.cpp +++ b/src/osgUI/Style.cpp @@ -387,6 +387,7 @@ osg::Node* Style::createPanel(const osg::BoundingBox& extents, const osg::Vec4& return geometry.release(); } + osg::Node* Style::createDepthSetPanel(const osg::BoundingBox& extents) { // OSG_NOTICE<<"createDepthSetPanel"<addPrimitiveSet( new osg::DrawArrays(GL_TRIANGLE_STRIP, 0, 4) ); osg::ref_ptr stateset = geometry->getOrCreateStateSet(); - stateset->setAttributeAndModes( _enabledDepthWrite.get(), osg::StateAttribute::ON); - stateset->setAttributeAndModes( _disableColorWriteMask.get() ); + stateset->setAttributeAndModes( _enabledDepthWrite.get(), osg::StateAttribute::ON | osg::StateAttribute::PROTECTED ); + stateset->setAttributeAndModes( _disableColorWriteMask.get(), osg::StateAttribute::ON | osg::StateAttribute::PROTECTED ); + stateset->setRenderBinDetails(20, "TraversalOrderBin", osg::StateSet::OVERRIDE_PROTECTED_RENDERBIN_DETAILS); + stateset->setNestRenderBins(false); return geometry.release(); } + void Style::setupDialogStateSet(osg::StateSet* stateset, int binNum) { stateset->setRenderBinDetails(binNum, "TraversalOrderBin", osg::StateSet::OVERRIDE_PROTECTED_RENDERBIN_DETAILS); @@ -419,6 +423,10 @@ void Style::setupDialogStateSet(osg::StateSet* stateset, int binNum) stateset->setNestRenderBins(false); } +void Style::setupPopupStateSet(osg::StateSet* /*stateset*/, int /*binNum*/) +{ +} + void Style::setupClipStateSet(const osg::BoundingBox& extents, osg::StateSet* stateset) { unsigned int clipTextureUnit = 1;