[Bf-blender-cvs] [803e658] decklink: BGE: Display shadow when default render is off.

Benoit Bolsee noreply at git.blender.org
Sat Dec 5 14:31:54 CET 2015


Commit: 803e658d63ce359c77256dee9b4e27ce56717a36
Author: Benoit Bolsee
Date:   Sat Dec 5 14:26:12 2015 +0100
Branches: decklink
https://developer.blender.org/rB803e658d63ce359c77256dee9b4e27ce56717a36

BGE: Display shadow when default render is off.

There was a bug with logic.setRender(False): the shadow buffers
were not computed, which was visible in the bge.texture.ImageRender()
custom renders.
This is now fixed: the shadow buffers will be computed at most once per
frame by the first ImageRender() or by the default render.

===================================================================

M	source/gameengine/Ketsji/KX_KetsjiEngine.cpp
M	source/gameengine/Ketsji/KX_KetsjiEngine.h
M	source/gameengine/Ketsji/KX_Scene.cpp
M	source/gameengine/Ketsji/KX_Scene.h
M	source/gameengine/VideoTexture/ImageRender.cpp

===================================================================

diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index 034589c..2683c21 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
@@ -718,6 +718,9 @@ bool KX_KetsjiEngine::NextFrame()
 					scene->setSuspendedTime(m_clockTime);
 			
 			m_logger->StartLog(tc_services, m_kxsystem->GetTimeInSeconds(), true);
+
+			// invalidates the shadow buffer from previous render/ImageRender because the scene has changed
+			scene->SetShadowDone(false);
 		}
 
 		// update system devices
@@ -1101,6 +1104,8 @@ void KX_KetsjiEngine::RenderShadowBuffers(KX_Scene *scene)
 			cam->Release();
 		}
 	}
+	/* remember that we have a valid shadow buffer for that scene */
+	scene->SetShadowDone(true);
 }
 	
 // update graphics
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h
index c7433f0..660a6ad 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.h
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h
@@ -209,7 +209,6 @@ private:
 	void					RenderFrame(KX_Scene* scene, KX_Camera* cam);
 	void					PostRenderScene(KX_Scene* scene);
 	void					RenderDebugProperties();
-	void					RenderShadowBuffers(KX_Scene *scene);
 
 public:
 	KX_KetsjiEngine(class KX_ISystem* system);
@@ -249,6 +248,7 @@ public:
 	///returns true if an update happened to indicate -> Render
 	bool			NextFrame();
 	void			Render();
+	void			RenderShadowBuffers(KX_Scene *scene);
 	
 	void			StartEngine(bool clearIpo);
 	void			StopEngine();
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp
index 16d1fdd..52a5103 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -172,6 +172,7 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
 	m_activity_culling = false;
 	m_suspend = false;
 	m_isclearingZbuffer = true;
+	m_isShadowDone = false;
 	m_tempObjectList = new CListValue();
 	m_objectlist = new CListValue();
 	m_parentlist = new CListValue();
diff --git a/source/gameengine/Ketsji/KX_Scene.h b/source/gameengine/Ketsji/KX_Scene.h
index 046ad25..64381dc 100644
--- a/source/gameengine/Ketsji/KX_Scene.h
+++ b/source/gameengine/Ketsji/KX_Scene.h
@@ -172,6 +172,11 @@ protected:
 	bool m_isclearingZbuffer;
 
 	/**
+	 * Does the shadow buffer needs calculing
+	 */
+	bool m_isShadowDone;
+
+	/**
 	 * The name of the scene
 	 */
 	STR_String	m_sceneName;
@@ -572,6 +577,8 @@ public:
 	bool IsSuspended();
 	bool IsClearingZBuffer();
 	void EnableZBufferClearing(bool isclearingZbuffer);
+	bool IsShadowDone() { return m_isShadowDone; }
+	void SetShadowDone(bool b) { m_isShadowDone = b; }
 	// use of DBVT tree for camera culling
 	void SetDbvtCulling(bool b) { m_dbvt_culling = b; }
 	bool GetDbvtCulling() { return m_dbvt_culling; }
diff --git a/source/gameengine/VideoTexture/ImageRender.cpp b/source/gameengine/VideoTexture/ImageRender.cpp
index 776cae1..3913138 100644
--- a/source/gameengine/VideoTexture/ImageRender.cpp
+++ b/source/gameengine/VideoTexture/ImageRender.cpp
@@ -169,6 +169,9 @@ bool ImageRender::Render()
 		return false;
 	}
 
+	if (!m_scene->IsShadowDone())
+		m_engine->RenderShadowBuffers(m_scene);
+
 	if (m_mirror)
 	{
 		// mirror mode, compute camera frustrum, position and orientation




More information about the Bf-blender-cvs mailing list