From: seungho baek Date: Fri, 16 Jun 2023 11:57:21 +0000 (+0900) Subject: Fix Gradient Visual texturing issue X-Git-Tag: dali_2.2.32~7^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F65%2F294365%2F2;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Fix Gradient Visual texturing issue Change-Id: I6b0318cfb8716f5a8a08e1e96e4ca256f00af12e Signed-off-by: seungho baek --- diff --git a/dali-toolkit/internal/graphics/shaders/gradient-visual-shader.frag b/dali-toolkit/internal/graphics/shaders/gradient-visual-shader.frag index 0d24481..5104f6b 100644 --- a/dali-toolkit/internal/graphics/shaders/gradient-visual-shader.frag +++ b/dali-toolkit/internal/graphics/shaders/gradient-visual-shader.frag @@ -8,6 +8,9 @@ INPUT mediump vec4 vCornerRadius; #endif #endif +// scale factor to fit start and end position of gradient. +uniform mediump float uTextureCoordinateScaleFactor; + uniform sampler2D sTexture; // sampler1D? uniform lowp vec4 uColor; uniform lowp vec3 mixColor; @@ -188,7 +191,8 @@ mediump float calculateCornerOpacity() void main() { #ifdef RADIAL - lowp vec4 textureColor = TEXTURE(sTexture, vec2(length(vTexCoord), 0.5)) * vec4(mixColor, 1.0) * uColor; + mediump float radialTexCoord = ((length(vTexCoord) - 0.5) * uTextureCoordinateScaleFactor) + 0.5; + lowp vec4 textureColor = TEXTURE(sTexture, vec2(radialTexCoord, 0.5)) * vec4(mixColor, 1.0) * uColor; #else lowp vec4 textureColor = TEXTURE(sTexture, vec2(vTexCoord.y, 0.5)) * vec4(mixColor, 1.0) * uColor; #endif diff --git a/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp b/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp index ea84e5e..21cff21 100644 --- a/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp +++ b/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp @@ -62,6 +62,7 @@ DALI_ENUM_TO_STRING_TABLE_END(SPREAD_METHOD) // uniform names const char* const UNIFORM_ALIGNMENT_MATRIX_NAME("uAlignmentMatrix"); +static constexpr std::string_view UNIFORM_TEXTURE_COORDINATE_SCALE_FACTOR_NAME("uTextureCoordinateScaleFactor"); // default offset value const unsigned int DEFAULT_OFFSET_MINIMUM = 0.0f; @@ -274,6 +275,9 @@ void GradientVisual::OnInitialize() mImpl->mRenderer.RegisterUniqueProperty(UNIFORM_ALIGNMENT_MATRIX_NAME, mGradientTransform); + float textureSize = static_cast(lookupTexture.GetWidth()); + mImpl->mRenderer.RegisterUniqueProperty(UNIFORM_TEXTURE_COORDINATE_SCALE_FACTOR_NAME, (textureSize - 1.0f)/textureSize); + //Register transform properties mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT); }