Change-Id: I5f82c3933ef61a1ebc3c8d02d171c5f9b0fe7503
const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER(
varying highp vec2 vTexCoord;\n
uniform sampler2D sTexture;\n
const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER(
varying highp vec2 vTexCoord;\n
uniform sampler2D sTexture;\n
+ uniform lowp vec4 uColor;\n
+ uniform lowp vec3 mixColor;\n
+ uniform lowp float opacity;\n
+ uniform lowp float preMultipliedAlpha;\n
+ \n
+ lowp vec4 visualMixColor()\n
+ {\n
+ return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
+ }\n
\n
void main()\n
{\n
if ( vTexCoord.y > 1.0 )\n
discard;\n
\n
void main()\n
{\n
if ( vTexCoord.y > 1.0 )\n
discard;\n
- gl_FragColor = texture2D( sTexture, vTexCoord );\n
+ \n
+ mediump vec4 textTexture = texture2D( sTexture, vTexCoord );\n
+ textTexture.rgb *= mix( 1.0, textTexture.a, preMultipliedAlpha );\n
+ \n
+ gl_FragColor = textTexture * uColor * visualMixColor();
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
+ uniform lowp float preMultipliedAlpha;\n
+ \n
+ lowp vec4 visualMixColor()\n
+ {\n
+ return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
+ }\n
mediump float textTexture = texture2D( sTexture, texCoord ).r;\n
// Set the color of the text to what it is animated to.
mediump float textTexture = texture2D( sTexture, texCoord ).r;\n
// Set the color of the text to what it is animated to.
- gl_FragColor = uTextColorAnimatable * textTexture * uColor * vec4( mixColor, opacity );
+ gl_FragColor = uTextColorAnimatable * textTexture * uColor * visualMixColor();
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
+ uniform lowp float preMultipliedAlpha;\n
+ \n
+ lowp vec4 visualMixColor()\n
+ {\n
+ return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
+ }\n
\n
void main()\n
{\n
mediump vec2 texCoord = clamp( mix( uAtlasRect.xy, uAtlasRect.zw, vTexCoord ), uAtlasRect.xy, uAtlasRect.zw );\n
mediump vec4 textTexture = texture2D( sTexture, texCoord );\n
\n
void main()\n
{\n
mediump vec2 texCoord = clamp( mix( uAtlasRect.xy, uAtlasRect.zw, vTexCoord ), uAtlasRect.xy, uAtlasRect.zw );\n
mediump vec4 textTexture = texture2D( sTexture, texCoord );\n
+ textTexture.rgb *= mix( 1.0, textTexture.a, preMultipliedAlpha );\n
- gl_FragColor = textTexture * uColor * vec4( mixColor, opacity );
+ gl_FragColor = textTexture * uColor * visualMixColor();
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
+ uniform lowp float preMultipliedAlpha;\n
+ \n
+ lowp vec4 visualMixColor()\n
+ {\n
+ return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
+ }\n
mediump vec4 styleTexture = texture2D( sStyle, texCoord );\n
// Draw the text as overlay above the style
mediump vec4 styleTexture = texture2D( sStyle, texCoord );\n
// Draw the text as overlay above the style
- gl_FragColor = ( uTextColorAnimatable * textTexture + styleTexture * ( 1.0 - textTexture ) ) * uColor * vec4( mixColor, opacity );\n
+ gl_FragColor = ( uTextColorAnimatable * textTexture + styleTexture * ( 1.0 - textTexture ) ) * uColor * visualMixColor();\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
+ uniform lowp float preMultipliedAlpha;\n
+ \n
+ lowp vec4 visualMixColor()\n
+ {\n
+ return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
+ }\n
\n
void main()\n
{\n
mediump vec2 texCoord = clamp( mix( uAtlasRect.xy, uAtlasRect.zw, vTexCoord ), uAtlasRect.xy, uAtlasRect.zw );\n
mediump vec4 textTexture = texture2D( sTexture, texCoord );\n
mediump vec4 styleTexture = texture2D( sStyle, texCoord );\n
\n
void main()\n
{\n
mediump vec2 texCoord = clamp( mix( uAtlasRect.xy, uAtlasRect.zw, vTexCoord ), uAtlasRect.xy, uAtlasRect.zw );\n
mediump vec4 textTexture = texture2D( sTexture, texCoord );\n
mediump vec4 styleTexture = texture2D( sStyle, texCoord );\n
+ textTexture.rgb *= mix( 1.0, textTexture.a, preMultipliedAlpha );\n
// Draw the text as overlay above the style
// Draw the text as overlay above the style
- gl_FragColor = ( textTexture + styleTexture * ( 1.0 - textTexture.a ) ) * uColor * vec4( mixColor, opacity );\n
+ gl_FragColor = ( textTexture + styleTexture * ( 1.0 - textTexture.a ) ) * uColor * visualMixColor();\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
+ uniform lowp float preMultipliedAlpha;\n
+ \n
+ lowp vec4 visualMixColor()\n
+ {\n
+ return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
+ }\n
// Markup text with multiple text colors are not animated (but can be supported later on if required).
// Emoji color are not animated.
mediump float vstep = step( 0.0001, textTexture.a );\n
// Markup text with multiple text colors are not animated (but can be supported later on if required).
// Emoji color are not animated.
mediump float vstep = step( 0.0001, textTexture.a );\n
- textTexture.rgb = mix( textTexture.rgb, uTextColorAnimatable.rgb, vstep * maskTexture );\n
+ textTexture.rgb = mix( textTexture.rgb, uTextColorAnimatable.rgb, vstep * maskTexture ) * mix( 1.0, textTexture.a, preMultipliedAlpha );\n
// Draw the text as overlay above the style
// Draw the text as overlay above the style
- gl_FragColor = textTexture * uColor * vec4( mixColor, opacity );\n
+ gl_FragColor = textTexture * uColor * visualMixColor();\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
uniform lowp float opacity;\n
+ uniform lowp float preMultipliedAlpha;\n
+ \n
+ lowp vec4 visualMixColor()\n
+ {\n
+ return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
+ }\n
// Markup text with multiple text colors are not animated (but can be supported later on if required).
// Emoji color are not animated.
mediump float vstep = step( 0.0001, textTexture.a );\n
// Markup text with multiple text colors are not animated (but can be supported later on if required).
// Emoji color are not animated.
mediump float vstep = step( 0.0001, textTexture.a );\n
- textTexture.rgb = mix( textTexture.rgb, uTextColorAnimatable.rgb, vstep * maskTexture * ( 1.0 - uHasMultipleTextColors ) );\n
+ textTexture.rgb = mix( textTexture.rgb, uTextColorAnimatable.rgb, vstep * maskTexture * ( 1.0 - uHasMultipleTextColors ) ) * mix( 1.0, textTexture.a, preMultipliedAlpha );\n
// Draw the text as overlay above the style
// Draw the text as overlay above the style
- gl_FragColor = ( textTexture + styleTexture * ( 1.0 - textTexture.a ) ) * uColor * vec4( mixColor, opacity );\n
+ gl_FragColor = ( textTexture + styleTexture * ( 1.0 - textTexture.a ) ) * uColor * visualMixColor();\n
mImpl->mRenderer = Renderer::New( geometry, shader );
mImpl->mRenderer.SetProperty( Dali::Renderer::Property::DEPTH_INDEX, Toolkit::DepthIndex::CONTENT );
mImpl->mRenderer = Renderer::New( geometry, shader );
mImpl->mRenderer.SetProperty( Dali::Renderer::Property::DEPTH_INDEX, Toolkit::DepthIndex::CONTENT );
+ // Enable the pre-multiplied alpha to improve the text quality
+ EnablePreMultipliedAlpha(true);
+
const Vector4& defaultColor = mController->GetTextModel()->GetDefaultColor();
Dali::Property::Index shaderTextColorIndex = mImpl->mRenderer.RegisterProperty( "uTextColorAnimatable", defaultColor );
const Vector4& defaultColor = mController->GetTextModel()->GetDefaultColor();
Dali::Property::Index shaderTextColorIndex = mImpl->mRenderer.RegisterProperty( "uTextColorAnimatable", defaultColor );
mImpl->mRenderer.RegisterProperty( "uHasMultipleTextColors", static_cast<float>( hasMultipleTextColors ) );
mImpl->mRenderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON);
mImpl->mRenderer.RegisterProperty( "uHasMultipleTextColors", static_cast<float>( hasMultipleTextColors ) );
mImpl->mRenderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON);
- mImpl->mRenderer.SetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, true );
//Register transform properties
mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT );
//Register transform properties
mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT );
#if defined(DEBUG_ENABLED)
Debug::Filter* gVisualBaseLogFilter = Debug::Filter::New( Debug::NoLogging, false, "LOG_VISUAL_BASE" );
#endif
#if defined(DEBUG_ENABLED)
Debug::Filter* gVisualBaseLogFilter = Debug::Filter::New( Debug::NoLogging, false, "LOG_VISUAL_BASE" );
#endif
+
+const char * const PRE_MULTIPLIED_ALPHA_PROPERTY( "preMultipliedAlpha" );
-void Visual::Base::EnablePreMultipliedAlpha( bool preMultipled )
+void Visual::Base::EnablePreMultipliedAlpha( bool preMultiplied )
{
mImpl->mFlags |= Impl::IS_PREMULTIPLIED_ALPHA;
}
{
mImpl->mFlags |= Impl::IS_PREMULTIPLIED_ALPHA;
}
- mImpl->mRenderer.SetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, preMultipled);
+ mImpl->mRenderer.SetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, preMultiplied);
+ mImpl->mRenderer.RegisterProperty( PRE_MULTIPLIED_ALPHA_PROPERTY, static_cast<float>( preMultiplied ) );
{
preMultipliedAlpha = 1.0f;
}
{
preMultipliedAlpha = 1.0f;
}
- mImpl->mRenderer.RegisterProperty( "preMultipliedAlpha", preMultipliedAlpha );
+ mImpl->mRenderer.RegisterProperty( PRE_MULTIPLIED_ALPHA_PROPERTY, preMultipliedAlpha );
}
void Visual::Base::SetMixColor( const Vector4& color )
}
void Visual::Base::SetMixColor( const Vector4& color )
/**
* @brief Set whether the Pre-multiplied Alpha Blending is required
*
/**
* @brief Set whether the Pre-multiplied Alpha Blending is required
*
- * @param[in] preMultipled whether alpha is pre-multiplied.
+ * @param[in] preMultiplied whether alpha is pre-multiplied.
- void EnablePreMultipliedAlpha( bool preMultipled );
+ void EnablePreMultipliedAlpha( bool preMultiplied );
/**
* @brief Query whether alpha is pre-multiplied.
/**
* @brief Query whether alpha is pre-multiplied.