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 078bd21..0a39c30 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 20ffdef..265115c 100644 (file)
@@ -28,6 +28,7 @@ namespace Internal
 {
 
 ImageConnector::ImageConnector()
+: mImage(NULL)
 {
 }