wip
This commit is contained in:
+47
-47
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user