00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #if DEPTH == 8
00026 #define BPP 1
00027 #define PIXEL_TYPE uint8_t
00028 #elif DEPTH == 15 || DEPTH == 16
00029 #define BPP 2
00030 #define PIXEL_TYPE uint16_t
00031 #elif DEPTH == 32
00032 #define BPP 4
00033 #define PIXEL_TYPE uint32_t
00034 #else
00035 #error unsupport depth
00036 #endif
00037
00038 #ifdef BGR_FORMAT
00039 #define PIXEL_NAME glue(DEPTH, bgr)
00040 #else
00041 #define PIXEL_NAME DEPTH
00042 #endif
00043
00044
00045 static void glue(draw_line8_, PIXEL_NAME)(
00046 uint8_t *d, const uint8_t *s, int width, const uint32_t *pal)
00047 {
00048 uint8_t v, r, g, b;
00049 do {
00050 v = ldub_raw(s);
00051 r = (pal[v] >> 16) & 0xff;
00052 g = (pal[v] >> 8) & 0xff;
00053 b = (pal[v] >> 0) & 0xff;
00054 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, PIXEL_NAME)(r, g, b);
00055 s ++;
00056 d += BPP;
00057 } while (-- width != 0);
00058 }
00059
00060 static void glue(draw_line16_, PIXEL_NAME)(
00061 uint8_t *d, const uint8_t *s, int width, const uint32_t *pal)
00062 {
00063 uint16_t rgb565;
00064 uint8_t r, g, b;
00065
00066 do {
00067 rgb565 = lduw_raw(s);
00068 r = ((rgb565 >> 11) & 0x1f) << 3;
00069 g = ((rgb565 >> 5) & 0x3f) << 2;
00070 b = ((rgb565 >> 0) & 0x1f) << 3;
00071 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, PIXEL_NAME)(r, g, b);
00072 s += 2;
00073 d += BPP;
00074 } while (-- width != 0);
00075 }
00076
00077 static void glue(draw_line32_, PIXEL_NAME)(
00078 uint8_t *d, const uint8_t *s, int width, const uint32_t *pal)
00079 {
00080 uint8_t r, g, b;
00081
00082 do {
00083 ldub_raw(s);
00084 #if defined(TARGET_WORDS_BIGENDIAN)
00085 r = s[1];
00086 g = s[2];
00087 b = s[3];
00088 #else
00089 b = s[0];
00090 g = s[1];
00091 r = s[2];
00092 #endif
00093 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, PIXEL_NAME)(r, g, b);
00094 s += 4;
00095 d += BPP;
00096 } while (-- width != 0);
00097 }
00098
00099 #undef DEPTH
00100 #undef BPP
00101 #undef PIXEL_TYPE
00102 #undef PIXEL_NAME
00103 #undef BGR_FORMAT