From c46c71ad6367e90da584952677f44a97723156f0 Mon Sep 17 00:00:00 2001 From: Agnelo Vaz Date: Mon, 27 Mar 2017 16:56:26 +0100 Subject: [PATCH] Disable Image Visual Pixel alignment when using Layer3D Change-Id: Ida27856c20e86ba039ed256b56d4df36bedfbbf3 --- .../internal/visuals/image/image-visual.cpp | 25 +++++++++++++++++----- dali-toolkit/internal/visuals/image/image-visual.h | 3 +++ .../internal/visuals/visual-string-constants.cpp | 1 + .../internal/visuals/visual-string-constants.h | 2 ++ 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/dali-toolkit/internal/visuals/image/image-visual.cpp b/dali-toolkit/internal/visuals/image/image-visual.cpp index 5c8a004..3c82d75 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.cpp +++ b/dali-toolkit/internal/visuals/image/image-visual.cpp @@ -20,6 +20,7 @@ // EXTERNAL HEADERS #include // for strlen() +#include #include #include #include @@ -93,6 +94,9 @@ const Vector4 FULL_TEXTURE_RECT(0.f, 0.f, 1.f, 1.f); const char* DEFAULT_SAMPLER_TYPENAME = "sampler2D"; +const float PIXEL_ALIGN_ON = 1.0f; +const float PIXEL_ALIGN_OFF = 0.0f; + const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( attribute mediump vec2 aPosition;\n uniform mediump mat4 uModelMatrix;\n @@ -101,27 +105,28 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( uniform mediump vec3 uSize;\n uniform mediump vec4 pixelArea; varying mediump vec2 vTexCoord;\n + uniform lowp float uPixelAligned;\n \n - //Visual size and offset uniform mediump vec2 offset;\n uniform mediump vec2 size;\n uniform mediump vec4 offsetSizeMode;\n uniform mediump vec2 origin;\n uniform mediump vec2 anchorPoint;\n - +\n vec4 ComputeVertexPosition()\n {\n vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );\n vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n return vec4( (aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 );\n }\n - +\n void main()\n {\n mediump vec4 vertexPosition = uViewMatrix * uModelMatrix * ComputeVertexPosition();\n - vertexPosition.xy = floor ( vertexPosition.xy );\n // Pixel alignment - vertexPosition = uProjection * vertexPosition;\n + vec4 alignedVertexPosition = vertexPosition;\n + alignedVertexPosition.xy = floor ( vertexPosition.xy );\n // Pixel alignment + vertexPosition = uProjection * mix( vertexPosition, alignedVertexPosition, uPixelAligned );\n vTexCoord = pixelArea.xy+pixelArea.zw*(aPosition + vec2(0.5) );\n gl_Position = vertexPosition;\n }\n @@ -501,6 +506,8 @@ void ImageVisual::CreateRenderer( TextureSet& textures ) } } + shader.RegisterProperty( PIXEL_ALIGNED_UNIFORM_NAME, PIXEL_ALIGN_ON ); // Set default to align + mImpl->mRenderer = Renderer::New( geometry, shader ); DALI_ASSERT_DEBUG( textures ); mImpl->mRenderer.SetTextures( textures ); @@ -720,6 +727,14 @@ void ImageVisual::DoSetOnStage( Actor& actor ) mPlacementActor = actor; + // Search the Actor tree to find if Layer UI behaviour set. + Layer layer = actor.GetLayer(); + if ( layer && layer.GetBehavior() == Layer::LAYER_3D ) + { + // Layer 3D set, do not align pixels + mImpl->mRenderer.RegisterProperty( PIXEL_ALIGNED_UNIFORM_NAME, PIXEL_ALIGN_OFF ); + } + if( mPixelArea != FULL_TEXTURE_RECT ) { mImpl->mRenderer.RegisterProperty( PIXEL_AREA_UNIFORM_NAME, mPixelArea ); diff --git a/dali-toolkit/internal/visuals/image/image-visual.h b/dali-toolkit/internal/visuals/image/image-visual.h index f2d7023..f771f6d 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.h +++ b/dali-toolkit/internal/visuals/image/image-visual.h @@ -90,6 +90,9 @@ typedef IntrusivePtr< ImageVisual > ImageVisualPtr; * "DONT_CARE" * "DEFAULT" * + * + * If the Visual is in a LayerUI it will pixel align the image, using a Layer3D will disable pixel alignment. + * Changing layer behaviour between LayerUI to Layer3D whilst the visual is already staged will not have an effect. */ class ImageVisual: public Visual::Base, public ConnectionTracker, public AtlasUploadObserver { diff --git a/dali-toolkit/internal/visuals/visual-string-constants.cpp b/dali-toolkit/internal/visuals/visual-string-constants.cpp index a7a3e2c..1fc3272 100644 --- a/dali-toolkit/internal/visuals/visual-string-constants.cpp +++ b/dali-toolkit/internal/visuals/visual-string-constants.cpp @@ -79,6 +79,7 @@ const char * const WRAP_MODE_UNIFORM_NAME( "wrapMode" ); const char * const IMAGE_WRAP_MODE_U("wrapModeU"); const char * const IMAGE_WRAP_MODE_V("wrapModeV"); const char * const IMAGE_BORDER( "border" ); +const char * const PIXEL_ALIGNED_UNIFORM_NAME( "uPixelAligned" ); // Text visual const char * const TEXT_PROPERTY( "text" ); diff --git a/dali-toolkit/internal/visuals/visual-string-constants.h b/dali-toolkit/internal/visuals/visual-string-constants.h index 9817b7a..d57733c 100644 --- a/dali-toolkit/internal/visuals/visual-string-constants.h +++ b/dali-toolkit/internal/visuals/visual-string-constants.h @@ -66,6 +66,8 @@ extern const char * const WRAP_MODE_UNIFORM_NAME; extern const char * const IMAGE_WRAP_MODE_U; extern const char * const IMAGE_WRAP_MODE_V; extern const char * const IMAGE_BORDER; +extern const char * const PIXEL_ALIGNED_UNIFORM_NAME; + // Text visual extern const char * const TEXT_PROPERTY; -- 2.7.4