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

Reply via email to