Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ShaderManager.h
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ShaderManager.h	(revision 3045)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ShaderManager.h	(revision 3055)
@@ -1,4 +1,4 @@
-#ifndef __ResourceManager_H__
-#define __ResourceManager_H__
+#ifndef __SHADERMANAGER_H__
+#define __SHADERMANAGER_H__
 
 
@@ -9,24 +9,17 @@
 #include "common.h"
 
-
-
-class igzstream;
-
-
 namespace CHCDemoEngine
 {
 
-class SceneEntity;
-class Material;
-class Geometry;
-class Texture;
 class Matrix4x4;
 class Transform3;
 class ShaderProgram;
 
+typedef std::map<std::string, ShaderProgram *> ShaderMap;
+
 
 /** Loads a scene and also handles the cleanup
 */
-class ResourceManager
+class ShaderManager
 {
 public:
@@ -34,34 +27,17 @@
 	/** Returns the resource manager as a singleton.
 	*/
-	static ResourceManager *GetSingleton()
-	{
-		if (!sResourceManager)
-		{
-			sResourceManager = new ResourceManager();
-		}
-
-		return sResourceManager;
-	}
-
+	static ShaderManager *GetSingleton();
 	/** We also want full control over the delete.
 	*/
-	static void DelSingleton()
-	{
-		DEL_PTR(sResourceManager);
-	}
-
-	/** Loads a model
-	*/
-	bool Load(const std::string &filename, SceneEntityContainer &geometry);
-
-	int GetNumEntities() const { return (int)mSceneEntities.size(); }
-
-	/** Creates new gpu program parameters.
-	*/
-	GPUProgramParameters *CreateGPUProgramParameters(ShaderProgram *p);
+	static void DelSingleton();
 	/** Creates a new shader program.
 	*/
-	ShaderProgram *CreateFragmentProgram(const std::string &filename, const std::string &funcName);
-	ShaderProgram *CreateVertexProgram(const std::string &filename, const std::string &funcName);
+	ShaderProgram *CreateFragmentProgram(const std::string &filename,
+		                                 const std::string &funcName,
+										 const std::string &name);
+
+	ShaderProgram *CreateVertexProgram(const std::string &filename, 
+		                               const std::string &funcName,
+									   const std::string &name);
 
 	void EnableFragmentProfile();
@@ -70,4 +46,6 @@
 	void DisableFragmentProfile();
 	void DisableVertexProfile();
+
+	ShaderProgram *GetShaderProgram(const std::string &name);
 
 
@@ -78,43 +56,17 @@
 		singleton pattern.
 	*/
-	ResourceManager();
+	ShaderManager();
 
-	~ResourceManager();
+	~ShaderManager();
 
+	ShaderProgram *CreateShaderProgram(const std::string &filename,
+		                               const std::string &funcName,
+									   const std::string &name,
+									   bool isFragment);
 
-	void InitCg();
+	////////////////////////
 
-	void LoadTextures(igzstream &str);
-	void LoadShapes(igzstream &str);
-	void LoadSceneEntities(igzstream &str, SceneEntityContainer &entities);
-
-	SceneEntity *LoadSceneEntity(igzstream &str);
-	Material *LoadMaterial(igzstream &str);
-	Geometry *LoadGeometry(igzstream &str);
-
-	std::map<int, Texture *> mTextureTable;
-	std::map<int, Material *> mMaterialTable;
-	std::map<int, Geometry *> mGeometryTable;
-	//std::map<int, Shape *> mShapesTable;
-
-
-	/////////////
-	//-- these are kept to be able to delete these resources afterwards
-
-	TextureContainer mTextures;
-	MaterialContainer mMaterials;
-	GeometryContainer mGeometry;
-	TransformContainer mTrafos;
-	GPUParamContainer mGPUParameters;
 	ShaderContainer mShaders;
-	ShapeContainer mShapes;
-	LODContainer mLODs;
-
-	////////
-
-	/// the scene entities
-
-	SceneEntityContainer mSceneEntities;
-
+	ShaderMap mShaderMap;
 
 	////////////
@@ -128,8 +80,18 @@
 private:
 
-	static ResourceManager *sResourceManager;
+	static ShaderManager *sShaderManager;
 };
 
 
+ShaderManager *ShaderManager::GetSingleton()
+{
+	if (!sShaderManager)
+	{
+		sShaderManager = new ShaderManager();
+	}
+
+	return sShaderManager;
+}
+
 }
 #endif
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ShaderManager.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ShaderManager.cpp	(revision 3045)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ShaderManager.cpp	(revision 3055)
@@ -1,16 +1,7 @@
-#include "ResourceManager.h"
-#include "Matrix4x4.h"
-#include "Geometry.h"
-#include "SceneEntity.h"
 #include "Material.h"
 #include "Texture.h"
