world-map/draw.h

64 lines
2.2 KiB
C
Raw Permalink Normal View History

2024-11-21 21:40:39 +00:00
#ifndef __DRAW_H__
#define __DRAW_H__
#define WIDTH 480
#define HEIGHT 240
typedef unsigned char u8;
typedef signed char i8;
typedef unsigned short u16;
typedef signed short i16;
typedef unsigned int u32;
typedef signed int i32;
typedef u16 Color;
extern Color framebuffer[WIDTH * HEIGHT];
#define rgb565(r, g, b) ((((u16)r & 0b11111000) << 8) | (((u16)g & 0b11111100) << 3) | (((u16)b & 0xff) >> 3))
#define rgb(r, g, b) (((u32)(r & 0xff) << 24) | ((u32)(g & 0xff) << 16) | ((u32)(b & 0xff) << 8) | 0xff)
void from_hsv(u8 h, u8 s, u8 v, u8* r, u8* g, u8* b);
void to_hsv(u8 r, u8 g, u8 b, u8* h, u8* s, u8* v);
void clear_screen();
void draw_point(i32 x, i32 y, Color color);
void fill_rect(i32 x, i32 y, i32 width, i32 height, Color color);
void draw_rect(i32 x, i32 y, i32 width, i32 height, Color color);
void draw_line(i32 x0, i32 y0, i32 x1, i32 y1, Color color);
void draw_circle(i32 xm, i32 ym, i32 r, Color color);
void horizontal_line(i32 x1, i32 x2, i32 y, Color color);
void fill_circle(i32 xm, i32 ym, i32 r, Color color);
void copy(int n, float *points, float* result);
void scale(int n, float* points, float factorX, float factorY);
void translate(int n, float* points, float x, float y);
void rotate(int n, float* points, float angle);
void draw(int n, float* points, int close, Color color);
void fill(int n, float* points, int wrap, Color color);
int point_in_polygon(int n, float* points, float x, float y);
int line_intersect(float* l1, float* l2);
int polygon_intersect(int n, float* a, int m, float* b);
#define MIRROR_V 1
#define MIRROR_H 2
#define ROTATE_L 4
void blit(i32 x, i32 y, i32 source_x, i32 source_y, i32 width, i32 height, Color* source, i32 source_width, i32 source_height);
void blit_masked(i32 x, i32 y, i32 source_x, i32 source_y, i32 width, i32 height, Color mask, Color* source, i32 source_width, i32 source_height);
typedef struct {
char text[4];
u8 width, height;
u16 offset;
} glyph_t;
typedef struct {
u8* pixels;
glyph_t* glyphs;
int num_glyphs;
int line_height;
} font_t;
font_t* load_font(char* font_data, int font_data_size);
void draw_text(font_t* font, i32 x, i32 y, Color color, char* text);
void draw_printf(font_t* font, i32 x, i32 y, Color color, char* format, ...);
#endif