Files
lace/3-mid/opengl/source/lean/light/opengl-light.ads
2024-03-10 14:23:13 +11:00

84 lines
3.2 KiB
Ada

package openGL.Light with Pure
--
-- Models a light.
--
is
type Item is tagged private;
type Items is array (Positive range <>) of Item;
type Id_t is new Natural;
type Kind_t is (Diffuse, Direct);
type Intensity is digits 5 range 0.0 .. 10.0;
null_Id : constant Id_t;
package Forge
is
function to_Light (Id : in Id_t := null_Id;
Kind : in Kind_t := Direct;
is_On : in Boolean := True;
Site : in openGL.Site := [0.0, 0.0, 1.0];
Strength : in Intensity := 1.0;
Color : in openGL.Color := (1.0, 1.0, 1.0);
Attenuation : in Real := 0.0;
ambient_Coefficient : in Real := 0.0;
cone_Angle : in Degrees := 90.0;
cone_Direction : in Vector_3 := [0.0, 0.0, -1.0]) return Item;
end Forge;
--------------
--- Attributes
--
function Id (Self : in Item) return light.Id_t;
procedure Id_is (Self : in out Item; Now : in light.Id_t);
function Kind (Self : in Item) return light.Kind_t;
procedure Kind_is (Self : in out Item; Now : in light.Kind_t);
function is_On (Self : in Item) return Boolean;
procedure is_On (Self : in out Item; Now : in Boolean := True);
function Site (Self : in Item) return openGL.Site;
procedure Site_is (Self : in out Item; Now : in openGL.Site);
function Strength (Self : in Item) return Intensity;
procedure Strength_is (Self : in out Item; Now : in Intensity);
function Color (Self : in Item) return Color;
function Attenuation (Self : in Item) return Real;
function ambient_Coefficient (Self : in Item) return Real;
function cone_Angle (Self : in Item) return Degrees;
function cone_Direction (Self : in Item) return Vector_3;
procedure Color_is (Self : in out Item; Now : in openGL.Color);
procedure Attenuation_is (Self : in out Item; Now : in Real);
procedure ambient_Coefficient_is (Self : in out Item; Now : in Real);
procedure cone_Angle_is (Self : in out Item; Now : in Degrees);
procedure cone_Direction_is (Self : in out Item; Now : in Vector_3);
private
null_Id : constant Id_t := Id_t'First;
type Item is tagged
record
Id : light.Id_t := null_Id;
Kind : light.Kind_t := Direct;
On : Boolean := True;
Site : openGL.Site := [0.0, 0.0, 1.0]; -- The GL default.
Color : openGL.Color := (1.0, 1.0, 1.0);
Strength : Intensity := 1.0;
Attenuation : Real := 0.0;
ambient_Coefficient : Real := 0.0;
cone_Angle : Degrees := 90.0;
cone_Direction : Vector_3 := [0.0, 0.0, -1.0];
end record;
end openGL.Light;