Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp	(revision 2836)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp	(revision 2837)
@@ -29,4 +29,5 @@
 #include "PerformanceGraph.h"
 #include "Environment.h"
+#include "Halton.h"
 
 
@@ -169,6 +170,6 @@
 bool upKeyPressed = false;
 bool downKeyPressed = false;
-bool nineKeyPressed = false;
-bool eightKeyPressed = false;
+bool descendKeyPressed = false;
+bool ascendKeyPressed = false;
 
 bool useSsao = false;
@@ -186,4 +187,5 @@
 bool useFullScreen = false;
 
+float expFactor = 0.1f;
 
 // ssao number of samples
@@ -275,9 +277,8 @@
 
 static CGparameter sSamplesParamSsao; 
-
-static CGparameter sOldTexParam;
 static CGparameter sOldTexParamSsao;
-
 static CGparameter sNoiseMultiplierParam;
+static CGparameter sExpFactorParamSsao;
+
 
 static void cgErrorCallback()
@@ -313,35 +314,43 @@
 	int returnCode = 0;
 
+	Vector3 camPos(.0f, .0f, .0f);
+
 	cout << "=== reading environment file === " << endl;
 
-	env.Read("src/default.env");
-
-	env.GetIntParam(string("assumedVisibleFrames"), assumedVisibleFrames);
-	env.GetIntParam(string("maxBatchSize"), maxBatchSize);
-	env.GetIntParam(string("trianglesPerVirtualLeaf"), trianglesPerVirtualLeaf);
-
-	env.GetFloatParam(string("keyForwardMotion"), keyForwardMotion);
-	env.GetFloatParam(string("keyRotation"), keyRotation);
-
-	env.GetIntParam(string("winWidth"), winWidth);
-	env.GetIntParam(string("winHeight"), winHeight);
-
-	env.GetBoolParam(string("useFullScreen"), useFullScreen);
-	//env.GetIntParam(string("numSssaoSamples"), numSsaoSamples);
-
-	Vector3 camPos;
-	env.GetVectorParam(string("camPosition"), camPos);
-
-	cout << "assumedVisibleFrames: " << assumedVisibleFrames << endl; 
-	cout << "maxBatchSize: " << maxBatchSize << endl;
-	cout << "trianglesPerVirtualLeaf: " << trianglesPerVirtualLeaf << endl;
-
-	cout << "keyForwardMotion: " << keyForwardMotion << endl;
-	cout << "keyRotation: " << keyRotation << endl;
-	cout << "winWidth: " << winWidth << endl;
-	cout << "winHeight: " << winHeight << endl;
-	cout << "useFullScreen: " << useFullScreen << endl;
-	cout << "camPosition: " << camPos << endl;
-
+	string envFileName = "default.env";
+	if (!env.Read(envFileName))
+	{
+		cerr << "loading environment " << envFileName << " failed!" << endl;
+	}
+	else
+	{
+		env.GetIntParam(string("assumedVisibleFrames"), assumedVisibleFrames);
+		env.GetIntParam(string("maxBatchSize"), maxBatchSize);
+		env.GetIntParam(string("trianglesPerVirtualLeaf"), trianglesPerVirtualLeaf);
+
+		env.GetFloatParam(string("keyForwardMotion"), keyForwardMotion);
+		env.GetFloatParam(string("keyRotation"), keyRotation);
+
+		env.GetIntParam(string("winWidth"), winWidth);
+		env.GetIntParam(string("winHeight"), winHeight);
+
+		env.GetBoolParam(string("useFullScreen"), useFullScreen);
+		//env.GetIntParam(string("numSssaoSamples"), numSsaoSamples);
+		env.GetFloatParam(string("expFactor"), expFactor);
+
+		env.GetVectorParam(string("camPosition"), camPos);
+
+		cout << "assumedVisibleFrames: " << assumedVisibleFrames << endl; 
+		cout << "maxBatchSize: " << maxBatchSize << endl;
+		cout << "trianglesPerVirtualLeaf: " << trianglesPerVirtualLeaf << endl;
+
+		cout << "keyForwardMotion: " << keyForwardMotion << endl;
+		cout << "keyRotation: " << keyRotation << endl;
+		cout << "winWidth: " << winWidth << endl;
+		cout << "winHeight: " << winHeight << endl;
+		cout << "useFullScreen: " << useFullScreen << endl;
+		cout << "camPosition: " << camPos << endl;
+		cout << "expFactor: " << expFactor << endl;
+	}
 
 	///////////////////////////
