lsnes rr2-β24
[lsnes.git] / src / library / framebuffer-pixfmt-rgb24.cpp
blob718adff072b618ae8c3f62b18a6197212cfd96fc
1 #include "framebuffer-pixfmt-rgb24.hpp"
2 #include "framebuffer.hpp"
3 #include <cstring>
5 namespace framebuffer
7 template<bool uvswap>
8 _pixfmt_rgb24<uvswap>::~_pixfmt_rgb24() throw() {}
10 template<bool uvswap>
11 void _pixfmt_rgb24<uvswap>::decode(uint32_t* target, const uint8_t* src, size_t width) throw()
13 if(uvswap) {
14 for(size_t i = 0; i < width; i++) {
15 target[i] = (uint32_t)src[3 * i + 2] << 16;
16 target[i] |= (uint32_t)src[3 * i + 1] << 8;
17 target[i] |= src[3 * i + 0];
19 } else {
20 for(size_t i = 0; i < width; i++) {
21 target[i] = (uint32_t)src[3 * i + 0] << 16;
22 target[i] |= (uint32_t)src[3 * i + 1] << 8;
23 target[i] |= src[3 * i + 2];
28 template<bool uvswap>
29 void _pixfmt_rgb24<uvswap>::decode(uint32_t* target, const uint8_t* src, size_t width,
30 const auxpalette<false>& auxp) throw()
32 for(size_t i = 0; i < width; i++) {
33 target[i] = static_cast<uint32_t>(src[3 * i + (uvswap ? 2 : 0)]) << auxp.rshift;
34 target[i] |= static_cast<uint32_t>(src[3 * i + 1]) << auxp.gshift;
35 target[i] |= static_cast<uint32_t>(src[3 * i + (uvswap ? 0 : 2)]) << auxp.bshift;
39 template<bool uvswap>
40 void _pixfmt_rgb24<uvswap>::decode(uint64_t* target, const uint8_t* src, size_t width,
41 const auxpalette<true>& auxp) throw()
43 for(size_t i = 0; i < width; i++) {
44 target[i] = static_cast<uint64_t>(src[3 * i + (uvswap ? 2 : 0)]) << auxp.rshift;
45 target[i] |= static_cast<uint64_t>(src[3 * i + 1]) << auxp.gshift;
46 target[i] |= static_cast<uint64_t>(src[3 * i + (uvswap ? 0 : 2)]) << auxp.bshift;
47 target[i] += (target[i] << 8);
51 template<bool uvswap>
52 void _pixfmt_rgb24<uvswap>::set_palette(auxpalette<false>& auxp, uint8_t rshift, uint8_t gshift,
53 uint8_t bshift) throw(std::bad_alloc)
55 auxp.rshift = rshift;
56 auxp.gshift = gshift;
57 auxp.bshift = bshift;
58 auxp.pcache.clear();
61 template<bool uvswap>
62 void _pixfmt_rgb24<uvswap>::set_palette(auxpalette<true>& auxp, uint8_t rshift, uint8_t gshift,
63 uint8_t bshift) throw(std::bad_alloc)
65 auxp.rshift = rshift;
66 auxp.gshift = gshift;
67 auxp.bshift = bshift;
68 auxp.pcache.clear();
71 template<bool uvswap>
72 uint8_t _pixfmt_rgb24<uvswap>::get_bpp() throw()
74 return 3;
77 template<bool uvswap>
78 uint8_t _pixfmt_rgb24<uvswap>::get_ss_bpp() throw()
80 return 3;
83 template<bool uvswap>
84 uint32_t _pixfmt_rgb24<uvswap>::get_magic() throw()
86 if(uvswap)
87 return 0x25642332U;
88 else
89 return 0x85433684U;
92 _pixfmt_rgb24<false> pixfmt_rgb24;
93 _pixfmt_rgb24<true> pixfmt_bgr24;