+ void AddTexture( TextureSet& textureSet, PixelData& data, Sampler& sampler, unsigned int textureSetIndex );
+
+ /**
+ * @brief Convert the buffer to pixelData.
+ * @param[in] buffer The Buffer to be converted to pixelData.
+ * @param[in] width The width of pixel data.
+ * @param[in] height The height of pixel data.
+ * @param[in] offsetPosition The The buffer's start position.
+ * @param[in] textPixelFormat The PixelForma of text.
+ */
+ PixelData ConvertToPixelData( unsigned char* buffer, int width, int height, int offsetPosition, const Pixel::Format textPixelFormat );
+
+ /**
+ * @brief Create the text's texture.
+ * @param[in] info This is the information you need to create a Tiling.
+ * @param[in] renderer The renderer to which the TextureSet will be added.
+ * @param[in] sampler The sampler.
+ * @param[in] hasMultipleTextColors Whether the text contains multiple colors.
+ * @param[in] containsColorGlyph Whether the text contains color glyph.
+ * @param[in] styleEnabled Whether the text contains any styles (e.g. shadow, underline, etc.).
+ */
+ void CreateTextureSet( TilingInfo& info, Renderer& renderer, Sampler& sampler, bool hasMultipleTextColors, bool containsColorGlyph, bool styleEnabled );
+
+ /**
+ * Create renderer of the text for rendering.
+ * @param[in] actor The actor.
+ * @param[in] size The texture size.
+ * @param[in] hasMultipleTextColors Whether the text contains multiple colors.
+ * @param[in] containsColorGlyph Whether the text contains color glyph.
+ * @param[in] styleEnabled Whether the text contains any styles (e.g. shadow, underline, etc.).
+ */
+ void AddRenderer( Actor& actor, const Vector2& size, bool hasMultipleTextColors, bool containsColorGlyph, bool styleEnabled );
+
+
+ /**
+ * Get the texture of the text for rendering.
+ * @param[in] size The texture size.
+ * @param[in] hasMultipleTextColors Whether the text contains multiple colors.
+ * @param[in] containsColorGlyph Whether the text contains color glyph.
+ * @param[in] styleEnabled Whether the text contains any styles (e.g. shadow, underline, etc.).
+ */
+ TextureSet GetTextTexture( const Vector2& size, bool hasMultipleTextColors, bool containsColorGlyph, bool styleEnabled );
+
+ /**
+ * Get the text rendering shader.
+ * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object
+ * @param[in] hasMultipleTextColors Whether the text contains multiple colors.
+ * @param[in] containsColorGlyph Whether the text contains color glyph.
+ * @param[in] styleEnabled Whether the text contains any styles (e.g. shadow, underline, etc.).
+ */
+ Shader GetTextShader( VisualFactoryCache& factoryCache, bool hasMultipleTextColors, bool containsColorGlyph, bool styleEnabled );
+
+ /**
+ * @brief Retrieve the TextVisual object.
+ * @param[in] visual A handle to the TextVisual
+ * @return The TextVisual object
+ */
+ static TextVisual& GetVisualObject( Toolkit::Visual::Base visual )
+ {
+ return static_cast< TextVisual& >( Toolkit::GetImplementation( visual ).GetVisualObject() );
+ };
+
+private:
+
+ typedef std::vector< Renderer > RendererContainer;
+
+ /**
+ * Used as an alternative to boolean so that it is obvious whether the text contains single or multiple text colors, and emoji and styles.
+ */
+ struct TextType
+ {
+ enum Type
+ {
+ SINGLE_COLOR_TEXT = 0, ///< The text contains single color only.
+ MULTI_COLOR_TEXT = 1, ///< The text contains multiple colors.
+ NO_EMOJI = 0, ///< The text contains no emoji.
+ HAS_EMOJI = 1, ///< The text contains emoji.
+ NO_STYLES = 0, ///< The text contains contains no styles.
+ HAS_SYLES = 1 ///< The text contains contains styles.
+ };
+ };
+