Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaderenv.h
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaderenv.h	(revision 3100)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaderenv.h	(revision 3103)
@@ -18,4 +18,5 @@
 //#define DISTANCE_SCALE 1e-1f
 #define DISTANCE_SCALE 5e-2f
+//#define DISTANCE_SCALE 0.2f
 
 //#define ILLUM_INTENSITY 8e-2f
@@ -42,6 +43,6 @@
 #define MAX_LOD_LEVEL 10
 
-#define MIN_DEPTH_DIFF 1e-2f
-//#define MIN_DEPTH_DIFF 5e-1f
+//#define MIN_DEPTH_DIFF 1e-2f
+#define MIN_DEPTH_DIFF 0.1f
 #define PRECISION_SCALE 1e-1f
 
@@ -52,7 +53,7 @@
 ///////////////////
 
-#define NUM_DOWNSAMPLES 16
+#define NUM_DOWNSAMPLES 9
 
-#define NUM_SSAO_FILTERSAMPLES 100
+#define NUM_SSAO_FILTERSAMPLES 28
 
 
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/tonemap.cg
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/tonemap.cg	(revision 3017)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/tonemap.cg	(revision 3103)
@@ -91,5 +91,4 @@
 	{
 		color = tex2D(colors, downSampleOffs[i]);
-
 		const float intensity = dot(cols[i].rgb, w);
 
@@ -146,5 +145,5 @@
 	
 	// obtain new image key from highest mipmap level
-	float logLumScaled = tex2Dlod(colors, float4(.5f, .5f, 0, 99)).w;
+	float logLumScaled = tex2Dlod(colors, float4(.5f, .5f, 0, MAX_LOD_LEVEL)).w;
 	float logLum = logLumScaled * LOGLUM_RANGE + MINLOGLUM;
 
@@ -153,5 +152,4 @@
 	// adjust to middle gray
 	const float lum = middleGrey * pixLum / newImageKey;
-	 
 	// map to range and calc burnout
 	const float scaleLum = lum * (1.0f + lum / whiteLum * whiteLum) / (1.0f + lum);
@@ -170,7 +168,6 @@
 
 	pixel OUT;
-	
+
 	const float4 color = tex2Dlod(colors, float4(IN.texCoord.xy, 0, 0));
-
 	OUT.col = color;
 
@@ -187,5 +184,6 @@
 	float logLumScaled = logLum * INV_LOGLUM_RANGE - logLumOffset;
 
-	if (oldLogLum > 1e-5f) // too bright
+	// exponential smoothing of tone mapping over time
+	if (oldLogLum > 1e-5f) // loglum from last frame too bright
 		OUT.col.w = lerp(oldLogLum, logLumScaled, 0.1f);
 	else
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/ssao.cg
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/ssao.cg	(revision 3101)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/ssao.cg	(revision 3103)
@@ -4,8 +4,4 @@
 // Screen Spaced Ambient Occlusion shader
 // based on shader of Alexander Kusternig
-
-
-#define USE_EYE_SPACE_DEPTH 1
-
 
 struct fragment
@@ -82,5 +78,5 @@
 							   )
 {
-	const float2 mynoise = tex2D(noiseTex, texcoord0).xy;
+	const float2 mynoise = tex2Dlod(noiseTex, texcoord0).xy;
 
 	const float2 offsetTransformed = myreflect(offset, mynoise);
@@ -151,8 +147,8 @@
 	//else trafo = inverseModelTrafo * oldModelViewProj;
 
-	float3 dummyPt = worldPos.xyz - oldEyePos;
+	float3 translatedPt = worldPos.xyz - oldEyePos;
 
 	// reproject into old frame and calculate texture position of sample in old frame
-	float4 backProjPos = mul(oldModelViewProj, float4(dummyPt, 1.0f));
+	float4 backProjPos = mul(oldModelViewProj, float4(translatedPt, 1.0f));
 	backProjPos /= backProjPos.w;
 	// fit from unit cube into 0 .. 1
@@ -169,10 +165,12 @@
 	
 	const float invlen = 1.0f / length(viewVec);
-	const float projectedEyeSpaceDepth = length(dummyPt) * invlen;
+	const float projectedEyeSpaceDepth = length(translatedPt) * invlen;
 	
 	const float depthDif = abs(oldEyeSpaceDepth - projectedEyeSpaceDepth);
+	//const float depthDif = abs(oldEyeSpaceDepth - projectedEyeSpaceDepth) / projectedEyeSpaceDepth;
 	
 	float notValid = 0.5f;
 
+	/*
 	for (int i = 0; i < NUM_SAMPLES; ++ i) 
 	{
@@ -191,4 +189,5 @@
 		if (sampleDif >= 5e-2f) ++ notValid;
 	}
+	*/
 
 	// the number of valid samples in this frame
@@ -202,5 +201,5 @@
 		&& (oldTexCoords.x >= 0.0f) && (oldTexCoords.x < 1.0f)
 		&& (oldTexCoords.y >= 0.0f) && (oldTexCoords.y < 1.0f)
-		&& (abs(depthDif) <= MIN_DEPTH_DIFF) 
+		&& (depthDif <= MIN_DEPTH_DIFF) 
 		// if visibility changed in the surrounding area we have to recompute
 		//&& (oldNumSamples > 0.8f * newNumSamples)
@@ -259,5 +258,5 @@
 		//-- add random noise: reflect around random normal vector (rather slow!)
 
-		float2 mynoise = tex2D(noiseTex, IN.texCoord).xy;
+		float2 mynoise = tex2Dlod(noiseTex, float4(IN.texCoord * 4.0f, 0, 0)).xy;
 		const float2 offsetTransformed = myreflect(offset, mynoise);
 #else
@@ -275,11 +274,11 @@
 
 		float3 dirSample = samplePos - centerPosition;
-		const float lengthToSample = length(dirSample);
+		const float lengthToSample = max(length(dirSample), 1e-6f);
 
 		dirSample /= lengthToSample; // normalize
 
 		// angle between current normal and direction to sample controls AO intensity.
-		const float cosAngle = max(dot(dirSample, normal), .0f);
-
+		float cosAngle = max(dot(dirSample, normal), .0f);
+	
 		// the distance_scale offset is used to avoid singularity that occurs at global illumination when 
 		// the distance to a sample approaches zero
@@ -291,5 +290,5 @@
 		// => compensate for this (on the other hand, projected sampling area could be larger!)
 
-		const float viewCorrection = 1.0f + VIEW_CORRECTION_SCALE * dot(viewDir, normal);
+		const float viewCorrection = 1.0f + VIEW_CORRECTION_SCALE * max(dot(viewDir, normal), 0.0f);
 		total_ao += cosAngle * aoContrib * viewCorrection;
 #else
@@ -352,48 +351,5 @@
 									  oldbl, oldbr, oldtl, oldtr);
 
