1 /*****************************************************************************
2 * This file is part of gfxprim library. *
4 * Gfxprim is free software; you can redistribute it and/or *
5 * modify it under the terms of the GNU Lesser General Public *
6 * License as published by the Free Software Foundation; either *
7 * version 2.1 of the License, or (at your option) any later version. *
9 * Gfxprim is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
12 * Lesser General Public License for more details. *
14 * You should have received a copy of the GNU Lesser General Public *
15 * License along with gfxprim; if not, write to the Free Software *
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
17 * Boston, MA 02110-1301 USA *
19 * Copyright (C) 2009-2010 Jiri "BlueBear" Dluhos *
20 * <jiri.bluebear.dluhos@gmail.com> *
22 * Copyright (C) 2009-2010 Cyril Hrubis <metan@ucw.cz> *
24 *****************************************************************************/
26 #ifndef GP_WRITEPIXEL_H
27 #define GP_WRITEPIXEL_H
34 * Macros for writing a single pixel value to the specified address,
35 * provided that the target buffer has 8, 16, 24, or 32 bytes per pixel.
38 #define GP_WritePixel8bpp(ptr, pixel) { \
39 *((uint8_t *) ptr) = (uint8_t) pixel; \
42 #define GP_WritePixel16bpp(ptr, pixel) { \
43 *((uint16_t *) ptr) = (uint16_t) pixel; \
46 #if __BYTE_ORDER == __BIG_ENDIAN
48 #define GP_WritePixel24bpp(ptr, pixel) { \
49 ((uint8_t *) ptr)[0] = (pixel >> 16) & 0xff; \
50 ((uint8_t *) ptr)[1] = (pixel >> 8) & 0xff; \
51 ((uint8_t *) ptr)[2] = pixel & 0xff; \
54 #elif __BYTE_ORDER == __LITTLE_ENDIAN
56 #define GP_WritePixel24bpp(ptr, pixel) { \
57 ((uint8_t *) ptr)[0] = pixel & 0xff; \
58 ((uint8_t *) ptr)[1] = (pixel >> 8) & 0xff; \
59 ((uint8_t *) ptr)[2] = (pixel >> 16) & 0xff; \
63 #error "Could not detect machine endianity"
66 #define GP_WritePixel32bpp(ptr, pixel) { \
67 *((uint32_t *) ptr) = (uint32_t) pixel; \
71 * Calls for writing a linear block of pixels.
75 * These calls are not byte aligned, thuss needs start offset.
77 void GP_WritePixels1bpp(uint8_t *start
, uint8_t off
, size_t cnt
, uint8_t val
);
78 void GP_WritePixels2bpp(uint8_t *start
, uint8_t off
, size_t cnt
, uint8_t val
);
79 void GP_WritePixels4bpp(uint8_t *start
, uint8_t off
, size_t cnt
, uint8_t val
);
81 void GP_WritePixels8bpp(void *start
, size_t count
, uint8_t value
);
82 void GP_WritePixels16bpp(void *start
, size_t count
, uint16_t value
);
83 void GP_WritePixels24bpp(void *start
, size_t count
, uint32_t value
);
84 void GP_WritePixels32bpp(void *start
, size_t count
, uint32_t value
);
86 #endif /* GP_WRITEPIXEL_H */