1 module allegro5.color;
2 
3 import allegro5.base;
4 import allegro5.internal.da5;
5 
6 extern (C)
7 {
8 	struct ALLEGRO_COLOR
9 	{
10 		float r, g, b, a;
11 	}
12 
13 	enum ALLEGRO_PIXEL_FORMAT
14 	{
15 		ALLEGRO_PIXEL_FORMAT_ANY               = 0,
16 		ALLEGRO_PIXEL_FORMAT_ANY_NO_ALPHA      = 1,
17 		ALLEGRO_PIXEL_FORMAT_ANY_WITH_ALPHA    = 2,
18 		ALLEGRO_PIXEL_FORMAT_ANY_15_NO_ALPHA   = 3,
19 		ALLEGRO_PIXEL_FORMAT_ANY_16_NO_ALPHA   = 4,
20 		ALLEGRO_PIXEL_FORMAT_ANY_16_WITH_ALPHA = 5,
21 		ALLEGRO_PIXEL_FORMAT_ANY_24_NO_ALPHA   = 6,
22 		ALLEGRO_PIXEL_FORMAT_ANY_32_NO_ALPHA   = 7,
23 		ALLEGRO_PIXEL_FORMAT_ANY_32_WITH_ALPHA = 8,
24 		ALLEGRO_PIXEL_FORMAT_ARGB_8888         = 9,
25 		ALLEGRO_PIXEL_FORMAT_RGBA_8888         = 10,
26 		ALLEGRO_PIXEL_FORMAT_ARGB_4444         = 11,
27 		ALLEGRO_PIXEL_FORMAT_RGB_888           = 12, /* 24 bit format */
28 		ALLEGRO_PIXEL_FORMAT_RGB_565           = 13,
29 		ALLEGRO_PIXEL_FORMAT_RGB_555           = 14,
30 		ALLEGRO_PIXEL_FORMAT_RGBA_5551         = 15,
31 		ALLEGRO_PIXEL_FORMAT_ARGB_1555         = 16,
32 		ALLEGRO_PIXEL_FORMAT_ABGR_8888         = 17,
33 		ALLEGRO_PIXEL_FORMAT_XBGR_8888         = 18,
34 		ALLEGRO_PIXEL_FORMAT_BGR_888           = 19, /* 24 bit format */
35 		ALLEGRO_PIXEL_FORMAT_BGR_565           = 20,
36 		ALLEGRO_PIXEL_FORMAT_BGR_555           = 21,
37 		ALLEGRO_PIXEL_FORMAT_RGBX_8888         = 22,
38 		ALLEGRO_PIXEL_FORMAT_XRGB_8888         = 23,
39 		ALLEGRO_PIXEL_FORMAT_ABGR_F32          = 24,
40 		ALLEGRO_PIXEL_FORMAT_ABGR_8888_LE      = 25,
41 		ALLEGRO_PIXEL_FORMAT_RGBA_4444         = 26,
42 		ALLEGRO_PIXEL_FORMAT_SINGLE_CHANNEL_8  = 27,
43 		ALLEGRO_NUM_PIXEL_FORMATS
44 	}
45 
46 	/* Pixel unmapping */
47 	void al_unmap_rgb(ALLEGRO_COLOR color, ubyte* r, ubyte* g, ubyte* b);
48 	void al_unmap_rgba(ALLEGRO_COLOR color, ubyte* r, ubyte* g, ubyte* b, ubyte* a);
49 	void al_unmap_rgb_f(ALLEGRO_COLOR color, float* r, float* g, float* b);
50 	void al_unmap_rgba_f(ALLEGRO_COLOR color, float* r, float* g, float* b, float* a);
51 
52 	int al_get_pixel_size(int format);
53 	int al_get_pixel_format_bits(int format);
54 }
55 
56 /*
57  * MinGW 4.5 and below has a bizzare calling convention when returning
58  * structs. These wrappers take care of the differences in calling convention.
59  * 
60  * This issue does not exist in MSVC and maybe MinGW 4.6.
61  */
62 
63 static import allegro5.color_ret;
64 
65 version(Windows)
66 {
67 	version(ALLEGRO_MSVC) {}
68 	else
69 	{
70 		version = ALLEGRO_SUB;
71 	}
72 }
73 
74 mixin(ColorWrapper("allegro5.color_ret.", "al_map_rgb", "ubyte r, ubyte g, ubyte b", "r, g, b"));
75 mixin(ColorWrapper("allegro5.color_ret.", "al_map_rgba", "ubyte r, ubyte g, ubyte b, ubyte a", "r, g, b, a"));
76 mixin(ColorWrapper("allegro5.color_ret.", "al_map_rgb_f", "float r, float g, float b", "r, g, b"));
77 mixin(ColorWrapper("allegro5.color_ret.", "al_map_rgba_f", "float r, float g, float b, float a", "r, g, b, a"));