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