소스 검색

- Improving the HDR blurring
- Exposing the renderer to scripts WIP

Panagiotis Christopoulos Charitos 15 년 전
부모
커밋
8b4eb761dd

+ 43 - 6
build/debug/Makefile

@@ -3,9 +3,9 @@
 CXX = g++
 CFLAGS = -DDEBUG_ENABLED=1 -DPLATFORM_LINUX -DREVISION=\"`svnversion -c ../..`\" -c -pedantic-errors -pedantic -ansi -Wall -Wextra -W -Wno-long-long -pipe -O0 -g3 -pg -fsingle-precision-constant
 PHFLAGS = 
-LFLAGS = -rdynamic -L../../extern/lib-x86-64-linux -Wl,-Bstatic -lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath -lGLEW -lGLU -lboost_thread -Wl,-Bdynamic -lGL -ljpeg -lSDL -lpng -lpython2.6 -lboost_system -lboost_python -lboost_filesystem -pg
+LFLAGS = -rdynamic -pg -L../../extern/lib-x86-64-linux -Wl,-Bstatic -lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath -lGLEW -lGLU -Wl,-Bdynamic -lGL -ljpeg -lSDL -lpng -lpython2.6 -lboost_system -lboost_python -lboost_filesystem -lboost_thread
 EXECUTABLE = anki
-INCPATH = -I./ -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/Resources/Helpers/ -I../../src/Resources/Core/ -I../../src/Core/ -I../../src/Scripting/ -I../../src/Scripting/Math -I../../src/Scripting/Util -I../../src/Scripting/Core -I../../src/Scripting/Scene -I../../extern/include -I../../extern/include/bullet -I/usr/include/python2.6 
+INCPATH = -I./ -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/Resources/Helpers/ -I../../src/Resources/Core/ -I../../src/Core/ -I../../src/Scripting/ -I../../src/Scripting/Math -I../../src/Scripting/Util -I../../src/Scripting/Core -I../../src/Scripting/Scene -I../../src/Scripting/Renderer -I../../extern/include -I../../extern/include/bullet -I/usr/include/python2.6 
 SOURCES = ../../src/Util/Tokenizer//Scanner.cpp ../../src/Misc//collision.cpp ../../src/Misc//skybox.cpp ../../src/Misc//map.cpp ../../src/Misc//memory.cpp ../../src/Misc//TestHeader.cpp ../../src//Main.cpp ../../src/Renderer//Renderer.cpp ../../src/Renderer//Hdr.cpp ../../src/Renderer//Bs.cpp ../../src/Renderer//Sm.cpp ../../src/Renderer//Dbg.cpp ../../src/Renderer//Smo.cpp ../../src/Renderer//Pps.cpp ../../src/Renderer//Ms.cpp ../../src/Renderer//MainRenderer.cpp ../../src/Renderer//Is.cpp ../../src/Renderer//Ssao.cpp ../../src/Renderer//Ez.cpp ../../src/Scene//MeshNode.cpp ../../src/Scene//Camera.cpp ../../src/Scene//SkelModelNode.cpp ../../src/Scene//SkelNode.cpp ../../src/Scene//Light.cpp ../../src/Scene//Scene.cpp ../../src/Scene//SceneNode.cpp ../../src/Scene//ParticleEmitter.cpp ../../src/Ui//Ui.cpp ../../src/Resources//ShaderProg.cpp ../../src/Resources//Mesh.cpp ../../src/Resources//SkelAnim.cpp ../../src/Resources//Script.cpp ../../src/Resources//Skeleton.cpp ../../src/Resources//ParticleEmitterProps.cpp ../../src/Resources//LightProps.cpp ../../src/Resources//Texture.cpp ../../src/Resources//Extension.cpp ../../src/Resources//Material.cpp ../../src/Util//Input.cpp ../../src/Util//Util.cpp ../../src/Scene/Controllers//Controller.cpp ../../src/Scene/Controllers//SkelAnimCtrl.cpp ../../src/Physics//Physics.cpp ../../src/Physics//RigidBody.cpp ../../src/Physics//PhyCharacter.cpp ../../src/Resources/Helpers//Image.cpp ../../src/Resources/Helpers//ShaderPrePreprocessor.cpp ../../src/Resources/Core//RsrcPtr.cpp ../../src/Resources/Core//RsrcContainers.cpp ../../src/Core//App.cpp ../../src/Core//Common.cpp ../../src/Core//StdinListener.cpp ../../src/Scripting//ScriptingEngine.cpp ../../src/Scripting//BoostPythonInterfaces.cpp 
 OBJECTS = Scanner.o collision.o skybox.o map.o memory.o TestHeader.o Main.o Renderer.o Hdr.o Bs.o Sm.o Dbg.o Smo.o Pps.o Ms.o MainRenderer.o Is.o Ssao.o Ez.o MeshNode.o Camera.o SkelModelNode.o SkelNode.o Light.o Scene.o SceneNode.o ParticleEmitter.o Ui.o ShaderProg.o Mesh.o SkelAnim.o Script.o Skeleton.o ParticleEmitterProps.o LightProps.o Texture.o Extension.o Material.o Input.o Util.o Controller.o SkelAnimCtrl.o Physics.o RigidBody.o PhyCharacter.o Image.o ShaderPrePreprocessor.o RsrcPtr.o RsrcContainers.o App.o Common.o StdinListener.o ScriptingEngine.o BoostPythonInterfaces.o 
 PRECOMPILED_HEADERS = 
