src/internal.h
1#ifndef INTERNAL_H
2#define INTERNAL_H
3
4#include "alba.h"
5
6#include "hashmap.h"
7
8#define NO_TEXTURE {-1, -1}
9
10// Atlas
11typedef struct
12{
13 uint32_t character;
14 FT_Long glyph_index;
15 FT_Glyph_Metrics metrics;
16 FT_Bitmap bitmap;
17 AlbaVector start;
18 AlbaVector end;
19} Glyph;
20
21typedef struct
22{
23 struct hashmap* glyphs;
24 int dirty;
25 DynArray glyph_sizes; // in w, h order
26 AlbaVector size;
27 uint8_t* image;
28} Atlas;
29
30Atlas atlas_new(uint32_t capacity);
31void atlas_reserve(Atlas* atlas, uint32_t capacity);
32void atlas_append(Atlas* atlas, FT_Face face, uint32_t character);
33void atlas_generate_image(Atlas* atlas);
34void atlas_release(const Atlas* atlas);
35
36// Helpers
37WGPUTexture create_texture(
38 const AlbaWindow* window,
39 WGPUTextureUsage usage,
40 AlbaVector size,
41 WGPUTextureFormat format, uint8_t samples,
42 const void* data
43);
44
45// Drawng
46void draw_triangles_indexed_render_pass(
47 RenderPassData* data,
48 uint32_t num_vertices,
49 const AlbaVector* vertices,
50 const AlbaAttribute* attributes,
51 uint32_t num_indices,
52 uint32_t* indices
53);
54
55#endif // INTERNAL_H