sdlada_2.5.4_7981bbd6/src/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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
--------------------------------------------------------------------------------------------------------------------
--  Copyright (c) 2013-2020, Luke A. Guest
--
--  This software is provided 'as-is', without any express or implied
--  warranty. In no event will the authors be held liable for any damages
--  arising from the use of this software.
--
--  Permission is granted to anyone to use this software for any purpose,
--  including commercial applications, and to alter it and redistribute it
--  freely, subject to the following restrictions:
--
--     1. The origin of this software must not be misrepresented; you must not
--     claim that you wrote the original software. If you use this software
--     in a product, an acknowledgment in the product documentation would be
--     appreciated but is not required.
--
--     2. Altered source versions must be plainly marked as such, and must not be
--     misrepresented as being the original software.
--
--     3. This notice may not be removed or altered from any source
--     distribution.
--------------------------------------------------------------------------------------------------------------------
--  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;
      type Element_Array_2D is array (Index range <>, Index range <>) of aliased Element;

      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;