+	//OUT.illum_col.xyz = normal * 0.5f + 0.5f;
 	return OUT;
 }
-
-
-float Filter(float2 texCoord, 
-			 uniform sampler2D ssaoTex,
-			 uniform float2 filterOffs[NUM_SSAO_FILTERSAMPLES],
-			 uniform float filterWeights[NUM_SSAO_FILTERSAMPLES])
-{
-	float average = .0f;
-	float w = .0f;
-
-	for (int i = 0; i < NUM_SSAO_FILTERSAMPLES; ++ i)
-	{
-		average += filterWeights[i] * tex2Dlod(ssaoTex, float4(texCoord + filterOffs[i], 0, 0)).x;
-		w += filterWeights[i];
-	}
-
-	average *= 1.0f / (float)w;
-
-	return average;
-}
-
-
-pixel combine(fragment IN, 
-			  uniform sampler2D colors,
-			  uniform sampler2D ssaoTex,
-			  uniform float2 filterOffs[NUM_SSAO_FILTERSAMPLES],
-			  uniform float filterWeights[NUM_SSAO_FILTERSAMPLES]
-			  )
-{
-	pixel OUT;
-
-	float4 col = tex2Dlod(colors, float4(IN.texCoord, 0, 0));
-	float4 ao = tex2Dlod(ssaoTex, float4(IN.texCoord, 0, 0));
-
-	if (ao.y < 10.0f) ao.x = Filter(IN.texCoord, ssaoTex, filterOffs, filterWeights);
-
-	OUT.illum_col = col * ao.x;
-	//OUT.illum_col = float4(ao.y, ao.y, ao.y, col.w);
-	//OUT.illum_col.xyz = float3(1.0f - ao.x, 1.0f - ao.y * 1e-2f, 1);
-	//OUT.illum_col.xyz = float3(1.0f - ao.x, ao.y, 0);
-	OUT.illum_col.w = col.w;
-
-	return OUT;
-}
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/globillum.cg
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/globillum.cg	(revision 3094)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/globillum.cg	(revision 3103)
@@ -104,6 +104,6 @@
 		//-- reconstruct world space position from sample
 
