Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/LODInfo.h
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/LODInfo.h	(revision 2839)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/LODInfo.h	(revision 2839)
@@ -0,0 +1,23 @@
+#ifndef __LODINFO_H
+#define __LODINFO_H
+
+#include "common.h"
+
+
+namespace CHCDemoEngine 
+{
+
+/** Class representing information about an LOD level.
+*/
+struct LODInfo
+{
+public:
+	/// distance of this LOD level
+	float mSquaredDistance;
+	/// shapes belonging to this LOD level
+	ShapeContainer mShapes;
+};
+
+}
+
+#endif // __LODINFO_H
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneEntity.h
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneEntity.h	(revision 2819)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneEntity.h	(revision 2839)
@@ -8,10 +8,9 @@
 #include "AxisAlignedBox3.h"
 #include "Triangle3.h"
+#include "LODInfo.h"
 
 
 namespace CHCDemoEngine 
 {
-
-
 
 class Material;
@@ -28,8 +27,8 @@
 
 public:
-	static CGparameter sModelMatrixParam;
+	
 	/** Creates a scene entity.
 	*/
-	SceneEntity(Geometry *geometry, Material *mat, Matrix4x4 *trafo);
+	SceneEntity(Transformation *trafo);
 
 	~SceneEntity();
@@ -37,16 +36,16 @@
 	*/
 	void Render(RenderState *state);	
+	/** Set pointer to the shape
+	*/
+	void AddShape(Shape *shape);
+	/** See set
+	*/
+	inline Shape *GetShape(int i) const { return mShapes[i]; }
+	/** Returns number of shapes in vector.
+	*/
+	inline int GetNumShapes() { return (int)mShapes.size(); }
 	/** Set pointer to the geometry
 	*/
-	void SetGeometry(Geometry *geom);
-	/** See set
-	*/
-	Geometry *GetGeometry() const { return mGeometry; }
-	/** Set pointer to the geometry
-	*/
-	void SetTransformation(Matrix4x4 *trafo);
-	/** Set pointer to the material
-	*/
-	void SetMaterial(Material *mat);
+	void SetTransformation(Transformation *trafo);
 	/** Returns the transformed bounding box.
 	*/
@@ -58,18 +57,18 @@
 	*/
 	int GetLastRendered() const;
-
-	inline Material *GetMaterial() const  { return mMaterial; }
-	inline Matrix4x4 *GetTransformation() const  { return mTransform; }
+	/** Returns the trafo of this scene entity.
+	*/
+	inline Transformation *GetTransformation() const  { return mTransform; }
 
 protected:
 
 	/// transform matrix 
-	Matrix4x4 *mTransform;
-	Geometry *mGeometry;
-	Material *mMaterial;
-	
+	Transformation *mTransform;
+
+	LODInfoContainer mLODInfos;
+
+	ShapeContainer mShapes;
+		
 	int mLastRendered;
-	/// pointer to the renderqueue bucket this entity belongs to
-	RenderQueueBucket *mRenderQueueBucket;
 };
 
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderTraverser.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderTraverser.cpp	(revision 2825)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderTraverser.cpp	(revision 2839)
@@ -109,6 +109,7 @@
 		{
 			SceneEntity *ent = entities[i];
+#ifdef TODO
 			mStats.mNumRenderedTriangles += ent->GetGeometry()->GetNumTriangles();
-
+#endif
 			if (mUseRenderQueue)
 				mRenderQueue->Enqueue(ent);
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Transform.h
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Transform.h	(revision 2839)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Transform.h	(revision 2839)
@@ -0,0 +1,47 @@
+#ifndef __SCENEENTITY_H
+#define __SCENEENTITY_H
+
+#include "glInterface.h"
+#include <Cg/cg.h>
+#include <Cg/cgGL.h>
+#include "common.h"
+
+namespace CHCDemoEngine 
+{
+
+class RenderState;
+
+
+/** Class representing a transformation
+*/
+class Transformation
+{
+public:
+	
+	static CGparameter sModelMatrixParam;
+
+	/** Creates a scene entity.
+	*/
+	Transformation(Matrix4x4 *trafo);
+
+	~Transformation();
+	/** Loads this transformation.
+	*/
+	void Load(RenderState *state);	
+	/** Unloads this transformation
+	*/
+	void Unload(RenderState *state);
+	/** Returns the trafo of this scene entity.
+	*/
+	inline Matrix4x4 *GetMatrix() const  { return mMatrix; }
+
+protected:
+
+	/// transform matrix 
+	Matrix4x4 *mMatrix;
+};
+
+
+}
+
+#endif // __SCENEENTITY_H
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Halton.h
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Halton.h	(revision 2839)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Halton.h	(revision 2839)
@@ -0,0 +1,235 @@
+#ifndef __HALTON_H
+#define __HALTON_H
+
+#include <iostream>
+
+
+/** Assert whether the argument is a prime number.
+	@param number the number to be checked
+*/
+inline bool IsPrime(const int number) 
+{
+	bool isIt = true;
+
+	for(int i = 2; i < number; ++ i) 
+	{
+		if(number % i == 0) 
+		{
+			isIt = false;
+			break;
+		}
+	}
+
+	if(number == 2) 
+	{
+		isIt = false;
+	}
+
+	return isIt;
+}
+
+
+/**
+	Find the nth prime number.
+	@param index the ordinal position in the sequence
+*/
+inline int FindPrime(const int index) 
+{
+
+	const int primes[] = {-1, 1, 3, 5, 7, 11, 13};
+	if (index <= 6)
+		return primes[index];
+
+	int prime = 1;
+	int found = 1;
+	while(found != index) {
+		prime += 2;
+		if(IsPrime(prime) == true) {
+			found++;
+		}
+	}
+	return prime;
+}
+
+  
+inline float halton(float baseRec, float prev) 
+{
+	float r = 1.0f - prev;
+	
+	if (baseRec < r)
+		return prev + baseRec;
+	
+	float h = baseRec;
+	
+	float hh;
+	
+	do 
+	{
+		hh = h;
+		h *= baseRec;
+	} while (h > r);
+	
+	return prev + hh + h - 1.0f;
+}
+
+
+template<int T> struct Halton 
+{
+	static float _invBases[T];
+	float _prev[T];
+
+public:
+
+	void Reset() 
+	{
+		for (int i=0; i < T; i++) 
+			_prev[i] = 0;
+	}
+
+	Halton(const bool initializeBases) 
+	{
+		for (int i=0; i < T; i++) 
+		{
+			int base = FindPrime(i+1);
+		
+			if (base == 1)
+				base++;
+			_invBases[i] = 1.0f/base;
+		}
+	}
+
+	Halton() 
+	{
+		Reset();
+	}
+  
+	void GetNext(float *a) 
+	{
+		for (int i=0; i < T; i++) 
+		{
+			a[i] = halton(_invBases[i], _prev[i]);
+			_prev[i] = a[i];
+		}
+	}
+
+};
+
+struct Halton2 
+{
+	static float _invBases[2];
+	float _prev[2];
+
+public:
+
+	void Reset() 
+	{
+		_prev[0] =_prev[1] = 0;
+	}
+
+	Halton2() 
+	{
+		_invBases[0] = 1.0f / 2;
+		_invBases[1] = 1.0f / 3;
+		Reset();
+	}
+
+	void GetNext(float &a, float &b) 
+	{
+		a = halton(_invBases[0], _prev[0]);
+		b = halton(_invBases[1], _prev[1]);
+
+		_prev[0] = a;
+		_prev[1] = b;
+	}
+};
+
+
+  
+struct HaltonSequence 
+{
+public:
+	int index;
+
+	static int sPregeneratedDim;
+	static int sPregeneratedNumber;
+	static float *sPregeneratedValues;
+
+	// special construtor for pregenerating static halton sequences
+	HaltonSequence(const int dim, const int number);
+
+	HaltonSequence(): index(1) {}
+
+	void Reset() 
+	{
+		index = 1;
+	}
+
+	void
+		GetNext(const int dimensions, float *p);
+
+	void GenerateNext() 
+	{
+		++ index;
+	}
+
+	double GetNumber(const int dimension)  
+	{
+		int base = FindPrime(dimension);
+		if(base == 1) {
+			base++;  //The first dimension uses base 2.
+		} 
+
+		int _p1 = base;
+		float _ip1 = 1.0f/base;
+		float p, u=0.0f;
+		int kk, a;
+
+		// the first coordinate
+		for (p = _ip1, kk = index ; kk ;  p *= _ip1, kk /= _p1)   
+			if ((a = kk % _p1))
+				u += a * p;
+
+		return u;
+	}
+
+	/**
+		Returns the nth number in the sequence, taken from a specified dimension.
+		@param index the ordinal position in the sequence
+		@param dimension the dimension
+	*/
+	double GetNumberOld(const int dimension)  
+	{
+		int base = FindPrime(dimension);
+		if(base == 1) 
+		{
+			++ base;  //The first dimension uses base 2.
+		} 
+
+		double remainder;
+		double output = 0.0;
+		double fraction = 1.0 / (double)base;
+		int N1 = 0;
+		int copyOfIndex = index;
+		
+		if ((base >= 2) && (index >= 1)) 
+		{
+			while(copyOfIndex > 0) 
+			{
+				N1 = (copyOfIndex / base);
+				remainder = copyOfIndex % base;
+				output += fraction * remainder;
+				copyOfIndex = (int)(copyOfIndex / base);
+				fraction /= (double)base;
+			} 
+			return output;
+		}
+		else 
+		{
+			std::cerr<<"Error generating Halton sequence."<<std::endl;
+			exit(1);
+		}
+	}
+};
+
+
+#endif
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Shape.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Shape.cpp	(revision 2839)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Shape.cpp	(revision 2839)
@@ -0,0 +1,44 @@
+#include "glInterface.h"
+#include "Shape.h"
+#include "Material.h"
+#include "RenderState.h"
+#include "Geometry.h"
+#include <Cg/cg.h>
+#include <Cg/cgGL.h>
+
+
+namespace CHCDemoEngine 
+{
+
+Shape::Shape(Geometry *geometry, 
+			 Material *mat):
+mGeometry(geometry), mMaterial(mat), mRenderQueueBucket(NULL)
+{
+}
+
+
+Shape::~Shape()
+{}
+
+
+void Shape::Render(RenderState *state)
+{
+	if (mMaterial) mMaterial->Render(state);
+
+	mGeometry->Render(state);
+}
+
+
+void Shape::SetGeometry(Geometry *geom)
+{
+	mGeometry = geom;
+}
+
+
+void Shape::SetMaterial(Material *mat)
+{
+	mMaterial = mat;
+}
+
+
+}
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Transform.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Transform.cpp	(revision 2839)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Transform.cpp	(revision 2839)
@@ -0,0 +1,51 @@
+#include "Transformation.h"
+
+
+
+namespace CHCDemoEngine 
+{
+
+CGparameter Transformation::sModelMatrixParam;
+
+Transformation::Transformation(Matrix4x4 *trafo): mMatrix(trafo)
+{
+}
+
+
+Transformation::~Transformation
+{
+}
+
+
+void Transformation::Load(RenderState *state)
+{
+	if (!mMatrix) return;
+
+	if (state->GetRenderType() == RenderState::DEFERRED)
+	{
+		cgGLSetMatrixParameterfc(sModelMatrixParam, (const float *)mTransform->x);
+	}
+	else
+	{
+		glPushMatrix();
+		glMultMatrixf((float *)mTransform->x);
+	}
+}
+
+
+void Transformation::Unload(RenderState *state)
+{
+	if (!mMatrix) return;
+
+	if (state->GetRenderType() == RenderState::DEFERRED)
+	{
+		static Matrix4x4 identity = IdentityMatrix();
+		cgGLSetMatrixParameterfc(sModelMatrixParam, (const float *)identity.x);
+	}
+	else
+	{
+		glPopMatrix();
+	}
+}
+
+}
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ResourceManager.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ResourceManager.cpp	(revision 2833)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ResourceManager.cpp	(revision 2839)
@@ -57,5 +57,5 @@
 
 	// use instancing
-	sceneGeom = new SceneEntity(geom, mat, trafo);
+	sceneGeom = new SceneEntity(trafo);
 
 	return sceneGeom;
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.cpp	(revision 2826)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.cpp	(revision 2839)
@@ -58,8 +58,11 @@
 
 
-bool RenderQueue::FitsInBucket(SceneEntity *ent, size_t idx) const
-{
+bool RenderQueue::FitsInBucket(Shape *ent, size_t idx) const
+{
+#ifdef TODO
 	Material *mat = ent->GetMaterial();
-
+#else
+	Material *mat = NULL;
+#endif
 	// test if entity belongs to this bucket
 	// note: rather slows down the application for some reason!!
@@ -89,5 +92,5 @@
 	RenderQueueBucket *bucket;
 	++ mSize;
-
+#ifdef TODO
 	if (entity->mRenderQueueBucket)
 	{
@@ -135,5 +138,5 @@
 		entity->mRenderQueueBucket = bucket;
 	}
-
+#endif
 	bucket->mEntities.push_back(entity);
 }
@@ -185,9 +188,10 @@
 		{
 			SceneEntity *ent = *sit;
-	
+	#ifdef TODO
 			Material *mat = ent->GetMaterial();
 			int tsize = mat->GetTexture() ? mat->GetTexture()->GetByteSize() : 0;
 			float dist = SqrMagnitude(ent->GetBoundingBox().Center() - mCamera->GetPosition());
 			Debug << "e: " << ent << " a: " << mat->IsAlphaTestEnabled() << " s: " << tsize << " d: " << dist << " " << endl;
+#endif
 		}
 	}
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Halton.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Halton.cpp	(revision 2839)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Halton.cpp	(revision 2839)
@@ -0,0 +1,48 @@
+#include "common.h"
+#include "Halton.h"
+
+
+float Halton2::_invBases[2];
+
+template<int T> float Halton<T>::_invBases[T];
+  
+Halton<1> dummmyHalton1(true);
+Halton<2> dummmyHalton2(true);
+Halton<3> dummmyHalton3(true);
+Halton<4> dummmyHalton4(true);
+Halton<5> dummmyHalton5(true);
+Halton<6> dummmyHalton6(true);
+
+
+int HaltonSequence::sPregeneratedDim = 0;
+int HaltonSequence::sPregeneratedNumber = 0;
+float *HaltonSequence::sPregeneratedValues = NULL;
+
+
+// special construtor for pregenerating static halton sequences
+HaltonSequence::HaltonSequence(const int dim, const int number) 
+{
+
+	sPregeneratedDim = 0;
+	sPregeneratedNumber = 0;
+	sPregeneratedValues = new float[number*dim];
+
+	float *p = sPregeneratedValues;
+
+	for (int i=0; i < number; i++, p+=dim) 
+	{
+		GetNext(dim, p);
+	}
+
+	sPregeneratedDim = dim;
+	sPregeneratedNumber = number;
+}
+
+
+void HaltonSequence::GetNext(const int dimensions, float *p)
+{
+	for (int i = 0; i < dimensions; ++ i)
+		p[i] = (float)GetNumber(i + 1);
+
+	GenerateNext();
+}
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Shape.h
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Shape.h	(revision 2839)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Shape.h	(revision 2839)
@@ -0,0 +1,59 @@
+#ifndef __SHAPE_H
+#define __SHAPE_H
+
+#include "glInterface.h"
+#include <Cg/cg.h>
+#include <Cg/cgGL.h>
+#include "common.h"
+
+
+namespace CHCDemoEngine 
+{
+
+
+
+class Material;
+class Geometry;
+class RenderState;
+struct RenderQueueBucket;
+
+/** Class representing a shape.
+    A shape basically consists of geometry and a material
+*/
+class Shape
+{
+	friend class RenderQueue;
+
+public:
+	/** Creates a scene entity.
+	*/
+	Shape(Geometry *geometry, Material *mat, SceneEntity *parent);
+
+	~Shape();
+	/** Renders this node.
+	*/
+	void Render(RenderState *state);	
+	/** Set pointer to the geometry
+	*/
+	void SetGeometry(Geometry *geom);
+	/** See set
+	*/
+	Geometry *GetGeometry() const { return mGeometry; }
+	/** Set pointer to the material
+	*/
+	void SetMaterial(Material *mat);
+	
+	inline Material *GetMaterial() const  { return mMaterial; }
+
+protected:
+
+	Geometry *mGeometry;
+	Material *mMaterial;
+	
+	/// pointer to the renderqueue bucket this entity belongs to
+	RenderQueueBucket *mRenderQueueBucket;
+};
+
+}
+
+#endif // __SCENEENTITY_H
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Bvh.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Bvh.cpp	(revision 2825)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Bvh.cpp	(revision 2839)
@@ -799,5 +799,7 @@
 	for (int i = node->mFirst; i <= node->mLast; ++ i)
 	{
+#ifdef TODO
 		numTriangles += mGeometry[i]->GetGeometry()->GetNumTriangles();
+#endif
 	}
 
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.h
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.h	(revision 2805)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.h	(revision 2839)
@@ -29,5 +29,5 @@
 	float mMinDistance;
 
-	SceneEntityContainer mEntities;
+	ShapeContainer mShapes;
 };
 
