Changed SceneGraph::Renderer::mOnStage flag to instead count the number of connection... 02/49102/2
authorChu Hoang <c.hoang@samsung.com>
Tue, 6 Oct 2015 11:09:12 +0000 (12:09 +0100)
committerChu Hoang <c.hoang@samsung.com>
Wed, 7 Oct 2015 15:41:35 +0000 (08:41 -0700)
This fixes a bug where multiple actors share a renderer causes multiple connections/discconections.

Change-Id: I75a14ac350fb46e72da7fcaa85ba9ec8324d9e62

dali/internal/event/rendering/renderer-impl.cpp
dali/internal/event/rendering/renderer-impl.h

index 1b31b59..c665e3a 100644 (file)
@@ -230,29 +230,35 @@ int Renderer::GetPropertyComponentIndex( Property::Index index ) const
 
 bool Renderer::OnStage() const
 {
-  return mOnStage;
+  return mOnStageCount > 0;
 }
 
 void Renderer::Connect()
 {
-  OnStageConnectMessage( GetEventThreadServices(), *mSceneObject );
-  mGeometryConnector.OnStageConnect();
-  mMaterialConnector.OnStageConnect();
-  mOnStage = true;
+  if( mOnStageCount == 0 )
+  {
+    OnStageConnectMessage( GetEventThreadServices(), *mSceneObject );
+    mGeometryConnector.OnStageConnect();
+    mMaterialConnector.OnStageConnect();
+  }
+  ++mOnStageCount;
 }
 
 void Renderer::Disconnect()
 {
-  OnStageDisconnectMessage( GetEventThreadServices(), *mSceneObject);
-  mGeometryConnector.OnStageDisconnect();
-  mMaterialConnector.OnStageDisconnect();
-  mOnStage = false;
+  --mOnStageCount;
+  if( mOnStageCount == 0 )
+  {
+    OnStageDisconnectMessage( GetEventThreadServices(), *mSceneObject);
+    mGeometryConnector.OnStageDisconnect();
+    mMaterialConnector.OnStageDisconnect();
+  }
 }
 
 Renderer::Renderer()
 : mSceneObject(NULL),
   mDepthIndex(0),
-  mOnStage(false)
+  mOnStageCount(0)
 {
 }
 
index 77da3c6..50b57a8 100644 (file)
@@ -210,7 +210,7 @@ private: // data
   ObjectConnector<Geometry> mGeometryConnector; ///< Connector that holds the geometry used by this renderer
   ObjectConnector<Material> mMaterialConnector; ///< Connector that holds the material used by this renderer
   int mDepthIndex;
-  bool mOnStage;
+  int mOnStageCount;
 };
 
 } // namespace Internal