[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53541] branches/ge_harmony/source/ gameengine: Making sure the prepass and light pass only run when they are actually being used .

Daniel Stokes kupomail at gmail.com
Fri Jan 4 02:05:45 CET 2013


Revision: 53541
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53541
Author:   kupoman
Date:     2013-01-04 01:05:41 +0000 (Fri, 04 Jan 2013)
Log Message:
-----------
Making sure the prepass and light pass only run when they are actually being used.

Modified Paths:
--------------
    branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h

Modified: branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp	2013-01-04 00:53:06 UTC (rev 53540)
+++ branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp	2013-01-04 01:05:41 UTC (rev 53541)
@@ -1308,18 +1308,18 @@
 #endif
 
 	// prepass
-	//m_rasterizer->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_ENABLED);
-	m_rasterizer->BeginPrePass();
-	scene->RenderBuckets(camtrans, m_rasterizer, m_rendertools);
-	m_rasterizer->EndPrePass();
-	//m_rasterizer->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_DISABLED);
+	if (m_rasterizer->BeginPrePass()) {
+		scene->RenderBuckets(camtrans, m_rasterizer, m_rendertools);
+		m_rasterizer->EndPrePass();
+	}
 
 	// light pass
-	m_rasterizer->BeginLightPass();
-	CListValue *lightlist = scene->GetLightList();
-	for (int i=0; i<lightlist->GetCount(); i++)
-		m_rasterizer->RenderLight(((KX_LightObject*)lightlist->GetValue(i))->GetLightData());
-	m_rasterizer->EndLightPass();
+	if (m_rasterizer->BeginLightPass()) {
+		CListValue *lightlist = scene->GetLightList();
+		for (int i=0; i<lightlist->GetCount(); i++)
+			m_rasterizer->RenderLight(((KX_LightObject*)lightlist->GetValue(i))->GetLightData());
+		m_rasterizer->EndLightPass();
+	}
 
 	scene->RenderBuckets(camtrans, m_rasterizer, m_rendertools);
 

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h	2013-01-04 00:53:06 UTC (rev 53540)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h	2013-01-04 01:05:41 UTC (rev 53541)
@@ -430,12 +430,12 @@
 	virtual class	RAS_IFilterManager* CreateFilterManager()=0;
 
 	virtual void	SetLightShader(struct Shader** shader, int count)=0;
-	virtual void	BeginLightPass()=0;
+	virtual int		BeginLightPass()=0;
 	virtual void	RenderLight(RAS_LightObject *light)=0;
 	virtual void	EndLightPass()=0;
 
 	virtual void	SetPrePassShader(struct Shader** shader, int count)=0;
-	virtual void	BeginPrePass()=0;
+	virtual int		BeginPrePass()=0;
 	virtual void	EndPrePass()=0;
 
 	virtual void	SetPrepassCount(int count)=0;

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2013-01-04 00:53:06 UTC (rev 53540)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2013-01-04 01:05:41 UTC (rev 53541)
@@ -1335,9 +1335,9 @@
 	set_shader_internal(&m_prepass_shader, m_prepass_shader_default, shaders, count);
 }
 
-void RAS_OpenGLRasterizer::BeginLightPass()
+int RAS_OpenGLRasterizer::BeginLightPass()
 {
-	if (!m_light_shader) return;
+	if (!m_light_shader) return 0;
 
 	int bind;
 	glPushAttrib(GL_COLOR_BUFFER_BIT | GL_ENABLE_BIT);
@@ -1382,6 +1382,8 @@
 	float bounds[2] = {(float)m_width, (float)m_height};
 	bind = GPU_shader_get_uniform(m_light_shader, "bounds");
 	GPU_shader_uniform_vector(m_light_shader, bind, 2, 1, bounds);
+
+	return 1;
 }
 
 void RAS_OpenGLRasterizer::RenderLight(RAS_LightObject *light)
@@ -1468,9 +1470,9 @@
 	glPopAttrib();
 }
 
-void RAS_OpenGLRasterizer::BeginPrePass()
+int RAS_OpenGLRasterizer::BeginPrePass()
 {
-	if (!m_prepass_shader) return;
+	if (!m_prepass_shader) return 0;
 
 	glPushAttrib(GL_VIEWPORT_BIT | GL_COLOR_BUFFER_BIT);
 	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo[1]);
@@ -1483,6 +1485,8 @@
 
 	m_saved_drawingmode = m_drawingmode;
 	SetDrawingMode(KX_OVERRIDE);
+
+	return 1;
 }
 
 void RAS_OpenGLRasterizer::EndPrePass()

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h	2013-01-04 00:53:06 UTC (rev 53540)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h	2013-01-04 01:05:41 UTC (rev 53541)
@@ -359,13 +359,13 @@
 
 	/* Light Pass */
 	virtual void	SetLightShader(struct Shader** shader, int count);
-	virtual void	BeginLightPass();
+	virtual int		BeginLightPass();
 	virtual void	RenderLight(RAS_LightObject *light);
 	virtual void	EndLightPass();
 
 	/* Pre Pass */
 	virtual void	SetPrePassShader(struct Shader** shader, int count);
-	virtual void	BeginPrePass();
+	virtual int		BeginPrePass();
 	virtual void	EndPrePass();
 
 	int				GetFBOWidth() { return m_width; }




More information about the Bf-blender-cvs mailing list