From 0d2eb0e31bd0780d318ef87873b3ee8b9b26a9f1 Mon Sep 17 00:00:00 2001 From: Agnelo Vaz Date: Fri, 31 Mar 2017 16:34:44 +0100 Subject: [PATCH] Texel align text when scrolling and linear sampling Linear sampling used Scrolling delta floored and 0.5 added to sample from center of texel Change-Id: Id01b09d6be8d75a649207641083bc2046166b513 --- dali-toolkit/internal/text/text-scroller.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/dali-toolkit/internal/text/text-scroller.cpp b/dali-toolkit/internal/text/text-scroller.cpp index 172cc2f..a9a7284 100644 --- a/dali-toolkit/internal/text/text-scroller.cpp +++ b/dali-toolkit/internal/text/text-scroller.cpp @@ -51,7 +51,9 @@ const char* VERTEX_SHADER_SCROLL = DALI_COMPOSE_SHADER( attribute mediump vec2 aPosition;\n varying highp vec2 vTexCoord;\n varying highp float vRatio;\n - uniform mediump mat4 uMvpMatrix;\n + uniform mediump mat4 uModelMatrix;\n + uniform mediump mat4 uViewMatrix;\n + uniform mediump mat4 uProjection;\n uniform mediump vec3 uSize;\n uniform mediump float uDelta;\n uniform mediump vec2 uTextureSize; @@ -61,25 +63,29 @@ const char* VERTEX_SHADER_SCROLL = DALI_COMPOSE_SHADER( void main()\n {\n {\n - mediump vec4 vertexPosition = vec4(aPosition*uSize.xy, 0.0, 1.0);\n + highp vec4 vertexPosition = vec4(aPosition*uSize.xy, 0.0, 1.0);\n + vertexPosition = uViewMatrix * uModelMatrix * vertexPosition ;\n + vertexPosition.x = floor( vertexPosition.x ) + 0.5; + vertexPosition.y = floor( vertexPosition.y ) + 0.5; float smallTextPadding = max(uSize.x - uTextureSize.x, 0. );\n float gap = max( uGap, smallTextPadding );\n - vTexCoord.x = ( uDelta + ( uRtl * ( uTextureSize.x - uSize.x ) ) + ( aPosition.x * uSize.x ) )/ ( uTextureSize.x+gap );\n - vTexCoord.y = aPosition.y;\n + float delta = floor ( uDelta ) + 0.5; + vTexCoord.x = ( delta + ( uRtl * ( uTextureSize.x - uSize.x ) ) + ( aPosition.x * uSize.x ) )/ ( uTextureSize.x + gap );\n + vTexCoord.y = ( 0.5 + floor( aPosition.y * uSize.y ) )/ ( uTextureSize.y ) ;\n vRatio = uTextureSize.x / ( uTextureSize.x + gap );\n - gl_Position = uMvpMatrix * vertexPosition;\n + gl_Position = uProjection * vertexPosition; }\n }\n ); const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( - varying mediump vec2 vTexCoord;\n + varying highp vec2 vTexCoord;\n varying highp float vRatio;\n uniform sampler2D sTexture;\n \n void main()\n {\n - mediump vec2 texCoord;\n + highp vec2 texCoord;\n texCoord.y = vTexCoord.y;\n texCoord.x = fract( vTexCoord.x ) / vRatio;\n if ( texCoord.x > 1.0 )\n @@ -169,7 +175,7 @@ void CreateRenderer( FrameBufferImage frameBufferImage, Dali::Renderer& renderer Shader shader = Shader::New( VERTEX_SHADER_SCROLL , FRAGMENT_SHADER, Shader::Hint::NONE ); Sampler sampler = Sampler::New(); - sampler.SetFilterMode(FilterMode::NEAREST, FilterMode::NEAREST ); + sampler.SetFilterMode(FilterMode::LINEAR, FilterMode::LINEAR ); TextureSet textureSet = TextureSet::New(); TextureSetImage( textureSet, 0u, frameBufferImage ); -- 2.7.4