void GameState::keyReleased(const SDL_KeyboardEvent &arg) { if (arg.keysym.sym == SDLK_F1 && (arg.keysym.mod & ~(KMOD_NUM | KMOD_CAPS)) == 0) { mDisplayHelpMode = (mDisplayHelpMode + 1) % mNumDisplayHelpModes; Ogre::String finalText; generateDebugText(0, finalText); mpDebugText->setCaption(finalText); mpDebugTextShadow->setCaption(finalText); } else if (arg.keysym.sym == SDLK_F1 && (arg.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL))) { //Hot reload of PBS shaders. We need to clear the microcode cache //to prevent using old compiled versions. Ogre::Root *root = mpGraphicsSystem->getRoot(); Ogre::HlmsManager *hlmsManager = root->getHlmsManager(); Ogre::Hlms *hlms = hlmsManager->getHlms(Ogre::HLMS_PBS); Ogre::GpuProgramManager::getSingleton().clearMicrocodeCache(); hlms->reloadFrom(hlms->getDataFolder()); } else if (arg.keysym.sym == SDLK_F2 && (arg.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL))) { //Hot reload of Unlit shaders. Ogre::Root *root = mpGraphicsSystem->getRoot(); Ogre::HlmsManager *hlmsManager = root->getHlmsManager(); Ogre::Hlms *hlms = hlmsManager->getHlms(Ogre::HLMS_UNLIT); Ogre::GpuProgramManager::getSingleton().clearMicrocodeCache(); hlms->reloadFrom(hlms->getDataFolder()); } else if (arg.keysym.sym == SDLK_F3 && (arg.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL))) { //Hot reload of Unlit shaders. Ogre::Root *root = mpGraphicsSystem->getRoot(); Ogre::HlmsManager *hlmsManager = root->getHlmsManager(); Ogre::Hlms *hlms = hlmsManager->getComputeHlms(); Ogre::GpuProgramManager::getSingleton().clearMicrocodeCache(); hlms->reloadFrom(hlms->getDataFolder()); } else { bool handledEvent = false; if (mpCameraController) handledEvent = mpCameraController->keyReleased(arg); if (!handledEvent) IGameState::keyReleased(arg); } }