2006-09-19 04:54:48 +08:00
|
|
|
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
|
|
|
|
*
|
|
|
|
* This library is open source and may be redistributed and/or modified under
|
|
|
|
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
|
|
|
* (at your option) any later version. The full license is in LICENSE file
|
|
|
|
* included with this distribution, and on the openscenegraph.org website.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* OpenSceneGraph Public License for more details.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef OSG_RENDERINFO
|
|
|
|
#define OSG_RENDERINFO 1
|
|
|
|
|
|
|
|
#include <osg/State>
|
|
|
|
#include <osg/View>
|
|
|
|
|
2013-08-01 15:19:45 +08:00
|
|
|
namespace osgUtil {
|
|
|
|
// forward declare RenderBin so we can refer to it in RenderInfo
|
|
|
|
class RenderBin;
|
|
|
|
}
|
|
|
|
|
2006-09-19 04:54:48 +08:00
|
|
|
namespace osg {
|
|
|
|
|
|
|
|
class RenderInfo
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
RenderInfo():
|
|
|
|
_view(0) {}
|
|
|
|
|
|
|
|
RenderInfo(const RenderInfo& rhs):
|
|
|
|
_state(rhs._state),
|
|
|
|
_view(rhs._view),
|
2013-08-01 15:19:45 +08:00
|
|
|
_cameraStack(rhs._cameraStack),
|
|
|
|
_renderBinStack(rhs._renderBinStack),
|
2006-09-19 04:54:48 +08:00
|
|
|
_userData(rhs._userData) {}
|
|
|
|
|
|
|
|
RenderInfo(State* state, View* view):
|
|
|
|
_state(state),
|
|
|
|
_view(view) {}
|
2012-03-22 01:36:20 +08:00
|
|
|
|
2006-09-19 04:54:48 +08:00
|
|
|
RenderInfo& operator = (const RenderInfo& rhs)
|
|
|
|
{
|
|
|
|
_state = rhs._state;
|
|
|
|
_view = rhs._view;
|
2013-08-01 15:19:45 +08:00
|
|
|
_cameraStack = rhs._cameraStack;
|
|
|
|
_renderBinStack = rhs._renderBinStack;
|
2006-09-19 04:54:48 +08:00
|
|
|
_userData = rhs._userData;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
unsigned int getContextID() const { return _state.valid() ? _state->getContextID() : 0; }
|
2012-03-22 01:36:20 +08:00
|
|
|
|
2006-09-19 04:54:48 +08:00
|
|
|
void setState(State* state) { _state = state; }
|
|
|
|
State* getState() { return _state.get(); }
|
|
|
|
const State* getState() const { return _state.get(); }
|
2012-03-22 01:36:20 +08:00
|
|
|
|
2006-09-19 04:54:48 +08:00
|
|
|
void setView(View* view) { _view = view; }
|
2010-02-19 05:18:49 +08:00
|
|
|
View* getView() { return _view; }
|
|
|
|
const View* getView() const { return _view; }
|
2012-03-22 01:36:20 +08:00
|
|
|
|
2013-08-01 15:19:45 +08:00
|
|
|
void pushCamera(Camera* camera) { _cameraStack.push_back(camera); }
|
|
|
|
void popCamera() { if (!_cameraStack.empty()) _cameraStack.pop_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(); }
|
2012-03-22 01:36:20 +08:00
|
|
|
|
2013-08-01 15:19:45 +08:00
|
|
|
typedef std::vector<osgUtil::RenderBin*> RenderBinStack;
|
|
|
|
RenderBinStack& getRenderBinStack() { return _renderBinStack; }
|
2006-09-19 04:54:48 +08:00
|
|
|
|
|
|
|
void setUserData(Referenced* userData) { _userData = userData; }
|
|
|
|
Referenced* getUserData() { return _userData.get(); }
|
|
|
|
const Referenced* getUserData() const { return _userData.get(); }
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
2007-07-15 01:07:59 +08:00
|
|
|
|
2006-09-19 04:54:48 +08:00
|
|
|
ref_ptr<State> _state;
|
2010-02-19 05:18:49 +08:00
|
|
|
View* _view;
|
2013-08-01 15:19:45 +08:00
|
|
|
CameraStack _cameraStack;
|
|
|
|
RenderBinStack _renderBinStack;
|
2006-09-19 04:54:48 +08:00
|
|
|
ref_ptr<Referenced> _userData;
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|