Răsfoiți Sursa

Working on the new renderer

Panagiotis Christopoulos Charitos 15 ani în urmă
părinte
comite
e43ef144d7

+ 246 - 17
build/debug/Makefile

@@ -4,8 +4,8 @@ PHFLAGS = -c -pedantic-errors -pedantic -ansi -Wall -Wextra -W -pipe -O0 -g3 -pg
 LFLAGS = -rdynamic -L../../../SDL-hg/build/.libs -L../../../glew/lib -L../../../bullet_svn/src/BulletSoftBody -L../../../bullet_svn/src/BulletDynamics -L../../../bullet_svn/src/BulletCollision -L../../../bullet_svn/src/LinearMath -Wl,-Bstatic -lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath -lGLEW -lSDL_image -lGLU -lSDL -Wl,-Bdynamic -lGL -ljpeg -lpng -ltiff
 EXECUTABLE = AnKi.bin
 INCPATH = -I../../src/Math/ -I../../src/Util/Tokenizer/ -I../../src/Misc/ -I../../src/ -I../../src/Renderer/ -I../../src/Scene/ -I../../src/Ui/ -I../../src/Resources/ -I../../src/Util/ -I../../src/Scene/Controllers/ -I../../src/Physics/ -I../../src/Renderer/BufferObjects/ -I../../src/Renderer2/ -I../../../bullet_svn/src/ -I../../../SDL-hg/include -I../../glew/include 
-SOURCES = ../../src/Util/Tokenizer//Scanner.cpp ../../src/Misc//collision.cpp ../../src/Misc//skybox.cpp ../../src/Misc//map.cpp ../../src/Misc//memory.cpp ../../src/Misc//particles.cpp ../../src//Main.cpp ../../src/Renderer//MsEarlyz.cpp ../../src/Renderer//PpsSsao.cpp ../../src/Renderer//Dbg.cpp ../../src/Renderer//BulletDebuger.cpp ../../src/Renderer//PpsHdr.cpp ../../src/Renderer//PpsLscatt.cpp ../../src/Renderer//Bs2.cpp ../../src/Renderer//Ms.cpp ../../src/Renderer//Pps.cpp ../../src/Renderer//Bs.cpp ../../src/Renderer//IsShadows.cpp ../../src/Renderer//Is.cpp ../../src/Renderer//Renderer.cpp ../../src/Scene//SkelNode.cpp ../../src/Scene//Light.cpp ../../src/Scene//SkelModelNode.cpp ../../src/Scene//Scene.cpp ../../src/Scene//MeshNode.cpp ../../src/Scene//Camera.cpp ../../src/Scene//SceneNode.cpp ../../src/Scene//ParticleEmitter.cpp ../../src/Ui//Ui.cpp ../../src/Resources//LightProps.cpp ../../src/Resources//SkelAnim.cpp ../../src/Resources//Mesh.cpp ../../src/Resources//ShaderProg.cpp ../../src/Resources//ShaderPrePreprocessor.cpp ../../src/Resources//Material.cpp ../../src/Resources//Extension.cpp ../../src/Resources//Skeleton.cpp ../../src/Resources//Texture.cpp ../../src/Resources//Resource.cpp ../../src/Util//Input.cpp ../../src/Util//App.cpp ../../src/Util//Common.cpp ../../src/Util//Util.cpp ../../src/Scene/Controllers//SkelAnimCtrl.cpp ../../src/Scene/Controllers//Controller.cpp ../../src/Physics//PhyWorld.cpp ../../src/Renderer2//Sm.cpp ../../src/Renderer2//Hdr.cpp ../../src/Renderer2//Ssao.cpp ../../src/Renderer2//Ms.cpp ../../src/Renderer2//Pps.cpp ../../src/Renderer2//Is.cpp ../../src/Renderer2//Renderer.cpp 
-OBJECTS = Scanner.o collision.o skybox.o map.o memory.o particles.o Main.o MsEarlyz.o PpsSsao.o Dbg.o BulletDebuger.o PpsHdr.o PpsLscatt.o Bs2.o Ms.o Pps.o Bs.o IsShadows.o Is.o Renderer.o SkelNode.o Light.o SkelModelNode.o Scene.o MeshNode.o Camera.o SceneNode.o ParticleEmitter.o Ui.o LightProps.o SkelAnim.o Mesh.o ShaderProg.o ShaderPrePreprocessor.o Material.o Extension.o Skeleton.o Texture.o Resource.o Input.o App.o Common.o Util.o SkelAnimCtrl.o Controller.o PhyWorld.o Sm.o Hdr.o Ssao.o 53.Ms.o 37.Pps.o 23.Is.o 85.Renderer.o 
+SOURCES = ../../src/Util/Tokenizer//Scanner.cpp ../../src/Misc//collision.cpp ../../src/Misc//skybox.cpp ../../src/Misc//map.cpp ../../src/Misc//memory.cpp ../../src/Misc//particles.cpp ../../src//Main.cpp ../../src/Renderer//MsEarlyz.cpp ../../src/Renderer//PpsSsao.cpp ../../src/Renderer//Dbg.cpp ../../src/Renderer//BulletDebuger.cpp ../../src/Renderer//PpsHdr.cpp ../../src/Renderer//PpsLscatt.cpp ../../src/Renderer//Bs2.cpp ../../src/Renderer//Ms.cpp ../../src/Renderer//Pps.cpp ../../src/Renderer//Bs.cpp ../../src/Renderer//IsShadows.cpp ../../src/Renderer//Is.cpp ../../src/Renderer//Renderer.cpp ../../src/Scene//SkelNode.cpp ../../src/Scene//Light.cpp ../../src/Scene//SkelModelNode.cpp ../../src/Scene//Scene.cpp ../../src/Scene//MeshNode.cpp ../../src/Scene//Camera.cpp ../../src/Scene//SceneNode.cpp ../../src/Scene//ParticleEmitter.cpp ../../src/Ui//Ui.cpp ../../src/Resources//LightProps.cpp ../../src/Resources//SkelAnim.cpp ../../src/Resources//Mesh.cpp ../../src/Resources//ShaderProg.cpp ../../src/Resources//ShaderPrePreprocessor.cpp ../../src/Resources//Material.cpp ../../src/Resources//Extension.cpp ../../src/Resources//Skeleton.cpp ../../src/Resources//Texture.cpp ../../src/Resources//Resource.cpp ../../src/Util//Input.cpp ../../src/Util//App.cpp ../../src/Util//Common.cpp ../../src/Util//Util.cpp ../../src/Scene/Controllers//SkelAnimCtrl.cpp ../../src/Scene/Controllers//Controller.cpp ../../src/Physics//PhyWorld.cpp ../../src/Renderer2//Dbp.cpp ../../src/Renderer2//Sm.cpp ../../src/Renderer2//Hdr.cpp ../../src/Renderer2//Ssao.cpp ../../src/Renderer2//Ms.cpp ../../src/Renderer2//Pps.cpp ../../src/Renderer2//MainRenderer.cpp ../../src/Renderer2//Is.cpp ../../src/Renderer2//Renderer.cpp 
+OBJECTS = Scanner.o collision.o skybox.o map.o memory.o particles.o Main.o MsEarlyz.o PpsSsao.o Dbg.o BulletDebuger.o PpsHdr.o PpsLscatt.o Bs2.o Ms.o Pps.o Bs.o IsShadows.o Is.o Renderer.o SkelNode.o Light.o SkelModelNode.o Scene.o MeshNode.o Camera.o SceneNode.o ParticleEmitter.o Ui.o LightProps.o SkelAnim.o Mesh.o ShaderProg.o ShaderPrePreprocessor.o Material.o Extension.o Skeleton.o Texture.o Resource.o Input.o App.o Common.o Util.o SkelAnimCtrl.o Controller.o PhyWorld.o Dbp.o Sm.o Hdr.o Ssao.o 37.Ms.o 40.Pps.o MainRenderer.o 4.Is.o 66.Renderer.o 
 PRECOMPILED_HEADERS = 
 
 all: $(PRECOMPILED_HEADERS) $(SOURCES) $(EXECUTABLE)
@@ -3193,8 +3193,7 @@ Mesh.o: ../../src/Resources//Mesh.cpp ../../src/Resources//Mesh.h \
 ShaderProg.o: ../../src/Resources//ShaderProg.cpp \
  ../../src/Resources//ShaderProg.h ../../src/Util/Common.h \
  ../../src/Misc/memory.h ../../src/Resources//Resource.h \
- ../../src/Util/Util.h ../../src/Util/Common.h \
- ../../src/Renderer/Renderer.h ../../src/Math/Math.h \
+ ../../src/Util/Util.h ../../src/Util/Common.h ../../src/Math/Math.h \
  ../../src/Math/Vec2.h ../../src/Math/MathForwardDecls.h \
  ../../src/Math/Vec2.inl.h ../../src/Math/MathDfltHeader.h \
  ../../src/Math/Vec3.h ../../src/Math/Vec3.inl.h ../../src/Math/Vec4.h \
@@ -3205,9 +3204,10 @@ ShaderProg.o: ../../src/Resources//ShaderProg.cpp \
  ../../src/Math/Mat3.inl.h ../../src/Math/Mat4.h \
  ../../src/Math/Mat4.inl.h ../../src/Math/MathFuncs.h \
  ../../src/Math/MathFuncs.inl.h ../../src/Math/Transform.h \
- ../../src/Math/Transform.inl.h ../../src/Resources/ShaderProg.h \
- ../../src/Scene/Camera.h ../../src/Misc/collision.h \
- ../../src/Scene/SceneNode.h ../../src/Resources//ShaderPrePreprocessor.h \
+ ../../src/Math/Transform.inl.h ../../src/Renderer/Renderer.h \
+ ../../src/Resources/ShaderProg.h ../../src/Scene/Camera.h \
+ ../../src/Misc/collision.h ../../src/Scene/SceneNode.h \
+ ../../src/Resources//ShaderPrePreprocessor.h \
  ../../src/Resources//Texture.h
 	@echo Compiling ../../src/Resources//ShaderProg.cpp...
 	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Resources//ShaderProg.cpp -o ShaderProg.o
@@ -3531,7 +3531,9 @@ App.o: ../../src/Util//App.cpp ../../../SDL-hg/include/SDL.h \
  ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h \
  ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionWorld.h \
  ../../src/Physics/PhyConversions.h ../../src/Physics/MotionState.h \
- ../../src/Scene/SceneNode.h ../../src/Physics/PhyWorld.h
+ ../../src/Scene/SceneNode.h ../../src/Physics/PhyWorld.h \
+ ../../src/Renderer2/MainRenderer.h ../../src/Renderer2/Renderer.hpp \
+ ../../src/Renderer/BufferObjects/Fbo.h ../../src/Resources/ShaderProg.h
 	@echo Compiling ../../src/Util//App.cpp...
 	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Util//App.cpp -o App.o
 
@@ -3897,6 +3899,187 @@ PhyWorld.o: ../../src/Physics//PhyWorld.cpp ../../src/Physics//PhyWorld.h \
 	@echo Compiling ../../src/Physics//PhyWorld.cpp...
 	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Physics//PhyWorld.cpp -o PhyWorld.o
 
