#include <Main/locale.hxx>
#include <Main/fg_props.hxx>
#include <Viewer/WindowSystemAdapter.hxx>
+#include <Viewer/CameraGroup.hxx>
#include <GUI/new_gui.hxx>
#include <GUI/FGFontCache.hxx>
}
};
-osg::ref_ptr<GUIInitOperation> initOp;
-}
+// Operation for querying OpenGL parameters. This must be done in a
+// valid OpenGL context, potentially in another thread.
-void guiStartInit(osg::GraphicsContext* gc)
+struct GeneralInitOperation : public GraphicsContextOperation
{
- if (gc) {
- initOp = new GUIInitOperation;
- gc->add(initOp.get());
+ GeneralInitOperation()
+ : GraphicsContextOperation(std::string("General init"))
+ {
}
+ void run(osg::GraphicsContext* gc)
+ {
+ SGPropertyNode* simRendering = fgGetNode("/sim/rendering");
+
+ simRendering->setStringValue("gl-vendor", (char*) glGetString(GL_VENDOR));
+ SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_VENDOR));
+
+ simRendering->setStringValue("gl-renderer", (char*) glGetString(GL_RENDERER));
+ SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_RENDERER));
+
+ simRendering->setStringValue("gl-version", (char*) glGetString(GL_VERSION));
+ SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_VERSION));
+
+ simRendering->setStringValue("gl-shading-language-version", (char*) glGetString(GL_SHADING_LANGUAGE_VERSION));
+ SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_SHADING_LANGUAGE_VERSION));
+
+ GLint tmp;
+ glGetIntegerv( GL_MAX_TEXTURE_SIZE, &tmp );
+ simRendering->setIntValue("max-texture-size", tmp);
+
+ glGetIntegerv( GL_DEPTH_BITS, &tmp );
+ simRendering->setIntValue("depth-buffer-bits", tmp);
+ }
+};
+
+osg::ref_ptr<GUIInitOperation> initOp;
+
}
-bool guiFinishInit()
+/** Initializes GUI.
+ * Returns true when done, false when still busy (call again). */
+bool guiInit()
{
- if (!initOp.valid())
+ static osg::ref_ptr<GeneralInitOperation> genOp;
+
+ if (!genOp.valid())
+ {
+ // Pick some window on which to do queries.
+ // XXX Perhaps all this graphics initialization code should be
+ // moved to renderer.cxx?
+ genOp = new GeneralInitOperation;
+ osg::Camera* guiCamera = getGUICamera(CameraGroup::getDefault());
+ WindowSystemAdapter* wsa = WindowSystemAdapter::getWSA();
+ osg::GraphicsContext* gc = 0;
+ if (guiCamera)
+ gc = guiCamera->getGraphicsContext();
+ if (gc) {
+ gc->add(genOp.get());
+ initOp = new GUIInitOperation;
+ gc->add(initOp.get());
+ } else {
+ wsa->windows[0]->gc->add(genOp.get());
+ }
+ return false; // not ready yet
+ }
+ else
+ {
+ if (!genOp->isFinished())
+ return false;
+ if (!initOp.valid())
+ return true;
+ if (!initOp->isFinished())
+ return false;
+ genOp = 0;
+ initOp = 0;
+ // we're done
return true;
- if (!initOp->isFinished())
- return false;
- initOp = 0;
- return true;
+ }
}
-
class GraphicsContext;
}
// gui.cxx
-extern void guiStartInit(osg::GraphicsContext*);
-extern bool guiFinishInit();
+extern bool guiInit();
extern bool openBrowser(const std::string& address);
extern void mkDialog(const char *txt);
extern void guiErrorMessage(const char *txt);
#include <Sound/soundmanager.hxx>
#include <Time/TimeManager.hxx>
#include <GUI/gui.h>
-#include <Viewer/CameraGroup.hxx>
-#include <Viewer/WindowSystemAdapter.hxx>
#include <Viewer/splash.hxx>
#include <Viewer/renderer.hxx>
#include <Navaids/NavDataCache.hxx>
SG_LOG( SG_GENERAL, SG_DEBUG, "" );
}
-// Operation for querying OpenGL parameters. This must be done in a
-// valid OpenGL context, potentially in another thread.
-namespace
-{
-struct GeneralInitOperation : public GraphicsContextOperation
-{
- GeneralInitOperation()
- : GraphicsContextOperation(std::string("General init"))
- {
- }
- void run(osg::GraphicsContext* gc)
- {
- SGPropertyNode* simRendering = fgGetNode("/sim/rendering");
-
- simRendering->setStringValue("gl-vendor", (char*) glGetString(GL_VENDOR));
- SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_VENDOR));
-
- simRendering->setStringValue("gl-renderer", (char*) glGetString(GL_RENDERER));
- SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_RENDERER));
-
- simRendering->setStringValue("gl-version", (char*) glGetString(GL_VERSION));
- SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_VERSION));
-
- simRendering->setStringValue("gl-shading-language-version", (char*) glGetString(GL_SHADING_LANGUAGE_VERSION));
- SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_SHADING_LANGUAGE_VERSION));
-
- GLint tmp;
- glGetIntegerv( GL_MAX_TEXTURE_SIZE, &tmp );
- simRendering->setIntValue("max-texture-size", tmp);
-
- glGetIntegerv( GL_DEPTH_BITS, &tmp );
- simRendering->setIntValue("depth-buffer-bits", tmp);
- }
-};
-
-}
// This is the top level master main function that is registered as
// our idle function
// splash screen up and running right away.
static int idle_state = 0;
- static osg::ref_ptr<GeneralInitOperation> genOp;
if ( idle_state == 0 ) {
- idle_state++;
- // Pick some window on which to do queries.
- // XXX Perhaps all this graphics initialization code should be
- // moved to renderer.cxx?
- genOp = new GeneralInitOperation;
- osg::Camera* guiCamera = getGUICamera(CameraGroup::getDefault());
- WindowSystemAdapter* wsa = WindowSystemAdapter::getWSA();
- osg::GraphicsContext* gc = 0;
- if (guiCamera)
- gc = guiCamera->getGraphicsContext();
- if (gc) {
- gc->add(genOp.get());
- } else {
- wsa->windows[0]->gc->add(genOp.get());
+ if (guiInit())
+ {
+ idle_state+=2;
+ fgSplashProgress("loading-aircraft-list");
}
- guiStartInit(gc);
- } else if ( idle_state == 1 ) {
- if (genOp.valid()) {
- if (!genOp->isFinished())
- return;
- genOp = 0;
- }
- if (!guiFinishInit())
- return;
- idle_state++;
- fgSplashProgress("loading-aircraft-list");
} else if ( idle_state == 2 ) {
idle_state++;