-		//const float4 sample = tex2Dlod(colors, float4(texcoord, 0, 0));
-		const float4 sample = tex2D(colors, texcoord);
+		const float4 sample = tex2Dlod(colors, float4(texcoord, 0, 0));
+		//const float4 sample = tex2D(colors, texcoord);
 
 		const float eyeSpaceDepth = sample.w;
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneQuery.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneQuery.cpp	(revision 3102)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneQuery.cpp	(revision 3103)
@@ -162,13 +162,12 @@
 	glMatrixMode(GL_MODELVIEW);
 	glPushMatrix();
-	//glLoadIdentity();
+	glLoadIdentity();
 
 	glMatrixMode(GL_PROJECTION);
 	glPushMatrix();
-	//glLoadIdentity();
+	glLoadIdentity();
 
 	OrthoCamera *orthoCam = new OrthoCamera(xlen, -xlen, ylen, -ylen, .0f, mSceneBox.Size().z);
 	
-	orthoCam->Yaw(.5 * M_PI);
 	orthoCam->SetDirection(Vector3(0, 0, -1));
 	orthoCam->SetPosition(pos);
@@ -177,5 +176,5 @@
 
 	//glOrtho(xlen, -xlen, ylen, -ylen, 0.0f, mSceneBox.Size().z); 
-	//glMatrixMode(GL_MODELVIEW);
+	glMatrixMode(GL_MODELVIEW);
 	//orthoCam->SetupCameraView();
 
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SampleGenerator.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SampleGenerator.cpp	(revision 2955)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SampleGenerator.cpp	(revision 3103)
@@ -68,5 +68,10 @@
 
 			// check if in disk, else exit early
-			if (rx * rx + ry * ry > mRadius * mRadius)
+			const float distanceSquared = rx * rx + ry * ry;
+
+			if ((rx * rx + ry * ry > mRadius * mRadius) 
+				// also test if sample exactly in center => avoid that				
+				|| (distanceSquared <= 1e-3f)
+				)
 				continue;
 
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp	(revision 3102)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp	(revision 3103)
@@ -458,5 +458,5 @@
 	//-- load some dynamic stuff
 
-	/*LoadModel("hbuddha.dem", dynamicObjects);
+	LoadModel("hbuddha.dem", dynamicObjects);
 	//LoadModel("hbuddha2.dem", dynamicObjects);
 	buddha = dynamicObjects.back();
@@ -484,5 +484,4 @@
 	}
 
-*/
 
 	///////////
@@ -884,5 +883,5 @@
 
 	Matrix4x4 mat = TranslationMatrix(planepos);