+Dbp.o: ../../src/Renderer2//Dbp.cpp ../../src/Renderer2//Renderer.hpp \
+ ../../src/Util/Common.h ../../src/Misc/memory.h ../../src/Math/Math.h \
+ ../../src/Math/Vec2.h ../../src/Math/MathForwardDecls.h \
+ ../../src/Math/Vec2.inl.h ../../src/Math/MathDfltHeader.h \
+ ../../src/Math/Vec3.h ../../src/Math/Vec3.inl.h ../../src/Math/Vec4.h \
+ ../../src/Math/Vec4.inl.h ../../src/Math/Quat.h \
+ ../../src/Math/Quat.inl.h ../../src/Math/Axisang.h \
+ ../../src/Math/Axisang.inl.h ../../src/Math/Euler.h \
+ ../../src/Math/Euler.inl.h ../../src/Math/Mat3.h \
+ ../../src/Math/Mat3.inl.h ../../src/Math/Mat4.h \
+ ../../src/Math/Mat4.inl.h ../../src/Math/MathFuncs.h \
+ ../../src/Math/MathFuncs.inl.h ../../src/Math/Transform.h \
+ ../../src/Math/Transform.inl.h ../../src/Renderer/BufferObjects/Fbo.h \
+ ../../src/Resources/Texture.h ../../src/Resources/Resource.h \
+ ../../src/Util/Util.h ../../src/Util/Common.h \
+ ../../src/Resources/ShaderProg.h ../../src/Util/App.h \
+ ../../../SDL-hg/include/SDL.h ../../../SDL-hg/include/SDL_main.h \
+ ../../../SDL-hg/include/SDL_stdinc.h \
+ ../../../SDL-hg/include/SDL_config.h \
+ ../../../SDL-hg/include/SDL_platform.h \
+ ../../../SDL-hg/include/begin_code.h \
+ ../../../SDL-hg/include/close_code.h \
+ ../../../SDL-hg/include/SDL_atomic.h ../../../SDL-hg/include/SDL_audio.h \
+ ../../../SDL-hg/include/SDL_error.h ../../../SDL-hg/include/SDL_endian.h \
+ ../../../SDL-hg/include/SDL_mutex.h ../../../SDL-hg/include/SDL_thread.h \
+ ../../../SDL-hg/include/SDL_rwops.h \
+ ../../../SDL-hg/include/SDL_cpuinfo.h \
+ ../../../SDL-hg/include/SDL_events.h ../../../SDL-hg/include/SDL_video.h \
+ ../../../SDL-hg/include/SDL_pixels.h ../../../SDL-hg/include/SDL_rect.h \
+ ../../../SDL-hg/include/SDL_surface.h \
+ ../../../SDL-hg/include/SDL_keyboard.h \
+ ../../../SDL-hg/include/SDL_keysym.h \
+ ../../../SDL-hg/include/SDL_scancode.h \
+ ../../../SDL-hg/include/SDL_mouse.h \
+ ../../../SDL-hg/include/SDL_joystick.h \
+ ../../../SDL-hg/include/SDL_quit.h ../../../SDL-hg/include/SDL_loadso.h \
+ ../../../SDL-hg/include/SDL_power.h ../../../SDL-hg/include/SDL_timer.h \
+ ../../../SDL-hg/include/SDL_version.h \
+ ../../../SDL-hg/include/SDL_revision.h \
+ ../../../SDL-hg/include/SDL_compat.h ../../src/Scene/Scene.h \
+ ../../src/Misc/skybox.h ../../src/Physics/PhyWorld.h \
+ ../../src/Physics/PhyCommon.h \
+ ../../../bullet_svn/src/btBulletCollisionCommon.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionWorld.h \
+ ../../../bullet_svn/src/LinearMath/btVector3.h \
+ ../../../bullet_svn/src/LinearMath/btScalar.h \
+ ../../../bullet_svn/src/LinearMath/btMinMax.h \
+ ../../../bullet_svn/src/LinearMath/btTransform.h \
+ ../../../bullet_svn/src/LinearMath/btMatrix3x3.h \
+ ../../../bullet_svn/src/LinearMath/btVector3.h \
+ ../../../bullet_svn/src/LinearMath/btQuaternion.h \
+ ../../../bullet_svn/src/LinearMath/btQuadWord.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionObject.h \
+ ../../../bullet_svn/src/LinearMath/btMotionState.h \
+ ../../../bullet_svn/src/LinearMath/btTransform.h \
+ ../../../bullet_svn/src/LinearMath/btAlignedAllocator.h \
+ ../../../bullet_svn/src/LinearMath/btAlignedObjectArray.h \
+ ../../../bullet_svn/src/LinearMath/btAlignedAllocator.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btDispatcher.h \
+ ../../../bullet_svn/src/LinearMath/btScalar.h \
+ ../../../bullet_svn/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h \
+ ../../../bullet_svn/src/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h \
+ ../../../bullet_svn/src/LinearMath/btTransformUtil.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btManifoldResult.h \
+ ../../../bullet_svn/src/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btBroadphaseInterface.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionObject.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btBoxShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h \
+ ../../../bullet_svn/src/LinearMath/btMatrix3x3.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btConvexInternalShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btConvexShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btCollisionShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btCollisionMargin.h \
+ ../../../bullet_svn/src/LinearMath/btAabbUtil2.h \
+ ../../../bullet_svn/src/LinearMath/btMinMax.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btSphereShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btCapsuleShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btCylinderShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btBoxShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btConeShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btStaticPlaneShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btConcaveShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btTriangleCallback.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btConvexHullShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btTriangleMesh.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btStridingMeshInterface.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btTriangleMeshShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btOptimizedBvh.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btQuantizedBvh.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btTriangleInfoMap.h \
+ ../../../bullet_svn/src/LinearMath/btHashMap.h \
+ ../../../bullet_svn/src/LinearMath/btAlignedObjectArray.h \
+ ../../../bullet_svn/src/LinearMath/btSerializer.h \
+ ../../../bullet_svn/src/LinearMath/btStackAlloc.h \
+ ../../../bullet_svn/src/LinearMath/btHashMap.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btTriangleMeshShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btCompoundShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btTetrahedronShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btEmptyShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btMultiSphereShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionShapes/btUniformScalingShape.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionConfiguration.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btAxisSweep3.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btDbvt.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h \
+ ../../../bullet_svn/src/LinearMath/btQuaternion.h \
+ ../../../bullet_svn/src/LinearMath/btTransform.h \
+ ../../../bullet_svn/src/LinearMath/btDefaultMotionState.h \
+ ../../../bullet_svn/src/LinearMath/btMotionState.h \
+ ../../../bullet_svn/src/LinearMath/btQuickprof.h \
+ ../../../bullet_svn/src/LinearMath/btIDebugDraw.h \
+ ../../../bullet_svn/src/LinearMath/btSerializer.h \
+ ../../../bullet_svn/src/btBulletDynamicsCommon.h \
+ ../../../bullet_svn/src/btBulletCollisionCommon.h \
+ ../../../bullet_svn/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h \
+ ../../../bullet_svn/src/BulletDynamics/Dynamics/btDynamicsWorld.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionWorld.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h \
+ ../../../bullet_svn/src/BulletDynamics/Dynamics/btContinuousDynamicsWorld.h \
+ ../../../bullet_svn/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h \
+ ../../../bullet_svn/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h \
+ ../../../bullet_svn/src/BulletDynamics/Dynamics/btRigidBody.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionObject.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btJacobianEntry.h \
+ ../../../bullet_svn/src/BulletDynamics/Dynamics/btRigidBody.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btSolverConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btSolverBody.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btHingeConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btSliderConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btUniversalConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btHinge2Constraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btConstraintSolver.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btContactConstraint.h \
+ ../../../bullet_svn/src/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h \
+ ../../../bullet_svn/src/BulletDynamics/Vehicle/btRaycastVehicle.h \
+ ../../../bullet_svn/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h \
+ ../../../bullet_svn/src/BulletDynamics/Vehicle/btVehicleRaycaster.h \
+ ../../../bullet_svn/src/BulletDynamics/Vehicle/btWheelInfo.h \
+ ../../../bullet_svn/src/BulletDynamics/Dynamics/btActionInterface.h \
+ ../../../bullet_svn/src/BulletDynamics/Dynamics/btRigidBody.h \
+ ../../../bullet_svn/src/BulletDynamics/Character/btKinematicCharacterController.h \
+ ../../../bullet_svn/src/BulletDynamics/Character/btCharacterControllerInterface.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btGhostObject.h \
+ ../../../bullet_svn/src/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h \
+ ../../../bullet_svn/src/BulletCollision/CollisionDispatch/btCollisionWorld.h \
+ ../../src/Physics/PhyConversions.h ../../src/Physics/MotionState.h \
+ ../../src/Scene/SceneNode.h ../../src/Physics/PhyWorld.h \
+ ../../src/Scene/SkelNode.h ../../src/Scene/SceneNode.h \
+ ../../src/Scene/Controllers/Controller.h
+	@echo Compiling ../../src/Renderer2//Dbp.cpp...
+	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer2//Dbp.cpp -o Dbp.o
+
 Sm.o: ../../src/Renderer2//Sm.cpp ../../src/Renderer2//Renderer.hpp \
  ../../src/Util/Common.h ../../src/Misc/memory.h ../../src/Math/Math.h \
  ../../src/Math/Vec2.h ../../src/Math/MathForwardDecls.h \
@@ -4117,7 +4300,7 @@ Ssao.o: ../../src/Renderer2//Ssao.cpp ../../src/Renderer2//Renderer.hpp \
 	@echo Compiling ../../src/Renderer2//Ssao.cpp...
 	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer2//Ssao.cpp -o Ssao.o
 
-53.Ms.o: ../../src/Renderer2//Ms.cpp ../../src/Renderer2//Renderer.hpp \
+37.Ms.o: ../../src/Renderer2//Ms.cpp ../../src/Renderer2//Renderer.hpp \
  ../../src/Util/Common.h ../../src/Misc/memory.h ../../src/Math/Math.h \
  ../../src/Math/Vec2.h ../../src/Math/MathForwardDecls.h \
  ../../src/Math/Vec2.inl.h ../../src/Math/MathDfltHeader.h \
@@ -4297,9 +4480,9 @@ Ssao.o: ../../src/Renderer2//Ssao.cpp ../../src/Renderer2//Renderer.hpp \
  ../../src/Scene/SceneNode.h ../../src/Scene/MeshNode.h \
  ../../src/Resources/Material.h ../../src/Resources/ShaderProg.h
 	@echo Compiling ../../src/Renderer2//Ms.cpp...
-	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer2//Ms.cpp -o 53.Ms.o
+	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer2//Ms.cpp -o 37.Ms.o
 
-37.Pps.o: ../../src/Renderer2//Pps.cpp ../../src/Renderer2//Renderer.hpp \
+40.Pps.o: ../../src/Renderer2//Pps.cpp ../../src/Renderer2//Renderer.hpp \
  ../../src/Util/Common.h ../../src/Misc/memory.h ../../src/Math/Math.h \
  ../../src/Math/Vec2.h ../../src/Math/MathForwardDecls.h \
  ../../src/Math/Vec2.inl.h ../../src/Math/MathDfltHeader.h \
@@ -4316,9 +4499,54 @@ Ssao.o: ../../src/Renderer2//Ssao.cpp ../../src/Renderer2//Renderer.hpp \
  ../../src/Util/Util.h ../../src/Util/Common.h \
  ../../src/Resources/ShaderProg.h
 	@echo Compiling ../../src/Renderer2//Pps.cpp...
-	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer2//Pps.cpp -o 37.Pps.o
+	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer2//Pps.cpp -o 40.Pps.o
 
-23.Is.o: ../../src/Renderer2//Is.cpp ../../src/Renderer2//Renderer.hpp \
+MainRenderer.o: ../../src/Renderer2//MainRenderer.cpp \
+ ../../src/Renderer2//MainRenderer.h ../../src/Util/Common.h \
+ ../../src/Misc/memory.h ../../src/Renderer2//Renderer.hpp \
+ ../../src/Math/Math.h ../../src/Math/Vec2.h \
+ ../../src/Math/MathForwardDecls.h ../../src/Math/Vec2.inl.h \
+ ../../src/Math/MathDfltHeader.h ../../src/Math/Vec3.h \
+ ../../src/Math/Vec3.inl.h ../../src/Math/Vec4.h \
+ ../../src/Math/Vec4.inl.h ../../src/Math/Quat.h \
+ ../../src/Math/Quat.inl.h ../../src/Math/Axisang.h \
+ ../../src/Math/Axisang.inl.h ../../src/Math/Euler.h \
+ ../../src/Math/Euler.inl.h ../../src/Math/Mat3.h \
+ ../../src/Math/Mat3.inl.h ../../src/Math/Mat4.h \
+ ../../src/Math/Mat4.inl.h ../../src/Math/MathFuncs.h \
+ ../../src/Math/MathFuncs.inl.h ../../src/Math/Transform.h \
+ ../../src/Math/Transform.inl.h ../../src/Renderer/BufferObjects/Fbo.h \
+ ../../src/Resources/Texture.h ../../src/Resources/Resource.h \
+ ../../src/Util/Util.h ../../src/Util/Common.h \
+ ../../src/Resources/ShaderProg.h ../../src/Util/App.h \
+ ../../../SDL-hg/include/SDL.h ../../../SDL-hg/include/SDL_main.h \
+ ../../../SDL-hg/include/SDL_stdinc.h \
+ ../../../SDL-hg/include/SDL_config.h \
+ ../../../SDL-hg/include/SDL_platform.h \
+ ../../../SDL-hg/include/begin_code.h \
+ ../../../SDL-hg/include/close_code.h \
+ ../../../SDL-hg/include/SDL_atomic.h ../../../SDL-hg/include/SDL_audio.h \
+ ../../../SDL-hg/include/SDL_error.h ../../../SDL-hg/include/SDL_endian.h \
+ ../../../SDL-hg/include/SDL_mutex.h ../../../SDL-hg/include/SDL_thread.h \
+ ../../../SDL-hg/include/SDL_rwops.h \
+ ../../../SDL-hg/include/SDL_cpuinfo.h \
+ ../../../SDL-hg/include/SDL_events.h ../../../SDL-hg/include/SDL_video.h \
+ ../../../SDL-hg/include/SDL_pixels.h ../../../SDL-hg/include/SDL_rect.h \
+ ../../../SDL-hg/include/SDL_surface.h \
+ ../../../SDL-hg/include/SDL_keyboard.h \
+ ../../../SDL-hg/include/SDL_keysym.h \
+ ../../../SDL-hg/include/SDL_scancode.h \
+ ../../../SDL-hg/include/SDL_mouse.h \
+ ../../../SDL-hg/include/SDL_joystick.h \
+ ../../../SDL-hg/include/SDL_quit.h ../../../SDL-hg/include/SDL_loadso.h \
+ ../../../SDL-hg/include/SDL_power.h ../../../SDL-hg/include/SDL_timer.h \
+ ../../../SDL-hg/include/SDL_version.h \
+ ../../../SDL-hg/include/SDL_revision.h \
+ ../../../SDL-hg/include/SDL_compat.h
+	@echo Compiling ../../src/Renderer2//MainRenderer.cpp...
+	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer2//MainRenderer.cpp -o MainRenderer.o
+
+4.Is.o: ../../src/Renderer2//Is.cpp ../../src/Renderer2//Renderer.hpp \
  ../../src/Util/Common.h ../../src/Misc/memory.h ../../src/Math/Math.h \
  ../../src/Math/Vec2.h ../../src/Math/MathForwardDecls.h \
  ../../src/Math/Vec2.inl.h ../../src/Math/MathDfltHeader.h \
