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