After implementing this, I realized I don't like the appearance of the monochrome font as much as the antialiased font.
44 lines
1006 B
C++
44 lines
1006 B
C++
// this file is designed to be platform-agnostic
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
// metrics are 26.6 fixed point
|
|
struct glyph_metrics {
|
|
int32_t horiBearingX;
|
|
int32_t horiBearingY;
|
|
int32_t horiAdvance;
|
|
} __attribute__ ((packed));
|
|
|
|
static_assert((sizeof (glyph_metrics)) == ((sizeof (int32_t)) * 3));
|
|
|
|
struct glyph_bitmap {
|
|
uint16_t x;
|
|
uint16_t y;
|
|
uint16_t width;
|
|
uint16_t height;
|
|
} __attribute__ ((packed));
|
|
|
|
static_assert((sizeof (glyph_bitmap)) == ((sizeof (uint16_t)) * 4));
|
|
|
|
struct glyph {
|
|
glyph_bitmap bitmap;
|
|
glyph_metrics metrics;
|
|
} __attribute__ ((packed));
|
|
|
|
static_assert((sizeof (glyph)) == ((sizeof (glyph_bitmap)) + (sizeof (glyph_metrics))));
|
|
|
|
struct font {
|
|
uint32_t first_char_code;
|
|
uint16_t glyph_count;
|
|
uint16_t glyph_height;
|
|
uint16_t texture_stride;
|
|
uint16_t texture_width;
|
|
uint16_t texture_height;
|
|
uint16_t _pad;
|
|
uint32_t texture_size;
|
|
uint32_t max_z_curve_ix;
|
|
} __attribute__ ((packed));
|
|
|
|
static_assert((sizeof (font)) == ((sizeof (uint32_t)) * 6));
|