@@ -4498,9 +4726,9 @@ Ssao.o: ../../src/Renderer2//Ssao.cpp ../../src/Renderer2//Renderer.hpp \
  ../../src/Physics/PhyConversions.h ../../src/Physics/MotionState.h \
  ../../src/Scene/SceneNode.h ../../src/Physics/PhyWorld.h
 	@echo Compiling ../../src/Renderer2//Is.cpp...
-	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer2//Is.cpp -o 23.Is.o
+	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer2//Is.cpp -o 4.Is.o
 
-85.Renderer.o: ../../src/Renderer2//Renderer.cpp \
+66.Renderer.o: ../../src/Renderer2//Renderer.cpp \
  ../../src/Renderer2//Renderer.hpp ../../src/Util/Common.h \
  ../../src/Misc/memory.h ../../src/Math/Math.h ../../src/Math/Vec2.h \
  ../../src/Math/MathForwardDecls.h ../../src/Math/Vec2.inl.h \
@@ -4516,9 +4744,10 @@ Ssao.o: ../../src/Renderer2//Ssao.cpp ../../src/Renderer2//Renderer.hpp \
  ../../src/Math/Transform.inl.h ../../src/Renderer/BufferObjects/Fbo.h \
  ../../src/Resources/Texture.h ../../src/Resources/Resource.h \
  ../../src/Util/Util.h ../../src/Util/Common.h \
- ../../src/Resources/ShaderProg.h
+ ../../src/Resources/ShaderProg.h ../../src/Scene/Camera.h \
+ ../../src/Misc/collision.h ../../src/Scene/SceneNode.h
 	@echo Compiling ../../src/Renderer2//Renderer.cpp...
-	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer2//Renderer.cpp -o 85.Renderer.o
+	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer2//Renderer.cpp -o 66.Renderer.o
 
 clean:
 	rm -f *.o

BIN
docs/renderer-flow.odg


+ 4 - 4
src/Misc/skybox.cpp

@@ -60,10 +60,10 @@ void Skybox::Render( const Mat3& rotation )
 	glPushMatrix();
 
 	shader->bind();
-	glUniform1i( shader->getUniVar("colormap")->getLoc(), 0 );
-	shader->locTexUnit( shader->getUniVar("noisemap")->getLoc(), *noise, 1 );
-	glUniform1f( shader->getUniVar("timer")->getLoc(), (rotation_ang/(2*PI))*100 );
-	glUniform3fv( shader->getUniVar("sceneAmbientCol")->getLoc(), 1, &(Vec3( 1.0, 1.0, 1.0 ) / app->getScene()->getAmbientCol())[0] );
+	glUniform1i( shader->findUniVar("colormap")->getLoc(), 0 );
+	shader->locTexUnit( shader->findUniVar("noisemap")->getLoc(), *noise, 1 );
+	glUniform1f( shader->findUniVar("timer")->getLoc(), (rotation_ang/(2*PI))*100 );
+	glUniform3fv( shader->findUniVar("sceneAmbientCol")->getLoc(), 1, &(Vec3( 1.0, 1.0, 1.0 ) / app->getScene()->getAmbientCol())[0] );
 
 	// set the rotation matrix
 	Mat3 tmp( rotation );

+ 1 - 1
src/Renderer/Bs2.cpp

@@ -102,7 +102,7 @@ void runStage2( const Camera& cam )
 			fbo.bind();
 			glDisable( GL_DEPTH_TEST );
 			shaderProg->bind();
-			shaderProg->locTexUnit( shaderProg->getUniVar("fai")->getLoc(), fai, 0 );
+			shaderProg->locTexUnit( shaderProg->findUniVar("fai")->getLoc(), fai, 0 );
 			R::DrawQuad( 0 );
 		}
 	}

+ 34 - 34
src/Renderer/Is.cpp

@@ -189,46 +189,46 @@ void init()
 {
 	// load the shaders
 	ambientSProg.customLoad( "shaders/is_ap.glsl" );
-	ambientSProg.uniLocs.ambientCol = ambientSProg.getUniVar("ambientCol")->getLoc();
-	ambientSProg.uniLocs.sceneColMap = ambientSProg.getUniVar("sceneColMap")->getLoc();
+	ambientSProg.uniLocs.ambientCol = ambientSProg.findUniVar("ambientCol")->getLoc();
+	ambientSProg.uniLocs.sceneColMap = ambientSProg.findUniVar("sceneColMap")->getLoc();
 
 	pointLightSProg.customLoad( "shaders/is_lp_generic.glsl", "#define _POINT_LIGHT_\n" );
-	pointLightSProg.uniLocs.msNormalFai = pointLightSProg.getUniVar("msNormalFai")->getLoc();
-	pointLightSProg.uniLocs.msDiffuseFai = pointLightSProg.getUniVar("msDiffuseFai")->getLoc();
-	pointLightSProg.uniLocs.msSpecularFai = pointLightSProg.getUniVar("msSpecularFai")->getLoc();
-	pointLightSProg.uniLocs.msDepthFai = pointLightSProg.getUniVar("msDepthFai")->getLoc();
-	pointLightSProg.uniLocs.planes = pointLightSProg.getUniVar("planes")->getLoc();
-	pointLightSProg.uniLocs.lightPos = pointLightSProg.getUniVar("lightPos")->getLoc();
-	pointLightSProg.uniLocs.lightInvRadius = pointLightSProg.getUniVar("lightInvRadius")->getLoc();
-	pointLightSProg.uniLocs.lightDiffuseCol = pointLightSProg.getUniVar("lightDiffuseCol")->getLoc();
-	pointLightSProg.uniLocs.lightSpecularCol = pointLightSProg.getUniVar("lightSpecularCol")->getLoc();
+	pointLightSProg.uniLocs.msNormalFai = pointLightSProg.findUniVar("msNormalFai")->getLoc();
+	pointLightSProg.uniLocs.msDiffuseFai = pointLightSProg.findUniVar("msDiffuseFai")->getLoc();
+	pointLightSProg.uniLocs.msSpecularFai = pointLightSProg.findUniVar("msSpecularFai")->getLoc();
+	pointLightSProg.uniLocs.msDepthFai = pointLightSProg.findUniVar("msDepthFai")->getLoc();
+	pointLightSProg.uniLocs.planes = pointLightSProg.findUniVar("planes")->getLoc();
+	pointLightSProg.uniLocs.lightPos = pointLightSProg.findUniVar("lightPos")->getLoc();
+	pointLightSProg.uniLocs.lightInvRadius = pointLightSProg.findUniVar("lightInvRadius")->getLoc();
+	pointLightSProg.uniLocs.lightDiffuseCol = pointLightSProg.findUniVar("lightDiffuseCol")->getLoc();
+	pointLightSProg.uniLocs.lightSpecularCol = pointLightSProg.findUniVar("lightSpecularCol")->getLoc();
 
 	spotLightNoShadowSProg.customLoad( "shaders/is_lp_generic.glsl", "#define _SPOT_LIGHT_\n" );
-	spotLightNoShadowSProg.uniLocs.msNormalFai = spotLightNoShadowSProg.getUniVar("msNormalFai")->getLoc();
-	spotLightNoShadowSProg.uniLocs.msDiffuseFai = spotLightNoShadowSProg.getUniVar("msDiffuseFai")->getLoc();
-	spotLightNoShadowSProg.uniLocs.msSpecularFai = spotLightNoShadowSProg.getUniVar("msSpecularFai")->getLoc();
-	spotLightNoShadowSProg.uniLocs.msDepthFai = spotLightNoShadowSProg.getUniVar("msDepthFai")->getLoc();
-	spotLightNoShadowSProg.uniLocs.planes = spotLightNoShadowSProg.getUniVar("planes")->getLoc();
-	spotLightNoShadowSProg.uniLocs.lightPos = spotLightNoShadowSProg.getUniVar("lightPos")->getLoc();
-	spotLightNoShadowSProg.uniLocs.lightInvRadius = spotLightNoShadowSProg.getUniVar("lightInvRadius")->getLoc();
-	spotLightNoShadowSProg.uniLocs.lightDiffuseCol = spotLightNoShadowSProg.getUniVar("lightDiffuseCol")->getLoc();
-	spotLightNoShadowSProg.uniLocs.lightSpecularCol = spotLightNoShadowSProg.getUniVar("lightSpecularCol")->getLoc();
-	spotLightNoShadowSProg.uniLocs.lightTex = spotLightNoShadowSProg.getUniVar("lightTex")->getLoc();
-	spotLightNoShadowSProg.uniLocs.texProjectionMat = spotLightNoShadowSProg.getUniVar("texProjectionMat")->getLoc();
+	spotLightNoShadowSProg.uniLocs.msNormalFai = spotLightNoShadowSProg.findUniVar("msNormalFai")->getLoc();
+	spotLightNoShadowSProg.uniLocs.msDiffuseFai = spotLightNoShadowSProg.findUniVar("msDiffuseFai")->getLoc();
+	spotLightNoShadowSProg.uniLocs.msSpecularFai = spotLightNoShadowSProg.findUniVar("msSpecularFai")->getLoc();
+	spotLightNoShadowSProg.uniLocs.msDepthFai = spotLightNoShadowSProg.findUniVar("msDepthFai")->getLoc();
+	spotLightNoShadowSProg.uniLocs.planes = spotLightNoShadowSProg.findUniVar("planes")->getLoc();
+	spotLightNoShadowSProg.uniLocs.lightPos = spotLightNoShadowSProg.findUniVar("lightPos")->getLoc();
+	spotLightNoShadowSProg.uniLocs.lightInvRadius = spotLightNoShadowSProg.findUniVar("lightInvRadius")->getLoc();
+	spotLightNoShadowSProg.uniLocs.lightDiffuseCol = spotLightNoShadowSProg.findUniVar("lightDiffuseCol")->getLoc();
+	spotLightNoShadowSProg.uniLocs.lightSpecularCol = spotLightNoShadowSProg.findUniVar("lightSpecularCol")->getLoc();
+	spotLightNoShadowSProg.uniLocs.lightTex = spotLightNoShadowSProg.findUniVar("lightTex")->getLoc();
+	spotLightNoShadowSProg.uniLocs.texProjectionMat = spotLightNoShadowSProg.findUniVar("texProjectionMat")->getLoc();
 
 	spotLightShadowSProg.customLoad( "shaders/is_lp_generic.glsl", "#define _SPOT_LIGHT_\n#define _SHADOW_\n" );
-	spotLightShadowSProg.uniLocs.msNormalFai = spotLightShadowSProg.getUniVar("msNormalFai")->getLoc();
-	spotLightShadowSProg.uniLocs.msDiffuseFai = spotLightShadowSProg.getUniVar("msDiffuseFai")->getLoc();
-	spotLightShadowSProg.uniLocs.msSpecularFai = spotLightShadowSProg.getUniVar("msSpecularFai")->getLoc();
-	spotLightShadowSProg.uniLocs.msDepthFai = spotLightShadowSProg.getUniVar("msDepthFai")->getLoc();
-	spotLightShadowSProg.uniLocs.planes = spotLightShadowSProg.getUniVar("planes")->getLoc();
-	spotLightShadowSProg.uniLocs.lightPos = spotLightShadowSProg.getUniVar("lightPos")->getLoc();
-	spotLightShadowSProg.uniLocs.lightInvRadius = spotLightShadowSProg.getUniVar("lightInvRadius")->getLoc();
-	spotLightShadowSProg.uniLocs.lightDiffuseCol = spotLightShadowSProg.getUniVar("lightDiffuseCol")->getLoc();
-	spotLightShadowSProg.uniLocs.lightSpecularCol = spotLightShadowSProg.getUniVar("lightSpecularCol")->getLoc();
-	spotLightShadowSProg.uniLocs.lightTex = spotLightShadowSProg.getUniVar("lightTex")->getLoc();
-	spotLightShadowSProg.uniLocs.texProjectionMat = spotLightShadowSProg.getUniVar("texProjectionMat")->getLoc();
-	spotLightShadowSProg.uniLocs.shadowMap = spotLightShadowSProg.getUniVar("shadowMap")->getLoc();
+	spotLightShadowSProg.uniLocs.msNormalFai = spotLightShadowSProg.findUniVar("msNormalFai")->getLoc();
+	spotLightShadowSProg.uniLocs.msDiffuseFai = spotLightShadowSProg.findUniVar("msDiffuseFai")->getLoc();
+	spotLightShadowSProg.uniLocs.msSpecularFai = spotLightShadowSProg.findUniVar("msSpecularFai")->getLoc();
+	spotLightShadowSProg.uniLocs.msDepthFai = spotLightShadowSProg.findUniVar("msDepthFai")->getLoc();
+	spotLightShadowSProg.uniLocs.planes = spotLightShadowSProg.findUniVar("planes")->getLoc();
+	spotLightShadowSProg.uniLocs.lightPos = spotLightShadowSProg.findUniVar("lightPos")->getLoc();
+	spotLightShadowSProg.uniLocs.lightInvRadius = spotLightShadowSProg.findUniVar("lightInvRadius")->getLoc();
+	spotLightShadowSProg.uniLocs.lightDiffuseCol = spotLightShadowSProg.findUniVar("lightDiffuseCol")->getLoc();
+	spotLightShadowSProg.uniLocs.lightSpecularCol = spotLightShadowSProg.findUniVar("lightSpecularCol")->getLoc();
+	spotLightShadowSProg.uniLocs.lightTex = spotLightShadowSProg.findUniVar("lightTex")->getLoc();
+	spotLightShadowSProg.uniLocs.texProjectionMat = spotLightShadowSProg.findUniVar("texProjectionMat")->getLoc();
+	spotLightShadowSProg.uniLocs.shadowMap = spotLightShadowSProg.findUniVar("shadowMap")->getLoc();
 
 
 	// init the rest

+ 5 - 5
src/Renderer/Pps.cpp

@@ -69,27 +69,27 @@ void init()
 	sProg.customLoad( "shaders/Pps.glsl" );
 	sProg.bind();
 
-	sProg.uniLocs.isFai = sProg.getUniVar( "isFai" )->getLoc();
+	sProg.uniLocs.isFai = sProg.findUniVar( "isFai" )->getLoc();
 
 	if( R::Pps::Ssao::enabled )
 	{
 		R::Pps::Ssao::init();
-		sProg.uniLocs.ppsSsaoFai = sProg.getUniVar( "ppsSsaoFai" )->getLoc();
+		sProg.uniLocs.ppsSsaoFai = sProg.findUniVar( "ppsSsaoFai" )->getLoc();
 	}
 
 	if( R::Pps::Hdr::enabled )
 	{
 		R::Pps::Hdr::init();
-		sProg.uniLocs.hdrFai = sProg.getUniVar( "ppsHdrFai" )->getLoc();
+		sProg.uniLocs.hdrFai = sProg.findUniVar( "ppsHdrFai" )->getLoc();
 	}
 
 	if( R::Pps::edgeaa::enabled )
-		sProg.uniLocs.msNormalFai = sProg.getUniVar( "msNormalFai" )->getLoc();
+		sProg.uniLocs.msNormalFai = sProg.findUniVar( "msNormalFai" )->getLoc();
 
 	if( R::Pps::Lscatt::enabled )
 	{
 		R::Pps::Lscatt::init();
-		sProg.uniLocs.lscattFai = sProg.getUniVar( "ppsLscattFai" )->getLoc();
+		sProg.uniLocs.lscattFai = sProg.findUniVar( "ppsLscattFai" )->getLoc();
 	}
 
 }

