Index: GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TerrainFrameListener.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TerrainFrameListener.cpp	(revision 679)
+++ GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TerrainFrameListener.cpp	(revision 723)
@@ -11,5 +11,5 @@
 #include "OgreOcclusionQueriesQueryManager.h"
 #include "TestCullingTerrainApplication.h"
-
+#include <string>
 
 //-- captions for overlays
@@ -20,4 +20,13 @@
 	"Stop and Wait Culling"
 };
+
+//-- captions for overlays
+String TerrainFrameListener::msApprevAlgorithmCaptions[] = 
+{
+	"CHC",
+	"VFC", 
+	"SWC"
+};
+
 
 String TerrainFrameListener::msQueryTypeCaptions[] = 
@@ -98,8 +107,11 @@
 mVisibilityThreshold(0),
 mAssumedVisibility(0),
+#if 0
 mCurrentAlgorithm(GtpVisibility::VisibilityEnvironment::COHERENT_HIERARCHICAL_CULLING),
-//mCurrentAlgorithm(GtpVisibility::VisibilityEnvironment::FRUSTUM_CULLING),
+#else
+mCurrentAlgorithm(GtpVisibility::VisibilityEnvironment::FRUSTUM_CULLING),
+#endif
 mNodeVizMode(NODEVIZ_NONE),
-mVizCameraHeight(Real(2500.0)),
+mVizCameraHeight(Real(4000.0)),
 mCamNode(camNode),
 mAppState(WALKTHROUGH),
@@ -139,8 +151,10 @@
 mPureRenderTimeFps(0.0),
 mNumVideoFrames(0),
-mDemoFps(0),
-mUseDemoFps(false),
+mPrecomputedFps(0),
+mRecordDemo(false),
+mSavePrecomputedFps(false),
 mUseArbQueries(false),
-mUseBufferedInputMouse(false)
+mUseBufferedInputMouse(false),
+mVizScale(25)
 {
 	//mInputDevice = PlatformManager::getSingleton().createInputReader();
@@ -163,4 +177,5 @@
 	
 	//-- overlays
+	
 	mDebugOverlay = OverlayManager::getSingleton().getByName("Core/DebugOverlay");
 	mHelpOverlay = OverlayManager::getSingleton().getByName("Example/Visibility/HelpOverlay"); 
@@ -168,11 +183,31 @@
 	mCullStatsOverlay = OverlayManager::getSingleton().getByName("Example/Visibility/CullStatsOverlay"); 
 
-	initVisStatsOverlay(); // visibility stats overlay
-	initHelpOverlay();     // help overlay
-	initQueryOverlay();    // visibility query stats overlay
-
-	// show stats overlays
-	showStats(true);
-	
+	String ext = "Example/Visibility/";
+
+	//-- overlays
+	mMyStatsOverlay = OverlayManager::getSingleton().getByName("Example/Visibility/MyStatsOverlay");
+	mMyStatsAlgorithmInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/MyAlgorithmInfo");
+	mMyStatsAlgorithmInfo->setCaption("hehaah2");
+
+	char str[100]; sprintf(str,": %d", 0);
+	mMyStatsFpsInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/MyFpsInfo");
+	mMyStatsFpsInfo->setCaption(str);
+	//mMyStatsAlgorithmInfo->setTop(top);
+
+	mMyStatsOverlay->show();
+
+	if (1)
+	{
+		initVisStatsOverlay(); // visibility stats overlay
+		initHelpOverlay();     // help overlay
+		initQueryOverlay();    // visibility query stats overlay
+	
+		// show stats overlays
+		showStats(false);
+	}
+
+	// the scale factor for the visualized bounding boxes
+	mSceneMgr->setOption("NodeVizScale", &mVizScale);
+
 	// set culling algorithm type
 	setAlgorithm(mCurrentAlgorithm);
@@ -186,5 +221,5 @@
 	mSceneMgr->setOption("CullCamera", &mCullCamera);
 	mSceneMgr->setOption("PrepareVisualization", &mShowVisualization);
-
+	
 	setObjectType(mCurrentObjectType);
 
@@ -201,5 +236,16 @@
 	// reset statistics
 	mWalkthroughStats.Reset();
-} 
+}
+//-----------------------------------------------------------------------
+void TerrainFrameListener::switchMouseMode()
+{
+	mUseBufferedInputMouse = !mUseBufferedInputMouse;
+	mInputDevice->setBufferedInput(true, mUseBufferedInputMouse);
+
+	if (!mUseBufferedInputMouse)
+		CEGUI::MouseCursor::getSingleton().hide();
+	else
+		CEGUI::MouseCursor::getSingleton().show();
+}
 //-----------------------------------------------------------------------
 TerrainFrameListener::~TerrainFrameListener()
