use modern construct 'nullptr' instead of 'NULL' or '0'
[platform/core/uifw/dali-core.git] / dali / internal / update / rendering / scene-graph-texture-set.cpp
index 7f28bd5..e2e7e4b 100644 (file)
 #include "scene-graph-texture-set.h"
 
 // INTERNAL HEADERS
-#include <dali/integration-api/resource-declarations.h>
 #include <dali/internal/common/internal-constants.h>
-#include <dali/internal/update/resources/texture-metadata.h>
-#include <dali/internal/update/resources/resource-manager.h>
 #include <dali/internal/common/memory-pool-object-allocator.h>
 #include <dali/internal/update/rendering/scene-graph-renderer.h>
 
@@ -47,138 +44,33 @@ TextureSet* TextureSet::New()
 
 TextureSet::TextureSet()
 : mSamplers(),
-  mTextureId(),
   mRenderers(),
-  mResourcesReady( true ),
-  mFinishedResourceAcquisition( true ),
-  mChanged( true ),
   mHasAlpha( false )
 {
 }
 
 TextureSet::~TextureSet()
 {
-}
-
-void TextureSet::operator delete( void* ptr )
-{
-  gTextureSetMemoryPool.FreeThreadSafe( static_cast<TextureSet*>( ptr ) );
-}
-
-void TextureSet::Prepare( const ResourceManager& resourceManager )
-{
-  if( mChanged && mTextures.Empty() )
+  for( auto&& renderer : mRenderers )
   {
-    unsigned int opaqueCount = 0;
-    unsigned int completeCount = 0;
-    unsigned int failedCount = 0;
-    unsigned int frameBufferCount = 0;
-    const std::size_t textureCount( mTextureId.Count() );
-    if( textureCount > 0 )
-    {
-      for( unsigned int i(0); i<textureCount; ++i )
-      {
-        const ResourceId textureId = mTextureId[ i ];
-        TextureMetadata* metadata = NULL;
-        if( textureId != Integration::InvalidResourceId )
-        {
-          // if there is metadata, resource is loaded
-          if( resourceManager.GetTextureMetadata( textureId, metadata ) )
-          {
-            DALI_ASSERT_DEBUG( metadata );
-            // metadata is valid pointer from now on
-            if( metadata->IsFullyOpaque() )
-            {
-              ++opaqueCount;
-            }
-
-            if( metadata->IsFramebuffer() )
-            {
-              if( metadata->HasFrameBufferBeenRenderedTo() )
-              {
-                ++completeCount;
-              }
-              else
-              {
-                frameBufferCount++;
-              }
-            }
-            else
-            {
-              // loaded so will complete this frame
-              ++completeCount;
-            }
-            // no point checking failure as there is no metadata for failed loads
-          }
-          // if no metadata, loading can be failed
-          else if( resourceManager.HasResourceLoadFailed( textureId ) )
-          {
-            ++failedCount;
-          }
-        }
-        else
-        {
-          //If the texture is not valid it is considerer opaque and complete
-          ++opaqueCount;
-          ++completeCount;
-        }
-      }
-    }
-
-    mHasAlpha = ( opaqueCount != textureCount );
-
-    // ready for rendering when all textures are either successfully loaded or they are FBOs
-    mResourcesReady = (completeCount + frameBufferCount >= textureCount);
-
-    // Texture set is complete if all resources are either loaded or failed or, if they are FBOs have been rendererd to
-    mFinishedResourceAcquisition = ( completeCount + failedCount == textureCount );
-
-    if( mFinishedResourceAcquisition )
-    {
-      // Texture set is now considered not changed
-      mChanged = false;
-    }
+    renderer->TextureSetDeleted();
   }
 }
 
-void TextureSet::SetImage( size_t index,  ResourceId imageId )
+void TextureSet::operator delete( void* ptr )
 {
-  size_t textureCount( mTextureId.Size() );
-  if( textureCount < index + 1 )
-  {
-    mTextureId.Resize( index + 1 );
-
-    bool samplerExist = true;
-    if( mSamplers.Size() < index + 1 )
-    {
-      mSamplers.Resize( index + 1 );
-      samplerExist = false;
-    }
-
-    for( size_t i(textureCount); i<=index; ++i )
-    {
-      mTextureId[i] = Integration::InvalidResourceId;
-      if( !samplerExist )
-      {
-        mSamplers[i] = NULL;
-      }
-    }
-  }
-
-  mTextureId[index] = imageId;
-  mChanged = true;
-  NotifyChangeToRenderers();
+  gTextureSetMemoryPool.FreeThreadSafe( static_cast<TextureSet*>( ptr ) );
 }
 