+ 3 - 3
src/Renderer/PpsHdr.cpp

@@ -87,15 +87,15 @@ void init()
 	// init shaders
 	if( !pass0SProg.customLoad( "shaders/PpsHdr.glsl", ("#define _PPS_HDR_PASS_0_\n#define IS_FAI_WIDTH " + Util::floatToStr(R::w) + "\n").c_str() ) )
 		FATAL( "See prev error" );
-	pass0SProg.uniLocs.fai = pass0SProg.getUniVar("fai")->getLoc();
+	pass0SProg.uniLocs.fai = pass0SProg.findUniVar("fai")->getLoc();
 
 	if( !pass1SProg.customLoad( "shaders/PpsHdr.glsl", ("#define _PPS_HDR_PASS_1_\n#define PASS0_HEIGHT " + Util::floatToStr(h) + "\n").c_str() ) )
 		FATAL( "See prev error" );
-	pass1SProg.uniLocs.fai = pass1SProg.getUniVar("fai")->getLoc();
+	pass1SProg.uniLocs.fai = pass1SProg.findUniVar("fai")->getLoc();
 
 	if( !pass2SProg.customLoad( "shaders/PpsHdr.glsl", "#define _PPS_HDR_PASS_2_\n" ) )
 		FATAL( "See prev error" );
-	pass2SProg.uniLocs.fai = pass2SProg.getUniVar("fai")->getLoc();
+	pass2SProg.uniLocs.fai = pass2SProg.findUniVar("fai")->getLoc();
 }
 
 

+ 3 - 3
src/Renderer/PpsLscatt.cpp

@@ -63,8 +63,8 @@ void init()
 
 	// init shaders
 	sProg.customLoad( "shaders/PpsLscatt.glsl" );
-	msDepthFaiUniLoc = sProg.getUniVar( "msDepthFai" )->getLoc();
-	isFaiUniLoc = sProg.getUniVar( "isFai" )->getLoc();
+	msDepthFaiUniLoc = sProg.findUniVar( "msDepthFai" )->getLoc();
+	isFaiUniLoc = sProg.findUniVar( "isFai" )->getLoc();
 }
 
 
@@ -93,7 +93,7 @@ void runPass( const Camera& cam )
 	p = cam.getProjectionMatrix() * (cam.getViewMatrix() * p);
 	p /= p.w;
 	p = p/2 + 0.5;
-	glUniform2fv( sProg.getUniVar("lightPosScreenSpace")->getLoc(), 1, &p[0] );
+	glUniform2fv( sProg.findUniVar("lightPosScreenSpace")->getLoc(), 1, &p[0] );
 
 	// Draw quad
 	R::DrawQuad( 0 );

+ 6 - 6
src/Renderer/PpsSsao.cpp

@@ -161,10 +161,10 @@ void runPass( const Camera& cam )
 
 	// fill SSAO FAI
 	ssaoSProg.bind();
