]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/WindowBuilder.cxx
Support scenery reloading (needs simgear update).
[flightgear.git] / src / Main / WindowBuilder.cxx
index aaabbb2dbb58734e82b05e7f8efb6693ad5a7e03..740671cd56884ec00eceeca3238ded3ddca801aa 100644 (file)
@@ -35,6 +35,8 @@ string makeName(const string& prefix, int num)
 
 ref_ptr<WindowBuilder> WindowBuilder::windowBuilder;
 
+const string WindowBuilder::defaultWindowName("FlightGear");
+
 void WindowBuilder::initWindowBuilder(bool stencil)
 {
     windowBuilder = new WindowBuilder(stencil);
@@ -58,6 +60,10 @@ WindowBuilder::makeDefaultTraits(bool stencil)
 
     GraphicsContext::Traits* traits = new osg::GraphicsContext::Traits;
     traits->readDISPLAY();
+    if (traits->displayNum < 0)
+        traits->displayNum = 0;
+    if (traits->screenNum < 0)
+        traits->screenNum = 0;
     int cbits = (bpp <= 16) ?  5 :  8;
     int zbits = (bpp <= 16) ? 16 : 24;
     traits->red = traits->green = traits->blue = cbits;
@@ -71,7 +77,7 @@ WindowBuilder::makeDefaultTraits(bool stencil)
     traits->windowName = "FlightGear";
     // XXX should check per window too.
     traits->sampleBuffers = fgGetBool("/sim/rendering/multi-sample-buffers", traits->sampleBuffers);
-    traits->samples = fgGetBool("/sim/rendering/multi-samples", traits->samples);
+    traits->samples = fgGetInt("/sim/rendering/multi-samples", traits->samples);
     traits->vsync = fgGetBool("/sim/rendering/vsync-enable", traits->vsync);
     if (fullscreen) {
         unsigned width = 0;
@@ -146,7 +152,7 @@ GraphicsWindow* WindowBuilder::buildWindow(const SGPropertyNode* winNode)
     string windowName;
     if (winNode->hasChild("window-name"))
         windowName = winNode->getStringValue("window-name");
-    else if (winNode->hasChild("name")) 
+    else if (winNode->hasChild("name"))
         windowName = winNode->getStringValue("name");
     GraphicsWindow* result = 0;
     if (!windowName.empty()) {
@@ -194,7 +200,6 @@ GraphicsWindow* WindowBuilder::buildWindow(const SGPropertyNode* winNode)
     if (traitsSet) {
         GraphicsContext* gc = GraphicsContext::createGraphicsContext(traits);
         if (gc) {
-            gc->realize();
             GraphicsWindow* window = WindowSystemAdapter::getWSA()
                 ->registerWindow(gc, traits->windowName);
             if (drawGUI)
@@ -204,24 +209,29 @@ GraphicsWindow* WindowBuilder::buildWindow(const SGPropertyNode* winNode)
             return 0;
         }
     } else {
+        // XXX What if the window has no traits, but does have a name?
+        // We should create a "default window" registered with that name.
         return getDefaultWindow();
     }
 }
 
 GraphicsWindow* WindowBuilder::getDefaultWindow()
 {
-    if (defaultWindow.valid())
-        return defaultWindow.get();
+    GraphicsWindow* defaultWindow
+        = WindowSystemAdapter::getWSA()->findWindow(defaultWindowName);
+    if (defaultWindow)
+        return defaultWindow;
     GraphicsContext::Traits* traits
         = new GraphicsContext::Traits(*defaultTraits);
     traits->windowName = "FlightGear";
+    
     GraphicsContext* gc = GraphicsContext::createGraphicsContext(traits);
     if (gc) {
-        gc->realize();
         defaultWindow = WindowSystemAdapter::getWSA()
-            ->registerWindow(gc, traits->windowName);
-        return defaultWindow.get();
+            ->registerWindow(gc, defaultWindowName);
+        return defaultWindow;
     } else {
+        SG_LOG(SG_GENERAL, SG_ALERT, "getDefaultWindow: failed to create GraphicsContext");
         return 0;
     }
 }