Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Apr 28, 2011, 7:15:14 AM (13 years ago)
Author:
rgrieder
Message:

Merged kicklib2 branch back to trunk (includes former branches ois_update, mac_osx and kicklib).

Notes for updating

Linux:
You don't need an extra package for CEGUILua and Tolua, it's already shipped with CEGUI.
However you do need to make sure that the OgreRenderer is installed too with CEGUI 0.7 (may be a separate package).
Also, Orxonox now recognises if you install the CgProgramManager (a separate package available on newer Ubuntu on Debian systems).

Windows:
Download the new dependency packages versioned 6.0 and use these. If you have problems with that or if you don't like the in game console problem mentioned below, you can download the new 4.3 version of the packages (only available for Visual Studio 2005/2008).

Key new features:

  • *Support for Mac OS X*
  • Visual Studio 2010 support
  • Bullet library update to 2.77
  • OIS library update to 1.3
  • Support for CEGUI 0.7 —> Support for Arch Linux and even SuSE
  • Improved install target
  • Compiles now with GCC 4.6
  • Ogre Cg Shader plugin activated for Linux if available
  • And of course lots of bug fixes

There are also some regressions:

  • No support for CEGUI 0.5, Ogre 1.4 and boost 1.35 - 1.39 any more
  • In game console is not working in main menu for CEGUI 0.7
  • Tolua (just the C lib, not the application) and CEGUILua libraries are no longer in our repository. —> You will need to get these as well when compiling Orxonox
  • And of course lots of new bugs we don't yet know about
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/libraries/core/GUIManager.cc

    r8079 r8351  
    3030#include "GUIManager.h"
    3131
     32#include <memory>
    3233#include <boost/bind.hpp>
    33 #include <memory>
     34#include <OgreRenderQueue.h>
     35#include <OgreRenderWindow.h>
    3436
    3537#include <CEGUIDefaultLogger.h>
     
    4345#include <elements/CEGUIListbox.h>
    4446#include <elements/CEGUIListboxItem.h>
    45 #include <ogreceguirenderer/OgreCEGUIRenderer.h>
    46 
    47 #include "SpecialConfig.h" // Configures the macro below
    48 #ifdef CEGUILUA_USE_INTERNAL_LIBRARY
    49 #   include <ceguilua/CEGUILua.h>
    50 #else
    51 #   include <CEGUILua.h>
     47
     48#ifdef ORXONOX_OLD_CEGUI
     49#  include <CEGUILua.h>
     50#  include <ogreceguirenderer/OgreCEGUIRenderer.h>
     51extern "C" {
     52#  include <lauxlib.h>
     53}
     54#else
     55#  include <ScriptingModules/LuaScriptModule/CEGUILua.h>
     56#  include <RendererModules/Ogre/CEGUIOgreImageCodec.h>
     57#  include <RendererModules/Ogre/CEGUIOgreRenderer.h>
     58#  include <RendererModules/Ogre/CEGUIOgreResourceProvider.h>
     59#  include <OgreCamera.h>
     60#  include <OgreRenderQueueListener.h>
     61#  include <OgreSceneManager.h>
    5262#endif
    5363
     
    8999                case CEGUI::Informative: orxonoxLevel = 5; break;
    90100                case CEGUI::Insane:      orxonoxLevel = 6; break;
    91                 default: OrxAssert(false, "CEGUI log level out of range, inpect immediately!");
     101                default: OrxAssert(false, "CEGUI log level out of range, inspect immediately!");
    92102            }
    93103            OutputHandler::getOutStream(orxonoxLevel)
     
    97107        }
    98108    };
     109
     110#ifdef ORXONOX_OLD_CEGUI
     111    /** Class with the same memory layout as CEGUI::LuaScriptModule. <br>
     112        We need this to fix a problem with an uninitialised member variable
     113        in CEGUI < 0.7 <br>
     114        Notice the "public" modifier for the otherwise private variables.
     115    */
     116    class LuaScriptModuleWorkaround : public CEGUI::ScriptModule
     117    {
     118    public:
     119        LuaScriptModuleWorkaround();
     120        ~LuaScriptModuleWorkaround();
     121
     122    public:
     123        bool d_ownsState;
     124        lua_State* d_state;
     125        CEGUI::String d_errFuncName;
     126        int d_errFuncIndex;
     127        CEGUI::String d_activeErrFuncName;
     128        int d_activeErrFuncIndex;
     129    };
     130#else
     131    /// RenderQueueListener based class used to hook into the ogre rendering system
     132    class RQListener : public Ogre::RenderQueueListener
     133    {
     134    public:
     135        /// Callback from Ogre invoked before other stuff in our target queue is rendered
     136        void renderQueueEnded(Ogre::uint8 id, const Ogre::String& invocation, bool& skipThisQueue)
     137        {
     138            if (id == Ogre::RENDER_QUEUE_SKIES_LATE)//Ogre::RENDER_QUEUE_OVERLAY)
     139                CEGUI::System::getSingleton().renderGUI();
     140        }
     141    };
     142#endif
    99143
    100144    static CEGUI::MouseButton convertButton(MouseButtonCode::ByEnum button);
     
    118162    */
    119163    GUIManager::GUIManager(const std::pair<int, int>& mousePosition)
    120         : resourceProvider_(NULL)
     164        : destroyer_(*this, &GUIManager::cleanup)
     165        , guiRenderer_(NULL)
     166        , resourceProvider_(NULL)
     167#ifndef ORXONOX_OLD_CEGUI
     168        , imageCodec_(NULL)
     169#endif
     170        , luaState_(NULL)
     171        , scriptModule_(NULL)
     172        , guiSystem_(NULL)
    121173        , camera_(NULL)
    122174    {
     
    129181
    130182        // Note: No SceneManager specified yet
    131         guiRenderer_.reset(new OgreCEGUIRenderer(GraphicsManager::getInstance().getRenderWindow(), Ogre::RENDER_QUEUE_OVERLAY, false, 3000));
     183#ifdef ORXONOX_OLD_CEGUI
     184        guiRenderer_ = new OgreCEGUIRenderer(GraphicsManager::getInstance().getRenderWindow(), Ogre::RENDER_QUEUE_OVERLAY, false, 3000);
    132185        resourceProvider_ = guiRenderer_->createResourceProvider();
     186#else
     187        guiRenderer_ = &OgreRenderer::create(*GraphicsManager::getInstance().getRenderWindow());
     188        // We use our own RenderQueueListener so we can draw UNDER overlays
     189        guiRenderer_->setFrameControlExecutionEnabled(false);
     190        rqListener_ = new RQListener();
     191        resourceProvider_ = &OgreRenderer::createOgreResourceProvider();
     192        imageCodec_ = &OgreRenderer::createOgreImageCodec();
     193#endif
    133194        resourceProvider_->setDefaultResourceGroup("General");
    134195
    135196        // Setup scripting
    136         luaState_.reset(new LuaState());
     197        luaState_ = new LuaState();
    137198        rootFileInfo_ = Resource::getInfo("InitialiseGUI.lua");
    138199        // This is necessary to ensure that input events also use the right resource info when triggering lua functions
    139200        luaState_->setDefaultResourceInfo(this->rootFileInfo_);
    140         scriptModule_.reset(new LuaScriptModule(luaState_->getInternalLuaState()));
     201#ifdef ORXONOX_OLD_CEGUI
     202        scriptModule_ = new LuaScriptModule(luaState_->getInternalLuaState());
     203        // Ugly workaround: older CEGUILua versions don't initialise the member
     204        // d_activeErrFuncIndex at all. That leads to "error in error handling"
     205        // problems when a Lua error occurs.
     206        // We fix this by setting the member manually.
     207        reinterpret_cast<LuaScriptModuleWorkaround*>(scriptModule_)->d_activeErrFuncIndex = LUA_NOREF;
     208        luaState_->doString("ORXONOX_OLD_CEGUI = true");
     209#else
     210        scriptModule_ = &LuaScriptModule::create(luaState_->getInternalLuaState());
     211#endif
    141212        scriptModule_->setDefaultPCallErrorHandler(LuaState::ERROR_HANDLER_NAME);
    142213
     
    144215        std::auto_ptr<CEGUILogger> ceguiLogger(new CEGUILogger());
    145216        ceguiLogger->setLogFilename(PathConfig::getLogPathString() + "cegui.log");
    146         // set the log level according to ours (translate by subtracting 1)
     217        // Set the log level according to ours (translate by subtracting 1)
    147218        ceguiLogger->setLoggingLevel(
    148219            static_cast<LoggingLevel>(OutputHandler::getInstance().getSoftDebugLevel("logFile") - 1));
     
    150221
    151222        // Create the CEGUI system singleton
    152         guiSystem_.reset(new System(guiRenderer_.get(), resourceProvider_, 0, scriptModule_.get()));
     223#ifdef ORXONOX_OLD_CEGUI
     224        guiSystem_ = new System(guiRenderer_, resourceProvider_, 0, scriptModule_);
     225        // Add functions that have been renamed in newer versions
     226        luaState_->doString("CEGUI.SchemeManager.create = CEGUI.SchemeManager.loadScheme");
     227        luaState_->doString("CEGUI.Window.getUnclippedOuterRect = CEGUI.Window.getUnclippedPixelRect");
     228#else
     229        guiSystem_ = &System::create(*guiRenderer_, resourceProvider_, 0, imageCodec_, scriptModule_);
     230#endif
    153231
    154232        // Align CEGUI mouse with OIS mouse
     
    175253    }
    176254
    177     /**
    178     @brief
    179         Basically shuts down CEGUI (member smart pointers) but first unloads our Tolua modules.
    180     */
    181     GUIManager::~GUIManager()
    182     {
     255    void GUIManager::cleanup()
     256    {
     257        using namespace CEGUI;
     258
     259#ifdef ORXONOX_OLD_CEGUI
     260        delete guiSystem_;
     261        delete guiRenderer_;
     262        delete scriptModule_;
     263#else
     264        System::destroy();
     265        OgreRenderer::destroyOgreResourceProvider(*resourceProvider_);
     266        OgreRenderer::destroyOgreImageCodec(*imageCodec_);
     267        OgreRenderer::destroy(*guiRenderer_);
     268        LuaScriptModule::destroy(*scriptModule_);
     269        delete ceguiLogger_;
     270        delete rqListener_;
     271#endif
     272        delete luaState_;
    183273    }
    184274
     
    221311    void GUIManager::setCamera(Ogre::Camera* camera)
    222312    {
    223         this->camera_ = camera;
     313#ifdef ORXONOX_OLD_CEGUI
    224314        if (camera == NULL)
    225315            this->guiRenderer_->setTargetSceneManager(0);
    226316        else
    227317            this->guiRenderer_->setTargetSceneManager(camera->getSceneManager());
     318#else
     319        if (camera_ != NULL && camera_->getSceneManager() != NULL)
     320            camera_->getSceneManager()->removeRenderQueueListener(rqListener_);
     321        if (camera != NULL && camera->getSceneManager() != NULL)
     322            camera->getSceneManager()->addRenderQueueListener(rqListener_);
     323#endif
     324        this->camera_ = camera;
    228325    }
    229326
     
    321418        false                     | False | True  | Dontcare
    322419        */
     420
     421#ifdef ORXONOX_PLATFORM_APPLE
     422        // There is no non exclusive mode on OS X yet
     423        state->setMouseExclusive(TriBool::True);
     424#else
    323425        if (showCursor == TriBool::Dontcare)
    324426            state->setMouseExclusive(TriBool::Dontcare);
     
    327429        else
    328430            state->setMouseExclusive(TriBool::False);
     431#endif
    329432
    330433        if (showCursor == TriBool::True)
     
    522625        The Listbox for which to enable (or disable) tooltips.
    523626    @param enabled
    524         Whether to enable or disabel the tooltips.
     627        Whether to enable or disable the tooltips.
    525628    */
    526629    void GUIManager::setItemTooltipsEnabledHelper(CEGUI::Listbox* listbox, bool enabled)
Note: See TracChangeset for help on using the changeset viewer.