@@ -410,6 +456,12 @@
 		/// set the current camera data to loaded frame information 
 		setCurrentFrameInfo(evt.timeSinceLastFrame);
-		// HACK for demo
-		//addFrameInfo(mSavedFrameInfo, mCamNode, evt.timeSinceLastFrame);
+
+		// HACK for demo: save new frame rates for different methods on the 
+		// same walkthrough
+		if (mSavePrecomputedFps)
+		{
+			addFrameInfo(mPrecomputedFpsFrameInfo, mCamNode, evt.timeSinceLastFrame);
+		}
+
 		break;
 	case WALKTHROUGH:
@@ -420,5 +472,5 @@
 			// print recording message
 			mWindow->setDebugText("Recording frame " + 
-				StringConverter::toString(mFrameInfo.size() - 1));
+				StringConverter::toString((int)mFrameInfo.size() - 1));
 		}	
 		// move camera according to input
@@ -654,12 +706,14 @@
 }
 //-----------------------------------------------------------------------
-void TerrainFrameListener::writeFrames()
-{
-	std::ofstream ofstr(frames_out_filename);
-	
+void TerrainFrameListener::writeFrames(const std::string filename, 
+									   const FrameInfoContainer &frameInfo) const
+{
+	std::ofstream ofstr(filename.c_str());
 	std::vector<frame_info>::const_iterator it, it_end;
-
-	it_end = mFrameInfo.end();
-	for (it = mFrameInfo.begin(); it < it_end; ++it)
+	it_end = frameInfo.end();
+
+	int i = 0;
+
+	for (it = frameInfo.begin(); it < it_end; ++ it, ++ i)
 	{
 		ofstr << StringConverter::toString((*it).position) << " " 
@@ -668,34 +722,23 @@
 			  << StringConverter::toString((*it).fps) << "\n";
 	}
+
+	std::stringstream d; d << "saved " << i << " frames to file " << filename;
+	Ogre::LogManager::getSingleton().logMessage(d.str());
+
 	ofstr.close();
 }
-// quick hack
-void TerrainFrameListener::writeNewFrameInfo()
-{
-	std::ofstream ofstr("newframe.out");
-	
-	std::vector<frame_info>::const_iterator it, it_end;
-
-	it_end = mSavedFrameInfo.end();
-	for (it = mSavedFrameInfo.begin(); it < it_end; ++it)
-	{
-		ofstr << StringConverter::toString((*it).position) << " " 
-			  << StringConverter::toString((*it).orientation) << " "
-			  << StringConverter::toString((*it).timeElapsed) << " "
-			  << StringConverter::toString((*it).fps) << "\n";
-	}
-	ofstr.close();
-}
-//-----------------------------------------------------------------------
-void TerrainFrameListener::loadFrames()
-{
-	std::ifstream ifstr(frames_out_filename);
+//-----------------------------------------------------------------------
+void TerrainFrameListener::loadFrames(const std::string filename,  
+									  FrameInfoContainer &frameInfo)
+{
+	std::ifstream ifstr(filename.c_str());
 	char line[256];
 	frame_info info;
 
 	// reset current values
-	mFrameInfo.clear();
+	frameInfo.clear();
+	
 	mCurrentFrame = 0;
-	
+	int i = 0;
 	while (!ifstr.eof()) 
 	{
@@ -709,5 +752,11 @@
 		// std::stringstream d; d << StringConverter::toString(info.position) << " " << StringConverter::toString(info.orientation);
 		// LogManager::getSingleton().logMessage(d.str());
-	}
+		++ i;
+	}
+	
+	std::stringstream d; 
+	d << "loaded " << i << " frames from file " << filename;
+	Ogre::LogManager::getSingleton().logMessage(d.str());
+
 	ifstr.close();
 }
@@ -721,5 +770,5 @@
 	mAppState = (mAppState + 1) % STATE_NUM;
 
-	// if last state was replay state
+	// if last state was replay state: post process
 	if (lastState == REPLAY)
 	{
@@ -727,36 +776,63 @@
 		mWindow->setDebugText("");
 				
-		// hack for producing demo
-		writeNewFrameInfo();
-		mSavedFrameInfo.clear();
+		// hack for producing demo:
+		// we produced precomputed fps during the last replay =>
+		// save them to file
+		if (mSavePrecomputedFps) //!mPrecomputedFpsFrameInfo.empty())
+		{
+			std::string filename = msApprevAlgorithmCaptions[mCurrentAlgorithm] + "_frames.out";
+
+			writeFrames(filename, mPrecomputedFpsFrameInfo);
+			mPrecomputedFpsFrameInfo.clear();
+		}
 
 		std::stringstream d;
-		mWalkthroughStats.Print(d, msAlgorithmCaptions[mCurrentAlgorithm]);
+		mWalkthroughStats.Print(d, msApprevAlgorithmCaptions[mCurrentAlgorithm]);
  		
 		LogManager::getSingleton().logMessage(d.str());
 	}
 	
-	// replay recorded walkthrough
+	//-- replay recorded walkthrough
 	if (mAppState == REPLAY)
 	{
-		// no recording during replay
-		mRecordFrames = false; mWindow->setDebugText("");
-
-		// load recorded walkthrough from disk
-		if (mFrameInfo.size() == 0)
+		// no standard recording during replay
+		mRecordFrames = false;
+
+		// no stats information
+		mWindow->setDebugText("");
+
+		// clear previous walktrough
+		mFrameInfo.clear();
+
+		std::string filename;
+		
+		// if recording demo,
+		// we use precomputed fps which corresponds to current method, 
+		// e.g., for chc we load precomputed chc fps from disc.
+		if (mRecordDemo)
 		{
-			loadFrames();
+			filename = msApprevAlgorithmCaptions[mCurrentAlgorithm] + "_frames.out";
 		}
-		
-		// if there are no recorded frames => set next state
-		if (mFrameInfo.size() == 0) 
+		else // standard filename
+		{
+			filename = frames_out_filename;
+		}
+
+		//-- load recorded walkthrough from disk
+		loadFrames(filename, mFrameInfo);
+		
+		
+		// if there are still no recorded frames, 
+		// no walkthrough was recorded => set next state
+		if (mFrameInfo.empty()) 
 		{
 			nextAppState();
 		}
-		else // replay
+		else // actual replay
 		{
 			mWindow->setDebugText("Replay");
 			
-			// reset, because we measure fps stats during walkthrough (warning: average fps broken)
+			// reset, because we measure fps stats during walkthrough 
+			// (warning: average fps broken)
 			mWindow->resetStatistics();
 			mWalkthroughStats.Reset();
@@ -781,7 +857,7 @@
 		mFrameInfo.clear();
 	}
-	else
-	{
-		writeFrames(); // write frame info to file
+	else // recording just ended => write frame info to file
+	{
+		writeFrames(frames_out_filename, mFrameInfo); 
 		mWindow->setDebugText("");
 	}
@@ -818,8 +894,23 @@
 }
 //-----------------------------------------------------------------------
+void TerrainFrameListener::changeVizScale(const int incr)
+{
+	mVizScale += incr; 
+
+	if (mVizScale < 1) 
+	{	
+		mVizScale = 1;
+	}
+
+	mSceneMgr->setOption("NodeVizScale", &mVizScale);
+}
+
+//-----------------------------------------------------------------------
 void TerrainFrameListener::zoomVizCamera(int zoom)
 {
-	mVizCameraHeight += zoom; 
-	if(mVizCameraHeight < 0) mVizCameraHeight = 0;
+	mVizCameraHeight += zoom;
+
+	if(mVizCameraHeight < 0)
+		mVizCameraHeight = 0;
 }
 //-----------------------------------------------------------------------
@@ -861,9 +952,16 @@
 	static String trisString = "Triangle Count: ";
 
-	int currentFps = mWindow->getStatistics().lastFPS;
-	
-	// HACK for demo: use precomputed FPS
-	if (mUseDemoFps)
-		currentFps = mDemoFps;
+	int currentFps;
+	
+	// HACK for demo: use precomputed FPS instead of real FPS
+	if (mRecordDemo)
+	{
+		currentFps = mPrecomputedFps;
+	}
+	else
+	{
+		currentFps = mWindow->getStatistics().lastFPS;
+	}
+
 #if 0
 	// HACK: take pure rendering time, only measures the render call
@@ -885,6 +983,11 @@
 
 
-	mWalkthroughStats.UpdateFrame(currentFps, mWindow->getBestFPS(), mWindow->getWorstFPS(),
-								  (int)mWindow->getTriangleCount(), nodeInfo[0], nodeInfo[1], nodeInfo[2]);
+	mWalkthroughStats.UpdateFrame(currentFps, 
+								  mWindow->getBestFPS(), 
+								  mWindow->getWorstFPS(),
+								  (int)mWindow->getTriangleCount(), 
+								  nodeInfo[0], 
+								  nodeInfo[1], 
+								  nodeInfo[2]);
 
 	// HACK: compute average fps ourselfs, because ogre avg. fps is wrong
@@ -909,4 +1012,10 @@
 			//guiCurr->setCaption(currFpsString + StringConverter::toString(currentFps));
 		}
+
+		/*std::stringstream d;
+		d << "fps: " << StringConverter::toString(currentFps) << ", "
+		  << "avg fps: " << StringConverter::toString(avgFps);
+		LogManager::getSingleton().logMessage(d.str());*/
+
 		//guiAvg->setCaption(avgFps + StringConverter::toString(stats.avgFPS));
 		guiCurr->setCaption(currFpsString + StringConverter::toString(currentFps));
@@ -916,7 +1025,7 @@
 
 		guiBest->setCaption(bestFpsString + StringConverter::toString(stats.bestFPS)
-			+" "+StringConverter::toString(stats.bestFrameTime) + " ms");
+							+ " " + StringConverter::toString(stats.bestFrameTime) + " ms");
 		guiWorst->setCaption(worstFpsString + StringConverter::toString(stats.worstFPS)
-			+" "+StringConverter::toString(stats.worstFrameTime) + " ms");
+							 + " " + StringConverter::toString(stats.worstFrameTime) + " ms");
 
 		OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement("Core/NumTris");