@@ -560,6 +569,8 @@
 		sOldModelViewProjMatrixParam = cgGetNamedParameter(sCgSsaoProgram, "oldModelViewProj");
 		sMaxDepthParamSsao = cgGetNamedParameter(sCgSsaoProgram, "maxDepth");
+		sExpFactorParamSsao = cgGetNamedParameter(sCgSsaoProgram, "expFactor");
 
 		cgGLSetParameter1f(sMaxDepthParamSsao, myfar / 10.0f);
+		cgGLSetParameter1f(sExpFactorParamSsao, expFactor);
 
 		sSamplesParamSsao = cgGetNamedParameter(sCgSsaoProgram, "samples");
@@ -588,6 +599,4 @@
 		sColorsTexParam = cgGetNamedParameter(sCgDeferredProgram, "colors");  
 		sNormalsTexParam = cgGetNamedParameter(sCgDeferredProgram, "normals"); 
-
-		sOldTexParam = cgGetNamedParameter(sCgDeferredProgram, "oldTex");  
 	}
 	else
@@ -647,5 +656,5 @@
 	glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, colorsBuffer);
 	
-	glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA32F_ARB, texWidth, texHeight);
+	glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA16F_ARB, texWidth, texHeight);
 	int samples = 8;
 	//glEnable(GL_MULTISAMPLE_ARB);
@@ -656,5 +665,5 @@
 	glBindTexture(GL_TEXTURE_2D, colorsTex);
 
-	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F_ARB, texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, NULL);
+	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB, texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, NULL);
 	//glGenerateMipmapEXT(GL_TEXTURE_2D);
 	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, colorsTex, 0);
@@ -742,5 +751,5 @@
 	glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, colorsBuffer1);
 	
-	glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA32F_ARB, texWidth, texHeight);
+	glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA16F_ARB, texWidth, texHeight);
 	glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, colorsBuffer1);
 	
@@ -748,5 +757,5 @@
 	glBindTexture(GL_TEXTURE_2D, colorsTex1);
 
-	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F_ARB, texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, NULL);
+	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB, texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, NULL);
 	//glGenerateMipmapEXT(GL_TEXTURE_2D);
 	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, colorsTex1, 0);
@@ -777,5 +786,5 @@
 	glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, colorsBuffer2);
 	
-	glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA32F_ARB, texWidth, texHeight);
+	glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA16F_ARB, texWidth, texHeight);
 	glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, colorsBuffer2);
 	
@@ -783,5 +792,5 @@
 	glBindTexture(GL_TEXTURE_2D, colorsTex2);
 
-	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F_ARB, texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, NULL);
+	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB, texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, NULL);
 	//glGenerateMipmapEXT(GL_TEXTURE_2D);
 	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, colorsTex2, 0);
@@ -789,7 +798,7 @@
 	//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 	//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
-
 	//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 	//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
@@ -890,7 +899,7 @@
 		"",
 		"'-'/'+'        - decreases/increases max batch size",
-		"'4'/'5'        - decreases/increases triangles per virtual bvh leaf (sets bvh depth)",
-		"'6'/'7'        - decreases/increases assumed visible frames",
-		"'8'/'9'        - downward/upward motion",
+		"'1'/'2'        - downward/upward motion",
+		"'3'/'4'        - decreases/increases triangles per virtual bvh leaf (sets bvh depth)",
+		"'5'/'6'        - decreases/increases assumed visible frames",
 		"",
 		"'R'            - use render queue",
@@ -1100,8 +1109,8 @@
 	if (downKeyPressed)
 		KeyHorizontalMotion(-KeyShift());
-	if (eightKeyPressed)
+	if (ascendKeyPressed)
+		KeyVerticalMotion(KeyShift());
+	if (descendKeyPressed)
 		KeyVerticalMotion(-KeyShift());
-	if (nineKeyPressed)
-		KeyVerticalMotion(KeyShift());
 
 	// place view on ground
@@ -1278,13 +1287,4 @@
 		traverser->SetMaxBatchSize(maxBatchSize);		
 		break;