-	glUniform2fv( ssaoSProg.getUniVar("camerarange")->getLoc(), 1, &(Vec2(cam.getZNear(), cam.getZFar()))[0] );
-	ssaoSProg.locTexUnit( ssaoSProg.getUniVar("msDepthFai")->getLoc(), R::Ms::depthFai, 0 );
-	ssaoSProg.locTexUnit( ssaoSProg.getUniVar("noiseMap")->getLoc(), *noiseMap, 1 );
-	ssaoSProg.locTexUnit( ssaoSProg.getUniVar("msNormalFai")->getLoc(), R::Ms::normalFai, 2 );
+	glUniform2fv( ssaoSProg.findUniVar("camerarange")->getLoc(), 1, &(Vec2(cam.getZNear(), cam.getZFar()))[0] );
+	ssaoSProg.locTexUnit( ssaoSProg.findUniVar("msDepthFai")->getLoc(), R::Ms::depthFai, 0 );
+	ssaoSProg.locTexUnit( ssaoSProg.findUniVar("noiseMap")->getLoc(), *noiseMap, 1 );
+	ssaoSProg.locTexUnit( ssaoSProg.findUniVar("msNormalFai")->getLoc(), R::Ms::normalFai, 2 );
 	R::DrawQuad( 0 ); // Draw quad
 
 	/*glBindFramebuffer( GL_READ_FRAMEBUFFER, pass0Fbo.getGlId() );
@@ -176,13 +176,13 @@ void runPass( const Camera& cam )
 	// second pass. blur
 	pass1Fbo.bind();
 	blurSProg.bind();
-	blurSProg.locTexUnit( blurSProg.getUniVar("tex")->getLoc(), pass0Fai, 0 );
+	blurSProg.locTexUnit( blurSProg.findUniVar("tex")->getLoc(), pass0Fai, 0 );
 	R::DrawQuad( 0 ); // Draw quad
 
 	// third pass. blur
 	pass2Fbo.bind();
 	blurSProg2.bind();
-	blurSProg2.locTexUnit( blurSProg2.getUniVar("tex")->getLoc(), pass1Fai, 0 );
+	blurSProg2.locTexUnit( blurSProg2.findUniVar("tex")->getLoc(), pass1Fai, 0 );
 	R::DrawQuad( 0 ); // Draw quad
 
 

+ 1 - 1
src/Renderer/Renderer.cpp

@@ -216,7 +216,7 @@ void render( const Camera& cam )
 	glDisable( GL_BLEND );
 
 	shdr_final->bind();
-	shdr_final->locTexUnit( shdr_final->getUniVar("rasterImage")->getLoc(), R::Pps::fai, 0 );
+	shdr_final->locTexUnit( shdr_final->findUniVar("rasterImage")->getLoc(), R::Pps::fai, 0 );
 
 	/*const int step = 100;
 	if( R::framesNum < step )

+ 86 - 0
src/Renderer2/Dbp.cpp

@@ -0,0 +1,86 @@
+#include "Renderer.hpp"
+#include "App.h"
+#include "Scene.h"
+#include "SkelNode.h"
+
+
+//=====================================================================================================================================
+// Constructor                                                                                                                        =
+//=====================================================================================================================================
+Renderer::Dbg::Dbg( Renderer& r_ ):
+	RenderingStage( r_ ),
+	showAxisEnabled( false ),
+	showLightsEnabled( false ),
+	showSkeletonsEnabled( false ),
+	showCamerasEnabled( false )
+{
+}
+
+
+//=====================================================================================================================================
+// init                                                                                                                               =
+//=====================================================================================================================================
+void Renderer::Dbg::init()
+{
+	// create FBO
+	fbo.create();
+	fbo.bind();
+
+	// inform in what buffers we draw
+	fbo.setNumOfColorAttachements(1);
+
+	// attach the textures
+	glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, r.pps.fai.getGlId(), 0 );
+	glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,  GL_TEXTURE_2D, r.ms.depthFai.getGlId(), 0 );
+
+	// test if success
+	if( !fbo.isGood() )
+		FATAL( "Cannot create debug FBO" );
+
+	// unbind
+	fbo.unbind();
+
+	// shader
+	sProg.customLoad( "shaders/Dbg.glsl" );
+}
+
+
+//=====================================================================================================================================
+// runStage                                                                                                                           =
+//=====================================================================================================================================
+void Renderer::Dbg::run()
+{
+	const Camera& cam = *r.cam;
+
+	fbo.bind();
+	sProg.bind();
+
+	// OGL stuff
+	r.setProjectionViewMatrices( cam );
+	r.setViewport( 0, 0, r.width, r.height );
+
+	glEnable( GL_DEPTH_TEST );
+	glDisable( GL_BLEND );
+
+	//R::renderGrid();
+	for( uint i=0; i<app->getScene()->nodes.size(); i++ )
+	{
+		if
+		(
+			(app->getScene()->nodes[i]->type == SceneNode::NT_LIGHT && showLightsEnabled) ||
+			(app->getScene()->nodes[i]->type == SceneNode::NT_CAMERA && showCamerasEnabled) ||
+			app->getScene()->nodes[i]->type == SceneNode::NT_PARTICLE_EMITTER
+		)
+		{
+			app->getScene()->nodes[i]->render();
+		}
+		else if( app->getScene()->nodes[i]->type == SceneNode::NT_SKELETON && showSkeletonsEnabled )
+		{
+			SkelNode* skel_node = static_cast<SkelNode*>( app->getScene()->nodes[i] );
+			glDisable( GL_DEPTH_TEST );
+			skel_node->render();
+			glEnable( GL_DEPTH_TEST );
+		}
+	}
+}
+

+ 3 - 3
src/Renderer2/Hdr.cpp

@@ -54,15 +54,15 @@ void Renderer::Pps::Hdr::init()
 
 	if( !pass0SProg.customLoad( shaderFname, ("#define _PPS_HDR_PASS_0_\n#define IS_FAI_WIDTH " + Util::floatToStr(r.width) + "\n").c_str() ) )
 		FATAL( "See prev error" );
-	uniLocs.pass0SProg.fai = pass0SProg.getUniVar("fai")->getLoc();
+	uniLocs.pass0SProg.fai = pass0SProg.findUniVar("fai")->getLoc();
 
 	if( !pass1SProg.customLoad( shaderFname, ("#define _PPS_HDR_PASS_1_\n#define PASS0_HEIGHT " + Util::floatToStr(height) + "\n").c_str() ) )
 		FATAL( "See prev error" );
-	uniLocs.pass1SProg.fai = pass1SProg.getUniVar("fai")->getLoc();
+	uniLocs.pass1SProg.fai = pass1SProg.findUniVar("fai")->getLoc();
 
 	if( !pass2SProg.customLoad( shaderFname, "#define _PPS_HDR_PASS_2_\n" ) )
 		FATAL( "See prev error" );
-	uniLocs.pass2SProg.fai = pass2SProg.getUniVar("fai")->getLoc();
+	uniLocs.pass2SProg.fai = pass2SProg.findUniVar("fai")->getLoc();
 }
 
 

+ 34 - 34
src/Renderer2/Is.cpp

@@ -136,46 +136,46 @@ void Renderer::Is::init()
 
 	// load the shaders
 	ambientPassSProg.customLoad( "shaders/is_ap.glsl" );
-	ambientPassSProg.uniLocs.ambientCol = ambientPassSProg.getUniVar("ambientCol")->getLoc();
-	ambientPassSProg.uniLocs.sceneColMap = ambientPassSProg.getUniVar("sceneColMap")->getLoc();
+	ambientPassSProg.uniLocs.ambientCol = ambientPassSProg.findUniVar("ambientCol")->getLoc();
+	ambientPassSProg.uniLocs.sceneColMap = ambientPassSProg.findUniVar("sceneColMap")->getLoc();
 
 	pointLightSProg.customLoad( "shaders/is_lp_generic.glsl", "#define _POINT_LIGHT_\n" );
-	pointLightSProg.uniLocs.msNormalFai = pointLightSProg.getUniVar("msNormalFai")->getLoc();
-	pointLightSProg.uniLocs.msDiffuseFai = pointLightSProg.getUniVar("msDiffuseFai")->getLoc();
-	pointLightSProg.uniLocs.msSpecularFai = pointLightSProg.getUniVar("msSpecularFai")->getLoc();
-	pointLightSProg.uniLocs.msDepthFai = pointLightSProg.getUniVar("msDepthFai")->getLoc();
-	pointLightSProg.uniLocs.planes = pointLightSProg.getUniVar("planes")->getLoc();
-	pointLightSProg.uniLocs.lightPos = pointLightSProg.getUniVar("lightPos")->getLoc();
-	pointLightSProg.uniLocs.lightInvRadius = pointLightSProg.getUniVar("lightInvRadius")->getLoc();
-	pointLightSProg.uniLocs.lightDiffuseCol = pointLightSProg.getUniVar("lightDiffuseCol")->getLoc();
-	pointLightSProg.uniLocs.lightSpecularCol = pointLightSProg.getUniVar("lightSpecularCol")->getLoc();
+	pointLightSProg.uniLocs.msNormalFai = pointLightSProg.findUniVar("msNormalFai")->getLoc();
+	pointLightSProg.uniLocs.msDiffuseFai = pointLightSProg.findUniVar("msDiffuseFai")->getLoc();
+	pointLightSProg.uniLocs.msSpecularFai = pointLightSProg.findUniVar("msSpecularFai")->getLoc();
+	pointLightSProg.uniLocs.msDepthFai = pointLightSProg.findUniVar("msDepthFai")->getLoc();
+	pointLightSProg.uniLocs.planes = pointLightSProg.findUniVar("planes")->getLoc();
+	pointLightSProg.uniLocs.lightPos = pointLightSProg.findUniVar("lightPos")->getLoc();
+	pointLightSProg.uniLocs.lightInvRadius = pointLightSProg.findUniVar("lightInvRadius")->getLoc();
+	pointLightSProg.uniLocs.lightDiffuseCol = pointLightSProg.findUniVar("lightDiffuseCol")->getLoc();
+	pointLightSProg.uniLocs.lightSpecularCol = pointLightSProg.findUniVar("lightSpecularCol")->getLoc();
 
 	spotLightNoShadowSProg.customLoad( "shaders/is_lp_generic.glsl", "#define _SPOT_LIGHT_\n" );
-	spotLightNoShadowSProg.uniLocs.msNormalFai = spotLightNoShadowSProg.getUniVar("msNormalFai")->getLoc();
-	spotLightNoShadowSProg.uniLocs.msDiffuseFai = spotLightNoShadowSProg.getUniVar("msDiffuseFai")->getLoc();
-	spotLightNoShadowSProg.uniLocs.msSpecularFai = spotLightNoShadowSProg.getUniVar("msSpecularFai")->getLoc();
-	spotLightNoShadowSProg.uniLocs.msDepthFai = spotLightNoShadowSProg.getUniVar("msDepthFai")->getLoc();
-	spotLightNoShadowSProg.uniLocs.planes = spotLightNoShadowSProg.getUniVar("planes")->getLoc();
-	spotLightNoShadowSProg.uniLocs.lightPos = spotLightNoShadowSProg.getUniVar("lightPos")->getLoc();
-	spotLightNoShadowSProg.uniLocs.lightInvRadius = spotLightNoShadowSProg.getUniVar("lightInvRadius")->getLoc();
-	spotLightNoShadowSProg.uniLocs.lightDiffuseCol = spotLightNoShadowSProg.getUniVar("lightDiffuseCol")->getLoc();
-	spotLightNoShadowSProg.uniLocs.lightSpecularCol = spotLightNoShadowSProg.getUniVar("lightSpecularCol")->getLoc();
-	spotLightNoShadowSProg.uniLocs.lightTex = spotLightNoShadowSProg.getUniVar("lightTex")->getLoc();
-	spotLightNoShadowSProg.uniLocs.texProjectionMat = spotLightNoShadowSProg.getUniVar("texProjectionMat")->getLoc();
+	spotLightNoShadowSProg.uniLocs.msNormalFai = spotLightNoShadowSProg.findUniVar("msNormalFai")->getLoc();
+	spotLightNoShadowSProg.uniLocs.msDiffuseFai = spotLightNoShadowSProg.findUniVar("msDiffuseFai")->getLoc();
+	spotLightNoShadowSProg.uniLocs.msSpecularFai = spotLightNoShadowSProg.findUniVar("msSpecularFai")->getLoc();
+	spotLightNoShadowSProg.uniLocs.msDepthFai = spotLightNoShadowSProg.findUniVar("msDepthFai")->getLoc();
+	spotLightNoShadowSProg.uniLocs.planes = spotLightNoShadowSProg.findUniVar("planes")->getLoc();
+	spotLightNoShadowSProg.uniLocs.lightPos = spotLightNoShadowSProg.findUniVar("lightPos")->getLoc();
+	spotLightNoShadowSProg.uniLocs.lightInvRadius = spotLightNoShadowSProg.findUniVar("lightInvRadius")->getLoc();
+	spotLightNoShadowSProg.uniLocs.lightDiffuseCol = spotLightNoShadowSProg.findUniVar("lightDiffuseCol")->getLoc();
+	spotLightNoShadowSProg.uniLocs.lightSpecularCol = spotLightNoShadowSProg.findUniVar("lightSpecularCol")->getLoc();
+	spotLightNoShadowSProg.uniLocs.lightTex = spotLightNoShadowSProg.findUniVar("lightTex")->getLoc();
+	spotLightNoShadowSProg.uniLocs.texProjectionMat = spotLightNoShadowSProg.findUniVar("texProjectionMat")->getLoc();
 
 	spotLightShadowSProg.customLoad( "shaders/is_lp_generic.glsl", "#define _SPOT_LIGHT_\n#define _SHADOW_\n" );
-	spotLightShadowSProg.uniLocs.msNormalFai = spotLightShadowSProg.getUniVar("msNormalFai")->getLoc();
-	spotLightShadowSProg.uniLocs.msDiffuseFai = spotLightShadowSProg.getUniVar("msDiffuseFai")->getLoc();
-	spotLightShadowSProg.uniLocs.msSpecularFai = spotLightShadowSProg.getUniVar("msSpecularFai")->getLoc();
-	spotLightShadowSProg.uniLocs.msDepthFai = spotLightShadowSProg.getUniVar("msDepthFai")->getLoc();
-	spotLightShadowSProg.uniLocs.planes = spotLightShadowSProg.getUniVar("planes")->getLoc();
-	spotLightShadowSProg.uniLocs.lightPos = spotLightShadowSProg.getUniVar("lightPos")->getLoc();
-	spotLightShadowSProg.uniLocs.lightInvRadius = spotLightShadowSProg.getUniVar("lightInvRadius")->getLoc();
-	spotLightShadowSProg.uniLocs.lightDiffuseCol = spotLightShadowSProg.getUniVar("lightDiffuseCol")->getLoc();
-	spotLightShadowSProg.uniLocs.lightSpecularCol = spotLightShadowSProg.getUniVar("lightSpecularCol")->getLoc();
-	spotLightShadowSProg.uniLocs.lightTex = spotLightShadowSProg.getUniVar("lightTex")->getLoc();
-	spotLightShadowSProg.uniLocs.texProjectionMat = spotLightShadowSProg.getUniVar("texProjectionMat")->getLoc();
-	spotLightShadowSProg.uniLocs.shadowMap = spotLightShadowSProg.getUniVar("shadowMap")->getLoc();
+	spotLightShadowSProg.uniLocs.msNormalFai = spotLightShadowSProg.findUniVar("msNormalFai")->getLoc();
+	spotLightShadowSProg.uniLocs.msDiffuseFai = spotLightShadowSProg.findUniVar("msDiffuseFai")->getLoc();
+	spotLightShadowSProg.uniLocs.msSpecularFai = spotLightShadowSProg.findUniVar("msSpecularFai")->getLoc();
+	spotLightShadowSProg.uniLocs.msDepthFai = spotLightShadowSProg.findUniVar("msDepthFai")->getLoc();
+	spotLightShadowSProg.uniLocs.planes = spotLightShadowSProg.findUniVar("planes")->getLoc();
+	spotLightShadowSProg.uniLocs.lightPos = spotLightShadowSProg.findUniVar("lightPos")->getLoc();
+	spotLightShadowSProg.uniLocs.lightInvRadius = spotLightShadowSProg.findUniVar("lightInvRadius")->getLoc();
+	spotLightShadowSProg.uniLocs.lightDiffuseCol = spotLightShadowSProg.findUniVar("lightDiffuseCol")->getLoc();
+	spotLightShadowSProg.uniLocs.lightSpecularCol = spotLightShadowSProg.findUniVar("lightSpecularCol")->getLoc();
+	spotLightShadowSProg.uniLocs.lightTex = spotLightShadowSProg.findUniVar("lightTex")->getLoc();
+	spotLightShadowSProg.uniLocs.texProjectionMat = spotLightShadowSProg.findUniVar("texProjectionMat")->getLoc();
+	spotLightShadowSProg.uniLocs.shadowMap = spotLightShadowSProg.findUniVar("shadowMap")->getLoc();
 
 
 	// init the rest

+ 204 - 0
src/Renderer2/MainRenderer.cpp

@@ -0,0 +1,204 @@
+#include <cstdlib>
+#include <cstdio>
+#include <jpeglib.h>
+#include "MainRenderer.h"
+#include "App.h"
+
+
+//=====================================================================================================================================
+// init                                                                                                                               =
+//=====================================================================================================================================
+void MainRenderer::init()
+{
+	INFO( "Main renderer initializing..." );
+
+	GLenum err = glewInit();
+	if( err != GLEW_OK )
+		FATAL( "GLEW initialization failed" );
+
+	// print GL info
+	INFO( "OpenGL info: OGL " << glGetString(GL_VERSION) << ", GLSL " << glGetString(GL_SHADING_LANGUAGE_VERSION) );
+
+	if( !glewIsSupported("GL_VERSION_3_1") )
+		WARNING( "OpenGL ver 3.1 not supported. The application may crash (and burn)" );
+
+	if( !glewIsSupported("GL_EXT_framebuffer_object") )
+		WARNING( "Framebuffer objects not supported. The application may crash (and burn)" );
+
+	if( !glewIsSupported("GL_EXT_packed_depth_stencil") )
+		WARNING( "GL_EXT_packed_depth_stencil not supported. The application may crash (and burn)" );
+
+	if( !glewIsSupported("GL_ARB_vertex_buffer_object") )
+		WARNING( "Vertex buffer objects not supported. The application may crash (and burn)" );
+
+	if( !glewIsSupported("GL_ARB_texture_non_power_of_two") )
+		WARNING( "Textures of non power of two not supported. The application may crash (and burn)" );
+
+	if( !glewIsSupported("GL_ARB_vertex_buffer_object") )
+		WARNING( "Vertex Buffer Objects not supported. The application may crash (and burn)" );
+
+	//
+	// Set default OpenGL
+	//
+	glClearColor( 0.1, 0.1, 0.1, 0.0 );
+	glClearDepth( 1.0 );
+	glClearStencil( 0 );
+	glDepthFunc( GL_LEQUAL );
+	// CullFace is always on
+	glCullFace( GL_BACK );
+	glEnable( GL_CULL_FACE );
+	// defaults
+	glDisable( GL_LIGHTING );
+	glDisable( GL_TEXTURE_2D );
+	glDisable( GL_BLEND );
+	glPolygonMode( GL_FRONT, GL_FILL );
+
+	//
+	// init the rest
+	//
+	glGetIntegerv( GL_MAX_COLOR_ATTACHMENTS_EXT, &maxColorAtachments );
+	Renderer::init();
+	sProg.customLoad( "shaders/final.glsl" );
+
+	INFO( "Main renderer initialization ends" );
+}
+
+
+//=====================================================================================================================================
+//                                                                                                                                    =
+//=====================================================================================================================================
+void MainRenderer::render( Camera& cam_ )
+{
+	Renderer::render( cam_ );
+
+	//
+	// Render the PPS FAI to the framebuffer
+	//
+	setViewport( 0, 0, app->getWindowWidth(), app->getWindowHeight() );
+	glDisable( GL_DEPTH_TEST );
+	glDisable( GL_BLEND );
+	sProg.bind();
+	sProg.locTexUnit( sProg.findUniVar("rasterImage")->getLoc(), pps.fai, 0 );
+	drawQuad( 0 );
+}
+
+
+//=====================================================================================================================================
+// takeScreenshotTga                                                                                                                  =
+//=====================================================================================================================================
+bool MainRenderer::takeScreenshotTga( const char* filename )
+{
+	// open file and check
+	fstream fs;
+	fs.open( filename, ios::out|ios::binary );
+	if( !fs.good() )
+	{
+		ERROR( "Cannot create screenshot. File \"" << filename << "\"" );
+		return false;
+	}
+
+	// write headers
+	unsigned char tgaHeaderUncompressed[12] = {0,0,2,0,0,0,0,0,0,0,0,0};
+	unsigned char header[6];
+
+	header[1] = width / 256;
+	header[0] = width % 256;
+	header[3] = height / 256;
+	header[2] = height % 256;
+	header[4] = 24;
+	header[5] = 0;
+
+	fs.write( (char*)tgaHeaderUncompressed, 12 );
+	fs.write( (char*)header, 6 );
+
+	// write the buffer
+	char* buffer = (char*)calloc( width*height*3, sizeof(char) );
+
+	glReadPixels( 0, 0, width, height, GL_BGR, GL_UNSIGNED_BYTE, buffer );
+	fs.write( buffer, width*height*3 );
+
+	// end
+	fs.close();
+	free( buffer );
+	return true;
+}
+
+
+//=====================================================================================================================================
+// takeScreenshotJpeg                                                                                                                 =
+//=====================================================================================================================================
+bool MainRenderer::takeScreenshotJpeg( const char* filename )
+{
+	// open file
+	FILE* outfile = fopen( filename, "wb" );
+
+	if( !outfile )
+	{
+		ERROR( "Cannot open file \"" << filename << "\"" );
+		return false;
+	}
+
+	// set jpg params
+	jpeg_compress_struct cinfo;
+	jpeg_error_mgr       jerr;
+
+	cinfo.err = jpeg_std_error( &jerr );
+	jpeg_create_compress( &cinfo );
+	jpeg_stdio_dest( &cinfo, outfile );
+
+	cinfo.image_width      = width;
+	cinfo.image_height     = height;
+	cinfo.input_components = 3;
+	cinfo.in_color_space   = JCS_RGB;
+	jpeg_set_defaults( &cinfo);
+	jpeg_set_quality ( &cinfo, screenshotJpegQuality, true );
+	jpeg_start_compress( &cinfo, true );
+
+	// read from OGL
+	char* buffer = (char*)malloc( width*height*3*sizeof(char) );
+	glReadPixels( 0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, buffer );
+
+	// write buffer to file
+	JSAMPROW row_pointer;
+
+	while( cinfo.next_scanline < cinfo.image_height )
+	{
+		row_pointer = (JSAMPROW) &buffer[ (height-1-cinfo.next_scanline)*3*width ];
+		jpeg_write_scanlines( &cinfo, &row_pointer, 1 );
+	}
+
+	jpeg_finish_compress(&cinfo);
+
+	// done
+	free( buffer );
+	fclose( outfile );
+	return true;
+}
+
+
+//=====================================================================================================================================
+// takeScreenshot                                                                                                                     =
+//=====================================================================================================================================
+void MainRenderer::takeScreenshot( const char* filename )
+{
+	char* ext = Util::getFileExtension( filename );
+	bool ret;
+
+	// exec from this extension
+	if( strcmp( ext, "tga" ) == 0 )
+	{
+		ret = takeScreenshotTga( filename );
+	}
+	else if( strcmp( ext, "jpg" ) == 0 )
+	{
+		ret = takeScreenshotJpeg( filename );
+	}
+	else
+	{
+		ERROR( "File \"" << filename << "\": Unsupported extension. Watch for capital" );
+		return;
+	}
+	if( !ret ) ERROR( "In taking screenshot" )
+	else PRINT( "Screenshot \"" << filename << "\" saved" );
+}
+

+ 30 - 0
src/Renderer2/MainRenderer.h

@@ -0,0 +1,30 @@
+#ifndef _MAINRENDERER_H_
+#define _MAINRENDERER_H_
+
+#include "Common.h"
+#include "Renderer.hpp"
+
+
+/**
+ * Main renderer
+ */
+class MainRenderer: public Renderer
+{
+	PROPERTY_RW( int, screenshotJpegQuality, setScreenshotJpegQuality, getScreenshotJpegQuality ) ///< The quality of the JPEG screenshots. From 0 to 100
+	PROPERTY_R( int, maxColorAtachments, getMaxColorAtachments ) ///< Max color attachments a FBO can accept
+
+	private:
+		ShaderProg sProg; ///< Final pass' shader program
+
+		bool takeScreenshotTga( const char* filename );
+		bool takeScreenshotJpeg( const char* filename );
+
+	public:
+		MainRenderer(): screenshotJpegQuality( 90 ) {}
+
+		void init();
+		void render( Camera& cam );
+		void takeScreenshot( const char* filename ); ///< Save the colorbuffer as 24bit uncompressed TGA image
+};
+
+#endif

