diff options
author | Bad Diode <bd@badd10de.dev> | 2022-08-29 07:11:23 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2022-08-29 07:11:23 +0200 |
commit | d2a2381066a5aafc71b4c930afa5a473b3bd629b (patch) | |
tree | bcac84ab3358dd03fdd70639d4cc5fdb7632e956 | |
parent | 107b03f9019ec79324e9ef23b5ec9f4aa7e04f75 (diff) | |
download | ogl-monotext-d2a2381066a5aafc71b4c930afa5a473b3bd629b.tar.gz ogl-monotext-d2a2381066a5aafc71b4c930afa5a473b3bd629b.zip |
Add unpack function for 1bb font encoding to gl texture
-rw-r--r-- | src/bd-font.c | 141 | ||||
-rw-r--r-- | src/main.c | 69 |
2 files changed, 197 insertions, 13 deletions
diff --git a/src/bd-font.c b/src/bd-font.c new file mode 100644 index 0000000..5276735 --- /dev/null +++ b/src/bd-font.c | |||
@@ -0,0 +1,141 @@ | |||
1 | /* | ||
2 | Copyright (c) 2021 Bad Diode | ||
3 | |||
4 | Permission to use, copy, modify, and distribute this software for any | ||
5 | purpose with or without fee is hereby granted, provided that the above | ||
6 | copyright notice and this permission notice appear in all copies. | ||
7 | |||
8 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
9 | WITH REGARD TO THIS SOFTWARE. | ||
10 | */ | ||
11 | |||
12 | static const u32 bd_font[] = { | ||
13 | 0x00000000, 0x00000000, 0x00002400, 0x423c0000, | ||
14 | 0x00002400, 0x3c420000, 0x0000363e, 0x3e1c0800, | ||
15 | 0x00081c3e, 0x3e1c0800, 0x001c1c3e, 0x363e081c, | ||
16 | 0x00081c3e, 0x3e3e081c, 0x00000018, 0x18000000, | ||
17 | 0x7e7e7e66, 0x667e7e7e, 0x00001824, 0x24180000, | ||
18 | 0x7e7e665a, 0x5a667e7e, 0x00081c3e, 0x081c221c, | ||
19 | 0x001c221c, 0x08083e08, 0x00183828, 0x08080c0c, | ||
20 | 0x003c2424, 0x24343606, 0x00082208, 0x1c082208, | ||
21 | 0x040c1c3c, 0x1c0c0400, 0x2030383c, 0x38302000, | ||
22 | 0x081c3e08, 0x083e1c08, 0x00141414, 0x14140014, | ||
23 | 0x003c2a2a, 0x2c282828, 0x0038043c, 0x423c201e, | ||
24 | 0x00000000, 0x7e000000, 0x081c3e08, 0x3e1c083e, | ||
25 | 0x081c3e08, 0x08080800, 0x00080808, 0x083e1c08, | ||
26 | 0x00001030, 0x7e301000, 0x0000080c, 0x7e0c0800, | ||
27 | 0x00000000, 0x0002023e, 0x00002466, 0xff662400, | ||
28 | 0x0008081c, 0x1c3e3e00, 0x003e3e1c, 0x1c080800, | ||
29 | 0x00000000, 0x00000000, 0x00080808, 0x08080008, | ||
30 | 0x14141400, 0x00000000, 0x0000143e, 0x143e1400, | ||
31 | 0x00081c02, 0x1c201e08, 0x00002616, 0x08343200, | ||
32 | 0x00081408, 0x34122c00, 0x08080800, 0x00000000, | ||
33 | 0x08040404, 0x04040408, 0x08101010, 0x10101008, | ||
34 | 0x00001408, 0x3e081400, 0x00000808, 0x3e080800, | ||
35 | 0x00000000, 0x000c0804, 0x00000000, 0x3e000000, | ||
36 | 0x00000000, 0x000c0c00, 0x00203018, 0x0c060200, | ||
37 | 0x00001c22, 0x2a221c00, 0x00000c0a, 0x08083e00, | ||
38 | 0x00001c20, 0x1c023e00, 0x00001c22, 0x18221c00, | ||
39 | 0x00001018, 0x143e1000, 0x00003e02, 0x1e201e00, | ||
40 | 0x00001c02, 0x1e221c00, 0x00003e20, 0x10080400, | ||
41 | 0x00001c22, 0x1c221c00, 0x00001c22, 0x3c201c00, | ||
42 | 0x00000c0c, 0x000c0c00, 0x00000c0c, 0x000c0804, | ||
43 | 0x00100804, 0x04081000, 0x0000003e, 0x003e0000, | ||
44 | 0x00040810, 0x10080400, 0x001c2220, 0x10080008, | ||
45 | 0x001c322a, 0x1a021c00, 0x001c2222, 0x3e222200, | ||
46 | 0x001e221e, 0x22221e00, 0x001c2202, 0x02221c00, | ||
47 | 0x000e1222, 0x22120e00, 0x003e021e, 0x02023e00, | ||
48 | 0x003e021e, 0x02020200, 0x001c2202, 0x32221c00, | ||
49 | 0x00222222, 0x3e222200, 0x003e0808, 0x08083e00, | ||
50 | 0x00202020, 0x22221c00, 0x0022120a, 0x0e122200, | ||
51 | 0x00020202, 0x02023e00, 0x0022362a, 0x22222200, | ||
52 | 0x0022262a, 0x32222200, 0x001c2222, 0x22221c00, | ||
53 | 0x001e2222, 0x1e020200, 0x001c2222, 0x2a122c00, | ||
54 | 0x001e2222, 0x1e122200, 0x001c021c, 0x20221c00, | ||
55 | 0x003e0808, 0x08080800, 0x00222222, 0x22221c00, | ||
56 | 0x00222222, 0x22140800, 0x0022222a, 0x2a2a1400, | ||
57 | 0x00221408, 0x08142200, 0x00222214, 0x08080800, | ||
58 | 0x003e1008, 0x04023e00, 0x1c040404, 0x0404041c, | ||
59 | 0x0002060c, 0x18302000, 0x1c101010, 0x1010101c, | ||
60 | 0x08142200, 0x00000000, 0x00000000, 0x00003e00, | ||
61 | 0x00040810, 0x00000000, 0x00001c20, 0x3c223c00, | ||
62 | 0x0002021e, 0x22221e00, 0x00001c22, 0x02221c00, | ||
63 | 0x0020203c, 0x22223c00, 0x00001c22, 0x1e023c00, | ||
64 | 0x00003c02, 0x021e0202, 0x00003c22, 0x223c201c, | ||
65 | 0x0002021e, 0x22222200, 0x0008000c, 0x08083e00, | ||
66 | 0x00200020, 0x2020221c, 0x0002120a, 0x060a3200, | ||
67 | 0x000c0808, 0x08083e00, 0x0000162a, 0x2a2a2a00, | ||
68 | 0x00000e32, 0x22222200, 0x00001c22, 0x22221c00, | ||
69 | 0x00001e22, 0x221e0202, 0x00003c22, 0x223c2070, | ||
70 | 0x00001a26, 0x02020200, 0x00001c02, 0x1c201e00, | ||
71 | 0x00043e04, 0x04041800, 0x00002222, 0x22221c00, | ||
72 | 0x00002222, 0x22140800, 0x00002222, 0x2a2a1400, | ||
73 | 0x00002214, 0x08142200, 0x00002222, 0x223c201c, | ||
74 | 0x00003e10, 0x08043e00, 0x18040402, 0x02040418, | ||
75 | 0x00080808, 0x08080808, 0x0c101020, 0x2010100c, | ||
76 | 0x00002c1a, 0x00000000, 0x00000814, 0x22223e00, | ||
77 | 0x001c2202, 0x221c080e, 0x00140022, 0x2222221c, | ||
78 | 0x1008001c, 0x221e023c, 0x0814001c, 0x203c223c, | ||
79 | 0x0014001c, 0x203c223c, 0x0408001c, 0x203c223c, | ||
80 | 0x0814081c, 0x203c223c, 0x00001c02, 0x221c080e, | ||
81 | 0x0814001c, 0x221e023c, 0x0014001c, 0x221e023c, | ||
82 | 0x0408001c, 0x221e023c, 0x0014000c, 0x0808083e, | ||
83 | 0x0014000c, 0x0808083e, 0x0408000c, 0x0808083e, | ||
84 | 0x0014001c, 0x223e2222, 0x0814081c, 0x223e2222, | ||
85 | 0x1008003e, 0x021e023e, 0x00001628, 0x1c0a3400, | ||
86 | 0x003c0a1a, 0x0e0a3a00, 0x0814001c, 0x2222221c, | ||
87 | 0x0014001c, 0x2222221c, 0x0408001c, 0x2222221c, | ||
88 | 0x08140022, 0x2222221c, 0x04080022, 0x2222221c, | ||
89 | 0x00140022, 0x223c201c, 0x14001c22, 0x2222221c, | ||
90 | 0x14002222, 0x2222221c, 0x00081c22, 0x02221c08, | ||
91 | 0x0018240e, 0x04043e00, 0x00221408, 0x1c081c08, | ||
92 | 0x0038041e, 0x041e0438, 0x0030081c, 0x08080806, | ||
93 | 0x1008001c, 0x203c223c, 0x1008000c, 0x0808083e, | ||
94 | 0x1008001c, 0x2222221c, 0x10080022, 0x2222221c, | ||
95 | 0x2c1a000e, 0x32222222, 0x2c1a0022, 0x262a3222, | ||
96 | 0x001c122c, 0x001e0000, 0x000c120c, 0x001e0000, | ||
97 | 0x08000804, 0x02221c00, 0x0000003e, 0x02020000, | ||
98 | 0x0000003e, 0x20200000, 0x06241468, 0x4422f000, | ||
99 | 0x06241468, 0x54f24000, 0x08000808, 0x08080800, | ||
100 | 0x00482412, 0x24480000, 0x00122448, 0x24120000, | ||
101 | 0x00880022, 0x00880022, 0x55885522, 0x55885522, | ||
102 | 0x55aa55aa, 0x55aa55aa, 0x08080808, 0x08080808, | ||
103 | 0x0808080f, 0x08080808, 0x08080f08, 0x0f080808, | ||
104 | 0x14141417, 0x14141414, 0x0000001f, 0x14141414, | ||
105 | 0x00000f08, 0x0f080808, 0x14141710, 0x17141414, | ||
106 | 0x14141414, 0x14141414, 0x00001f10, 0x17141414, | ||
107 | 0x14141710, 0x1f000000, 0x1414141f, 0x00000000, | ||
108 | 0x08080f08, 0x0f000000, 0x0000000f, 0x08080808, | ||
109 | 0x080808f8, 0x00000000, 0x080808ff, 0x00000000, | ||
110 | 0x000000ff, 0x08080808, 0x080808f8, 0x08080808, | ||
111 | 0x000000ff, 0x00000000, 0x080808ff, 0x08080808, | ||
112 | 0x0808f808, 0xf8080808, 0x141414f4, 0x14141414, | ||
113 | 0x1414f404, 0xfc000000, 0x0000fc04, 0xf4141414, | ||
114 | 0x1414f700, 0xff000000, 0x0000ff00, 0xf7141414, | ||
115 | 0x1414f404, 0xf4141414, 0x0000ff00, 0xff000000, | ||
116 | 0x1414f700, 0xf7141414, 0x0808ff00, 0xff000000, | ||
117 | 0x141414ff, 0x00000000, 0x0000ff00, 0xff080808, | ||
118 | 0x000000ff, 0x14141414, 0x141414fc, 0x00000000, | ||
119 | 0x0808f808, 0xf8000000, 0x0000f808, 0xf8080808, | ||
120 | 0x000000fc, 0x14141414, 0x141414ff, 0x14141414, | ||
121 | 0x0808ff08, 0xff080808, 0x0808080f, 0x00000000, | ||
122 | 0x000000f8, 0x08080808, 0xffffffff, 0xffffffff, | ||
123 | 0x00000000, 0xffffffff, 0x0f0f0f0f, 0x0f0f0f0f, | ||
124 | 0xf0f0f0f0, 0xf0f0f0f0, 0xffffffff, 0x00000000, | ||
125 | 0x00002c12, 0x12122c00, 0x000c120a, 0x12223a02, | ||
126 | 0x003e2202, 0x02020200, 0x00003e14, 0x14141400, | ||
127 | 0x3e220408, 0x04223e00, 0x00003c12, 0x12120c00, | ||
128 | 0x00002222, 0x221e0202, 0x002c1a08, 0x08281000, | ||
129 | 0x1c081c22, 0x221c081c, 0x1c22223e, 0x22221c00, | ||
130 | 0x1c222222, 0x22143600, 0x1e041824, 0x22221c00, | ||
131 | 0x0000142a, 0x2a140000, 0x0020142a, 0x2a140200, | ||
132 | 0x00003c02, 0x1c023c00, 0x001c2222, 0x22222202, | ||
133 | 0x00003e00, 0x3e003e00, 0x0000081c, 0x08001c00, | ||
134 | 0x04081008, 0x04001c00, 0x10080408, 0x10001c00, | ||
135 | 0x30480808, 0x08080808, 0x08080808, 0x08080906, | ||
136 | 0x00000800, 0x3e000800, 0x00004c32, 0x004c3200, | ||
137 | 0x00182418, 0x00000000, 0x00001c1c, 0x1c000000, | ||
138 | 0x00000018, 0x18000000, 0x00f01010, 0x10121418, | ||
139 | 0x0c342424, 0x00000000, 0x1810083c, 0x00000000, | ||
140 | 0x00003c3c, 0x3c3c0000, 0x00000000, 0x00000000, | ||
141 | }; | ||
@@ -6,8 +6,9 @@ | |||
6 | #include <stdlib.h> | 6 | #include <stdlib.h> |
7 | 7 | ||
8 | #include "shorthand.h" | 8 | #include "shorthand.h" |
9 | #include "bd-font.c" | ||
9 | 10 | ||
10 | #define TEXT_OVERLAY_SIZE 5 | 11 | #define TEXT_OVERLAY_SIZE 100 |
11 | 12 | ||
12 | // | 13 | // |
13 | // Callbacks. | 14 | // Callbacks. |
@@ -154,6 +155,38 @@ init_context(Context *ctx) { | |||
154 | ctx->window = window; | 155 | ctx->window = window; |
155 | } | 156 | } |
156 | 157 | ||
158 | static inline u32 | ||
159 | unpack_nibble(u8 hex) { | ||
160 | const u32 conversion_u32[16] = { | ||
161 | 0x00000000, 0x00000001, 0x00000100, 0x00000101, | ||
162 | 0x00010000, 0x00010001, 0x00010100, 0x00010101, | ||
163 | 0x01000000, 0x01000001, 0x01000100, 0x01000101, | ||
164 | 0x01010000, 0x01010001, 0x01010100, 0x01010101, | ||
165 | }; | ||
166 | return conversion_u32[hex & 0x0F]; | ||
167 | } | ||
168 | |||
169 | // Unpack N tiles packed at 1bpp. | ||
170 | static inline void | ||
171 | unpack_letter(const u32 *src, u32 *dst) { | ||
172 | *dst++ = unpack_nibble((src[1] >> 0) & 0x0F); | ||
173 | *dst++ = unpack_nibble((src[1] >> 4) & 0x0F); | ||
174 | *dst++ = unpack_nibble((src[1] >> 8) & 0x0F); | ||
175 | *dst++ = unpack_nibble((src[1] >> 12) & 0x0F); | ||
176 | *dst++ = unpack_nibble((src[1] >> 16) & 0x0F); | ||
177 | *dst++ = unpack_nibble((src[1] >> 20) & 0x0F); | ||
178 | *dst++ = unpack_nibble((src[1] >> 24) & 0x0F); | ||
179 | *dst++ = unpack_nibble((src[1] >> 28) & 0x0F); | ||
180 | *dst++ = unpack_nibble((src[0] >> 0) & 0x0F); | ||
181 | *dst++ = unpack_nibble((src[0] >> 4) & 0x0F); | ||
182 | *dst++ = unpack_nibble((src[0] >> 8) & 0x0F); | ||
183 | *dst++ = unpack_nibble((src[0] >> 12) & 0x0F); | ||
184 | *dst++ = unpack_nibble((src[0] >> 16) & 0x0F); | ||
185 | *dst++ = unpack_nibble((src[0] >> 20) & 0x0F); | ||
186 | *dst++ = unpack_nibble((src[0] >> 24) & 0x0F); | ||
187 | *dst++ = unpack_nibble((src[0] >> 28) & 0x0F); | ||
188 | } | ||
189 | |||
157 | void | 190 | void |
158 | init_debug_overlay(Context *ctx) { | 191 | init_debug_overlay(Context *ctx) { |
159 | // Prepare quad rendering. | 192 | // Prepare quad rendering. |
@@ -196,20 +229,29 @@ init_debug_overlay(Context *ctx) { | |||
196 | 229 | ||
197 | // Texture atlas. | 230 | // Texture atlas. |
198 | // TODO: Full 256 ascii font. | 231 | // TODO: Full 256 ascii font. |
199 | u8 texture[] = { | 232 | u8 texture[256 * 8 * 8] = {0}; |
200 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 233 | unpack_letter(&bd_font['A' * 2], (u32*)&texture[0]); |
201 | 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, | 234 | for (size_t i = 0; i < 8; ++i) { |
202 | 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, | 235 | printf("%02x %02x %02x %02x %02x %02x %02x %02x\n", |
203 | 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | 236 | texture[0 + i * 8], |
204 | 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, | 237 | texture[1 + i * 8], |
205 | 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | 238 | texture[2 + i * 8], |
206 | 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, | 239 | texture[3 + i * 8], |
207 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 240 | texture[4 + i * 8], |
208 | }; | 241 | texture[5 + i * 8], |
242 | texture[6 + i * 8], | ||
243 | texture[7 + i * 8]); | ||
244 | } | ||
209 | glGenTextures(1, &ctx->text_overlay.tex_id); | 245 | glGenTextures(1, &ctx->text_overlay.tex_id); |
210 | glBindTexture(GL_TEXTURE_2D, ctx->text_overlay.tex_id); | 246 | glBindTexture(GL_TEXTURE_2D, ctx->text_overlay.tex_id); |
211 | glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, 8 * 3, 8, 0, GL_RED, | 247 | glTexImage2D(GL_TEXTURE_2D, 0, |
248 | GL_R8, | ||
249 | 8, // Width | ||
250 | 1 * 8, // Height | ||
251 | 0, GL_RED, | ||
212 | GL_UNSIGNED_BYTE, &texture); | 252 | GL_UNSIGNED_BYTE, &texture); |
253 | // glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, sizeof(bd_font), 8, 0, GL_RED, | ||
254 | // GL_UNSIGNED_BYTE, &bd_font); | ||
213 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | 255 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
214 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 256 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
215 | glBindTexture(GL_TEXTURE_2D, 0); | 257 | glBindTexture(GL_TEXTURE_2D, 0); |
@@ -249,7 +291,8 @@ init_debug_overlay(Context *ctx) { | |||
249 | " pos += scalar * offset.xy;\n" | 291 | " pos += scalar * offset.xy;\n" |
250 | " pos = mix(vec2(-1.0), vec2(1.0), pos);\n" | 292 | " pos = mix(vec2(-1.0), vec2(1.0), pos);\n" |
251 | " gl_Position = vec4(pos, 0.0, 1.0);\n" | 293 | " gl_Position = vec4(pos, 0.0, 1.0);\n" |
252 | " tex = tex_coords * vec2(m, 1.0) + vec2(k, 0.0);\n" | 294 | // " tex = tex_coords * vec2(1.0, m) + vec2(0.0, k);\n" |
295 | " tex = tex_coords;\n" | ||
253 | "}"; | 296 | "}"; |
254 | 297 | ||
255 | // Fragment shader. | 298 | // Fragment shader. |