Macros rule everything around me
This commit is contained in:
parent
04ad40d69a
commit
0699bba50d
3 changed files with 15 additions and 9 deletions
|
@ -5,6 +5,10 @@
|
|||
|
||||
#include <cammy/tile.h>
|
||||
|
||||
#define CAMMY_IMAGE_Y_COEFFICIENT_R 0.2126
|
||||
#define CAMMY_IMAGE_Y_COEFFICIENT_G 0.7152
|
||||
#define CAMMY_IMAGE_Y_COEFFICIENT_B 0.0722
|
||||
|
||||
void cammy_image_dither(uint8_t *dest,
|
||||
uint8_t *src,
|
||||
size_t width,
|
||||
|
|
|
@ -7,6 +7,12 @@
|
|||
#define CAMMY_TILE_WIDTH 8
|
||||
#define CAMMY_TILE_HEIGHT 8
|
||||
|
||||
#define CAMMY_TILE_INDEX(x, y, stride) \
|
||||
(((y >> 3) * (stride >> 3)) + (x >> 3))
|
||||
|
||||
#define CAMMY_TILE_INDEXED(tiles, x, y, stride) \
|
||||
(&tiles[CAMMY_TILE_INDEX(x, y, stride)])
|
||||
|
||||
#pragma pack(1)
|
||||
#pragma pack(push)
|
||||
|
||||
|
|
14
src/image.c
14
src/image.c
|
@ -70,9 +70,9 @@ static uint32_t bayer_matrix[256] = {
|
|||
};
|
||||
|
||||
static uint8_t rgb_to_grayscale(uint8_t r, uint8_t g, uint8_t b) {
|
||||
return (uint8_t)((0.2126 * (float)r)
|
||||
+ (0.7152 * (float)g)
|
||||
+ (0.0722 * (float)b));
|
||||
return (uint8_t)((CAMMY_IMAGE_Y_COEFFICIENT_R * (float)r)
|
||||
+ (CAMMY_IMAGE_Y_COEFFICIENT_G * (float)g)
|
||||
+ (CAMMY_IMAGE_Y_COEFFICIENT_B * (float)b));
|
||||
}
|
||||
|
||||
static uint8_t rgb_to_tile_2bpp(uint8_t r, uint8_t g, uint8_t b, size_t x, size_t y) {
|
||||
|
@ -89,9 +89,7 @@ static inline uint8_t tile_read(cammy_tile *tiles,
|
|||
size_t x,
|
||||
size_t y,
|
||||
int stride) {
|
||||
size_t index = ((y >> 3) * (stride >> 3)) + (x >> 3);
|
||||
|
||||
cammy_tile *tile = &tiles[index];
|
||||
cammy_tile *tile = CAMMY_TILE_INDEXED(tiles, x, y, stride);
|
||||
|
||||
int tile_x = x & 7,
|
||||
tile_y = y & 7;
|
||||
|
@ -107,9 +105,7 @@ static inline void tile_write(cammy_tile *tiles,
|
|||
size_t y,
|
||||
int stride,
|
||||
uint8_t value) {
|
||||
size_t index = ((y >> 3) * (stride >> 3)) + (x >> 3);
|
||||
|
||||
cammy_tile *tile = &tiles[index];
|
||||
cammy_tile *tile = CAMMY_TILE_INDEXED(tiles, x, y, stride);
|
||||
|
||||
int tile_x = x & 7,
|
||||
tile_y = y & 7;
|
||||
|
|
Loading…
Add table
Reference in a new issue