· 5 years ago · Jun 02, 2020, 04:16 AM
1
2 //:Summary: This is an OpenGL adaptation of ::::::::::://
3 //: DAS_BOR.HTM using the youtube ::::::::::://
4 //: video tutorial below to help ::::::::::://
5 //: me get started: ::::::::::://
6 //:ICOG: Indigo Code Open GL ::::::::::://
7 //:IC01: indigo code 01: ::::::::::://
8 //:https://www.youtube.com/watch?v=kB0ZVUrI4Aw ::::::::::://
9
10 //:___AUTHOR[ John_Mark_Isaac_Madison ]
11 //:_____DATE[ 2020_06_02 _____________]
12 //:PASTE_BIN[ xxxxxxxxxxxxxxxxxxxxxxxxx ]
13 //:YOU__TUBE[ xxxxxxxxxxxxxxxxxxxxxxxxx ]
14
15 document.title="[ICOG.JS]";
16
17//://////////////////////////////////////////////////////////://
18
19 //:GW: Global_Whatever:----------------------------------://
20 //:GWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGW:SC[JSGW_VARS]://
21 //: ://
22 //:Containers organized in initialization order. ://
23 //:GLO_CFG: CONFIG ://
24 //: Primitive values only. ://
25 //: NOT_ALLOWED: ://
26 //: 1: Function Calls. ://
27 //: 2: Structs. ://
28 //: ALLOWED: ://
29 //: Constant expressions as int, ://
30 //: float, string. ://
31 //: ://
32 //:GLO_DAT: DATA ://
33 //: Primitive types and structs. ://
34 //: ( struct ~=~ class with no methods ) ://
35 //: ://
36 //:GLO_FUN: FUNCTIONS: ://
37 //: Functions in the procedural sense. They are ://
38 //: loose functions that are NOT part of a class. ://
39 //: MEMBER METHODS DO NOT BELONG HERE. ://
40 //: If function put into GLO_FUN is namespaced, ://
41 //: the namespace should be accomplished using ://
42 //: "plain C" style syntax. ://
43 //: ://
44 //: YES: MYNAMESPACE_FunctionName ://
45 //: WRONG: MYNAMESPACE.FunctionName ://
46 //: ://
47 //:GLO_CLA: CLASSES: ://
48 //: Previously named "GLO_OBJ" but the word "object" ://
49 //: is much to vauge. Any data structure that ://
50 //: combines both DATA and FUNCTIONS. ://
51 //:GWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGW:SC[JSGW_VARS]://
52
53 var NIL = "[NIL]"; //:Stand-in for null pointer.
54
55 var GLO_CFG = null; //:GLOBAL_CONFIGURATION
56 var GLO_DAT = null; //:GLOBAL_DATA
57 var GLO_FUN = null; //:GLOBAL_FUNCTIONS
58 var GLO_CLA = null; //:GLOBAL_CLASSES (AKA:GLO_OBJ)
59
60 //:GWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGW:SC[JSGW_VARS]://
61
62//://////////////////////////////////////////////////////////://
63
64 function main(){ //://///////////////////////////////////://
65 //:IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII:SC[ JSGW_INIT ]://
66 GLO_CFG=( INI_GLO_CFG( ) ); //:PRIMITIVES/CONFIGURATION
67 Object.seal( GLO_CFG ); //:PRIMITIVES/CONFIGURATION
68
69 GLO_DAT=( INI_GLO_DAT( ) ); //:DATA
70 Object.seal( GLO_DAT ); //:DATA
71
72 GLO_FUN=( INI_GLO_FUN( ) ); //:FUNCTIONS
73 Object.seal( GLO_FUN ); //:FUNCTIONS
74
75 GLO_CLA=( INI_GLO_CLA( ) ); //:CLASSES/OBJECTS:AKA:GLO_OBJ
76 Object.seal( GLO_CLA ); //:CLASSES/OBJECTS:AKA:GLO_OBJ
77 //:IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII:SC[ JSGW_INIT ]://
78
79 //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://
80 //:Initialize other stuff that couldn't be handled
81 //:by our coarse initialization order by categories.
82 //:( Categories[ GLO_CFG,GLO_DAT,GLO_FUN,GLO_CLA ] )
83 //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://
84 ;;;INI_GLO_001();function INI_GLO_001(){ //://///////://
85
86 //://////////////////////////////////////////////://
87 //:This is ugly and possibly overly convouted.
88 //:I am not sure. Let's just keep it this way.
89 //:We will know if it is overly convoluted
90 //:once we transcribe it to C-11 code.
91 //://////////////////////////////////////////////://
92 GLO_DAT.loo_tab.nat_win =(
93 GLO_FUN.LOOP_TABLE_TICK_nat_win );;
94
95 GLO_DAT.loo_tab.gam_obj =(
96 GLO_FUN.LOOP_TABLE_TICK_gam_obj );;
97
98 GLO_DAT.loo_tab.ren_log =(
99 GLO_FUN.LOOP_TABLE_TICK_ren_log );;
100 //://////////////////////////////////////////////://
101
102 };;INI_GLO_002();function INI_GLO_002(){ //://///////://
103
104 //:VS:VarSync:GPU<==>CPU:sync_all_vars:(BELOW):--://
105 //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://
106
107 //:PV:Persist_Viewport_rectangles:(BELOW):---://
108 //:PVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPV://
109 { //:SCOPE:////://///////////////////////////://
110
111 //:**************************************://
112 //:Viewport rectangles are #PIXEFOG# ://
113 //:They do not exist structurally. ://
114 //:**************************************://
115
116 //:rec_vpc: Exists_In_The_Pixel_Fog(PIXEFOG)
117 //:rec_vp0: Exists_In_The_Pixel_Fog(PIXEFOG)
118 //:rec_vp1: Exists_In_The_Pixel_Fog(PIXEFOG)
119
120 let rec_vpc = NEW_rec_inc(); //:CLIENT -//
121 let rec_vp0 = NEW_rec_inc(); //:DEST -//
122 let rec_vp1 = NEW_rec_inc(); //:SOURCE -//
123 let rec_vp2 = NEW_rec_inc(); //:ZOOMER -//
124
125 let I_V = ( GLO_DAT.INI_VAL );
126
127 //: vpc: [ canvas / client ] viewport:
128 rec_vpc.x_0 = ( I_V.INI_REC_VPC_x_0 );
129 rec_vpc.x_1 = ( I_V.INI_REC_VPC_x_1 );
130 rec_vpc.y_0 = ( I_V.INI_REC_VPC_y_0 );
131 rec_vpc.y_1 = ( I_V.INI_REC_VPC_y_1 );
132
133 //: vp0: OnScreen Visible Viewport:
134 rec_vp0.x_0 = ( I_V.INI_REC_VP0_x_0 );
135 rec_vp0.x_1 = ( I_V.INI_REC_VP0_x_1 );
136 rec_vp0.y_0 = ( I_V.INI_REC_VP0_y_0 );
137 rec_vp0.y_1 = ( I_V.INI_REC_VP0_y_1 );
138
139 //: vp1: Offscreen_Data_Sampler_Viewport:
140 rec_vp1.x_0 = ( I_V.INI_REC_VP1_x_0 );
141 rec_vp1.x_1 = ( I_V.INI_REC_VP1_x_1 );
142 rec_vp1.y_0 = ( I_V.INI_REC_VP1_y_0 );
143 rec_vp1.y_1 = ( I_V.INI_REC_VP1_y_1 );
144
145 //: vp2: 0% zoomed when covering vp0 100%.
146 rec_vp2.x_0 = ( I_V.INI_REC_VP2_x_0 );
147 rec_vp2.x_1 = ( I_V.INI_REC_VP2_x_1 );
148 rec_vp2.y_0 = ( I_V.INI_REC_VP2_y_0 );
149 rec_vp2.y_1 = ( I_V.INI_REC_VP2_y_1 );
150
151 GLO_CLA.ada_var.Put_GLOBVAR_rec_vpc(
152 rec_vpc );;
153
154 GLO_CLA.ada_var.Put_GLOBVAR_rec_vp0(
155 rec_vp0 );;
156
157 GLO_CLA.ada_var.Put_GLOBVAR_rec_vp1(
158 rec_vp1 );;
159
160 GLO_CLA.ada_var.Put_GLOBVAR_rec_vp2(
161 rec_vp2 );;
162
163 } //:SCOPE:////://///////////////////////////://
164 //:PVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPV://
165
166 //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://
167 //:VS:VarSync:GPU<==>CPU:sync_all_vars:(BELOW):--://
168
169 //:AI:After_Init:(BELOW):------------------------://
170 //:AIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAI://
171 //: Do_Here:
172 //: 1: Init to more DESIREABLE state.
173 //: 2: Init to a VALID state.
174 //:AIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAI://
175
176 //:EDITOR_INITS[ E1 | E2 | E3 | ... ](BELOW):://
177 //:==========================================://
178
179 //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
180
181 GLO_CLA.ada_var.Put_EDIT001_dex_sha( 0 );
182
183 //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
184 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
185
186
187 GLO_CLA.ada_var.Put_EDIT002_cam_t_x( 0 );
188 GLO_CLA.ada_var.Put_EDIT002_cam_t_y( 0 );
189 GLO_CLA.ada_var.Put_EDIT002_dex_hot( 16 );
190 GLO_CLA.ada_var.Put_EDIT002_use_hyp( 0 );
191
192 //:DOES_BOTH: Put_EDIT002_til_exp( til_exp)
193 //:DOES_BOTH: Put_EDIT002_til_san( 2^til_exp)
194 aa2_STATIC_HACK_EDIT002_Put_til_exp_AND_til_san(
195 4 /** til_exp: 4 ===> til_san: 16 **/
196 /** Because: 2^4 is 16. **/
197 );;
198
199 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
200
201 //:==========================================://
202 //:EDITOR_INITS[ E1 | E2 | E3 | ... ](ABOVE):://
203
204 //:AIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAI://
205 //:AI:After_Init:(ABOVE):------------------------://
206
207 };;//:///////////////////////////////////////////////://
208 //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://
209
210 //:ML:MainLoop:(BELOW):------------------------------://
211 //:MLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLML://
212 //:ENTER_FOREVER_LOOP:
213 window.requestAnimationFrame(
214 AA2_InlinedMainLoopTick_NotAFunctionWhenIn_C11);;
215
216 function //:while( 1 )
217 AA2_InlinedMainLoopTick_NotAFunctionWhenIn_C11(){
218
219 GLO_FUN.loop_table_tick(
220 GLO_DAT.loo_tab
221 );;
222
223 //:Next loop iteration via recursive call:
224 window.requestAnimationFrame(
225 AA2_InlinedMainLoopTick_NotAFunctionWhenIn_C11
226 );;
227
228 };; //://////////////////////////////////////////////://
229 //:MLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLML://
230
231 };; //://////////////////////////////////////////////////://
232
233//:GI:Global_Initialization:(BELOW):-------------------------://
234//:GIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGI:SC[JSGW_BODY]://
235//: ://
236//: ORDER: ://
237//: 1. INI_GLO_CFG ( Const Expressions Only ) ://
238//: 1. INI_GLO_DAT ( DATA / PRIMITIVES / STRUCTS ) ://
239//: 2. INI_GLO_FUN ( FUNCTIONS / PROCEDURES ) ://
240//: 3. INI_GLO_CLA ( CLASSES / OBJECTS ) ://
241//: ://
242//:GIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGI:SC[JSGW_BODY]://
243
244 //://////////////////////////////////////////////////////://
245 ;;;function INI_GLO_CFG( ){ //://///////////////////////://
246 "use strict" //://///////////////////////://
247 //://////////////////////////////////////////////////////://
248
249 var GLO_CFG ={
250 /**/NUM_HOT:( 16 ) //:NumberOfHotSwapRectangles
251 //:AKA[ HOT_LEN ]
252 , SAN_ISO:( 512 * 1 )
253 , SAN_MAM:( 512 * 4 )
254
255 //:VP:Viewport:(BELOW):--------------------------://
256 //:VPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVP://
257
258 //:DESIGN_NOTE: VPC always fills the entire
259 //: canvas. Or if a win32 application,
260 //: fills the entire CLIENT AREA.
261 //: The [ OpenGL / WegGl ] viewport
262 //: always fills 100% of VPC.
263 //:
264 //: THUS! VPC can mean:
265 //: [Canvas | gl.Viewport | ClientArea]
266 //: This ambiguity is intentional,
267 //: because they should always be
268 //: identical.
269 //:
270 //:VP0:ViewportZero AKA [Screen/Dest] viewport.
271 //:VPC:ViewportCanvas AKA [gl.viewport] viewport.
272 , INI_VPC_WID : 512 //:Initial__ViewPortCanvas__WID
273 , INI_VPC_HIG : 512 //:Initial__ViewPortCanvas__HIG
274
275 //:VPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVP://
276 //:VP:Viewport:(ABOVE):--------------------------://
277
278 //:TU0: Texure_as_Uniform( block 0 ):
279 //:Very intentional that we are not using
280 //:"rec_inc" types here. Want these values to
281 //:be able to appear in shader code the exact
282 //:same way.
283 , TAU_001_x0 : ( 0 ) //:TEXTURE_DATA_MAPPING
284 , TAU_001_x1 : ( 8 - 1 ) //:TEXTURE_DATA_MAPPING
285 , TAU_001_y0 : ( 0 ) //:TEXTURE_DATA_MAPPING
286 , TAU_001_y1 : ( 8 - 1 ) //:TEXTURE_DATA_MAPPING
287
288 //:TAU_001: uniform enums:
289 //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
290 //:Values assigned are local pixel [locations/indexes].
291 //:They must be:
292 //: 1: NON_NEGATIVE
293 //: 2: WITHIN_BOUNDS_OF: TAU_000_[x0,x1,y0,y1]
294 //: 3: NON_OVERLAPPING
295 //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
296 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
297
298
299 //[ Visual Debugging Guide: Index <==> XY ___________]//
300 //++-----------------------------------------------+-+//
301 //+| . 00 . 01 . 02 . 03 . 04 . 05 . 06 . 07 |-+//
302 //+| +----+----+----+----+----+----+----+----+ |-+//
303 //+|00 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 00|-+//
304 //+|-- +----+----+----+----*----+----+----+----+ --|-+//
305 //+|01 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 01|-+//
306 //+|-- +----+----+----+----*----+----+----+----+ --|-+//
307 //+|02 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 02|-+//
308 //+|-- +----+----+----+----*----+----+----+----+ --|-+//
309 //+|03 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 03|-+//
310 //+|-- +****+****+****+>>>>*<<<<+****+****+****+ --|-+//
311 //+|04 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 04|-+//
312 //+|-- +----+----+----+----*----+----+----+----+ --|-+//
313 //+|05 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 05|-+//
314 //+|-- +----+----+----+----*----+----+----+----+ --|-+//
315 //+|06 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 06|-+//
316 //+|-- +----+----+----+----*----+----+----+----+ --|-+//
317 //+|07 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 07|-+//
318 //+|-- +----+----+----+----+----+----+----+----+ --|-+//
319 //+| . 00 . 01 . 02 . 03 . 04 . 05 . 06 . 07 |-+//
320 //++-----------------------------------------------+-+//
321
322 //:KEEP_ALL_GROUPED_TOGETHER_SO_YOU_CAN_SPOT_ERRORS:
323
324 , TAU_001_GLOBVAR_rec_vpc_x_0 : ( 0 ) //:rec_vpc.x_0
325 , TAU_001_GLOBVAR_rec_vpc_x_1 : ( 1 ) //:rec_vpc.x_1
326 , TAU_001_GLOBVAR_rec_vpc_y_0 : ( 2 ) //:rec_vpc.y_0
327 , TAU_001_GLOBVAR_rec_vpc_y_1 : ( 3 ) //:rec_vpc.y_1
328
329 , TAU_001_GLOBVAR_rec_vp0_x_0 : ( 4 ) //:rec_vp0.x_0
330 , TAU_001_GLOBVAR_rec_vp0_x_1 : ( 5 ) //:rec_vp0.x_1
331 , TAU_001_GLOBVAR_rec_vp0_y_0 : ( 6 ) //:rec_vp0.y_0
332 , TAU_001_GLOBVAR_rec_vp0_y_1 : ( 7 ) //:rec_vp0.y_1
333
334 , TAU_001_GLOBVAR_rec_vp1_x_0 : ( 8 ) //:rec_vp1.x_0
335 , TAU_001_GLOBVAR_rec_vp1_x_1 : ( 9 ) //:rec_vp1.x_1
336 , TAU_001_GLOBVAR_rec_vp1_y_0 : ( 10 ) //:rec_vp1.y_0
337 , TAU_001_GLOBVAR_rec_vp1_y_1 : ( 11 ) //:rec_vp1.y_1
338
339 , TAU_001_GLOBVAR_rec_vp2_x_0 : ( 12 ) //:rec_vp1.x_0
340 , TAU_001_GLOBVAR_rec_vp2_x_1 : ( 13 ) //:rec_vp1.x_1
341 , TAU_001_GLOBVAR_rec_vp2_y_0 : ( 14 ) //:rec_vp1.y_0
342 , TAU_001_GLOBVAR_rec_vp2_y_1 : ( 15 ) //:rec_vp1.y_1
343
344 , TAU_001_EDIT001_dex_sha : ( 16 ) //:TestShaderDex
345
346 , TAU_001_EDIT002_til_exp : ( 17 ) //:Tile_Exponent
347 , TAU_001_EDIT002_til_san : ( 18 ) //:Tile_Span
348 , TAU_001_EDIT002_cam_t_x : ( 19 ) //:Tile_X
349 , TAU_001_EDIT002_cam_t_y : ( 20 ) //:Tile_Y
350 , TAU_001_EDIT002_dex_hot : ( 21 ) //:MemBlockIndex
351 , TAU_001_EDIT002_use_hyp : ( 22 ) //:MemBlockIndex
352
353 , TAU_001_ENUMCAP : ( 64 ) //:LEN:64,M_I:63
354
355 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
356 //:*EDIT001*[ edi_001 (editor #1) Variables ]
357 //: edi_001: Test_Bed_Shader_Editor
358 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
359 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
360 //:*EDIT002*[ edi_001 (editor #2) Variables ] ://
361 //: edi_002:Raw Data Editor With Tile Abstraction. ://
362 //: This is the groundwork for the ://
363 //: auset (autotileset) editor... But ://
364 //: I don't want to add too much extra ://
365 //: functionality. So let's just use this ://
366 //: as a way to visually edit ANY data on ://
367 //: the master memory block or iso memory ://
368 //: block. With maybe... Some type of ://
369 //: saftey lock on the GAM_TEX sub section. ://
370 //: ://
371 //: Once finished, we can use this editor's ://
372 //: code as REFERENCE ( NOT REFACTOR IT) ://
373 //: to build edi_003 (Auset Editor) ://
374 //: ://
375 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
376 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
377 //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
378
379 //|//////////////////////////////////////////////////|//
380 //| |//
381 //| MEC_DEX:MEmoryCell_inDEX: |//
382 //| |//
383 //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
384 //| |GAM|T_L|TOP|T_R| 512 ::::::::::::::::::::::::|//
385 //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
386 //| |HOR|LEF|CEN|RIG| 512 ::::::::::::::::::::::::|//
387 //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
388 //| |VER|B_L|BOT|B_R| 512 ::::::::::::::::::::::::|//
389 //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
390 //| |TS0|TS1|TS2|TS3| 512 ::::::::::::::::::::::::|//
391 //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
392 //|________________________. ::::::|//
393 , MEC_DEX_GAM : ( 1 - 1) //| GAM : GAM_TEX ::::::|//
394 , MEC_DEX_T_L : ( 2 - 1) //| T_L : TOP_LEF ::::::|//
395 , MEC_DEX_TOP : ( 3 - 1) //| TOP : TOP ::::::|//
396 , MEC_DEX_T_R : ( 4 - 1) //| T_R : TOP_RIG ::::::|//
397 , MEC_DEX_HOR : ( 5 - 1) //| HOR : HOR ::::::|//
398 , MEC_DEX_LEF : ( 6 - 1) //| LEF : LEF ::::::|//
399 , MEC_DEX_CEN : ( 7 - 1) //| CEN : CEN ::::::|//
400 , MEC_DEX_RIG : ( 8 - 1) //| RIG : RIG ::::::|//
401 , MEC_DEX_VER : ( 9 - 1) //| VER : VER ::::::|//
402 , MEC_DEX_B_L : (10 - 1) //| B_L : BOT_LEF ::::::|//
403 , MEC_DEX_BOT : (11 - 1) //| BOT : BOT ::::::|//
404 , MEC_DEX_B_R : (12 - 1) //| B_R : BOT_RIG ::::::|//
405 , MEC_DEX_TS0 : (13 - 1) //| TS0 : TIL_SET:000 ::::::|//
406 , MEC_DEX_TS1 : (14 - 1) //| TS1 : TIL_SET:001 ::::::|//
407 , MEC_DEX_TS2 : (15 - 1) //| TS2 : TIL_SET:002 ::::::|//
408 , MEC_DEX_TS3 : (16 - 1) //| TS3 : TIL_SET:003 ::::::|//
409
410 //:Memory Cells that hot swapping points to:
411 , MEC_DEX_MIN : ( 0 ) //:0_INDEXED
412 , MEC_DEX_MAX : ( 15 ) //:0_INDEXED
413
414 //:Hot Swapping index:
415 , DEX_HOT_MIN : ( 1 ) //:1_INDEXED
416 , DEX_HOT_MAX : ( 16 ) //:1_INDEXED
417
418
419 //| |//
420 //|__________________________________________________|//
421 };;//:<<<[GLO_CFG]<<<<<<<<<<<<<<<<<<<<<<<<<<[GLO_CFG]://
422
423 //:Codify/MakeExplicit the relationship between
424 //:"MEC_DEX" and "DEX_HOT" values.
425 //: MEC_DEX: MemoryCellIndex
426 //: DEX_HOT: HotSwappingIndex
427 //:ECECECECECECECECECECECECECECECECECECECECECECEC://
428 if( ( GLO_CFG.MEC_DEX_MIN * 1 )
429 != ( GLO_CFG.DEX_HOT_MIN - 1 )
430 ){
431 throw("[VALUES_SHOULD_DIFFER_ONLY_BY_ONE:MIN]");
432 };;
433 if( ( GLO_CFG.MEC_DEX_MAX * 1 )
434 != ( GLO_CFG.DEX_HOT_MAX - 1 )
435 ){
436 throw("[VALUES_SHOULD_DIFFER_ONLY_BY_ONE:MAX]");
437 };;
438 //:ececececececececececececececececececececececec://
439 //:
440 //: Further error checking. I realize that many ://
441 //: of these values could just be computed at ://
442 //: runtime, but HARDCODING and then error ://
443 //: checking at run time ironically gives us ://
444 //: MORE flexibility when we move to C11. ://
445 //: It also makes the code less abstract and ://
446 //: easier to read in my opinion. ://
447 //: -John_Mark, DATE[ 2020_05_30 ] ://
448 //: ://
449 //:ececececececececececececececececececececececec://
450 var san_hot = ( GLO_CFG.SAN_MAM
451 /GLO_CFG.SAN_ISO );;
452
453 if( ( san_hot * san_hot ) //:MultiplyBothSides
454 != ( GLO_CFG.NUM_HOT ) //:ToGetTotalSquares
455 ){
456 throw("[BAD_CFG:NUM_HOT]");
457 };;
458
459 if( GLO_CFG.NUM_HOT
460 != GLO_CFG.DEX_HOT_MAX
461 ){
462 throw("[BAD_CFG:(MEC_DEX_*)&(DEX_HOT_*)]");
463 };;
464 //:ECECECECECECECECECECECECECECECECECECECECECECEC://
465
466 Object.freeze( GLO_CFG );
467 return( GLO_CFG );
468
469 //://////////////////////////////////////////////////////://
470 };;function INI_GLO_DAT( ){ //://///////////////////////://
471 "use strict" //://///////////////////////://
472 //://////////////////////////////////////////////////////://
473
474 //:Enum:GlobalEvent:Types-&-SubTypes:
475 var eve_bit ={ //:Event_Bits(ForEventTypes)
476 eve_typ_BAD : ( 1 << 0 )>>>0 //:INVALID
477 //:eve_typ:Main_Event_Types:
478 , eve_typ_KEY : ( 1 << 1 )>>>0 //:KEY:KEYBOARD
479 , eve_typ_MOU : ( 1 << 2 )>>>0 //:MOU:MOUSE
480
481 //:sub_typ:Event_Sub_Types
482 , sub_typ_KUD : ( 1 << 3 )>>>0 //:KUD:KeyUpDown
483 , sub_typ_CLK : ( 1 << 4 )>>>0 //:CLK:Click
484
485 , sub_typ_K_D : ( 1 << 5 )>>>0 //:KEY:DOWN
486 , sub_typ_K_U : ( 1 << 6 )>>>0 //:KEY:UP
487
488 , sub_typ_M_D : ( 1 << 7 )>>>0 //:MOU:DOWN
489 , sub_typ_M_U : ( 1 << 8 )>>>0 //:MOU:UP
490 , sub_typ_M_M : ( 1 << 9 )>>>0 //:MOU:MOVE
491
492 };;Object.freeze( eve_bit );
493
494 //:USED FOR:
495 //: 1: Swapping mam_mem section into iso_mem
496 //: so we can look at it.
497 //: 2: Suffling around levels in focus as
498 //: you walk from room to room.
499 //:Hot swapping rectangles indexed [ 1 - 16 ]
500 //:Zero is invalid index so dex_hot uniform's
501 //:zero initialization will be interpreted as invalid.
502 var arr_hot=[ null /**---- ZERO_SLOT_ALWAYS_NULL ----**/
503
504 //:hot_rec[ 1 - 4 ] dex_hot==[ 1 - 4 ] //:------://
505 , NEW_rec_inc_MAD_rec_hot( 0 , 0 ) //: 01 ://
506 , NEW_rec_inc_MAD_rec_hot( 1 , 0 ) //: 02 ://
507 , NEW_rec_inc_MAD_rec_hot( 2 , 0 ) //: 03 ://
508 , NEW_rec_inc_MAD_rec_hot( 3 , 0 ) //: 04 ://
509
510 //:hot_rec[ 5 - 8 ] dex_hot==[ 5 - 8 ] //:------://
511 , NEW_rec_inc_MAD_rec_hot( 0 , 1 ) //: 05 ://
512 , NEW_rec_inc_MAD_rec_hot( 1 , 1 ) //: 06 ://
513 , NEW_rec_inc_MAD_rec_hot( 2 , 1 ) //: 07 ://
514 , NEW_rec_inc_MAD_rec_hot( 3 , 1 ) //: 08 ://
515
516 //:hot_rec[ 9 -12 ] dex_hot==[ 9 -12 ] //:------://
517 , NEW_rec_inc_MAD_rec_hot( 0 , 2 ) //: 09 ://
518 , NEW_rec_inc_MAD_rec_hot( 1 , 2 ) //: 10 ://
519 , NEW_rec_inc_MAD_rec_hot( 2 , 2 ) //: 11 ://
520 , NEW_rec_inc_MAD_rec_hot( 3 , 2 ) //: 12 ://
521
522 //:hot_rec[13 -16 ] dex_hot==[13 -16 ] //:------://
523 , NEW_rec_inc_MAD_rec_hot( 0 , 3 ) //: 13 ://
524 , NEW_rec_inc_MAD_rec_hot( 1 , 3 ) //: 14 ://
525 , NEW_rec_inc_MAD_rec_hot( 2 , 3 ) //: 15 ://
526 , NEW_rec_inc_MAD_rec_hot( 3 , 3 ) //: 16 ://
527 //:---------------------------------------:----:-://
528
529 ];; //://////////////////////////////////////////////://
530
531 let BOU =( GLO_CFG.SAN_ISO );
532 if( BOU != 512 ){
533 throw("[InspectCodeForBreaksBeforeRemovingThis]");
534 };;
535 let VPC_WID = GLO_CFG.INI_VPC_WID;
536 let VPC_HIG = GLO_CFG.INI_VPC_HIG;
537
538 var GLO_DAT = {
539 eve_bit : eve_bit
540 ,
541 arr_hot : arr_hot
542 ,
543 event_listeners_registered : 0
544 ,
545 //:Global Event Object For Keyboard And Mouse
546 //:user input. Widdled down version of "nat_eve"
547 glo_eve : NEW_glo_eve()
548 ,
549 //:LoopTable. (Main loop struct)
550 loo_tab : NEW_loo_tab()
551 ,
552 INI_VAL:{ //:[INITIAL/STARTING] values. /////////://
553 //://////////////////////////////////////////://
554
555 //:Initial Spans for texture memory:
556 //:[ ada_gra.iso_mem.[ pix_wid | pix_hig ] ]
557 //:[ ada_gra.mam_mem.[ pix_wid | pix_hig ] ]
558 //- SAN_ISO : 512 //:INI_SAN_iso_mem -//
559 SAN_ISO : GLO_CFG.SAN_ISO
560
561 //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
562 //| |<---------- san_wid ---------->| |//
563 //| |<---------- san_mam ---------->| |//
564 //| +-------+-------+-------+-------+ |//
565 //| | | | | | |//
566 //| |san_iso|san_iso|san_iso|san_iso| |//
567 //| | | | | | |//
568 //| +-------+-------+-------+-------+ |//
569 //| | | | | | |//
570 //| |san_iso|san_iso|san_iso|san_iso| |//
571 //| | | | | | |//
572 //| +-------+-------+-------+-------+ |//
573 //| | | | | | |//
574 //| |san_iso|san_iso|san_iso|san_iso| |//
575 //| | | | | | |//
576 //| +-------+-------+-------+-------+ |//
577 //| | | | | | |//
578 //| |san_iso|san_iso|san_iso|san_iso| |//
579 //| | | | | | |//
580 //| +-------+-------+-------+-------+ |//
581 //| |< 512 >|< 512 >|< 512 >|< 512 >| |//
582 //| |<----------- 2048 ------------>| |//
583 //| |<--- SAN_MAM:2048 ------------>| |//
584 //| |//
585 //| SAN_MAM should be able to fit |//
586 //| sixteen(16) SAN_ISO via. |//
587 //| (Because: 4x4==16 ) |//
588 //| ( 2048 === 512 * 4 ) |//
589 //|______________________________________|//
590 //- , SAN_MAM : 2048 //:INI_SAN_mam_mem -//
591 , SAN_MAM : GLO_CFG.SAN_MAM
592
593 //:Decided to write it this way instead
594 //:of put a "rec_vpc={ .x_0 ... }"
595 //:Because that would introduce risk
596 //:of accidentially passing the rec_vpc
597 //:in here around in your code.
598 , INI_REC_VPC_x_0 : 0 -0 + 0
599 , INI_REC_VPC_x_1 : VPC_WID -1 - 0
600 , INI_REC_VPC_y_0 : 0 -0 + 0
601 , INI_REC_VPC_y_1 : VPC_HIG -1 - 0
602
603 , INI_REC_VP0_x_0 : 0 -0 + 32
604 , INI_REC_VP0_x_1 : VPC_WID -1 - 32
605 , INI_REC_VP0_y_0 : 0 -0 + 32
606 , INI_REC_VP0_y_1 : VPC_HIG -1 - 32
607
608 //: INIT TO INVALID VALUES BECAUSE IT IS
609 //: RESPONSIBILITY OF THE EDITORS TO
610 //: CONTROL THIS VIEWPORT'S POSITION OVER
611 //: THE GPU TEXTURE DATA.
612 , INI_REC_VP1_x_0 : ( 0 - 1111 ) //:SRC:x_0
613 , INI_REC_VP1_x_1 : ( 0 - 2222 ) //:SRC:x_1
614 , INI_REC_VP1_y_0 : ( 0 - 3333 ) //:SRC:y_0
615 , INI_REC_VP1_y_1 : ( 0 - 4444 ) //:SRC:y_1
616
617 , INI_REC_VP2_x_0 : ( 0 - 55 ) //:ZOOMER:x_0
618 , INI_REC_VP2_x_1 : ( 0 - 66 ) //:ZOOMER:x_1
619 , INI_REC_VP2_y_0 : ( 0 - 77 ) //:ZOOMER:y_0
620 , INI_REC_VP2_y_1 : ( 0 - 88 ) //:ZOOMER:y_1
621
622 //://////////////////////////////////////////://
623 } //:////////////////////////////////////////////://
624 };;
625
626 //://////////////////////////////////////////////////://
627 //: WRONG: ://
628 //: Make the "zoomer" (vp2) viewport snapped ://
629 //: exactly to the "destination" (vp0) ://
630 //: viewport so that testbed shaders (tbs) ://
631 //: in edi_001 start at 1:1 zoom. ://
632 //: ://
633 //: CORRECT: ://
634 //: Snap rec_vp2 (zoomer) onto rec_vpc (client).
635 //: This is because rec_vp2 is a sub-sampler ://
636 //: of the gl_FragCoord range that goes ://
637 //: over the client area. ://
638 GLO_DAT.INI_VAL.INI_REC_VP2_x_0 =(
639 GLO_DAT.INI_VAL.INI_REC_VPC_x_0 );;
640
641 GLO_DAT.INI_VAL.INI_REC_VP2_x_1 =(
642 GLO_DAT.INI_VAL.INI_REC_VPC_x_1 );;
643
644 GLO_DAT.INI_VAL.INI_REC_VP2_y_0 =(
645 GLO_DAT.INI_VAL.INI_REC_VPC_y_0 );;
646
647 GLO_DAT.INI_VAL.INI_REC_VP2_y_1 =(
648 GLO_DAT.INI_VAL.INI_REC_VPC_y_1 );;
649
650
651
652
653 //://////////////////////////////////////////////////://
654
655 Object.seal( GLO_DAT );
656 return( GLO_DAT );
657
658 //://////////////////////////////////////////////////////://
659 };;function INI_GLO_FUN( ){ //://///////////////////////://
660 "use strict" //://///////////////////////://
661 //://////////////////////////////////////////////////////://
662
663 var GLO_FUN ={ //:GLO_FUN:GLObal_FUNctions (container )
664 loop_table_tick : AA2_LoopTableTick
665 , LOOP_TABLE_TICK_nat_win : AA2_LoopTableTick_nat_win
666 , LOOP_TABLE_TICK_gam_obj : AA2_LoopTableTick_gam_obj
667 , LOOP_TABLE_TICK_ren_log : AA2_LoopTableTick_ren_log
668 };;
669
670 Object.seal( GLO_FUN );
671 return( GLO_FUN );
672
673 //://////////////////////////////////////////////////////://
674 };;function INI_GLO_CLA( ){ //://///////////////////////://
675 "use strict" //://///////////////////////://
676 //://////////////////////////////////////////////////////://
677
678 //# Removed: VAR keyword from here so we can #//
679 //# reference "GLO_CLA" members during #//
680 //# initialization. #//
681 /**global:GLO_CLA**/
682 GLO_CLA={
683 ada_gra : NEW_ada_gra() //: ADApter_GRAphics
684
685 //:tau_001 or any tau_### instance should be
686 //:created AFTER [ ada_gra ] because it borrows
687 //:u32_pix container pointers from ada_gra.
688 , tau_001 : NEW_tau_con() //: TextureAsUniformCTRL
689
690 //:ada_var should come AFTER [ tau_001 | tau_### ]
691 //:and AFTER [ ada_gra ] because this adapter
692 //:will reference EITHER of these objects when
693 //:implementing its "Get_VarNam" and "Put_VarNam"
694 //:functions. ( Generally: "Get_*" and "Put_*"
695 , ada_var : NEW_ada_var() //: ADApater_VARiables
696
697 //:SESESESESESESESESESESESESESESESESESESESESE|//
698 //|Sub editors dont know about edi_all,but |//
699 //|edi_all knows about sub editors. Thus,sub |//
700 //|editors should be created BEFORE edi_all |//
701 //|to maintain correct initialization order. |//
702 //:SESESESESESESESESESESESESESESESESESESESESE://
703
704 , edi_001 : NEW_edi_001()
705 , edi_002 : NEW_edi_002()
706
707 //:------------------------------------------://
708 //: Rather than having null slots for editors
709 //: that do not exist, we will put placeholder
710 //: editors of "AA2_EditorBaseClass":
711 //:------------------------------------------://
712 , edi_003 : NEW_edi_bas() //:EditorBaseClass
713 , edi_004 : NEW_edi_bas() //:EditorBaseClass
714 , edi_005 : NEW_edi_bas() //:EditorBaseClass
715 , edi_006 : NEW_edi_bas() //:EditorBaseClass
716 , edi_007 : NEW_edi_bas() //:EditorBaseClass
717 , edi_008 : NEW_edi_bas() //:EditorBaseClass
718 , edi_009 : NEW_edi_bas() //:EditorBaseClass
719 //:------------------------------------------://
720
721 //:SESESESESESESESESESESESESESESESESESESESESE://
722 //:Now Init [Main/Master] Editor (Editor_All)://
723 //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
724
725 , edi_all : null //:NEW_edi_all()
726
727 //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
728 };;Object.seal( GLO_CLA );
729
730 //:Configure tau_001:
731 //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
732
733 GLO_CLA.tau_001.Put_VarNam( "tau_001" );
734 GLO_CLA.tau_001.BorrowPointerAsWeakReference_u32_pix(
735 GLO_CLA.ada_gra.mam_mem //:MasterMemory
736 //: TYPE_OF( mam_mem ) === "uni_pix"
737 );;
738 GLO_CLA.tau_001.Put_RecBou(
739 /**/ GLO_CFG.TAU_001_x0 //:TOP_LEF
740 , GLO_CFG.TAU_001_y0 //:TOP_LEF
741
742 , GLO_CFG.TAU_001_x1 //:BOT_RIG
743 , GLO_CFG.TAU_001_y1 //:BOT_RIG
744
745 );;
746 //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
747
748 function ALREADY_SET( obj_any ){
749
750 if( ! obj_any ){
751 throw("[INPUT_OBJECT_WAS_NULL]");
752 };;
753
754 return( obj_any );
755
756 };;
757
758 //:Because some classes may access other classes
759 //:via the GLO_CLA container during initialization.
760 //:Any spaghetti code access like that requires
761 //:initilization of members outside of the
762 //:GLO_CLA declaration. Lets not go overkill and
763 //:only do it for specific parts to fix dependency
764 //:loop errors.
765 //://////////////////////////////////////////////////://
766 GLO_CLA.ada_gra = ALREADY_SET( GLO_CLA.ada_gra );
767 GLO_CLA.tau_001 = ALREADY_SET( GLO_CLA.tau_001 );
768 GLO_CLA.ada_var = ALREADY_SET( GLO_CLA.ada_var );
769
770 GLO_CLA.edi_001 = ALREADY_SET( GLO_CLA.edi_001 );
771 GLO_CLA.edi_002 = ALREADY_SET( GLO_CLA.edi_002 );
772 GLO_CLA.edi_003 = ALREADY_SET( GLO_CLA.edi_003 );
773 GLO_CLA.edi_004 = ALREADY_SET( GLO_CLA.edi_004 );
774 GLO_CLA.edi_005 = ALREADY_SET( GLO_CLA.edi_005 );
775 GLO_CLA.edi_006 = ALREADY_SET( GLO_CLA.edi_006 );
776 GLO_CLA.edi_007 = ALREADY_SET( GLO_CLA.edi_007 );
777 GLO_CLA.edi_008 = ALREADY_SET( GLO_CLA.edi_008 );
778 GLO_CLA.edi_009 = ALREADY_SET( GLO_CLA.edi_009 );
779
780 //:Needs to reference [ edi_001 - edi_009 - edi_### ]
781 //:For initialization, so must be created here:
782 GLO_CLA.edi_all = NEW_edi_all();
783
784 //://////////////////////////////////////////////////://
785
786 return( GLO_CLA );
787
788 };; //://////////////////////////////////////////////////://
789 //://////////////////////////////////////////////////////://
790
791//:GIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGI:SC[JSGW_BODY]://
792//:GI:Global_Initialization:(ABOVE):-------------------------://
793
794
795//:AG:Adapter:Graphics:(BELOW):------------------------------://
796//:AGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAG://
797function NEW_ada_gra(){ //://////////////////////////////////://
798"use strict"
799
800 //:C:Constant_Like_Setup:
801 //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
802 //:This code was moved from the INI_GLO_DAT(...) function.
803 //:Because I thought the information here was too
804 //:specific to belong in the global data section.
805 //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
806 //:ada_gra:Adapter_Graphics:
807 var ada_gra ={
808
809 con_gra : null //:AKA[ gl | con_gra | ogl_ctx | ctx_ogl ]
810 , iso_mem : null
811 , mam_mem : null
812
813 //:BootStrapping_Uniforms:
814 //:These_lay_the_foundational_structure_of_engine:
815 //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS://
816 , has_mem : null //: [ uni_u32 / NEW_uni_u32() ] 01 ://
817 , ren_mod : null //: [ uni_u32 / NEW_uni_u32() ] 02 ://
818 , edi_mod : null //: [ uni_u32 / NEW_uni_u32() ] 03 ://
819 , gam_tim : null //: [ uni_u32 / NEW_uni_u32() ] 04 ://
820 , dex_hot : null //: [ uni_u32 / NEW_uni_u32() ] 05 ://
821 //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS://
822
823 , gpuvcon : null //: GPU_VARIABLE_CONTROLLER
824
825 , all_pro : null //: OurMainWebGLProgramObject
826 , ver_pro : null //: <--SEE[ PWU_AFC ]
827 , fra_pro : null //: <--SEE[ PWU_AFC ]
828
829 , can_htm : null //:<-- html5 canvas object.
830
831 //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
832 //| #PIXEFOG# ------------------------------------------ |//
833 //| |//
834 //| rec_inc: RECtangle(s)INClusive: |//
835 //| Thought about putting these in GLO_DAT |//
836 //| but the likelyhood that a function which |//
837 //| takes "ada_gra" also needs one of these |//
838 //| rectangles is very high. |//
839 //- rec_vpc : null //:<--AlwaysSizeOfCanvas. -//
840 //- rec_vp0 : null //:<--[ DEST / SCREEN ] viewport. -//
841 //- rec_vp1 : null //:<--[ SRC / OFFSCREEN ] viewport. -//
842 //|______________________________________________________|//
843
844 };;Object.seal( ada_gra );
845
846 //:VR:Viewport_Rectangles:(BELOW):-------------------://
847 //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://
848 { //:BLOCK_SCOPE
849
850 //[¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯]//
851 //[ #PIXEFOG#: Relevant Parts Moved To: ]//
852 //[ ]//
853 //[ INI_GLO_002(...) ]//
854 //[ ]//
855 //- ada_gra.rec_vpc = NEW_rec_inc(); //:CLIENT -//
856 //- ada_gra.rec_vp0 = NEW_rec_inc(); //:DEST -//
857 //- ada_gra.rec_vp1 = NEW_rec_inc(); //:SOURCE -//
858 //- -//
859 //- let I_V = ( GLO_DAT.INI_VAL ); /** var I_V **/ -//
860 //- -//
861 //- ada_gra.rec_vpc.x_0 = ( I_V.INI_REC_VPC_x_0 ); -//
862 //- ada_gra.rec_vpc.x_1 = ( I_V.INI_REC_VPC_x_1 ); -//
863 //- ada_gra.rec_vpc.y_0 = ( I_V.INI_REC_VPC_y_0 ); -//
864 //- ada_gra.rec_vpc.y_1 = ( I_V.INI_REC_VPC_y_1 ); -//
865 //- -//
866 //- ada_gra.rec_vp0.x_0 = ( I_V.INI_REC_VP0_x_0 ); -//
867 //- ada_gra.rec_vp0.x_1 = ( I_V.INI_REC_VP0_x_1 ); -//
868 //- ada_gra.rec_vp0.y_0 = ( I_V.INI_REC_VP0_y_0 ); -//
869 //- ada_gra.rec_vp0.y_1 = ( I_V.INI_REC_VP0_y_1 ); -//
870 //- -//
871 //- ada_gra.rec_vp1.x_0 = ( I_V.INI_REC_VP1_x_0 ); -//
872 //- ada_gra.rec_vp1.x_1 = ( I_V.INI_REC_VP1_x_1 ); -//
873 //- ada_gra.rec_vp1.y_0 = ( I_V.INI_REC_VP1_y_0 ); -//
874 //- ada_gra.rec_vp1.y_1 = ( I_V.INI_REC_VP1_y_1 ); -//
875 //[__________________________________________________]//
876
877 } //:BLOCK_SCOPE
878 //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://
879
880 //:Assert that value is positive:
881 function A( val ){
882
883 //:If value is valid, return it:
884 if( val > 0 ){
885 return( val );
886 };;
887
888 //:If value is invalid, crash the program:
889 if(!val > 0 ){
890 console.log("[suspect:val]:",val);
891 var err_npv = "[NOT_POSITIVE_VALUE]";
892 console.log( err_npv );
893 throw( err_npv );
894 };;
895 throw("[EDCL]");
896 return( 0 - 666 );
897 };;
898
899 //:UP:uni_pix:---------------------------------------://
900 //:Create_Texture_Containers( uni_pix ):-------------://
901 //:UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP://
902 var ISO_MEM =( NEW_uni_pix() );
903 var MAM_MEM =( NEW_uni_pix() );
904
905 ISO_MEM.tex_han = (0 - 333 ) ; //: ISO_MEM.tex_han
906 ISO_MEM.tex_lot = 1 ; //: ISO_MEM.tex_lot
907 ISO_MEM.pix_arr = null ;
908 ISO_MEM.pix_wid =A(GLO_DAT.INI_VAL.SAN_ISO) ; //: 512
909 ISO_MEM.pix_hig =A(GLO_DAT.INI_VAL.SAN_ISO) ; //: 512
910 ISO_MEM.pix_com = 4 ; //:ComponentsPerPixel
911 ISO_MEM.pix_nam = "iso_mem" ;
912 ISO_MEM.sam_val = ( ISO_MEM.tex_lot );
913 ISO_MEM.sam_loc = ( 0 - ( 901 ) );
914 ISO_MEM.has_loc = ( 0 - ( 1001 ) );
915
916 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
917
918 MAM_MEM.tex_han = (0 - 666 ) ; //: MAM_MEM.tex_han
919 MAM_MEM.tex_lot = 0 ; //: MAM_MEM.tex_lot
920 MAM_MEM.pix_arr = null ;
921 MAM_MEM.pix_wid =A(GLO_DAT.INI_VAL.SAN_MAM) ; //: 2048
922 MAM_MEM.pix_hig =A(GLO_DAT.INI_VAL.SAN_MAM) ; //: 2048
923 MAM_MEM.pix_com = 4 ; //:ComponentsPerPixel
924 MAM_MEM.pix_nam = "mam_mem" ;
925 MAM_MEM.sam_val = ( MAM_MEM.tex_lot );
926 MAM_MEM.sam_loc = ( 0 - ( 902 ) );
927 MAM_MEM.has_loc = ( 0 - ( 1002 ) );
928
929 //:UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP://
930
931 ISO_MEM.pix_arr = new Uint8Array( 1
932 * ISO_MEM.pix_wid
933 * ISO_MEM.pix_hig
934 * ISO_MEM.pix_com
935 );;
936 MAM_MEM.pix_arr = new Uint8Array( 1
937 * MAM_MEM.pix_wid
938 * MAM_MEM.pix_hig
939 * MAM_MEM.pix_com
940 );;
941
942 ada_gra.iso_mem = ISO_MEM;
943 ada_gra.mam_mem = MAM_MEM;
944
945 //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
946
947 //://///////////////////////////////////SC[ icogstep_01 ]://
948 var NL="\n"; //:NL=="newline"
949 var ver_src=(""/**ver:[ vertext / vtx_src ]**/
950 +" #version 300 es "+NL
951 +" precision highp float; "+NL
952
953 //: When Moving From Previous WebGL to "300 es"
954 //: "attribute" becomes: "layout( location = # ) in ..."
955 +" layout(location = 0) in vec2 ver_pos; "+NL
956 +" layout(location = 1) in vec3 ver_col; "+NL
957
958 +" out vec3 pix_ver; /**fragColor/fra_col_ver**/ "+NL
959
960 +" void main(){ "+NL
961 +" "+NL
962 +" pix_ver = ( ver_col ); "+NL
963 +" gl_Position = vec4( ver_pos,0.0,1.0); "+NL
964 +" "+NL
965 +" } "+NL
966 );;
967
968 //://////////////////////////////////////////////////////://
969
970//|/////////////////////////:DIAGRAM[SC[DIA_TILTEX_ULTRA]]///|//
971//| |//
972//| //[/////////////////:DIAGRAM[SC[DIA_TILTEX]]:]// |//
973//| //[ ]// |//
974//| //[ Working out logic using a 4x4 tilemap: ]// |//
975//| //[ ]// |//
976//| //[ TILE[ 0 ]: ( 0 + 0.5 ) / 4 === 0.125 ]// |//
977//| //[ TILE[ 1 ]: ( 1 + 0.5 ) / 4 === 0.375 ]// |//
978//| //[ TILE[ 2 ]: ( 2 + 0.5 ) / 4 === 0.625 ]// |//
979//| //[ TILE[ 3 ]: ( 3 + 0.5 ) / 4 === 0.875 ]// |//
980//| //[ ]// |//
981//| //[ |<----- 4 pixels / texels ----->| ]// |//
982//| //[ +---+---+---+---+---+---+---+---+ ]// |//
983//| //[ | | | | | ]// |//
984//| //[ + 0 + 1 + 2 + 3 + <<<<< ]// |//
985//| //[ | | | | | ^^ ]// |//
986//| //[ +---+---+---+---+---+---+---+---+ ^^ ]// |//
987//| //[ ^ ^ .25 ^ 0.5 ^ .75 ^ ^ ^^ ]// |//
988//| //[ | | | | | | ^^ ]// |//
989//| //[ | 0.125 0.375 0.625 0.875 | ^^ ]// |//
990//| //[ | | ^^ ]// |//
991//| //[ 0<--WEBGL_MAPPED_RANGE_0_TO_1-->1 ^^ ]// |//
992//| //[ ^^ ]// |//
993//| //[ [ TILE_COORDINATES >>>^^] ]// |//
994//| //[ (If each pixel encodes ) ]// |//
995//| //[ (a tile value on tilemap) ]// |//
996//| //[ ]// |//
997//| //[/////////////////:DIAGRAM[SC[DIA_TILTEX]]:]// |//
998//| |//
999//| Solving in a more detailed manner yeilds a more |//
1000//| complex formula... But the results are almost |//
1001//| identical. And identical enough for what I need. |//
1002//| |//
1003//| +---+---+---+---+---+---+ |//
1004//| | | | | |//
1005//| + 0 + 1 + 2 + |//
1006//| | | | | |//
1007//| +---+---+---+---+---+---+ |//
1008//| ^ ~.16~ 0.5 .83 ^ |//
1009//| | | |//
1010//| | | |//
1011//| | | |//
1012//| 0<-------- 0-1 -------->1 |//
1013//| |//
1014//| 1: Figure how many half segments there are: |//
1015//| var num_seg = ( wid * 2 ); |//
1016//| |//
1017//| 2: Get the length of a single half segment |//
1018//| as portion of normalized length: |//
1019//| var nom_seg = ( 1 / num_seg ); |//
1020//| |//
1021//| 3: First pixel center is one nom_seg from zero. |//
1022//| Each succesive coordinate is 2 more nom_seg. |//
1023//| |//
1024//| //:til_cor: Tile Coordinate |//
1025//| //:til_tex: Tile texture/normalized position. |//
1026//| til_tex = (nom_seg*1) + ( til_cor * ( nom_seg * 2 ) ) |//
1027//| |//
1028//| ((1/(wid*2))*1)+(til*((1/(wid*2))*2)) |//
1029//| //:::wid:::::::::til::::::wid:::::::: |//
1030//| |//
1031//| |//
1032//| wid:3 til:0 ((1/( 3 *2))*1)+( 0 *((1/( 3 *2))*2)) |//
1033//| wid:3 til:1 ((1/( 3 *2))*1)+( 1 *((1/( 3 *2))*2)) |//
1034//| wid:3 til:2 ((1/( 3 *2))*1)+( 2 *((1/( 3 *2))*2)) |//
1035//| |//
1036//| [ FORMULA:01 / fom_001 ] |//
1037//| ((1/(wid*2))*1)+(til*((1/(wid*2))*2)) |//
1038//| |//
1039//| [ FORMULA:02 / fom_002 ] |//
1040//| ( til + 0.5 ) / ( wid + 0 /** DONT_ADD_ONE **/ ) |//
1041//| |//
1042//| |//
1043//|/////////////////////////:DIAGRAM[SC[DIA_TILTEX_ULTRA]]///|//
1044
1045
1046//:Ripped from M128.JS library to figure out the
1047//:code needed to get access to integer textures.
1048let N = "\n";
1049var its_a_string =("#version 300 es "//[F]//
1050+N+"//::1234____1234____1234 ____1234 ____1234 ____1234:"//[F]//
1051+N+" //:Version '300 es' gives you access to ://"//[F]//
1052+N+" //:the 'usampler2D' (uint sampler2D) ://"//[F]//
1053+N+" //:ALSO: Make sure context is webgl2 (TWO) ://"//[F]//
1054+N+" //:AKA: can.getContext('webgl2') ://"//[F]//
1055+N+" //:------------------------------------------://"//[F]//
1056+N+" //: Must declare precision before ://"//[F]//
1057+N+" //: declaring any uniforms ://"//[F]//
1058+N+" //://////////////////////////////////////////://"//[F]//
1059+N+" #ifdef GL_FRAGMENT_PRECISION_HIGH "//[F]//
1060+N+" precision highp float; "//[F]//
1061+N+" precision highp int; "//[F]//
1062+N+" #else "//[F]//
1063+N+" precision mediump float; "//[F]//
1064+N+" precision mediump int; "//[F]//
1065+N+" #endif "//[F]//
1066+N+" //://////////////////////////////////////////://"//[F]//
1067+N+" //: Pretty sure sampler precision must ://"//[F]//
1068+N+" //: always be high. Otherwise we will corrupt://"//[F]//
1069+N+" //: our bit-packing patterns that are stored ://"//[F]//
1070+N+" //: in each pixel. ://"//[F]//
1071+N+" precision highp usampler2D;//:- - - - - - - -://"//[F]//
1072+N+" //://////////////////////////////////////////://"//[F]//
1073+N+" //: JavaScript's inclusive rectangle type. ://"//[F]//
1074+N+" //: Though the coordinates here should be ://"//[F]//
1075+N+" //: INTEGER/WHOLE we define as float ://"//[F]//
1076+N+" //: to make the math easier. Specificaly ://"//[F]//
1077+N+" //: less explicit casts needed in our ://"//[F]//
1078+N+" //: shader code. ://"//[F]//
1079+N+" struct REC_INC{ //:////////////:[glsl_struct]://"//[F]//
1080+N+" "//[F]//
1081+N+" float x_0; //:#WHO_NUM_INC#:LEF:X "//[F]//
1082+N+" float x_1; //:#WHO_NUM_INC#:RIG:X "//[F]//
1083+N+" float y_0; //:#WHO_NUM_INC#:TOP:Y "//[F]//
1084+N+" float y_1; //:#WHO_NUM_INC#:BOT:Y "//[F]//
1085+N+" "//[F]//
1086+N+" };//://////////////////////////:[glsl_struct]://"//[F]//
1087+N+" "//[F]//
1088+N+" //:IO:Input_Output_variables:(BELOW):--------://"//[F]//
1089+N+" //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://"//[F]//
1090+N+" //: ://"//[F]//
1091+N+" //: Old webgl uses [varying] instead of ://"//[F]//
1092+N+" //: [in] or [out]. ://"//[F]//
1093+N+" //: ://"//[F]//
1094+N+" //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://"//[F]//
1095+N+" "//[F]//
1096+N+" //:**************************************://"//[F]//
1097+N+" //: Mapped red to x axis and green to y: ://"//[F]//
1098+N+" //: THUS: s == x == red ://"//[F]//
1099+N+" //: t == y == green ://"//[F]//
1100+N+" //: (pix_ver == texcoord == fra_col_ver) ://"//[F]//
1101+N+" in vec3 pix_ver; //:- - - - - - - -://"//[F]//
1102+N+" //:**************************************://"//[F]//
1103+N+" "//[F]//
1104+N+" //:Not allowed in webgl2 (AKA: ESSL ) "//[F]//
1105+N+" //--layout( origin_upper_left )[in|out] --//"//[F]//
1106+N+" "//[F]//
1107+N+" out vec4 pix_fra; /** fra_col_fra **/ "//[F]//
1108+N+" //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://"//[F]//
1109+N+" //: ://"//[F]//
1110+N+" //:mam_mem: MASTER_MEMORY: (2048*2048) ://"//[F]//
1111+N+" //:mam_mem: MASTER_MEMORY: [512*4]x[512*4] ://"//[F]//
1112+N+" //: ://"//[F]//
1113+N+" //: Stores NINE(9) 512x512 level maps ://"//[F]//
1114+N+" //: and TWO(2) transitional level maps. ://"//[F]//
1115+N+" //: ( MAPS:Vertical and horizontal ) ://"//[F]//
1116+N+" //: And some other 512x512 data that ://"//[F]//
1117+N+" //: I have not decided on yet. ://"//[F]//
1118+N+" //: ://"//[F]//
1119+N+" //:iso_mem: Isolated_Memory: 512x512 for ://"//[F]//
1120+N+" //: ://"//[F]//
1121+N+" //: whatever the fuck you [want/need]. ://"//[F]//
1122+N+" //: For example, could just be a ://"//[F]//
1123+N+" //: scratchpad if the edi_mod value is ://"//[F]//
1124+N+" //: flagged with a value indicating ://"//[F]//
1125+N+" //: scratchpad behavior on data. ://"//[F]//
1126+N+" //:- - - - - - - - - - -- - - - - - - - - - -://"//[F]//
1127+N+" uniform uint has_mem ; //:TexureLoaded?://"//[F]//
1128+N+" uniform uint ren_mod ; //:Render_Mode ://"//[F]//
1129+N+" uniform uint edi_mod ; //:Editor_Mode ://"//[F]//
1130+N+" uniform uint gam_tim ; //:Game___Time ://"//[F]//
1131+N+" uniform uint dex_hot ; //:HotSwapIndex ://"//[F]//
1132+N+" //:- - - - - - - - - - -- - - - - - - - - - -://"//[F]//
1133+N+" uniform usampler2D iso_mem ; //:Whatever__Mem://"//[F]//
1134+N+" uniform usampler2D mam_mem ; //:Main_Mem_2048://"//[F]//
1135//://////////////////////////////////////////////////////////://
1136
1137//[//////////////////////////////////////////////////////////]//
1138//[--]////|//////////////////////////////////////////|////[--]//
1139//[--]////| To_Josh: |////[--]//
1140//[--]////| |////[--]//
1141//[--]////|Because I am writing this all in one file,|////[--]//
1142//[--]////|it makes it easy to [ embedd/hardcode ] |////[--]//
1143//[--]////|values written in the JavaScript into the |////[--]//
1144//[--]////|GLSL shader code. This is nice because the|////[--]//
1145//[--]////|game engine code in JavaScript will need |////[--]//
1146//[--]////|to synchronize and communicate with the |////[--]//
1147//[--]////|GLSL shader (rendering) code. |////[--]//
1148//[--]////| |////[--]//
1149//[--]////| JAVASCRIPT: |////[--]//
1150//[--]////| |////[--]//
1151//[--]////| +N+" #define SAN_MAM ( " |////[--]//
1152//[--]////| + GLO_CFG.SAN_MAM + ")\n" |////[--]//
1153//[--]////| |////[--]//
1154//[--]////| +N+" #define SAN_ISO ( " |////[--]//
1155//[--]////| + GLO_CFG.SAN_ISO + ")\n" |////[--]//
1156//[--]////| |////[--]//
1157//[--]////| |////[--]//
1158//[--]////| RESULTING:GLSL: |////[--]//
1159//[--]////| |////[--]//
1160//[--]////| #define SAN_MAM ( 2048 ) |////[--]//
1161//[--]////| #define SAN_ISO ( 512 ) |////[--]//
1162//[--]////| |////[--]//
1163//[--]////|//////////////////////////////////////////|////[--]//
1164//[//////////////////////////////////////////////////////////]//
1165
1166 //:Defines for texture sizes.________________:////|MEMORY|//
1167 //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS:////|MEMORY|//
1168 //|MEMORY|//
1169 +N+" #define SAN_MAM ( " //|MEMORY|//
1170 + GLO_CFG.SAN_MAM + ")\n" //|MEMORY|//
1171 //|MEMORY|//
1172 +N+" #define SAN_ISO ( " //|MEMORY|//
1173 + GLO_CFG.SAN_ISO + ")\n" //|MEMORY|//
1174 //|MEMORY|//
1175 //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS:////|MEMORY|//
1176 //|MEMORY|//
1177 //:Hotswapping_and_MemoryCells:______________:////|MEMORY|//
1178 //:HMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHM:////|MEMORY|//
1179 //:hot_swapping_indexes_range:::::::::::::::::////|MEMORY|//
1180 //|MEMORY|//
1181 +N+" #define DEX_HOT_MIN ( " //|MEMORY|//
1182 + GLO_CFG.DEX_HOT_MIN + ")\n" //|MEMORY|//
1183 //|MEMORY|//
1184 +N+" #define DEX_HOT_MAX ( " //|MEMORY|//
1185 + GLO_CFG.DEX_HOT_MAX + ")\n" //|MEMORY|//
1186 //|MEMORY|//
1187 //|MEMORY|//
1188 //|MEMORY|//
1189 //:Memory_Cells: ( MEC_DEX === DEX_HOT - 1 )::////|MEMORY|//
1190 //:SAN_ISO sized sub-divisions of SAN_MAM: ::////|MEMORY|//
1191 //|MEMORY|//
1192 +N+" #define MEC_DEX_MIN ( " //|MEMORY|//
1193 + GLO_CFG.MEC_DEX_MIN + ")\n" //|MEMORY|//
1194 //|MEMORY|//
1195 +N+" #define MEC_DEX_MAX ( " //|MEMORY|//
1196 + GLO_CFG.MEC_DEX_MAX + ")\n" //|MEMORY|//
1197 //|MEMORY|//
1198 //|MEMORY|//
1199 //|MEMORY|//
1200 //:HMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHM:////|MEMORY|//
1201 //[------]//
1202 //|TAU_01|//
1203 //|TAU_01|//
1204 //: TAU_001_* : Texture_As_Uniforms:Block#001:////|TAU_01|//
1205 //|TAU_01|//
1206 +N+" #define TAU_001_x0 (" //|TAU_01|//
1207 + GLO_CFG.TAU_001_x0 + ")\n" //|TAU_01|//
1208 //|TAU_01|//
1209 +N+" #define TAU_001_x1 (" //|TAU_01|//
1210 + GLO_CFG.TAU_001_x1 + ")\n" //|TAU_01|//
1211 //|TAU_01|//
1212 +N+" #define TAU_001_y0 (" //|TAU_01|//
1213 + GLO_CFG.TAU_001_y0 + ")\n" //|TAU_01|//
1214 //|TAU_01|//
1215 +N+" #define TAU_001_y1 (" //|TAU_01|//
1216 + GLO_CFG.TAU_001_y1 + ")\n" //|TAU_01|//
1217 //|TAU_01|//
1218 +N+" #define TAU_001_wid " //|TAU_01|//
1219 + " (TAU_001_x1-TAU_001_x0+1) " //|TAU_01|//
1220 +N+" #define TAU_001_hig " //|TAU_01|//
1221 + " (TAU_001_y1-TAU_001_y0+1) " //|TAU_01|//
1222 //|TAU_01|//
1223 //:Index of the TestBedShader(tbs) that :////|TAU_01|//
1224 //:editor#1 (edi_001) is displaying. :////|TAU_01|//
1225 +N+" #define TAU_001_EDIT001_dex_sha ( "//|TAU_01|//
1226 + GLO_CFG.TAU_001_EDIT001_dex_sha + ")\n "//|TAU_01|//
1227 //|TAU_01|//
1228 //:E2:Editor_02_vars:(BELOW):----------------:////|TAU_01|//
1229 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2:////|TAU_01|//
1230 +N+" #define TAU_001_EDIT002_til_exp ( "//|TAU_01|//
1231 + GLO_CFG.TAU_001_EDIT002_til_exp + ")\n "//|TAU_01|//
1232 //|TAU_01|//
1233 +N+" #define TAU_001_EDIT002_til_san ( "//|TAU_01|//
1234 + GLO_CFG.TAU_001_EDIT002_til_san + ")\n "//|TAU_01|//
1235 //|TAU_01|//
1236 +N+" #define TAU_001_EDIT002_cam_t_x ( "//|TAU_01|//
1237 + GLO_CFG.TAU_001_EDIT002_cam_t_x + ")\n "//|TAU_01|//
1238 //|TAU_01|//
1239 +N+" #define TAU_001_EDIT002_cam_t_y ( "//|TAU_01|//
1240 + GLO_CFG.TAU_001_EDIT002_cam_t_y + ")\n "//|TAU_01|//
1241 //|TAU_01|//
1242 +N+" #define TAU_001_EDIT002_dex_hot ( "//|TAU_01|//
1243 + GLO_CFG.TAU_001_EDIT002_dex_hot + ")\n "//|TAU_01|//
1244 //|TAU_01|//
1245 +N+" #define TAU_001_EDIT002_use_hyp ( "//|TAU_01|//
1246 + GLO_CFG.TAU_001_EDIT002_use_hyp + ")\n "//|TAU_01|//
1247 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2:////|TAU_01|//
1248 //:E2:Editor_02_vars:(ABOVE):----------------:////|TAU_01|//
1249 //|TAU_01|//
1250 //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR:////|TAU_01|//
1251 //:VR:Viewport_Rectangles: :////|TAU_01|//
1252 //: Where datapoints exist on texture: :////|TAU_01|//
1253 //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR:////|TAU_01|//
1254 //|TAU_01|//
1255 //:rec_vpc:__________________________________:////|TAU_01|//
1256 +N+" #define TAU_001_GLOBVAR_rec_vpc_x_0 ( "//|TAU_01|//
1257 + GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_0+ ") "//|TAU_01|//
1258 +N+" #define TAU_001_GLOBVAR_rec_vpc_x_1 ( "//|TAU_01|//
1259 + GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_1+ ") "//|TAU_01|//
1260 +N+" #define TAU_001_GLOBVAR_rec_vpc_y_0 ( "//|TAU_01|//
1261 + GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_0+ ") "//|TAU_01|//
1262 +N+" #define TAU_001_GLOBVAR_rec_vpc_y_1 ( "//|TAU_01|//
1263 + GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_1+ ") "//|TAU_01|//
1264 //|TAU_01|//
1265 //:rec_vp0:__________________________________:////|TAU_01|//
1266 +N+" #define TAU_001_GLOBVAR_rec_vp0_x_0 ( "//|TAU_01|//
1267 + GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_0+ ") "//|TAU_01|//
1268 +N+" #define TAU_001_GLOBVAR_rec_vp0_x_1 ( "//|TAU_01|//
1269 + GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_1+ ") "//|TAU_01|//
1270 +N+" #define TAU_001_GLOBVAR_rec_vp0_y_0 ( "//|TAU_01|//
1271 + GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_0+ ") "//|TAU_01|//
1272 +N+" #define TAU_001_GLOBVAR_rec_vp0_y_1 ( "//|TAU_01|//
1273 + GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_1+ ") "//|TAU_01|//
1274 //|TAU_01|//
1275 //:rec_vp1:__________________________________:////|TAU_01|//
1276 +N+" #define TAU_001_GLOBVAR_rec_vp1_x_0 ( "//|TAU_01|//
1277 + GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_0+ ") "//|TAU_01|//
1278 +N+" #define TAU_001_GLOBVAR_rec_vp1_x_1 ( "//|TAU_01|//
1279 + GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_1+ ") "//|TAU_01|//
1280 +N+" #define TAU_001_GLOBVAR_rec_vp1_y_0 ( "//|TAU_01|//
1281 + GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_0+ ") "//|TAU_01|//
1282 +N+" #define TAU_001_GLOBVAR_rec_vp1_y_1 ( "//|TAU_01|//
1283 + GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_1+ ") "//|TAU_01|//
1284 //|TAU_01|//
1285 //:rec_vp2:__________________________________:////|TAU_01|//
1286 +N+" #define TAU_001_GLOBVAR_rec_vp2_x_0 ( "//|TAU_01|//
1287 + GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_0+ ") "//|TAU_01|//
1288 +N+" #define TAU_001_GLOBVAR_rec_vp2_x_1 ( "//|TAU_01|//
1289 + GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_1+ ") "//|TAU_01|//
1290 +N+" #define TAU_001_GLOBVAR_rec_vp2_y_0 ( "//|TAU_01|//
1291 + GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_0+ ") "//|TAU_01|//
1292 +N+" #define TAU_001_GLOBVAR_rec_vp2_y_1 ( "//|TAU_01|//
1293 + GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_1+ ") "//|TAU_01|//
1294 //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR:////|TAU_01|//
1295//://////////////////////////////////////////////////////////://
1296//://////////////////////////////////////////////////////////://
1297 +N+" "//[F]//
1298 +N+" //:M:ModulusFunctions:(BELOW):-----------://"//[F]//
1299 +N+" //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://"//[F]//
1300 +N+" uint mod_u32( "//[F]//
1301 +N+" uint u32_bas "//[F]//
1302 +N+" , uint u32_div "//[F]//
1303 +N+" ){ "//[F]//
1304 +N+" "//[F]//
1305 +N+" float flt_res = mod( "//[F]//
1306 +N+" float(u32_bas) "//[F]//
1307 +N+" , float(u32_div) "//[F]//
1308 +N+" );; "//[F]//
1309 +N+" uint u32_res = uint( flt_res ); "//[F]//
1310 +N+" return( u32_res ); "//[F]//
1311 +N+" } "//[F]//
1312 +N+" "//[F]//
1313 +N+" int mod_i32( "//[F]//
1314 +N+" int i32_bas "//[F]//
1315 +N+" , int i32_div "//[F]//
1316 +N+" ){ "//[F]//
1317 +N+" "//[F]//
1318 +N+" float flt_res = mod( "//[F]//
1319 +N+" float(i32_bas) "//[F]//
1320 +N+" , float(i32_div) "//[F]//
1321 +N+" );; "//[F]//
1322 +N+" int i32_res = int( flt_res ); "//[F]//
1323 +N+" return( i32_res ); "//[F]//
1324 +N+" } "//[F]//
1325 +N+" //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://"//[F]//
1326 +N+" //:M:ModulusFunctions:(ABOVE):-----------://"//[F]//
1327 //[F]//
1328+N+"//: SAMPLE[ TAU_001 ]USING[ POS ](Position-2D) "//[F]//
1329+N+"uvec4 TAU_001_POS( int t_x, int t_y ){ "//[F]//
1330+N+" "//[F]//
1331+N+" uvec4 out_rgb; //:OUTPUT_RGB "//[F]//
1332+N+" "//[F]//
1333+N+" //:1: Convert coordinate in TAU_001 "//[F]//
1334+N+" //: FROM: TILE coordinate "//[F]//
1335+N+" //: TO: PIXEL_CENTER coordinate "//[F]//
1336+N+" //:2: NORMALIZE:Range[ 0.0 to 1.0 ] "//[F]//
1337+N+" float WID = float( SAN_MAM ); //:MasterMem:WID "//[F]//
1338+N+" float HIG = float( SAN_MAM ); //:MasterMem:HIG "//[F]//
1339+N+" vec2 u_v = vec2( "//[F]//
1340+N+" ( float( t_x ) + 0.5 /**pix_cen**/ ) / WID "//[F]//
1341+N+" , ( float( t_y ) + 0.5 /**pix_cen**/ ) / HIG "//[F]//
1342+N+" );; "//[F]//
1343+N+" "//[F]//
1344+N+" if( 1 == 1 "//[F]//
1345+N+" //:Inside bounds of sub-selection: "//[F]//
1346+N+" && t_x >= TAU_001_x0 && t_x <= TAU_001_x1 "//[F]//
1347+N+" && t_y >= TAU_001_y0 && t_y <= TAU_001_y1 "//[F]//
1348+N+" "//[F]//
1349+N+" //:Bounds of master memory (MAM_MEM) "//[F]//
1350+N+" && t_x >= 0 && t_x <= (SAN_MAM-1) "//[F]//
1351+N+" && t_y >= 0 && t_y <= (SAN_MAM-1) "//[F]//
1352+N+" "//[F]//
1353+N+" ){ "//[F]//
1354+N+" //:WITHIN_THE_BOUNDS_OF_EVERYTHING: "//[F]//
1355+N+" out_rgb = texture( mam_mem , u_v ); "//[F]//
1356+N+" "//[F]//
1357+N+" }else{ "//[F]//
1358+N+" "//[F]//
1359+N+" //:OW:Outofbounds_Where?:(BELOW):------------://"//[F]//
1360+N+" //:OWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOW://"//[F]//
1361+N+" //:which_regions_are_you_out_of_bounds_on? "//[F]//
1362+N+" //:OWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOW://"//[F]//
1363+N+" "//[F]//
1364+N+" if( 0 == 0 //: OOB: TAU sub selection? "//[F]//
1365+N+" || ( t_x < TAU_001_x0 || t_x > TAU_001_x1 ) "//[F]//
1366+N+" || ( t_y < TAU_001_y0 || t_y > TAU_001_y1 ) "//[F]//
1367+N+" "//[F]//
1368+N+" && 0 == 0 //: OOB: MAM_MEM texture region? "//[F]//
1369+N+" || ( t_x < 0 || t_x > (SAN_MAM-1) ) "//[F]//
1370+N+" || ( t_y < 0 || t_y > (SAN_MAM-1) ) "//[F]//
1371+N+" ){ "//[F]//
1372+N+" //:OUT_OF_BOUNDS:ALL: "//[F]//
1373+N+" out_rgb = uvec4(32,0+0,0+0,255); //:RED "//[F]//
1374+N+" }else "//[F]//
1375+N+" if( 0 == 0 //: OOB: TAU sub selection? "//[F]//
1376+N+" || ( t_x < TAU_001_x0 || t_x > TAU_001_x1 ) "//[F]//
1377+N+" || ( t_y < TAU_001_y0 || t_y > TAU_001_y1 ) "//[F]//
1378+N+" ){ "//[F]//
1379+N+" //:OUT_OF_BOUNDS:REC: "//[F]//
1380+N+" out_rgb = uvec4(0+0,32,0+0,255); //:GREEN "//[F]//
1381+N+" }else "//[F]//
1382+N+" if( 0 == 0 //: OOB: MAM_MEM texture region? "//[F]//
1383+N+" || ( t_x < 0 || t_x > (SAN_MAM-1) ) "//[F]//
1384+N+" || ( t_y < 0 || t_y > (SAN_MAM-1) ) "//[F]//
1385+N+" ){ "//[F]//
1386+N+" //:OUT_OF_BOUNDS:MEM: "//[F]//
1387+N+" out_rgb = uvec4(0+0,0+0,32,255); //:BLUE "//[F]//
1388+N+" };; "//[F]//
1389+N+" "//[F]//
1390+N+" //:OWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOW://"//[F]//
1391+N+" //:OW:Outofbounds_Where?:(ABOVE):------------://"//[F]//
1392+N+" };; "//[F]//
1393+N+" "//[F]//
1394+N+" return( out_rgb ); "//[F]//
1395+N+"}//[FN]// "//[F]//
1396//://////////////////////////////////////////////////////////://
1397+N+"//:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://"//[DEX]//
1398+N+"//: SAMPLE[ TAU_001 ]USING[ DEX ](Index-1D) "//[DEX]//
1399+N+"//: TAU: Texture_As_Uniform "//[DEX]//
1400+N+"//: TAU[ Faux_Uniform_Via_Texture_Mapped_Pixel ] "//[DEX]//
1401+N+"//: AKA[ TAU_001 | uniformfetch_TAU_001 ] "//[DEX]//
1402+N+"uvec4 TAU_001_DEX( int tau_dex ){ "//[DEX]//
1403+N+" "//[DEX]//
1404+N+" uvec4 out_rgb; //:OUTPUT_RGB "//[DEX]//
1405+N+" "//[DEX]//
1406+N+" #define WID ( TAU_001_wid ) //:////////////://"//[DEX]//
1407+N+" "//[DEX]//
1408+N+" int l_x = mod_i32( tau_dex , WID ); "//[DEX]//
1409+N+" int l_y = ( (tau_dex-l_x)/ WID ); "//[DEX]//
1410+N+" int t_x =( l_x + TAU_001_x0 ); "//[DEX]//
1411+N+" int t_y =( l_y + TAU_001_y0 ); "//[DEX]//
1412+N+" "//[DEX]//
1413+N+" out_rgb = TAU_001_POS( t_x, t_y ); "//[DEX]//
1414+N+" "//[DEX]//
1415+N+" #undef WID //:////////////////////////////://"//[DEX]//
1416+N+" "//[DEX]//
1417+N+" return( out_rgb ); "//[DEX]//
1418+N+"} "//[DEX]//
1419+N+" "//[DEX]//
1420+N+"//:Get encoded value as original uint32 value: "//|U32|//
1421+N+"uint TAU_001_U32( int tau_dex ){ "//|U32|//
1422+N+" "//|U32|//
1423+N+" uvec4 tau_vec = TAU_001_DEX( tau_dex ); "//|U32|//
1424+N+" uint tau_u32 =uint( 0 ); "//|U32|//
1425+N+" tau_u32 |= ( uint(0) //:RE_PACK_COMPONENTS: "//|U32|//
1426+N+" | (tau_vec.x << 24) //:RE_PACK_COMPONENTS: "//|U32|//
1427+N+" | (tau_vec.y << 16) //:RE_PACK_COMPONENTS: "//|U32|//
1428+N+" | (tau_vec.z << 8) //:RE_PACK_COMPONENTS: "//|U32|//
1429+N+" | (tau_vec.w << 0) //:RE_PACK_COMPONENTS: "//|U32|//
1430+N+" );; //:RE_PACK_COMPONENTS: "//|U32|//
1431+N+" "//|U32|//
1432+N+" return uint( tau_u32 ); "//|U32|//
1433+N+"}//[fn]// "//|U32|//
1434+N+" "//|U32|//
1435+N+"uvec4 Get_Tex_iso_mem( //://///////////////////://"//[ISO]//
1436+N+" int tilco_x "//[ISO]//
1437+N+", int tilco_y "//[ISO]//
1438+N+"){ "//[ISO]//
1439+N+" "//[ISO]//
1440+N+" float flt_wid = float( SAN_ISO /**512**/ ); "//[ISO]//
1441+N+" float flt_hig = float( SAN_ISO /**512**/ ); "//[ISO]//
1442+N+" "//[ISO]//
1443+N+" int int_wid = int( SAN_ISO /**512**/ ); "//[ISO]//
1444+N+" int int_hig = int( SAN_ISO /**512**/ ); "//[ISO]//
1445+N+" "//[ISO]//
1446+N+" vec2 u_v = vec2( "//[ISO]//
1447+N+" ( float( tilco_x ) + 0.5 ) "//[ISO]//
1448+N+" / ( flt_wid - 0.0 ) "//[ISO]//
1449+N+" "//[ISO]//
1450+N+" , ( float( tilco_y ) + 0.5 ) "//[ISO]//
1451+N+" / ( flt_hig - 0.0 ) "//[ISO]//
1452+N+" );; "//[ISO]//
1453
1454
1455///// +N+" vec2 u_v = vec2( "//[ISO]//
1456///// +N+" ( float( tilco_x )+ 0.0 ) "//[ISO]//
1457///// +N+" / ( flt_wid - 0.0 )+0.0 "//[ISO]//
1458///// +N+" "//[ISO]//
1459///// +N+" , ( float( tilco_y )+ 0.0 ) "//[ISO]//
1460///// +N+" / ( flt_hig - 0.0 )+0.0 "//[ISO]//
1461///// +N+" );; "//[ISO]//
1462
1463
1464
1465
1466
1467
1468+N+" "//[ISO]//
1469+N+" uvec4 out_rgb; "//[ISO]//
1470+N+" "//[ISO]//
1471+N+" if( "//[ISO]//
1472+N+" //: |<-------- iso_mem.wid -------->| "//[ISO]//
1473+N+" tilco_x >= 0 && tilco_x < int_wid "//[ISO]//
1474+N+" && tilco_y >= 0 && tilco_y < int_hig "//[ISO]//
1475+N+" //: |<-------- iso_mem.hig -------->| "//[ISO]//
1476+N+" ){ //:in_bounds_take_texture_sample_here: "//[ISO]//
1477+N+" "//[ISO]//
1478+N+" out_rgb = texture( iso_mem , u_v ); "//[ISO]//
1479+N+" "//[ISO]//
1480+N+" }else{ "//[ISO]//
1481+N+" //:make_checker_pattern_if_out_of_bounds: "//[ISO]//
1482+N+" "//[ISO]//
1483+N+" //: o_e: Odd_Or_Even (1 or 0 output) "//[ISO]//
1484+N+" //: txy: Tile_X_Y "//[ISO]//
1485+N+" int txy = ( tilco_x + tilco_y ); "//[ISO]//
1486+N+" int o_e = int( float( 0 ) "//[ISO]//
1487+N+" + float(txy) "//[ISO]//
1488+N+" -(2.0*floor( float(txy) / 2.0 )) "//[ISO]//
1489+N+" );; "//[ISO]//
1490+N+" int o_e_255 = o_e*255; "//[ISO]//
1491+N+" "//[ISO]//
1492+N+" out_rgb = uvec4( "//[ISO]//
1493+N+" o_e_255 //: RED "//[ISO]//
1494+N+" , o_e_255 //: GREEN "//[ISO]//
1495+N+" , o_e_255 //: BLUE "//[ISO]//
1496+N+" , 255 //: ALPHA "//[ISO]//
1497+N+" );; "//[ISO]//
1498+N+" };; "//[ISO]//
1499+N+" return( out_rgb ); "//[ISO]//
1500+N+" "//[ISO]//
1501+N+"} //:[ Get_Tex_iso_mem ]://////////////////////://"//[ISO]//
1502+N+" "//|ROT|//
1503
1504
1505+N+"uvec4 Get_Tex_iso_mem_rot( //://///////////////://"//|ROT|//
1506+N+" int tilco_x "//|ROT|//
1507+N+", int tilco_y "//|ROT|//
1508+N+"){ "//|ROT|//
1509+N+" "//|ROT|//
1510+N+" float x1 = float(SAN_ISO) / 2.0; //:CENTER "//|ROT|//
1511+N+" float y1 = float(SAN_ISO) / 2.0; //:CENTER "//|ROT|//
1512+N+" "//|ROT|//
1513+N+" float x2 = float( tilco_x ); "//|ROT|//
1514+N+" float y2 = float( tilco_y ); "//|ROT|//
1515+N+" "//|ROT|//
1516+N+" float dx = x1-x2; "//|ROT|//
1517+N+" float dy = y1-y2; "//|ROT|//
1518+N+" float ar = atan( dy , dx ); "//|ROT|//
1519+N+" "//|ROT|//
1520+N+" float dxy = sqrt( "//|ROT|//
1521+N+" pow(x1-x2 , 2.0) "//|ROT|//
1522+N+" + pow(y1-y2 , 2.0) "//|ROT|//
1523+N+" );; "//|ROT|//
1524+N+" "//|ROT|//
1525+N+" float f_t = float( gam_tim ) / 255.0; "//|ROT|//
1526+N+" "//|ROT|//
1527+N+" float f_x = x1 + cos( ar + f_t ) * dxy; "//|ROT|//
1528+N+" float f_y = y1 + sin( ar + f_t ) * dxy; "//|ROT|//
1529+N+" "//|ROT|//
1530+N+" int i_x = int( f_x ); "//|ROT|//
1531+N+" int i_y = int( f_y ); "//|ROT|//
1532+N+" "//|ROT|//
1533+N+" "//|ROT|//
1534+N+" uvec4 out_rgb = Get_Tex_iso_mem( "//|ROT|//
1535+N+" i_x "//|ROT|//
1536+N+" , i_y "//|ROT|//
1537+N+" );; "//|ROT|//
1538+N+" "//|ROT|//
1539+N+" return( out_rgb ); "//|ROT|//
1540+N+"} //://////////////////////////////////////////://"//|ROT|//
1541
1542//:CP:Cut_and_Paste:(BELOW):---------------------------------://
1543//:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://
1544//: ://
1545//: CUT_PASTE( Get_Tex_iso_mem )===>[ Get_Tex_mam_mem ]://
1546//: CUT_PASTE( Get_Tex_iso_mem_rot)===>[ Get_Tex_mam_mem_rot]://
1547//: ://
1548//:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://
1549+N+"uvec4 Get_Tex_mam_mem( //://///////////////////://"//[ISO]//
1550+N+" int tilco_x "//[ISO]//
1551+N+", int tilco_y "//[ISO]//
1552+N+"){ "//[ISO]//
1553+N+" "//[ISO]//
1554+N+" float flt_wid = float( SAN_MAM /**2048**/ ); "//[ISO]//
1555+N+" float flt_hig = float( SAN_MAM /**2048**/ ); "//[ISO]//
1556+N+" "//[ISO]//
1557+N+" int int_wid = int( SAN_MAM /**2048**/ ); "//[ISO]//
1558+N+" int int_hig = int( SAN_MAM /**2048**/ ); "//[ISO]//
1559+N+" "//[ISO]//
1560+N+" vec2 u_v = vec2( "//[ISO]//
1561+N+" ( float( tilco_x ) + 0.5 ) "//[ISO]//
1562+N+" / ( flt_wid - 0.0 ) "//[ISO]//
1563+N+" "//[ISO]//
1564+N+" , ( float( tilco_y ) + 0.5 ) "//[ISO]//
1565+N+" / ( flt_hig - 0.0 ) "//[ISO]//
1566+N+" );; "//[ISO]//
1567+N+" "//[ISO]//
1568+N+" uvec4 out_rgb; "//[ISO]//
1569+N+" "//[ISO]//
1570+N+" if( "//[ISO]//
1571+N+" //: |<-------- mam_mem.wid -------->| "//[ISO]//
1572+N+" tilco_x >= 0 && tilco_x < int_wid "//[ISO]//
1573+N+" && tilco_y >= 0 && tilco_y < int_hig "//[ISO]//
1574+N+" //: |<-------- mam_mem.hig -------->| "//[ISO]//
1575+N+" ){ //:in_bounds_take_texture_sample_here: "//[ISO]//
1576+N+" "//[ISO]//
1577+N+" out_rgb = texture( mam_mem , u_v ); "//[ISO]//
1578+N+" "//[ISO]//
1579+N+" }else{ "//[ISO]//
1580+N+" //:make_checker_pattern_if_out_of_bounds: "//[ISO]//
1581+N+" "//[ISO]//
1582+N+" //: o_e: Odd_Or_Even (1 or 0 output) "//[ISO]//
1583+N+" //: txy: Tile_X_Y "//[ISO]//
1584+N+" int txy = ( tilco_x + tilco_y ); "//[ISO]//
1585+N+" int o_e = int( float( 0 ) "//[ISO]//
1586+N+" + float(txy) "//[ISO]//
1587+N+" -(2.0*floor( float(txy) / 2.0 )) "//[ISO]//
1588+N+" );; "//[ISO]//
1589+N+" int o_e_255 = o_e*255; "//[ISO]//
1590+N+" "//[ISO]//
1591+N+" out_rgb = uvec4( "//[ISO]//
1592+N+" o_e_255 //: RED "//[ISO]//
1593+N+" , o_e_255 //: GREEN "//[ISO]//
1594+N+" , o_e_255 //: BLUE "//[ISO]//
1595+N+" , 255 //: ALPHA "//[ISO]//
1596+N+" );; "//[ISO]//
1597+N+" };; "//[ISO]//
1598+N+" return( out_rgb ); "//[ISO]//
1599+N+" "//[ISO]//
1600+N+"} //:[ Get_Tex_mam_mem ]://////////////////////://"//[ISO]//
1601+N+" "//|ROT|//
1602+N+"uvec4 Get_Tex_mam_mem_rot( //://///////////////://"//|ROT|//
1603+N+" int tilco_x "//|ROT|//
1604+N+", int tilco_y "//|ROT|//
1605+N+"){ "//|ROT|//
1606+N+" "//|ROT|//
1607+N+" float x1 = float(SAN_MAM) / 2.0; //:CENTER "//|ROT|//
1608+N+" float y1 = float(SAN_MAM) / 2.0; //:CENTER "//|ROT|//
1609+N+" "//|ROT|//
1610+N+" float x2 = float( tilco_x ); "//|ROT|//
1611+N+" float y2 = float( tilco_y ); "//|ROT|//
1612+N+" "//|ROT|//
1613+N+" float dx = x1-x2; "//|ROT|//
1614+N+" float dy = y1-y2; "//|ROT|//
1615+N+" float ar = atan( dy , dx ); "//|ROT|//
1616+N+" "//|ROT|//
1617+N+" float dxy = sqrt( "//|ROT|//
1618+N+" pow(x1-x2 , 2.0) "//|ROT|//
1619+N+" + pow(y1-y2 , 2.0) "//|ROT|//
1620+N+" );; "//|ROT|//
1621+N+" "//|ROT|//
1622+N+" float f_t = float( gam_tim ) / 255.0; "//|ROT|//
1623+N+" "//|ROT|//
1624+N+" float f_x = x1 + cos( ar + f_t ) * dxy; "//|ROT|//
1625+N+" float f_y = y1 + sin( ar + f_t ) * dxy; "//|ROT|//
1626+N+" "//|ROT|//
1627+N+" int i_x = int( f_x ); "//|ROT|//
1628+N+" int i_y = int( f_y ); "//|ROT|//
1629+N+" "//|ROT|//
1630+N+" "//|ROT|//
1631+N+" uvec4 out_rgb = Get_Tex_mam_mem( "//|ROT|//
1632+N+" i_x "//|ROT|//
1633+N+" , i_y "//|ROT|//
1634+N+" );; "//|ROT|//
1635+N+" "//|ROT|//
1636+N+" return( out_rgb ); "//|ROT|//
1637+N+"} //://////////////////////////////////////////://"//|ROT|//
1638//:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://
1639//:CP:Cut_and_Paste:(ABOVE):---------------------------------://
1640
1641+N+" //: Help make an error checker pattern if ://"//[OXY]//
1642+N+" //: sampler goes out of bounds. Pick exact ://"//[OXY]//
1643+N+" //: RGB colors for checker pattern so we can ://"//[OXY]//
1644+N+" //: figure out where the error is comming ://"//[OXY]//
1645+N+" //: from by looking at the resulting image ://"//[OXY]//
1646+N+" //: in shader in raw data view. ://"//[OXY]//
1647+N+" uvec4 OOB_TXY( //:.................:ERR_OOB_TXY"//[OXY]//
1648+N+" "//[OXY]//
1649+N+" //:XY tile coordinate that is out of bounds:"//[OXY]//
1650+N+" int oob_t_x //:................:OutOfBou:t_x"//[OXY]//
1651+N+" , int oob_t_y //:................:OutOfBou:t_y"//[OXY]//
1652+N+" "//[OXY]//
1653+N+" //: Parameters intentionally NOT uvec input ://"//[OXY]//
1654+N+" //: Because all callsites to OOB_TXY should ://"//[OXY]//
1655+N+" //: use unique RGB colors and should NOT ://"//[OXY]//
1656+N+" //: be re-used. All calls should be directly ://"//[OXY]//
1657+N+" //: [*inlined*] at the point they are needed.://"//[OXY]//
1658+N+" , int r_0 , int g_0, int b_0 //:even_RGB "//[OXY]//
1659+N+" , int r_1 , int g_1, int b_1 //:odd__RGB "//[OXY]//
1660+N+" ){ "//[OXY]//
1661+N+" "//[OXY]//
1662+N+" uvec4 dye_eve = uvec4(r_0,g_0,b_0, 255); "//[OXY]//
1663+N+" uvec4 dye_odd = uvec4(r_1,g_1,b_1, 255); "//[OXY]//
1664+N+" uvec4 dye_err = uvec4(12 , 24, 48, 255); "//[OXY]//
1665+N+" uvec4 dye_out = dye_err; "//[OXY]//
1666+N+" "//[OXY]//
1667+N+" //:--------------------------:SC[OGL_OXY]://"//[OXY]//
1668+N+" #define _1_ (uint( 1 ))//:///////////////://"//[OXY]//
1669+N+" #define _0_ (uint( 0 ))//:///////////////://"//[OXY]//
1670+N+" uint u_x = uint( oob_t_x );//:AKA[u32_t_x] "//[OXY]//
1671+N+" uint u_y = uint( oob_t_y );//:AKA[u32_t_y] "//[OXY]//
1672+N+" uint o_x = uint(( u_x & _1_) > _0_); "//[OXY]//
1673+N+" uint o_y = uint(( u_y & _1_) > _0_); "//[OXY]//
1674+N+" uint oxy = uint(((o_x+o_y) & _1_) > _0_); "//[OXY]//
1675+N+" #undef _1_ //://///////////////////////://"//[OXY]//
1676+N+" #undef _0_ //://///////////////////////://"//[OXY]//
1677+N+" //:--------------------------:SC[OGL_OXY]://"//[OXY]//
1678+N+" "//[OXY]//
1679+N+" //:On an [*odd*] or [*even*] checker? "//[OXY]//
1680+N+" if( oxy == uint(0) ){ dye_out = dye_eve; }; "//[OXY]//
1681+N+" if( oxy == uint(1) ){ dye_out = dye_odd; }; "//[OXY]//
1682+N+" "//[OXY]//
1683+N+" return( dye_out ); "//[OXY]//
1684+N+" }//:[OOB_TXY]:_______________________________://"//[OXY]//
1685
1686+N+"//:Get memory that may or may not be "//|G_T_D_HOT|//
1687+N+"//:hot-swapped out. "//|G_T_D_HOT|//
1688+N+"uvec4 Get_Tex_dex_hot( "//|G_T_D_HOT|//
1689+N+" int mem_t_x //:Memory:Tile_X :// "//|G_T_D_HOT|//
1690+N+", int mem_t_y //:Memory:Tile_Y :// "//|G_T_D_HOT|//
1691+N+", int inn_hot //: dex_hot :// "//|G_T_D_HOT|//
1692+N+"){ "//|G_T_D_HOT|//
1693+N+" "//|G_T_D_HOT|//
1694+N+" uvec4 out_rgb; "//|G_T_D_HOT|//
1695+N+" "//|G_T_D_HOT|//
1696+N+" "//|G_T_D_HOT|//
1697+N+" #define _0_ int(0) //:///////////////://"//|G_T_D_HOT|//
1698+N+" #define _1_ int(1) //:///////////////://"//|G_T_D_HOT|//
1699+N+" "//|G_T_D_HOT|//
1700+N+" //:calculate how many sub-sections of://"//|G_T_D_HOT|//
1701+N+" //:SAN_MAM there are. Then minus one ://"//|G_T_D_HOT|//
1702+N+" //:to get the MAX_HOT_SWA_DEX. ://"//|G_T_D_HOT|//
1703+N+" //:m_i_hot starts at 1, not 0, hence ://"//|G_T_D_HOT|//
1704+N+" //:the ( - _0_ ) ....................://"//|G_T_D_HOT|//
1705+N+" int san_hot = ((SAN_MAM / SAN_ISO)); "//|G_T_D_HOT|//
1706+N+" int m_i_hot = ((san_hot*san_hot)- _0_ );"//|G_T_D_HOT|//
1707+N+" int m_i_txy = ((SAN_ISO )- _1_ );"//|G_T_D_HOT|//
1708+N+" "//|G_T_D_HOT|//
1709+N+" bool oob_neg_hot =( inn_hot < 0 );"//|G_T_D_HOT|//
1710+N+" bool oob_neg_txy =( mem_t_x < 0 );"//|G_T_D_HOT|//
1711+N+" "//|G_T_D_HOT|//
1712+N+" bool oob_pos_hot =( inn_hot > m_i_hot );"//|G_T_D_HOT|//
1713+N+" bool oob_pos_txy =( mem_t_x > m_i_txy );"//|G_T_D_HOT|//
1714+N+" "//|G_T_D_HOT|//
1715+N+" bool oob_hot =( oob_neg_hot "//|G_T_D_HOT|//
1716+N+" || oob_pos_hot );; "//|G_T_D_HOT|//
1717+N+" "//|G_T_D_HOT|//
1718+N+" bool oob_txy =( oob_neg_txy "//|G_T_D_HOT|//
1719+N+" || oob_pos_txy );; "//|G_T_D_HOT|//
1720+N+" "//|G_T_D_HOT|//
1721+N+" bool oob_all =( oob_hot && oob_txy); "//|G_T_D_HOT|//
1722+N+" "//|G_T_D_HOT|//
1723+N+" #define DEX_HOT int(dex_hot) //:::// "//|G_T_D_HOT|//
1724+N+" bool use_hot = (DEX_HOT == inn_hot); "//|G_T_D_HOT|//
1725+N+" bool not_hot = (DEX_HOT != inn_hot); "//|G_T_D_HOT|//
1726+N+" #undef DEX_HOT //://////////////:// "//|G_T_D_HOT|//
1727+N+" "//|G_T_D_HOT|//
1728+N+" #undef _0_ //://////////////////////://"//|G_T_D_HOT|//
1729+N+" #undef _1_ //://////////////////////://"//|G_T_D_HOT|//
1730+N+" "//|G_T_D_HOT|//
1731+N+" ;;;;;;if( oob_all ){ "//|G_T_D_HOT|//
1732+N+" "//|G_T_D_HOT|//
1733+N+" out_rgb = OOB_TXY(mem_t_x,mem_t_y "//|G_T_D_HOT|//
1734+N+" , 222,222,222 "//|G_T_D_HOT|//
1735+N+" , 22, 22, 22);;"//|G_T_D_HOT|//
1736+N+" "//|G_T_D_HOT|//
1737+N+" }else if( oob_neg_hot ){ //:-----://"//|G_T_D_HOT|//
1738+N+" "//|G_T_D_HOT|//
1739+N+" out_rgb = OOB_TXY(mem_t_x,mem_t_y "//|G_T_D_HOT|//
1740+N+" , 111,111,111 "//|G_T_D_HOT|//
1741+N+" , 33, 33, 33);;"//|G_T_D_HOT|//
1742+N+" "//|G_T_D_HOT|//
1743+N+" }else if( oob_pos_hot ){ //:-----://"//|G_T_D_HOT|//
1744+N+" "//|G_T_D_HOT|//
1745+N+" out_rgb = OOB_TXY(mem_t_x,mem_t_y "//|G_T_D_HOT|//
1746+N+" , 101,101,101 "//|G_T_D_HOT|//
1747+N+" , 44, 44, 44);;"//|G_T_D_HOT|//
1748+N+" }else if( oob_neg_txy ){ //:-----://"//|G_T_D_HOT|//
1749+N+" "//|G_T_D_HOT|//
1750+N+" out_rgb = OOB_TXY(mem_t_x,mem_t_y "//|G_T_D_HOT|//
1751+N+" , 123,123,123 "//|G_T_D_HOT|//
1752+N+" , 55, 55, 55);;"//|G_T_D_HOT|//
1753+N+" }else if( oob_pos_txy ){ //:-----://"//|G_T_D_HOT|//
1754+N+" "//|G_T_D_HOT|//
1755+N+" out_rgb = OOB_TXY(mem_t_x,mem_t_y "//|G_T_D_HOT|//
1756+N+" , 234,234,234 "//|G_T_D_HOT|//
1757+N+" , 66, 66, 66);;"//|G_T_D_HOT|//
1758+N+" }else if( use_hot ){ //:-----://"//|G_T_D_HOT|//
1759+N+" //: Sample from isolated memory ://"//|G_T_D_HOT|//
1760+N+" //: because the memory you are ://"//|G_T_D_HOT|//
1761+N+" //: targeting is hot swapped out. ://"//|G_T_D_HOT|//
1762+N+" "//|G_T_D_HOT|//
1763+N+" int iso_t_x = mem_t_x + 0; "//|G_T_D_HOT|//
1764+N+" int iso_t_y = mem_t_y + 0; "//|G_T_D_HOT|//
1765+N+" "//|G_T_D_HOT|//
1766+N+" out_rgb = Get_Tex_iso_mem( "//|G_T_D_HOT|//
1767+N+" /**/ iso_t_x "//|G_T_D_HOT|//
1768+N+" /**/ , iso_t_y );; "//|G_T_D_HOT|//
1769+N+" "//|G_T_D_HOT|//
1770+N+" }else if( not_hot ){ //:-----://"//|G_T_D_HOT|//
1771+N+" "//|G_T_D_HOT|//
1772+N+" "//|G_T_D_HOT|//
1773+N+" "//|G_T_D_HOT|//
1774+N+" //:Offset the memory location to :// "//|G_T_D_HOT|//
1775+N+" //:The correct 512-x-512 section :// "//|G_T_D_HOT|//
1776+N+" //:of the master memory (mam_mem):// "//|G_T_D_HOT|//
1777+N+" "//|G_T_D_HOT|//
1778+N+" //:________________:SC[GLSL_ITXY]:// "//|G_T_D_HOT|//
1779+N+" #define DEX_STARTS_FROM_ONE ( 1 ) // "//|G_T_D_HOT|//
1780+N+" #define INN_DEX ( inn_hot ) //:// "//|G_T_D_HOT|//
1781+N+" #define INN_WID ( san_hot ) //:// "//|G_T_D_HOT|//
1782+N+" //:- - - - - - - -- - - - - - - -:// "//|G_T_D_HOT|//
1783+N+" #if( DEX_STARTS_FROM_ONE > 0 ) // "//|G_T_D_HOT|//
1784+N+" #define DEX ( INN_DEX - 1 )//:// "//|G_T_D_HOT|//
1785+N+" #define WID ( INN_WID )//:// "//|G_T_D_HOT|//
1786+N+" #else //:// "//|G_T_D_HOT|//
1787+N+" #define DEX ( INN_DEX )//:// "//|G_T_D_HOT|//
1788+N+" #define WID ( INN_WID )//:// "//|G_T_D_HOT|//
1789+N+" #endif //:// "//|G_T_D_HOT|//
1790+N+" //:- - - - - - - -- - - - - - - -:// "//|G_T_D_HOT|//
1791+N+" #define T trunc //://////:// "//|G_T_D_HOT|//
1792+N+" int h_y = ( DEX /( WID ) ); "//|G_T_D_HOT|//
1793+N+" int h_x = ( DEX -( h_y*WID ) ); "//|G_T_D_HOT|//
1794+N+" #undef WID //://///////////:// "//|G_T_D_HOT|//
1795+N+" #undef DEX //://///////////:// "//|G_T_D_HOT|//
1796+N+" #undef T //://///////////:// "//|G_T_D_HOT|//
1797+N+" #undef INN_DEX //://///////////:// "//|G_T_D_HOT|//
1798+N+" #undef INN_WID //://///////////:// "//|G_T_D_HOT|//
1799+N+" #undef DEX_STARTS_FROM_ONE //://:// "//|G_T_D_HOT|//
1800+N+" //:________________:SC[GLSL_ITXY]:// "//|G_T_D_HOT|//
1801+N+" //:// "//|G_T_D_HOT|//
1802+N+" int o_x =( h_x * SAN_ISO );//:// "//|G_T_D_HOT|//
1803+N+" int o_y =( h_y * SAN_ISO );//:// "//|G_T_D_HOT|//
1804+N+" //:// "//|G_T_D_HOT|//
1805+N+" int mam_t_x =( mem_t_x + o_x );//:// "//|G_T_D_HOT|//
1806+N+" int mam_t_y =( mem_t_y + o_y );//:// "//|G_T_D_HOT|//
1807+N+" //:// "//|G_T_D_HOT|//
1808+N+" out_rgb = Get_Tex_mam_mem( //:// "//|G_T_D_HOT|//
1809+N+" /**/ mam_t_x //:// "//|G_T_D_HOT|//
1810+N+" /**/ , mam_t_y );; //:// "//|G_T_D_HOT|//
1811+N+" //:// "//|G_T_D_HOT|//
1812+N+" }else{ //:---------------------:-----:// "//|G_T_D_HOT|//
1813+N+" //:WRONG:EDCL:(EXPECTED_DEAD_CODE_LINE) "//|G_T_D_HOT|//
1814+N+" //:// "//|G_T_D_HOT|//
1815+N+" //:// "//|G_T_D_HOT|//
1816+N+" out_rgb = OOB_TXY( //:// "//|G_T_D_HOT|//
1817+N+" mem_t_x,mem_t_y //:// "//|G_T_D_HOT|//
1818+N+" ,128, 64, 32 //:// "//|G_T_D_HOT|//
1819+N+" , 32, 64, 128 );;//:// "//|G_T_D_HOT|//
1820+N+" //:// "//|G_T_D_HOT|//
1821+N+" };; //:--:---------------------:-----:// "//|G_T_D_HOT|//
1822+N+" "//|G_T_D_HOT|//
1823+N+" //:----------------://"//|G_T_D_HOT|//
1824+N+" return( out_rgb ); //:----------------://"//|G_T_D_HOT|//
1825+N+" //:----------------://"//|G_T_D_HOT|//
1826+N+"}//:[Get_tex_dex_hot / Get_tex_hot_mem]::://"//|G_T_D_HOT|//
1827
1828+N+"//:RotatedVersionOf[ Get_Tex_dex_hot ]/////://"//:HOT_ROT://
1829+N+"uvec4 Get_Tex_dex_hot_rot( //://///////////://"//:HOT_ROT://
1830+N+" int tilco_x /** tile::x **/ "//:HOT_ROT://
1831+N+", int tilco_y /** tile::y **/ "//:HOT_ROT://
1832+N+", int inn_hot /** dex_hot **/ "//:HOT_ROT://
1833+N+"){ "//:HOT_ROT://
1834+N+" "//:HOT_ROT://
1835+N+" float x1 = float(SAN_ISO) / 2.0; //:CENTER"//:HOT_ROT://
1836+N+" float y1 = float(SAN_ISO) / 2.0; //:CENTER"//:HOT_ROT://
1837+N+" "//:HOT_ROT://
1838+N+" float x2 = float( tilco_x ); "//:HOT_ROT://
1839+N+" float y2 = float( tilco_y ); "//:HOT_ROT://
1840+N+" "//:HOT_ROT://
1841+N+" float dx = x1-x2; "//:HOT_ROT://
1842+N+" float dy = y1-y2; "//:HOT_ROT://
1843+N+" float ar = atan( dy , dx ); "//:HOT_ROT://
1844+N+" "//:HOT_ROT://
1845+N+" float dxy = sqrt( "//:HOT_ROT://
1846+N+" pow(x1-x2 , 2.0) "//:HOT_ROT://
1847+N+" + pow(y1-y2 , 2.0) "//:HOT_ROT://
1848+N+" );; "//:HOT_ROT://
1849+N+" "//:HOT_ROT://
1850+N+" float f_t = float( gam_tim ) / 255.0; "//:HOT_ROT://
1851+N+" "//:HOT_ROT://
1852+N+" float f_x = x1 + cos( ar + f_t ) * dxy; "//:HOT_ROT://
1853+N+" float f_y = y1 + sin( ar + f_t ) * dxy; "//:HOT_ROT://
1854+N+" "//:HOT_ROT://
1855+N+" int i_x = int( f_x ); "//:HOT_ROT://
1856+N+" int i_y = int( f_y ); "//:HOT_ROT://
1857+N+" "//:HOT_ROT://
1858+N+" "//:HOT_ROT://
1859+N+" uvec4 out_rgb = Get_Tex_dex_hot( "//:HOT_ROT://
1860+N+" i_x /** tile::x **/ "//:HOT_ROT://
1861+N+" , i_y /** tile::y **/ "//:HOT_ROT://
1862+N+" , inn_hot /** dex_hot **/ "//:HOT_ROT://
1863+N+" );; "//:HOT_ROT://
1864+N+" "//:HOT_ROT://
1865+N+" return( out_rgb ); "//:HOT_ROT://
1866+N+"} //://////////////////////////////////////://"//:HOT_ROT://
1867
1868+N+"//:////////////////////////////////////////://"//[HOT_MEM]//
1869+N+"//:----------------------------------------://"//[HOT_MEM]//
1870+N+"//:Sample from whatever 512-x-512 region//:://"//[HOT_MEM]//
1871+N+"//:of memory is targeted by [ hot_dex ].//:://"//[HOT_MEM]//
1872+N+"//:If [ hot_dex === 0 ] then their //:://"//[HOT_MEM]//
1873+N+"//:is no hot swapping target and //:://"//[HOT_MEM]//
1874+N+"//:sample from [ iso_mem ] instead //:://"//[HOT_MEM]//
1875+N+"//:of [ mam_mem ]. //:://"//[HOT_MEM]//
1876+N+"//:----------------------------------------://"//[HOT_MEM]//
1877+N+"uvec4 Get_Tex_hot_mem( //:://"//[HOT_MEM]//
1878+N+"/**/ int mem_t_x //:Memory:Tile_X :// //:://"//[HOT_MEM]//
1879+N+", int mem_t_y //:Memory:Tile_Y :// //:://"//[HOT_MEM]//
1880+N+"){ //:://"//[HOT_MEM]//
1881+N+" //:://"//[HOT_MEM]//
1882+N+" //:dye_out: Like [rgb_out],but //:://"//[HOT_MEM]//
1883+N+" //:pixel values in 0-255 range. //:://"//[HOT_MEM]//
1884+N+" uvec4 dye_out; //:://"//[HOT_MEM]//
1885+N+" //:://"//[HOT_MEM]//
1886+N+" //:get_hot_swapping_index_uniform::::::://"//[HOT_MEM]//
1887+N+" int inn_hot =int( dex_hot ); //:://"//[HOT_MEM]//
1888+N+" //:://"//[HOT_MEM]//
1889+N+" if( inn_hot >= DEX_HOT_MIN //:://"//[HOT_MEM]//
1890+N+" && inn_hot <= DEX_HOT_MAX //:://"//[HOT_MEM]//
1891+N+" ){ //:://"//[HOT_MEM]//
1892+N+" //:If we have a valid hot swapping ://"//[HOT_MEM]//
1893+N+" //:index [ 1 - 16 ], we will sample://"//[HOT_MEM]//
1894+N+" //:data from that sub-sector ------://"//[HOT_MEM]//
1895+N+" //:of [ mam_mem ]. ----------------://"//[HOT_MEM]//
1896+N+" dye_out=( //:://"//[HOT_MEM]//
1897+N+" Get_Tex_dex_hot( //:://"//[HOT_MEM]//
1898+N+" /**/ mem_t_x //:Memory:Tile_X---://"//[HOT_MEM]//
1899+N+" , mem_t_y //:Memory:Tile_Y---://"//[HOT_MEM]//
1900+N+" , inn_hot //: dex_hot ---://"//[HOT_MEM]//
1901+N+" ));; //:://"//[HOT_MEM]//
1902+N+" }else //:://"//[HOT_MEM]//
1903+N+" if( 0 == inn_hot ){ //:://"//[HOT_MEM]//
1904+N+" //:- If no hot swapping index is---://"//[HOT_MEM]//
1905+N+" //:- loaded, we will sample from---://"//[HOT_MEM]//
1906+N+" //:- [ iso_mem ]. ---://"//[HOT_MEM]//
1907+N+" dye_out=( //:://"//[HOT_MEM]//
1908+N+" Get_Tex_iso_mem( //:://"//[HOT_MEM]//
1909+N+" /**/ mem_t_x //:Memory:Tile_X---://"//[HOT_MEM]//
1910+N+" , mem_t_y //:Memory:Tile_Y---://"//[HOT_MEM]//
1911+N+" ));; //:://"//[HOT_MEM]//
1912+N+" }else{ //:://"//[HOT_MEM]//
1913+N+" //:://"//[HOT_MEM]//
1914+N+" //:Create an error pattern in our -://"//[HOT_MEM]//
1915+N+" //:data. May only be obvious when -://"//[HOT_MEM]//
1916+N+" //:using a [raw_data_view] shader. ://"//[HOT_MEM]//
1917+N+" dye_out = OOB_TXY( //:://"//[HOT_MEM]//
1918+N+" mem_t_x //:TILE_COORD:X ---://"//[HOT_MEM]//
1919+N+" , mem_t_y //:TILE_COORD:Y ---://"//[HOT_MEM]//
1920+N+" , 121,131,141 //:EVEN_CHECKER ---://"//[HOT_MEM]//
1921+N+" , 212,232,242 //:ODD__CHECKER ---://"//[HOT_MEM]//
1922+N+" );; //:://"//[HOT_MEM]//
1923+N+" };; //:://"//[HOT_MEM]//
1924+N+" //:://"//[HOT_MEM]//
1925+N+" return( dye_out ); //:://"//[HOT_MEM]//
1926+N+" //:://"//[HOT_MEM]//
1927+N+"}//:[Get_Tex_hot_mem]:_____________________://"//[HOT_MEM]//
1928+N+"//::[Get_Tex_hot_mem]://///////////////////://"//[HOT_MEM]//
1929
1930//://////////////////////////////////////////////////////////://
1931
1932+N+"//:GR:Get_Rectangle:(BELOW):-------------------://"//[G_R]//
1933+N+"//:GRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[G_R]//
1934+N+"//: ://"//[G_R]//
1935+N+"//: FUNCTION_NAMES_IDENTICAL_TO_CPU_SIDE_CODE! ://"//[G_R]//
1936+N+"//: ://"//[G_R]//
1937+N+"//:GRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[G_R]//
1938+N+"/*-*/uvec4 Get_GLOBVAR_rec_vpc( /** void **/ ){ "//[G_R]//
1939+N+" "//[G_R]//
1940+N+" uvec4 rec_vpc =uvec4( "//[G_R]//
1941+N+" TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_x_0 )"//[G_R]//
1942+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_x_1 )"//[G_R]//
1943+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_y_0 )"//[G_R]//
1944+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_y_1 )"//[G_R]//
1945+N+" );; "//[G_R]//
1946+N+" return( rec_vpc ); "//[G_R]//
1947+N+" "//[G_R]//
1948+N+"}/**/uvec4 Get_GLOBVAR_rec_vp0( /** void **/ ){ "//[G_R]//
1949+N+" "//[G_R]//
1950+N+" uvec4 rec_vp0 =uvec4( "//[G_R]//
1951+N+" TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_x_0 )"//[G_R]//
1952+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_x_1 )"//[G_R]//
1953+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_y_0 )"//[G_R]//
1954+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_y_1 )"//[G_R]//
1955+N+" );; "//[G_R]//
1956+N+" return( rec_vp0 ); "//[G_R]//
1957+N+" "//[G_R]//
1958+N+"}/**/uvec4 Get_GLOBVAR_rec_vp1( /** void **/ ){ "//[G_R]//
1959+N+" "//[G_R]//
1960+N+" uvec4 rec_vp1 =uvec4( "//[G_R]//
1961+N+" TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_x_0 )"//[G_R]//
1962+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_x_1 )"//[G_R]//
1963+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_y_0 )"//[G_R]//
1964+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_y_1 )"//[G_R]//
1965+N+" );; "//[G_R]//
1966+N+" return( rec_vp1 ); "//[G_R]//
1967+N+"}/**/uvec4 Get_GLOBVAR_rec_vp2( /** void **/ ){ "//[G_R]//
1968+N+" "//[G_R]//
1969+N+" uvec4 rec_vp2 =uvec4( "//[G_R]//
1970+N+" TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_x_0 )"//[G_R]//
1971+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_x_1 )"//[G_R]//
1972+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_y_0 )"//[G_R]//
1973+N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_y_1 )"//[G_R]//
1974+N+" );; "//[G_R]//
1975+N+" return( rec_vp2 ); "//[G_R]//
1976+N+"} "//[G_R]//
1977+N+"//:GRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[G_R]//
1978+N+" "//|C_M|//
1979+N+"//:////////////////////////////////////////////://"//|C_M|//
1980+N+" "//|C_M|//
1981+N+"//:CM:Convience_Methods: "//|C_M|//
1982+N+"//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://"//|C_M|//
1983+N+"//: Really better to calculate yourself seeing://"//|C_M|//
1984+N+"//: how getting width and height is 8 texture ://"//|C_M|//
1985+N+"//: fetches instead of 4 because has to call ://"//|C_M|//
1986+N+"//: getter TWICE. TWICE because I can't think ://"//|C_M|//
1987+N+"//: of scenario where I would be using only ://"//|C_M|//
1988+N+"//: [ VP0_WID ] But not [ VP0_HIG ] ://"//|C_M|//
1989+N+"//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://"//|C_M|//
1990+N+"/*-*/float Get_VP0_WID_f32(){ "//|C_M|//
1991+N+" uvec4 rec_vp0 = Get_GLOBVAR_rec_vp0( ); "//|C_M|//
1992+N+" return(float( uint( 1 ) "//|C_M|//
1993+N+" + rec_vp0.y "//|C_M|//
1994+N+" - rec_vp0.x "//|C_M|//
1995+N+" ));;//[VP0_WID]// "//|C_M|//
1996+N+"}/**/float Get_VP0_HIG_f32(){ "//|C_M|//
1997+N+" uvec4 rec_vp0 = Get_GLOBVAR_rec_vp0( ); "//|C_M|//
1998+N+" return(float( uint(1) "//|C_M|//
1999+N+" + rec_vp0.w "//|C_M|//
2000+N+" - rec_vp0.z "//|C_M|//
2001+N+" ));; "//|C_M|//
2002+N+"} "//|C_M|//
2003+N+"//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://"//|C_M|//
2004+N+" "//|C_M|//
2005+N+"//:////////////////////////////////////////////://"//|C_M|//
2006+N+"//:[glsl_main]:::::::::::::::::::::::::::::::::://"//[H_M]//
2007+N+"void main(){ if( has_mem <= uint(0) ){ //://///://"//[H_M]//
2008+N+" "//[H_M]//
2009+N+" //:Default_Gradient_If_Textures_Not_Loaded: "//[H_M]//
2010+N+" pix_fra = vec4( pix_ver , 0.5 ); "//[H_M]//
2011+N+" "//[H_M]//
2012+N+"}else{ //:////////////////////////////////////://"//[H_M]//
2013+N+"if( uint(0) == ren_mod ){ //://////////////////://"//| 0 |//
2014+N+" "//| 0 |//
2015+N+" //: If render mode is zero(0), we will use ://"//| 0 |//
2016+N+" //: a default shader that will show us what://"//| 0 |//
2017+N+" //: is on the iso_mem memory block. ://"//| 0 |//
2018+N+" //"//| 0 |//
2019+N+" //"//| 0 |//
2020+N+" uint x_0; //"//| 0 |//
2021+N+" uint x_1; //"//| 0 |//
2022+N+" uint y_0; //"//| 0 |//
2023+N+" uint y_1; //"//| 0 |//
2024+N+" int vpc_wid; //"//| 0 |//
2025+N+" int vpc_hig; //"//| 0 |//
2026+N+" int iso_wid; //"//| 0 |//
2027+N+" int iso_hig; //"//| 0 |//
2028+N+" int mam_wid; //"//| 0 |//
2029+N+" int mam_hig; //"//| 0 |//
2030+N+" //"//| 0 |//
2031+N+" #define X_0 (TAU_001_GLOBVAR_rec_vpc_x_0) //"//| 0 |//
2032+N+" #define X_1 (TAU_001_GLOBVAR_rec_vpc_x_1) //"//| 0 |//
2033+N+" x_0 = TAU_001_U32( X_0 ); //"//| 0 |//
2034+N+" x_1 = TAU_001_U32( X_1 ); //"//| 0 |//
2035+N+" #undef X_0 //"//| 0 |//
2036+N+" #undef X_1 //"//| 0 |//
2037
2038
2039+N+" #define Y_0 (TAU_001_GLOBVAR_rec_vpc_y_0) //"//| 0 |//
2040+N+" #define Y_1 (TAU_001_GLOBVAR_rec_vpc_y_1) //"//| 0 |//
2041+N+" y_0 = TAU_001_U32( Y_0 ); //"//| 0 |//
2042+N+" y_1 = TAU_001_U32( Y_1 ); //"//| 0 |//
2043+N+" #undef Y_0 //"//| 0 |//
2044+N+" #undef Y_1 //"//| 0 |//
2045
2046
2047
2048
2049+N+" //"//| 0 |//
2050+N+" vpc_wid =( int( x_1 - x_0 ) + int( 1 ) ); //"//| 0 |//
2051+N+" vpc_hig =( int( y_1 - y_0 ) + int( 1 ) ); //"//| 0 |//
2052+N+" iso_wid =( SAN_ISO ); //"//| 0 |//
2053+N+" iso_hig =( SAN_ISO ); //"//| 0 |//
2054+N+" mam_wid =( SAN_MAM ); //"//| 0 |//
2055+N+" mam_hig =( SAN_MAM ); //"//| 0 |//
2056+N+" //"//| 0 |//
2057+N+" //:Calculate_On_Screen_Pixel_Coordinates:::://"//| 0 |//
2058+N+" float f_x = gl_FragCoord.x; //"//| 0 |//
2059+N+" float f_y = gl_FragCoord.y; //"//| 0 |//
2060+N+" int vpc_p_x = int( floor( f_x - 0.5 ) ); //"//| 0 |//
2061+N+" int vpc_p_y = int( floor( f_y - 0.5 ) ); //"//| 0 |//
2062+N+" //: |<--------- FLIP_Y_AXIS ------->| ://"//| 0 |//
2063+N+" vpc_p_y = (vpc_hig - 1 - vpc_p_y); //"//| 0 |//
2064+N+" //"//| 0 |//
2065+N+" float r = 0.2; //"//| 0 |//
2066+N+" float g = 0.2; //"//| 0 |//
2067+N+" float b = 0.2; //"//| 0 |//
2068+N+" float a = 1.0; //"//| 0 |//
2069+N+" //"//| 0 |//
2070+N+" #define F float //:FFFFFFFFFFFFFFFFFFFFFFFF://"//| 0 |//
2071+N+" #define I int //:IIIIIIIIIIIIIIIIIIIIIIII://"//| 0 |//
2072+N+" "//| 0 |//
2073+N+" float vpc_mtx_iso =(1.0//:[A]----->[B]:::::://"//| 0 |//
2074+N+" * float( iso_wid ) //:DST/DEST/[B]:::::://"//| 0 |//
2075+N+" / float( vpc_wid ) //:SRC/FROM/[A]:::::://"//| 0 |//
2076+N+" );; //"//| 0 |//
2077+N+" float vpc_mty_iso =(1.0//:[A]----->[B]:::::://"//| 0 |//
2078+N+" * float( iso_hig ) //:DST/DEST/[B]:::::://"//| 0 |//
2079+N+" / float( vpc_hig ) //:SRC/FROM/[A]:::::://"//| 0 |//
2080+N+" );; //"//| 0 |//
2081
2082
2083+N+" //"//| 0 |//
2084+N+" float vpc_mtx_mam =(1.0//:[A]----->[B]:::::://"//| 0 |//
2085+N+" * float( mam_wid ) //:DST/DEST/[B]:::::://"//| 0 |//
2086+N+" / float( vpc_wid ) //:SRC/FROM/[A]:::::://"//| 0 |//
2087+N+" );; //"//| 0 |//
2088+N+" //"//| 0 |//
2089+N+" float vpc_mty_mam =(1.0//:[A]----->[B]:::::://"//| 0 |//
2090+N+" * float( mam_hig ) //:DST/DEST/[B]:::::://"//| 0 |//
2091+N+" / float( vpc_hig ) //:SRC/FROM/[A]:::::://"//| 0 |//
2092+N+" );; //"//| 0 |//
2093
2094
2095
2096
2097
2098+N+" //"//| 0 |//
2099+N+" //"//| 0 |//
2100+N+" // uvec4 intrgba = Get_Tex_mam_mem_rot //"//| 0 |//
2101+N+" // uvec4 intrgba = Get_Tex_hot_mem //"//| 0 |//
2102+N+" uvec4 intrgba = Get_Tex_iso_mem //"//| 0 |//
2103+N+" ( //"//| 0 |//
2104+N+" /**/ I( F(vpc_p_x) * vpc_mtx_iso ) //"//| 0 |//
2105+N+" , I( F(vpc_p_y) * vpc_mty_iso ) //"//| 0 |//
2106+N+" );; //"//| 0 |//
2107+N+" //"//| 0 |//
2108+N+" //- uvec4 intrgba = Get_Tex_iso_mem_rot( -//"//| 0 |//
2109+N+" //- /**/ I( F(vpc_p_x) * vpc_mto_mam ) -//"//| 0 |//
2110+N+" //- , I( F(vpc_p_y) * vpc_mto_mam ) -//"//| 0 |//
2111+N+" //- );; -//"//| 0 |//
2112+N+" "//| 0 |//
2113+N+" #undef F //:----:FFFFFFFFFFFFFFFFFFFFFFFF://"//| 0 |//
2114+N+" #undef I //:----:IIIIIIIIIIIIIIIIIIIIIIII://"//| 0 |//
2115+N+" //"//| 0 |//
2116+N+" r = float( intrgba.x ) / 255.0; //"//| 0 |//
2117+N+" g = float( intrgba.y ) / 255.0; //"//| 0 |//
2118+N+" b = float( intrgba.z ) / 255.0; //"//| 0 |//
2119+N+" a = float( intrgba.w ) / 255.0; //"//| 0 |//
2120+N+" //"//| 0 |//
2121+N+" pix_fra = vec4( r,g,b,a); //"//| 0 |//
2122+N+" //"//| 0 |//
2123+N+"}else //"//| 0 |//
2124+N+"if( ren_mod > uint(0) ){ //:///////////////////://"//+ 0 +//
2125+N+"//:AE:All_Editors:VarAccessibleToAnyEdi:(BELOW)://"//[A_E]//
2126+N+"//:AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE://"//[A_E]//
2127+N+" "//[A_E]//
2128+N+" //:VR:ViewPortRectangles: "//[A_E]//
2129+N+" //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://"//[A_E]//
2130+N+" #define F float //:FFFFFFFFFFFFFFFFFF://"//[A_E]//
2131+N+" #define T TAU_001_U32 //:TTTTTTTTTTTTTTTTTT://"//[A_E]//
2132+N+" REC_INC rec_vpc = REC_INC( "//[A_E]//
2133+N+" F( T( TAU_001_GLOBVAR_rec_vpc_x_0 ) ) "//[A_E]//
2134+N+" , F( T( TAU_001_GLOBVAR_rec_vpc_x_1 ) ) "//[A_E]//
2135+N+" , F( T( TAU_001_GLOBVAR_rec_vpc_y_0 ) ) "//[A_E]//
2136+N+" , F( T( TAU_001_GLOBVAR_rec_vpc_y_1 ) ) "//[A_E]//
2137+N+" );; "//[A_E]//
2138+N+" REC_INC rec_vp0 = REC_INC( "//[A_E]//
2139+N+" F( T( TAU_001_GLOBVAR_rec_vp0_x_0 ) ) "//[A_E]//
2140+N+" , F( T( TAU_001_GLOBVAR_rec_vp0_x_1 ) ) "//[A_E]//
2141+N+" , F( T( TAU_001_GLOBVAR_rec_vp0_y_0 ) ) "//[A_E]//
2142+N+" , F( T( TAU_001_GLOBVAR_rec_vp0_y_1 ) ) "//[A_E]//
2143+N+" );; "//[A_E]//
2144+N+" REC_INC rec_vp1 = REC_INC( "//[A_E]//
2145+N+" F( T( TAU_001_GLOBVAR_rec_vp1_x_0 ) ) "//[A_E]//
2146+N+" , F( T( TAU_001_GLOBVAR_rec_vp1_x_1 ) ) "//[A_E]//
2147+N+" , F( T( TAU_001_GLOBVAR_rec_vp1_y_0 ) ) "//[A_E]//
2148+N+" , F( T( TAU_001_GLOBVAR_rec_vp1_y_1 ) ) "//[A_E]//
2149+N+" );; "//[A_E]//
2150+N+" REC_INC rec_vp2 = REC_INC( "//[A_E]//
2151+N+" F( T( TAU_001_GLOBVAR_rec_vp2_x_0 ) ) "//[A_E]//
2152+N+" , F( T( TAU_001_GLOBVAR_rec_vp2_x_1 ) ) "//[A_E]//
2153+N+" , F( T( TAU_001_GLOBVAR_rec_vp2_y_0 ) ) "//[A_E]//
2154+N+" , F( T( TAU_001_GLOBVAR_rec_vp2_y_1 ) ) "//[A_E]//
2155+N+" );; "//[A_E]//
2156+N+" #undef F //://////////:FFFFFFFFFFFFFFFFFF://"//[A_E]//
2157+N+" #undef T //://////////:TTTTTTTTTTTTTTTTTT://"//[A_E]//
2158+N+" //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://"//[A_E]//
2159+N+" "//[A_E]//
2160+N+"//:AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE://"//[A_E]//
2161+N+"//:AE:All_Editors:VarAccessibleToAnyEdi:(ABOVE)://"//[A_E]//
2162+N+ //|FSC|//
2163+N+";;;;;;if( uint(0) == edi_mod ){ //:00000000000://"//|FSC|//
2164+N+""+AA2_Get_edi_sha_src( 0 )+" "//|FSC|//
2165+N+"" //|FSC|//
2166+N+"}else if( uint(1) == edi_mod ){ //:11111111111://"//|FSC|//
2167+N+""+AA2_Get_edi_sha_src( 1 )+" "//|FSC|//
2168+N+"" //|FSC|//
2169+N+"}else if( uint(2) == edi_mod ){ //:22222222222://"//|FSC|//
2170+N+""+AA2_Get_edi_sha_src( 2 )+" "//|FSC|//
2171+N+"" //|FSC|//
2172+N+"}else if( uint(3) == edi_mod ){ //:33333333333://"//|FSC|//
2173+N+""+AA2_Get_edi_sha_src( 3 )+" "//|FSC|//
2174+N+"" //|FSC|//
2175+N+"};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"//|FSC|//
2176+N+"};;};;}//:[main]://////////////////////////////://"//|FSC|//
2177);;//:its_a_string
2178
2179 var fra_src=(""/**fra:[ fragment / fag_src ]**/
2180
2181 + its_a_string
2182
2183 );;//:[fra_src]/////////////////////////////////[fra_src]://
2184 //://///////////////////////////////////SC[ icogstep_01 ]://
2185 //://///////////////////////////////////SC[ icogstep_02 ]://
2186 var can_htm = document.createElement('canvas' /** can **/ );
2187 var bod =( document.body );
2188 if(!bod){
2189 bod = document.createElement("BODY");
2190 document.body=( bod );
2191 };;
2192 document.body.appendChild( can_htm );
2193 //://///////////////////////////////////SC[ icogstep_02 ]://
2194 //:////////////////////////////////////:SC[ icogstep_03 ]://
2195 can_htm.width =( GLO_CFG.INI_VPC_WID ); //:[ 512 ]
2196 can_htm.height=( GLO_CFG.INI_VPC_HIG ); //:[ 512 ]
2197 //:////////////////////////////////////:SC[ icogstep_03 ]://
2198 //://///////////////////////////////////SC[ icogstep_04 ]://
2199 var gl =(0
2200 || can_htm.getContext("webgl2")
2201 //: These context types likely wont support gl 300 es.
2202 //: so commenting them out.
2203 //: || can_htm.getContext("webgl")
2204 //: || can_htm.getContext("experimental-webgl")
2205 || alert("[NO_GL_FOR_YOU]")
2206 );;//://///////////////////////////////:SC[ icogstep_04 ]://
2207 //:////////////////////////////////////:SC[ icogstep_05 ]://
2208 var GL_CLEARCOLOR={
2209 //:Named "COLOR_BUFFER_BIT" but is not
2210 //:the "COLOR_BUFFER_BIT" but the color used when
2211 //:supplying "COLOR_BUFFER_BIT"
2212 COLOR_BUFFER_BIT:{ /**CLEARCOLOR.COLOR_BUFFER **/
2213 R: 255
2214 , G: 128
2215 , B: 64
2216 , A: 255
2217 }
2218 ,
2219 //:Named "DEPTH_BUFFER_BIT" but is not
2220 //:the "DEPTH_BUFFER_BIT" but the color used when
2221 //:supplying "DEPTH_BUFFER_BIT"
2222 DEPTH_BUFFER_BIT:{ /**CLEARCOLOR.DEPTH_BUFFER **/
2223 R: 0
2224 , G: 0
2225 , B: 0
2226 , A: 255
2227 }
2228 };;Object.seal( GL_CLEARCOLOR );
2229
2230 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
2231 //:Clear Color Buffer:
2232 gl.clearColor( /** glClearColor **/
2233 GL_CLEARCOLOR.COLOR_BUFFER_BIT.R
2234 , GL_CLEARCOLOR.COLOR_BUFFER_BIT.G
2235 , GL_CLEARCOLOR.COLOR_BUFFER_BIT.B
2236 , GL_CLEARCOLOR.COLOR_BUFFER_BIT.A
2237 );;
2238 gl.clear( 0
2239 | gl.COLOR_BUFFER_BIT
2240 );;
2241
2242 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
2243
2244 //:Clear Depth Buffer:
2245 gl.clearColor( /** glClearColor **/
2246 GL_CLEARCOLOR.DEPTH_BUFFER_BIT.R
2247 , GL_CLEARCOLOR.DEPTH_BUFFER_BIT.G
2248 , GL_CLEARCOLOR.DEPTH_BUFFER_BIT.B
2249 , GL_CLEARCOLOR.DEPTH_BUFFER_BIT.A
2250 );;
2251 gl.clear( 0
2252 | gl.DEPTH_BUFFER_BIT
2253 );;
2254 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
2255
2256 //:////////////////////////////////////:SC[ icogstep_05 ]://
2257 //://///////////////////////////////////SC[ icogstep_06 ]://
2258
2259 //: ver_pro:VERtex___PROgram / ver_pog / vtx_pog
2260 //: fra_pro:FRAgment_PROgram / fag_pog / frg_pog
2261 var ver_pro = gl.createShader( gl. VERTEX_SHADER );
2262 var fra_pro = gl.createShader( gl.FRAGMENT_SHADER );
2263
2264 //:Shader_Pack: (AKA: sad_pak | sad_pay | sha_pay )
2265 //:Shader_Pack: (AKA: Shader Payload ____________ )
2266 var sha_pak=[
2267 { //:AKA[ sad_typ,sad_src,sad_pro,sad_pog ]
2268 //:AKA[ ver_sad,ver_sor,ver_pog,vtx_pog ]
2269 sha_typ:"ver_sha" //:Shader_Type :Vertex
2270 , sha_src: ver_src //:Shader_Source
2271 , sha_pro: ver_pro //:Shader_Program
2272 }
2273 ,
2274 {
2275 //:AKA[ sad_typ,sad_src,sad_pro,sad_pog ]
2276 //:AKA[ fag_sad,fag_sor,fag_pog,frg_pog ]
2277 sha_typ:"fra_sha" //:Shader_Type :Fragment
2278 , sha_src: fra_src //:Shader_Source
2279 , sha_pro: fra_pro //:Shader_Program
2280 }
2281 ];;
2282 for( i = 0; i < sha_pak.length; i++ ){
2283 var sha_cur = ( sha_pak[ i ] ); //:ShaderCurrent
2284
2285 gl.shaderSource(
2286 sha_cur.sha_pro //:[ver_pro | fra_pro ]::::::://
2287 , sha_cur.sha_src //:[ver_src | fra_src ]::::::://
2288 );;
2289
2290 gl.compileShader( sha_cur.sha_pro );
2291
2292 if( false
2293 ==
2294 gl.getShaderParameter(
2295 sha_cur.sha_pro //:[ ver_pro | fra_pro ]:://
2296 , gl.COMPILE_STATUS
2297 )
2298 ){
2299 var inf_log=( gl.getShaderInfoLog(
2300
2301 sha_cur.sha_pro //:[ ver_pro | fra_pro ]:://
2302
2303 ));;
2304 console.log( inf_log /** info_log **/ );
2305 throw( "[ICOG_JS:COMPILE_SHADER_FAILURE]" );
2306 };;
2307 };;//:NEXT[ sha_cur ]
2308
2309 //://///////////////////////////////////SC[ icogstep_06 ]://
2310 //://///////////////////////////////////SC[ icogstep_07 ]://
2311 var all_pro = gl.createProgram(); //:AKA[ all_pog ]
2312 gl.attachShader( all_pro, ver_pro ); //:Vertex___Program
2313 gl.attachShader( all_pro, fra_pro ); //:Fragment_Program
2314
2315 gl.linkProgram( all_pro );
2316 if( false
2317 ==
2318 gl.getProgramParameter(all_pro,gl.LINK_STATUS)
2319 ){
2320 var inf_log=( gl.getProgramInfoLog(
2321
2322 all_pro
2323
2324 ));;
2325 console.log( inf_log /** info_log **/ );
2326 throw( "[ICOG_JS:LINK_PROGRAM_FAILURE]" );
2327 };;
2328 gl.validateProgram( all_pro ); //:AKA[ all_pog ]
2329 if(false
2330 ==
2331 gl.getProgramParameter(all_pro,gl.VALIDATE_STATUS)
2332 ){
2333 var inf_log=( gl.getProgramInfoLog(
2334
2335 all_pro
2336
2337 ));;
2338 console.log( inf_log /** info_log **/ );
2339 throw( "[ICOG_JS:PROGRAM_VALIDATION_FAILURE]" );
2340 };;
2341 //://///////////////////////////////////SC[ icogstep_07 ]://
2342 //://///////////////////////////////////SC[ icogstep_08 ]://
2343
2344 //: Create vertex data CPU side:
2345
2346 var RGBGRA =[ 0.5 , 0.5 , 0.5 ]; //:GREY
2347 var RGB__W =[ 1.0 , 1.0 , 1.0 ]; //:WHITE
2348 var RGB__K =[ 0.0 , 0.0 , 0.0 ]; //:BLACK
2349
2350 var RGB__R =[ 1.0 , 0.0 , 0.0 ]; //:RED
2351 var RGB__G =[ 0.0 , 1.0 , 0.0 ]; //:GREEN
2352 var RGB__B =[ 0.0 , 0.0 , 1.0 ]; //:BLUE
2353
2354 var RGB__M =[ 1.0 , 0.0 , 1.0 ]; //:MAGENTA(RED+BLUE)
2355 var RGB__Y =[ 1.0 , 1.0 , 0.0 ]; //:YELLOW( R+G )
2356 var RGBCEN =[ 0.5, 0.5 , 0.0 ]; //:HALF:(BLUE & RED)
2357
2358 var RGB_00= RGBCEN; //:B:TRI:CEN [ 0 , 0 ]
2359 var RGB_01= RGB__R; //:R:TRI:TOP [ + , + ]
2360 var RGB_02= RGB__K; //:W:TRI:TOP [ - , + ]
2361 var RGB_03= RGB__G; //:B:TRI:LEF [ - , - ]
2362 var RGB_04= RGB__Y; //:M:TRI:BOT [ + , - ]
2363 var RGB_05= RGB__R; //:R:TRI:BOT [ + , + ]
2364
2365 var ZER =(0 * 0.0);
2366 var POS =(0 + 1.0);
2367 var NEG =(0 - 1.0);
2368 var CEN =(0 * 0.0);
2369 var tri_arr =[ //: AKA[ arr_ver|arr_tri|ver_arr|tri_arr]
2370
2371 //:CENTER_VERTEX_IN_CENTER_OF_SCREEN:
2372 CEN, CEN , RGB_00[0], RGB_00[1],RGB_00[2]
2373
2374 //:TRI:TOP: (Via:TRIANGLE_FAN)
2375 , POS, POS , RGB_01[0], RGB_01[1],RGB_01[2]
2376 , NEG, POS , RGB_02[0], RGB_02[1],RGB_02[2]
2377
2378 //:TRI:LEF: (Via:TRIANGLE_FAN)
2379 , NEG, NEG , RGB_03[0], RGB_03[1],RGB_03[2]
2380
2381 //:TRI:BOT: (Via:TRIANGLE_FAN)
2382 , POS, NEG , RGB_04[0], RGB_04[1],RGB_04[2]
2383
2384 //:TRI:BOT: (Via:TRIANGLE_FAN)
2385 , POS, POS , RGB_05[0], RGB_05[1],RGB_05[2]
2386 ];;
2387 var tri_f3a =( new Float32Array( tri_arr ) );
2388
2389 //://///////////////////////////////////SC[ icogstep_08 ]://
2390 //://///////////////////////////////////SC[ icogstep_09 ]://
2391
2392 //: Upload data to GPU:
2393
2394 //: [ ver_vbo === tri_vbo ]
2395 var tri_vbo = gl.createBuffer( ); //:vbo:VertexBufferObject
2396 gl.bindBuffer(gl.ARRAY_BUFFER,tri_vbo);
2397 gl.bufferData(gl.ARRAY_BUFFER,tri_f3a,gl.STATIC_DRAW);
2398
2399 //://///////////////////////////////////SC[ icogstep_09 ]://
2400 //://///////////////////////////////////SC[ icogstep_10 ]://
2401
2402
2403 var NUM_COM,SIZ_COM,ver_pos,ver_col;
2404 { //:ANY_ORDER
2405
2406 //:Define the data-layout for [ tri_arr / tri_f3a ]:
2407 NUM_COM={ //:NumberOfComponentsPer:whatever
2408 ver_pos : 2 //:NumComponentsFor:VertexPosition
2409 , ver_col : 3 //:NumComponentsFor:VertexColor
2410 , ver_all : 5
2411 };;
2412 SIZ_COM={ //:Component_Sizes
2413 siz_flt : Float32Array.BYTES_PER_ELEMENT
2414 };;
2415
2416 //: att_loc(s):
2417 ver_pos = gl.getAttribLocation(all_pro,"ver_pos");
2418 ver_col = gl.getAttribLocation(all_pro,"ver_col");
2419
2420 } //:ANY_ORDER
2421 //://///////////////////////////////////SC[ icogstep_10 ]://
2422 //://///////////////////////////////////SC[ icogstep_11 ]://
2423 if(
2424 (0
2425 + NUM_COM.ver_pos
2426 + NUM_COM.ver_col
2427 )
2428 !=
2429 NUM_COM.ver_all
2430 ){
2431 throw("[DOESNT_ADD_UP]");
2432 };;
2433 //://///////////////////////////////////SC[ icogstep_11 ]://
2434 //://///////////////////////////////////SC[ icogstep_12 ]://
2435 { //:ANY_ORDER
2436
2437 gl.vertexAttribPointer(
2438 ver_pos
2439 , NUM_COM.ver_pos /** components_per_vertex **/
2440 , gl.FLOAT
2441 , gl.FALSE
2442 ,
2443 ( 1 //:ENTIRE_VERTEX_SIZE_NOT_JUST_SUB_COMPONENT
2444 * NUM_COM.ver_all //:NumberOfVerticies
2445 * SIZ_COM.siz_flt //:SizeOfVerticies
2446 * 1
2447 )
2448 , 0 /** initial_offset_into_data **/
2449 );;
2450
2451 gl.vertexAttribPointer(
2452 ver_col
2453 , NUM_COM.ver_col /** components_per_vertex **/
2454 , gl.FLOAT
2455 , gl.FALSE
2456 ,
2457 ( 1 //:ENTIRE_VERTEX_SIZE_NOT_JUST_SUB_COMPONENT
2458 * NUM_COM.ver_all //:NumberOfVerticies
2459 * SIZ_COM.siz_flt //:SizeOfVerticies
2460 * 1
2461 )
2462 ,
2463 //:Skipping over slots for : ver_pos
2464 //:so we can start at first: ver_col
2465 /** initial_offset_into_data **/
2466 (1
2467 * NUM_COM.ver_pos //:OFFSET_IN_BYTES
2468 * SIZ_COM.siz_flt //:OFFSET_IN_BYTES
2469 )
2470 );;
2471
2472 } //:ANY_ORDER
2473 //://///////////////////////////////////SC[ icogstep_12 ]://
2474 //://///////////////////////////////////SC[ icogstep_13 ]://
2475
2476 { //:ANY_ORDER
2477 gl.enableVertexAttribArray( ver_pos /** att_loc **/ );
2478 gl.enableVertexAttribArray( ver_col /** att_loc **/ );
2479 } //:ANY_ORDER
2480
2481 gl.useProgram( all_pro /** all_pog **/ );
2482
2483 //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
2484 //|Added this just in case gl context was not |//
2485 //|same size as viewport. This call seems to have|//
2486 //|no effect. CONCLUSION: gl Context snaps to |//
2487 //|canvas size when created. |//
2488 //|______________________________________________|//
2489 var can_wid = can_htm.width;
2490 var can_hig = can_htm.height;
2491
2492 //:DATE[2020_05_24]:ERROR_CHECK:////:////////////://
2493 //://////////////////////////////////////////////://
2494 //:SEE[ #CANVAS_SIZE_TROUBLE_SHOOTING# ]
2495 if( GLO_CFG.INI_VPC_WID != can_htm.width
2496 || GLO_CFG.INI_VPC_HIG != can_htm.height
2497 ){
2498 throw("[NOPE_NOPE:2020_05_24]");
2499 };;
2500 //://////////////////////////////////////////////://
2501
2502 gl.viewport(
2503 0 //:-------------- x --------------------://
2504 , 0 //:-------------- y --------------------://
2505 , GLO_CFG.INI_VPC_WID //:[ can_htm.WID | can_wid ]
2506 , GLO_CFG.INI_VPC_HIG //:[ can_htm.HIG | can_hig ]
2507 );;
2508
2509 var buf_wid = gl.drawingBufferWidth;
2510 var buf_hig = gl.drawingBufferHeight;
2511
2512 var size_fail=( 0 );
2513 if( can_wid != buf_wid ){
2514 size_fail++;
2515 console.log("[buf_wid!=can_wid]");
2516 };;
2517 if( can_hig != buf_hig ){
2518 size_fail++;
2519 console.log("[buf_hig!=can_hig]");
2520 };;
2521 if( size_fail > 0 ){
2522 throw("[size_fail]");
2523 }else{
2524 console.log("[size_pass]");
2525 };;
2526
2527 //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
2528
2529
2530 gl.drawArrays(
2531 gl.TRIANGLE_FAN
2532 , 0
2533 , 6
2534 );;
2535 //://///////////////////////////////////SC[ icogstep_13 ]://
2536
2537 //:Reserve variables on GPU
2538 //:side and return handles to them:
2539 //:[ ada_gra.iso_mem === GLO_DAT.ISO_MEM ]
2540 //:[ ada_gra.mam_mem === GLO_DAT.MAM_MEM ]
2541 ada_gra.iso_mem.tex_han = gl.createTexture(); //:uni_pix
2542 ada_gra.mam_mem.tex_han = gl.createTexture(); //:uni_pix
2543
2544 var dat_arr = [
2545 ada_gra.iso_mem //:<---type:uni_pix
2546 //:GLO_DAT.ISO_MEM
2547 //: {
2548 //: tex_han : GLO_DAT.ISO_MEM_tex_han
2549 //: , tex_lot : GLO_DAT.ISO_MEM_tex_lot
2550 //: , pix_arr : GLO_DAT.ISO_MEM_pix_arr
2551 //: , pix_wid : GLO_DAT.ISO_MEM_pix_wid | SAN_ISO
2552 //: , pix_hig : GLO_DAT.ISO_MEM_pix_hig | SAN_ISO
2553 //: , pix_com : 4 //:pixelarray_components
2554 //: , pix_nam : "iso_mem" //:pixelarray_name
2555 //: , sam_val : ( 0 - 8 ) //:sampler_value
2556 //: , sam_loc : ( 0 - 9 ) //:sampler_location
2557 //: , has_loc : ( 0 - 10 ) //:sampler_location_set
2558 //: }
2559 ,
2560 ada_gra.mam_mem //:<---type:uni_pix
2561 //:GLO_DAT.MAM_MEM
2562 //: {
2563 //: tex_han : GLO_DAT.MAM_MEM_tex_han
2564 //: , tex_lot : GLO_DAT.MAM_MEM_tex_lot
2565 //: , pix_arr : GLO_DAT.MAM_MEM_pix_arr
2566 //: , pix_wid : GLO_DAT.MAM_MEM_pix_wid | SAN_MAM
2567 //: , pix_hig : GLO_DAT.MAM_MEM_pix_hig | SAN_MAM
2568 //: , pix_com : 4 //:pixelarray_components
2569 //: , pix_nam : "mam_mem" //:pixelarray_name
2570 //: , sam_val : ( 0 - 8 ) //:sampler_value
2571 //: , sam_loc : ( 0 - 9 ) //:sampler_location
2572 //: , has_loc : ( 0 - 10 ) //:sampler_location_set
2573 //: }
2574 ];;
2575
2576 var dat_len = ( dat_arr.length );
2577
2578 //:Validate the data in dat_arr:
2579 for( var i = 0 ; i < dat_len ; i++ ){
2580
2581 if( dat_arr[ i ].pix_wid <= 0 ){
2582 throw("[INVALID:pix_wid]");
2583 };;
2584 if( dat_arr[ i ].pix_hig <= 0 ){
2585 throw("[INVALID:pix_hig]");
2586 };;
2587 if( dat_arr[ i ].pix_com <= 0 ){ //:AKA[ num_com ]
2588 throw("[INVALID:pix_com]");
2589 };;
2590
2591 //://////////////////////////////////////////////////://
2592 //:Expect data for pixel array to already be
2593 //:allocated, even if we haven't put any
2594 //:meaningful values into it yet.
2595 //://////////////////////////////////////////////////://
2596 var cur_pix_wid = dat_arr[ i ].pix_wid;
2597 var cur_pix_hig = dat_arr[ i ].pix_hig;
2598 var cur_pix_com = dat_arr[ i ].pix_com; //:AKA[num_com]
2599
2600 var exp_len=( 1
2601 * cur_pix_wid
2602 * cur_pix_hig
2603 * cur_pix_com //:AKA[ cur_num_com ]
2604 );;
2605 var got_len=( dat_arr[ i ].pix_arr.length );
2606 if( got_len != exp_len ){
2607 var err_dmm = ( "[ERR:DATA_MISMATCH]" );
2608 console.log( err_dmm );
2609 throw( err_dmm );
2610 };;
2611 //://////////////////////////////////////////////////://
2612
2613 };;
2614
2615 for( var i = 0 ; i < dat_len ; i++ ){
2616
2617 var uni_pix =( dat_arr[ i ] );
2618
2619 AA2_DebugFillPattern_Pyramid( uni_pix );
2620
2621 if( uni_pix.pix_nam == "mam_mem" ){
2622
2623 //:TODO: Fill areas of interest with patterns
2624 //:that can be located in shader code.
2625
2626 //: //:FILL_FIRST_TO_NOT_OVERWRITE_OUTLINE:
2627 //: AA2_DebugFillPattern_FloodFill(
2628 //: uni_pix
2629 //:
2630 //: , GLO_CFG.TAU_001_x0 //:( x_0 )TOP_LEF:INCLUSIVE
2631 //: , GLO_CFG.TAU_001_y0 //:( y_0 )TOP_LEF:INCLUSIVE
2632 //:
2633 //: , GLO_CFG.TAU_001_x1 //:( x_1 )BOT_RIG:INCLUSIVE
2634 //: , GLO_CFG.TAU_001_y1 //:( y_1 )BOT_RIG:INCLUSIVE
2635 //: );;
2636
2637 //:OUTLINE_AFTER_FILL_TO_OVERLAY_THE_OUTLINE:
2638 AA2_DebugFillPattern_OnePixelSolidOutline(
2639 uni_pix //:uniform_pixels (PixelContainer)
2640
2641 , GLO_CFG.TAU_001_x0 //:( x_0 )TOP_LEF:INCLUSIVE
2642 , GLO_CFG.TAU_001_y0 //:( y_0 )TOP_LEF:INCLUSIVE
2643
2644 , GLO_CFG.TAU_001_x1 //:( x_1 )BOT_RIG:INCLUSIVE
2645 , GLO_CFG.TAU_001_y1 //:( y_1 )BOT_RIG:INCLUSIVE
2646 );;
2647
2648 //:Outline the bottom-right memorycell:
2649 var tmp_rec = NEW_rec_inc( ); //:<--DeclareFileScoped
2650 tmp_rec.x_0 =(( GLO_CFG.SAN_ISO * 3 ) - 0) ;
2651 tmp_rec.y_0 =(( GLO_CFG.SAN_ISO * 3 ) - 0) ;
2652 tmp_rec.x_1 =(( GLO_CFG.SAN_ISO * 4 ) - 1) ;
2653 tmp_rec.y_1 =(( GLO_CFG.SAN_ISO * 4 ) - 1) ;
2654 AA2_DebugFillPattern_OnePixelSolidOutline(
2655 uni_pix //:uniform_pixels (PixelContainer)
2656
2657 , tmp_rec.x_0 + 0 //:( x_0 )BOU_LEF:(Top_Lef)
2658 , tmp_rec.y_0 + 0 //:( y_0 )BOU_TOP:(Top_Lef)
2659 , tmp_rec.x_1 - 0 //:( x_1 )BOU_RIG:(Bot_Rig)
2660 , tmp_rec.y_1 - 0 //:( y_1 )TOP_BOT:(Bot_Rig)
2661 );;
2662
2663 AA2_DebugFillPattern_OnePixelSolidOutline(
2664 uni_pix //:uniform_pixels (PixelContainer)
2665
2666 , tmp_rec.x_0 + 2 //:( x_0 )BOU_LEF:(Top_Lef)
2667 , tmp_rec.y_0 + 2 //:( y_0 )BOU_TOP:(Top_Lef)
2668 , tmp_rec.x_1 - 2 //:( x_1 )BOU_RIG:(Bot_Rig)
2669 , tmp_rec.y_1 - 2 //:( y_1 )TOP_BOT:(Bot_Rig)
2670 );;
2671
2672 AA2_DebugFillPattern_OnePixelSolidOutline(
2673 uni_pix //:uniform_pixels (PixelContainer)
2674
2675 , tmp_rec.x_0 + 16 //:( x_0 )BOU_LEF:(Top_Lef)
2676 , tmp_rec.y_0 + 16 //:( y_0 )BOU_TOP:(Top_Lef)
2677 , tmp_rec.x_1 - 16 //:( x_1 )BOU_RIG:(Bot_Rig)
2678 , tmp_rec.y_1 - 16 //:( y_1 )TOP_BOT:(Bot_Rig)
2679 );;
2680
2681 aa2_PutPixelOfInterest(
2682 uni_pix
2683 , tmp_rec.x_0
2684 , tmp_rec.y_0
2685 );;
2686
2687
2688 }else
2689 if( uni_pix.pix_nam == "iso_mem" ){
2690
2691 //:Do nothing.
2692
2693 }else{
2694
2695 throw(
2696 "[UNKNOWN_MEMORY_REGION_NAME]:"
2697 +"(((" +((( uni_pix.pix_nam )))+ ")))"
2698 );;
2699
2700 };;
2701
2702
2703 };; //:NEXT[ i ]:::::::::::::::::::::::::::::::::::::::::://
2704
2705
2706 //:BootStrapping_Uniforms:
2707 //:These_lay_the_foundational_structure_of_engine:
2708 //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS====://
2709 ada_gra.has_mem = NEW_uni_u32( ); //: -- ://
2710 ada_gra.has_mem.varlock.u32_nam = ( "has_mem" ); //: 01 ://
2711 //: -- ://
2712 ada_gra.ren_mod = NEW_uni_u32( ); //: -- ://
2713 ada_gra.ren_mod.varlock.u32_nam = ( "ren_mod" ); //: 02 ://
2714 //: -- ://
2715 ada_gra.edi_mod = NEW_uni_u32( ); //: -- ://
2716 ada_gra.edi_mod.varlock.u32_nam = ( "edi_mod" ); //: 03 ://
2717 //: -- ://
2718 ada_gra.gam_tim = NEW_uni_u32( ); //: -- ://
2719 ada_gra.gam_tim.varlock.u32_nam = ( "gam_tim" ); //: 04 ://
2720 //: -- ://
2721 ada_gra.dex_hot = NEW_uni_u32( ); //: -- ://
2722 ada_gra.dex_hot.varlock.u32_nam = ( "dex_hot" ); //: 05 ://
2723 //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS====://
2724
2725 ada_gra.gpuvcon = NEW_GPUVCON();
2726 Object.seal( ada_gra.gpuvcon );
2727
2728 //:Populate Missing Components In Container:
2729 //://////////////////////////////////////://
2730 ada_gra.con_gra = gl ;
2731 ada_gra.all_pro = all_pro;
2732 ada_gra.ver_pro = ver_pro;
2733 ada_gra.fra_pro = fra_pro;
2734 ada_gra.can_htm = can_htm;
2735 //://////////////////////////////////////://
2736
2737 //:BELOW:DEPENDS_ON[ ada_gra.con_gra ]///////////////////://
2738 //:------------------------------------------------------://
2739
2740 //:Flag textures as uploaded so shader code will
2741 //:know it can safely use them.
2742 //://////////////////////////////////////////////////://
2743 //:- - - - - - - - - - - -- - - - - - - - - - - -://
2744 //:[ 1==TRUE/ON/LOADED ]
2745 ada_gra.has_mem.u32_val =( 1 );
2746
2747 ada_gra.gpuvcon.u32_put(
2748 ada_gra
2749 , ada_gra.has_mem
2750 );;
2751
2752 //:- - - - - - - - - - - -- - - - - - - - - - - -://
2753
2754 //:PERSIST:
2755 //: 1: Textures (pix_arr)
2756 //: 2: TextureSamplers (sam_val)
2757
2758 //:- - - - - - - - - -- - - - - - - - - -://
2759
2760 ada_gra.gpuvcon.pix_put(
2761 ada_gra
2762 , ada_gra.iso_mem
2763 );;
2764
2765 //:- - - - - - - - - -- - - - - - - - - -://
2766
2767 ada_gra.gpuvcon.pix_put(
2768 ada_gra
2769 , ada_gra.mam_mem
2770 );;
2771
2772 //:- - - - - - - - - -- - - - - - - - - -://
2773
2774 //:- - - - - - - - - - - -- - - - - - - - - - - -://
2775 //://////////////////////////////////////////////////://
2776
2777 //:------------------------------------------------------://
2778 //:ABOVE:DEPENDS_ON[ ada_gra.con_gra ]///////////////////://
2779
2780
2781 return( ada_gra );
2782
2783};;//:///////////////////////////////////////////////////////://
2784
2785 function aa2_PutPixelOfInterest(
2786 uni_pix, x_x, y_y
2787 ){
2788 var R =( 135 );//:UNIQUE_DIGITS
2789 var G =( 248 );//:UNIQUE_DIGITS
2790 var B =( 697 );//:UNIQUE_DIGITS
2791 var A =( 255 );
2792 AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
2793
2794 };;
2795
2796 function aa2_DebugFillPattern_FloodFill_PRIVATE(
2797 uni_pix
2798 , x_0 //:( x_0 )TOP_LEF:INCLUSIVE
2799 , y_0 //:( y_0 )TOP_LEF:INCLUSIVE
2800
2801 , x_1 //:( x_1 )BOT_RIG:INCLUSIVE
2802 , y_1 //:( y_1 )BOT_RIG:INCLUSIVE
2803
2804 , R //:RED
2805 , G //:GREEN
2806 , B //:BLUE
2807 , A //:ALPHA
2808 ){
2809 //:Invalid_If_Nan_Or_Negative:
2810 if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
2811 var msg = "[NAN_OR_NEG:(From:FloodFill:HID)]";
2812 console.log( msg );
2813 throw( msg );
2814 };;
2815
2816 for( var y_y = y_0; y_y <= y_1; y_y++ ){
2817 for( var x_x = x_0; x_x <= x_1; x_x++ ){
2818 AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
2819 };;};;
2820
2821 };;
2822
2823 function AA2_DebugFillPattern_FloodFill(
2824 uni_pix
2825 , x_0 //:( x_0 )TOP_LEF:INCLUSIVE
2826 , y_0 //:( y_0 )TOP_LEF:INCLUSIVE
2827
2828 , x_1 //:( x_1 )BOT_RIG:INCLUSIVE
2829 , y_1 //:( y_1 )BOT_RIG:INCLUSIVE
2830 ){
2831 //:Invalid_If_Nan_Or_Negative:
2832 if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
2833 var msg = "[NAN_OR_NEG:2020_06_01:A]";
2834 console.log( msg );
2835 throw( msg );
2836 };;
2837 var R = 64;
2838 var G = 64;
2839 var B = 128;
2840 var A = 255;
2841
2842 aa2_DebugFillPattern_FloodFill_PRIVATE(
2843 uni_pix //:OBJ
2844 , x_0,y_0 //:MIN
2845 , x_1,y_1 //:MAX
2846 , R,G,B,A //:RGB
2847 );;
2848
2849 };;
2850
2851 function AA2_DebugFillPattern_FloodFill_Green(
2852 uni_pix
2853 , x_0 //:( x_0 )TOP_LEF:INCLUSIVE
2854 , y_0 //:( y_0 )TOP_LEF:INCLUSIVE
2855
2856 , x_1 //:( x_1 )BOT_RIG:INCLUSIVE
2857 , y_1 //:( y_1 )BOT_RIG:INCLUSIVE
2858 ){
2859 //:Invalid_If_Nan_Or_Negative:
2860 if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
2861 var msg = "[NAN_OR_NEG:2020_06_01:B]";
2862 console.log( msg );
2863 throw( msg );
2864 };;
2865
2866 var R = 16;
2867 var G = 128;
2868 var B = 16;
2869 var A = 255;
2870
2871 aa2_DebugFillPattern_FloodFill_PRIVATE(
2872 uni_pix //:OBJ
2873 , x_0,y_0 //:MIN
2874 , x_1,y_1 //:MAX
2875 , R,G,B,A //:RGB
2876 );;
2877 };;
2878
2879
2880 function AA2_DebugFillPattern_OnePixelSolidOutline(
2881 uni_pix //:uniform_pixles (PixelContainer)
2882
2883 , x_0 //:( x_0 )TOP_LEF:INCLUSIVE
2884 , y_0 //:( y_0 )TOP_LEF:INCLUSIVE
2885
2886 , x_1 //:( x_1 )BOT_RIG:INCLUSIVE
2887 , y_1 //:( y_1 )BOT_RIG:INCLUSIVE
2888 ){
2889 //:Invalid_If_Nan_Or_Negative:
2890 if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
2891 var msg = "[NAN_OR_NEG:2020_06_01:C]";
2892 console.log( msg );
2893 throw( msg );
2894 };;
2895
2896 var R = 128;
2897 var G = 128;
2898 var B = 128;
2899 var A = 255;
2900
2901 var x_x = ( 0 - 5678 );
2902 var y_y = ( 0 - 6789 );
2903
2904 //:Top and bottom lines:
2905 //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
2906 y_y = y_0;
2907 for( x_x = x_0; x_x <= x_1 ; x_x++ ){
2908
2909 AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
2910
2911 };;
2912 y_y = y_1;
2913 for( x_x = x_0; x_x <= x_1 ; x_x++ ){
2914
2915 AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
2916
2917 };;
2918 //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
2919
2920 //:Left And Right Lines:
2921 //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
2922 x_x = x_0;
2923 for( y_y = y_0; y_y <= y_1; y_y++ ){
2924
2925 AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
2926
2927 };;
2928 x_x = x_1;
2929 for( y_y = y_0; y_y <= y_1; y_y++ ){
2930
2931 AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
2932
2933 };;
2934 //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
2935
2936 };;
2937
2938 //:PROCOOP[ uni_pix.PutPix.XY( R,G,B,A ) ]
2939 function AA2_uni_pix_PutPix_XY(
2940 uni_pix
2941 , R,G,B,A //:Colors as byte (0-255) values.
2942 , t_x,t_y //:XY_Coordinate_Of_Pixel
2943 ){
2944
2945 //:Added_To_Make_Easier_To_See_In_Debugger:
2946 var pix_arr = uni_pix.pix_arr;
2947 var pix_wid = uni_pix.pix_wid;
2948 var pix_hig = uni_pix.pix_hig;
2949 var pix_com = uni_pix.pix_com;
2950
2951 //:FORMULA[ XY_TO_INDEX-JAVASCRIPT ]:////:///////////://
2952 var pix_dex = t_x + ( pix_wid * t_y); //:SC[XYIP_JS]
2953 var com_dex = ( pix_dex * pix_com ); //:SC[XYIP_JS]
2954 //:FORMULA[ XY_TO_INDEX-JAVASCRIPT ]:////:///////////://
2955
2956
2957 uni_pix.pix_arr[ com_dex + 0 ] =(((( R ))));
2958 uni_pix.pix_arr[ com_dex + 1 ] =(((( G ))));
2959 uni_pix.pix_arr[ com_dex + 2 ] =(((( B ))));
2960 uni_pix.pix_arr[ com_dex + 3 ] =(((( A ))));
2961
2962 };;
2963
2964 function AA2_DebugFillPattern_Pyramid( uni_pix ){
2965
2966 //:Added_To_Make_Easier_To_See_In_Debugger:
2967 var pix_arr = uni_pix.pix_arr;
2968 var pix_wid = uni_pix.pix_wid;
2969 var pix_hig = uni_pix.pix_hig;
2970 var pix_com = uni_pix.pix_com;
2971
2972 //:Populate textures with bogus pattern for feedback:
2973 var pix_max =( pix_wid * pix_hig ) -1;
2974
2975 if(! pix_max > 0 ){ throw("[BAD_PIX_MAX]"); };
2976
2977 for( var pix_dex = 0 ; pix_dex <= pix_max ; pix_dex++ ){
2978
2979
2980 var com_dex = ( pix_dex * pix_com );
2981
2982 var t_x = pix_dex % pix_wid ;
2983 var t_y = (pix_dex-t_x)/ pix_wid ;
2984
2985 //:RG:Rectangular_Gradient_Formula:
2986 //:RGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRG://
2987 //: ://
2988 //: The shortest possible distance to ://
2989 //: any edge determines the pixel color. ://
2990 //: ://
2991 //:RGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRG://
2992 var x_0 = t_x; //:DIST_FROM_SIDE:LEF
2993 var x_1 = pix_wid - 1 - t_x; //:DIST_FROM_SIDE:RIG
2994
2995 var y_0 = t_y; //:DIST_FROM_SIDE:TOP
2996 var y_1 = pix_hig - 1 - t_y; //:DIST_FROM_SIDE:BOT
2997
2998 var min=(
2999 Math.min(
3000 Math.min( x_0, x_1 )
3001 , Math.min( y_0, y_1 )
3002 )
3003 );;
3004 //:RGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRG://
3005
3006 var o_e = ( ( t_x + t_y ) % 2 )
3007 var inv = 1-o_e;
3008
3009 //:DP:Diagonal_Primaries(ForVisualDebug):--------://
3010 //:DPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDP://
3011 //:- - - - - - - - - - - -- - - - - - - - - - - -://
3012 if( t_x == 0 && t_y == 0 ){
3013 AA2_uni_pix_PutPix_XY(
3014 uni_pix
3015 , 0 , 0 , 0 ,255 //:BLACK
3016 , t_x,t_y
3017 );;
3018 }else
3019 //:- - - - - - - - - - - -- - - - - - - - - - - -://
3020 if( t_x == 1 && t_y == 1 ){
3021 AA2_uni_pix_PutPix_XY(
3022 uni_pix
3023 , 255, 0 , 0 ,255 //:RED
3024 , t_x,t_y
3025 );;
3026 }else
3027 if( t_x == 2 && t_y == 2 ){
3028 AA2_uni_pix_PutPix_XY(
3029 uni_pix
3030 , 0 ,255, 0 ,255 //:GREEN
3031 , t_x,t_y
3032 );;
3033 }else
3034 if( t_x == 3 && t_y == 3 ){
3035 AA2_uni_pix_PutPix_XY(
3036 uni_pix
3037 , 0 , 0 ,255,255 //:BLUE
3038 , t_x,t_y
3039 );;
3040 }else
3041 //:- - - - - - - - - - - -- - - - - - - - - - - -://
3042 if( t_x == 4 && t_y == 4 ){
3043 AA2_uni_pix_PutPix_XY(
3044 uni_pix
3045 , 0 ,255,255,255 //:CYAN
3046 , t_x,t_y
3047 );;
3048 }else
3049 if( t_x == 5 && t_y == 5 ){
3050 AA2_uni_pix_PutPix_XY(
3051 uni_pix
3052 , 255,255, 0 ,255 //:YELLOW
3053 , t_x,t_y
3054 );;
3055 }else
3056 if( t_x == 6 && t_y == 6 ){
3057 AA2_uni_pix_PutPix_XY(
3058 uni_pix
3059 , 255, 0 ,255,255 //:MAGENTA
3060 , t_x,t_y
3061 );;
3062 }else
3063 //:- - - - - - - - - - - -- - - - - - - - - - - -://
3064 //:DPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDP://
3065 //:E:ELSE: - - - - - - - -- - - - - - - - - - - -://
3066 //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
3067 {
3068 if( false /** t_y % 4 <= 1 **/ ){
3069
3070 //:USE[ t_y % 4 <= 1 ] in "if" above
3071 //:if you want to:
3072
3073 //:Draw lines 2 pixels thick.
3074 //:(Helpful for debugging resolution bugs)
3075
3076 uni_pix.pix_arr[ com_dex + 0 ] = 0 +255 ;
3077 uni_pix.pix_arr[ com_dex + 1 ] = 0 +0 ;
3078 uni_pix.pix_arr[ com_dex + 2 ] = 0 +0 ;
3079 uni_pix.pix_arr[ com_dex + 3 ] = 0 +255 ;
3080 }else{
3081 uni_pix.pix_arr[ com_dex + 0 ] = o_e*128 ;
3082 uni_pix.pix_arr[ com_dex + 1 ] = inv*128 ;
3083 uni_pix.pix_arr[ com_dex + 2 ] = min%256 ;
3084 uni_pix.pix_arr[ com_dex + 3 ] = 0 +255 ;
3085 };;
3086 };;
3087 //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
3088 };;
3089 };; //:[AA2_DebugFillPattern_Pyramid]:////://////////////://
3090
3091//:AGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAG://
3092//:AG:Adapter:Graphics:(ABOVE):------------------------------://
3093
3094 function NEW_uni_pix( ){ //:uni_pix:Texture_Container
3095 var uni_pix={
3096
3097 VAR_TYP:"uni_pix" /**VARIABLE_TYPE**/
3098
3099 //:INDEX:
3100 //:==================================================://
3101 //: tex_han : ( 0 - 1 ) //:texture_handle
3102 //: tex_lot : ( 0 - 2 ) //:texture_slot
3103 //: pix_arr : ( 0 - 3 ) //:pixelarray
3104 //: pix_wid : ( 0 - 4 ) //:pixelarray_width
3105 //: pix_hig : ( 0 - 5 ) //:pixelarray_height
3106 //: pix_com : ( 0 - 6 ) //:pixelarray_components
3107 //: pix_nam : ( 0 - 7 ) //:pixelarray_name
3108 //: sam_val : ( 0 - 8 ) //:sampler_value
3109 //: sam_loc : ( 0 - 9 ) //:sampler_location
3110 //: has_loc : ( 0 - 10 ) //:sampler_location_set
3111 //:==================================================://
3112
3113 , tex_han :(0 - 111 ) //: Texture_Handle
3114 , tex_lot :(0 - 222 ) //: Texture_Slot
3115
3116 //: pix_arr : Array of texture data.
3117 //: pix_arr : AKA[ tex_arr | tex_val | pix_val ]
3118 , pix_arr : null
3119 , pix_wid :(0 - 333 ) //: PixelBitmap:WID
3120 , pix_hig :(0 - 444 ) //: PixelBitmap:HIG
3121 , pix_com :(0 - 555 ) //: ComponentsPerPixel
3122
3123 //: pix_val : could be contrued as the pixel array
3124 //: data or as the texture sampler's value.
3125 //: Thus "pix_val" should not be used here.
3126 //: "pix_val" should be used in singular sense
3127 //: to mean "value of a single pixel.
3128
3129 //:Unlike the "varlock" object for uni_u32,
3130 //:this varlock container also has the VALUE of
3131 //:the uniform as well. Meaning you can only
3132 //:set it once, and then it is frozen.
3133 //:
3134 //:UPDATE:
3135 //:Decided against putting these values into
3136 //:"varlock" container. Reasons:
3137 //: 1: It nest things too deep.
3138 //: 2: Nested layouts are difficult to define
3139 //: on the fly.
3140 //: 3: I said that you shouldn't encapsulate
3141 //: just to prevent programmers from doing
3142 //: stupid things with data. Let's stick
3143 //: to that.
3144 //:varlock:{ ////////////////////////////////////://
3145
3146 , pix_nam : "" //: AKA[ tex_nam | sam_nam ]
3147 , sam_val : 0 //: AKA[ pix_val | tex_val ]
3148 , sam_loc : 0
3149 , has_loc : 0 //:Has location for sam_loc
3150
3151 //:NOTE: Pretty sure [ sam_val == tex_lot ]
3152 //: must always be true if sampler is
3153 //: to sample from it's associated texture.
3154
3155 //:} ////////////////////////////////////////////://
3156
3157 };;Object.seal( uni_pix );
3158 return( uni_pix );
3159 };;
3160
3161//:UH:Uniform_Helpers:(BELOW):-------------------------------://
3162//:UHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUH://
3163
3164 //:UC:Uniform_Containers:(BELOW):------------------------://
3165 //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
3166 //: ://
3167 //: The structs below are all analogous in structure, ://
3168 //: though may have sligh differences that make them ://
3169 //: not suitable for templating. ://
3170 //: ://
3171 //: (Templates are complex, rather be verbose ) ://
3172 //: (So what I am saying is... Even if I could ) ://
3173 //: (template out and make this generic and re-usable ) ://
3174 //: (I would choose not to for the sake of simplicity.) ://
3175 //: ://
3176 //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
3177 function NEW_uni_u32(){
3178 //:UNIform_Uint32:(struct)
3179 var uni_u32={
3180
3181 VAR_TYP:"uni_u32" /**VARIABLE_TYPE**/
3182 ,
3183
3184 u32_val : 0 //:UINT32_VARIABLE:VALUE
3185
3186 ,
3187
3188 //:Nesting these params a bit deeper so we can
3189 //:Object.freeze( varlock ) once the uniform value
3190 //:has been cached.
3191 varlock:{
3192 u32_nam : "" //:UINT32_VARIABLE:NAME
3193 , u32_loc : 0 //:UINT32_VARIABLE:LOCATION
3194 , has_loc : 0 //:variable_location_fetched
3195 }
3196
3197 };;Object.seal( uni_u32 );
3198 return( uni_u32 );
3199 };;
3200
3201 //:ucucucucucucucucucucucucucucucucucucucucucucucucucucuc://
3202
3203 //: TODO: move "uni_pix" struct declaration back
3204 //: into this location within code.
3205
3206 //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
3207 //:UC:Uniform_Containers:(ABOVE):------------------------://
3208
3209//:uhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuh://
3210
3211 //:VC:Variable_Controllers:(BELOW):----------------------://
3212 //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
3213 function NEW_GPUVCON(){
3214 var gpuvcon = new GPUVCON();
3215 Object.seal( gpuvcon );
3216 return( gpuvcon );
3217 };;
3218 function GPUVCON( ){ //:GPU_VARIABLE_CONTROLLER
3219 "use strict"
3220
3221 //://////////////////////////////////////////////////://
3222
3223 //:uni_u32: get/put:
3224 //:Represents an unsigned integer value that is
3225 //:shared between the GPU and CPU.
3226 this.u32_get = u32_get; //:get( ada_gra, uni_u32 )
3227 this.u32_put = u32_put; //:put( ada_gra, uni_u32 )
3228
3229 //:uni_pix: get/put:
3230 //:Represents tile-map formatted data shared
3231 //:between GPU and CPU.
3232 this.pix_get = pix_get; //:get( ada_gra, uni_pix )
3233 this.pix_put = pix_put; //:put( ada_gra, uni_pix )
3234
3235 //:////////////////////////////////////////////////--://
3236
3237 //:u32:uni_u32:[get|put]:(BELOW):--------------------://
3238 //:u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32--://
3239 //: - - - - - - - - - - - - ---- - - - - - - - - - --://
3240 function u32_get(
3241 ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
3242 , uni_u32 //:Uniform_Package
3243 ){
3244 "use strict"
3245
3246 //:EC:Error_Checking_Inputs:
3247 //:ECECECECECECECECECECECECECECECECECECECECECECEC://
3248 if(uni_u32.VAR_TYP!="uni_u32"){
3249 throw("[u32_get:VT]");
3250 };;
3251
3252 //:AKA[ ogl_ctx | ctx_ogl | con_gra | gra_con ]
3253 if(false === ada_gra.con_gra
3254 || true === ada_gra.con_gra
3255 ){
3256 throw("[u32_get:NOT_A_BOOL:ada_gra.con_gra]");
3257 };;
3258 if( null == ada_gra.con_gra ){
3259 throw("[u32_get:MISSING:ada_gra.con_gra]");
3260 };;
3261 //:ECECECECECECECECECECECECECECECECECECECECECECEC://
3262
3263 //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
3264 u32_loc( ada_gra, uni_u32 ); //:( uni_u32.u32_loc );
3265
3266 //: developer.mozilla.org/en-US/docs/
3267 //: Web/API/WebGLRenderingContext/getUniform
3268 //:Not sure why "v" at end:
3269 uni_u32.u32_val=(
3270 //:getUniformuiv: NOT A FUNCTION
3271 //:getUniformuv: NOT A FUNCTION
3272 //:getUniformu : NOT A FUNCTION
3273 //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
3274 //:[ con_gra ]AKA[ gra_con ]
3275 ada_gra.con_gra.getUniform( //: getUniform
3276 ada_gra.all_pro //:PROGRAM
3277 , uni_u32.varlock.u32_loc //:LOCATION
3278 )
3279 );;
3280
3281
3282 return( undefined /**void**/ );
3283 };;
3284 //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
3285 function u32_put(
3286 ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
3287 , uni_u32 //:Uniform_Package
3288 ){
3289 "use strict"
3290
3291 //:EC:Error_Checking_Inputs:
3292 //:ECECECECECECECECECECECECECECECECECECECECECECEC://
3293 if(uni_u32.VAR_TYP!="uni_u32"){
3294 throw("[u32_put:VT]");
3295 };;
3296 //:AKA[ ogl_ctx | ctx_ogl | con_gra | gra_con ]
3297 if(false === ada_gra.con_gra
3298 || true === ada_gra.con_gra
3299 ){
3300 throw("[u32_put:NOT_A_BOOL:ada_gra.con_gra]");
3301 };;
3302 if( null == ada_gra.con_gra ){
3303 throw("[u32_put:MISSING:ada_gra.con_gra]");
3304 };;
3305 //:ECECECECECECECECECECECECECECECECECECECECECECEC://
3306
3307 //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
3308 u32_loc( ada_gra, uni_u32 ); //:( uni_u32.u32_loc );
3309
3310 //:make_sure_value_is_valid:
3311 if( !( uni_u32.u32_val >= 0 ) ){
3312 throw("[uniform_value_invalid]");
3313 };;
3314
3315 ada_gra.con_gra.uniform1ui( /** uniform1ui **/
3316 uni_u32.varlock.u32_loc //:LOCATION
3317 , uni_u32.u32_val //:<<<<<<<:VALUE
3318 );;
3319 };;
3320 //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
3321 function u32_loc(
3322 ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
3323 , uni_u32
3324 ){
3325 "use strict"
3326
3327 if(uni_u32.VAR_TYP!="uni_u32"){
3328 throw("[u32_loc:VT]");
3329 };;
3330
3331 if( "" == uni_u32.varlock.u32_nam ){
3332 //:UNNS:Uniform_Name_Never_Set
3333 throw("[FN:u32_loc(...):UNNS]");
3334 };;
3335
3336 //:L:Location:Stash_Location_And_Freeze:---------://
3337 //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
3338 //://////////////////////////////////////////////://
3339 if( uni_u32.varlock.has_loc <= 0 ){
3340 uni_u32.varlock.has_loc = 1 ;
3341
3342 uni_u32.varlock.u32_loc=(
3343 //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
3344 //:[ con_gra ]AKA[ gra_con ]
3345 ada_gra.con_gra.getUniformLocation(
3346 ada_gra.all_pro
3347 , uni_u32.varlock.u32_nam
3348 )
3349 );;
3350
3351 //:We should never have to fetch this again,
3352 //:so freeze the "varlock" container:
3353 uni_u32.varlock.has_loc =( 2 );
3354 Object.freeze( uni_u32.varlock );
3355
3356 };;//:///////////////////////////////////////////://
3357 //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
3358
3359
3360 if( null == uni_u32.varlock.u32_loc //:WEBGL
3361 || 0 > uni_u32.varlock.u32_loc //:C99/C11
3362 ){
3363 //:Also note that shader variables can be
3364 //:optimized out of your shader code if you
3365 //:do not use them.
3366 //:( Declared But Not Used ===> OptimizedOut )
3367 var u32_nam=( uni_u32.varlock.u32_nam );
3368 var msg=(""
3369 + "[ERR:DOES_UNIFORM_EXIST_IN_SHADER?]:((("
3370 + u32_nam
3371 + ")))"
3372 );;
3373 console.log( msg );
3374 throw( msg );
3375 };;
3376
3377 };;
3378 //: - - - - - - - - - - - - ---- - - - - - - - - - --://
3379 //:u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32--://
3380 //:u32:uni_u32:[get|put]:(ABOVE):--------------------://
3381
3382 //:vcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvc://
3383//:uhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuh://
3384 //:vcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvc://
3385
3386 //:TL:Top_Level_publicly_exposed_functions:----------://
3387 //:TLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTL://
3388 function pix_get(
3389 ada_gra
3390 , uni_pix
3391 ){
3392 //:TS:TextureSampler( sam_val & sam_loc ):-------://
3393 //:TS:tex_sam ===== ( sam_val & sam_loc ):-------://
3394 //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
3395
3396 _pix_get_TextureSamplerUniform(
3397 ada_gra
3398 , uni_pix
3399 );;
3400
3401 //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
3402 //:PA:pix_arr:(pixel_array):(BELOW):-------------://
3403 //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
3404
3405 _pix_get_TexturePixelData(
3406 ada_gra
3407 , uni_pix
3408 );;
3409
3410 //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
3411 };;
3412 function pix_put(
3413 ada_gra
3414 , uni_pix
3415 ){
3416 //:TS:TextureSampler( sam_val & sam_loc ):-------://
3417 //:TS:tex_sam ===== ( sam_val & sam_loc ):-------://
3418 //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
3419
3420 _pix_put_TextureSamplerUniform(
3421 ada_gra
3422 , uni_pix
3423 );;
3424
3425 //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
3426 //:PA:pix_arr:(pixel_array):(BELOW):-------------://
3427 //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
3428
3429 _pix_put_TexturePixelData(
3430 ada_gra
3431 , uni_pix
3432 );;
3433
3434 //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
3435 };;
3436 //:TLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTL://
3437
3438 //:TD:Texture_Data:----------------------------------://
3439 //:TDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTD://
3440 function _pix_get_TexturePixelData(
3441 ada_gra
3442 , uni_pix
3443 ){
3444
3445 //:DATE[ 2020_05_17 ]
3446 //:Looked around the web for usage....
3447 //:I think I ahve the function call correct
3448 //:but not certain.
3449 throw("[I_DONT_KNOW_IF_THIS_CODE_WORKS_YET]");
3450
3451 var G = ada_gra.con_gra;
3452
3453 //: Extract_Variables_From_Container:
3454 //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
3455 var tex_lot = uni_pix.tex_lot;
3456 var tex_han = uni_pix.tex_han;
3457 var pix_arr = uni_pix.pix_arr;
3458 //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
3459
3460 G.activeTexture( G.TEXTURE0 + tex_lot );
3461 G.bindTexture( G.TEXTURE_2D , tex_han );
3462
3463 G.getTexImage( //:RELATED[ texImage2D ]
3464 GL_TEXTURE_2D //:TARGET
3465 , 0 //:LEVEL
3466 , G.RGBA_INTEGER //:SOURCE_FORMAT
3467 , pix_arr //:ARRAY_BUFFER_VIEW
3468 );;
3469
3470 };;
3471 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
3472 function _pix_put_TexturePixelData(
3473 ada_gra
3474 , uni_pix
3475 ){
3476
3477 var G = ada_gra.con_gra;
3478
3479 //: Extract_Variables_From_Container:
3480 //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
3481 var tex_lot = uni_pix.tex_lot;
3482 var tex_han = uni_pix.tex_han;
3483 var pix_wid = uni_pix.pix_wid;
3484 var pix_hig = uni_pix.pix_hig;
3485 var pix_arr = uni_pix.pix_arr;
3486 //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
3487
3488 //:TP:Texture_Push:------------------------------://
3489 //:TPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTP://
3490
3491 G.activeTexture( G.TEXTURE0 + tex_lot );
3492 G.bindTexture( G.TEXTURE_2D , tex_han );
3493
3494 //: NEAREST_MIPMAP_NEAREST:
3495 //: gamedev.stackexchange.com/questions/158738
3496 var T_2D = G.TEXTURE_2D ;
3497 var NEAR = G.NEAREST ;
3498 var EDGE = G.CLAMP_TO_EDGE;
3499
3500 var MIN_FIL = G.TEXTURE_MIN_FILTER;
3501 var MAG_FIL = G.TEXTURE_MAG_FILTER;
3502 var TWRAP_S = G.TEXTURE_WRAP_S;
3503 var TWRAP_T = G.TEXTURE_WRAP_T;
3504
3505 G.texParameteri( T_2D, MIN_FIL , NEAR );
3506 G.texParameteri( T_2D, MAG_FIL , NEAR );
3507 G.texParameteri( T_2D, TWRAP_S , EDGE );
3508 G.texParameteri( T_2D, TWRAP_T , EDGE );
3509
3510 //:Before pushing, set alignment:
3511 const ALN = 4; //:ALN:"Alignment"
3512 G.pixelStorei(G.UNPACK_ALIGNMENT, ALN);
3513
3514 //+ Turns out TexStorage2D does not exist in +//
3515 //+ modern WebGL2 and is marked as exprimental. +//
3516 //+ So just keep doing it the way you are +//
3517 //+ doing it. +//
3518 //- G.TexStorage2D( | NEVER_MIND: | -//
3519 //- G.TEXTURE_2D | replace: texImage2D | -//
3520 //- , 0 | with: | -//
3521 //- , G.RGBA8UI | 1. texStorage2D | -//
3522 //- , pix_wid | THEN | -//
3523 //- , pix_hig | 2. texSubImage2D | -//
3524 //- );; | | -//
3525 //- SEE[ GL_CREATE_COMPLETE_TEXTURE ] | -//
3526
3527 //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
3528 //|Note that GL_BGRA pixel transfer format is |//
3529 //|only preferred when uploading to GL_RGBA8 |//
3530 //|images. When dealing with other formats,like |//
3531 //|GL_RGBA16,GL_RGBA8UI or even GL_RGBA8_SNORM, |//
3532 //|then the regular GL_RGBA ordering may be |//
3533 //|preferred. |//
3534 //| khronos.org/opengl/wiki/Common_Mistakes |//
3535 //|______________________________________________|//
3536 G.texImage2D( //:-------------------------------://
3537 G.TEXTURE_2D //:TARGET
3538 , 0 //:LEVEL
3539 , G.RGBA8UI //:INTERNAL_FORMAT
3540 //:------------------------------------------://
3541 , pix_wid //:WIDTH / PIX_WID
3542 , pix_hig //:HEIGHT / PIX_HIG
3543 , 0 //:BORDER
3544 //:------------------------------------------://
3545 , G.RGBA_INTEGER //:SOURCE_FORMAT
3546 , G.UNSIGNED_BYTE //:SOURCE_TYPE
3547 , pix_arr //:ARRAY_BUFFER_VIEW
3548 );//:--------------------------------------------://
3549
3550 //:TPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTP://
3551
3552 };;
3553 //:TDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTD://
3554
3555
3556 //:pix:uni_pix:[get|put]:(BELOW):--------------------://
3557 //:pixpixpixpixpixpixpixpixpixpixpixpixpixpixpixpix--://
3558 //: - - - - - - - - - - - - ---- - - - - - - - - - --://
3559 function _pix_get_TextureSamplerUniform(
3560 ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
3561 , uni_pix //:Uniform_Package
3562 ){
3563 "use strict"
3564
3565 if(uni_pix.VAR_TYP!="uni_pix"){
3566 //:VT:Variable_Type:
3567 throw("[_pix_put_TextureSamplerUniform:VT]");
3568 };;
3569
3570 //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
3571 //:( uni_pix.[ sam_loc === pix_loc ] );
3572 _pix_loc_TextureSamplerUniform(
3573 ada_gra //:Adapter_Graphics
3574 , uni_pix //:Uniform_Pixels
3575 );;
3576
3577 //: developer.mozilla.org/en-US/docs/
3578 //: Web/API/WebGLRenderingContext/getUniform
3579 //:Not sure why "v" at end:
3580 uni_pix.sam_val=(
3581
3582 //:POTENTIAL_BUG:
3583 //: Pretty sure texture samplers are
3584 //: signed integers and you use
3585 //: "getUniformiv" instead of
3586 //: "getUniformuiv". But no internet
3587 //: access to look this up.
3588
3589 //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
3590 //:[ con_gra ]AKA[ gra_con ]
3591 ada_gra.con_gra.getUniformiv( //:get:Uniform
3592 ada_gra.all_pro //:PROGRAM
3593 , uni_pix.sam_loc //:LOCATION
3594 ) //:aka[ pix_loc ]
3595 );;
3596
3597
3598 return( undefined /**void**/ );
3599 };;
3600 //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
3601 function _pix_put_TextureSamplerUniform(
3602 ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
3603 , uni_pix //:Uniform_Package:[PIXELS/PIX]
3604 ){
3605 "use strict"
3606
3607 if(uni_pix.VAR_TYP!="uni_pix"){
3608 //:VT:Variable_Type:
3609 throw("[_pix_put_TextureSamplerUniform:VT]");
3610 };;
3611
3612 //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
3613 //:( uni_pix.[ sam_loc === pix_loc ] );
3614 _pix_loc_TextureSamplerUniform(
3615 ada_gra //:Adapter_Graphics
3616 , uni_pix //:Uniform_Pixels
3617 );;
3618
3619 //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
3620 //:[ con_gra ]AKA[ gra_con ]
3621 ada_gra.con_gra.uniform1i( //:put:Uniform
3622
3623 //:POTENTIAL_BUG:
3624 //: Pretty sure samplers are signed
3625 //: integers, so use "uniform1i"
3626 //: instead of "uniform1ui"
3627
3628 uni_pix.sam_loc //:SamplerLocation:AKA:pix_loc
3629 , uni_pix.sam_val //:SamplerValue::::AKA:pix_val
3630 );;
3631
3632 };;
3633 //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
3634 //:Caches the location of the uniform variable
3635 //:within the GLSL source code.
3636 //: [ pix_loc / sam_loc ]
3637 function _pix_loc_TextureSamplerUniform(
3638 ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
3639 , uni_pix //:uniform_container_for_pixel_array_data
3640 ){
3641 "use strict"
3642
3643 if(uni_pix.VAR_TYP!="uni_pix"){
3644 //:VT:Variable_Type
3645 throw("[_pix_loc_TextureSamplerUniform:VT]");
3646 };;
3647
3648 //:.............[ pix_nam == sam_nam ]...........://
3649 if( "" == uni_pix.pix_nam ){
3650 //:UNNS:Uniform_Name_Never_Set:
3651 throw("[_pix_loc_TextureSamplerUniform:UNNS]");
3652 };;
3653
3654 if( uni_pix.has_loc <= 0 ){ //:has_loc:sam_loc ?
3655 uni_pix.has_loc = 1 ; //:has_loc:sam_loc ?
3656
3657 uni_pix.sam_loc=( /** pix_loc === sam_loc **/
3658
3659 //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
3660 //:[ con_gra ]AKA[ gra_con ]
3661 ada_gra.con_gra.getUniformLocation(
3662 ada_gra.all_pro //:PROGRAM
3663 , uni_pix.pix_nam //:UNIFORM
3664 //:...........[ pix_nam == sam_nam ].....://
3665 )
3666 );;
3667 };;
3668
3669 //: 0: False
3670 //: 1: Mostly true (making it true)
3671 //: 2: True (done updating to true state)
3672 uni_pix.has_loc =( 2 );
3673 };;
3674 //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
3675 //:pixpixpixpixpixpixpixpixpixpixpixpixpixpixpixpix--://
3676 //:pix:uni_pix:[get|put]:(ABOVE):--------------------://
3677 };;
3678 //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
3679 //:VC:Variable_Controllers:(ABOVE):----------------------://
3680
3681//:UHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUH://
3682//:UH:Uniform_Helpers:(ABOVE):-------------------------------://
3683
3684//:Dont call directly, call from our
3685//:function container object.
3686function AA2_LoopTableTick( loo_tab ){
3687
3688 if( ! loo_tab || null == loo_tab ){
3689 throw("[AA2_LoopTableTick:NULL_INPUT:loo_tab]");
3690 };;
3691
3692 loo_tab.gam_tim++; //:GAME_TIME
3693 loo_tab.lop_tim++; //:LOOP_TIME
3694
3695 loo_tab.nat_win( );
3696 loo_tab.gam_obj( );
3697 loo_tab.ren_log( );
3698
3699};;
3700
3701
3702//:LT:Loop_Tick_functions:(BELOW):---------------------------://
3703//:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
3704//:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
3705//:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
3706//:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
3707
3708
3709;;;function AA2_LoopTableTick_nat_win(){ //:NATive_WINdow
3710//:---------------------------:nat_win():--------------------://
3711
3712//:nat_win:AKA[ nat_win | win_code | win_loop | native_window ]
3713//:nat_win:AKA[ window_loop | ............................... ]
3714
3715 //://////////////////////////////////////////////////////://
3716 if( GLO_DAT.event_listeners_registered <= 0 ){
3717 GLO_DAT.event_listeners_registered = 1;
3718
3719 //:Grab HTML5 Canvas:
3720 let can_htm = GLO_CLA.ada_gra.can_htm; /** var **/
3721
3722 //: ## click
3723 //: ## mousedown
3724 //: ## mouseout
3725 //: ## mouseover
3726 //: ##
3727 //: ## keydown
3728 //: ## keyup
3729 //: ## keypress <--OBSOLETE
3730
3731 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
3732
3733 //: MOUSE :////://///////////////////////////////////://
3734
3735 //: NATIVE_HANDLER_CALLS:
3736 //: AA2_PollEvents_Click
3737
3738 can_htm.addEventListener(
3739 "click"
3740 , _NativeClickEventHandler
3741 );;
3742
3743 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
3744
3745 //: KEYBOARD :////://////////////////////////////////://
3746
3747 //:NATIVE_HANDLER_CALLS:
3748 //:AA2_PollEvents_KeyPressOrKeyRelease
3749
3750 document.addEventListener( "keyup"
3751 , _NativeKeyboardEventHandler_UPP
3752 );;
3753 document.addEventListener( "keydown"
3754 , _NativeKeyboardEventHandler_DOW
3755 );;
3756
3757 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
3758
3759 //:IF_THIS_WAS_C_CODE:
3760 //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
3761 //: AA2_PollEvents_Click() ://
3762 //: AA2_PollEvents_KeyPressOrKeyRelease() ://
3763 //:OR_MAYBE: ://
3764 //: all_evt = AA2_PollEvents_ALL(); ://
3765 //: AA2_HandleEvents( all_evt ); ://
3766 //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
3767
3768 //:UD:Up_Down_mouse:(BELOW):
3769 //:UDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUD://
3770 //: A bit convoluted. But need to set the ://
3771 //: event sub type of GLO_DAT.glo_eve ://
3772 //:UDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUD://
3773 //:sub_typ_M_U[ M_U / MOUSE_UP ]
3774 function _NativeKeyboardEventHandler_UPP(
3775 nat_eve
3776 ){ var glo_eve = GLO_DAT.glo_eve;
3777
3778 //:BT:Bit_Twiddle:
3779 //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
3780 //:SUB_TYPE:KEY_UP
3781 /**/ glo_eve.sub_typ=( 0
3782 | glo_eve.sub_typ
3783 | GLO_DAT.eve_bit.sub_typ_K_U
3784 );;
3785 //:ERASE_BIT:KEY_DOWN:
3786 /**/ glo_eve.sub_typ &=(
3787 ( ~ GLO_DAT.eve_bit.sub_typ_K_D)
3788 );;
3789 //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
3790
3791 glo_eve.k_u =( 1 ); //:KEY:UPP ( up )
3792 glo_eve.k_d =( 0 ); //:KEY:DOW (down)
3793
3794 _NativeKeyboardEventHandler(
3795 nat_eve //:NativeEvent
3796 , glo_eve //:CustomEvent
3797 );;
3798 };;
3799
3800 //:- - - - - - - - - - -- - - - - - - - - - -://
3801
3802 //:sub_typ_M_D[ M_D / MOUSE_DOWN ]
3803 function _NativeKeyboardEventHandler_DOW(
3804 nat_eve
3805 ){ var glo_eve = GLO_DAT.glo_eve;
3806
3807 //:BT:Bit_Twiddle:
3808 //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
3809 //:SUB_TYPE:KEY_DOWN
3810 /**/ glo_eve.sub_typ=( 0
3811 | glo_eve.sub_typ
3812 | GLO_DAT.eve_bit.sub_typ_K_D
3813 );;
3814 //:ERASE:KEY_UP
3815 /**/ glo_eve.sub_typ &=(
3816 ( ~ GLO_DAT.eve_bit.sub_typ_K_U)
3817 );;
3818 //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
3819
3820 glo_eve.k_u =( 0 ); //:KEY:UPP ( up )
3821 glo_eve.k_d =( 1 ); //:KEY:DOW (down)
3822
3823 _NativeKeyboardEventHandler(
3824 nat_eve //:NativeEvent
3825 , glo_eve //:CustomEvent
3826 );;
3827 };;
3828 //:UDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUD://
3829
3830 //:This function is a bit convoluted becasue it is
3831 //:either called by keyup or keydown handlers.
3832 function _NativeKeyboardEventHandler(
3833 nat_eve //:NativeEvent
3834 , glo_eve //:MyCustomLeanEventObject
3835 ){
3836 var cod = nat_eve.code.toUpperCase( );
3837 var key = nat_eve.key .toUpperCase( );
3838
3839 //: Capslock key event is killing my keyboard ://
3840 //: interactivity because it seems "CAPSLOCK" ://
3841 //: event is fired during same event cycle as ://
3842 //: a non-CAPSLOCK event. Thus if "K" is pressed ://
3843 //: during the event cycle, you might end up with://
3844 //: "CAPSLOCK" as your key value by the time the ://
3845 //: event is handled. ://
3846 //# CURRENT DESIGN DOES NOT SUPPORT MULTIPLE #//
3847 //# KEY PRESSES AT THE SAME TIME. #//
3848 //[ FIX: Queue of glo_eve objects. ]//
3849 //[ 5 in array means can handle up to 5 input ]//
3850 //[ events per cycle. ]//
3851 if( "CAPSLOCK"==cod || "CAPSLOCK"==key ){
3852 return;
3853 };;
3854
3855 //: console.log( "[_NativeKeyboardEventHandler]");
3856
3857 //: var glo_eve = GLO_DAT.glo_eve;
3858 //://////////////////////////////////////////////://
3859
3860 //:Store keyboard key that was pressed:
3861 //://////////////////////////////////////////://
3862 if( "ARROWLEFT" == key ){ key = "ARR_LEF"; };
3863 if( "ARROWRIGHT" == key ){ key = "ARR_RIG"; };
3864 if( "ARROWUP" == key ){ key = "ARR_UPP"; };
3865 if( "ARROWDOWN" == key ){ key = "ARR_DOW"; };
3866 glo_eve.key = key;
3867 //://////////////////////////////////////////://
3868
3869 //:Add Event Type Flags.
3870 //:DO NOT REMOVE ANY PREVIOUSLY SET FLAGS!
3871 //:ETETETETETETETETETETETETETETETETETETETETET://
3872 //:MAIN_TYPE:KEYBOARD
3873 /**/ glo_eve.eve_typ=( 0
3874 | glo_eve.eve_typ
3875 | GLO_DAT.eve_bit.eve_typ_KEY
3876 );;
3877 //:ETETETETETETETETETETETETETETETETETETETETET://
3878
3879 AA2_PollEvents_KeyPressOrKeyRelease( glo_eve );
3880
3881 //://////////////////////////////////////////////://
3882 };;
3883 function _NativeClickEventHandler( nat_eve ){
3884
3885 //:console.log("[_NativeClickEventHandler]");
3886
3887 var glo_eve = GLO_DAT.glo_eve;
3888 //://////////////////////////////////////////////://
3889
3890 var rec =(
3891 GLO_CLA. //:GLOBAL_CLASSES
3892 ada_gra. //:ADAPTER_GRAPHICS
3893 can_htm. //:CANVAS_HTM (HTM==HTML5)
3894 getBoundingClientRect()
3895 );;
3896 var CAN_X=( nat_eve.clientX - rec.left );
3897 var CAN_Y=( nat_eve.clientY - rec.top );
3898
3899 glo_eve.c_x=( CAN_X ); //:Click_X
3900 glo_eve.c_y=( CAN_Y ); //:Click_Y
3901
3902 //:Add Event Type Flags.
3903 //:DO NOT REMOVE ANY PREVIOUSLY SET FLAGS!
3904 //:ETETETETETETETETETETETETETETETETETETETETET://
3905 //:MAIN_TYPE:MOUSE
3906 /**/ glo_eve.eve_typ=( 0
3907 | glo_eve.eve_typ
3908 | GLO_DAT.eve_bit.eve_typ_MOU
3909 );;
3910 //:SUB_TYPE:CLICK
3911 /**/ glo_eve.sub_typ=( 0
3912 | glo_eve.sub_typ
3913 | GLO_DAT.eve_bit.sub_typ_CLK
3914 );;
3915 //:ETETETETETETETETETETETETETETETETETETETETET://
3916
3917 //:A click does not happen until
3918 //:the mouse is released. Thus the
3919 //:mouse state is mouse_up( m_u ).
3920 glo_eve.m_u =( 1 ); //:MOU:UPP ( up )
3921 glo_eve.m_d =( 0 ); //:MOU:DOW (down)
3922
3923 //://////////////////////////////////////////////://
3924
3925 AA2_PollEvents_Click( glo_eve );
3926 };;
3927
3928 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
3929
3930 function
3931 AA2_PollEvents_Click(
3932 glo_eve /** glo_eve:GLObal_EVEnt **/
3933 ){
3934 //: console.log( "[AA2_PollEvents_Click]" );
3935
3936 GLO_CLA.edi_all.ReadEvent( glo_eve );
3937
3938 };;
3939 function
3940 AA2_PollEvents_KeyPressOrKeyRelease(
3941 glo_eve /** glo_eve:GLObal_EVEnt **/
3942 ){
3943 //: console.log(
3944 //: "[AA2_PollEvents_KeyPressOrKeyRelease]"
3945 //: );;
3946 GLO_CLA.edi_all.ReadEvent( glo_eve );
3947
3948 };;
3949
3950
3951 };;//:[ event_listeners_registered ? ]:////://///////////://
3952 //://////////////////////////////////////////////////////://
3953
3954
3955
3956};;function AA2_LoopTableTick_gam_obj(){ //:GAMe_OBJect(update)
3957
3958 //:TODO: Update game objects.
3959
3960 //:UPDATE_GAME_TIME_STORED_IN_SHADER:
3961 //:GTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGT://
3962
3963 var gam_tim = GLO_CLA.ada_var.Get_GamTim();
3964 gam_tim++;GLO_CLA.ada_var.Put_GamTim( gam_tim );
3965
3966 //:GTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGT://
3967
3968};;function AA2_LoopTableTick_ren_log(){ //:RENder_LOGic
3969
3970
3971 //:AKA[ uni_com | UniCom | UniformCommit | UniformsCommit ]
3972 GLO_CLA.tau_001.uni_com();
3973
3974 var con_gra = GLO_CLA.ada_gra.con_gra;
3975
3976 //:Clearing will help you see if you have accidentially
3977 //:make your viewport triangles too small.
3978 con_gra.clear( 0
3979 | con_gra.COLOR_BUFFER_BIT
3980 );;
3981
3982 con_gra.drawArrays(
3983
3984 con_gra.TRIANGLE_FAN
3985 , 0
3986 , 6
3987
3988 );;
3989
3990};;
3991//:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
3992//:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
3993//:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
3994//:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
3995//:LT:Loop_Tick_functions:(ABOVE):---------------------------://
3996
3997//:NF:Namespaced_Functions:(BELOW):--------------------------://
3998//:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
3999//:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
4000//:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
4001//: ://
4002//: Try to order as such that forward declarations ://
4003//: are not a requirement. ://
4004//: //:CTRL_F[ namespaced | nf_funcs | nffuncs | nf_fn ] ://
4005//: ://
4006//:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
4007
4008 //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
4009
4010 //:C11:C11_Refactoring_Help:(BELOW):---------------------://
4011 //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
4012 //: ://
4013 //: ZeroIni: Zero Initialize A Struct ://
4014 //: PoinMem: Declare a POINTER member inside struct. ://
4015 //: ValuMem: Declare a VALUE member inside struct. ://
4016 //: ://
4017 //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
4018 //: C11[ struct AA2_typ_nam typ_nam ={ }; ]
4019 function AA2_ZeroIni( AA2_typ_nam /** DAS_orr_CLA **/ ){
4020 //:AA2_typ_nam: AA2:TypeName
4021 //:DAS_orr_CLA: DAtaStructure_orr_CLAss
4022
4023 var typ_nam =(
4024 Object.assign(
4025 Object.create( null )
4026 , AA2_typ_nam
4027 )
4028 );;
4029
4030 Object.seal( typ_nam /** zero_inited_struct **/ );
4031 return( typ_nam /** zero_inited_struct **/ );
4032 };;
4033 //: C11[ struct AA2_typ_nam * typ_nam ; ]
4034 function AA2_PoinMem( AA2_typ_nam /** DAS_or_CLA **/ ){
4035 return( AA2_ZeroIni( AA2_typ_nam /** DAS_or_CLA **/ ));
4036 };;
4037 //: C11[ struct AA2_typ_nam typ_nam ; ]
4038 function AA2_ValuMem( AA2_typ_nam /** DAS_or_CLA **/ ){
4039 return( AA2_ZeroIni( AA2_typ_nam /** DAS_or_CLA **/ ));
4040 };;
4041 //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
4042 //:C11:C11_Refactoring_Help:(ABOVE):---------------------://
4043
4044 //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
4045
4046 //: AKA[ AssertInteger | ass_int | AssInt | assint ] ::::://
4047 function AA2_InteAss( any_int ){
4048 if( false == (any_int >= 0 || any_int <= 0) ){
4049 throw("[YOU_DONE_FUCKED_UP]");
4050 };;
4051 return( any_int );
4052 };;
4053
4054 //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
4055
4056 //:AS:Addition_And_Subtraction:Funcs:(4:BELOW):----------://
4057 //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
4058 //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
4059 //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
4060 //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
4061
4062 //:Make addition and subtraction wrap on
4063 //:underflow or overflow of uint32 boundaries.
4064 //:NOTE: I guess in C no such thing as "underflow"
4065 //: for integers. Both ways is overflow.
4066 ;;;function AA2_U32_ADD( u32_001 , u32_002 ){
4067
4068 var res = ( u32_001 + u32_002 );
4069 res = ( res % ( 0xFFFFFFFF + 1 ) );
4070 return( res );
4071
4072 };;function AA2_U32_SUB( u32_001 , u32_002 ){
4073
4074 var res = ( u32_001 - u32_002 );
4075 if( res < 0 ){ res = 0xFFFFFFFF + 1 - res ; };
4076 return( res );
4077
4078 };;
4079
4080 ;;;function //:______________________________________://
4081 AA2_U32_ADD_BOU(u32_var,u32_add,u32_min,u32_max){ //:://
4082
4083 //:IT_IS_INTENTIONAL_THAT[ AA2_U32_ADD_BOU ]_____
4084 //:AND[ AA2_U32_SUB_BOU ]DO_NOT_SHARE_COMMON_____
4085 //:FUNCTION.THE_REDUNDANCY_IS_FOR_SIMPLICITY!!!!!
4086 //:DO_NOT_REFACTOR_JUST_TO_SHORTEN_LINES_OF_CODE!
4087
4088 if( u32_add < 0 ){ throw("[20200531A:NEG]");};
4089 if( u32_max < u32_min ){ throw("[20200531A:OOB]");};
4090
4091 //:It is erronious to start with with a value
4092 //:that is outside of the bounds given.
4093 if( u32_var < u32_min
4094 || u32_var > u32_max
4095 ){
4096 throw("[AA_U32_SUB_BOU:STARTED_OUT_OF_BOUNDS]");
4097 };;
4098
4099 //:TODO: more_careful_calculations_to
4100 //: avoid_overflow_and_underflow.
4101
4102 //:DEL_DIF:addition:
4103 //://////////////////////////////////////////////://
4104
4105 if( /*......*/ u32_var + u32_add <= u32_max ){
4106 u32_var =( u32_var + u32_add /*......*/ );
4107 }else{
4108 u32_var = u32_max;
4109 };;
4110 //://////////////////////////////////////////////://
4111
4112 return( u32_var );
4113
4114 };;function //:______________________________________://
4115 AA2_U32_SUB_BOU(u32_var,u32_sub,u32_min,u32_max){ //:://
4116
4117 //:IT_IS_INTENTIONAL_THAT[ AA2_U32_ADD_BOU ]_____
4118 //:AND[ AA2_U32_SUB_BOU ]DO_NOT_SHARE_COMMON_____
4119 //:FUNCTION.THE_REDUNDANCY_IS_FOR_SIMPLICITY!!!!!
4120 //:DO_NOT_REFACTOR_JUST_TO_SHORTEN_LINES_OF_CODE!
4121
4122 if( u32_sub < 0 ){ throw("[20200531B:NEG]");};
4123 if( u32_max < u32_min ){ throw("[20200531B:OOB]");};
4124
4125 //:It is erronious to start with with a value
4126 //:that is outside of the bounds given.
4127 if( u32_var < u32_min
4128 || u32_var > u32_max
4129 ){
4130 throw("[AA_U32_SUB_BOU:STARTED_OUT_OF_BOUNDS]");
4131 };;
4132
4133 //:TODO: more_careful_calculations_to
4134 //: avoid_overflow_and_underflow.
4135
4136 //:DEL_DIF:subtraction:
4137 //://////////////////////////////////////////////://
4138
4139 if( /*......*/ u32_var - u32_sub >= u32_min ){
4140 u32_var =( u32_var - u32_sub /*......*/ );
4141 }else{
4142 u32_var = u32_min;
4143 };;
4144 //://////////////////////////////////////////////://
4145
4146 return( u32_var );
4147
4148 };; //:______________________________________________://
4149
4150 //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
4151 //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
4152 //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
4153 //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
4154 //:AS:Addition_And_Subtraction:Funcs:(4:ABOVE):----------://
4155
4156//:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
4157
4158 //:RI:rec_inc:("memberfuncs"):(BELOW):---------------://
4159 //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
4160 //:PROCOOP:rec_inc "member" functions:
4161 //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
4162 //:==================================================://
4163 //: ## AA2_rec_inc_MoveLef : MOVE: ## ://
4164 //: ## AA2_rec_inc_MoveRig : MOVE: ## ://
4165 //: ## AA2_rec_inc_MoveUpp : MOVE: ## ://
4166 //: ## AA2_rec_inc_MoveDow : MOVE: ## ://
4167 //: ## ## ://
4168 //: ## AA2_rec_inc_ZoomInn : ZOOM: ## ://
4169 //: ## AA2_rec_inc_ZoomOut : ZOOM: ## ://
4170 //: ## ## ://
4171 //: ## AA2_rec_inc_PullLef : PULL(INN) ## ://
4172 //: ## AA2_rec_inc_PullRig : PULL(INN) ## ://
4173 //: ## AA2_rec_inc_PullTop : PULL(INN) ## ://
4174 //: ## AA2_rec_inc_PullBot : PULL(INN) ## ://
4175 //: ## ## ://
4176 //: ## AA2_rec_inc_PushLef : PUSH(OUT) ## ://
4177 //: ## AA2_rec_inc_PushRig : PUSH(OUT) ## ://
4178 //: ## AA2_rec_inc_PushTop : PUSH(OUT) ## ://
4179 //: ## AA2_rec_inc_PushBot : PUSH(OUT) ## ://
4180 //:==================================================://
4181 //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
4182
4183 //:M:MOVE:(BELOW):-------------------------------://
4184 //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
4185 //: rec_inc.MoveLef(...):
4186 //: rec_inc.MoveRig(...):
4187 //: rec_inc.MoveUpp(...):
4188 //: rec_inc.MoveDow(...):
4189 //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
4190 ;;;function AA2_rec_inc_MoveLef( rec_inc, u32_var){
4191 /**------**/BUG0002("MoveLef",rec_inc, u32_var);
4192
4193 //:Simulate_Uint32_Integer_Overflow:
4194
4195 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0,u32_var );
4196 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1,u32_var );
4197 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0, 0 );
4198 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1, 0 );
4199
4200 };;function AA2_rec_inc_MoveRig( rec_inc, u32_var){
4201 /**------**/BUG0002("MoveRig",rec_inc, u32_var);
4202
4203 //:Simulate_Uint32_Integer_Overflow:
4204
4205 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0,u32_var );
4206 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1,u32_var );
4207 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0, 0 );
4208 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1, 0 );
4209
4210 };;function AA2_rec_inc_MoveUpp( rec_inc, u32_var){
4211 /**------**/BUG0002("MoveUpp",rec_inc, u32_var);
4212
4213 //:Simulate_Uint32_Integer_Overflow:
4214
4215 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0, 0 );
4216 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1, 0 );
4217 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0,u32_var );
4218 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1,u32_var );
4219
4220 };;function AA2_rec_inc_MoveDow( rec_inc, u32_var){
4221 /**------**/BUG0002("MoveDow",rec_inc, u32_var);
4222
4223 //:Simulate_Uint32_Integer_Overflow:
4224
4225 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0, 0 );
4226 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1, 0 );
4227 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0,u32_var );
4228 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1,u32_var );
4229 };;
4230 //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
4231 //:M:MOVE:(ABOVE):-------------------------------://
4232 //:ririririririririririririririririririririririririri://
4233 //:Z:ZOOM:(BELOW):-------------------------------://
4234 //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
4235 //: rec_inc.ZoomInn(...):
4236 //: rec_inc.ZoomOut(...):
4237 //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
4238 ;;;function AA2_rec_inc_ZoomInn( rec_inc, u32_var){
4239 /**------**/BUG0002("ZoomInn",rec_inc, u32_var);
4240
4241 //: rec_inc.x_0 +=( u32_var ); --------------://
4242 //: rec_inc.x_1 -=( u32_var ); --------------://
4243 //: rec_inc.y_0 +=( u32_var ); --------------://
4244 //: rec_inc.y_1 -=( u32_var ); --------------://
4245
4246 //:Simulate_Uint32_Integer_Overflow:
4247 //:Allow_Rectangle_To_Invert_Itself:
4248
4249 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , u32_var);
4250 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , u32_var);
4251 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , u32_var);
4252 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , u32_var);
4253
4254 };;function AA2_rec_inc_ZoomOut( rec_inc, u32_var){
4255 /**------**/BUG0002("ZoomOut",rec_inc, u32_var);
4256
4257 //: rec_inc.x_0 -=( u32_var ); --------------://
4258 //: rec_inc.x_1 +=( u32_var ); --------------://
4259 //: rec_inc.y_0 -=( u32_var ); --------------://
4260 //: rec_inc.y_1 +=( u32_var ); --------------://
4261
4262 //:Simulate_Uint32_Integer_Overflow:
4263 //:Allow_Rectangle_To_Invert_Itself:
4264
4265 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , u32_var);
4266 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , u32_var);
4267 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , u32_var);
4268 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , u32_var);
4269
4270 };;//:///////////////////////////////////////////://
4271 //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
4272 //:Z:ZOOM:(ABOVE):-------------------------------://
4273 //:ririririririririririririririririririririririririri://
4274 //:P:Pull:(BELOW):-------------------------------://
4275 //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
4276 ;;;function AA2_rec_inc_PullLef( rec_inc, u32_var){
4277 /**------**/BUG0002("PullLef",rec_inc, u32_var);
4278
4279 //: lef <-----------------> rig ://
4280 //: x_0 ( + )--->X<---( - ) x_1 ://
4281 //:<<<<NEG POS>>>>://
4282
4283 //: rec_inc.x_0 +=( u32_var ); --------------://
4284 //: rec_inc.x_1 +=( 0 ); --------------://
4285 //: rec_inc.y_0 +=( 0 ); --------------://
4286 //: rec_inc.y_1 +=( 0 ); --------------://
4287
4288 //:Simulate_Uint32_Integer_Overflow:
4289 //:Allow_Rectangle_To_Invert_Itself:
4290
4291 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , u32_var);
4292 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , 0 );
4293 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , 0 );
4294 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , 0 );
4295
4296 };;function AA2_rec_inc_PullRig( rec_inc, u32_var){
4297 /**------**/BUG0002("PullRig",rec_inc, u32_var);
4298
4299 //: lef <-----------------> rig ://
4300 //: x_0 ( + )--->X<---( - ) x_1 ://
4301 //:<<<<NEG POS>>>>://
4302
4303 //: rec_inc.x_0 -=( 0 ); --------------://
4304 //: rec_inc.x_1 -=( u32_var ); --------------://
4305 //: rec_inc.y_0 -=( 0 ); --------------://
4306 //: rec_inc.y_1 -=( 0 ); --------------://
4307
4308 //:Simulate_Uint32_Integer_Overflow:
4309 //:Allow_Rectangle_To_Invert_Itself:
4310
4311 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , 0 );
4312 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , u32_var);
4313 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , 0 );
4314 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , 0 );
4315
4316 };;function AA2_rec_inc_PullTop( rec_inc, u32_var){
4317 /**------**/BUG0002("PullTop",rec_inc, u32_var);
4318
4319 //: top <-----------------> bot ://
4320 //: y_0 ( + )--->Y<---( - ) y_1 ://
4321 //:<<<<NEG POS>>>>://
4322
4323 //: rec_inc.x_0 +=( 0 ); --------------://
4324 //: rec_inc.x_1 +=( 0 ); --------------://
4325 //: rec_inc.y_0 +=( u32_var ); --------------://
4326 //: rec_inc.y_1 +=( 0 ); --------------://
4327
4328 //:Simulate_Uint32_Integer_Overflow:
4329 //:Allow_Rectangle_To_Invert_Itself:
4330
4331 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , 0 );
4332 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , 0 );
4333 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , u32_var);
4334 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , 0 );
4335
4336 };;function AA2_rec_inc_PullBot( rec_inc, u32_var){
4337 /**------**/BUG0002("PullBot",rec_inc, u32_var);
4338
4339 //: top <-----------------> bot ://
4340 //: y_0 ( + )--->Y<---( - ) y_1 ://
4341 //:<<<<NEG POS>>>>://
4342
4343 //: rec_inc.x_0 -=( 0 ); --------------://
4344 //: rec_inc.x_1 -=( 0 ); --------------://
4345 //: rec_inc.y_0 -=( 0 ); --------------://
4346 //: rec_inc.y_1 -=( u32_var ); --------------://
4347
4348 //:Simulate_Uint32_Integer_Overflow:
4349 //:Allow_Rectangle_To_Invert_Itself:
4350
4351 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , 0 );
4352 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , 0 );
4353 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , 0 );
4354 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , u32_var);
4355
4356 };;
4357 //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
4358 //:P:Pull:(ABOVE):-------------------------------://
4359 //:ririririririririririririririririririririririririri://
4360 //:P:Push:(BELOW):-------------------------------://
4361 //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
4362 ;;;function AA2_rec_inc_PushLef( rec_inc, u32_var){
4363 /**------**/BUG0002("PushLef",rec_inc, u32_var);
4364
4365 //:<<<<lef <-----------------> rig>>>://
4366 //:<<<<x_0 ( - )<<<<X>>>>( + ) x_1>>>://
4367 //:<<<<NEG POS>>>>://
4368
4369 //: rec_inc.x_0 -=( u32_var ); --------------://
4370 //: rec_inc.x_1 -=( 0 ); --------------://
4371 //: rec_inc.y_0 -=( 0 ); --------------://
4372 //: rec_inc.y_1 -=( 0 ); --------------://
4373
4374 //:Simulate_Uint32_Integer_Overflow:
4375 //:Allow_Rectangle_To_Invert_Itself:
4376
4377 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , u32_var);
4378 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , 0 );
4379 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , 0 );
4380 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , 0 );
4381
4382 };;function AA2_rec_inc_PushRig( rec_inc, u32_var){
4383 /**------**/BUG0002("PushRig",rec_inc, u32_var);
4384
4385 //:<<<<lef <-----------------> rig>>>://
4386 //:<<<<x_0 ( - )<<<<X>>>>( + ) x_1>>>://
4387 //:<<<<NEG POS>>>>://
4388
4389 //: rec_inc.x_0 +=( 0 ); --------------://
4390 //: rec_inc.x_1 +=( u32_var ); --------------://
4391 //: rec_inc.y_0 +=( 0 ); --------------://
4392 //: rec_inc.y_1 +=( 0 ); --------------://
4393
4394 //:Simulate_Uint32_Integer_Overflow:
4395 //:Allow_Rectangle_To_Invert_Itself:
4396
4397 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , 0 );
4398 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , u32_var);
4399 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , 0 );
4400 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , 0 );
4401
4402 };;function AA2_rec_inc_PushTop( rec_inc, u32_var){
4403 /**------**/BUG0002("PushTop",rec_inc, u32_var);
4404
4405 //:<<<<top <-----------------> bot>>>://
4406 //:<<<<y_0 ( - )<<<<Y>>>>( + ) y_1>>>://
4407 //:<<<<NEG POS>>>>://
4408
4409 //: rec_inc.x_0 -=( 0 ); --------------://
4410 //: rec_inc.x_1 -=( 0 ); --------------://
4411 //: rec_inc.y_0 -=( u32_var ); --------------://
4412 //: rec_inc.y_1 -=( 0 ); --------------://
4413
4414 //:Simulate_Uint32_Integer_Overflow:
4415 //:Allow_Rectangle_To_Invert_Itself:
4416
4417 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , 0 );
4418 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , 0 );
4419 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , u32_var);
4420 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , 0 );
4421
4422 };;function AA2_rec_inc_PushBot( rec_inc, u32_var){
4423 /**------**/BUG0002("PushBot",rec_inc, u32_var);
4424
4425 //:<<<<top <-----------------> bot>>>://
4426 //:<<<<y_0 ( - )<<<<Y>>>>( + ) y_1>>>://
4427 //:<<<<NEG POS>>>>://
4428
4429 //: rec_inc.x_0 +=( 0 ); --------------://
4430 //: rec_inc.x_1 +=( 0 ); --------------://
4431 //: rec_inc.y_0 +=( 0 ); --------------://
4432 //: rec_inc.y_1 +=( u32_var ); --------------://
4433
4434 //:Simulate_Uint32_Integer_Overflow:
4435 //:Allow_Rectangle_To_Invert_Itself:
4436
4437 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , 0 );
4438 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , 0 );
4439 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , 0 );
4440 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , u32_var);
4441
4442 };;
4443 //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
4444 //:P:Push:(ABOVE):-------------------------------://
4445
4446//:::::::::ririririririririririririririririririririririririri://
4447
4448 //:B:BOUNDED:(BELOW):----------------------------://
4449 //:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB://
4450 //: Bounded versions of Functions in other ://
4451 //: section. Adds corrections or takes no ://
4452 //: actions if action would result in defying ://
4453 //: bounds of rec_bou parameter. ://
4454 //: ://
4455 //: NOTE: All functions in this category ://
4456 //: expect the rectangle to already ://
4457 //: be within bounds of rec_bou. ://
4458 //: ://
4459 //: It is an error otherwise. ://
4460 //:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB://
4461
4462 //:BM:BoundedMoves:(BELOW):------------------://
4463 //:BMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBM://
4464 //: rec_inc.MoveLef(...):
4465 function AA2_rec_inc_MoveLef_rec_bou(
4466 rec_inc,u32_var,rec_bou
4467 ){
4468 BUG0001(rec_inc,u32_var,rec_bou,"[Mov_L]");
4469
4470 var n_x = rec_inc.x_0 - u32_var;
4471 if( n_x < rec_bou.x_0 ){
4472 //:Do_Nothing_No_Room_For_Action
4473 }else{
4474 AA2_rec_inc_MovLef(
4475 rec_inc,u32_var
4476 );;
4477 };;
4478 };;
4479 //: rec_inc.MoveRig(...):
4480 function AA2_rec_inc_MoveRig_rec_bou(
4481 rec_inc,u32_var,rec_bou
4482 ){
4483 BUG0001(rec_inc,u32_var,rec_bou,"[Mov_R]");
4484
4485 var n_x = rec_inc.x_1 + u32_var;
4486 if( n_x > rec_bou.x_1 ){
4487 //:Do_Nothing_No_Room_For_Action
4488 }else{
4489 AA2_rec_inc_MovRig(
4490 rec_inc,u32_var
4491 );;
4492 };;
4493 };;
4494 //: rec_inc.MoveUpp(...):
4495 function AA2_rec_inc_MoveUpp_rec_bou(
4496 rec_inc,u32_var,rec_bou
4497 ){
4498 BUG0001(rec_inc,u32_var,rec_bou,"[Mov_U]");
4499
4500 var n_y = rec_inc.y_0 - u32_var;
4501 if( n_y < rec_bou.y_0 ){
4502 //:Do_Nothing_No_Room_For_Action
4503 }else{
4504 AA2_rec_inc_MovUpp(
4505 rec_inc,u32_var
4506 );;
4507 };;
4508 };;
4509 //: rec_inc.MoveDow(...):
4510 function AA2_rec_inc_MoveDow_rec_bou(
4511 rec_inc,u32_var,rec_bou
4512 ){
4513 BUG0001(rec_inc,u32_var,rec_bou,"[Mov_D]");
4514
4515 var n_y = rec_inc.y_1 + u32_var;
4516 if( n_y > rec_bou.y_1 ){
4517 //:Do_Nothing_No_Room_For_Action
4518 }else{
4519 AA2_rec_inc_MovDow(
4520 rec_inc,u32_var
4521 );;
4522 };;
4523 };;
4524 //:BMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBM://
4525 //:BM:BoundedMoves:(ABOVE):------------------://
4526 //:BZ:BoundedZooms:(BELOW):------------------://
4527 //:BZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZ://
4528 //: rec_inc.ZoomInn(...):
4529 function AA2_rec_inc_ZoomInn_rec_bou(
4530 rec_inc,u32_var,rec_bou
4531 ){
4532 BUG0001(rec_inc,u32_var,rec_bou,"[Zoom_i]");
4533
4534 //:Zoom in does not require boundary,
4535 //:but is supplied for consistency.
4536 if( rec_bou ){ /** NOOP **/ };
4537
4538 //:If full zoom results in overlap, zoom
4539 //:as much as is possible without
4540 //:distorting rec_inc proportions.
4541
4542 //:MAX[ x & y ]( m_x & m_y ):
4543 //:Moving m_x or m_y inward on respective
4544 //:axis makes points of rectangle tangental.
4545 //:MINUS_ZERO_NOT_ONE_BECAUSE_CAN_OVERLAY
4546 var m_x = ( rec_inc.x_1 - rec_inc.x_0 - 0 );
4547 var m_y = ( rec_inc.y_1 - rec_inc.y_0 - 0 );
4548
4549 //:HALF_MAX: ( h_x & h_y ):
4550 //:Since both sides are moving in, need
4551 //:to use this value:
4552 var h_x = Math.floor( m_x / 2 );
4553 var h_y = Math.floor( m_y / 2 );
4554
4555 //:ActualInset: ( a_x & a_y )
4556 var a_x = Math.min(h_x,u32_var);
4557 var a_y = Math.min(h_y,u32_var);
4558
4559 //:New_XY:
4560 rec_inc.y_0 += a_y;
4561 rec_inc.y_1 -= a_y;
4562 rec_inc.x_0 += a_x;
4563 rec_inc.x_1 -= a_x;
4564
4565 //: If rectangle is somehow out of bounds,
4566 //: move it in bounds? Hmm... That is
4567 //: seperate behavior that belongs somewhere
4568 //: else. And also, I don't want to write
4569 //: that logic anyways.
4570
4571 };;
4572 //: rec_inc.ZoomOut(...):
4573 function AA2_rec_inc_ZoomOut_rec_bou(
4574 rec_inc,u32_var,rec_bou
4575 ){
4576 BUG0001(rec_inc,u32_var,rec_bou,"[Zoom_o]");
4577
4578 //:The max zoom out for each axis is rougly
4579 //:the minimum of the distance of each
4580 //:rec_inc edge to it's RSPCTV rec_bou edge.
4581 //:MINUS_ZERO_NOT_ONE_BECAUSE_CAN_OVERLAY
4582 var lef = ( rec_inc.x0 - rec_bou.x0 - 0 );
4583 var rig = ( rec_bou.x1 - rec_inc.x1 - 0 );
4584 var top = ( rec_inc.y0 - rec_bou.y0 - 0 );
4585 var bot = ( rec_bou.y1 - rec_inc.y1 - 0 );
4586
4587 //:Max x & y:
4588 var m_x = Math.min( lef , rig );
4589 var m_y = Math.min( top , bot );
4590
4591 //:HALF_MAX: ( h_x & h_y ):
4592 //:Since both sides are moving in, need
4593 //:to use this value:
4594 var h_x = Math.floor( m_x / 2 );
4595 var h_y = Math.floor( m_y / 2 );
4596
4597 //:ActualOutset:
4598 var a_x = Math.min(h_x,u32_var);
4599 var a_y = Math.max(h_y,u32_var);
4600
4601 //:New_XY:
4602 rec_inc.y_0 -= a_y;
4603 rec_inc.y_1 += a_y;
4604 rec_inc.x_0 -= a_x;
4605 rec_inc.x_1 += a_x;
4606
4607 };;
4608 //:BZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZ://
4609 //:BZ:BoundedZooms:(ABOVE):------------------://
4610
4611//:::::::::ririririririririririririririririririririririririri://
4612
4613 //:PI:PullIn:BOUNDED:(BELOW):----------------://
4614 //:PI>>>>>>>>>>>>>>>>>>PI<<<<<<<<<<<<<<<<<<PI://
4615 //:PIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPI://
4616 //:You are inside rectangle pulling the
4617 //:edges INWARDS on themselves. Maximum pull
4618 //:inward allows for co-linear rectangle edges.
4619 //:PIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPI://
4620 function AA2_rec_inc_PullLef_rec_bou(
4621 rec_inc,u32_var,rec_bou
4622 ){ //: LEF >>>>>>>>>> X <<<<<<<<<< RIG
4623 //: TOP >>>>>>>>>> X <<<<<<<<<< BOT
4624 BUG0001(rec_inc,u32_var,rec_bou,"[pul_L]");
4625
4626 var m_p =(rec_inc.x1 - rec_inc.x0 - 0 );
4627 var a_p =Math.min(m_p,u32_var);
4628 rec_inc.x_0 += ( a_p );
4629 };;
4630 function AA2_rec_inc_PullRig_rec_bou(
4631 rec_inc,u32_var,rec_bou
4632 ){ //: LEF >>>>>>>>>> X <<<<<<<<<< RIG
4633 //: TOP >>>>>>>>>> X <<<<<<<<<< BOT
4634 BUG0001(rec_inc,u32_var,rec_bou,"[pul_R]");
4635
4636 var m_p =(rec_inc.x1 - rec_inc.x0 - 0 );
4637 var a_p =Math.min(m_p,u32_var);
4638 rec_inc.x_1 -= ( a_p );
4639 };;
4640 function AA2_rec_inc_PullTop_rec_bou(
4641 rec_inc,u32_var,rec_bou
4642 ){ //: LEF >>>>>>>>>> Y <<<<<<<<<< RIG
4643 //: TOP >>>>>>>>>> Y <<<<<<<<<< BOT
4644 BUG0001(rec_inc,u32_var,rec_bou,"[pul_T]");
4645
4646 var m_p =(rec_inc.y1 - rec_inc.y0 - 0 );
4647 var a_p =Math.min(m_p,u32_var);
4648 rec_inc.y_0 += ( a_p );
4649 };;
4650 function AA2_rec_inc_PullBot_rec_bou(
4651 rec_inc,u32_var,rec_bou
4652 ){ //: LEF >>>>>>>>>> Y <<<<<<<<<< RIG
4653 //: TOP >>>>>>>>>> Y <<<<<<<<<< BOT
4654 BUG0001(rec_inc,u32_var,rec_bou,"[pul_B]");
4655
4656 var m_p =(rec_inc.y1 - rec_inc.y0 - 0 );
4657 var a_p =Math.min(m_p,u32_var);
4658 rec_inc.y_1 -= ( a_p );
4659 };;
4660 //:PIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPI://
4661 //:PI>>>>>>>>>>>>>>>>>>PI<<<<<<<<<<<<<<<<<<PI://
4662 //:PI:PullIn:BOUNDED:(ABOVE):----------------://
4663
4664//:::::::::ririririririririririririririririririririririririri://
4665
4666 //:PO:PushOut:BOUNDED:(ABOVE):---------------://
4667 //:PO<<<<<<<<<<<<<<<<<<PO>>>>>>>>>>>>>>>>>>PO://
4668 //:POPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO://
4669 //: ://
4670 //: You are inside the rectangle and you are ://
4671 //: pushing on the walls trying to get out. ://
4672 //: ://
4673 //: VAR_NAMES: ://
4674 //: m_p: [ max | min ][ push | pull ] ://
4675 //: a_p: [ actual ][ push | pull ] ://
4676 //:POPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO://
4677 ;;;function AA2_rec_inc_PushLef_rec_bou(
4678 rec_inc,u32_var,rec_bou
4679 ){ //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
4680 //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
4681 BUG0001(rec_inc,u32_var,rec_bou,"[PusLef]");
4682
4683 var m_p =(rec_inc.x_0 - rec_bou.x_0 - 0 );
4684 var a_p =Math.min(m_p,u32_var);
4685 rec_inc.x_0 -= ( a_p );
4686 };;function AA2_rec_inc_PushRig_rec_bou(
4687 rec_inc,u32_var,rec_bou
4688 ){ //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
4689 //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
4690 BUG0001(rec_inc,u32_var,rec_bou,"[PusRig]");
4691
4692 var m_p =(rec_bou.x_1 - rec_inc.x_1 - 0 );
4693 var a_p =Math.min(m_p,u32_var);
4694 rec_inc.x_1 += ( a_p );
4695
4696 };;function AA2_rec_inc_PushTop_rec_bou(
4697 rec_inc,u32_var,rec_bou
4698 ){ //: LEF <<<<<<<<<< Y >>>>>>>>>> RIG
4699 //: TOP <<<<<<<<<< Y >>>>>>>>>> BOT
4700 BUG0001(rec_inc,u32_var,rec_bou,"[PusTop]");
4701
4702 var m_p =(rec_inc.y_0 - rec_bou.y_0 - 0 );
4703 var a_p =Math.min(m_p,u32_var);
4704 rec_inc.y_0 -= ( a_p );
4705
4706 };;function AA2_rec_inc_PushBot_rec_bou(
4707 rec_inc,u32_var,rec_bou
4708 ){ //: LEF <<<<<<<<<< Y >>>>>>>>>> RIG
4709 //: TOP <<<<<<<<<< Y >>>>>>>>>> BOT
4710 BUG0001(rec_inc,u32_var,rec_bou,"[PusBot]");
4711
4712 var m_p =(rec_bou.y_1 - rec_inc.y_1 - 0 );
4713 var a_p =Math.min(m_p,u32_var);
4714 rec_inc.y_1 += ( a_p );
4715 };;
4716 //:PO<<<<<<<<<<<<<<<<<<PO>>>>>>>>>>>>>>>>>>PO://
4717 //:POPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO://
4718
4719 //:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB://
4720 //:B:BOUNDED:(ABOVE):----------------------------://
4721
4722//:::::::::ririririririririririririririririririririririririri://
4723
4724 //:RS:Rectangle_Status_Functions:
4725 //:RSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRS://
4726
4727 ;;;function AA2_rec_inc_OrdBad( rec_inc ){
4728
4729 var x_0 = rec_inc.x_0;
4730 var y_0 = rec_inc.y_0;
4731 var x_1 = rec_inc.x_1;
4732 var y_1 = rec_inc.y_1;
4733
4734 var ord_bad = ( 0 );
4735
4736 if( !(x_0 >= 0 )){ ord_bad = ( 1 ); };
4737 if( !(y_0 >= 0 )){ ord_bad = ( 1 ); };
4738 if( !(x_1 >= 0 )){ ord_bad = ( 1 ); };
4739 if( !(y_1 >= 0 )){ ord_bad = ( 1 ); };
4740
4741 if( x_0 > x_1 ){
4742 ord_bad = ( 1 );
4743 };;
4744 if( y_0 > y_1 ){
4745 ord_bad = ( 1 );
4746 };;
4747
4748 return( ord_bad );
4749
4750 };;function AA2_rec_inc_NIN_rec_bou(
4751 rec_inc , rec_bou
4752 ){
4753 //:NIN: Not_INside (of rec_bou)
4754
4755 //:NOTE: - - - -://
4756 //: NIN:Not_INside(of): - - - -://
4757 //: NOT_THE_SAME_AS: - - - -://
4758 //: AA2_rec_inc_OUT_rec_bou - - - -://
4759
4760 var nin=( 0 );
4761
4762 //:You are still inside if you are
4763 //:exactly [ on / co-linear ] edge.
4764 if( rec_inc.x_0 < rec_bou.x_0 //:OOB?
4765 || rec_inc.x_1 > rec_bou.x_1 //:OOB?
4766 || rec_inc.y_0 < rec_bou.x_0 //:OOB?
4767 || rec_inc.y_1 > rec_bou.x_1 //:OOB?
4768 ){
4769 nin = ( 1 );
4770 };;
4771
4772 return( nin );
4773 };;function AA2_rec_inc_INN_rec_bou(
4774 rec_inc , rec_bou
4775 ){
4776 //:INN:Inside_of:rec_bou:100%
4777
4778 var inn=( 0 );
4779
4780 if( rec_inc.x_0 >= rec_bou.x_0 //:INN?
4781 && rec_inc.x_1 <= rec_bou.x_1 //:INN?
4782 && rec_inc.y_0 >= rec_bou.x_0 //:INN?
4783 && rec_inc.y_1 <= rec_bou.x_1 //:INN?
4784 ){
4785 inn = ( 1 );
4786 };;
4787
4788 return( inn );
4789 };;function AA2_rec_inc_OUT_rec_bou(
4790 rec_inc , rec_bou
4791 ){
4792 //:OUT:Outside_Of: (Completely)
4793 throw("[TODO:2020_05_25-A]");
4794
4795 };;function AA2_rec_inc_NOU_rec_bou(
4796 rec_inc , rec_bou
4797 ){
4798 //:NOU:Not_Outside_Of:
4799 throw("[TODO:2020_05_25-B]");
4800 };;
4801 //:RSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRS://
4802
4803 //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
4804 //:RI:rec_inc:("memberfuncs"):(ABOVE):---------------://
4805
4806//:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
4807//: (ABOVE) ://
4808//:NF: Namespaced_Functions: (CONTI):------------------------://
4809//: (BELOW) ://
4810//:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
4811
4812 //:Convert the global event to a keyboard key number:
4813 function AA2_glo_eve_KeyNum( glo_eve ){
4814
4815 //:AKA[ Keyanum | KeyNum | key_num | key_as_num ]
4816 //:NegativeTwo( 0-2 ):Not even a keyboard event.
4817 var key_num =( 0 - 2 );
4818
4819 if( 0 == ( glo_eve.k_u || glo_eve.k_d ) ){
4820
4821 //:return negative for not-a-key:
4822 //: NegativeOne( 0-1 ): Key event, but not number.
4823 key_num =( 0 - 1 );
4824
4825 }else{
4826 var key = ( glo_eve.key );
4827
4828 if( "1"==key || "!"==key ){
4829 key_num = ( 1 );
4830 }else
4831 if( "2"==key || "@"==key ){
4832 key_num = ( 2 );
4833 }else
4834 if( "3"==key || "#"==key ){
4835 key_num = ( 3 );
4836 }else
4837 if( "4"==key || "$"==key ){
4838 key_num = ( 4 );
4839 }else
4840 if( "5"==key || "%"==key ){
4841 key_num = ( 5 );
4842 }else
4843 if( "6"==key || "^"==key ){
4844 key_num = ( 6 );
4845 }else
4846 if( "7"==key || "&"==key ){
4847 key_num = ( 7 );
4848 }else
4849 if( "8"==key || "*"==key ){
4850 key_num = ( 8 );
4851 }else
4852 if( "9"==key || "("==key ){
4853 key_num = ( 9 );
4854 }else
4855 if( "0"==key || ")"==key ){
4856 key_num = ( 0 );
4857 };;
4858 };;
4859
4860 //:key_num is negative if could not resolve the
4861 //:key to a number.
4862 return( key_num );
4863 };;
4864
4865//:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
4866//: (ABOVE) ://
4867//:NF: Namespaced_Functions: (CONTI):------------------------://
4868//: (BELOW) ://
4869//:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
4870
4871 //:GS:GetShader:(BELOW):---------------------------------://
4872 //:GSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGS://
4873 function AA2_Get_edi_sha_src( edi_mod ){
4874 let N = "\n"; //:NewLine
4875 var code = "";
4876
4877 //:00000000000000000000000000000000000000000000000000://
4878 ;;;;;;if( 0 == edi_mod ){ code=(""
4879 +N+" "
4880 +N+" "
4881 +N+" //:Calculate_On_Screen_Pixel_Coords: "
4882 +N+" "
4883 +N+" float r = 0.2; "
4884 +N+" float g = 0.2; "
4885 +N+" float b = 0.2; "
4886 +N+" float a = 1.0; "
4887 +N+" "
4888 +N+" uvec4 intrgba = Get_Tex_iso_mem( "
4889 +N+" /**/ int( ( gl_FragCoord.x - 0.5 ) ) "
4890 +N+" , "
4891 +N+" (int( SAN_ISO ) - 1) //: FLIP_Y "
4892 +N+" -int( ( gl_FragCoord.y - 0.5 ) ) "
4893 +N+" );; "
4894 +N+" "
4895 +N+" r = float( intrgba.x ) / 255.0; "
4896 +N+" g = float( intrgba.y ) / 255.0; "
4897 +N+" b = float( intrgba.z ) / 255.0; "
4898 +N+" a = float( intrgba.w ) / 255.0; "
4899 +N+" "
4900 +N+" float flt_gam_tim = float( gam_tim ) / 255.0; "
4901 +N+" r = r + sin( flt_gam_tim + 0.000 ); "
4902 +N+" g = g + sin( flt_gam_tim + 64.000 ); "
4903 +N+" b = b + sin( flt_gam_tim + 128.000 ); "
4904 +N+" "
4905 +N+" pix_fra = vec4( r,g,b,a); "
4906 +N+" "
4907 +N+" "
4908 );;};;
4909 //:00000000000000000000000000000000000000000000000000://
4910 //:111111111111111111111111111111111111111111111111111111://
4911 if( 1 == edi_mod ){ code=( ""
4912
4913+N+" //:P:test_bed_shaders_prelude:(BELOW):---------://"//[P]//
4914+N+" //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://"//[P]//
4915+N+" "//[P]//
4916+N+" //:dex_sha:Which test bed shader is active? "//[P]//
4917+N+" uint dex_sha = TAU_001_U32( "//[P]//
4918+N+" TAU_001_EDIT001_dex_sha "//[P]//
4919+N+" );; "//[P]//
4920+N+" "//[P]//
4921+N+" //:ZP:Zoom_Pan_fragCoordTransform:(BELOW):-://"//[P]//
4922+N+" //:ZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZP://"//[P]//
4923+N+" "//[P]//
4924+N+" //|¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯¯¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯|//"//[P]//
4925+N+" //|VARIABLES_BELOW:SC[ V2M_JS_2020_05_27 ] |//"//[P]//
4926+N+" //|- - - - - - - - - - - -- - - - - - - - -|//"//[P]//
4927+N+" //| vp0_m_o : Viewport[ 0 ][ MAV ][ OUT ] |//"//[P]//
4928+N+" //| vp0_m_i : Viewport[ 0 ][ MAV ][ INN ] |//"//[P]//
4929+N+" //| vp2_m_o : Viewport[ 2 ][ MAV ][ OUT ] |//"//[P]//
4930+N+" //| vp2_m_i : Viewport[ 2 ][ MAV ][ INN ] |//"//[P]//
4931+N+" //| vpc_m_o : Viewport[ c ][ MAV ][ OUT ] |//"//[P]//
4932+N+" //| vpc_m_i : Viewport[ c ][ MAV ][ INN ] |//"//[P]//
4933+N+" //| vpc_n_o : Viewport[ c ][ NOR ][ OUT ] |//"//[P]//
4934+N+" //| vpc_n_i : Viewport[ c ][ NOR ][ INN ] |//"//[P]//
4935+N+" //|__ __ __ __ __ __ __ ____ __ __ __ __ __|//"//[P]//
4936+N+" //"//[P]//
4937+N+" vec2 vp0_m_i =vec2( //"//[P]//
4938+N+" gl_FragCoord.x //"//[P]//
4939+N+" , //"//[P]//
4940+N+" (rec_vpc.y_1-rec_vpc.y_0+0.0) //"//[P]//
4941+N+" - gl_FragCoord.y //:[FLIP_Y]:// //"//[P]//
4942+N+" );; //"//[P]//
4943+N+" //"//[P]//
4944+N+" //:----------------------------------------://"//[P]//
4945+N+" //: [ rec_vp0/vp0_m_i ]TO[ rec_vp2/vp2_m_o ]//"//[P]//
4946+N+" //: INN: vp0 ( rec_vp0 & vp0_m_i ) //"//[P]//
4947+N+" //: OUT: vp2 ( rec_vp2 & vp2_m_o ) //"//[P]//
4948+N+" //:----------------------------------------://"//[P]//
4949+N+" vec2 vp2_m_o=vec2( //"//[P]//
4950+N+" ( ( vp0_m_i.x - rec_vp0.x_0 ) //"//[P]//
4951+N+" / ( rec_vp0.x_1 - rec_vp0.x_0 ) //"//[P]//
4952+N+" * ( rec_vp2.x_1 - rec_vp2.x_0 ) //"//[P]//
4953+N+" ) + rec_vp2.x_0 /////////////// //"//[P]//
4954+N+" , //"//[P]//
4955+N+" ( ( vp0_m_i.y - rec_vp0.y_0 ) //"//[P]//
4956+N+" / ( rec_vp0.y_1 - rec_vp0.y_0 ) //"//[P]//
4957+N+" * ( rec_vp2.y_1 - rec_vp2.y_0 ) //"//[P]//
4958+N+" ) + rec_vp2.y_0 /////////////// //"//[P]//
4959+N+" );; //"//[P]//
4960+N+" //:----------------------------------------://"//[P]//
4961+N+" //"//[P]//
4962+N+" //: Output_Becomes_Input: //"//[P]//
4963+N+" vec2 vp2_m_i = vec2( vp2_m_o ); //"//[P]//
4964+N+" //"//[P]//
4965+N+" //:----------------------------------------://"//[P]//
4966+N+" //: YES. we are using rec_vpc AGAIN! //"//[P]//
4967+N+" //: The formula is just an assignment, //"//[P]//
4968+N+" //: because vp2 is a sub-sample of vpc. //"//[P]//
4969+N+" //: //"//[P]//
4970+N+" //: [ rec_vp2/vp2_m_i ]TO[ rec_vpc/vpc_m_o ]//"//[P]//
4971+N+" //: INN: vp2 ( rec_vp2 & vp2_m_i ) //"//[P]//
4972+N+" //: OUT: vpc ( rec_vpc / vpc_m_o ) //"//[P]//
4973+N+" //:----------------------------------------://"//[P]//
4974+N+" vec2 vpc_m_o =vec2( vp2_m_i ); //"//[P]//
4975+N+" //:----------------------------------------://"//[P]//
4976+N+" //"//[P]//
4977+N+" //: Output_Becomes_Input: //"//[P]//
4978+N+" //: Already used[ vpc_m_i ]so we will call //"//[P]//
4979+N+" //: this var [ vpc_mi2 ]to avoid prblms. //"//[P]//
4980+N+" vec2 vpc_mi2 = vec2( vpc_m_o ); //"//[P]//
4981+N+" //"//[P]//
4982+N+" //:----------------------------------------://"//[P]//
4983+N+" //: [rec_vpc/vpc_m_i]TO[rec_vpc/vpc_n_o] //"//[P]//
4984+N+" //: Formula is simpler this time because we //"//[P]//
4985+N+" //: only want the percentage_along_path on //"//[P]//
4986+N+" //: the sides of rec_vpc. //"//[P]//
4987+N+" //:----------------------------------------://"//[P]//
4988+N+" vec2 vpc_n_o = vec2( //"//[P]//
4989+N+" (( vpc_mi2.x - rec_vpc.x_0 ) //"//[P]//
4990+N+" /( rec_vpc.x_1- rec_vpc.x_0 )) //"//[P]//
4991+N+" , //"//[P]//
4992+N+" (( vpc_mi2.y - rec_vpc.y_0 ) //"//[P]//
4993+N+" /( rec_vpc.y_1- rec_vpc.y_0 )) //"//[P]//
4994+N+" );; //"//[P]//
4995+N+" //:----------------------------------------://"//[P]//
4996+N+" //"//[P]//
4997+N+" //: Output_Becomes_Input: //"//[P]//
4998+N+" vec2 vpc_n_i = vec2( vpc_n_o ); //"//[P]//
4999+N+" //"//[P]//
5000+N+" //:These normalized coordinates represent //"//[P]//
5001+N+" //:rec_vpc coordinates after rec_vp2 has //"//[P]//
5002+N+" //:ZOOMED and PANNED over rec_vpc. //"//[P]//
5003+N+" vec2 tbs_noc = vec2( vpc_n_i ); //"//[P]//
5004+N+" //"//[P]//
5005+N+" //:ZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZP://"//[P]//
5006+N+" //:ZP:Zoom_Pan_fragCoordTransform:(BELOW):-://"//[P]//
5007+N+" //"//[P]//
5008+N+" //:Make test bed shaders aware of vp0 bounds so //"//[P]//
5009+N+" //:you can draw the shader code inset. //"//[P]//
5010+N+" //"//[P]//
5011+N+" #define R_0 ( rec_vp0 ) //:///////////////////////"//[P]//
5012+N+" float VP0_WID =( R_0.x_1 - R_0.x_0 + 1.0 ); //"//[P]//
5013+N+" float VP0_HIG =( R_0.y_1 - R_0.y_0 + 1.0 ); //"//[P]//
5014+N+" #undef R_0 //:///////////////////////////////////"//[P]//
5015+N+" //"//[P]//
5016+N+" //:Variables for test bed shaders: //"//[P]//
5017+N+" float tbs_tim = float( gam_tim ) / 255.0; //"//[P]//
5018+N+" //"//[P]//
5019+N+" //:N0:Normalized_Within_VP0:SC[tbs_noc_vp0_math]//"//[P]//
5020+N+" //:N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0://"//[P]//
5021+N+" //: ://"//[P]//
5022+N+" //: tbs_noc: 0.0 to 1.0 when pixel in rec_vp0 ://"//[P]//
5023+N+" //: ://"//[P]//
5024+N+" //:N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0://"//[P]//
5025+N+" //"//[P]//
5026+N+" //: ###########################################://"//[P]//
5027+N+" //: ## ##://"//[P]//
5028+N+" //: ## |<----gl_FragCoord(Rougly)--->| ##://"//[P]//
5029+N+" //: ## ( min ) ( min ) ##://"//[P]//
5030+N+" //: ## tbs_uic tbs_uic ##://"//[P]//
5031+N+" //: ## | | ##://"//[P]//
5032+N+" //: ## V V ##://"//[P]//
5033+N+" //: ## |<----------- vpc ----------->| ##://"//[P]//
5034+N+" //: ## ##---------------------------## ##://"//[P]//
5035+N+" //: ## ##-----------## ##://"//[P]//
5036+N+" //: ## |<--- vp0 --->| ##://"//[P]//
5037+N+" //: ## ^ ^ ##://"//[P]//
5038+N+" //: ## | | ##://"//[P]//
5039+N+" //: ## tbs_noc tbs_noc ##://"//[P]//
5040+N+" //: ## tbs_mac tbs_mac ##://"//[P]//
5041+N+" //: ## ( max ) ( max ) ##://"//[P]//
5042+N+" //: ## ##://"//[P]//
5043+N+" //: ###########################################://"//[P]//
5044+N+" //"//[P]//
5045+N+" //:De-normalize: Make Maverick: tbs_mac //"//[P]//
5046+N+" vec2 tbs_mac = tbs_noc * vec2( //"//[P]//
5047+N+" (VP0_WID - 1.0)//:(VP0_WID - 1) //"//[P]//
5048+N+" , (VP0_HIG - 1.0) //:(VP0_HIG - 1) //"//[P]//
5049+N+" );; //"//[P]//
5050+N+" //"//[P]//
5051+N+" //:N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0://"//[P]//
5052+N+" //"//[P]//
5053+N+" //: tbs_uic: Uint_(Color|Coord) //"//[P]//
5054+N+" uvec2 tbs_uic = uvec2( //"//[P]//
5055+N+" /**/gl_FragCoord.x - 0.5 //"//[P]//
5056+N+" , gl_FragCoord.y - 0.5 //"//[P]//
5057+N+" );; //"//[P]//
5058+N+" //"//[P]//
5059+N+" bool inn_bou =( //"//[P]//
5060+N+" tbs_uic.x >= uint( rec_vp0.x_0 ) //:LEF //"//[P]//
5061+N+" && tbs_uic.x <= uint( rec_vp0.x_1 ) //:RIG //"//[P]//
5062+N+" && tbs_uic.y >= uint( rec_vp0.y_0 ) //:TOP //"//[P]//
5063+N+" && tbs_uic.y <= uint( rec_vp0.y_1 ) //:BOT //"//[P]//
5064+N+" ); //"//[P]//
5065+N+" //"//[P]//
5066+N+" vec4 tbs_out = vec4( 0.3, 0.3, 0.3, 1.0 ); //"//[P]//
5067+N+" //"//[P]//
5068+N+" //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://"//[P]//
5069+N+" //:P:test_bed_shaders_prelude:(BELOW):---------://"//[P]//
5070
5071 +N+" if( ! inn_bou ){ "//+E1_FS+//
5072 +N+" tbs_out.x =( 0.2 ); "//+E1_FS+//
5073 +N+" tbs_out.y =( 0.2 ); "//+E1_FS+//
5074 +N+" tbs_out.z =( 0.2 ); "//+E1_FS+//
5075 +N+" tbs_out.w =( 1.0 );//:100% alpha! "//+E1_FS+//
5076 +N+" }else{ "//+E1_FS+//
5077 +N+" if( uint(0) == dex_sha ){ "//+E1_FS+//
5078 +N+" "//+E1_FS+//
5079 +N+" "+AA2_EDIT001_FragSrc_dex_sha( 0 )+" "//+E1_FS+//
5080 +N+" "//+E1_FS+//
5081 +N+" };; "//+E1_FS+//
5082 +N+" if( uint(1) == dex_sha ){ "//+E1_FS+//
5083 +N+" "//+E1_FS+//
5084 +N+" "+AA2_EDIT001_FragSrc_dex_sha( 1 )+" "//+E1_FS+//
5085 +N+" "//+E1_FS+//
5086 +N+" };; "//+E1_FS+//
5087 +N+" if( uint(2) == dex_sha ){ "//+E1_FS+//
5088 +N+" "//+E1_FS+//
5089 +N+" "+AA2_EDIT001_FragSrc_dex_sha( 2 )+" "//+E1_FS+//
5090 +N+" "//+E1_FS+//
5091 +N+" };; "//+E1_FS+//
5092 +N+" if( uint(3) == dex_sha ){ "//+E1_FS+//
5093 +N+" "//+E1_FS+//
5094 +N+" "+AA2_EDIT001_FragSrc_dex_sha( 3 )+" "//+E1_FS+//
5095 +N+" "//+E1_FS+//
5096 +N+" };; "//+E1_FS+//
5097 +N+" if( uint(4) == dex_sha ){ "//+E1_FS+//
5098 +N+" "//+E1_FS+//
5099 +N+" "+AA2_EDIT001_FragSrc_dex_sha( 4 )+" "//+E1_FS+//
5100 +N+" "//+E1_FS+//
5101 +N+" };; "//+E1_FS+//
5102 +N+" if( uint(5) == dex_sha ){ "//+E1_FS+//
5103 +N+" "//+E1_FS+//
5104 +N+" "+AA2_EDIT001_FragSrc_dex_sha( 5 )+" "//+E1_FS+//
5105 +N+" "//+E1_FS+//
5106 +N+" };; "//+E1_FS+//
5107 +N+" if( uint(6) == dex_sha ){ "//+E1_FS+//
5108 +N+" "//+E1_FS+//
5109 +N+" "+AA2_EDIT001_FragSrc_dex_sha( 6 )+" "//+E1_FS+//
5110 +N+" "//+E1_FS+//
5111 +N+" };; "//+E1_FS+//
5112 +N+" if( uint(7) == dex_sha ){ "//+E1_FS+//
5113 +N+" "//+E1_FS+//
5114 +N+" "+AA2_EDIT001_FragSrc_dex_sha( 7 )+" "//+E1_FS+//
5115 +N+" "//+E1_FS+//
5116 +N+" };; "//+E1_FS+//
5117 +N+" if( uint(8) == dex_sha ){ "//+E1_FS+//
5118 +N+" "//+E1_FS+//
5119 +N+" "+AA2_EDIT001_FragSrc_dex_sha( 8 )+" "//+E1_FS+//
5120 +N+" "//+E1_FS+//
5121 +N+" };; "//+E1_FS+//
5122 +N+" if( uint(9) == dex_sha ){ "//+E1_FS+//
5123 +N+" "//+E1_FS+//
5124 +N+" "+AA2_EDIT001_FragSrc_dex_sha( 9 )+" "//+E1_FS+//
5125 +N+" "//+E1_FS+//
5126 +N+" };; "//+E1_FS+//
5127 +N+" "//+E1_FS+//
5128 +N+" };; //:inn_bou? "//+E1_FS+//
5129 +N+" "//+E1_FS+//
5130 +N+" //:Test bed shaders outro: "//+E1_FS+//
5131 +N+" //://///////////////////////////////////://"//+E1_FS+//
5132 +N+" //: Load output of tbs shader branch: "//+E1_FS+//
5133 +N+" //: fragColorVariable == tbs_out; "//+E1_FS+//
5134 +N+" pix_fra = tbs_out; "//+E1_FS+//
5135 +N+" //://///////////////////////////////////://"//+E1_FS+//
5136 );;};;//:////////////////////////////////////////////://
5137 //:111111111111111111111111111111111111111111111111111111://
5138 //:222222222222222222222222222222222222222222222222222222://
5139 //:TAGS[ #SHADER_CODE# / #shader_code# ]:::::::::::::::::://
5140 if( 2 == edi_mod ){ code=(""
5141
5142 +N+"//:DA:DeclareAll_Variables:(BELOW):--------://"//[E_2]//
5143 +N+"//:DADADADADADADADADADADADADADADADADADADADA://"//[E_2]//
5144 +N+"//: "//[E_2]//
5145 +N+"//: Logic transcribed from DAS_BOR.HTM "//[E_2]//
5146 +N+"//: All variables declared up front to help "//[E_2]//
5147 +N+"//: me get my head straight on all of this. "//[E_2]//
5148 +N+"//: "//[E_2]//
5149 +N+"//:DADADADADADADADADADADADADADADADADADADADA://"//[E_2]//
5150 +N+" "//[E_2]//
5151 +N+" REC_INC rec_src ; //: rec_vp1 "//[E_2]//
5152 +N+" REC_INC rec_dst ; //: rec_vp0 "//[E_2]//
5153 +N+" float vpc_hig ; //: FLIP__Y "//[E_2]//
5154 +N+" "//[E_2]//
5155 +N+" //:Configuration: Source_Encoding_Cluster "//[E_2]//
5156 +N+" //:How many pixels are used to encode a "//[E_2]//
5157 +N+" //:single tile value? "//[E_2]//
5158 +N+" float SRC_ENC_C_X =(1.0); //:Cluster_X "//[E_2]//
5159 +N+" float SRC_ENC_C_Y =(1.0); //:Cluster_Y "//[E_2]//
5160 +N+" "//[E_2]//
5161 +N+" //:VS:Viewport_Sizes:------------------://"//[E_2]//
5162 +N+" //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://"//[E_2]//
5163 +N+" "//[E_2]//
5164 +N+" float vp0_wid; //:dst_wid[(dx1-dx0+1)]"//[E_2]//
5165 +N+" float vp0_hig; //:dst_hig[(dy1-dy0+1)]"//[E_2]//
5166 +N+" "//[E_2]//
5167 +N+" float vp1_wid; //:src_wid[(sx1-sx0+1)]"//[E_2]//
5168 +N+" float vp1_hig; //:src_hig[(sy1-sy0+1)]"//[E_2]//
5169 +N+" "//[E_2]//
5170 +N+" //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://"//[E_2]//
5171 +N+" //:U:Uniforms:-------------------------://"//[E_2]//
5172 +N+" //:UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU://"//[E_2]//
5173 +N+" "//[E_2]//
5174 +N+" //:#CAM_TXY_IS_CAM_UNITS#:// "//[E_2]//
5175 +N+" uint til_exp ; //:TileExponent "//[E_2]//
5176 +N+" uint til_san ; //:TileSpan( 2^til_exp)"//[E_2]//
5177 +N+" uint cam_t_x ; //:CAMERA_TILE:X "//[E_2]//
5178 +N+" uint cam_t_y ; //:CAMERA_TILE:Y "//[E_2]//
5179 +N+" "//[E_2]//
5180 +N+" //:dex_hot:OfMemoryCell:ToSample "//[E_2]//
5181 +N+" //:Must be prefixed with [e02] so we "//[E_2]//
5182 +N+" //:don't collide with uniform of the "//[E_2]//
5183 +N+" //:same name. "//[E_2]//
5184 +N+" uint e02_dex_hot ; "//[E_2]//
5185 +N+" "//[E_2]//
5186 +N+" //:UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU://"//[E_2]//
5187 +N+" //:SD:Source_and_Dest:-----------------://"//[E_2]//
5188 +N+" //:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
5189 +N+" "//[E_2]//
5190 +N+" //:SOURCE::(OFFSCREEN_DATA)::::::::::::://"//[E_2]//
5191 +N+" //:[ rec_vp1 | rec_src ].[x_0|x_1|y_0|y_1]"//[E_2]//
5192 +N+" float sx0 ; //:[ vp1 | src ].x_0 "//[E_2]//
5193 +N+" float sx1 ; //:[ vp1 | src ].x_1 "//[E_2]//
5194 +N+" float sy0 ; //:[ vp1 | src ].y_0 "//[E_2]//
5195 +N+" float sy1 ; //:[ vp1 | src ].y_1 "//[E_2]//
5196 +N+" "//[E_2]//
5197 +N+" //:Source_as:Number_Of_Sections "//[E_2]//
5198 +N+" //:Size of viewport unless using "//[E_2]//
5199 +N+" //:multiple pixels to encode one tile."//[E_2]//
5200 +N+" //://:IF[1:1]THEN[n_x =(sx1-sx0+1)] "//[E_2]//
5201 +N+" float n_x ; "//[E_2]//
5202 +N+" float n_y ; "//[E_2]//
5203 +N+" "//[E_2]//
5204 +N+" //:src_as:offmoni_data_pixel_coord:://"//[E_2]//
5205 +N+" //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
5206 +N+" "//[E_2]//
5207 +N+" //:Actual location of the data on "//[E_2]//
5208 +N+" //:bitmap encoding our tile values"//[E_2]//
5209 +N+" float s_x ; //:Loc:BM/Data "//[E_2]//
5210 +N+" float s_y ; //:Loc:BM/Data "//[E_2]//
5211 +N+" "//[E_2]//
5212 +N+" //: Zeroed out location used to "//[E_2]//
5213 +N+" //: calculate the internal coords "//[E_2]//
5214 +N+" //: of the current tile in focus. "//[E_2]//
5215 +N+" float loc_s_x ; //:ZeroedOutLoc"//[E_2]//
5216 +N+" float loc_s_y ; //:ZeroedOutLoc"//[E_2]//
5217 +N+" "//[E_2]//
5218 +N+" //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
5219 +N+" "//[E_2]//
5220 +N+" //:DEST::::::::::::::::::::::::::::::::://"//[E_2]//
5221 +N+" //:[ rec_vp0 == rec_dst ]::::::::::::// "//[E_2]//
5222 +N+" float dx0 ; //:[ vp0 | dst ].x_0 "//[E_2]//
5223 +N+" float dx1 ; //:[ vp0 | dst ].x_1 "//[E_2]//
5224 +N+" float dy0 ; //:[ vp0 | dst ].y_0 "//[E_2]//
5225 +N+" float dy1 ; //:[ vp0 | dst ].y_1 "//[E_2]//
5226 +N+" "//[E_2]//
5227 +N+" //:Dest_as:fragment_coord::::::::::://"//[E_2]//
5228 +N+" float f_x ; //:[Frag/Screen]Coord:X"//[E_2]//
5229 +N+" float f_y ; //:[Frag/Screen]Coord:Y"//[E_2]//
5230 +N+" "//[E_2]//
5231 +N+" //:Dest_as:screen_pixel_coord::::::://"//[E_2]//
5232 +N+" float d_x ; //:Destination:X "//[E_2]//
5233 +N+" float d_y ; //:Destination:Y "//[E_2]//
5234 +N+" "//[E_2]//
5235 +N+" int int_d_x ; //:d_x as integer "//[E_2]//
5236 +N+" int int_d_y ; //:d_y as integer "//[E_2]//
5237 +N+" "//[E_2]//
5238 +N+" //:Local_To[ rec_vp0 / rec_dst ] "//[E_2]//
5239 +N+" float ldx ; //:d_x local "//[E_2]//
5240 +N+" float ldy ; //:d_y local "//[E_2]//
5241 +N+" "//[E_2]//
5242 +N+" //:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
5243 +N+" //:TS:TileSize:------------------------://"//[E_2]//
5244 +N+" //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://"//[E_2]//
5245 +N+" "//[E_2]//
5246 +N+" //: Vars for mapping local coords ://"//[E_2]//
5247 +N+" //: of a tile-sprite onto the ://"//[E_2]//
5248 +N+" //: [ screen/rec_vp0/rec_vpc ]. ://"//[E_2]//
5249 +N+" "//[E_2]//
5250 +N+" //: [T:TileSize][P:Pixels][0:rec_vp0] "//[E_2]//
5251 +N+" float tp0_wid ; "//[E_2]//
5252 +N+" float tp0_hig ; "//[E_2]//
5253 +N+" "//[E_2]//
5254 +N+" //:tinco:TileINternalCOordinate: "//[E_2]//
5255 +N+" float tinco_x ; //:CURRENT:x "//[E_2]//
5256 +N+" float tinco_y ; //:CURRENT:y "//[E_2]//
5257 +N+" float tincox0 ; //:( X0 AKA MIN ) "//[E_2]//
5258 +N+" float tincoy0 ; //:( Y0 AKA MIN ) "//[E_2]//
5259 +N+" float tincox1 ; //:( X1 AKA MAX ) "//[E_2]//
5260 +N+" float tincoy1 ; //:( Y1 AKA MAX ) "//[E_2]//
5261 +N+" "//[E_2]//
5262 +N+" //:SG:SquareGradient:----------://"//[E_2]//
5263 +N+" //:SGSGSGSGSGSGSGSGSGSGSGSGSGSG://"//[E_2]//
5264 +N+" "//[E_2]//
5265 +N+" //:DIStances:from_edges_of_tile: "//[E_2]//
5266 +N+" float dis_lef ; "//[E_2]//
5267 +N+" float dis_rig ; "//[E_2]//
5268 +N+" float dis_top ; "//[E_2]//
5269 +N+" float dis_bot ; "//[E_2]//
5270 +N+" "//[E_2]//
5271 +N+" //:TED:Tile_EDge(distances): "//[E_2]//
5272 +N+" float ted_m_x ; //:MAV_X "//[E_2]//
5273 +N+" float ted_m_y ; //:MAV_Y "//[E_2]//
5274 +N+" float ted_mav ; //:MAV_1D "//[E_2]//
5275 +N+" float ted_nor ; //:NOR_1D "//[E_2]//
5276 +N+" "//[E_2]//
5277 +N+" //:SGSGSGSGSGSGSGSGSGSGSGSGSGSG://"//[E_2]//
5278 +N+" "//[E_2]//
5279 +N+" //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://"//[E_2]//
5280 +N+" "//[E_2]//
5281 +N+" "//[E_2]//
5282 +N+"//:DADADADADADADADADADADADADADADADADADADADA://"//[E_2]//
5283 +N+"//:DA:DeclareAll_Variables:(ABOVE):--------://"//[E_2]//
5284 +N+" "//[E_2]//
5285 +N+"//:LU:Load_Uniform_values:(BELOW):---------://"//[E_2]//
5286 +N+"//:LULULULULULULULULULULULULULULULULULULULU://"//[E_2]//
5287 +N+"#define TIL_EXP ( TAU_001_EDIT002_til_exp ) "//[E_2]//
5288 +N+"#define TIL_SAN ( TAU_001_EDIT002_til_san ) "//[E_2]//
5289 +N+"#define CAM_T_X ( TAU_001_EDIT002_cam_t_x ) "//[E_2]//
5290 +N+"#define CAM_T_Y ( TAU_001_EDIT002_cam_t_y ) "//[E_2]//
5291 +N+"#define DEX_HOT ( TAU_001_EDIT002_dex_hot ) "//[E_2]//
5292 +N+" "//[E_2]//
5293 +N+" til_exp = TAU_001_U32( TIL_EXP ); "//[E_2]//
5294 +N+" til_san = TAU_001_U32( TIL_SAN ); "//[E_2]//
5295 +N+" cam_t_x = TAU_001_U32( CAM_T_X ); "//[E_2]//
5296 +N+" cam_t_y = TAU_001_U32( CAM_T_Y ); "//[E_2]//
5297 +N+" e02_dex_hot = TAU_001_U32( DEX_HOT ); "//[E_2]//
5298 +N+" "//[E_2]//
5299 +N+"#undef TIL_EXP //:///////////////////////://"//[E_2]//
5300 +N+"#undef TIL_SAN //:///////////////////////://"//[E_2]//
5301 +N+"#undef CAM_T_X //:///////////////////////://"//[E_2]//
5302 +N+"#undef CAM_T_Y //:///////////////////////://"//[E_2]//
5303 +N+"#undef DEX_HOT //:///////////////////////://"//[E_2]//
5304 +N+"//:LULULULULULULULULULULULULULULULULULULULU://"//[E_2]//
5305 +N+" "//[E_2]//
5306 +N+"//:SD:Source_and_Destination:(BELOW):------://"//[E_2]//
5307 +N+"//:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
5308 +N+" "//[E_2]//
5309 +N+" //:SOURCE:VIEWPORT:////:///////////////://"//[E_2]//
5310 +N+" //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
5311 +N+" //: Determine size of camera in tiles::://"//[E_2]//
5312 +N+" //: Math.pow(2,til_exp) === til_san ://"//[E_2]//
5313 +N+" #define T_X ( float( cam_t_x ) ) //:///://"//[E_2]//
5314 +N+" #define T_Y ( float( cam_t_y ) ) //:///://"//[E_2]//
5315 +N+" #define SAN ( float( til_san ) ) //:///://"//[E_2]//
5316 +N+" "//[E_2]//
5317 +N+" //:| 0 || 1 || 2 | "//[E_2]//
5318 +N+" //:[0][1][2][3][4][5][6][7][8]//:rec_vp1 "//[E_2]//
5319 +N+" sx0 = ( T_X * SAN ) + 0.0 - 0.0; //:vp1 "//[E_2]//
5320 +N+" sx1 = ( T_X * SAN ) + SAN - 1.0; //:vp1 "//[E_2]//
5321 +N+" sy0 = ( T_Y * SAN ) + 0.0 - 0.0; //:vp1 "//[E_2]//
5322 +N+" sy1 = ( T_Y * SAN ) + SAN - 1.0; //:vp1 "//[E_2]//
5323 +N+" "//[E_2]//
5324 +N+" n_x = ( sx1 - sx0 + 1.0 ) / SRC_ENC_C_X; "//[E_2]//
5325 +N+" n_y = ( sy1 - sy0 + 1.0 ) / SRC_ENC_C_Y; "//[E_2]//
5326 +N+" "//[E_2]//
5327 +N+" #undef T_X //:///////////////////////://"//[E_2]//
5328 +N+" #undef T_Y //:///////////////////////://"//[E_2]//
5329 +N+" #undef SAN //:///////////////////////://"//[E_2]//
5330 +N+" //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
5331 +N+" //:SOURCE + DEST: DAS_BOR.HTM : "//[E_2]//
5332 +N+" //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://"//[E_2]//
5333 +N+" "//[E_2]//
5334 +N+" //:SOURCE:[ rec_vp1 ]AKA[ rec_src ] "//[E_2]//
5335 +N+" rec_src.x_0 = sx0 ; //: [ vp1|src ] "//[E_2]//
5336 +N+" rec_src.x_1 = sx1 ; //: [ vp1|src ] "//[E_2]//
5337 +N+" rec_src.y_0 = sy0 ; //: [ vp1|src ] "//[E_2]//
5338 +N+" rec_src.y_1 = sy1 ; //: [ vp1|src ] "//[E_2]//
5339 +N+" "//[E_2]//
5340 +N+" //:DEST:::[ rec_vp0 ]AKA[ rec_dst ] "//[E_2]//
5341 +N+" rec_dst =( rec_vp0 ); "//[E_2]//
5342 +N+" dx0 = rec_dst.x_0 ; //: [ dst|vp0 ] "//[E_2]//
5343 +N+" dx1 = rec_dst.x_1 ; //: [ dst|vp0 ] "//[E_2]//
5344 +N+" dy0 = rec_dst.y_0 ; //: [ dst|vp0 ] "//[E_2]//
5345 +N+" dy1 = rec_dst.y_1 ; //: [ dst|vp0 ] "//[E_2]//
5346 +N+" "//[E_2]//
5347 +N+" //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://"//[E_2]//
5348 +N+" //:CP:Current_Pixel:-------------------://"//[E_2]//
5349 +N+" //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://"//[E_2]//
5350 +N+" f_x = gl_FragCoord.x; "//[E_2]//
5351 +N+" f_y = gl_FragCoord.y; "//[E_2]//
5352 +N+" "//[E_2]//
5353 +N+" vpc_hig =( "//[E_2]//
5354 +N+" rec_vpc.y_1 "//[E_2]//
5355 +N+" - rec_vpc.y_0 + 1.0 "//[E_2]//
5356 +N+" );; "//[E_2]//
5357 +N+" "//[E_2]//
5358 +N+" int_d_x = int( gl_FragCoord.x - 0.5 ); "//[E_2]//
5359 +N+" int_d_y = int( "//[E_2]//
5360 +N+" ( vpc_hig - 1.0 ) //:FLIP_Y "//[E_2]//
5361 +N+" -( gl_FragCoord.y - 0.5 ) "//[E_2]//
5362 +N+" );; "//[E_2]//
5363 +N+" d_x = float( int_d_x ); "//[E_2]//
5364 +N+" d_y = float( int_d_y ); "//[E_2]//
5365 +N+" //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://"//[E_2]//
5366 +N+"//:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
5367 +N+"//:SD:Source_and_Destination:(ABOVE):------://"//[E_2]//
5368 +N+" "//[E_2]//
5369 +N+"//:==================================:// "//[E_2]//
5370 +N+"//: #DAS_BOR_HTM_LOOP_COMMENT# :::::// "//[E_2]//
5371 +N+"//:_loop_through_every_pixel_of__:::::// "//[E_2]//
5372 +N+"//:_CANVAS_instead_of_every_pixel:::::// "//[E_2]//
5373 +N+"//:_of_destination_viewport______:::::// "//[E_2]//
5374 +N+"#define MACRO_rec_dst ( rec_vp0 ) //::// "//[E_2]//
5375 +N+"int outside_destination_viewport=( 1 ); "//[E_2]//
5376 +N+"if( d_x >= rec_dst.x_0 ){//:LEF:// "//[E_2]//
5377 +N+"if( d_x <= rec_dst.x_1 ){//:RIG:// "//[E_2]//
5378 +N+"if( d_y >= rec_dst.y_0 ){//:TOP:// "//[E_2]//
5379 +N+"if( d_y <= rec_dst.y_1 ){//:BOT:// "//[E_2]//
5380 +N+" outside_destination_viewport=( 0 ); "//[E_2]//
5381 +N+"};;};;};;};; "//[E_2]//
5382 +N+"#undef MACRO_rec_dst //://///////////:// "//[E_2]//
5383 +N+"//:==================================:// "//[E_2]//
5384 +N+" "//[E_2]//
5385 +N+"uvec4 dye_out; "//[E_2]//
5386 +N+"if( outside_destination_viewport > 0 ){ "//[E_2]//
5387 +N+" "//[E_2]//
5388 +N+" dye_out.x =uint( 0 ); "//[E_2]//
5389 +N+" dye_out.y =uint( 64 ); "//[E_2]//
5390 +N+" dye_out.z =uint( 128 ); "//[E_2]//
5391 +N+" dye_out.w =uint( 255 ); "//[E_2]//
5392 +N+" "//[E_2]//
5393 +N+"}else "//[E_2]//
5394 +N+"if( 0 == outside_destination_viewport ){ "//[E_2]//
5395 +N+" "//[E_2]//
5396 +N+" //:WH:Wid-&-Hig:-----------------------://"//[E_2]//
5397 +N+" //:WHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWH://"//[E_2]//
5398 +N+" //: ANOTHER_WAY_TO_CALCULATE_SAME_THING: "//[E_2]//
5399 +N+" //: vp0_wid =( rec_vp0[ x_1 - x_0 ] + 1 );"//[E_2]//
5400 +N+" //: vp0_hig =( rec_vp0[ y_1 - y_0 ] + 1 );"//[E_2]//
5401 +N+" //: vp1_wid =( rec_vp1[ x_1 - x_0 ] + 1 );"//[E_2]//
5402 +N+" //: vp1_hig =( rec_vp1[ y_1 - y_0 ] + 1 );"//[E_2]//
5403 +N+" "//[E_2]//
5404 +N+" vp0_wid = (dx1 - dx0 + 1.0); //:DEST:WID "//[E_2]//
5405 +N+" vp0_hig = (dy1 - dy0 + 1.0); //:DEST:HIG "//[E_2]//
5406 +N+" vp1_wid = (sx1 - sx0 + 1.0); //:SRC::WID "//[E_2]//
5407 +N+" vp1_hig = (sy1 - sy0 + 1.0); //:SRC::HIG "//[E_2]//
5408 +N+" //:WHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWH://"//[E_2]//
5409 +N+" "//[E_2]//
5410 +N+" //:====================================://"//[E_2]//
5411 +N+" //:[COMLINK_D_XY_TO_LD_XY_2020_06_01] "//[E_2]//
5412 +N+" //:[d_x,d_y]<==GLOBAL|LOCAL==>[ldx,ldy]: "//[E_2]//
5413 +N+" ldx = ( d_x - dx0 ); //:ldx:Local:Dest:X "//[E_2]//
5414 +N+" ldy = ( d_y - dy0 ); //:ldy:Local:Dest:Y "//[E_2]//
5415 +N+" "//[E_2]//
5416 +N+" #define F floor //:////////////////////://"//[E_2]//
5417 +N+" s_x = F(((ldx)/(vp0_wid))*(vp1_wid))+sx0; "//[E_2]//
5418 +N+" s_y = F(((ldy)/(vp0_hig))*(vp1_hig))+sy0; "//[E_2]//
5419 +N+" s_x = F( s_x ); "//[E_2]//
5420 +N+" s_y = F( s_y ); "//[E_2]//
5421 +N+" #undef F //://////////////////////////://"//[E_2]//
5422 +N+" //:====================================://"//[E_2]//
5423 +N+" "//[E_2]//
5424 +N+" //:SL:SourceLocal: [ loc.s_x , loc.s_y ] "//[E_2]//
5425 +N+" //:SLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSL://"//[E_2]//
5426 +N+" "//[E_2]//
5427 +N+" //: ( rec_vp1 === rec_src ) "//[E_2]//
5428 +N+" loc_s_x = ( s_x - rec_src.x_0 ); "//[E_2]//
5429 +N+" loc_s_y = ( s_y - rec_src.y_0 ); "//[E_2]//
5430 +N+" "//[E_2]//
5431 +N+" //:SLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSL://"//[E_2]//
5432 +N+" "//[E_2]//
5433 +N+" //:TI:Tile_Internal_Coordinates: "//[E_2]//
5434 +N+" //:TITITITITITITITITITITITITITITITITITI://"//[E_2]//
5435 +N+" "//[E_2]//
5436 +N+" //:Size of tile: "//[E_2]//
5437 +N+" //: 1: Measured in pixels. "//[E_2]//
5438 +N+" //: 2: AsSeenIn[ rec_dst / rec_vp0 ] "//[E_2]//
5439 +N+" //: [tp0_wid == ScreenTile:wid ] "//[E_2]//
5440 +N+" //: [tp0_hig == ScreenTile:hig ] "//[E_2]//
5441 +N+" tp0_wid = ( vp0_wid / n_x ); "//[E_2]//
5442 +N+" tp0_hig = ( vp0_hig / n_y ); "//[E_2]//
5443 +N+" "//[E_2]//
5444 +N+" //:TINCO:TileINternalCOordinate "//[E_2]//
5445 +N+" //:================================://"//[E_2]//
5446 +N+" //:TINCO-( MIN( X1 | Y1 ) ) "//[E_2]//
5447 +N+" tincox0 = 0.0; "//[E_2]//
5448 +N+" tincoy0 = 0.0; "//[E_2]//
5449 +N+" "//[E_2]//
5450 +N+" //:TINCO-( MAX( X1 | Y1 ) ) "//[E_2]//
5451 +N+" tincox1 =( tp0_wid - 1.0 ); "//[E_2]//
5452 +N+" tincoy1 =( tp0_hig - 1.0 ); "//[E_2]//
5453 +N+" //:================================://"//[E_2]//
5454 +N+" "//[E_2]//
5455 +N+" //[ KEEP: tinco NON-normalized ------- ]//"//[E_2]//
5456 +N+" tinco_x = ldx - ( tp0_wid * loc_s_x ); "//[E_2]//
5457 +N+" tinco_y = ldy - ( tp0_hig * loc_s_y ); "//[E_2]//
5458 +N+" "//[E_2]//
5459 +N+" //:GR:Gradient_Mapping:--------://"//[E_2]//
5460 +N+" //:GRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[E_2]//
5461 +N+" dis_lef =abs( tincox0 - tinco_x );"//[E_2]//
5462 +N+" dis_rig =abs( tincox1 - tinco_x );"//[E_2]//
5463 +N+" dis_top =abs( tincoy0 - tinco_y );"//[E_2]//
5464 +N+" dis_bot =abs( tincoy1 - tinco_y );"//[E_2]//
5465 +N+" "//[E_2]//
5466 +N+" ted_m_x =min( dis_lef , dis_rig );"//[E_2]//
5467 +N+" ted_m_y =min( dis_top , dis_bot );"//[E_2]//
5468 +N+" ted_mav =min( ted_m_x , ted_m_y );"//[E_2]//
5469 +N+" ted_nor =( 1.0 "//[E_2]//
5470 +N+" * ted_mav "//[E_2]//
5471 +N+" / ((tp0_wid+tp0_hig)*0.5) "//[E_2]//
5472 +N+" * 4.0 //:2.0:Pyramid "//[E_2]//
5473 +N+" );; //:4.0:OverblownFlatTop"//[E_2]//
5474 +N+" "//[E_2]//
5475 +N+" //:GRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[E_2]//
5476 +N+" "//[E_2]//
5477 +N+" //:TITITITITITITITITITITITITITITITITITI://"//[E_2]//
5478 +N+" "//[E_2]//
5479 +N+" //:Current u32_til value in focus: "//[E_2]//
5480 +N+" uvec4 dye_bas =( "//[E_2]//
5481 +N+" Get_Tex_dex_hot( "//[E_2]//
5482 +N+" int( s_x ) //: d_x , s_x "//[E_2]//
5483 +N+" , int( s_y ) //: d_y , s_y "//[E_2]//
5484 +N+" , int( e02_dex_hot ) "//[E_2]//
5485 +N+" ) "//[E_2]//
5486 +N+" );; "//[E_2]//
5487 +N+" "//[E_2]//
5488 +N+" //:DO_NOT_RE_DECLARE[ dye_out ]!!!!!!!! "//[E_2]//
5489 +N+" //:DO_YOU_WANT_SHADOWED_VARIABLES?????? "//[E_2]//
5490 +N+" //:BECAUSE_THAT_IS_HOW_YOU_GET_SHADOWED "//[E_2]//
5491 +N+" //:VARIABLES!!!!!!!!!!!!!!!!!!!!!!!!!!! "//[E_2]//
5492 +N+" dye_out =uvec4( "//[E_2]//
5493 +N+" uint( float( dye_bas.x ) * ted_nor ) "//[E_2]//
5494 +N+" , uint( float( dye_bas.y ) * ted_nor ) "//[E_2]//
5495 +N+" , uint( float( dye_bas.z ) * ted_nor ) "//[E_2]//
5496 +N+" , uint( 255 ) "//[E_2]//
5497 +N+" );; "//[E_2]//
5498 +N+" "//[E_2]//
5499 +N+"};;//:[0 == outside_destination_viewport ?]://"//[E_2]//
5500 +N+" "//[E_2]//
5501 +N+"//:INDICATES_A_PROBLEM: "//[E_2]//
5502 +N+"if( til_san == uint(0) ){ "//[E_2]//
5503 +N+" dye_out = uvec4(234,8,9,255); "//[E_2]//
5504 +N+"};; "//[E_2]//
5505 +N+" "//[E_2]//
5506 +N+"pix_fra = vec4( "//[E_2]//
5507 +N+" float( dye_out.x ) / 255.0 "//[E_2]//
5508 +N+", float( dye_out.y ) / 255.0 "//[E_2]//
5509 +N+", float( dye_out.z ) / 255.0 "//[E_2]//
5510 +N+", float( dye_out.w ) / 255.0 "//[E_2]//
5511 +N+");; "//[E_2]//
5512 );;};;//:[ 2 == edi_mod]//:////://///////////////////////://
5513 //:222222222222222222222222222222222222222222222222222222://
5514 //:333333333333333333333333333333333333333333333333333333://
5515 if( 3 == edi_mod ){ code=(""
5516
5517
5518
5519 );;};;//:[ 3 == edi_mod]//:////://///////////////////////://
5520 //:333333333333333333333333333333333333333333333333333333://
5521 //:444444444444444444444444444444444444444444444444444444://
5522 if( 4 == edi_mod ){ code=(""
5523
5524
5525
5526 );;};;//:[ 4 == edi_mod]//:////://///////////////////////://
5527 //:444444444444444444444444444444444444444444444444444444://
5528 //:555555555555555555555555555555555555555555555555555555://
5529 if( 5 == edi_mod ){ code=(""
5530
5531
5532
5533 );;};;//:[ 5 == edi_mod]//:////://///////////////////////://
5534 //:555555555555555555555555555555555555555555555555555555://
5535 //:666666666666666666666666666666666666666666666666666666://
5536 if( 6 == edi_mod ){ code=(""
5537
5538
5539
5540 );;};;//:[ 6 == edi_mod]//:////://///////////////////////://
5541 //:666666666666666666666666666666666666666666666666666666://
5542 //:777777777777777777777777777777777777777777777777777777://
5543 if( 7 == edi_mod ){ code=(""
5544
5545
5546
5547 );;};;//:[ 7 == edi_mod]//:////://///////////////////////://
5548 //:777777777777777777777777777777777777777777777777777777://
5549 //:888888888888888888888888888888888888888888888888888888://
5550 if( 8 == edi_mod ){ code=(""
5551
5552
5553
5554 );;};;//:[ 8 == edi_mod]//:////://///////////////////////://
5555 //:888888888888888888888888888888888888888888888888888888://
5556 //:999999999999999999999999999999999999999999999999999999://
5557 if( 9 == edi_mod ){ code=(""
5558
5559
5560
5561 );;};;//:[ 9 == edi_mod]//:////://///////////////////////://
5562 //:999999999999999999999999999999999999999999999999999999://
5563
5564
5565 return( code );
5566 };; //:[AA2_Get_edi_sha_src]:////://///////////://
5567 //:GSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGS://
5568 //:GS:GetShader:(ABOVE):---------------------------------://
5569
5570//:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
5571//: (ABOVE) ://
5572//:NF: Namespaced_Functions: (CONTI):------------------------://
5573//: (BELOW) ://
5574//:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
5575
5576 //:TAGS[ shader_code / shadercode / shader-code ]
5577 //:AKA[ AA2_FragFet_TestGal_InpArg_dex_sha ]
5578 function AA2_EDIT001_FragSrc_dex_sha(
5579 dex_sha
5580 ){
5581 var N = "\n";
5582
5583 var shader_code = "";
5584 if( 0 == dex_sha ){ shader_code =(""
5585
5586 +N+" //:vp0:Maverick_Coords: "
5587 +N+" int p_x = int( tbs_mac.x ); "
5588 +N+" int p_y = int( tbs_mac.y ); "
5589 +N+" "
5590 +N+" //:Viewport_Dimensions: "
5591 +N+" //:TODO:UNHARDCODETHIS: "
5592 +N+" float vp0_wid = ( Get_VP0_WID_f32()); "
5593 +N+" float vp0_hig = ( Get_VP0_WID_f32()); "
5594 +N+" "
5595 +N+" float tau_wid = float( "
5596 +N+" 1 "
5597 +N+" +TAU_001_x1 "
5598 +N+" -TAU_001_x0 "
5599 +N+" );; "
5600 +N+" float tau_hig = float( "
5601 +N+" 1 "
5602 +N+" +TAU_001_y1 "
5603 +N+" -TAU_001_y0 "
5604 +N+" );; "
5605 +N+" "
5606 +N+" //: CALC_SCALEFACTOR:SEE[SCALEFAC_HELP] "
5607 +N+" //: Viewport #1 to Tau Coord: "
5608 +N+" vec2 vp1_to_tau =( "
5609 +N+" vec2( tau_wid , tau_hig ) //:DST:tau "
5610 +N+" / vec2( vp0_wid , vp0_hig ) //:SRC:vp1 "
5611 +N+" );; "
5612 +N+" "
5613 +N+" //:scale viewport coordinate to TAU coord: "
5614 +N+" vec2 tau_loc =( "
5615 +N+" vec2( p_x , p_y ) "
5616 +N+" * vp1_to_tau "
5617 +N+" );; "
5618 +N+" "
5619 +N+" //:Offset tau coord by tau's origin "
5620 +N+" //:to get correct sampling x/y coord: "
5621 +N+" vec2 tau_glo = tau_loc + vec2( "
5622 +N+" TAU_001_x0 "
5623 +N+" , TAU_001_y0 "
5624 +N+" );; "
5625 +N+" "
5626 +N+" //:Sample TAU_001 sub-region using "
5627 +N+" //:the XY coordinate of of the "
5628 +N+" //:allocated uniform pixel. "
5629 +N+" uvec4 pix_rgb =( "
5630 +N+" TAU_001_POS( "
5631 +N+" int(tau_glo.x) "
5632 +N+" , int(tau_glo.y) "
5633 +N+" )//[x]// "
5634 +N+" );; "
5635 +N+" "
5636 +N+" tbs_out = vec4( pix_rgb ) / 255.0; "
5637 +N+" "
5638 );;};;
5639
5640 if( 1 == dex_sha ){shader_code=(""
5641
5642 +N+" //:LewisLeptonsVariables: "//[L]//
5643 +N+" vec2 coord = tbs_noc; "//[L]//
5644 +N+" vec3 color = vec3(0.0); "//[L]//
5645 +N+" float u_time = tbs_tim; "//[L]//
5646 +N+" "//[L]//
5647 +N+" color =( "//[L]//
5648 +N+" color "//[L]//
5649 +N+" + sin( 1.0 "//[L]//
5650 +N+" * coord.x "//[L]//
5651 +N+" * cos( u_time / 30.0 ) "//[L]//
5652 +N+" * 60.0 "//[L]//
5653 +N+" ) "//[L]//
5654 +N+" + sin( 1.0 "//[L]//
5655 +N+" * coord.y "//[L]//
5656 +N+" * cos( u_time / 15.0) "//[L]//
5657 +N+" * 10.0 "//[L]//
5658 +N+" ) "//[L]//
5659 +N+" );; "//[L]//
5660 +N+" "//[L]//
5661 +N+" //:Flip Pattern: "//[L]//
5662 +N+" color =( "//[L]//
5663 +N+" color "//[L]//
5664 +N+" + cos( 1.0 "//[L]//
5665 +N+" * coord.y "//[L]//
5666 +N+" * sin( u_time / 30.0 ) "//[L]//
5667 +N+" * 60.0 "//[L]//
5668 +N+" ) "//[L]//
5669 +N+" + cos( 1.0 "//[L]//
5670 +N+" * coord.x "//[L]//
5671 +N+" * sin( u_time / 15.0) "//[L]//
5672 +N+" * 10.0 "//[L]//
5673 +N+" ) "//[L]//
5674 +N+" );; "//[L]//
5675 +N+" "//[L]//
5676 +N+" //:How to we map extremes to zero? "//[L]//
5677 +N+" vec3 ove_dye = color; "//[L]//
5678 +N+" float inn = ove_dye.x; "//[L]//
5679 +N+" float m_3 = mod( inn*2.0 , 2.0 ); "//[L]//
5680 +N+" ove_dye.x= ove_dye.x / ( m_3 / 3.0 ); "//[L]//
5681 +N+" ove_dye.y= 0.0; //: ove_dye.y; "//[L]//
5682 +N+" ove_dye.z= ove_dye.z + ( m_3 / 3.0 ); "//[L]//
5683 +N+" ove_dye.x = ( ove_dye.x + ove_dye.z ) /8.0; "//[L]//
5684 +N+" ove_dye.z = ove_dye.z; "//[L]//
5685 +N+" "//[L]//
5686 +N+" color = ( ove_dye + color ) / 2.0; "//[L]//
5687 +N+" "//[L]//
5688 +N+" tbs_out = vec4( color, 1.0 ); "//[L]//
5689 );;};;
5690 if( 2 == dex_sha ){shader_code=(""
5691 //[#MANDELBROT#]//
5692 +N+" int dex_max = ( 50 ); //"//|M_B|//
5693 +N+" //"//|M_B|//
5694 +N+" vec2 z; //"//|M_B|//
5695 +N+" float x,y; //"//|M_B|//
5696 +N+" int steps; //"//|M_B|//
5697 +N+" //"//|M_B|//
5698 +N+" //: Normalized(X|Y)[ n_x , n_y ]; //"//|M_B|//
5699 +N+" float n_x = tbs_noc.x - float(0.75); //"//|M_B|//
5700 +N+" float n_y = tbs_noc.y + float(0.26); //"//|M_B|//
5701 +N+" //"//|M_B|//
5702 +N+" z.x = n_x; //"//|M_B|//
5703 +N+" z.y = n_y; //"//|M_B|//
5704 +N+" //"//|M_B|//
5705 +N+" for (int i=0;i<dex_max;i++) { //"//|M_B|//
5706 +N+" //"//|M_B|//
5707 +N+" steps = i; //"//|M_B|//
5708 +N+" //"//|M_B|//
5709 +N+" x = (z.x * z.x - z.y * z.y) + n_x;//"//|M_B|//
5710 +N+" y = (z.y * z.x + z.x * z.y) + n_y;//"//|M_B|//
5711 +N+" //"//|M_B|//
5712 +N+" if((x * x + y * y) > 4.0) { //"//|M_B|//
5713 +N+" break; //"//|M_B|//
5714 +N+" } //"//|M_B|//
5715 +N+" //"//|M_B|//
5716 +N+" z.x = x; //"//|M_B|//
5717 +N+" z.y = y; //"//|M_B|//
5718 +N+" };; //"//|M_B|//
5719 +N+" //"//|M_B|//
5720 +N+" float tim = float( gam_tim )/256.0; //"//|M_B|//
5721 +N+" float f_1 = cos(tim); //"//|M_B|//
5722 +N+" float f_2 = sin(tim); //"//|M_B|//
5723 +N+" //"//|M_B|//
5724 +N+" if (steps == dex_max-1) { //"//|M_B|//
5725 +N+" tbs_out = vec4( //"//|M_B|//
5726 +N+" f_2, f_2, f_2, 1.0 //"//|M_B|//
5727 +N+" );; //"//|M_B|//
5728 +N+" } else { //"//|M_B|//
5729 +N+" //"//|M_B|//
5730 +N+" float dye =( //"//|M_B|//
5731 +N+" float(steps) //"//|M_B|//
5732 +N+" /float(dex_max) //"//|M_B|//
5733 +N+" );; //"//|M_B|//
5734 +N+" tbs_out = vec4( //"//|M_B|//
5735 +N+" dye, 0.0, f_1, 1.0 //"//|M_B|//
5736 +N+" );; //"//|M_B|//
5737 +N+" };; //"//|M_B|//
5738
5739 );;};;
5740 if( 3 == dex_sha ){shader_code=(""
5741
5742 //[BLANK_SHADER_SLOT]//
5743 +N+" float t = (1.0 + cos( tbs_tim*8.0 ))/2.0; "
5744 +N+" tbs_out = vec4( 0,0,t,1 );"
5745
5746 );;};;
5747 if( 4 == dex_sha ){shader_code=(""
5748
5749 //[BLANK_SHADER_SLOT]//
5750 +N+" float t = (1.0 + cos( tbs_tim*16.0 ))/2.0; "
5751 +N+" tbs_out = vec4( 0,t,1,1 );" //:C:CYAN
5752
5753 );;};;
5754 if( 5 == dex_sha ){shader_code=("" //:M:MAGENTA
5755
5756 //[BLANK_SHADER_SLOT]//
5757 +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
5758 +N+" tbs_out = vec4( 1,0,t,1 );"
5759
5760 );;};;
5761 if( 6 == dex_sha ){shader_code=(""
5762
5763 //[BLANK_SHADER_SLOT]//
5764 +N+" float t = (1.0 + cos( tbs_tim*64.0 ))/2.0; "
5765 +N+" tbs_out = vec4( t,1,0,1 );" //:Y:YELLOW
5766
5767 );;};;
5768
5769 if( 7 == dex_sha ){shader_code=(""
5770
5771 //[BLANK_SHADER_SLOT]//
5772 +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
5773 +N+" tbs_out = vec4( 0.0,t,0.5,1 );" //:C:DARK
5774
5775 );;};;
5776 if( 8 == dex_sha ){shader_code=("" //:M:DARK
5777
5778 //[BLANK_SHADER_SLOT]//
5779 +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
5780 +N+" tbs_out = vec4( 0.5,0.0,t,1 );"
5781
5782 );;};;
5783 if( 9 == dex_sha ){shader_code=(""
5784
5785 //[BLANK_SHADER_SLOT]//
5786 +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
5787 +N+" tbs_out = vec4( t,0.5,0.0,1 );" //:Y:DARK
5788
5789 );;};;
5790
5791 return( shader_code );
5792
5793 };;//:[AA2_EDIT001_FragSrc_dex_sha]:////:///////////////://
5794
5795//:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
5796//:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
5797//:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
5798//:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
5799//:NF:Namsepaced_Functions:(ABOVE):--------------------------://
5800
5801//:BC:Base_Class_OfEverything:(BELOW):-----------------------://
5802//:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
5803//:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
5804//:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
5805//:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
5806
5807 //:IE:Informal_Enum:(BELOW):-------------------------://
5808 //:IEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIE://
5809 //:NOTE: "VAR_TYP" ALWAYS identifies
5810 //: [TERMINAL/DERIVED]
5811 //: class when using inheritence,
5812 //: never the base class.
5813 //:IEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIE://
5814
5815 const AA2_VAR_TYP_edi_000 =( 0 );
5816 const AA2_VAR_TYP_edi_001 =( 1 );
5817 const AA2_VAR_TYP_edi_002 =( 2 );
5818
5819 //:IEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIE://
5820
5821 //:VT:VAR_TAG:(BELOW):-------------------------------://
5822 //:VTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVT://
5823 //: ://
5824 //:VAR_TAG is the base-class of all STRUCTS and ://
5825 //: CLASSES. We are going to use ://
5826 //: [ informal / conceptual ] inheritance. ://
5827 //: The inheritance is only enforced by ://
5828 //: rigid programming conventions, not by ://
5829 //: actual inheritance mechanisms. ://
5830 //: ://
5831 //:VTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVT://
5832 var AA2_var_tag={
5833 //:Variable_Type: ALWAYS_FIRST_MEMBER_OF_TAG!
5834 VAR_TYP : 0 //:uint32:unique_type_identifier
5835
5836 //:DB:Debug_Members:-------------------------://
5837 //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
5838 //: Variable_Hint: Exists only for debugging ://
5839 //: since I can't exactly read "VAR_TYP" ://
5840 //: integer values. Feel free to change this ://
5841 //: hint value to whatever you want while ://
5842 //: debugging. ://
5843 //: ://
5844 //: Decided limiting myself to 3 b characters://
5845 //: Is over optimizing. At least give enough ://
5846 //: space to hold names of your types. ://
5847 //: All types are 7 characters long, so can ://
5848 //: use uint64 to hold. ://
5849 , VAR_HIN : "var_hin"
5850 //:uint32. 0x-FF-FF-FF-FF-FF-FF-FF-FF
5851 //:........0x.01.02.03.04.05.06.07.08
5852 //:............E..D..I.._..0..0..1.\0 (edi_001)
5853
5854 , VAR_NIL : 0 //:GUARD_BYTES
5855 //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
5856
5857 };;Object.seal( AA2_var_tag );
5858 function NEW_var_tag(){
5859 "use strict"
5860 var var_tag = Object.assign(
5861 Object.create(null)
5862 , AA2_var_tag
5863 );;
5864 Object.seal( var_tag );
5865 return( var_tag );
5866 };;
5867 //:VTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVT://
5868
5869//:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
5870//:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
5871//:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
5872//:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
5873
5874
5875//:S:Structs_Section:(BELOW):--------------------------------://
5876//:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
5877//:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
5878//:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
5879//:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
5880
5881 //:ixy_das:Index_and_XY_DAtaStructure:
5882 function NEW_ixy_das( /** void **/ ){
5883
5884 var ixy_das ={
5885
5886 i_i : 0 //:INDEX
5887 , x_x : 0 //:INDEX_TO_COORDINATE.X
5888 , y_y : 0 //:INDEX_TO_COORDINATE.Y
5889
5890 };;Object.seal( ixy_das );
5891 return( ixy_das );
5892 };;
5893
5894 //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
5895
5896 //: rec_inc:RECtangle_INClusive(points/bounds)
5897 var AA2_rec_inc={
5898 x_0 : 0 - 101
5899 , y_0 : 0 - 202
5900 , x_1 : 0 - 303
5901 , y_1 : 0 - 404
5902 };; Object.seal( AA2_rec_inc );
5903 function NEW_rec_inc( /** void **/ ){
5904 "use strict" //:rec_inc://
5905
5906 var rec_inc = AA2_ZeroIni( AA2_rec_inc );
5907 return( rec_inc );
5908 };;
5909
5910 //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
5911
5912 //: AKA[ NEW_GlobalEventStruct | NEW_glo_eve ]
5913 function NEW_glo_eve( /** void **/ ){
5914 "use strict"
5915 var glo_eve ={
5916
5917 VAR_TYP : "glo_eve"
5918
5919 //:The data in a keyboard event and mouse event
5920 //:does not intersect. So lets use this struct
5921 //:kind of like a union. Depending on what
5922 //:bits are set in eve_typ and eve_sub, we will
5923 //:handle as different type of event.
5924 , eve_typ : 0 /** BIT_PATTERN_SO_CAN_BE_MULTIPLE **/
5925 , eve_sub : 0 /** BIT_PATTERN_SO_CAN_BE_MULTIPLE **/
5926
5927 //: sub_typ : "mouse_event" or "keyboard_event" ?
5928
5929 //:KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK://
5930 , key : "" //:What key was pressed?
5931 , k_d : 0 //:IsKeyCurrentlyDown?
5932 , k_u : 0 //:IsKeyCurrentlyUp?
5933 //:KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK://
5934
5935 //:M:Mouse Event Stuff:
5936 //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
5937
5938 , m_x : 0 //:Mouse x
5939 , m_y : 0 //:Mouse y
5940
5941 , c_x : 0 //:Mouse CLICK: x
5942 , c_y : 0 //:Mouse CLICK: y
5943
5944 , u_x : 0 //:Mouse UP ( u_x == "Up X" )
5945 , u_y : 0 //:Mouse UP ( u_y == "Up Y" )
5946
5947 , d_x : 0 //:Mouse DOWN
5948 , d_y : 0 //:Mouse DOWN
5949
5950 //:If both are set or unset,
5951 //:that is an error:
5952 , m_d : 0 //:IsMouseCurrentlyDown?
5953 , m_u : 0 //:IsMouseCurrentlyUp?
5954
5955 //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
5956
5957 };;Object.seal( glo_eve );
5958
5959 return( glo_eve );
5960 };;
5961
5962 //:CS:Configured_Structs:
5963 //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
5964 //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
5965 //:
5966 //: What goes here?
5967 //: 1: Struct "NEW"er (Constructor) functions
5968 //: that take 1 or more arguments.
5969 //:
5970 //: 2: Struct "NEW"er (Constructor) functions
5971 //: that take 0 arguments, but internally
5972 //: are calling another 0-argument "NEW"er
5973 //: and then performing extra configuration
5974 //: on the created object.
5975 //:
5976 //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
5977 //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
5978
5979 //:New_RectangleInclusive_MadeIntoA_RectangleHot
5980 //:New_InclusiveRectangle_MadeIntoA_HotSwapRectangle
5981 function NEW_rec_inc_MAD_rec_hot(
5982 h_x //:h_x:HotSwapRectangleGridCoordinate:X
5983 , h_y //:h_y:HotSwapRectangleGridCoordinate:Y
5984 ){
5985
5986 var sub_san =( GLO_CFG.SAN_MAM
5987 /GLO_CFG.SAN_ISO );;
5988 var sub_san_CHK = Math.floor( sub_san );
5989 if( sub_san_CHK != sub_san ){
5990 throw("[NOT_EVENLY]");
5991 };;
5992
5993 //:SAN_MAM measured in
5994 //:SAN_ISO sub partitions.
5995 var sub_wid=( sub_san );
5996 var sub_hig=( sub_san );
5997
5998 if( h_x < 0 || h_x >= sub_wid
5999 || h_y < 0 || h_y >= sub_hig
6000 ){
6001 throw("[REC_HOT:OOB]");
6002 };;
6003
6004 //:AA2_MAKE_HOT_SWAP_RECTANGLE
6005 //:NEW_rec_inc :Base_Type
6006 //:MAD_rec_hot :Made_Type
6007
6008 var rec_inc =( NEW_rec_inc() );
6009 rec_inc.x_0 = ( h_x * GLO_CFG.SAN_ISO );
6010 rec_inc.y_0 = ( h_y * GLO_CFG.SAN_ISO );
6011 rec_inc.x_1 = ( rec_inc.x_0 + GLO_CFG.SAN_ISO );
6012 rec_inc.y_1 = ( rec_inc.y_0 + GLO_CFG.SAN_ISO );
6013 Object.freeze( rec_inc /** AKA:rec_hot **/ );
6014 return( rec_inc /** AKA:rec_hot **/ );
6015 };;
6016
6017 //:- - - - - - - - - - - - - -- - - - - - - - - - - - - -://
6018
6019 //:You can only make a "loo_tab" with some bit of
6020 //:configuration. (default function pointers). Thus
6021 //:it belongs in pre-configured structs section.
6022 function NEW_loo_tab(){ //:LoopTable: struct NOT class.
6023 //:Struct instances belong in the
6024 //:GLO_DAT object.
6025
6026 //:Stub_Functions:
6027 //://////////////////////////////////////////////////://
6028 function
6029 AA2_LoopTableTickDefaultFunction_nat_win( /**VOID**/ ){
6030 //: ://
6031 //: Keyboard and mouse code logic go into ://
6032 //: the "nat_win" function because in C code ://
6033 //: it is the window that recieves the ://
6034 //: keyboard and mouse inputs. ://
6035 //: ://
6036 //: A bit akward, I know, but not changing it. ://
6037 //: ://
6038 console.log("[PLEASE_WIRE_UP:nat_win]");
6039 };;
6040 function
6041 AA2_LoopTableTickDefaultFunction_gam_obj( /**VOID**/ ){
6042 console.log("[PLEASE_WIRE_UP:gam_obj]");
6043 };;
6044 function
6045 AA2_LoopTableTickDefaultFunction_ren_log( /**VOID**/ ){
6046 console.log("[PLEASE_WIRE_UP:ren_log]");
6047 };;
6048 //://////////////////////////////////////////////////://
6049
6050 var loo_tab ={
6051
6052 //:WINDOW+KEYBOARD+MOUSE:
6053 //:KEYBOARD_LOGIC_GOES_INTO_THIS_CALLBACK:(nat_win)
6054 nat_win : AA2_LoopTableTickDefaultFunction_nat_win
6055
6056 //:GameObjectUpdateTick:AKA[ gam_log ]
6057 , gam_obj : AA2_LoopTableTickDefaultFunction_gam_obj
6058
6059 //:RenderingLogic: (Ex:glDrawArrays)
6060 , ren_log : AA2_LoopTableTickDefaultFunction_ren_log
6061
6062 , gam_tim : ( 0 - 1 ) //:GameTime/GameTicks
6063 , lop_tim : ( 0 - 1 ) //:LoopTime/LoopTicks
6064
6065 };;Object.seal( loo_tab );
6066 return( loo_tab );
6067 };; //:[FN:NEW_loo_tab(...)]:////:///////////////////////://
6068
6069 //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
6070 //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
6071
6072//:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
6073//:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
6074//:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
6075//:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
6076//:S:Structs_Section:(ABOVE):--------------------------------://
6077
6078//:C:Classes_Section:(BELOW):--------------------------------://
6079//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
6080//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
6081//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
6082//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
6083
6084 //:------------------------------------------------------://
6085
6086 //:"Classes"/"Class" defined as: (In This Code Base)
6087 //: 1. Mixing functions with data.
6088 //: 2. Structs that contain other structs.
6089 //: ( #2 might want to be moved to some type of)
6090 //: ( "meta structs" section. )
6091
6092 //:------------------------------------------------------://
6093
6094 //:AV:Adapter_Variables:(BELOW):-------------------------://
6095 //:AVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV://
6096 //: ://
6097 //: Variables that determine game state may or may not ://
6098 //: need to be synced with the GPU. Thus, non-private ://
6099 //: variables that need to communicate state ://
6100 //: information to other game objects need to store ://
6101 //: their public variables "off-site" in the ://
6102 //: "ada_var"/"adapter_variables" class. ://
6103 //: ://
6104 //: This way we have one class responsible for ://
6105 //: synchronization of variables and don't have ://
6106 //: to worry about that logic in other classes. ://
6107 //: ://
6108 //: NOTE: THIS NEEDS TO BE NOTICABLY HIGHER LEVEL ://
6109 //: THAN "TextureAsUniformController" ://
6110 //: or else we are just juggling around ://
6111 //: data without actually transforming it. ://
6112 //: ://
6113 //: REASON_FOR_THIS_CLASS_USING_EXAMPLE: ://
6114 //: =================================================== ://
6115 //: Need way to set variables that is decoupled from ://
6116 //: the webgl graphics code. If we change from ://
6117 //: "WebGL" to "Vulkan", only the internals of ://
6118 //: this class will need to be re-worked to fix ://
6119 //: variable synchronization. All public ://
6120 //: "GLO_CLA.ada_var.Put_*" & ://
6121 //: "GLO_CLA.ada_var.Get_*" ://
6122 //: calls will not need to be changed. ://
6123 //: =================================================== ://
6124 //: ://
6125 //:AVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV://
6126 function NEW_ada_var( /** void **/ ){
6127 var ada_var = ( new AA2_AdapterVariables() );
6128 Object.seal( ada_var );
6129 return( ada_var );
6130 };;
6131 function AA2_AdapterVariables( /** void **/ ){
6132
6133 //:PE:Publically_Exposed_Functions:(BELOW):----------://
6134 //:PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE://
6135
6136 this.Put_RenMod = Put_RenMod; //:PUT:ren_mod
6137 this.Get_RenMod = Get_RenMod; //:GET:ren_mod
6138 //## <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Todo: Undo camel case for the variable part of Get_VarName and Put_VarName.... Breaks Alignment ##//
6139 this.Put_EdiMod = Put_EdiMod; //:PUT:edi_mod
6140 this.Get_EdiMod = Get_EdiMod; //:GET:edi_mod
6141
6142 this.Put_GamTim = Put_GamTim; //:PUT:gam_tim
6143 this.Get_GamTim = Get_GamTim; //:GET:gam_tim
6144
6145 this.Put_DexHot = Put_DexHot; //:PUT:dex_hot
6146 this.Get_DexHot = Get_DexHot; //:GET:dex_hot
6147
6148 //:LV:LOSTVAR_S ( Global_Orphan_Variables )------://
6149 //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
6150
6151 //[NONE_AT_THE_MOMENT]//
6152
6153 //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
6154 //:GV:GLOBVAR_S: ( Intentionally_Global_Variables )
6155 //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
6156
6157 //:[ Get | Put ]rec_vpc[ x_0,x_1,y_0,y_1 ]
6158 //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
6159
6160 this.Put_GLOBVAR_rec_vpc=(
6161 /**/ Put_GLOBVAR_rec_vpc );
6162 this.Get_GLOBVAR_rec_vpc=(
6163 /**/ Get_GLOBVAR_rec_vpc );
6164
6165 this.Put_GLOBVAR_rec_vpc_x_0 =(
6166 /**/ Put_GLOBVAR_rec_vpc_x_0 );;
6167 this.Get_GLOBVAR_rec_vpc_x_0 =(
6168 /**/ Get_GLOBVAR_rec_vpc_x_0 );;
6169
6170 this.Put_GLOBVAR_rec_vpc_x_1 =(
6171 /**/ Put_GLOBVAR_rec_vpc_x_1 );;
6172 this.Get_GLOBVAR_rec_vpc_x_1 =(
6173 /**/ Get_GLOBVAR_rec_vpc_x_1 );;
6174
6175 this.Put_GLOBVAR_rec_vpc_y_0 =(
6176 /**/ Put_GLOBVAR_rec_vpc_y_0 );;
6177 this.Get_GLOBVAR_rec_vpc_y_0 =(
6178 /**/ Get_GLOBVAR_rec_vpc_y_0 );;
6179
6180 this.Put_GLOBVAR_rec_vpc_y_1 =(
6181 /**/ Put_GLOBVAR_rec_vpc_y_1 );;
6182 this.Get_GLOBVAR_rec_vpc_y_1 =(
6183 /**/ Get_GLOBVAR_rec_vpc_y_1 );;
6184
6185 //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
6186 //:[ Get | Put ]rec_vp0[ x_0,x_1,y_0,y_1 ]
6187 //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
6188
6189 this.Put_GLOBVAR_rec_vp0=(
6190 /**/ Put_GLOBVAR_rec_vp0 );
6191 this.Get_GLOBVAR_rec_vp0=(
6192 /**/ Get_GLOBVAR_rec_vp0 );
6193
6194 this.Put_GLOBVAR_rec_vp0_x_0 =(
6195 /**/ Put_GLOBVAR_rec_vp0_x_0 );;
6196 this.Get_GLOBVAR_rec_vp0_x_0 =(
6197 /**/ Get_GLOBVAR_rec_vp0_x_0 );;
6198
6199 this.Put_GLOBVAR_rec_vp0_x_1 =(
6200 /**/ Put_GLOBVAR_rec_vp0_x_1 );;
6201 this.Get_GLOBVAR_rec_vp0_x_1 =(
6202 /**/ Get_GLOBVAR_rec_vp0_x_1 );;
6203
6204 this.Put_GLOBVAR_rec_vp0_y_0 =(
6205 /**/ Put_GLOBVAR_rec_vp0_y_0 );;
6206 this.Get_GLOBVAR_rec_vp0_y_0 =(
6207 /**/ Get_GLOBVAR_rec_vp0_y_0 );;
6208
6209 this.Put_GLOBVAR_rec_vp0_y_1 =(
6210 /**/ Put_GLOBVAR_rec_vp0_y_1 );;
6211 this.Get_GLOBVAR_rec_vp0_y_1 =(
6212 /**/ Get_GLOBVAR_rec_vp0_y_1 );;
6213
6214 //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
6215 //:[ Get | Put ]rec_vp1[ x_0,x_1,y_0,y_1 ]
6216 //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
6217
6218 this.Put_GLOBVAR_rec_vp1=(
6219 /**/ Put_GLOBVAR_rec_vp1 );
6220 this.Get_GLOBVAR_rec_vp1=(
6221 /**/ Get_GLOBVAR_rec_vp1 );
6222
6223 this.Put_GLOBVAR_rec_vp1_x_0 =(
6224 /**/ Put_GLOBVAR_rec_vp1_x_0 );;
6225 this.Get_GLOBVAR_rec_vp1_x_0 =(
6226 /**/ Get_GLOBVAR_rec_vp1_x_0 );;
6227
6228 this.Put_GLOBVAR_rec_vp1_x_1 =(
6229 /**/ Put_GLOBVAR_rec_vp1_x_1 );;
6230 this.Get_GLOBVAR_rec_vp1_x_1 =(
6231 /**/ Get_GLOBVAR_rec_vp1_x_1 );;
6232
6233 this.Put_GLOBVAR_rec_vp1_y_0 =(
6234 /**/ Put_GLOBVAR_rec_vp1_y_0 );;
6235 this.Get_GLOBVAR_rec_vp1_y_0 =(
6236 /**/ Get_GLOBVAR_rec_vp1_y_0 );;
6237
6238 this.Put_GLOBVAR_rec_vp1_y_1 =(
6239 /**/ Put_GLOBVAR_rec_vp1_y_1 );;
6240 this.Get_GLOBVAR_rec_vp1_y_1 =(
6241 /**/ Get_GLOBVAR_rec_vp1_y_1 );;
6242
6243 //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
6244 //:[ Get | Put ]rec_vp2[ x_0,x_1,y_0,y_1 ]
6245 //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
6246
6247 this.Put_GLOBVAR_rec_vp2=(
6248 /**/ Put_GLOBVAR_rec_vp2 );
6249 this.Get_GLOBVAR_rec_vp2=(
6250 /**/ Get_GLOBVAR_rec_vp2 );
6251
6252 this.Put_GLOBVAR_rec_vp2_x_0 =(
6253 /**/ Put_GLOBVAR_rec_vp2_x_0 );;
6254 this.Get_GLOBVAR_rec_vp2_x_0 =(
6255 /**/ Get_GLOBVAR_rec_vp2_x_0 );;
6256
6257 this.Put_GLOBVAR_rec_vp2_x_1 =(
6258 /**/ Put_GLOBVAR_rec_vp2_x_1 );;
6259 this.Get_GLOBVAR_rec_vp2_x_1 =(
6260 /**/ Get_GLOBVAR_rec_vp2_x_1 );;
6261
6262 this.Put_GLOBVAR_rec_vp2_y_0 =(
6263 /**/ Put_GLOBVAR_rec_vp2_y_0 );;
6264 this.Get_GLOBVAR_rec_vp2_y_0 =(
6265 /**/ Get_GLOBVAR_rec_vp2_y_0 );;
6266
6267 this.Put_GLOBVAR_rec_vp2_y_1 =(
6268 /**/ Put_GLOBVAR_rec_vp2_y_1 );;
6269 this.Get_GLOBVAR_rec_vp2_y_1 =(
6270 /**/ Get_GLOBVAR_rec_vp2_y_1 );;
6271
6272 //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
6273 //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
6274
6275 //:- - - - - - - - - - - -- - - - - - - - - - - -://
6276
6277 //:01:edi_001:variables:(BELOW):-----------------://
6278 //:0101010101010101010101010101010101010101010101://
6279
6280 //:Put_DexSha & Get_DexSha :
6281 //:PUT:dex_sha & GET:dex_sha:
6282 this.Put_EDIT001_dex_sha = Put_EDIT001_dex_sha;
6283 this.Get_EDIT001_dex_sha = Get_EDIT001_dex_sha;
6284
6285 //:0101010101010101010101010101010101010101010101://
6286 //:01:edi_001:variables:(ABOVE):-----------------://
6287
6288 //:- - - - - - - - - - - -- - - - - - - - - - - -://
6289
6290 //:02:edi_002:variables:(BELOW):-----------------://
6291 //:0202020202020202020202020202020202020202020202://
6292
6293 this.Put_EDIT002_til_exp = Put_EDIT002_til_exp;
6294 this.Get_EDIT002_til_exp = Get_EDIT002_til_exp;
6295
6296 //:til_exp's value resolved to linear:
6297 //:This value needs to not be set directly
6298 //:but UPDATED as consequence of setting [til_exp]
6299 this.Put_EDIT002_til_san = Put_EDIT002_til_san;
6300 this.Get_EDIT002_til_san = Get_EDIT002_til_san;
6301
6302 this.Put_EDIT002_cam_t_x = Put_EDIT002_cam_t_x;
6303 this.Get_EDIT002_cam_t_x = Get_EDIT002_cam_t_x;
6304
6305 this.Put_EDIT002_cam_t_y = Put_EDIT002_cam_t_y;
6306 this.Get_EDIT002_cam_t_y = Get_EDIT002_cam_t_y;
6307
6308 //: Using dex_hot to identify the memory region ://
6309 //: this camera is navigating over. Variable ://
6310 //: does NOT signify which memory region is ://
6311 //: currently hot-swapped out. The identical ://
6312 //: name is because they are associated with ://
6313 //: the exact same array of [rec_inc] that are ://
6314 //: overlaid over [mam_mem]. ://
6315 this.Put_EDIT002_dex_hot = Put_EDIT002_dex_hot;
6316 this.Get_EDIT002_dex_hot = Get_EDIT002_dex_hot;
6317
6318 //:Use hyper_rectangle/hypermap/quarkmap
6319 //:interpretation of tilemap data on pixel data?
6320 this.Put_EDIT002_use_hyp = Put_EDIT002_use_hyp;
6321 this.Get_EDIT002_use_hyp = Get_EDIT002_use_hyp;
6322
6323 //:0202020202020202020202020202020202020202020202://
6324 //:02:edi_002:variables:(ABOVE):-----------------://
6325
6326 //:PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE://
6327 //:PE:Publically_Exposed_Functions:(ABOVE):----------://
6328
6329 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
6330
6331 function Put_RenMod( u32_val ){ //:put:ren_mod
6332
6333 var ADA =( GLO_CLA.ada_gra );
6334 var CON =( GLO_CLA.ada_gra.gpuvcon );
6335 ADA.ren_mod.u32_val =( u32_val );
6336 CON.u32_put( ADA , ADA.ren_mod );
6337 };;
6338 function Get_RenMod(/**VOI**/){ //:get:ren_mod
6339
6340 var ADA =( GLO_CLA.ada_gra );
6341 var CON =( GLO_CLA.ada_gra.gpuvcon );
6342 CON.u32_get( ADA , ADA.ren_mod );
6343 var u32_val =( ADA.ren_mod.u32_val );
6344 return( u32_val );
6345 };;
6346
6347 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
6348
6349 function Put_EdiMod( u32_val ){ //:put:edi_mod
6350
6351 var ADA =( GLO_CLA.ada_gra );
6352 var CON =( GLO_CLA.ada_gra.gpuvcon );
6353 ADA.edi_mod.u32_val =( u32_val );
6354 CON.u32_put( ADA , ADA.edi_mod );
6355 };;
6356 function Get_EdiMod(/**VOI**/){ //:get:edi_mod
6357
6358 var ADA =( GLO_CLA.ada_gra );
6359 var CON =( GLO_CLA.ada_gra.gpuvcon );
6360 CON.u32_get( ADA , ADA.edi_mod );
6361 var u32_val =( ADA.edi_mod.u32_val );
6362 return( u32_val );
6363 };;
6364
6365 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
6366
6367 function Put_GamTim( u32_val ){ //:put:gam_tim
6368
6369 var ADA =( GLO_CLA.ada_gra );
6370 var CON =( GLO_CLA.ada_gra.gpuvcon );
6371 ADA.gam_tim.u32_val =( u32_val );
6372 CON.u32_put( ADA , ADA.gam_tim );
6373 };;
6374 function Get_GamTim(/**VOI**/){ //:get:gam_tim
6375
6376 var ADA =( GLO_CLA.ada_gra );
6377 var CON =( GLO_CLA.ada_gra.gpuvcon );
6378 CON.u32_get( ADA , ADA.gam_tim );
6379 var u32_val =( ADA.gam_tim.u32_val );
6380 return( u32_val );
6381 };;
6382
6383 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
6384
6385 function Put_DexHot( u32_val ){ //:put:dex_hot
6386
6387 var ADA =( GLO_CLA.ada_gra );
6388 var CON =( GLO_CLA.ada_gra.gpuvcon );
6389 ADA.dex_hot.u32_val =( u32_val );
6390 CON.u32_put( ADA , ADA.dex_hot );
6391 };;
6392 function Get_DexHot(/**VOI**/){ //:get:dex_hot
6393
6394 var ADA =( GLO_CLA.ada_gra );
6395 var CON =( GLO_CLA.ada_gra.gpuvcon );
6396 CON.u32_get( ADA , ADA.dex_hot );
6397 var u32_val =( ADA.dex_hot.u32_val );
6398 return( u32_val );
6399 };;
6400
6401 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
6402 //:LV:LOST_VARIABLES:(BELOW):------------------------://
6403 //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
6404
6405 //[NONE_AT_THE_MOMENT]//
6406
6407 //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
6408 //:LV:LOST_VARIABLES:(ABOVE):------------------------://
6409 //:GV:Global_Variables:(BELOW):----------------------://
6410 //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
6411
6412 //:VC:[VIEWPORT_C / rec_vpc]:(BELOW):------------://
6413 //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
6414
6415 //:////////////////:---.GLOBVAR.rec_vpc_x_0::://
6416 ;;;function Put_GLOBVAR_rec_vpc_x_0(
6417 /** u32_val ................ */ rec_vpc_x_0 ){
6418 GLO_CLA.tau_001.uni_put( //:rec_vpc_x_0://
6419 GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_0
6420 , rec_vpc_x_0 );;
6421 };;function Get_GLOBVAR_rec_vpc_x_0(
6422 /** VOID **/ //:rec_vpc_x_0://
6423 ){ var /* ................. */ rec_vpc_x_0 =(
6424 GLO_CLA.tau_001.uni_get( //:rec_vpc_x_0://
6425 GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_0
6426 ));;return( /* ......... */ rec_vpc_x_0 );
6427 };;//://///////////:---.GLOBVAR.rec_vpc_x_0::://
6428
6429 //:////////////////:---.GLOBVAR.rec_vpc_x_1::://
6430 ;;;function Put_GLOBVAR_rec_vpc_x_1(
6431 /** u32_val ................ */ rec_vpc_x_1 ){
6432 GLO_CLA.tau_001.uni_put( //:rec_vpc_x_1://
6433 GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_1
6434 , rec_vpc_x_1 );;
6435 };;function Get_GLOBVAR_rec_vpc_x_1(
6436 /** VOID **/ //:rec_vpc_x_1://
6437 ){ var /* ................. */ rec_vpc_x_1 =(
6438 GLO_CLA.tau_001.uni_get( //:rec_vpc_x_1://
6439 GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_1
6440 ));;return( /* ......... */ rec_vpc_x_1 );
6441 };;//://///////////:---.GLOBVAR.rec_vpc_x_1::://
6442
6443 //:////////////////:---.GLOBVAR.rec_vpc_y_0::://
6444 ;;;function Put_GLOBVAR_rec_vpc_y_0(
6445 /** u32_val ................ */ rec_vpc_y_0 ){
6446 GLO_CLA.tau_001.uni_put( //:rec_vpc_y_0://
6447 GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_0
6448 , rec_vpc_y_0 );;
6449 };;function Get_GLOBVAR_rec_vpc_y_0(
6450 /** VOID **/ //:rec_vpc_y_0://
6451 ){ var /* ................. */ rec_vpc_y_0 =(
6452 GLO_CLA.tau_001.uni_get( //:rec_vpc_y_0://
6453 GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_0
6454 ));;return( /* ......... */ rec_vpc_y_0 );
6455 };;//://///////////:---.GLOBVAR.rec_vpc_y_0::://
6456
6457 //:////////////////:---.GLOBVAR.rec_vpc_y_1::://
6458 ;;;function Put_GLOBVAR_rec_vpc_y_1(
6459 /** u32_val ................ */ rec_vpc_y_1 ){
6460 GLO_CLA.tau_001.uni_put( //:rec_vpc_y_1://
6461 GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_1
6462 , rec_vpc_y_1 );;
6463 };;function Get_GLOBVAR_rec_vpc_y_1(
6464 /** VOID **/ //:rec_vpc_y_1://
6465 ){ var /* ................. */ rec_vpc_y_1 =(
6466 GLO_CLA.tau_001.uni_get( //:rec_vpc_y_1://
6467 GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_1
6468 ));;return( /* ......... */ rec_vpc_y_1 );
6469 };;//://///////////:---.GLOBVAR.rec_vpc_y_1::://
6470
6471 //:CA:Compound_Accessors:(Get/Put):----------://
6472 //:CACACACACACACACACACACACACACACACACACACACACA://
6473 //://////////////////////////////////////////://
6474 ;;;function Put_GLOBVAR_rec_vpc( //:///://
6475 rec_vpc
6476 ){ Put_GLOBVAR_rec_vpc_x_0( rec_vpc.x_0 );
6477 Put_GLOBVAR_rec_vpc_x_1( rec_vpc.x_1 );
6478 Put_GLOBVAR_rec_vpc_y_0( rec_vpc.y_0 );
6479 Put_GLOBVAR_rec_vpc_y_1( rec_vpc.y_1 );
6480 };;function Get_GLOBVAR_rec_vpc(
6481 rec_vpc
6482 ){ rec_vpc.x_0 = Get_GLOBVAR_rec_vpc_x_0( );
6483 rec_vpc.x_1 = Get_GLOBVAR_rec_vpc_x_1( );
6484 rec_vpc.y_0 = Get_GLOBVAR_rec_vpc_y_0( );
6485 rec_vpc.y_1 = Get_GLOBVAR_rec_vpc_y_1( );
6486 };;//:///////////////////////////////////////://
6487 //:CACACACACACACACACACACACACACACACACACACACACA://
6488
6489 //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
6490 //:VC:[VIEWPORT_C / rec_vpc]:(ABOVE):------------://
6491
6492 //:V0:[VIEWPORT_0 / rec_vp0]:(BELOW):------------://
6493 //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
6494
6495 //:////////////////:---.GLOBVAR.rec_vp0_x_0::://
6496 ;;;function Put_GLOBVAR_rec_vp0_x_0(
6497 /** u32_val ................ */ rec_vp0_x_0 ){
6498 GLO_CLA.tau_001.uni_put( //:rec_vp0_x_0://
6499 GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_0
6500 , rec_vp0_x_0 );;
6501 };;function Get_GLOBVAR_rec_vp0_x_0(
6502 /** VOID **/ //:rec_vp0_x_0://
6503 ){ var /* ................. */ rec_vp0_x_0 =(
6504 GLO_CLA.tau_001.uni_get( //:rec_vp0_x_0://
6505 GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_0
6506 ));;return( /* ......... */ rec_vp0_x_0 );
6507 };;//://///////////:---.GLOBVAR.rec_vp0_x_0::://
6508
6509 //:////////////////:---.GLOBVAR.rec_vp0_x_1::://
6510 ;;;function Put_GLOBVAR_rec_vp0_x_1(
6511 /** u32_val ................ */ rec_vp0_x_1 ){
6512 GLO_CLA.tau_001.uni_put( //:rec_vp0_x_1://
6513 GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_1
6514 , rec_vp0_x_1 );;
6515 };;function Get_GLOBVAR_rec_vp0_x_1(
6516 /** VOID **/ //:rec_vp0_x_1://
6517 ){ var /* ................. */ rec_vp0_x_1 =(
6518 GLO_CLA.tau_001.uni_get( //:rec_vp0_x_1://
6519 GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_1
6520 ));;return( /* ......... */ rec_vp0_x_1 );
6521 };;//://///////////:---.GLOBVAR.rec_vp0_x_1::://
6522
6523 //:////////////////:---.GLOBVAR.rec_vp0_y_0::://
6524 ;;;function Put_GLOBVAR_rec_vp0_y_0(
6525 /** u32_val ................ */ rec_vp0_y_0 ){
6526 GLO_CLA.tau_001.uni_put( //:rec_vp0_y_0://
6527 GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_0
6528 , rec_vp0_y_0 );;
6529 };;function Get_GLOBVAR_rec_vp0_y_0(
6530 /** VOID **/ //:rec_vp0_y_0://
6531 ){ var /* ................. */ rec_vp0_y_0 =(
6532 GLO_CLA.tau_001.uni_get( //:rec_vp0_y_0://
6533 GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_0
6534 ));;return( /* ......... */ rec_vp0_y_0 );
6535 };;//://///////////:---.GLOBVAR.rec_vp0_y_0::://
6536
6537 //:////////////////:---.GLOBVAR.rec_vp0_y_1::://
6538 ;;;function Put_GLOBVAR_rec_vp0_y_1(
6539 /** u32_val ................ */ rec_vp0_y_1 ){
6540 GLO_CLA.tau_001.uni_put( //:rec_vp0_y_1://
6541 GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_1
6542 , rec_vp0_y_1 );;
6543 };;function Get_GLOBVAR_rec_vp0_y_1(
6544 /** VOID **/ //:rec_vp0_y_1://
6545 ){ var /* ................. */ rec_vp0_y_1 =(
6546 GLO_CLA.tau_001.uni_get( //:rec_vp0_y_1://
6547 GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_1
6548 ));;return( /* ......... */ rec_vp0_y_1 );
6549 };;//://///////////:---.GLOBVAR.rec_vp0_y_1::://
6550
6551 //:CA:Compound_Accessors:(Get/Put):----------://
6552 //:CACACACACACACACACACACACACACACACACACACACACA://
6553 //://////////////////////////////////////////://
6554 ;;;function Put_GLOBVAR_rec_vp0( //:///://
6555 rec_vp0
6556 ){ Put_GLOBVAR_rec_vp0_x_0( rec_vp0.x_0 );
6557 Put_GLOBVAR_rec_vp0_x_1( rec_vp0.x_1 );
6558 Put_GLOBVAR_rec_vp0_y_0( rec_vp0.y_0 );
6559 Put_GLOBVAR_rec_vp0_y_1( rec_vp0.y_1 );
6560 };;function Get_GLOBVAR_rec_vp0(
6561 rec_vp0
6562 ){ rec_vp0.x_0 = Get_GLOBVAR_rec_vp0_x_0( );
6563 rec_vp0.x_1 = Get_GLOBVAR_rec_vp0_x_1( );
6564 rec_vp0.y_0 = Get_GLOBVAR_rec_vp0_y_0( );
6565 rec_vp0.y_1 = Get_GLOBVAR_rec_vp0_y_1( );
6566 };;//:///////////////////////////////////////://
6567 //:CACACACACACACACACACACACACACACACACACACACACA://
6568
6569 //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
6570 //:V0:[VIEWPORT_0 / rec_vp0]:(ABOVE):------------://
6571
6572 //:V1:[VIEWPORT_1 / rec_vp1]:(BELOW):------------://
6573 //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
6574
6575 //:////////////////:---.GLOBVAR.rec_vp1_x_0::://
6576 ;;;function Put_GLOBVAR_rec_vp1_x_0(
6577 /** u32_val ................ */ rec_vp1_x_0 ){
6578 GLO_CLA.tau_001.uni_put( //:rec_vp1_x_0://
6579 GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_0
6580 , rec_vp1_x_0 );;
6581 };;function Get_GLOBVAR_rec_vp1_x_0(
6582 /** VOID **/ //:rec_vp1_x_0://
6583 ){ var /* ................. */ rec_vp1_x_0 =(
6584 GLO_CLA.tau_001.uni_get( //:rec_vp1_x_0://
6585 GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_0
6586 ));;return( /* ......... */ rec_vp1_x_0 );
6587 };;//://///////////:---.GLOBVAR.rec_vp1_x_0::://
6588
6589 //:////////////////:---.GLOBVAR.rec_vp1_x_1::://
6590 ;;;function Put_GLOBVAR_rec_vp1_x_1(
6591 /** u32_val ................ */ rec_vp1_x_1 ){
6592 GLO_CLA.tau_001.uni_put( //:rec_vp1_x_1://
6593 GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_1
6594 , rec_vp1_x_1 );;
6595 };;function Get_GLOBVAR_rec_vp1_x_1(
6596 /** VOID **/ //:rec_vp1_x_1://
6597 ){ var /* ................. */ rec_vp1_x_1 =(
6598 GLO_CLA.tau_001.uni_get( //:rec_vp1_x_1://
6599 GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_1
6600 ));;return( /* ......... */ rec_vp1_x_1 );
6601 };;//://///////////:---.GLOBVAR.rec_vp1_x_1::://
6602
6603 //:////////////////:---.GLOBVAR.rec_vp1_y_0::://
6604 ;;;function Put_GLOBVAR_rec_vp1_y_0(
6605 /** u32_val ................ */ rec_vp1_y_0 ){
6606 GLO_CLA.tau_001.uni_put( //:rec_vp1_y_0://
6607 GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_0
6608 , rec_vp1_y_0 );;
6609 };;function Get_GLOBVAR_rec_vp1_y_0(
6610 /** VOID **/ //:rec_vp1_y_0://
6611 ){ var /* ................. */ rec_vp1_y_0 =(
6612 GLO_CLA.tau_001.uni_get( //:rec_vp1_y_0://
6613 GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_0
6614 ));;return( /* ......... */ rec_vp1_y_0 );
6615 };;//://///////////:---.GLOBVAR.rec_vp1_y_0::://
6616
6617 //:////////////////:---.GLOBVAR.rec_vp1_y_1::://
6618 ;;;function Put_GLOBVAR_rec_vp1_y_1(
6619 /** u32_val ................ */ rec_vp1_y_1 ){
6620 GLO_CLA.tau_001.uni_put( //:rec_vp1_y_1://
6621 GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_1
6622 , rec_vp1_y_1 );;
6623 };;function Get_GLOBVAR_rec_vp1_y_1(
6624 /** VOID **/ //:rec_vp1_y_1://
6625 ){ var /* ................. */ rec_vp1_y_1 =(
6626 GLO_CLA.tau_001.uni_get( //:rec_vp1_y_1://
6627 GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_1
6628 ));;return( /* ......... */ rec_vp1_y_1 );
6629 };;//://///////////:---.GLOBVAR.rec_vp1_y_1::://
6630
6631 //:CA:Compound_Accessors:(Get/Put):----------://
6632 //:CACACACACACACACACACACACACACACACACACACACACA://
6633 //://////////////////////////////////////////://
6634 ;;;function Put_GLOBVAR_rec_vp1( //:///://
6635 rec_vp1
6636 ){ Put_GLOBVAR_rec_vp1_x_0( rec_vp1.x_0 );
6637 Put_GLOBVAR_rec_vp1_x_1( rec_vp1.x_1 );
6638 Put_GLOBVAR_rec_vp1_y_0( rec_vp1.y_0 );
6639 Put_GLOBVAR_rec_vp1_y_1( rec_vp1.y_1 );
6640 };;function Get_GLOBVAR_rec_vp1(
6641 rec_vp1
6642 ){ rec_vp1.x_0 = Get_GLOBVAR_rec_vp1_x_0( );
6643 rec_vp1.x_1 = Get_GLOBVAR_rec_vp1_x_1( );
6644 rec_vp1.y_0 = Get_GLOBVAR_rec_vp1_y_0( );
6645 rec_vp1.y_1 = Get_GLOBVAR_rec_vp1_y_1( );
6646 };;//:///////////////////////////////////////://
6647 //:CACACACACACACACACACACACACACACACACACACACACA://
6648
6649 //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
6650 //:V1:[VIEWPORT_1 / rec_vp1]:(ABOVE):------------://
6651
6652 //:V2:[VIEWPORT_2 / rec_vp2]:(BELOW):------------://
6653 //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
6654
6655 //:////////////////:---.GLOBVAR.rec_vp2_x_0::://
6656 ;;;function Put_GLOBVAR_rec_vp2_x_0(
6657 /** u32_val ................ */ rec_vp2_x_0 ){
6658 GLO_CLA.tau_001.uni_put( //:rec_vp2_x_0://
6659 GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_0
6660 , rec_vp2_x_0 );;
6661 };;function Get_GLOBVAR_rec_vp2_x_0(
6662 /** VOID **/ //:rec_vp2_x_0://
6663 ){ var /* ................. */ rec_vp2_x_0 =(
6664 GLO_CLA.tau_001.uni_get( //:rec_vp2_x_0://
6665 GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_0
6666 ));;return( /* ......... */ rec_vp2_x_0 );
6667 };;//://///////////:---.GLOBVAR.rec_vp2_x_0::://
6668
6669 //:////////////////:---.GLOBVAR.rec_vp2_x_1::://
6670 ;;;function Put_GLOBVAR_rec_vp2_x_1(
6671 /** u32_val ................ */ rec_vp2_x_1 ){
6672 GLO_CLA.tau_001.uni_put( //:rec_vp2_x_1://
6673 GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_1
6674 , rec_vp2_x_1 );;
6675 };;function Get_GLOBVAR_rec_vp2_x_1(
6676 /** VOID **/ //:rec_vp2_x_1://
6677 ){ var /* ................. */ rec_vp2_x_1 =(
6678 GLO_CLA.tau_001.uni_get( //:rec_vp2_x_1://
6679 GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_1
6680 ));;return( /* ......... */ rec_vp2_x_1 );
6681 };;//://///////////:---.GLOBVAR.rec_vp2_x_1::://
6682
6683 //:////////////////:---.GLOBVAR.rec_vp2_y_0::://
6684 ;;;function Put_GLOBVAR_rec_vp2_y_0(
6685 /** u32_val ................ */ rec_vp2_y_0 ){
6686 GLO_CLA.tau_001.uni_put( //:rec_vp2_y_0://
6687 GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_0
6688 , rec_vp2_y_0 );;
6689 };;function Get_GLOBVAR_rec_vp2_y_0(
6690 /** VOID **/ //:rec_vp2_y_0://
6691 ){ var /* ................. */ rec_vp2_y_0 =(
6692 GLO_CLA.tau_001.uni_get( //:rec_vp2_y_0://
6693 GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_0
6694 ));;return( /* ......... */ rec_vp2_y_0 );
6695 };;//://///////////:---.GLOBVAR.rec_vp2_y_0::://
6696
6697 //:////////////////:---.GLOBVAR.rec_vp2_y_1::://
6698 ;;;function Put_GLOBVAR_rec_vp2_y_1(
6699 /** u32_val ................ */ rec_vp2_y_1 ){
6700 GLO_CLA.tau_001.uni_put( //:rec_vp2_y_1://
6701 GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_1
6702 , rec_vp2_y_1 );;
6703 };;function Get_GLOBVAR_rec_vp2_y_1(
6704 /** VOID **/ //:rec_vp2_y_1://
6705 ){ var /* ................. */ rec_vp2_y_1 =(
6706 GLO_CLA.tau_001.uni_get( //:rec_vp2_y_1://
6707 GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_1
6708 ));;return( /* ......... */ rec_vp2_y_1 );
6709 };;//://///////////:---.GLOBVAR.rec_vp2_y_1::://
6710
6711 //:CA:Compound_Accessors:(Get/Put):----------://
6712 //:CACACACACACACACACACACACACACACACACACACACACA://
6713 //://////////////////////////////////////////://
6714 ;;;function Put_GLOBVAR_rec_vp2( //:///://
6715 rec_vp2
6716 ){ Put_GLOBVAR_rec_vp2_x_0( rec_vp2.x_0 );
6717 Put_GLOBVAR_rec_vp2_x_1( rec_vp2.x_1 );
6718 Put_GLOBVAR_rec_vp2_y_0( rec_vp2.y_0 );
6719 Put_GLOBVAR_rec_vp2_y_1( rec_vp2.y_1 );
6720 };;function Get_GLOBVAR_rec_vp2(
6721 rec_vp2
6722 ){ rec_vp2.x_0 = Get_GLOBVAR_rec_vp2_x_0( );
6723 rec_vp2.x_1 = Get_GLOBVAR_rec_vp2_x_1( );
6724 rec_vp2.y_0 = Get_GLOBVAR_rec_vp2_y_0( );
6725 rec_vp2.y_1 = Get_GLOBVAR_rec_vp2_y_1( );
6726 };;//:///////////////////////////////////////://
6727 //:CACACACACACACACACACACACACACACACACACACACACA://
6728
6729 //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
6730 //:V2:[VIEWPORT_2 / rec_vp2]:(ABOVE):------------://
6731
6732 //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
6733 //:GV:Global_Variables:(ABOVE):----------------------://
6734 //:E1:edi_001:vars:(BELOW):--------------------------://
6735 //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
6736 //:AKA[ put:dex_sha | Put_DexSha ]
6737 function Put_EDIT001_dex_sha( dex_sha /** u32_val **/ ){
6738 console.log("[put:dex_sha]:", dex_sha );
6739
6740 GLO_CLA.tau_001.uni_put(
6741 GLO_CFG.TAU_001_EDIT001_dex_sha
6742 , dex_sha );;
6743
6744 };;
6745 //:AKA[ get:dex_sha | Get_DexSha ]
6746 function Get_EDIT001_dex_sha(/**VOI**/){
6747 console.log("[TODO:Get_DexSha]");
6748
6749 var dex_sha = GLO_CLA.tau_001.uni_get(
6750 GLO_CFG.TAU_001_EDIT001_dex_sha
6751 );;
6752
6753 console.log("[got:dex_sha]:", dex_sha );
6754 return( dex_sha );
6755 };;
6756 //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
6757 //:E2:edi_002:vars:(BELOW):--------------------------://
6758 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
6759
6760 //:////////////////:---.EDIT002.til_exp:////:////://
6761 ;;;function Put_EDIT002_til_exp(
6762 /** u32_val ................ */ til_exp ){
6763 GLO_CLA.tau_001.uni_put( //:til_exp://
6764 GLO_CFG.TAU_001_EDIT002_til_exp
6765 , til_exp );;
6766 };;function Get_EDIT002_til_exp(
6767 /** VOID **/ //:til_exp://
6768 ){ var /* ................. */ til_exp =(
6769 GLO_CLA.tau_001.uni_get( //:til_exp://
6770 GLO_CFG.TAU_001_EDIT002_til_exp
6771 ));;return( /* ......... */ til_exp );
6772 };;//://///////////:---.EDIT002.til_exp:////:////://
6773
6774 //:////////////////:---.EDIT002.til_san:////:////://
6775 ;;;function Put_EDIT002_til_san(
6776 /** u32_val ................ */ til_san ){
6777 GLO_CLA.tau_001.uni_put( //:til_san://
6778 GLO_CFG.TAU_001_EDIT002_til_san
6779 , til_san );;
6780 };;function Get_EDIT002_til_san(
6781 /** VOID **/ //:til_san://
6782 ){ var /* ................. */ til_san =(
6783 GLO_CLA.tau_001.uni_get( //:til_san://
6784 GLO_CFG.TAU_001_EDIT002_til_san
6785 ));;return( /* ......... */ til_san );
6786 };;//://///////////:---.EDIT002.til_san:////:////://
6787
6788 //:////////////////:---.EDIT002.cam_t_x:////:////://
6789 ;;;function Put_EDIT002_cam_t_x(
6790 /** u32_val ................ */ cam_t_x ){
6791 GLO_CLA.tau_001.uni_put( //:cam_t_x://
6792 GLO_CFG.TAU_001_EDIT002_cam_t_x
6793 , cam_t_x );;
6794 };;function Get_EDIT002_cam_t_x(
6795 /** VOID **/ //:cam_t_x://
6796 ){ var /* ................. */ cam_t_x =(
6797 GLO_CLA.tau_001.uni_get( //:cam_t_x://
6798 GLO_CFG.TAU_001_EDIT002_cam_t_x
6799 ));;return( /* ......... */ cam_t_x );
6800 };;//://///////////:---.EDIT002.cam_t_x:////:////://
6801
6802 //:////////////////:---.EDIT002.cam_t_y:////:////://
6803 ;;;function Put_EDIT002_cam_t_y(
6804 /** u32_val ................ */ cam_t_y ){
6805 GLO_CLA.tau_001.uni_put( //:cam_t_y://
6806 GLO_CFG.TAU_001_EDIT002_cam_t_y
6807 , cam_t_y );;
6808 };;function Get_EDIT002_cam_t_y(
6809 /** VOID **/ //:cam_t_y://
6810 ){ var /* ................. */ cam_t_y =(
6811 GLO_CLA.tau_001.uni_get( //:cam_t_y://
6812 GLO_CFG.TAU_001_EDIT002_cam_t_y
6813 ));;return( /* ......... */ cam_t_y );
6814 };;//://///////////:---.EDIT002.cam_t_y:////:////://
6815
6816 //:////////////////:---.EDIT002.dex_hot:////:////://
6817 ;;;function Put_EDIT002_dex_hot(
6818 /** u32_val ................ */ dex_hot ){
6819 GLO_CLA.tau_001.uni_put( //:dex_hot://
6820 GLO_CFG.TAU_001_EDIT002_dex_hot
6821 , dex_hot );;
6822 };;function Get_EDIT002_dex_hot(
6823 /** VOID **/ //:dex_hot://
6824 ){ var /* ................. */ dex_hot =(
6825 GLO_CLA.tau_001.uni_get( //:dex_hot://
6826 GLO_CFG.TAU_001_EDIT002_dex_hot
6827 ));;return( /* ......... */ dex_hot );
6828 };;//://///////////:---.EDIT002.dex_hot:////:////://
6829
6830 //:////////////////:---.EDIT002.use_hyp:////:////://
6831 ;;;function Put_EDIT002_use_hyp(
6832 /** u32_val ................ */ use_hyp ){
6833 GLO_CLA.tau_001.uni_put( //:use_hyp://
6834 GLO_CFG.TAU_001_EDIT002_use_hyp
6835 , use_hyp );;
6836 };;function Get_EDIT002_use_hyp(
6837 /** VOID **/ //:use_hyp://
6838 ){ var /* ................. */ use_hyp =(
6839 GLO_CLA.tau_001.uni_get( //:use_hyp://
6840 GLO_CFG.TAU_001_EDIT002_use_hyp
6841 ));;return( /* ......... */ use_hyp );
6842 };;//://///////////:---.EDIT002.use_hyp:////:////://
6843
6844 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
6845 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
6846 };;
6847 //:AVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV://
6848 //:AV:Adapter_Variables:(ABOVE):-------------------------://
6849
6850 //:EA:Editor_All:(BELOW):--------------------------------://
6851 //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
6852 //: ://
6853 //: edi_all is ALWAYS in focus and always reading ://
6854 //: keyboard and mouse input. Depending on the ://
6855 //: current editor mode ( edi_mod ) it will pass ://
6856 //: the message on to other subordinate editors. ://
6857 //: ://
6858 //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
6859 function NEW_edi_all( /** void **/ ){
6860 var edi_all =( new AA2_EditorAll() );
6861
6862 //:HACK: Because of javascript oddness:
6863 edi_all.CONSTRUCTOR_AKA_INITIALIZER_edi_all( );
6864
6865 Object.seal( edi_all );
6866 return( edi_all );
6867 };;
6868 function AA2_EditorAll( ){
6869
6870 //:Publically_Exposed_Functions:
6871 //://////////////////////////////////////////////////://
6872
6873 //:A generic event reader that reads any type of
6874 //:input event. Whether it be keyboard or mouse.
6875 //:Could also extend to non-userinput events.
6876 this.ReadEvent = ReadEvent;
6877
6878 //:Hack because of javascript weirdness.
6879 this.CONSTRUCTOR_AKA_INITIALIZER_edi_all=(
6880 CONSTRUCTOR_AKA_INITIALIZER_edi_all );;
6881
6882 //://////////////////////////////////////////////////://
6883
6884 //:Hidden/Private:
6885 //:==================================================://
6886 var _ = {}; //:Private Variables Container.
6887 _.editor_is_in_command_mode =( 0 );
6888 _.arr_edi =[ 10 ];
6889 Object.seal( _ );
6890 //:==================================================://
6891
6892 //:An explicit constructor/Initializer that is called
6893 //:within NEW_edi_all(...) will make this code
6894 //:easier to transcribe to C.
6895 function CONSTRUCTOR_AKA_INITIALIZER_edi_all(
6896 /** void **/
6897 ){
6898 _.arr_edi = [ 0 //:First Editor is null
6899 , GLO_CLA.edi_001
6900 , GLO_CLA.edi_002
6901 , GLO_CLA.edi_003
6902 , GLO_CLA.edi_004
6903 , GLO_CLA.edi_005
6904 , GLO_CLA.edi_006
6905 , GLO_CLA.edi_007
6906 , GLO_CLA.edi_008
6907 , GLO_CLA.edi_009
6908 ];;
6909 };;
6910
6911 function ReadEvent( glo_eve ){
6912
6913 //:Possible for object to simultaniously
6914 //:be BOTH event types at the same time,
6915 //:so do NOT use "if-else" or "switch" here.
6916 //://////////////////////////////////////////////://
6917 if( _IsKeyboardEvent( glo_eve )){
6918 _HandleEvent_Key( glo_eve );
6919 };;
6920 if( _IsMouseEvent( glo_eve )){
6921 _HandleEvent_Mou( glo_eve );
6922 };;
6923 //://////////////////////////////////////////////://
6924
6925 //:reset's the bit pattersn on:
6926 //: 1: glo_eve.evt_typ
6927 //: 2: glo_eve.sub_typ
6928 //:To let us know the event data is now invalid.
6929 _MarkEventAsConsumed( glo_eve );
6930
6931 //:Zeros out all values EXCEPT[ evt_typ & sub_typ ]
6932 //:So that old values don't get "necromanced"
6933 //:When bit patterns on "evt_typ" or "sub_type"
6934 //:get re-instated. If you are REALLY CAREFUL
6935 //:you could run code without this. But it means
6936 //:all handler functions MUST check "evt_typ"
6937 //:and "sub_typ" and only touch data associated
6938 //:with those event categories.
6939 //:AKA[ _BetterSafeThanSorryEventDataWhipe ]
6940 _EventDataWhipe( glo_eve );
6941 };;
6942
6943 //://////////////////////////////////////////////////://
6944 ;;function _IsKeyboardEvent( glo_eve ){ //://///://
6945
6946 //:Bitwise_AND_to_determine_if_true:
6947 var res_var=( GLO_DAT.eve_bit.eve_typ_KEY
6948 & glo_eve.eve_typ );;
6949 return( res_var );
6950
6951 };;function _IsMouseEvent( glo_eve ){ //://///://
6952
6953 //:Bitwise_AND_to_determine_if_true:
6954 var res_var =( GLO_DAT.eve_bit.eve_typ_MOU
6955 & glo_eve.eve_typ );;
6956 return( res_var );
6957
6958 };;function _HandleEvent_Key( glo_eve ){ //://///://
6959
6960 var key_press_intercepted =( 0 );
6961
6962 //:Hotkey_Override:
6963 //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
6964 if( glo_eve.k_d){
6965 if( //:------------------------------------------://
6966 0x00 || ( "~" == glo_eve.key )
6967 || ( "`" == glo_eve.key )
6968 ){ //:------------------------------------------://
6969
6970 _.editor_is_in_command_mode =( 1 );
6971 key_press_intercepted = ( 1 );
6972
6973 //:------------------------------------------://
6974 }else
6975 if( _.editor_is_in_command_mode > 0 ){
6976 _.editor_is_in_command_mode =( 0 );
6977 _InvokeHotKey( glo_eve /** glo_eve.key **/ );
6978 key_press_intercepted = ( 1 );
6979 };;};;
6980 //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
6981
6982 //:Route:ToOtherEditors:
6983 //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
6984 if( key_press_intercepted <= 0 ){
6985 //:Route to sub-editors here:
6986
6987 //: console.log( "[KEY]:", glo_eve );
6988 //: console.log( "[k_d]:", glo_eve.k_d );
6989 //: console.log( "[k_u]:", glo_eve.k_u );
6990
6991 var tag_eve =( "K_" ); //:KeyWhatever
6992 if( glo_eve.k_u > 0 ){ tag_eve = "KU"; };
6993 if( glo_eve.k_d > 0 ){ tag_eve = "KD"; };
6994
6995 //:INSIDE_FUNCTION[ _HandleEvent_Key ]
6996 _Call_edi_sub_ReadEvent_Tagged(
6997 glo_eve //:Global_Event
6998 , tag_eve //:TAG(for)EVEnt(type)
6999 );;
7000 };;
7001 //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
7002
7003 };;function _HandleEvent_Mou( glo_eve ){ //://///://
7004 //:AKA[ _HandleEvent_Mouse | _HandleEvent_Mou ]
7005
7006 //:If in command mode, ignore mouse events
7007 //:until user has pressed another key.
7008 //:NICE_TO_HAVE: red boarder around screen
7009 //:when in command mode and awaiting hot key input.
7010 if( _.editor_is_in_command_mode > 0 ){
7011 return;
7012 }else{
7013
7014 //: console.log( "[MOU]:", glo_eve );
7015 //: console.log( "[m_d]:", glo_eve.m_d );
7016 //: console.log( "[m_u]:", glo_eve.m_u );
7017
7018 //#******************************************#//
7019 //# For now, we will ignore passing event #//
7020 //# down unless it is a click type event. #//
7021 //#******************************************#//
7022 var is_click_event=(
7023 GLO_DAT.eve_bit.sub_typ_CLK
7024 & glo_eve.sub_typ
7025 );;
7026 //:Even negative in case signed weirdness
7027 //:somehow happens.
7028 if( is_click_event != 0 /**EVEN NEGATIVE**/ ){
7029
7030 var tag_eve = "MC"; //:TAG:MouseClick
7031
7032 //:INSIDE_FUNCTION[ _HandleEvent_Mou ]
7033 _Call_edi_sub_ReadEvent_Tagged(
7034 glo_eve //:Global_Event
7035 , tag_eve //:TAG(for)EVEnt(type)
7036 );;
7037 }else{
7038 console.log(
7039 "[FIX:SupportEventsBesides:CLK]"
7040 );;
7041 };;
7042 };;
7043
7044 };;//:///////////////////////////////////////////////://
7045
7046 //:Function Name Reads:
7047 //:"Call edi_sub.ReadEvent_Tagged(...)"
7048 //:CALLED_FROM[ _HandleEvent_Key ] //:-://
7049 //:CALLED_FROM[ _HandleEvent_Mou ] //:-://
7050 function _Call_edi_sub_ReadEvent_Tagged( //:-://
7051 glo_eve //:-://
7052 , tag_eve //:-://
7053 ){ //:-://
7054 var edi_mod =( //:-://
7055 GLO_CLA.ada_var.Get_EdiMod() //:-://
7056 );; //:-://
7057 //:Only supporting sub editors [1-9] // - //
7058 if( edi_mod >= 1 && edi_mod <= 9 ){
7059 //:19191919191919191919191919191919191919://
7060 var edi_sub = _.arr_edi[ edi_mod ];
7061
7062 //+//////////////////////////////////+//
7063 //+ +//
7064 //+ Problems with this approach: +//
7065 //+ +//
7066 //+ _.arr_edi[ edi_mod ].Func(...) +//
7067 //+ +//
7068 //+ 1:Polymorphism in C could be +//
7069 //+ done here by having function +//
7070 //+ pointers. +//
7071 //+ But then you would have to be +//
7072 //+ very careful that data-layout +//
7073 //+ for derived types is the same. +//
7074 //+ +//
7075 //+Using a void* collection of A & B +//
7076 //+here would be disasterous. +//
7077 //+struct A{ void* FN_A;void* FN_B };+//
7078 //+struct B{ void* FN_B;void* FN_A };+//
7079 //+ +//
7080 //+//:BUT if careful could work: +//
7081 //+struct A{ void* FN_A;void* FN_B };+//
7082 //+struct B{ void* FN_A;void* FN_B };+//
7083 //+ +//
7084 //+2: If all of our editors were +//
7085 //+ written in style: +//
7086 //+ A: Proceedural (ALL EDITORS) +//
7087 //+ B: ObjectOriented( ALL EDITORS)+//
7088 //+ +//
7089 //+ This approach would work. +//
7090 //+ But will not work if mixing +//
7091 //+ procedural and OOP editor code. +//
7092 //+ +//
7093 //+ 2.A: DANGER!!!!!! +//
7094 //+ Even if you did 2.A... +//
7095 //+ It would work in JavaScript+//
7096 //+ But would be subject to +//
7097 //+ the problems of point #1. +//
7098 //- edi_sub.ReadEvent_Tagged( -//
7099 //- glo_eve -//
7100 //- , tag_eve -//
7101 //- );; -//
7102 //+__________________________________+//
7103
7104 //:We can at least keep table for
7105 //:a check to see if editor was
7106 //:instantiated.
7107 if(!edi_sub){ throw("[NO_SUB_EDI]");};
7108
7109 //:KISS:Keep_it_Simple_stupid:(BELOW)://
7110 //:KSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKS://
7111 /*--*/if( 0 == edi_mod ){
7112
7113 throw("[ThisShouldNeverExecute]");
7114
7115 }else if( 1 == edi_mod ){
7116
7117 GLO_CLA.edi_001.ReadEvent_Tagged(
7118 glo_eve , tag_eve
7119 );;
7120
7121 }else if( 2 == edi_mod ){
7122
7123 AA2_edi_002_ReadEvent_Tagged(
7124 edi_sub ,glo_eve,tag_eve
7125 );;
7126
7127 }else if( 3 == edi_mod ){
7128 console.log( "[TODO:03]" );
7129 }else if( 4 == edi_mod ){
7130 console.log( "[TODO:04]" );
7131 }else if( 5 == edi_mod ){
7132 console.log( "[TODO:05]" );
7133 }else if( 6 == edi_mod ){
7134 console.log( "[TODO:06]" );
7135 }else if( 7 == edi_mod ){
7136 console.log( "[TODO:07]" );
7137 }else if( 8 == edi_mod ){
7138 console.log( "[TODO:08]" );
7139 }else if( 9 == edi_mod ){
7140 console.log( "[TODO:09]" );
7141 }else{
7142 throw("[YOU_MISSED_AN_EDITOR]");
7143 };;
7144 //:KISS:Keep_it_Simple_stupid:(BELOW)://
7145 //:KSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKS://
7146
7147 //:19191919191919191919191919191919191919://
7148 }else
7149 if( 0 == edi_mod ){
7150 //:Okay. Only edi_all get's
7151 //:Messages and does not pass
7152 //:them down to sub editors.
7153 }else{
7154 throw( "[BAD:edi_mod]:" + edi_mod );
7155 };;
7156 };;
7157
7158 //://////////////////////////////////////////////////://
7159 function _MarkEventAsConsumed( glo_eve ){ //://///://
7160
7161 //:Must be done after all handler's are executed.
7162
7163 glo_eve.eve_typ =( 0 );
7164 glo_eve.sub_typ =( 0 );
7165
7166 };;function _EventDataWhipe( glo_eve ){ //://///://
7167
7168 //:EW:EventWhipe:(BELOW):------------------------://
7169 //:EWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEW://
7170 //: ://
7171 //: Whipe all data EXCEPT FOR: ://
7172 //: 1: eve_typ <-- _MarkEventAsConsumed ://
7173 //: 2: sub_typ <-- _MarkEventAsConsumed ://
7174 //: 3: VAR_TYP <-- CONSTANT ://
7175 //: ://
7176 //:EWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEW://
7177 glo_eve.key =("" ); //: ://
7178 //: ://
7179 glo_eve.k_d =( 0 ); //:KEY:DOW //: ://
7180 glo_eve.k_u =( 0 ); //:KEY:UPP //: ://
7181 //: ://
7182 glo_eve.m_x =( 0 ); //:MOU:X_X //: ://
7183 glo_eve.m_y =( 0 ); //:MOU:Y_Y //: ://
7184 //: ://
7185 glo_eve.c_x =( 0 ); //:CLK:X_X //: ://
7186 glo_eve.c_y =( 0 ); //:CLK:Y_Y //: ://
7187 //: ://
7188 glo_eve.u_x =( 0 ); //:UPP:X_X //: ://
7189 glo_eve.u_y =( 0 ); //:UPP:Y_Y //: ://
7190 //: ://
7191 glo_eve.d_x =( 0 ); //:DOW:X_X //: ://
7192 glo_eve.d_y =( 0 ); //:DOW:Y_Y //: ://
7193 //: ://
7194 glo_eve.m_d =( 0 ); //:MOU:DOW //: ://
7195 glo_eve.m_u =( 0 ); //:MOU:UPP //: ://
7196 //:EWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEW://
7197
7198 };;//:///////////////////////////////////////////////://
7199
7200 function _InvokeHotKey( glo_eve /** glo_eve.key **/ ){
7201
7202 console.log( "[_InvokeHotKey]" );
7203
7204 var key =( glo_eve.key );
7205 var key_num=( AA2_glo_eve_KeyNum( glo_eve ) );
7206
7207 //:EM:edi_mod:ChangeTheEditorInChange:-----------://
7208 //:EMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEM://
7209
7210 if( key_num >= 0 /** NON_NEG **/ ){
7211 GLO_CLA.ada_var.Put_EdiMod( key_num );
7212 };;
7213
7214 //:EMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEM://
7215 //:EM:edi_mod:ChangeTheEditorInChange:-----------://
7216
7217 if("_"==key || "-"==key ){
7218 //:ZERO( 0 ) makes it so the renderer
7219 //:shows raw data on "mam_mem" texture.
7220 //:REGARDLESS of whate editor mode
7221 //:is active.
7222 GLO_CLA.ada_var.Put_RenMod( 0 );
7223 }else
7224 if("+"==key || "="==key ){
7225 //:ONE( 1 ) delegates the rendering
7226 //:technique to the current editor
7227 //:in charge ( edi_mod ).
7228 //:By design rendering and user input are
7229 //:tightly coupled together by making the
7230 //:active editor dictate how to render
7231 //:and how to inferr user input.
7232 //:
7233 //:CUSTOM_DESIGN_PATTERN:
7234 //: GAAM+EV:
7235 //: GraphicsAdapter_And_Model
7236 //: + EditorView
7237 //:
7238 GLO_CLA.ada_var.Put_RenMod( 1 );
7239 };;
7240 };;//:[_InvokeHotKey]:////://////////////////////////://
7241 };;
7242 //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
7243
7244 //:EB:Editor_Base:
7245 //:EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB://
7246 //:WE_WILL_NOT_BE_USING_INHERITANCE_IN_JAVASCRIPT.
7247 //:1: Prototypical inheritance === no private data.
7248 //:2: Functions as classes === no inherited private data.
7249 //:3: Below is for conceptual reference only.
7250 //:EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB://
7251 function NEW_edi_bas( /** void **/ ){
7252 var edi_bas =( new AA2_EditorBaseClass() );
7253 Object.seal( edi_bas );
7254 return( edi_bas );
7255 };;
7256 function AA2_EditorBaseClass( ){
7257
7258 this.ReadEvent_Tagged = ReadEvent_Tagged;
7259
7260 var _ = {};
7261 _.VAR_BAS = "edi_bas"; //:BaseClass
7262 _.VAR_TYP = "edi_###"; //:Example: "edi_001"
7263 Object.seal( _ );
7264
7265 //: The idea here is to not have to re-do the
7266 //: complex logic for determining what type of
7267 //: event the event is by supplying an
7268 //: [ event_tag / tag_eve ]. These tags will be
7269 //: SHORT values. Try to stick with short values
7270 //: that can be represented as two letters.
7271 function ReadEvent_Tagged( glo_eve , tag_eve ){
7272
7273 //: "K_" : Key WHATEVER event.
7274 //: "M_" : Mouse WHATEVER event.
7275 //: WHATEVER: Figure it out yourself.
7276
7277 //: 'K' === "KU"|"KD"|"K_"
7278 if( 'K' === tag_eve[0] ){
7279 _HanEve_KeyKey( glo_eve );
7280 };;
7281 //: 'M' === "MM"|"MC"|"MD"|"MU"|"M_"
7282 if( 'M' === tag_eve[0] ){
7283 _HanEve_MouMou( glo_eve );
7284 };;
7285
7286 //:Alternatively:
7287 //: "K_" is "Key Whatever".
7288 if( "KU" == tag_eve ){ _HanEve_KeyUpp(glo_eve);};
7289 if( "KD" == tag_eve ){ _HanEve_KeyDow(glo_eve);};
7290 if( "K_" == tag_eve ){ _HanEve_KeyKey(glo_eve);};
7291 };;
7292
7293 //:WHATEVER handlers:
7294 //://////////////////////////////////////////////////://
7295 //:AKA[ _HanEve_Key | _HandleEvent_Key ]
7296 function _HanEve_KeyKey( glo_eve ){
7297 //:Handle a key event of any kind.
7298 };;
7299 //:AKA[ _HanEve_Mou | _HandleEvent_Mou ]
7300 function _HanEve_MouMou( glo_eve ){
7301 //:Handle a mouse event of any kind.
7302 };;
7303 //://////////////////////////////////////////////////://
7304
7305 //:TI: Typical Implementation:
7306 //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
7307 //: Just handle "KD" (KeyDown) and "MC" (MouseClick)
7308 //: to keep things simple.
7309 //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
7310 ;;function ReadEvent_Tagged( glo_eve , tag_eve ){
7311 if( "KD" === tag_eve ){ _HanEve_KeyDow(glo_eve);};
7312 if( "MC" === tag_eve ){ _HanEve_MouClk(glo_eve);};
7313 };;function _HanEve_KeyDow( glo_eve ){
7314
7315 console.log("from:"+_.VAR_TYP+":[_HanEve_KeyDow]");
7316
7317 };;function _HanEve_MouClk( glo_eve ){
7318
7319 console.log("from:"+_.VAR_TYP+":[_HanEve_MouClk]");
7320
7321 };;
7322 //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
7323
7324 };;
7325 //:EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB://
7326 //:E:Editors:
7327 //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
7328 //: ://
7329 //: Decided that I do not want to have to think about ://
7330 //: the names for each editor. So I will assign them ://
7331 //: serial numbers starting at "001" and the master ://
7332 //: editor (edi_all) can map to editors 1-9 by using ://
7333 //: the number keys 1-9. ://
7334 //: ://
7335 //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
7336
7337 function NEW_edi_001( /** void **/ ){
7338 var edi_001 =( new AA2_Editor_001() );
7339 Object.seal( edi_001 );
7340 return( edi_001 );
7341 };;function AA2_Editor_001( ){
7342
7343 this.ReadEvent_Tagged = ReadEvent_Tagged;
7344
7345 var _ = {};
7346 _.VAR_BAS = "edi_bas"; //:BaseClass
7347 _.VAR_TYP = "edi_001"; //:DerivedClass.
7348 _.PIXEFOG_rec_vp2 = NEW_rec_inc(); //:vp2==Zoomer
7349 Object.seal( _ );
7350
7351 //:TI: Typical Implementation:
7352 //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
7353 //: Just handle "KD" (KeyDown) and "MC" (MouseClick)
7354 //: to keep things simple.
7355 //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
7356 ;;function ReadEvent_Tagged( glo_eve , tag_eve ){
7357 if( "KD" === tag_eve ){ _HanEve_KeyDow(glo_eve);};
7358 if( "MC" === tag_eve ){ _HanEve_MouClk(glo_eve);};
7359 };;function _HanEve_KeyDow( glo_eve ){
7360
7361 //:console.log("from:"+_.VAR_TYP+":[_HanEve_KeyDow]");
7362
7363 //:If key can resolve to number, set the
7364 //:experimental shader index. ( DexSha )
7365 var key_num =( AA2_glo_eve_KeyNum( glo_eve ) );
7366 if( key_num >= 0 && key_num <= 9 ){
7367 GLO_CLA.ada_var.Put_EDIT001_dex_sha( key_num );
7368 };;
7369
7370 //:GET:rec_vp1:
7371 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7372 GLO_CLA.ada_var.Get_GLOBVAR_rec_vp2(
7373 _.PIXEFOG_rec_vp2
7374 );;
7375 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7376
7377 //:R:Reset:rec_vp1 (source rectangle)
7378 //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
7379 if( "R" == glo_eve.key ){
7380 console.log("RESET");
7381 };;
7382 //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
7383 //:P:PAN:
7384 //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
7385 if( "ARR_LEF" == glo_eve.key ){
7386 console.log("<--");
7387 AA2_rec_inc_MoveLef(
7388 _.PIXEFOG_rec_vp2
7389 , 1
7390 );;
7391 };;
7392 if( "ARR_RIG" == glo_eve.key ){
7393 console.log("-->");
7394 AA2_rec_inc_MoveRig(
7395 _.PIXEFOG_rec_vp2
7396 , 1
7397 );;
7398 };;
7399 if( "ARR_UPP" == glo_eve.key ){
7400 console.log("UPP");
7401 AA2_rec_inc_MoveUpp(
7402 _.PIXEFOG_rec_vp2
7403 , 1
7404 );;
7405 };;
7406 if( "ARR_DOW" == glo_eve.key ){
7407 console.log("DOW");
7408 AA2_rec_inc_MoveDow(
7409 _.PIXEFOG_rec_vp2
7410 , 1
7411 );;
7412 };;
7413 //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
7414 //:Z:ZOOM:
7415 //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
7416 if( "+" == glo_eve.key || "=" == glo_eve.key ){
7417
7418 console.log("+");
7419 AA2_rec_inc_ZoomInn(
7420 _.PIXEFOG_rec_vp2
7421 , 1
7422 );;
7423
7424 };;
7425 if( "-" == glo_eve.key || "_" == glo_eve.key ){
7426
7427 console.log("-");
7428 AA2_rec_inc_ZoomOut(
7429 _.PIXEFOG_rec_vp2
7430 , 1
7431 );;
7432
7433 };;
7434 //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
7435 //:M:Manipulate_Side_Walls_By_Pulling_Them_In
7436 //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
7437 if( "A" == glo_eve.key ){ //:LEF:PULL_IN
7438 console.log("A");
7439 AA2_rec_inc_PullLef(
7440 _.PIXEFOG_rec_vp2
7441 , 1
7442 );;
7443 };;
7444 if( "D" == glo_eve.key ){ //:RIG:PULL_IN
7445 console.log("D");
7446 AA2_rec_inc_PullRig(
7447 _.PIXEFOG_rec_vp2
7448 , 1
7449 );;
7450 };;
7451 if( "W" == glo_eve.key ){ //:TOP:PULL_IN
7452 console.log("W");
7453 AA2_rec_inc_PullTop(
7454 _.PIXEFOG_rec_vp2
7455 , 1
7456 );;
7457 };;
7458 if( "S" == glo_eve.key ){ //:BOT:PULL_IN
7459 console.log("S");
7460 AA2_rec_inc_PullBot(
7461 _.PIXEFOG_rec_vp2
7462 , 1
7463 );;
7464 };;
7465 //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
7466
7467 if( "J" == glo_eve.key ){ //:LEF:PUSH_OUT:
7468 console.log("J");
7469 AA2_rec_inc_PushLef(
7470 _.PIXEFOG_rec_vp2
7471 , 1
7472 );;
7473 };;
7474 if( "L" == glo_eve.key ){ //:RIG:PUSH_OUT:
7475 console.log("L");
7476 AA2_rec_inc_PushRig(
7477 _.PIXEFOG_rec_vp2
7478 , 1
7479 );;
7480 };;
7481 if( "I" == glo_eve.key ){ //:TOP:PUSH_OUT:
7482 console.log("I");
7483 AA2_rec_inc_PushTop(
7484 _.PIXEFOG_rec_vp2
7485 , 1
7486 );;
7487 };;
7488 if( "K" == glo_eve.key ){ //:BOT:PUSH_OUT:
7489 console.log("K");
7490 AA2_rec_inc_PushBot(
7491 _.PIXEFOG_rec_vp2
7492 , 1
7493 );;
7494 };;
7495
7496
7497 //:PUT:rec_vp1:
7498 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7499 GLO_CLA.ada_var.Put_GLOBVAR_rec_vp2(
7500 _.PIXEFOG_rec_vp2
7501 );;
7502 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7503
7504 };;function _HanEve_MouClk( glo_eve ){
7505
7506 console.log("from:"+_.VAR_TYP+":[_HanEve_MouClk]");
7507
7508 };;
7509 //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
7510 };;//:[AA2_Editor_001]:////://///////////////////////////://
7511
7512
7513 //:E2:edi_002:(BELOW):-----------------------------------://
7514 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
7515 //: ://
7516 //: Editor #02 is very likely our "vp1_sna" (VP1Snapper)://
7517 //: ://
7518 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
7519
7520
7521 var AA2_edi_002={ //:///////////////////////////////////://
7522 //:VALUE_MEMBER:NOT_A_POINTER! //:////://///////////://
7523 var_tag : null //:AA2_var_tag: //:////://///////////://
7524 //:MUST_BE_FIRST_MEMBER! //:////://///////////://
7525
7526 //:VF:Visible(Public)Functions:(BELOW):--------------://
7527 //:VFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVF://
7528 /**-************************************************-:[]
7529
7530 edi_002.ReadEvent_Tagged ::::::::
7531 AA2_edi_002_ReadEvent_Tagged
7532
7533 []:-************************************************-**/
7534 //:VFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVF://
7535
7536 //:VALUE_MEMBER:NOT_A_POINTER!
7537 , rec_bou : null //:BOUNDS_OF_DATA_BEING_MANIPULATED
7538
7539 };; //://////////////////////////////////////////////////://
7540 Object.seal( AA2_edi_002 );
7541
7542 function NEW_edi_002(){
7543 "use strict"
7544 var edi_002 = null;
7545
7546 //: C11[ struct AA2_edi_002 edi_002 = { 0 }; ]
7547 edi_002 = AA2_ZeroIni( AA2_edi_002 );
7548 edi_002.var_tag = AA2_ValuMem( AA2_var_tag );
7549 edi_002.rec_bou = NEW_rec_inc();
7550
7551 edi_002.var_tag.VAR_TYP=( AA2_VAR_TYP_edi_002 );
7552 edi_002.var_tag.VAR_HIN=("edi_002");//:7_Letters_Exact
7553
7554 Object.seal( edi_002 );
7555 return( edi_002 );
7556 };;
7557
7558 //:H:[Hidden /private]functions:(BELOW):-----------------://
7559 //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
7560
7561 //:MH:MoveHot_swap_rectangle_memory_in_focus:(BELOW):://
7562 //:MHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMH://
7563 //://////////////////////////////////////////////://
7564 function aa2_edi_002_Mov_Any_dex_hot(
7565 edi_002,xos,yos
7566 ){
7567 var A_V =( GLO_CLA.ada_var );
7568 var G_F =( GLO_CFG );
7569
7570 var dex_hot; //:<--value_being_edited
7571
7572 //:GP:[ (GET/PUT)/(LOAD/SAVE)/(QUERY/PERSIST)://
7573 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7574 dex_hot = A_V.Get_EDIT002_dex_hot( );
7575 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7576
7577 if( dex_hot < GLO_CFG.DEX_HOT_MIN //:[ 1 ]
7578 || dex_hot > GLO_CFG.DEX_HOT_MAX //:[16 ]
7579 ){
7580 //:You probably forgot to init the
7581 //:value to a sensible default on
7582 //:startup.
7583 var err_msg=("[[DEX_HOT:OOB]]");
7584 console.log(err_msg);
7585 throw( err_msg);
7586 };;
7587
7588 var san_hot_001=( Math.sqrt(GLO_CFG.NUM_HOT) );
7589 var san_hot_002=( GLO_CFG.SAN_MAM
7590 /GLO_CFG.SAN_ISO );;
7591 if( san_hot_001 != san_hot_002 ){
7592 throw("[MATH_OFF:2020_05_31:10_11AM]");
7593 };;
7594 var san_hot=((san_hot_001+san_hot_002)/2);
7595 var max_xoy=( san_hot - 1 );
7596 var min_xoy=( 0 );
7597
7598 //://////////////////////////////////////////://
7599 //: dex_hot (verb-ish) ~=~ dex_mec (noun-ish):
7600 //:
7601 //: dex_hot: 1-indexed (HOT:HOTswapper)
7602 //: dex_mec: 0-indexed (MEC:MEmoryCell)
7603 //://////////////////////////////////////////://
7604 var dex_mec=( dex_hot - 1 );
7605 var wid =( G_F.SAN_MAM / G_F.SAN_ISO );
7606 var t_x = dex_mec % wid ;;;;;;;
7607 var t_y = (dex_mec-t_x )/ wid ;;;;;;;
7608
7609 //:Tile:XY:Coordinate on [ mam_mem ]
7610 //: [ memory_cell/hot_swapping ]
7611 //: sub-sectors.
7612 t_x +=( xos ); //:ApplyOffset:x
7613 t_y +=( yos ); //:ApplyOffset:y
7614
7615 //:CAP_INTO_VALID_RANGE:
7616 if( t_x > max_xoy ){ t_x = max_xoy; };
7617 if( t_y > max_xoy ){ t_y = max_xoy; };
7618 if( t_x < min_xoy ){ t_x = min_xoy; };
7619 if( t_y < min_xoy ){ t_y = min_xoy; };
7620
7621 var new_dex_mec = t_x + ( wid * t_y );
7622 var new_dex_hot = ( new_dex_mec + 1 );
7623 //://////////////////////////////////////////://
7624
7625 //:Error_Check:
7626 if( new_dex_hot < GLO_CFG.DEX_HOT_MIN //:[ 1 ]
7627 || new_dex_hot > GLO_CFG.DEX_HOT_MAX //:[16 ]
7628 ){
7629 var err_msg=("[BAD_MAT:new_dex_hot]");
7630 console.log( err_msg );
7631 throw( err_msg );
7632 };;
7633
7634 //:GP:[ (GET/PUT)/(LOAD/SAVE)/(QUERY/PERSIST)://
7635 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7636 A_V.Put_EDIT002_dex_hot( new_dex_hot );
7637 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7638
7639 };;function aa2_edi_002_Mov_Lef_dex_hot( edi_002 ){
7640 //:edi_002.Mov_Lef.dex_hot( vod )
7641
7642 aa2_edi_002_Mov_Any_dex_hot(
7643 edi_002, 0 - 1, 0 * 0
7644 );;
7645
7646 };;function aa2_edi_002_Mov_Rig_dex_hot( edi_002 ){
7647 //:edi_002.Mov_Rig.dex_hot( vod )
7648 var A_V =( GLO_CLA.ada_var );
7649
7650 aa2_edi_002_Mov_Any_dex_hot(
7651 edi_002, 0 + 1, 0 * 0
7652 );;
7653
7654 };;function aa2_edi_002_Mov_Upp_dex_hot( edi_002 ){
7655 //:edi_002.Mov_Upp.dex_hot( vod )
7656 var A_V =( GLO_CLA.ada_var );
7657
7658 aa2_edi_002_Mov_Any_dex_hot(
7659 edi_002, 0 * 0, 0 - 1 //:INVERSE_Y
7660 );;
7661
7662 };;function aa2_edi_002_Mov_Dow_dex_hot( edi_002 ){
7663 //:edi_002.Mov_Dow.dex_hot( vod )
7664 var A_V =( GLO_CLA.ada_var );
7665
7666 aa2_edi_002_Mov_Any_dex_hot(
7667 edi_002, 0 * 0, 0 + 1 //:INVERSE_Y
7668 );;
7669
7670 };;//:///////////////////////////////////////////://
7671 //:MHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMH://
7672 //:MH:MoveHot_swap_rectangle_memory_in_focus:(ABOVE):://
7673
7674 function //:edi_002.KeepCameraInBounds(...)
7675 aa2_edi_002_KeepCameraInBounds( edi_002 ){
7676
7677 aa2_edi_002_Cal_rec_bou( edi_002 );
7678
7679 var A_V =( GLO_CLA.ada_var );
7680
7681 //:GP:[Get/Put]::::::::::::::::::::::::::::::://
7682 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7683 var cam_t_x = A_V.Get_EDIT002_cam_t_x( );
7684 var cam_t_y = A_V.Get_EDIT002_cam_t_y( );
7685 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7686
7687 //:CLAMP:LOWER:
7688 if( cam_t_x < edi_002.rec_bou.x_0 ){
7689 cam_t_x = edi_002.rec_bou.x_0;
7690 };;
7691 if( cam_t_y < edi_002.rec_bou.y_0 ){
7692 cam_t_y = edi_002.rec_bou.y_0;
7693 };;
7694
7695 //:CLAMP:UPPER:
7696 if( cam_t_x > edi_002.rec_bou.x_1 ){
7697 cam_t_x = edi_002.rec_bou.x_1;
7698 };;
7699 if( cam_t_y > edi_002.rec_bou.y_1 ){
7700 cam_t_y = edi_002.rec_bou.y_1;
7701 };;
7702
7703 //:GP:[Get/Put]::::::::::::::::::::::::::::::://
7704 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7705 A_V.Put_EDIT002_cam_t_x( cam_t_x );
7706 A_V.Put_EDIT002_cam_t_y( cam_t_y );
7707 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7708
7709 };;
7710
7711 //:TE:Tile_Exponent:---------------------------------://
7712 //:TETETETETETETETETETETETETETETETETETETETETETETETETE://
7713 function
7714 aa2_STATIC_HACK_EDIT002_Put_til_exp_AND_til_san(
7715 til_exp
7716 ){
7717 //:Store the resolved version of til_exp
7718 //:so we do not have to call pow(...)
7719 //:function in shader code.
7720 var til_san = Math.pow( 2 , til_exp );
7721
7722 GLO_CLA.ada_var.Put_EDIT002_til_exp( til_exp );
7723 GLO_CLA.ada_var.Put_EDIT002_til_san( til_san );
7724 };;
7725
7726 //:edi_002.Put_til_exp_AND_til_san(...)
7727 function aa2_edi_002_Put_til_exp_AND_til_san(
7728 edi_002 , til_exp
7729 ){
7730 aa2_STATIC_HACK_EDIT002_Put_til_exp_AND_til_san(
7731 til_exp
7732 );;
7733 };;
7734
7735 //:edi_002.Nex_til_exp:
7736 function aa2_edi_002_Nex_til_exp(
7737 edi_002
7738 ){
7739 //:GET:(Query):
7740 var A_V =( GLO_CLA.ada_var );
7741 var til_exp = A_V.Get_EDIT002_til_exp();
7742
7743 //:DEL_DIF[aa2_edi_002_Pre_til_exp]
7744 til_exp++;
7745
7746 if( til_exp >= 8 /** TSE_SUN **/ ){
7747 til_exp =(8);
7748 };;
7749 if( til_exp <= 0 ){
7750 til_exp =(0 );
7751 };;
7752
7753 //:PUT:(Persist):
7754 aa2_edi_002_Put_til_exp_AND_til_san(
7755 edi_002, til_exp
7756 );;
7757 //:Corrections:
7758 aa2_edi_002_KeepCameraInBounds( edi_002 );
7759 };;
7760 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
7761 //:edi_002.Pre_til_exp:
7762 function aa2_edi_002_Pre_til_exp(
7763 edi_002
7764 ){
7765 //:GET:(Query):
7766 var A_V =( GLO_CLA.ada_var );
7767 var til_exp = A_V.Get_EDIT002_til_exp();
7768
7769 //:DEL_DIF[aa2_edi_002_Nex_til_exp]
7770 til_exp--;
7771
7772 if( til_exp >= 8 /** TSE_SUN **/ ){
7773 til_exp =(8);
7774 };;
7775 if( til_exp <= 0 ){
7776 til_exp =(0 );
7777 };;
7778
7779 //:PUT:(Persist):
7780 aa2_edi_002_Put_til_exp_AND_til_san(
7781 edi_002, til_exp
7782 );;
7783
7784 aa2_edi_002_KeepCameraInBounds( edi_002 );
7785 };;
7786 //:TETETETETETETETETETETETETETETETETETETETETETETETETE://
7787
7788 //:CB:CalcBounds:edi_002.CalculateRectBounds()(BELOW)://
7789 //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
7790 //: ://
7791 //: The current tile exponent (til_exp) will ://
7792 //: determine the bounds of the camera. ://
7793 //: Measured in numbers of cameras. ://
7794 //: The camera is a certain number of ://
7795 //: [ pebbles / pixels / tiles ] wide and tall. ://
7796 //: And we measure the bounds IN cameras. ://
7797 //: ://
7798 //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
7799 function aa2_edi_002_Cal_rec_bou( edi_002 ){
7800 var A_V=( GLO_CLA.ada_var );
7801 var til_exp=( A_V.Get_EDIT002_til_exp() );
7802
7803 if( til_exp < 0 || til_exp > 8 ){
7804 //:DontForgetToInitToSensibleDefaults:
7805 throw("[TILE_EXPONENT_OUT_OF_BOUNDS]");
7806 };;
7807
7808 //:Size of CAMERA in [ pebbles / pixels ]
7809 var til_wto_pix = Math.pow( 2, til_exp );
7810 var til_hto_pix = Math.pow( 2, til_exp );
7811
7812 //:size_of_tilemap:RAW_PIXEL_DATA
7813 //:No [HYPERMAP/QUARKMAP/MIPMAP] distortions.
7814 var map_wto_pix = GLO_CFG.SAN_ISO;
7815 var map_hto_pix = GLO_CFG.SAN_ISO;
7816
7817 //:size_of_tilemap:AFTER[ use_hyp ]APPLIED:
7818 var map_wto_peb; //:Map_WID_Measured_In:PEBBLES
7819 var map_hto_peb; //:Map_HIG_Measured_In:PEBBLES
7820
7821 var use_hyp; //:Conceptually[ edi_002.use_hyp ]
7822 use_hyp = A_V.Get_EDIT002_use_hyp( );
7823
7824 //:total_area_that_can_be_traversed:
7825 ;;;;;;if( 0 === use_hyp ){ /** edi_002.use_hyp **/
7826
7827 //:DATA_VIEW:FLAT_2D
7828 //:EITHER_CASE[ PEBBLE_SIZE === PIXEL_SIZE ]
7829 map_wto_peb = ( map_wto_pix * 1 );
7830 map_hto_peb = ( map_hto_pix * 1 );
7831
7832 }else if( 1 === use_hyp ){ /** edi_002.use_hyp **/
7833
7834 //:DATA_VIEW:HYPER_MAP
7835 //:EITHER_CASE[ PEBBLE_SIZE === PIXEL_SIZE ]
7836 map_wto_peb = ( map_wto_pix / 2 );
7837 map_hto_peb = ( map_hto_pix / 2 );
7838
7839 }else{
7840 var err_msg =( "[BAD:use_hyp]" );
7841 console.log( err_msg );
7842 throw( err_msg );
7843 };;
7844
7845 //:EC:ErrorCheck:
7846 //:ECECECECECECECECECECECECECECECECECECECECECECEC://
7847
7848 //: Camera is not allowed to be bigger than
7849 //: the tilemap. But it can be the exact same
7850 //: size as the tilemap.
7851
7852 //:ECECECECECECECECECECECECECECECECECECECECECECEC://
7853
7854 if( til_wto_pix > map_wto_peb
7855 || til_hto_pix > map_hto_peb
7856 ){
7857 throw("[CAMERA_IS_TOO_BIG]");
7858 };;
7859 if( til_wto_pix < 0
7860 || til_hto_pix < 0
7861 ){
7862 throw("[CAMERA_SOMEHOW_NEGATIVE_SIZE]");
7863 };;
7864
7865 //:ECECECECECECECECECECECECECECECECECECECECECECEC://
7866
7867 //: How wide and tall is our tilemap
7868 //: when measure in CAMERAS (cam)?
7869 //: numcams_wid = tilemap_wid / tilecam_wid
7870 //: numcams_hig = tilemap_hig / tilecam_hig
7871 var map_wto_cam = ( map_wto_peb / til_wto_pix );
7872 var map_hto_cam = ( map_hto_peb / til_hto_pix );
7873
7874 //:L:load_calculated_bounds:_____________________://
7875 //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
7876 edi_002.rec_bou.x_0 =( 0 /** ALWAYS_ZERO **/);
7877 edi_002.rec_bou.y_0 =( 0 /** ALWAYS_ZERO **/);
7878 edi_002.rec_bou.x_1 =( 0 + map_wto_cam - 1 );
7879 edi_002.rec_bou.y_1 =( 0 + map_hto_cam - 1 );
7880 //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
7881 };;
7882 //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
7883 //:CB:CalcBounds:edi_002.CalculateRectBounds()(ABOVE)://
7884
7885 //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
7886 //:H:[Hidden /private]functions:(ABOVE):-----------------://
7887
7888 //[**C11_dictates_PRIVATE_HIDDEN_before_PUBLIC_VISIBLE:**]//
7889
7890 //:V:[Visible/public ]functions:(BELOW):-----------------://
7891 //:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV://
7892
7893 //:CM:Camera_Movement/Translation:(BELOW):-------://
7894 //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
7895 ;;;function AA2_edi_002_Mov_Any_cam_txy(
7896 edi_002,o_x,o_y
7897 ){
7898 var A_V=( GLO_CLA.ada_var );
7899
7900 var cam_t_x; //:Camera_Tilepos:X
7901 var cam_t_y; //:Camera_Tilepos:Y
7902
7903 //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(BELOW):===://
7904 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7905 cam_t_x=A_V.Get_EDIT002_cam_t_x( );
7906 cam_t_y=A_V.Get_EDIT002_cam_t_y( );
7907 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7908 //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(ABOVE):===://
7909
7910 //:CB:CalculateBounds:(BELOW):---------------://
7911 //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
7912 //: ://
7913 //: It is erroneous to enter ://
7914 //: this function [ Mov_Any_cam_txy ] ://
7915 //: with the camera out of bounds. ://
7916 //: ://
7917 //: Tile exponent determines ://
7918 //: bounds if we are using ://
7919 //: the hyper rectangle view: ://
7920 //: ://
7921 //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
7922 //: edi_002.CalculateRectangleBounds();
7923 aa2_edi_002_Cal_rec_bou( edi_002 );
7924 if( cam_t_x < edi_002.rec_bou.x_0
7925 || cam_t_x > edi_002.rec_bou.x_1
7926 || cam_t_y < edi_002.rec_bou.y_0
7927 || cam_t_y > edi_002.rec_bou.y_1
7928 ){
7929 //:Probable_Cause_Of_Error:
7930 //:Make sure when changing til_exp
7931 //:that you re-clamp [cam_t_x]&[cam_t_y]
7932 throw("[StartedOutOfBounds]");
7933 };;
7934 //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
7935
7936 //:Convert_input_to_unsigned_values:
7937 var u32_o_x=Math.abs( o_x );
7938 var u32_o_y=Math.abs( o_y );
7939
7940 //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
7941 if( o_x >= 0 ){
7942 cam_t_x = AA2_U32_ADD_BOU(
7943 /**/ cam_t_x //: u32_var ::://
7944 , u32_o_x //: u32_add ::://
7945 , edi_002.rec_bou.x_0 //: u32_min ::://
7946 , edi_002.rec_bou.x_1 //: u32_max ::://
7947 );;
7948 }else
7949 if( o_x < 0 ){
7950 cam_t_x = AA2_U32_SUB_BOU(
7951 /**/ cam_t_x //: u32_var ::://
7952 , u32_o_x //: u32_sub ::://
7953 , edi_002.rec_bou.x_0 //: u32_min ::://
7954 , edi_002.rec_bou.x_1 //: u32_max ::://
7955 );;
7956 }else{
7957 throw("[WTF_X:2020_05_31]");
7958 };;
7959 //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
7960 //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
7961 if( o_y >= 0 ){
7962 cam_t_y = AA2_U32_ADD_BOU(
7963 /**/ cam_t_y //: u32_var ::://
7964 , u32_o_y //: u32_add ::://
7965 , edi_002.rec_bou.y_0 //: u32_min ::://
7966 , edi_002.rec_bou.y_1 //: u32_max ::://
7967 );;
7968 }else
7969 if( o_y < 0 ){
7970 cam_t_y = AA2_U32_SUB_BOU(
7971 /**/ cam_t_y //: u32_var ::://
7972 , u32_o_y //: u32_sub ::://
7973 , edi_002.rec_bou.y_0 //: u32_min ::://
7974 , edi_002.rec_bou.y_1 //: u32_max ::://
7975 );;
7976 }else{
7977 throw("[WTF_Y:2020_05_31]");
7978 };;
7979 //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
7980
7981 //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(BELOW):===://
7982 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7983 A_V.Put_EDIT002_cam_t_x( cam_t_x );
7984 A_V.Put_EDIT002_cam_t_y( cam_t_y );
7985 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
7986 //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(ABOVE):===://
7987 };;
7988 ;;;function AA2_edi_002_Mov_Lef_cam_t_x( edi_002 ){
7989 //:edi_002.Mov_Lef.cam_t_x( vod )
7990
7991 AA2_edi_002_Mov_Any_cam_txy(
7992 edi_002, 0 - 1, 0 * 0
7993 );;
7994
7995 };;function AA2_edi_002_Mov_Rig_cam_t_x( edi_002 ){
7996 //:edi_002.Mov_Rig.cam_t_x( vod )
7997
7998 AA2_edi_002_Mov_Any_cam_txy(
7999 edi_002, 0 + 1, 0 * 0
8000 );;
8001
8002 };;function AA2_edi_002_Mov_Upp_cam_t_y( edi_002 ){
8003 //:edi_002.Mov_Upp.cam_t_y( vod )
8004
8005 AA2_edi_002_Mov_Any_cam_txy(
8006 edi_002, 0 * 0, 0 - 1 //:INVERSE_Y
8007 );;
8008
8009 };;function AA2_edi_002_Mov_Dow_cam_t_y( edi_002 ){
8010 //:edi_002.Mov_Dow.cam_t_y( vod )
8011
8012 AA2_edi_002_Mov_Any_cam_txy(
8013 edi_002, 0 * 0, 0 + 1 //:INVERSE_Y
8014 );;
8015
8016 };;//:///////////////////////////////////////////://
8017 //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
8018 //:CM:Camera_Movement/Translation:(ABOVE):-------://
8019
8020 //:edi_002.ReadEvent_Tagged(...):
8021 //:WRONG[ AA2_CLA_edi_002_ReadEvent_Tagged ]
8022 //:We do NOT need to put type CATEGORY (CLA/CLASS) here.
8023 //:That is redundant information. Knowing the
8024 //:function is meant for [ instance / type ] edi_002
8025 //:is plenty of information.
8026 function AA2_edi_002_ReadEvent_Tagged(
8027 edi_002 , glo_eve , tag_eve
8028 ){
8029 if(!edi_002){throw("[2020_05_28_1104PM_A]");};
8030
8031 if( "KD" === tag_eve ){
8032
8033 //:LowerCaseNamspace==Private
8034 aa2_edi_002_HanEve_KeyDow(
8035 edi_002 , glo_eve
8036 );;
8037
8038 };;
8039
8040 if( "MC" === tag_eve ){
8041
8042 //:LowerCaseNamspace==Private
8043 aa2_edi_002_HanEve_MouClk(
8044 edi_002
8045 , glo_eve
8046 );;
8047
8048 };;
8049 };;
8050 function
8051 aa2_edi_002_HanEve_KeyDow(
8052 edi_002 , glo_eve
8053 ){
8054 if(!edi_002){throw("[2020_05_28_1104PM_B]");};
8055 if(!glo_eve){throw("[2020_05_28_1104PM_C]");};
8056
8057 console.log(""
8058 + "[aa2_edi_002_HanEve_KeyDow]:"
8059 + edi_002.var_tag.VAR_HIN
8060 );;
8061
8062 var A_V =( GLO_CLA.ada_var );
8063 //:var san_act = AA2_InteAss( GLO_CFG.SAN_MAM );;
8064
8065 //:edi_002.POI_rec_bou = GLO_DAT.rec_hot[ xxxx ];
8066
8067 //:If key can resolve to number, set the
8068 //:experimental shader index. ( DexSha )
8069 var key_num =( AA2_glo_eve_KeyNum( glo_eve ) );
8070 if( key_num >= 0 && key_num <= 8 ){
8071
8072 //:Set tile exponents 0-8:
8073 //: [ til_exp == 0 ]==>[ 2^0 == 1 ]
8074 //: [ til_exp == 1 ]==>[ 2^1 == 2 ]
8075 //: [ til_exp == 2 ]==>[ 2^2 == 4 ]
8076 //: [ til_exp == 3 ]==>[ 2^3 == 8 ]
8077 //: [ til_exp == 4 ]==>[ 2^4 == 16 ]
8078 //: [ til_exp == 5 ]==>[ 2^5 == 32 ]
8079 //: [ til_exp == 6 ]==>[ 2^6 == 64 ]
8080 //: [ til_exp == 7 ]==>[ 2^7 == 128 ]
8081 //: [ til_exp == 8 ]==>[ 2^8 == 256 ]
8082
8083 //:More than 256 will be too big to navigate
8084 //:your level map data. Because 256 pebble
8085 //:tiles is a single BLUE_SUN tile.
8086 //: [ til_exp == 9 ]==>[ 2^9 == 512 ]
8087 GLO_CLA.ada_var.Put_EDIT002_til_exp( key_num );
8088
8089 }else
8090 if( 9 == key_num ){
8091 console.log("[IGNORE:9 is too high]");
8092 };;
8093
8094 //:- - - - - - - - - - - -- - - - - - - - - - - -://
8095
8096 //:R:Reset:rec_vp1 (source rectangle)
8097 //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
8098 if( "R" == glo_eve.key ){
8099 console.log("RESET");
8100 };;
8101 //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
8102
8103 if( 0
8104 || "+" == glo_eve.key //:PLUS_KEY://
8105 || "=" == glo_eve.key //:PLUS_KEY://
8106 ){
8107 //: edi_002.Nex_til_exp( vod );
8108 aa2_edi_002_Nex_til_exp( edi_002 );
8109 console.log("[Nex_til_exp]");
8110 };;
8111 if( 0
8112 || "-" == glo_eve.key //:MINUS_KEY://
8113 || "_" == glo_eve.key //:MINUS_KEY://
8114 ){
8115 //: edi_002:Pre_til_exp( vod );
8116 aa2_edi_002_Pre_til_exp( edi_002 );
8117 console.log("[Pre_til_exp]");
8118 };;
8119
8120 //:ChangeMemoryRegionBeingReadFrom:----------://
8121 //://////////////////////////////////////////://
8122 ;;;;;;if( "A" == glo_eve.key ){ //:LEF
8123
8124 aa2_edi_002_Mov_Lef_dex_hot( edi_002 );
8125
8126 }else if( "D" == glo_eve.key ){ //:RIG
8127
8128 aa2_edi_002_Mov_Rig_dex_hot( edi_002 );
8129
8130 }else if( "W" == glo_eve.key ){ //:UPP
8131
8132 aa2_edi_002_Mov_Upp_dex_hot( edi_002 );
8133
8134 }else if( "S" == glo_eve.key ){ //:DOW
8135
8136 aa2_edi_002_Mov_Dow_dex_hot( edi_002 );
8137
8138 };;//:///////////////////////////////////////://
8139 //://////////////////////////////////////////://
8140
8141 //:Pan_using_Tile_locations:(BELOW):---------://
8142 //:PTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPT://
8143 if( "ARR_LEF" == glo_eve.key ){
8144 console.log("[EDIT002[ <-- ]]");
8145
8146 AA2_edi_002_Mov_Lef_cam_t_x( edi_002 );
8147
8148 };;
8149 if( "ARR_RIG" == glo_eve.key ){
8150 console.log("[EDIT002[ --> ]]");
8151
8152 AA2_edi_002_Mov_Rig_cam_t_x( edi_002 );
8153
8154 };;
8155 if( "ARR_UPP" == glo_eve.key ){
8156 console.log("[EDIT002[ UPP ]]");
8157
8158 AA2_edi_002_Mov_Upp_cam_t_y( edi_002 );
8159
8160 };;
8161 if( "ARR_DOW" == glo_eve.key ){
8162 console.log("[EDIT002[ DOW ]]");
8163
8164 AA2_edi_002_Mov_Dow_cam_t_y( edi_002 );
8165
8166 };;
8167 //:PTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPT://
8168
8169 };;
8170 //:edi_002.HanEve_MouClk
8171 function aa2_edi_002_HanEve_MouClk(
8172 edi_002 , glo_eve
8173 ){
8174
8175 console.log("[HANDLE_THEM_FUCKING_CLICKS]");
8176
8177 };;
8178
8179 //:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV://
8180 //:V:[Visible/public ]functions:(ABOVE):-----------------://
8181
8182 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
8183 //: ://
8184 //: Editor #02 is very likely our "vp1_sna" (VP1Snapper)://
8185 //: ://
8186 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
8187 //:E2:edi_002:(ABOVE):-----------------------------------://
8188
8189 //:UC:UniformController:(BELOW):-------------------------://
8190 //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
8191 function NEW_tau_con( /** void **/ ){
8192 var tau_con =( new TextureAsUniformController() );
8193 Object.seal( tau_con );
8194 return( tau_con );
8195 };;
8196 //: INSTANCE_NAME[ tau_001 | tau_### | tau_999 | tau_con ]
8197 //: CLASS____NAME[ tau_con | TextureAsUniformController ]
8198 function TextureAsUniformController( ){ //://////////////://
8199
8200 //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
8201 //| rec_bou is mapped onto a sub-section of |//
8202 //| mam_mem (master memory) and is used to |//
8203 //| store "uniform values" as "texture |//
8204 //| pixels". |//
8205 //|| ||//
8206 //|| ||//
8207 //| rec_dir grows to fit all uniform values |//
8208 //| currently set using "uni_put". Uniforms |//
8209 //| values put are persisted with "uni_com" |//
8210 //| (uniform commit). |//
8211 //|| ||//
8212 //|| ||//
8213 //| It is wasteful to push a single pixel to a |//
8214 //| texture,so try to batch them all. |//
8215 //|| ||//
8216 //|| +--++--||--++--||--++--||--++--+ ||//
8217 //|| | | ||//
8218 //|| | | ||//
8219 //|| + ++--------------++ + ||//
8220 //|| | || || | ||//
8221 //|| | || rec_dir || | ||//
8222 //|| + || || + ||//
8223 //|| | ++--------------++ | ||//
8224 //|| | | ||//
8225 //|| + + ||//
8226 //|| | rec_bou | ||//
8227 //|| | | ||//
8228 //|| +--++--||--++--||--++--||--++--+ ||//
8229 //|| ||//
8230 //|__________________________________________________|//
8231
8232 //:Publically_Exposed_Functions:
8233 //://////////////////////////////////////////////////://
8234
8235 this.uni_com = uni_com; //:Uniform:Commit
8236 this.uni_get = uni_get; //:Uniform:Get
8237 this.uni_put = uni_put; //:Uniform:Put
8238
8239 //:SETS:BORROWED_POINTER_u32_pix
8240 //:Intentionally abnoxiously long name to get
8241 //:you attention to be careful with this.
8242 this.BorrowPointerAsWeakReference_u32_pix=(
8243 BorrowPointerAsWeakReference_u32_pix
8244 );;
8245
8246 //:Really just for debugger helpfulness:
8247 this.Put_VarNam = Put_VarNam;
8248
8249 //:Memory sub_region to store uniform values on:
8250 this.Put_RecBou = Put_RecBou;
8251
8252 //://////////////////////////////////////////////////://
8253
8254 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
8255
8256 //:Private_Variables:
8257 //://////////////////////////////////////////////////://
8258 var _ = {};
8259
8260 _.VAR_TYP=( "tau_con" ); //:<--Variable_Type(Class)
8261 _.VAR_NAM=( "var_nam" ); //:<--Instance_Name
8262
8263 //:Intentionally obnoxious name because we need to
8264 //:be very careful about memory ownership.
8265 //:Ever wonder why C++'s version of (void*)( ... )
8266 //:is reinterpret_cast( ... ) ? To be abnoxious.
8267 _.BORROWED_POINTER_u32_pix = null;
8268 _.rec_dir = null; //:RECtangle_DIRty
8269 _.use_dir =( 0 ); //:UseDirtyRectangle?
8270 _.rec_bou = null; //:RECtangle_BOUnds
8271 _.ixy_bou = null; //:ixy:[ index + x + y ]
8272 _.ixy_pix = null; //:ixy:[ index + x + y ]
8273
8274 Object.seal( _ );
8275 //://////////////////////////////////////////////////://
8276
8277 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
8278
8279 //:Constructor_Code:
8280 //:Wrapped inside function just for organization.
8281 //://////////////////////////////////////////////////://
8282 function CLASS_CONSTRUCTOR(){
8283
8284 _.BORROWED_POINTER_u32_pix = null; //:SetAfterInit
8285 _.rec_dir = NEW_rec_inc(); //:RECtangle_DIRty(flag)
8286 _.use_dir = ( 0 ); //:Use: rec_dir ?
8287 _.rec_bou = NEW_rec_inc(); //:Rectangle_BoundingBox
8288 _.ixy_bou = NEW_ixy_das(); //:RelativeTo:rec_bou
8289 _.ixy_pix = NEW_ixy_das(); //:RelativeTo:u32_pix
8290
8291 };;CLASS_CONSTRUCTOR();
8292 //://////////////////////////////////////////////////://
8293
8294 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
8295
8296 function BorrowPointerAsWeakReference_u32_pix(
8297 u32_pix //:Uint32_Pixels_Container
8298 ){
8299 if( !u32_pix ){ throw("[NULL_INPUT:u32_pix]"); };
8300 if( u32_pix.VAR_TYP != "uni_pix" ){
8301 throw("[ERR:VAR_TYP!=uni_pix]");
8302 };;
8303
8304 _.BORROWED_POINTER_u32_pix=(
8305 u32_pix
8306 );;
8307 };;
8308
8309 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
8310
8311 function Put_VarNam( var_nam ){ _.var_nam = var_nam; };
8312
8313 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
8314
8315 function Put_RecBou(
8316 x_0 //:TOP_LEF
8317 , y_0 //:TOP_LEF
8318
8319 , x_1 //:BOT_RIG
8320 , y_1 //:BOT_RIG
8321 ){
8322 //:If we ever do this logic somewhere else again,
8323 //:create: AA2_rec_inc_PutAll(x_0,y_0,x_1,y_1);
8324 //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
8325
8326 //:I don't care if you have to come up with ://
8327 //:something convoluted, do NOT allow negative ://
8328 //:coordinates in your rectangle structs! ://
8329 //:The only reason I can think of negative rect ://
8330 //:is a camera that is leaking of world bounds. ://
8331 //:Don't allow camera to leak outside of bounds! ://
8332 if( x_0 < 0 || x_1 < 0 || y_0 < 0 || y_1 < 0 ){
8333 throw("[CodeBaseDoesNotAllowNegativeCoord]");
8334 };;
8335
8336 if( x_0 > x_1
8337 || y_0 > y_1
8338 ){
8339 throw("[OUT_OF_ORDER_RECTANGLE]");
8340 };;
8341
8342 _.rec_bou.x_0 = x_0;
8343 _.rec_bou.y_0 = y_0;
8344 _.rec_bou.x_1 = x_1;
8345 _.rec_bou.y_1 = y_1;
8346
8347 if( x_0 > x_1
8348 || y_0 > y_1
8349 ){
8350 throw("[TYPO_IN_ASSIGNMENT]");
8351 };;
8352 //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
8353 };;
8354
8355 //:Uniform:COMmit
8356 function uni_com( /** void **/ ){
8357
8358 //:If dirty flag is not set, exit.
8359 if( _.use_dir <= 0 ){ return; };
8360 _.use_dir = 0 ;//:MUST_RESET_TO_EXACTLY_ZERO
8361
8362 //:Commit the pixels you decided to set in the
8363 //:openGL texture by using subTexWhatever
8364 //:with the dirty rectangle region.
8365
8366 var G =( GLO_CLA.ada_gra.con_gra );
8367
8368 //:BD:Borrowed_Data:-----------------------------://
8369 //:BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD://
8370 var pix_arr = _.BORROWED_POINTER_u32_pix.pix_arr;
8371 var pix_wid = _.BORROWED_POINTER_u32_pix.pix_wid;
8372 var pix_hig = _.BORROWED_POINTER_u32_pix.pix_hig;
8373 var pix_com = _.BORROWED_POINTER_u32_pix.pix_com;
8374
8375 var tex_lot = _.BORROWED_POINTER_u32_pix.tex_lot;
8376 var tex_han = _.BORROWED_POINTER_u32_pix.tex_han;
8377 //:BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD://
8378
8379 //:¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯://
8380 //:We probably DONT need to call "bindTexture" ://
8381 //:since we never change the texture in a given ://
8382 //:texture slot,but do it just in case. ://
8383 //:- - - - - - - - - - - -- - - - - - - - - - - -://
8384 //:Also not certain if "pixelStorei" needs to be ://
8385 //:called,but is noted as required in my ://
8386 //:texImage2D code,so figure also required here. ://
8387 //:- - - - - - - - - - - -- - - - - - - - - - - -://
8388 //:QUOTE: ://
8389 //:Setting the pixel storage mode affects the ://
8390 //:WebGLRenderingContext.readPixels() operations,://
8391 //:as well as unpacking of textures with the ://
8392 //:WebGLRenderingContext.texImage2D() and ://
8393 //:WebGLRenderingContext.texSubImage2D() methods.://
8394 //:- - - - - - - - - - - -- - - - - - - - - - - -://
8395 //: SOURCE: ://
8396 //: developer.mozilla.org/en-US/docs/Web/ ://
8397 //: API/WebGLRenderingContext/pixelStorei ://
8398 //:- - - - - - - - - - - -- - - - - - - - - - - -://
8399
8400 //:BEFORE[ G.texSubImage2D ]//:////://///////://
8401 G.activeTexture( G.TEXTURE0 + tex_lot );
8402 G.bindTexture( G.TEXTURE_2D , tex_han );
8403 const ALN = 4; //:ALN:"Alignment" GUESS?
8404 G.pixelStorei(G.UNPACK_ALIGNMENT, ALN);
8405
8406 //:Because we are NOT using the entire image
8407 //:source, but a sub-selection of it, we need
8408 //:to specifiy how many pixels are in each
8409 //:row. AKA[ width / stride / pitch ]
8410 //:Of the image. The stride is measured in
8411 //:pixels hear, NOT bytes.
8412 //: SEE[ SC[ #PAK_ROW_LEN_URL# ] ]
8413 //: SEE[ SC[ #MSDN_STRIDE_URL# ] ]
8414 //: SEE[ SC[ #OGL_PIX_TRN_URL# ] ]
8415 G.pixelStorei( G.UNPACK_ROW_LENGTH , pix_wid );
8416 //:BEFORE[ G.texSubImage2D ]//:////://///////://
8417
8418 //:- - - - - - - - - - - -- - - - - - - - - - - -://
8419 //:______________________________________________://
8420
8421 //:DEBUGGING: Replace reference to "rec_dir"
8422 //: below with "rec_bou" to trouble
8423 //: shoot problems by reducing
8424 //: problem search space.
8425 var org_lef=( _.rec_dir.x_0 );
8426 var org_top=( _.rec_dir.y_0 );
8427 var rec_wid=( ( _.rec_dir.x_1 )
8428 - ( _.rec_dir.x_0 ) + 1 );
8429 var rec_hig=( ( _.rec_dir.y_1 )
8430 - ( _.rec_dir.y_0 ) + 1 );
8431
8432 //:We need the index location of the top-left
8433 //:pixel [ org_lef, org_top ] in order to
8434 //:put the correct starting offset into
8435 //:last param of texSubImage2D.
8436 //:IS_OFFSET_BYTES_OR_PIXELS?
8437 var p_x =( org_lef ); //:TOP_LEF:X
8438 var p_y =( org_top ); //:TOP_LEF:Y
8439 var pix_dex = p_x + ( pix_wid * p_y);
8440 var src_oip = pix_dex * ( 1 );//:PixelOffset
8441 var src_oib = pix_dex * pix_com;//:ComponentOffset
8442
8443 //: www.khronos.org/registry/OpenGL-Refpages/
8444 //: gl4/html/glTexSubImage2D.xhtml
8445 G.texSubImage2D(
8446 /**/ G.TEXTURE_2D //:TARGET
8447 , 0 //:LEVEL (LOD/LevelOfDetail)
8448
8449 , org_lef //: [ (rec_dir|red_bou).x_0 ] //:OSX
8450 , org_top //: [ (rec_dir|red_bou).y_0 ] //:OSY
8451 , rec_wid //: [ (rec_dir|red_bou).wid ] //:WID
8452 , rec_hig //: [ (rec_dir|red_bou).hig ] //:HIG
8453
8454 //:------------------------------------------://
8455 //:FORMAT_OF_CPU_SIDE_DATA:SEE[#TSI2D_FORMAT#]
8456 , G.RGBA_INTEGER //:SOURCE_FORMAT
8457 , G.UNSIGNED_BYTE //:SOURCE_TYPE
8458 //:------------------------------------------://
8459
8460 , pix_arr //:ARRAY_BUFFER_VIEW
8461
8462 //: If you are using a sub-section of ://
8463 //: a byte array on the CPU-side, you will ://
8464 //: need to specify the index location of ://
8465 //: the first byte of the first pixel. ://
8466 , src_oib //:SOURCE_OFFSET
8467 );;
8468
8469 };; //:[FN:uni_com(...)]:////:///////////////////////://
8470
8471 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
8472
8473 //:Uniform:PUT
8474 function uni_put(
8475 tau_dex //: AKA[ tau_dex / tui_dex ]
8476 , u32_var //: AKA[ u32_var / u32_val ]
8477 ){
8478
8479 //://////////////////////////////////////////////://
8480 //:Convert tau_dex: ://
8481 //: TO::::: XY coordinate ://
8482 //: WITHIN: _.rec_bou ://
8483 //:AKA[ tau_dex / VAR_IDENTIFIED_BY_LOCAL_INDEX ]://
8484 //://////////////////////////////////////////////://
8485
8486 //:CALCULATES[ ixy_bou.[ x_x | y_y | i_i ] ]
8487 //:CALCULATES[ ixy_pix.[ x_x | y_y | i_i ] ]
8488 CALCULATE_ixy_bou_CALCULATE_ixy_pix(
8489 tau_dex
8490 );;
8491
8492 //:Get component index by multiplying
8493 //:pixel index by 4 because there are
8494 //:4 components ( A R G B ) per pixel.
8495 com_dex = ( _.ixy_pix.i_i * 4 );
8496
8497 //://////////////////////////////////////////////://
8498 //: Reach into the u32_pix.pix_arr you are ://
8499 //: borrowing and put the data there. ://
8500 //://////////////////////////////////////////////://
8501
8502 var pix_arr =( _.BORROWED_POINTER_u32_pix.
8503 pix_arr );;
8504
8505 //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
8506 { //:SCOPE:////:////////////////////:SC[JSB_UNPK]://
8507 //:- - - - - - - - - - -- - - - - - - - - - -://
8508 //: pix_arr; //:Uint8Array_Of_Pixel_Data
8509 //: com_dex; //:IndexOf_1st_Component_Of_Pixel
8510 //: u32_var; //:PixelValueAsUint32
8511 //:- - - - - - - - - - -- - - - - - - - - - -://
8512 let B_M = 0xFF; //:Bit_Mask
8513
8514 oR=( (( u32_var >> 24) & B_M ) >>>0 );
8515 oG=( (( u32_var >> 16) & B_M ) >>>0 );
8516 oB=( (( u32_var >> 8) & B_M ) >>>0 );
8517 oA=( (( u32_var >> 0) & B_M ) >>>0 );
8518
8519 //:---------------------:|_R|G|B|A|:---------://
8520 pix_arr[ com_dex + 0 ] =( oR );;;;;;
8521 pix_arr[ com_dex + 1 ] =( oG );;;;;;
8522 pix_arr[ com_dex + 2 ] =( oB );;;;;;
8523 pix_arr[ com_dex + 3 ] =( oA );;;;;;
8524 //:---------------------:|_R|G|B|A|:---------://
8525 //:- - - - - - - - - - -- - - - - - - - - - -://
8526 } //:SCOPE:////:////////////////////:SC[JSB_UNPK]://
8527 //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
8528
8529 //://////////////////////////////////////////////://
8530 //:Using the XY coordinate local to _.rec_bou ,
8531 //:increase the dirty selection area.
8532 //://////////////////////////////////////////////://
8533
8534 //:If setting the first dirty pixel,
8535 //:the dirty bounding box will begin here:
8536 if( _.use_dir <= 0 ){
8537
8538 //:MUSTBE_EXACTLY_ZERO_TO_DOUBLE_AS_COUNTER
8539 if( _.use_dir != ( 0 )){
8540 throw("[2020_05_20:0152AM]");
8541 };;
8542
8543 //:DO_NOT_USE[ rec_bou ]HERE!
8544 _.rec_dir.x_0 = _.ixy_bou.x_x;
8545 _.rec_dir.x_1 = _.ixy_bou.x_x;
8546 _.rec_dir.y_0 = _.ixy_bou.y_y;
8547 _.rec_dir.y_1 = _.ixy_bou.y_y;
8548
8549 }else
8550 if( _.use_dir >= 1 ){
8551 //:If not the first dirty pixel, expand the
8552 //:current dirty bounds to also include
8553 //:the new pixel.
8554
8555 //:DO_NOT_USE[ bou_rec ]HERE!
8556 //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
8557 _.rec_dir.x_0=Math.min(
8558 _.rec_dir.x_0,
8559 _.ixy_bou.x_x
8560 );;
8561 _.rec_dir.x_1=Math.max(
8562 _.rec_dir.x_1,
8563 _.ixy_bou.x_x
8564 );;
8565 //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
8566
8567 //:DO_NOT_USE[ bou_rec ]HERE!
8568 //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
8569 _.rec_dir.y_0=Math.min(
8570 _.rec_dir.y_0,
8571 _.ixy_bou.y_y
8572 );;
8573 _.rec_dir.y_1=Math.max(
8574 _.rec_dir.y_1,
8575 _.ixy_bou.y_y
8576 );;
8577 //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
8578
8579 }else{
8580 throw("[EDCL:ExpectedDeadCodeLine]");
8581 };;
8582
8583 //:Flag dirty region as existing, and as bonus
8584 //:count the total number of dirty pixels.
8585 _.use_dir = ( _.use_dir + 1 );
8586
8587 };;//:[FN:uni_put(...)]:////:////////////////////////://
8588
8589 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
8590
8591 //:UNIform:GET:
8592 function uni_get(
8593 //:AKA[ tui_dex / VAR_IDENTIFIED_BY_LOCAL_INDEX ]
8594 tau_dex
8595 ){
8596 //:The get operation does NOT pull value off the
8597 //:GPU. We never pull values off the GPU! We track
8598 //:GPU-side data in parallel by making sure we have
8599 //:an accurate CPU-side record of what values we
8600 //:pushed up to GPU.
8601
8602 //:CALCULATES[ ixy_bou.[ x_x | y_y | i_i ] ]
8603 //:CALCULATES[ ixy_pix.[ x_x | y_y | i_i ] ]
8604 CALCULATE_ixy_bou_CALCULATE_ixy_pix(
8605 tau_dex
8606 );;
8607
8608 //:Get component index by multiplying
8609 //:pixel index by 4 because there are
8610 //:4 components ( A R G B ) per pixel.
8611 com_dex = ( _.ixy_pix.i_i * 4 );
8612
8613 //:Extract_All_Pixel_Bytes:
8614 var pix_arr =( _.BORROWED_POINTER_u32_pix.
8615 pix_arr );;
8616 var R = pix_arr[ com_dex + 0 ]; //: R ://
8617 var G = pix_arr[ com_dex + 1 ]; //: G ://
8618 var B = pix_arr[ com_dex + 2 ]; //: B ://
8619 var A = pix_arr[ com_dex + 3 ]; //: A ://
8620
8621 //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
8622 //://///////////////////////////////:SC[JSB_PACK]://
8623 //:-----------:R_G_B_A_:-------------------------://
8624 const m_R =( 0xFF000000 ); //:MASK:RED
8625 const m_G =( 0x00FF0000 ); //:MASK:GREEN
8626 const m_B =( 0x0000FF00 ); //:MASK:BLUE
8627 const m_A =( 0x000000FF ); //:MASK:ALPHA
8628 //:-----------:R_G_B_A_:-------------------------://
8629
8630 var //:------------------------------------------://
8631 u32_var = 0; //:AKA[ u32_var | R_G_B_A ]
8632 u32_var =( (u32_var |(( R << 24) & m_R )) >>>0 );
8633 u32_var =( (u32_var |(( G << 16) & m_G )) >>>0 );
8634 u32_var =( (u32_var |(( B << 8) & m_B )) >>>0 );
8635 u32_var =( (u32_var |(( A << 0) & m_A )) >>>0 );
8636 //://///////////////////////////////:SC[JSB_PACK]://
8637 //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
8638
8639 return( u32_var );
8640 };;//:[FN:uni_get(...)]:////:////////////////////////://
8641
8642 //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
8643
8644 //:Returns_By_Side_Effect[ _.ixy_bou ]:////://///////://
8645 //:Returns_By_Side_Effect[ _.ixy_pix ]:////://///////://
8646 function CALCULATE_ixy_bou_CALCULATE_ixy_pix(
8647 tau_dex
8648 ){
8649
8650 //://////////////////////////////////////////////://
8651 //: 1: Get reference to size of CPU-side bitmap:
8652 //: 2: Check rec_bou validity.
8653 //: 3: Check rec_dir validity.
8654 //://////////////////////////////////////////////://
8655 var u32_pix =(
8656 _.BORROWED_POINTER_u32_pix
8657 );;//:----------------:u32_pix:--------------://
8658
8659 if( !u32_pix ){
8660 var msg=("[NULL_BORROWED_POINTER?]");
8661 console.log( msg );
8662 throw( msg );
8663 };;
8664
8665 var pix_wid =( u32_pix.pix_wid );
8666 var pix_hig =( u32_pix.pix_hig );
8667
8668 if( 1 == 1 ){ //:AlwaysTrue.ForIndentation.
8669 if( ( _.rec_bou.x_0 < 0 )
8670 || ( _.rec_bou.y_0 < 0 )
8671 || ( _.rec_bou.x_1 >= pix_wid )
8672 || ( _.rec_bou.y_1 >= pix_hig )
8673 ){
8674 throw("[rec_bou:OutOFboundsOfPixels]");
8675 };;
8676 };;
8677 if( _.use_dir > 0 ){ //:IsDirtyRectangleActive?
8678 if( ( _.rec_dir.x_0 < _.rec_bou.x_0 )
8679 || ( _.rec_dir.y_0 < _.rec_bou.y_0 )
8680 || ( _.rec_dir.x_1 > _.rec_bou.x_1 )
8681 || ( _.rec_dir.y_1 > _.rec_bou.y_1 )
8682 ){
8683 throw("[DirtyRegionIsOutOfBounds]");
8684 };;
8685 };;
8686
8687 //://////////////////////////////////////////////://
8688
8689 //://////////////////////////////////////////////://
8690 //:Convert tau_dex: ://
8691 //: TO::::: XY coordinate ://
8692 //: WITHIN: _.rec_bou ://
8693 //:AKA[ tau_dex | VAR_IDENTIFIED_BY_LOCAL_INDEX ]://
8694 //://////////////////////////////////////////////://
8695
8696 var bou_wid = ( 1
8697 + _.rec_bou.x_1
8698 - _.rec_bou.x_0
8699 );;
8700
8701 //:FORMULA:INDEX_TO_XY:
8702 var t_x = tau_dex % bou_wid ;
8703 var t_y = (tau_dex-t_x)/ bou_wid ;
8704
8705 //:XY position within _.ixy_bou:
8706 _.ixy_bou.i_i = tau_dex + 0 ;
8707 _.ixy_bou.x_x = _.rec_bou.x_0 + t_x ;
8708 _.ixy_bou.y_y = _.rec_bou.y_0 + t_y ;
8709
8710 //://////////////////////////////////////////////://
8711 //:Convert XY to index local to pix_arr
8712 //://////////////////////////////////////////////://
8713
8714 //:¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯://
8715 //: Take XY coordinates local to rec_bou and ://
8716 //: make them [ local / relative ] to ://
8717 //: u32_pix.[ pix_wid & pix_hig ] (AKA: ://
8718 //: pix_arr) Because ixy_bou is a 4-point ://
8719 //: rectangle overlayed over a bitmap ://
8720 //: rectangle with origin [0,0],the ://
8721 //: transformation is essentially a NOOP. ://
8722 //:__________________________________________://
8723 var p_x =( _.ixy_bou.x_x - 0 );
8724 var p_y =( _.ixy_bou.y_y - 0 );
8725
8726 //:EC:ErrorCheck:
8727 //:ECECECECECECECECECECECECEC://
8728 if( p_x < 0 || p_x >= pix_wid
8729 || p_y < 0 || p_y >= pix_hig
8730 ){
8731 throw("[PXY_OOB]");
8732 };;
8733 //:ECECECECECECECECECECECECEC://
8734
8735 //:Convert pixel xy coordinate to pixel_index:
8736 var pix_dex = p_x + ( pix_wid * p_y);
8737
8738 //:These are the coordinates of pixel LOCAL
8739 //:to the GPU memory block we want to
8740 //:set them on.
8741 _.ixy_pix.i_i = pix_dex;
8742 _.ixy_pix.x_x = p_x ;
8743 _.ixy_pix.y_y = p_y ;
8744
8745 //://////////////////////////////////////////////://
8746 };;//:[CALCULATE_ixy_bou_CALCULATE_ixy_pix]:////:////://
8747
8748 };; //://////////////////////////////////////////////////://
8749 //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
8750 //:UC:UniformController:(ABOVE):-------------------------://
8751
8752
8753
8754//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
8755//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
8756//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
8757//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
8758//:C:Classes_Section:(ABOVE):--------------------------------://
8759
8760
8761//:DB:DeBug_functions:(BELOW):-------------------------------://
8762//:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
8763//:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
8764//:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
8765//:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
8766
8767 //:EXPERIMENT:
8768 //://////////////////////////////////////////////////////://
8769 //: ://
8770 //: Give every debug function a unique ordered ://
8771 //: serial number. Even across your other code bases. ://
8772 //: If function exists in different code base, make ://
8773 //: comment stub saying such. This will help prevent ://
8774 //: name collision since I kept out the "AA2" ://
8775 //: namespace from function name. ://
8776 //: ://
8777 //://////////////////////////////////////////////////////://
8778
8779 //:Debug #0002:
8780 //:Check rec_inc is valid, check u32_var
8781 //:is non-negative.
8782 //:rec_inc.BUG0002(...)
8783 function BUG0002( err_msg , rec_inc, u32_var ){
8784
8785 var fai_tim=( 0 );
8786 if(!(u32_var >= 0 ) ){ fai_tim++; };
8787
8788 //:Just do a null check:
8789 if(!rec_inc){ fai_tim++; };
8790
8791 //+ Decided I will allow unbounded +//
8792 //+ rec_inc functions put the rec_inc +//
8793 //+ into invalid states. +//
8794 //- if( AA2_rec_inc_OrdBad( rec_inc )){ -//
8795 //- fai_tim++; -//
8796 //- };; -//
8797
8798 if( fai_tim > 0 ){
8799 throw("[BUG0002]:", err_msg );
8800 };;
8801 };;
8802
8803 //:Debug # 0001.
8804 //:Dont give a #funck# about knowing what is
8805 //:being debugged when reading function calls.
8806 //:rec_inc.BUG0001(...)
8807 function BUG0001(
8808 rec_inc,u32_var,rec_bou,err_msg
8809 ){
8810
8811 var fai_tim=( 0 );
8812
8813 //:Neg_or_Nan_Check:
8814 if(!(u32_var >= 0)){
8815 fai_tim++;
8816 };;
8817
8818 if( AA2_rec_inc_OrdBad( rec_inc ) ){
8819 fai_tim++;
8820 };;
8821
8822 //:NIN:Not_Inside_Of:Check:
8823 if( AA2_rec_inc_NIN_rec_bou(
8824 /**/ rec_inc , rec_bou
8825 )){
8826 fai_tim++;
8827 };;
8828
8829 if( fai_tim > 0 ){
8830 throw( "[BUG0001]:" + err_msg );
8831 };;
8832 };;
8833
8834//:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
8835//:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
8836//:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
8837//:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
8838//:DB:DeBug_functions:(ABOVE):-------------------------------://
8839
8840
8841
8842//:CM:CallMain:
8843//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
8844//: ://
8845//: Call to main() must come after ALL OTHER CODE. ://
8846//: 1. All Data ://
8847//: 2. All Classes ://
8848//: 3. ALL CODE NO EXCEPTIONS ://
8849//: ://
8850//: This is the case because we are starting ://
8851//: to re-organize the code in a procedural ://
8852//: style. ://
8853//: ://
8854//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
8855
8856
8857 main();
8858
8859
8860
8861//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
8862
8863
8864//:T:Todo_Section:(BELOW):
8865//:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
8866//:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
8867//:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
8868//:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
8869
8870 //:TODO: Shader needs to know if it is using
8871 //: ISO_MEM or MAM_MEM data.
8872
8873//:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
8874//:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
8875//:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
8876//:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
8877
8878
8879//:CR:Code_Reference:(BELOW):--------------------------------://
8880//:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
8881//:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
8882//:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
8883//:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
8884
8885
8886//:==========================================================://
8887//|AUTHOR: John Mark Isaac Madison |//
8888//|EMAIL:: HeavyMetalCookies[ at ][ letterAfter_f-mail ].com |//
8889//|THIS_FILE_ON_PASTE_BIN[ https://pastebin.com/VvTNDiyi ] |//
8890//|YOUTUBE_CODE_OVERVIEW[ youtube.com/watch?v=vkkkeS4t2EU ] |//
8891//:==========================================================://
8892//: GOAL/SUMMARY: ://
8893//: 1: When viewport "#2" (rec_vp2) is snapped onto ://
8894//: viewport "C", the fragment shader code will ://
8895//: render at a "1:1" scale with zero translation. ://
8896//: ://
8897//: 2: As viewport "#2" is resized, it performs a ://
8898//: sub-sample of the shader code input coordinates. ://
8899//: ://
8900//: 2.1: If rec_vp2 is: ://
8901//: A: Same size as rec_vpc ://
8902//: B: Different location than vpc ://
8903//: You have a PAN. ://
8904//: ://
8905//: 2.2: If rec_vp2 is: ://
8906//: A: Different size than rec_vpc ://
8907//: B: Same exact centerpoint as rec_vpc ://
8908//: You have a ZOOM into the CENTER. ://
8909//: ://
8910//: 2.3: If rec_vp2 is: ://
8911//: A: Different size then rec_vpc ://
8912//: B: Different centerpoint than rec_vpc ://
8913//: You have a PAN + ZOOM. ://
8914//:==========================================================://
8915//|//////////////////////////////////////////////////////////|//
8916//| GIVENS: |//
8917//| 1: vpc is always snapped 100% to opengl |//
8918//| context and thus can represent the |//
8919//| gl_FragCoord set of points. |//
8920//| |//
8921//| 2: vp2 is a SOURCE viewport like vp1 (not pictured). |//
8922//| Except the source it samples is vpc's datapoints. |//
8923//| |//
8924//| The smaller vp2 is relative to vpc, the more |//
8925//| "zoomed in" you are on the gl_FragCoord(s). |//
8926//| |//
8927//| SOLVE: |//
8928//| 1: EASY: Fill vpc with grey pixels if gl_FragCoord |//
8929//| is NOT within vp0. |//
8930//| |//
8931//| 2: HARD: For each pixel inside of vp0, |//
8932//| map to vp2's data. |//
8933//| ( vp2's data is a sub-sample of vpc's ) |//
8934//| ( normalized screen coordinates. ) |//
8935//| |//
8936//| |//
8937//| SUMMARY: |//
8938//| INPUT: [ glFragCoord.x , glFragCoord.y ] |//
8939//| OUT: [ vpc_n_o.x , vpc_n_o.y ] |//
8940//|//////////////////////////////////////////////////////////|//
8941///
8942/// //[//////////////////////////////////////////////////]//
8943/// //[ ]//
8944/// //[ DIAGRAM_NAME[ SC[ DIA_VPC_TO_VP2_NORMALIZED ] ] ]//
8945/// //[ CODE_EXAMPLE[ SC[ COD_VPC_TO_VP2_NORMALIZED ] ] ]//
8946/// //[ ]//
8947/// //| |//
8948/// //| ############################################# |//
8949/// //| ## ## |//
8950/// //| ## VP2/vp2: ViewPort2: (ZOOMER_SOURCE) ## |//
8951/// //| ## VPC/vpc: ViewPortC: (CANVAS/CLIENT) ## |//
8952/// //| ## VP0/vp0: ViewPort0: (DESTINATION ) ## |//
8953/// //| ## ## |//
8954/// //| ## vp2: 0% zoomed when covering vpc 100%. ## |//
8955/// //| ## CHANGES TO VP0 POSITION: ## |//
8956/// //| ## Should not alter image in VP0. ## |//
8957/// //| ## CHANGES TO VP0 SIZE: ## |//
8958/// //| ## Should squash+stretch the image ## |//
8959/// //| ## but NOT expand or contract the ## |//
8960/// //| ## upper+lower bounds of the data ## |//
8961/// //| ## set being rendered to VP0. ## |//
8962/// //| ## ## |//
8963/// //| ############################################# |//
8964/// //[ ]//
8965/// //[ DIAGRAM_NAME[ SC[ DIA_VPC_TO_VP2_NORMALIZED ] ] ]//
8966/// //[ CODE_EXAMPLE[ SC[ COD_VPC_TO_VP2_NORMALIZED ] ] ]//
8967/// //[ PASTE____BIN[ https://pastebin.com/VvTNDiyi ] ] ]//
8968/// //[ ]//
8969/// //+ |<----------- EXAMPLE_SPAN==(11)----------->| -+//
8970/// //+ |<------------- gl_FragCoord(s) ----------->| -+//
8971/// //+ |<------------------ vpc ------------------>| -+//
8972/// //+ | (rec_vpc) | -+//
8973/// //+ | | -+//
8974/// //+ | |<-------------- vp0 -------------->| | -+//
8975/// //+ | | (rec_vp0) | | -+//
8976/// //+ | | | | -+//
8977/// //+ | | | | -+//
8978/// //[ +---+---=---=---=---=---=---=---=---=---+---+ -]//
8979/// //[ | 0 | 1 2 3 | 4 5 . 6 | 7 . 8 . 9 |10 | 0]//
8980/// //[ +---+---=---=---=---=---=---=---=---=---+---+ -]//
8981/// //[ | 1 | . . . . | | 1]//
8982/// //[ * * . . . . * * -]//
8983/// //[ | 2 | . . . . | | 2]//
8984/// //[ * * . . . . * * -]//
8985/// //[ | 3 | . . . . | | 3]//
8986/// //[ * - * . . . . * - * -]//
8987/// //[ | 4 | . . . . | | 4]//
8988/// //[ * *...................+-----------+...*...* -]//
8989/// //[ | 5 | | | |0.5| 5]//
8990/// //[ * *...................| |...*...* -]//
8991/// //[ | 6 | | vp2 | |0.6| 6]//
8992/// //[ * - *...................| (rec_vp2) |...* - * -]//
8993/// //[ | 7 | | | |0.7| 7]//
8994/// //[ * *...................+-----------+...*...* -]//
8995/// //[ | 8 | . . . . | | 8]//
8996/// //[ * * . . . . * * -]//
8997/// //[ | 9 | . . . . | | 9]//
8998/// //[ +---+---=---=---=---=---=---=---=---=---+---+ -]//
8999/// //[ |10 | | |0.6|0.7|0.8| | | 10]//
9000/// //[ +---+---=---=---=---=---=---=---=---=---+---+ -]//
9001/// //+ | | +//
9002/// //+ | | +//
9003/// //+ +---+---+---+---+---+---+---+---+---+ +//
9004/// //+ |0.6| |.65| |0.7| |.75| |0.8| +//
9005/// //+ +-----------------------------------+ +//
9006/// //+ | | +//
9007/// //+ |<----------- vpc_n_o.x ----------->| +//
9008/// //+ |( Output gl_FragCoord(s) mapped )| +//
9009/// //+ |( onto rec_vp0 )| +//
9010/// //[ ]//
9011/// //[//////////////////////////////////////////////////]//
9012///
9013///
9014/// //: Q: WHAT IS WRONG WITH FORMULA BELOW?
9015/// //:
9016/// //: [ rec_vp0 / vp0_m_i ]TO[ rec_vp2 / vp2_m_o ]
9017/// //:--------------------------------------------------://
9018/// //:.................|<---- rec_vp0.wid - 1 ---->|
9019/// //: vp0_m_i.x / ( rec_vp0.x_1 - rec_vp0.x_0 )
9020/// //: === vp2_m_o.x / ( rec_vp2.x_1 - rec_vp2.x_0 )
9021/// //:.................|<---- rec_vp2.wid - 1 ---->|
9022/// //:--------------------------------------------------://
9023/// //:
9024/// //:
9025/// //: A: vp0_m_i & vp2_m_0 values need to be offset
9026/// //: so they fit within range: 0 -to- (wid-1)
9027/// //:
9028/// //:
9029/// //:--------------------------------------------------://
9030/// //: ( vp0_m_i.x - rec_vp0.x_0 ) <-- On__Range
9031/// //: / ( rec_vp0.x_1 - rec_vp0.x_0 ) <-- The_Range
9032/// //: |<---- rec_vp0.wid - 1 ---->|
9033/// //: ===
9034/// //: |<---- rec_vp2.wid - 1 ---->|
9035/// //: ( vp2_m_o.x - rec_vp2.x_0 ) <-- On__Range
9036/// //: / ( rec_vp2.x_1 - rec_vp2.x_0 ) <-- The_Range
9037/// //:--------------------------------------------------://
9038/// //: ://
9039/// //: Q: Solve formula above for vp2_m_0.x ://
9040/// //: A: Answer below: ://
9041/// //: ://
9042/// //: vp2_m_o.x =( ( vp0_m_i.x - rec_vp0.x_0 ) ://
9043/// //: / ( rec_vp0.x_1 - rec_vp0.x_0 ) ://
9044/// //: * ( rec_vp2.x_1 - rec_vp2.x_0 ) ://
9045/// //: ) + rec_vp2.x_0 ;;;;;;;;;;;;;;; ://
9046/// //: ://
9047/// //: Lets re-name: ://
9048/// //: [vp2] to [OUT] for Output. ://
9049/// //: [vp0] to [INN] for Input . ://
9050/// //: ://
9051/// //: OUT_m_o.x =( ( INN_m_i.x - rec_INN.x_0 ) ://
9052/// //: / ( rec_INN.x_1 - rec_INN.x_0 ) ://
9053/// //: * ( rec_OUT.x_1 - rec_OUT.x_0 ) ://
9054/// //: ) + rec_OUT.x_0 ;;;;;;;;;;;;;;; ://
9055/// //: ://
9056/// //: When converting coordinate from 1 viewport ://
9057/// //: to another, we can replace "INN" with the ://
9058/// //: input viewport name and "OUT" with the output ://
9059/// //: viewport name. The viewports in this example ://
9060/// //: are named: ://
9061/// //: ://
9062/// //: [ vpc , vp0 , vp2 ] ://
9063/// //: ://
9064/// //:--------------------------------------------------://
9065///
9066//| document.title = ( "[V2M.JS]" ); ||//
9067//| ||//
9068//| //:Fake cast because I will need it in GLSL code. ||//
9069//| function float( any_num ){ ||//
9070//| return( any_num ); ||//
9071//| };; ||//
9072//| ||//
9073//| function DEBUG_BOUNDS_CHECK( ||//
9074//| cxy_inn ||//
9075//| , rec_inn //:AKA[ rec_bou / bounds_rectangle ] ||//
9076//| ){ ||//
9077//| if( cxy_inn.x >= rec_inn.x_0 //:LEF : GTE ||//
9078//| && cxy_inn.x <= rec_inn.x_1 //:RIG : LTE ||//
9079//| && cxy_inn.y >= rec_inn.y_0 //:TOP : GTE ||//
9080//| && cxy_inn.y <= rec_inn.y_1 //:BOT : LTE ||//
9081//| ){ ||//
9082//| //:Okay. Do nothing. ||//
9083//| }else{ ||//
9084//| var err_msg =( "[OUT_OF_BOUNDS]" ); ||//
9085//| console.log( err_msg ); ||//
9086//| throw( err_msg ); ||//
9087//| };; ||//
9088//| };; ||//
9089//| ||//
9090//| var gl_FragCoord = Object.seal({ x: 0 , y: 0}); ||//
9091//| var EXAMPLE_SPAN = ( 11 ); ||//
9092//| ||//
9093//| //:Coordinates: ||//
9094//| //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://||//
9095//| var vp0_m_o = Object.seal({ x: 0 , y: 0}); ||//
9096//| var vp0_m_i = Object.seal({ x: 0 , y: 0}); ||//
9097//| var vp2_m_o = Object.seal({ x: 0 , y: 0}); ||//
9098//| var vp2_m_i = Object.seal({ x: 0 , y: 0}); ||//
9099//| var vpc_m_o = Object.seal({ x: 0 , y: 0}); ||//
9100//| var vpc_m_i = Object.seal({ x: 0 , y: 0}); ||//
9101//| var vpc_mi2 = Object.seal({ x: 0 , y: 0}); ||//
9102//| ||//
9103//| var vpc_n_o = Object.seal({ x: 0 , y: 0}); ||//
9104//| var vpc_n_i = Object.seal({ x: 0 , y: 0}); ||//
9105//| ||//
9106//| //: tbs_noc: My "NOrmalized Coordinate" to execute ||//
9107//| //: GLSL shader code on. AKA: transformed ||//
9108//| //: gl_FragCoord. ||//
9109//| var tbs_noc = Object.seal({ x: 0 , y: 0}); ||//
9110//| //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://||//
9111//| ||//
9112//| //:R:Rectangles: ||//
9113//| //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://||//
9114//| var rec_vpc =(Object.freeze({ ||//
9115//| x_0 : 0 //:TOP_LEF: (inclusive) ||//
9116//| ,y_0 : 0 //:TOP_LEF: (inclusive) ||//
9117//| ||//
9118//| ,x_1 : 10 //:BOT_RIG: (inclusive) ||//
9119//| ,y_1 : 10 //:BOT_RIG: (inclusive) ||//
9120//| }));; ||//
9121//| var rec_vp0 = (Object.freeze({ ||//
9122//| x_0 : 1 //:TOP_LEF: (inclusive) ||//
9123//| ,y_0 : 1 //:TOP_LEF: (inclusive) ||//
9124//| ||//
9125//| ,x_1 : 9 //:BOT_RIG: (inclusive) ||//
9126//| ,y_1 : 9 //:BOT_RIG: (inclusive) ||//
9127//| }));; ||//
9128//| var rec_vp2 = (Object.freeze({ ||//
9129//| x_0 : 6 //:TOP_LEF: (inclusive) ||//
9130//| ,y_0 : 5 //:TOP_LEF: (inclusive) ||//
9131//| ||//
9132//| ,x_1 : 8 //:BOT_RIG: (inclusive) ||//
9133//| ,y_1 : 7 //:BOT_RIG: (inclusive) ||//
9134//| }));; ||//
9135//| //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://||//
9136//| ||//
9137//| for( gl_FragCoord.y = 0 ||//
9138//| ;gl_FragCoord.y < EXAMPLE_SPAN ||//
9139//| ;gl_FragCoord.y++ ||//
9140//| ){ ||//
9141//| for( gl_FragCoord.x = 0 ||//
9142//| ;gl_FragCoord.x < EXAMPLE_SPAN ||//
9143//| ;gl_FragCoord.x++ ||//
9144//| ){ ||//
9145//| ||//
9146//| //:vpc is always snapped to entire[client/canvas] ||//
9147//| //:so we can make this assumption: ||//
9148//| vpc_m_i.x = float( gl_FragCoord.x );//:MAV_INN:X ||//
9149//| vpc_m_i.y = float( gl_FragCoord.y );//:MAV_INN:Y ||//
9150//| ||//
9151//| ||//
9152//| //:IS[ vpc_m_i ]OUTSIDE_OF[rec_vp0]? SC[PT_IN_VP]://||//
9153//| if( vpc_m_i.x < rec_vp0.x_0 //:LEF ( -X- )[ LT ]:://||//
9154//| || vpc_m_i.x > rec_vp0.x_1 //:RIG ( +X+ )[ GT ]:://||//
9155//| || vpc_m_i.y < rec_vp0.y_0 //:TOP ( -Y- )[ LT ]:://||//
9156//| || vpc_m_i.y > rec_vp0.y_1 //:BOT ( +Y+ )[ GT ]:://||//
9157//| ){ //:NOT:inside_the_rectangle[ rec_vp0 ]:////://://||//
9158//| //://////:OUT_OF_BOUNDS_OF_REC[ rec_vp0 ]:////://://||//
9159//| ||//
9160//| //:HERE: Make output pixel color some type of ||//
9161//| //: solid color that will letterbox/outline||//
9162//| //: rec_vp0 when we draw all pixels on ||//
9163//| //: rec_vpc. ||//
9164//| ||//
9165//| }else{ //:INSIDE_THE_RECTANGLE[ rec_vp0 ]:////://://||//
9166//| ||//
9167//| //+ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ +//||//
9168//| //+VARIABLES_BELOW: +//||//
9169//| //+- - - - - - - - - - -- - - - - - - - - - -+//||//
9170//| //+ vp0_m_o : Viewport[ 0 ][ MAV ][ Output ] +//||//
9171//| //+ vp0_m_i : Viewport[ 0 ][ MAV ][ Input ] +//||//
9172//| //+ vp2_m_o : Viewport[ 2 ][ MAV ][ Output ] +//||//
9173//| //+ vp2_m_i : Viewport[ 2 ][ MAV ][ Input ] +//||//
9174//| //+ vpc_m_o : Viewport[ c ][ MAV ][ Output ] +//||//
9175//| //+ vpc_m_i : Viewport[ c ][ MAV ][ Input ] +//||//
9176//| //+ vpc_n_o : Viewport[ c ][ NOR ][ Output ] +//||//
9177//| //+ vpc_n_i : Viewport[ c ][ NOR ][ Input ] +//||//
9178//| //+ __ __ __ __ __ __ ____ __ __ __ __ __ __ +//||//
9179//| ||//
9180//| //+//////////////////////////////////////////+//||//
9181//| //+ [ rec_vpc/vpc_m_i ]TO[ rec_vp0/vp0_m_i ] +//||//
9182//| //[>>>>>" Because rec_vp0 is sub region "<<<<]//||//
9183//| //[>>>>>" of rec_vpc all we need is a "<<<<]//||//
9184//| //[>>>>>" simple assignment. "<<<<]//||//
9185//| vp0_m_o.x = vpc_m_i.x; ||//
9186//| vp0_m_o.y = vpc_m_i.y; ||//
9187//| //+//////////////////////////////////////////+//||//
9188//| ||//
9189//| //:Output_Becomes_Input ||//
9190//| vp0_m_i.x = vp0_m_o.x; ||//
9191//| vp0_m_i.y = vp0_m_o.y; ||//
9192//| ||//
9193//| //:------------------------------------------://||//
9194//| //: [ rec_vp0 / vp0_m_i ]TO[ rec_vp2/vp2_m_o ] ||//
9195//| //: INN: vp0 ( rec_vp0 & vp0_m_i ) ||//
9196//| //: OUT: vp2 ( rec_vp2 & vp2_m_o ) ||//
9197//| //:------------------------------------------://||//
9198//| vp2_m_o.x =( ( vp0_m_i.x - rec_vp0.x_0 ) ||//
9199//| / ( rec_vp0.x_1 - rec_vp0.x_0 ) ||//
9200//| * ( rec_vp2.x_1 - rec_vp2.x_0 ) ||//
9201//| ) + rec_vp2.x_0 ;;;;;;;;;;;;;;; ||//
9202//| vp2_m_o.y =( ( vp0_m_i.y - rec_vp0.y_0 ) ||//
9203//| / ( rec_vp0.y_1 - rec_vp0.y_0 ) ||//
9204//| * ( rec_vp2.y_1 - rec_vp2.y_0 ) ||//
9205//| ) + rec_vp2.y_0 ;;;;;;;;;;;;;;; ||//
9206//| //:------------------------------------------://||//
9207//| DEBUG_BOUNDS_CHECK( vp2_m_o, rec_vp2 ); ||//
9208//| ||//
9209//| //: Output_Becomes_Input: ||//
9210//| vp2_m_i.x = vp2_m_o.x; ||//
9211//| vp2_m_i.y = vp2_m_o.y; ||//
9212//| ||//
9213//| //:------------------------------------------://||//
9214//| //: YES. we are using rec_vpc AGAIN! ||//
9215//| //: The formula is just an assignment, because ||//
9216//| //: vp2 is a sub-sample of vpc. ||//
9217//| //: ||//
9218//| //: [ rec_vp2 / vp2_m_i ]TO[ rec_vpc/vpc_m_o ] ||//
9219//| //: INN: vp2 ( rec_vp2 & vp2_m_i ) ||//
9220//| //: OUT: vpc ( rec_vpc / vpc_m_o ) ||//
9221//| //:------------------------------------------://||//
9222//| vpc_m_o.x =( vp2_m_i.x ); ||//
9223//| vpc_m_o.y =( vp2_m_i.y ); ||//
9224//| //:------------------------------------------://||//
9225//| DEBUG_BOUNDS_CHECK( vpc_m_o, rec_vpc ); ||//
9226//| ||//
9227//| //: Output_Becomes_Input: ||//
9228//| //: We already used[vpc_m_i]so we will call ||//
9229//| //: this variable [vpc_mi2]to avoid problems. ||//
9230//| vpc_mi2.x = vpc_m_o.x; ||//
9231//| vpc_mi2.y = vpc_m_o.y; ||//
9232//| ||//
9233//| //: [ rec_vpc / vpc_m_i ]TO[ rec_vpc/vpc_n_o ] ||//
9234//| //: Formula is simpler this time because we ||//
9235//| //: only want the percentage_along_path on the ||//
9236//| //: sides of rec_vpc. ||//
9237//| //:------------------------------------------://||//
9238//| vpc_n_o.x =(( vpc_mi2.x - rec_vpc.x_0 ) ||//
9239//| /( rec_vpc.x_1- rec_vpc.x_0 ));; ||//
9240//| vpc_n_o.y =(( vpc_mi2.y - rec_vpc.y_0 ) ||//
9241//| /( rec_vpc.y_1- rec_vpc.y_0 ));; ||//
9242//| //:------------------------------------------://||//
9243//| ||//
9244//| //: Output_Becomes_Input: ||//
9245//| vpc_n_i.x = vpc_n_o.x; ||//
9246//| vpc_n_i.y = vpc_n_o.y; ||//
9247//| ||//
9248//| //:These normalized coordinates represent ||//
9249//| //:rec_vpc coordinates after rec_vp2 has ||//
9250//| //:ZOOMED and PANNED over rec_vpc. ||//
9251//| tbs_noc.x = vpc_n_i.x; ||//
9252//| tbs_noc.y = vpc_n_i.y; ||//
9253//| ||//
9254//| //:L:Log:Log_The_Results:(BELOW):------------://||//
9255//| //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://||//
9256//| var x = tbs_noc.x; ||//
9257//| var y = tbs_noc.y; ||//
9258//| console.log("[x,y]:[" + x +"]["+ y + "]"); ||//
9259//| ||//
9260//| //:If all the math is correct, the coordinates ||//
9261//| //:should be within the bounds of the diagram. ||//
9262//| if( tbs_noc.x < 0.6 || tbs_noc.x > 0.8 ||//
9263//| || tbs_noc.y < 0.5 || tbs_noc.y > 0.7 ||//
9264//| ){ ||//
9265//| ||//
9266//| var err_msg =("[YOUR_MATH_IS_WRONG]"); ||//
9267//| console.log( err_msg ); ||//
9268//| throw( err_msg ); ||//
9269//| ||//
9270//| };; ||//
9271//| //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://||//
9272//| ||//
9273//| };; //:///////////////////////////:SC[ PT_IN_VP ]://||//
9274//| ||//
9275//| };;};;//:NEXT[ frag_coord ] ||//
9276
9277//:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
9278//:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
9279//:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
9280//:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
9281//:CR:Code_Reference:(ABOVE):--------------------------------://
9282
9283//:C:Comments_Section:(BELOW):-------------------------------://
9284//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
9285//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
9286//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
9287//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
9288
9289//:NOTES/COMMENTS:
9290//: PWU_AFC: Probably_Wont_Use__Added_For_Completeness
9291//: I didn't think I would need this, but I
9292//: added it into the code anyways because
9293//: it fufilled some type of pattern or
9294//: compulsion.
9295
9296//|:///////////////////////////:DIAGRAM[ SC[ DIA_GAM_TEX ] ]:|//
9297//| |//
9298//| GAM: GAM_TEX: (Game_variables_as_TextureData) |//
9299//| |//
9300//| |<--- 2048 ---->| |//
9301//| +---+---+---+---+ ----- |//
9302//| |GAM|T_L|TOP|T_R| 512 |//
9303//| +---+---+---+---+ ----- |//
9304//| |HOR|LEF|CEN|RIG| 512 |//
9305//| +---+---+---+---+ ----- |//
9306//| |VER|B_L|BOT|B_R| 512 |//
9307//| +---+---+---+---+ ----- |//
9308//| |TS0|TS1|TS2|TS3| 512 |//
9309//| +---+---+---+---+ ----- |//
9310//| <--- mam_mem ---> |//
9311//| |//
9312//| GAM: Game Data. |//
9313//| TS0,TS1,TS2,TS3: Tile Sets. TS0==Terminal. |//
9314//| HOR,VER: Horizontal+Vertical TransRooms |//
9315//| T_L,TOP,T_R,LEF,CEN,RIG,B_L,BOT,B_R: MainRooms |//
9316//| |//
9317//| +---+ +---+---+---+ --- |//
9318//| |GAM| >>>>>>>>>>>>>>+ |T_L|TOP|T_R| | |//
9319//| +---+ V +---+---+---+ | |//
9320//| V |LEF|CEN|RIG| | |//
9321//| +---+ V +---+---+---+ | |//
9322//| |HOR| V |B_L|BOT|B_R| | |//
9323//| +---+ V +---+---+---+ | |//
9324//| |VER| V | |//
9325//| +---+ V | |//
9326//| V EXPLODED_VIEW |//
9327//| +---+---+---+---+ V | |//
9328//| |TS0|TS1|TS2|TS3| V | |//
9329//| +---+---+---+---+ V -------------------- |//
9330//| V |//
9331//| |<---------------- GAM ---------------->| |//
9332//| | | |//
9333//| |<---------------- 64 ----------------->| |//
9334//| | | |//
9335//| +----+----+----+----+----+----+----+----+ ===== |//
9336//| | 08 | 08 | | | ||| |//
9337//| +----+----+ 16 + + ||| |//
9338//| | 08 | 08 | | | ||| |//
9339//| +----+----+----+----+ 32 + ||| |//
9340//| | | | | ||| |//
9341//| + 16 + 16 + + ||| |//
9342//| | | | | ||| |//
9343//| +----+----+----+----+----+----+----+----+ GAM |//
9344//| | | | ||| |//
9345//| + + + ||| |//
9346//| | | | ||| |//
9347//| + 32 + 32 + ||| |//
9348//| | | | ||| |//
9349//| + + + ||| |//
9350//| | | | ||| |//
9351//| +----+----+----+----+----+----+----+----+ ||| |//
9352//| \ / ||| |//
9353//| \ / ||| |//
9354//| +---------------------------------+ ||| |//
9355//| | ||| |//
9356//| | ||| |//
9357//| +--|-+----+----+----+----+----+----+----+ ||| |//
9358//| |ABOV| 64 | | | ||| |//
9359//| +----+----+ 128 + + ||| |//
9360//| | 64 | 64 | | | ||| |//
9361//| +----+----+----+----+ 256 + ||| |//
9362//| | | | | ||| |//
9363//| + 128 + 128 + + ||| |//
9364//| | | | | ||| |//
9365//| +----+----+----+----+----+----+----+----+ GAM |//
9366//| | | | ||| |//
9367//| + + + ||| |//
9368//| | | | ||| |//
9369//| + 256 + 256 + ||| |//
9370//| | | | ||| |//
9371//| + + + ||| |//
9372//| | | | ||| |//
9373//| +----+----+----+----+----+----+----+----+ ||| |//
9374//| \ / ||| |//
9375//| \ / ||| |//
9376//| +---------------------------------+ ||| |//
9377//| | ||| |//
9378//| | ||| |//
9379//| +--|-+----+----+----+----+----+----+----+ ||| |//
9380//| | | ||| |//
9381//| + + ||| |//
9382//| | | ||| |//
9383//| + + ||| |//
9384//| | | ||| |//
9385//| + + ||| |//
9386//| | | ||| |//
9387//| + GAM_TEX + GAM |//
9388//| | 512 | ||| |//
9389//| + + ||| |//
9390//| | | ||| |//
9391//| + + ||| |//
9392//| | | ||| |//
9393//| + + ||| |//
9394//| | | ||| |//
9395//| +----+----+----+----+----+----+----+----+ ===== |//
9396//| | | |//
9397//| |<---------------- 512 ---------------->| |//
9398//| | | |//
9399//| |//
9400//|:///////////////////////////:DIAGRAM[ SC[ DIA_GAM_TEX ] ]:|//
9401
9402//: ## non-fancy uniforms:
9403//: ############################################################
9404//: ## 1: has_mem
9405//: ## 2: ren_mod
9406//: ## 3: edi_mod
9407//: ## 4: gam_tim //:gameTime
9408//: ## 5: dex_hot //:HotSwappedMemoryBlockIndex
9409//: ## Use values 1-16 so zero can mean
9410//: ## "nothing hot swapped".
9411//: ############################################################
9412
9413//: editor_list:
9414//: edi_all : EditorAll, the master editor.
9415//: edi_001 : Test bed shader code editor. 0-9 editors.
9416//: edi_002 : Tile camera editor.
9417
9418//: PROCOOP: PROcedural_OOP
9419//: Procedural Function Using:
9420//: Object Orientation Pattern
9421
9422//: NON_NEG: NON_NEGATIVE_NUMBER ( x >= 0 )
9423
9424//: WHO_NUM_INC: WHOle_NUMber_INClusive
9425
9426//: #PAK_ROW_LEN_URL#
9427//: www.khronos.org/registry/OpenGL-Refpages/es3.0
9428//: /html/glPixelStorei.xhtml
9429
9430//: #OGL_PIX_TRN_URL#
9431//: www.khronos.org/opengl/wiki/Pixel_Transfer
9432
9433//: #MSDN_STRIDE_URL#
9434//: docs.microsoft.com/en-us/windows
9435//: /win32/medfound/image-stride
9436
9437//: #TSI2D_FORMAT#
9438 //:Was wondering if I needed to use
9439 //:the internal format or source format.
9440 //:Since the texture was already set up using
9441 //:texImage2D it makes the most sense that
9442 //:the format and type describe the CPU-side
9443 //:data and not the GPU-side (internal) data.
9444
9445//: Namspaced_Functions: TYPO_YOU_WANT[ Namespaced_Functions ]
9446
9447//: #CANVAS_SIZE_TROUBLE_SHOOTING#:
9448////////////////////////////////////////////////////////////////
9449
9450 //:CS:Canvas_Size:
9451 //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
9452 //: ://
9453 //: This was originally written for trouble ://
9454 //: shooting. It didn't solve the problem. ://
9455 //: The problem was: ://
9456 //: ://
9457 //: 1: I wasn't sampling from the texture ://
9458 //: I thought I was sampling from. ://
9459 //: ://
9460 //: 2: The uniforms were never set for my ://
9461 //: texture samplers, thus all samplers ://
9462 //: defaulted to sampling texture0. ://
9463 //: ://
9464 //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
9465
9466////////////////////////////////////////////////////////////////
9467
9468//#TODO: Because this object's bounds is located at [0,0] #//
9469//# try and have a hackish way to swap what texture #//
9470//# it is hooked up to so we can get visual feedback #//
9471//# that the data is working as expected. #//
9472//# #//
9473//# In fact... there should be a way for ANY #//
9474//# memory region to be swapped out and put on the #//
9475//# 512x512 so we can visually look at and inspect #//
9476//# it. A "hot swap" so none of the values are #//
9477//# corrputed. #//
9478//# #//
9479//# There should be an editor called "hotswapper" #//
9480//# that when active can swap one of the 16 texture #//
9481//# sub regions on mam_mem into iso_mem. #//
9482
9483 //:AKA[ texelget | get_texel | texel_get ]
9484 //:AKA[ texelfetch | texel_fetch | ........ ]
9485 //:AKA[ fetchtexel | gettexel | fetch_texel ]
9486 //:AKA[ texeGet | texe_get | tex_get ]
9487 //: 1: Get_Tex_iso_mem
9488 //: 2: Get_Tex_mam_mem
9489 //: 3: Get_Tex_iso_mem_rot
9490 //: 4: Get_Tex_mam_mem_rot
9491
9492
9493 //:Weird things I say and what I mean:
9494 //://////////////////////////////////////////////////////://
9495 /**:****************************************************:[_]
9496
9497 [raw_data_view]:
9498 All of the rendering data and game data is encoded
9499 as pixels. A "raw_data_view" is essentially looking
9500 at the level-maps and other data in their
9501 "ms-paint" representation rather than the
9502 "in game" representation.
9503
9504 [C11_dictates_PRIVATE_HIDDEN_before_PUBLIC_VISIBLE]:
9505 Public functions are very likely to call private
9506 functions. But do NOT allow it the other way around.
9507 Thus in order of dependency with 1-pass compiling,
9508 we must put the private functions FIRST.
9509
9510 [COMLINK_D_XY_TO_LD_XY_2020_06_01]:
9511 Comment Link between source code in DAS_BOR.HTM
9512 And it's equivalent in ICOG.JS at time of writing
9513 this. Converts a screen coordinate [ d_x , d_y ]
9514 to a local coordinate over the off-screen data
9515 [ ldx , ldy ].
9516
9517 [CAM_TXY_IS_CAM_UNITS]:
9518 [CAM_TXY_IS_IN_CAMERA_UNITS_NOT_TILE_UNITS]:
9519 [CAM_TXY_IS_CAMERA_XY_MEASURED_IN_CAMERAS]:
9520 [CAM_TXY_IS_NOT_A_TOPLEFT_ORIGIN_TILE]:
9521 [ cam_t_x , cam_t_y ] does not represent a
9522 [tile/pixel] in the top left of the camera.
9523
9524 It is the "camera's xy position measured in cameras".
9525
9526 [_]:****************************************************:**/
9527
9528
9529
9530//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
9531//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
9532//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
9533//:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
9534//:C:Comments_Sections:(ABOVE):------------------------------://