]> git.mxchange.org Git - flightgear.git/commitdiff
Move GUI init code to gui module.
authorThorstenB <brehmt@gmail.com>
Tue, 25 Sep 2012 20:39:13 +0000 (22:39 +0200)
committerThorstenB <brehmt@gmail.com>
Tue, 25 Sep 2012 20:39:13 +0000 (22:39 +0200)
src/GUI/gui.cxx
src/GUI/gui.h
src/Main/main.cxx

index f9a16925973c0dc504ba5ceb11aebe5e3e378000..2f9192fe49077b05f8e723a231e764a1c1664a23 100644 (file)
@@ -44,6 +44,7 @@
 #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>
 
@@ -97,24 +98,81 @@ public:
     }
 };
 
-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;
+    }
 }
-
index cc523f756ac910dda27c93b5fbf1cb432c1620a8..c191c15d91f44673d38e3b099ebfc238936b42f5 100644 (file)
@@ -40,8 +40,7 @@ namespace osg
 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);
index 686585560d0c1f544e11a6eef6adc3302f1dafec..689e33aa6a17069cc520d68648755f1c9b26b1c0 100644 (file)
@@ -55,8 +55,6 @@
 #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>
@@ -105,42 +103,6 @@ static void fgMainLoop( void )
     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
@@ -155,34 +117,12 @@ static void fgIdleFunction ( void ) {
     // 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++;