-	case '6':
-		assumedVisibleFrames -= 1;
-		if (assumedVisibleFrames < 1) assumedVisibleFrames = 1;
-		traverser->SetAssumedVisibleFrames(assumedVisibleFrames);
-		break;
-	case '7':
-		assumedVisibleFrames += 1;
-		traverser->SetAssumedVisibleFrames(assumedVisibleFrames);		
-		break;
 	case 'M':
 	case 'm':
@@ -1292,10 +1292,35 @@
 		traverser->SetUseMultiQueries(useMultiQueries);
 		break;
+	case '1':
+		descendKeyPressed = true;
+		break;
+	case '2':
+		ascendKeyPressed = true;
+		break;
+	case '3':
+		if (trianglesPerVirtualLeaf >= 100)
+			trianglesPerVirtualLeaf -= 100;
+		bvh->SetVirtualLeaves(trianglesPerVirtualLeaf);
+		break;
+	case '4':
+		trianglesPerVirtualLeaf += 100;
+		bvh->SetVirtualLeaves(trianglesPerVirtualLeaf);
+		break;
+	case '5':
+		assumedVisibleFrames -= 1;
+		if (assumedVisibleFrames < 1) assumedVisibleFrames = 1;
+		traverser->SetAssumedVisibleFrames(assumedVisibleFrames);
+		break;
+	case '6':
+		assumedVisibleFrames += 1;
+		traverser->SetAssumedVisibleFrames(assumedVisibleFrames);		
+		break;
+	case '7':
+		expFactor *= 0.5f;
+		break;
 	case '8':
-			eightKeyPressed = true;
-			break;
-	case '9':
-			nineKeyPressed = true;
-			break;
+		expFactor *= 2.0f;
+		if (expFactor > 1.0f) expFactor = 1.0f;
+		break;
 	case 'o':
 	case 'O':
@@ -1333,14 +1358,4 @@
 		}
 		break;
-	case '4':
-		if (trianglesPerVirtualLeaf >= 100)
-			trianglesPerVirtualLeaf -= 100;
-
-		bvh->SetVirtualLeaves(trianglesPerVirtualLeaf);
-		break;
-	case '5':
-		trianglesPerVirtualLeaf += 100;
-		bvh->SetVirtualLeaves(trianglesPerVirtualLeaf);
-		break;
 	default:
 		return;
@@ -1394,10 +1409,9 @@
 		downKeyPressed = false;
 		break;
-	case '8':
-		eightKeyPressed = false;
-		break;
-	
-	case '9':
-		nineKeyPressed = false;
+	case '1':
+		descendKeyPressed = false;
+		break;
+	case '2':
+		ascendKeyPressed = false;
 		break;
 	
@@ -2094,4 +2108,5 @@
 
 		cgGLSetParameter1f(sNoiseMultiplierParam, RandomValue(3.0f, 17.0f));
+		cgGLSetParameter1f(sExpFactorParamSsao, expFactor);
 
 		GenerateSamples(); cgGLSetParameterArray2f(sSamplesParamSsao, 0, NUM_SAMPLES, (const float *)samples);
@@ -2109,7 +2124,4 @@
 		cgGLSetTextureParameter(sNormalsTexParam, normalsTex);
 		cgGLEnableTextureParameter(sNormalsTexParam);
-
-		cgGLSetTextureParameter(sOldTexParam, oldTex);
-		cgGLEnableTextureParameter(sOldTexParam);
 	}
 
@@ -2146,5 +2158,4 @@
 		cgGLDisableTextureParameter(sPositionsTexParam);
 		cgGLDisableTextureParameter(sNormalsTexParam);
-		cgGLDisableTextureParameter(sOldTexParam);
 	}
 
@@ -2212,4 +2223,8 @@
 void GenerateSamples()
 {
+	static HaltonSequence halton;
+
+	float r[2];
+
 	// generates poisson distribution on disc
 	float minDist = 2.0f / sqrt((float)NUM_SAMPLES);
@@ -2227,6 +2242,11 @@
 			++ totalTries;
 
-			const float rx = RandomValue(-1, 1);
-			const float ry = RandomValue(-1, 1);
+			halton.GetNext(2, r);
+
+			//const float rx = RandomValue(-1, 1);
+			//const float ry = RandomValue(-1, 1);
+
+			const float rx = r[0] * 2.0f - 1.0f;
+			const float ry = r[1] * 2.0f - 1.0f;
 
 			// check if in disk, else exit early
@@ -2260,5 +2280,5 @@
 			}
 		}
