[Tizen] Regenerating uniform maps fix
[platform/core/uifw/dali-core.git] / dali / internal / update / rendering / scene-graph-renderer.cpp
index 98f81ef..6ce9e50 100755 (executable)
@@ -112,7 +112,8 @@ enum Flags
   RESEND_STENCIL_OPERATION_ON_FAIL   = 1 << 15,
   RESEND_STENCIL_OPERATION_ON_Z_FAIL = 1 << 16,
   RESEND_STENCIL_OPERATION_ON_Z_PASS = 1 << 17,
-  RESEND_WRITE_TO_COLOR_BUFFER       = 1 << 18
+  RESEND_WRITE_TO_COLOR_BUFFER       = 1 << 18,
+  RESEND_SHADER                      = 1 << 19,
 };
 
 } // Anonymous namespace
@@ -176,6 +177,7 @@ void Renderer::operator delete( void* ptr )
 
 void Renderer::PrepareRender( BufferIndex updateBufferIndex )
 {
+  SetDirty( false );
   if( mRegenerateUniformMap == UNIFORM_MAP_READY )
   {
     mUniformMapChanged[updateBufferIndex] = false;
@@ -344,6 +346,13 @@ void Renderer::PrepareRender( BufferIndex updateBufferIndex )
       new (slot) DerivedType( mRenderer, &Render::Renderer::SetStencilOperationOnZPass, mStencilParameters.stencilOperationOnZPass );
     }
 
+    if( mResendFlag & RESEND_SHADER )
+    {
+      typedef MessageValue1< Render::Renderer, bool > DerivedType;
+      uint32_t* slot = mSceneController->GetRenderQueue().ReserveMessageSlot( updateBufferIndex, sizeof( DerivedType ) );
+      new (slot) DerivedType( mRenderer, &Render::Renderer::SetShaderChanged, true );
+    }
+
     mResendFlag = 0;
   }
 }
@@ -376,7 +385,7 @@ void Renderer::SetShader( Shader* shader )
   mShader = shader;
   mShader->AddConnectionObserver( *this );
   mRegenerateUniformMap = REGENERATE_UNIFORM_MAP;
-  mResendFlag |= RESEND_GEOMETRY;
+  mResendFlag |= RESEND_GEOMETRY | RESEND_SHADER;
 
   if( mRenderDataProvider )
   {
@@ -774,31 +783,34 @@ void Renderer::SetDirty( bool value )
 bool Renderer::IsDirty() const
 {
   bool ret = false;
-  if( mShader )
-  {
-    ret = mShader->IsPropertyDirty();
-  }
 
-  // check native image
-  if( mTextureSet )
+  if( !mDirty )
   {
-    uint32_t textureCount = mTextureSet->GetTextureCount();
+    if( mShader )
+    {
+      ret = mShader->IsPropertyDirty();
+    }
 
-    if(textureCount > 0)
+    // check native image
+    if( !ret && mTextureSet )
     {
-      Dali::Internal::Render::Texture* texture;
-      for( uint32_t i = 0; i<textureCount; ++i )
+      uint32_t textureCount = mTextureSet->GetTextureCount();
+
+      if(textureCount > 0)
       {
-        texture = const_cast<Dali::Internal::SceneGraph::TextureSet *>(mTextureSet)->GetTexture(i);
-        if( texture && texture->IsNativeImage() )
+        Dali::Internal::Render::Texture* texture;
+        for( uint32_t i = 0; i<textureCount; ++i )
         {
-          ret = true;
-          break;
+          texture = const_cast<Dali::Internal::SceneGraph::TextureSet *>(mTextureSet)->GetTexture(i);
+          if( texture && texture->IsNativeImage() )
+          {
+            ret = true;
+            break;
+          }
         }
       }
     }
   }
-
   return ret | mDirty;
 }