From ba2b1aa2e87716f4ef107e0fa627573475e93470 Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Tue, 17 May 2022 18:12:36 +0900 Subject: [PATCH 1/1] Fix Textlabel bug if size height is bigger than 16384 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 --- dali-toolkit/internal/visuals/text/text-visual.cpp | 22 +++++++++++++++++----- dali-toolkit/internal/visuals/text/text-visual.h | 6 ++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/dali-toolkit/internal/visuals/text/text-visual.cpp b/dali-toolkit/internal/visuals/text/text-visual.cpp index 9b0e811..9744ca5 100644 --- a/dali-toolkit/internal/visuals/text/text-visual.cpp +++ b/dali-toolkit/internal/visuals/text/text-visual.cpp @@ -620,16 +620,16 @@ void TextVisual::CreateTextureSet(TilingInfo& info, VisualRenderer& renderer, Sa ++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; - } - 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; } @@ -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; + + // 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) @@ -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; + + // 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); diff --git a/dali-toolkit/internal/visuals/text/text-visual.h b/dali-toolkit/internal/visuals/text/text-visual.h index fa7ca4e..c79c254 100644 --- a/dali-toolkit/internal/visuals/text/text-visual.h +++ b/dali-toolkit/internal/visuals/text/text-visual.h @@ -193,6 +193,7 @@ private: { unsigned char* textBuffer; unsigned char* styleBuffer; + unsigned char* overlayStyleBuffer; unsigned char* maskBuffer; int width; int height; @@ -203,6 +204,7 @@ private: TilingInfo(int width, int height, Pixel::Format textPixelFormat) : textBuffer(NULL), styleBuffer(NULL), + overlayStyleBuffer(NULL), maskBuffer(NULL), width(width), height(height), @@ -222,6 +224,10 @@ private: { free(styleBuffer); } + if(overlayStyleBuffer) + { + free(overlayStyleBuffer); + } if(maskBuffer) { free(maskBuffer); -- 2.7.4