--<summary>The Materials.Lambertians package contains all Abstract Data Types for Lambertian material handling</summary>
--<description>The Materials.Lambertians package contains all Abstract Data Types for Lambertian material handling</description>
--<group>Materials</group>
package Materials.Lambertians is

   ------------------
   --  ADT Lambertian
   ------------------
   type Lambertian is new Material with private;

   type Lambertian_Ptr is access all Lambertian;
   --<summary>The access type to all Lambertian materials</summary>

   function Construct_Lambertian (Name : in String; Spec : RGB_Spectrum) return Material_Ptr;
   --<summary>Constructs a Lambertian material</summary>
   --<description>Constructs a Lambertian material</description>
   --<parameter name="Name">The name of the material</parameter>
   --<parameter name="Spec">The diffuse reflection spectrum of the material</parameter>
   --<exception>None at this moment</exception>

   function BDRF (Mat : in Lambertian; In_Ray : in Ray; Hp : HitPoint) return RGB_Spectrum;
   --<summary>Computes the BDRF value for a material at a hitpoint for an incoming ray</summary>
   --<description>Computes the BDRF value for a material at a hitpoint for an incoming ray</description>
   --<parameter name="Mat">A material of the Material Class Wide Type</parameter>
   --<parameter name="In_Ray">The incoming ray for this hitpoint</parameter>
   --<parameter name="Hp">The hitpoint</parameter>
   --<exception>None at this moment</exception>

private

   type Lambertian is new Material with record
      Diffuse_Reflection_Spectrum : RGB_Spectrum;
   end record;

end Materials.Lambertians;