@@ -872,7 +872,40 @@ Hdr.o: ../../src/Renderer//Hdr.cpp ../../src/Renderer//Renderer.h \
  ../../src/Util/Vec.h ../../src/Resources/ShaderProg.h \
  ../../src/Renderer/BufferObjects/Vbo.h \
  ../../src/Renderer/BufferObjects/BufferObject.h \
- ../../src/Resources/Core/RsrcPtr.h ../../src/Util/Object.h
+ ../../src/Resources/Core/RsrcPtr.h ../../src/Util/Object.h \
+ ../../src/Core/App.h ../../extern/include/SDL/SDL.h \
+ ../../extern/include/SDL/SDL_main.h \
+ ../../extern/include/SDL/SDL_stdinc.h \
+ ../../extern/include/SDL/SDL_config.h \
+ ../../extern/include/SDL/SDL_platform.h \
+ ../../extern/include/SDL/begin_code.h \
+ ../../extern/include/SDL/close_code.h \
+ ../../extern/include/SDL/SDL_atomic.h \
+ ../../extern/include/SDL/SDL_audio.h \
+ ../../extern/include/SDL/SDL_error.h \
+ ../../extern/include/SDL/SDL_endian.h \
+ ../../extern/include/SDL/SDL_mutex.h \
+ ../../extern/include/SDL/SDL_thread.h \
+ ../../extern/include/SDL/SDL_rwops.h \
+ ../../extern/include/SDL/SDL_clipboard.h \
+ ../../extern/include/SDL/SDL_cpuinfo.h \
+ ../../extern/include/SDL/SDL_events.h \
+ ../../extern/include/SDL/SDL_video.h \
+ ../../extern/include/SDL/SDL_pixels.h \
+ ../../extern/include/SDL/SDL_rect.h \
+ ../../extern/include/SDL/SDL_surface.h \
+ ../../extern/include/SDL/SDL_keyboard.h \
+ ../../extern/include/SDL/SDL_keysym.h \
+ ../../extern/include/SDL/SDL_scancode.h \
+ ../../extern/include/SDL/SDL_mouse.h \
+ ../../extern/include/SDL/SDL_joystick.h \
+ ../../extern/include/SDL/SDL_quit.h \
+ ../../extern/include/SDL/SDL_loadso.h \
+ ../../extern/include/SDL/SDL_power.h \
+ ../../extern/include/SDL/SDL_timer.h \
+ ../../extern/include/SDL/SDL_version.h \
+ ../../extern/include/SDL/SDL_revision.h \
+ ../../extern/include/SDL/SDL_compat.h ../../src/Core/Common.h
 	@echo Compiling ../../src/Renderer//Hdr.cpp...
 	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Renderer//Hdr.cpp -o Hdr.o
 
