void TerrainManager::initHDR()
{
	Viewport *vp = gEnv->mainCamera->getViewport();
	CompositorInstance *instance = CompositorManager::getSingleton().addCompositor(vp, "HDR", 0);
	CompositorManager::getSingleton().setCompositorEnabled(vp, "HDR", true);

	// HDR needs a special listener
	hdr_listener = new HDRListener();
	instance->addListener(hdr_listener);
	hdr_listener->notifyViewportSize(vp->getActualWidth(), vp->getActualHeight());
	hdr_listener->notifyCompositor(instance);
}
	void BaseGame::Initialize()
	{
		ResourceGroupManager::getSingleton().addResourceLocation(Directories::GetContentDirectory() + "/Fonts", "FileSystem", "Essential");
		ResourceGroupManager::getSingleton().initialiseResourceGroup("Essential");

		// Create scene manager
		m_sceneMgr = m_root->createSceneManager(ST_GENERIC, "SceneManager");
		m_sceneMgr->setAmbientLight(ColourValue::Black);

		// Light
		m_light = m_sceneMgr->createLight();
		m_light->setType(Light::LT_DIRECTIONAL);
		m_light->setDirection(1.0f, 0.0f, 0.0f);

		// Space camera
		m_camera = new SpaceCamera(*this, Vector3(0, 0, -5));
		assert(m_camera);
		GetCamera().setFOVy(FieldOfView);
		GetCamera().setNearClipDistance(NearPlane);
		GetCamera().setFarClipDistance(FarPlane);

		m_viewport = m_renderWnd->addViewport(&GetCamera());
		m_viewport->setBackgroundColour(m_backgroundColour);

		GetCamera().setAspectRatio(Real(m_viewport->getActualWidth()) / Real(m_viewport->getActualHeight()));	
		m_viewport->setCamera(&GetCamera());

		// Ogre overlay
		m_textRenderer = new TextRenderer();

		Game::Initialize();

		// Player
		m_player = new Player(*this);

		// Sprite
		m_sceneMgr->getRenderQueue()->getQueueGroup(RENDER_QUEUE_MAIN + 1)->setShadowsEnabled(false);
		m_sprite = new Sprite();
		m_sprite->Init(m_sceneMgr, m_viewport, RENDER_QUEUE_MAIN + 1, true);
		m_sprite->SetSpriteLocation(Directories::GetContentDirectory() + "/Sprites");

		// Lens flare
		m_lensFlare = new LensFlare(*this, LensFlare::DefaultSunPos);

		//
		// Compositors
		//
		CompositorManager &compMgr = CompositorManager::getSingleton();

		// Bloom (crash on d3d if device lost occur)
		compMgr.addCompositor(m_viewport, "Bloom");
		if (m_root->getRenderSystem()->getName().find("Direct3D") == std::string::npos)
		{
			compMgr.setCompositorEnabled(m_viewport, "Bloom", true);
		}

		// Radial blur
		CompositorInstance *radialBlur = compMgr.addCompositor(m_viewport, "Radial Blur");
		radialBlur->addListener(new RadialBlurListener(*m_player));
		compMgr.setCompositorEnabled(m_viewport, "Radial Blur", true);

		//
		// CEGUI
		//
		m_ceguiLogger = new CEGUI::DefaultLogger();
		assert(m_ceguiLogger);
		CEGUI::Logger::getSingleton().setLogFilename(Directories::GetWritablePath("cegui.log"));

		m_renderer = &CEGUI::OgreRenderer::bootstrapSystem(*m_renderWnd);

		// Disable calls to beginFrame and endFrame, which also disables
		// default rendering: we will use a custom rendering method.
		m_renderer->setFrameControlExecutionEnabled(true);
		
		// Hook back into the rendering process
		//m_sceneMgr->addRenderQueueListener(new CEGUIRQListener(m_renderer, RENDER_QUEUE_OVERLAY, false));

		CEGUI::Imageset::setDefaultResourceGroup("GUI");
		CEGUI::Font::setDefaultResourceGroup("GUI");
		CEGUI::Scheme::setDefaultResourceGroup("GUI");
		CEGUI::WidgetLookManager::setDefaultResourceGroup("GUI");
		CEGUI::WindowManager::setDefaultResourceGroup("GUI");
		CEGUI::ScriptModule::setDefaultResourceGroup("GUI");

		CEGUI::SchemeManager::getSingleton().create("VanillaSkin.scheme");
		CEGUI::SchemeManager::getSingleton().create("TaharezLook.scheme");
		CEGUI::SchemeManager::getSingleton().create("InGame.scheme");

		// Set default font
		CEGUI::Font &font = CEGUI::FontManager::getSingleton().create("GameFont.font", "GUI");
		CEGUI::System::getSingleton().setDefaultFont(&font);

		// Set mouse cursor
		CEGUI::System::getSingleton().setDefaultMouseCursor("Vanilla-Images", "MouseArrow");
		CEGUI::MouseCursor::getSingleton().setImage(CEGUI::System::getSingleton().getDefaultMouseCursor());

		// Set initial cursor position		
		CEGUI::System::getSingleton().injectMousePosition((float)m_renderWnd->getWidth() / 2.0f + 1, (float)m_renderWnd->getHeight() / 2.0f);

		//
		// Sound
		//
		m_sound = new Sound();

		// FPS
		m_textRenderer->AddTextBox("txtFps", "Fps: ", 
			(Real)m_viewport->getActualLeft(), (Real)m_viewport->getActualTop(), 
			(Real)m_viewport->getActualWidth(), (Real)m_viewport->getActualHeight() + m_fpsOverlayHeight);

	}