Fixed samplers using images with a load policy of ON_DEMAND 89/38689/3
authorDavid Steele <david.steele@partner.samsung.com>
Fri, 24 Apr 2015 12:29:59 +0000 (13:29 +0100)
committerDavid Steele <david.steele@partner.samsung.com>
Tue, 28 Apr 2015 11:59:52 +0000 (12:59 +0100)
Images that have an ON_DEMAND policy, such as ResourceImage and Atlas
delay getting their resource ticket until they are staged. Sampler
should not attempt to read the resource Id until the image has been
connected.

Change-Id: I20772d1505eb92256e937363f14c70ac73d238ab
Signed-off-by: David Steele <david.steele@partner.samsung.com>
dali/internal/event/effects/sampler-impl.cpp
dali/internal/event/images/image-connector.cpp

index 078bd21f922c9ddda2a2145c9157c8c95e6991fd..0a39c3078d43843ee3be91938492b880f109f443 100644 (file)
@@ -66,8 +66,14 @@ void Sampler::SetImage( ImagePtr& image )
   mImageConnector.Set( image, OnStage() );
 
   // sceneObject is being used in a separate thread; queue a message to set
-  unsigned int resourceId = image->GetResourceId();
-  SetTextureMessage( GetEventThreadServices(), *mSceneObject, resourceId );
+  if( mOnStage )
+  {
+    unsigned int resourceId = image->GetResourceId();
+    if( resourceId != 0 )
+    {
+      SetTextureMessage( GetEventThreadServices(), *mSceneObject, resourceId );
+    }
+  }
 }
 
 void Sampler::SetFilterMode( Dali::Sampler::FilterMode minFilter, Dali::Sampler::FilterMode magFilter )
@@ -313,6 +319,10 @@ void Sampler::Connect()
   mOnStage = true;
 
   mImageConnector.OnStageConnect();
+
+  // sceneObject is being used in a separate thread; queue a message to set
+  unsigned int resourceId = mImageConnector.Get()->GetResourceId();
+  SetTextureMessage( GetEventThreadServices(), *mSceneObject, resourceId );
 }
 
 void Sampler::Disconnect()
index 20ffdefdbe61685026afea7568435f32bb341d37..265115c75d11f7c4bb086b5219b74216ab4efdcc 100644 (file)
@@ -28,6 +28,7 @@ namespace Internal
 {
 
 ImageConnector::ImageConnector()
+: mImage(NULL)
 {
 }