@@ -4565,8 +4598,10 @@ BoostPythonInterfaces.o: ../../src/Scripting//BoostPythonInterfaces.cpp \
  ../../extern/include/bullet/LinearMath/btIDebugDraw.h \
  ../../src/Renderer/Renderer.h ../../src/Renderer/BufferObjects/Fbo.h \
  ../../src/Renderer/BufferObjects/Vbo.h \
- ../../src/Renderer/BufferObjects/BufferObject.h ../../src/Core/App.h \
- ../../extern/include/SDL/SDL.h ../../extern/include/SDL/SDL_main.h \
+ ../../src/Renderer/BufferObjects/BufferObject.h \
+ ../../src/Renderer/MainRenderer.h ../../src/Renderer/Renderer.h \
+ ../../src/Core/App.h ../../extern/include/SDL/SDL.h \
+ ../../extern/include/SDL/SDL_main.h \
  ../../extern/include/SDL/SDL_stdinc.h \
  ../../extern/include/SDL/SDL_config.h \
  ../../extern/include/SDL/SDL_platform.h \
@@ -4600,7 +4635,9 @@ BoostPythonInterfaces.o: ../../src/Scripting//BoostPythonInterfaces.cpp \
  ../../extern/include/SDL/SDL_compat.h ../../src/Core/Common.h \
  ../../src/Scripting/Math/Vec2.bpi.h ../../src/Scripting/Math/Vec3.bpi.h \
  ../../src/Scripting/Math/Vec4.bpi.h \
- ../../src/Scripting/Scene/Scene.bpi.h ../../src/Scripting/Core/App.bpi.h
+ ../../src/Scripting/Scene/Scene.bpi.h \
+ ../../src/Scripting/Renderer/Renderer.bpi.h \
+ ../../src/Scripting/Core/App.bpi.h
 	@echo Compiling ../../src/Scripting//BoostPythonInterfaces.cpp...
 	@$(CXX) $(INCPATH) $(CFLAGS) ../../src/Scripting//BoostPythonInterfaces.cpp -o BoostPythonInterfaces.o
 

+ 1 - 1
build/debug/gen.cfg.py

@@ -1,4 +1,4 @@
-sourcePaths = ["../../src/Math/", "../../src/Util/Tokenizer/", "../../src/Misc/", "../../src/", "../../src/Renderer/", "../../src/Scene/", "../../src/Ui/", "../../src/Resources/", "../../src/Util/", "../../src/Scene/Controllers/", "../../src/Physics/", "../../src/Renderer/BufferObjects/", "../../src/Resources/Helpers/", "../../src/Resources/Core/", "../../src/Core/", "../../src/Scripting/", "../../src/Scripting/Math", "../../src/Scripting/Util", "../../src/Scripting/Core", "../../src/Scripting/Scene"]
+sourcePaths = ["../../src/Math/", "../../src/Util/Tokenizer/", "../../src/Misc/", "../../src/", "../../src/Renderer/", "../../src/Scene/", "../../src/Ui/", "../../src/Resources/", "../../src/Util/", "../../src/Scene/Controllers/", "../../src/Physics/", "../../src/Renderer/BufferObjects/", "../../src/Resources/Helpers/", "../../src/Resources/Core/", "../../src/Core/", "../../src/Scripting/", "../../src/Scripting/Math", "../../src/Scripting/Util", "../../src/Scripting/Core", "../../src/Scripting/Scene", "../../src/Scripting/Renderer"]
 
 includePaths = []
 includePaths.append("./")

+ 9 - 7
shaders/GaussianBlurGeneric.glsl

