projects
/
platform
/
core
/
uifw
/
dali-toolkit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Disabled Atlasing for ImageVisuals to prevent bluring
[platform/core/uifw/dali-toolkit.git]
/
dali-toolkit
/
internal
/
visuals
/
image
/
image-visual.cpp
diff --git
a/dali-toolkit/internal/visuals/image/image-visual.cpp
b/dali-toolkit/internal/visuals/image/image-visual.cpp
index
812e854
..
16b6eb2
100644
(file)
--- a/
dali-toolkit/internal/visuals/image/image-visual.cpp
+++ b/
dali-toolkit/internal/visuals/image/image-visual.cpp
@@
-18,18
+18,20
@@
// CLASS HEADER
#include <dali-toolkit/internal/visuals/image/image-visual.h>
// CLASS HEADER
#include <dali-toolkit/internal/visuals/image/image-visual.h>
-// EXTERNAL HEADER
-#include <cstring> // for str
ncasecmp
+// EXTERNAL HEADER
S
+#include <cstring> // for str
len()
#include <dali/public-api/images/resource-image.h>
#include <dali/public-api/images/native-image.h>
#include <dali/devel-api/images/texture-set-image.h>
#include <dali/devel-api/adaptor-framework/bitmap-loader.h>
#include <dali/public-api/images/resource-image.h>
#include <dali/public-api/images/native-image.h>
#include <dali/devel-api/images/texture-set-image.h>
#include <dali/devel-api/adaptor-framework/bitmap-loader.h>
+#include <dali/devel-api/adaptor-framework/image-loading.h>
#include <dali/devel-api/scripting/enum-helper.h>
#include <dali/devel-api/scripting/scripting.h>
#include <dali/integration-api/debug.h>
#include <dali/devel-api/scripting/enum-helper.h>
#include <dali/devel-api/scripting/scripting.h>
#include <dali/integration-api/debug.h>
-// INTERNAL HEADER
+// INTERNAL HEADER
S
#include <dali-toolkit/public-api/visuals/image-visual-properties.h>
#include <dali-toolkit/public-api/visuals/image-visual-properties.h>
+#include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
#include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
#include <dali-toolkit/internal/visuals/visual-string-constants.h>
#include <dali-toolkit/internal/visuals/visual-factory-impl.h>
#include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
#include <dali-toolkit/internal/visuals/visual-string-constants.h>
#include <dali-toolkit/internal/visuals/visual-factory-impl.h>
@@
-37,6
+39,7
@@
#include <dali-toolkit/internal/visuals/visual-base-impl.h>
#include <dali-toolkit/internal/visuals/image-atlas-manager.h>
#include <dali-toolkit/internal/visuals/visual-base-data-impl.h>
#include <dali-toolkit/internal/visuals/visual-base-impl.h>
#include <dali-toolkit/internal/visuals/image-atlas-manager.h>
#include <dali-toolkit/internal/visuals/visual-base-data-impl.h>
+#include <dali-toolkit/internal/visuals/visual-url.h>
namespace Dali
{
namespace Dali
{
@@
-49,8
+52,6
@@
namespace Internal
namespace
{
namespace
{
-const char HTTP_URL[] = "http://";
-const char HTTPS_URL[] = "https://";
// property names
const char * const IMAGE_FITTING_MODE( "fittingMode" );
// property names
const char * const IMAGE_FITTING_MODE( "fittingMode" );
@@
-58,6
+59,7
@@
const char * const IMAGE_SAMPLING_MODE( "samplingMode" );
const char * const IMAGE_DESIRED_WIDTH( "desiredWidth" );
const char * const IMAGE_DESIRED_HEIGHT( "desiredHeight" );
const char * const SYNCHRONOUS_LOADING( "synchronousLoading" );
const char * const IMAGE_DESIRED_WIDTH( "desiredWidth" );
const char * const IMAGE_DESIRED_HEIGHT( "desiredHeight" );
const char * const SYNCHRONOUS_LOADING( "synchronousLoading" );
+const char * const IMAGE_ATLASING("atlasing");
// fitting modes
DALI_ENUM_TO_STRING_TABLE_BEGIN( FITTING_MODE )
// fitting modes
DALI_ENUM_TO_STRING_TABLE_BEGIN( FITTING_MODE )
@@
-213,7
+215,7
@@
Geometry CreateGeometry( VisualFactoryCache& factoryCache, ImageDimensions gridS
} // unnamed namespace
ImageVisualPtr ImageVisual::New( VisualFactoryCache& factoryCache,
} // unnamed namespace
ImageVisualPtr ImageVisual::New( VisualFactoryCache& factoryCache,
- const
std::string
& imageUrl,
+ const
VisualUrl
& imageUrl,
const Property::Map& properties,
ImageDimensions size,
FittingMode::Type fittingMode,
const Property::Map& properties,
ImageDimensions size,
FittingMode::Type fittingMode,
@@
-225,7
+227,7
@@
ImageVisualPtr ImageVisual::New( VisualFactoryCache& factoryCache,
}
ImageVisualPtr ImageVisual::New( VisualFactoryCache& factoryCache,
}
ImageVisualPtr ImageVisual::New( VisualFactoryCache& factoryCache,
- const
std::string
& imageUrl,
+ const
VisualUrl
& imageUrl,
ImageDimensions size,
FittingMode::Type fittingMode,
Dali::SamplingMode::Type samplingMode )
ImageDimensions size,
FittingMode::Type fittingMode,
Dali::SamplingMode::Type samplingMode )
@@
-239,7
+241,7
@@
ImageVisualPtr ImageVisual::New( VisualFactoryCache& factoryCache, const Image&
}
ImageVisual::ImageVisual( VisualFactoryCache& factoryCache,
}
ImageVisual::ImageVisual( VisualFactoryCache& factoryCache,
- const
std::string
& imageUrl,
+ const
VisualUrl
& imageUrl,
ImageDimensions size,
FittingMode::Type fittingMode,
Dali::SamplingMode::Type samplingMode )
ImageDimensions size,
FittingMode::Type fittingMode,
Dali::SamplingMode::Type samplingMode )
@@
-253,7
+255,8
@@
ImageVisual::ImageVisual( VisualFactoryCache& factoryCache,
mFittingMode( fittingMode ),
mSamplingMode( samplingMode ),
mWrapModeU( WrapMode::DEFAULT ),
mFittingMode( fittingMode ),
mSamplingMode( samplingMode ),
mWrapModeU( WrapMode::DEFAULT ),
- mWrapModeV( WrapMode::DEFAULT )
+ mWrapModeV( WrapMode::DEFAULT ),
+ mAttemptAtlasing( false )
{
}
{
}
@@
-268,7
+271,8
@@
ImageVisual::ImageVisual( VisualFactoryCache& factoryCache, const Image& image )
mFittingMode( FittingMode::DEFAULT ),
mSamplingMode( SamplingMode::DEFAULT ),
mWrapModeU( WrapMode::DEFAULT ),
mFittingMode( FittingMode::DEFAULT ),
mSamplingMode( SamplingMode::DEFAULT ),
mWrapModeU( WrapMode::DEFAULT ),
- mWrapModeV( WrapMode::DEFAULT )
+ mWrapModeV( WrapMode::DEFAULT ),
+ mAttemptAtlasing( false )
{
}
{
}
@@
-320,10
+324,14
@@
void ImageVisual::DoSetProperties( const Property::Map& propertyMap )
{
DoSetProperty( Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING, keyValue.second );
}
{
DoSetProperty( Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING, keyValue.second );
}
+ else if ( keyValue.first == IMAGE_ATLASING )
+ {
+ DoSetProperty( Toolkit::DevelImageVisual::Property::ATLASING, keyValue.second );
+ }
}
}
}
}
- if(
mImpl->mFlags & Impl::IS_SYNCHRONOUS_RESOURCE_LOADING && mImageUrl.size() > 0u
)
+ if(
( mImpl->mFlags & Impl::IS_SYNCHRONOUS_RESOURCE_LOADING ) && mImageUrl.IsValid()
)
{
// if sync loading is required, the loading should start
// immediately when new image url is set or the actor is off stage
{
// if sync loading is required, the loading should start
// immediately when new image url is set or the actor is off stage
@@
-423,6
+431,12
@@
void ImageVisual::DoSetProperty( Property::Index index, const Property::Value& v
mWrapModeV = Dali::WrapMode::Type( wrapMode );
break;
}
mWrapModeV = Dali::WrapMode::Type( wrapMode );
break;
}
+
+ case Toolkit::DevelImageVisual::Property::ATLASING:
+ {
+ bool atlasing = false;
+ mAttemptAtlasing = value.Get( atlasing );
+ }
}
}
}
}
@@
-440,9
+454,9
@@
void ImageVisual::GetNaturalSize( Vector2& naturalSize )
naturalSize.y = mDesiredSize.GetHeight();
return;
}
naturalSize.y = mDesiredSize.GetHeight();
return;
}
- else if(
!mImageUrl.empty()
)
+ else if(
mImageUrl.IsValid() && mImageUrl.GetLocation() == VisualUrl::LOCAL
)
{
{
- ImageDimensions dimentions =
ResourceImage::GetImageSize( mImageUrl
);
+ ImageDimensions dimentions =
Dali::GetClosestImageSize( mImageUrl.GetUrl()
);
naturalSize.x = dimentions.GetWidth();
naturalSize.y = dimentions.GetHeight();
return;
naturalSize.x = dimentions.GetWidth();
naturalSize.y = dimentions.GetHeight();
return;
@@
-553,15
+567,15
@@
bool ImageVisual::IsSynchronousResourceLoading() const
void ImageVisual::LoadResourceSynchronously()
{
void ImageVisual::LoadResourceSynchronously()
{
- if(
!mImageUrl.empty
() )
+ if(
mImageUrl.IsValid
() )
{
{
- BitmapLoader loader = BitmapLoader::New( mImageUrl, mDesiredSize, mFittingMode, mSamplingMode );
+ BitmapLoader loader = BitmapLoader::New( mImageUrl
.GetUrl()
, mDesiredSize, mFittingMode, mSamplingMode );
loader.Load();
mPixels = loader.GetPixelData();
}
}
loader.Load();
mPixels = loader.GetPixelData();
}
}
-TextureSet ImageVisual::CreateTextureSet( Vector4& textureRect,
const std::string& url,
bool synchronousLoading, bool attemptAtlasing )
+TextureSet ImageVisual::CreateTextureSet( Vector4& textureRect, bool synchronousLoading, bool attemptAtlasing )
{
TextureSet textureSet;
textureRect = FULL_TEXTURE_RECT;
{
TextureSet textureSet;
textureRect = FULL_TEXTURE_RECT;
@@
-595,13
+609,13
@@
TextureSet ImageVisual::CreateTextureSet( Vector4& textureRect, const std::strin
{
if( attemptAtlasing )
{
{
if( attemptAtlasing )
{
- textureSet = mFactoryCache.GetAtlasManager()->Add(
textureRect, url
, mDesiredSize, mFittingMode, true, this );
+ textureSet = mFactoryCache.GetAtlasManager()->Add(
textureRect, mImageUrl.GetUrl()
, mDesiredSize, mFittingMode, true, this );
mImpl->mFlags |= Impl::IS_ATLASING_APPLIED;
}
if( !textureSet ) // big image, no atlasing or atlasing failed
{
mImpl->mFlags &= ~Impl::IS_ATLASING_APPLIED;
mImpl->mFlags |= Impl::IS_ATLASING_APPLIED;
}
if( !textureSet ) // big image, no atlasing or atlasing failed
{
mImpl->mFlags &= ~Impl::IS_ATLASING_APPLIED;
- ResourceImage resourceImage = Dali::ResourceImage::New(
url
, mDesiredSize, mFittingMode, mSamplingMode );
+ ResourceImage resourceImage = Dali::ResourceImage::New(
mImageUrl.GetUrl()
, mDesiredSize, mFittingMode, mSamplingMode );
resourceImage.LoadingFinishedSignal().Connect( this, &ImageVisual::OnImageLoaded );
textureSet = TextureSet::New();
TextureSetImage( textureSet, 0u, resourceImage );
resourceImage.LoadingFinishedSignal().Connect( this, &ImageVisual::OnImageLoaded );
textureSet = TextureSet::New();
TextureSetImage( textureSet, 0u, resourceImage );
@@
-617,21
+631,18
@@
TextureSet ImageVisual::CreateTextureSet( Vector4& textureRect, const std::strin
return textureSet;
}
return textureSet;
}
-void ImageVisual::InitializeRenderer(
const std::string& imageUrl
)
+void ImageVisual::InitializeRenderer()
{
{
- mImageUrl = imageUrl;
mImpl->mFlags &= ~Impl::IS_ATLASING_APPLIED;
mImpl->mFlags &= ~Impl::IS_ATLASING_APPLIED;
- if( !mImpl->mCustomShader &&
- ( strncasecmp( imageUrl.c_str(), HTTP_URL, sizeof(HTTP_URL) -1 ) != 0 ) && // dont atlas remote images
- ( strncasecmp( imageUrl.c_str(), HTTPS_URL, sizeof(HTTPS_URL) -1 ) != 0 ) )
+ if( !mImpl->mCustomShader && mImageUrl.GetLocation() == VisualUrl::LOCAL )
{
bool defaultWrapMode = mWrapModeU <= WrapMode::CLAMP_TO_EDGE && mWrapModeV <= WrapMode::CLAMP_TO_EDGE;
Vector4 atlasRect;
// texture set has to be created first as we need to know if atlasing succeeded or not
// when selecting the shader
{
bool defaultWrapMode = mWrapModeU <= WrapMode::CLAMP_TO_EDGE && mWrapModeV <= WrapMode::CLAMP_TO_EDGE;
Vector4 atlasRect;
// texture set has to be created first as we need to know if atlasing succeeded or not
// when selecting the shader
- TextureSet textures = CreateTextureSet( atlasRect,
imageUrl, IsSynchronousResourceLoading(), true
);
+ TextureSet textures = CreateTextureSet( atlasRect,
IsSynchronousResourceLoading(), mAttemptAtlasing
);
CreateRenderer( textures );
if( mImpl->mFlags & Impl::IS_ATLASING_APPLIED ) // the texture is packed inside atlas
CreateRenderer( textures );
if( mImpl->mFlags & Impl::IS_ATLASING_APPLIED ) // the texture is packed inside atlas
@@
-649,7
+660,7
@@
void ImageVisual::InitializeRenderer( const std::string& imageUrl )
{
// for custom shader or remote image, atlas is not applied
Vector4 atlasRect; // ignored in this case
{
// for custom shader or remote image, atlas is not applied
Vector4 atlasRect; // ignored in this case
- TextureSet textures = CreateTextureSet( atlasRect,
imageUrl,
IsSynchronousResourceLoading(), false );
+ TextureSet textures = CreateTextureSet( atlasRect, IsSynchronousResourceLoading(), false );
CreateRenderer( textures );
}
}
CreateRenderer( textures );
}
}
@@
-689,9
+700,9
@@
void ImageVisual::UploadCompleted()
void ImageVisual::DoSetOnStage( Actor& actor )
{
void ImageVisual::DoSetOnStage( Actor& actor )
{
- if(
!mImageUrl.empty
() )
+ if(
mImageUrl.IsValid
() )
{
{
- InitializeRenderer(
mImageUrl
);
+ InitializeRenderer();
}
else if ( mImage )
{
}
else if ( mImage )
{
@@
-723,9
+734,9
@@
void ImageVisual::DoSetOffStage( Actor& actor )
//If we own the image then make sure we release it when we go off stage
actor.RemoveRenderer( mImpl->mRenderer);
//If we own the image then make sure we release it when we go off stage
actor.RemoveRenderer( mImpl->mRenderer);
- if(
!mImageUrl.empty
() )
+ if(
mImageUrl.IsValid
() )
{
{
- RemoveFromAtlas(
mImageUrl
);
+ RemoveFromAtlas(
mImageUrl.GetUrl()
);
mImage.Reset();
}
mImage.Reset();
}
@@
-740,9
+751,9
@@
void ImageVisual::DoCreatePropertyMap( Property::Map& map ) const
bool sync = IsSynchronousResourceLoading();
map.Insert( SYNCHRONOUS_LOADING, sync );
bool sync = IsSynchronousResourceLoading();
map.Insert( SYNCHRONOUS_LOADING, sync );
- if(
!mImageUrl.empty
() )
+ if(
mImageUrl.IsValid
() )
{
{
- map.Insert( Toolkit::ImageVisual::Property::URL, mImageUrl );
+ map.Insert( Toolkit::ImageVisual::Property::URL, mImageUrl
.GetUrl()
);
map.Insert( Toolkit::ImageVisual::Property::DESIRED_WIDTH, mDesiredSize.GetWidth() );
map.Insert( Toolkit::ImageVisual::Property::DESIRED_HEIGHT, mDesiredSize.GetHeight() );
}
map.Insert( Toolkit::ImageVisual::Property::DESIRED_WIDTH, mDesiredSize.GetWidth() );
map.Insert( Toolkit::ImageVisual::Property::DESIRED_HEIGHT, mDesiredSize.GetHeight() );
}
@@
-764,13
+775,15
@@
void ImageVisual::DoCreatePropertyMap( Property::Map& map ) const
map.Insert( Toolkit::ImageVisual::Property::PIXEL_AREA, mPixelArea );
map.Insert( Toolkit::ImageVisual::Property::WRAP_MODE_U, mWrapModeU );
map.Insert( Toolkit::ImageVisual::Property::WRAP_MODE_V, mWrapModeV );
map.Insert( Toolkit::ImageVisual::Property::PIXEL_AREA, mPixelArea );
map.Insert( Toolkit::ImageVisual::Property::WRAP_MODE_U, mWrapModeU );
map.Insert( Toolkit::ImageVisual::Property::WRAP_MODE_V, mWrapModeV );
+
+ map.Insert( Toolkit::DevelImageVisual::Property::ATLASING, mAttemptAtlasing );
}
void ImageVisual::DoCreateInstancePropertyMap( Property::Map& map ) const
{
map.Clear();
map.Insert( Toolkit::DevelVisual::Property::TYPE, Toolkit::Visual::IMAGE );
}
void ImageVisual::DoCreateInstancePropertyMap( Property::Map& map ) const
{
map.Clear();
map.Insert( Toolkit::DevelVisual::Property::TYPE, Toolkit::Visual::IMAGE );
- if(
!mImageUrl.empty
() )
+ if(
mImageUrl.IsValid
() )
{
map.Insert( Toolkit::ImageVisual::Property::DESIRED_WIDTH, mDesiredSize.GetWidth() );
map.Insert( Toolkit::ImageVisual::Property::DESIRED_HEIGHT, mDesiredSize.GetHeight() );
{
map.Insert( Toolkit::ImageVisual::Property::DESIRED_WIDTH, mDesiredSize.GetWidth() );
map.Insert( Toolkit::ImageVisual::Property::DESIRED_HEIGHT, mDesiredSize.GetHeight() );