@@ -70,5 +70,5 @@
 protected:
 
-	inline bool FitsInBucket(SceneEntity *ent, size_t idx) const;
+	inline bool FitsInBucket(Shape *shape, size_t idx) const;
 
 	/** Sorts the render queue by materials / textures.
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneEntity.cpp
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneEntity.cpp	(revision 2825)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneEntity.cpp	(revision 2839)
@@ -13,8 +13,5 @@
 CGparameter SceneEntity::sModelMatrixParam;
 
-SceneEntity::SceneEntity(Geometry *geometry, 
-						 Material *mat,
-						 Matrix4x4 *trafo):
-mGeometry(geometry), mMaterial(mat), mTransform(trafo), mRenderQueueBucket(NULL)
+SceneEntity::SceneEntity(Matrix4x4 *trafo): mTransform(trafo)
 {
 }
@@ -26,39 +23,42 @@
 
 
+ShapeContainer *SceneEntity::GetCurrentLOD()
+{
+	if (mLODInfos.empty())
+		return &mShapes;
+
+	float mDistance = 0.0f;
+
+	int i = 0;
+
+	for (int i = 0; i < mLODInfos.size(); ++ i)
+	{
+		if (mLODInfos[i].mDistance > mDistance)
+			return mShapes[i];
+	}
+
+	return mShapes.last();
+}
+
+
 void SceneEntity::Render(RenderState *state)
 {
-	if (mMaterial) mMaterial->Render(state);
+	//if (mMaterial) mMaterial->Render(state);
+	float mDistance = 0.0f;
 
-	if (mTransform)
+	ShapeContainer *shapes;
+
+	shspes = GetCurrentLOD(mDistance);
+
+	for (int i = 0; i < shapes->size(); ++ i)
 	{
-		if (state->GetRenderType() == RenderState::DEFERRED)
-		{
-			cgGLSetMatrixParameterfc(sModelMatrixParam, (const float *)mTransform->x);
-
-			mGeometry->Render(state);
-
-			static Matrix4x4 identity = IdentityMatrix();
-			cgGLSetMatrixParameterfc(sModelMatrixParam, (const float *)identity.x);
-		}
-		else
-		{
-			glPushMatrix();
-			glMultMatrixf((float *)mTransform->x);
-			
-			mGeometry->Render(state);
-
-			glPopMatrix();
-		}
-	}
-	else
-	{
-		mGeometry->Render(state);
+		(shapes*)[i]->Render(state);
 	}
 }
 
 
-void SceneEntity::SetGeometry(Geometry *geom)
+void SceneEntity::AddShape(Shape *shape)
 {
-	mGeometry = geom;
+	mShapes.push_back(shape);
 }
 
@@ -67,10 +67,4 @@
 {
 	mTransform = trafo;
-}
-
-
-void SceneEntity::SetMaterial(Material *mat)
-{
-	mMaterial = mat;
 }
 
@@ -90,5 +84,9 @@
 AxisAlignedBox3 SceneEntity::GetBoundingBox() const
 {
+#ifdef TODO
 	AxisAlignedBox3 box = mGeometry->GetBoundingBox();
+#else
+	AxisAlignedBox3 box;
+#endif
 	if (mTransform) Transform(box, *mTransform);
 
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/common.h
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/src/common.h	(revision 2801)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/src/common.h	(revision 2839)
@@ -494,14 +494,19 @@
 #define INITIAL_TRIANGLES_PER_VIRTUAL_LEAVES 1000
 
-// #define PRINT_VERBOSE_BENCHMARKS
-}
-
-#endif
-
-
-
-
-
-
-
-
+class Shape;
+typedef std::vector<Shape *> ShapeContainer;
+
+struct LODInfo;
+typedef std::vector<LODInfo *> LODInfoContainer;
+
+}
+
+#endif
+
+
+
+
+
+
+
+
Index: GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj
===================================================================
--- GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj	(revision 2837)
+++ GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj	(revision 2839)
@@ -511,4 +511,8 @@
 				</File>
 				<File
+					RelativePath=".\src\LODInfo.h"
+					>
+				</File>
+				<File
 					RelativePath=".\src\Material.h"
 					>
@@ -535,5 +539,13 @@
 				</File>
 				<File
+					RelativePath=".\src\Shape.h"
+					>
+				</File>
+				<File
 					RelativePath=".\src\Texture.h"
+					>
+				</File>
+				<File
+					RelativePath=".\src\Transform.h"
 					>
 				</File>
@@ -679,4 +691,8 @@
 				</File>
 				<File
+					RelativePath=".\src\Shape.cpp"
+					>
+				</File>
+				<File
 					RelativePath=".\src\Texture.cpp"
 					>
@@ -699,4 +715,8 @@
 						/>
 					</FileConfiguration>
+				</File>
+				<File
+					RelativePath=".\src\Transform.cpp"
+					>
 				</File>
 				<File