@@ -30,7 +30,8 @@ void main()
 
 
 uniform sampler2D img; ///< Input FAI
-uniform vec2 imgSize = vec2(100.0, 100.0);
+uniform vec2 imgSize = vec2(200.0, 200.0);
+uniform float blurringDist = 1.0;
 
 varying vec2 texCoords;
 
@@ -63,18 +64,19 @@ void main()
 	const float _offset_[3] = float[](0.0, 1.3846153846, 3.2307692308);
 	const float _weight_[3] = float[](0.2255859375, 0.314208984375, 0.06982421875);
 
-	COL_TYPE _col_ = texture2D(img, gl_FragCoord.xy / imgSize).TEX_FETCH * weight[0];
+	COL_TYPE _col_ = texture2D(img, gl_FragCoord.xy / imgSize).TEX_FETCH * _weight_[0];
 
 	for(int i=1; i<3; i++)
 	{
 		#if defined(HPASS)
-			_col_ += texture2D(img, (gl_FragCoord.xy + vec2(0.0, offset[i])) / imgSize.x).TEX_FETCH * weight[i];
-			_col_ += texture2D(img, (gl_FragCoord.xy - vec2(0.0, offset[i])) / imgSize.x).TEX_FETCH * weight[i];
+			vec2 _vecOffs_ = vec2(_offset_[i] + blurringDist, 0.0);
 		#elif defined(VPASS)
-			_col_ += texture2D(img, (gl_FragCoord.xy + vec2(offset[i], 0.0)) / imgSize.y).TEX_FETCH * weight[i];
-			_col_ += texture2D(img, (gl_FragCoord.xy - vec2(offset[i], 0.0)) / imgSize.y).TEX_FETCH * weight[i];
+			vec2 _vecOffs_ = vec2(0.0, _offset_[i] + blurringDist);
 		#endif
+
+		_col_ += texture2D(img, (gl_FragCoord.xy + _vecOffs_) / imgSize).TEX_FETCH * _weight_[i];
+		_col_ += texture2D(img, (gl_FragCoord.xy - _vecOffs_) / imgSize).TEX_FETCH * _weight_[i];
 	}
 
-	gl_FragColor[0].TEX_FETCH = _col_;
+	gl_FragData[0].TEX_FETCH = _col_;
 }

+ 10 - 7
src/Main.cpp

@@ -130,7 +130,8 @@ void init()
 	initializer.is.sm.pcfEnabled = true;
 	initializer.is.sm.resolution = 512;
 	initializer.pps.hdr.enabled = true;
-	initializer.pps.hdr.renderingQuality = 0.5;
+	initializer.pps.hdr.renderingQuality = 0.25;
+	initializer.pps.hdr.blurringDist = 2.0;
 	initializer.pps.ssao.bluringQuality = 1.0;
 	initializer.pps.ssao.enabled = true;
 	initializer.pps.ssao.renderingQuality = 0.5;
@@ -168,7 +169,6 @@ void init()
 	
 	RsrcPtr<Texture> ttex;
 	ttex.loadRsrc("gfx/stone.diff.png");
-	INFO(ttex->getMaxLevel());
 
 	// sarge
 	sarge = new MeshNode();
@@ -328,9 +328,12 @@ void mainLoop()
 		/*Ui::printf("Mover: Pos(%.2f %.2f %.2f) Angs(%.2f %.2f %.2f)", mover->translationWspace.x, mover->translationWspace.y, mover->translationWspace.z,
 								 toDegrees(Euler(mover->rotationWspace).x), toDegrees(Euler(mover->rotationWspace).y), toDegrees(Euler(mover->rotationWspace).z));*/
 
