RenderInfo 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
  2. *
  3. * This library is open source and may be redistributed and/or modified under
  4. * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
  5. * (at your option) any later version. The full license is in LICENSE file
  6. * included with this distribution, and on the openscenegraph.org website.
  7. *
  8. * This library is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * OpenSceneGraph Public License for more details.
  12. */
  13. #ifndef OSG_RENDERINFO
  14. #define OSG_RENDERINFO 1
  15. #include <osg/State>
  16. #include <osg/View>
  17. namespace osgUtil {
  18. // forward declare RenderBin so we can refer to it in RenderInfo
  19. class RenderBin;
  20. }
  21. namespace osg {
  22. class RenderInfo
  23. {
  24. public:
  25. RenderInfo():
  26. _view(0) {}
  27. RenderInfo(const RenderInfo& rhs):
  28. _state(rhs._state),
  29. _view(rhs._view),
  30. _cameraStack(rhs._cameraStack),
  31. _renderBinStack(rhs._renderBinStack),
  32. _userData(rhs._userData) {}
  33. RenderInfo(State* state, View* view):
  34. _state(state),
  35. _view(view) {}
  36. RenderInfo& operator = (const RenderInfo& rhs)
  37. {
  38. _state = rhs._state;
  39. _view = rhs._view;
  40. _cameraStack = rhs._cameraStack;
  41. _renderBinStack = rhs._renderBinStack;
  42. _userData = rhs._userData;
  43. return *this;
  44. }
  45. unsigned int getContextID() const { return _state.valid() ? _state->getContextID() : 0; }
  46. void setState(State* state) { _state = state; }
  47. State* getState() { return _state.get(); }
  48. const State* getState() const { return _state.get(); }
  49. void setView(View* view) { _view = view; }
  50. View* getView() { return _view; }
  51. const View* getView() const { return _view; }
  52. void pushCamera(Camera* camera) { _cameraStack.push_back(camera); }
  53. void popCamera() { if (!_cameraStack.empty()) _cameraStack.pop_back(); }
  54. typedef std::vector<Camera*> CameraStack;
  55. CameraStack& getCameraStack() { return _cameraStack; }
  56. Camera* getCurrentCamera() { return _cameraStack.empty() ? 0 : _cameraStack.back(); }
  57. void pushRenderBin(osgUtil::RenderBin* bin) { _renderBinStack.push_back(bin); }
  58. void popRenderBin() { _renderBinStack.pop_back(); }
  59. typedef std::vector<osgUtil::RenderBin*> RenderBinStack;
  60. RenderBinStack& getRenderBinStack() { return _renderBinStack; }
  61. void setUserData(Referenced* userData) { _userData = userData; }
  62. Referenced* getUserData() { return _userData.get(); }
  63. const Referenced* getUserData() const { return _userData.get(); }
  64. protected:
  65. ref_ptr<State> _state;
  66. View* _view;
  67. CameraStack _cameraStack;
  68. RenderBinStack _renderBinStack;
  69. ref_ptr<Referenced> _userData;
  70. };
  71. }
  72. #endif