From 955cc1ec2a31f5d5579bda3376d80945575b1a4a Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 18 May 2005 19:55:14 +0000 Subject: [PATCH] Added s/getClearMask() support to osg::ClearNode, osgUtil::SceneView and the .osg plugin. --- include/osg/ClearNode | 21 +++++++++++++++------ src/osg/ClearNode.cpp | 3 ++- src/osgPlugins/osg/ClearNode.cpp | 13 +++++++++++++ src/osgUtil/SceneView.cpp | 5 +---- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/include/osg/ClearNode b/include/osg/ClearNode index bb15fc5fc..7ae593c22 100644 --- a/include/osg/ClearNode +++ b/include/osg/ClearNode @@ -33,10 +33,11 @@ class OSG_EXPORT ClearNode : public Group ClearNode(); - ClearNode(const ClearNode& es, const CopyOp& copyop=CopyOp::SHALLOW_COPY): - Group(es,copyop), - _requiresClear(es._requiresClear), - _clearColor(es._clearColor) {} + ClearNode(const ClearNode& cs, const CopyOp& copyop=CopyOp::SHALLOW_COPY): + Group(cs,copyop), + _requiresClear(cs._requiresClear), + _clearColor(cs._clearColor), + _clearMask(cs._clearMask) {} META_Node(osg, ClearNode); @@ -52,13 +53,21 @@ class OSG_EXPORT ClearNode : public Group /** Returns the clear color. */ inline const Vec4& getClearColor() const { return _clearColor; } + + /** Set the clear mask used in glClear(..). + * Defaults to GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT. */ + inline void setClearMask(GLbitfield mask) { _clearMask = mask; } + + /** Get the clear mask.*/ + inline GLbitfield getClearMask() const { return _clearMask; } protected : virtual ~ClearNode() {} - bool _requiresClear; - Vec4 _clearColor; + bool _requiresClear; + Vec4 _clearColor; + GLbitfield _clearMask; }; } diff --git a/src/osg/ClearNode.cpp b/src/osg/ClearNode.cpp index 7a2ae97fc..29945d828 100644 --- a/src/osg/ClearNode.cpp +++ b/src/osg/ClearNode.cpp @@ -21,7 +21,8 @@ using namespace osg; */ ClearNode::ClearNode(): _requiresClear(true), - _clearColor(0.0f,0.0f,0.0f,1.0f) + _clearColor(0.0f,0.0f,0.0f,1.0f), + _clearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) { setCullingActive(false); StateSet* stateset = new StateSet; diff --git a/src/osgPlugins/osg/ClearNode.cpp b/src/osgPlugins/osg/ClearNode.cpp index 1687b9dc4..6d3f57d25 100644 --- a/src/osgPlugins/osg/ClearNode.cpp +++ b/src/osgPlugins/osg/ClearNode.cpp @@ -67,6 +67,18 @@ bool ClearNode_readLocalData(Object& obj, Input& fr) iteratorAdvanced = true; } + if (fr[0].matchWord("clearMask")) + { + if (fr[1].isUInt()) + { + unsigned int value=0; + fr[1].getUInt(value); + es.setClearMask(static_cast(value)); + iteratorAdvanced = true; + fr+=2; + } + } + return iteratorAdvanced; } @@ -86,6 +98,7 @@ bool ClearNode_writeLocalData(const Object& obj, Output& fw) } fw.indent() << "clearColor "<(es.getClearMask())<< std::endl; return true; } diff --git a/src/osgUtil/SceneView.cpp b/src/osgUtil/SceneView.cpp index d34e65bc8..b01d79533 100644 --- a/src/osgUtil/SceneView.cpp +++ b/src/osgUtil/SceneView.cpp @@ -615,10 +615,7 @@ void SceneView::cullStage(const osg::Matrixd& projection,const osg::Matrixd& mod if (clearNode->getRequiresClear()) { renderStage->setClearColor(clearNode->getClearColor()); - renderStage->setClearMask(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - // really should set clear mask here, but what to? Need - // to consider the stencil and accumulation buffers.. - // will defer to later. Robert Osfield. October 2001. + renderStage->setClearMask(clearNode->getClearMask()); } else {