]> git.mxchange.org Git - flightgear.git/commitdiff
Update osg::Camera's viewport when it is created.
authortimoore <timoore>
Wed, 19 Nov 2008 22:55:42 +0000 (22:55 +0000)
committertimoore <timoore>
Wed, 19 Nov 2008 22:55:42 +0000 (22:55 +0000)
This fixes a problem where /sim/startup/[xy]size were not set properly
because the GUI camera's viewport was not correct at startup.

src/Main/CameraGroup.cxx
src/Main/CameraGroup.hxx

index 46ae0faeacca9fd7612996280fc0d72d3f089062..d08948b140849a4b73c6d82262ed6e7cf9c8ebc4 100644 (file)
@@ -112,6 +112,16 @@ void installCullVisitor(Camera* camera)
 
 namespace flightgear
 {
+void updateCameras(const CameraInfo* info)
+{
+    if (info->camera.valid())
+        info->camera->getViewport()->setViewport(info->x, info->y,
+                                                 info->width, info->height);
+    if (info->farCamera.valid())
+        info->farCamera->getViewport()->setViewport(info->x, info->y,
+                                                    info->width, info->height);
+}
+
 CameraInfo* CameraGroup::addCamera(unsigned flags, Camera* camera,
                                    const Matrix& view,
                                    const Matrix& projection,
@@ -156,9 +166,9 @@ void CameraGroup::update(const osg::Vec3d& position,
     for (CameraList::iterator i = _cameras.begin(); i != _cameras.end(); ++i) {
         const CameraInfo* info = i->get();
         const View::Slave& slave = _viewer->getSlave(info->slaveIndex);
+        // refreshes camera viewports (for now)
+        updateCameras(info);
         Camera* camera = info->camera.get();
-        camera->getViewport()->setViewport(info->x, info->y, info->width,
-                                           info->height);
         Matrix viewMatrix;
         if ((info->flags & VIEW_ABSOLUTE) != 0)
             viewMatrix = slave._viewOffset;
@@ -175,8 +185,6 @@ void CameraGroup::update(const osg::Vec3d& position,
             camera->setProjectionMatrix(projectionMatrix);
         } else {
             Camera* farCamera = info->farCamera.get();
-            farCamera->getViewport()->setViewport(info->x, info->y, info->width,
-                                                  info->height);
             farCamera->setViewMatrix(viewMatrix);
             double left, right, bottom, top, parentNear, parentFar;
             projectionMatrix.getFrustum(left, right, bottom, top,
@@ -415,6 +423,7 @@ CameraInfo* CameraGroup::buildGUICamera(SGPropertyNode* cameraNode,
 
     // Disable statistics for the GUI camera.
     result->camera->setStats(0);
+    updateCameras(result);
     return result;
 }
 
index a9e9b6973481126fdb6f98f828a6f42f9dcb8235..d44b902266aefc239b90f984329dc13a57ca6999 100644 (file)
@@ -76,6 +76,10 @@ struct CameraInfo : public osg::Referenced
     double height;
 };
 
+/** Update the OSG cameras from the camera info.
+ */
+void updateCameras(const CameraInfo* info);
+
 class CameraGroup : public osg::Referenced
 {
 public: