with
     freeType_c.FT_GlyphSlot,
     openGL.GlyphImpl;

package openGL.Glyph
--
--  Glyph is the base class for openGL glyphs.
--
--  It provides the interface between Freetype glyphs and their openGL
--  renderable counterparts.
--
--  This is an abstract class and derived classes must implement the 'Render' function.
--
is
   type Item is abstract tagged private;


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

   procedure destruct (Self : in out Item);


   --------------
   --  Attributes
   --
   function Advance (Self : in Item) return Real;                   -- Return the advance width for this glyph.
   function BBox    (Self : in Item) return Bounds;                 -- Return the bounding box for this glyph.
   function Error   (Self : in Item) return GlyphImpl.Error_Kind;   -- Return the current error code.


   --------------
   --- Operations
   --
   function render (Self : in Item;   Pen        : in Vector_3;
                                      renderMode : in Integer) return Vector_3
                    is abstract;
   --
   --  Renders 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 abstract tagged
      record
         Impl : GlyphImpl.view;    -- Internal FTGL FTGlyph implementation object. For private use only.
      end record;


   procedure define (Self : in out Item;   glyth_Slot : in freetype_c.FT_GlyphSlot.item);
   --
   --  glyth_Slot: The Freetype glyph to be processed.


   procedure define (Self : in out Item;   pImpl : in GlyphImpl.view);
   --
   --  Internal FTGL FTGlyph constructor. For private use only.
   --
   --  pImpl: An internal implementation object. Will be destroyed upon FTGlyph deletion.

end openGL.Glyph;
