1 #include "framebuffer-pixfmt-rgb15.hpp"
2 #include "framebuffer.hpp"
7 _pixfmt_rgb15
<uvswap
>::~_pixfmt_rgb15() throw()
12 void _pixfmt_rgb15
<uvswap
>::decode(uint32_t* target
, const uint8_t* src
, size_t width
)
15 const uint16_t* _src
= reinterpret_cast<const uint16_t*>(src
);
16 for(size_t i
= 0; i
< width
; i
++) {
17 uint32_t word
= _src
[i
];
18 uint64_t r
= ((word
>> (uvswap
? 10 : 0)) & 0x1F);
19 uint64_t g
= ((word
>> 5) & 0x1F);
20 uint64_t b
= ((word
>> (uvswap
? 0 : 10)) & 0x1F);
21 target
[i
] = (((r
<< 8) - r
+ 15) / 31) << 16;
22 target
[i
] |= (((g
<< 8) - g
+ 15) / 31) << 8;
23 target
[i
] |= (((b
<< 8) - b
+ 15) / 31);
28 void _pixfmt_rgb15
<uvswap
>::decode(uint32_t* target
, const uint8_t* src
, size_t width
,
29 const auxpalette
<false>& auxp
) throw()
31 const uint16_t* _src
= reinterpret_cast<const uint16_t*>(src
);
32 for(size_t i
= 0; i
< width
; i
++)
33 target
[i
] = auxp
.pcache
[_src
[i
] & 0x7FFF];
37 void _pixfmt_rgb15
<uvswap
>::decode(uint64_t* target
, const uint8_t* src
, size_t width
,
38 const auxpalette
<true>& auxp
) throw()
40 const uint16_t* _src
= reinterpret_cast<const uint16_t*>(src
);
41 for(size_t i
= 0; i
< width
; i
++)
42 target
[i
] = auxp
.pcache
[_src
[i
] & 0x7FFF];
46 void _pixfmt_rgb15
<uvswap
>::set_palette(auxpalette
<false>& auxp
, uint8_t rshift
, uint8_t gshift
,
47 uint8_t bshift
) throw(std::bad_alloc
)
49 auxp
.pcache
.resize(0x8000);
50 for(size_t i
= 0; i
< 0x8000; i
++) {
51 uint32_t r
= ((i
>> (uvswap
? 10 : 0)) & 0x1F);
52 uint32_t g
= ((i
>> 5) & 0x1F);
53 uint32_t b
= ((i
>> (uvswap
? 0 : 10)) & 0x1F);
54 auxp
.pcache
[i
] = (((r
<< 8) - r
+ 15) / 31) << rshift
;
55 auxp
.pcache
[i
] += (((g
<< 8) - g
+ 15) / 31) << gshift
;
56 auxp
.pcache
[i
] += (((b
<< 8) - b
+ 15) / 31) << bshift
;
64 void _pixfmt_rgb15
<uvswap
>::set_palette(auxpalette
<true>& auxp
, uint8_t rshift
, uint8_t gshift
,
65 uint8_t bshift
) throw(std::bad_alloc
)
67 auxp
.pcache
.resize(0x8000);
68 for(size_t i
= 0; i
< 0x8000; i
++) {
69 uint64_t r
= ((i
>> (uvswap
? 10 : 0)) & 0x1F);
70 uint64_t g
= ((i
>> 5) & 0x1F);
71 uint64_t b
= ((i
>> (uvswap
? 0 : 10)) & 0x1F);
72 auxp
.pcache
[i
] = (((r
<< 16) - r
+ 15) / 31) << rshift
;
73 auxp
.pcache
[i
] += (((g
<< 16) - g
+ 15) / 31) << gshift
;
74 auxp
.pcache
[i
] += (((b
<< 16) - b
+ 15) / 31) << bshift
;
82 uint8_t _pixfmt_rgb15
<uvswap
>::get_bpp() throw()
88 uint8_t _pixfmt_rgb15
<uvswap
>::get_ss_bpp() throw()
94 uint32_t _pixfmt_rgb15
<uvswap
>::get_magic() throw()
102 _pixfmt_rgb15
<false> pixfmt_rgb15
;
103 _pixfmt_rgb15
<true> pixfmt_bgr15
;