sdlada_2.5.20_cd53c280/src/video/sdl-video-pixels.ads

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
--------------------------------------------------------------------------------------------------------------------
--  This source code is subject to the Zlib license, see the LICENCE file in the root of this directory.
--------------------------------------------------------------------------------------------------------------------
--  SDL.Video.Pixels
--
--  Access to pixel data.
--------------------------------------------------------------------------------------------------------------------
with Interfaces;
with Interfaces.C;
with Interfaces.C.Pointers;
with SDL.Video.Palettes;

package SDL.Video.Pixels is
   pragma Preelaborate;

   package C renames Interfaces.C;

   --  Define pixel data access. Each pixel can be of any pixel format type.
   --  A bitmap returned, say from Textures.Lock is an array of pixels.
   Pixels_Error : exception;

   --  These give access to the pitch data returned by locking a texture.
   type Pitches is new C.int with
     Size       => 32,
     Convention => C;

   --  ARGB8888 pixels.
   --  These give access to a texture's/surface's (TODO??) pixel data in the above format.
   type ARGB_8888 is
      record
         Alpha : SDL.Video.Palettes.Colour_Component;
         Red   : SDL.Video.Palettes.Colour_Component;
         Green : SDL.Video.Palettes.Colour_Component;
         Blue  : SDL.Video.Palettes.Colour_Component;
      end record with
     Size       => 32,
     Convention => C;

   for ARGB_8888 use
      record
         Blue  at 0 range  0 ..  7;
         Green at 0 range  8 .. 15;
         Red   at 0 range 16 .. 23;
         Alpha at 0 range 24 .. 31;
      end record;

   type ARGB_8888_Array is array (SDL.Dimension range <>) of aliased ARGB_8888;

   package ARGB_8888_Access is new Interfaces.C.Pointers
     (Index              => SDL.Dimension,
      Element            => ARGB_8888,
      Element_Array      => ARGB_8888_Array,
      Default_Terminator => ARGB_8888'(others => SDL.Video.Palettes.Colour_Component'First));

   generic
      type Index is (<>);
      type Element is private;
      type Element_Array_1D is array (Index range <>) of aliased Element;
      pragma Warnings (Off, """Element_Array_2D"" is not referenced"); --  This attribute is deprecated
      type Element_Array_2D is array (Index range <>, Index range <>) of aliased Element;
      pragma Warnings (On, """Element_Array_2D"" is not referenced"); --  This attribute is deprecated

      Default_Terminator : Element;
   package Texture_Data is
      package Texture_Data_1D is new Interfaces.C.Pointers (Index              => Index,
                                                            Element            => Element,
                                                            Element_Array      => Element_Array_1D,
                                                            Default_Terminator => Default_Terminator);

      subtype Pointer is Texture_Data_1D.Pointer;
   end Texture_Data;
end SDL.Video.Pixels;