Jelajahi Sumber

Fixing previous commit

Panagiotis Christopoulos Charitos 13 tahun lalu
induk
melakukan
cf39713a9d

+ 1 - 1
CMakeLists.txt

@@ -74,7 +74,7 @@ MESSAGE("++ AnKi window backend: ${ANKI_WINDOW_BACKEND}")
 # Build type
 IF(CMAKE_BUILD_TYPE STREQUAL Debug)
 ELSE()
-	SET(FLAGS " -s -flto -ffast-math ")
+	SET(FLAGS " -s -ffast-math ")
 
 	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}")
 	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}")

+ 1 - 2
include/anki/renderer/Hdr.h

@@ -54,8 +54,7 @@ public:
 	/// @}
 
 private:
-	U32 width;
-	U32 height;
+	U32 width, height;
 	F32 exposure = 4.0; ///< How bright is the HDR
 	U32 blurringIterationsCount = 2; ///< The blurring iterations
 	F32 blurringDist = 1.0; ///< Distance in blurring

+ 3 - 2
include/anki/renderer/Is.h

@@ -87,8 +87,6 @@ private:
 		Array<Tile, TILES_X_COUNT * TILES_Y_COUNT> tiles1d;
 	};
 
-	U32 width, height;
-
 	/// A texture of TILES_X_COUNT*TILES_Y_COUNT size and format RG16F. Used to
 	/// to fill the Tile::depth
 	Texture minMaxFai;
@@ -127,6 +125,9 @@ private:
 	/// Opt because many ask for it
 	Camera* cam;
 
+	Bool drawToDefaultFbo;
+	U32 width, height;
+
 	/// Called by init
 	void initInternal(const RendererInitializer& initializer);
 

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

@@ -66,6 +66,10 @@ private:
 	int screenshotJpegQuality = 90; ///< The quality of the JPEG screenshots.
 							        ///< From 0 to 100
 
+	U32 windowWidth, windowHeight;
+
+	Bool drawToDefaultFbo;
+
 	std::unique_ptr<Deformer> deformer;
 
 	void takeScreenshotTga(const char* filename);

+ 3 - 0
include/anki/renderer/Pps.h

@@ -67,6 +67,9 @@ private:
 	ShaderProgramResourcePointer prog;
 	Texture fai;
 
+	Bool renderToDefaultFbo;
+	U32 width, height;
+
 	void initInternal(const RendererInitializer& initializer);
 };
 

+ 7 - 17
include/anki/renderer/Renderer.h

@@ -42,6 +42,7 @@ struct RendererInitializer
 			U32 resolution = 512;
 			U32 maxLights = 4;
 		} sm;
+		Bool drawToDefaultFbo = false;
 	} is;
 
 	// Pps
@@ -73,6 +74,7 @@ struct RendererInitializer
 			F32 sideBlurFactor = 1.0;
 		} bl;
 		Bool enabled = false;
+		Bool drawToDefaultFbo = false;
 	} pps;
 
 	// Dbg
@@ -84,7 +86,7 @@ struct RendererInitializer
 	// the globals
 	U32 width;
 	U32 height;
-	F32 renderingQuality = 1.0;
+	F32 renderingQuality = 1.0; ///< Applies only to MainRenderer
 	F32 lodDistance; ///< Distance that used to calculate the LOD
 
 	// funcs
@@ -157,12 +159,12 @@ public:
 		return pps;
 	}
 
-	U getWidth() const
+	U32 getWidth() const
 	{
 		return width;
 	}
 
-	U getHeight() const
+	U32 getHeight() const
 	{
 		return height;
 	}
@@ -216,16 +218,6 @@ public:
 	{
 		return planesUpdateTimestamp;
 	}
-
-	Bool getOffsceenRenderer() const
-	{
-		return isOffscreenRenderer;
-	}
-	
-	F32 getRenderingQuality() const
-	{
-		return renderingQuality;
-	}
 	/// @}
 
 	/// Init the renderer given an initialization class