-		//cout << "sample: " << samples[i] << " " << i /2 << " " << samples[i + 1] << " r: " << sqrt(samples[i] * samples[i]  + samples[i + 1] * samples[i + 1]) << " tries: " << totalTries << endl;
+		//cout << "sample: " << samples[i] << " " << i / 2 << " " << samples[i + 1] << " r: " << sqrt(samples[i] * samples[i]  + samples[i + 1] * samples[i + 1]) << " tries: " << totalTries << endl;
 	}
 
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/deferred.cg
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/deferred.cg	(revision 2836)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/deferred.cg	(revision 2837)
@@ -5,10 +5,12 @@
 //#define NUM_SAMPLES 8
 #define NUM_SAMPLES 16
+
+// rule of thumb: approx 1 / NUM_SAMPLES
+#define SAMPLE_INTENSITY 0.2
 //#define SAMPLE_INTENSITY 0.125f
-// rule of thumb: approx 1 / NUM_SAMPLES
-#define SAMPLE_INTENSITY 0.22 //0.0625f
 
 #define AREA_SIZE 5e-1f
-
+#define VIEW_CORRECTION_SCALE 0.3f
+#define DISTANCE_SCALE 1e-6f
 
 struct fragment
@@ -23,5 +25,5 @@
 struct pixel
 {
-  float4 color: COLOR0;
+	float4 color: COLOR0;
 };
 
@@ -96,11 +98,9 @@
 
 		// distance between current position and sample position controls AO intensity.
-		const float distanceScale = 1e-6f;
-
 		float distance_intensity = 
-			(SAMPLE_INTENSITY * distanceScale) / (distanceScale + length_to_sample * length_to_sample);
+			(SAMPLE_INTENSITY * DISTANCE_SCALE) / (DISTANCE_SCALE + length_to_sample * length_to_sample);
 
 		// if normal perpenticular to view dir, only half of the samples count
-		float view_correction = 1.0f + 0.5f * (1.0f - dot(currentViewDir, currentNormal));
+		float view_correction = 1.0f + VIEW_CORRECTION_SCALE * (1.0f - dot(currentViewDir, currentNormal));
 
 		total_ao += cos_angle * distance_intensity * view_correction;
@@ -119,5 +119,6 @@
 				 uniform float3 currentViewDir,
 				 uniform float noiseMultiplier,