-		if(I::keys[SDL_SCANCODE_ESCAPE]) break;
-		if(I::keys[SDL_SCANCODE_F11]) app->togleFullScreen();
-		if(I::keys[SDL_SCANCODE_F12] == 1)  app->getMainRenderer().takeScreenshot("gfx/screenshot.jpg");
+		if(I::keys[SDL_SCANCODE_ESCAPE])
+			break;
+		if(I::keys[SDL_SCANCODE_F11])
+			app->togleFullScreen();
+		if(I::keys[SDL_SCANCODE_F12] == 1)
+			app->getMainRenderer().takeScreenshot("gfx/screenshot.jpg");
 
 		/*char str[128];
 		static string scrFile = (app->getSettingsPath() / "capt" / "%06d.jpg").string();
@@ -340,9 +343,9 @@ void mainLoop()
 		// std stuff follow
 		app->swapBuffers();
 		GL_OK();
-		if(0)
+		if(1)
 		{
-			if(app->getMainRenderer().getFramesNum() == 100) app->getMainRenderer().takeScreenshot("gfx/screenshot.tga");
+			//if(app->getMainRenderer().getFramesNum() == 100) app->getMainRenderer().takeScreenshot("gfx/screenshot.tga");
 			app->waitForNextFrame();
 		}
 		else

+ 40 - 25
src/Renderer/Hdr.cpp

@@ -48,7 +48,7 @@ void Renderer::Pps::Hdr::init()
 	//int width = renderingQuality * r.width;
 	//int height = renderingQuality * r.height;
 
-	initFbos(pass0Fbo, pass0Fai, GL_RGB);
+	initFbos(toneFbo, pass0Fai, GL_RGB);
 	initFbos(pass1Fbo, pass1Fai, GL_RGB);
 	initFbos(pass2Fbo, fai, GL_RGB);
 
@@ -56,22 +56,23 @@ void Renderer::Pps::Hdr::init()
 
 
 	// init shaders
-	pass0SProg.loadRsrc("shaders/PpsHdr.glsl");
-	pass0SProgFaiUniVar = pass0SProg->findUniVar("fai");
+	toneSProg.loadRsrc("shaders/PpsHdr.glsl");
+	toneProgFaiUniVar = toneSProg->findUniVar("fai");
 
-	const char* shaderFname = "shaders/GaussianBlurGeneric.glsl";
+	const char* SHADER_FILENAME = "shaders/GaussianBlurGeneric.glsl";
 
-	string pps = "#define HPASS\n#define COL_RGB";
+	string pps = "#define HPASS\n#define COL_RGB\n";
 	string prefix = "HRGB";
-	pass1SProg.loadRsrc(ShaderProg::createSrcCodeToCache(shaderFname, pps.c_str(), prefix.c_str()).c_str());
+	pass1SProg.loadRsrc(ShaderProg::createSrcCodeToCache(SHADER_FILENAME, pps.c_str(), prefix.c_str()).c_str());
 	pass1SProgFaiUniVar = pass1SProg->findUniVar("img");
 
-	pps = "#define VPASS\n#define COL_RGB";
+	pps = "#define VPASS\n#define COL_RGB\n";
 	prefix = "VRGB";
-	pass1SProg.loadRsrc(ShaderProg::createSrcCodeToCache(shaderFname, pps.c_str(), prefix.c_str()).c_str());
-	pass1SProgFaiUniVar = pass1SProg->findUniVar("img");
+	pass2SProg.loadRsrc(ShaderProg::createSrcCodeToCache(SHADER_FILENAME, pps.c_str(), prefix.c_str()).c_str());
+	pass2SProgFaiUniVar = pass2SProg->findUniVar("img");
 }
 
+#include "App.h"
 
 //======================================================================================================================
 // runPass                                                                                                             =
@@ -86,25 +87,39 @@ void Renderer::Pps::Hdr::run()
 	glDisable(GL_DEPTH_TEST);
 
 	// pass 0
-	pass0Fbo.bind();
-	pass0SProg->bind();
+	toneFbo.bind();
+	toneSProg->bind();
 	r.is.fai.setRepeat(false);
-	pass0SProgFaiUniVar->setTexture(r.pps.prePassFai, 0);
-	Renderer::drawQuad(0);
-
-	// pass 1
-	pass1Fbo.bind();
-	pass1SProg->bind();
-	pass0Fai.setRepeat(false);
-	pass1SProgFaiUniVar->setTexture(pass0Fai, 0);
+	toneProgFaiUniVar->setTexture(r.pps.prePassFai, 0);
 	Renderer::drawQuad(0);
 
-	// pass 2
-	pass2Fbo.bind();
-	pass2SProg->bind();
-	pass1Fai.setRepeat(false);
-	pass2SProgFaiUniVar->setTexture(pass1Fai, 0);
-	Renderer::drawQuad(0);
+	Vec2 imgSize(w, h);
+
+	for(uint i=0; i<2; i++)
+	{
+		// hpass
+		pass1Fbo.bind();
+		pass1SProg->bind();
+		if(i == 0)
+		{
+			pass1SProgFaiUniVar->setTexture(pass0Fai, 0);
+		}
+		else
+		{
+			pass1SProgFaiUniVar->setTexture(fai, 0);
+		}
+		pass1SProg->findUniVar("imgSize")->setVec2(&imgSize);
+		pass1SProg->findUniVar("blurringDist")->setFloat(blurringDist);
+		Renderer::drawQuad(0);
+
+		// vpass
+		pass2Fbo.bind();
+		pass2SProg->bind();
+		pass2SProgFaiUniVar->setTexture(pass1Fai, 0);
+		pass2SProg->findUniVar("imgSize")->setVec2(&imgSize);
+		pass2SProg->findUniVar("blurringDist")->setFloat(blurringDist);
+		Renderer::drawQuad(0);
+	}
 
 	// end
 	Fbo::unbind();

+ 2 - 2
src/Renderer/MainRenderer.cpp

@@ -86,8 +86,8 @@ void MainRenderer::render(Camera& cam_)
 	glDisable(GL_DEPTH_TEST);
 	glDisable(GL_BLEND);
 	sProg->bind();
-	sProg->findUniVar("rasterImage")->setTexture(pps.hdr.pass0Fai, 0);
-	//sProg->findUniVar("rasterImage")->setTexture(pps.postPassFai, 0);
+	//sProg->findUniVar("rasterImage")->setTexture(pps.hdr.fai, 0);
+	sProg->findUniVar("rasterImage")->setTexture(pps.postPassFai, 0);
 	drawQuad(0);
 }
 

+ 1 - 0
src/Renderer/Renderer.cpp

@@ -41,6 +41,7 @@ void Renderer::init(const RendererInitializer& initializer)
 	is.sm.resolution = initializer.is.sm.resolution;
 	pps.hdr.enabled = initializer.pps.hdr.enabled;
 	pps.hdr.renderingQuality = initializer.pps.hdr.renderingQuality;
+	pps.hdr.blurringDist = initializer.pps.hdr.blurringDist;
 	pps.ssao.enabled = initializer.pps.ssao.enabled;
 	pps.ssao.renderingQuality = initializer.pps.ssao.renderingQuality;
 	pps.ssao.bluringQuality = initializer.pps.ssao.bluringQuality;

+ 21 - 11
src/Renderer/Renderer.h

@@ -232,27 +232,30 @@ class Renderer: public Object
 					PROPERTY_R(bool, enabled, isEnabled)
 					PROPERTY_R(float, renderingQuality, getRenderingQuality)
 
+					public:
+						Texture pass0Fai; ///< Vertical blur pass FAI
+						Texture pass1Fai; ///< pass0Fai with the horizontal blur FAI
+						Texture fai; ///< The final FAI
+						float getBlurringDist() const {return blurringDist;}
+						void setBlurringDist(float f) {blurringDist = f;}
+
+						Hdr(Renderer& r_): RenderingStage(r_) {}
+
 					private:
-						Fbo pass0Fbo;
+						Fbo toneFbo;
 						Fbo pass1Fbo;
 						Fbo pass2Fbo;
-						RsrcPtr<ShaderProg> pass0SProg;
+						RsrcPtr<ShaderProg> toneSProg;
 						RsrcPtr<ShaderProg> pass1SProg;
 						RsrcPtr<ShaderProg> pass2SProg;
-						const ShaderProg::UniVar* pass0SProgFaiUniVar;
+						const ShaderProg::UniVar* toneProgFaiUniVar;
 						const ShaderProg::UniVar* pass1SProgFaiUniVar;
 						const ShaderProg::UniVar* pass2SProgFaiUniVar;
+						float blurringDist;
 
 						void initFbos(Fbo& fbo, Texture& fai, int internalFormat);
 						void init();
 						void run();
-
-					public:
-						Texture pass0Fai; ///< Vertical blur pass FAI
-						Texture pass1Fai; ///< pass0Fai with the horizontal blur FAI
-						Texture fai; ///< The final FAI
-
-						Hdr(Renderer& r_): RenderingStage(r_) {}
 				}; // end Hrd
 
 				/**
@@ -397,7 +400,6 @@ class Renderer: public Object
 	//====================================================================================================================
 	PROPERTY_R(uint, width, getWidth) ///< Width of the rendering. Dont confuse with the window width
 	PROPERTY_R(uint, height, getHeight) ///< Height of the rendering. Dont confuse with the window width
-	PROPERTY_R(uint, framesNum, getFramesNum) ///< Frame number
 	PROPERTY_R(float, aspectRatio, getAspectRatio) ///< Just a precalculated value
 
 	//====================================================================================================================
@@ -429,6 +431,13 @@ class Renderer: public Object
 		 */
 		void render(Camera& cam);
 