-void TextureSet::SetSampler( size_t index, Render::Sampler* sampler )
+void TextureSet::SetSampler( uint32_t index, Render::Sampler* sampler )
 {
-  size_t samplerCount( mSamplers.Size() );
+  const uint32_t samplerCount = static_cast<uint32_t>( mSamplers.Size() );
   if( samplerCount < index + 1 )
   {
     mSamplers.Resize( index + 1 );
-    for( size_t i(samplerCount); i<=index; ++i )
+    for( uint32_t i(samplerCount); i<=index; ++i )
     {
-      mSamplers[i] = NULL;
+      mSamplers[i] = nullptr;
     }
   }
 
@@ -186,9 +78,9 @@ void TextureSet::SetSampler( size_t index, Render::Sampler* sampler )
   NotifyChangeToRenderers();
 }
 
-void TextureSet::SetTexture( size_t index, Render::NewTexture* texture )
+void TextureSet::SetTexture( uint32_t index, Render::Texture* texture )
 {
-  const size_t textureCount( mTextures.Size() );
+  const uint32_t textureCount = static_cast<uint32_t>( mTextures.Size() );
   if( textureCount < index + 1 )
   {
     mTextures.Resize( index + 1 );
@@ -200,19 +92,23 @@ void TextureSet::SetTexture( size_t index, Render::NewTexture* texture )
       samplerExist = false;
     }
 
-    for( size_t i(textureCount); i<=index; ++i )
+    for( uint32_t i(textureCount); i<=index; ++i )
     {
-      mTextures[i] = 0;
+      mTextures[i] = nullptr;
 
       if( !samplerExist )
       {
-        mSamplers[i] = 0;
+        mSamplers[i] = nullptr;
       }
     }
   }
 
   mTextures[index] = texture;
-  mHasAlpha |= texture->HasAlphaChannel();
+  if( texture )
+  {
+    mHasAlpha |= texture->HasAlphaChannel();
+  }
+
   NotifyChangeToRenderers();
 }
 
@@ -221,18 +117,11 @@ bool TextureSet::HasAlpha() const
   return mHasAlpha;
 }
 
-void TextureSet::GetResourcesStatus( bool& resourcesReady, bool& finishedResourceAcquisition )
-{
-  resourcesReady = mResourcesReady;
-  finishedResourceAcquisition = mFinishedResourceAcquisition;
-}
-
 void TextureSet::AddObserver( Renderer* renderer )
 {
-  size_t rendererCount( mRenderers.Size() );
-  for( size_t i(0); i<rendererCount; ++i )
+  for( auto&& element : mRenderers )
   {
-    if( mRenderers[i] == renderer )
+    if( element == renderer )
     {
       //Renderer already in the list
       return;
@@ -244,12 +133,11 @@ void TextureSet::AddObserver( Renderer* renderer )
 
 void TextureSet::RemoveObserver( Renderer* renderer )
 {
-  size_t rendererCount( mRenderers.Size() );
-  for( size_t i(0); i<rendererCount; ++i )
+  for( auto&& iter = mRenderers.Begin(), end = mRenderers.End(); iter != end; ++iter )
   {
-    if( mRenderers[i] == renderer )
+    if( *iter == renderer )
     {
-      mRenderers.Remove( mRenderers.Begin() + i );
+      mRenderers.Remove( iter );
       return;
     }
   }
@@ -257,10 +145,9 @@ void TextureSet::RemoveObserver( Renderer* renderer )
 
 void TextureSet::NotifyChangeToRenderers()
 {
-  size_t rendererCount = mRenderers.Size();
-  for( size_t i(0); i<rendererCount; ++i )
+  for( auto&& element : mRenderers )
   {
-    mRenderers[i]->TextureSetChanged();
+    element->TextureSetChanged();
   }
 }