yum-archive/2ner
A toon shader for Unity's BIRP.
git clone https://git.yummers.dev/yum-archive/2ner
ed7bb9b
master
1#ifndef __UNIGRAM_LETTER_GRID_INC 2#define __UNIGRAM_LETTER_GRID_INC 3 4#if defined(_UNIGRAM_LETTER_GRID) 5 6#include "disinfo.cginc" 7#include "features.cginc" 8#include "globals.cginc" 9#include "interpolators.cginc" 10#include "math.cginc" 11#include "oklab.cginc" 12#include "texture_utils.cginc" 13 14// ULG = unigram letter grid 15// Block width = number of tokens sent per block 16#define ULG_BLOCK_WIDTH 5 17// Num blocks = total # of blocks in memory 18#define ULG_NUM_BLOCKS 40 19// The data coming from the animator can be a little noisy. Add this then floor 20// to mask it out. 21#define FUDGE_AMOUNT 0.5 22 23texture2D _Unigram_Letter_Grid_Glyphs; 24float4 _Unigram_Letter_Grid_Glyphs_TexelSize; 25texture2D _Unigram_Letter_Grid_LUT; 26float4 _Unigram_Letter_Grid_LUT_TexelSize; 27float _Unigram_Letter_Grid_Tex_Res_X; 28float _Unigram_Letter_Grid_Tex_Res_Y; 29float _Unigram_Letter_Grid_Res_X; 30float _Unigram_Letter_Grid_Res_Y; 31float4 _Unigram_Letter_Grid_UV_Scale_Offset; 32float _Unigram_Letter_Grid_Padding; 33float _Unigram_Letter_Grid_Screen_Px_Range; 34float _Unigram_Letter_Grid_Min_Screen_Px_Range; 35float _Unigram_Letter_Grid_Alpha_Threshold; 36 37// These macros exist for debugging. 38#define ULG_VP 39#define ULG_D0 40#define ULG_D1 41 42#if defined(ULG_VP) 43// For posterity: this syntax is called "cbuffer aliasing". 44// The purpose here is to map a bunch of material properties onto an indexable 45// array (the first element of the cbuffer). 46cbuffer UnigramLetterGridVisualPointers 47{ 48 float _Unigram_Letter_Visual_Pointers[ULG_NUM_BLOCKS] : packoffset(c0); 49 float _Unigram_Letter_Grid_Block00_Visual_Pointer_Animated : packoffset(c0); 50 float _Unigram_Letter_Grid_Block01_Visual_Pointer_Animated : packoffset(c1); 51 float _Unigram_Letter_Grid_Block02_Visual_Pointer_Animated : packoffset(c2); 52 float _Unigram_Letter_Grid_Block03_Visual_Pointer_Animated : packoffset(c3); 53 float _Unigram_Letter_Grid_Block04_Visual_Pointer_Animated : packoffset(c4); 54 float _Unigram_Letter_Grid_Block05_Visual_Pointer_Animated : packoffset(c5); 55 float _Unigram_Letter_Grid_Block06_Visual_Pointer_Animated : packoffset(c6); 56 float _Unigram_Letter_Grid_Block07_Visual_Pointer_Animated : packoffset(c7); 57 float _Unigram_Letter_Grid_Block08_Visual_Pointer_Animated : packoffset(c8); 58 float _Unigram_Letter_Grid_Block09_Visual_Pointer_Animated : packoffset(c9); 59 float _Unigram_Letter_Grid_Block10_Visual_Pointer_Animated : packoffset(c10); 60 float _Unigram_Letter_Grid_Block11_Visual_Pointer_Animated : packoffset(c11); 61 float _Unigram_Letter_Grid_Block12_Visual_Pointer_Animated : packoffset(c12); 62 float _Unigram_Letter_Grid_Block13_Visual_Pointer_Animated : packoffset(c13); 63 float _Unigram_Letter_Grid_Block14_Visual_Pointer_Animated : packoffset(c14); 64 float _Unigram_Letter_Grid_Block15_Visual_Pointer_Animated : packoffset(c15); 65 float _Unigram_Letter_Grid_Block16_Visual_Pointer_Animated : packoffset(c16); 66 float _Unigram_Letter_Grid_Block17_Visual_Pointer_Animated : packoffset(c17); 67 float _Unigram_Letter_Grid_Block18_Visual_Pointer_Animated : packoffset(c18); 68 float _Unigram_Letter_Grid_Block19_Visual_Pointer_Animated : packoffset(c19); 69 float _Unigram_Letter_Grid_Block20_Visual_Pointer_Animated : packoffset(c20); 70 float _Unigram_Letter_Grid_Block21_Visual_Pointer_Animated : packoffset(c21); 71 float _Unigram_Letter_Grid_Block22_Visual_Pointer_Animated : packoffset(c22); 72 float _Unigram_Letter_Grid_Block23_Visual_Pointer_Animated : packoffset(c23); 73 float _Unigram_Letter_Grid_Block24_Visual_Pointer_Animated : packoffset(c24); 74 float _Unigram_Letter_Grid_Block25_Visual_Pointer_Animated : packoffset(c25); 75 float _Unigram_Letter_Grid_Block26_Visual_Pointer_Animated : packoffset(c26); 76 float _Unigram_Letter_Grid_Block27_Visual_Pointer_Animated : packoffset(c27); 77 float _Unigram_Letter_Grid_Block28_Visual_Pointer_Animated : packoffset(c28); 78 float _Unigram_Letter_Grid_Block29_Visual_Pointer_Animated : packoffset(c29); 79 float _Unigram_Letter_Grid_Block30_Visual_Pointer_Animated : packoffset(c30); 80 float _Unigram_Letter_Grid_Block31_Visual_Pointer_Animated : packoffset(c31); 81 float _Unigram_Letter_Grid_Block32_Visual_Pointer_Animated : packoffset(c32); 82 float _Unigram_Letter_Grid_Block33_Visual_Pointer_Animated : packoffset(c33); 83 float _Unigram_Letter_Grid_Block34_Visual_Pointer_Animated : packoffset(c34); 84 float _Unigram_Letter_Grid_Block35_Visual_Pointer_Animated : packoffset(c35); 85 float _Unigram_Letter_Grid_Block36_Visual_Pointer_Animated : packoffset(c36); 86 float _Unigram_Letter_Grid_Block37_Visual_Pointer_Animated : packoffset(c37); 87 float _Unigram_Letter_Grid_Block38_Visual_Pointer_Animated : packoffset(c38); 88 float _Unigram_Letter_Grid_Block39_Visual_Pointer_Animated : packoffset(c39); 89} 90#endif // ULG_VP 91 92#if defined(ULG_D0) 93cbuffer UnigramLetterGridDataByte00_Animated 94{ 95 float _Unigram_Letter_Data_Byte00[ULG_NUM_BLOCKS * ULG_BLOCK_WIDTH] : packoffset(c0); 96 97 float _Unigram_Letter_Grid_Data_Block00_Datum00_Byte00_Animated : packoffset(c0); 98 float _Unigram_Letter_Grid_Data_Block00_Datum01_Byte00_Animated : packoffset(c1); 99 float _Unigram_Letter_Grid_Data_Block00_Datum02_Byte00_Animated : packoffset(c2); 100 float _Unigram_Letter_Grid_Data_Block00_Datum03_Byte00_Animated : packoffset(c3); 101 float _Unigram_Letter_Grid_Data_Block00_Datum04_Byte00_Animated : packoffset(c4); 102 float _Unigram_Letter_Grid_Data_Block01_Datum00_Byte00_Animated : packoffset(c5); 103 float _Unigram_Letter_Grid_Data_Block01_Datum01_Byte00_Animated : packoffset(c6); 104 float _Unigram_Letter_Grid_Data_Block01_Datum02_Byte00_Animated : packoffset(c7); 105 float _Unigram_Letter_Grid_Data_Block01_Datum03_Byte00_Animated : packoffset(c8); 106 float _Unigram_Letter_Grid_Data_Block01_Datum04_Byte00_Animated : packoffset(c9); 107 108 float _Unigram_Letter_Grid_Data_Block02_Datum00_Byte00_Animated : packoffset(c10); 109 float _Unigram_Letter_Grid_Data_Block02_Datum01_Byte00_Animated : packoffset(c11); 110 float _Unigram_Letter_Grid_Data_Block02_Datum02_Byte00_Animated : packoffset(c12); 111 float _Unigram_Letter_Grid_Data_Block02_Datum03_Byte00_Animated : packoffset(c13); 112 float _Unigram_Letter_Grid_Data_Block02_Datum04_Byte00_Animated : packoffset(c14); 113 float _Unigram_Letter_Grid_Data_Block03_Datum00_Byte00_Animated : packoffset(c15); 114 float _Unigram_Letter_Grid_Data_Block03_Datum01_Byte00_Animated : packoffset(c16); 115 float _Unigram_Letter_Grid_Data_Block03_Datum02_Byte00_Animated : packoffset(c17); 116 float _Unigram_Letter_Grid_Data_Block03_Datum03_Byte00_Animated : packoffset(c18); 117 float _Unigram_Letter_Grid_Data_Block03_Datum04_Byte00_Animated : packoffset(c19); 118 119 float _Unigram_Letter_Grid_Data_Block04_Datum00_Byte00_Animated : packoffset(c20); 120 float _Unigram_Letter_Grid_Data_Block04_Datum01_Byte00_Animated : packoffset(c21); 121 float _Unigram_Letter_Grid_Data_Block04_Datum02_Byte00_Animated : packoffset(c22); 122 float _Unigram_Letter_Grid_Data_Block04_Datum03_Byte00_Animated : packoffset(c23); 123 float _Unigram_Letter_Grid_Data_Block04_Datum04_Byte00_Animated : packoffset(c24); 124 float _Unigram_Letter_Grid_Data_Block05_Datum00_Byte00_Animated : packoffset(c25); 125 float _Unigram_Letter_Grid_Data_Block05_Datum01_Byte00_Animated : packoffset(c26); 126 float _Unigram_Letter_Grid_Data_Block05_Datum02_Byte00_Animated : packoffset(c27); 127 float _Unigram_Letter_Grid_Data_Block05_Datum03_Byte00_Animated : packoffset(c28); 128 float _Unigram_Letter_Grid_Data_Block05_Datum04_Byte00_Animated : packoffset(c29); 129 130 float _Unigram_Letter_Grid_Data_Block06_Datum00_Byte00_Animated : packoffset(c30); 131 float _Unigram_Letter_Grid_Data_Block06_Datum01_Byte00_Animated : packoffset(c31); 132 float _Unigram_Letter_Grid_Data_Block06_Datum02_Byte00_Animated : packoffset(c32); 133 float _Unigram_Letter_Grid_Data_Block06_Datum03_Byte00_Animated : packoffset(c33); 134 float _Unigram_Letter_Grid_Data_Block06_Datum04_Byte00_Animated : packoffset(c34); 135 float _Unigram_Letter_Grid_Data_Block07_Datum00_Byte00_Animated : packoffset(c35); 136 float _Unigram_Letter_Grid_Data_Block07_Datum01_Byte00_Animated : packoffset(c36); 137 float _Unigram_Letter_Grid_Data_Block07_Datum02_Byte00_Animated : packoffset(c37); 138 float _Unigram_Letter_Grid_Data_Block07_Datum03_Byte00_Animated : packoffset(c38); 139 float _Unigram_Letter_Grid_Data_Block07_Datum04_Byte00_Animated : packoffset(c39); 140 141 float _Unigram_Letter_Grid_Data_Block08_Datum00_Byte00_Animated : packoffset(c40); 142 float _Unigram_Letter_Grid_Data_Block08_Datum01_Byte00_Animated : packoffset(c41); 143 float _Unigram_Letter_Grid_Data_Block08_Datum02_Byte00_Animated : packoffset(c42); 144 float _Unigram_Letter_Grid_Data_Block08_Datum03_Byte00_Animated : packoffset(c43); 145 float _Unigram_Letter_Grid_Data_Block08_Datum04_Byte00_Animated : packoffset(c44); 146 float _Unigram_Letter_Grid_Data_Block09_Datum00_Byte00_Animated : packoffset(c45); 147 float _Unigram_Letter_Grid_Data_Block09_Datum01_Byte00_Animated : packoffset(c46); 148 float _Unigram_Letter_Grid_Data_Block09_Datum02_Byte00_Animated : packoffset(c47); 149 float _Unigram_Letter_Grid_Data_Block09_Datum03_Byte00_Animated : packoffset(c48); 150 float _Unigram_Letter_Grid_Data_Block09_Datum04_Byte00_Animated : packoffset(c49); 151 152 float _Unigram_Letter_Grid_Data_Block10_Datum00_Byte00_Animated : packoffset(c50); 153 float _Unigram_Letter_Grid_Data_Block10_Datum01_Byte00_Animated : packoffset(c51); 154 float _Unigram_Letter_Grid_Data_Block10_Datum02_Byte00_Animated : packoffset(c52); 155 float _Unigram_Letter_Grid_Data_Block10_Datum03_Byte00_Animated : packoffset(c53); 156 float _Unigram_Letter_Grid_Data_Block10_Datum04_Byte00_Animated : packoffset(c54); 157 float _Unigram_Letter_Grid_Data_Block11_Datum00_Byte00_Animated : packoffset(c55); 158 float _Unigram_Letter_Grid_Data_Block11_Datum01_Byte00_Animated : packoffset(c56); 159 float _Unigram_Letter_Grid_Data_Block11_Datum02_Byte00_Animated : packoffset(c57); 160 float _Unigram_Letter_Grid_Data_Block11_Datum03_Byte00_Animated : packoffset(c58); 161 float _Unigram_Letter_Grid_Data_Block11_Datum04_Byte00_Animated : packoffset(c59); 162 163 float _Unigram_Letter_Grid_Data_Block12_Datum00_Byte00_Animated : packoffset(c60); 164 float _Unigram_Letter_Grid_Data_Block12_Datum01_Byte00_Animated : packoffset(c61); 165 float _Unigram_Letter_Grid_Data_Block12_Datum02_Byte00_Animated : packoffset(c62); 166 float _Unigram_Letter_Grid_Data_Block12_Datum03_Byte00_Animated : packoffset(c63); 167 float _Unigram_Letter_Grid_Data_Block12_Datum04_Byte00_Animated : packoffset(c64); 168 float _Unigram_Letter_Grid_Data_Block13_Datum00_Byte00_Animated : packoffset(c65); 169 float _Unigram_Letter_Grid_Data_Block13_Datum01_Byte00_Animated : packoffset(c66); 170 float _Unigram_Letter_Grid_Data_Block13_Datum02_Byte00_Animated : packoffset(c67); 171 float _Unigram_Letter_Grid_Data_Block13_Datum03_Byte00_Animated : packoffset(c68); 172 float _Unigram_Letter_Grid_Data_Block13_Datum04_Byte00_Animated : packoffset(c69); 173 174 float _Unigram_Letter_Grid_Data_Block14_Datum00_Byte00_Animated : packoffset(c70); 175 float _Unigram_Letter_Grid_Data_Block14_Datum01_Byte00_Animated : packoffset(c71); 176 float _Unigram_Letter_Grid_Data_Block14_Datum02_Byte00_Animated : packoffset(c72); 177 float _Unigram_Letter_Grid_Data_Block14_Datum03_Byte00_Animated : packoffset(c73); 178 float _Unigram_Letter_Grid_Data_Block14_Datum04_Byte00_Animated : packoffset(c74); 179 float _Unigram_Letter_Grid_Data_Block15_Datum00_Byte00_Animated : packoffset(c75); 180 float _Unigram_Letter_Grid_Data_Block15_Datum01_Byte00_Animated : packoffset(c76); 181 float _Unigram_Letter_Grid_Data_Block15_Datum02_Byte00_Animated : packoffset(c77); 182 float _Unigram_Letter_Grid_Data_Block15_Datum03_Byte00_Animated : packoffset(c78); 183 float _Unigram_Letter_Grid_Data_Block15_Datum04_Byte00_Animated : packoffset(c79); 184 185 float _Unigram_Letter_Grid_Data_Block16_Datum00_Byte00_Animated : packoffset(c80); 186 float _Unigram_Letter_Grid_Data_Block16_Datum01_Byte00_Animated : packoffset(c81); 187 float _Unigram_Letter_Grid_Data_Block16_Datum02_Byte00_Animated : packoffset(c82); 188 float _Unigram_Letter_Grid_Data_Block16_Datum03_Byte00_Animated : packoffset(c83); 189 float _Unigram_Letter_Grid_Data_Block16_Datum04_Byte00_Animated : packoffset(c84); 190 float _Unigram_Letter_Grid_Data_Block17_Datum00_Byte00_Animated : packoffset(c85); 191 float _Unigram_Letter_Grid_Data_Block17_Datum01_Byte00_Animated : packoffset(c86); 192 float _Unigram_Letter_Grid_Data_Block17_Datum02_Byte00_Animated : packoffset(c87); 193 float _Unigram_Letter_Grid_Data_Block17_Datum03_Byte00_Animated : packoffset(c88); 194 float _Unigram_Letter_Grid_Data_Block17_Datum04_Byte00_Animated : packoffset(c89); 195 196 float _Unigram_Letter_Grid_Data_Block18_Datum00_Byte00_Animated : packoffset(c90); 197 float _Unigram_Letter_Grid_Data_Block18_Datum01_Byte00_Animated : packoffset(c91); 198 float _Unigram_Letter_Grid_Data_Block18_Datum02_Byte00_Animated : packoffset(c92); 199 float _Unigram_Letter_Grid_Data_Block18_Datum03_Byte00_Animated : packoffset(c93); 200 float _Unigram_Letter_Grid_Data_Block18_Datum04_Byte00_Animated : packoffset(c94); 201 float _Unigram_Letter_Grid_Data_Block19_Datum00_Byte00_Animated : packoffset(c95); 202 float _Unigram_Letter_Grid_Data_Block19_Datum01_Byte00_Animated : packoffset(c96); 203 float _Unigram_Letter_Grid_Data_Block19_Datum02_Byte00_Animated : packoffset(c97); 204 float _Unigram_Letter_Grid_Data_Block19_Datum03_Byte00_Animated : packoffset(c98); 205 float _Unigram_Letter_Grid_Data_Block19_Datum04_Byte00_Animated : packoffset(c99); 206 207 float _Unigram_Letter_Grid_Data_Block20_Datum00_Byte00_Animated : packoffset(c100); 208 float _Unigram_Letter_Grid_Data_Block20_Datum01_Byte00_Animated : packoffset(c101); 209 float _Unigram_Letter_Grid_Data_Block20_Datum02_Byte00_Animated : packoffset(c102); 210 float _Unigram_Letter_Grid_Data_Block20_Datum03_Byte00_Animated : packoffset(c103); 211 float _Unigram_Letter_Grid_Data_Block20_Datum04_Byte00_Animated : packoffset(c104); 212 float _Unigram_Letter_Grid_Data_Block21_Datum00_Byte00_Animated : packoffset(c105); 213 float _Unigram_Letter_Grid_Data_Block21_Datum01_Byte00_Animated : packoffset(c106); 214 float _Unigram_Letter_Grid_Data_Block21_Datum02_Byte00_Animated : packoffset(c107); 215 float _Unigram_Letter_Grid_Data_Block21_Datum03_Byte00_Animated : packoffset(c108); 216 float _Unigram_Letter_Grid_Data_Block21_Datum04_Byte00_Animated : packoffset(c109); 217 218 float _Unigram_Letter_Grid_Data_Block22_Datum00_Byte00_Animated : packoffset(c110); 219 float _Unigram_Letter_Grid_Data_Block22_Datum01_Byte00_Animated : packoffset(c111); 220 float _Unigram_Letter_Grid_Data_Block22_Datum02_Byte00_Animated : packoffset(c112); 221 float _Unigram_Letter_Grid_Data_Block22_Datum03_Byte00_Animated : packoffset(c113); 222 float _Unigram_Letter_Grid_Data_Block22_Datum04_Byte00_Animated : packoffset(c114); 223 float _Unigram_Letter_Grid_Data_Block23_Datum00_Byte00_Animated : packoffset(c115); 224 float _Unigram_Letter_Grid_Data_Block23_Datum01_Byte00_Animated : packoffset(c116); 225 float _Unigram_Letter_Grid_Data_Block23_Datum02_Byte00_Animated : packoffset(c117); 226 float _Unigram_Letter_Grid_Data_Block23_Datum03_Byte00_Animated : packoffset(c118); 227 float _Unigram_Letter_Grid_Data_Block23_Datum04_Byte00_Animated : packoffset(c119); 228 229 float _Unigram_Letter_Grid_Data_Block24_Datum00_Byte00_Animated : packoffset(c120); 230 float _Unigram_Letter_Grid_Data_Block24_Datum01_Byte00_Animated : packoffset(c121); 231 float _Unigram_Letter_Grid_Data_Block24_Datum02_Byte00_Animated : packoffset(c122); 232 float _Unigram_Letter_Grid_Data_Block24_Datum03_Byte00_Animated : packoffset(c123); 233 float _Unigram_Letter_Grid_Data_Block24_Datum04_Byte00_Animated : packoffset(c124); 234 float _Unigram_Letter_Grid_Data_Block25_Datum00_Byte00_Animated : packoffset(c125); 235 float _Unigram_Letter_Grid_Data_Block25_Datum01_Byte00_Animated : packoffset(c126); 236 float _Unigram_Letter_Grid_Data_Block25_Datum02_Byte00_Animated : packoffset(c127); 237 float _Unigram_Letter_Grid_Data_Block25_Datum03_Byte00_Animated : packoffset(c128); 238 float _Unigram_Letter_Grid_Data_Block25_Datum04_Byte00_Animated : packoffset(c129); 239 240 float _Unigram_Letter_Grid_Data_Block26_Datum00_Byte00_Animated : packoffset(c130); 241 float _Unigram_Letter_Grid_Data_Block26_Datum01_Byte00_Animated : packoffset(c131); 242 float _Unigram_Letter_Grid_Data_Block26_Datum02_Byte00_Animated : packoffset(c132); 243 float _Unigram_Letter_Grid_Data_Block26_Datum03_Byte00_Animated : packoffset(c133); 244 float _Unigram_Letter_Grid_Data_Block26_Datum04_Byte00_Animated : packoffset(c134); 245 float _Unigram_Letter_Grid_Data_Block27_Datum00_Byte00_Animated : packoffset(c135); 246 float _Unigram_Letter_Grid_Data_Block27_Datum01_Byte00_Animated : packoffset(c136); 247 float _Unigram_Letter_Grid_Data_Block27_Datum02_Byte00_Animated : packoffset(c137); 248 float _Unigram_Letter_Grid_Data_Block27_Datum03_Byte00_Animated : packoffset(c138); 249 float _Unigram_Letter_Grid_Data_Block27_Datum04_Byte00_Animated : packoffset(c139); 250 251 float _Unigram_Letter_Grid_Data_Block28_Datum00_Byte00_Animated : packoffset(c140); 252 float _Unigram_Letter_Grid_Data_Block28_Datum01_Byte00_Animated : packoffset(c141); 253 float _Unigram_Letter_Grid_Data_Block28_Datum02_Byte00_Animated : packoffset(c142); 254 float _Unigram_Letter_Grid_Data_Block28_Datum03_Byte00_Animated : packoffset(c143); 255 float _Unigram_Letter_Grid_Data_Block28_Datum04_Byte00_Animated : packoffset(c144); 256 float _Unigram_Letter_Grid_Data_Block29_Datum00_Byte00_Animated : packoffset(c145); 257 float _Unigram_Letter_Grid_Data_Block29_Datum01_Byte00_Animated : packoffset(c146); 258 float _Unigram_Letter_Grid_Data_Block29_Datum02_Byte00_Animated : packoffset(c147); 259 float _Unigram_Letter_Grid_Data_Block29_Datum03_Byte00_Animated : packoffset(c148); 260 float _Unigram_Letter_Grid_Data_Block29_Datum04_Byte00_Animated : packoffset(c149); 261 262 float _Unigram_Letter_Grid_Data_Block30_Datum00_Byte00_Animated : packoffset(c150); 263 float _Unigram_Letter_Grid_Data_Block30_Datum01_Byte00_Animated : packoffset(c151); 264 float _Unigram_Letter_Grid_Data_Block30_Datum02_Byte00_Animated : packoffset(c152); 265 float _Unigram_Letter_Grid_Data_Block30_Datum03_Byte00_Animated : packoffset(c153); 266 float _Unigram_Letter_Grid_Data_Block30_Datum04_Byte00_Animated : packoffset(c154); 267 float _Unigram_Letter_Grid_Data_Block31_Datum00_Byte00_Animated : packoffset(c155); 268 float _Unigram_Letter_Grid_Data_Block31_Datum01_Byte00_Animated : packoffset(c156); 269 float _Unigram_Letter_Grid_Data_Block31_Datum02_Byte00_Animated : packoffset(c157); 270 float _Unigram_Letter_Grid_Data_Block31_Datum03_Byte00_Animated : packoffset(c158); 271 float _Unigram_Letter_Grid_Data_Block31_Datum04_Byte00_Animated : packoffset(c159); 272 273 float _Unigram_Letter_Grid_Data_Block32_Datum00_Byte00_Animated : packoffset(c160); 274 float _Unigram_Letter_Grid_Data_Block32_Datum01_Byte00_Animated : packoffset(c161); 275 float _Unigram_Letter_Grid_Data_Block32_Datum02_Byte00_Animated : packoffset(c162); 276 float _Unigram_Letter_Grid_Data_Block32_Datum03_Byte00_Animated : packoffset(c163); 277 float _Unigram_Letter_Grid_Data_Block32_Datum04_Byte00_Animated : packoffset(c164); 278 float _Unigram_Letter_Grid_Data_Block33_Datum00_Byte00_Animated : packoffset(c165); 279 float _Unigram_Letter_Grid_Data_Block33_Datum01_Byte00_Animated : packoffset(c166); 280 float _Unigram_Letter_Grid_Data_Block33_Datum02_Byte00_Animated : packoffset(c167); 281 float _Unigram_Letter_Grid_Data_Block33_Datum03_Byte00_Animated : packoffset(c168); 282 float _Unigram_Letter_Grid_Data_Block33_Datum04_Byte00_Animated : packoffset(c169); 283 284 float _Unigram_Letter_Grid_Data_Block34_Datum00_Byte00_Animated : packoffset(c170); 285 float _Unigram_Letter_Grid_Data_Block34_Datum01_Byte00_Animated : packoffset(c171); 286 float _Unigram_Letter_Grid_Data_Block34_Datum02_Byte00_Animated : packoffset(c172); 287 float _Unigram_Letter_Grid_Data_Block34_Datum03_Byte00_Animated : packoffset(c173); 288 float _Unigram_Letter_Grid_Data_Block34_Datum04_Byte00_Animated : packoffset(c174); 289 float _Unigram_Letter_Grid_Data_Block35_Datum00_Byte00_Animated : packoffset(c175); 290 float _Unigram_Letter_Grid_Data_Block35_Datum01_Byte00_Animated : packoffset(c176); 291 float _Unigram_Letter_Grid_Data_Block35_Datum02_Byte00_Animated : packoffset(c177); 292 float _Unigram_Letter_Grid_Data_Block35_Datum03_Byte00_Animated : packoffset(c178); 293 float _Unigram_Letter_Grid_Data_Block35_Datum04_Byte00_Animated : packoffset(c179); 294 295 float _Unigram_Letter_Grid_Data_Block36_Datum00_Byte00_Animated : packoffset(c180); 296 float _Unigram_Letter_Grid_Data_Block36_Datum01_Byte00_Animated : packoffset(c181); 297 float _Unigram_Letter_Grid_Data_Block36_Datum02_Byte00_Animated : packoffset(c182); 298 float _Unigram_Letter_Grid_Data_Block36_Datum03_Byte00_Animated : packoffset(c183); 299 float _Unigram_Letter_Grid_Data_Block36_Datum04_Byte00_Animated : packoffset(c184); 300 float _Unigram_Letter_Grid_Data_Block37_Datum00_Byte00_Animated : packoffset(c185); 301 float _Unigram_Letter_Grid_Data_Block37_Datum01_Byte00_Animated : packoffset(c186); 302 float _Unigram_Letter_Grid_Data_Block37_Datum02_Byte00_Animated : packoffset(c187); 303 float _Unigram_Letter_Grid_Data_Block37_Datum03_Byte00_Animated : packoffset(c188); 304 float _Unigram_Letter_Grid_Data_Block37_Datum04_Byte00_Animated : packoffset(c189); 305 306 float _Unigram_Letter_Grid_Data_Block38_Datum00_Byte00_Animated : packoffset(c190); 307 float _Unigram_Letter_Grid_Data_Block38_Datum01_Byte00_Animated : packoffset(c191); 308 float _Unigram_Letter_Grid_Data_Block38_Datum02_Byte00_Animated : packoffset(c192); 309 float _Unigram_Letter_Grid_Data_Block38_Datum03_Byte00_Animated : packoffset(c193); 310 float _Unigram_Letter_Grid_Data_Block38_Datum04_Byte00_Animated : packoffset(c194); 311 float _Unigram_Letter_Grid_Data_Block39_Datum00_Byte00_Animated : packoffset(c195); 312 float _Unigram_Letter_Grid_Data_Block39_Datum01_Byte00_Animated : packoffset(c196); 313 float _Unigram_Letter_Grid_Data_Block39_Datum02_Byte00_Animated : packoffset(c197); 314 float _Unigram_Letter_Grid_Data_Block39_Datum03_Byte00_Animated : packoffset(c198); 315 float _Unigram_Letter_Grid_Data_Block39_Datum04_Byte00_Animated : packoffset(c199); 316} 317#endif // ULG_D0 318 319#if defined(ULG_D1) 320cbuffer UnigramLetterGridDataByte01_Animated 321{ 322 float _Unigram_Letter_Data_Byte01[ULG_NUM_BLOCKS * ULG_BLOCK_WIDTH] : packoffset(c0); 323 324 float _Unigram_Letter_Grid_Data_Block00_Datum00_Byte01_Animated : packoffset(c0); 325 float _Unigram_Letter_Grid_Data_Block00_Datum01_Byte01_Animated : packoffset(c1); 326 float _Unigram_Letter_Grid_Data_Block00_Datum02_Byte01_Animated : packoffset(c2); 327 float _Unigram_Letter_Grid_Data_Block00_Datum03_Byte01_Animated : packoffset(c3); 328 float _Unigram_Letter_Grid_Data_Block00_Datum04_Byte01_Animated : packoffset(c4); 329 float _Unigram_Letter_Grid_Data_Block01_Datum00_Byte01_Animated : packoffset(c5); 330 float _Unigram_Letter_Grid_Data_Block01_Datum01_Byte01_Animated : packoffset(c6); 331 float _Unigram_Letter_Grid_Data_Block01_Datum02_Byte01_Animated : packoffset(c7); 332 float _Unigram_Letter_Grid_Data_Block01_Datum03_Byte01_Animated : packoffset(c8); 333 float _Unigram_Letter_Grid_Data_Block01_Datum04_Byte01_Animated : packoffset(c9); 334 335 float _Unigram_Letter_Grid_Data_Block02_Datum00_Byte01_Animated : packoffset(c10); 336 float _Unigram_Letter_Grid_Data_Block02_Datum01_Byte01_Animated : packoffset(c11); 337 float _Unigram_Letter_Grid_Data_Block02_Datum02_Byte01_Animated : packoffset(c12); 338 float _Unigram_Letter_Grid_Data_Block02_Datum03_Byte01_Animated : packoffset(c13); 339 float _Unigram_Letter_Grid_Data_Block02_Datum04_Byte01_Animated : packoffset(c14); 340 float _Unigram_Letter_Grid_Data_Block03_Datum00_Byte01_Animated : packoffset(c15); 341 float _Unigram_Letter_Grid_Data_Block03_Datum01_Byte01_Animated : packoffset(c16); 342 float _Unigram_Letter_Grid_Data_Block03_Datum02_Byte01_Animated : packoffset(c17); 343 float _Unigram_Letter_Grid_Data_Block03_Datum03_Byte01_Animated : packoffset(c18); 344 float _Unigram_Letter_Grid_Data_Block03_Datum04_Byte01_Animated : packoffset(c19); 345 346 float _Unigram_Letter_Grid_Data_Block04_Datum00_Byte01_Animated : packoffset(c20); 347 float _Unigram_Letter_Grid_Data_Block04_Datum01_Byte01_Animated : packoffset(c21); 348 float _Unigram_Letter_Grid_Data_Block04_Datum02_Byte01_Animated : packoffset(c22); 349 float _Unigram_Letter_Grid_Data_Block04_Datum03_Byte01_Animated : packoffset(c23); 350 float _Unigram_Letter_Grid_Data_Block04_Datum04_Byte01_Animated : packoffset(c24); 351 float _Unigram_Letter_Grid_Data_Block05_Datum00_Byte01_Animated : packoffset(c25); 352 float _Unigram_Letter_Grid_Data_Block05_Datum01_Byte01_Animated : packoffset(c26); 353 float _Unigram_Letter_Grid_Data_Block05_Datum02_Byte01_Animated : packoffset(c27); 354 float _Unigram_Letter_Grid_Data_Block05_Datum03_Byte01_Animated : packoffset(c28); 355 float _Unigram_Letter_Grid_Data_Block05_Datum04_Byte01_Animated : packoffset(c29); 356 357 float _Unigram_Letter_Grid_Data_Block06_Datum00_Byte01_Animated : packoffset(c30); 358 float _Unigram_Letter_Grid_Data_Block06_Datum01_Byte01_Animated : packoffset(c31); 359 float _Unigram_Letter_Grid_Data_Block06_Datum02_Byte01_Animated : packoffset(c32); 360 float _Unigram_Letter_Grid_Data_Block06_Datum03_Byte01_Animated : packoffset(c33); 361 float _Unigram_Letter_Grid_Data_Block06_Datum04_Byte01_Animated : packoffset(c34); 362 float _Unigram_Letter_Grid_Data_Block07_Datum00_Byte01_Animated : packoffset(c35); 363 float _Unigram_Letter_Grid_Data_Block07_Datum01_Byte01_Animated : packoffset(c36); 364 float _Unigram_Letter_Grid_Data_Block07_Datum02_Byte01_Animated : packoffset(c37); 365 float _Unigram_Letter_Grid_Data_Block07_Datum03_Byte01_Animated : packoffset(c38); 366 float _Unigram_Letter_Grid_Data_Block07_Datum04_Byte01_Animated : packoffset(c39); 367 368 float _Unigram_Letter_Grid_Data_Block08_Datum00_Byte01_Animated : packoffset(c40); 369 float _Unigram_Letter_Grid_Data_Block08_Datum01_Byte01_Animated : packoffset(c41); 370 float _Unigram_Letter_Grid_Data_Block08_Datum02_Byte01_Animated : packoffset(c42); 371 float _Unigram_Letter_Grid_Data_Block08_Datum03_Byte01_Animated : packoffset(c43); 372 float _Unigram_Letter_Grid_Data_Block08_Datum04_Byte01_Animated : packoffset(c44); 373 float _Unigram_Letter_Grid_Data_Block09_Datum00_Byte01_Animated : packoffset(c45); 374 float _Unigram_Letter_Grid_Data_Block09_Datum01_Byte01_Animated : packoffset(c46); 375 float _Unigram_Letter_Grid_Data_Block09_Datum02_Byte01_Animated : packoffset(c47); 376 float _Unigram_Letter_Grid_Data_Block09_Datum03_Byte01_Animated : packoffset(c48); 377 float _Unigram_Letter_Grid_Data_Block09_Datum04_Byte01_Animated : packoffset(c49); 378 379 float _Unigram_Letter_Grid_Data_Block10_Datum00_Byte01_Animated : packoffset(c50); 380 float _Unigram_Letter_Grid_Data_Block10_Datum01_Byte01_Animated : packoffset(c51); 381 float _Unigram_Letter_Grid_Data_Block10_Datum02_Byte01_Animated : packoffset(c52); 382 float _Unigram_Letter_Grid_Data_Block10_Datum03_Byte01_Animated : packoffset(c53); 383 float _Unigram_Letter_Grid_Data_Block10_Datum04_Byte01_Animated : packoffset(c54); 384 float _Unigram_Letter_Grid_Data_Block11_Datum00_Byte01_Animated : packoffset(c55); 385 float _Unigram_Letter_Grid_Data_Block11_Datum01_Byte01_Animated : packoffset(c56); 386 float _Unigram_Letter_Grid_Data_Block11_Datum02_Byte01_Animated : packoffset(c57); 387 float _Unigram_Letter_Grid_Data_Block11_Datum03_Byte01_Animated : packoffset(c58); 388 float _Unigram_Letter_Grid_Data_Block11_Datum04_Byte01_Animated : packoffset(c59); 389 390 float _Unigram_Letter_Grid_Data_Block12_Datum00_Byte01_Animated : packoffset(c60); 391 float _Unigram_Letter_Grid_Data_Block12_Datum01_Byte01_Animated : packoffset(c61); 392 float _Unigram_Letter_Grid_Data_Block12_Datum02_Byte01_Animated : packoffset(c62); 393 float _Unigram_Letter_Grid_Data_Block12_Datum03_Byte01_Animated : packoffset(c63); 394 float _Unigram_Letter_Grid_Data_Block12_Datum04_Byte01_Animated : packoffset(c64); 395 float _Unigram_Letter_Grid_Data_Block13_Datum00_Byte01_Animated : packoffset(c65); 396 float _Unigram_Letter_Grid_Data_Block13_Datum01_Byte01_Animated : packoffset(c66); 397 float _Unigram_Letter_Grid_Data_Block13_Datum02_Byte01_Animated : packoffset(c67); 398 float _Unigram_Letter_Grid_Data_Block13_Datum03_Byte01_Animated : packoffset(c68); 399 float _Unigram_Letter_Grid_Data_Block13_Datum04_Byte01_Animated : packoffset(c69); 400 401 float _Unigram_Letter_Grid_Data_Block14_Datum00_Byte01_Animated : packoffset(c70); 402 float _Unigram_Letter_Grid_Data_Block14_Datum01_Byte01_Animated : packoffset(c71); 403 float _Unigram_Letter_Grid_Data_Block14_Datum02_Byte01_Animated : packoffset(c72); 404 float _Unigram_Letter_Grid_Data_Block14_Datum03_Byte01_Animated : packoffset(c73); 405 float _Unigram_Letter_Grid_Data_Block14_Datum04_Byte01_Animated : packoffset(c74); 406 float _Unigram_Letter_Grid_Data_Block15_Datum00_Byte01_Animated : packoffset(c75); 407 float _Unigram_Letter_Grid_Data_Block15_Datum01_Byte01_Animated : packoffset(c76); 408 float _Unigram_Letter_Grid_Data_Block15_Datum02_Byte01_Animated : packoffset(c77); 409 float _Unigram_Letter_Grid_Data_Block15_Datum03_Byte01_Animated : packoffset(c78); 410 float _Unigram_Letter_Grid_Data_Block15_Datum04_Byte01_Animated : packoffset(c79); 411 412 float _Unigram_Letter_Grid_Data_Block16_Datum00_Byte01_Animated : packoffset(c80); 413 float _Unigram_Letter_Grid_Data_Block16_Datum01_Byte01_Animated : packoffset(c81); 414 float _Unigram_Letter_Grid_Data_Block16_Datum02_Byte01_Animated : packoffset(c82); 415 float _Unigram_Letter_Grid_Data_Block16_Datum03_Byte01_Animated : packoffset(c83); 416 float _Unigram_Letter_Grid_Data_Block16_Datum04_Byte01_Animated : packoffset(c84); 417 float _Unigram_Letter_Grid_Data_Block17_Datum00_Byte01_Animated : packoffset(c85); 418 float _Unigram_Letter_Grid_Data_Block17_Datum01_Byte01_Animated : packoffset(c86); 419 float _Unigram_Letter_Grid_Data_Block17_Datum02_Byte01_Animated : packoffset(c87); 420 float _Unigram_Letter_Grid_Data_Block17_Datum03_Byte01_Animated : packoffset(c88); 421 float _Unigram_Letter_Grid_Data_Block17_Datum04_Byte01_Animated : packoffset(c89); 422 423 float _Unigram_Letter_Grid_Data_Block18_Datum00_Byte01_Animated : packoffset(c90); 424 float _Unigram_Letter_Grid_Data_Block18_Datum01_Byte01_Animated : packoffset(c91); 425 float _Unigram_Letter_Grid_Data_Block18_Datum02_Byte01_Animated : packoffset(c92); 426 float _Unigram_Letter_Grid_Data_Block18_Datum03_Byte01_Animated : packoffset(c93); 427 float _Unigram_Letter_Grid_Data_Block18_Datum04_Byte01_Animated : packoffset(c94); 428 float _Unigram_Letter_Grid_Data_Block19_Datum00_Byte01_Animated : packoffset(c95); 429 float _Unigram_Letter_Grid_Data_Block19_Datum01_Byte01_Animated : packoffset(c96); 430 float _Unigram_Letter_Grid_Data_Block19_Datum02_Byte01_Animated : packoffset(c97); 431 float _Unigram_Letter_Grid_Data_Block19_Datum03_Byte01_Animated : packoffset(c98); 432 float _Unigram_Letter_Grid_Data_Block19_Datum04_Byte01_Animated : packoffset(c99); 433 434 float _Unigram_Letter_Grid_Data_Block20_Datum00_Byte01_Animated : packoffset(c100); 435 float _Unigram_Letter_Grid_Data_Block20_Datum01_Byte01_Animated : packoffset(c101); 436 float _Unigram_Letter_Grid_Data_Block20_Datum02_Byte01_Animated : packoffset(c102); 437 float _Unigram_Letter_Grid_Data_Block20_Datum03_Byte01_Animated : packoffset(c103); 438 float _Unigram_Letter_Grid_Data_Block20_Datum04_Byte01_Animated : packoffset(c104); 439 float _Unigram_Letter_Grid_Data_Block21_Datum00_Byte01_Animated : packoffset(c105); 440 float _Unigram_Letter_Grid_Data_Block21_Datum01_Byte01_Animated : packoffset(c106); 441 float _Unigram_Letter_Grid_Data_Block21_Datum02_Byte01_Animated : packoffset(c107); 442 float _Unigram_Letter_Grid_Data_Block21_Datum03_Byte01_Animated : packoffset(c108); 443 float _Unigram_Letter_Grid_Data_Block21_Datum04_Byte01_Animated : packoffset(c109); 444 445 float _Unigram_Letter_Grid_Data_Block22_Datum00_Byte01_Animated : packoffset(c110); 446 float _Unigram_Letter_Grid_Data_Block22_Datum01_Byte01_Animated : packoffset(c111); 447 float _Unigram_Letter_Grid_Data_Block22_Datum02_Byte01_Animated : packoffset(c112); 448 float _Unigram_Letter_Grid_Data_Block22_Datum03_Byte01_Animated : packoffset(c113); 449 float _Unigram_Letter_Grid_Data_Block22_Datum04_Byte01_Animated : packoffset(c114); 450 float _Unigram_Letter_Grid_Data_Block23_Datum00_Byte01_Animated : packoffset(c115); 451 float _Unigram_Letter_Grid_Data_Block23_Datum01_Byte01_Animated : packoffset(c116); 452 float _Unigram_Letter_Grid_Data_Block23_Datum02_Byte01_Animated : packoffset(c117); 453 float _Unigram_Letter_Grid_Data_Block23_Datum03_Byte01_Animated : packoffset(c118); 454 float _Unigram_Letter_Grid_Data_Block23_Datum04_Byte01_Animated : packoffset(c119); 455 456 float _Unigram_Letter_Grid_Data_Block24_Datum00_Byte01_Animated : packoffset(c120); 457 float _Unigram_Letter_Grid_Data_Block24_Datum01_Byte01_Animated : packoffset(c121); 458 float _Unigram_Letter_Grid_Data_Block24_Datum02_Byte01_Animated : packoffset(c122); 459 float _Unigram_Letter_Grid_Data_Block24_Datum03_Byte01_Animated : packoffset(c123); 460 float _Unigram_Letter_Grid_Data_Block24_Datum04_Byte01_Animated : packoffset(c124); 461 float _Unigram_Letter_Grid_Data_Block25_Datum00_Byte01_Animated : packoffset(c125); 462 float _Unigram_Letter_Grid_Data_Block25_Datum01_Byte01_Animated : packoffset(c126); 463 float _Unigram_Letter_Grid_Data_Block25_Datum02_Byte01_Animated : packoffset(c127); 464 float _Unigram_Letter_Grid_Data_Block25_Datum03_Byte01_Animated : packoffset(c128); 465 float _Unigram_Letter_Grid_Data_Block25_Datum04_Byte01_Animated : packoffset(c129); 466 467 float _Unigram_Letter_Grid_Data_Block26_Datum00_Byte01_Animated : packoffset(c130); 468 float _Unigram_Letter_Grid_Data_Block26_Datum01_Byte01_Animated : packoffset(c131); 469 float _Unigram_Letter_Grid_Data_Block26_Datum02_Byte01_Animated : packoffset(c132); 470 float _Unigram_Letter_Grid_Data_Block26_Datum03_Byte01_Animated : packoffset(c133); 471 float _Unigram_Letter_Grid_Data_Block26_Datum04_Byte01_Animated : packoffset(c134); 472 float _Unigram_Letter_Grid_Data_Block27_Datum00_Byte01_Animated : packoffset(c135); 473 float _Unigram_Letter_Grid_Data_Block27_Datum01_Byte01_Animated : packoffset(c136); 474 float _Unigram_Letter_Grid_Data_Block27_Datum02_Byte01_Animated : packoffset(c137); 475 float _Unigram_Letter_Grid_Data_Block27_Datum03_Byte01_Animated : packoffset(c138); 476 float _Unigram_Letter_Grid_Data_Block27_Datum04_Byte01_Animated : packoffset(c139); 477 478 float _Unigram_Letter_Grid_Data_Block28_Datum00_Byte01_Animated : packoffset(c140); 479 float _Unigram_Letter_Grid_Data_Block28_Datum01_Byte01_Animated : packoffset(c141); 480 float _Unigram_Letter_Grid_Data_Block28_Datum02_Byte01_Animated : packoffset(c142); 481 float _Unigram_Letter_Grid_Data_Block28_Datum03_Byte01_Animated : packoffset(c143); 482 float _Unigram_Letter_Grid_Data_Block28_Datum04_Byte01_Animated : packoffset(c144); 483 float _Unigram_Letter_Grid_Data_Block29_Datum00_Byte01_Animated : packoffset(c145); 484 float _Unigram_Letter_Grid_Data_Block29_Datum01_Byte01_Animated : packoffset(c146); 485 float _Unigram_Letter_Grid_Data_Block29_Datum02_Byte01_Animated : packoffset(c147); 486 float _Unigram_Letter_Grid_Data_Block29_Datum03_Byte01_Animated : packoffset(c148); 487 float _Unigram_Letter_Grid_Data_Block29_Datum04_Byte01_Animated : packoffset(c149); 488 489 float _Unigram_Letter_Grid_Data_Block30_Datum00_Byte01_Animated : packoffset(c150); 490 float _Unigram_Letter_Grid_Data_Block30_Datum01_Byte01_Animated : packoffset(c151); 491 float _Unigram_Letter_Grid_Data_Block30_Datum02_Byte01_Animated : packoffset(c152); 492 float _Unigram_Letter_Grid_Data_Block30_Datum03_Byte01_Animated : packoffset(c153); 493 float _Unigram_Letter_Grid_Data_Block30_Datum04_Byte01_Animated : packoffset(c154); 494 float _Unigram_Letter_Grid_Data_Block31_Datum00_Byte01_Animated : packoffset(c155); 495 float _Unigram_Letter_Grid_Data_Block31_Datum01_Byte01_Animated : packoffset(c156); 496 float _Unigram_Letter_Grid_Data_Block31_Datum02_Byte01_Animated : packoffset(c157); 497 float _Unigram_Letter_Grid_Data_Block31_Datum03_Byte01_Animated : packoffset(c158); 498 float _Unigram_Letter_Grid_Data_Block31_Datum04_Byte01_Animated : packoffset(c159); 499 500 float _Unigram_Letter_Grid_Data_Block32_Datum00_Byte01_Animated : packoffset(c160); 501 float _Unigram_Letter_Grid_Data_Block32_Datum01_Byte01_Animated : packoffset(c161); 502 float _Unigram_Letter_Grid_Data_Block32_Datum02_Byte01_Animated : packoffset(c162); 503 float _Unigram_Letter_Grid_Data_Block32_Datum03_Byte01_Animated : packoffset(c163); 504 float _Unigram_Letter_Grid_Data_Block32_Datum04_Byte01_Animated : packoffset(c164); 505 float _Unigram_Letter_Grid_Data_Block33_Datum00_Byte01_Animated : packoffset(c165); 506 float _Unigram_Letter_Grid_Data_Block33_Datum01_Byte01_Animated : packoffset(c166); 507 float _Unigram_Letter_Grid_Data_Block33_Datum02_Byte01_Animated : packoffset(c167); 508 float _Unigram_Letter_Grid_Data_Block33_Datum03_Byte01_Animated : packoffset(c168); 509 float _Unigram_Letter_Grid_Data_Block33_Datum04_Byte01_Animated : packoffset(c169); 510 511 float _Unigram_Letter_Grid_Data_Block34_Datum00_Byte01_Animated : packoffset(c170); 512 float _Unigram_Letter_Grid_Data_Block34_Datum01_Byte01_Animated : packoffset(c171); 513 float _Unigram_Letter_Grid_Data_Block34_Datum02_Byte01_Animated : packoffset(c172); 514 float _Unigram_Letter_Grid_Data_Block34_Datum03_Byte01_Animated : packoffset(c173); 515 float _Unigram_Letter_Grid_Data_Block34_Datum04_Byte01_Animated : packoffset(c174); 516 float _Unigram_Letter_Grid_Data_Block35_Datum00_Byte01_Animated : packoffset(c175); 517 float _Unigram_Letter_Grid_Data_Block35_Datum01_Byte01_Animated : packoffset(c176); 518 float _Unigram_Letter_Grid_Data_Block35_Datum02_Byte01_Animated : packoffset(c177); 519 float _Unigram_Letter_Grid_Data_Block35_Datum03_Byte01_Animated : packoffset(c178); 520 float _Unigram_Letter_Grid_Data_Block35_Datum04_Byte01_Animated : packoffset(c179); 521 522 float _Unigram_Letter_Grid_Data_Block36_Datum00_Byte01_Animated : packoffset(c180); 523 float _Unigram_Letter_Grid_Data_Block36_Datum01_Byte01_Animated : packoffset(c181); 524 float _Unigram_Letter_Grid_Data_Block36_Datum02_Byte01_Animated : packoffset(c182); 525 float _Unigram_Letter_Grid_Data_Block36_Datum03_Byte01_Animated : packoffset(c183); 526 float _Unigram_Letter_Grid_Data_Block36_Datum04_Byte01_Animated : packoffset(c184); 527 float _Unigram_Letter_Grid_Data_Block37_Datum00_Byte01_Animated : packoffset(c185); 528 float _Unigram_Letter_Grid_Data_Block37_Datum01_Byte01_Animated : packoffset(c186); 529 float _Unigram_Letter_Grid_Data_Block37_Datum02_Byte01_Animated : packoffset(c187); 530 float _Unigram_Letter_Grid_Data_Block37_Datum03_Byte01_Animated : packoffset(c188); 531 float _Unigram_Letter_Grid_Data_Block37_Datum04_Byte01_Animated : packoffset(c189); 532 533 float _Unigram_Letter_Grid_Data_Block38_Datum00_Byte01_Animated : packoffset(c190); 534 float _Unigram_Letter_Grid_Data_Block38_Datum01_Byte01_Animated : packoffset(c191); 535 float _Unigram_Letter_Grid_Data_Block38_Datum02_Byte01_Animated : packoffset(c192); 536 float _Unigram_Letter_Grid_Data_Block38_Datum03_Byte01_Animated : packoffset(c193); 537 float _Unigram_Letter_Grid_Data_Block38_Datum04_Byte01_Animated : packoffset(c194); 538 float _Unigram_Letter_Grid_Data_Block39_Datum00_Byte01_Animated : packoffset(c195); 539 float _Unigram_Letter_Grid_Data_Block39_Datum01_Byte01_Animated : packoffset(c196); 540 float _Unigram_Letter_Grid_Data_Block39_Datum02_Byte01_Animated : packoffset(c197); 541 float _Unigram_Letter_Grid_Data_Block39_Datum03_Byte01_Animated : packoffset(c198); 542 float _Unigram_Letter_Grid_Data_Block39_Datum04_Byte01_Animated : packoffset(c199); 543} 544#endif // ULG_D1 545 546void PreventCbufferElision(v2f i, inout float a) { 547 // Hack to prevent cbuffer from getting optimized out. 548 [branch] 549 if (i.uv01.x < 0) { 550 a = 0; 551#if defined(ULG_VP) 552 // Add pairs of products since each pair compiles down to a single `mad` 553 // instruction. This reduces the instruction count of this function by 554 // ~50%. (Thank you d4rkpl4y3r for this tip!) 555 a += 556 _Unigram_Letter_Grid_Block00_Visual_Pointer_Animated * 557 _Unigram_Letter_Grid_Block01_Visual_Pointer_Animated + 558 _Unigram_Letter_Grid_Block02_Visual_Pointer_Animated * 559 _Unigram_Letter_Grid_Block03_Visual_Pointer_Animated + 560 _Unigram_Letter_Grid_Block04_Visual_Pointer_Animated * 561 _Unigram_Letter_Grid_Block05_Visual_Pointer_Animated + 562 _Unigram_Letter_Grid_Block06_Visual_Pointer_Animated * 563 _Unigram_Letter_Grid_Block07_Visual_Pointer_Animated + 564 _Unigram_Letter_Grid_Block08_Visual_Pointer_Animated * 565 _Unigram_Letter_Grid_Block09_Visual_Pointer_Animated + 566 _Unigram_Letter_Grid_Block10_Visual_Pointer_Animated * 567 _Unigram_Letter_Grid_Block11_Visual_Pointer_Animated + 568 _Unigram_Letter_Grid_Block12_Visual_Pointer_Animated * 569 _Unigram_Letter_Grid_Block13_Visual_Pointer_Animated + 570 _Unigram_Letter_Grid_Block14_Visual_Pointer_Animated * 571 _Unigram_Letter_Grid_Block15_Visual_Pointer_Animated + 572 _Unigram_Letter_Grid_Block16_Visual_Pointer_Animated * 573 _Unigram_Letter_Grid_Block17_Visual_Pointer_Animated + 574 _Unigram_Letter_Grid_Block18_Visual_Pointer_Animated * 575 _Unigram_Letter_Grid_Block19_Visual_Pointer_Animated + 576 _Unigram_Letter_Grid_Block20_Visual_Pointer_Animated * 577 _Unigram_Letter_Grid_Block21_Visual_Pointer_Animated + 578 _Unigram_Letter_Grid_Block22_Visual_Pointer_Animated * 579 _Unigram_Letter_Grid_Block23_Visual_Pointer_Animated + 580 _Unigram_Letter_Grid_Block24_Visual_Pointer_Animated * 581 _Unigram_Letter_Grid_Block25_Visual_Pointer_Animated + 582 _Unigram_Letter_Grid_Block26_Visual_Pointer_Animated * 583 _Unigram_Letter_Grid_Block27_Visual_Pointer_Animated + 584 _Unigram_Letter_Grid_Block28_Visual_Pointer_Animated * 585 _Unigram_Letter_Grid_Block29_Visual_Pointer_Animated + 586 _Unigram_Letter_Grid_Block30_Visual_Pointer_Animated * 587 _Unigram_Letter_Grid_Block31_Visual_Pointer_Animated + 588 _Unigram_Letter_Grid_Block32_Visual_Pointer_Animated * 589 _Unigram_Letter_Grid_Block33_Visual_Pointer_Animated + 590 _Unigram_Letter_Grid_Block34_Visual_Pointer_Animated * 591 _Unigram_Letter_Grid_Block35_Visual_Pointer_Animated + 592 _Unigram_Letter_Grid_Block36_Visual_Pointer_Animated * 593 _Unigram_Letter_Grid_Block37_Visual_Pointer_Animated + 594 _Unigram_Letter_Grid_Block38_Visual_Pointer_Animated * 595 _Unigram_Letter_Grid_Block39_Visual_Pointer_Animated; 596#endif // ULG_VP 597#if defined(ULG_D0) 598 a += 599 _Unigram_Letter_Grid_Data_Block00_Datum00_Byte00_Animated * 600 _Unigram_Letter_Grid_Data_Block00_Datum01_Byte00_Animated + 601 _Unigram_Letter_Grid_Data_Block00_Datum02_Byte00_Animated * 602 _Unigram_Letter_Grid_Data_Block00_Datum03_Byte00_Animated + 603 _Unigram_Letter_Grid_Data_Block00_Datum04_Byte00_Animated * 604 _Unigram_Letter_Grid_Data_Block01_Datum00_Byte00_Animated + 605 _Unigram_Letter_Grid_Data_Block01_Datum01_Byte00_Animated * 606 _Unigram_Letter_Grid_Data_Block01_Datum02_Byte00_Animated + 607 _Unigram_Letter_Grid_Data_Block01_Datum03_Byte00_Animated * 608 _Unigram_Letter_Grid_Data_Block01_Datum04_Byte00_Animated + 609 _Unigram_Letter_Grid_Data_Block02_Datum00_Byte00_Animated * 610 _Unigram_Letter_Grid_Data_Block02_Datum01_Byte00_Animated + 611 _Unigram_Letter_Grid_Data_Block02_Datum02_Byte00_Animated * 612 _Unigram_Letter_Grid_Data_Block02_Datum03_Byte00_Animated + 613 _Unigram_Letter_Grid_Data_Block02_Datum04_Byte00_Animated * 614 _Unigram_Letter_Grid_Data_Block03_Datum00_Byte00_Animated + 615 _Unigram_Letter_Grid_Data_Block03_Datum01_Byte00_Animated * 616 _Unigram_Letter_Grid_Data_Block03_Datum02_Byte00_Animated + 617 _Unigram_Letter_Grid_Data_Block03_Datum03_Byte00_Animated * 618 _Unigram_Letter_Grid_Data_Block03_Datum04_Byte00_Animated + 619 _Unigram_Letter_Grid_Data_Block04_Datum00_Byte00_Animated * 620 _Unigram_Letter_Grid_Data_Block04_Datum01_Byte00_Animated + 621 _Unigram_Letter_Grid_Data_Block04_Datum02_Byte00_Animated * 622 _Unigram_Letter_Grid_Data_Block04_Datum03_Byte00_Animated + 623 _Unigram_Letter_Grid_Data_Block04_Datum04_Byte00_Animated * 624 _Unigram_Letter_Grid_Data_Block05_Datum00_Byte00_Animated + 625 _Unigram_Letter_Grid_Data_Block05_Datum01_Byte00_Animated * 626 _Unigram_Letter_Grid_Data_Block05_Datum02_Byte00_Animated + 627 _Unigram_Letter_Grid_Data_Block05_Datum03_Byte00_Animated * 628 _Unigram_Letter_Grid_Data_Block05_Datum04_Byte00_Animated + 629 _Unigram_Letter_Grid_Data_Block06_Datum00_Byte00_Animated * 630 _Unigram_Letter_Grid_Data_Block06_Datum01_Byte00_Animated + 631 _Unigram_Letter_Grid_Data_Block06_Datum02_Byte00_Animated * 632 _Unigram_Letter_Grid_Data_Block06_Datum03_Byte00_Animated + 633 _Unigram_Letter_Grid_Data_Block06_Datum04_Byte00_Animated * 634 _Unigram_Letter_Grid_Data_Block07_Datum00_Byte00_Animated + 635 _Unigram_Letter_Grid_Data_Block07_Datum01_Byte00_Animated * 636 _Unigram_Letter_Grid_Data_Block07_Datum02_Byte00_Animated + 637 _Unigram_Letter_Grid_Data_Block07_Datum03_Byte00_Animated * 638 _Unigram_Letter_Grid_Data_Block07_Datum04_Byte00_Animated + 639 _Unigram_Letter_Grid_Data_Block08_Datum00_Byte00_Animated * 640 _Unigram_Letter_Grid_Data_Block08_Datum01_Byte00_Animated + 641 _Unigram_Letter_Grid_Data_Block08_Datum02_Byte00_Animated * 642 _Unigram_Letter_Grid_Data_Block08_Datum03_Byte00_Animated + 643 _Unigram_Letter_Grid_Data_Block08_Datum04_Byte00_Animated * 644 _Unigram_Letter_Grid_Data_Block09_Datum00_Byte00_Animated + 645 _Unigram_Letter_Grid_Data_Block09_Datum01_Byte00_Animated * 646 _Unigram_Letter_Grid_Data_Block09_Datum02_Byte00_Animated + 647 _Unigram_Letter_Grid_Data_Block09_Datum03_Byte00_Animated * 648 _Unigram_Letter_Grid_Data_Block09_Datum04_Byte00_Animated + 649 _Unigram_Letter_Grid_Data_Block10_Datum00_Byte00_Animated * 650 _Unigram_Letter_Grid_Data_Block10_Datum01_Byte00_Animated + 651 _Unigram_Letter_Grid_Data_Block10_Datum02_Byte00_Animated * 652 _Unigram_Letter_Grid_Data_Block10_Datum03_Byte00_Animated + 653 _Unigram_Letter_Grid_Data_Block10_Datum04_Byte00_Animated * 654 _Unigram_Letter_Grid_Data_Block11_Datum00_Byte00_Animated + 655 _Unigram_Letter_Grid_Data_Block11_Datum01_Byte00_Animated * 656 _Unigram_Letter_Grid_Data_Block11_Datum02_Byte00_Animated + 657 _Unigram_Letter_Grid_Data_Block11_Datum03_Byte00_Animated * 658 _Unigram_Letter_Grid_Data_Block11_Datum04_Byte00_Animated + 659 _Unigram_Letter_Grid_Data_Block12_Datum00_Byte00_Animated * 660 _Unigram_Letter_Grid_Data_Block12_Datum01_Byte00_Animated + 661 _Unigram_Letter_Grid_Data_Block12_Datum02_Byte00_Animated * 662 _Unigram_Letter_Grid_Data_Block12_Datum03_Byte00_Animated + 663 _Unigram_Letter_Grid_Data_Block12_Datum04_Byte00_Animated * 664 _Unigram_Letter_Grid_Data_Block13_Datum00_Byte00_Animated + 665 _Unigram_Letter_Grid_Data_Block13_Datum01_Byte00_Animated * 666 _Unigram_Letter_Grid_Data_Block13_Datum02_Byte00_Animated + 667 _Unigram_Letter_Grid_Data_Block13_Datum03_Byte00_Animated * 668 _Unigram_Letter_Grid_Data_Block13_Datum04_Byte00_Animated + 669 _Unigram_Letter_Grid_Data_Block14_Datum00_Byte00_Animated * 670 _Unigram_Letter_Grid_Data_Block14_Datum01_Byte00_Animated + 671 _Unigram_Letter_Grid_Data_Block14_Datum02_Byte00_Animated * 672 _Unigram_Letter_Grid_Data_Block14_Datum03_Byte00_Animated + 673 _Unigram_Letter_Grid_Data_Block14_Datum04_Byte00_Animated * 674 _Unigram_Letter_Grid_Data_Block15_Datum00_Byte00_Animated + 675 _Unigram_Letter_Grid_Data_Block15_Datum01_Byte00_Animated * 676 _Unigram_Letter_Grid_Data_Block15_Datum02_Byte00_Animated + 677 _Unigram_Letter_Grid_Data_Block15_Datum03_Byte00_Animated * 678 _Unigram_Letter_Grid_Data_Block15_Datum04_Byte00_Animated + 679 _Unigram_Letter_Grid_Data_Block16_Datum00_Byte00_Animated * 680 _Unigram_Letter_Grid_Data_Block16_Datum01_Byte00_Animated + 681 _Unigram_Letter_Grid_Data_Block16_Datum02_Byte00_Animated * 682 _Unigram_Letter_Grid_Data_Block16_Datum03_Byte00_Animated + 683 _Unigram_Letter_Grid_Data_Block16_Datum04_Byte00_Animated * 684 _Unigram_Letter_Grid_Data_Block17_Datum00_Byte00_Animated + 685 _Unigram_Letter_Grid_Data_Block17_Datum01_Byte00_Animated * 686 _Unigram_Letter_Grid_Data_Block17_Datum02_Byte00_Animated + 687 _Unigram_Letter_Grid_Data_Block17_Datum03_Byte00_Animated * 688 _Unigram_Letter_Grid_Data_Block17_Datum04_Byte00_Animated + 689 _Unigram_Letter_Grid_Data_Block18_Datum00_Byte00_Animated * 690 _Unigram_Letter_Grid_Data_Block18_Datum01_Byte00_Animated + 691 _Unigram_Letter_Grid_Data_Block18_Datum02_Byte00_Animated * 692 _Unigram_Letter_Grid_Data_Block18_Datum03_Byte00_Animated + 693 _Unigram_Letter_Grid_Data_Block18_Datum04_Byte00_Animated * 694 _Unigram_Letter_Grid_Data_Block19_Datum00_Byte00_Animated + 695 _Unigram_Letter_Grid_Data_Block19_Datum01_Byte00_Animated * 696 _Unigram_Letter_Grid_Data_Block19_Datum02_Byte00_Animated + 697 _Unigram_Letter_Grid_Data_Block19_Datum03_Byte00_Animated * 698 _Unigram_Letter_Grid_Data_Block19_Datum04_Byte00_Animated + 699 _Unigram_Letter_Grid_Data_Block20_Datum00_Byte00_Animated * 700 _Unigram_Letter_Grid_Data_Block20_Datum01_Byte00_Animated + 701 _Unigram_Letter_Grid_Data_Block20_Datum02_Byte00_Animated * 702 _Unigram_Letter_Grid_Data_Block20_Datum03_Byte00_Animated + 703 _Unigram_Letter_Grid_Data_Block20_Datum04_Byte00_Animated * 704 _Unigram_Letter_Grid_Data_Block21_Datum00_Byte00_Animated + 705 _Unigram_Letter_Grid_Data_Block21_Datum01_Byte00_Animated * 706 _Unigram_Letter_Grid_Data_Block21_Datum02_Byte00_Animated + 707 _Unigram_Letter_Grid_Data_Block21_Datum03_Byte00_Animated * 708 _Unigram_Letter_Grid_Data_Block21_Datum04_Byte00_Animated + 709 _Unigram_Letter_Grid_Data_Block22_Datum00_Byte00_Animated * 710 _Unigram_Letter_Grid_Data_Block22_Datum01_Byte00_Animated + 711 _Unigram_Letter_Grid_Data_Block22_Datum02_Byte00_Animated * 712 _Unigram_Letter_Grid_Data_Block22_Datum03_Byte00_Animated + 713 _Unigram_Letter_Grid_Data_Block22_Datum04_Byte00_Animated * 714 _Unigram_Letter_Grid_Data_Block23_Datum00_Byte00_Animated + 715 _Unigram_Letter_Grid_Data_Block23_Datum01_Byte00_Animated * 716 _Unigram_Letter_Grid_Data_Block23_Datum02_Byte00_Animated + 717 _Unigram_Letter_Grid_Data_Block23_Datum03_Byte00_Animated * 718 _Unigram_Letter_Grid_Data_Block23_Datum04_Byte00_Animated + 719 _Unigram_Letter_Grid_Data_Block24_Datum00_Byte00_Animated * 720 _Unigram_Letter_Grid_Data_Block24_Datum01_Byte00_Animated + 721 _Unigram_Letter_Grid_Data_Block24_Datum02_Byte00_Animated * 722 _Unigram_Letter_Grid_Data_Block24_Datum03_Byte00_Animated + 723 _Unigram_Letter_Grid_Data_Block24_Datum04_Byte00_Animated * 724 _Unigram_Letter_Grid_Data_Block25_Datum00_Byte00_Animated + 725 _Unigram_Letter_Grid_Data_Block25_Datum01_Byte00_Animated * 726 _Unigram_Letter_Grid_Data_Block25_Datum02_Byte00_Animated + 727 _Unigram_Letter_Grid_Data_Block25_Datum03_Byte00_Animated * 728 _Unigram_Letter_Grid_Data_Block25_Datum04_Byte00_Animated + 729 _Unigram_Letter_Grid_Data_Block26_Datum00_Byte00_Animated * 730 _Unigram_Letter_Grid_Data_Block26_Datum01_Byte00_Animated + 731 _Unigram_Letter_Grid_Data_Block26_Datum02_Byte00_Animated * 732 _Unigram_Letter_Grid_Data_Block26_Datum03_Byte00_Animated + 733 _Unigram_Letter_Grid_Data_Block26_Datum04_Byte00_Animated * 734 _Unigram_Letter_Grid_Data_Block27_Datum00_Byte00_Animated + 735 _Unigram_Letter_Grid_Data_Block27_Datum01_Byte00_Animated * 736 _Unigram_Letter_Grid_Data_Block27_Datum02_Byte00_Animated + 737 _Unigram_Letter_Grid_Data_Block27_Datum03_Byte00_Animated * 738 _Unigram_Letter_Grid_Data_Block27_Datum04_Byte00_Animated + 739 _Unigram_Letter_Grid_Data_Block28_Datum00_Byte00_Animated * 740 _Unigram_Letter_Grid_Data_Block28_Datum01_Byte00_Animated + 741 _Unigram_Letter_Grid_Data_Block28_Datum02_Byte00_Animated * 742 _Unigram_Letter_Grid_Data_Block28_Datum03_Byte00_Animated + 743 _Unigram_Letter_Grid_Data_Block28_Datum04_Byte00_Animated * 744 _Unigram_Letter_Grid_Data_Block29_Datum00_Byte00_Animated + 745 _Unigram_Letter_Grid_Data_Block29_Datum01_Byte00_Animated * 746 _Unigram_Letter_Grid_Data_Block29_Datum02_Byte00_Animated + 747 _Unigram_Letter_Grid_Data_Block29_Datum03_Byte00_Animated * 748 _Unigram_Letter_Grid_Data_Block29_Datum04_Byte00_Animated + 749 _Unigram_Letter_Grid_Data_Block30_Datum00_Byte00_Animated * 750 _Unigram_Letter_Grid_Data_Block30_Datum01_Byte00_Animated + 751 _Unigram_Letter_Grid_Data_Block30_Datum02_Byte00_Animated * 752 _Unigram_Letter_Grid_Data_Block30_Datum03_Byte00_Animated + 753 _Unigram_Letter_Grid_Data_Block30_Datum04_Byte00_Animated * 754 _Unigram_Letter_Grid_Data_Block31_Datum00_Byte00_Animated + 755 _Unigram_Letter_Grid_Data_Block31_Datum01_Byte00_Animated * 756 _Unigram_Letter_Grid_Data_Block31_Datum02_Byte00_Animated + 757 _Unigram_Letter_Grid_Data_Block31_Datum03_Byte00_Animated * 758 _Unigram_Letter_Grid_Data_Block31_Datum04_Byte00_Animated + 759 _Unigram_Letter_Grid_Data_Block32_Datum00_Byte00_Animated * 760 _Unigram_Letter_Grid_Data_Block32_Datum01_Byte00_Animated + 761 _Unigram_Letter_Grid_Data_Block32_Datum02_Byte00_Animated * 762 _Unigram_Letter_Grid_Data_Block32_Datum03_Byte00_Animated + 763 _Unigram_Letter_Grid_Data_Block32_Datum04_Byte00_Animated * 764 _Unigram_Letter_Grid_Data_Block33_Datum00_Byte00_Animated + 765 _Unigram_Letter_Grid_Data_Block33_Datum01_Byte00_Animated * 766 _Unigram_Letter_Grid_Data_Block33_Datum02_Byte00_Animated + 767 _Unigram_Letter_Grid_Data_Block33_Datum03_Byte00_Animated * 768 _Unigram_Letter_Grid_Data_Block33_Datum04_Byte00_Animated + 769 _Unigram_Letter_Grid_Data_Block34_Datum00_Byte00_Animated * 770 _Unigram_Letter_Grid_Data_Block34_Datum01_Byte00_Animated + 771 _Unigram_Letter_Grid_Data_Block34_Datum02_Byte00_Animated * 772 _Unigram_Letter_Grid_Data_Block34_Datum03_Byte00_Animated + 773 _Unigram_Letter_Grid_Data_Block34_Datum04_Byte00_Animated * 774 _Unigram_Letter_Grid_Data_Block35_Datum00_Byte00_Animated + 775 _Unigram_Letter_Grid_Data_Block35_Datum01_Byte00_Animated * 776 _Unigram_Letter_Grid_Data_Block35_Datum02_Byte00_Animated + 777 _Unigram_Letter_Grid_Data_Block35_Datum03_Byte00_Animated * 778 _Unigram_Letter_Grid_Data_Block35_Datum04_Byte00_Animated + 779 _Unigram_Letter_Grid_Data_Block36_Datum00_Byte00_Animated * 780 _Unigram_Letter_Grid_Data_Block36_Datum01_Byte00_Animated + 781 _Unigram_Letter_Grid_Data_Block36_Datum02_Byte00_Animated * 782 _Unigram_Letter_Grid_Data_Block36_Datum03_Byte00_Animated + 783 _Unigram_Letter_Grid_Data_Block36_Datum04_Byte00_Animated * 784 _Unigram_Letter_Grid_Data_Block37_Datum00_Byte00_Animated + 785 _Unigram_Letter_Grid_Data_Block37_Datum01_Byte00_Animated * 786 _Unigram_Letter_Grid_Data_Block37_Datum02_Byte00_Animated + 787 _Unigram_Letter_Grid_Data_Block37_Datum03_Byte00_Animated * 788 _Unigram_Letter_Grid_Data_Block37_Datum04_Byte00_Animated + 789 _Unigram_Letter_Grid_Data_Block38_Datum00_Byte00_Animated * 790 _Unigram_Letter_Grid_Data_Block38_Datum01_Byte00_Animated + 791 _Unigram_Letter_Grid_Data_Block38_Datum02_Byte00_Animated * 792 _Unigram_Letter_Grid_Data_Block38_Datum03_Byte00_Animated + 793 _Unigram_Letter_Grid_Data_Block38_Datum04_Byte00_Animated * 794 _Unigram_Letter_Grid_Data_Block39_Datum00_Byte00_Animated + 795 _Unigram_Letter_Grid_Data_Block39_Datum01_Byte00_Animated * 796 _Unigram_Letter_Grid_Data_Block39_Datum02_Byte00_Animated + 797 _Unigram_Letter_Grid_Data_Block39_Datum03_Byte00_Animated * 798 _Unigram_Letter_Grid_Data_Block39_Datum04_Byte00_Animated; 799#endif // ULG_D0 800#if defined(ULG_D1) 801 a += 802 _Unigram_Letter_Grid_Data_Block00_Datum00_Byte01_Animated * 803 _Unigram_Letter_Grid_Data_Block00_Datum01_Byte01_Animated + 804 _Unigram_Letter_Grid_Data_Block00_Datum02_Byte01_Animated * 805 _Unigram_Letter_Grid_Data_Block00_Datum03_Byte01_Animated + 806 _Unigram_Letter_Grid_Data_Block00_Datum04_Byte01_Animated * 807 _Unigram_Letter_Grid_Data_Block01_Datum00_Byte01_Animated + 808 _Unigram_Letter_Grid_Data_Block01_Datum01_Byte01_Animated * 809 _Unigram_Letter_Grid_Data_Block01_Datum02_Byte01_Animated + 810 _Unigram_Letter_Grid_Data_Block01_Datum03_Byte01_Animated * 811 _Unigram_Letter_Grid_Data_Block01_Datum04_Byte01_Animated + 812 _Unigram_Letter_Grid_Data_Block02_Datum00_Byte01_Animated * 813 _Unigram_Letter_Grid_Data_Block02_Datum01_Byte01_Animated + 814 _Unigram_Letter_Grid_Data_Block02_Datum02_Byte01_Animated * 815 _Unigram_Letter_Grid_Data_Block02_Datum03_Byte01_Animated + 816 _Unigram_Letter_Grid_Data_Block02_Datum04_Byte01_Animated * 817 _Unigram_Letter_Grid_Data_Block03_Datum00_Byte01_Animated + 818 _Unigram_Letter_Grid_Data_Block03_Datum01_Byte01_Animated * 819 _Unigram_Letter_Grid_Data_Block03_Datum02_Byte01_Animated + 820 _Unigram_Letter_Grid_Data_Block03_Datum03_Byte01_Animated * 821 _Unigram_Letter_Grid_Data_Block03_Datum04_Byte01_Animated + 822 _Unigram_Letter_Grid_Data_Block04_Datum00_Byte01_Animated * 823 _Unigram_Letter_Grid_Data_Block04_Datum01_Byte01_Animated + 824 _Unigram_Letter_Grid_Data_Block04_Datum02_Byte01_Animated * 825 _Unigram_Letter_Grid_Data_Block04_Datum03_Byte01_Animated + 826 _Unigram_Letter_Grid_Data_Block04_Datum04_Byte01_Animated * 827 _Unigram_Letter_Grid_Data_Block05_Datum00_Byte01_Animated + 828 _Unigram_Letter_Grid_Data_Block05_Datum01_Byte01_Animated * 829 _Unigram_Letter_Grid_Data_Block05_Datum02_Byte01_Animated + 830 _Unigram_Letter_Grid_Data_Block05_Datum03_Byte01_Animated * 831 _Unigram_Letter_Grid_Data_Block05_Datum04_Byte01_Animated + 832 _Unigram_Letter_Grid_Data_Block06_Datum00_Byte01_Animated * 833 _Unigram_Letter_Grid_Data_Block06_Datum01_Byte01_Animated + 834 _Unigram_Letter_Grid_Data_Block06_Datum02_Byte01_Animated * 835 _Unigram_Letter_Grid_Data_Block06_Datum03_Byte01_Animated + 836 _Unigram_Letter_Grid_Data_Block06_Datum04_Byte01_Animated * 837 _Unigram_Letter_Grid_Data_Block07_Datum00_Byte01_Animated + 838 _Unigram_Letter_Grid_Data_Block07_Datum01_Byte01_Animated * 839 _Unigram_Letter_Grid_Data_Block07_Datum02_Byte01_Animated + 840 _Unigram_Letter_Grid_Data_Block07_Datum03_Byte01_Animated * 841 _Unigram_Letter_Grid_Data_Block07_Datum04_Byte01_Animated + 842 _Unigram_Letter_Grid_Data_Block08_Datum00_Byte01_Animated * 843 _Unigram_Letter_Grid_Data_Block08_Datum01_Byte01_Animated + 844 _Unigram_Letter_Grid_Data_Block08_Datum02_Byte01_Animated * 845 _Unigram_Letter_Grid_Data_Block08_Datum03_Byte01_Animated + 846 _Unigram_Letter_Grid_Data_Block08_Datum04_Byte01_Animated * 847 _Unigram_Letter_Grid_Data_Block09_Datum00_Byte01_Animated + 848 _Unigram_Letter_Grid_Data_Block09_Datum01_Byte01_Animated * 849 _Unigram_Letter_Grid_Data_Block09_Datum02_Byte01_Animated + 850 _Unigram_Letter_Grid_Data_Block09_Datum03_Byte01_Animated * 851 _Unigram_Letter_Grid_Data_Block09_Datum04_Byte01_Animated + 852 _Unigram_Letter_Grid_Data_Block10_Datum00_Byte01_Animated * 853 _Unigram_Letter_Grid_Data_Block10_Datum01_Byte01_Animated + 854 _Unigram_Letter_Grid_Data_Block10_Datum02_Byte01_Animated * 855 _Unigram_Letter_Grid_Data_Block10_Datum03_Byte01_Animated + 856 _Unigram_Letter_Grid_Data_Block10_Datum04_Byte01_Animated * 857 _Unigram_Letter_Grid_Data_Block11_Datum00_Byte01_Animated + 858 _Unigram_Letter_Grid_Data_Block11_Datum01_Byte01_Animated * 859 _Unigram_Letter_Grid_Data_Block11_Datum02_Byte01_Animated + 860 _Unigram_Letter_Grid_Data_Block11_Datum03_Byte01_Animated * 861 _Unigram_Letter_Grid_Data_Block11_Datum04_Byte01_Animated + 862 _Unigram_Letter_Grid_Data_Block12_Datum00_Byte01_Animated * 863 _Unigram_Letter_Grid_Data_Block12_Datum01_Byte01_Animated + 864 _Unigram_Letter_Grid_Data_Block12_Datum02_Byte01_Animated * 865 _Unigram_Letter_Grid_Data_Block12_Datum03_Byte01_Animated + 866 _Unigram_Letter_Grid_Data_Block12_Datum04_Byte01_Animated * 867 _Unigram_Letter_Grid_Data_Block13_Datum00_Byte01_Animated + 868 _Unigram_Letter_Grid_Data_Block13_Datum01_Byte01_Animated * 869 _Unigram_Letter_Grid_Data_Block13_Datum02_Byte01_Animated + 870 _Unigram_Letter_Grid_Data_Block13_Datum03_Byte01_Animated * 871 _Unigram_Letter_Grid_Data_Block13_Datum04_Byte01_Animated + 872 _Unigram_Letter_Grid_Data_Block14_Datum00_Byte01_Animated * 873 _Unigram_Letter_Grid_Data_Block14_Datum01_Byte01_Animated + 874 _Unigram_Letter_Grid_Data_Block14_Datum02_Byte01_Animated * 875 _Unigram_Letter_Grid_Data_Block14_Datum03_Byte01_Animated + 876 _Unigram_Letter_Grid_Data_Block14_Datum04_Byte01_Animated * 877 _Unigram_Letter_Grid_Data_Block15_Datum00_Byte01_Animated + 878 _Unigram_Letter_Grid_Data_Block15_Datum01_Byte01_Animated * 879 _Unigram_Letter_Grid_Data_Block15_Datum02_Byte01_Animated + 880 _Unigram_Letter_Grid_Data_Block15_Datum03_Byte01_Animated * 881 _Unigram_Letter_Grid_Data_Block15_Datum04_Byte01_Animated + 882 _Unigram_Letter_Grid_Data_Block16_Datum00_Byte01_Animated * 883 _Unigram_Letter_Grid_Data_Block16_Datum01_Byte01_Animated + 884 _Unigram_Letter_Grid_Data_Block16_Datum02_Byte01_Animated * 885 _Unigram_Letter_Grid_Data_Block16_Datum03_Byte01_Animated + 886 _Unigram_Letter_Grid_Data_Block16_Datum04_Byte01_Animated * 887 _Unigram_Letter_Grid_Data_Block17_Datum00_Byte01_Animated + 888 _Unigram_Letter_Grid_Data_Block17_Datum01_Byte01_Animated * 889 _Unigram_Letter_Grid_Data_Block17_Datum02_Byte01_Animated + 890 _Unigram_Letter_Grid_Data_Block17_Datum03_Byte01_Animated * 891 _Unigram_Letter_Grid_Data_Block17_Datum04_Byte01_Animated + 892 _Unigram_Letter_Grid_Data_Block18_Datum00_Byte01_Animated * 893 _Unigram_Letter_Grid_Data_Block18_Datum01_Byte01_Animated + 894 _Unigram_Letter_Grid_Data_Block18_Datum02_Byte01_Animated * 895 _Unigram_Letter_Grid_Data_Block18_Datum03_Byte01_Animated + 896 _Unigram_Letter_Grid_Data_Block18_Datum04_Byte01_Animated * 897 _Unigram_Letter_Grid_Data_Block19_Datum00_Byte01_Animated + 898 _Unigram_Letter_Grid_Data_Block19_Datum01_Byte01_Animated * 899 _Unigram_Letter_Grid_Data_Block19_Datum02_Byte01_Animated + 900 _Unigram_Letter_Grid_Data_Block19_Datum03_Byte01_Animated * 901 _Unigram_Letter_Grid_Data_Block19_Datum04_Byte01_Animated + 902 _Unigram_Letter_Grid_Data_Block20_Datum00_Byte01_Animated * 903 _Unigram_Letter_Grid_Data_Block20_Datum01_Byte01_Animated + 904 _Unigram_Letter_Grid_Data_Block20_Datum02_Byte01_Animated * 905 _Unigram_Letter_Grid_Data_Block20_Datum03_Byte01_Animated + 906 _Unigram_Letter_Grid_Data_Block20_Datum04_Byte01_Animated * 907 _Unigram_Letter_Grid_Data_Block21_Datum00_Byte01_Animated + 908 _Unigram_Letter_Grid_Data_Block21_Datum01_Byte01_Animated * 909 _Unigram_Letter_Grid_Data_Block21_Datum02_Byte01_Animated + 910 _Unigram_Letter_Grid_Data_Block21_Datum03_Byte01_Animated * 911 _Unigram_Letter_Grid_Data_Block21_Datum04_Byte01_Animated + 912 _Unigram_Letter_Grid_Data_Block22_Datum00_Byte01_Animated * 913 _Unigram_Letter_Grid_Data_Block22_Datum01_Byte01_Animated + 914 _Unigram_Letter_Grid_Data_Block22_Datum02_Byte01_Animated * 915 _Unigram_Letter_Grid_Data_Block22_Datum03_Byte01_Animated + 916 _Unigram_Letter_Grid_Data_Block22_Datum04_Byte01_Animated * 917 _Unigram_Letter_Grid_Data_Block23_Datum00_Byte01_Animated + 918 _Unigram_Letter_Grid_Data_Block23_Datum01_Byte01_Animated * 919 _Unigram_Letter_Grid_Data_Block23_Datum02_Byte01_Animated + 920 _Unigram_Letter_Grid_Data_Block23_Datum03_Byte01_Animated * 921 _Unigram_Letter_Grid_Data_Block23_Datum04_Byte01_Animated + 922 _Unigram_Letter_Grid_Data_Block24_Datum00_Byte01_Animated * 923 _Unigram_Letter_Grid_Data_Block24_Datum01_Byte01_Animated + 924 _Unigram_Letter_Grid_Data_Block24_Datum02_Byte01_Animated * 925 _Unigram_Letter_Grid_Data_Block24_Datum03_Byte01_Animated + 926 _Unigram_Letter_Grid_Data_Block24_Datum04_Byte01_Animated * 927 _Unigram_Letter_Grid_Data_Block25_Datum00_Byte01_Animated + 928 _Unigram_Letter_Grid_Data_Block25_Datum01_Byte01_Animated * 929 _Unigram_Letter_Grid_Data_Block25_Datum02_Byte01_Animated + 930 _Unigram_Letter_Grid_Data_Block25_Datum03_Byte01_Animated * 931 _Unigram_Letter_Grid_Data_Block25_Datum04_Byte01_Animated + 932 _Unigram_Letter_Grid_Data_Block26_Datum00_Byte01_Animated * 933 _Unigram_Letter_Grid_Data_Block26_Datum01_Byte01_Animated + 934 _Unigram_Letter_Grid_Data_Block26_Datum02_Byte01_Animated * 935 _Unigram_Letter_Grid_Data_Block26_Datum03_Byte01_Animated + 936 _Unigram_Letter_Grid_Data_Block26_Datum04_Byte01_Animated * 937 _Unigram_Letter_Grid_Data_Block27_Datum00_Byte01_Animated + 938 _Unigram_Letter_Grid_Data_Block27_Datum01_Byte01_Animated * 939 _Unigram_Letter_Grid_Data_Block27_Datum02_Byte01_Animated + 940 _Unigram_Letter_Grid_Data_Block27_Datum03_Byte01_Animated * 941 _Unigram_Letter_Grid_Data_Block27_Datum04_Byte01_Animated + 942 _Unigram_Letter_Grid_Data_Block28_Datum00_Byte01_Animated * 943 _Unigram_Letter_Grid_Data_Block28_Datum01_Byte01_Animated + 944 _Unigram_Letter_Grid_Data_Block28_Datum02_Byte01_Animated * 945 _Unigram_Letter_Grid_Data_Block28_Datum03_Byte01_Animated + 946 _Unigram_Letter_Grid_Data_Block28_Datum04_Byte01_Animated * 947 _Unigram_Letter_Grid_Data_Block29_Datum00_Byte01_Animated + 948 _Unigram_Letter_Grid_Data_Block29_Datum01_Byte01_Animated * 949 _Unigram_Letter_Grid_Data_Block29_Datum02_Byte01_Animated + 950 _Unigram_Letter_Grid_Data_Block29_Datum03_Byte01_Animated * 951 _Unigram_Letter_Grid_Data_Block29_Datum04_Byte01_Animated + 952 _Unigram_Letter_Grid_Data_Block30_Datum00_Byte01_Animated * 953 _Unigram_Letter_Grid_Data_Block30_Datum01_Byte01_Animated + 954 _Unigram_Letter_Grid_Data_Block30_Datum02_Byte01_Animated * 955 _Unigram_Letter_Grid_Data_Block30_Datum03_Byte01_Animated + 956 _Unigram_Letter_Grid_Data_Block30_Datum04_Byte01_Animated * 957 _Unigram_Letter_Grid_Data_Block31_Datum00_Byte01_Animated + 958 _Unigram_Letter_Grid_Data_Block31_Datum01_Byte01_Animated * 959 _Unigram_Letter_Grid_Data_Block31_Datum02_Byte01_Animated + 960 _Unigram_Letter_Grid_Data_Block31_Datum03_Byte01_Animated * 961 _Unigram_Letter_Grid_Data_Block31_Datum04_Byte01_Animated + 962 _Unigram_Letter_Grid_Data_Block32_Datum00_Byte01_Animated * 963 _Unigram_Letter_Grid_Data_Block32_Datum01_Byte01_Animated + 964 _Unigram_Letter_Grid_Data_Block32_Datum02_Byte01_Animated * 965 _Unigram_Letter_Grid_Data_Block32_Datum03_Byte01_Animated + 966 _Unigram_Letter_Grid_Data_Block32_Datum04_Byte01_Animated * 967 _Unigram_Letter_Grid_Data_Block33_Datum00_Byte01_Animated + 968 _Unigram_Letter_Grid_Data_Block33_Datum01_Byte01_Animated * 969 _Unigram_Letter_Grid_Data_Block33_Datum02_Byte01_Animated + 970 _Unigram_Letter_Grid_Data_Block33_Datum03_Byte01_Animated * 971 _Unigram_Letter_Grid_Data_Block33_Datum04_Byte01_Animated + 972 _Unigram_Letter_Grid_Data_Block34_Datum00_Byte01_Animated * 973 _Unigram_Letter_Grid_Data_Block34_Datum01_Byte01_Animated + 974 _Unigram_Letter_Grid_Data_Block34_Datum02_Byte01_Animated * 975 _Unigram_Letter_Grid_Data_Block34_Datum03_Byte01_Animated + 976 _Unigram_Letter_Grid_Data_Block34_Datum04_Byte01_Animated * 977 _Unigram_Letter_Grid_Data_Block35_Datum00_Byte01_Animated + 978 _Unigram_Letter_Grid_Data_Block35_Datum01_Byte01_Animated * 979 _Unigram_Letter_Grid_Data_Block35_Datum02_Byte01_Animated + 980 _Unigram_Letter_Grid_Data_Block35_Datum03_Byte01_Animated * 981 _Unigram_Letter_Grid_Data_Block35_Datum04_Byte01_Animated + 982 _Unigram_Letter_Grid_Data_Block36_Datum00_Byte01_Animated * 983 _Unigram_Letter_Grid_Data_Block36_Datum01_Byte01_Animated + 984 _Unigram_Letter_Grid_Data_Block36_Datum02_Byte01_Animated * 985 _Unigram_Letter_Grid_Data_Block36_Datum03_Byte01_Animated + 986 _Unigram_Letter_Grid_Data_Block36_Datum04_Byte01_Animated * 987 _Unigram_Letter_Grid_Data_Block37_Datum00_Byte01_Animated + 988 _Unigram_Letter_Grid_Data_Block37_Datum01_Byte01_Animated * 989 _Unigram_Letter_Grid_Data_Block37_Datum02_Byte01_Animated + 990 _Unigram_Letter_Grid_Data_Block37_Datum03_Byte01_Animated * 991 _Unigram_Letter_Grid_Data_Block37_Datum04_Byte01_Animated + 992 _Unigram_Letter_Grid_Data_Block38_Datum00_Byte01_Animated * 993 _Unigram_Letter_Grid_Data_Block38_Datum01_Byte01_Animated + 994 _Unigram_Letter_Grid_Data_Block38_Datum02_Byte01_Animated * 995 _Unigram_Letter_Grid_Data_Block38_Datum03_Byte01_Animated + 996 _Unigram_Letter_Grid_Data_Block38_Datum04_Byte01_Animated * 997 _Unigram_Letter_Grid_Data_Block39_Datum00_Byte01_Animated + 998 _Unigram_Letter_Grid_Data_Block39_Datum01_Byte01_Animated * 999 _Unigram_Letter_Grid_Data_Block39_Datum02_Byte01_Animated + 1000 _Unigram_Letter_Grid_Data_Block39_Datum03_Byte01_Animated * 1001 _Unigram_Letter_Grid_Data_Block39_Datum04_Byte01_Animated; 1002#endif // ULG_D1 1003 } 1004} 1005 1006#if defined(ULG_D0) && defined(ULG_D1) 1007void GetBlock(uint which_block, out uint data[ULG_BLOCK_WIDTH]) { 1008 [loop] 1009 for (uint i = 0; i < ULG_BLOCK_WIDTH; i++) { 1010 data[i] = ((uint) floor(_Unigram_Letter_Data_Byte00[which_block * ULG_BLOCK_WIDTH + i]+FUDGE_AMOUNT)); 1011 data[i] |= ((uint) floor(_Unigram_Letter_Data_Byte01[which_block * ULG_BLOCK_WIDTH + i]+FUDGE_AMOUNT)) << 8; 1012 } 1013} 1014#endif 1015 1016#if defined(ULG_VP) 1017// Get the tokens that cover `screen_ptr`. Also return `block_ptr`, the 1018// location where this block of tokens begins. 1019void GetTokens(uint screen_ptr, 1020 out uint block_ptr, 1021 out uint tokens[ULG_BLOCK_WIDTH], 1022 out uint which_block) { 1023 block_ptr = floor(_Unigram_Letter_Visual_Pointers[0]+FUDGE_AMOUNT); 1024 which_block = 0; 1025 [loop] 1026 for (uint i = 1; i < ULG_NUM_BLOCKS; i++) { 1027 uint next_ptr = floor(_Unigram_Letter_Visual_Pointers[i]+FUDGE_AMOUNT); 1028 if (block_ptr < next_ptr) { 1029 // Case 1: visual pointers are increasing 1030 if (screen_ptr >= block_ptr && screen_ptr < next_ptr) { 1031 break; 1032 } 1033 } else { 1034 // Case 2: visual pointer went backwards. This happens when we page long 1035 // data, wrapping around finite number of blocks. 1036 if (screen_ptr >= block_ptr || screen_ptr < next_ptr) { 1037 break; 1038 } 1039 } 1040 block_ptr = next_ptr; 1041 which_block = i; 1042 } 1043 GetBlock(which_block, tokens); 1044} 1045#endif 1046 1047uint2 FoldIndex(uint flat_idx, uint2 img_res) { 1048 return uint2(flat_idx % img_res.x, floor(flat_idx / img_res.x)); 1049} 1050 1051uint UnfoldIndex(uint2 coord, uint2 img_res) { 1052 return coord[0] + coord[1] * img_res.x; 1053} 1054 1055float2 GetUnigramLutUV(uint idx) 1056{ 1057 // Remap from [0, 65535] to [0, 511] x [0,511]. 1058 // Note that the LUT is square. 1059 uint2 idx_2d = FoldIndex(idx, _Unigram_Letter_Grid_LUT_TexelSize.z); 1060 // Remap onto [0, 1] x [0, 1]. 1061 float2 uv = idx_2d * _Unigram_Letter_Grid_LUT_TexelSize.xy; 1062 // Center the UV coordinate in its texel. 1063 uv += _Unigram_Letter_Grid_LUT_TexelSize.xy * 0.5; 1064 // uvs have 0,0 at bottom left. LUT has 0,0 at top left. yerr. 1065 uv.y = 1.0 - uv.y; 1066 return uv; 1067} 1068 1069// Gets the length of the subword encoded by the token. Performs one texture 1070// tap. 1071void TokenLengthOffset(uint token, 1072 out uint length, out uint offset) 1073{ 1074 float2 token_uv = GetUnigramLutUV(token); 1075 // Header has this format: 1076 // rgba = ((tok_ptr >> 0) & 0xFF, 1077 // (tok_ptr >> 8) & 0xFF, 1078 // (tok_ptr >> 16) & 0xFF, 1079 // tok_len) 1080 uint4 rgba = (uint4) (_Unigram_Letter_Grid_LUT.SampleLevel(point_repeat_s, token_uv, 0) * 255.0); 1081 offset = (rgba[0] << 0); 1082 offset |= (rgba[1] << 8); 1083 offset |= (rgba[2] << 16); 1084 length = rgba[3]; 1085} 1086 1087// Gets the nth character of the token stored at `token_offset`. 1088uint GetTokenChar(uint token_offset, uint nth) 1089{ 1090 // We store 4 characters per pixel (RGBA texture). 1091 token_offset += floor(nth / 4.0); 1092 float2 token_uv = GetUnigramLutUV(token_offset); 1093 uint4 chars = (uint4) (_Unigram_Letter_Grid_LUT.SampleLevel(point_repeat_s, token_uv, 0) * 255.0); 1094 return chars[nth % 4]; 1095} 1096 1097#if defined(ULG_VP) && defined(ULG_D0) && defined(ULG_D1) 1098// Get the character which covers the screen position. 1099uint GetChar(uint screen_ptr, out uint which_block, out uint which_datum) { 1100 uint block_ptr; 1101 uint tokens[ULG_BLOCK_WIDTH]; 1102 GetTokens(screen_ptr, block_ptr, tokens, which_block); 1103 // Begin scanning at the start of the block. 1104 uint start = block_ptr; 1105 // The current token is rendered starting at this location. 1106 // In other words, it covers [token_ptr, token_ptr + token_length) 1107 uint token_ptr = block_ptr; 1108 // Wrap the block pointer around the board. 1109 const uint BOARD_SIZE = _Unigram_Letter_Grid_Res_X * _Unigram_Letter_Grid_Res_Y; 1110 token_ptr = token_ptr % BOARD_SIZE; 1111 uint token_offset; 1112 uint token_length = 0; 1113 bool got_match = false; 1114 [loop] 1115 for (uint i = 0; i < ULG_BLOCK_WIDTH; i++) { 1116 which_datum = i; 1117 TokenLengthOffset(tokens[i], token_length, token_offset); 1118 if (token_length == 0) { 1119 continue; 1120 } 1121 if (screen_ptr >= token_ptr && screen_ptr < token_ptr + token_length) { 1122 got_match = true; 1123 break; 1124 } 1125 // Edge case: the token pointer may be partially outside of the visible 1126 // part of the board. 1127 if (screen_ptr + BOARD_SIZE >= token_ptr && 1128 screen_ptr + BOARD_SIZE < token_ptr + token_length) { 1129 got_match = true; 1130 break; 1131 } 1132 1133 token_ptr += token_length; 1134 token_ptr = token_ptr % BOARD_SIZE; 1135 } 1136 // Edge case: no match 1137 if (!got_match) { 1138 return ' '; 1139 } 1140 uint nth_char = (screen_ptr >= token_ptr) ? screen_ptr - token_ptr : (screen_ptr + BOARD_SIZE) - token_ptr; 1141 return GetTokenChar(token_offset, nth_char); 1142} 1143#endif 1144 1145struct UnigramLetterGridOutput { 1146 float4 albedo; 1147 float metallic; 1148 float roughness; 1149 float3 emission; 1150}; 1151 1152UnigramLetterGridOutput UnigramLetterGrid(v2f i, bool facing) { 1153 UnigramLetterGridOutput output; 1154 1155 int2 cell_pos; 1156 int2 font_res = int2(round(_Unigram_Letter_Grid_Tex_Res_X), round(_Unigram_Letter_Grid_Tex_Res_Y)); 1157 int2 grid_res = int2(round(_Unigram_Letter_Grid_Res_X), round(_Unigram_Letter_Grid_Res_Y)); 1158 float2 cell_uv; // uv within each letter cell 1159 1160 float4 scoff = _Unigram_Letter_Grid_UV_Scale_Offset; 1161 float2 uv = i.uv01.xy; 1162 uv.x = facing ? uv.x : 1.0 - uv.x; 1163 uv = ((uv - 0.5) - scoff.zw) * scoff.xy + 0.5; 1164 1165 bool in_box = getBoxLoc(uv, 0, 1, grid_res, _Unigram_Letter_Grid_Padding, cell_pos, cell_uv); 1166 cell_pos.y = (grid_res.y - cell_pos.y) - 1; 1167 1168 uint flat_cell_pos = UnfoldIndex(cell_pos, grid_res); 1169 1170 uint which_block, which_datum; 1171 float c = GetChar(flat_cell_pos, which_block, which_datum); 1172 1173 float3 msd = renderInBox(c, uv, cell_uv, _Unigram_Letter_Grid_Glyphs, font_res).rgb; 1174 float sd = median(msd); 1175 1176 // Calculate screen pixel range 1177 float screen_px_range; 1178 { 1179 float2 tex_size = float2(_Unigram_Letter_Grid_Glyphs_TexelSize.zw); 1180 float2 real_cell_size = floor(tex_size / grid_res); // size of cell in texels 1181 float2 unit_range = _Unigram_Letter_Grid_Screen_Px_Range / real_cell_size; 1182 float2 screen_tex_size = 1 / fwidth(cell_uv); 1183 screen_px_range = max(1.0 * dot(unit_range, screen_tex_size), _Unigram_Letter_Grid_Min_Screen_Px_Range); 1184 } 1185 1186 float screen_px_distance = screen_px_range * (sd - _Unigram_Letter_Grid_Alpha_Threshold); 1187 float op = clamp(screen_px_distance + 0.5, 0, 1); 1188 1189 // Apply blending to output 1190 output.albedo.a = 1; 1191 PreventCbufferElision(i, output.albedo.a); 1192 output.albedo = float4(float3(1,1,1), output.albedo.a * op * in_box); 1193 output.metallic = 0; 1194 output.roughness = 1; 1195 output.emission = 0; 1196 1197 // Visualize which block is being rendered. 1198 { 1199 float eps = 1.2E-1; 1200 bool in_range = (cell_uv.x < eps || cell_uv.y < eps || 1.0 - cell_uv.x < eps || 1.0 - cell_uv.y < eps); 1201 if (in_range) 1202 { 1203 float hue = which_datum * 0.3f; 1204 hue += (which_block % 2) * 0.5f; 1205 hue = frac(hue); 1206 hue *= TAU; 1207 output.albedo.rgb = OKLCHtoLRGB(float3(0.8, 0.2, hue)); 1208 output.albedo.a = 1; 1209 } 1210 } 1211 1212 return output; 1213} 1214 1215#endif // _UNIGRAM_LETTER_GRID 1216#endif // __UNIGRAM_LETTER_GRID_INC 1217