Assertion error when the CEGUI::System object is destroyed
Posted: Mon Jul 03, 2006 14:50
Hi all!
I've decided to use CEGUI (v0.5 RC1) as GUI renderer
for my new game engine. I wrote a small GuiManager
for my engine and CEGUI works perfectly with the
rest of the Engine, except one thing. When I get an
assertion error when I try to delete the CEGUI::System
object...
Here is my code:
any ideas on what could be wrong?
I've decided to use CEGUI (v0.5 RC1) as GUI renderer
for my new game engine. I wrote a small GuiManager
for my engine and CEGUI works perfectly with the
rest of the Engine, except one thing. When I get an
assertion error when I try to delete the CEGUI::System
object...
Here is my code:
Code: Select all
File: GuiManager.h
#ifndef GuiManager_h
#define GuiManager_h
#include "Common.h"
namespace Zephyr
{
class ZephyrExport GuiManager
{
protected:
static GuiManager *mGuiMgr;
public:
//Klassens konstruerare
GuiManager();
//Klassens destruerare
~GuiManager();
//Metod för att initiera GuiManagern
void initialize();
//Låter dig välja ett GUI-schema
void setScheme(const CEGUI::String scheme = "TaharezLookSkin.scheme");
//Låter dig välja en Font
void setFont(const CEGUI::String font = "Iconified-12.font");
//Låter dig välja en standardmuspekarikon
void setDefaultMouseCursor(const CEGUI::String imageSet = "TaharezLook", const CEGUI::String imageName = "MouseArrow");
void loadLayout(const CEGUI::String name);
//Skapar en GUI-ruta
void createGuiWindow(const CEGUI::String type = "DefaultGUISheet", const CEGUI::String name = "RootWindow");
void showMouseCursor(bool show);
CEGUI::Renderer* getCEGUIRenderer();
static GuiManager* getSingletonPtr();
protected:
};
}
#endif
Code: Select all
File: GuiManager.cpp
#include "GuiManager.h"
#include "Global.h"
namespace Zephyr
{
GuiManager* GuiManager::mGuiMgr;
GuiManager::GuiManager()
{
global->mGuiRenderer = 0;
global->mGuiSystem = 0;
global->mGuiWindow = 0;
}
GuiManager::~GuiManager()
{
if(global->mGuiSystem)
{
delete global->mGuiSystem;
global->mGuiSystem = 0;
}
if(global->mGuiRenderer)
{
delete global->mGuiRenderer;
global->mGuiRenderer = 0;
}
delete CEGUI::System::getSingletonPtr();
Ogre::LogManager::getSingleton().logMessage("Zephyr 2 SubSystem: CEGUI unloaded... ");
}
void GuiManager::initialize()
{
//CEGUI
//Den här koden initierar vår GUI-motor
global->mGuiRenderer = new CEGUI::OgreCEGUIRenderer(global->mWindow,Ogre::RENDER_QUEUE_OVERLAY, false, 0, global->mSceneMgr);
global->mGuiSystem = new CEGUI::System(global->mGuiRenderer);
//new CEGUI::System(global->mGuiRenderer);
global->mGuiWindowMgr = &CEGUI::WindowManager::getSingleton();
CEGUI::Logger::getSingleton().setLoggingLevel(CEGUI::Insane);
Ogre::LogManager::getSingleton().logMessage("Zephyr2 SubSystem: CEGUI initialized... ");
}
void GuiManager::setScheme(const CEGUI::String scheme)
{
//Laddar ett schema för spelets GUI
CEGUI::SchemeManager::getSingleton().loadScheme(scheme);
}
void GuiManager::loadLayout(const CEGUI::String name)
{
}
void GuiManager::setDefaultMouseCursor(const CEGUI::String imageSet, const CEGUI::String imageName)
{
//Väljer en standardmuspekare
//global->mGuiSystem->setDefaultMouseCursor(imageSet,imageName);
CEGUI::System::getSingleton().setDefaultMouseCursor(imageSet,imageName);
}
void GuiManager::setFont(const CEGUI::String font)
{
//Skapar en font från en fil
CEGUI::FontManager::getSingleton().createFont(font);
//global->mGuiSystem->setDefaultFont((CEGUI::utf8*)font.c_str());
}
void GuiManager::createGuiWindow(const CEGUI::String type, const CEGUI::String name)
{
//Skapar en gui-ruta
//global->mGuiWindow = global->mGuiWindowMgr->createWindow(type,name);
global->mGuiWindow = global->mGuiWindowMgr->loadWindowLayout((CEGUI::utf8*)"Zephyr2MainLayout.layout");
//global->mGuiSystem->setGUISheet(global->mGuiWindow);
CEGUI::System::getSingletonPtr()->setGUISheet(global->mGuiWindow);
}
CEGUI::Renderer* GuiManager::getCEGUIRenderer()
{
return global->mGuiRenderer;
}
void GuiManager::showMouseCursor(bool show)
{
if(show)
{
CEGUI::MouseCursor::getSingleton().show();
}
else
{
CEGUI::MouseCursor::getSingleton().hide();
}
}
GuiManager* GuiManager::getSingletonPtr()
{
if(!mGuiMgr)
{
mGuiMgr = new GuiManager();
}
return mGuiMgr;
}
}
any ideas on what could be wrong?