+ 4 - 4
src/Renderer2/Pps.cpp

@@ -30,25 +30,25 @@ void Renderer::Pps::init()
 	sProg.customLoad( "shaders/Pps.glsl" );
 	sProg.bind();
 
-	sProg.uniLocs.isFai = sProg.getUniVar( "isFai" )->getLoc();
+	sProg.uniLocs.isFai = sProg.findUniVar( "isFai" )->getLoc();
 
 	if( ssao.enabled )
 	{
 		ssao.init();
-		sProg.uniLocs.ppsSsaoFai = sProg.getUniVar( "ppsSsaoFai" )->getLoc();
+		sProg.uniLocs.ppsSsaoFai = sProg.findUniVar( "ppsSsaoFai" )->getLoc();
 	}
 
 	if( hdr.enabled )
 	{
 		hdr.init();
-		sProg.uniLocs.hdrFai = sProg.getUniVar( "ppsHdrFai" )->getLoc();
+		sProg.uniLocs.hdrFai = sProg.findUniVar( "ppsHdrFai" )->getLoc();
 	}
 
 	/// @ todo enable lscatt
 	/*if( R::Pps::Lscatt::enabled )
 	{
 		R::Pps::Lscatt::init();
-		sProg.uniLocs.lscattFai = sProg.getUniVar( "ppsLscattFai" )->getLoc();
+		sProg.uniLocs.lscattFai = sProg.findUniVar( "ppsLscattFai" )->getLoc();
 	}*/
 
 }

+ 154 - 1
src/Renderer2/Renderer.cpp

@@ -1,11 +1,164 @@
 #include "Renderer.hpp"
+#include "Camera.h" /// @todo remove this
+
 
 //=====================================================================================================================================
 // Vars                                                                                                                               =
 //=====================================================================================================================================
-int Renderer::screenshotJpegQuality = 90;
 bool Renderer::textureCompression = false;
 int  Renderer::maxTextureUnits = -1;
 bool Renderer::mipmapping = true;
 int  Renderer::maxAnisotropy = 8;
 float Renderer::quadVertCoords [][2] = { {1.0,1.0}, {0.0,1.0}, {0.0,0.0}, {1.0,0.0} };
+
+
+//=====================================================================================================================================
+// Constructor                                                                                                                        =
+//=====================================================================================================================================
+Renderer::Renderer():
+	ms( *this ),
+	is( *this ),
+	pps( *this ),
+	dbg( *this ),
+	width( 640 ),
+	height( 480 )
+{
+}
+
+//=====================================================================================================================================
+// init                                                                                                                               =
+//=====================================================================================================================================
+void Renderer::init()
+{
+	aspectRatio = float(width)/height;
+
+	// init the stages. Careful with the order!!!!!!!!!!
+	ms.init();
+	is.init();
+	pps.init();
+	dbg.init();
+}
+
+
+//=====================================================================================================================================
+// render                                                                                                                             =
+//=====================================================================================================================================
+void Renderer::render( Camera& cam_ )
+{
+	cam = &cam_;
+
+	ms.run();
+	is.run();
+	pps.run();
+	dbg.run();
+
+	++framesNum;
+}
+
+
+//=====================================================================================================================================
+// drawQuad                                                                                                                           =
+//=====================================================================================================================================
+void Renderer::drawQuad( int vertCoordsUniLoc )
+{
+	DEBUG_ERR( vertCoordsUniLoc == -1 );
+	glVertexAttribPointer( vertCoordsUniLoc, 2, GL_FLOAT, false, 0, quadVertCoords );
+	glEnableVertexAttribArray( vertCoordsUniLoc );
+	glDrawArrays( GL_QUADS, 0, 4 );
+	glDisableVertexAttribArray( vertCoordsUniLoc );
+}
+
+//=====================================================================================================================================
+// setProjectionMatrix                                                                                                                =
+//=====================================================================================================================================
+void Renderer::setProjectionMatrix( const Camera& cam )
+{
+	glMatrixMode( GL_PROJECTION );
+	loadMatrix( cam.getProjectionMatrix() );
+}
+
+
+//=====================================================================================================================================
+// setViewMatrix                                                                                                                      =
+//=====================================================================================================================================
+void Renderer::setViewMatrix( const Camera& cam )
+{
+	glMatrixMode( GL_MODELVIEW );
+	loadMatrix( cam.getViewMatrix() );
+}
+
+
+//=====================================================================================================================================
+// unproject                                                                                                                          =
+//=====================================================================================================================================
+Vec3 Renderer::unproject( const Vec3& windowCoords, const Mat4& modelViewMat, const Mat4& projectionMat, const int view[4] )
+{
+	Mat4 invPm = projectionMat * modelViewMat;
+	invPm.invert();
+
+	// the vec is in ndc space meaning: -1<=vec.x<=1 -1<=vec.y<=1 -1<=vec.z<=1
+	Vec4 vec;
+	vec.x = (2.0*(windowCoords.x-view[0]))/view[2] - 1.0;
+	vec.y = (2.0*(windowCoords.y-view[1]))/view[3] - 1.0;
+	vec.z = 2.0*windowCoords.z - 1.0;
+	vec.w = 1.0;
+
+	Vec4 final = invPm * vec;
+	final /= final.w;
+	return Vec3( final );
+}
+
+
+//=====================================================================================================================================
+// ortho                                                                                                                              =
+//=====================================================================================================================================
+Mat4 Renderer::ortho( float left, float right, float bottom, float top, float near, float far )
+{
+	float difx = right-left;
+	float dify = top-bottom;
+	float difz = far-near;
+	float tx = -(right+left) / difx;
+	float ty = -(top+bottom) / dify;
+	float tz = -(far+near) / difz;
+	Mat4 m;
+
+	m(0,0) = 2.0 / difx;
+	m(0,1) = 0.0;
+	m(0,2) = 0.0;
+	m(0,3) = tx;
+	m(1,0) = 0.0;
+	m(1,1) = 2.0 / dify;
+	m(1,2) = 0.0;
+	m(1,3) = ty;
+	m(2,0) = 0.0;
+	m(2,1) = 0.0;
+	m(2,2) = -2.0 / difz;
+	m(2,3) = tz;
+	m(3,0) = 0.0;
+	m(3,1) = 0.0;
+	m(3,2) = 0.0;
+	m(3,3) = 1.0;
+
+	return m;
+}
+
+
+//=====================================================================================================================================
+// getLastError                                                                                                                       =
+//=====================================================================================================================================
+const uchar* Renderer::getLastError()
+{
+	return gluErrorString( glGetError() );
+}
+
+
+//=====================================================================================================================================
+// printLastError                                                                                                                     =
+//=====================================================================================================================================
+void Renderer::printLastError()
+{
+	GLenum errid = glGetError();
+	if( errid != GL_NO_ERROR )
+		ERROR( "OpenGL Error: " << gluErrorString( errid ) );
+}
+

