Omnidome
Fulldome Mapping Software Toolkit
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
digits.h
Go to the documentation of this file.
1 /* Copyright (c) 2014-2016 "Omnidome" by cr8tr
2  * Dome Mapping Projection Software (http://omnido.me).
3  * Omnidome was created by Michael Winkelmann aka Wilston Oreo (@WilstonOreo)
4  *
5  * This file is part of Omnidome.
6  *
7  * Omnidome is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU Affero General Public License as
9  * published by the Free Software Foundation, either version 3 of the
10  * License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Affero General Public License for more details.
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20  vec4 ch_spc = vec4(0x000000,0x000000,0x000000,0x000000);
21  vec4 ch_exc = vec4(0x003078,0x787830,0x300030,0x300000);
22  vec4 ch_quo = vec4(0x006666,0x662400,0x000000,0x000000);
23  vec4 ch_hsh = vec4(0x006C6C,0xFE6C6C,0x6CFE6C,0x6C0000);
24  vec4 ch_dol = vec4(0x30307C,0xC0C078,0x0C0CF8,0x303000);
25  vec4 ch_pct = vec4(0x000000,0xC4CC18,0x3060CC,0x8C0000);
26  vec4 ch_amp = vec4(0x0070D8,0xD870FA,0xDECCDC,0x760000);
27  vec4 ch_apo = vec4(0x003030,0x306000,0x000000,0x000000);
28  vec4 ch_lbr = vec4(0x000C18,0x306060,0x603018,0x0C0000);
29  vec4 ch_rbr = vec4(0x006030,0x180C0C,0x0C1830,0x600000);
30  vec4 ch_ast = vec4(0x000000,0x663CFF,0x3C6600,0x000000);
31  vec4 ch_crs = vec4(0x000000,0x18187E,0x181800,0x000000);
32  vec4 ch_com = vec4(0x000000,0x000000,0x000038,0x386000);
33  vec4 ch_dsh = vec4(0x000000,0x0000FE,0x000000,0x000000);
34  vec4 ch_per = vec4(0x000000,0x000000,0x000038,0x380000);
35  vec4 ch_lsl = vec4(0x000002,0x060C18,0x3060C0,0x800000);
36  vec4 ch_0 = vec4(0x007CC6,0xD6D6D6,0xD6D6C6,0x7C0000);
37  vec4 ch_1 = vec4(0x001030,0xF03030,0x303030,0xFC0000);
38  vec4 ch_2 = vec4(0x0078CC,0xCC0C18,0x3060CC,0xFC0000);
39  vec4 ch_3 = vec4(0x0078CC,0x0C0C38,0x0C0CCC,0x780000);
40  vec4 ch_4 = vec4(0x000C1C,0x3C6CCC,0xFE0C0C,0x1E0000);
41  vec4 ch_5 = vec4(0x00FCC0,0xC0C0F8,0x0C0CCC,0x780000);
42  vec4 ch_6 = vec4(0x003860,0xC0C0F8,0xCCCCCC,0x780000);
43  vec4 ch_7 = vec4(0x00FEC6,0xC6060C,0x183030,0x300000);
44  vec4 ch_8 = vec4(0x0078CC,0xCCEC78,0xDCCCCC,0x780000);
45  vec4 ch_9 = vec4(0x0078CC,0xCCCC7C,0x181830,0x700000);
46  vec4 ch_col = vec4(0x000000,0x383800,0x003838,0x000000);
47  vec4 ch_scl = vec4(0x000000,0x383800,0x003838,0x183000);
48  vec4 ch_les = vec4(0x000C18,0x3060C0,0x603018,0x0C0000);
49  vec4 ch_equ = vec4(0x000000,0x007E00,0x7E0000,0x000000);
50  vec4 ch_grt = vec4(0x006030,0x180C06,0x0C1830,0x600000);
51  vec4 ch_que = vec4(0x0078CC,0x0C1830,0x300030,0x300000);
52  vec4 ch_ats = vec4(0x007CC6,0xC6DEDE,0xDEC0C0,0x7C0000);
53  vec4 ch_A = vec4(0x003078,0xCCCCCC,0xFCCCCC,0xCC0000);
54  vec4 ch_B = vec4(0x00FC66,0x66667C,0x666666,0xFC0000);
55  vec4 ch_C = vec4(0x003C66,0xC6C0C0,0xC0C666,0x3C0000);
56  vec4 ch_D = vec4(0x00F86C,0x666666,0x66666C,0xF80000);
57  vec4 ch_E = vec4(0x00FE62,0x60647C,0x646062,0xFE0000);
58  vec4 ch_F = vec4(0x00FE66,0x62647C,0x646060,0xF00000);
59  vec4 ch_G = vec4(0x003C66,0xC6C0C0,0xCEC666,0x3E0000);
60  vec4 ch_H = vec4(0x00CCCC,0xCCCCFC,0xCCCCCC,0xCC0000);
61  vec4 ch_I = vec4(0x007830,0x303030,0x303030,0x780000);
62  vec4 ch_J = vec4(0x001E0C,0x0C0C0C,0xCCCCCC,0x780000);
63  vec4 ch_K = vec4(0x00E666,0x6C6C78,0x6C6C66,0xE60000);
64  vec4 ch_L = vec4(0x00F060,0x606060,0x626666,0xFE0000);
65  vec4 ch_M = vec4(0x00C6EE,0xFEFED6,0xC6C6C6,0xC60000);
66  vec4 ch_N = vec4(0x00C6C6,0xE6F6FE,0xDECEC6,0xC60000);
67  vec4 ch_O = vec4(0x00386C,0xC6C6C6,0xC6C66C,0x380000);
68  vec4 ch_P = vec4(0x00FC66,0x66667C,0x606060,0xF00000);
69  vec4 ch_Q = vec4(0x00386C,0xC6C6C6,0xCEDE7C,0x0C1E00);
70  vec4 ch_R = vec4(0x00FC66,0x66667C,0x6C6666,0xE60000);
71  vec4 ch_S = vec4(0x0078CC,0xCCC070,0x18CCCC,0x780000);
72  vec4 ch_T = vec4(0x00FCB4,0x303030,0x303030,0x780000);
73  vec4 ch_U = vec4(0x00CCCC,0xCCCCCC,0xCCCCCC,0x780000);
74  vec4 ch_V = vec4(0x00CCCC,0xCCCCCC,0xCCCC78,0x300000);
75  vec4 ch_W = vec4(0x00C6C6,0xC6C6D6,0xD66C6C,0x6C0000);
76  vec4 ch_X = vec4(0x00CCCC,0xCC7830,0x78CCCC,0xCC0000);
77  vec4 ch_Y = vec4(0x00CCCC,0xCCCC78,0x303030,0x780000);
78  vec4 ch_Z = vec4(0x00FECE,0x981830,0x6062C6,0xFE0000);
79  vec4 ch_lsb = vec4(0x003C30,0x303030,0x303030,0x3C0000);
80  vec4 ch_rsl = vec4(0x000080,0xC06030,0x180C06,0x020000);
81  vec4 ch_rsb = vec4(0x003C0C,0x0C0C0C,0x0C0C0C,0x3C0000);
82  vec4 ch_pow = vec4(0x10386C,0xC60000,0x000000,0x000000);
83  vec4 ch_usc = vec4(0x000000,0x000000,0x000000,0x00FF00);
84  vec4 ch_a = vec4(0x000000,0x00780C,0x7CCCCC,0x760000);
85  vec4 ch_b = vec4(0x00E060,0x607C66,0x666666,0xDC0000);
86  vec4 ch_c = vec4(0x000000,0x0078CC,0xC0C0CC,0x780000);
87  vec4 ch_d = vec4(0x001C0C,0x0C7CCC,0xCCCCCC,0x760000);
88  vec4 ch_e = vec4(0x000000,0x0078CC,0xFCC0CC,0x780000);
89  vec4 ch_f = vec4(0x00386C,0x6060F8,0x606060,0xF00000);
90  vec4 ch_g = vec4(0x000000,0x0076CC,0xCCCC7C,0x0CCC78);
91  vec4 ch_h = vec4(0x00E060,0x606C76,0x666666,0xE60000);
92  vec4 ch_i = vec4(0x001818,0x007818,0x181818,0x7E0000);
93  vec4 ch_j = vec4(0x000C0C,0x003C0C,0x0C0C0C,0xCCCC78);
94  vec4 ch_k = vec4(0x00E060,0x60666C,0x786C66,0xE60000);
95  vec4 ch_l = vec4(0x007818,0x181818,0x181818,0x7E0000);
96  vec4 ch_m = vec4(0x000000,0x00FCD6,0xD6D6D6,0xC60000);
97  vec4 ch_n = vec4(0x000000,0x00F8CC,0xCCCCCC,0xCC0000);
98  vec4 ch_o = vec4(0x000000,0x0078CC,0xCCCCCC,0x780000);
99  vec4 ch_p = vec4(0x000000,0x00DC66,0x666666,0x7C60F0);
100  vec4 ch_q = vec4(0x000000,0x0076CC,0xCCCCCC,0x7C0C1E);
101  vec4 ch_r = vec4(0x000000,0x00EC6E,0x766060,0xF00000);
102  vec4 ch_s = vec4(0x000000,0x0078CC,0x6018CC,0x780000);
103  vec4 ch_t = vec4(0x000020,0x60FC60,0x60606C,0x380000);
104  vec4 ch_u = vec4(0x000000,0x00CCCC,0xCCCCCC,0x760000);
105  vec4 ch_v = vec4(0x000000,0x00CCCC,0xCCCC78,0x300000);
106  vec4 ch_w = vec4(0x000000,0x00C6C6,0xD6D66C,0x6C0000);
107  vec4 ch_x = vec4(0x000000,0x00C66C,0x38386C,0xC60000);
108  vec4 ch_y = vec4(0x000000,0x006666,0x66663C,0x0C18F0);
109  vec4 ch_z = vec4(0x000000,0x00FC8C,0x1860C4,0xFC0000);
110  vec4 ch_lpa = vec4(0x001C30,0x3060C0,0x603030,0x1C0000);
111  vec4 ch_bar = vec4(0x001818,0x181800,0x181818,0x180000);
112  vec4 ch_rpa = vec4(0x00E030,0x30180C,0x183030,0xE00000);
113  vec4 ch_tid = vec4(0x0073DA,0xCE0000,0x000000,0x000000);
114  vec4 ch_lar = vec4(0x000000,0x10386C,0xC6C6FE,0x000000);
115 
116 //Extracts bit b from the given number.
117 //Shifts bits right (num / 2^bit) then ANDs the result with 1 (mod(result,2.0)).
118 float extract_bit(float n, float b)
119 {
120  b = clamp(b,-1.0,24.0);
121 return floor(mod(floor(n / pow(2.0,floor(b))),2.0));
122 }
123 
124 //Returns the pixel at uv in the given bit-packed sprite.
125 float sprite(vec4 spr, vec2 size, vec2 uv)
126 {
127  uv = floor(uv);
128 
129  //Calculate the bit to extract (x + y * width) (flipped on x-axis)
130  float bit = (size.x-uv.x-1.0) + uv.y * size.x;
131 
132  //Clipping bound to remove garbage outside the sprite's boundaries.
133  bool bounds = all(greaterThanEqual(uv,vec2(0))) && all(lessThan(uv,size));
134 
135  float pixels = 0.0;
136  pixels += extract_bit(spr.x, bit - 72.0);
137  pixels += extract_bit(spr.y, bit - 48.0);
138  pixels += extract_bit(spr.z, bit - 24.0);
139  pixels += extract_bit(spr.w, bit - 00.0);
140 
141  return bounds ? pixels : 0.0;
142 }
143 
144 
145 #define CHAR_SIZE vec2(8, 12)
146 #define CHAR_SPACING vec2(8, 12)
147 #define MAX_INT_DIGITS 4
148 
149 vec2 print_pos = vec2(0);
150 
151 float print_char(vec4 ch, vec2 uv, float d)
152 {
153  float px = sprite(ch, CHAR_SIZE, uv - print_pos);
154  print_pos.x += d;
155  return px;
156 }
157 
158 //Prints a character and moves the print position forward by 1 character width.
159 float print_char(vec4 ch, vec2 uv)
160 {
161  return print_char(ch,uv,CHAR_SPACING.x);
162 }
163 
164 //Returns the digit sprite for the given number.
165 vec4 get_digit(float d)
166 {
167  d = floor(d);
168 
169  if(d == 0.0) return ch_0;
170  if(d == 1.0) return ch_1;
171  if(d == 2.0) return ch_2;
172  if(d == 3.0) return ch_3;
173  if(d == 4.0) return ch_4;
174  if(d == 5.0) return ch_5;
175  if(d == 6.0) return ch_6;
176  if(d == 7.0) return ch_7;
177  if(d == 8.0) return ch_8;
178  if(d == 9.0) return ch_9;
179  return vec4(0.0);
180 }
181 
182 float print_integer(float number, int zeros, vec2 uv)
183 {
184  float result = 0.0;
185 
186 for(int i = MAX_INT_DIGITS;i >= 0;i--)
187  {
188  float digit = mod( number / pow(10.0, float(i)) , 10.0);
189 
190  if(abs(number) > pow(10.0, float(i)) || zeros > i || i == 0) //Clip off leading zeros.
191  {
192  result += print_char(get_digit(digit),uv);
193  }
194  }
195  return result;
196 }
vec4 ch_M
Definition: digits.h:65
vec4 ch_9
Definition: digits.h:45
vec4 ch_f
Definition: digits.h:89
vec4 ch_Z
Definition: digits.h:78
vec4 ch_q
Definition: digits.h:100
vec4 ch_grt
Definition: digits.h:50
vec4 ch_R
Definition: digits.h:70
vec4 ch_O
Definition: digits.h:67
vec4 ch_quo
Definition: digits.h:22
vec4 ch_ast
Definition: digits.h:30
vec4 ch_e
Definition: digits.h:88
vec4 ch_scl
Definition: digits.h:47
vec4 ch_usc
Definition: digits.h:83
vec4 ch_5
Definition: digits.h:41
vec4 ch_les
Definition: digits.h:48
vec4 ch_pow
Definition: digits.h:82
vec4 ch_g
Definition: digits.h:90
vec4 ch_dol
Definition: digits.h:24
vec4 ch_hsh
Definition: digits.h:23
vec4 ch_J
Definition: digits.h:62
vec4 ch_B
Definition: digits.h:54
vec4 ch_lsl
Definition: digits.h:35
vec4 ch_Q
Definition: digits.h:69
vec4 ch_rpa
Definition: digits.h:112
vec4 ch_per
Definition: digits.h:34
vec4 ch_3
Definition: digits.h:39
vec4 ch_que
Definition: digits.h:51
vec4 ch_X
Definition: digits.h:76
vec4 ch_col
Definition: digits.h:46
float print_integer(float number, int zeros, vec2 uv)
Definition: digits.h:182
vec4 ch_tid
Definition: digits.h:113
vec4 ch_k
Definition: digits.h:94
vec4 ch_rsb
Definition: digits.h:81
vec4 ch_rsl
Definition: digits.h:80
vec4 ch_T
Definition: digits.h:72
vec4 ch_x
Definition: digits.h:107
vec4 ch_m
Definition: digits.h:96
vec4 ch_c
Definition: digits.h:86
vec4 ch_Y
Definition: digits.h:77
vec4 ch_K
Definition: digits.h:63
#define CHAR_SPACING
Definition: digits.h:146
vec4 ch_V
Definition: digits.h:74
vec4 ch_G
Definition: digits.h:59
#define CHAR_SIZE
Definition: digits.h:145
vec4 ch_dsh
Definition: digits.h:33
vec4 ch_1
Definition: digits.h:37
vec4 ch_7
Definition: digits.h:43
vec4 ch_crs
Definition: digits.h:31
vec4 ch_D
Definition: digits.h:56
vec4 ch_com
Definition: digits.h:32
vec4 ch_amp
Definition: digits.h:26
vec4 ch_w
Definition: digits.h:106
vec4 ch_apo
Definition: digits.h:27
vec4 ch_s
Definition: digits.h:102
vec4 ch_4
Definition: digits.h:40
vec4 ch_N
Definition: digits.h:66
vec4 ch_ats
Definition: digits.h:52
#define MAX_INT_DIGITS
Definition: digits.h:147
vec4 ch_exc
Definition: digits.h:21
vec4 ch_n
Definition: digits.h:97
vec4 ch_equ
Definition: digits.h:49
float extract_bit(float n, float b)
Definition: digits.h:118
vec4 ch_b
Definition: digits.h:85
vec4 ch_F
Definition: digits.h:58
vec4 ch_h
Definition: digits.h:91
vec4 ch_H
Definition: digits.h:60
vec4 ch_P
Definition: digits.h:68
vec4 ch_C
Definition: digits.h:55
vec4 ch_spc
Definition: digits.h:20
vec4 ch_bar
Definition: digits.h:111
vec4 ch_y
Definition: digits.h:108
float sprite(vec4 spr, vec2 size, vec2 uv)
Definition: digits.h:125
vec2 print_pos
Definition: digits.h:149
vec4 ch_8
Definition: digits.h:44
vec4 ch_p
Definition: digits.h:99
vec4 ch_t
Definition: digits.h:103
vec4 ch_a
Definition: digits.h:84
vec4 ch_lpa
Definition: digits.h:110
vec4 ch_v
Definition: digits.h:105
vec4 ch_o
Definition: digits.h:98
vec4 ch_lbr
Definition: digits.h:28
vec4 ch_L
Definition: digits.h:64
vec4 ch_A
Definition: digits.h:53
vec4 ch_U
Definition: digits.h:73
vec4 ch_S
Definition: digits.h:71
vec4 ch_6
Definition: digits.h:42
vec4 ch_0
Definition: digits.h:36
vec4 ch_rbr
Definition: digits.h:29
vec4 ch_2
Definition: digits.h:38
vec4 ch_u
Definition: digits.h:104
vec4 ch_i
Definition: digits.h:92
float print_char(vec4 ch, vec2 uv, float d)
Definition: digits.h:151
vec4 ch_j
Definition: digits.h:93
vec4 ch_W
Definition: digits.h:75
vec4 ch_r
Definition: digits.h:101
vec4 ch_pct
Definition: digits.h:25
vec4 ch_lsb
Definition: digits.h:79
vec4 ch_d
Definition: digits.h:87
vec4 ch_E
Definition: digits.h:57
vec4 ch_z
Definition: digits.h:109
vec4 ch_lar
Definition: digits.h:114
vec4 get_digit(float d)
Definition: digits.h:165
vec4 ch_l
Definition: digits.h:95
vec4 ch_I
Definition: digits.h:61