瀏覽代碼

Nothing special

Panagiotis Christopoulos Charitos 13 年之前
父節點
當前提交
26381a6b3a

+ 10 - 13
include/anki/renderer/Ez.h

@@ -4,27 +4,24 @@
 #include "anki/renderer/RenderingPass.h"
 #include "anki/gl/Fbo.h"
 
-
 namespace anki {
 
-
 /// Material stage EarlyZ pass
-class Ez: public SwitchableRenderingPass
+class Ez: public OptionalRenderingPass
 {
-	public:
-		Ez(Renderer* r)
-			: SwitchableRenderingPass(r)
-		{}
+public:
+	Ez(Renderer* r)
+		: OptionalRenderingPass(r)
+	{}
 
-		void init(const RendererInitializer& initializer);
-		void run();
+	void init(const RendererInitializer& initializer);
+	void run();
 
-	private:
-		Fbo fbo; ///< Writes to MS depth FAI
+private:
+	U maxObjectsToDraw;
 };
 
-
-} // end namespace
+} // end namespace anki
 
 
 #endif

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

@@ -27,6 +27,7 @@ struct RendererInitializer
 		struct Ez
 		{
 			Bool enabled = false;
+			U maxObjectsToDraw = 10;
 		} ez;
 	} ms;
 

+ 17 - 0
include/anki/renderer/RenderingPass.h

@@ -47,6 +47,23 @@ protected:
 	Bool enabled = false;
 };
 
+/// Rendering pass that can be enabled or disabled
+class OptionalRenderingPass: public RenderingPass
+{
+public:
+	OptionalRenderingPass(Renderer* r_)
+		: RenderingPass(r_)
+	{}
+
+	Bool getEnabled() const
+	{
+		return enabled;
+	}
+
+protected:
+	Bool enabled = false;
+};
+
 } // end namespace anki
 
 #endif

+ 14 - 2
src/renderer/Ez.cpp

@@ -15,6 +15,8 @@ void Ez::init(const RendererInitializer& initializer)
 		return;
 	}
 
+	maxObjectsToDraw = initializer.ms.ez.maxObjectsToDraw;
+
 	// init FBO
 	try
 	{
@@ -30,9 +32,19 @@ void Ez::init(const RendererInitializer& initializer)
 //==============================================================================
 void Ez::run()
 {
-	if(!enabled)
+	ANKI_ASSERT(enabled);
+
+	Scene& scene = r->getScene();
+	Camera& cam = scene.getActiveCamera();
+
+	VisibilityInfo& vi = cam.getFrustumable()->getVisibilityInfo();
+
+	U count = 0;
+	for(auto it = vi.getRenderablesBegin();
+		it != vi.getRenderablesEnd() && count < maxObjectsToDraw; ++it)
 	{
-		return;
+		r->getSceneDrawer().render(cam, 0, *((*it)->getRenderable()));
+		++count;
 	}
 
 	/*Camera& cam = r.getCamera();

+ 4 - 4
src/renderer/Ms.cpp

@@ -43,13 +43,15 @@ void Ms::init(const RendererInitializer& initializer)
 //==============================================================================
 void Ms::run()
 {
+	fbo.bind();
+
+	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+
 	/*if(ez.getEnabled())
 	{
 		ez.run();
 	}*/
 
-	fbo.bind();
-
 	/*if(!ez.getEnabled())
 	{
 		glClear(GL_DEPTH_BUFFER_BIT);
@@ -70,8 +72,6 @@ void Ms::run()
 		glDepthFunc(GL_EQUAL);
 	}*/
 
-	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
 	// render all
 	r->getSceneDrawer().prepareDraw();
 	VisibilityInfo& vi =

+ 1 - 4
src/renderer/Ssao.cpp

@@ -106,10 +106,7 @@ void Ssao::init(const RendererInitializer& initializer)
 //==============================================================================
 void Ssao::run()
 {
-	if(!enabled)
-	{
-		return;
-	}
+	ANKI_ASSERT(enabled);
 
 	const Camera& cam = r->getScene().getActiveCamera();
 

+ 2 - 4
testapp/Main.cpp

@@ -63,7 +63,7 @@ void init()
 	cam->setAll(
 		MainRendererSingleton::get().getAspectRatio() * toRad(ang),
 		toRad(ang), 0.5, 500.0);
-	cam->setLocalTransform(Transform(Vec3(90.0, 5.0, 8.0),
+	cam->setLocalTransform(Transform(Vec3(88.0, 5.0, 8.0),
 		Mat3(Euler(toRad(-10.0), toRad(90.0), toRad(0.0))),
 		1.0));
 	scene.setActiveCamera(cam);
@@ -323,7 +323,7 @@ void mainLoop()
 				- timer.getElapsedTime());
 		}
 #else
-		if(MainRendererSingleton::get().getFramesCount() == 100)
+		if(MainRendererSingleton::get().getFramesCount() == 1000)
 		{
 			break;
 		}
@@ -400,8 +400,6 @@ void initSubsystems(int argc, char* argv[])
 
 	// Parallel jobs
 	ThreadPoolSingleton::get().init(4);
-
-	SceneSingleton::get().setAmbientColor(Vec3(0.3));
 }
 
 //==============================================================================