Fix Gradient Visual texturing issue 65/294365/2
authorseungho baek <sbsh.baek@samsung.com>
Fri, 16 Jun 2023 11:57:21 +0000 (20:57 +0900)
committerseungho baek <sbsh.baek@samsung.com>
Fri, 16 Jun 2023 12:05:16 +0000 (21:05 +0900)
Change-Id: I6b0318cfb8716f5a8a08e1e96e4ca256f00af12e
Signed-off-by: seungho baek <sbsh.baek@samsung.com>
dali-toolkit/internal/graphics/shaders/gradient-visual-shader.frag
dali-toolkit/internal/visuals/gradient/gradient-visual.cpp

index 0d24481..5104f6b 100644 (file)
@@ -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
index ea84e5e..21cff21 100644 (file)
@@ -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<float>(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);
 }