Fix bug in TextureSet 73/98773/3
authorFerran Sole <ferran.sole@samsung.com>
Fri, 18 Nov 2016 15:52:56 +0000 (15:52 +0000)
committerFerran Sole <ferran.sole@samsung.com>
Fri, 18 Nov 2016 16:45:05 +0000 (16:45 +0000)
TextureSet was resizing Image and NewTexture vectors when a new sampler
was added which wasn't the right thing to do

Change-Id: I8e2fc233e2fdbb50a8c370f32ba534397c769c3c

automated-tests/src/dali/utc-Dali-TextureSet.cpp
dali/internal/event/rendering/texture-set-impl.cpp
dali/internal/update/rendering/scene-graph-texture-set.cpp

index cc20a6c..2d1464d 100644 (file)
@@ -313,7 +313,7 @@ int UtcDaliTextureSetGetSampler(void)
   END_TEST;
 }
 
-int UtcDaliTextureGetTextureCount0(void)
+int UtcDaliTextureSetGetTextureCount0(void)
 {
   TestApplication application;
 
@@ -327,13 +327,19 @@ int UtcDaliTextureGetTextureCount0(void)
   TextureSetImage( textureSet, 1u, image );
   DALI_TEST_EQUALS( textureSet.GetTextureCount(), 2u, TEST_LOCATION );
 
-  textureSet.SetSampler( 2u, Sampler::New() );
+  Sampler sampler = Sampler::New();
+  sampler.SetFilterMode( FilterMode::NEAREST, FilterMode::NEAREST );
+  textureSet.SetSampler( 2u, sampler );
+  DALI_TEST_EQUALS( textureSet.GetTextureCount(), 2u, TEST_LOCATION );
+
+  TextureSetImage( textureSet, 2u, image );
   DALI_TEST_EQUALS( textureSet.GetTextureCount(), 3u, TEST_LOCATION );
+  DALI_TEST_EQUALS( textureSet.GetSampler(2u), sampler, TEST_LOCATION );
 
   END_TEST;
 }
 
-int UtcDaliTextureGetTextureCount1(void)
+int UtcDaliTextureSetGetTextureCount1(void)
 {
   TestApplication application;
 
@@ -347,8 +353,15 @@ int UtcDaliTextureGetTextureCount1(void)
   textureSet.SetTexture( 1u, texture );
   DALI_TEST_EQUALS( textureSet.GetTextureCount(), 2u, TEST_LOCATION );
 
-  textureSet.SetSampler( 2u, Sampler::New() );
+  Sampler sampler = Sampler::New();
+  sampler.SetFilterMode( FilterMode::NEAREST, FilterMode::NEAREST );
+  textureSet.SetSampler( 2u, sampler );
+  DALI_TEST_EQUALS( textureSet.GetTextureCount(), 2u, TEST_LOCATION );
+
+  textureSet.SetTexture( 2u, texture );
   DALI_TEST_EQUALS( textureSet.GetTextureCount(), 3u, TEST_LOCATION );
+  DALI_TEST_EQUALS( textureSet.GetSampler(2u), sampler, TEST_LOCATION );
+
 
   END_TEST;
 }
index 428ab9e..2b12fb1 100644 (file)
@@ -55,11 +55,23 @@ void TextureSet::SetImage( size_t index, ImagePtr image )
   else
   {
     mImages.resize(index + 1);
+
+    bool samplerExist = true;
+    if( mSamplers.size() < index + 1 )
+    {
+      mSamplers.resize( index + 1 );
+      samplerExist = false;
+    }
+
     mSamplers.resize(index + 1);
     for( size_t i(textureCount); i<=index; ++i )
     {
       mImages[i] = NULL;
-      mSamplers[i] = NULL;
+
+      if( !samplerExist )
+      {
+        mSamplers[i] = NULL;
+      }
     }
   }
   mImages[index] = image;
@@ -91,11 +103,22 @@ void TextureSet::SetTexture( size_t index, NewTexturePtr texture )
   if( index >= textureCount )
   {
     mNewTextures.resize(index + 1);
-    mSamplers.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 )
     {
       mNewTextures[i] = NULL;
-      mSamplers[i] = NULL;
+
+      if( !samplerExist )
+      {
+        mSamplers[i] = NULL;
+      }
     }
   }
 
@@ -146,13 +169,9 @@ void TextureSet::SetSampler( size_t index, SamplerPtr sampler )
   if( samplerCount < index + 1  )
   {
     mSamplers.resize( index + 1 );
-    mNewTextures.resize( index + 1 );
-    mImages.resize( index + 1 );
     for( size_t i(samplerCount); i<=index; ++i )
     {
-      mImages[i] = NULL;
       mSamplers[i] = NULL;
-      mNewTextures[i] = NULL;
     }
   }
 
@@ -184,7 +203,7 @@ Sampler* TextureSet::GetSampler( size_t index ) const
 
 size_t TextureSet::GetTextureCount() const
 {
-  return mSamplers.size();
+  return mImages.size() + mNewTextures.size();
 }
 
 const SceneGraph::TextureSet* TextureSet::GetTextureSetSceneObject() const
index 90554a1..7f28bd5 100644 (file)
@@ -147,11 +147,21 @@ void TextureSet::SetImage( size_t index,  ResourceId imageId )
   if( textureCount < index + 1 )
   {
     mTextureId.Resize( index + 1 );
-    mSamplers.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;
-      mSamplers[i] = NULL;
+      if( !samplerExist )
+      {
+        mSamplers[i] = NULL;
+      }
     }
   }
 
@@ -166,10 +176,8 @@ void TextureSet::SetSampler( size_t index, Render::Sampler* sampler )
   if( samplerCount < index + 1 )
   {
     mSamplers.Resize( index + 1 );
-    mTextureId.Resize( index + 1 );
     for( size_t i(samplerCount); i<=index; ++i )
     {
-      mTextureId[i] = Integration::InvalidResourceId;
       mSamplers[i] = NULL;
     }
   }
@@ -184,12 +192,22 @@ void TextureSet::SetTexture( size_t index, Render::NewTexture* texture )
   if( textureCount < index + 1 )
   {
     mTextures.Resize( index + 1 );
-    mSamplers.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 )
     {
       mTextures[i] = 0;
-      mSamplers[i] = 0;
+
+      if( !samplerExist )
+      {
+        mSamplers[i] = 0;
+      }
     }
   }