Futher work on new view dependent overlay node
This commit is contained in:
@@ -19,6 +19,8 @@
|
||||
#include <osg/Texture2D>
|
||||
#include <osg/TexGenNode>
|
||||
|
||||
#include <osgUtil/CullVisitor>
|
||||
|
||||
#include <osgSim/Export>
|
||||
|
||||
namespace osgSim {
|
||||
@@ -153,6 +155,24 @@ class OSGSIM_EXPORT OverlayNode : public osg::Group
|
||||
bool _continuousUpdate;
|
||||
bool _updateCamera;
|
||||
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();
|
||||
}
|
||||
|
||||
OverlayNode::OverlayData& OverlayNode::getOverlayData(osgUtil::CullVisitor* cv)
|
||||
{
|
||||
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_overlayDataMapMutex);
|
||||
return _overlayDataMap[cv];
|
||||
}
|
||||
|
||||
void OverlayNode::init()
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
|
||||
@@ -110,7 +110,7 @@ BEGIN_OBJECT_REFLECTOR(osg::DrawPixels)
|
||||
__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,
|
||||
__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. ",
|
||||
|
||||
@@ -27,11 +27,19 @@
|
||||
#undef OUT
|
||||
#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)
|
||||
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,
|
||||
____OverlayNode__C5_OverlayNode_R1__C5_osg_CopyOp_R1,
|
||||
"",
|
||||
@@ -71,6 +79,16 @@ BEGIN_OBJECT_REFLECTOR(osgSim::OverlayNode)
|
||||
__void__traverse__osg_NodeVisitor_R1,
|
||||
"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,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setOverlaySubgraph__osg_Node_P1,
|
||||
@@ -106,9 +124,9 @@ BEGIN_OBJECT_REFLECTOR(osgSim::OverlayNode)
|
||||
__void__setOverlayClearColor__C5_osg_Vec4_R1,
|
||||
"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,
|
||||
__C5_osg_Vec4_R1__getOverlayClearColor,
|
||||
__osg_Vec4__getOverlayClearColor,
|
||||
"Get the clear color to use when rendering the overlay subgraph. ",
|
||||
"");
|
||||
I_Method1(void, setTexEnvMode, IN, GLenum, mode,
|
||||
@@ -172,6 +190,42 @@ BEGIN_OBJECT_REFLECTOR(osgSim::OverlayNode)
|
||||
__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,
|
||||
Properties::NON_VIRTUAL,
|
||||
Properties::NON_CONST,
|
||||
@@ -184,12 +238,15 @@ BEGIN_OBJECT_REFLECTOR(osgSim::OverlayNode)
|
||||
I_SimpleProperty(bool, ContinuousUpdate,
|
||||
__bool__getContinuousUpdate,
|
||||
__void__setContinuousUpdate__bool);
|
||||
I_SimpleProperty(const osg::Vec4 &, OverlayClearColor,
|
||||
__C5_osg_Vec4_R1__getOverlayClearColor,
|
||||
I_SimpleProperty(osg::Vec4, OverlayClearColor,
|
||||
__osg_Vec4__getOverlayClearColor,
|
||||
__void__setOverlayClearColor__C5_osg_Vec4_R1);
|
||||
I_SimpleProperty(osg::Node *, OverlaySubgraph,
|
||||
__osg_Node_P1__getOverlaySubgraph,
|
||||
__void__setOverlaySubgraph__osg_Node_P1);
|
||||
I_SimpleProperty(osgSim::OverlayNode::OverlayTechnique, OverlayTechnique,
|
||||
__OverlayTechnique__getOverlayTechnique,
|
||||
__void__setOverlayTechnique__OverlayTechnique);
|
||||
I_SimpleProperty(unsigned int, OverlayTextureSizeHint,
|
||||
__unsigned_int__getOverlayTextureSizeHint,
|
||||
__void__setOverlayTextureSizeHint__unsigned_int);
|
||||
|
||||
Reference in New Issue
Block a user