with
gel.Sprite,
openGL.Visual,
ada.unchecked_Deallocation;
package body gel.Camera
is
--------
-- Forge
--
procedure free (Self : in out View)
is
procedure deallocate is new ada.unchecked_Deallocation (Item'Class, View);
begin
Self.destroy;
deallocate (Self);
end free;
--------------
-- Operations
--
procedure render (Self : in out Item; the_World : in gel.World.view;
To : in openGL.Surface.view)
is
all_Sprites : gel.World.sprite_transform_Pairs renames the_World.sprite_Transforms;
the_Visuals : openGL.Visual.views (1 .. all_Sprites'Length);
Count : Natural := 0;
the_Sprite : gel.Sprite.view;
begin
for i in all_Sprites'Range
loop
the_Sprite := all_Sprites (i).Sprite;
if not the_Sprite.is_Destroyed
and then the_Sprite.is_Visible
then
Count := Count + 1;
the_Visuals (Count) := the_Sprite.Visual;
the_Visuals (Count).Transform_is (all_Sprites (i).Transform);
the_Visuals (Count).Scale_is ((1.0, 1.0, 1.0));
the_Visuals (Count).program_Parameters_are (the_Sprite.program_Parameters);
end if;
end loop;
Self.render (the_Visuals (1 .. Count));
end render;
end gel.Camera;