CEGUI::Texture* 
ImageCodecAdapter::load( const CEGUI::RawDataContainer& data , 
                         CEGUI::Texture* result              )
{GUCEF_TRACE;

    if ( NULL == result ) 
    {
        GUCEF_WARNING_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: Unable to load texture since no texture object was provided" );
        return NULL;
    }

    CORE::CString imgType = CORE::ExtractFileExtention( result->getName() );
    if ( imgType.IsNULLOrEmpty() )
    {
        if ( NULL != m_vfsResourceProvider )
        {
            VfsResourceProvider::DataContainerInfoPtr containerInfo = m_vfsResourceProvider->GetInfoOnLoadedContainer( data );
            if ( !containerInfo.IsNULL() )
            {
                imgType = CORE::ExtractFileExtention( containerInfo->requestFilename );
            }
        }
    }

    if ( imgType.IsNULLOrEmpty() )
    {
        GUCEF_WARNING_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: Unable to load texture since no image type could be derived from the the texture name" );
        return NULL;
    }

    IMAGE::CImageCodecRegistry& codecRegistry = IMAGE::CImageGlobal::Instance()->GetImageCodecRegistry();
    
    IMAGE::CImageCodecRegistry::TImageCodecPtr codec;
    if ( !codecRegistry.TryLookup( imgType, codec ) )
    {
        GUCEF_WARNING_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: Unable to load texture since no image codec could be found for type: " + imgType );
        return NULL;
    }

    CORE::CDynamicBufferAccess bufferAccess;
    bufferAccess.LinkTo( data.getDataPtr(), data.getSize() );

    IMAGE::CImage image;
    if ( !codec->Decode( bufferAccess, image ) )
    {
        GUCEF_WARNING_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: Unable to load texture since the image codec decoding failed for type: " + imgType );
        return NULL;
    }

    IMAGE::TPixelMapPtr pixelMap;
    if ( !image.TryGetPixelMap( 0, 0, pixelMap ) )
    {
        GUCEF_WARNING_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: Unable to get the pixel map from the image" );
        return NULL;
    }
    
    // CEGUI does not support single channel formats
    if ( pixelMap->GetNumberOfChannelsPerPixel() < 3 )
    {
        GUCEF_WARNING_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: CEGUI cannot handle images with less than 3 channels per pixels" );
        return NULL;        
    }
    
    // CEGUI only supports a subset of formats, convert as needed
    IMAGE::TPixelStorageFormat sourceFormat = pixelMap->GetPixelStorageFormat();
    switch ( sourceFormat )
    {
        case IMAGE::PSF_BGR:
        {
            IMAGE::TPixelMapPtr newPixelMap;
            if ( !pixelMap->ConvertFormatTo( IMAGE::PSF_RGB, MT::DATATYPE_UINT8, newPixelMap ) )
            {
                GUCEF_WARNING_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: CEGUI cannot handle BGR images and we were unable to convert" );
                return NULL;
            }
            if ( newPixelMap )
            {
                GUCEF_DEBUG_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: CEGUI cannot handle BGR images, we successfully converted the image" );
                pixelMap = newPixelMap;
            }
            break;
        } 
        case IMAGE::PSF_BGRA:
        {
            IMAGE::TPixelMapPtr newPixelMap;
            if ( !pixelMap->ConvertFormatTo( IMAGE::PSF_RGBA, MT::DATATYPE_UINT8, newPixelMap ) )
            {
                GUCEF_WARNING_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: CEGUI cannot handle BGRA images and we were unable to convert" );
                return NULL;
            }
            if ( newPixelMap )
            {
                GUCEF_DEBUG_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: CEGUI cannot handle BGRA images, we sucecssfully converted the image" );
                pixelMap = newPixelMap;
            }
            break;
        } 
    }

    // CEGUI only supports a subset of channel sizes, convert as needed
    // If we get here then the pixels are stored in a supported format either due to conversion or they were already
    // However the channelsize can still be wrong in the latter case
    CORE::UInt32 channelSize = pixelMap->GetPixelChannelSize();
    if ( channelSize > 1 )
    {
        IMAGE::TPixelStorageFormat sourceFormat = pixelMap->GetPixelStorageFormat();
        IMAGE::TPixelMapPtr newPixelMap;
        if ( !pixelMap->ConvertFormatTo( sourceFormat, MT::DATATYPE_UINT8, newPixelMap ) )
        {
            GUCEF_WARNING_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: CEGUI cannot handle images with multi-byte channels and we were unable to convert" );
            return NULL;
        }
        
        if ( newPixelMap )
        {
            GUCEF_DEBUG_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: CEGUI cannot handle images with multi-byte channels, we sucecssfully converted the image to single byte" );
            pixelMap = newPixelMap;
        }
        channelSize = pixelMap->GetPixelChannelSize();
    }
    
    // Now that we have the image in a format we know CEGUI can handle,.. convert the type enum
    CEGUI::Texture::PixelFormat ceguiPixelFormat;
    if ( !TryConvertPixelFormat( pixelMap->GetPixelStorageFormat(), channelSize, ceguiPixelFormat ) )
    {
        GUCEF_WARNING_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: Failed to map pixel storage format to a CEGUI supported type" );
        return NULL;        
    }
        
    CEGUI::Sizef imageSizeInPixels( (float) pixelMap->GetWidthInPixels(), (float) pixelMap->GetHeightInPixels() );
    result->loadFromMemory( pixelMap->GetDataPtr(), imageSizeInPixels, ceguiPixelFormat );
    GUCEF_DEBUG_LOG( CORE::LOGLEVEL_NORMAL, "ImageCodecAdapter:load: Successfully loaded image into texture obj" );
    return result;
}
Rocket::Core::Input::KeyIdentifier
CInputAdapter::MapKeyIdentifier( const INPUT::KeyCode keyCode )
{
    switch ( keyCode )
    {
        case INPUT::KEYCODE_UNASSIGNED : return Rocket::Core::Input::KI_UNKNOWN;
        case INPUT::KEYCODE_ESCAPE : return Rocket::Core::Input::KI_ESCAPE;
        case INPUT::KEYCODE_1 : return Rocket::Core::Input::KI_1;
        case INPUT::KEYCODE_2 : return Rocket::Core::Input::KI_2;
        case INPUT::KEYCODE_3 : return Rocket::Core::Input::KI_3;
        case INPUT::KEYCODE_4 : return Rocket::Core::Input::KI_4;
        case INPUT::KEYCODE_5 : return Rocket::Core::Input::KI_5;
        case INPUT::KEYCODE_6 : return Rocket::Core::Input::KI_6;
        case INPUT::KEYCODE_7 : return Rocket::Core::Input::KI_7;
        case INPUT::KEYCODE_8 : return Rocket::Core::Input::KI_8;
        case INPUT::KEYCODE_9 : return Rocket::Core::Input::KI_9;
        case INPUT::KEYCODE_0 : return Rocket::Core::Input::KI_0;
        case INPUT::KEYCODE_MINUS : return Rocket::Core::Input::KI_OEM_MINUS;
        case INPUT::KEYCODE_EQUALS : return Rocket::Core::Input::KI_OEM_PLUS;
        case INPUT::KEYCODE_BACK : return Rocket::Core::Input::KI_BACK;
        case INPUT::KEYCODE_TAB : return Rocket::Core::Input::KI_TAB;
        case INPUT::KEYCODE_Q : return Rocket::Core::Input::KI_Q;
        case INPUT::KEYCODE_W : return Rocket::Core::Input::KI_W;
        case INPUT::KEYCODE_E : return Rocket::Core::Input::KI_E;
        case INPUT::KEYCODE_R : return Rocket::Core::Input::KI_R;
        case INPUT::KEYCODE_T : return Rocket::Core::Input::KI_T;
        case INPUT::KEYCODE_Y : return Rocket::Core::Input::KI_Y;
        case INPUT::KEYCODE_U : return Rocket::Core::Input::KI_U;
        case INPUT::KEYCODE_I : return Rocket::Core::Input::KI_I;
        case INPUT::KEYCODE_O : return Rocket::Core::Input::KI_O;
        case INPUT::KEYCODE_P : return Rocket::Core::Input::KI_P;
        case INPUT::KEYCODE_LBRACKET : return Rocket::Core::Input::KI_OEM_4;
        case INPUT::KEYCODE_RBRACKET : return Rocket::Core::Input::KI_OEM_6;
        case INPUT::KEYCODE_RETURN : return Rocket::Core::Input::KI_RETURN;
        case INPUT::KEYCODE_LCONTROL : return Rocket::Core::Input::KI_LCONTROL;
        case INPUT::KEYCODE_A : return Rocket::Core::Input::KI_A;
        case INPUT::KEYCODE_S : return Rocket::Core::Input::KI_S;
        case INPUT::KEYCODE_D : return Rocket::Core::Input::KI_D;
        case INPUT::KEYCODE_F : return Rocket::Core::Input::KI_F;
        case INPUT::KEYCODE_G : return Rocket::Core::Input::KI_G;
        case INPUT::KEYCODE_H : return Rocket::Core::Input::KI_H;
        case INPUT::KEYCODE_J : return Rocket::Core::Input::KI_J;
        case INPUT::KEYCODE_K : return Rocket::Core::Input::KI_K;
        case INPUT::KEYCODE_L : return Rocket::Core::Input::KI_L;
        case INPUT::KEYCODE_SEMICOLON : return Rocket::Core::Input::KI_OEM_1;
        case INPUT::KEYCODE_APOSTROPHE : return Rocket::Core::Input::KI_OEM_7;
        case INPUT::KEYCODE_GRAVE : return Rocket::Core::Input::KI_OEM_7;
        case INPUT::KEYCODE_LSHIFT : return Rocket::Core::Input::KI_LSHIFT;
        case INPUT::KEYCODE_BACKSLASH : return Rocket::Core::Input::KI_OEM_5;
        case INPUT::KEYCODE_Z : return Rocket::Core::Input::KI_Z;
        case INPUT::KEYCODE_X : return Rocket::Core::Input::KI_X;
        case INPUT::KEYCODE_C : return Rocket::Core::Input::KI_C;
        case INPUT::KEYCODE_V : return Rocket::Core::Input::KI_V;
        case INPUT::KEYCODE_B : return Rocket::Core::Input::KI_B;
        case INPUT::KEYCODE_N : return Rocket::Core::Input::KI_N;
        case INPUT::KEYCODE_M : return Rocket::Core::Input::KI_M;
        case INPUT::KEYCODE_COMMA : return Rocket::Core::Input::KI_OEM_COMMA;
        case INPUT::KEYCODE_PERIOD : return Rocket::Core::Input::KI_OEM_PERIOD;
        case INPUT::KEYCODE_SLASH : return Rocket::Core::Input::KI_OEM_2;
        case INPUT::KEYCODE_RSHIFT : return Rocket::Core::Input::KI_RSHIFT;
        case INPUT::KEYCODE_MULTIPLY : return Rocket::Core::Input::KI_MULTIPLY;
        case INPUT::KEYCODE_LMENU : return Rocket::Core::Input::KI_LMENU;
        case INPUT::KEYCODE_SPACE : return Rocket::Core::Input::KI_SPACE;
        case INPUT::KEYCODE_CAPITAL : return Rocket::Core::Input::KI_CAPITAL;
        case INPUT::KEYCODE_F1 : return Rocket::Core::Input::KI_F1;
        case INPUT::KEYCODE_F2 : return Rocket::Core::Input::KI_F2;
        case INPUT::KEYCODE_F3 : return Rocket::Core::Input::KI_F3;
        case INPUT::KEYCODE_F4 : return Rocket::Core::Input::KI_F4;
        case INPUT::KEYCODE_F5 : return Rocket::Core::Input::KI_F5;
        case INPUT::KEYCODE_F6 : return Rocket::Core::Input::KI_F6;
        case INPUT::KEYCODE_F7 : return Rocket::Core::Input::KI_F7;
        case INPUT::KEYCODE_F8 : return Rocket::Core::Input::KI_F8;
        case INPUT::KEYCODE_F9 : return Rocket::Core::Input::KI_F9;
        case INPUT::KEYCODE_F10 : return Rocket::Core::Input::KI_F10;
        case INPUT::KEYCODE_NUMLOCK : return Rocket::Core::Input::KI_NUMLOCK;
        case INPUT::KEYCODE_SCROLL : return Rocket::Core::Input::KI_SCROLL;
        case INPUT::KEYCODE_NUMPAD7 : return Rocket::Core::Input::KI_NUMPAD7;
        case INPUT::KEYCODE_NUMPAD8 : return Rocket::Core::Input::KI_NUMPAD8;
        case INPUT::KEYCODE_NUMPAD9 : return Rocket::Core::Input::KI_NUMPAD9;
        case INPUT::KEYCODE_SUBTRACT : return Rocket::Core::Input::KI_SUBTRACT;
        case INPUT::KEYCODE_NUMPAD4 : return Rocket::Core::Input::KI_NUMPAD4;
        case INPUT::KEYCODE_NUMPAD5 : return Rocket::Core::Input::KI_NUMPAD5;
        case INPUT::KEYCODE_NUMPAD6 : return Rocket::Core::Input::KI_NUMPAD6;
        case INPUT::KEYCODE_ADD : return Rocket::Core::Input::KI_ADD;
        case INPUT::KEYCODE_NUMPAD1 : return Rocket::Core::Input::KI_NUMPAD1;
        case INPUT::KEYCODE_NUMPAD2 : return Rocket::Core::Input::KI_NUMPAD2;
        case INPUT::KEYCODE_NUMPAD3 : return Rocket::Core::Input::KI_NUMPAD3;
        case INPUT::KEYCODE_NUMPAD0 : return Rocket::Core::Input::KI_NUMPAD0;
        case INPUT::KEYCODE_DECIMAL : return Rocket::Core::Input::KI_DECIMAL;
        case INPUT::KEYCODE_LEFTWINKEY : return Rocket::Core::Input::KI_LWIN;
        case INPUT::KEYCODE_RIGHTWINKEY : return Rocket::Core::Input::KI_RWIN;
        case INPUT::KEYCODE_OEM_102 : return Rocket::Core::Input::KI_OEM_102;
        case INPUT::KEYCODE_F11 : return Rocket::Core::Input::KI_F11;
        case INPUT::KEYCODE_F12 : return Rocket::Core::Input::KI_F12;
        case INPUT::KEYCODE_F13 : return Rocket::Core::Input::KI_F13;
        case INPUT::KEYCODE_F14 : return Rocket::Core::Input::KI_F14;
        case INPUT::KEYCODE_F15 : return Rocket::Core::Input::KI_F15;
        case INPUT::KEYCODE_KANA : return Rocket::Core::Input::KI_KANA;
        case INPUT::KEYCODE_ABNT_C1 : return Rocket::Core::Input::KI_OEM_2;
        case INPUT::KEYCODE_CONVERT : return Rocket::Core::Input::KI_CONVERT;
        case INPUT::KEYCODE_NOCONVERT : return Rocket::Core::Input::KI_NONCONVERT;
        //case INPUT::KEYCODE_YEN : return Rocket::Core::Input:: ;
        case INPUT::KEYCODE_ABNT_C2 : return Rocket::Core::Input::KI_OEM_PERIOD;
        case INPUT::KEYCODE_NUMPADEQUALS : return Rocket::Core::Input::KI_OEM_NEC_EQUAL;
        case INPUT::KEYCODE_PREVTRACK : return Rocket::Core::Input::KI_MEDIA_PREV_TRACK;
        // case INPUT::KEYCODE_AT : return Rocket::Core::Input:: ;
        case INPUT::KEYCODE_COLON : return Rocket::Core::Input::KI_OEM_COMMA;
        case INPUT::KEYCODE_UNDERLINE : return Rocket::Core::Input::KI_OEM_MINUS;
        case INPUT::KEYCODE_KANJI : return Rocket::Core::Input::KI_KANJI;
        case INPUT::KEYCODE_STOP : return Rocket::Core::Input::KI_MEDIA_STOP;
        case INPUT::KEYCODE_AX : return Rocket::Core::Input::KI_OEM_AX;
        // case INPUT::KEYCODE_UNLABELED : return Rocket::Core::Input:: ;
        case INPUT::KEYCODE_NEXTTRACK : return Rocket::Core::Input::KI_MEDIA_NEXT_TRACK;
        case INPUT::KEYCODE_NUMPADENTER : return Rocket::Core::Input::KI_NUMPADENTER;
        case INPUT::KEYCODE_RCONTROL : return Rocket::Core::Input::KI_RCONTROL;
        case INPUT::KEYCODE_MUTE : return Rocket::Core::Input::KI_VOLUME_MUTE;
        // case INPUT::KEYCODE_CALCULATOR : return Rocket::Core::Input:: ;
        case INPUT::KEYCODE_PLAYPAUSE : return Rocket::Core::Input::KI_MEDIA_PLAY_PAUSE;
        case INPUT::KEYCODE_MEDIASTOP : return Rocket::Core::Input::KI_MEDIA_STOP;
        case INPUT::KEYCODE_VOLUMEDOWN : return Rocket::Core::Input::KI_VOLUME_DOWN;
        case INPUT::KEYCODE_VOLUMEUP : return Rocket::Core::Input::KI_VOLUME_UP;
        case INPUT::KEYCODE_WEBHOME : return Rocket::Core::Input::KI_BROWSER_HOME;
        case INPUT::KEYCODE_NUMPADCOMMA : return Rocket::Core::Input::KI_DECIMAL;
        case INPUT::KEYCODE_DIVIDE : return Rocket::Core::Input::KI_DIVIDE;
        case INPUT::KEYCODE_SYSRQ : return Rocket::Core::Input::KI_SNAPSHOT;
        case INPUT::KEYCODE_RMENU : return Rocket::Core::Input::KI_RMENU;
        case INPUT::KEYCODE_PAUSE : return Rocket::Core::Input::KI_PAUSE;
        case INPUT::KEYCODE_HOME : return Rocket::Core::Input::KI_HOME;
        case INPUT::KEYCODE_UP : return Rocket::Core::Input::KI_UP;
        case INPUT::KEYCODE_PGUP : return Rocket::Core::Input::KI_PRIOR;
        case INPUT::KEYCODE_LEFT : return Rocket::Core::Input::KI_LEFT;
        case INPUT::KEYCODE_RIGHT : return Rocket::Core::Input::KI_RIGHT;
        case INPUT::KEYCODE_END : return Rocket::Core::Input::KI_END;
        case INPUT::KEYCODE_DOWN : return Rocket::Core::Input::KI_DOWN;
        case INPUT::KEYCODE_PGDOWN : return Rocket::Core::Input::KI_NEXT;
        case INPUT::KEYCODE_INSERT : return Rocket::Core::Input::KI_INSERT;
        case INPUT::KEYCODE_DELETE : return Rocket::Core::Input::KI_DELETE;
        case INPUT::KEYCODE_LWIN : return Rocket::Core::Input::KI_LWIN;
        case INPUT::KEYCODE_RWIN : return Rocket::Core::Input::KI_RWIN;
        case INPUT::KEYCODE_APPS : return Rocket::Core::Input::KI_APPS;
        case INPUT::KEYCODE_POWER : return Rocket::Core::Input::KI_POWER;
        case INPUT::KEYCODE_SLEEP : return Rocket::Core::Input::KI_SLEEP;
        case INPUT::KEYCODE_WAKE : return Rocket::Core::Input::KI_WAKE;
        case INPUT::KEYCODE_WEBSEARCH : return Rocket::Core::Input::KI_BROWSER_SEARCH;
        case INPUT::KEYCODE_WEBFAVORITES : return Rocket::Core::Input::KI_BROWSER_FAVORITES;
        case INPUT::KEYCODE_WEBREFRESH : return Rocket::Core::Input::KI_BROWSER_REFRESH;
        case INPUT::KEYCODE_WEBSTOP : return Rocket::Core::Input::KI_BROWSER_STOP;
        case INPUT::KEYCODE_WEBFORWARD : return Rocket::Core::Input::KI_BROWSER_FORWARD;
        case INPUT::KEYCODE_WEBBACK : return Rocket::Core::Input::KI_BROWSER_BACK;
        case INPUT::KEYCODE_MYCOMPUTER : return Rocket::Core::Input::KI_LAUNCH_APP1;
        case INPUT::KEYCODE_MAIL : return Rocket::Core::Input::KI_LAUNCH_MAIL;
        case INPUT::KEYCODE_MEDIASELECT : return Rocket::Core::Input::KI_LAUNCH_MEDIA_SELECT;
        default :
        {
            GUCEF_WARNING_LOG( CORE::LOGLEVEL_NORMAL, "GUIDRIVERROCKET::CInputAdapter: Unable to map keyCode " + CORE::Int32ToString( keyCode ) );
            return Rocket::Core::Input::KI_UNKNOWN;
        }
    }
}
Esempio n. 3
0
bool
COgreWindowContext::Initialize( const GUI::CString& title                ,
                                const GUI::CVideoSettings& videoSettings ,
                                const GUI::CString& ogreRenderSystem     )
{GUCEF_TRACE;

    // Do not initialize twice
    Shutdown();

    // First create a regular O/S window
    if ( m_osWindow->WindowCreate( title                                       ,
                                   0                                           ,
                                   0                                           ,
                                   videoSettings.GetResolutionWidthInPixels()  ,
                                   videoSettings.GetResolutionHeightInPixels() ) )
    {
        // Display the new window
        m_osWindow->Show();
        m_osWindow->SendToForegound();
        m_osWindow->GrabFocus();

	    // Now proceed with setting up the Ogre specifics
        
        // We grab the O/S window identifier 'the handle' 
        // This is passed to Ogre to tie things together
        CORE::Int64 windowRef = 0; 
        CORE::CString windowIntStr = m_osWindow->GetProperty( "WINDOWINT" );
        if ( !windowIntStr.IsNULLOrEmpty() )
        {
            windowRef = CORE::StringToInt64( windowIntStr );
        }
        Ogre::NameValuePairList options;         
        options[ "externalWindowHandle" ] = Ogre::StringConverter::toString( (size_t) windowRef ); 

        Ogre::Root* ogreRoot = Ogre::Root::getSingletonPtr();
        if ( ogreRoot == nullptr )
        {            
            ogreRoot = OGRE_NEW Ogre::Root( "", "", "" ); 
        }

        if ( !ogreRoot->isInitialised() )
        {
            // Load any Ogre plugins not loaded yet from the bootstrap group
            CORE::CCoreGlobal::Instance()->GetPluginControl().LoadPluginGroup( "Ogre" );
            
            const Ogre::RenderSystemList& rsList = ogreRoot->getAvailableRenderers();
            if ( rsList.size() == 0 )
            {
                GUCEF_ERROR_LOG( CORE::LOGLEVEL_IMPORTANT, "OgreWindowContext: No Ogre render systems are available, cannot initialize" );
                return false;
            }

            Ogre::RenderSystem* renderSystem = nullptr;
            Ogre::RenderSystemList::const_iterator i = rsList.begin();
            while ( i != rsList.end() )
            {
                GUCEF_SYSTEM_LOG( CORE::LOGLEVEL_NORMAL, "OgreWindowContext: Available Ogre render system: " + (*i)->getFriendlyName() );
                if ( ogreRenderSystem == (*i)->getName() )
                {
                    GUCEF_SYSTEM_LOG( CORE::LOGLEVEL_NORMAL, "OgreWindowContext: Found desired/preferred Ogre render system: " + (*i)->getFriendlyName() );
                    renderSystem = (*i); 
                }
                ++i;
            }
            if ( renderSystem == nullptr )
            {
                GUCEF_WARNING_LOG( CORE::LOGLEVEL_IMPORTANT, "OgreWindowContext: Preferred Ogre render systems not available, using first available alternative: " + (*rsList.begin())->getFriendlyName() );
                renderSystem = *rsList.begin();
            }

            ogreRoot->setRenderSystem( renderSystem );
            m_sceneManager = ogreRoot->createSceneManager( Ogre::ST_GENERIC );

            m_renderWindow = ogreRoot->initialise( false, title );
        }

        m_renderWindow = ogreRoot->createRenderWindow( title, 
                                                       videoSettings.GetResolutionWidthInPixels(), 
                                                       videoSettings.GetResolutionHeightInPixels(), 
                                                       videoSettings.GetFullscreenState(),
                                                       &options ); 

        // Grab the main app pulse generator and set the update interval for the context to the desired refresh rate
        CORE::CPulseGenerator& pulseGenerator = CORE::CCoreGlobal::Instance()->GetPulseGenerator(); 
        pulseGenerator.RequestPeriodicPulses( this, 1000 / videoSettings.GetFrequency() );
        SubscribeTo( &pulseGenerator );

        GUCEF_SYSTEM_LOG( CORE::LOGLEVEL_NORMAL, "OgreWindowContext: Succesfully created Ogre rendering context" );
        m_initialized = true;
        return true;
    }
    return false;
}