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

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to