-	//buddha->GetTransform()->SetMatrix(mat);
+	buddha->GetTransform()->SetMatrix(mat);
 
 	Vector3 oldPos = camera->GetPosition();
@@ -933,5 +932,4 @@
 	/// enable vbo vertex array
 	glEnableClientState(GL_VERTEX_ARRAY);
-
 
 	// render with the specified method (forward rendering, forward + depth, deferred)
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Matrix4x4.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Matrix4x4.cpp	(revision 3102)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Matrix4x4.cpp	(revision 3103)
@@ -776,7 +776,7 @@
 	m.x[2][3] = .0f;
 	
-	m.x[3][0] = (right + left) * xDif;
-	m.x[3][1] = (top + bottom) * yDif;
-	m.x[3][2] = (far + near)   * zDif;
+	m.x[3][0] = -(right + left) * xDif;
+	m.x[3][1] = -(top + bottom) * yDif;
+	m.x[3][2] = -(far + near)   * zDif;
 	m.x[3][3] = 1.0f;
 
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/DeferredRenderer.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/DeferredRenderer.cpp	(revision 3095)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/DeferredRenderer.cpp	(revision 3103)
@@ -64,8 +64,10 @@
 // ssao random spherical samples
 static Sample2 samples2[NUM_SAMPLES];
-// default sequence of samples
-//static Sample2 defaultSamples2[NUM_SAMPLES];
 // number of pcf tabs
-Sample2 pcfSamples[NUM_PCF_TABS];
+static Sample2 pcfSamples[NUM_PCF_TABS];
+
+
+static float ssaoFilterOffsets[NUM_SSAO_FILTERSAMPLES * 2];
+static float ssaoFilterWeights[NUM_SSAO_FILTERSAMPLES];
 
 
@@ -78,5 +80,4 @@
 {
 	Vector3 ftl, ftr, fbl, fbr, ntl, ntr, nbl, nbr;
-
 	cam->ComputePoints(ftl, ftr, fbl, fbr, ntl, ntr, nbl, nbr);
 
@@ -257,5 +258,8 @@
 	//-- the flip-flop fbos
 
-	mIllumFbo = new FrameBufferObject(w / 2, h / 2, FrameBufferObject::DEPTH_NONE);
+	const int dsw = w / 2;
+	const int dsh = h / 2;
+
+	mIllumFbo = new FrameBufferObject(dsw, dsh, FrameBufferObject::DEPTH_NONE);
 	//mIllumFbo = new FrameBufferObject(w, h, FrameBufferObject::DEPTH_NONE);
 
@@ -268,5 +272,5 @@
 	}
 
-	mDownSampleFbo = new FrameBufferObject(w / 2, h / 2, FrameBufferObject::DEPTH_NONE);
+	mDownSampleFbo = new FrameBufferObject(dsw, dsh, FrameBufferObject::DEPTH_NONE);
 	//mDownSampleFbo = new FrameBufferObject(w, h, FrameBufferObject::DEPTH_NONE);
 	mDownSampleFbo->AddColorBuffer(ColorBufferObject::RGBA_FLOAT_32, ColorBufferObject::WRAP_CLAMP_TO_EDGE, ColorBufferObject::FILTER_LINEAR);
@@ -277,5 +281,6 @@
 
 	// create noise texture for ssao
-	CreateNoiseTex2D(mIllumFbo->GetWidth(), mIllumFbo->GetHeight());
+	//CreateNoiseTex2D(mIllumFbo->GetWidth(), mIllumFbo->GetHeight());
+	CreateNoiseTex2D(mWidth / 8, mHeight / 8);
 
 	mProjViewMatrix = IdentityMatrix();
@@ -316,5 +321,5 @@
 	sCgGiProgram = sm->CreateFragmentProgram("globillum", "main", "giFrag");
 	sCgCombineIllumProgram = sm->CreateFragmentProgram("globillum", "combine", "combineGi");
