summaryrefslogtreecommitdiff
path: root/include/engine/rendering.h
blob: 3ec84169dd22ef75db38c2dfcc37ac362f721098 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#ifndef RENDERING_H
#define RENDERING_H

#include "types.h"
#include "vector.h"

/* Definitions */
#define RGBA(_r,_g,_b,_a) ((Engine_color){.r=_r, .g=_g, .b=_b, .a=_a})
#define RGB(_r,_g,_b) RGBA(_r,_g,_b,0xFF)

/* Types */
typedef struct {
  u8 r;
  u8 g;
  u8 b;
  u8 a;
} Engine_color;

typedef struct {
  u32    texture_id;
  v2_i32 coord;
} Sprite;

#include "ui.h"
#include "engine.h"

/* Rendering functions */
void render_begin(Window *w);
void render_present(Window *w);
void drawcall_reset(void);
void render(Window *w);

/* Misc */
void engine_window_resize_pointers(i32* w, i32* h);
void engine_window_resize_pointers_reset(void);

/* UI rendering */
/* See rendering_ui.c for implementation */
i64 engine_render_text(i32 font_id, Engine_color fg, char *text, v2_i32 *size_out, bool wrapped);
void engine_draw_uitree(UITree *t);
void engine_draw_sprite(Sprite *s, v2_i32 *pos, f32 scale);
void engine_draw_sprite_ex(Sprite *s, v2_i32 *pos, f32 scale, Engine_color colormod);

Sprite sprite_new(u64 tid, u8 coord);

#ifdef ENGINE_INTERNALS
#include "engine.h"

#define TEXTURES_INCREMENT 512

typedef enum {
	RenderDrawCallType_UITree,
	/*RenderDrawCallType_UIButton,*/
	RenderDrawCallType_Text,
	RenderDrawCallType_Sprite,
} RenderDrawCallType;

typedef struct {
	RenderDrawCallType type;
	union {
		void *data;
		struct {
			Sprite *sprite;
			i32 x; i32 y;
			f32 scale;
			SDL_Color mod;
		} sprite;
	} data;
} RenderDrawCall;

void render_uitree(Window *w, UITree *t);

void render_container(Window *w, UITree_container *t);
void render_button(Window *w, UITree_button *t);
void render_title(Window *w, UITree_title *t);
void render_text(Window *w, UITree_text *t);
v2_i32 elem_size(UITree *root);

#endif

#endif