+ 78 - 14
src/Renderer2/Renderer.hpp

@@ -41,6 +41,8 @@ class Renderer
 		 */
 		class Ms: private RenderingStage
 		{
+			friend class Renderer;
+
 			private:
 				Fbo fbo;
 
@@ -61,6 +63,8 @@ class Renderer
 		 */
 		class Is: private RenderingStage
 		{
+			friend class Renderer;
+
 			public:
 				/**
 				 * Shadowmapping pass
@@ -141,7 +145,6 @@ class Renderer
 				Is( Renderer& r_ ): RenderingStage( r_ ), sm(r) {}
 		}; // end Is
 
-
 		/**
 		 * Post-processing stage
 		 *
@@ -149,6 +152,8 @@ class Renderer
 		 */
 		class Pps: private RenderingStage
 		{
+			friend class Renderer;
+
 			public:
 				/**
 				 * High dynamic range lighting pass
@@ -190,7 +195,6 @@ class Renderer
 						Hdr( Renderer& r_ ): RenderingStage(r_) {}
 				}; // end Hrd
 
-
 				/**
 				 * Screen space ambient occlusion pass
 				 *
@@ -265,50 +269,110 @@ class Renderer
 		 */
 		class Dbg: public RenderingStage
 		{
+			friend class Renderer;
+
+			PROPERTY_R( bool, enabled, isEnabled )
+			PROPERTY_RW( bool, showAxisEnabled, setShowAxis, isShowAxisEnabled )
+			PROPERTY_RW( bool, showLightsEnabled, setShowLights, isShowLightsEnabled )
+			PROPERTY_RW( bool, showSkeletonsEnabled, setShowSkeletons, isShowSkeletonsEnabled )
+			PROPERTY_RW( bool, showCamerasEnabled, setShowCameras, isShowCamerasEnabled )
+
 			private:
+				Fbo fbo;
+				ShaderProg sProg; /// @todo move Dbg to GL 3
+
+				void init();
+				void run();
+
 			public:
-				bool enabled;
+				Dbg( Renderer& r_ );
+				static void renderGrid();
+				static void renderSphere( float radius, int complexity );
+				static void renderCube( bool cols, float size );
 		};
 
 		// the stages as data members
 		Ms ms; ///< Material rendering stage
 		Is is; ///< Illumination rendering stage
 		Pps pps; ///< Postprocessing rendering stage
+		Dbg dbg; ///< Debugging rendering stage
 
 	//===================================================================================================================================
 	//                                                                                                                                  =
 	//===================================================================================================================================
+	protected:
+		Camera* cam; ///< Current camera
+		static float quadVertCoords [][2];
+
+		static void drawQuad( int vertCoordsUniLoc );
+
 	public:
 		// quality
 		uint  width; ///< width of the rendering. Dont confuse with the window width
 		uint  height; ///< height of the rendering. Dont confuse with the window width
 		float renderingQuality; ///< The global rendering quality of the raster image. From 0.0(low) to 1.0(high)
-		static int screenshotJpegQuality; ///< The quality of the JPEG screenshots. From 0 to 100
 		// texture stuff
 		static bool textureCompression; ///< Used in Texture::load to enable texture compression. Decreases video memory usage
 		static int  maxTextureUnits; ///< Used in Texture::bind so we wont bind in a nonexistent texture unit. Readonly
 		static bool mipmapping; ///< Used in Texture::load. Enables mipmapping increases video memory usage
 		static int  maxAnisotropy; ///< Max texture anisotropy. Used in Texture::load
 		// other
-		static int   maxColorAtachments; ///< Max color attachments a FBO can accept
 		uint  framesNum;
 		float aspectRatio;
-		static float quadVertCoords [][2];
+
 		// matrices & viewing
-		Camera* cam; ///< Current camera
 		Mat4 modelViewMat; ///< This changes once for every mesh rendering
 		Mat4 projectionMat; ///< This changes once every frame
 		Mat4 modelViewProjectionMat; ///< This changes just like @ref modelViewMat
 		Mat3 normalMat; ///< The rotation part of modelViewMat
 
-		void setProjectionMatrix( const Camera& cam ) {}
-		void setViewMatrix( const Camera& cam ) {}
-		void setProjectionViewMatrices( const Camera& cam ) {}
-		static void setViewport( uint x, uint y, uint w, uint h ) {}
-		static void multMatrix( const Mat4& ) {}
-		static void drawQuad( int vertCoordsUniLoc ) {};
-		static void noShaders() {}
+		Renderer();
+
+		void init();
+		void render( Camera& cam );
+
+		/**
+		 * My version of gluUnproject
+		 * @param windowCoords Window screen coords
+		 * @param modelViewMat The modelview matrix
+		 * @param projectionMat The projection matrix
+		 * @param view The view vector
+		 * @return The unprojected coords coords
+		 */
+		static Vec3 unproject( const Vec3& windowCoords, const Mat4& modelViewMat, const Mat4& projectionMat, const int view[4] );
+
+		/**
+		 *
+		 * @param left
+		 * @param right
+		 * @param bottom
+		 * @param top
+		 * @param near
+		 * @param far
+		 * @return
+		 */
+		static Mat4 ortho( float left, float right, float bottom, float top, float near, float far );
+
+		/**
+		 * Get last OpenGL error string
+		 * @return An error string or NULL if not error
+		 */
+		static const uchar* getLastError();
 
+		/**
+		 * Print last OpenGL error or nothing if there is no error
+		 */
+		static void printLastError();
+
+		static void setProjectionMatrix( const Camera& cam );
+		static void setViewMatrix( const Camera& cam );
+		static void noShaders() { ShaderProg::unbind(); } ///< unbind shaders @todo remove this. From now on the will be only shaders
+		static void setProjectionViewMatrices( const Camera& cam ) { setProjectionMatrix(cam); setViewMatrix(cam); }
+		static void setViewport( uint x, uint y, uint w, uint h ) { glViewport(x,y,w,h); }
+		static void multMatrix( const Mat4& m4 ) { glMultMatrixf( &(m4.getTransposed())(0,0) ); } ///< OpenGL wrapper
+		static void multMatrix( const Transform& trf ) { glMultMatrixf( &(Mat4(trf).getTransposed())(0,0) ); } ///< OpenGL wrapper
+		static void loadMatrix( const Mat4& m4 ) { glLoadMatrixf( &(m4.getTransposed())(0,0) ); } ///< OpenGL wrapper
+		static void loadMatrix( const Transform& trf ) { glLoadMatrixf( &(Mat4(trf).getTransposed())(0,0) ); } ///< OpenGL wrapper
 };
 
 #endif

+ 11 - 0
src/Renderer2/RendererInitializer.h

@@ -0,0 +1,11 @@
+#ifndef _RENDERERINITIALIZER_H_
+#define _RENDERERINITIALIZER_H_
+
+#include <Common.h>
+
+struct RendererInitializer
+{
+
+};
+
+#endif

+ 6 - 6
src/Renderer2/Ssao.cpp

@@ -80,12 +80,12 @@ void Renderer::Pps::Ssao::init()
 	blurSProg.customLoad( "shaders/PpsSsaoBlur.glsl", ("#define _PPS_SSAO_PASS_0_\n#define PASS0_FAI_WIDTH " + Util::floatToStr(width) + "\n").c_str() );
 	blurSProg2.customLoad( "shaders/PpsSsaoBlur.glsl", ("#define _PPS_SSAO_PASS_1_\n#define PASS1_FAI_HEIGHT " + Util::floatToStr(bheight) + "\n").c_str() );
 
-	uniLocs.pass0SProg.camerarange = ssaoSProg.getUniVar("camerarange")->getLoc();
-	uniLocs.pass0SProg.msDepthFai = ssaoSProg.getUniVar("msDepthFai")->getLoc();
-	uniLocs.pass0SProg.noiseMap = ssaoSProg.getUniVar("noiseMap")->getLoc();
-	uniLocs.pass0SProg.msNormalFai = ssaoSProg.getUniVar("msNormalFai")->getLoc();
-	uniLocs.pass1SProg.fai = blurSProg.getUniVar("tex")->getLoc(); /// @todo rename the tex in the shader
-	uniLocs.pass2SProg.fai = blurSProg2.getUniVar("tex")->getLoc(); /// @todo rename the tex in the shader
+	uniLocs.pass0SProg.camerarange = ssaoSProg.findUniVar("camerarange")->getLoc();
+	uniLocs.pass0SProg.msDepthFai = ssaoSProg.findUniVar("msDepthFai")->getLoc();
+	uniLocs.pass0SProg.noiseMap = ssaoSProg.findUniVar("noiseMap")->getLoc();
+	uniLocs.pass0SProg.msNormalFai = ssaoSProg.findUniVar("msNormalFai")->getLoc();
+	uniLocs.pass1SProg.fai = blurSProg.findUniVar("tex")->getLoc(); /// @todo rename the tex in the shader
+	uniLocs.pass2SProg.fai = blurSProg2.findUniVar("tex")->getLoc(); /// @todo rename the tex in the shader
 
 
 	//

+ 11 - 11
src/Resources/Material.cpp

@@ -224,7 +224,7 @@ bool Material::load( const char* filename )
 					return false;
 				}
 
-				var.sProgVar = shaderProg->getUniVar( varName.c_str() );
+				var.sProgVar = shaderProg->findUniVar( varName.c_str() );
 
 				// read the values
 				switch( var.sProgVar->getGlDataType() )
@@ -317,19 +317,19 @@ bool Material::additionalInit()
 	}
 
 	// init the attribute locations
-	attribLocs.tanget = shaderProg->attribVarExists( "tangent" ) ?  shaderProg->getAttribVar( "tangent" )->getLoc() : -1;
-	attribLocs.position = shaderProg->attribVarExists( "position" ) ?  shaderProg->getAttribVar( "position" )->getLoc() : -1;
-	attribLocs.normal = shaderProg->attribVarExists( "normal" ) ?  shaderProg->getAttribVar( "normal" )->getLoc() : -1;
-	attribLocs.texCoords = shaderProg->attribVarExists( "texCoords" ) ?  shaderProg->getAttribVar( "texCoords" )->getLoc() : -1;
+	attribLocs.tanget = shaderProg->attribVarExists( "tangent" ) ?  shaderProg->findAttribVar( "tangent" )->getLoc() : -1;
+	attribLocs.position = shaderProg->attribVarExists( "position" ) ?  shaderProg->findAttribVar( "position" )->getLoc() : -1;
+	attribLocs.normal = shaderProg->attribVarExists( "normal" ) ?  shaderProg->findAttribVar( "normal" )->getLoc() : -1;
+	attribLocs.texCoords = shaderProg->attribVarExists( "texCoords" ) ?  shaderProg->findAttribVar( "texCoords" )->getLoc() : -1;
 
 	// vertex weights
 	if( shaderProg->attribVarExists( "vertWeightBonesNum" ) )
 	{
-		attribLocs.vertWeightBonesNum = shaderProg->getAttribVar( "vertWeightBonesNum" )->getLoc();
-		attribLocs.vertWeightBoneIds = shaderProg->getAttribVar( "vertWeightBoneIds" )->getLoc();
-		attribLocs.vertWeightWeights = shaderProg->getAttribVar( "vertWeightWeights" )->getLoc();
-		uniLocs.skinningRotations = shaderProg->getUniVar( "skinningRotations" )->getLoc();
-		uniLocs.skinningTranslations = shaderProg->getUniVar( "skinningTranslations" )->getLoc();
+		attribLocs.vertWeightBonesNum = shaderProg->findAttribVar( "vertWeightBonesNum" )->getLoc();
+		attribLocs.vertWeightBoneIds = shaderProg->findAttribVar( "vertWeightBoneIds" )->getLoc();
+		attribLocs.vertWeightWeights = shaderProg->findAttribVar( "vertWeightWeights" )->getLoc();
+		uniLocs.skinningRotations = shaderProg->findUniVar( "skinningRotations" )->getLoc();
+		uniLocs.skinningTranslations = shaderProg->findUniVar( "skinningTranslations" )->getLoc();
 	}
 	else
 	{
@@ -351,7 +351,7 @@ void Material::unload()
 	// loop all user defined vars and unload the textures
 	for( uint i=0; i<userDefinedVars.size(); i++ )
 	{
-		if( userDefinedVars[i].sProgVar->getType() == GL_SAMPLER_2D )
+		if( userDefinedVars[i].sProgVar->getGlDataType() == GL_SAMPLER_2D )
 			Rsrc::textures.unload( userDefinedVars[i].value.texture );
 	}
 }

