problem close CEGUI

For help with general CEGUI usage:
- Questions about the usage of CEGUI and its features, if not explained in the documentation.
- Problems with the CMAKE configuration or problems occuring during the build process/compilation.
- Errors or unexpected behaviour.

Moderators: CEGUI MVP, CEGUI Team

alejo_cadavid
Just popping in
Just popping in
Posts: 8
Joined: Tue Jul 25, 2006 23:57
Location: Colombia
Contact:

problem close CEGUI

Postby alejo_cadavid » Thu Aug 10, 2006 04:26

Hi...

I get a Windows error when close my application with CEGUI...

Logs doesn't have errors but appear two leaks:

Code: Select all

Alloc.   Addr       Size       Addr       Size                        BreakOn BreakOn             
Number Reported   Reported    Actual     Actual     Unused    Method  Dealloc Realloc Allocated by
------ ---------- ---------- ---------- ---------- ---------- -------- ------- ------- ---------------------------------------------------
033946 0x01370480 0x00000160 0x01370470 0x00000180 0x00000000 new         N       N    ogrewin32platformdll.cpp(91) Ogre::createPlatformInputReader
033947 0x013BC038 0x00000014 0x013BC028 0x00000034 0x00000000 new         N       N    ??(0) ??


I think that something's wrong destroying CEGUI window...

Code: Select all

mSceneMgr->clearScene();
   mSceneMgr->destroyAllCameras();
   mRoot->getAutoCreatedWindow()->removeAllViewports();
   if(mEditorGuiSheet)
    {   CEGUI::WindowManager::getSingleton().destroyWindow(mEditorGuiSheet);
    }
   if(mGUISystem)
    {   delete mGUISystem;
        mGUISystem = 0;
    }
    if(mGUIRenderer)
    {   delete mGUIRenderer;
        mGUIRenderer = 0;
    }


Thanks...

mustill
Just popping in
Just popping in
Posts: 3
Joined: Tue Aug 08, 2006 10:11
Contact:

Postby mustill » Thu Aug 10, 2006 06:11

Hi, I don't see any problem with the code, but I wonder why it is so complicated... I use CEGUI with Ogre as well and all I do to destroy CEGUI is:

Code: Select all

   if (guiSystem) { delete guiSystem; guiSystem = 0; }
   if (guiRenderer) { delete guiRenderer; guiRenderer = 0; }


and everything works fine with no memory leaks. The same I do to destroy Ogre, just :

Code: Select all

   if (ogreRoot) { delete ogreRoot; ogreRoot= 0; }


Hope it helped...

alejo_cadavid
Just popping in
Just popping in
Posts: 8
Joined: Tue Jul 25, 2006 23:57
Location: Colombia
Contact:

problem close CEGUI

Postby alejo_cadavid » Fri Aug 11, 2006 01:23

Hi...

Thanks mustill for your answer...

I really don't close Ogre because this code is only for 1 game state... so, this code segment is ejecuted after to exit of the state...

I clean up cameras, viewport and CEGUI support for the state... Ogre runs the next state (new cameras and viewports but no CEGUI).

This error is generated when i exit Ogre (method CEGUIState::exit())...

Full class code:

Code: Select all

#include <Ogre.h>
#include <OgreKeyEvent.h>

#include "CEGUIState.h"
#include "IntroState.h"

using namespace Ogre;

CEGUIState CEGUIState::mCEGUIState;

