with
     openGL.Texture,
     openGL.GlyphImpl.Texture,
     freetype_c.FT_GlyphSlot;

package openGL.Glyph.texture
--
--  A specialisation of Glyph for creating texture glyphs.
--
is
   type Item is new Glyph.item with private;
   type View is access all Item'Class;


   -----------
   --   Forge
   --

   function to_Glyph (glyth_Slot       : in freetype_c.FT_GlyphSlot.item;
                      texture_Id       : in openGL.Texture.texture_Name;
                      xOffset, yOffset : in Integer;
                      Width,   Height  : in Integer) return Glyph.texture.item;
   --
   --  glyth_Slot:       The Freetype glyph to be processed.
   --  texture_id:       The id of the texture that this glyph will be drawn in.
   --  xOffset, yOffset: The x and y offset into the parent texture to draw this glyph.
   --  Width, Height:    The width and height (number of rows) of the parent texture.


   function new_Glyph (glyth_Slot       : in freetype_c.FT_GlyphSlot.item;
                       texture_Id       : in openGL.Texture.texture_Name;
                       xOffset, yOffset : in Integer;
                       Width,   Height    : in Integer) return Glyph.texture.view;
   --
   --  glyth_Slot:       The Freetype glyph to be processed.
   --  texture_Id:       The id of the texture that this glyph will be drawn in.
   --  xOffset, yOffset: The x,y offset into the parent texture to draw this glyph.
   --  Width, Height:    The width and height (number of rows) of the parent texture.


   --------------
   --  Attributes
   --

   function Quad (Self : in Item;   Pen : in Vector_3) return GlyphImpl.texture.Quad_t;


   ---------------
   --  Operations
   --

   overriding
   function render (Self : in Item;   Pen        : in Vector_3;
                                      renderMode : in Integer) return Vector_3;
   --
   --  Render this glyph at the current pen position.
   --
   --  Pen:        The current pen position.
   --  renderMode: Render mode to display.
   --
   --  Returns the advance distance for this glyph.



private

   type Item is new Glyph.item with null record;

end openGL.Glyph.texture;