@@ -292,16 +284,14 @@ protected:
 	Tiler tiler;
 
 	/// Width of the rendering. Don't confuse with the window width
-	U width;
+	U32 width;
 	/// Height of the rendering. Don't confuse with the window width
-	U height;
-	F32 renderingQuality;
+	U32 height;
 	Scene* scene; ///< Current scene
 	/// Max color attachments an FBO can accept
 	static int maxColorAtachments;
 	RenderableDrawer sceneDrawer;
 	F32 lodDistance; ///< Distance that used to calculate the LOD
-	Bool isOffscreenRenderer = true; ///< An onscreen renderer may fake that
 
 	/// @name Optimization vars
 	/// Used in other stages

+ 5 - 1
include/anki/renderer/RenderingPass.h

@@ -34,10 +34,14 @@ public:
 		: RenderingPass(r_)
 	{}
 
-	bool getEnabled() const
+	Bool getEnabled() const
 	{
 		return enabled;
 	}
+	void setEnabled(Bool e)
+	{
+		enabled = e;
+	}
 
 protected:
 	Bool enabled = false;

+ 1 - 0
src/gl/Texture.cpp

@@ -356,6 +356,7 @@ void Texture::setFilteringNoBind(TextureFilteringType filterType)
 	case TFT_TRILINEAR:
 		glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
 		glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+		break;
 	default:
 		ANKI_ASSERT(0);
 		break;

+ 3 - 4
src/renderer/Hdr.cpp

@@ -31,11 +31,10 @@ void Hdr::initInternal(const Renderer::Initializer& initializer)
 		return;
 	}
 
-	F32 renderingQuality = initializer.pps.hdr.renderingQuality 
-		* initializer.renderingQuality;
+	const F32 renderingQuality = initializer.pps.hdr.renderingQuality;
 
-	width = renderingQuality * (F32)initializer.width;
-	height = renderingQuality * (F32)initializer.height;
+	width = renderingQuality * (F32)r->getWidth();
+	height = renderingQuality * (F32)r->getHeight();
 	exposure = initializer.pps.hdr.exposure;
 	blurringDist = initializer.pps.hdr.blurringDist;
 	blurringIterationsCount = initializer.pps.hdr.blurringIterationsCount;

+ 20 - 7
src/renderer/Is.cpp