void CEGUIState::enter()
{   mInputDevice = InputManager::getSingletonPtr()->getInputDevice();
   mRoot = Root::getSingletonPtr();
   //inicializa Ogre
   mSceneMgr = mRoot->createSceneManager(ST_GENERIC);
   mCamera = mSceneMgr->createCamera("CEGUICamera");
   mViewport = mRoot->getAutoCreatedWindow()->addViewport(mCamera);
   mViewport->setBackgroundColour(ColourValue(1.0, 1.0, 1.0));

   //skydome
   mSceneMgr->setSkyDome(true, "Examples/MenuSky", 10, 8, 1500);
   //sombra por defecto
   mSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_MODULATIVE);

   CEGUIState::iniciarCEGUI();

   //para que el cursor sea visible
   CEGUI::System::getSingleton().injectMouseMove(mInputDevice->getMouseRelativeX(), mInputDevice->getMouseRelativeY());

    //**********elementos GUI de la escena************
   //boton de salida. Nombre: SALIR
   CEGUIState::crearBoton(&salir, CEGUI::Point(0.65, 0.75), CEGUI::Size(0.2, 0.05), "SALIR", true);
   salir->setTooltipText("Salir del Juego");
   //boton de opciones de juego. Nombre: OPCIONES
   CEGUIState::crearBoton(&opciones, CEGUI::Point(0.65, 0.65), CEGUI::Size(0.2, 0.05), "OPCIONES", true);
   opciones->setTooltipText("Opciones de Video");
   //boton de cargar juego. Nombre: CARGAR JUEGO
   CEGUIState::crearBoton(&cargar, CEGUI::Point(0.65, 0.55), CEGUI::Size(0.2, 0.05), "CARGAR JUEGO", true);
   cargar->setTooltipText("Cargar Juego Anterior");
   //boton de iniciar juego. Nombre: INICIAR JUEGO
   CEGUIState::crearBoton(&jugar, CEGUI::Point(0.65, 0.45), CEGUI::Size(0.2, 0.05), "INICIAR JUEGO", true);
   jugar->setTooltipText("Iniciar Nuevo Juego");
   //boton de iniciar aceptar configuracion. Nombre: ACEPTAR
   CEGUIState::crearBoton(&aceptar, CEGUI::Point(0.40, 0.70), CEGUI::Size(0.2, 0.05), "ACEPTAR", false);
   aceptar->setTooltipText("Aceptar Configuracion");
      
   //radioButtons
   //boton de sombra texturizada. Nombre: SIN SOMBRAS
   CEGUIState::crearRadioBoton(&sombra0, CEGUI::UVector2(CEGUI::UDim(0.35, 0.01), CEGUI::UDim(0.3, 0.01)), CEGUI::Size(0.25, 0.075), "SIN SOMBRAS", false, false, 1, 101);
   //boton de sombra texturizada. Nombre: SOMBRAS TEXTURIZADAS
   CEGUIState::crearRadioBoton(&sombra1, CEGUI::UVector2(CEGUI::UDim(0.35, 0.01), CEGUI::UDim(0.35, 0.01)), CEGUI::Size(0.25, 0.075), "SOMBRAS TEXTURIZADAS", false, true, 1, 102);
   //boton de sombra real. Nombre: SOMBRAS REALES
   CEGUIState::crearRadioBoton(&sombra2, CEGUI::UVector2(CEGUI::UDim(0.35, 0.01), CEGUI::UDim(0.40, 0.01)), CEGUI::Size(0.25, 0.075), "SOMBRAS REALES", false, false, 1, 103);

   //textos estaticos
   //texto para configuracion de sombras. Nombre: sombra.
   CEGUIState::crearTexto(&texto1, CEGUI::UVector2(CEGUI::UDim(0.21, 0.01), CEGUI::UDim(0.05, 0.01)), CEGUI::UVector2(CEGUI::UDim(0.45, 0.01), CEGUI::UDim(0.5, 0.01)), "CONFIGURACION DE SOMBRAS", false, "sombra");

   //control de eventos sobre la GUI
   CEGUIState::setupEventos();

   mExitGame = false;
}

void CEGUIState::exit()
{   mSceneMgr->clearScene();
   mSceneMgr->destroyAllCameras();
   mRoot->getAutoCreatedWindow()->removeAllViewports();
   if(mEditorGuiSheet)
    {   CEGUI::WindowManager::getSingleton().destroyWindow(mEditorGuiSheet);
    }
   if(mGUISystem)
    {   delete mGUISystem;
        mGUISystem = 0;
    }
    if(mGUIRenderer)
    {   delete mGUIRenderer;
        mGUIRenderer = 0;
    }
}

void CEGUIState::pause()
{
}

void CEGUIState::resume()
{
}

void CEGUIState::keyClicked(KeyEvent* e)
{
}

void CEGUIState::keyPressed(KeyEvent* e)
{   if (e->getKey() == KC_SPACE)
   {
      changeState(IntroState::getInstance());
   }
   if (e->getKey() == KC_ESCAPE)
   {
      mExitGame = true;
   }
   e->consume();
}

void CEGUIState::keyReleased(KeyEvent* e)
{   //evento de key up
   CEGUI::System::getSingleton().injectKeyUp(e->getKey());
   e->consume();
}

