Hi Aurelien,
I have just checked in the addition of a
RenderInfo::getRenderBinStack(). Could you let me know if this works
fine for you.
Robert.
The changes were:
Index: include/osg/RenderInfo
===================================================================
--- include/osg/RenderInfo (revision 13621)
+++ include/osg/RenderInfo (working copy)
@@ -17,6 +17,11 @@
#include <osg/State>
#include <osg/View>
+namespace osgUtil {
+// forward declare RenderBin so we can refer to it in RenderInfo
+class RenderBin;
+}
+
namespace osg {
class RenderInfo
@@ -29,7 +34,8 @@
RenderInfo(const RenderInfo& rhs):
_state(rhs._state),
_view(rhs._view),
- _cameras(rhs._cameras),
+ _cameraStack(rhs._cameraStack),
+ _renderBinStack(rhs._renderBinStack),
_userData(rhs._userData) {}
RenderInfo(State* state, View* view):
@@ -40,7 +46,8 @@
{
_state = rhs._state;
_view = rhs._view;
- _cameras = rhs._cameras;
+ _cameraStack = rhs._cameraStack;
+ _renderBinStack = rhs._renderBinStack;
_userData = rhs._userData;
return *this;
}
@@ -55,22 +62,31 @@
View* getView() { return _view; }
const View* getView() const { return _view; }
- void pushCamera(Camera* camera) { _cameras.push_back(camera); }
- void popCamera() { if (!_cameras.empty()) _cameras.pop_back(); }
+ void pushCamera(Camera* camera) { _cameraStack.push_back(camera); }
+ void popCamera() { if (!_cameraStack.empty()) _cameraStack.pop_back(); }
- Camera* getCurrentCamera() { return _cameras.empty() ? 0 :
_cameras.back(); }
+ typedef std::vector<Camera*> CameraStack;
+ CameraStack& getCameraStack() { return _cameraStack; }
+ Camera* getCurrentCamera() { return _cameraStack.empty() ? 0 :
_cameraStack.back(); }
+
+ void pushRenderBin(osgUtil::RenderBin* bin) {
_renderBinStack.push_back(bin); }
+ void popRenderBin() { _renderBinStack.pop_back(); }
+
+ typedef std::vector<osgUtil::RenderBin*> RenderBinStack;
+ RenderBinStack& getRenderBinStack() { return _renderBinStack; }
+
void setUserData(Referenced* userData) { _userData = userData; }
Referenced* getUserData() { return _userData.get(); }
const Referenced* getUserData() const { return _userData.get(); }
protected:
- typedef std::vector<Camera*> Cameras;
ref_ptr<State> _state;
View* _view;
- Cameras _cameras;
+ CameraStack _cameraStack;
+ RenderBinStack _renderBinStack;
ref_ptr<Referenced> _userData;
};
Index: src/osgUtil/RenderBin.cpp
===================================================================
--- src/osgUtil/RenderBin.cpp (revision 13621)
+++ src/osgUtil/RenderBin.cpp (working copy)
@@ -421,11 +421,15 @@
void RenderBin::draw(osg::RenderInfo& renderInfo,RenderLeaf*& previous)
{
+ renderInfo.pushRenderBin(this);
+
if (_drawCallback.valid())
{
_drawCallback->drawImplementation(this,renderInfo,previous);
}
else drawImplementation(renderInfo,previous);
+
+ renderInfo.popRenderBin();
}
void RenderBin::drawImplementation(osg::RenderInfo&
renderInfo,RenderLeaf*& previous)
_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org