ref_ptr<WindowBuilder> WindowBuilder::windowBuilder;
+const string WindowBuilder::defaultWindowName("FlightGear");
+
void WindowBuilder::initWindowBuilder(bool stencil)
{
windowBuilder = new WindowBuilder(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;
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;
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()) {
if (traitsSet) {
GraphicsContext* gc = GraphicsContext::createGraphicsContext(traits);
if (gc) {
- gc->realize();
GraphicsWindow* window = WindowSystemAdapter::getWSA()
->registerWindow(gc, traits->windowName);
if (drawGUI)
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;
}
}