//soporte para mouse
void CEGUIState::mouseMoved(Ogre::MouseEvent* e)
{   CEGUI::System::getSingleton().injectMouseMove(e->getRelX() * mGUIRenderer->getWidth(), e->getRelY() * mGUIRenderer->getHeight());
   e->consume();
}

void CEGUIState::mouseDragged(Ogre::MouseEvent* e)
{   CEGUIState::mouseMoved(e);
}

void CEGUIState::mouseClicked(Ogre::MouseEvent* e)
{
}

void CEGUIState::mouseEntered(Ogre::MouseEvent* e)
{
}

void CEGUIState::mouseExited(Ogre::MouseEvent* e)
{
}

void CEGUIState::mousePressed(Ogre::MouseEvent* e)
{   //evento de mouse down
   CEGUI::System::getSingleton().injectMouseButtonDown(CEGUIState::convertirOgreButtonACegui(e->getButtonID()));
   e->consume();
}

void CEGUIState::mouseReleased(Ogre::MouseEvent* e)
{   //evento de mouse up
   CEGUI::System::getSingleton().injectMouseButtonUp(CEGUIState::convertirOgreButtonACegui(e->getButtonID()));
   e->consume();
}
//soporte para mouse

bool CEGUIState::frameStarted(const FrameEvent& evt)
{   return true;
}

bool CEGUIState::frameEnded(const FrameEvent& evt)
{   if (mExitGame)
      return false;
   return true;
}

void CEGUIState::setupEventos()
{   //manager de ventana
   CEGUI::WindowManager& wmgr = CEGUI::WindowManager::getSingleton();   
   //evento de push button para el boton salir
   wmgr.getWindow((CEGUI::utf8*)"SALIR")->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&CEGUIState::eventoSalir, this));
   //evento de push button para el boton opciones         
   wmgr.getWindow((CEGUI::utf8*)"OPCIONES")->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&CEGUIState::eventoOpciones, this));
   //evento de push button para el boton cargar
   wmgr.getWindow((CEGUI::utf8*)"CARGAR JUEGO")->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&CEGUIState::eventoCargar, this));
   //evento de push button para el boton jugar
   wmgr.getWindow((CEGUI::utf8*)"INICIAR JUEGO")->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&CEGUIState::eventoJugar, this));
   //evento de push button para el boton aceptar
   wmgr.getWindow((CEGUI::utf8*)"ACEPTAR")->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&CEGUIState::eventoAceptar, this));

   //evento de radio button para boton sombra0
   wmgr.getWindow((CEGUI::utf8*)"SIN SOMBRAS")->subscribeEvent(CEGUI::RadioButton::EventSelectStateChanged, CEGUI::Event::Subscriber(&CEGUIState::eventoSombras, this));
   //evento de radio button para boton sombra0
   wmgr.getWindow((CEGUI::utf8*)"SOMBRAS TEXTURIZADAS")->subscribeEvent(CEGUI::RadioButton::EventSelectStateChanged, CEGUI::Event::Subscriber(&CEGUIState::eventoSombras, this));
   //evento de radio button para boton sombra0
   wmgr.getWindow((CEGUI::utf8*)"SOMBRAS REALES")->subscribeEvent(CEGUI::RadioButton::EventSelectStateChanged, CEGUI::Event::Subscriber(&CEGUIState::eventoSombras, this));
}

void CEGUIState::crearTexto(CEGUI::StaticText** id, CEGUI::UVector2 P, CEGUI::UVector2 S, CEGUI::String texto, bool EN, CEGUI::String TextoID)
{   *id = (CEGUI::StaticText*)CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/StaticText", TextoID);
   mEditorGuiSheet->addChildWindow(*id);
   (*id)->setWindowPosition(P);
   (*id)->setWindowSize(S);
   (*id)->setText(texto);
   (*id)->setProperty("FrameEnabled", "false");
   (*id)->setProperty("BackgroundEnabled", "false");
   (*id)->setProperty("HorzFormatting", "WordWrapCentred");
   (*id)->setVisible(EN);
}

void CEGUIState::crearRadioBoton(CEGUI::RadioButton** id, CEGUI::UVector2 P, CEGUI::Size S, CEGUI::String texto, bool EN, bool seleccion, int Grupo, int ID)
{   //creacion de objeto Radio boton
   *id = (CEGUI::RadioButton*)CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/RadioButton", texto);
   //se agrega el boton a la ventana padre de CEGUI
   mEditorGuiSheet->addChildWindow(*id);
   //posicion de boton
   (*id)->setWindowPosition(P);
   //tamaño de boton
   (*id)->setSize(S);
   //texto en boton
   (*id)->setText(texto);
   //id de grupo
   (*id)->setGroupID(Grupo);
   //id de boton en el grupo
   (*id)->setID(ID);
   //seleccion inicial
   (*id)->setSelected(seleccion);
   //visibilidad
   (*id)->setVisible(EN);
}