@@ -947,12 +1056,17 @@
 		// take old value into account in order to create no sudden changes
 		mSceneMgr->getOption("NumQueriesIssued", &opt); 
-		mDelayedQueriesIssued = mDelayedQueriesIssued * 0.8 + (float)opt * 0.2;
+		mDelayedQueriesIssued = mDelayedQueriesIssued * 0.8 + (float)opt * 0.2f;
 		sprintf(str,": %d", (int)mDelayedQueriesIssued); 
 		mQueriesIssuedInfo->setCaption(str);
 
 		mSceneMgr->getOption("NumTraversedNodes", &opt); 
-		mDelayedTraversedNodes = mDelayedTraversedNodes * 0.8 + (float)opt * 0.2;
+		mDelayedTraversedNodes = mDelayedTraversedNodes * 0.8 + (float)opt * 0.2f;
 		sprintf(str,": %d", (int)mDelayedTraversedNodes); 
 		mTraversedNodesInfo->setCaption(str);
+
+		// update stats for demo
+		mMyStatsAlgorithmInfo->setCaption(msApprevAlgorithmCaptions[mCurrentAlgorithm]);
+		sprintf(str,": %d", (int)currentFps); 
+		mMyStatsFpsInfo->setCaption(str);
 
 	}
@@ -1205,5 +1319,4 @@
 		mTerrainContentGenerator->WriteObjects(objects_out_filename);
 		break;
