#include <dali/public-api/object/type-registry.h>
#include <dali/internal/event/common/thread-local-storage.h>
#include <dali/internal/event/images/image-factory.h>
+#include <dali/internal/event/images/bitmap-packed-pixel.h>
#include <dali/internal/event/resources/resource-client.h>
#include <dali/integration-api/bitmap.h>
#include <dali/integration-api/platform-abstraction.h>
{
bool uploadSuccess( false );
- if( Compatible(bufferImage.GetPixelFormat(),
- xOffset + bufferImage.GetWidth(),
- yOffset + bufferImage.GetHeight() ) )
+ if( IsInside( xOffset + bufferImage.GetWidth(), yOffset + bufferImage.GetHeight() ) )
{
AllocateAtlas();
ResourceId destId = GetResourceId();
- ResourceId srcId = bufferImage.GetResourceId();
- if( destId && srcId )
+ if( destId )
{
- mResourceClient.UploadBitmap( destId, srcId, xOffset, yOffset );
+ bufferImage.UploadBitmap( destId, xOffset, yOffset );
uploadSuccess = true;
}
}
Integration::BitmapPtr bitmap = LoadBitmap( url );
- if( bitmap && Compatible(bitmap->GetPixelFormat(), xOffset + bitmap->GetImageWidth(), yOffset + bitmap->GetImageHeight()) )
+ if( bitmap && IsInside( xOffset + bitmap->GetImageWidth(), yOffset + bitmap->GetImageHeight()) )
{
AllocateAtlas();
ResourceId destId = GetResourceId();
return uploadSuccess;
}
+bool Atlas::Upload( PixelDataPtr pixelData,
+ SizeType xOffset,
+ SizeType yOffset )
+{
+ bool uploadSuccess( false );
+ if( IsInside( xOffset + pixelData->GetWidth(), yOffset + pixelData->GetHeight() ) )
+ {
+ AllocateAtlas();
+ ResourceId destId = GetResourceId();
+
+ if( destId )
+ {
+ mResourceClient.UploadBitmap( destId, pixelData, xOffset, yOffset );
+ uploadSuccess = true;
+ }
+ }
+
+ return uploadSuccess;
+}
+
void Atlas::RecoverFromContextLoss()
{
ResourceId destId = GetResourceId();
}
}
-bool Atlas::Compatible( Pixel::Format pixelFormat,
- SizeType x,
- SizeType y )
+bool Atlas::IsInside( SizeType x, SizeType y )
{
- bool Compatible(false);
+ bool fit(false);
- if( mPixelFormat != pixelFormat )
+ if( x <= mWidth && y <= mHeight )
{
- DALI_LOG_ERROR( "Pixel format %d does not match Atlas format %d\n", pixelFormat, mPixelFormat );
+ fit = true;
}
else
{
- if( x <= mWidth && y <= mHeight )
- {
- Compatible = true;
- }
- else
- {
- DALI_LOG_ERROR( "image does not fit within the atlas \n" );
- }
+ DALI_LOG_ERROR( "image does not fit within the atlas \n" );
}
- return Compatible;
+ return fit;
}
void Atlas::AllocateAtlas()
if( !mTicket )
{
mTicket = mResourceClient.AllocateTexture( mWidth, mHeight, mPixelFormat );
+ mTicket->AddObserver( *this );
mImageFactory.RegisterForContextRecovery( this );
}
}
}
}
- RectArea area;
- imageData->Update(area);
-
mClearColor = color;
mClear = true;
- mResourceClient.UploadBitmap( destId, imageData->GetResourceId(), 0, 0 );
+
+ imageData->UploadBitmap( destId, 0, 0 );
}
}