-#include "gzstream.h"
-#include "Matrix4x4.h"
-#include "Vector3.h"
-#include "Transform3.h"
-#include "Shape.h"
-#include "LODInfo.h"
 #include "RenderState.h"
 #include "ShaderProgram.h"
+#include "ShaderManager.h"
 #include <Cg/cg.h>
 #include <Cg/cgGL.h>
@@ -42,8 +33,11 @@
 static CGprofile sCgFragmentProfile;
 static CGprofile sCgVertexProfile; 
+
+static ShaderProgram *sTreeAnimationProgramMrt;
+static ShaderProgram *sTreeAnimationProgram;
 static ShaderProgram *sTreeAnimation;
 
-// only instance of the resource manager
-ResourceManager *ResourceManager::sResourceManager = NULL;
+// only instance of the shader manager
+ShaderManager *ShaderManager::sShaderManager = NULL;
 
 
@@ -64,384 +58,5 @@
 
 
-ResourceManager::ResourceManager()
-{ 
-	InitCg(); 
-}
-
-
-ResourceManager::~ResourceManager()
-{
-	// delete all resources.
-	CLEAR_CONTAINER(mSceneEntities);
-	CLEAR_CONTAINER(mGeometry);
-	CLEAR_CONTAINER(mMaterials);
-	CLEAR_CONTAINER(mTextures);
-	CLEAR_CONTAINER(mTrafos);
-	CLEAR_CONTAINER(mShapes);
-	CLEAR_CONTAINER(mLODs);
-	CLEAR_CONTAINER(mGPUParameters);
-	CLEAR_CONTAINER(mShaders);
-	
-	if (sCgContext)
-		cgDestroyContext(sCgContext);
-}
-
-
-SceneEntity *ResourceManager::LoadSceneEntity(igzstream &str)
-{	
-	bool hasTrafo;
-	str.read(reinterpret_cast<char *>(&hasTrafo), sizeof(bool));
-	
-	SceneEntity *sceneGeom;
-	Transform3 *trafo;
-
-	if (!hasTrafo)
-	{
-		// identity
-		trafo = new Transform3();
-	}
-	else
-	{
-		Matrix4x4 m;
-		str.read(reinterpret_cast<char *>(m.x), sizeof(Matrix4x4));
-		
-		trafo = new Transform3(m);
-	}
-
-	mTrafos.push_back(trafo);
-
-	sceneGeom = new SceneEntity(trafo);
-
-
-	///////////////
-	//-- load lod levels
-
-	// note: lods must be ordered from smallest distance to largest
-	int numLODs;
-	str.read(reinterpret_cast<char *>(&numLODs), sizeof(int));
-
-	for (int i = 0; i < numLODs; ++ i)
-	{
-		float dist;
-		str.read(reinterpret_cast<char *>(&dist), sizeof(float));
-
-		int numShapes;
-		str.read(reinterpret_cast<char *>(&numShapes), sizeof(int));
-
-		LODLevel *lodLevel = new LODLevel(dist);
-
-		for (int j = 0; j < numShapes; ++ j)
-		{
-			int shapeId;
-			str.read(reinterpret_cast<char *>(&shapeId), sizeof(int));
-
-			Geometry *geom = mGeometryTable[shapeId];
-			Material *mat = mMaterialTable[shapeId];
-
-			// create shape
-			Shape *shape = new Shape(geom, mat, sceneGeom);
-
-			mShapes.push_back(shape);
-
-			sceneGeom->AddShape(shape);
-			lodLevel->AddShape(shape);
-		}
-
-		mLODs.push_back(lodLevel);
-		sceneGeom->AddLODLevel(lodLevel);
-	}
-
-	///////////
-	//-- hack: tree animation
-
-	if (numLODs > 1)
-	{
-		for (int i = 0; i < min(numLODs, 2); ++ i)
-		{
-			ShapeContainer::iterator sstart, send;
-			sceneGeom->GetLODLevel(i, sstart, send);
-
-			for (ShapeContainer::iterator it = sstart; it != send; ++ it)
-			{
-				Shape *shape = *it;
-
-				Material *mat = shape->GetMaterial();
-
-				// add the vertex animation program
-				for (int i = 0; i < 2; ++ i)
-				{
-					Technique *tech = mat->GetTechnique(i);
-					tech->SetVertexProgram(sTreeAnimation);
-
-					GPUProgramParameters *vtxParams = tech->GetVertexProgramParameters();
-
-					vtxParams->SetTimerParam(0);
-					// wind direction
-					static Vector3 windDir = Normalize(Vector3(0.8f, 0.2f, 0.0f));
-					vtxParams->SetValue3f(1, windDir.x, windDir.y, windDir.z);
-					// amplitude
-					vtxParams->SetValue1f(2, 0.3f);
-
-					AxisAlignedBox3 box = sceneGeom->GetBoundingBox();
-					vtxParams->SetValue2f(3, box.Min().z, box.Max().z);
-					// frequency
-					vtxParams->SetValue1f(4, 0.1f);
-				}
-			}
-		}
-	}
-
-	return sceneGeom;
-}
-
-
-void ResourceManager::LoadTextures(igzstream &str)
-{
-	int numTextures;
-	str.read(reinterpret_cast<char *>(&numTextures), sizeof(int));
-	
-	for (int i = 0; i < numTextures; ++ i)
-	{
-		// load texture name
-		int texnameSize;
-		str.read(reinterpret_cast<char *>(&texnameSize), sizeof(int));
-
-		char *texname = new char[texnameSize];
-		str.read(texname, sizeof(char) * texnameSize);
-
-		Texture *tex = new Texture(model_path + texname);
-
-		int boundS, boundT;
-
-		str.read(reinterpret_cast<char *>(&boundS), sizeof(int));
-		str.read(reinterpret_cast<char *>(&boundT), sizeof(int));
-
-		tex->SetBoundaryModeS(boundS);
-		tex->SetBoundaryModeT(boundT);
-
-		tex->Create();
-
-		mTextureTable[i] = tex;
-		mTextures.push_back(tex);
-
-		delete [] texname;
-	}
-
-	cout << "loaded " << (int)mTextureTable.size() << " textures" << endl;
-}
-
-
-void ResourceManager::LoadShapes(igzstream &str)
-{
-	int numShapes;
-	str.read(reinterpret_cast<char *>(&numShapes), sizeof(int));
-
-	for (int i = 0; i < numShapes; ++ i)
-	{
-		Geometry *geom = LoadGeometry(str);
-		Material *mat = LoadMaterial(str);
-
-		mGeometryTable[i] = geom;
-		mMaterialTable[i] = mat;		
-
-		mGeometry.push_back(geom);
-		mMaterials.push_back(mat);
-	}
-
-	cout << "loaded " << (int)mGeometryTable.size() << " shapes" << endl;
-}
-
-
-Material *ResourceManager::LoadMaterial(igzstream &str)
-{
-	// default material
-	Material *mat = new Material();
-	
-	// set default fragment + vertex programs
-	Technique *tech = mat->GetDefaultTechnique();
-
-	// texture
-	int texId;
-	str.read(reinterpret_cast<char *>(&texId), sizeof(int));
-
-	if (texId >= 0)
-		tech->SetTexture(mTextureTable[texId]);
-	
-	str.read(reinterpret_cast<char *>(&tech->mAlphaTestEnabled), sizeof(bool));
-	str.read(reinterpret_cast<char *>(&tech->mCullFaceEnabled), sizeof(bool));
-
-	// gl material
-	bool hasGlMaterial;
-	str.read(reinterpret_cast<char *>(&hasGlMaterial), sizeof(bool));
-
-	if (hasGlMaterial)
-	{
-		// only write rgb part of the material
-		str.read(reinterpret_cast<char *>(&tech->mAmbientColor), sizeof(Vector3));
-		str.read(reinterpret_cast<char *>(&tech->mDiffuseColor), sizeof(Vector3));
-		str.read(reinterpret_cast<char *>(&tech->mEmmisiveColor), sizeof(Vector3));
-		str.read(reinterpret_cast<char *>(&tech->mSpecularColor), sizeof(Vector3));
-	}
-
-
-	///////////////
-	//-- add technique for deferred shading
-
-	Technique *deferred = new Technique(*tech);
-
-	if (deferred->GetTexture())
-	{
-		deferred->SetFragmentProgram(mMrtDefaultFragmentTexProgram);
-		deferred->GetFragmentProgramParameters()->SetTexture(0, tech->GetTexture()->GetId());
-	}	
-	else
-	{
-		deferred->SetFragmentProgram(mMrtDefaultFragmentProgram);
-	}
-
-	deferred->SetVertexProgram(mMrtDefaultVertexProgram);
-	
-	mat->AddTechnique(deferred);
-
-	return mat;
-}
-
-
-Geometry *ResourceManager::LoadGeometry(igzstream &str)
-{
-	Vector3 *vertices;
-	Vector3 *normals;
-	Texcoord2 *texcoords;
-
-
-	//////////////
-	//-- read in vertices
-
-	int vertexCount;
-	str.read(reinterpret_cast<char *>(&vertexCount), sizeof(int));
-	
-	// end of file reached
-	if (str.eof()) return NULL;
-
-	//cout << "vertexcount: " << vertexCount << endl;
-
-	vertices = new Vector3[vertexCount];
-    str.read(reinterpret_cast<char *>(vertices), sizeof(Vector3) * vertexCount);
-	
-	normals = new Vector3[vertexCount];
-	str.read(reinterpret_cast<char *>(normals), sizeof(Vector3) * vertexCount);
-
-	int texCoordCount;
-	str.read(reinterpret_cast<char *>(&texCoordCount), sizeof(int));
-
-	if (texCoordCount)
-	{
-		texcoords = new Texcoord2[texCoordCount];
-		str.read(reinterpret_cast<char *>(texcoords), sizeof(Texcoord2) * texCoordCount);
-	}
-	else
-	{
-		texcoords = NULL;
-	}
-
-	return new Geometry(vertices, normals, texcoords, vertexCount, true);
-	//return new Geometry(vertices, normals, texcoords, vertexCount, false);
-}
-
-
-void ResourceManager::LoadSceneEntities(igzstream &str, SceneEntityContainer &entities)
-{
-	int entityCount;
-	str.read(reinterpret_cast<char *>(&entityCount), sizeof(int));
-
-	entities.reserve(entityCount);
-
-	for (int i = 0; i < entityCount; ++ i)
-	{
-		SceneEntity *ent = LoadSceneEntity(str);
-
-		// return loaded entities
-		entities.push_back(ent);
-		// also store internally
-		mSceneEntities.push_back(ent);
-	}
-
-	cout << "loaded " << entityCount << " scene entities" << endl;
-}
-
-
-bool ResourceManager::Load(const std::string &filename, SceneEntityContainer &entities)
-{
-	igzstream istr(filename.c_str());
-	
-	if (!istr.is_open())
-		return false;
-
-	cout << "loading textures" << endl;
-	
-	// load the texture table
-	LoadTextures(istr);
-
-	cout << "loading shapes (geometry + materials)" << endl;
-
-	// load the shapees
-	LoadShapes(istr);
-
-	cout << "loading scene entites" << endl;
-	LoadSceneEntities(istr, entities);
-	
-	cout << "bin loading finished" << endl;
-
-	// clean up
-	mTextureTable.clear();
-	mGeometryTable.clear();
-	mMaterialTable.clear();
-
-	return true;
-}
-
-
-
-ShaderProgram *ResourceManager::CreateFragmentProgram(const std::string &filename, 
-													  const std::string &funcName)
-{
-	const string fullName = "src/shaders/" + filename + ".cg";
-
-	ShaderProgram *p = new ShaderProgram(sCgContext, fullName, sCgFragmentProfile, funcName);
-
-	mShaders.push_back(p);
-
-	if (!p->IsValid())
-	{
-		DEL_PTR(p);
-		cerr << "Program " << funcName << " in " << fullName << " failed to load" << endl;
-	}
-	
-	cout << "Program " << funcName << " in " << fullName << " loaded" << endl;
-
-	return p;
-}
-
-
-ShaderProgram *ResourceManager::CreateVertexProgram(const std::string &filename, const std::string &funcName)
-{
-	const string fullName = "src/shaders/" + filename + ".cg";
-	
-	ShaderProgram *p = new ShaderProgram(sCgContext, fullName, sCgVertexProfile, funcName);
-	mShaders.push_back(p);
-
-	if (!p->IsValid())
-	{
-		DEL_PTR(p);
-		cerr << "Program " << funcName << " in " << fullName << " failed to load" << endl;
-	}
-	
-	cout << "Program " << funcName << " in " << fullName << " loaded" << endl;
-
-	return p;
-}
-
-
-void ResourceManager::InitCg() 
+ShaderManager::ShaderManager() 
 {
 	// setup cg
@@ -459,16 +74,33 @@
 	cgGLSetManageTextureParameters(sCgContext, false);
 
-	mMrtDefaultVertexProgram = CreateVertexProgram("mrt", "vtx");
-	mMrtDefaultFragmentProgram = CreateFragmentProgram("mrt", "frag");
-	mMrtDefaultFragmentTexProgram = CreateFragmentProgram("mrt", "fragtex");
-	mMrtDefaultFragmentTexProgram->AddParameter("tex", 0);
-
-	sTreeAnimation = CreateVertexProgram("treeanimation", "animateVtxMrt");
-
-	sTreeAnimation->AddParameter("timer", 0);
-	sTreeAnimation->AddParameter("windDir", 1);
-	sTreeAnimation->AddParameter("windStrength", 2);
-	sTreeAnimation->AddParameter("minMaxPos", 3);
-	sTreeAnimation->AddParameter("frequency", 4);
+	mMrtDefaultVertexProgram = CreateVertexProgram("mrt", "vtx", "defaultMrtVertex");
+	mMrtDefaultFragmentProgram = CreateFragmentProgram("mrt", "frag", "defaultMrtFragment");
+	mMrtDefaultFragmentTexProgram = CreateFragmentProgram("mrt", "fragtex", "defaultMrtFragmentTex");
+
+	// provide the current view matrix
+	mMrtDefaultFragmentProgram->AddParameter("viewMatrix", 0);
+	mMrtDefaultFragmentTexProgram->AddParameter("viewMatrix", 0);
+	// add a texture parameter
+	mMrtDefaultFragmentTexProgram->AddParameter("tex", 1);
+
+
+	//////////////////////////
+	//-- hack: apply hardcoded tree animation (should be provided with a material script!)
+
+	sTreeAnimationProgram = CreateVertexProgram("treeanimation", "animateVtx", "treeAnimation");
+	sTreeAnimationProgramMrt = CreateVertexProgram("treeanimation", "animateVtxMrt", "treeAnimationMrt");
+
+	sTreeAnimationProgram->AddParameter("timer", 0);
+	sTreeAnimationProgram->AddParameter("windDir", 1);
+	sTreeAnimationProgram->AddParameter("windStrength", 2);
+	sTreeAnimationProgram->AddParameter("minMaxPos", 3);
+	sTreeAnimationProgram->AddParameter("frequency", 4);
+	sTreeAnimationProgram->AddParameter("lightDir", 5);
+
+	sTreeAnimationProgramMrt->AddParameter("timer", 0);
+	sTreeAnimationProgramMrt->AddParameter("windDir", 1);
+	sTreeAnimationProgramMrt->AddParameter("windStrength", 2);
+	sTreeAnimationProgramMrt->AddParameter("minMaxPos", 3);
+	sTreeAnimationProgramMrt->AddParameter("frequency", 4);
 
 	cout << "cg initialization successful" << endl;
@@ -476,5 +108,36 @@
 
 
-void ResourceManager::EnableFragmentProfile()
+void ShaderManager::DelSingleton()
+{
+	DEL_PTR(sShaderManager);
+}
+	
+
+ShaderManager::~ShaderManager()
+{
+	CLEAR_CONTAINER(mShaders);
+	
+	if (sCgContext)
+		cgDestroyContext(sCgContext);
+}
+
+
+ShaderProgram *ShaderManager::CreateFragmentProgram(const std::string &filename, 
+													const std::string &funcName,
+													const std::string &name)
+{
+	return CreateShaderProgram(filename, funcName, name, true);
+}
+
+
+ShaderProgram *ShaderManager::CreateVertexProgram(const std::string &filename,
+												  const std::string &funcName,
+												  const std::string &name)
+{
+	return CreateShaderProgram(filename, funcName, name, false);
+}
+
+
+void ShaderManager::EnableFragmentProfile()
 {
 	cgGLEnableProfile(sCgFragmentProfile);
@@ -482,5 +145,5 @@
 
 
-void ResourceManager::EnableVertexProfile()
+void ShaderManager::EnableVertexProfile()
 {
 	cgGLEnableProfile(sCgVertexProfile);
@@ -488,5 +151,5 @@
 
 
-void ResourceManager::DisableFragmentProfile()
+void ShaderManager::DisableFragmentProfile()
 {
 	cgGLDisableProfile(sCgFragmentProfile);
@@ -494,11 +157,47 @@
 
 
-void ResourceManager::DisableVertexProfile()
+void ShaderManager::DisableVertexProfile()
 {
 	cgGLDisableProfile(sCgVertexProfile);
-	
-}
-
-
-}
-
+}
+
+
+ShaderProgram *ShaderManager::CreateShaderProgram(const std::string &filename,
+												  const std::string &funcName,
+												  const std::string &name,
+												  bool isFragment)
+{
+	const string fullName = "src/shaders/" + filename + ".cg";
+	
+	ShaderProgram *p = 
+		new ShaderProgram(sCgContext, fullName, 
+		                  isFragment ? sCgFragmentProfile : sCgVertexProfile, funcName);
+
+	ShaderMap::const_iterator it = mShaderMap.find(name);
+
+	if (it == mShaderMap.end())
+	{
+		DEL_PTR(p);
+
+		cerr << "Program name " << name << "already chosen" << endl;
+		return p;
+	}
+	
+	if (!p->IsValid())
+	{
+		DEL_PTR(p);
+		cerr << "Program " << funcName << " in " << fullName << " failed to load" << endl;
+		return p;
+	}
+
+	cout << "Program " << funcName << " in " << fullName << " loaded" << endl;
+		
+	mShaders.push_back(p);
+	mShaderMap[name] = p;
+
+	return p;
+}
+
+
+}
+
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ResourceManager.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ResourceManager.cpp	(revision 3052)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ResourceManager.cpp	(revision 3055)
@@ -6,5 +6,4 @@
 #include "Texture.h"
 #include "gzstream.h"
-#include "Matrix4x4.h"
 #include "Vector3.h"
 #include "Transform3.h"
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderState.h
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderState.h	(revision 3052)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderState.h	(revision 3055)
@@ -73,5 +73,5 @@
 protected:
 
-	/** A special query technique. This material
+	/** A special technique for occlusion queries. This material
 		has color write, depth write, and lighting turned off
 	*/
@@ -84,5 +84,5 @@
 	bool mCullFaceEnabled;
 	bool mTexturesEnabled;
-
+	/// Render or query mode
 	Mode mMode;
 
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj	(revision 3052)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj	(revision 3055)
@@ -244,12 +244,4 @@
 			</File>
 			<File
-				RelativePath=".\src\ShaderProgram.cpp"
-				>
-			</File>
-			<File
-				RelativePath=".\src\ShaderProgram.h"
-				>
-			</File>
-			<File
 				RelativePath=".\src\SkyPreetham.cpp"
 				>
@@ -507,4 +499,12 @@
 				</File>
 				<File
+					RelativePath=".\src\ShaderManager.h"
+					>
+				</File>
+				<File
+					RelativePath=".\src\ShaderProgram.h"
+					>
+				</File>
+				<File
 					RelativePath=".\src\ShadowMapping.h"
 					>
@@ -680,4 +680,12 @@
 				<File
 					RelativePath=".\src\SceneQuery.cpp"
+					>
+				</File>
+				<File
+					RelativePath=".\src\ShaderManager.cpp"
+					>
+				</File>
+				<File
+					RelativePath=".\src\ShaderProgram.cpp"
 					>
 				</File>