-
 	case KC_8:
 		changeAssumedVisibility(-1);
@@ -1218,7 +1331,11 @@
 		mDeleteObjects = true;
 		break;
-	case KC_M: // hack
-		mUseDemoFps = !mUseDemoFps;
-		break;
+	case KC_M: // hack for recording demo using precomputed fps
+		mRecordDemo = !mRecordDemo;
+		break;
+    case KC_E: // hack for recording demo using precomputed fps
+		mSavePrecomputedFps = !mSavePrecomputedFps;
+		break;
+	
 	case KC_Q:
 		toggleUseArbQueries();
@@ -1255,5 +1372,7 @@
 }
 //-----------------------------------------------------------------------
-void TerrainFrameListener::addFrameInfo(FrameInfoContainer &frameInfos, SceneNode *camNode, Real timeElapsed)
+void TerrainFrameListener::addFrameInfo(FrameInfoContainer &frameInfos, 
+										SceneNode *camNode, 
+										Real timeElapsed)
 {
 	frame_info info;
@@ -1267,5 +1386,5 @@
 }
 //-----------------------------------------------------------------------
-void TerrainFrameListener::setCurrentFrameInfo(Real timeElapsed)
+void TerrainFrameListener::setCurrentFrameInfo(const Real timeElapsed)
 {
 	//-- find current frame relative to elapsed frame time		
@@ -1279,6 +1398,6 @@
 
 	// TODO: crashes here if recording / replaying on the same time!!
-	frame_info new_frame = mFrameInfo[mCurrentFrame]; 
-	frame_info old_frame = mFrameInfo[mCurrentFrame - 1];
+	const frame_info new_frame = mFrameInfo[mCurrentFrame]; 
+	const frame_info old_frame = mFrameInfo[mCurrentFrame - 1];
 		
 	//-- interpolate frames
@@ -1290,13 +1409,13 @@
 	}
 