-	sCgCombineSsaoProgram = sm->CreateFragmentProgram("ssao", "combine", "combineSsao");
+	sCgCombineSsaoProgram = sm->CreateFragmentProgram("combineSsao", "combine", "combineSsao");
 	sCgAntiAliasingProgram = sm->CreateFragmentProgram("antialiasing", "main", "antiAliasing");
 	sCgToneProgram = sm->CreateFragmentProgram("tonemap", "ToneMap", "toneMap");
@@ -391,13 +396,36 @@
 	sCgCombineIllumProgram->AddParameter("illumTex", 2);
 
-	sCgCombineSsaoProgram->AddParameter("colors", 0);
-	sCgCombineSsaoProgram->AddParameter("ssaoTex", 1);
-	sCgCombineSsaoProgram->AddParameter("filterOffs", 2);
-	sCgCombineSsaoProgram->AddParameter("filterWeights", 3);
+	sCgCombineSsaoProgram->AddParameter("colorsTex", 0);
+	sCgCombineSsaoProgram->AddParameter("normalsTex", 1);
+	sCgCombineSsaoProgram->AddParameter("ssaoTex", 2);
+	sCgCombineSsaoProgram->AddParameter("filterOffs", 3);
+	sCgCombineSsaoProgram->AddParameter("filterWeights", 4);
+
+	PoissonDiscSampleGenerator2 poisson(NUM_SSAO_FILTERSAMPLES, 1.0f);
+	poisson.Generate((float *)ssaoFilterOffsets);
+
+	//const float filterWidth = 10.0f;
+	const float filterWidth = 5.0f;
+
+	//const float xoffs = filterWidth / mDownSampleFbo->GetWidth();
+	//const float yoffs = filterWidth / mDownSampleFbo->GetHeight();
+	const float xoffs = (float)filterWidth / 1024.0f;
+	const float yoffs = (float)filterWidth / 768.0f;
+
+	for (int i = 0; i < NUM_SSAO_FILTERSAMPLES; ++ i)
+	{
+		float x = ssaoFilterOffsets[2 * i + 0];
+		float y = ssaoFilterOffsets[2 * i + 1];
+
+		ssaoFilterOffsets[2 * i + 0] *= xoffs;
+		ssaoFilterOffsets[2 * i + 1] *= yoffs;
+
+		ssaoFilterWeights[i] = GaussianDistribution(x, y, 1.0f);
+	}
 
 
 	float filterWeights[NUM_PCF_TABS];
-	PoissonDiscSampleGenerator2 poisson(NUM_PCF_TABS, 1.0f);
-	poisson.Generate((float *)pcfSamples);
+	PoissonDiscSampleGenerator2 poisson2(NUM_PCF_TABS, 1.0f);
+	poisson2.Generate((float *)pcfSamples);
 
 	for (int i = 0; i < NUM_PCF_TABS; ++ i)
@@ -427,10 +455,16 @@
 		FirstPass(fbo, light);
 
