Fix Textlabel bug if size height is bigger than 16384 54/275154/4
authorEunki, Hong <eunkiki.hong@samsung.com>
Tue, 17 May 2022 09:12:36 +0000 (18:12 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Tue, 17 May 2022 10:44:49 +0000 (19:44 +0900)
Instance fix bug.
text-style shader requied both style texture and overlay style texture.
But for some special case, overlay style texture didnt applied.

TODO : Actually, we need to shrink text relative shaders.
It should be done in future.

Change-Id: Ib2239d5e3b13b946cac964e494027dbaebfe6a02
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali-toolkit/internal/visuals/text/text-visual.cpp
dali-toolkit/internal/visuals/text/text-visual.h

index 9b0e811..9744ca5 100644 (file)
@@ -620,16 +620,16 @@ void TextVisual::CreateTextureSet(TilingInfo& info, VisualRenderer& renderer, Sa
     ++textureSetIndex;
   }
 
     ++textureSetIndex;
   }
 
-  if(styleEnabled && info.styleBuffer)
+  if(styleEnabled && info.styleBuffer && info.overlayStyleBuffer)
   {
     PixelData styleData = ConvertToPixelData(info.styleBuffer, info.width, info.height, info.offsetPosition, Pixel::RGBA8888);
     AddTexture(textureSet, styleData, sampler, textureSetIndex);
     ++textureSetIndex;
   {
     PixelData styleData = ConvertToPixelData(info.styleBuffer, info.width, info.height, info.offsetPosition, Pixel::RGBA8888);
     AddTexture(textureSet, styleData, sampler, textureSetIndex);
     ++textureSetIndex;
-  }
 
 
-  if(styleEnabled && isOverlayStyle && info.styleBuffer)
-  {
-    PixelData overlayStyleData = ConvertToPixelData(info.styleBuffer, info.width, info.height, info.offsetPosition, Pixel::RGBA8888);
+    // TODO : We need to seperate whether use overlayStyle or not.
+    // Current text visual shader required both of them.
+
+    PixelData overlayStyleData = ConvertToPixelData(info.overlayStyleBuffer, info.width, info.height, info.offsetPosition, Pixel::RGBA8888);
     AddTexture(textureSet, overlayStyleData, sampler, textureSetIndex);
     ++textureSetIndex;
   }
     AddTexture(textureSet, overlayStyleData, sampler, textureSetIndex);
     ++textureSetIndex;
   }
@@ -711,6 +711,14 @@ void TextVisual::AddRenderer(Actor& actor, const Vector2& size, bool hasMultiple
       PixelData                             styleData      = mTypesetter->Render(size, textDirection, Text::Typesetter::RENDER_NO_TEXT, false, Pixel::RGBA8888);
       Dali::DevelPixelData::PixelDataBuffer stylePixelData = Dali::DevelPixelData::ReleasePixelDataBuffer(styleData);
       info.styleBuffer                                     = stylePixelData.buffer;
       PixelData                             styleData      = mTypesetter->Render(size, textDirection, Text::Typesetter::RENDER_NO_TEXT, false, Pixel::RGBA8888);
       Dali::DevelPixelData::PixelDataBuffer stylePixelData = Dali::DevelPixelData::ReleasePixelDataBuffer(styleData);
       info.styleBuffer                                     = stylePixelData.buffer;
+
+      // TODO : We need to seperate whether use overlayStyle or not.
+      // Current text visual shader required both of them.
+
+      // Create RGBA texture for all the overlay styles
+      PixelData                             overlayStyleData      = mTypesetter->Render(size, textDirection, Text::Typesetter::RENDER_OVERLAY_STYLE, false, Pixel::RGBA8888);
+      Dali::DevelPixelData::PixelDataBuffer overlayStylePixelData = Dali::DevelPixelData::ReleasePixelDataBuffer(overlayStyleData);
+      info.overlayStyleBuffer                                     = overlayStylePixelData.buffer;
     }
 
     if(containsColorGlyph && !hasMultipleTextColors)
     }
 
     if(containsColorGlyph && !hasMultipleTextColors)
@@ -797,6 +805,10 @@ TextureSet TextVisual::GetTextTexture(const Vector2& size, bool hasMultipleTextC
     PixelData styleData = mTypesetter->Render(size, textDirection, Text::Typesetter::RENDER_NO_TEXT, false, Pixel::RGBA8888);
     AddTexture(textureSet, styleData, sampler, textureSetIndex);
     ++textureSetIndex;
     PixelData styleData = mTypesetter->Render(size, textDirection, Text::Typesetter::RENDER_NO_TEXT, false, Pixel::RGBA8888);
     AddTexture(textureSet, styleData, sampler, textureSetIndex);
     ++textureSetIndex;
+
+    // TODO : We need to seperate whether use overlayStyle or not.
+    // Current text visual shader required both of them.
+
     // Create RGBA texture for overlay styles such as underline and strikethrough (without the text itself)
     PixelData overlayStyleData = mTypesetter->Render(size, textDirection, Text::Typesetter::RENDER_OVERLAY_STYLE, false, Pixel::RGBA8888);
     AddTexture(textureSet, overlayStyleData, sampler, textureSetIndex);
     // Create RGBA texture for overlay styles such as underline and strikethrough (without the text itself)
     PixelData overlayStyleData = mTypesetter->Render(size, textDirection, Text::Typesetter::RENDER_OVERLAY_STYLE, false, Pixel::RGBA8888);
     AddTexture(textureSet, overlayStyleData, sampler, textureSetIndex);
index fa7ca4e..c79c254 100644 (file)
@@ -193,6 +193,7 @@ private:
   {
     unsigned char* textBuffer;
     unsigned char* styleBuffer;
   {
     unsigned char* textBuffer;
     unsigned char* styleBuffer;
+    unsigned char* overlayStyleBuffer;
     unsigned char* maskBuffer;
     int            width;
     int            height;
     unsigned char* maskBuffer;
     int            width;
     int            height;
@@ -203,6 +204,7 @@ private:
     TilingInfo(int width, int height, Pixel::Format textPixelFormat)
     : textBuffer(NULL),
       styleBuffer(NULL),
     TilingInfo(int width, int height, Pixel::Format textPixelFormat)
     : textBuffer(NULL),
       styleBuffer(NULL),
+      overlayStyleBuffer(NULL),
       maskBuffer(NULL),
       width(width),
       height(height),
       maskBuffer(NULL),
       width(width),
       height(height),
@@ -222,6 +224,10 @@ private:
       {
         free(styleBuffer);
       }
       {
         free(styleBuffer);
       }
+      if(overlayStyleBuffer)
+      {
+        free(overlayStyleBuffer);
+      }
       if(maskBuffer)
       {
         free(maskBuffer);
       if(maskBuffer)
       {
         free(maskBuffer);