This commit is contained in:
2026-08-27 18:20:26 +02:00
parent a926cd6799
commit 029f9d4d0a
17 changed files with 359 additions and 368 deletions
+47 -47
View File
@@ -1,7 +1,7 @@
#ifndef INC_CP437
#define INC_CP437
const int cp437[] = {
const int cp437[] = int[1024](
0x0000, 0x0000, 0x0000, 0x0000, // 0x00, NUL
0x151E, 0x8A87, 0xE19D, 0x789B, // 0x01, SOH, SMILEY BLACK
0xFBFE, 0xFDF7, 0xEF73, 0x7FEC, // 0x02, STX, SMILEY LIGHT
@@ -257,10 +257,10 @@ const int cp437[] = {
0x666E, 0x3331, 0x0006, 0x0003, // 0xFC, ⁿ
0x6C8E, 0x0010, 0x000E, 0x0001, // 0xFD, ²
0xCC00, 0x3300, 0x00CC, 0x0033, // 0xFE, ■
0x0000, 0x0000, 0x0000, 0x0000, // 0xFF, NBSP
};
0x0000, 0x0000, 0x0000, 0x0000 // 0xFF, NBSP
);
const int charsets[] = {
const int charsets[] = int[18](
0x30, 10, // NUMBERS
0x41, 26, // UPPERCASE LETTERS
0x61, 26, // LOWERCASE LETTERS
@@ -269,12 +269,12 @@ const int charsets[] = {
0xB3, 40, // BARS
0xE0, 16, // GREEK
0x80, 28, // ACCENTS
0xB0, 3, // SHADES
};
0xB0, 3 // SHADES
);
#define CHARSETS 8
const int hex_chars[] = {
const int hex_chars[] = int[16](
0x30,
0x31,
0x32,
@@ -290,29 +290,29 @@ const int hex_chars[] = {
0x43,
0x44,
0x45,
0x46,
};
0x46
);
bool char(vec2 pos, int code)
{
if (pos.x < 0.0 || pos.y < 0.0 || pos.x >= 1.0 || pos.y >= 1.0) {
if (pos.x < .0 || pos.y < .0 || pos.x >= 1. || pos.y >= 1.) {
return false;
}
ivec2 pos2 = ivec2(pos.x * 8.0, (1 - pos.y) * 8.0);
ivec2 pos2 = ivec2(pos.x * 8., (1 - pos.y) * 8.);
ivec2 subpos = pos2 % 4;
int v = int(pow(2, subpos.y * 4 + subpos.x));
int d = int(pos2.y * 0.25) * 2 + int(pos2.x * 0.25);
return (cp437[code * 4 + d] & v) > 0;
int v = int(pow(2., subpos.y * 4. + subpos.x));
int d = int(pos2.y * .25) * 2 + int(pos2.x * .25);
return (cp437[code * 4 + d] & v) > 0.;
}
float char_at(vec2 uv, vec2 pos, int code)
{
return char(uv - pos, code) ? 1 : 0;
return char(uv - pos, code) ? 1. : 0.;
}
float write_5(vec2 uv, vec2 pos, int str[5])
{
float d = 0;
float d = 0.;
int i;
for (i = 0; i < 5; i++) {
@@ -320,7 +320,7 @@ float write_5(vec2 uv, vec2 pos, int str[5])
return d;
}
d += char_at(uv, pos + vec2(i, 0), str[i]);
d += char_at(uv, pos + vec2(i, 0.), str[i]);
}
return d;
@@ -328,7 +328,7 @@ float write_5(vec2 uv, vec2 pos, int str[5])
float write_10(vec2 uv, vec2 pos, int str[10])
{
float d = 0;
float d = 0.;
int i;
for (i = 0; i < 10; i++) {
@@ -344,7 +344,7 @@ float write_10(vec2 uv, vec2 pos, int str[10])
float write_20(vec2 uv, vec2 pos, int str[20])
{
float d = 0;
float d = 0.;
int i;
for (i = 0; i < 20; i++) {
@@ -352,35 +352,35 @@ float write_20(vec2 uv, vec2 pos, int str[20])
return d;
}
d += char_at(uv, pos + vec2(i, 0), str[i]);
d += char_at(uv, pos + vec2(i, 0.), str[i]);
}
return d;
}
float write_int(vec2 uv, vec2 pos, uint value, uint magnitude)
float write_int(vec2 uv, vec2 pos, int value, int magnitude)
{
int i;
uint m = 1;
float d = 0;
int m = 1;
float d = 0.;
for (i = 0; i < magnitude; i++) {
if (i == 0 || value >= m) {
d += char_at(uv, pos + vec2(magnitude - i - 1, 0), int(0x30 + (value % (m * 10u)) / m));
m *= 10u;
d += char_at(uv, pos + vec2(magnitude - i - 1., 0.), int(0x30 + (value % (m * 10)) / m));
m *= 10;
}
}
return d;
}
float write_int_left(vec2 uv, vec2 pos, uint value, uint magnitude)
float write_int_left(vec2 uv, vec2 pos, int value, int magnitude)
{
int i;
uint m = 1;
float d = 0;
int m = 1;
float d = 0.;
for (i = 0; i < magnitude; i++) {
if (i == 0 || value >= m) {
pos.x += 1;
m *= 10u;
pos.x += 1.;
m *= 10;
}
}
return write_int(uv, pos, value, magnitude);
@@ -390,24 +390,24 @@ int read(sampler2D tex, vec2 uv, float k, int d, float t)
{
float inv_k = 1 / k;
vec2 tex_uv = floor(uv * k) * inv_k;
tex_uv += vec2(d % 2, floor(d * 0.5)) * 0.5 * inv_k;
tex_uv += vec2(d % 2, floor(d * .5)) * .5 * inv_k;
return
((mean(reframe(tex, tex_uv + vec2(0, 3) * inv_k * 0.125)) > t) ? 1 : 0) +
((mean(reframe(tex, tex_uv + vec2(0, 2) * inv_k * 0.125)) > t) ? 2 : 0) +
((mean(reframe(tex, tex_uv + vec2(0, 1) * inv_k * 0.125)) > t) ? 4 : 0) +
((mean(reframe(tex, tex_uv + vec2(0, 0) * inv_k * 0.125)) > t) ? 8 : 0) +
((mean(reframe(tex, tex_uv + vec2(1, 3) * inv_k * 0.125)) > t) ? 16 : 0) +
((mean(reframe(tex, tex_uv + vec2(1, 2) * inv_k * 0.125)) > t) ? 32 : 0) +
((mean(reframe(tex, tex_uv + vec2(1, 1) * inv_k * 0.125)) > t) ? 64 : 0) +
((mean(reframe(tex, tex_uv + vec2(1, 0) * inv_k * 0.125)) > t) ? 128 : 0) +
((mean(reframe(tex, tex_uv + vec2(2, 3) * inv_k * 0.125)) > t) ? 256 : 0) +
((mean(reframe(tex, tex_uv + vec2(2, 2) * inv_k * 0.125)) > t) ? 512 : 0) +
((mean(reframe(tex, tex_uv + vec2(2, 1) * inv_k * 0.125)) > t) ? 1024 : 0) +
((mean(reframe(tex, tex_uv + vec2(2, 0) * inv_k * 0.125)) > t) ? 2048 : 0) +
((mean(reframe(tex, tex_uv + vec2(3, 3) * inv_k * 0.125)) > t) ? 4096 : 0) +
((mean(reframe(tex, tex_uv + vec2(3, 2) * inv_k * 0.125)) > t) ? 8192 : 0) +
((mean(reframe(tex, tex_uv + vec2(3, 1) * inv_k * 0.125)) > t) ? 16384 : 0) +
((mean(reframe(tex, tex_uv + vec2(3, 0) * inv_k * 0.125)) > t) ? 32768 : 0);
((mean(reframe(tex, tex_uv + vec2(0, 3) * inv_k * .125)) > t) ? 1 : 0) +
((mean(reframe(tex, tex_uv + vec2(0, 2) * inv_k * .125)) > t) ? 2 : 0) +
((mean(reframe(tex, tex_uv + vec2(0, 1) * inv_k * .125)) > t) ? 4 : 0) +
((mean(reframe(tex, tex_uv + vec2(0, 0) * inv_k * .125)) > t) ? 8 : 0) +
((mean(reframe(tex, tex_uv + vec2(1, 3) * inv_k * .125)) > t) ? 16 : 0) +
((mean(reframe(tex, tex_uv + vec2(1, 2) * inv_k * .125)) > t) ? 32 : 0) +
((mean(reframe(tex, tex_uv + vec2(1, 1) * inv_k * .125)) > t) ? 64 : 0) +
((mean(reframe(tex, tex_uv + vec2(1, 0) * inv_k * .125)) > t) ? 128 : 0) +
((mean(reframe(tex, tex_uv + vec2(2, 3) * inv_k * .125)) > t) ? 256 : 0) +
((mean(reframe(tex, tex_uv + vec2(2, 2) * inv_k * .125)) > t) ? 512 : 0) +
((mean(reframe(tex, tex_uv + vec2(2, 1) * inv_k * .125)) > t) ? 1024 : 0) +
((mean(reframe(tex, tex_uv + vec2(2, 0) * inv_k * .125)) > t) ? 2048 : 0) +
((mean(reframe(tex, tex_uv + vec2(3, 3) * inv_k * .125)) > t) ? 4096 : 0) +
((mean(reframe(tex, tex_uv + vec2(3, 2) * inv_k * .125)) > t) ? 8192 : 0) +
((mean(reframe(tex, tex_uv + vec2(3, 1) * inv_k * .125)) > t) ? 16384 : 0) +
((mean(reframe(tex, tex_uv + vec2(3, 0) * inv_k * .125)) > t) ? 32768 : 0);
}
// https://web.archive.org/web/20151229003112/http://blogs.msdn.com/b/jeuge/archive/2005/06/08/hakmem-bit-count.aspx