+ Commons for graphics

This commit is contained in:
Vovanium 2021-08-04 19:52:01 +03:00
parent 7b67b98989
commit 10633ac67e
2 changed files with 122 additions and 40 deletions

View File

@ -1,4 +1,6 @@
with Interfaces;
with STM32.Graphics;
use STM32.Graphics;
package STM32.DMA2D is
@ -71,33 +73,6 @@ package STM32.DMA2D is
end record;
-- FGPFCCR, BGPFCCR
type Color_Mode is (
ARGB8888,
RGB888,
RGB565,
ARGB1555,
ARGB4444,
L8,
AL44,
AL88,
L4,
A8,
A4
) with Size => 4;
for Color_Mode use (
ARGB8888 => 2#0000#,
RGB888 => 2#0001#,
RGB565 => 2#0010#,
ARGB1555 => 2#0011#,
ARGB4444 => 2#0100#,
L8 => 2#0101#,
AL44 => 2#0110#,
AL88 => 2#0111#,
L4 => 2#1000#,
A8 => 2#1001#,
A4 => 2#1010#
);
type CLUT_Color_Mode is new Color_Mode range ARGB8888 .. RGB888
with Size => 1;
@ -134,19 +109,8 @@ package STM32.DMA2D is
ALPHA at 0 range 24 .. 31;
end record;
-- FGCOLR, BGCOLR, FGCLUT(), BGCLUT()
type Color_Register is record
BLUE : Integer range 0 .. 2**8 - 1;
GREEN : Integer range 0 .. 2**8 - 1;
RED : Integer range 0 .. 2**8 - 1;
ALPHA : Integer range 0 .. 2**8 - 1 := 0;
end record with Size => 32;
for Color_Register 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;
-- FGCOLR, BGCOLR, FGCLUT(), BGCLUT() use Color_Register from STM32.Graphics
subtype Color_Register is ARGB8888_Pixel;
-- OPFCCR
type Output_Color_Mode is new Color_Mode range ARGB8888 .. ARGB4444

118
source/stm32-graphics.ads Normal file
View File

@ -0,0 +1,118 @@
with Interfaces;
package STM32.Graphics is
-- Commons for graphics
-- Color register and pixel formats
pragma Pure;
type ARGB8888_Pixel is record
B : Integer range 0 .. 2**8 - 1;
G : Integer range 0 .. 2**8 - 1;
R : Integer range 0 .. 2**8 - 1;
A : Integer range 0 .. 2**8 - 1 := 0;
end record with Size => 32;
for ARGB8888_Pixel use record
B at 0 range 0 .. 7;
G at 0 range 8 .. 15;
R at 0 range 16 .. 23;
A at 0 range 24 .. 31;
end record;
type RGB888_Pixel is record
B : Integer range 0 .. 2**8 - 1;
G : Integer range 0 .. 2**8 - 1;
R : Integer range 0 .. 2**8 - 1;
end record with Size => 24;
for RGB888_Pixel use record
B at 0 range 0 .. 7;
G at 0 range 8 .. 15;
R at 0 range 16 .. 23;
end record;
type RGB565_Pixel is record
B : Integer range 0 .. 2**5 - 1;
G : Integer range 0 .. 2**6 - 1;
R : Integer range 0 .. 2**5 - 1;
end record with Size => 16;
for RGB565_Pixel use record
B at 0 range 0 .. 4;
G at 0 range 5 .. 10;
R at 0 range 11 .. 15;
end record;
type ARGB1555_Pixel is record
B : Integer range 0 .. 2**5 - 1;
G : Integer range 0 .. 2**5 - 1;
R : Integer range 0 .. 2**5 - 1;
A : Integer range 0 .. 1 := 0;
end record with Size => 16;
for ARGB1555_Pixel use record
B at 0 range 0 .. 4;
G at 0 range 5 .. 9;
R at 0 range 10 .. 14;
A at 0 range 15 .. 15;
end record;
type ARGB4444_Pixel is record
B : Integer range 0 .. 2**4 - 1;
G : Integer range 0 .. 2**4 - 1;
R : Integer range 0 .. 2**4 - 1;
A : Integer range 0 .. 2**4 - 1 := 0;
end record with Size => 16;
for ARGB4444_Pixel use record
B at 0 range 0 .. 3;
G at 0 range 4 .. 7;
R at 0 range 8 .. 11;
A at 0 range 12 .. 15;
end record;
subtype L8_Pixel is Interfaces.Unsigned_8;
type AL44_Pixel is record
L : Integer range 0 .. 2**4 - 1;
A : Integer range 0 .. 2**4 - 1;
end record with Size => 8;
for AL44_Pixel use record
L at 0 range 0 .. 3;
A at 0 range 4 .. 7;
end record;
type AL88_Pixel is record
L : Integer range 0 .. 2**8 - 1;
A : Integer range 0 .. 2**8 - 1;
end record with Size => 16;
for AL88_Pixel use record
L at 0 range 0 .. 7;
A at 0 range 8 .. 15;
end record;
type Color_Mode is (
ARGB8888,
RGB888,
RGB565,
ARGB1555,
ARGB4444,
L8,
AL44,
AL88,
L4,
A8,
A4
);
for Color_Mode use (
ARGB8888 => 2#0000#,
RGB888 => 2#0001#,
RGB565 => 2#0010#,
ARGB1555 => 2#0011#,
ARGB4444 => 2#0100#,
L8 => 2#0101#,
AL44 => 2#0110#,
AL88 => 2#0111#,
L4 => 2#1000#,
A8 => 2#1001#,
A4 => 2#1010#
);
end STM32.Graphics;