-	Vector3 camPos = old_frame.position + factor 
+	const Vector3 camPos = old_frame.position + factor 
 		* (new_frame.position - old_frame.position);
 
 	// interpolate the orientation
-	Quaternion camOrienation = Quaternion::Slerp(factor, old_frame.orientation, 
-		new_frame.orientation, true);
-
-	// HACK: interpolate fps
-	mDemoFps = old_frame.fps + factor * (new_frame.fps -old_frame.fps);
+	const Quaternion camOrienation = 
+		Quaternion::Slerp(factor, old_frame.orientation, new_frame.orientation, true);
+
+	// HACK for demo: interpolate precomputed fps
+	mPrecomputedFps = old_frame.fps + factor * (new_frame.fps - old_frame.fps);
 
 	mCamNode->setPosition(camPos);
@@ -1362,4 +1481,14 @@
 	{
 		zoomVizCamera(-50);
+	}
+
+	if (mInputDevice->isKeyDown(KC_5))
+	{
+		changeVizScale(-1);
+	}
+
+	if (mInputDevice->isKeyDown(KC_6))
+	{
+		changeVizScale(1);
 	}
 
Index: GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrainApplication.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrainApplication.cpp	(revision 679)
+++ GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrainApplication.cpp	(revision 723)
@@ -227,7 +227,4 @@
 void TestCullingTerrainApplication::createScene()
 {
-	Real scale = 3;
-	mSceneMgr->setOption("NodeVizScale", &scale);
-
 	// Set ambient light
 	mAmbientLight = ColourValue(0.5, 0.5, 0.5);
@@ -305,8 +302,7 @@
 	{
 		// the objects are generated randomly distributed over the terrain
-		generateScene(1000, 0); // create soldiers, trees, ninjas
-		if (0)
-			generateScene(500, 1);
-		generateScene(500, 2);
+		if (1) generateScene(500, 0); // create robots
+		if (0) generateScene(100, 1); // create trees
+		if (0) generateScene(100, 2); // create ninjas
 	}
 }
Index: GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TerrainFrameListener.h
===================================================================
--- GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TerrainFrameListener.h	(revision 639)
+++ GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TerrainFrameListener.h	(revision 723)
@@ -81,6 +81,6 @@
 			<< "best FPS: " << mBestFps << "\n"
 			<< "worst FPS: " << mWorstFps << "\n"
+			<< "#frames: " << mFrameCount << "\n"
 			<< "avg. #triangles: " << avgTris << " M\n"
-			<< "#frames: " << mFrameCount << "\n"
 			<< "avg. #query culled nodes: " << avgFrustumCulledNodes << "\n"
 			<< "avg. #frustum culled nodes: " << avgQueryCulledNodes << "\n"
@@ -151,5 +151,10 @@
 
    // visualization modes for scene nodes
-   enum {NODEVIZ_NONE, NODEVIZ_RENDER_NODES, NODEVIZ_RENDER_NODES_AND_CONTENT, NODEVIZ_MODES_NUM};
+   enum {
+		 NODEVIZ_NONE, 
+		 NODEVIZ_RENDER_NODES, 
+		 NODEVIZ_RENDER_NODES_AND_CONTENT, 
+		 NODEVIZ_MODES_NUM};
+
    //enum {NODEVIZ_NONE, NODEVIZ_RENDER_GEOMETRY, NODEVIZ_MODES_NUM};
 