+
+	if (mShadingMethod != 0)
+	{
+		// downsample fbo buffers for colors
+		DownSample(fbo, colorBufferIdx, mDownSampleFbo, 0);
+		// normals
+		DownSample(fbo, 1, mDownSampleFbo, 1);
+	}
+
 	switch (mShadingMethod)
 	{
 	case SSAO:
-		// downsample fbo buffers for colors, normals
-		DownSample(fbo, colorBufferIdx, mDownSampleFbo, 0);
-		DownSample(fbo, 1, mDownSampleFbo, 1);
 
 		ComputeSsao(fbo, tempCohFactor);
@@ -438,8 +472,4 @@
 		break;
 	case GI:
-		// downsample fbo buffers for colors, normals
-		DownSample(fbo, colorBufferIdx, mDownSampleFbo, 0);
-		DownSample(fbo, 1, mDownSampleFbo, 1);
-
 		ComputeGlobIllum(fbo, tempCohFactor);
 		CombineIllum(fbo);
@@ -707,5 +737,5 @@
 
 	GLuint colorsTex = fbo->GetColorBuffer(colorBufferIdx)->GetTexture();
-	
+	GLuint normalsTex = fbo->GetColorBuffer(1)->GetTexture();
 	GLuint ssaoTex = mIllumFbo->GetColorBuffer(mIllumFboIndex)->GetTexture();
 
@@ -714,32 +744,10 @@
 	glDrawBuffers(1, mrt + colorBufferIdx);
 
-	float filterOffsets[NUM_SSAO_FILTERSAMPLES * 2];
-	float filterWeights[NUM_SSAO_FILTERSAMPLES];
-
-	PoissonDiscSampleGenerator2 poisson(NUM_SSAO_FILTERSAMPLES, 1.0f);
-	poisson.Generate((float *)filterOffsets);
-
-	//const float filterWidth = 10.0f;
-	const float filterWidth = 7.0f;
-	const float xoffs = filterWidth / fbo->GetWidth();
-	const float yoffs = filterWidth / fbo->GetHeight();
-
-	for (int i = 0; i < NUM_SSAO_FILTERSAMPLES; ++ i)
-	{
-		float x = filterOffsets[2 * i + 0];
-		float y = filterOffsets[2 * i + 1];
-
-		filterOffsets[2 * i + 0] *= xoffs;
-		filterOffsets[2 * i + 1] *= yoffs;
-
-		filterWeights[i] = GaussianDistribution(x, y, 1.0f);
-	}
-
-	
 	sCgCombineSsaoProgram->SetTexture(0, colorsTex);
-	sCgCombineSsaoProgram->SetTexture(1, ssaoTex);
-
-	sCgCombineSsaoProgram->SetArray2f(2, (float *)filterOffsets, NUM_SSAO_FILTERSAMPLES);
-	sCgCombineSsaoProgram->SetArray1f(3, (float *)filterWeights, NUM_SSAO_FILTERSAMPLES);
+	sCgCombineSsaoProgram->SetTexture(1, normalsTex);
+	sCgCombineSsaoProgram->SetTexture(2, ssaoTex);
+
+	sCgCombineSsaoProgram->SetArray2f(3, (float *)ssaoFilterOffsets, NUM_SSAO_FILTERSAMPLES);
+	sCgCombineSsaoProgram->SetArray1f(4, (float *)ssaoFilterWeights, NUM_SSAO_FILTERSAMPLES);
 	
 	DrawQuad(sCgCombineSsaoProgram);
@@ -874,5 +882,6 @@
 
 
-void DeferredRenderer::DownSample(FrameBufferObject *fbo, int bufferIdx,
+void DeferredRenderer::DownSample(FrameBufferObject *fbo, 
+								  int bufferIdx,
 								  FrameBufferObject *downSampleFbo, 
 								  int downSampleBufferIdx)
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj	(revision 3102)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj	(revision 3103)
@@ -244,4 +244,12 @@
 			</File>
 			<File
+				RelativePath=".\src\SceneQuery.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\src\SceneQuery.h"
+				>
+			</File>
+			<File
 				RelativePath=".\src\SkyPreetham.cpp"
 				>
@@ -495,8 +503,4 @@
 				</File>
 				<File
-					RelativePath=".\src\SceneQuery.h"
-					>
-				</File>
-				<File
 					RelativePath=".\src\ShaderManager.h"
 					>
@@ -679,8 +683,4 @@
 				</File>
 				<File
-					RelativePath=".\src\SceneQuery.cpp"
-					>
-				</File>
-				<File
 					RelativePath=".\src\ShaderManager.cpp"
 					>
@@ -753,4 +753,8 @@
 			<File
 				RelativePath=".\src\shaders\antialiasing.cg"
+				>
+			</File>
+			<File
+				RelativePath=".\src\shaders\combineSsao.cg"
 				>
 			</File>