void CEGUIState::crearBoton(CEGUI::PushButton** id, CEGUI::Point P, CEGUI::Size S, CEGUI::String texto, bool EN)
{   //creacion de objeto boton
   *id = (CEGUI::PushButton*)CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/Button", texto);
   //se agrega el boton a la ventana padre de CEGUI
   mEditorGuiSheet->addChildWindow(*id);
   //posicion de boton
   (*id)->setPosition(P);
   //tamaño de boton
   (*id)->setSize(S);
   //texto en boton
   (*id)->setText(texto);
   //visibilidad
   (*id)->setVisible(EN);
}

void CEGUIState::iniciarCEGUI()
{   //iniciliza la venta de CEGUI
   mGUIRenderer = new CEGUI::OgreCEGUIRenderer(mRoot->getAutoCreatedWindow(), Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mSceneMgr);
   //inicializa el renderer
   mGUISystem = new CEGUI::System(mGUIRenderer);
   //inicializa el log de CEGUI (puede ser tambien Standard, Errors, o Insane)
   CEGUI::Logger::getSingleton().setLoggingLevel(CEGUI::Informative);
   //cargar el esquema, setup de mouse y fuente
   CEGUI::SchemeManager::getSingleton().loadScheme( (CEGUI::utf8*)"TaharezLookSkin.scheme");
   mGUISystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");
   CEGUI::MouseCursor::getSingleton().setImage("TaharezLook", "MouseMoveCursor");
   mGUISystem->setDefaultFont((CEGUI::utf8*)"BlueHighway-12");
   //crea un objeto ventana de CEGUI
   mEditorGuiSheet= CEGUI::WindowManager::getSingleton().createWindow((CEGUI::utf8*)"DefaultWindow", (CEGUI::utf8*)"Sheet");
    //adiciona la ventana al renderer de CEGUI
   mGUISystem->setGUISheet(mEditorGuiSheet);
   //inicializacion de tooltips
   mGUISystem->setTooltip("TaharezLook/Tooltip");
}

//metodo para salir
bool CEGUIState::eventoSalir(const CEGUI::EventArgs& e)
{   mExitGame = true;
   return true;
}
//metodo para opciones
bool CEGUIState::eventoOpciones(const CEGUI::EventArgs& e)
{   jugar->setVisible(false);
   cargar->setVisible(false);
   opciones->setVisible(false);
   salir->setVisible(false);
   aceptar->setVisible(true);
   sombra0->setVisible(true);
   sombra1->setVisible(true);
   sombra2->setVisible(true);
   texto1->setVisible(true);
   return true;
}
//metodo para cargar
bool CEGUIState::eventoCargar(const CEGUI::EventArgs& e)
{   return true;
}
//metodo para jugar
bool CEGUIState::eventoJugar(const CEGUI::EventArgs& e)
{   return true;
}
//metodo para aceptar
bool CEGUIState::eventoAceptar(const CEGUI::EventArgs& e)
{   jugar->setVisible(true);
   cargar->setVisible(true);
   opciones->setVisible(true);
   salir->setVisible(true);   
   aceptar->setVisible(false);
   sombra0->setVisible(false);
   sombra1->setVisible(false);
   sombra2->setVisible(false);
   texto1->setVisible(false);
   return true;
}

//metodo para seleccion de sombras
bool CEGUIState::eventoSombras(const CEGUI::EventArgs& e)
{   //obtencion del ID del boton seleccionado
   CEGUI::uint id = static_cast<CEGUI::RadioButton*>(static_cast<const CEGUI::WindowEventArgs&>(e).window)->getSelectedButtonInGroup()->getID();
   switch(id)
   {   case 101:   //sin sombra
         mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
         break;   
      case 102:   //sombra texturizada
         mSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_MODULATIVE);
         break;
      case 103:   //sombra real aditiva
         mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE);
         break;
   }
   return true;
}


Thanks to everyone...


Return to “Help”

Who is online

Users browsing this forum: No registered users and 16 guests