@@ -289,8 +289,9 @@ void Is::init(const RendererInitializer& initializer)
 //==============================================================================
 void Is::initInternal(const RendererInitializer& initializer)
 {
-	width = initializer.renderingQuality * initializer.width;
-	height = initializer.renderingQuality * initializer.height;
+	drawToDefaultFbo = initializer.is.drawToDefaultFbo;
+	width = initializer.width / initializer.renderingQuality;
+	height = initializer.height / initializer.renderingQuality;
 
 	//
 	// Init the passes
@@ -303,8 +304,8 @@ void Is::initInternal(const RendererInitializer& initializer)
 	std::string pps =
 		"#define TILES_X_COUNT " + std::to_string(TILES_X_COUNT) + "\n"
 		"#define TILES_Y_COUNT " + std::to_string(TILES_Y_COUNT) + "\n"
-		"#define RENDERER_WIDTH " + std::to_string(width) + "\n"
-		"#define RENDERER_HEIGHT " + std::to_string(height) + "\n"
+		"#define RENDERER_WIDTH " + std::to_string(r->getWidth()) + "\n"
+		"#define RENDERER_HEIGHT " + std::to_string(r->getHeight()) + "\n"
 		"#define MAX_LIGHTS_PER_TILE " + std::to_string(MAX_LIGHTS_PER_TILE)
 		+ "\n"
 		"#define MAX_POINT_LIGHTS " + std::to_string(MAX_POINT_LIGHTS) + "\n"
@@ -328,7 +329,7 @@ void Is::initInternal(const RendererInitializer& initializer)
 	//
 
 	// IS FBO
-	Renderer::createFai(width, height, GL_RGB8,
+	Renderer::createFai(r->getWidth(), r->getHeight(), GL_RGB8,
 		GL_RGB, GL_UNSIGNED_INT, fai);
 	fbo.create();
 	fbo.setColorAttachments({&fai});
@@ -672,8 +673,20 @@ void Is::lightPass()
 	sm.run(&shadowCasters[0], spotsShadowCount, shadowmapLayers);
 
 	// Prepare state
-	fbo.bind();
-	GlStateSingleton::get().setViewport(0, 0, width, height);
+	if(drawToDefaultFbo)
+	{
+		ANKI_ASSERT(!r->getPps().getEnabled());
+		Fbo::unbindAll();
+		GlStateSingleton::get().setViewport(
+			0, 0, width, height);
+	}
+	else
+	{
+		ANKI_ASSERT(r->getPps().getEnabled());
+		fbo.bind();
+		GlStateSingleton::get().setViewport(
+			0, 0, r->getWidth(), r->getHeight());
+	}
 	GlStateSingleton::get().disable(GL_DEPTH_TEST);
 	GlStateSingleton::get().disable(GL_BLEND);
 

+ 20 - 8
src/renderer/MainRenderer.cpp

@@ -20,21 +20,33 @@ void MainRenderer::init(const Renderer::Initializer& initializer_)
 	ANKI_LOGI("Initializing main renderer...");
 	initGl();
 
-	isOffscreenRenderer = (renderingQuality < 0.9);
-
-	sProg.load("shaders/Final.glsl");
+	const F32 renderingQuality = initializer_.renderingQuality;
+	windowWidth = initializer_.width;
+	windowHeight = initializer_.height;
+	drawToDefaultFbo = (renderingQuality > 0.9);
 
 	// init the offscreen Renderer
 	//
-	Renderer::init(initializer);
-	dbg.init(initializer);
-	deformer.reset(new Deformer);
+	RendererInitializer initializer = initializer_;
+	initializer.width *= renderingQuality;
+	initializer.height *= renderingQuality;
 
-	if(!initializer.pps.drawFinalToDefaultFbo)
+	if(drawToDefaultFbo)
 	{
+		initializer.pps.drawToDefaultFbo = true;
+		initializer.is.drawToDefaultFbo = !initializer.pps.enabled;
+	}
+	else
+	{
+		initializer.pps.drawToDefaultFbo = false;
+		initializer.is.drawToDefaultFbo = false;
 		sProg.load("shaders/Final.glsl");
 	}
 
+	Renderer::init(initializer);
+	dbg.init(initializer);
+	deformer.reset(new Deformer);
+
 	ANKI_LOGI("Main renderer initialized");
 }
 
@@ -90,7 +102,7 @@ void MainRenderer::render(Scene& scene)
 
 	// Render the PPS FAI to the framebuffer
 	//
-	if(!pps.getDrawFinalToDefaultFbo())
+	if(!drawToDefaultFbo)
 	{
 		Fbo::unbindAll(); // Bind the window framebuffer
 

+ 15 - 8
src/renderer/Pps.cpp

@@ -7,7 +7,7 @@ namespace anki {
 
 //==============================================================================
 Pps::Pps(Renderer* r_)
-	: RenderingPass(r_), hdr(r_), ssao(r_), bl(r_)
+	: SwitchableRenderingPass(r_), hdr(r_), ssao(r_), bl(r_)
 {}
 
 //==============================================================================
@@ -25,10 +25,10 @@ void Pps::initInternal(const RendererInitializer& initializer)
 
 	ssao.init(initializer);
 	hdr.init(initializer);
-	drawFinalToDefaultFbo = initializer.pps.drawFinalToDefaultFbo;
+	renderToDefaultFbo = initializer.pps.drawToDefaultFbo;
 
 	// FBO
-	if(r->getOffscreenRenderer())
+	if(!renderToDefaultFbo)
 	{
 		Renderer::createFai(r->getWidth(), r->getHeight(), GL_RGB, GL_RGB,
 			GL_FLOAT, fai);
@@ -40,6 +40,11 @@ void Pps::initInternal(const RendererInitializer& initializer)
 			throw ANKI_EXCEPTION("Fbo not complete");
 		}
 	}
+	else
+	{
+		width = initializer.width / initializer.renderingQuality;
+		height = initializer.height / initializer.renderingQuality;
+	}
 
 	// SProg
 	std::string pps = "";
@@ -86,19 +91,21 @@ void Pps::run()
 		hdr.run();
 	}
 
-	if(r->getOffscreenRenderer())
+	if(renderToDefaultFbo)
 	{
-		fbo.bind();
+		Fbo::unbindAll();
+		GlStateSingleton::get().setViewport(
+			0, 0, width, height);
 	}
 	else
 	{
-		Fbo::unbindAll();
+		fbo.bind();
+		GlStateSingleton::get().setViewport(
+			0, 0, r->getWidth(), r->getHeight());
 	}
 
 	GlStateSingleton::get().enable(GL_DEPTH_TEST, false);
 	GlStateSingleton::get().enable(GL_BLEND, false);
-	GlStateSingleton::get().setViewport(0, 0,
-		r->getWidth(), r->getHeight());
 
 	prog->bind();
 	prog->findUniformVariable("isFai").set(r->getIs().getFai());

+ 4 - 2
src/renderer/Renderer.cpp

@@ -21,7 +21,6 @@ void Renderer::init(const RendererInitializer& initializer)
 	width = initializer.width;
 	height = initializer.height;
 	lodDistance = initializer.lodDistance;
-	renderingQuality = initializer.renderingQuality;
 	framesNum = 0;
 
 	// a few sanity checks
@@ -84,7 +83,10 @@ void Renderer::render(Scene& scene_)
 	ms.run();
 	//tiler.updateTiles(scene->getActiveCamera(), ms.getDepthFai());
 	is.run();
-	pps.run();
+	if(pps.getEnabled())
+	{
+		pps.run();
+	}
 	//bs.run();
 
 	ANKI_CHECK_GL_ERROR();

+ 3 - 4
src/renderer/Ssao.cpp

@@ -38,12 +38,11 @@ void Ssao::initInternal(const RendererInitializer& initializer)
 		return;
 	}
 
