Use names to identify cameras in camera group
This commit is contained in:
parent
81d181beb5
commit
e55c0b8819
3 changed files with 26 additions and 23 deletions
|
@ -56,6 +56,15 @@
|
|||
#include <osgViewer/GraphicsWindow>
|
||||
#include <osgViewer/Renderer>
|
||||
|
||||
namespace flightgear {
|
||||
const char* MAIN_CAMERA = "MAIN_CAMERA";
|
||||
const char* FAR_CAMERA = "FAR_CAMERA";
|
||||
const char* GEOMETRY_CAMERA = "GEOMETRY_CAMERA";
|
||||
const char* SHADOW_CAMERA = "SHADOW_CAMERA";
|
||||
const char* LIGHTING_CAMERA = "LIGHTING_CAMERA";
|
||||
const char* DISPLAY_CAMERA = "DISPLAY_CAMERA";
|
||||
}
|
||||
|
||||
static osg::Matrix
|
||||
invert(const osg::Matrix& matrix)
|
||||
{
|
||||
|
@ -242,7 +251,7 @@ void CameraInfo::resized(double w, double h)
|
|||
}
|
||||
}
|
||||
|
||||
osg::Camera* CameraInfo::getCamera(CameraKind k) const
|
||||
osg::Camera* CameraInfo::getCamera(const std::string& k) const
|
||||
{
|
||||
CameraMap::const_iterator ii = cameras.find( k );
|
||||
if (ii == cameras.end())
|
||||
|
|
|
@ -72,20 +72,14 @@ struct RenderStageInfo {
|
|||
bool resizable;
|
||||
};
|
||||
|
||||
enum CameraKind {
|
||||
MAIN_CAMERA,
|
||||
FAR_CAMERA,
|
||||
GEOMETRY_CAMERA,
|
||||
SHADOW_CAMERA,
|
||||
BLOOM_CAMERA_1,
|
||||
BLOOM_CAMERA_2,
|
||||
AO_CAMERA_1,
|
||||
AO_CAMERA_2,
|
||||
AO_CAMERA_3,
|
||||
LIGHTING_CAMERA,
|
||||
DISPLAY_CAMERA
|
||||
};
|
||||
typedef std::map<CameraKind,RenderStageInfo> CameraMap;
|
||||
extern const char* MAIN_CAMERA;
|
||||
extern const char* FAR_CAMERA;
|
||||
extern const char* GEOMETRY_CAMERA;
|
||||
extern const char* SHADOW_CAMERA;
|
||||
extern const char* LIGHTING_CAMERA;
|
||||
extern const char* DISPLAY_CAMERA;
|
||||
|
||||
typedef std::map<std::string,RenderStageInfo> CameraMap;
|
||||
|
||||
/** A wrapper around osg::Camera that contains some extra information.
|
||||
*/
|
||||
|
@ -138,12 +132,12 @@ struct CameraInfo : public osg::Referenced
|
|||
/** the camera objects
|
||||
*/
|
||||
CameraMap cameras;
|
||||
void addCamera( CameraKind k, osg::Camera* c, int si = -1, bool fs = false ) { cameras[k].camera = c; cameras[k].slaveIndex = si; cameras[k].fullscreen = fs; }
|
||||
void addCamera( CameraKind k, osg::Camera* c, bool fs ) { cameras[k].camera = c; cameras[k].fullscreen = fs; }
|
||||
void addCamera( CameraKind k, osg::Camera* c, float s ) { cameras[k].camera = c; cameras[k].scaleFactor = s; }
|
||||
osg::Camera* getCamera(CameraKind k) const;
|
||||
void addCamera( const std::string& k, osg::Camera* c, int si = -1, bool fs = false ) { cameras[k].camera = c; cameras[k].slaveIndex = si; cameras[k].fullscreen = fs; }
|
||||
void addCamera( const std::string& k, osg::Camera* c, bool fs ) { cameras[k].camera = c; cameras[k].fullscreen = fs; }
|
||||
void addCamera( const std::string& k, osg::Camera* c, float s ) { cameras[k].camera = c; cameras[k].scaleFactor = s; }
|
||||
osg::Camera* getCamera(const std::string& k) const;
|
||||
int getMainSlaveIndex() const;
|
||||
RenderStageInfo& getRenderStageInfo( CameraKind k ) { return cameras[k]; }
|
||||
RenderStageInfo& getRenderStageInfo( const std::string& k ) { return cameras[k]; }
|
||||
|
||||
/** the buffer objects
|
||||
*/
|
||||
|
|
|
@ -686,7 +686,7 @@ FGRenderer::buildClassicalPipeline(flightgear::CameraGroup* cgroup, unsigned fla
|
|||
|
||||
class FGDeferredRenderingCameraCullCallback : public osg::NodeCallback {
|
||||
public:
|
||||
FGDeferredRenderingCameraCullCallback( flightgear::CameraKind k, CameraInfo* i ) : kind( k ), info( i ) {}
|
||||
FGDeferredRenderingCameraCullCallback( const std::string& k, CameraInfo* i ) : kind( k ), info( i ) {}
|
||||
virtual void operator()( osg::Node *n, osg::NodeVisitor *nv) {
|
||||
simgear::EffectCullVisitor* cv = dynamic_cast<simgear::EffectCullVisitor*>(nv);
|
||||
osg::Camera* camera = static_cast<osg::Camera*>(n);
|
||||
|
@ -749,7 +749,7 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
flightgear::CameraKind kind;
|
||||
std::string kind;
|
||||
CameraInfo* info;
|
||||
};
|
||||
|
||||
|
@ -789,7 +789,7 @@ void buildDeferredBuffers( flightgear::CameraInfo* info, int shadowMapSize, bool
|
|||
info->getBuffer("shadow")->setTextureSize(shadowMapSize,shadowMapSize);
|
||||
}
|
||||
|
||||
void attachBufferToCamera( flightgear::CameraInfo* info, osg::Camera* camera, osg::Camera::BufferComponent c, flightgear::CameraKind ck, const std::string& bk )
|
||||
void attachBufferToCamera( flightgear::CameraInfo* info, osg::Camera* camera, osg::Camera::BufferComponent c, const std::string& ck, const std::string& bk )
|
||||
{
|
||||
camera->attach( c, info->getBuffer(bk) );
|
||||
info->getRenderStageInfo(ck).buffers.insert( std::make_pair( c, bk ) );
|
||||
|
|
Loading…
Reference in a new issue