-				 uniform float4 centerPosition)
+				 uniform float4 centerPosition
+				 )
 {
 	// the w coordinate from the persp. projection
@@ -158,12 +159,9 @@
 
 		// distance between current position and sample position controls AO intensity.
-		const float distanceScale = 1e-6f;
-
 		float distance_intensity = 
-			(SAMPLE_INTENSITY * distanceScale) / (distanceScale + length_to_sample * length_to_sample);
-
-		const float view_correction_scale = 0.5f;
+			(SAMPLE_INTENSITY * DISTANCE_SCALE) / (DISTANCE_SCALE + length_to_sample * length_to_sample);
+
 		// if normal perpenticular to view dir, only half of the samples count
-		float view_correction = 1.0f + view_correction_scale * (1.0f - dot(currentViewDir, currentNormal));
+		float view_correction = 1.0f + VIEW_CORRECTION_SCALE * (1.0f - dot(currentViewDir, currentNormal));
 
 		total_ao += cos_angle * distance_intensity * view_correction;
@@ -213,5 +211,6 @@
 				uniform sampler2D oldTex,
 				const uniform float4x4 oldModelViewProj,
-				uniform float maxDepth
+				uniform float maxDepth,
+				uniform float expFactor
 				)
 {
@@ -230,16 +229,12 @@
 	float4 col = shade(IN, colors, positions, normal.xyz, amb);
 
-	//float ao = ssao(IN, positions, noiseTexture, samples, normal.xyz, viewDir, noiseMultiplier, centerPosition);
-	float4 new_col = globIllum(IN, colors, positions, noiseTexture, samples, normal.xyz, viewDir, noiseMultiplier, centerPosition); 
-	float ao = new_col.w;
-
-	float4 attenuated_color = ao * col + new_col;
-	//float4 attenuated_color = ao * col;
-
-	//OUT.color = ao;
-	//OUT.color = ao * col;
-	//float4 col1 = attenuated_color;
-
-	const float x = 0.1f;
+	float ao = ssao(IN, positions, noiseTexture, samples, normal.xyz, viewDir, noiseMultiplier, centerPosition);
+	float4 attenuated_color = ao * col;
+
+	//float4 new_col = globIllum(IN, colors, positions, noiseTexture, samples, normal.xyz, viewDir, noiseMultiplier, centerPosition); 
+	//float ao = new_col.w;
+	//float4 attenuated_color = ao * col + new_col;
+	
+	const float x = expFactor;
 
 	float4 dummy = centerPosition * maxDepth;
@@ -254,14 +249,13 @@
 
 	float oldDepth = col1.w;
-
-	if ((tex.x >= 0.0f) && (tex.x < 1.0f) && (tex.y >= 0.0f) && (tex.y < 1.0f) && (abs(newDepth - oldDepth) < 9e-4f))
-		OUT.color = attenuated_color * x + col1 * float4(1.0f - x);
+	float depthDif = 1.0f - newDepth / oldDepth;
+
+	if ((tex.x >= 0.0f) && (tex.x < 1.0f) && 
+		(tex.y >= 0.0f) && (tex.y < 1.0f) && 
+		(abs(depthDif)  < 9e-4f))
+		OUT.color = attenuated_color * expFactor + col1 * float4(1.0f - expFactor);
 	else
 		OUT.color = attenuated_color;
 
-	//OUT.color = float4(centerPosition.w);
-	//OUT.color = float4(oldDepth);
-	//OUT.color = float4(newDepth);
-	//OUT.color = float4(abs(newDepth - oldDepth));
 	OUT.color.w = tex2D(colors, IN.texCoord.xy).w;
 
@@ -273,6 +267,5 @@
 		   uniform sampler2D colors,
 		   uniform sampler2D positions,
-		   uniform sampler2D normals,
-		   uniform sampler2D oldTex
+		   uniform sampler2D normals
 		   )
 {
@@ -282,15 +275,9 @@
 	float amb = normal.w;
 
-	//OUT.color.xyz = IN.view;
 	// expand normal
 	normal = normalize(normal * 2.0f - float4(1.0f));
 
 	float4 col = shade(IN, colors, positions, normal.xyz, amb);
-	//OUT.color = col;
-
-	float4 col1 = tex2D(oldTex, IN.texCoord.xy);
-
-	const float x = 0.01f;
-	OUT.color = col * x + col1 * float4(1.0f - x);
+	OUT.color = col;
 
 	return OUT;
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/mrt.cg
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/mrt.cg	(revision 2836)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/mrt.cg	(revision 2837)
@@ -105,5 +105,5 @@
   // hack: squeeze some information about ambient into the texture
   pix.norm.w = ambient.x;
-  pix.pos.w = IN.mypos.w; //IN.projPos.w;
+  pix.pos.w = IN.mypos.w;
   pix.col.w = IN.mypos.z / IN.mypos.w;
 
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/default.env
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/default.env	(revision 2836)
+++ 	(revision )
@@ -1,13 +1,0 @@
-#############################
-# environment file for the friendlyculling demo
-
-assumedVisibleFrames=10
-maxBatchSize=50
-trianglesPerVirtualLeaf=500
-keyForwardMotion=20.0f
-keyRotation=1.5f
-winWidth=1024
-winHeight=768
-camPosition=483.398f 242.364f 186.078f
-useFullScreen=0
-numSsaoSamples=8
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/default.env
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/default.env	(revision 2837)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/default.env	(revision 2837)
@@ -0,0 +1,13 @@
+#############################
+# environment file for the friendlyculling demo
+
+assumedVisibleFrames=10
+maxBatchSize=50
+trianglesPerVirtualLeaf=500
+keyForwardMotion=20.0f
+keyRotation=1.5f
+winWidth=1024
+winHeight=768
+camPosition=483.398f 242.364f 186.078f
+useFullScreen=0
+numSsaoSamples=8
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj	(revision 2834)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj	(revision 2837)
@@ -244,4 +244,12 @@
 			</File>
 			<File
+				RelativePath=".\src\Halton.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\src\Halton.h"
+				>
+			</File>
+			<File
 				RelativePath=".\src\Matrix4x4.cpp"
 				>
