-------------------------------------------------------------------------------------------------------------------- -- 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;