Browse Source

Android: Now it runs at 780p, no post-processing, 7 lights at 51FPS on Nexus 10

Panagiotis Christopoulos Charitos 12 years ago
parent
commit
e311de7dae

+ 1 - 0
include/anki/renderer/MainRenderer.h

@@ -29,6 +29,7 @@ public:
 
 
 private:
 private:
 	std::unique_ptr<Deformer> deformer;
 	std::unique_ptr<Deformer> deformer;
+	ShaderProgramResourcePointer blitProg;
 
 
 	void takeScreenshotTga(const char* filename);
 	void takeScreenshotTga(const char* filename);
 	void initGl();
 	void initGl();

+ 5 - 0
include/anki/renderer/Renderer.h

@@ -165,6 +165,11 @@ public:
 		return isOffscreen;
 		return isOffscreen;
 	}
 	}
 
 
+	F32 getRenderingQuality() const
+	{
+		return renderingQuality;
+	}
+
 	U32 getMaxTextureSize() const
 	U32 getMaxTextureSize() const
 	{
 	{
 		return maxTextureSize;
 		return maxTextureSize;

+ 2 - 1
src/renderer/Is.cpp

@@ -870,7 +870,8 @@ void Is::setState()
 {
 {
 	Bool drawToDefaultFbo = !r->getPps().getEnabled() 
 	Bool drawToDefaultFbo = !r->getPps().getEnabled() 
 		&& !r->getDbg().getEnabled() 
 		&& !r->getDbg().getEnabled() 
-		&& !r->getIsOffscreen();
+		&& !r->getIsOffscreen()
+		&& r->getRenderingQuality() == 1.0;
 
 
 	if(drawToDefaultFbo)
 	if(drawToDefaultFbo)
 	{
 	{

+ 31 - 0
src/renderer/MainRenderer.cpp

@@ -26,6 +26,8 @@ void MainRenderer::init(const RendererInitializer& initializer_)
 
 
 	initGl();
 	initGl();
 
 
+	blitProg.load("shaders/Final.glsl");
+
 	Renderer::init(initializer);
 	Renderer::init(initializer);
 	deformer.reset(new Deformer);
 	deformer.reset(new Deformer);
 
 
@@ -38,6 +40,35 @@ void MainRenderer::render(SceneGraph& scene)
 {
 {
 	ANKI_COUNTER_START_TIMER(C_MAIN_RENDERER_TIME);
 	ANKI_COUNTER_START_TIMER(C_MAIN_RENDERER_TIME);
 	Renderer::render(scene);
 	Renderer::render(scene);
+
+	Bool alreadyDrawn = getRenderingQuality() == 1.0;
+
+	if(!alreadyDrawn)
+	{
+		Fbo::bindDefault(Fbo::FT_ALL, true); // Bind the window framebuffer
+
+		GlStateSingleton::get().setViewport(
+			0, 0, getWindowWidth(), getWindowHeight());
+		GlStateSingleton::get().disable(GL_DEPTH_TEST);
+		GlStateSingleton::get().disable(GL_BLEND);
+		blitProg->bind();
+
+		const Texture* fai;
+
+		if(getPps().getEnabled())
+		{
+			fai = &getPps().getFai();
+		}
+		else
+		{
+			fai = &getIs().getFai();
+		}
+
+		blitProg->findUniformVariable("rasterImage").set(*fai);
+		drawQuad();
+	}
+	
+
 	ANKI_COUNTER_STOP_TIMER_INC(C_MAIN_RENDERER_TIME);
 	ANKI_COUNTER_STOP_TIMER_INC(C_MAIN_RENDERER_TIME);
 }
 }
 
 

+ 7 - 3
src/renderer/Pps.cpp

@@ -106,16 +106,20 @@ void Pps::run()
 		lf.run();
 		lf.run();
 	}
 	}
 
 
-	Bool drawToDefaultFbo = !r->getDbg().getEnabled() && !r->getIsOffscreen();
+	Bool drawToDefaultFbo = 
+		!r->getDbg().getEnabled() 
+		&& !r->getIsOffscreen()
+		&& r->getRenderingQuality() == 1.0;
+
 	if(drawToDefaultFbo)
 	if(drawToDefaultFbo)
 	{
 	{
-		Fbo::bindDefault();
+		Fbo::bindDefault(Fbo::FT_ALL, true);
 		GlStateSingleton::get().setViewport(
 		GlStateSingleton::get().setViewport(
 			0, 0, r->getWindowWidth(), r->getWindowHeight());
 			0, 0, r->getWindowWidth(), r->getWindowHeight());
 	}
 	}
 	else
 	else
 	{
 	{
-		fbo.bind();
+		fbo.bind(Fbo::FT_ALL, true);
 		GlStateSingleton::get().setViewport(
 		GlStateSingleton::get().setViewport(
 			0, 0, r->getWidth(), r->getHeight());
 			0, 0, r->getWidth(), r->getHeight());
 	}
 	}