-	F32 renderingQuality = initializer.pps.ssao.renderingQuality 
-		* initializer.renderingQuality;
+	const F32 renderingQuality = initializer.pps.ssao.renderingQuality;
 	blurringIterationsCount = initializer.pps.ssao.blurringIterationsNum;
 
-	width = renderingQuality * (F32)initializer.width;
-	height = renderingQuality * (F32)initializer.height;
+	width = renderingQuality * (F32)r->getWidth();
+	height = renderingQuality * (F32)r->getHeight();
 
 	//
 	// create FBOs

+ 3 - 2
testapp/Main.cpp

@@ -292,7 +292,7 @@ void mainLoop()
 
 		// Sleep
 		//
-#if 1
+#if 0
 		timer.stop();
 		if(timer.getElapsedTime() < AppSingleton::get().getTimerTick())
 		{
@@ -361,10 +361,11 @@ void initSubsystems(int argc, char* argv[])
 	initializer.pps.ssao.blurringIterationsNum = 4;
 	initializer.pps.ssao.enabled = true;
 	initializer.pps.ssao.renderingQuality = 0.3;
+	initializer.pps.enabled = true;
 	initializer.pps.bl.enabled = true;
 	initializer.pps.bl.blurringIterationsNum = 2;
 	initializer.pps.bl.sideBlurFactor = 1.0;
-	initializer.mainRendererQuality = 1.0;
+	initializer.renderingQuality = 1.0;
 	initializer.width = nwinit.width;
 	initializer.height = nwinit.height;