+		/**
+		 * @name Setters & getters
+		 */
+		/**@{*/
+		uint getFramesNum() const {return framesNum;}
+		/**@}*/
+
 		/**
 		 * My version of gluUnproject
 		 * @param windowCoords Window screen coords
@@ -457,6 +466,7 @@ class Renderer: public Object
 	// Protected                                                                                                         =
 	//====================================================================================================================
 	protected:
+		uint framesNum; ///< Frame number
 		const Camera* cam; ///< Current camera
 		static float quadVertCoords [][2];
 		static int maxColorAtachments; ///< Max color attachments a FBO can accept

+ 1 - 0
src/Renderer/RendererInitializer.h

@@ -38,6 +38,7 @@ struct RendererInitializer
 		{
 			bool enabled;
 			float renderingQuality;
+			float blurringDist;
 		} hdr;
 
 		// Ssao

+ 3 - 0
src/Scripting/BoostPythonInterfaces.cpp

@@ -2,6 +2,7 @@
 #include <boost/python.hpp>
 #include "Math.h"
 #include "Scene.h"
+#include "MainRenderer.h"
 #include "App.h"
 
 
@@ -15,6 +16,8 @@ BOOST_PYTHON_MODULE(Anki)
 	#include "Vec3.bpi.h"
 	#include "Vec4.bpi.h"
 	#include "Scene.bpi.h"
+	#include "Renderer.bpi.h"
+	#include "MainRenderer.bpi.h"
 	#include "App.bpi.h"
 }
 

+ 1 - 0
src/Scripting/Core/App.bpi.h

@@ -1,5 +1,6 @@
 
 class_<App, noncopyable>("App", no_init)
 	.def("getScene", &App::getScene, return_value_policy<reference_existing_object>())
+	.def("getMainRenderer", &App::getMainRenderer, return_value_policy<reference_existing_object>())
 	.def("quit", &App::quit)
 ;

+ 3 - 0
src/Scripting/Renderer/MainRenderer.bpi.h

@@ -0,0 +1,3 @@
+
+class_<MainRenderer, bases<Renderer>, noncopyable>("MainRenderer", no_init)
+;

+ 4 - 0
src/Scripting/Renderer/Renderer.bpi.h

@@ -0,0 +1,4 @@
+
+class_<Renderer, noncopyable>("Renderer", no_init)
+	.def("getFramesNum", &Renderer::getFramesNum)
+;