@@ -163,24 +168,12 @@
    void moveCamera();
 
-   void writeFrames();
-   void loadFrames();
-
-	// quick hack
-	void writeNewFrameInfo();
-    
+   void writeFrames(const std::string filename, const FrameInfoContainer &frameInfo) const;
+   void loadFrames(const std::string filename, FrameInfoContainer &frameInfo);
+
     bool processUnbufferedKeyInput(const FrameEvent& evt);
     bool processUnbufferedMouseInput(const FrameEvent& evt);
 
-	void switchMouseMode() 
-	{
-        mUseBufferedInputMouse = !mUseBufferedInputMouse;
-		mInputDevice->setBufferedInput(true, mUseBufferedInputMouse);
-
-		if (!mUseBufferedInputMouse)
-			CEGUI::MouseCursor::getSingleton().hide();
-		else
-			CEGUI::MouseCursor::getSingleton().show();
-	}
-
+	void switchMouseMode();
+	
 	/** Shows the frame / algorithm statistics.
 	*/ 
@@ -213,4 +206,5 @@
     void changeThreshold(int incr);
 	void changeAssumedVisibility(int incr);
+	void changeVizScale(const int incr);
 	void setTestGeometryForVisibleLeaves(bool testGeometryForVisibleLeaves);
 	/** Shows octree hierarchy of the scene.
@@ -248,4 +242,5 @@
 
 	static String msAlgorithmCaptions[];
+	static String msApprevAlgorithmCaptions[];
 	static String msQueryTypeCaptions[]; 
 	static String msQueryRelativeVisCaptions[];
@@ -288,7 +283,27 @@
 	WalkthroughStats mWalkthroughStats;
 
-	/// HACK for demo
-	float mDemoFps;
-	bool mUseDemoFps;
+	/// visualization scale
+	float mVizScale;
+
+	////////////////////////////////////////////////////////////////////////
+
+	/** HACK for recording demo: 
+		1) the walkthrough must be recorded. 
+		2) the walktrough must be replayed using the different options, e.g., CHC 
+		   with the mSavePrecomputedFps option. This saves the frame rates
+		   for the different methods.
+	    3) the walkthrough must then be replayed with the mRecordDemo options turned on.
+		   for the video recording we are using FRAPS.
+	*/
+
+	/// the currently interpolated FPS
+	float mPrecomputedFps;
+	/// saves the precomputed fps for the different methods.
+	bool mSavePrecomputedFps;
+	/// displayes the precomputed fps
+	bool mRecordDemo;
+	
+	////////////////////////////////////////////////////////////////////////////
+
 
 	OverlayElement *mAlgorithmInfo;
@@ -309,4 +324,7 @@
 	OverlayElement *mCurrentObjectTypeInfo;
 
+	OverlayElement *mMyStatsAlgorithmInfo;
+	OverlayElement *mMyStatsFpsInfo;
+
 	OverlayElement *mQueryTypeInfo;
 	OverlayElement *mQueryVisibleNodesInfo;
@@ -334,5 +352,6 @@
 	bool mShowHelp;
 	bool mStatsOn;
-	bool mLMouseDown, mRMouseDown;     // True if the mouse buttons are down
+	bool mLMouseDown;
+	bool mRMouseDown;     // True if the mouse buttons are down
 	bool mShutdownRequested;
 	bool mDisplayCameraDetails;
@@ -349,6 +368,6 @@
 	/// Per frame data stored for a walkthrough
 	FrameInfoContainer mFrameInfo;
-	/// HACK: for demo
-	FrameInfoContainer mSavedFrameInfo;
+	/// HACK for demo
+	FrameInfoContainer mPrecomputedFpsFrameInfo;
 	
 	Real mReplayTimeElapsed;
@@ -379,4 +398,5 @@
 	Overlay* mCullStatsOverlay;
 	Overlay* mQueryOverlay;
+	Overlay* mMyStatsOverlay;
 
 	Light *mSunLight;
Index: GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrainApplication.h
===================================================================
--- GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrainApplication.h	(revision 639)
+++ GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrainApplication.h	(revision 723)
@@ -10,4 +10,5 @@
 
 #include <OgreEntity.h>
+#include <string>
 
 // z order index of visualizaion viewport