+ 20 - 11
src/Resources/ShaderProg.cpp

@@ -8,6 +8,15 @@
 #define SHADER_WARNING( x ) WARNING( "Shader (" << getRsrcName() << "): " << x )
 
 
+//=====================================================================================================================================
+// set uniforms                                                                                                                       =
+//=====================================================================================================================================
+void ShaderProg::UniVar::setMat4( const Mat4 m4[], uint size ) const
+{
+	glUniformMatrix4fv( getLoc(), size, true, &(m4[0])[0] );
+}
+
+
 //=====================================================================================================================================
 // createAndCompileShader                                                                                                             =
 //=====================================================================================================================================
@@ -122,7 +131,7 @@ void ShaderProg::getUniAndAttribVars()
 			continue;
 		}
 
-		attribVars.push_back( Var( loc, name_, type, Var::SVT_ATTRIBUTE ) );
+		attribVars.push_back( AttribVar( loc, name_, type ) );
 		attribNameToVar[ name_ ] = &attribVars.back();
 	}
 
@@ -143,7 +152,7 @@ void ShaderProg::getUniAndAttribVars()
 			continue;
 		}
 
-		uniVars.push_back( Var( loc, name_, type, Var::SVT_UNIFORM ) );
+		uniVars.push_back( UniVar( loc, name_, type ) );
 		uniNameToVar[ name_ ] = &uniVars.back();
 	}
 }
@@ -225,11 +234,11 @@ bool ShaderProg::customLoad( const char* filename, const char* extraSource )
 
 
 //=====================================================================================================================================
-// getUniVar                                                                                                                          =
+// findUniVar                                                                                                                          =
 //=====================================================================================================================================
-const ShaderProg::Var* ShaderProg::getUniVar( const char* name ) const
+const ShaderProg::UniVar* ShaderProg::findUniVar( const char* name ) const
 {
-	NameToVarIterator it = uniNameToVar.find( name );
+	NameToUniVarIterator it = uniNameToVar.find( name );
 	if( it == uniNameToVar.end() )
 	{
 		SHADER_ERROR( "Cannot get uniform loc \"" << name << '\"' );
@@ -240,11 +249,11 @@ const ShaderProg::Var* ShaderProg::getUniVar( const char* name ) const
 
 
 //=====================================================================================================================================
-// getAttribVar                                                                                                                       =
+// findAttribVar                                                                                                                       =
 //=====================================================================================================================================
-const ShaderProg::Var* ShaderProg::getAttribVar( const char* name ) const
+const ShaderProg::AttribVar* ShaderProg::findAttribVar( const char* name ) const
 {
-	NameToVarIterator it = attribNameToVar.find( name );
+	NameToAttribVarIterator it = attribNameToVar.find( name );
 	if( it == attribNameToVar.end() )
 	{
 		SHADER_ERROR( "Cannot get attribute loc \"" << name << '\"' );
@@ -259,7 +268,7 @@ const ShaderProg::Var* ShaderProg::getAttribVar( const char* name ) const
 //=====================================================================================================================================
 bool ShaderProg::uniVarExists( const char* name ) const
 {
-	NameToVarIterator it = uniNameToVar.find( name );
+	NameToUniVarIterator it = uniNameToVar.find( name );
 	return it != uniNameToVar.end();
 }
 
@@ -269,7 +278,7 @@ bool ShaderProg::uniVarExists( const char* name ) const
 //=====================================================================================================================================
 bool ShaderProg::attribVarExists( const char* name ) const
 {
-	NameToVarIterator it = attribNameToVar.find( name );
+	NameToAttribVarIterator it = attribNameToVar.find( name );
 	return it != attribNameToVar.end();
 }
 
@@ -289,5 +298,5 @@ void ShaderProg::locTexUnit( const char* loc, const Texture& tex, uint tex_unit
 {
 	DEBUG_ERR( getCurrentProgramGlId() != glId );
 	tex.bind( tex_unit );
-	glUniform1i( getUniVar(loc)->getLoc(), tex_unit );
+	glUniform1i( findUniVar(loc)->getLoc(), tex_unit );
 }

+ 53 - 21
src/Resources/ShaderProg.h

@@ -5,10 +5,11 @@
 #include <map>
 #include "Common.h"
 #include "Resource.h"
+#include "Math.h"
 
 
 /**
- * @brief Shader program @ref Resource
+ * Shader program @ref Resource
  *
  * Shader program. Combines a fragment and a vertex shader. Every shader program consist of one OpenGL ID, a vector of uniform variables
  * and a vector of attribute variables. Every variable is a struct that contains the variable's name, location, OpenGL data type and
@@ -22,39 +23,70 @@ class ShaderProg: public Resource
 
 	private:
 		/**
-		 * @brief Shader program variable. The type is attribute or uniform
+		 * Shader program variable. The type is attribute or uniform
 		 */
 		class Var
 		{
-			PROPERTY_R( int, loc, getLoc ) ///< ToDo
-			PROPERTY_R( string, name, getName ) ///< ToDo
-			PROPERTY_R( GLenum, glDataType, getGlDataType ) ///< @ref PROPERTY_R : GL_FLOAT, GL_FLOAT_VEC2... etc
-			PROPERTY_R( uint, type, getType ) ///< @ref PROPERTY_R : @ref SVT_ATTRIBUTE or @ref SVT_UNIFORM
-
 			public:
-				/**
-				 * Shader var types
-				 */
-				enum
+				/// Shader var types
+				enum Type
 				{
 					SVT_ATTRIBUTE, ///< SVT_ATTRIBUTE
 					SVT_UNIFORM    ///< SVT_UNIFORM
 				};
 
-				Var( int loc_, const char* name_, GLenum glDataType_, uint type_ ):
+			PROPERTY_R( int, loc, getLoc ) ///< @todo
+			PROPERTY_R( string, name, getName ) ///< @todo
+			PROPERTY_R( GLenum, glDataType, getGlDataType ) ///< @ref PROPERTY_R : GL_FLOAT, GL_FLOAT_VEC2... etc
+			PROPERTY_R( Type, type, getType ) ///< @ref PROPERTY_R : @ref SVT_ATTRIBUTE or @ref SVT_UNIFORM
+
+			public:
+				Var( int loc_, const char* name_, GLenum glDataType_, Type type_ ):
 					loc(loc_), name(name_), glDataType(glDataType_), type(type_)
 				{}
 
+				/// copy constructor
 				Var( const Var& var ):
 					loc(var.loc), name(var.name), glDataType(var.glDataType), type(var.type)
 				{}
 		};
 
-		Vec<Var> uniVars;
-		Vec<Var> attribVars;
-		map<string,Var*> uniNameToVar;  ///< A map for quick searching
-		map<string,Var*> attribNameToVar; ///< @see uniNameToVar
-		typedef map<string,Var*>::const_iterator NameToVarIterator; ///< Variable name to variable iterator
+		/// Uniform shader variable
+		class UniVar: public Var
+		{
+			public:
+				UniVar( int loc_, const char* name_, GLenum glDataType_ ):
+					Var( loc_, name_, glDataType_, SVT_UNIFORM )
+				{}
+
+				/// copy constructor
+				UniVar( const UniVar& var ):
+					Var( var )
+				{}
+
+				void setMat4( const Mat4 m4[], uint size = 1 ) const;
+		};
+
+		/// Attribute shader variable
+		class AttribVar: public Var
+		{
+			public:
+				AttribVar( int loc_, const char* name_, GLenum glDataType_ ):
+					Var( loc_, name_, glDataType_, SVT_UNIFORM )
+				{}
+
+				/// copy constructor
+				AttribVar( const UniVar& var ):
+					Var( var )
+				{}
+		};
+
+		Vec<UniVar> uniVars;
+		Vec<AttribVar> attribVars;
+		map<string,UniVar*> uniNameToVar;  ///< A map for quick searching
+		map<string,AttribVar*> attribNameToVar; ///< @see uniNameToVar
+		typedef map<string,UniVar*>::const_iterator NameToUniVarIterator; ///< Uniform variable name to variable iterator
+		typedef map<string,AttribVar*>::const_iterator NameToAttribVarIterator; ///< Attribute variable name to variable iterator
 
 		void getUniAndAttribVars(); ///< After the linking of the shader prog is done gather all the vars in custom containers
 		bool bindCustomAttribLocs( const class ShaderPrePreprocessor& pars ) const; ///< Uses glBindAttribLocation for every parser attrib location
@@ -73,15 +105,15 @@ class ShaderProg: public Resource
 		bool customLoad( const char* filename, const char* extraSource = "" ); ///< Used by the renderer's shader programs
 		void unload() { /* ToDo: add code */ }
 
-		const Vec<Var>& getUniVars() const { return uniVars; } ///< Accessor to uniform vars vector
-		const Vec<Var>& getAttribVars() const { return attribVars; } ///< Accessor to attribute vars vector
+		const Vec<UniVar>&    getUniVars() const { return uniVars; } ///< Accessor to uniform vars vector
+		const Vec<AttribVar>& getAttribVars() const { return attribVars; } ///< Accessor to attribute vars vector
 
 		/**
 		 * @param varName The name of the var
 		 * @return It returns a uniform variable and on failure it throws an error and returns something random
 		 */
-		const Var* getUniVar( const char* varName ) const;
-		const Var* getAttribVar( const char* varName ) const; ///< @see getUniVar
+		const UniVar*    findUniVar( const char* varName ) const;
+		const AttribVar* findAttribVar( const char* varName ) const; ///< @see findUniVar
 		bool uniVarExists( const char* varName ) const;
 		bool attribVarExists( const char* varName ) const;
 

+ 1 - 1
src/Scene/ParticleEmitter.cpp

@@ -54,7 +54,7 @@ void ParticleEmitter::init( const char* filename )
 		float mass = Util::randRange( minParticleMass, maxParticleMass );
 		btRigidBody* body = app->getScene()->getPhyWorld()->createNewRigidBody( mass, Transform::getIdentity(), colShape, particles[i],
 		                                                                        PhyWorld::CG_PARTICLE, PhyWorld::CG_MAP );
-		body->forceActivationState( DISABLE_SIMULATION );
+		//body->forceActivationState( DISABLE_SIMULATION );
 	}
 
 	/*btDiscreteDynamicsWorld* btWorld = app->getScene()->getPhyWorld()->getDynamicsWorld();

+ 1 - 1
src/Ui/Ui.cpp

@@ -38,7 +38,7 @@ static funcs
 static void SetGL()
 {
 	shader->bind();
-	shader->locTexUnit( shader->getUniVar("fontMap")->getLoc(), *fontMap, 0 );
+	shader->locTexUnit( shader->findUniVar("fontMap")->getLoc(), *fontMap, 0 );
 
 	glEnable( GL_BLEND );
 	glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

+ 2 - 0
src/Util/App.cpp

@@ -3,6 +3,7 @@
 #include <SDL.h>
 #include "App.h"
 #include "Scene.h"
+#include "MainRenderer.h"
 
 bool App::isCreated = false;
 
@@ -17,6 +18,7 @@ App::App( int /*argc*/, char* /*argv*/[] )
 	isCreated = true;
 
 	scene = new Scene;
+	mainRenderer = new MainRenderer;
 	activeCam = NULL;
 
 	windowW = 1280;

+ 1 - 0
src/Util/App.h

@@ -16,6 +16,7 @@ class App
 	PROPERTY_R( bool, terminalColoringEnabled, isTerminalColoringEnabled ) ///< @ref PROPERTY_R : Terminal coloring for Unix terminals. Default is enabled
 
 	PROPERTY_RW( class Scene*, scene, setScene, getScene ) ///< @ref PROPERTY_RW : Pointer to the current scene
+	PROPERTY_RW( class MainRenderer*, mainRenderer, setMainRenderer, getMainRenderer ) ///< @ref PROPERTY_RW : Pointer to the main renderer
 	PROPERTY_RW( class Camera*, activeCam, setActiveCam, getActiveCam ) ///< @ref PROPERTY_RW : Pointer to the current camera
 
 	private:

+ 2 - 2
src/Util/Common.h

@@ -1,8 +1,8 @@
 #ifndef _COMMON_H_
 #define _COMMON_H_
 
-#include <stdio.h>
-#include <stdlib.h>
+#include <cstdlib>
+#include <cstdio>
 #include <memory.h>
 #include <string.h>
 #include <fstream>