Futher work on new view dependent overlay node
This commit is contained in:
@@ -19,6 +19,8 @@
|
|||||||
#include <osg/Texture2D>
|
#include <osg/Texture2D>
|
||||||
#include <osg/TexGenNode>
|
#include <osg/TexGenNode>
|
||||||
|
|
||||||
|
#include <osgUtil/CullVisitor>
|
||||||
|
|
||||||
#include <osgSim/Export>
|
#include <osgSim/Export>
|
||||||
|
|
||||||
namespace osgSim {
|
namespace osgSim {
|
||||||
@@ -153,6 +155,24 @@ class OSGSIM_EXPORT OverlayNode : public osg::Group
|
|||||||
bool _continuousUpdate;
|
bool _continuousUpdate;
|
||||||
bool _updateCamera;
|
bool _updateCamera;
|
||||||
osg::Polytope _textureFrustum;
|
osg::Polytope _textureFrustum;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
struct OverlayData
|
||||||
|
{
|
||||||
|
osg::ref_ptr<osg::Camera> _camera;
|
||||||
|
osg::ref_ptr<osg::StateSet> _overlayStateSet;
|
||||||
|
osg::ref_ptr<osg::StateSet> _mainSubgraphStateSet;
|
||||||
|
osg::ref_ptr<osg::TexGen> _texgen;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::map<osgUtil::CullVisitor*, OverlayData> OverlayDataMap;
|
||||||
|
|
||||||
|
OpenThreads::Mutex _overlayDataMapMutex;
|
||||||
|
OverlayDataMap _overlayDataMap;
|
||||||
|
|
||||||
|
OverlayData& getOverlayData(osgUtil::CullVisitor* cv);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,6 +89,12 @@ void OverlayNode::setOverlayTechnique(OverlayTechnique technique)
|
|||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OverlayNode::OverlayData& OverlayNode::getOverlayData(osgUtil::CullVisitor* cv)
|
||||||
|
{
|
||||||
|
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_overlayDataMapMutex);
|
||||||
|
return _overlayDataMap[cv];
|
||||||
|
}
|
||||||
|
|
||||||
void OverlayNode::init()
|
void OverlayNode::init()
|
||||||
{
|
{
|
||||||
switch(_overlayTechnique)
|
switch(_overlayTechnique)
|
||||||
@@ -332,6 +338,26 @@ void OverlayNode::traverse_OBJECT_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY(osg::NodeV
|
|||||||
void OverlayNode::traverse_VIEW_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY(osg::NodeVisitor& nv)
|
void OverlayNode::traverse_VIEW_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY(osg::NodeVisitor& nv)
|
||||||
{
|
{
|
||||||
osg::notify(osg::NOTICE)<<"OverlayNode::traverse() - VIEW_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY"<<std::endl;
|
osg::notify(osg::NOTICE)<<"OverlayNode::traverse() - VIEW_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY"<<std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
if (nv.getVisitorType() != osg::NodeVisitor::CULL_VISITOR)
|
||||||
|
{
|
||||||
|
Group::traverse(nv);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
osgUtil::CullVisitor* cv = dynamic_cast<osgUtil::CullVisitor*>(&nv);
|
||||||
|
if (!cv)
|
||||||
|
{
|
||||||
|
Group::traverse(nv);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
OverlayData& overlayData = getOverlayData(cv);
|
||||||
|
|
||||||
|
Group::traverse(nv);
|
||||||
|
|
||||||
|
osg::notify(osg::NOTICE)<<" "<<&overlayData<<std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OverlayNode::traverse_VIEW_DEPENDENT_WITH_PERSPECTIVE_OVERLAY(osg::NodeVisitor& nv)
|
void OverlayNode::traverse_VIEW_DEPENDENT_WITH_PERSPECTIVE_OVERLAY(osg::NodeVisitor& nv)
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ BEGIN_OBJECT_REFLECTOR(osg::DrawPixels)
|
|||||||
__void__getSubImageDimensions__unsigned_int_R1__unsigned_int_R1__unsigned_int_R1__unsigned_int_R1,
|
__void__getSubImageDimensions__unsigned_int_R1__unsigned_int_R1__unsigned_int_R1__unsigned_int_R1,
|
||||||
"",
|
"",
|
||||||
"");
|
"");
|
||||||
I_Method1(void, drawImplementation, IN, osg::RenderInfo &, state,
|
I_Method1(void, drawImplementation, IN, osg::RenderInfo &, renderInfo,
|
||||||
Properties::VIRTUAL,
|
Properties::VIRTUAL,
|
||||||
__void__drawImplementation__RenderInfo_R1,
|
__void__drawImplementation__RenderInfo_R1,
|
||||||
"drawImplementation(RenderInfo&) is a pure virtual method for the actual implementation of OpenGL drawing calls, such as vertex arrays and primitives, that must be implemented in concrete subclasses of the Drawable base class, examples include osg::Geometry and osg::ShapeDrawable. ",
|
"drawImplementation(RenderInfo&) is a pure virtual method for the actual implementation of OpenGL drawing calls, such as vertex arrays and primitives, that must be implemented in concrete subclasses of the Drawable base class, examples include osg::Geometry and osg::ShapeDrawable. ",
|
||||||
|
|||||||
@@ -27,11 +27,19 @@
|
|||||||
#undef OUT
|
#undef OUT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
BEGIN_ENUM_REFLECTOR(osgSim::OverlayNode::OverlayTechnique)
|
||||||
|
I_EnumLabel(osgSim::OverlayNode::OBJECT_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY);
|
||||||
|
I_EnumLabel(osgSim::OverlayNode::VIEW_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY);
|
||||||
|
I_EnumLabel(osgSim::OverlayNode::VIEW_DEPENDENT_WITH_PERSPECTIVE_OVERLAY);
|
||||||
|
END_REFLECTOR
|
||||||
|
|
||||||
BEGIN_OBJECT_REFLECTOR(osgSim::OverlayNode)
|
BEGIN_OBJECT_REFLECTOR(osgSim::OverlayNode)
|
||||||
I_BaseType(osg::Group);
|
I_BaseType(osg::Group);
|
||||||
I_Constructor0(____OverlayNode,
|
I_ConstructorWithDefaults1(IN, osgSim::OverlayNode::OverlayTechnique, technique, osgSim::OverlayNode::OBJECT_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY,
|
||||||
"",
|
Properties::NON_EXPLICIT,
|
||||||
"");
|
____OverlayNode__OverlayTechnique,
|
||||||
|
"",
|
||||||
|
"");
|
||||||
I_ConstructorWithDefaults2(IN, const osgSim::OverlayNode &, es, , IN, const osg::CopyOp &, copyop, osg::CopyOp::SHALLOW_COPY,
|
I_ConstructorWithDefaults2(IN, const osgSim::OverlayNode &, es, , IN, const osg::CopyOp &, copyop, osg::CopyOp::SHALLOW_COPY,
|
||||||
____OverlayNode__C5_OverlayNode_R1__C5_osg_CopyOp_R1,
|
____OverlayNode__C5_OverlayNode_R1__C5_osg_CopyOp_R1,
|
||||||
"",
|
"",
|
||||||
@@ -71,6 +79,16 @@ BEGIN_OBJECT_REFLECTOR(osgSim::OverlayNode)
|
|||||||
__void__traverse__osg_NodeVisitor_R1,
|
__void__traverse__osg_NodeVisitor_R1,
|
||||||
"Traverse downwards : calls children's accept method with NodeVisitor. ",
|
"Traverse downwards : calls children's accept method with NodeVisitor. ",
|
||||||
"");
|
"");
|
||||||
|
I_Method1(void, setOverlayTechnique, IN, osgSim::OverlayNode::OverlayTechnique, technique,
|
||||||
|
Properties::NON_VIRTUAL,
|
||||||
|
__void__setOverlayTechnique__OverlayTechnique,
|
||||||
|
"",
|
||||||
|
"");
|
||||||
|
I_Method0(osgSim::OverlayNode::OverlayTechnique, getOverlayTechnique,
|
||||||
|
Properties::NON_VIRTUAL,
|
||||||
|
__OverlayTechnique__getOverlayTechnique,
|
||||||
|
"",
|
||||||
|
"");
|
||||||
I_Method1(void, setOverlaySubgraph, IN, osg::Node *, node,
|
I_Method1(void, setOverlaySubgraph, IN, osg::Node *, node,
|
||||||
Properties::NON_VIRTUAL,
|
Properties::NON_VIRTUAL,
|
||||||
__void__setOverlaySubgraph__osg_Node_P1,
|
__void__setOverlaySubgraph__osg_Node_P1,
|
||||||
@@ -106,9 +124,9 @@ BEGIN_OBJECT_REFLECTOR(osgSim::OverlayNode)
|
|||||||
__void__setOverlayClearColor__C5_osg_Vec4_R1,
|
__void__setOverlayClearColor__C5_osg_Vec4_R1,
|
||||||
"Set the clear color to use when rendering the overlay subgraph. ",
|
"Set the clear color to use when rendering the overlay subgraph. ",
|
||||||
"");
|
"");
|
||||||
I_Method0(const osg::Vec4 &, getOverlayClearColor,
|
I_Method0(osg::Vec4, getOverlayClearColor,
|
||||||
Properties::NON_VIRTUAL,
|
Properties::NON_VIRTUAL,
|
||||||
__C5_osg_Vec4_R1__getOverlayClearColor,
|
__osg_Vec4__getOverlayClearColor,
|
||||||
"Get the clear color to use when rendering the overlay subgraph. ",
|
"Get the clear color to use when rendering the overlay subgraph. ",
|
||||||
"");
|
"");
|
||||||
I_Method1(void, setTexEnvMode, IN, GLenum, mode,
|
I_Method1(void, setTexEnvMode, IN, GLenum, mode,
|
||||||
@@ -172,6 +190,42 @@ BEGIN_OBJECT_REFLECTOR(osgSim::OverlayNode)
|
|||||||
__void__init,
|
__void__init,
|
||||||
"",
|
"",
|
||||||
"");
|
"");
|
||||||
|
I_ProtectedMethod0(void, init_OBJECT_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY,
|
||||||
|
Properties::NON_VIRTUAL,
|
||||||
|
Properties::NON_CONST,
|
||||||
|
__void__init_OBJECT_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY,
|
||||||
|
"",
|
||||||
|
"");
|
||||||
|
I_ProtectedMethod0(void, init_VIEW_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY,
|
||||||
|
Properties::NON_VIRTUAL,
|
||||||
|
Properties::NON_CONST,
|
||||||
|
__void__init_VIEW_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY,
|
||||||
|
"",
|
||||||
|
"");
|
||||||
|
I_ProtectedMethod0(void, init_VIEW_DEPENDENT_WITH_PERSPECTIVE_OVERLAY,
|
||||||
|
Properties::NON_VIRTUAL,
|
||||||
|
Properties::NON_CONST,
|
||||||
|
__void__init_VIEW_DEPENDENT_WITH_PERSPECTIVE_OVERLAY,
|
||||||
|
"",
|
||||||
|
"");
|
||||||
|
I_ProtectedMethod1(void, traverse_OBJECT_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY, IN, osg::NodeVisitor &, nv,
|
||||||
|
Properties::NON_VIRTUAL,
|
||||||
|
Properties::NON_CONST,
|
||||||
|
__void__traverse_OBJECT_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY__osg_NodeVisitor_R1,
|
||||||
|
"",
|
||||||
|
"");
|
||||||
|
I_ProtectedMethod1(void, traverse_VIEW_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY, IN, osg::NodeVisitor &, nv,
|
||||||
|
Properties::NON_VIRTUAL,
|
||||||
|
Properties::NON_CONST,
|
||||||
|
__void__traverse_VIEW_DEPENDENT_WITH_ORTHOGRAPHIC_OVERLAY__osg_NodeVisitor_R1,
|
||||||
|
"",
|
||||||
|
"");
|
||||||
|
I_ProtectedMethod1(void, traverse_VIEW_DEPENDENT_WITH_PERSPECTIVE_OVERLAY, IN, osg::NodeVisitor &, nv,
|
||||||
|
Properties::NON_VIRTUAL,
|
||||||
|
Properties::NON_CONST,
|
||||||
|
__void__traverse_VIEW_DEPENDENT_WITH_PERSPECTIVE_OVERLAY__osg_NodeVisitor_R1,
|
||||||
|
"",
|
||||||
|
"");
|
||||||
I_ProtectedMethod0(void, updateMainSubgraphStateSet,
|
I_ProtectedMethod0(void, updateMainSubgraphStateSet,
|
||||||
Properties::NON_VIRTUAL,
|
Properties::NON_VIRTUAL,
|
||||||
Properties::NON_CONST,
|
Properties::NON_CONST,
|
||||||
@@ -184,12 +238,15 @@ BEGIN_OBJECT_REFLECTOR(osgSim::OverlayNode)
|
|||||||
I_SimpleProperty(bool, ContinuousUpdate,
|
I_SimpleProperty(bool, ContinuousUpdate,
|
||||||
__bool__getContinuousUpdate,
|
__bool__getContinuousUpdate,
|
||||||
__void__setContinuousUpdate__bool);
|
__void__setContinuousUpdate__bool);
|
||||||
I_SimpleProperty(const osg::Vec4 &, OverlayClearColor,
|
I_SimpleProperty(osg::Vec4, OverlayClearColor,
|
||||||
__C5_osg_Vec4_R1__getOverlayClearColor,
|
__osg_Vec4__getOverlayClearColor,
|
||||||
__void__setOverlayClearColor__C5_osg_Vec4_R1);
|
__void__setOverlayClearColor__C5_osg_Vec4_R1);
|
||||||
I_SimpleProperty(osg::Node *, OverlaySubgraph,
|
I_SimpleProperty(osg::Node *, OverlaySubgraph,
|
||||||
__osg_Node_P1__getOverlaySubgraph,
|
__osg_Node_P1__getOverlaySubgraph,
|
||||||
__void__setOverlaySubgraph__osg_Node_P1);
|
__void__setOverlaySubgraph__osg_Node_P1);
|
||||||
|
I_SimpleProperty(osgSim::OverlayNode::OverlayTechnique, OverlayTechnique,
|
||||||
|
__OverlayTechnique__getOverlayTechnique,
|
||||||
|
__void__setOverlayTechnique__OverlayTechnique);
|
||||||
I_SimpleProperty(unsigned int, OverlayTextureSizeHint,
|
I_SimpleProperty(unsigned int, OverlayTextureSizeHint,
|
||||||
__unsigned_int__getOverlayTextureSizeHint,
|
__unsigned_int__getOverlayTextureSizeHint,
|
||||||
__void__setOverlayTextureSizeHint__unsigned_int);
|
__void__setOverlayTextureSizeHint__unsigned_int);
|
||||||
|
|||||||
Reference in New Issue
Block a user