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; } } }
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; }