CODE_TOLD_FAST

ICOG.JS

Jun 1st, 2020
586
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     //:Summary: This is an OpenGL adaptation of    ::::::::::://
  2.     //:         DAS_BOR.HTM using the youtube      ::::::::::://
  3.     //:         video tutorial below to help       ::::::::::://
  4.     //:         me get started:                    ::::::::::://
  5.     //:ICOG: Indigo Code Open GL                   ::::::::::://
  6.     //:IC01: indigo code 01:                       ::::::::::://
  7.     //:https://www.youtube.com/watch?v=kB0ZVUrI4Aw ::::::::::://
  8.  
  9.     //:___AUTHOR[ John_Mark_Isaac_Madison ______]
  10.     //:_____DATE[ 2020_06_02 ___________________]
  11.     //:PASTE_BIN[ https://pastebin.com/zbCj283k ]
  12.     //:YOU__TUBE[ www.youtube.com/channel/UCoqC7gqrxjD1odmQUxch7ew ]
  13.  
  14.     document.title="[ICOG.JS]";
  15.  
  16. //://////////////////////////////////////////////////////////://
  17.  
  18.     //:GW: Global_Whatever:----------------------------------://
  19.     //:GWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGW:SC[JSGW_VARS]://
  20.     //:                                                      ://
  21.     //:Containers organized in initialization order.         ://
  22.     //:GLO_CFG: CONFIG                                       ://
  23.     //:         Primitive values only.                       ://
  24.     //:         NOT_ALLOWED:                                 ://
  25.     //:                 1: Function Calls.                   ://
  26.     //:                 2: Structs.                          ://
  27.     //:         ALLOWED:                                     ://
  28.     //:             Constant expressions as int,             ://
  29.     //:             float, string.                           ://
  30.     //:                                                      ://
  31.     //:GLO_DAT: DATA                                         ://
  32.     //:     Primitive types and structs.                     ://
  33.     //:    ( struct ~=~ class with no methods )              ://
  34.     //:                                                      ://
  35.     //:GLO_FUN: FUNCTIONS:                                   ://
  36.     //:     Functions in the procedural sense. They are      ://
  37.     //:     loose functions that are NOT part of a class.    ://
  38.     //:     MEMBER METHODS DO NOT BELONG HERE.               ://
  39.     //:     If function put into GLO_FUN is namespaced,      ://
  40.     //:     the namespace should be accomplished using       ://
  41.     //:     "plain C" style syntax.                          ://
  42.     //:                                                      ://
  43.     //:         YES:  MYNAMESPACE_FunctionName               ://
  44.     //:       WRONG:  MYNAMESPACE.FunctionName               ://
  45.     //:                                                      ://
  46.     //:GLO_CLA: CLASSES:                                     ://
  47.     //:     Previously named "GLO_OBJ" but the word "object" ://
  48.     //:     is much to vauge. Any data structure that        ://
  49.     //:     combines both DATA and FUNCTIONS.                ://
  50.     //:GWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGW:SC[JSGW_VARS]://
  51.  
  52.     var NIL = "[NIL]";  //:Stand-in for null pointer.
  53.  
  54.     var GLO_CFG = null; //:GLOBAL_CONFIGURATION
  55.     var GLO_DAT = null; //:GLOBAL_DATA
  56.     var GLO_FUN = null; //:GLOBAL_FUNCTIONS
  57.     var GLO_CLA = null; //:GLOBAL_CLASSES (AKA:GLO_OBJ)
  58.  
  59.     //:GWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGW:SC[JSGW_VARS]://
  60.  
  61. //://////////////////////////////////////////////////////////://
  62.  
  63.     function main(){ //://///////////////////////////////////://
  64.     //:IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII:SC[ JSGW_INIT ]://
  65.     GLO_CFG=( INI_GLO_CFG( ) ); //:PRIMITIVES/CONFIGURATION
  66.     Object.seal(  GLO_CFG    ); //:PRIMITIVES/CONFIGURATION
  67.  
  68.     GLO_DAT=( INI_GLO_DAT( ) ); //:DATA
  69.     Object.seal(  GLO_DAT    ); //:DATA
  70.  
  71.     GLO_FUN=( INI_GLO_FUN( ) ); //:FUNCTIONS
  72.     Object.seal(  GLO_FUN    ); //:FUNCTIONS
  73.  
  74.     GLO_CLA=( INI_GLO_CLA( ) ); //:CLASSES/OBJECTS:AKA:GLO_OBJ
  75.     Object.seal(  GLO_CLA    ); //:CLASSES/OBJECTS:AKA:GLO_OBJ
  76.     //:IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII:SC[ JSGW_INIT ]://
  77.  
  78.         //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://
  79.         //:Initialize other stuff that couldn't be handled
  80.         //:by our coarse initialization order by categories.
  81.         //:( Categories[ GLO_CFG,GLO_DAT,GLO_FUN,GLO_CLA ] )
  82.         //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://
  83.         ;;;INI_GLO_001();function INI_GLO_001(){ //://///////://
  84.  
  85.             //://////////////////////////////////////////////://
  86.             //:This is ugly and possibly overly convouted.
  87.             //:I am not sure. Let's just keep it this way.
  88.             //:We will know if it is overly convoluted
  89.             //:once we transcribe it to C-11 code.
  90.             //://////////////////////////////////////////////://
  91.                     GLO_DAT.loo_tab.nat_win =(
  92.             GLO_FUN.LOOP_TABLE_TICK_nat_win   );;
  93.  
  94.                     GLO_DAT.loo_tab.gam_obj =(
  95.             GLO_FUN.LOOP_TABLE_TICK_gam_obj   );;
  96.  
  97.                     GLO_DAT.loo_tab.ren_log =(
  98.             GLO_FUN.LOOP_TABLE_TICK_ren_log   );;
  99.             //://////////////////////////////////////////////://
  100.  
  101.         };;INI_GLO_002();function INI_GLO_002(){ //://///////://
  102.  
  103.             //:VS:VarSync:GPU<==>CPU:sync_all_vars:(BELOW):--://
  104.             //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://
  105.  
  106.                 //:PV:Persist_Viewport_rectangles:(BELOW):---://
  107.                 //:PVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPV://
  108.                 { //:SCOPE:////://///////////////////////////://
  109.  
  110.                     //:**************************************://
  111.                     //:Viewport rectangles are #PIXEFOG#     ://
  112.                     //:They do not exist structurally.       ://
  113.                     //:**************************************://
  114.  
  115.                     //:rec_vpc: Exists_In_The_Pixel_Fog(PIXEFOG)
  116.                     //:rec_vp0: Exists_In_The_Pixel_Fog(PIXEFOG)
  117.                     //:rec_vp1: Exists_In_The_Pixel_Fog(PIXEFOG)
  118.  
  119.                     let rec_vpc = NEW_rec_inc(); //:CLIENT   -//
  120.                     let rec_vp0 = NEW_rec_inc(); //:DEST     -//
  121.                     let rec_vp1 = NEW_rec_inc(); //:SOURCE   -//
  122.                     let rec_vp2 = NEW_rec_inc(); //:ZOOMER   -//
  123.                                                                    
  124.                     let I_V = ( GLO_DAT.INI_VAL );  
  125.                          
  126.                     //: vpc: [ canvas / client ] viewport:
  127.                     rec_vpc.x_0 = ( I_V.INI_REC_VPC_x_0 );  
  128.                     rec_vpc.x_1 = ( I_V.INI_REC_VPC_x_1 );  
  129.                     rec_vpc.y_0 = ( I_V.INI_REC_VPC_y_0 );  
  130.                     rec_vpc.y_1 = ( I_V.INI_REC_VPC_y_1 );  
  131.                          
  132.                     //: vp0: OnScreen Visible Viewport:
  133.                     rec_vp0.x_0 = ( I_V.INI_REC_VP0_x_0 );  
  134.                     rec_vp0.x_1 = ( I_V.INI_REC_VP0_x_1 );  
  135.                     rec_vp0.y_0 = ( I_V.INI_REC_VP0_y_0 );  
  136.                     rec_vp0.y_1 = ( I_V.INI_REC_VP0_y_1 );  
  137.                              
  138.                     //: vp1: Offscreen_Data_Sampler_Viewport:
  139.                     rec_vp1.x_0 = ( I_V.INI_REC_VP1_x_0 );  
  140.                     rec_vp1.x_1 = ( I_V.INI_REC_VP1_x_1 );  
  141.                     rec_vp1.y_0 = ( I_V.INI_REC_VP1_y_0 );  
  142.                     rec_vp1.y_1 = ( I_V.INI_REC_VP1_y_1 );  
  143.  
  144.                     //: vp2: 0% zoomed when covering vp0 100%.
  145.                     rec_vp2.x_0 = ( I_V.INI_REC_VP2_x_0 );  
  146.                     rec_vp2.x_1 = ( I_V.INI_REC_VP2_x_1 );  
  147.                     rec_vp2.y_0 = ( I_V.INI_REC_VP2_y_0 );  
  148.                     rec_vp2.y_1 = ( I_V.INI_REC_VP2_y_1 );  
  149.  
  150.                     GLO_CLA.ada_var.Put_GLOBVAR_rec_vpc(
  151.                                                 rec_vpc );;
  152.  
  153.                     GLO_CLA.ada_var.Put_GLOBVAR_rec_vp0(
  154.                                                 rec_vp0 );;
  155.  
  156.                     GLO_CLA.ada_var.Put_GLOBVAR_rec_vp1(
  157.                                                 rec_vp1 );;
  158.  
  159.                     GLO_CLA.ada_var.Put_GLOBVAR_rec_vp2(
  160.                                                 rec_vp2 );;
  161.  
  162.                 } //:SCOPE:////://///////////////////////////://
  163.                 //:PVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPV://
  164.  
  165.             //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://
  166.             //:VS:VarSync:GPU<==>CPU:sync_all_vars:(BELOW):--://
  167.  
  168.             //:AI:After_Init:(BELOW):------------------------://
  169.             //:AIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAI://
  170.             //:     Do_Here:
  171.             //:         1: Init to more DESIREABLE state.
  172.             //:         2: Init to    a VALID      state.
  173.             //:AIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAI://
  174.  
  175.                 //:EDITOR_INITS[ E1 | E2 | E3 | ... ](BELOW):://
  176.                 //:==========================================://
  177.  
  178.                 //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
  179.  
  180.                 GLO_CLA.ada_var.Put_EDIT001_dex_sha( 0 );
  181.  
  182.                 //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
  183.                 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
  184.  
  185.                
  186.                 GLO_CLA.ada_var.Put_EDIT002_cam_t_x(  0 );
  187.                 GLO_CLA.ada_var.Put_EDIT002_cam_t_y(  0 );
  188.                 GLO_CLA.ada_var.Put_EDIT002_dex_hot( 16 );
  189.                 GLO_CLA.ada_var.Put_EDIT002_use_hyp(  0 );
  190.      
  191.                 //:DOES_BOTH: Put_EDIT002_til_exp(   til_exp)
  192.                 //:DOES_BOTH: Put_EDIT002_til_san( 2^til_exp)            
  193.                 aa2_STATIC_HACK_EDIT002_Put_til_exp_AND_til_san(
  194.                     4 /** til_exp: 4 ===> til_san: 16 **/
  195.                       /** Because: 2^4 is 16.         **/
  196.                 );;
  197.  
  198.                 //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
  199.  
  200.                 //:==========================================://
  201.                 //:EDITOR_INITS[ E1 | E2 | E3 | ... ](ABOVE):://
  202.  
  203.             //:AIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAI://
  204.             //:AI:After_Init:(ABOVE):------------------------://
  205.  
  206.         };;//:///////////////////////////////////////////////://
  207.         //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://
  208.  
  209.         //:ML:MainLoop:(BELOW):------------------------------://
  210.         //:MLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLML://
  211.         //:ENTER_FOREVER_LOOP:
  212.         window.requestAnimationFrame(
  213.             AA2_InlinedMainLoopTick_NotAFunctionWhenIn_C11);;
  214.  
  215.         function //:while( 1 )
  216.         AA2_InlinedMainLoopTick_NotAFunctionWhenIn_C11(){
  217.  
  218.             GLO_FUN.loop_table_tick(
  219.                 GLO_DAT.loo_tab
  220.             );;
  221.  
  222.             //:Next loop iteration via recursive call:
  223.             window.requestAnimationFrame(
  224.                 AA2_InlinedMainLoopTick_NotAFunctionWhenIn_C11
  225.             );;
  226.  
  227.         };; //://////////////////////////////////////////////://
  228.         //:MLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLML://
  229.  
  230.     };; //://////////////////////////////////////////////////://
  231.  
  232. //:GI:Global_Initialization:(BELOW):-------------------------://
  233. //:GIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGI:SC[JSGW_BODY]://
  234. //:                                                          ://
  235. //:     ORDER:                                               ://
  236. //:         1. INI_GLO_CFG  ( Const Expressions Only      )  ://
  237. //:         1. INI_GLO_DAT  ( DATA / PRIMITIVES / STRUCTS )  ://
  238. //:         2. INI_GLO_FUN  ( FUNCTIONS / PROCEDURES      )  ://
  239. //:         3. INI_GLO_CLA  ( CLASSES / OBJECTS           )  ://
  240. //:                                                          ://
  241. //:GIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGI:SC[JSGW_BODY]://
  242.  
  243.     //://////////////////////////////////////////////////////://
  244.     ;;;function INI_GLO_CFG( ){  //://///////////////////////://
  245.     "use strict"                 //://///////////////////////://
  246.     //://////////////////////////////////////////////////////://
  247.  
  248.         var GLO_CFG ={
  249.         /**/NUM_HOT:(   16    ) //:NumberOfHotSwapRectangles
  250.                                 //:AKA[ HOT_LEN ]
  251.         ,   SAN_ISO:( 512 * 1 )
  252.         ,   SAN_MAM:( 512 * 4 )
  253.  
  254.             //:VP:Viewport:(BELOW):--------------------------://
  255.             //:VPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVP://
  256.  
  257.             //:DESIGN_NOTE: VPC always fills the entire
  258.             //:             canvas. Or if a win32 application,
  259.             //:             fills the entire CLIENT AREA.
  260.             //:             The [ OpenGL / WegGl ] viewport
  261.             //:             always fills 100% of VPC.
  262.             //:
  263.             //:             THUS! VPC can mean:
  264.             //:             [Canvas | gl.Viewport | ClientArea]
  265.             //:             This ambiguity is intentional,
  266.             //:             because they should always be
  267.             //:             identical.
  268.             //:
  269.             //:VP0:ViewportZero   AKA [Screen/Dest] viewport.
  270.             //:VPC:ViewportCanvas AKA [gl.viewport] viewport.
  271.         ,   INI_VPC_WID : 512 //:Initial__ViewPortCanvas__WID
  272.         ,   INI_VPC_HIG : 512 //:Initial__ViewPortCanvas__HIG
  273.  
  274.             //:VPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVP://
  275.             //:VP:Viewport:(ABOVE):--------------------------://
  276.  
  277.         //:TU0: Texure_as_Uniform( block 0 ):
  278.         //:Very intentional that we are not using
  279.         //:"rec_inc" types here. Want these values to
  280.         //:be able to appear in shader code the exact
  281.         //:same way.
  282.         , TAU_001_x0      : (   0   )  //:TEXTURE_DATA_MAPPING
  283.         , TAU_001_x1      : ( 8 - 1 )  //:TEXTURE_DATA_MAPPING  
  284.         , TAU_001_y0      : (   0   )  //:TEXTURE_DATA_MAPPING  
  285.         , TAU_001_y1      : ( 8 - 1 )  //:TEXTURE_DATA_MAPPING  
  286.  
  287.         //:TAU_001: uniform enums:
  288.         //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
  289.         //:Values assigned are local pixel [locations/indexes].
  290.         //:They must be:
  291.         //:         1: NON_NEGATIVE
  292.         //:         2: WITHIN_BOUNDS_OF: TAU_000_[x0,x1,y0,y1]
  293.         //:         3: NON_OVERLAPPING
  294.         //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
  295.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  296.  
  297.  
  298.         //[ Visual Debugging Guide: Index <==> XY ___________]//
  299.         //++-----------------------------------------------+-+//
  300.         //+|   . 00 . 01 . 02 . 03 . 04 . 05 . 06 . 07     |-+//
  301.         //+|   +----+----+----+----+----+----+----+----+   |-+//
  302.         //+|00 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 00|-+//
  303.         //+|-- +----+----+----+----*----+----+----+----+ --|-+//
  304.         //+|01 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 01|-+//
  305.         //+|-- +----+----+----+----*----+----+----+----+ --|-+//
  306.         //+|02 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 02|-+//
  307.         //+|-- +----+----+----+----*----+----+----+----+ --|-+//
  308.         //+|03 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 03|-+//
  309.         //+|-- +****+****+****+>>>>*<<<<+****+****+****+ --|-+//
  310.         //+|04 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 04|-+//
  311.         //+|-- +----+----+----+----*----+----+----+----+ --|-+//
  312.         //+|05 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 05|-+//
  313.         //+|-- +----+----+----+----*----+----+----+----+ --|-+//
  314.         //+|06 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 06|-+//
  315.         //+|-- +----+----+----+----*----+----+----+----+ --|-+//
  316.         //+|07 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 07|-+//
  317.         //+|-- +----+----+----+----+----+----+----+----+ --|-+//
  318.         //+|   . 00 . 01 . 02 . 03 . 04 . 05 . 06 . 07     |-+//
  319.         //++-----------------------------------------------+-+//
  320.  
  321.         //:KEEP_ALL_GROUPED_TOGETHER_SO_YOU_CAN_SPOT_ERRORS:
  322.  
  323.         , TAU_001_GLOBVAR_rec_vpc_x_0 : (  0 ) //:rec_vpc.x_0
  324.         , TAU_001_GLOBVAR_rec_vpc_x_1 : (  1 ) //:rec_vpc.x_1
  325.         , TAU_001_GLOBVAR_rec_vpc_y_0 : (  2 ) //:rec_vpc.y_0
  326.         , TAU_001_GLOBVAR_rec_vpc_y_1 : (  3 ) //:rec_vpc.y_1
  327.  
  328.         , TAU_001_GLOBVAR_rec_vp0_x_0 : (  4 ) //:rec_vp0.x_0
  329.         , TAU_001_GLOBVAR_rec_vp0_x_1 : (  5 ) //:rec_vp0.x_1
  330.         , TAU_001_GLOBVAR_rec_vp0_y_0 : (  6 ) //:rec_vp0.y_0
  331.         , TAU_001_GLOBVAR_rec_vp0_y_1 : (  7 ) //:rec_vp0.y_1
  332.  
  333.         , TAU_001_GLOBVAR_rec_vp1_x_0 : (  8 ) //:rec_vp1.x_0
  334.         , TAU_001_GLOBVAR_rec_vp1_x_1 : (  9 ) //:rec_vp1.x_1
  335.         , TAU_001_GLOBVAR_rec_vp1_y_0 : ( 10 ) //:rec_vp1.y_0
  336.         , TAU_001_GLOBVAR_rec_vp1_y_1 : ( 11 ) //:rec_vp1.y_1
  337.  
  338.         , TAU_001_GLOBVAR_rec_vp2_x_0 : ( 12 ) //:rec_vp1.x_0
  339.         , TAU_001_GLOBVAR_rec_vp2_x_1 : ( 13 ) //:rec_vp1.x_1
  340.         , TAU_001_GLOBVAR_rec_vp2_y_0 : ( 14 ) //:rec_vp1.y_0
  341.         , TAU_001_GLOBVAR_rec_vp2_y_1 : ( 15 ) //:rec_vp1.y_1
  342.  
  343.         , TAU_001_EDIT001_dex_sha     : ( 16 ) //:TestShaderDex
  344.  
  345.         , TAU_001_EDIT002_til_exp     : ( 17 ) //:Tile_Exponent
  346.         , TAU_001_EDIT002_til_san     : ( 18 ) //:Tile_Span
  347.         , TAU_001_EDIT002_cam_t_x     : ( 19 ) //:Tile_X
  348.         , TAU_001_EDIT002_cam_t_y     : ( 20 ) //:Tile_Y
  349.         , TAU_001_EDIT002_dex_hot     : ( 21 ) //:MemBlockIndex
  350.         , TAU_001_EDIT002_use_hyp     : ( 22 ) //:MemBlockIndex
  351.  
  352.         , TAU_001_ENUMCAP             : ( 64 ) //:LEN:64,M_I:63
  353.  
  354.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  355.         //:*EDIT001*[ edi_001 (editor #1) Variables ]
  356.         //: edi_001: Test_Bed_Shader_Editor
  357.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  358.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  359.         //:*EDIT002*[ edi_001 (editor #2) Variables ]        ://
  360.         //: edi_002:Raw Data Editor With Tile Abstraction.   ://
  361.         //:         This is the groundwork for the           ://
  362.         //:         auset (autotileset) editor... But        ://
  363.         //:         I don't want to add too much extra       ://
  364.         //:         functionality. So let's just use this    ://
  365.         //:         as a way to visually edit ANY data on    ://
  366.         //:         the master memory block or iso memory    ://
  367.         //:         block. With maybe... Some type of        ://
  368.         //:         saftey lock on the GAM_TEX sub section.  ://
  369.         //:                                                  ://
  370.         //:         Once finished, we can use this editor's  ://
  371.         //:         code as REFERENCE ( NOT REFACTOR IT)     ://
  372.         //:         to build edi_003 (Auset Editor)          ://
  373.         //:                                                  ://
  374.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  375.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  376.         //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
  377.  
  378.         //|//////////////////////////////////////////////////|//
  379.         //|                                                  |//
  380.         //| MEC_DEX:MEmoryCell_inDEX:                        |//
  381.         //|                                                  |//
  382.         //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
  383.         //| |GAM|T_L|TOP|T_R|  512   ::::::::::::::::::::::::|//
  384.         //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
  385.         //| |HOR|LEF|CEN|RIG|  512   ::::::::::::::::::::::::|//
  386.         //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
  387.         //| |VER|B_L|BOT|B_R|  512   ::::::::::::::::::::::::|//
  388.         //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
  389.         //| |TS0|TS1|TS2|TS3|  512   ::::::::::::::::::::::::|//
  390.         //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
  391.         //|________________________.                   ::::::|//
  392.         , MEC_DEX_GAM : ( 1 - 1) //| GAM : GAM_TEX     ::::::|//
  393.         , MEC_DEX_T_L : ( 2 - 1) //| T_L : TOP_LEF     ::::::|//
  394.         , MEC_DEX_TOP : ( 3 - 1) //| TOP : TOP         ::::::|//
  395.         , MEC_DEX_T_R : ( 4 - 1) //| T_R : TOP_RIG     ::::::|//
  396.         , MEC_DEX_HOR : ( 5 - 1) //| HOR : HOR         ::::::|//
  397.         , MEC_DEX_LEF : ( 6 - 1) //| LEF : LEF         ::::::|//
  398.         , MEC_DEX_CEN : ( 7 - 1) //| CEN : CEN         ::::::|//
  399.         , MEC_DEX_RIG : ( 8 - 1) //| RIG : RIG         ::::::|//
  400.         , MEC_DEX_VER : ( 9 - 1) //| VER : VER         ::::::|//
  401.         , MEC_DEX_B_L : (10 - 1) //| B_L : BOT_LEF     ::::::|//
  402.         , MEC_DEX_BOT : (11 - 1) //| BOT : BOT         ::::::|//
  403.         , MEC_DEX_B_R : (12 - 1) //| B_R : BOT_RIG     ::::::|//
  404.         , MEC_DEX_TS0 : (13 - 1) //| TS0 : TIL_SET:000 ::::::|//
  405.         , MEC_DEX_TS1 : (14 - 1) //| TS1 : TIL_SET:001 ::::::|//
  406.         , MEC_DEX_TS2 : (15 - 1) //| TS2 : TIL_SET:002 ::::::|//
  407.         , MEC_DEX_TS3 : (16 - 1) //| TS3 : TIL_SET:003 ::::::|//
  408.  
  409.           //:Memory Cells that hot swapping points to:
  410.         , MEC_DEX_MIN : (   0  ) //:0_INDEXED
  411.         , MEC_DEX_MAX : (  15  ) //:0_INDEXED
  412.  
  413.           //:Hot Swapping index:
  414.         , DEX_HOT_MIN : (   1  ) //:1_INDEXED
  415.         , DEX_HOT_MAX : (  16  ) //:1_INDEXED
  416.  
  417.  
  418.         //|                                                  |//
  419.         //|__________________________________________________|//
  420.         };;//:<<<[GLO_CFG]<<<<<<<<<<<<<<<<<<<<<<<<<<[GLO_CFG]://
  421.  
  422.             //:Codify/MakeExplicit the relationship between
  423.             //:"MEC_DEX" and "DEX_HOT" values.
  424.             //: MEC_DEX: MemoryCellIndex
  425.             //: DEX_HOT: HotSwappingIndex
  426.             //:ECECECECECECECECECECECECECECECECECECECECECECEC://
  427.             if(  ( GLO_CFG.MEC_DEX_MIN * 1 )
  428.             !=   ( GLO_CFG.DEX_HOT_MIN - 1 )
  429.             ){
  430.                 throw("[VALUES_SHOULD_DIFFER_ONLY_BY_ONE:MIN]");
  431.             };;
  432.             if(  ( GLO_CFG.MEC_DEX_MAX * 1 )
  433.             !=   ( GLO_CFG.DEX_HOT_MAX - 1 )
  434.             ){
  435.                 throw("[VALUES_SHOULD_DIFFER_ONLY_BY_ONE:MAX]");
  436.             };;
  437.             //:ececececececececececececececececececececececec://
  438.             //:
  439.             //: Further error checking. I realize that many  ://
  440.             //: of these values could just be computed at    ://
  441.             //: runtime, but HARDCODING and then error       ://
  442.             //: checking at run time ironically gives us     ://
  443.             //: MORE flexibility when we move to C11.        ://
  444.             //: It also makes the code less abstract and     ://
  445.             //: easier to read in my opinion.                ://
  446.             //: -John_Mark, DATE[ 2020_05_30 ]               ://
  447.             //:                                              ://
  448.             //:ececececececececececececececececececececececec://
  449.             var san_hot = ( GLO_CFG.SAN_MAM
  450.                            /GLO_CFG.SAN_ISO );;
  451.  
  452.             if( ( san_hot * san_hot ) //:MultiplyBothSides
  453.             !=  (   GLO_CFG.NUM_HOT ) //:ToGetTotalSquares
  454.             ){
  455.                 throw("[BAD_CFG:NUM_HOT]");
  456.             };;
  457.  
  458.             if( GLO_CFG.NUM_HOT
  459.             !=  GLO_CFG.DEX_HOT_MAX
  460.             ){
  461.                 throw("[BAD_CFG:(MEC_DEX_*)&(DEX_HOT_*)]");
  462.             };;
  463.             //:ECECECECECECECECECECECECECECECECECECECECECECEC://
  464.  
  465.         Object.freeze(    GLO_CFG );
  466.         return(           GLO_CFG );
  467.  
  468.     //://////////////////////////////////////////////////////://
  469.     };;function INI_GLO_DAT( ){  //://///////////////////////://
  470.     "use strict"                 //://///////////////////////://
  471.     //://////////////////////////////////////////////////////://
  472.  
  473.         //:Enum:GlobalEvent:Types-&-SubTypes:
  474.         var eve_bit ={ //:Event_Bits(ForEventTypes)
  475.               eve_typ_BAD : ( 1 << 0 )>>>0 //:INVALID
  476.            //:eve_typ:Main_Event_Types:
  477.             , eve_typ_KEY : ( 1 << 1 )>>>0 //:KEY:KEYBOARD
  478.             , eve_typ_MOU : ( 1 << 2 )>>>0 //:MOU:MOUSE
  479.  
  480.            //:sub_typ:Event_Sub_Types
  481.             , sub_typ_KUD : ( 1 << 3 )>>>0 //:KUD:KeyUpDown
  482.             , sub_typ_CLK : ( 1 << 4 )>>>0 //:CLK:Click
  483.  
  484.             , sub_typ_K_D : ( 1 << 5 )>>>0 //:KEY:DOWN
  485.             , sub_typ_K_U : ( 1 << 6 )>>>0 //:KEY:UP
  486.  
  487.             , sub_typ_M_D : ( 1 << 7 )>>>0 //:MOU:DOWN
  488.             , sub_typ_M_U : ( 1 << 8 )>>>0 //:MOU:UP
  489.             , sub_typ_M_M : ( 1 << 9 )>>>0 //:MOU:MOVE
  490.  
  491.         };;Object.freeze( eve_bit );
  492.  
  493.         //:USED FOR:
  494.         //:     1: Swapping mam_mem section into iso_mem
  495.         //:        so we can look at it.
  496.         //:     2: Suffling around levels in focus as
  497.         //:        you walk from room to room.
  498.         //:Hot swapping rectangles indexed [ 1 - 16 ]
  499.         //:Zero is invalid index so dex_hot uniform's
  500.         //:zero initialization will be interpreted as invalid.
  501.         var arr_hot=[ null /**---- ZERO_SLOT_ALWAYS_NULL ----**/  
  502.  
  503.             //:hot_rec[ 1 - 4 ] dex_hot==[ 1 - 4 ]  //:------://
  504.             , NEW_rec_inc_MAD_rec_hot( 0 , 0 ) //: 01 ://
  505.             , NEW_rec_inc_MAD_rec_hot( 1 , 0 ) //: 02 ://
  506.             , NEW_rec_inc_MAD_rec_hot( 2 , 0 ) //: 03 ://
  507.             , NEW_rec_inc_MAD_rec_hot( 3 , 0 ) //: 04 ://
  508.                              
  509.             //:hot_rec[ 5 - 8 ] dex_hot==[ 5 - 8 ]  //:------://
  510.             , NEW_rec_inc_MAD_rec_hot( 0 , 1 ) //: 05 ://
  511.             , NEW_rec_inc_MAD_rec_hot( 1 , 1 ) //: 06 ://
  512.             , NEW_rec_inc_MAD_rec_hot( 2 , 1 ) //: 07 ://
  513.             , NEW_rec_inc_MAD_rec_hot( 3 , 1 ) //: 08 ://
  514.                      
  515.             //:hot_rec[ 9 -12 ] dex_hot==[ 9 -12 ]  //:------://
  516.             , NEW_rec_inc_MAD_rec_hot( 0 , 2 ) //: 09 ://
  517.             , NEW_rec_inc_MAD_rec_hot( 1 , 2 ) //: 10 ://
  518.             , NEW_rec_inc_MAD_rec_hot( 2 , 2 ) //: 11 ://
  519.             , NEW_rec_inc_MAD_rec_hot( 3 , 2 ) //: 12 ://
  520.                                  
  521.             //:hot_rec[13 -16 ] dex_hot==[13 -16 ]  //:------://
  522.             , NEW_rec_inc_MAD_rec_hot( 0 , 3 ) //: 13 ://
  523.             , NEW_rec_inc_MAD_rec_hot( 1 , 3 ) //: 14 ://
  524.             , NEW_rec_inc_MAD_rec_hot( 2 , 3 ) //: 15 ://
  525.             , NEW_rec_inc_MAD_rec_hot( 3 , 3 ) //: 16 ://
  526.             //:---------------------------------------:----:-://
  527.  
  528.         ];; //://////////////////////////////////////////////://
  529.  
  530.         let BOU =( GLO_CFG.SAN_ISO );
  531.         if( BOU != 512 ){
  532.             throw("[InspectCodeForBreaksBeforeRemovingThis]");
  533.         };;
  534.         let VPC_WID = GLO_CFG.INI_VPC_WID;
  535.         let VPC_HIG = GLO_CFG.INI_VPC_HIG;
  536.  
  537.         var GLO_DAT = {
  538.             eve_bit : eve_bit
  539.             ,
  540.             arr_hot : arr_hot
  541.             ,
  542.             event_listeners_registered : 0
  543.             ,
  544.             //:Global Event Object For Keyboard And Mouse
  545.             //:user input. Widdled down version of "nat_eve"
  546.             glo_eve : NEW_glo_eve()
  547.             ,
  548.             //:LoopTable. (Main loop struct)
  549.             loo_tab : NEW_loo_tab()
  550.             ,
  551.             INI_VAL:{ //:[INITIAL/STARTING] values. /////////://
  552.                 //://////////////////////////////////////////://
  553.  
  554.                     //:Initial Spans for texture memory:
  555.                     //:[ ada_gra.iso_mem.[ pix_wid | pix_hig ] ]
  556.                     //:[ ada_gra.mam_mem.[ pix_wid | pix_hig ] ]
  557.                     //- SAN_ISO :  512 //:INI_SAN_iso_mem    -//
  558.                         SAN_ISO : GLO_CFG.SAN_ISO
  559.  
  560.                     //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
  561.                     //|  |<---------- san_wid ---------->|   |//
  562.                     //|  |<---------- san_mam ---------->|   |//
  563.                     //|  +-------+-------+-------+-------+   |//
  564.                     //|  |       |       |       |       |   |//
  565.                     //|  |san_iso|san_iso|san_iso|san_iso|   |//
  566.                     //|  |       |       |       |       |   |//
  567.                     //|  +-------+-------+-------+-------+   |//
  568.                     //|  |       |       |       |       |   |//
  569.                     //|  |san_iso|san_iso|san_iso|san_iso|   |//
  570.                     //|  |       |       |       |       |   |//
  571.                     //|  +-------+-------+-------+-------+   |//
  572.                     //|  |       |       |       |       |   |//
  573.                     //|  |san_iso|san_iso|san_iso|san_iso|   |//
  574.                     //|  |       |       |       |       |   |//
  575.                     //|  +-------+-------+-------+-------+   |//
  576.                     //|  |       |       |       |       |   |//
  577.                     //|  |san_iso|san_iso|san_iso|san_iso|   |//
  578.                     //|  |       |       |       |       |   |//
  579.                     //|  +-------+-------+-------+-------+   |//
  580.                     //|  |< 512 >|< 512 >|< 512 >|< 512 >|   |//
  581.                     //|  |<----------- 2048 ------------>|   |//
  582.                     //|  |<--- SAN_MAM:2048 ------------>|   |//
  583.                     //|                                      |//
  584.                     //| SAN_MAM should be able to fit        |//
  585.                     //| sixteen(16) SAN_ISO via.             |//
  586.                     //| (Because: 4x4==16  )                 |//
  587.                     //| ( 2048 === 512 * 4 )                 |//
  588.                     //|______________________________________|//
  589.             //- ,   SAN_MAM : 2048 //:INI_SAN_mam_mem        -//
  590.                 ,   SAN_MAM : GLO_CFG.SAN_MAM
  591.                    
  592.                     //:Decided to write it this way instead
  593.                     //:of put a "rec_vpc={ .x_0 ... }"
  594.                     //:Because that would introduce risk
  595.                     //:of accidentially passing the rec_vpc
  596.                     //:in here around in your code.
  597.                 ,   INI_REC_VPC_x_0 : 0       -0 +  0
  598.                 ,   INI_REC_VPC_x_1 : VPC_WID -1 -  0
  599.                 ,   INI_REC_VPC_y_0 : 0       -0 +  0
  600.                 ,   INI_REC_VPC_y_1 : VPC_HIG -1 -  0
  601.  
  602.                 ,   INI_REC_VP0_x_0 : 0       -0 + 32  
  603.                 ,   INI_REC_VP0_x_1 : VPC_WID -1 - 32  
  604.                 ,   INI_REC_VP0_y_0 : 0       -0 + 32  
  605.                 ,   INI_REC_VP0_y_1 : VPC_HIG -1 - 32  
  606.  
  607.                     //: INIT TO INVALID VALUES BECAUSE IT IS
  608.                     //: RESPONSIBILITY OF THE EDITORS TO
  609.                     //: CONTROL THIS VIEWPORT'S POSITION OVER
  610.                     //: THE GPU TEXTURE DATA.
  611.                 ,   INI_REC_VP1_x_0 : ( 0 - 1111 ) //:SRC:x_0
  612.                 ,   INI_REC_VP1_x_1 : ( 0 - 2222 ) //:SRC:x_1
  613.                 ,   INI_REC_VP1_y_0 : ( 0 - 3333 ) //:SRC:y_0
  614.                 ,   INI_REC_VP1_y_1 : ( 0 - 4444 ) //:SRC:y_1
  615.  
  616.                 ,   INI_REC_VP2_x_0 : ( 0 -   55 ) //:ZOOMER:x_0
  617.                 ,   INI_REC_VP2_x_1 : ( 0 -   66 ) //:ZOOMER:x_1
  618.                 ,   INI_REC_VP2_y_0 : ( 0 -   77 ) //:ZOOMER:y_0
  619.                 ,   INI_REC_VP2_y_1 : ( 0 -   88 ) //:ZOOMER:y_1
  620.  
  621.                 //://////////////////////////////////////////://
  622.             } //:////////////////////////////////////////////://
  623.         };;
  624.  
  625.         //://////////////////////////////////////////////////://
  626.         //: WRONG:                                           ://
  627.         //:         Make the "zoomer" (vp2) viewport snapped ://
  628.         //:         exactly to the "destination" (vp0)       ://
  629.         //:         viewport so that testbed shaders (tbs)   ://
  630.         //:         in edi_001 start at 1:1 zoom.            ://
  631.         //:                                                  ://
  632.         //: CORRECT:                                         ://
  633.         //:         Snap rec_vp2 (zoomer) onto rec_vpc (client).
  634.         //:         This is because rec_vp2 is a sub-sampler ://
  635.         //:         of the gl_FragCoord range that goes      ://
  636.         //:         over the client area.                    ://
  637.             GLO_DAT.INI_VAL.INI_REC_VP2_x_0 =(
  638.             GLO_DAT.INI_VAL.INI_REC_VPC_x_0   );;
  639.  
  640.             GLO_DAT.INI_VAL.INI_REC_VP2_x_1 =(
  641.             GLO_DAT.INI_VAL.INI_REC_VPC_x_1   );;  
  642.  
  643.             GLO_DAT.INI_VAL.INI_REC_VP2_y_0 =(
  644.             GLO_DAT.INI_VAL.INI_REC_VPC_y_0   );;  
  645.  
  646.             GLO_DAT.INI_VAL.INI_REC_VP2_y_1 =(
  647.             GLO_DAT.INI_VAL.INI_REC_VPC_y_1   );;  
  648.  
  649.            
  650.  
  651.  
  652.         //://////////////////////////////////////////////////://
  653.  
  654.         Object.seal( GLO_DAT );
  655.         return(      GLO_DAT );
  656.  
  657.     //://////////////////////////////////////////////////////://
  658.     };;function INI_GLO_FUN( ){  //://///////////////////////://
  659.     "use strict"                 //://///////////////////////://
  660.     //://////////////////////////////////////////////////////://
  661.  
  662.         var GLO_FUN ={ //:GLO_FUN:GLObal_FUNctions (container )
  663.             loop_table_tick         : AA2_LoopTableTick
  664.         ,   LOOP_TABLE_TICK_nat_win : AA2_LoopTableTick_nat_win
  665.         ,   LOOP_TABLE_TICK_gam_obj : AA2_LoopTableTick_gam_obj
  666.         ,   LOOP_TABLE_TICK_ren_log : AA2_LoopTableTick_ren_log
  667.         };;
  668.  
  669.         Object.seal( GLO_FUN );
  670.         return(      GLO_FUN );
  671.  
  672.     //://////////////////////////////////////////////////////://
  673.     };;function INI_GLO_CLA( ){  //://///////////////////////://
  674.     "use strict"                 //://///////////////////////://
  675.     //://////////////////////////////////////////////////////://
  676.  
  677.         //# Removed: VAR keyword from here so we can         #//
  678.         //#          reference "GLO_CLA" members during      #//
  679.         //#          initialization.                         #//
  680.         /**global:GLO_CLA**/
  681.         GLO_CLA={
  682.             ada_gra : NEW_ada_gra() //: ADApter_GRAphics
  683.    
  684.             //:tau_001 or any tau_### instance should be
  685.             //:created AFTER [ ada_gra ] because it borrows
  686.             //:u32_pix container pointers from ada_gra.
  687.         ,   tau_001 : NEW_tau_con() //: TextureAsUniformCTRL
  688.  
  689.             //:ada_var should come AFTER [ tau_001 | tau_### ]
  690.             //:and AFTER [ ada_gra ] because this adapter
  691.             //:will reference EITHER of these objects when
  692.             //:implementing its "Get_VarNam" and "Put_VarNam"
  693.             //:functions. ( Generally: "Get_*" and "Put_*"
  694.         ,   ada_var : NEW_ada_var() //: ADApater_VARiables
  695.  
  696.                 //:SESESESESESESESESESESESESESESESESESESESESE|//
  697.                 //|Sub editors dont know about edi_all,but   |//
  698.                 //|edi_all knows about sub editors. Thus,sub |//
  699.                 //|editors should be created BEFORE edi_all  |//
  700.                 //|to maintain correct initialization order. |//
  701.                 //:SESESESESESESESESESESESESESESESESESESESESE://
  702.                
  703.                 ,   edi_001 : NEW_edi_001()  
  704.                 ,   edi_002 : NEW_edi_002()
  705.  
  706.                 //:------------------------------------------://
  707.                 //: Rather than having null slots for editors
  708.                 //: that do not exist, we will put placeholder
  709.                 //: editors of "AA2_EditorBaseClass":
  710.                 //:------------------------------------------://
  711.                 ,   edi_003 : NEW_edi_bas() //:EditorBaseClass
  712.                 ,   edi_004 : NEW_edi_bas() //:EditorBaseClass
  713.                 ,   edi_005 : NEW_edi_bas() //:EditorBaseClass
  714.                 ,   edi_006 : NEW_edi_bas() //:EditorBaseClass
  715.                 ,   edi_007 : NEW_edi_bas() //:EditorBaseClass
  716.                 ,   edi_008 : NEW_edi_bas() //:EditorBaseClass
  717.                 ,   edi_009 : NEW_edi_bas() //:EditorBaseClass
  718.                 //:------------------------------------------://
  719.                
  720.                 //:SESESESESESESESESESESESESESESESESESESESESE://
  721.                 //:Now Init [Main/Master] Editor (Editor_All)://
  722.                 //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
  723.  
  724.                 ,   edi_all : null //:NEW_edi_all()
  725.  
  726.                 //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
  727.         };;Object.seal( GLO_CLA );
  728.  
  729.         //:Configure tau_001:
  730.         //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
  731.  
  732.         GLO_CLA.tau_001.Put_VarNam( "tau_001" );    
  733.         GLO_CLA.tau_001.BorrowPointerAsWeakReference_u32_pix(
  734.             GLO_CLA.ada_gra.mam_mem //:MasterMemory
  735.          //: TYPE_OF( mam_mem ) === "uni_pix"
  736.         );;
  737.         GLO_CLA.tau_001.Put_RecBou(
  738.         /**/    GLO_CFG.TAU_001_x0 //:TOP_LEF
  739.         ,       GLO_CFG.TAU_001_y0 //:TOP_LEF
  740.                
  741.         ,       GLO_CFG.TAU_001_x1 //:BOT_RIG
  742.         ,       GLO_CFG.TAU_001_y1 //:BOT_RIG
  743.  
  744.         );;
  745.         //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
  746.  
  747.         function ALREADY_SET( obj_any ){
  748.  
  749.             if( ! obj_any ){
  750.                 throw("[INPUT_OBJECT_WAS_NULL]");
  751.             };;
  752.  
  753.             return( obj_any );
  754.  
  755.         };;
  756.  
  757.         //:Because some classes may access other classes
  758.         //:via the GLO_CLA container during initialization.
  759.         //:Any spaghetti code access like that requires
  760.         //:initilization of members outside of the  
  761.         //:GLO_CLA declaration. Lets not go overkill and
  762.         //:only do it for specific parts to fix dependency
  763.         //:loop errors.
  764.         //://////////////////////////////////////////////////://
  765.         GLO_CLA.ada_gra = ALREADY_SET( GLO_CLA.ada_gra );
  766.         GLO_CLA.tau_001 = ALREADY_SET( GLO_CLA.tau_001 );
  767.         GLO_CLA.ada_var = ALREADY_SET( GLO_CLA.ada_var );
  768.  
  769.         GLO_CLA.edi_001 = ALREADY_SET( GLO_CLA.edi_001 );
  770.         GLO_CLA.edi_002 = ALREADY_SET( GLO_CLA.edi_002 );
  771.         GLO_CLA.edi_003 = ALREADY_SET( GLO_CLA.edi_003 );
  772.         GLO_CLA.edi_004 = ALREADY_SET( GLO_CLA.edi_004 );
  773.         GLO_CLA.edi_005 = ALREADY_SET( GLO_CLA.edi_005 );
  774.         GLO_CLA.edi_006 = ALREADY_SET( GLO_CLA.edi_006 );
  775.         GLO_CLA.edi_007 = ALREADY_SET( GLO_CLA.edi_007 );
  776.         GLO_CLA.edi_008 = ALREADY_SET( GLO_CLA.edi_008 );
  777.         GLO_CLA.edi_009 = ALREADY_SET( GLO_CLA.edi_009 );
  778.  
  779.         //:Needs to reference [ edi_001 - edi_009 - edi_### ]
  780.         //:For initialization, so must be created here:
  781.         GLO_CLA.edi_all = NEW_edi_all();
  782.  
  783.         //://////////////////////////////////////////////////://
  784.    
  785.         return(      GLO_CLA );
  786.  
  787.     };; //://////////////////////////////////////////////////://
  788.     //://////////////////////////////////////////////////////://
  789.  
  790. //:GIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGI:SC[JSGW_BODY]://
  791. //:GI:Global_Initialization:(ABOVE):-------------------------://
  792.  
  793.  
  794. //:AG:Adapter:Graphics:(BELOW):------------------------------://
  795. //:AGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAG://
  796. function NEW_ada_gra(){ //://////////////////////////////////://
  797. "use strict"
  798.  
  799.     //:C:Constant_Like_Setup:
  800.     //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  801.     //:This code was moved from the INI_GLO_DAT(...) function.
  802.     //:Because I thought the information here was too
  803.     //:specific to belong in the global data section.
  804.     //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  805.     //:ada_gra:Adapter_Graphics:
  806.     var ada_gra ={
  807.  
  808.         con_gra : null //:AKA[ gl | con_gra | ogl_ctx | ctx_ogl ]
  809.     ,   iso_mem : null
  810.     ,   mam_mem : null
  811.    
  812.         //:BootStrapping_Uniforms:
  813.         //:These_lay_the_foundational_structure_of_engine:
  814.         //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS://
  815.     ,   has_mem : null //: [ uni_u32 / NEW_uni_u32() ]   01  ://
  816.     ,   ren_mod : null //: [ uni_u32 / NEW_uni_u32() ]   02  ://
  817.     ,   edi_mod : null //: [ uni_u32 / NEW_uni_u32() ]   03  ://
  818.     ,   gam_tim : null //: [ uni_u32 / NEW_uni_u32() ]   04  ://
  819.     ,   dex_hot : null //: [ uni_u32 / NEW_uni_u32() ]   05  ://
  820.         //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS://
  821.  
  822.     ,   gpuvcon : null //: GPU_VARIABLE_CONTROLLER
  823.  
  824.     ,   all_pro : null //: OurMainWebGLProgramObject
  825.     ,   ver_pro : null //: <--SEE[ PWU_AFC ]
  826.     ,   fra_pro : null //: <--SEE[ PWU_AFC ]
  827.  
  828.     ,   can_htm : null //:<-- html5 canvas object.
  829.  
  830.     //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
  831.     //| #PIXEFOG# ------------------------------------------ |//
  832.     //|                                                      |//
  833.     //| rec_inc: RECtangle(s)INClusive:                      |//
  834.     //|          Thought about putting these in GLO_DAT      |//
  835.     //|          but the likelyhood that a function which    |//
  836.     //|          takes "ada_gra" also needs one of these     |//
  837.     //|          rectangles is very high.                    |//
  838.     //- rec_vpc : null //:<--AlwaysSizeOfCanvas.             -//
  839.     //- rec_vp0 : null //:<--[  DEST / SCREEN   ] viewport.  -//
  840.     //- rec_vp1 : null //:<--[  SRC / OFFSCREEN ] viewport.  -//
  841.     //|______________________________________________________|//
  842.  
  843.     };;Object.seal( ada_gra );
  844.  
  845.         //:VR:Viewport_Rectangles:(BELOW):-------------------://
  846.         //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://
  847.         { //:BLOCK_SCOPE
  848.            
  849.         //[¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯]//
  850.         //[ #PIXEFOG#: Relevant Parts Moved To:              ]//
  851.         //[                                                  ]//
  852.         //[            INI_GLO_002(...)                      ]//
  853.         //[                                                  ]//
  854.         //- ada_gra.rec_vpc = NEW_rec_inc(); //:CLIENT       -//
  855.         //- ada_gra.rec_vp0 = NEW_rec_inc(); //:DEST         -//
  856.         //- ada_gra.rec_vp1 = NEW_rec_inc(); //:SOURCE       -//
  857.         //-                                                  -//
  858.         //- let I_V = ( GLO_DAT.INI_VAL ); /** var I_V **/   -//
  859.         //-                                                  -//
  860.         //- ada_gra.rec_vpc.x_0 = ( I_V.INI_REC_VPC_x_0 );   -//
  861.         //- ada_gra.rec_vpc.x_1 = ( I_V.INI_REC_VPC_x_1 );   -//
  862.         //- ada_gra.rec_vpc.y_0 = ( I_V.INI_REC_VPC_y_0 );   -//
  863.         //- ada_gra.rec_vpc.y_1 = ( I_V.INI_REC_VPC_y_1 );   -//
  864.         //-                                                  -//
  865.         //- ada_gra.rec_vp0.x_0 = ( I_V.INI_REC_VP0_x_0 );   -//
  866.         //- ada_gra.rec_vp0.x_1 = ( I_V.INI_REC_VP0_x_1 );   -//
  867.         //- ada_gra.rec_vp0.y_0 = ( I_V.INI_REC_VP0_y_0 );   -//
  868.         //- ada_gra.rec_vp0.y_1 = ( I_V.INI_REC_VP0_y_1 );   -//
  869.         //-                                                  -//
  870.         //- ada_gra.rec_vp1.x_0 = ( I_V.INI_REC_VP1_x_0 );   -//
  871.         //- ada_gra.rec_vp1.x_1 = ( I_V.INI_REC_VP1_x_1 );   -//
  872.         //- ada_gra.rec_vp1.y_0 = ( I_V.INI_REC_VP1_y_0 );   -//
  873.         //- ada_gra.rec_vp1.y_1 = ( I_V.INI_REC_VP1_y_1 );   -//
  874.         //[__________________________________________________]//
  875.  
  876.         } //:BLOCK_SCOPE
  877.         //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://
  878.  
  879.         //:Assert that value is positive:
  880.         function A( val ){
  881.  
  882.             //:If value is valid, return it:
  883.             if( val > 0 ){
  884.                 return( val );
  885.             };;
  886.  
  887.             //:If value is invalid, crash the program:
  888.             if(!val > 0 ){
  889.                 console.log("[suspect:val]:",val);
  890.                 var          err_npv = "[NOT_POSITIVE_VALUE]";
  891.                 console.log( err_npv );
  892.                 throw(       err_npv );
  893.             };;
  894.             throw("[EDCL]");
  895.             return( 0 - 666 );
  896.         };;
  897.  
  898.         //:UP:uni_pix:---------------------------------------://
  899.         //:Create_Texture_Containers( uni_pix ):-------------://
  900.         //:UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP://
  901.         var ISO_MEM =( NEW_uni_pix() );
  902.         var MAM_MEM =( NEW_uni_pix() );
  903.  
  904.         ISO_MEM.tex_han = (0 - 333 ) ; //: ISO_MEM.tex_han
  905.         ISO_MEM.tex_lot =  1         ; //: ISO_MEM.tex_lot
  906.         ISO_MEM.pix_arr =  null      ;
  907.         ISO_MEM.pix_wid =A(GLO_DAT.INI_VAL.SAN_ISO) ; //: 512
  908.         ISO_MEM.pix_hig =A(GLO_DAT.INI_VAL.SAN_ISO) ; //: 512
  909.         ISO_MEM.pix_com =   4        ; //:ComponentsPerPixel
  910.         ISO_MEM.pix_nam = "iso_mem"  ;
  911.         ISO_MEM.sam_val = ( ISO_MEM.tex_lot );
  912.         ISO_MEM.sam_loc = ( 0 - (  901 )    );
  913.         ISO_MEM.has_loc = ( 0 - ( 1001 )    );
  914.  
  915.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  916.  
  917.         MAM_MEM.tex_han = (0 - 666 ) ; //: MAM_MEM.tex_han
  918.         MAM_MEM.tex_lot =  0         ; //: MAM_MEM.tex_lot
  919.         MAM_MEM.pix_arr =  null      ;
  920.         MAM_MEM.pix_wid =A(GLO_DAT.INI_VAL.SAN_MAM) ; //: 2048
  921.         MAM_MEM.pix_hig =A(GLO_DAT.INI_VAL.SAN_MAM) ; //: 2048
  922.         MAM_MEM.pix_com =   4        ; //:ComponentsPerPixel
  923.         MAM_MEM.pix_nam = "mam_mem"  ;
  924.         MAM_MEM.sam_val = ( MAM_MEM.tex_lot );
  925.         MAM_MEM.sam_loc = ( 0 - (  902 )    );
  926.         MAM_MEM.has_loc = ( 0 - ( 1002 )    );
  927.  
  928.         //:UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP://
  929.  
  930.           ISO_MEM.pix_arr = new Uint8Array( 1  
  931.         * ISO_MEM.pix_wid
  932.         * ISO_MEM.pix_hig
  933.         * ISO_MEM.pix_com
  934.         );;
  935.           MAM_MEM.pix_arr = new Uint8Array( 1  
  936.         * MAM_MEM.pix_wid
  937.         * MAM_MEM.pix_hig
  938.         * MAM_MEM.pix_com
  939.         );;
  940.  
  941.         ada_gra.iso_mem = ISO_MEM;
  942.         ada_gra.mam_mem = MAM_MEM;
  943.  
  944.     //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  945.  
  946.     //://///////////////////////////////////SC[ icogstep_01 ]://
  947.     var NL="\n"; //:NL=="newline"
  948.     var ver_src=(""/**ver:[ vertext /  vtx_src ]**/
  949.     +"    #version 300 es                                   "+NL
  950.     +"   precision highp float;                             "+NL
  951.  
  952.     //: When Moving From Previous WebGL to "300 es"
  953.     //: "attribute" becomes: "layout( location = # ) in ..."
  954.     +"    layout(location = 0) in vec2 ver_pos;             "+NL
  955.     +"    layout(location = 1) in vec3 ver_col;             "+NL
  956.  
  957.     +"    out   vec3 pix_ver; /**fragColor/fra_col_ver**/   "+NL
  958.  
  959.     +"    void main(){                                      "+NL
  960.     +"                                                      "+NL
  961.     +"        pix_ver     =     ( ver_col        );         "+NL
  962.     +"        gl_Position = vec4( ver_pos,0.0,1.0);         "+NL
  963.     +"                                                      "+NL
  964.     +"    }                                                 "+NL
  965.     );;
  966.  
  967.     //://////////////////////////////////////////////////////://
  968.  
  969. //|/////////////////////////:DIAGRAM[SC[DIA_TILTEX_ULTRA]]///|//
  970. //|                                                          |//
  971. //|     //[/////////////////:DIAGRAM[SC[DIA_TILTEX]]:]//     |//
  972. //|     //[                                          ]//     |//
  973. //|     //[ Working out logic using a 4x4 tilemap:   ]//     |//
  974. //|     //[                                          ]//     |//
  975. //|     //[ TILE[ 0 ]: ( 0 + 0.5 ) / 4 === 0.125     ]//     |//
  976. //|     //[ TILE[ 1 ]: ( 1 + 0.5 ) / 4 === 0.375     ]//     |//
  977. //|     //[ TILE[ 2 ]: ( 2 + 0.5 ) / 4 === 0.625     ]//     |//
  978. //|     //[ TILE[ 3 ]: ( 3 + 0.5 ) / 4 === 0.875     ]//     |//
  979. //|     //[                                          ]//     |//
  980. //|     //[ |<----- 4 pixels / texels ----->|        ]//     |//
  981. //|     //[ +---+---+---+---+---+---+---+---+        ]//     |//
  982. //|     //[ |       |       |       |       |        ]//     |//
  983. //|     //[ +   0   +   1   +   2   +   3   + <<<<<  ]//     |//
  984. //|     //[ |       |       |       |       |    ^^  ]//     |//
  985. //|     //[ +---+---+---+---+---+---+---+---+    ^^  ]//     |//
  986. //|     //[ ^   ^  .25  ^  0.5  ^  .75  ^   ^    ^^  ]//     |//
  987. //|     //[ |   |       |       |       |   |    ^^  ]//     |//
  988. //|     //[ | 0.125   0.375   0.625   0.875 |    ^^  ]//     |//
  989. //|     //[ |                               |    ^^  ]//     |//
  990. //|     //[ 0<--WEBGL_MAPPED_RANGE_0_TO_1-->1    ^^  ]//     |//
  991. //|     //[                                      ^^  ]//     |//
  992. //|     //[                [ TILE_COORDINATES >>>^^] ]//     |//
  993. //|     //[                (If each pixel encodes  ) ]//     |//
  994. //|     //[                (a tile value on tilemap) ]//     |//
  995. //|     //[                                          ]//     |//
  996. //|     //[/////////////////:DIAGRAM[SC[DIA_TILTEX]]:]//     |//
  997. //|                                                          |//
  998. //|    Solving in a more detailed manner yeilds a more       |//
  999. //|    complex formula... But the results are almost         |//
  1000. //|    identical. And identical enough for what I need.      |//
  1001. //|                                                          |//
  1002. //|    +---+---+---+---+---+---+                             |//
  1003. //|    |       |       |       |                             |//
  1004. //|    +   0   +   1   +   2   +                             |//
  1005. //|    |       |       |       |                             |//
  1006. //|    +---+---+---+---+---+---+                             |//
  1007. //|    ^ ~.16~    0.5     .83  ^                             |//
  1008. //|    |                       |                             |//
  1009. //|    |                       |                             |//
  1010. //|    |                       |                             |//
  1011. //|    0<-------- 0-1 -------->1                             |//
  1012. //|                                                          |//
  1013. //|    1: Figure how many half segments there are:           |//
  1014. //|       var num_seg = ( wid * 2 );                         |//
  1015. //|                                                          |//
  1016. //|    2: Get the length of a single half segment            |//
  1017. //|       as portion of normalized length:                   |//
  1018. //|        var nom_seg = ( 1 / num_seg );                    |//
  1019. //|                                                          |//
  1020. //|    3: First pixel center is one nom_seg from zero.       |//
  1021. //|       Each succesive coordinate is 2 more nom_seg.       |//
  1022. //|                                                          |//
  1023. //|    //:til_cor: Tile Coordinate                           |//
  1024. //|    //:til_tex: Tile texture/normalized position.         |//
  1025. //|    til_tex = (nom_seg*1) + ( til_cor * ( nom_seg * 2 ) ) |//
  1026. //|                                                          |//
  1027. //|    ((1/(wid*2))*1)+(til*((1/(wid*2))*2))                 |//
  1028. //|    //:::wid:::::::::til::::::wid::::::::                 |//
  1029. //|                                                          |//
  1030. //|                                                          |//
  1031. //|    wid:3 til:0  ((1/( 3 *2))*1)+( 0 *((1/( 3 *2))*2))    |//
  1032. //|    wid:3 til:1  ((1/( 3 *2))*1)+( 1 *((1/( 3 *2))*2))    |//
  1033. //|    wid:3 til:2  ((1/( 3 *2))*1)+( 2 *((1/( 3 *2))*2))    |//
  1034. //|                                                          |//
  1035. //|    [ FORMULA:01 / fom_001 ]                              |//
  1036. //|    ((1/(wid*2))*1)+(til*((1/(wid*2))*2))                 |//
  1037. //|                                                          |//
  1038. //|    [ FORMULA:02 / fom_002 ]                              |//
  1039. //|    ( til + 0.5 ) / ( wid + 0 /** DONT_ADD_ONE **/ )      |//
  1040. //|                                                          |//
  1041. //|                                                          |//
  1042. //|/////////////////////////:DIAGRAM[SC[DIA_TILTEX_ULTRA]]///|//
  1043.  
  1044.  
  1045. //:Ripped from M128.JS library to figure out the
  1046. //:code needed to get access to integer textures.
  1047. let N = "\n";
  1048. var its_a_string =("#version 300 es                     "//[F]//
  1049. +N+"//::1234____1234____1234 ____1234 ____1234 ____1234:"//[F]//                                        
  1050. +N+"    //:Version '300 es' gives you access to      ://"//[F]//
  1051. +N+"    //:the 'usampler2D' (uint sampler2D)         ://"//[F]//
  1052. +N+"    //:ALSO: Make sure context is webgl2 (TWO)   ://"//[F]//
  1053. +N+"    //:AKA: can.getContext('webgl2')             ://"//[F]//
  1054. +N+"    //:------------------------------------------://"//[F]//
  1055. +N+"    //: Must declare precision before            ://"//[F]//
  1056. +N+"    //: declaring any uniforms                   ://"//[F]//
  1057. +N+"    //://////////////////////////////////////////://"//[F]//
  1058. +N+"    #ifdef GL_FRAGMENT_PRECISION_HIGH               "//[F]//
  1059. +N+"        precision highp float;                      "//[F]//
  1060. +N+"        precision highp int;                        "//[F]//
  1061. +N+"    #else                                           "//[F]//
  1062. +N+"        precision mediump float;                    "//[F]//
  1063. +N+"        precision mediump int;                      "//[F]//
  1064. +N+"    #endif                                          "//[F]//
  1065. +N+"    //://////////////////////////////////////////://"//[F]//
  1066. +N+"    //: Pretty sure sampler precision must       ://"//[F]//
  1067. +N+"    //: always be high. Otherwise we will corrupt://"//[F]//
  1068. +N+"    //: our bit-packing patterns that are stored ://"//[F]//
  1069. +N+"    //: in each pixel.                           ://"//[F]//
  1070. +N+"    precision highp usampler2D;//:- - - - - - - -://"//[F]//
  1071. +N+"    //://////////////////////////////////////////://"//[F]//
  1072. +N+"    //:   JavaScript's inclusive rectangle type. ://"//[F]//
  1073. +N+"    //:   Though the coordinates here should be  ://"//[F]//
  1074. +N+"    //:   INTEGER/WHOLE we define as float       ://"//[F]//
  1075. +N+"    //:   to make the math easier. Specificaly   ://"//[F]//
  1076. +N+"    //:   less explicit casts needed in our      ://"//[F]//
  1077. +N+"    //:   shader code.                           ://"//[F]//
  1078. +N+"    struct REC_INC{ //:////////////:[glsl_struct]://"//[F]//
  1079. +N+"                                                    "//[F]//
  1080. +N+"        float x_0; //:#WHO_NUM_INC#:LEF:X           "//[F]//
  1081. +N+"        float x_1; //:#WHO_NUM_INC#:RIG:X           "//[F]//
  1082. +N+"        float y_0; //:#WHO_NUM_INC#:TOP:Y           "//[F]//
  1083. +N+"        float y_1; //:#WHO_NUM_INC#:BOT:Y           "//[F]//
  1084. +N+"                                                    "//[F]//
  1085. +N+"    };//://////////////////////////:[glsl_struct]://"//[F]//
  1086. +N+"                                                    "//[F]//
  1087. +N+"    //:IO:Input_Output_variables:(BELOW):--------://"//[F]//
  1088. +N+"    //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://"//[F]//
  1089. +N+"    //:                                          ://"//[F]//
  1090. +N+"    //:  Old webgl uses [varying] instead of     ://"//[F]//
  1091. +N+"    //:                 [in] or [out].           ://"//[F]//
  1092. +N+"    //:                                          ://"//[F]//
  1093. +N+"    //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://"//[F]//
  1094. +N+"                                                    "//[F]//
  1095. +N+"        //:**************************************://"//[F]//
  1096. +N+"        //: Mapped red to x axis and green to y: ://"//[F]//
  1097. +N+"        //: THUS: s == x == red                  ://"//[F]//
  1098. +N+"        //:       t == y == green                ://"//[F]//
  1099. +N+"        //: (pix_ver == texcoord == fra_col_ver) ://"//[F]//
  1100. +N+"            in   vec3 pix_ver; //:- - - - - - - -://"//[F]//
  1101. +N+"        //:**************************************://"//[F]//
  1102. +N+"                                                    "//[F]//
  1103. +N+"        //:Not allowed in webgl2 (AKA: ESSL )       "//[F]//
  1104. +N+"        //--layout( origin_upper_left )[in|out] --//"//[F]//
  1105. +N+"                                                    "//[F]//
  1106. +N+"            out  vec4 pix_fra; /** fra_col_fra **/  "//[F]//
  1107. +N+"    //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://"//[F]//
  1108. +N+"    //:                                          ://"//[F]//
  1109. +N+"    //:mam_mem: MASTER_MEMORY: (2048*2048)       ://"//[F]//
  1110. +N+"    //:mam_mem: MASTER_MEMORY: [512*4]x[512*4]   ://"//[F]//
  1111. +N+"    //:                                          ://"//[F]//
  1112. +N+"    //:   Stores NINE(9) 512x512 level maps      ://"//[F]//
  1113. +N+"    //:   and TWO(2) transitional level maps.    ://"//[F]//
  1114. +N+"    //:   ( MAPS:Vertical and horizontal )       ://"//[F]//
  1115. +N+"    //:   And some other 512x512 data that       ://"//[F]//
  1116. +N+"    //:   I have not decided on yet.             ://"//[F]//
  1117. +N+"    //:                                          ://"//[F]//
  1118. +N+"    //:iso_mem: Isolated_Memory: 512x512 for     ://"//[F]//
  1119. +N+"    //:                                          ://"//[F]//
  1120. +N+"    //:   whatever the fuck you [want/need].     ://"//[F]//
  1121. +N+"    //:   For example, could just be a           ://"//[F]//
  1122. +N+"    //:   scratchpad if the edi_mod value is     ://"//[F]//
  1123. +N+"    //:   flagged with a value indicating        ://"//[F]//
  1124. +N+"    //:   scratchpad behavior on data.           ://"//[F]//
  1125. +N+"    //:- - - - - - - - - - -- - - - - - - - - - -://"//[F]//
  1126. +N+"    uniform uint       has_mem ; //:TexureLoaded?://"//[F]//
  1127. +N+"    uniform uint       ren_mod ; //:Render_Mode  ://"//[F]//
  1128. +N+"    uniform uint       edi_mod ; //:Editor_Mode  ://"//[F]//
  1129. +N+"    uniform uint       gam_tim ; //:Game___Time  ://"//[F]//
  1130. +N+"    uniform uint       dex_hot ; //:HotSwapIndex ://"//[F]//
  1131. +N+"    //:- - - - - - - - - - -- - - - - - - - - - -://"//[F]//
  1132. +N+"    uniform usampler2D iso_mem ; //:Whatever__Mem://"//[F]//
  1133. +N+"    uniform usampler2D mam_mem ; //:Main_Mem_2048://"//[F]//
  1134. //://////////////////////////////////////////////////////////://
  1135.  
  1136. //[//////////////////////////////////////////////////////////]//
  1137. //[--]////|//////////////////////////////////////////|////[--]//
  1138. //[--]////| To_Josh:                                 |////[--]//
  1139. //[--]////|                                          |////[--]//
  1140. //[--]////|Because I am writing this all in one file,|////[--]//
  1141. //[--]////|it makes it easy to [ embedd/hardcode ]   |////[--]//
  1142. //[--]////|values written in the JavaScript into the |////[--]//
  1143. //[--]////|GLSL shader code. This is nice because the|////[--]//
  1144. //[--]////|game engine code in JavaScript will need  |////[--]//
  1145. //[--]////|to synchronize and communicate with the   |////[--]//
  1146. //[--]////|GLSL shader (rendering) code.             |////[--]//
  1147. //[--]////|                                          |////[--]//
  1148. //[--]////|     JAVASCRIPT:                          |////[--]//
  1149. //[--]////|                                          |////[--]//
  1150. //[--]////|         +N+" #define SAN_MAM (     "     |////[--]//
  1151. //[--]////|         +    GLO_CFG.SAN_MAM + ")\n"     |////[--]//
  1152. //[--]////|                                          |////[--]//
  1153. //[--]////|         +N+" #define SAN_ISO (     "     |////[--]//
  1154. //[--]////|         +    GLO_CFG.SAN_ISO + ")\n"     |////[--]//
  1155. //[--]////|                                          |////[--]//
  1156. //[--]////|                                          |////[--]//
  1157. //[--]////|     RESULTING:GLSL:                      |////[--]//
  1158. //[--]////|                                          |////[--]//
  1159. //[--]////|         #define SAN_MAM ( 2048 )         |////[--]//
  1160. //[--]////|         #define SAN_ISO (  512 )         |////[--]//
  1161. //[--]////|                                          |////[--]//
  1162. //[--]////|//////////////////////////////////////////|////[--]//
  1163. //[//////////////////////////////////////////////////////////]//
  1164.                                              
  1165.     //:Defines for texture sizes.________________:////|MEMORY|//
  1166.     //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS:////|MEMORY|//
  1167.                                                     //|MEMORY|//
  1168.     +N+" #define SAN_MAM (     "                    //|MEMORY|//
  1169.     +    GLO_CFG.SAN_MAM + ")\n"                    //|MEMORY|//
  1170.                                                     //|MEMORY|//
  1171.     +N+" #define SAN_ISO (     "                    //|MEMORY|//
  1172.     +    GLO_CFG.SAN_ISO + ")\n"                    //|MEMORY|//
  1173.                                                     //|MEMORY|//
  1174.     //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS:////|MEMORY|//
  1175.                                                     //|MEMORY|//
  1176.     //:Hotswapping_and_MemoryCells:______________:////|MEMORY|//
  1177.     //:HMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHM:////|MEMORY|//
  1178.     //:hot_swapping_indexes_range:::::::::::::::::////|MEMORY|//
  1179.                                                     //|MEMORY|//
  1180.     +N+" #define DEX_HOT_MIN (     "                //|MEMORY|//
  1181.     +    GLO_CFG.DEX_HOT_MIN + ")\n"                //|MEMORY|//
  1182.                                                     //|MEMORY|//
  1183.     +N+" #define DEX_HOT_MAX (     "                //|MEMORY|//
  1184.     +    GLO_CFG.DEX_HOT_MAX + ")\n"                //|MEMORY|//
  1185.                                                     //|MEMORY|//
  1186.                                                     //|MEMORY|//
  1187.                                                     //|MEMORY|//
  1188.     //:Memory_Cells: ( MEC_DEX === DEX_HOT - 1 )::////|MEMORY|//
  1189.     //:SAN_ISO sized sub-divisions of SAN_MAM:  ::////|MEMORY|//
  1190.                                                     //|MEMORY|//
  1191.     +N+" #define MEC_DEX_MIN (     "                //|MEMORY|//
  1192.     +    GLO_CFG.MEC_DEX_MIN + ")\n"                //|MEMORY|//
  1193.                                                     //|MEMORY|//
  1194.     +N+" #define MEC_DEX_MAX (     "                //|MEMORY|//
  1195.     +    GLO_CFG.MEC_DEX_MAX + ")\n"                //|MEMORY|//
  1196.                                                     //|MEMORY|//
  1197.                                                     //|MEMORY|//
  1198.                                                     //|MEMORY|//
  1199.     //:HMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHM:////|MEMORY|//
  1200.                                                     //[------]//
  1201.                                                     //|TAU_01|//
  1202.                                                     //|TAU_01|//
  1203.     //: TAU_001_* : Texture_As_Uniforms:Block#001:////|TAU_01|//
  1204.                                                     //|TAU_01|//
  1205.     +N+" #define TAU_001_x0        ("               //|TAU_01|//
  1206.     +    GLO_CFG.TAU_001_x0   + ")\n"               //|TAU_01|//
  1207.                                                     //|TAU_01|//
  1208.     +N+" #define TAU_001_x1        ("               //|TAU_01|//
  1209.     +    GLO_CFG.TAU_001_x1   + ")\n"               //|TAU_01|//
  1210.                                                     //|TAU_01|//
  1211.     +N+" #define TAU_001_y0        ("               //|TAU_01|//
  1212.     +    GLO_CFG.TAU_001_y0   + ")\n"               //|TAU_01|//
  1213.                                                     //|TAU_01|//
  1214.     +N+" #define TAU_001_y1        ("               //|TAU_01|//
  1215.     +    GLO_CFG.TAU_001_y1   + ")\n"               //|TAU_01|//
  1216.                                                     //|TAU_01|//
  1217.     +N+" #define TAU_001_wid        "               //|TAU_01|//
  1218.     +  " (TAU_001_x1-TAU_001_x0+1)  "               //|TAU_01|//
  1219.     +N+" #define TAU_001_hig        "               //|TAU_01|//
  1220.     +  " (TAU_001_y1-TAU_001_y0+1)  "               //|TAU_01|//
  1221.                                                     //|TAU_01|//
  1222.     //:Index of the TestBedShader(tbs) that      :////|TAU_01|//
  1223.     //:editor#1 (edi_001) is displaying.         :////|TAU_01|//
  1224.     +N+" #define TAU_001_EDIT001_dex_sha       (   "//|TAU_01|//
  1225.     +    GLO_CFG.TAU_001_EDIT001_dex_sha   + ")\n  "//|TAU_01|//
  1226.                                                     //|TAU_01|//
  1227.     //:E2:Editor_02_vars:(BELOW):----------------:////|TAU_01|//
  1228.     //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2:////|TAU_01|//
  1229.     +N+" #define TAU_001_EDIT002_til_exp       (   "//|TAU_01|//
  1230.     +    GLO_CFG.TAU_001_EDIT002_til_exp   + ")\n  "//|TAU_01|//
  1231.                                                     //|TAU_01|//
  1232.     +N+" #define TAU_001_EDIT002_til_san       (   "//|TAU_01|//
  1233.     +    GLO_CFG.TAU_001_EDIT002_til_san   + ")\n  "//|TAU_01|//
  1234.                                                     //|TAU_01|//
  1235.     +N+" #define TAU_001_EDIT002_cam_t_x       (   "//|TAU_01|//
  1236.     +    GLO_CFG.TAU_001_EDIT002_cam_t_x   + ")\n  "//|TAU_01|//
  1237.                                                     //|TAU_01|//
  1238.     +N+" #define TAU_001_EDIT002_cam_t_y       (   "//|TAU_01|//
  1239.     +    GLO_CFG.TAU_001_EDIT002_cam_t_y   + ")\n  "//|TAU_01|//
  1240.                                                     //|TAU_01|//
  1241.     +N+" #define TAU_001_EDIT002_dex_hot       (   "//|TAU_01|//
  1242.     +    GLO_CFG.TAU_001_EDIT002_dex_hot   + ")\n  "//|TAU_01|//
  1243.                                                     //|TAU_01|//
  1244.     +N+" #define TAU_001_EDIT002_use_hyp       (   "//|TAU_01|//
  1245.     +    GLO_CFG.TAU_001_EDIT002_use_hyp   + ")\n  "//|TAU_01|//
  1246.     //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2:////|TAU_01|//
  1247.     //:E2:Editor_02_vars:(ABOVE):----------------:////|TAU_01|//
  1248.                                                     //|TAU_01|//
  1249.     //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR:////|TAU_01|//
  1250.     //:VR:Viewport_Rectangles:                   :////|TAU_01|//
  1251.     //:   Where datapoints exist on texture:     :////|TAU_01|//
  1252.     //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR:////|TAU_01|//
  1253.                                                     //|TAU_01|//
  1254.     //:rec_vpc:__________________________________:////|TAU_01|//
  1255.     +N+" #define TAU_001_GLOBVAR_rec_vpc_x_0    (  "//|TAU_01|//
  1256.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_0+ ")   "//|TAU_01|//
  1257.     +N+" #define TAU_001_GLOBVAR_rec_vpc_x_1    (  "//|TAU_01|//
  1258.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_1+ ")   "//|TAU_01|//
  1259.     +N+" #define TAU_001_GLOBVAR_rec_vpc_y_0    (  "//|TAU_01|//
  1260.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_0+ ")   "//|TAU_01|//
  1261.     +N+" #define TAU_001_GLOBVAR_rec_vpc_y_1    (  "//|TAU_01|//
  1262.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_1+ ")   "//|TAU_01|//
  1263.                                                     //|TAU_01|//
  1264.     //:rec_vp0:__________________________________:////|TAU_01|//
  1265.     +N+" #define TAU_001_GLOBVAR_rec_vp0_x_0    (  "//|TAU_01|//
  1266.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_0+ ")   "//|TAU_01|//
  1267.     +N+" #define TAU_001_GLOBVAR_rec_vp0_x_1    (  "//|TAU_01|//
  1268.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_1+ ")   "//|TAU_01|//
  1269.     +N+" #define TAU_001_GLOBVAR_rec_vp0_y_0    (  "//|TAU_01|//
  1270.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_0+ ")   "//|TAU_01|//
  1271.     +N+" #define TAU_001_GLOBVAR_rec_vp0_y_1    (  "//|TAU_01|//
  1272.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_1+ ")   "//|TAU_01|//
  1273.                                                     //|TAU_01|//
  1274.     //:rec_vp1:__________________________________:////|TAU_01|//
  1275.     +N+" #define TAU_001_GLOBVAR_rec_vp1_x_0    (  "//|TAU_01|//
  1276.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_0+ ")   "//|TAU_01|//
  1277.     +N+" #define TAU_001_GLOBVAR_rec_vp1_x_1    (  "//|TAU_01|//
  1278.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_1+ ")   "//|TAU_01|//
  1279.     +N+" #define TAU_001_GLOBVAR_rec_vp1_y_0    (  "//|TAU_01|//
  1280.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_0+ ")   "//|TAU_01|//
  1281.     +N+" #define TAU_001_GLOBVAR_rec_vp1_y_1    (  "//|TAU_01|//
  1282.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_1+ ")   "//|TAU_01|//
  1283.                                                     //|TAU_01|//
  1284.     //:rec_vp2:__________________________________:////|TAU_01|//
  1285.     +N+" #define TAU_001_GLOBVAR_rec_vp2_x_0    (  "//|TAU_01|//
  1286.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_0+ ")   "//|TAU_01|//
  1287.     +N+" #define TAU_001_GLOBVAR_rec_vp2_x_1    (  "//|TAU_01|//
  1288.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_1+ ")   "//|TAU_01|//
  1289.     +N+" #define TAU_001_GLOBVAR_rec_vp2_y_0    (  "//|TAU_01|//
  1290.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_0+ ")   "//|TAU_01|//
  1291.     +N+" #define TAU_001_GLOBVAR_rec_vp2_y_1    (  "//|TAU_01|//
  1292.     +    GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_1+ ")   "//|TAU_01|//
  1293.     //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR:////|TAU_01|//
  1294. //://////////////////////////////////////////////////////////://                                                                
  1295. //://////////////////////////////////////////////////////////://
  1296.     +N+"                                                "//[F]//
  1297.     +N+"    //:M:ModulusFunctions:(BELOW):-----------://"//[F]//
  1298.     +N+"    //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://"//[F]//                          
  1299.     +N+"    uint mod_u32(                               "//[F]//
  1300.     +N+"        uint u32_bas                            "//[F]//
  1301.     +N+"    ,   uint u32_div                            "//[F]//
  1302.     +N+"    ){                                          "//[F]//
  1303.     +N+"                                                "//[F]//  
  1304.     +N+"        float   flt_res = mod(                  "//[F]//
  1305.     +N+"            float(u32_bas)                      "//[F]//
  1306.     +N+"        ,   float(u32_div)                      "//[F]//
  1307.     +N+"        );;                                     "//[F]//
  1308.     +N+"        uint    u32_res = uint( flt_res );      "//[F]//  
  1309.     +N+"        return( u32_res );                      "//[F]//  
  1310.     +N+"    }                                           "//[F]//
  1311.     +N+"                                                "//[F]//                                      
  1312.     +N+"    int mod_i32(                                "//[F]//
  1313.     +N+"        int i32_bas                             "//[F]//
  1314.     +N+"    ,   int i32_div                             "//[F]//
  1315.     +N+"    ){                                          "//[F]//
  1316.     +N+"                                                "//[F]//  
  1317.     +N+"        float   flt_res = mod(                  "//[F]//
  1318.     +N+"            float(i32_bas)                      "//[F]//
  1319.     +N+"        ,   float(i32_div)                      "//[F]//
  1320.     +N+"        );;                                     "//[F]//
  1321.     +N+"        int     i32_res = int( flt_res );       "//[F]//  
  1322.     +N+"        return( i32_res );                      "//[F]//  
  1323.     +N+"    }                                           "//[F]//
  1324.     +N+"    //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://"//[F]//
  1325.     +N+"    //:M:ModulusFunctions:(ABOVE):-----------://"//[F]//
  1326.                                                          //[F]//                    
  1327. +N+"//: SAMPLE[  TAU_001 ]USING[ POS ](Position-2D)     "//[F]//
  1328. +N+"uvec4 TAU_001_POS( int t_x, int t_y ){              "//[F]//
  1329. +N+"                                                    "//[F]//
  1330. +N+"    uvec4   out_rgb; //:OUTPUT_RGB                  "//[F]//
  1331. +N+"                                                    "//[F]//
  1332. +N+"    //:1: Convert coordinate in TAU_001             "//[F]//
  1333. +N+"    //:   FROM: TILE         coordinate             "//[F]//
  1334. +N+"    //:     TO: PIXEL_CENTER coordinate             "//[F]//
  1335. +N+"    //:2: NORMALIZE:Range[ 0.0 to 1.0 ]             "//[F]//
  1336. +N+"    float WID = float( SAN_MAM ); //:MasterMem:WID  "//[F]//
  1337. +N+"    float HIG = float( SAN_MAM ); //:MasterMem:HIG  "//[F]//
  1338. +N+"    vec2 u_v = vec2(                                "//[F]//
  1339. +N+"        ( float( t_x ) + 0.5 /**pix_cen**/ ) / WID  "//[F]//
  1340. +N+"    ,   ( float( t_y ) + 0.5 /**pix_cen**/ ) / HIG  "//[F]//
  1341. +N+"    );;                                             "//[F]//
  1342. +N+"                                                    "//[F]//                                
  1343. +N+"    if( 1 == 1                                      "//[F]//
  1344. +N+"        //:Inside bounds of sub-selection:          "//[F]//
  1345. +N+"    &&  t_x >= TAU_001_x0 && t_x <= TAU_001_x1      "//[F]//
  1346. +N+"    &&  t_y >= TAU_001_y0 && t_y <= TAU_001_y1      "//[F]//
  1347. +N+"                                                    "//[F]//
  1348. +N+"        //:Bounds of master memory  (MAM_MEM)       "//[F]//
  1349. +N+"    &&  t_x >= 0          && t_x <= (SAN_MAM-1)     "//[F]//
  1350. +N+"    &&  t_y >= 0          && t_y <= (SAN_MAM-1)     "//[F]//
  1351. +N+"                                                    "//[F]//
  1352. +N+"    ){                                              "//[F]//
  1353. +N+"        //:WITHIN_THE_BOUNDS_OF_EVERYTHING:         "//[F]//
  1354. +N+"        out_rgb = texture( mam_mem , u_v );         "//[F]//
  1355. +N+"                                                    "//[F]//
  1356. +N+"    }else{                                          "//[F]//
  1357. +N+"                                                    "//[F]//
  1358. +N+"    //:OW:Outofbounds_Where?:(BELOW):------------://"//[F]//
  1359. +N+"    //:OWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOW://"//[F]//
  1360. +N+"    //:which_regions_are_you_out_of_bounds_on?      "//[F]//
  1361. +N+"    //:OWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOW://"//[F]//
  1362. +N+"                                                    "//[F]//
  1363. +N+"    if( 0 == 0 //: OOB: TAU sub selection?          "//[F]//
  1364. +N+"    ||  (  t_x < TAU_001_x0 || t_x > TAU_001_x1  )  "//[F]//
  1365. +N+"    ||  (  t_y < TAU_001_y0 || t_y > TAU_001_y1  )  "//[F]//
  1366. +N+"                                                    "//[F]//
  1367. +N+"    &&  0 == 0 //: OOB: MAM_MEM texture region?     "//[F]//
  1368. +N+"    ||  (  t_x < 0          || t_x > (SAN_MAM-1) )  "//[F]//
  1369. +N+"    ||  (  t_y < 0          || t_y > (SAN_MAM-1) )  "//[F]//
  1370. +N+"    ){                                              "//[F]//
  1371. +N+"        //:OUT_OF_BOUNDS:ALL:                       "//[F]//
  1372. +N+"        out_rgb = uvec4(32,0+0,0+0,255); //:RED     "//[F]//
  1373. +N+"    }else                                           "//[F]//
  1374. +N+"    if( 0 == 0 //: OOB: TAU sub selection?          "//[F]//
  1375. +N+"    ||  (  t_x < TAU_001_x0 || t_x > TAU_001_x1  )  "//[F]//
  1376. +N+"    ||  (  t_y < TAU_001_y0 || t_y > TAU_001_y1  )  "//[F]//
  1377. +N+"    ){                                              "//[F]//
  1378. +N+"        //:OUT_OF_BOUNDS:REC:                       "//[F]//
  1379. +N+"        out_rgb = uvec4(0+0,32,0+0,255); //:GREEN   "//[F]//
  1380. +N+"    }else                                           "//[F]//
  1381. +N+"    if( 0 == 0 //: OOB: MAM_MEM texture region?     "//[F]//
  1382. +N+"    ||  (  t_x < 0          || t_x > (SAN_MAM-1) )  "//[F]//
  1383. +N+"    ||  (  t_y < 0          || t_y > (SAN_MAM-1) )  "//[F]//
  1384. +N+"    ){                                              "//[F]//
  1385. +N+"        //:OUT_OF_BOUNDS:MEM:                       "//[F]//
  1386. +N+"        out_rgb = uvec4(0+0,0+0,32,255); //:BLUE    "//[F]//
  1387. +N+"    };;                                             "//[F]//
  1388. +N+"                                                    "//[F]//
  1389. +N+"    //:OWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOW://"//[F]//
  1390. +N+"    //:OW:Outofbounds_Where?:(ABOVE):------------://"//[F]//
  1391. +N+"    };;                                             "//[F]//
  1392. +N+"                                                    "//[F]//
  1393. +N+"    return( out_rgb );                              "//[F]//
  1394. +N+"}//[FN]//                                           "//[F]//
  1395. //://////////////////////////////////////////////////////////://                                  
  1396. +N+"//:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://"//[DEX]//
  1397. +N+"//: SAMPLE[  TAU_001 ]USING[ DEX ](Index-1D)      "//[DEX]//
  1398. +N+"//: TAU: Texture_As_Uniform                       "//[DEX]//
  1399. +N+"//: TAU[ Faux_Uniform_Via_Texture_Mapped_Pixel ]  "//[DEX]//
  1400. +N+"//: AKA[ TAU_001 | uniformfetch_TAU_001 ]         "//[DEX]//
  1401. +N+"uvec4 TAU_001_DEX( int tau_dex ){                 "//[DEX]//
  1402. +N+"                                                  "//[DEX]//
  1403. +N+"    uvec4   out_rgb; //:OUTPUT_RGB                "//[DEX]//
  1404. +N+"                                                  "//[DEX]//
  1405. +N+"    #define WID ( TAU_001_wid ) //:////////////://"//[DEX]//
  1406. +N+"                                                  "//[DEX]//
  1407. +N+"    int l_x  =  mod_i32( tau_dex     , WID );     "//[DEX]//
  1408. +N+"    int l_y  =  (       (tau_dex-l_x)/ WID );     "//[DEX]//
  1409. +N+"    int t_x  =( l_x + TAU_001_x0 );               "//[DEX]//
  1410. +N+"    int t_y  =( l_y + TAU_001_y0 );               "//[DEX]//
  1411. +N+"                                                  "//[DEX]//
  1412. +N+"    out_rgb = TAU_001_POS( t_x, t_y );            "//[DEX]//
  1413. +N+"                                                  "//[DEX]//
  1414. +N+"    #undef  WID //:////////////////////////////://"//[DEX]//
  1415. +N+"                                                  "//[DEX]//
  1416. +N+"    return( out_rgb );                            "//[DEX]//
  1417. +N+"}                                                 "//[DEX]//
  1418. +N+"                                                  "//[DEX]//
  1419. +N+"//:Get encoded value as original uint32 value:    "//|U32|//
  1420. +N+"uint TAU_001_U32( int tau_dex ){                  "//|U32|//
  1421. +N+"                                                  "//|U32|//
  1422. +N+"    uvec4 tau_vec = TAU_001_DEX( tau_dex );       "//|U32|//
  1423. +N+"    uint  tau_u32 =uint( 0 );                     "//|U32|//
  1424. +N+"    tau_u32 |= ( uint(0)  //:RE_PACK_COMPONENTS:  "//|U32|//
  1425. +N+"    |  (tau_vec.x << 24)  //:RE_PACK_COMPONENTS:  "//|U32|//
  1426. +N+"    |  (tau_vec.y << 16)  //:RE_PACK_COMPONENTS:  "//|U32|//
  1427. +N+"    |  (tau_vec.z <<  8)  //:RE_PACK_COMPONENTS:  "//|U32|//
  1428. +N+"    |  (tau_vec.w <<  0)  //:RE_PACK_COMPONENTS:  "//|U32|//
  1429. +N+"    );;                   //:RE_PACK_COMPONENTS:  "//|U32|//
  1430. +N+"                                                  "//|U32|//
  1431. +N+"    return uint( tau_u32 );                       "//|U32|//
  1432. +N+"}//[fn]//                                         "//|U32|//
  1433. +N+"                                                  "//|U32|//                                    
  1434. +N+"uvec4 Get_Tex_iso_mem( //://///////////////////://"//[ISO]//
  1435. +N+"    int tilco_x                                   "//[ISO]//
  1436. +N+",   int tilco_y                                   "//[ISO]//
  1437. +N+"){                                                "//[ISO]//
  1438. +N+"                                                  "//[ISO]//
  1439. +N+"    float flt_wid = float( SAN_ISO /**512**/  );  "//[ISO]//
  1440. +N+"    float flt_hig = float( SAN_ISO /**512**/  );  "//[ISO]//
  1441. +N+"                                                  "//[ISO]//
  1442. +N+"    int int_wid = int(     SAN_ISO /**512**/  );  "//[ISO]//
  1443. +N+"    int int_hig = int(     SAN_ISO /**512**/  );  "//[ISO]//
  1444. +N+"                                                  "//[ISO]//
  1445. +N+"    vec2 u_v = vec2(                              "//[ISO]//
  1446. +N+"        ( float( tilco_x ) + 0.5 )                "//[ISO]//
  1447. +N+"             / ( flt_wid  -  0.0 )                "//[ISO]//
  1448. +N+"                                                  "//[ISO]//
  1449. +N+"    ,   ( float( tilco_y ) + 0.5 )                "//[ISO]//
  1450. +N+"             / ( flt_hig  -  0.0 )                "//[ISO]//
  1451. +N+"    );;                                           "//[ISO]//
  1452.  
  1453.  
  1454. ///// +N+"    vec2 u_v = vec2(                              "//[ISO]//
  1455. ///// +N+"        ( float( tilco_x )+  0.0 )                "//[ISO]//
  1456. ///// +N+"             / ( flt_wid  -  0.0 )+0.0              "//[ISO]//
  1457. ///// +N+"                                                  "//[ISO]//
  1458. ///// +N+"    ,   ( float( tilco_y )+  0.0 )                "//[ISO]//
  1459. ///// +N+"             / ( flt_hig  -  0.0 )+0.0               "//[ISO]//
  1460. ///// +N+"    );;                                           "//[ISO]//
  1461.  
  1462.  
  1463.  
  1464.  
  1465.  
  1466.  
  1467. +N+"                                                  "//[ISO]//
  1468. +N+"    uvec4   out_rgb;                              "//[ISO]//
  1469. +N+"                                                  "//[ISO]//
  1470. +N+"    if(                                           "//[ISO]//
  1471. +N+"    //: |<-------- iso_mem.wid -------->|         "//[ISO]//
  1472. +N+"        tilco_x >= 0 && tilco_x < int_wid         "//[ISO]//
  1473. +N+"    &&  tilco_y >= 0 && tilco_y < int_hig         "//[ISO]//
  1474. +N+"    //: |<-------- iso_mem.hig -------->|         "//[ISO]//
  1475. +N+"    ){  //:in_bounds_take_texture_sample_here:    "//[ISO]//
  1476. +N+"                                                  "//[ISO]//
  1477. +N+"        out_rgb = texture( iso_mem , u_v );       "//[ISO]//
  1478. +N+"                                                  "//[ISO]//
  1479. +N+"    }else{                                        "//[ISO]//
  1480. +N+"        //:make_checker_pattern_if_out_of_bounds: "//[ISO]//
  1481. +N+"                                                  "//[ISO]//
  1482. +N+"        //: o_e: Odd_Or_Even (1 or 0 output)      "//[ISO]//
  1483. +N+"        //: txy: Tile_X_Y                         "//[ISO]//
  1484. +N+"        int txy = ( tilco_x + tilco_y );          "//[ISO]//
  1485. +N+"        int o_e = int(   float( 0 )               "//[ISO]//
  1486. +N+"            +            float(txy)               "//[ISO]//
  1487. +N+"            -(2.0*floor( float(txy) / 2.0 ))      "//[ISO]//
  1488. +N+"        );;                                       "//[ISO]//
  1489. +N+"        int o_e_255 = o_e*255;                    "//[ISO]//
  1490. +N+"                                                  "//[ISO]//
  1491. +N+"        out_rgb = uvec4(                          "//[ISO]//
  1492. +N+"            o_e_255  //: RED                      "//[ISO]//
  1493. +N+"        ,   o_e_255  //: GREEN                    "//[ISO]//
  1494. +N+"        ,   o_e_255  //: BLUE                     "//[ISO]//
  1495. +N+"        ,       255  //: ALPHA                    "//[ISO]//
  1496. +N+"        );;                                       "//[ISO]//
  1497. +N+"    };;                                           "//[ISO]//
  1498. +N+"    return( out_rgb );                            "//[ISO]//
  1499. +N+"                                                  "//[ISO]//
  1500. +N+"} //:[ Get_Tex_iso_mem ]://////////////////////://"//[ISO]//
  1501. +N+"                                                  "//|ROT|//
  1502.  
  1503.  
  1504. +N+"uvec4 Get_Tex_iso_mem_rot( //://///////////////://"//|ROT|//
  1505. +N+"    int tilco_x                                   "//|ROT|//
  1506. +N+",   int tilco_y                                   "//|ROT|//
  1507. +N+"){                                                "//|ROT|//
  1508. +N+"                                                  "//|ROT|//
  1509. +N+"    float x1 = float(SAN_ISO) / 2.0; //:CENTER    "//|ROT|//
  1510. +N+"    float y1 = float(SAN_ISO) / 2.0; //:CENTER    "//|ROT|//
  1511. +N+"                                                  "//|ROT|//
  1512. +N+"    float x2 = float(  tilco_x  );                "//|ROT|//
  1513. +N+"    float y2 = float(  tilco_y  );                "//|ROT|//
  1514. +N+"                                                  "//|ROT|//
  1515. +N+"    float dx = x1-x2;                             "//|ROT|//
  1516. +N+"    float dy = y1-y2;                             "//|ROT|//
  1517. +N+"    float ar = atan( dy , dx );                   "//|ROT|//
  1518. +N+"                                                  "//|ROT|//
  1519. +N+"    float dxy = sqrt(                             "//|ROT|//
  1520. +N+"            pow(x1-x2 , 2.0)                      "//|ROT|//
  1521. +N+"          + pow(y1-y2 , 2.0)                      "//|ROT|//
  1522. +N+"    );;                                           "//|ROT|//
  1523. +N+"                                                  "//|ROT|//
  1524. +N+"    float f_t = float( gam_tim ) / 255.0;         "//|ROT|//
  1525. +N+"                                                  "//|ROT|//
  1526. +N+"    float f_x = x1 + cos( ar + f_t ) * dxy;       "//|ROT|//
  1527. +N+"    float f_y = y1 + sin( ar + f_t ) * dxy;       "//|ROT|//
  1528. +N+"                                                  "//|ROT|//
  1529. +N+"    int   i_x = int( f_x );                       "//|ROT|//
  1530. +N+"    int   i_y = int( f_y );                       "//|ROT|//
  1531. +N+"                                                  "//|ROT|//
  1532. +N+"                                                  "//|ROT|//
  1533. +N+"    uvec4   out_rgb = Get_Tex_iso_mem(            "//|ROT|//
  1534. +N+"        i_x                                       "//|ROT|//
  1535. +N+"    ,   i_y                                       "//|ROT|//
  1536. +N+"    );;                                           "//|ROT|//
  1537. +N+"                                                  "//|ROT|//
  1538. +N+"    return( out_rgb );                            "//|ROT|//
  1539. +N+"} //://////////////////////////////////////////://"//|ROT|//
  1540.  
  1541. //:CP:Cut_and_Paste:(BELOW):---------------------------------://
  1542. //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://
  1543. //:                                                          ://
  1544. //: CUT_PASTE( Get_Tex_iso_mem    )===>[ Get_Tex_mam_mem    ]://
  1545. //: CUT_PASTE( Get_Tex_iso_mem_rot)===>[ Get_Tex_mam_mem_rot]://
  1546. //:                                                          ://
  1547. //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://
  1548. +N+"uvec4 Get_Tex_mam_mem( //://///////////////////://"//[ISO]//
  1549. +N+"    int tilco_x                                   "//[ISO]//
  1550. +N+",   int tilco_y                                   "//[ISO]//
  1551. +N+"){                                                "//[ISO]//
  1552. +N+"                                                  "//[ISO]//
  1553. +N+"    float flt_wid = float( SAN_MAM /**2048**/  ); "//[ISO]//
  1554. +N+"    float flt_hig = float( SAN_MAM /**2048**/  ); "//[ISO]//
  1555. +N+"                                                  "//[ISO]//
  1556. +N+"    int int_wid = int(     SAN_MAM /**2048**/  ); "//[ISO]//
  1557. +N+"    int int_hig = int(     SAN_MAM /**2048**/  ); "//[ISO]//
  1558. +N+"                                                  "//[ISO]//
  1559. +N+"    vec2 u_v = vec2(                              "//[ISO]//
  1560. +N+"        ( float( tilco_x ) + 0.5 )                "//[ISO]//
  1561. +N+"             / ( flt_wid   - 0.0 )                "//[ISO]//
  1562. +N+"                                                  "//[ISO]//
  1563. +N+"    ,   ( float( tilco_y ) + 0.5 )                "//[ISO]//
  1564. +N+"             / ( flt_hig   - 0.0 )                "//[ISO]//
  1565. +N+"    );;                                           "//[ISO]//
  1566. +N+"                                                  "//[ISO]//
  1567. +N+"    uvec4   out_rgb;                              "//[ISO]//
  1568. +N+"                                                  "//[ISO]//
  1569. +N+"    if(                                           "//[ISO]//
  1570. +N+"    //: |<-------- mam_mem.wid -------->|         "//[ISO]//
  1571. +N+"        tilco_x >= 0 && tilco_x < int_wid         "//[ISO]//
  1572. +N+"    &&  tilco_y >= 0 && tilco_y < int_hig         "//[ISO]//
  1573. +N+"    //: |<-------- mam_mem.hig -------->|         "//[ISO]//
  1574. +N+"    ){  //:in_bounds_take_texture_sample_here:    "//[ISO]//
  1575. +N+"                                                  "//[ISO]//
  1576. +N+"        out_rgb = texture( mam_mem , u_v );       "//[ISO]//
  1577. +N+"                                                  "//[ISO]//
  1578. +N+"    }else{                                        "//[ISO]//
  1579. +N+"        //:make_checker_pattern_if_out_of_bounds: "//[ISO]//
  1580. +N+"                                                  "//[ISO]//
  1581. +N+"        //: o_e: Odd_Or_Even (1 or 0 output)      "//[ISO]//
  1582. +N+"        //: txy: Tile_X_Y                         "//[ISO]//
  1583. +N+"        int txy = ( tilco_x + tilco_y );          "//[ISO]//
  1584. +N+"        int o_e = int(   float( 0 )               "//[ISO]//
  1585. +N+"            +            float(txy)               "//[ISO]//
  1586. +N+"            -(2.0*floor( float(txy) / 2.0 ))      "//[ISO]//
  1587. +N+"        );;                                       "//[ISO]//
  1588. +N+"        int o_e_255 = o_e*255;                    "//[ISO]//
  1589. +N+"                                                  "//[ISO]//
  1590. +N+"        out_rgb = uvec4(                          "//[ISO]//
  1591. +N+"            o_e_255  //: RED                      "//[ISO]//
  1592. +N+"        ,   o_e_255  //: GREEN                    "//[ISO]//
  1593. +N+"        ,   o_e_255  //: BLUE                     "//[ISO]//
  1594. +N+"        ,       255  //: ALPHA                    "//[ISO]//
  1595. +N+"        );;                                       "//[ISO]//
  1596. +N+"    };;                                           "//[ISO]//
  1597. +N+"    return( out_rgb );                            "//[ISO]//
  1598. +N+"                                                  "//[ISO]//
  1599. +N+"} //:[ Get_Tex_mam_mem ]://////////////////////://"//[ISO]//
  1600. +N+"                                                  "//|ROT|//
  1601. +N+"uvec4 Get_Tex_mam_mem_rot( //://///////////////://"//|ROT|//
  1602. +N+"    int tilco_x                                   "//|ROT|//
  1603. +N+",   int tilco_y                                   "//|ROT|//
  1604. +N+"){                                                "//|ROT|//
  1605. +N+"                                                  "//|ROT|//
  1606. +N+"    float x1 = float(SAN_MAM) / 2.0; //:CENTER    "//|ROT|//
  1607. +N+"    float y1 = float(SAN_MAM) / 2.0; //:CENTER    "//|ROT|//
  1608. +N+"                                                  "//|ROT|//
  1609. +N+"    float x2 = float(  tilco_x  );                "//|ROT|//
  1610. +N+"    float y2 = float(  tilco_y  );                "//|ROT|//
  1611. +N+"                                                  "//|ROT|//
  1612. +N+"    float dx = x1-x2;                             "//|ROT|//
  1613. +N+"    float dy = y1-y2;                             "//|ROT|//
  1614. +N+"    float ar = atan( dy , dx );                   "//|ROT|//
  1615. +N+"                                                  "//|ROT|//
  1616. +N+"    float dxy = sqrt(                             "//|ROT|//
  1617. +N+"            pow(x1-x2 , 2.0)                      "//|ROT|//
  1618. +N+"          + pow(y1-y2 , 2.0)                      "//|ROT|//
  1619. +N+"    );;                                           "//|ROT|//
  1620. +N+"                                                  "//|ROT|//
  1621. +N+"    float f_t = float( gam_tim ) / 255.0;         "//|ROT|//
  1622. +N+"                                                  "//|ROT|//
  1623. +N+"    float f_x = x1 + cos( ar + f_t ) * dxy;       "//|ROT|//
  1624. +N+"    float f_y = y1 + sin( ar + f_t ) * dxy;       "//|ROT|//
  1625. +N+"                                                  "//|ROT|//
  1626. +N+"    int   i_x = int( f_x );                       "//|ROT|//
  1627. +N+"    int   i_y = int( f_y );                       "//|ROT|//
  1628. +N+"                                                  "//|ROT|//
  1629. +N+"                                                  "//|ROT|//
  1630. +N+"    uvec4   out_rgb = Get_Tex_mam_mem(            "//|ROT|//
  1631. +N+"        i_x                                       "//|ROT|//
  1632. +N+"    ,   i_y                                       "//|ROT|//
  1633. +N+"    );;                                           "//|ROT|//
  1634. +N+"                                                  "//|ROT|//
  1635. +N+"    return( out_rgb );                            "//|ROT|//
  1636. +N+"} //://////////////////////////////////////////://"//|ROT|//
  1637. //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://
  1638. //:CP:Cut_and_Paste:(ABOVE):---------------------------------://
  1639.  
  1640. +N+"  //: Help make an error checker pattern if    ://"//[OXY]//
  1641. +N+"  //: sampler goes out of bounds. Pick exact   ://"//[OXY]//
  1642. +N+"  //: RGB colors for checker pattern so we can ://"//[OXY]//
  1643. +N+"  //: figure out where the error is comming    ://"//[OXY]//
  1644. +N+"  //: from by looking at the resulting image   ://"//[OXY]//
  1645. +N+"  //: in shader in raw data view.              ://"//[OXY]//
  1646. +N+"  uvec4 OOB_TXY(  //:.................:ERR_OOB_TXY"//[OXY]//
  1647. +N+"                                                  "//[OXY]//
  1648. +N+"      //:XY tile coordinate that is out of bounds:"//[OXY]//
  1649. +N+"      int oob_t_x //:................:OutOfBou:t_x"//[OXY]//
  1650. +N+"  ,   int oob_t_y //:................:OutOfBou:t_y"//[OXY]//
  1651. +N+"                                                  "//[OXY]//
  1652. +N+"  //: Parameters intentionally NOT uvec input  ://"//[OXY]//
  1653. +N+"  //: Because all callsites to OOB_TXY should  ://"//[OXY]//
  1654. +N+"  //: use unique RGB colors and should NOT     ://"//[OXY]//
  1655. +N+"  //: be re-used. All calls should be directly ://"//[OXY]//
  1656. +N+"  //: [*inlined*] at the point they are needed.://"//[OXY]//
  1657. +N+"  ,   int     r_0 , int g_0, int b_0 //:even_RGB  "//[OXY]//
  1658. +N+"  ,   int     r_1 , int g_1, int b_1 //:odd__RGB  "//[OXY]//
  1659. +N+"  ){                                              "//[OXY]//
  1660. +N+"                                                  "//[OXY]//
  1661. +N+"      uvec4 dye_eve = uvec4(r_0,g_0,b_0,  255);   "//[OXY]//
  1662. +N+"      uvec4 dye_odd = uvec4(r_1,g_1,b_1,  255);   "//[OXY]//
  1663. +N+"      uvec4 dye_err = uvec4(12 , 24, 48,  255);   "//[OXY]//
  1664. +N+"      uvec4 dye_out = dye_err;                    "//[OXY]//
  1665. +N+"                                                  "//[OXY]//
  1666. +N+"      //:--------------------------:SC[OGL_OXY]://"//[OXY]//
  1667. +N+"      #define _1_ (uint( 1 ))//:///////////////://"//[OXY]//
  1668. +N+"      #define _0_ (uint( 0 ))//:///////////////://"//[OXY]//
  1669. +N+"      uint u_x = uint(  oob_t_x );//:AKA[u32_t_x] "//[OXY]//
  1670. +N+"      uint u_y = uint(  oob_t_y );//:AKA[u32_t_y] "//[OXY]//
  1671. +N+"      uint o_x = uint(( u_x        & _1_) > _0_); "//[OXY]//
  1672. +N+"      uint o_y = uint(( u_y        & _1_) > _0_); "//[OXY]//
  1673. +N+"      uint oxy = uint(((o_x+o_y)   & _1_) > _0_); "//[OXY]//
  1674. +N+"      #undef  _1_  //://///////////////////////://"//[OXY]//
  1675. +N+"      #undef  _0_  //://///////////////////////://"//[OXY]//
  1676. +N+"      //:--------------------------:SC[OGL_OXY]://"//[OXY]//
  1677. +N+"                                                  "//[OXY]//
  1678. +N+"      //:On an [*odd*] or [*even*] checker?       "//[OXY]//
  1679. +N+"      if( oxy == uint(0) ){ dye_out = dye_eve; }; "//[OXY]//
  1680. +N+"      if( oxy == uint(1) ){ dye_out = dye_odd; }; "//[OXY]//
  1681. +N+"                                                  "//[OXY]//
  1682. +N+"      return( dye_out );                          "//[OXY]//
  1683. +N+"  }//:[OOB_TXY]:_______________________________://"//[OXY]//
  1684.  
  1685. +N+"//:Get memory that may or may not be        "//|G_T_D_HOT|//
  1686. +N+"//:hot-swapped out.                         "//|G_T_D_HOT|//
  1687. +N+"uvec4 Get_Tex_dex_hot(                      "//|G_T_D_HOT|//
  1688. +N+"    int mem_t_x //:Memory:Tile_X ://        "//|G_T_D_HOT|//
  1689. +N+",   int mem_t_y //:Memory:Tile_Y ://        "//|G_T_D_HOT|//
  1690. +N+",   int inn_hot //: dex_hot      ://        "//|G_T_D_HOT|//
  1691. +N+"){                                          "//|G_T_D_HOT|//
  1692. +N+"                                            "//|G_T_D_HOT|//
  1693. +N+"    uvec4 out_rgb;                          "//|G_T_D_HOT|//
  1694. +N+"                                            "//|G_T_D_HOT|//
  1695. +N+"                                            "//|G_T_D_HOT|//
  1696. +N+"    #define _0_ int(0) //:///////////////://"//|G_T_D_HOT|//
  1697. +N+"    #define _1_ int(1) //:///////////////://"//|G_T_D_HOT|//
  1698. +N+"                                            "//|G_T_D_HOT|//
  1699. +N+"    //:calculate how many sub-sections of://"//|G_T_D_HOT|//
  1700. +N+"    //:SAN_MAM there are. Then minus one ://"//|G_T_D_HOT|//
  1701. +N+"    //:to get the MAX_HOT_SWA_DEX.       ://"//|G_T_D_HOT|//
  1702. +N+"    //:m_i_hot starts at 1, not 0, hence ://"//|G_T_D_HOT|//
  1703. +N+"    //:the ( - _0_ ) ....................://"//|G_T_D_HOT|//
  1704. +N+"    int san_hot = ((SAN_MAM / SAN_ISO));    "//|G_T_D_HOT|//
  1705. +N+"    int m_i_hot = ((san_hot*san_hot)- _0_ );"//|G_T_D_HOT|//
  1706. +N+"    int m_i_txy = ((SAN_ISO        )- _1_ );"//|G_T_D_HOT|//
  1707. +N+"                                            "//|G_T_D_HOT|//
  1708. +N+"    bool oob_neg_hot =( inn_hot < 0       );"//|G_T_D_HOT|//
  1709. +N+"    bool oob_neg_txy =( mem_t_x < 0       );"//|G_T_D_HOT|//
  1710. +N+"                                            "//|G_T_D_HOT|//
  1711. +N+"    bool oob_pos_hot =( inn_hot > m_i_hot );"//|G_T_D_HOT|//
  1712. +N+"    bool oob_pos_txy =( mem_t_x > m_i_txy );"//|G_T_D_HOT|//
  1713. +N+"                                            "//|G_T_D_HOT|//
  1714. +N+"    bool oob_hot     =( oob_neg_hot         "//|G_T_D_HOT|//
  1715. +N+"                     || oob_pos_hot );;     "//|G_T_D_HOT|//
  1716. +N+"                                            "//|G_T_D_HOT|//
  1717. +N+"    bool oob_txy     =( oob_neg_txy         "//|G_T_D_HOT|//
  1718. +N+"                     || oob_pos_txy );;     "//|G_T_D_HOT|//
  1719. +N+"                                            "//|G_T_D_HOT|//
  1720. +N+"    bool oob_all =( oob_hot && oob_txy);    "//|G_T_D_HOT|//
  1721. +N+"                                            "//|G_T_D_HOT|//
  1722. +N+"    #define DEX_HOT int(dex_hot) //::://    "//|G_T_D_HOT|//
  1723. +N+"    bool use_hot = (DEX_HOT == inn_hot);    "//|G_T_D_HOT|//
  1724. +N+"    bool not_hot = (DEX_HOT != inn_hot);    "//|G_T_D_HOT|//
  1725. +N+"    #undef  DEX_HOT //://////////////://    "//|G_T_D_HOT|//
  1726. +N+"                                            "//|G_T_D_HOT|//
  1727. +N+"    #undef  _0_ //://////////////////////://"//|G_T_D_HOT|//
  1728. +N+"    #undef  _1_ //://////////////////////://"//|G_T_D_HOT|//
  1729. +N+"                                            "//|G_T_D_HOT|//
  1730. +N+"    ;;;;;;if(  oob_all        ){            "//|G_T_D_HOT|//
  1731. +N+"                                            "//|G_T_D_HOT|//
  1732. +N+"        out_rgb = OOB_TXY(mem_t_x,mem_t_y   "//|G_T_D_HOT|//
  1733. +N+"                         ,    222,222,222   "//|G_T_D_HOT|//
  1734. +N+"                         ,     22, 22, 22);;"//|G_T_D_HOT|//
  1735. +N+"                                            "//|G_T_D_HOT|//
  1736. +N+"    }else if(  oob_neg_hot    ){ //:-----://"//|G_T_D_HOT|//
  1737. +N+"                                            "//|G_T_D_HOT|//
  1738. +N+"        out_rgb = OOB_TXY(mem_t_x,mem_t_y   "//|G_T_D_HOT|//
  1739. +N+"                         ,    111,111,111   "//|G_T_D_HOT|//
  1740. +N+"                         ,     33, 33, 33);;"//|G_T_D_HOT|//
  1741. +N+"                                            "//|G_T_D_HOT|//
  1742. +N+"    }else if(  oob_pos_hot    ){ //:-----://"//|G_T_D_HOT|//
  1743. +N+"                                            "//|G_T_D_HOT|//
  1744. +N+"        out_rgb = OOB_TXY(mem_t_x,mem_t_y   "//|G_T_D_HOT|//
  1745. +N+"                         ,    101,101,101   "//|G_T_D_HOT|//
  1746. +N+"                         ,     44, 44, 44);;"//|G_T_D_HOT|//
  1747. +N+"    }else if(  oob_neg_txy    ){ //:-----://"//|G_T_D_HOT|//
  1748. +N+"                                            "//|G_T_D_HOT|//
  1749. +N+"        out_rgb = OOB_TXY(mem_t_x,mem_t_y   "//|G_T_D_HOT|//
  1750. +N+"                         ,    123,123,123   "//|G_T_D_HOT|//
  1751. +N+"                         ,     55, 55, 55);;"//|G_T_D_HOT|//
  1752. +N+"    }else if(  oob_pos_txy    ){ //:-----://"//|G_T_D_HOT|//
  1753. +N+"                                            "//|G_T_D_HOT|//
  1754. +N+"        out_rgb = OOB_TXY(mem_t_x,mem_t_y   "//|G_T_D_HOT|//
  1755. +N+"                         ,    234,234,234   "//|G_T_D_HOT|//
  1756. +N+"                         ,     66, 66, 66);;"//|G_T_D_HOT|//
  1757. +N+"    }else if(  use_hot        ){ //:-----://"//|G_T_D_HOT|//
  1758. +N+"    //:  Sample from isolated memory     ://"//|G_T_D_HOT|//
  1759. +N+"    //:  because the memory you are      ://"//|G_T_D_HOT|//
  1760. +N+"    //:  targeting is hot swapped out.   ://"//|G_T_D_HOT|//
  1761. +N+"                                            "//|G_T_D_HOT|//
  1762. +N+"        int iso_t_x = mem_t_x + 0;          "//|G_T_D_HOT|//
  1763. +N+"        int iso_t_y = mem_t_y + 0;          "//|G_T_D_HOT|//
  1764. +N+"                                            "//|G_T_D_HOT|//
  1765. +N+"        out_rgb = Get_Tex_iso_mem(          "//|G_T_D_HOT|//
  1766. +N+"        /**/              iso_t_x           "//|G_T_D_HOT|//
  1767. +N+"        /**/           ,  iso_t_y );;       "//|G_T_D_HOT|//
  1768. +N+"                                            "//|G_T_D_HOT|//
  1769. +N+"    }else if(  not_hot        ){ //:-----://"//|G_T_D_HOT|//
  1770. +N+"                                            "//|G_T_D_HOT|//
  1771. +N+"                                            "//|G_T_D_HOT|//
  1772. +N+"                                            "//|G_T_D_HOT|//
  1773. +N+"      //:Offset the memory location to ://  "//|G_T_D_HOT|//
  1774. +N+"      //:The correct 512-x-512 section ://  "//|G_T_D_HOT|//
  1775. +N+"      //:of the master memory (mam_mem)://  "//|G_T_D_HOT|//
  1776. +N+"                                            "//|G_T_D_HOT|//
  1777. +N+"      //:________________:SC[GLSL_ITXY]://  "//|G_T_D_HOT|//
  1778. +N+"      #define DEX_STARTS_FROM_ONE ( 1 ) //  "//|G_T_D_HOT|//
  1779. +N+"      #define INN_DEX ( inn_hot )    //://  "//|G_T_D_HOT|//
  1780. +N+"      #define INN_WID ( san_hot )    //://  "//|G_T_D_HOT|//
  1781. +N+"      //:- - - - - - - -- - - - - - - -://  "//|G_T_D_HOT|//
  1782. +N+"      #if(    DEX_STARTS_FROM_ONE > 0 ) //  "//|G_T_D_HOT|//
  1783. +N+"          #define DEX ( INN_DEX - 1 )//://  "//|G_T_D_HOT|//
  1784. +N+"          #define WID ( INN_WID     )//://  "//|G_T_D_HOT|//
  1785. +N+"      #else                          //://  "//|G_T_D_HOT|//
  1786. +N+"          #define DEX ( INN_DEX     )//://  "//|G_T_D_HOT|//
  1787. +N+"          #define WID ( INN_WID     )//://  "//|G_T_D_HOT|//
  1788. +N+"      #endif                         //://  "//|G_T_D_HOT|//
  1789. +N+"      //:- - - - - - - -- - - - - - - -://  "//|G_T_D_HOT|//
  1790. +N+"      #define  T     trunc    //://////://  "//|G_T_D_HOT|//
  1791. +N+"      int     h_y  = ( DEX /(     WID ) );  "//|G_T_D_HOT|//
  1792. +N+"      int     h_x  = ( DEX -( h_y*WID ) );  "//|G_T_D_HOT|//
  1793. +N+"      #undef      WID  //://///////////://  "//|G_T_D_HOT|//
  1794. +N+"      #undef      DEX  //://///////////://  "//|G_T_D_HOT|//
  1795. +N+"      #undef       T   //://///////////://  "//|G_T_D_HOT|//
  1796. +N+"      #undef  INN_DEX  //://///////////://  "//|G_T_D_HOT|//
  1797. +N+"      #undef  INN_WID  //://///////////://  "//|G_T_D_HOT|//
  1798. +N+"      #undef  DEX_STARTS_FROM_ONE //://://  "//|G_T_D_HOT|//
  1799. +N+"      //:________________:SC[GLSL_ITXY]://  "//|G_T_D_HOT|//
  1800. +N+"                                     //://  "//|G_T_D_HOT|//
  1801. +N+"      int     o_x =( h_x * SAN_ISO );//://  "//|G_T_D_HOT|//
  1802. +N+"      int     o_y =( h_y * SAN_ISO );//://  "//|G_T_D_HOT|//
  1803. +N+"                                     //://  "//|G_T_D_HOT|//
  1804. +N+"      int mam_t_x =( mem_t_x + o_x );//://  "//|G_T_D_HOT|//
  1805. +N+"      int mam_t_y =( mem_t_y + o_y );//://  "//|G_T_D_HOT|//
  1806. +N+"                                     //://  "//|G_T_D_HOT|//
  1807. +N+"      out_rgb = Get_Tex_mam_mem(     //://  "//|G_T_D_HOT|//
  1808. +N+"      /**/              mam_t_x      //://  "//|G_T_D_HOT|//
  1809. +N+"      /**/           ,  mam_t_y );;  //://  "//|G_T_D_HOT|//
  1810. +N+"                                     //://  "//|G_T_D_HOT|//
  1811. +N+"  }else{ //:---------------------:-----://  "//|G_T_D_HOT|//
  1812. +N+"  //:WRONG:EDCL:(EXPECTED_DEAD_CODE_LINE)   "//|G_T_D_HOT|//
  1813. +N+"                                     //://  "//|G_T_D_HOT|//
  1814. +N+"                                     //://  "//|G_T_D_HOT|//
  1815. +N+"      out_rgb = OOB_TXY(             //://  "//|G_T_D_HOT|//
  1816. +N+"                   mem_t_x,mem_t_y   //://  "//|G_T_D_HOT|//
  1817. +N+"                  ,128, 64,  32      //://  "//|G_T_D_HOT|//
  1818. +N+"                  , 32, 64, 128   );;//://  "//|G_T_D_HOT|//
  1819. +N+"                                     //://  "//|G_T_D_HOT|//
  1820. +N+"  };; //:--:---------------------:-----://  "//|G_T_D_HOT|//
  1821. +N+"                                            "//|G_T_D_HOT|//                          
  1822. +N+"                      //:----------------://"//|G_T_D_HOT|//
  1823. +N+"  return( out_rgb );  //:----------------://"//|G_T_D_HOT|//                
  1824. +N+"                      //:----------------://"//|G_T_D_HOT|//                  
  1825. +N+"}//:[Get_tex_dex_hot / Get_tex_hot_mem]::://"//|G_T_D_HOT|//
  1826.  
  1827. +N+"//:RotatedVersionOf[ Get_Tex_dex_hot ]/////://"//:HOT_ROT://
  1828. +N+"uvec4 Get_Tex_dex_hot_rot( //://///////////://"//:HOT_ROT://
  1829. +N+"    int tilco_x /** tile::x **/               "//:HOT_ROT://
  1830. +N+",   int tilco_y /** tile::y **/               "//:HOT_ROT://
  1831. +N+",   int inn_hot /** dex_hot **/               "//:HOT_ROT://
  1832. +N+"){                                            "//:HOT_ROT://
  1833. +N+"                                              "//:HOT_ROT://
  1834. +N+"    float x1 = float(SAN_ISO) / 2.0; //:CENTER"//:HOT_ROT://
  1835. +N+"    float y1 = float(SAN_ISO) / 2.0; //:CENTER"//:HOT_ROT://
  1836. +N+"                                              "//:HOT_ROT://
  1837. +N+"    float x2 = float(  tilco_x  );            "//:HOT_ROT://
  1838. +N+"    float y2 = float(  tilco_y  );            "//:HOT_ROT://
  1839. +N+"                                              "//:HOT_ROT://
  1840. +N+"    float dx = x1-x2;                         "//:HOT_ROT://
  1841. +N+"    float dy = y1-y2;                         "//:HOT_ROT://
  1842. +N+"    float ar = atan( dy , dx );               "//:HOT_ROT://
  1843. +N+"                                              "//:HOT_ROT://
  1844. +N+"    float dxy = sqrt(                         "//:HOT_ROT://
  1845. +N+"            pow(x1-x2 , 2.0)                  "//:HOT_ROT://
  1846. +N+"          + pow(y1-y2 , 2.0)                  "//:HOT_ROT://
  1847. +N+"    );;                                       "//:HOT_ROT://
  1848. +N+"                                              "//:HOT_ROT://
  1849. +N+"    float f_t = float( gam_tim ) / 255.0;     "//:HOT_ROT://
  1850. +N+"                                              "//:HOT_ROT://
  1851. +N+"    float f_x = x1 + cos( ar + f_t ) * dxy;   "//:HOT_ROT://
  1852. +N+"    float f_y = y1 + sin( ar + f_t ) * dxy;   "//:HOT_ROT://
  1853. +N+"                                              "//:HOT_ROT://
  1854. +N+"    int   i_x = int( f_x );                   "//:HOT_ROT://
  1855. +N+"    int   i_y = int( f_y );                   "//:HOT_ROT://
  1856. +N+"                                              "//:HOT_ROT://
  1857. +N+"                                              "//:HOT_ROT://
  1858. +N+"    uvec4   out_rgb = Get_Tex_dex_hot(        "//:HOT_ROT://
  1859. +N+"        i_x      /** tile::x **/              "//:HOT_ROT://
  1860. +N+"    ,   i_y      /** tile::y **/              "//:HOT_ROT://
  1861. +N+"    ,   inn_hot  /** dex_hot **/              "//:HOT_ROT://
  1862. +N+"    );;                                       "//:HOT_ROT://
  1863. +N+"                                              "//:HOT_ROT://
  1864. +N+"    return( out_rgb );                        "//:HOT_ROT://
  1865. +N+"} //://////////////////////////////////////://"//:HOT_ROT://
  1866.                        
  1867. +N+"//:////////////////////////////////////////://"//[HOT_MEM]//
  1868. +N+"//:----------------------------------------://"//[HOT_MEM]//
  1869. +N+"//:Sample from whatever 512-x-512 region//:://"//[HOT_MEM]//
  1870. +N+"//:of memory is targeted by [ hot_dex ].//:://"//[HOT_MEM]//
  1871. +N+"//:If [ hot_dex === 0 ] then their      //:://"//[HOT_MEM]//
  1872. +N+"//:is no hot swapping target and        //:://"//[HOT_MEM]//
  1873. +N+"//:sample from [ iso_mem ] instead      //:://"//[HOT_MEM]//
  1874. +N+"//:of [ mam_mem ].                      //:://"//[HOT_MEM]//
  1875. +N+"//:----------------------------------------://"//[HOT_MEM]//
  1876. +N+"uvec4 Get_Tex_hot_mem(                  //:://"//[HOT_MEM]//
  1877. +N+"/**/  int mem_t_x //:Memory:Tile_X ://  //:://"//[HOT_MEM]//
  1878. +N+",     int mem_t_y //:Memory:Tile_Y ://  //:://"//[HOT_MEM]//
  1879. +N+"){                                      //:://"//[HOT_MEM]//
  1880. +N+"                                        //:://"//[HOT_MEM]//
  1881. +N+"    //:dye_out: Like [rgb_out],but      //:://"//[HOT_MEM]//
  1882. +N+"    //:pixel values in 0-255 range.     //:://"//[HOT_MEM]//
  1883. +N+"    uvec4 dye_out;                      //:://"//[HOT_MEM]//
  1884. +N+"                                        //:://"//[HOT_MEM]//
  1885. +N+"    //:get_hot_swapping_index_uniform::::::://"//[HOT_MEM]//
  1886. +N+"    int inn_hot =int( dex_hot );        //:://"//[HOT_MEM]//
  1887. +N+"                                        //:://"//[HOT_MEM]//
  1888. +N+"    if(    inn_hot >= DEX_HOT_MIN       //:://"//[HOT_MEM]//
  1889. +N+"        && inn_hot <= DEX_HOT_MAX       //:://"//[HOT_MEM]//
  1890. +N+"    ){                                  //:://"//[HOT_MEM]//
  1891. +N+"        //:If we have a valid hot swapping ://"//[HOT_MEM]//
  1892. +N+"        //:index [ 1 - 16 ], we will sample://"//[HOT_MEM]//
  1893. +N+"        //:data from that sub-sector ------://"//[HOT_MEM]//
  1894. +N+"        //:of [ mam_mem ]. ----------------://"//[HOT_MEM]//
  1895. +N+"        dye_out=(                       //:://"//[HOT_MEM]//
  1896. +N+"        Get_Tex_dex_hot(                //:://"//[HOT_MEM]//
  1897. +N+"        /**/    mem_t_x //:Memory:Tile_X---://"//[HOT_MEM]//
  1898. +N+"        ,       mem_t_y //:Memory:Tile_Y---://"//[HOT_MEM]//
  1899. +N+"        ,       inn_hot //: dex_hot     ---://"//[HOT_MEM]//
  1900. +N+"        ));;                            //:://"//[HOT_MEM]//
  1901. +N+"    }else                               //:://"//[HOT_MEM]//
  1902. +N+"    if( 0 == inn_hot ){                 //:://"//[HOT_MEM]//
  1903. +N+"        //:- If no hot swapping index is---://"//[HOT_MEM]//
  1904. +N+"        //:- loaded, we will sample from---://"//[HOT_MEM]//
  1905. +N+"        //:- [ iso_mem ].               ---://"//[HOT_MEM]//
  1906. +N+"        dye_out=(                       //:://"//[HOT_MEM]//
  1907. +N+"        Get_Tex_iso_mem(                //:://"//[HOT_MEM]//
  1908. +N+"        /**/    mem_t_x //:Memory:Tile_X---://"//[HOT_MEM]//
  1909. +N+"        ,       mem_t_y //:Memory:Tile_Y---://"//[HOT_MEM]//
  1910. +N+"        ));;                            //:://"//[HOT_MEM]//
  1911. +N+"    }else{                              //:://"//[HOT_MEM]//
  1912. +N+"                                        //:://"//[HOT_MEM]//
  1913. +N+"        //:Create an error pattern in our -://"//[HOT_MEM]//
  1914. +N+"        //:data. May only be obvious when -://"//[HOT_MEM]//
  1915. +N+"        //:using a [raw_data_view] shader. ://"//[HOT_MEM]//
  1916. +N+"        dye_out = OOB_TXY(              //:://"//[HOT_MEM]//
  1917. +N+"            mem_t_x     //:TILE_COORD:X ---://"//[HOT_MEM]//
  1918. +N+"        ,   mem_t_y     //:TILE_COORD:Y ---://"//[HOT_MEM]//
  1919. +N+"        ,   121,131,141 //:EVEN_CHECKER ---://"//[HOT_MEM]//
  1920. +N+"        ,   212,232,242 //:ODD__CHECKER ---://"//[HOT_MEM]//
  1921. +N+"        );;                             //:://"//[HOT_MEM]//
  1922. +N+"    };;                                 //:://"//[HOT_MEM]//
  1923. +N+"                                        //:://"//[HOT_MEM]//
  1924. +N+"    return( dye_out );                  //:://"//[HOT_MEM]//
  1925. +N+"                                        //:://"//[HOT_MEM]//
  1926. +N+"}//:[Get_Tex_hot_mem]:_____________________://"//[HOT_MEM]//
  1927. +N+"//::[Get_Tex_hot_mem]://///////////////////://"//[HOT_MEM]//
  1928.  
  1929. //://////////////////////////////////////////////////////////://
  1930.  
  1931. +N+"//:GR:Get_Rectangle:(BELOW):-------------------://"//[G_R]//
  1932. +N+"//:GRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[G_R]//
  1933. +N+"//:                                            ://"//[G_R]//
  1934. +N+"//: FUNCTION_NAMES_IDENTICAL_TO_CPU_SIDE_CODE! ://"//[G_R]//
  1935. +N+"//:                                            ://"//[G_R]//
  1936. +N+"//:GRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[G_R]//
  1937. +N+"/*-*/uvec4 Get_GLOBVAR_rec_vpc( /** void **/ ){   "//[G_R]//
  1938. +N+"                                                  "//[G_R]//
  1939. +N+"    uvec4 rec_vpc =uvec4(                         "//[G_R]//
  1940. +N+"        TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_x_0 )"//[G_R]//
  1941. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_x_1 )"//[G_R]//
  1942. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_y_0 )"//[G_R]//
  1943. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_y_1 )"//[G_R]//
  1944. +N+"    );;                                           "//[G_R]//
  1945. +N+"    return( rec_vpc );                            "//[G_R]//
  1946. +N+"                                                  "//[G_R]//
  1947. +N+"}/**/uvec4 Get_GLOBVAR_rec_vp0( /** void **/ ){   "//[G_R]//
  1948. +N+"                                                  "//[G_R]//
  1949. +N+"    uvec4 rec_vp0 =uvec4(                         "//[G_R]//
  1950. +N+"        TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_x_0 )"//[G_R]//
  1951. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_x_1 )"//[G_R]//
  1952. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_y_0 )"//[G_R]//
  1953. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_y_1 )"//[G_R]//
  1954. +N+"    );;                                           "//[G_R]//
  1955. +N+"    return( rec_vp0 );                            "//[G_R]//
  1956. +N+"                                                  "//[G_R]//
  1957. +N+"}/**/uvec4 Get_GLOBVAR_rec_vp1( /** void **/ ){   "//[G_R]//
  1958. +N+"                                                  "//[G_R]//
  1959. +N+"    uvec4 rec_vp1 =uvec4(                         "//[G_R]//
  1960. +N+"        TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_x_0 )"//[G_R]//
  1961. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_x_1 )"//[G_R]//
  1962. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_y_0 )"//[G_R]//
  1963. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_y_1 )"//[G_R]//
  1964. +N+"    );;                                           "//[G_R]//
  1965. +N+"    return( rec_vp1 );                            "//[G_R]//
  1966. +N+"}/**/uvec4 Get_GLOBVAR_rec_vp2( /** void **/ ){   "//[G_R]//
  1967. +N+"                                                  "//[G_R]//
  1968. +N+"    uvec4 rec_vp2 =uvec4(                         "//[G_R]//
  1969. +N+"        TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_x_0 )"//[G_R]//
  1970. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_x_1 )"//[G_R]//
  1971. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_y_0 )"//[G_R]//
  1972. +N+"    ,   TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_y_1 )"//[G_R]//
  1973. +N+"    );;                                           "//[G_R]//
  1974. +N+"    return( rec_vp2 );                            "//[G_R]//
  1975. +N+"}                                                 "//[G_R]//
  1976. +N+"//:GRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[G_R]//
  1977. +N+"                                                  "//|C_M|//
  1978. +N+"//:////////////////////////////////////////////://"//|C_M|//
  1979. +N+"                                                  "//|C_M|//
  1980. +N+"//:CM:Convience_Methods:                          "//|C_M|//
  1981. +N+"//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://"//|C_M|//
  1982. +N+"//:  Really better to calculate yourself seeing://"//|C_M|//
  1983. +N+"//:  how getting width and height is 8 texture ://"//|C_M|//
  1984. +N+"//:  fetches instead of 4 because has to call  ://"//|C_M|//
  1985. +N+"//:  getter TWICE. TWICE because I can't think ://"//|C_M|//
  1986. +N+"//:  of scenario where I would be using only   ://"//|C_M|//
  1987. +N+"//:  [ VP0_WID ] But not [ VP0_HIG ]           ://"//|C_M|//
  1988. +N+"//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://"//|C_M|//
  1989. +N+"/*-*/float Get_VP0_WID_f32(){                     "//|C_M|//
  1990. +N+"        uvec4 rec_vp0 = Get_GLOBVAR_rec_vp0( );   "//|C_M|//
  1991. +N+"        return(float( uint( 1 )                   "//|C_M|//
  1992. +N+"            + rec_vp0.y                           "//|C_M|//
  1993. +N+"            - rec_vp0.x                           "//|C_M|//
  1994. +N+"        ));;//[VP0_WID]//                         "//|C_M|//
  1995. +N+"}/**/float Get_VP0_HIG_f32(){                     "//|C_M|//
  1996. +N+"        uvec4 rec_vp0 = Get_GLOBVAR_rec_vp0( );   "//|C_M|//
  1997. +N+"        return(float( uint(1)                     "//|C_M|//
  1998. +N+"            + rec_vp0.w                           "//|C_M|//
  1999. +N+"            - rec_vp0.z                           "//|C_M|//
  2000. +N+"        ));;                                      "//|C_M|//
  2001. +N+"}                                                 "//|C_M|//
  2002. +N+"//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://"//|C_M|//
  2003. +N+"                                                  "//|C_M|//
  2004. +N+"//:////////////////////////////////////////////://"//|C_M|//
  2005. +N+"//:[glsl_main]:::::::::::::::::::::::::::::::::://"//[H_M]//
  2006. +N+"void main(){ if( has_mem <= uint(0) ){ //://///://"//[H_M]//
  2007. +N+"                                                  "//[H_M]//
  2008. +N+"    //:Default_Gradient_If_Textures_Not_Loaded:   "//[H_M]//
  2009. +N+"    pix_fra = vec4( pix_ver , 0.5 );              "//[H_M]//
  2010. +N+"                                                  "//[H_M]//
  2011. +N+"}else{  //:////////////////////////////////////://"//[H_M]//
  2012. +N+"if( uint(0) == ren_mod ){ //://////////////////://"//| 0 |//
  2013. +N+"                                                  "//| 0 |//
  2014. +N+"    //: If render mode is zero(0), we will use ://"//| 0 |//
  2015. +N+"    //: a default shader that will show us what://"//| 0 |//
  2016. +N+"    //: is on the iso_mem memory block.        ://"//| 0 |//
  2017. +N+"                                                //"//| 0 |//
  2018. +N+"                                                //"//| 0 |//
  2019. +N+"    uint x_0;                                   //"//| 0 |//
  2020. +N+"    uint x_1;                                   //"//| 0 |//
  2021. +N+"    uint y_0;                                   //"//| 0 |//
  2022. +N+"    uint y_1;                                   //"//| 0 |//
  2023. +N+"    int vpc_wid;                                //"//| 0 |//
  2024. +N+"    int vpc_hig;                                //"//| 0 |//
  2025. +N+"    int iso_wid;                                //"//| 0 |//
  2026. +N+"    int iso_hig;                                //"//| 0 |//
  2027. +N+"    int mam_wid;                                //"//| 0 |//
  2028. +N+"    int mam_hig;                                //"//| 0 |//
  2029. +N+"                                                //"//| 0 |//
  2030. +N+"    #define X_0 (TAU_001_GLOBVAR_rec_vpc_x_0)   //"//| 0 |//
  2031. +N+"    #define X_1 (TAU_001_GLOBVAR_rec_vpc_x_1)   //"//| 0 |//
  2032. +N+"            x_0 = TAU_001_U32( X_0 );           //"//| 0 |//
  2033. +N+"            x_1 = TAU_001_U32( X_1 );           //"//| 0 |//
  2034. +N+"    #undef  X_0                                 //"//| 0 |//
  2035. +N+"    #undef  X_1                                 //"//| 0 |//
  2036.  
  2037.  
  2038. +N+"    #define Y_0 (TAU_001_GLOBVAR_rec_vpc_y_0)   //"//| 0 |//
  2039. +N+"    #define Y_1 (TAU_001_GLOBVAR_rec_vpc_y_1)   //"//| 0 |//
  2040. +N+"            y_0 = TAU_001_U32( Y_0 );           //"//| 0 |//
  2041. +N+"            y_1 = TAU_001_U32( Y_1 );           //"//| 0 |//
  2042. +N+"    #undef  Y_0                                 //"//| 0 |//
  2043. +N+"    #undef  Y_1                                 //"//| 0 |//
  2044.  
  2045.  
  2046.  
  2047.  
  2048. +N+"                                                //"//| 0 |//
  2049. +N+"    vpc_wid =( int( x_1 - x_0 ) + int( 1 ) );   //"//| 0 |//
  2050. +N+"    vpc_hig =( int( y_1 - y_0 ) + int( 1 ) );   //"//| 0 |//
  2051. +N+"    iso_wid =( SAN_ISO );                       //"//| 0 |//
  2052. +N+"    iso_hig =( SAN_ISO );                       //"//| 0 |//
  2053. +N+"    mam_wid =( SAN_MAM );                       //"//| 0 |//
  2054. +N+"    mam_hig =( SAN_MAM );                       //"//| 0 |//
  2055. +N+"                                                //"//| 0 |//
  2056. +N+"    //:Calculate_On_Screen_Pixel_Coordinates:::://"//| 0 |//
  2057. +N+"    float f_x = gl_FragCoord.x;                 //"//| 0 |//
  2058. +N+"    float f_y = gl_FragCoord.y;                 //"//| 0 |//
  2059. +N+"    int vpc_p_x = int( floor( f_x - 0.5 )  );      //"//| 0 |//
  2060. +N+"    int vpc_p_y = int( floor( f_y - 0.5 )  );      //"//| 0 |//
  2061. +N+"    //: |<--------- FLIP_Y_AXIS ------->|      ://"//| 0 |//
  2062. +N+"    vpc_p_y = (vpc_hig - 1 - vpc_p_y);      //"//| 0 |//            
  2063. +N+"                                                //"//| 0 |//
  2064. +N+"    float r = 0.2;                              //"//| 0 |//
  2065. +N+"    float g = 0.2;                              //"//| 0 |//
  2066. +N+"    float b = 0.2;                              //"//| 0 |//
  2067. +N+"    float a = 1.0;                              //"//| 0 |//
  2068. +N+"                                                //"//| 0 |//
  2069. +N+"    #define F float //:FFFFFFFFFFFFFFFFFFFFFFFF://"//| 0 |//
  2070. +N+"    #define I int   //:IIIIIIIIIIIIIIIIIIIIIIII://"//| 0 |//
  2071. +N+"                                                  "//| 0 |//
  2072. +N+"    float vpc_mtx_iso =(1.0//:[A]----->[B]:::::://"//| 0 |//
  2073. +N+"        * float( iso_wid ) //:DST/DEST/[B]:::::://"//| 0 |//
  2074. +N+"        / float( vpc_wid ) //:SRC/FROM/[A]:::::://"//| 0 |//
  2075. +N+"    );;                                         //"//| 0 |//
  2076. +N+"    float vpc_mty_iso =(1.0//:[A]----->[B]:::::://"//| 0 |//
  2077. +N+"        * float( iso_hig ) //:DST/DEST/[B]:::::://"//| 0 |//
  2078. +N+"        / float( vpc_hig ) //:SRC/FROM/[A]:::::://"//| 0 |//
  2079. +N+"    );;                                         //"//| 0 |//
  2080.  
  2081.  
  2082. +N+"                                                //"//| 0 |//
  2083. +N+"    float vpc_mtx_mam =(1.0//:[A]----->[B]:::::://"//| 0 |//
  2084. +N+"        * float( mam_wid ) //:DST/DEST/[B]:::::://"//| 0 |//
  2085. +N+"        / float( vpc_wid ) //:SRC/FROM/[A]:::::://"//| 0 |//
  2086. +N+"    );;                                         //"//| 0 |//
  2087. +N+"                                                //"//| 0 |//
  2088. +N+"    float vpc_mty_mam =(1.0//:[A]----->[B]:::::://"//| 0 |//
  2089. +N+"        * float( mam_hig ) //:DST/DEST/[B]:::::://"//| 0 |//
  2090. +N+"        / float( vpc_hig ) //:SRC/FROM/[A]:::::://"//| 0 |//
  2091. +N+"    );;                                         //"//| 0 |//
  2092.  
  2093.  
  2094.  
  2095.  
  2096.  
  2097. +N+"                                                //"//| 0 |//
  2098. +N+"                                                //"//| 0 |//
  2099. +N+" // uvec4 intrgba = Get_Tex_mam_mem_rot         //"//| 0 |//
  2100. +N+" // uvec4 intrgba = Get_Tex_hot_mem             //"//| 0 |//
  2101. +N+"    uvec4 intrgba = Get_Tex_iso_mem             //"//| 0 |//
  2102. +N+"    (                                           //"//| 0 |//
  2103. +N+"    /**/ I( F(vpc_p_x) * vpc_mtx_iso )          //"//| 0 |//                        
  2104. +N+"    ,    I( F(vpc_p_y) * vpc_mty_iso )          //"//| 0 |//                        
  2105. +N+"    );;                                         //"//| 0 |//
  2106. +N+"                                                //"//| 0 |//
  2107. +N+"    //- uvec4 intrgba = Get_Tex_iso_mem_rot(   -//"//| 0 |//  
  2108. +N+"    //- /**/ I( F(vpc_p_x) * vpc_mto_mam )     -//"//| 0 |//                              
  2109. +N+"    //- ,    I( F(vpc_p_y) * vpc_mto_mam )     -//"//| 0 |//                              
  2110. +N+"    //- );;                                    -//"//| 0 |//
  2111. +N+"                                                  "//| 0 |//
  2112. +N+"    #undef  F  //:----:FFFFFFFFFFFFFFFFFFFFFFFF://"//| 0 |//
  2113. +N+"    #undef  I  //:----:IIIIIIIIIIIIIIIIIIIIIIII://"//| 0 |//
  2114. +N+"                                                //"//| 0 |//
  2115. +N+"    r = float( intrgba.x ) / 255.0;             //"//| 0 |//
  2116. +N+"    g = float( intrgba.y ) / 255.0;             //"//| 0 |//
  2117. +N+"    b = float( intrgba.z ) / 255.0;             //"//| 0 |//
  2118. +N+"    a = float( intrgba.w ) / 255.0;             //"//| 0 |//
  2119. +N+"                                                //"//| 0 |//
  2120. +N+"    pix_fra = vec4( r,g,b,a);                   //"//| 0 |//
  2121. +N+"                                                //"//| 0 |//
  2122. +N+"}else                                           //"//| 0 |//
  2123. +N+"if( ren_mod > uint(0) ){ //:///////////////////://"//+ 0 +//
  2124. +N+"//:AE:All_Editors:VarAccessibleToAnyEdi:(BELOW)://"//[A_E]//
  2125. +N+"//:AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE://"//[A_E]//
  2126. +N+"                                                  "//[A_E]//
  2127. +N+"    //:VR:ViewPortRectangles:                     "//[A_E]//
  2128. +N+"    //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://"//[A_E]//
  2129. +N+"    #define F float       //:FFFFFFFFFFFFFFFFFF://"//[A_E]//
  2130. +N+"    #define T TAU_001_U32 //:TTTTTTTTTTTTTTTTTT://"//[A_E]//
  2131. +N+"    REC_INC rec_vpc = REC_INC(                    "//[A_E]//
  2132. +N+"        F( T( TAU_001_GLOBVAR_rec_vpc_x_0 ) )     "//[A_E]//
  2133. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vpc_x_1 ) )     "//[A_E]//
  2134. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vpc_y_0 ) )     "//[A_E]//
  2135. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vpc_y_1 ) )     "//[A_E]//
  2136. +N+"    );;                                           "//[A_E]//
  2137. +N+"    REC_INC rec_vp0 = REC_INC(                    "//[A_E]//
  2138. +N+"        F( T( TAU_001_GLOBVAR_rec_vp0_x_0 ) )     "//[A_E]//
  2139. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vp0_x_1 ) )     "//[A_E]//
  2140. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vp0_y_0 ) )     "//[A_E]//
  2141. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vp0_y_1 ) )     "//[A_E]//
  2142. +N+"    );;                                           "//[A_E]//
  2143. +N+"    REC_INC rec_vp1 = REC_INC(                    "//[A_E]//
  2144. +N+"        F( T( TAU_001_GLOBVAR_rec_vp1_x_0 ) )     "//[A_E]//
  2145. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vp1_x_1 ) )     "//[A_E]//
  2146. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vp1_y_0 ) )     "//[A_E]//
  2147. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vp1_y_1 ) )     "//[A_E]//
  2148. +N+"    );;                                           "//[A_E]//
  2149. +N+"    REC_INC rec_vp2 = REC_INC(                    "//[A_E]//
  2150. +N+"        F( T( TAU_001_GLOBVAR_rec_vp2_x_0 ) )     "//[A_E]//
  2151. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vp2_x_1 ) )     "//[A_E]//
  2152. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vp2_y_0 ) )     "//[A_E]//
  2153. +N+"    ,   F( T( TAU_001_GLOBVAR_rec_vp2_y_1 ) )     "//[A_E]//
  2154. +N+"    );;                                           "//[A_E]//
  2155. +N+"    #undef  F  //://////////:FFFFFFFFFFFFFFFFFF://"//[A_E]//
  2156. +N+"    #undef  T  //://////////:TTTTTTTTTTTTTTTTTT://"//[A_E]//
  2157. +N+"    //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://"//[A_E]//
  2158. +N+"                                                  "//[A_E]//
  2159. +N+"//:AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE://"//[A_E]//
  2160. +N+"//:AE:All_Editors:VarAccessibleToAnyEdi:(ABOVE)://"//[A_E]//
  2161. +N+                                                    //|FSC|//
  2162. +N+";;;;;;if( uint(0) == edi_mod ){  //:00000000000://"//|FSC|//
  2163. +N+""+AA2_Get_edi_sha_src(    0    )+"      "//|FSC|//    
  2164. +N+""                                                  //|FSC|//
  2165. +N+"}else if( uint(1) == edi_mod ){  //:11111111111://"//|FSC|//
  2166. +N+""+AA2_Get_edi_sha_src(    1    )+"      "//|FSC|//    
  2167. +N+""                                                  //|FSC|//
  2168. +N+"}else if( uint(2) == edi_mod ){  //:22222222222://"//|FSC|//
  2169. +N+""+AA2_Get_edi_sha_src(    2    )+"      "//|FSC|//    
  2170. +N+""                                                  //|FSC|//
  2171. +N+"}else if( uint(3) == edi_mod ){  //:33333333333://"//|FSC|//
  2172. +N+""+AA2_Get_edi_sha_src(    3    )+"      "//|FSC|//
  2173. +N+""                                                  //|FSC|//
  2174. +N+"};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"//|FSC|//
  2175. +N+"};;};;}//:[main]://////////////////////////////://"//|FSC|//
  2176. );;//:its_a_string
  2177.  
  2178.     var fra_src=(""/**fra:[ fragment / fag_src ]**/          
  2179.  
  2180.         + its_a_string
  2181.  
  2182.     );;//:[fra_src]/////////////////////////////////[fra_src]://
  2183.     //://///////////////////////////////////SC[ icogstep_01 ]://
  2184.     //://///////////////////////////////////SC[ icogstep_02 ]://
  2185.     var can_htm = document.createElement('canvas' /** can **/ );
  2186.     var bod =( document.body );
  2187.     if(!bod){
  2188.         bod = document.createElement("BODY");
  2189.         document.body=( bod );  
  2190.     };;
  2191.     document.body.appendChild( can_htm );
  2192.     //://///////////////////////////////////SC[ icogstep_02 ]://
  2193.     //:////////////////////////////////////:SC[ icogstep_03 ]://
  2194.         can_htm.width =( GLO_CFG.INI_VPC_WID ); //:[ 512 ]
  2195.         can_htm.height=( GLO_CFG.INI_VPC_HIG ); //:[ 512 ]  
  2196.     //:////////////////////////////////////:SC[ icogstep_03 ]://
  2197.     //://///////////////////////////////////SC[ icogstep_04 ]://
  2198.     var gl =(0
  2199.     ||      can_htm.getContext("webgl2")
  2200.     //: These context types likely wont support gl 300 es.
  2201.     //: so commenting them out.
  2202.     //: ||      can_htm.getContext("webgl")
  2203.     //: ||      can_htm.getContext("experimental-webgl")
  2204.     ||      alert("[NO_GL_FOR_YOU]")
  2205.     );;//://///////////////////////////////:SC[ icogstep_04 ]://
  2206.     //:////////////////////////////////////:SC[ icogstep_05 ]://
  2207.     var GL_CLEARCOLOR={
  2208.         //:Named     "COLOR_BUFFER_BIT" but is not
  2209.         //:the       "COLOR_BUFFER_BIT" but the color used when
  2210.         //:supplying "COLOR_BUFFER_BIT"
  2211.         COLOR_BUFFER_BIT:{ /**CLEARCOLOR.COLOR_BUFFER **/
  2212.             R: 255
  2213.         ,   G: 128
  2214.         ,   B:  64
  2215.         ,   A: 255
  2216.         }
  2217.         ,
  2218.         //:Named     "DEPTH_BUFFER_BIT" but is not
  2219.         //:the       "DEPTH_BUFFER_BIT" but the color used when
  2220.         //:supplying "DEPTH_BUFFER_BIT"
  2221.         DEPTH_BUFFER_BIT:{ /**CLEARCOLOR.DEPTH_BUFFER **/
  2222.             R:   0
  2223.         ,   G:   0
  2224.         ,   B:   0
  2225.         ,   A: 255
  2226.         }
  2227.     };;Object.seal( GL_CLEARCOLOR );
  2228.    
  2229.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  2230.         //:Clear Color Buffer:
  2231.         gl.clearColor( /** glClearColor **/
  2232.             GL_CLEARCOLOR.COLOR_BUFFER_BIT.R
  2233.         ,   GL_CLEARCOLOR.COLOR_BUFFER_BIT.G
  2234.         ,   GL_CLEARCOLOR.COLOR_BUFFER_BIT.B
  2235.         ,   GL_CLEARCOLOR.COLOR_BUFFER_BIT.A
  2236.         );;
  2237.         gl.clear( 0
  2238.         |   gl.COLOR_BUFFER_BIT  
  2239.         );;
  2240.    
  2241.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  2242.    
  2243.         //:Clear Depth Buffer:
  2244.         gl.clearColor( /** glClearColor **/
  2245.             GL_CLEARCOLOR.DEPTH_BUFFER_BIT.R
  2246.         ,   GL_CLEARCOLOR.DEPTH_BUFFER_BIT.G
  2247.         ,   GL_CLEARCOLOR.DEPTH_BUFFER_BIT.B
  2248.         ,   GL_CLEARCOLOR.DEPTH_BUFFER_BIT.A
  2249.         );;
  2250.         gl.clear( 0
  2251.         |   gl.DEPTH_BUFFER_BIT  
  2252.         );;
  2253.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  2254.    
  2255.     //:////////////////////////////////////:SC[ icogstep_05 ]://
  2256.     //://///////////////////////////////////SC[ icogstep_06 ]://
  2257.  
  2258.     //: ver_pro:VERtex___PROgram / ver_pog / vtx_pog
  2259.     //: fra_pro:FRAgment_PROgram / fag_pog / frg_pog
  2260.     var ver_pro = gl.createShader( gl.  VERTEX_SHADER );
  2261.     var fra_pro = gl.createShader( gl.FRAGMENT_SHADER );
  2262.  
  2263.     //:Shader_Pack: (AKA: sad_pak | sad_pay | sha_pay )
  2264.     //:Shader_Pack: (AKA: Shader Payload ____________ )
  2265.     var sha_pak=[
  2266.         {   //:AKA[ sad_typ,sad_src,sad_pro,sad_pog ]
  2267.             //:AKA[ ver_sad,ver_sor,ver_pog,vtx_pog ]
  2268.             sha_typ:"ver_sha" //:Shader_Type    :Vertex
  2269.         ,   sha_src: ver_src  //:Shader_Source
  2270.         ,   sha_pro: ver_pro  //:Shader_Program
  2271.         }
  2272.         ,
  2273.         {
  2274.             //:AKA[ sad_typ,sad_src,sad_pro,sad_pog ]
  2275.             //:AKA[ fag_sad,fag_sor,fag_pog,frg_pog ]
  2276.             sha_typ:"fra_sha" //:Shader_Type    :Fragment
  2277.         ,   sha_src: fra_src  //:Shader_Source
  2278.         ,   sha_pro: fra_pro  //:Shader_Program
  2279.         }
  2280.     ];;
  2281.     for( i = 0; i < sha_pak.length; i++ ){
  2282.         var sha_cur = ( sha_pak[ i ] ); //:ShaderCurrent
  2283.  
  2284.         gl.shaderSource(
  2285.             sha_cur.sha_pro //:[ver_pro | fra_pro ]::::::://
  2286.         ,   sha_cur.sha_src //:[ver_src | fra_src ]::::::://
  2287.         );;
  2288.    
  2289.         gl.compileShader( sha_cur.sha_pro );
  2290.    
  2291.         if( false
  2292.             ==
  2293.             gl.getShaderParameter(
  2294.                 sha_cur.sha_pro //:[ ver_pro | fra_pro ]:://
  2295.             ,   gl.COMPILE_STATUS
  2296.             )
  2297.         ){
  2298.             var inf_log=( gl.getShaderInfoLog(
  2299.    
  2300.                 sha_cur.sha_pro //:[ ver_pro | fra_pro ]:://
  2301.    
  2302.             ));;
  2303.             console.log( inf_log /** info_log **/ );
  2304.             throw( "[ICOG_JS:COMPILE_SHADER_FAILURE]" );
  2305.         };;
  2306.     };;//:NEXT[ sha_cur ]
  2307.  
  2308.     //://///////////////////////////////////SC[ icogstep_06 ]://
  2309.     //://///////////////////////////////////SC[ icogstep_07 ]://
  2310.     var all_pro = gl.createProgram();    //:AKA[ all_pog ]
  2311.     gl.attachShader( all_pro, ver_pro ); //:Vertex___Program
  2312.     gl.attachShader( all_pro, fra_pro ); //:Fragment_Program
  2313.  
  2314.     gl.linkProgram( all_pro );
  2315.     if( false
  2316.         ==
  2317.         gl.getProgramParameter(all_pro,gl.LINK_STATUS)
  2318.     ){
  2319.         var inf_log=( gl.getProgramInfoLog(
  2320.        
  2321.             all_pro
  2322.        
  2323.         ));;
  2324.         console.log( inf_log /** info_log **/ );
  2325.         throw( "[ICOG_JS:LINK_PROGRAM_FAILURE]" );
  2326.     };;
  2327.     gl.validateProgram( all_pro ); //:AKA[ all_pog ]
  2328.     if(false
  2329.         ==
  2330.         gl.getProgramParameter(all_pro,gl.VALIDATE_STATUS)
  2331.     ){
  2332.         var inf_log=( gl.getProgramInfoLog(
  2333.        
  2334.             all_pro
  2335.        
  2336.         ));;
  2337.         console.log( inf_log /** info_log **/ );
  2338.         throw( "[ICOG_JS:PROGRAM_VALIDATION_FAILURE]" );
  2339.     };;
  2340.     //://///////////////////////////////////SC[ icogstep_07 ]://
  2341.     //://///////////////////////////////////SC[ icogstep_08 ]://
  2342.  
  2343.     //: Create vertex data CPU side:
  2344.  
  2345.     var RGBGRA =[ 0.5 , 0.5 , 0.5 ]; //:GREY
  2346.     var RGB__W =[ 1.0 , 1.0 , 1.0 ]; //:WHITE
  2347.     var RGB__K =[ 0.0 , 0.0 , 0.0 ]; //:BLACK
  2348.  
  2349.     var RGB__R =[ 1.0 , 0.0 , 0.0 ]; //:RED
  2350.     var RGB__G =[ 0.0 , 1.0 , 0.0 ]; //:GREEN
  2351.     var RGB__B =[ 0.0 , 0.0 , 1.0 ]; //:BLUE
  2352.  
  2353.     var RGB__M =[ 1.0 , 0.0 , 1.0 ]; //:MAGENTA(RED+BLUE)
  2354.     var RGB__Y =[ 1.0 , 1.0 , 0.0 ]; //:YELLOW(   R+G   )
  2355.     var RGBCEN =[ 0.5,  0.5 , 0.0 ]; //:HALF:(BLUE & RED)
  2356.  
  2357.     var RGB_00= RGBCEN;             //:B:TRI:CEN [ 0 , 0 ]
  2358.     var RGB_01= RGB__R;             //:R:TRI:TOP [ + , + ]
  2359.     var RGB_02= RGB__K;             //:W:TRI:TOP [ - , + ]
  2360.     var RGB_03= RGB__G;             //:B:TRI:LEF [ - , - ]
  2361.     var RGB_04= RGB__Y;             //:M:TRI:BOT [ + , - ]
  2362.     var RGB_05= RGB__R;             //:R:TRI:BOT [ + , + ]
  2363.  
  2364.     var ZER =(0 * 0.0);
  2365.     var POS =(0 + 1.0);
  2366.     var NEG =(0 - 1.0);
  2367.     var CEN =(0 * 0.0);
  2368.     var tri_arr =[ //: AKA[ arr_ver|arr_tri|ver_arr|tri_arr]
  2369.  
  2370.         //:CENTER_VERTEX_IN_CENTER_OF_SCREEN:
  2371.         CEN, CEN   , RGB_00[0], RGB_00[1],RGB_00[2]
  2372.  
  2373.         //:TRI:TOP: (Via:TRIANGLE_FAN)
  2374.     ,   POS, POS   , RGB_01[0], RGB_01[1],RGB_01[2]
  2375.     ,   NEG, POS   , RGB_02[0], RGB_02[1],RGB_02[2]
  2376.  
  2377.         //:TRI:LEF: (Via:TRIANGLE_FAN)
  2378.     ,   NEG, NEG   , RGB_03[0], RGB_03[1],RGB_03[2]    
  2379.  
  2380.         //:TRI:BOT: (Via:TRIANGLE_FAN)
  2381.     ,   POS, NEG   , RGB_04[0], RGB_04[1],RGB_04[2]  
  2382.  
  2383.         //:TRI:BOT: (Via:TRIANGLE_FAN)
  2384.     ,   POS, POS   , RGB_05[0], RGB_05[1],RGB_05[2]  
  2385.     ];;
  2386.     var tri_f3a =( new Float32Array( tri_arr ) );
  2387.    
  2388.     //://///////////////////////////////////SC[ icogstep_08 ]://
  2389.     //://///////////////////////////////////SC[ icogstep_09 ]://
  2390.  
  2391.     //: Upload data to GPU:
  2392.  
  2393.     //: [ ver_vbo === tri_vbo ]
  2394.     var tri_vbo = gl.createBuffer( ); //:vbo:VertexBufferObject
  2395.     gl.bindBuffer(gl.ARRAY_BUFFER,tri_vbo);
  2396.     gl.bufferData(gl.ARRAY_BUFFER,tri_f3a,gl.STATIC_DRAW);
  2397.  
  2398.     //://///////////////////////////////////SC[ icogstep_09 ]://
  2399.     //://///////////////////////////////////SC[ icogstep_10 ]://
  2400.  
  2401.  
  2402.     var NUM_COM,SIZ_COM,ver_pos,ver_col;
  2403.     { //:ANY_ORDER
  2404.  
  2405.         //:Define the data-layout for [ tri_arr / tri_f3a ]:
  2406.         NUM_COM={ //:NumberOfComponentsPer:whatever
  2407.             ver_pos : 2 //:NumComponentsFor:VertexPosition
  2408.         ,   ver_col : 3 //:NumComponentsFor:VertexColor
  2409.         ,   ver_all : 5
  2410.         };;
  2411.         SIZ_COM={ //:Component_Sizes
  2412.             siz_flt : Float32Array.BYTES_PER_ELEMENT
  2413.         };;
  2414.  
  2415.         //: att_loc(s):
  2416.         ver_pos = gl.getAttribLocation(all_pro,"ver_pos");
  2417.         ver_col = gl.getAttribLocation(all_pro,"ver_col");
  2418.  
  2419.     } //:ANY_ORDER
  2420.     //://///////////////////////////////////SC[ icogstep_10 ]://
  2421.     //://///////////////////////////////////SC[ icogstep_11 ]://
  2422.     if(
  2423.         (0
  2424.         +   NUM_COM.ver_pos
  2425.         +   NUM_COM.ver_col
  2426.         )
  2427.         !=
  2428.             NUM_COM.ver_all
  2429.     ){
  2430.         throw("[DOESNT_ADD_UP]");
  2431.     };;
  2432.     //://///////////////////////////////////SC[ icogstep_11 ]://
  2433.     //://///////////////////////////////////SC[ icogstep_12 ]://
  2434.     { //:ANY_ORDER
  2435.  
  2436.         gl.vertexAttribPointer(
  2437.                     ver_pos
  2438.         ,   NUM_COM.ver_pos  /** components_per_vertex    **/
  2439.         ,   gl.FLOAT
  2440.         ,   gl.FALSE
  2441.         ,  
  2442.             (   1 //:ENTIRE_VERTEX_SIZE_NOT_JUST_SUB_COMPONENT
  2443.             *   NUM_COM.ver_all  //:NumberOfVerticies
  2444.             *   SIZ_COM.siz_flt  //:SizeOfVerticies
  2445.             *   1
  2446.             )
  2447.         ,   0         /** initial_offset_into_data **/
  2448.         );;
  2449.  
  2450.         gl.vertexAttribPointer(
  2451.                     ver_col
  2452.         ,   NUM_COM.ver_col  /** components_per_vertex    **/
  2453.         ,   gl.FLOAT
  2454.         ,   gl.FALSE
  2455.         ,  
  2456.             (   1 //:ENTIRE_VERTEX_SIZE_NOT_JUST_SUB_COMPONENT
  2457.             *   NUM_COM.ver_all  //:NumberOfVerticies
  2458.             *   SIZ_COM.siz_flt  //:SizeOfVerticies
  2459.             *   1
  2460.             )
  2461.         ,  
  2462.             //:Skipping over slots for : ver_pos
  2463.             //:so we can start at first: ver_col
  2464.             /** initial_offset_into_data **/
  2465.             (1
  2466.              *   NUM_COM.ver_pos  //:OFFSET_IN_BYTES
  2467.              *   SIZ_COM.siz_flt  //:OFFSET_IN_BYTES
  2468.             )
  2469.         );;
  2470.  
  2471.     } //:ANY_ORDER
  2472.     //://///////////////////////////////////SC[ icogstep_12 ]://
  2473.     //://///////////////////////////////////SC[ icogstep_13 ]://
  2474.  
  2475.     { //:ANY_ORDER
  2476.         gl.enableVertexAttribArray( ver_pos /**  att_loc  **/ );
  2477.         gl.enableVertexAttribArray( ver_col /**  att_loc  **/ );
  2478.     } //:ANY_ORDER
  2479.  
  2480.     gl.useProgram( all_pro /** all_pog **/ );  
  2481.  
  2482.             //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
  2483.             //|Added this just in case gl context was not    |//
  2484.             //|same size as viewport. This call seems to have|//
  2485.             //|no effect. CONCLUSION: gl Context snaps to    |//
  2486.             //|canvas size when created.                     |//
  2487.             //|______________________________________________|//
  2488.             var can_wid = can_htm.width;
  2489.             var can_hig = can_htm.height;
  2490.  
  2491.             //:DATE[2020_05_24]:ERROR_CHECK:////:////////////://
  2492.             //://////////////////////////////////////////////://    
  2493.             //:SEE[ #CANVAS_SIZE_TROUBLE_SHOOTING# ]
  2494.             if( GLO_CFG.INI_VPC_WID != can_htm.width  
  2495.             ||  GLO_CFG.INI_VPC_HIG != can_htm.height
  2496.             ){
  2497.                 throw("[NOPE_NOPE:2020_05_24]");
  2498.             };;
  2499.             //://////////////////////////////////////////////://
  2500.  
  2501.             gl.viewport(
  2502.                 0  //:--------------  x  --------------------://
  2503.             ,   0  //:--------------  y  --------------------://
  2504.             ,   GLO_CFG.INI_VPC_WID //:[ can_htm.WID | can_wid ]
  2505.             ,   GLO_CFG.INI_VPC_HIG //:[ can_htm.HIG | can_hig ]
  2506.             );;
  2507.  
  2508.             var buf_wid = gl.drawingBufferWidth;
  2509.             var buf_hig = gl.drawingBufferHeight;
  2510.            
  2511.             var size_fail=( 0 );
  2512.             if( can_wid != buf_wid ){
  2513.                 size_fail++;
  2514.                 console.log("[buf_wid!=can_wid]");
  2515.             };;
  2516.             if( can_hig != buf_hig ){
  2517.                 size_fail++;
  2518.                 console.log("[buf_hig!=can_hig]");
  2519.             };;
  2520.             if( size_fail > 0 ){
  2521.                 throw("[size_fail]");
  2522.             }else{
  2523.                 console.log("[size_pass]");
  2524.             };;
  2525.  
  2526.             //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
  2527.    
  2528.  
  2529.     gl.drawArrays(
  2530.         gl.TRIANGLE_FAN
  2531.     ,   0
  2532.     ,   6
  2533.     );;
  2534.     //://///////////////////////////////////SC[ icogstep_13 ]://
  2535.  
  2536.     //:Reserve variables on GPU  
  2537.     //:side and return handles to them:
  2538.     //:[ ada_gra.iso_mem === GLO_DAT.ISO_MEM ]
  2539.     //:[ ada_gra.mam_mem === GLO_DAT.MAM_MEM ]
  2540.     ada_gra.iso_mem.tex_han = gl.createTexture(); //:uni_pix
  2541.     ada_gra.mam_mem.tex_han = gl.createTexture(); //:uni_pix
  2542.  
  2543.     var dat_arr = [
  2544.            ada_gra.iso_mem //:<---type:uni_pix
  2545.         //:GLO_DAT.ISO_MEM
  2546.         //:   {
  2547.         //:       tex_han  :  GLO_DAT.ISO_MEM_tex_han
  2548.         //:   ,   tex_lot  :  GLO_DAT.ISO_MEM_tex_lot
  2549.         //:   ,   pix_arr  :  GLO_DAT.ISO_MEM_pix_arr
  2550.         //:   ,   pix_wid  :  GLO_DAT.ISO_MEM_pix_wid | SAN_ISO
  2551.         //:   ,   pix_hig  :  GLO_DAT.ISO_MEM_pix_hig | SAN_ISO
  2552.         //:   ,   pix_com  :  4         //:pixelarray_components
  2553.         //:   ,   pix_nam  : "iso_mem"  //:pixelarray_name
  2554.         //:   ,   sam_val  : ( 0 -  8 ) //:sampler_value
  2555.         //:   ,   sam_loc  : ( 0 -  9 ) //:sampler_location
  2556.         //:   ,   has_loc  : ( 0 - 10 ) //:sampler_location_set
  2557.         //:   }
  2558.         ,
  2559.            ada_gra.mam_mem //:<---type:uni_pix
  2560.         //:GLO_DAT.MAM_MEM
  2561.         //:   {
  2562.         //:       tex_han  :  GLO_DAT.MAM_MEM_tex_han
  2563.         //:   ,   tex_lot  :  GLO_DAT.MAM_MEM_tex_lot
  2564.         //:   ,   pix_arr  :  GLO_DAT.MAM_MEM_pix_arr
  2565.         //:   ,   pix_wid  :  GLO_DAT.MAM_MEM_pix_wid | SAN_MAM
  2566.         //:   ,   pix_hig  :  GLO_DAT.MAM_MEM_pix_hig | SAN_MAM
  2567.         //:   ,   pix_com  :  4         //:pixelarray_components
  2568.         //:   ,   pix_nam  : "mam_mem"  //:pixelarray_name
  2569.         //:   ,   sam_val  : ( 0 -  8 ) //:sampler_value
  2570.         //:   ,   sam_loc  : ( 0 -  9 ) //:sampler_location
  2571.         //:   ,   has_loc  : ( 0 - 10 ) //:sampler_location_set
  2572.         //:   }
  2573.     ];;
  2574.    
  2575.     var dat_len = ( dat_arr.length );
  2576.  
  2577.     //:Validate the data in dat_arr:
  2578.     for( var i = 0 ; i < dat_len ; i++ ){
  2579.  
  2580.         if( dat_arr[ i ].pix_wid <= 0 ){
  2581.             throw("[INVALID:pix_wid]");
  2582.         };;
  2583.         if( dat_arr[ i ].pix_hig <= 0 ){
  2584.             throw("[INVALID:pix_hig]");
  2585.         };;
  2586.         if( dat_arr[ i ].pix_com <= 0 ){ //:AKA[ num_com ]
  2587.             throw("[INVALID:pix_com]");
  2588.         };;
  2589.  
  2590.         //://////////////////////////////////////////////////://
  2591.         //:Expect data for pixel array to already be
  2592.         //:allocated, even if we haven't put any
  2593.         //:meaningful values into it yet.
  2594.         //://////////////////////////////////////////////////://
  2595.         var cur_pix_wid = dat_arr[ i ].pix_wid;
  2596.         var cur_pix_hig = dat_arr[ i ].pix_hig;
  2597.         var cur_pix_com = dat_arr[ i ].pix_com; //:AKA[num_com]
  2598.  
  2599.         var exp_len=( 1
  2600.         *   cur_pix_wid
  2601.         *   cur_pix_hig
  2602.         *   cur_pix_com //:AKA[ cur_num_com ]
  2603.         );;
  2604.         var got_len=( dat_arr[ i ].pix_arr.length );
  2605.         if( got_len != exp_len ){
  2606.             var err_dmm = ( "[ERR:DATA_MISMATCH]" );
  2607.             console.log( err_dmm );
  2608.             throw(       err_dmm );
  2609.         };;
  2610.         //://////////////////////////////////////////////////://
  2611.  
  2612.     };;
  2613.  
  2614.     for( var i = 0 ; i < dat_len ; i++ ){
  2615.  
  2616.         var uni_pix =( dat_arr[ i ] );
  2617.  
  2618.         AA2_DebugFillPattern_Pyramid( uni_pix );
  2619.  
  2620.         if( uni_pix.pix_nam == "mam_mem" ){
  2621.  
  2622.             //:TODO: Fill areas of interest with patterns
  2623.             //:that can be located in shader code.
  2624.  
  2625.         //: //:FILL_FIRST_TO_NOT_OVERWRITE_OUTLINE:
  2626.         //: AA2_DebugFillPattern_FloodFill(
  2627.         //:     uni_pix
  2628.         //:
  2629.         //: ,   GLO_CFG.TAU_001_x0 //:( x_0 )TOP_LEF:INCLUSIVE
  2630.         //: ,   GLO_CFG.TAU_001_y0 //:( y_0 )TOP_LEF:INCLUSIVE
  2631.         //:
  2632.         //: ,   GLO_CFG.TAU_001_x1 //:( x_1 )BOT_RIG:INCLUSIVE
  2633.         //: ,   GLO_CFG.TAU_001_y1 //:( y_1 )BOT_RIG:INCLUSIVE
  2634.         //: );;
  2635.              
  2636.             //:OUTLINE_AFTER_FILL_TO_OVERLAY_THE_OUTLINE:
  2637.             AA2_DebugFillPattern_OnePixelSolidOutline(
  2638.                 uni_pix //:uniform_pixels (PixelContainer)
  2639.  
  2640.             ,   GLO_CFG.TAU_001_x0 //:( x_0 )TOP_LEF:INCLUSIVE
  2641.             ,   GLO_CFG.TAU_001_y0 //:( y_0 )TOP_LEF:INCLUSIVE
  2642.  
  2643.             ,   GLO_CFG.TAU_001_x1 //:( x_1 )BOT_RIG:INCLUSIVE
  2644.             ,   GLO_CFG.TAU_001_y1 //:( y_1 )BOT_RIG:INCLUSIVE
  2645.             );;
  2646.  
  2647.             //:Outline the bottom-right memorycell:
  2648.             var tmp_rec = NEW_rec_inc( ); //:<--DeclareFileScoped
  2649.             tmp_rec.x_0 =(( GLO_CFG.SAN_ISO * 3 ) - 0) ;
  2650.             tmp_rec.y_0 =(( GLO_CFG.SAN_ISO * 3 ) - 0) ;
  2651.             tmp_rec.x_1 =(( GLO_CFG.SAN_ISO * 4 ) - 1) ;
  2652.             tmp_rec.y_1 =(( GLO_CFG.SAN_ISO * 4 ) - 1) ;
  2653.             AA2_DebugFillPattern_OnePixelSolidOutline(
  2654.                 uni_pix //:uniform_pixels (PixelContainer)
  2655.  
  2656.             ,   tmp_rec.x_0 + 0 //:( x_0 )BOU_LEF:(Top_Lef)
  2657.             ,   tmp_rec.y_0 + 0 //:( y_0 )BOU_TOP:(Top_Lef)
  2658.             ,   tmp_rec.x_1 - 0 //:( x_1 )BOU_RIG:(Bot_Rig)
  2659.             ,   tmp_rec.y_1 - 0 //:( y_1 )TOP_BOT:(Bot_Rig)
  2660.             );;
  2661.  
  2662.             AA2_DebugFillPattern_OnePixelSolidOutline(
  2663.                 uni_pix //:uniform_pixels (PixelContainer)
  2664.  
  2665.             ,   tmp_rec.x_0 + 2 //:( x_0 )BOU_LEF:(Top_Lef)
  2666.             ,   tmp_rec.y_0 + 2 //:( y_0 )BOU_TOP:(Top_Lef)
  2667.             ,   tmp_rec.x_1 - 2 //:( x_1 )BOU_RIG:(Bot_Rig)
  2668.             ,   tmp_rec.y_1 - 2 //:( y_1 )TOP_BOT:(Bot_Rig)
  2669.             );;
  2670.  
  2671.             AA2_DebugFillPattern_OnePixelSolidOutline(
  2672.                 uni_pix //:uniform_pixels (PixelContainer)
  2673.  
  2674.             ,   tmp_rec.x_0 + 16 //:( x_0 )BOU_LEF:(Top_Lef)
  2675.             ,   tmp_rec.y_0 + 16 //:( y_0 )BOU_TOP:(Top_Lef)
  2676.             ,   tmp_rec.x_1 - 16 //:( x_1 )BOU_RIG:(Bot_Rig)
  2677.             ,   tmp_rec.y_1 - 16 //:( y_1 )TOP_BOT:(Bot_Rig)
  2678.             );;
  2679.  
  2680.             aa2_PutPixelOfInterest(
  2681.                 uni_pix
  2682.             ,   tmp_rec.x_0
  2683.             ,   tmp_rec.y_0
  2684.             );;
  2685.  
  2686.  
  2687.         }else
  2688.         if( uni_pix.pix_nam == "iso_mem" ){
  2689.  
  2690.             //:Do nothing.
  2691.  
  2692.         }else{
  2693.  
  2694.             throw(
  2695.                 "[UNKNOWN_MEMORY_REGION_NAME]:"
  2696.                 +"(((" +((( uni_pix.pix_nam )))+ ")))"
  2697.             );;
  2698.  
  2699.         };;
  2700.  
  2701.  
  2702.     };; //:NEXT[ i ]:::::::::::::::::::::::::::::::::::::::::://
  2703.  
  2704.  
  2705.     //:BootStrapping_Uniforms:
  2706.     //:These_lay_the_foundational_structure_of_engine:
  2707.     //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS====://
  2708.     ada_gra.has_mem = NEW_uni_u32( );                 //: -- ://
  2709.     ada_gra.has_mem.varlock.u32_nam = ( "has_mem" );  //: 01 ://
  2710.                                                       //: -- ://
  2711.     ada_gra.ren_mod = NEW_uni_u32( );                 //: -- ://
  2712.     ada_gra.ren_mod.varlock.u32_nam = ( "ren_mod" );  //: 02 ://
  2713.                                                       //: -- ://
  2714.     ada_gra.edi_mod = NEW_uni_u32( );                 //: -- ://
  2715.     ada_gra.edi_mod.varlock.u32_nam = ( "edi_mod" );  //: 03 ://
  2716.                                                       //: -- ://
  2717.     ada_gra.gam_tim = NEW_uni_u32( );                 //: -- ://
  2718.     ada_gra.gam_tim.varlock.u32_nam = ( "gam_tim" );  //: 04 ://
  2719.                                                       //: -- ://
  2720.     ada_gra.dex_hot = NEW_uni_u32( );                 //: -- ://
  2721.     ada_gra.dex_hot.varlock.u32_nam = ( "dex_hot" );  //: 05 ://
  2722.     //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS====://
  2723.  
  2724.     ada_gra.gpuvcon = NEW_GPUVCON();
  2725.     Object.seal( ada_gra.gpuvcon  );
  2726.  
  2727.     //:Populate Missing Components In Container:
  2728.     //://////////////////////////////////////://
  2729.     ada_gra.con_gra = gl     ;
  2730.     ada_gra.all_pro = all_pro;
  2731.     ada_gra.ver_pro = ver_pro;
  2732.     ada_gra.fra_pro = fra_pro;
  2733.     ada_gra.can_htm = can_htm;
  2734.     //://////////////////////////////////////://
  2735.  
  2736.     //:BELOW:DEPENDS_ON[ ada_gra.con_gra ]///////////////////://
  2737.     //:------------------------------------------------------://
  2738.  
  2739.         //:Flag textures as uploaded so shader code will
  2740.         //:know it can safely use them.
  2741.         //://////////////////////////////////////////////////://
  2742.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  2743.             //:[ 1==TRUE/ON/LOADED ]
  2744.             ada_gra.has_mem.u32_val =( 1 );
  2745.  
  2746.             ada_gra.gpuvcon.u32_put(
  2747.                 ada_gra
  2748.             ,   ada_gra.has_mem
  2749.             );;
  2750.  
  2751.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  2752.  
  2753.                     //:PERSIST:
  2754.                     //:     1: Textures        (pix_arr)
  2755.                     //:     2: TextureSamplers (sam_val)
  2756.  
  2757.                     //:- - - - - - - - - -- - - - - - - - - -://
  2758.  
  2759.                     ada_gra.gpuvcon.pix_put(
  2760.                         ada_gra
  2761.                     ,   ada_gra.iso_mem
  2762.                     );;
  2763.                    
  2764.                     //:- - - - - - - - - -- - - - - - - - - -://
  2765.                    
  2766.                     ada_gra.gpuvcon.pix_put(
  2767.                         ada_gra
  2768.                     ,   ada_gra.mam_mem
  2769.                     );;
  2770.  
  2771.                     //:- - - - - - - - - -- - - - - - - - - -://
  2772.  
  2773.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  2774.         //://////////////////////////////////////////////////://
  2775.  
  2776.     //:------------------------------------------------------://
  2777.     //:ABOVE:DEPENDS_ON[ ada_gra.con_gra ]///////////////////://
  2778.  
  2779.    
  2780.     return(         ada_gra );
  2781.  
  2782. };;//:///////////////////////////////////////////////////////://
  2783.  
  2784.     function aa2_PutPixelOfInterest(
  2785.         uni_pix, x_x, y_y
  2786.     ){
  2787.         var R =( 135 );//:UNIQUE_DIGITS
  2788.         var G =( 248 );//:UNIQUE_DIGITS
  2789.         var B =( 697 );//:UNIQUE_DIGITS
  2790.         var A =( 255 );
  2791.         AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
  2792.  
  2793.     };;
  2794.  
  2795.     function aa2_DebugFillPattern_FloodFill_PRIVATE(
  2796.         uni_pix
  2797.     ,   x_0  //:( x_0 )TOP_LEF:INCLUSIVE
  2798.     ,   y_0  //:( y_0 )TOP_LEF:INCLUSIVE
  2799.            
  2800.     ,   x_1  //:( x_1 )BOT_RIG:INCLUSIVE
  2801.     ,   y_1  //:( y_1 )BOT_RIG:INCLUSIVE
  2802.  
  2803.     ,   R    //:RED
  2804.     ,   G    //:GREEN
  2805.     ,   B    //:BLUE
  2806.     ,   A    //:ALPHA
  2807.     ){
  2808.         //:Invalid_If_Nan_Or_Negative:
  2809.         if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
  2810.             var msg = "[NAN_OR_NEG:(From:FloodFill:HID)]";
  2811.             console.log( msg );
  2812.             throw(       msg );
  2813.         };;
  2814.  
  2815.         for( var y_y = y_0; y_y <= y_1; y_y++ ){
  2816.         for( var x_x = x_0; x_x <= x_1; x_x++ ){
  2817.             AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
  2818.         };;};;
  2819.  
  2820.     };;
  2821.  
  2822.     function AA2_DebugFillPattern_FloodFill(
  2823.         uni_pix
  2824.     ,   x_0  //:( x_0 )TOP_LEF:INCLUSIVE
  2825.     ,   y_0  //:( y_0 )TOP_LEF:INCLUSIVE
  2826.            
  2827.     ,   x_1  //:( x_1 )BOT_RIG:INCLUSIVE
  2828.     ,   y_1  //:( y_1 )BOT_RIG:INCLUSIVE
  2829.     ){
  2830.         //:Invalid_If_Nan_Or_Negative:
  2831.         if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
  2832.             var msg = "[NAN_OR_NEG:2020_06_01:A]";
  2833.             console.log( msg );
  2834.             throw(       msg );
  2835.         };;
  2836.         var R =  64;
  2837.         var G =  64;
  2838.         var B = 128;
  2839.         var A = 255;
  2840.  
  2841.         aa2_DebugFillPattern_FloodFill_PRIVATE(
  2842.             uni_pix //:OBJ
  2843.         ,   x_0,y_0 //:MIN
  2844.         ,   x_1,y_1 //:MAX
  2845.         ,   R,G,B,A //:RGB
  2846.         );;
  2847.  
  2848.     };;
  2849.  
  2850.     function AA2_DebugFillPattern_FloodFill_Green(
  2851.         uni_pix
  2852.     ,   x_0  //:( x_0 )TOP_LEF:INCLUSIVE
  2853.     ,   y_0  //:( y_0 )TOP_LEF:INCLUSIVE
  2854.            
  2855.     ,   x_1  //:( x_1 )BOT_RIG:INCLUSIVE
  2856.     ,   y_1  //:( y_1 )BOT_RIG:INCLUSIVE
  2857.     ){
  2858.         //:Invalid_If_Nan_Or_Negative:
  2859.         if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
  2860.             var msg = "[NAN_OR_NEG:2020_06_01:B]";
  2861.             console.log( msg );
  2862.             throw(       msg );
  2863.         };;
  2864.  
  2865.         var R =  16;
  2866.         var G = 128;
  2867.         var B =  16;
  2868.         var A = 255;
  2869.  
  2870.         aa2_DebugFillPattern_FloodFill_PRIVATE(
  2871.             uni_pix //:OBJ
  2872.         ,   x_0,y_0 //:MIN
  2873.         ,   x_1,y_1 //:MAX
  2874.         ,   R,G,B,A //:RGB
  2875.         );;
  2876.     };;
  2877.  
  2878.  
  2879.     function AA2_DebugFillPattern_OnePixelSolidOutline(
  2880.         uni_pix //:uniform_pixles (PixelContainer)
  2881.  
  2882.     ,   x_0  //:( x_0 )TOP_LEF:INCLUSIVE
  2883.     ,   y_0  //:( y_0 )TOP_LEF:INCLUSIVE
  2884.            
  2885.     ,   x_1  //:( x_1 )BOT_RIG:INCLUSIVE
  2886.     ,   y_1  //:( y_1 )BOT_RIG:INCLUSIVE
  2887.     ){
  2888.         //:Invalid_If_Nan_Or_Negative:
  2889.         if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
  2890.             var msg = "[NAN_OR_NEG:2020_06_01:C]";
  2891.             console.log( msg );
  2892.             throw(       msg );
  2893.         };;
  2894.  
  2895.         var R = 128;
  2896.         var G = 128;
  2897.         var B = 128;
  2898.         var A = 255;
  2899.  
  2900.         var x_x = ( 0 - 5678 );
  2901.         var y_y = ( 0 - 6789 );
  2902.    
  2903.         //:Top and bottom lines:
  2904.         //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
  2905.              y_y = y_0;
  2906.         for( x_x = x_0; x_x <= x_1 ; x_x++ ){
  2907.  
  2908.             AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
  2909.            
  2910.         };;
  2911.              y_y = y_1;
  2912.         for( x_x = x_0; x_x <= x_1 ; x_x++ ){
  2913.  
  2914.             AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
  2915.  
  2916.         };;
  2917.         //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
  2918.  
  2919.         //:Left And Right Lines:
  2920.         //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
  2921.              x_x = x_0;
  2922.         for( y_y = y_0; y_y <= y_1; y_y++ ){
  2923.  
  2924.             AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
  2925.            
  2926.         };;
  2927.              x_x = x_1;
  2928.         for( y_y = y_0; y_y <= y_1; y_y++ ){
  2929.  
  2930.             AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
  2931.  
  2932.         };;
  2933.         //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
  2934.  
  2935.     };;
  2936.        
  2937.     //:PROCOOP[ uni_pix.PutPix.XY( R,G,B,A ) ]
  2938.     function AA2_uni_pix_PutPix_XY(
  2939.         uni_pix
  2940.     ,   R,G,B,A //:Colors as byte (0-255) values.
  2941.     ,   t_x,t_y //:XY_Coordinate_Of_Pixel
  2942.     ){
  2943.  
  2944.         //:Added_To_Make_Easier_To_See_In_Debugger:
  2945.         var pix_arr = uni_pix.pix_arr;
  2946.         var pix_wid = uni_pix.pix_wid;
  2947.         var pix_hig = uni_pix.pix_hig;
  2948.         var pix_com = uni_pix.pix_com;
  2949.        
  2950.         //:FORMULA[ XY_TO_INDEX-JAVASCRIPT ]:////:///////////://
  2951.         var pix_dex = t_x + ( pix_wid * t_y); //:SC[XYIP_JS]
  2952.         var com_dex = (  pix_dex * pix_com ); //:SC[XYIP_JS]
  2953.         //:FORMULA[ XY_TO_INDEX-JAVASCRIPT ]:////:///////////://
  2954.        
  2955.  
  2956.         uni_pix.pix_arr[ com_dex + 0 ] =((((   R   ))));
  2957.         uni_pix.pix_arr[ com_dex + 1 ] =((((   G   ))));
  2958.         uni_pix.pix_arr[ com_dex + 2 ] =((((   B   ))));
  2959.         uni_pix.pix_arr[ com_dex + 3 ] =((((   A   ))));
  2960.  
  2961.     };;
  2962.  
  2963.     function AA2_DebugFillPattern_Pyramid( uni_pix ){
  2964.  
  2965.         //:Added_To_Make_Easier_To_See_In_Debugger:
  2966.         var pix_arr = uni_pix.pix_arr;
  2967.         var pix_wid = uni_pix.pix_wid;
  2968.         var pix_hig = uni_pix.pix_hig;
  2969.         var pix_com = uni_pix.pix_com;
  2970.        
  2971.         //:Populate textures with bogus pattern for feedback:
  2972.         var pix_max =( pix_wid * pix_hig ) -1;
  2973.        
  2974.         if(! pix_max > 0 ){ throw("[BAD_PIX_MAX]"); };
  2975.        
  2976.         for( var pix_dex = 0 ; pix_dex <= pix_max ; pix_dex++ ){
  2977.        
  2978.        
  2979.             var com_dex = ( pix_dex * pix_com );
  2980.        
  2981.             var t_x =  pix_dex     % pix_wid ;
  2982.             var t_y = (pix_dex-t_x)/ pix_wid ;
  2983.        
  2984.             //:RG:Rectangular_Gradient_Formula:
  2985.             //:RGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRG://
  2986.             //:                                              ://
  2987.             //:     The shortest possible distance to        ://
  2988.             //:     any edge determines the pixel color.     ://
  2989.             //:                                              ://
  2990.             //:RGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRG://
  2991.             var x_0 = t_x;               //:DIST_FROM_SIDE:LEF
  2992.             var x_1 = pix_wid - 1 - t_x; //:DIST_FROM_SIDE:RIG
  2993.            
  2994.             var y_0 = t_y;               //:DIST_FROM_SIDE:TOP
  2995.             var y_1 = pix_hig - 1 - t_y; //:DIST_FROM_SIDE:BOT
  2996.        
  2997.             var min=(
  2998.                 Math.min(
  2999.                     Math.min( x_0, x_1 )
  3000.                 ,   Math.min( y_0, y_1 )
  3001.                 )
  3002.             );;
  3003.             //:RGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRG://
  3004.        
  3005.             var o_e =   ( ( t_x + t_y ) % 2 )
  3006.             var inv = 1-o_e;
  3007.        
  3008.             //:DP:Diagonal_Primaries(ForVisualDebug):--------://
  3009.             //:DPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDP://
  3010.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  3011.             if( t_x == 0 && t_y == 0 ){
  3012.                 AA2_uni_pix_PutPix_XY(
  3013.                      uni_pix
  3014.                 ,     0 , 0 , 0 ,255 //:BLACK
  3015.                 ,    t_x,t_y
  3016.                 );;
  3017.             }else
  3018.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  3019.             if( t_x == 1 && t_y == 1 ){
  3020.                 AA2_uni_pix_PutPix_XY(
  3021.                         uni_pix
  3022.                 ,    255, 0 , 0 ,255 //:RED
  3023.                 ,    t_x,t_y
  3024.                 );;      
  3025.             }else
  3026.             if( t_x == 2 && t_y == 2 ){
  3027.                 AA2_uni_pix_PutPix_XY(
  3028.                         uni_pix
  3029.                 ,     0 ,255, 0 ,255 //:GREEN
  3030.                 ,    t_x,t_y
  3031.                 );;      
  3032.             }else
  3033.             if( t_x == 3 && t_y == 3 ){
  3034.                 AA2_uni_pix_PutPix_XY(
  3035.                         uni_pix
  3036.                 ,     0 , 0 ,255,255 //:BLUE
  3037.                 ,    t_x,t_y
  3038.                 );;      
  3039.             }else
  3040.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  3041.             if( t_x == 4 && t_y == 4 ){
  3042.                 AA2_uni_pix_PutPix_XY(
  3043.                         uni_pix
  3044.                 ,     0 ,255,255,255 //:CYAN
  3045.                 ,    t_x,t_y
  3046.                 );;      
  3047.             }else
  3048.             if( t_x == 5 && t_y == 5 ){
  3049.                 AA2_uni_pix_PutPix_XY(
  3050.                         uni_pix
  3051.                 ,    255,255, 0 ,255 //:YELLOW
  3052.                 ,    t_x,t_y
  3053.                 );;      
  3054.             }else
  3055.             if( t_x == 6 && t_y == 6 ){
  3056.                 AA2_uni_pix_PutPix_XY(
  3057.                         uni_pix
  3058.                 ,    255, 0 ,255,255 //:MAGENTA
  3059.                 ,    t_x,t_y
  3060.                 );;      
  3061.             }else
  3062.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  3063.             //:DPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDP://
  3064.             //:E:ELSE: - - - - - - - -- - - - - - - - - - - -://
  3065.             //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
  3066.             {
  3067.                 if( false /** t_y % 4 <= 1 **/ ){
  3068.        
  3069.                     //:USE[ t_y % 4 <= 1 ] in "if" above
  3070.                     //:if you want to:
  3071.                    
  3072.                     //:Draw lines 2 pixels thick.
  3073.                     //:(Helpful for debugging resolution bugs)
  3074.        
  3075.                     uni_pix.pix_arr[ com_dex + 0 ] = 0  +255 ;
  3076.                     uni_pix.pix_arr[ com_dex + 1 ] = 0  +0   ;
  3077.                     uni_pix.pix_arr[ com_dex + 2 ] = 0  +0   ;
  3078.                     uni_pix.pix_arr[ com_dex + 3 ] = 0  +255 ;  
  3079.                 }else{
  3080.                     uni_pix.pix_arr[ com_dex + 0 ] = o_e*128 ;
  3081.                     uni_pix.pix_arr[ com_dex + 1 ] = inv*128 ;
  3082.                     uni_pix.pix_arr[ com_dex + 2 ] = min%256 ;
  3083.                     uni_pix.pix_arr[ com_dex + 3 ] = 0  +255 ;
  3084.                 };;
  3085.             };;
  3086.             //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
  3087.         };;
  3088.     };; //:[AA2_DebugFillPattern_Pyramid]:////://////////////://
  3089.  
  3090. //:AGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAG://
  3091. //:AG:Adapter:Graphics:(ABOVE):------------------------------://
  3092.  
  3093.     function NEW_uni_pix( ){ //:uni_pix:Texture_Container
  3094.         var uni_pix={
  3095.  
  3096.         VAR_TYP:"uni_pix" /**VARIABLE_TYPE**/
  3097.  
  3098.         //:INDEX:
  3099.         //:==================================================://
  3100.         //:     tex_han : ( 0 -  1 ) //:texture_handle
  3101.         //:     tex_lot : ( 0 -  2 ) //:texture_slot
  3102.         //:     pix_arr : ( 0 -  3 ) //:pixelarray
  3103.         //:     pix_wid : ( 0 -  4 ) //:pixelarray_width
  3104.         //:     pix_hig : ( 0 -  5 ) //:pixelarray_height
  3105.         //:     pix_com : ( 0 -  6 ) //:pixelarray_components
  3106.         //:     pix_nam : ( 0 -  7 ) //:pixelarray_name
  3107.         //:     sam_val : ( 0 -  8 ) //:sampler_value
  3108.         //:     sam_loc : ( 0 -  9 ) //:sampler_location
  3109.         //:     has_loc : ( 0 - 10 ) //:sampler_location_set
  3110.         //:==================================================://
  3111.  
  3112.         ,   tex_han :(0 - 111 ) //: Texture_Handle
  3113.         ,   tex_lot :(0 - 222 ) //: Texture_Slot
  3114.  
  3115.         //: pix_arr : Array of texture data.
  3116.         //: pix_arr : AKA[ tex_arr | tex_val | pix_val ]
  3117.         ,   pix_arr : null      
  3118.         ,   pix_wid :(0 - 333 ) //: PixelBitmap:WID
  3119.         ,   pix_hig :(0 - 444 ) //: PixelBitmap:HIG
  3120.         ,   pix_com :(0 - 555 ) //: ComponentsPerPixel
  3121.  
  3122.         //: pix_val : could be contrued as the pixel array
  3123.         //:          data or as the texture sampler's value.
  3124.         //:          Thus "pix_val" should not be used here.
  3125.         //:          "pix_val" should be used in singular sense
  3126.         //:          to mean "value of a single pixel.
  3127.  
  3128.             //:Unlike the "varlock" object for uni_u32,
  3129.             //:this varlock container also has the VALUE of
  3130.             //:the uniform as well. Meaning you can only
  3131.             //:set it once, and then it is frozen.
  3132.             //:
  3133.             //:UPDATE:
  3134.             //:Decided against putting these values into    
  3135.             //:"varlock" container. Reasons:
  3136.             //:     1: It nest things too deep.
  3137.             //:     2: Nested layouts are difficult to define
  3138.             //:        on the fly.
  3139.             //:     3: I said that you shouldn't encapsulate
  3140.             //:        just to prevent programmers from doing
  3141.             //:        stupid things with data. Let's stick
  3142.             //:        to that.
  3143.             //:varlock:{ ////////////////////////////////////://
  3144.  
  3145.             ,   pix_nam : ""  //: AKA[ tex_nam | sam_nam ]
  3146.             ,   sam_val : 0   //: AKA[ pix_val | tex_val ]
  3147.             ,   sam_loc : 0
  3148.             ,   has_loc : 0   //:Has location for sam_loc
  3149.  
  3150.             //:NOTE: Pretty sure [ sam_val == tex_lot ]
  3151.             //:      must always be true if sampler is
  3152.             //:      to sample from it's associated texture.
  3153.  
  3154.             //:} ////////////////////////////////////////////://
  3155.  
  3156.         };;Object.seal( uni_pix );
  3157.         return(         uni_pix );
  3158.     };;
  3159.  
  3160. //:UH:Uniform_Helpers:(BELOW):-------------------------------://
  3161. //:UHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUH://
  3162.  
  3163.     //:UC:Uniform_Containers:(BELOW):------------------------://
  3164.     //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
  3165.     //:                                                      ://
  3166.     //:  The structs below are all analogous in structure,   ://
  3167.     //:  though may have sligh differences that make them    ://
  3168.     //:  not suitable for templating.                        ://
  3169.     //:                                                      ://
  3170.     //:  (Templates are complex, rather be verbose         ) ://
  3171.     //:  (So what I am saying is... Even if I could        ) ://
  3172.     //:  (template out and make this generic and re-usable ) ://
  3173.     //:  (I would choose not to for the sake of simplicity.) ://
  3174.     //:                                                      ://
  3175.     //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
  3176.     function NEW_uni_u32(){
  3177.         //:UNIform_Uint32:(struct)
  3178.         var uni_u32={
  3179.  
  3180.             VAR_TYP:"uni_u32" /**VARIABLE_TYPE**/
  3181.             ,
  3182.  
  3183.             u32_val : 0    //:UINT32_VARIABLE:VALUE
  3184.  
  3185.             ,
  3186.  
  3187.             //:Nesting these params a bit deeper so we can
  3188.             //:Object.freeze( varlock ) once the uniform value
  3189.             //:has been cached.
  3190.             varlock:{
  3191.                 u32_nam : ""   //:UINT32_VARIABLE:NAME
  3192.             ,   u32_loc : 0    //:UINT32_VARIABLE:LOCATION
  3193.             ,   has_loc : 0    //:variable_location_fetched
  3194.             }
  3195.  
  3196.         };;Object.seal( uni_u32 );
  3197.         return(         uni_u32 );
  3198.     };;
  3199.  
  3200.     //:ucucucucucucucucucucucucucucucucucucucucucucucucucucuc://
  3201.                  
  3202.     //: TODO: move "uni_pix" struct declaration back
  3203.     //:       into this location within code.
  3204.  
  3205.     //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
  3206.     //:UC:Uniform_Containers:(ABOVE):------------------------://
  3207.  
  3208. //:uhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuh://
  3209.  
  3210.     //:VC:Variable_Controllers:(BELOW):----------------------://
  3211.     //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
  3212.     function NEW_GPUVCON(){
  3213.         var gpuvcon = new GPUVCON();
  3214.         Object.seal( gpuvcon );
  3215.         return(      gpuvcon );
  3216.     };;
  3217.     function GPUVCON( ){ //:GPU_VARIABLE_CONTROLLER
  3218.     "use strict"
  3219.  
  3220.         //://////////////////////////////////////////////////://
  3221.  
  3222.             //:uni_u32: get/put:
  3223.             //:Represents an unsigned integer value that is
  3224.             //:shared between the GPU and CPU.
  3225.             this.u32_get = u32_get; //:get( ada_gra, uni_u32 )
  3226.             this.u32_put = u32_put; //:put( ada_gra, uni_u32 )
  3227.  
  3228.             //:uni_pix: get/put:
  3229.             //:Represents tile-map formatted data shared
  3230.             //:between GPU and CPU.
  3231.             this.pix_get = pix_get; //:get( ada_gra, uni_pix )
  3232.             this.pix_put = pix_put; //:put( ada_gra, uni_pix )
  3233.  
  3234.         //:////////////////////////////////////////////////--://
  3235.                                                            
  3236.         //:u32:uni_u32:[get|put]:(BELOW):--------------------://
  3237.         //:u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32--://
  3238.         //: - - - - - - - - - - - - ---- - - - - - - - - - --://
  3239.         function u32_get(
  3240.             ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
  3241.         ,   uni_u32 //:Uniform_Package
  3242.         ){
  3243.         "use strict"
  3244.  
  3245.             //:EC:Error_Checking_Inputs:
  3246.             //:ECECECECECECECECECECECECECECECECECECECECECECEC://
  3247.             if(uni_u32.VAR_TYP!="uni_u32"){
  3248.                 throw("[u32_get:VT]");
  3249.             };;
  3250.  
  3251.             //:AKA[ ogl_ctx | ctx_ogl | con_gra | gra_con ]
  3252.             if(false === ada_gra.con_gra
  3253.             || true  === ada_gra.con_gra
  3254.             ){
  3255.                 throw("[u32_get:NOT_A_BOOL:ada_gra.con_gra]");
  3256.             };;
  3257.             if( null == ada_gra.con_gra ){
  3258.                 throw("[u32_get:MISSING:ada_gra.con_gra]");
  3259.             };;
  3260.             //:ECECECECECECECECECECECECECECECECECECECECECECEC://
  3261.  
  3262.             //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
  3263.             u32_loc( ada_gra, uni_u32 ); //:( uni_u32.u32_loc );
  3264.            
  3265.             //:         developer.mozilla.org/en-US/docs/
  3266.             //:         Web/API/WebGLRenderingContext/getUniform
  3267.             //:Not sure why "v" at end:
  3268.             uni_u32.u32_val=(
  3269.                 //:getUniformuiv: NOT A FUNCTION
  3270.                 //:getUniformuv:  NOT A FUNCTION
  3271.                 //:getUniformu :  NOT A FUNCTION
  3272.                 //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
  3273.                 //:[ con_gra ]AKA[ gra_con ]
  3274.                 ada_gra.con_gra.getUniform( //: getUniform
  3275.                     ada_gra.all_pro //:PROGRAM
  3276.                 ,   uni_u32.varlock.u32_loc //:LOCATION
  3277.                 )
  3278.             );;
  3279.                
  3280.  
  3281.             return( undefined /**void**/ );
  3282.         };;
  3283.         //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
  3284.         function u32_put(
  3285.             ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
  3286.         ,   uni_u32 //:Uniform_Package
  3287.         ){
  3288.         "use strict"
  3289.  
  3290.             //:EC:Error_Checking_Inputs:
  3291.             //:ECECECECECECECECECECECECECECECECECECECECECECEC://
  3292.             if(uni_u32.VAR_TYP!="uni_u32"){
  3293.                 throw("[u32_put:VT]");
  3294.             };;
  3295.             //:AKA[ ogl_ctx | ctx_ogl | con_gra | gra_con ]
  3296.             if(false === ada_gra.con_gra
  3297.             || true  === ada_gra.con_gra
  3298.             ){
  3299.                 throw("[u32_put:NOT_A_BOOL:ada_gra.con_gra]");
  3300.             };;
  3301.             if( null == ada_gra.con_gra ){
  3302.                 throw("[u32_put:MISSING:ada_gra.con_gra]");
  3303.             };;
  3304.             //:ECECECECECECECECECECECECECECECECECECECECECECEC://
  3305.  
  3306.             //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
  3307.             u32_loc( ada_gra, uni_u32 ); //:( uni_u32.u32_loc );
  3308.  
  3309.             //:make_sure_value_is_valid:
  3310.             if( !( uni_u32.u32_val >= 0 ) ){
  3311.                 throw("[uniform_value_invalid]");
  3312.             };;
  3313.  
  3314.             ada_gra.con_gra.uniform1ui( /** uniform1ui **/
  3315.                 uni_u32.varlock.u32_loc //:LOCATION
  3316.             ,   uni_u32.u32_val //:<<<<<<<:VALUE
  3317.             );;
  3318.         };;
  3319.         //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
  3320.         function u32_loc(
  3321.             ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
  3322.         ,   uni_u32
  3323.         ){
  3324.         "use strict"
  3325.  
  3326.             if(uni_u32.VAR_TYP!="uni_u32"){
  3327.                 throw("[u32_loc:VT]");
  3328.             };;
  3329.  
  3330.             if( "" == uni_u32.varlock.u32_nam ){
  3331.                 //:UNNS:Uniform_Name_Never_Set
  3332.                 throw("[FN:u32_loc(...):UNNS]");
  3333.             };;
  3334.  
  3335.             //:L:Location:Stash_Location_And_Freeze:---------://
  3336.             //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
  3337.             //://////////////////////////////////////////////://
  3338.             if( uni_u32.varlock.has_loc <= 0 ){
  3339.                 uni_u32.varlock.has_loc  = 1 ;
  3340.  
  3341.                 uni_u32.varlock.u32_loc=(
  3342.                     //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
  3343.                     //:[ con_gra ]AKA[ gra_con ]
  3344.                     ada_gra.con_gra.getUniformLocation(
  3345.                             ada_gra.all_pro
  3346.                         ,   uni_u32.varlock.u32_nam
  3347.                     )
  3348.                 );;
  3349.  
  3350.                 //:We should never have to fetch this again,
  3351.                 //:so freeze the "varlock" container:
  3352.                 uni_u32.varlock.has_loc  =( 2 );
  3353.                 Object.freeze( uni_u32.varlock );
  3354.  
  3355.             };;//:///////////////////////////////////////////://
  3356.             //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
  3357.  
  3358.  
  3359.             if( null == uni_u32.varlock.u32_loc //:WEBGL
  3360.             ||   0    > uni_u32.varlock.u32_loc //:C99/C11
  3361.             ){
  3362.                 //:Also note that shader variables can be
  3363.                 //:optimized out of your shader code if you
  3364.                 //:do not use them.
  3365.                 //:( Declared But Not Used ===> OptimizedOut )
  3366.                 var u32_nam=( uni_u32.varlock.u32_nam );
  3367.                 var msg=(""
  3368.                 +  "[ERR:DOES_UNIFORM_EXIST_IN_SHADER?]:((("
  3369.                 +   u32_nam
  3370.                 +   ")))"
  3371.                 );;
  3372.                 console.log( msg );
  3373.                 throw(       msg );
  3374.             };;
  3375.          
  3376.         };;
  3377.         //: - - - - - - - - - - - - ---- - - - - - - - - - --://
  3378.         //:u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32--://
  3379.         //:u32:uni_u32:[get|put]:(ABOVE):--------------------://
  3380.  
  3381.     //:vcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvc://
  3382. //:uhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuh://
  3383.     //:vcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvc://
  3384.  
  3385.         //:TL:Top_Level_publicly_exposed_functions:----------://
  3386.         //:TLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTL://
  3387.         function pix_get(
  3388.             ada_gra
  3389.         ,   uni_pix
  3390.         ){
  3391.             //:TS:TextureSampler( sam_val & sam_loc ):-------://
  3392.             //:TS:tex_sam ===== ( sam_val & sam_loc ):-------://
  3393.             //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
  3394.  
  3395.                 _pix_get_TextureSamplerUniform(
  3396.                     ada_gra
  3397.                 ,   uni_pix
  3398.                 );;
  3399.  
  3400.             //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
  3401.             //:PA:pix_arr:(pixel_array):(BELOW):-------------://
  3402.             //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
  3403.  
  3404.                 _pix_get_TexturePixelData(
  3405.                     ada_gra
  3406.                 ,   uni_pix
  3407.                 );;
  3408.  
  3409.             //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
  3410.         };;
  3411.         function pix_put(
  3412.             ada_gra
  3413.         ,   uni_pix
  3414.         ){
  3415.             //:TS:TextureSampler( sam_val & sam_loc ):-------://
  3416.             //:TS:tex_sam ===== ( sam_val & sam_loc ):-------://
  3417.             //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
  3418.  
  3419.                 _pix_put_TextureSamplerUniform(
  3420.                     ada_gra
  3421.                 ,   uni_pix
  3422.                 );;
  3423.  
  3424.             //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
  3425.             //:PA:pix_arr:(pixel_array):(BELOW):-------------://
  3426.             //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
  3427.  
  3428.                 _pix_put_TexturePixelData(
  3429.                     ada_gra
  3430.                 ,   uni_pix
  3431.                 );;
  3432.  
  3433.             //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
  3434.         };;
  3435.         //:TLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTL://
  3436.  
  3437.         //:TD:Texture_Data:----------------------------------://
  3438.         //:TDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTD://
  3439.         function _pix_get_TexturePixelData(
  3440.             ada_gra
  3441.         ,   uni_pix
  3442.         ){
  3443.  
  3444.             //:DATE[ 2020_05_17 ]
  3445.             //:Looked around the web for usage....
  3446.             //:I think I ahve the function call correct
  3447.             //:but not certain.
  3448.             throw("[I_DONT_KNOW_IF_THIS_CODE_WORKS_YET]");
  3449.  
  3450.             var G = ada_gra.con_gra;
  3451.            
  3452.             //: Extract_Variables_From_Container:
  3453.             //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
  3454.             var tex_lot = uni_pix.tex_lot;
  3455.             var tex_han = uni_pix.tex_han;
  3456.             var pix_arr = uni_pix.pix_arr;
  3457.             //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
  3458.  
  3459.             G.activeTexture( G.TEXTURE0   + tex_lot );
  3460.             G.bindTexture(   G.TEXTURE_2D , tex_han );
  3461.  
  3462.             G.getTexImage( //:RELATED[ texImage2D ]
  3463.                 GL_TEXTURE_2D   //:TARGET
  3464.             ,   0               //:LEVEL
  3465.             ,   G.RGBA_INTEGER  //:SOURCE_FORMAT
  3466.             ,   pix_arr         //:ARRAY_BUFFER_VIEW
  3467.             );;
  3468.  
  3469.         };;
  3470.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  3471.         function _pix_put_TexturePixelData(
  3472.             ada_gra
  3473.         ,   uni_pix
  3474.         ){
  3475.  
  3476.             var G = ada_gra.con_gra;
  3477.            
  3478.             //: Extract_Variables_From_Container:
  3479.             //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
  3480.             var tex_lot = uni_pix.tex_lot;
  3481.             var tex_han = uni_pix.tex_han;
  3482.             var pix_wid = uni_pix.pix_wid;
  3483.             var pix_hig = uni_pix.pix_hig;
  3484.             var pix_arr = uni_pix.pix_arr;
  3485.             //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
  3486.            
  3487.             //:TP:Texture_Push:------------------------------://
  3488.             //:TPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTP://
  3489.            
  3490.             G.activeTexture( G.TEXTURE0   + tex_lot );
  3491.             G.bindTexture(   G.TEXTURE_2D , tex_han );
  3492.            
  3493.             //: NEAREST_MIPMAP_NEAREST:
  3494.             //: gamedev.stackexchange.com/questions/158738
  3495.             var T_2D = G.TEXTURE_2D   ;
  3496.             var NEAR = G.NEAREST      ;
  3497.             var EDGE = G.CLAMP_TO_EDGE;
  3498.            
  3499.             var MIN_FIL = G.TEXTURE_MIN_FILTER;
  3500.             var MAG_FIL = G.TEXTURE_MAG_FILTER;
  3501.             var TWRAP_S = G.TEXTURE_WRAP_S;
  3502.             var TWRAP_T = G.TEXTURE_WRAP_T;
  3503.            
  3504.             G.texParameteri( T_2D, MIN_FIL , NEAR );
  3505.             G.texParameteri( T_2D, MAG_FIL , NEAR );
  3506.             G.texParameteri( T_2D, TWRAP_S , EDGE );
  3507.             G.texParameteri( T_2D, TWRAP_T , EDGE );
  3508.            
  3509.             //:Before pushing, set alignment:
  3510.             const ALN = 4; //:ALN:"Alignment"
  3511.             G.pixelStorei(G.UNPACK_ALIGNMENT, ALN);  
  3512.            
  3513.             //+ Turns out TexStorage2D does not exist in     +//
  3514.             //+ modern WebGL2 and is marked as exprimental.  +//
  3515.             //+ So just keep doing it the way you are        +//
  3516.             //+ doing it.                                    +//
  3517.             //- G.TexStorage2D(   | NEVER_MIND:         |    -//
  3518.             //-     G.TEXTURE_2D  | replace: texImage2D |    -//
  3519.             //- ,   0             | with:               |    -//
  3520.             //- ,   G.RGBA8UI     |  1. texStorage2D    |    -//
  3521.             //- ,   pix_wid       |  THEN               |    -//
  3522.             //- ,   pix_hig       |  2. texSubImage2D   |    -//
  3523.             //- );;               |                     |    -//
  3524.             //-  SEE[ GL_CREATE_COMPLETE_TEXTURE ]      |    -//
  3525.            
  3526.             //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
  3527.             //|Note that GL_BGRA pixel transfer format is    |//
  3528.             //|only preferred when uploading to GL_RGBA8     |//
  3529.             //|images. When dealing with other formats,like  |//
  3530.             //|GL_RGBA16,GL_RGBA8UI or even GL_RGBA8_SNORM,  |//
  3531.             //|then the regular GL_RGBA ordering may be      |//
  3532.             //|preferred.                                    |//
  3533.             //|   khronos.org/opengl/wiki/Common_Mistakes    |//
  3534.             //|______________________________________________|//
  3535.             G.texImage2D(  //:-------------------------------://
  3536.                 G.TEXTURE_2D         //:TARGET
  3537.             ,   0                     //:LEVEL
  3538.             ,   G.RGBA8UI            //:INTERNAL_FORMAT  
  3539.                 //:------------------------------------------://
  3540.             ,   pix_wid               //:WIDTH  / PIX_WID
  3541.             ,   pix_hig               //:HEIGHT / PIX_HIG
  3542.             ,   0                     //:BORDER
  3543.                 //:------------------------------------------://
  3544.             ,   G.RGBA_INTEGER       //:SOURCE_FORMAT    
  3545.             ,   G.UNSIGNED_BYTE      //:SOURCE_TYPE      
  3546.             ,   pix_arr               //:ARRAY_BUFFER_VIEW
  3547.             );//:--------------------------------------------://
  3548.            
  3549.             //:TPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTP://
  3550.  
  3551.         };;
  3552.         //:TDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTD://
  3553.  
  3554.  
  3555.         //:pix:uni_pix:[get|put]:(BELOW):--------------------://
  3556.         //:pixpixpixpixpixpixpixpixpixpixpixpixpixpixpixpix--://
  3557.         //: - - - - - - - - - - - - ---- - - - - - - - - - --://
  3558.         function _pix_get_TextureSamplerUniform(
  3559.             ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
  3560.         ,   uni_pix //:Uniform_Package
  3561.         ){
  3562.         "use strict"
  3563.  
  3564.             if(uni_pix.VAR_TYP!="uni_pix"){
  3565.                 //:VT:Variable_Type:
  3566.                 throw("[_pix_put_TextureSamplerUniform:VT]");
  3567.             };;
  3568.  
  3569.             //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
  3570.             //:( uni_pix.[ sam_loc === pix_loc ] );
  3571.             _pix_loc_TextureSamplerUniform(
  3572.                 ada_gra //:Adapter_Graphics
  3573.             ,   uni_pix //:Uniform_Pixels
  3574.             );;
  3575.            
  3576.             //:         developer.mozilla.org/en-US/docs/
  3577.             //:         Web/API/WebGLRenderingContext/getUniform
  3578.             //:Not sure why "v" at end:
  3579.             uni_pix.sam_val=(  
  3580.  
  3581.                 //:POTENTIAL_BUG:
  3582.                 //:     Pretty sure texture samplers are
  3583.                 //:     signed integers and you use
  3584.                 //:     "getUniformiv" instead of
  3585.                 //:     "getUniformuiv". But no internet
  3586.                 //:      access to look this up.
  3587.  
  3588.                 //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
  3589.                 //:[ con_gra ]AKA[ gra_con ]
  3590.                 ada_gra.con_gra.getUniformiv( //:get:Uniform
  3591.                     ada_gra.all_pro //:PROGRAM
  3592.                 ,   uni_pix.sam_loc //:LOCATION
  3593.                 )   //:aka[ pix_loc ]
  3594.             );;
  3595.                
  3596.  
  3597.             return( undefined /**void**/ );
  3598.         };;
  3599.         //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
  3600.         function _pix_put_TextureSamplerUniform(
  3601.             ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
  3602.         ,   uni_pix //:Uniform_Package:[PIXELS/PIX]
  3603.         ){
  3604.         "use strict"
  3605.  
  3606.             if(uni_pix.VAR_TYP!="uni_pix"){
  3607.                 //:VT:Variable_Type:
  3608.                 throw("[_pix_put_TextureSamplerUniform:VT]");
  3609.             };;
  3610.  
  3611.             //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
  3612.             //:( uni_pix.[ sam_loc === pix_loc ] );
  3613.             _pix_loc_TextureSamplerUniform(
  3614.                 ada_gra //:Adapter_Graphics
  3615.             ,   uni_pix //:Uniform_Pixels
  3616.             );;
  3617.  
  3618.             //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
  3619.             //:[ con_gra ]AKA[ gra_con ]
  3620.             ada_gra.con_gra.uniform1i(  //:put:Uniform
  3621.  
  3622.                 //:POTENTIAL_BUG:
  3623.                 //:     Pretty sure samplers are signed
  3624.                 //:     integers, so use "uniform1i"
  3625.                 //:     instead of       "uniform1ui"
  3626.  
  3627.                 uni_pix.sam_loc  //:SamplerLocation:AKA:pix_loc
  3628.             ,   uni_pix.sam_val  //:SamplerValue::::AKA:pix_val
  3629.             );;
  3630.  
  3631.         };;
  3632.         //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
  3633.         //:Caches the location of the uniform variable
  3634.         //:within the GLSL source code.
  3635.         //:     [ pix_loc / sam_loc ]
  3636.         function _pix_loc_TextureSamplerUniform(  
  3637.             ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
  3638.         ,   uni_pix //:uniform_container_for_pixel_array_data
  3639.         ){
  3640.         "use strict"
  3641.  
  3642.             if(uni_pix.VAR_TYP!="uni_pix"){
  3643.                 //:VT:Variable_Type
  3644.                 throw("[_pix_loc_TextureSamplerUniform:VT]");
  3645.             };;
  3646.  
  3647.             //:.............[ pix_nam == sam_nam ]...........://
  3648.             if( "" == uni_pix.pix_nam ){
  3649.                 //:UNNS:Uniform_Name_Never_Set:
  3650.                 throw("[_pix_loc_TextureSamplerUniform:UNNS]");
  3651.             };;
  3652.  
  3653.             if( uni_pix.has_loc <= 0 ){ //:has_loc:sam_loc ?
  3654.                 uni_pix.has_loc  = 1 ;  //:has_loc:sam_loc ?
  3655.  
  3656.                 uni_pix.sam_loc=( /** pix_loc === sam_loc **/
  3657.  
  3658.                     //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
  3659.                     //:[ con_gra ]AKA[ gra_con ]
  3660.                     ada_gra.con_gra.getUniformLocation(
  3661.                             ada_gra.all_pro  //:PROGRAM
  3662.                         ,   uni_pix.pix_nam  //:UNIFORM
  3663.                     //:...........[ pix_nam == sam_nam ].....://
  3664.                     )
  3665.                 );;
  3666.             };;
  3667.  
  3668.             //: 0: False
  3669.             //: 1: Mostly true (making it true)
  3670.             //: 2: True (done updating to true state)
  3671.             uni_pix.has_loc  =( 2 );
  3672.         };;
  3673.         //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
  3674.         //:pixpixpixpixpixpixpixpixpixpixpixpixpixpixpixpix--://
  3675.         //:pix:uni_pix:[get|put]:(ABOVE):--------------------://
  3676.     };;
  3677.     //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
  3678.     //:VC:Variable_Controllers:(ABOVE):----------------------://
  3679.  
  3680. //:UHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUH://
  3681. //:UH:Uniform_Helpers:(ABOVE):-------------------------------://
  3682.  
  3683. //:Dont call directly, call from our
  3684. //:function container object.
  3685. function AA2_LoopTableTick( loo_tab ){
  3686.  
  3687.     if( ! loo_tab || null == loo_tab ){
  3688.         throw("[AA2_LoopTableTick:NULL_INPUT:loo_tab]");
  3689.     };;
  3690.  
  3691.     loo_tab.gam_tim++; //:GAME_TIME
  3692.     loo_tab.lop_tim++; //:LOOP_TIME
  3693.  
  3694.     loo_tab.nat_win( );
  3695.     loo_tab.gam_obj( );
  3696.     loo_tab.ren_log( );
  3697.    
  3698. };;
  3699.  
  3700.  
  3701. //:LT:Loop_Tick_functions:(BELOW):---------------------------://
  3702. //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
  3703. //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
  3704. //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
  3705. //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
  3706.  
  3707.  
  3708. ;;;function AA2_LoopTableTick_nat_win(){ //:NATive_WINdow
  3709. //:---------------------------:nat_win():--------------------://
  3710.  
  3711. //:nat_win:AKA[ nat_win | win_code | win_loop | native_window ]
  3712. //:nat_win:AKA[ window_loop | ............................... ]
  3713.  
  3714.     //://////////////////////////////////////////////////////://
  3715.     if( GLO_DAT.event_listeners_registered <= 0 ){
  3716.         GLO_DAT.event_listeners_registered  = 1;
  3717.  
  3718.         //:Grab HTML5 Canvas:
  3719.         let can_htm = GLO_CLA.ada_gra.can_htm; /** var **/
  3720.  
  3721.         //: ## click
  3722.         //: ## mousedown
  3723.         //: ## mouseout
  3724.         //: ## mouseover
  3725.         //: ##
  3726.         //: ## keydown
  3727.         //: ## keyup
  3728.         //: ## keypress <--OBSOLETE
  3729.    
  3730.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  3731.  
  3732.         //: MOUSE :////://///////////////////////////////////://
  3733.  
  3734.             //: NATIVE_HANDLER_CALLS:
  3735.             //: AA2_PollEvents_Click  
  3736.  
  3737.             can_htm.addEventListener(
  3738.                 "click"
  3739.             ,   _NativeClickEventHandler
  3740.             );;
  3741.  
  3742.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  3743.  
  3744.         //: KEYBOARD :////://////////////////////////////////://
  3745.  
  3746.             //:NATIVE_HANDLER_CALLS:
  3747.             //:AA2_PollEvents_KeyPressOrKeyRelease
  3748.  
  3749.             document.addEventListener( "keyup"
  3750.             ,   _NativeKeyboardEventHandler_UPP
  3751.             );;
  3752.             document.addEventListener( "keydown"
  3753.             ,   _NativeKeyboardEventHandler_DOW
  3754.             );;
  3755.  
  3756.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  3757.  
  3758.         //:IF_THIS_WAS_C_CODE:
  3759.         //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  3760.         //:     AA2_PollEvents_Click()                      ://
  3761.         //:     AA2_PollEvents_KeyPressOrKeyRelease()       ://
  3762.         //:OR_MAYBE:                                         ://
  3763.         //:     all_evt = AA2_PollEvents_ALL();             ://
  3764.         //:     AA2_HandleEvents( all_evt );                ://
  3765.         //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  3766.  
  3767.                 //:UD:Up_Down_mouse:(BELOW):
  3768.                 //:UDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUD://
  3769.                 //: A bit convoluted. But need to set the    ://
  3770.                 //: event sub type of GLO_DAT.glo_eve        ://
  3771.                 //:UDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUD://
  3772.                 //:sub_typ_M_U[ M_U / MOUSE_UP ]
  3773.                 function _NativeKeyboardEventHandler_UPP(
  3774.                         nat_eve
  3775.                 ){  var glo_eve = GLO_DAT.glo_eve;
  3776.  
  3777.                     //:BT:Bit_Twiddle:
  3778.                     //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
  3779.                             //:SUB_TYPE:KEY_UP
  3780.                     /**/    glo_eve.sub_typ=( 0
  3781.                     |       glo_eve.sub_typ
  3782.                     |       GLO_DAT.eve_bit.sub_typ_K_U
  3783.                     );;
  3784.                             //:ERASE_BIT:KEY_DOWN:
  3785.                     /**/    glo_eve.sub_typ &=(
  3786.                         ( ~ GLO_DAT.eve_bit.sub_typ_K_D)
  3787.                     );;
  3788.                     //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
  3789.  
  3790.                     glo_eve.k_u =( 1 ); //:KEY:UPP ( up )
  3791.                     glo_eve.k_d =( 0 ); //:KEY:DOW (down)
  3792.  
  3793.                     _NativeKeyboardEventHandler(
  3794.                         nat_eve //:NativeEvent
  3795.                     ,   glo_eve //:CustomEvent
  3796.                     );;
  3797.                 };;
  3798.  
  3799.                 //:- - - - - - - - - - -- - - - - - - - - - -://
  3800.  
  3801.                 //:sub_typ_M_D[ M_D / MOUSE_DOWN ]
  3802.                 function _NativeKeyboardEventHandler_DOW(
  3803.                         nat_eve
  3804.                 ){  var glo_eve = GLO_DAT.glo_eve;
  3805.  
  3806.                     //:BT:Bit_Twiddle:
  3807.                     //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
  3808.                             //:SUB_TYPE:KEY_DOWN
  3809.                     /**/    glo_eve.sub_typ=( 0
  3810.                     |       glo_eve.sub_typ
  3811.                     |       GLO_DAT.eve_bit.sub_typ_K_D
  3812.                     );;
  3813.                             //:ERASE:KEY_UP
  3814.                     /**/    glo_eve.sub_typ &=(  
  3815.                         ( ~ GLO_DAT.eve_bit.sub_typ_K_U)
  3816.                     );;
  3817.                     //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
  3818.  
  3819.                     glo_eve.k_u =( 0 ); //:KEY:UPP ( up )
  3820.                     glo_eve.k_d =( 1 ); //:KEY:DOW (down)
  3821.  
  3822.                     _NativeKeyboardEventHandler(
  3823.                         nat_eve //:NativeEvent
  3824.                     ,   glo_eve //:CustomEvent
  3825.                     );;
  3826.                 };;
  3827.                 //:UDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUD://
  3828.  
  3829.         //:This function is a bit convoluted becasue it is
  3830.         //:either called by keyup or keydown handlers.
  3831.         function _NativeKeyboardEventHandler(
  3832.             nat_eve  //:NativeEvent
  3833.         ,   glo_eve  //:MyCustomLeanEventObject
  3834.         ){
  3835.             var cod = nat_eve.code.toUpperCase( );
  3836.             var key = nat_eve.key .toUpperCase( );
  3837.  
  3838.             //: Capslock key event is killing my keyboard    ://
  3839.             //: interactivity because it seems "CAPSLOCK"    ://
  3840.             //: event is fired during same event cycle as    ://
  3841.             //: a non-CAPSLOCK event. Thus if "K" is pressed ://
  3842.             //: during the event cycle, you might end up with://
  3843.             //: "CAPSLOCK" as your key value by the time the ://
  3844.             //: event is handled.                            ://
  3845.             //# CURRENT DESIGN DOES NOT SUPPORT MULTIPLE     #//
  3846.             //# KEY PRESSES AT THE SAME TIME.                #//
  3847.             //[ FIX: Queue of glo_eve objects.               ]//
  3848.             //[ 5 in array means can handle up to 5 input    ]//
  3849.             //[ events per cycle.                            ]//
  3850.             if( "CAPSLOCK"==cod || "CAPSLOCK"==key ){
  3851.                 return;
  3852.             };;
  3853.  
  3854.             //: console.log( "[_NativeKeyboardEventHandler]");
  3855.  
  3856.             //: var glo_eve = GLO_DAT.glo_eve;
  3857.             //://////////////////////////////////////////////://
  3858.        
  3859.                 //:Store keyboard key that was pressed:
  3860.                 //://////////////////////////////////////////://
  3861.                 if( "ARROWLEFT"  == key ){ key = "ARR_LEF"; };
  3862.                 if( "ARROWRIGHT" == key ){ key = "ARR_RIG"; };
  3863.                 if( "ARROWUP"    == key ){ key = "ARR_UPP"; };
  3864.                 if( "ARROWDOWN"  == key ){ key = "ARR_DOW"; };
  3865.                 glo_eve.key      =  key;
  3866.                 //://////////////////////////////////////////://
  3867.  
  3868.                 //:Add Event Type Flags.
  3869.                 //:DO NOT REMOVE ANY PREVIOUSLY SET FLAGS!
  3870.                 //:ETETETETETETETETETETETETETETETETETETETETET://
  3871.                     //:MAIN_TYPE:KEYBOARD
  3872.                     /**/    glo_eve.eve_typ=( 0
  3873.                     |       glo_eve.eve_typ
  3874.                     |       GLO_DAT.eve_bit.eve_typ_KEY
  3875.                     );;    
  3876.                 //:ETETETETETETETETETETETETETETETETETETETETET://
  3877.  
  3878.                 AA2_PollEvents_KeyPressOrKeyRelease( glo_eve );
  3879.  
  3880.             //://////////////////////////////////////////////://
  3881.         };;
  3882.         function _NativeClickEventHandler( nat_eve ){
  3883.  
  3884.             //:console.log("[_NativeClickEventHandler]");
  3885.  
  3886.             var glo_eve = GLO_DAT.glo_eve;
  3887.             //://////////////////////////////////////////////://
  3888.  
  3889.                 var rec  =(
  3890.                     GLO_CLA. //:GLOBAL_CLASSES
  3891.                     ada_gra. //:ADAPTER_GRAPHICS
  3892.                     can_htm. //:CANVAS_HTM (HTM==HTML5)
  3893.                     getBoundingClientRect()
  3894.                 );;
  3895.                 var CAN_X=( nat_eve.clientX - rec.left   );
  3896.                 var CAN_Y=( nat_eve.clientY - rec.top    );
  3897.  
  3898.                 glo_eve.c_x=( CAN_X );  //:Click_X
  3899.                 glo_eve.c_y=( CAN_Y );  //:Click_Y
  3900.  
  3901.                 //:Add Event Type Flags.
  3902.                 //:DO NOT REMOVE ANY PREVIOUSLY SET FLAGS!
  3903.                 //:ETETETETETETETETETETETETETETETETETETETETET://
  3904.                     //:MAIN_TYPE:MOUSE
  3905.                     /**/    glo_eve.eve_typ=( 0
  3906.                     |       glo_eve.eve_typ
  3907.                     |       GLO_DAT.eve_bit.eve_typ_MOU
  3908.                     );;    
  3909.                     //:SUB_TYPE:CLICK
  3910.                     /**/    glo_eve.sub_typ=( 0
  3911.                     |       glo_eve.sub_typ
  3912.                     |       GLO_DAT.eve_bit.sub_typ_CLK
  3913.                     );;
  3914.                 //:ETETETETETETETETETETETETETETETETETETETETET://
  3915.  
  3916.                     //:A click does not happen until
  3917.                     //:the mouse is released. Thus the
  3918.                     //:mouse state is mouse_up( m_u ).
  3919.                     glo_eve.m_u =( 1 ); //:MOU:UPP ( up )
  3920.                     glo_eve.m_d =( 0 ); //:MOU:DOW (down)
  3921.  
  3922.             //://////////////////////////////////////////////://
  3923.  
  3924.             AA2_PollEvents_Click( glo_eve );
  3925.         };;
  3926.  
  3927.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  3928.  
  3929.         function
  3930.         AA2_PollEvents_Click(
  3931.             glo_eve /** glo_eve:GLObal_EVEnt **/
  3932.         ){
  3933.             //: console.log( "[AA2_PollEvents_Click]" );
  3934.  
  3935.             GLO_CLA.edi_all.ReadEvent( glo_eve );
  3936.  
  3937.         };;
  3938.         function
  3939.         AA2_PollEvents_KeyPressOrKeyRelease(
  3940.             glo_eve /** glo_eve:GLObal_EVEnt **/
  3941.         ){
  3942.             //: console.log(
  3943.             //:     "[AA2_PollEvents_KeyPressOrKeyRelease]"
  3944.             //: );;
  3945.             GLO_CLA.edi_all.ReadEvent( glo_eve );
  3946.        
  3947.         };;
  3948.  
  3949.  
  3950.     };;//:[ event_listeners_registered ? ]:////://///////////://
  3951.     //://////////////////////////////////////////////////////://
  3952.    
  3953.  
  3954.  
  3955. };;function AA2_LoopTableTick_gam_obj(){ //:GAMe_OBJect(update)
  3956.  
  3957.     //:TODO: Update game objects.
  3958.  
  3959.     //:UPDATE_GAME_TIME_STORED_IN_SHADER:
  3960.     //:GTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGT://
  3961.  
  3962.     var gam_tim = GLO_CLA.ada_var.Get_GamTim();
  3963.         gam_tim++;GLO_CLA.ada_var.Put_GamTim( gam_tim );
  3964.  
  3965.     //:GTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGT://
  3966.  
  3967. };;function AA2_LoopTableTick_ren_log(){ //:RENder_LOGic
  3968.  
  3969.    
  3970.     //:AKA[ uni_com | UniCom | UniformCommit | UniformsCommit ]
  3971.     GLO_CLA.tau_001.uni_com();
  3972.  
  3973.     var con_gra = GLO_CLA.ada_gra.con_gra;
  3974.  
  3975.     //:Clearing will help you see if you have accidentially
  3976.     //:make your viewport triangles too small.
  3977.     con_gra.clear( 0
  3978.     |   con_gra.COLOR_BUFFER_BIT  
  3979.     );;
  3980.  
  3981.     con_gra.drawArrays(
  3982.    
  3983.             con_gra.TRIANGLE_FAN
  3984.         ,   0
  3985.         ,   6
  3986.    
  3987.     );;
  3988.  
  3989. };;
  3990. //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
  3991. //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
  3992. //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
  3993. //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
  3994. //:LT:Loop_Tick_functions:(ABOVE):---------------------------://
  3995.  
  3996. //:NF:Namespaced_Functions:(BELOW):--------------------------://
  3997. //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
  3998. //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
  3999. //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
  4000. //:                                                          ://
  4001. //:     Try to order as such that forward declarations       ://
  4002. //:     are not a requirement.                               ://
  4003. //:     //:CTRL_F[ namespaced | nf_funcs | nffuncs | nf_fn ] ://
  4004. //:                                                          ://
  4005. //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
  4006.  
  4007.     //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
  4008.  
  4009.     //:C11:C11_Refactoring_Help:(BELOW):---------------------://
  4010.     //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  4011.     //:                                                      ://
  4012.     //:   ZeroIni: Zero Initialize A Struct                  ://
  4013.     //:   PoinMem: Declare a POINTER member inside struct.   ://
  4014.     //:   ValuMem: Declare a VALUE   member inside struct.   ://
  4015.     //:                                                      ://
  4016.     //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  4017.     //: C11[  struct AA2_typ_nam typ_nam ={ };  ]
  4018.     function AA2_ZeroIni( AA2_typ_nam /** DAS_orr_CLA **/ ){
  4019.         //:AA2_typ_nam: AA2:TypeName
  4020.         //:DAS_orr_CLA: DAtaStructure_orr_CLAss
  4021.  
  4022.         var typ_nam =(
  4023.             Object.assign(
  4024.                 Object.create( null )
  4025.             ,   AA2_typ_nam
  4026.             )
  4027.         );;
  4028.  
  4029.         Object.seal( typ_nam  /** zero_inited_struct **/ );
  4030.         return(      typ_nam  /** zero_inited_struct **/ );
  4031.     };;
  4032.     //: C11[   struct AA2_typ_nam * typ_nam ; ]
  4033.     function    AA2_PoinMem( AA2_typ_nam /** DAS_or_CLA **/ ){
  4034.         return( AA2_ZeroIni( AA2_typ_nam /** DAS_or_CLA **/ ));  
  4035.     };;
  4036.     //: C11[   struct AA2_typ_nam   typ_nam ; ]
  4037.     function    AA2_ValuMem( AA2_typ_nam /** DAS_or_CLA **/ ){
  4038.         return( AA2_ZeroIni( AA2_typ_nam /** DAS_or_CLA **/ ));
  4039.     };;
  4040.     //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  4041.     //:C11:C11_Refactoring_Help:(ABOVE):---------------------://
  4042.  
  4043.     //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
  4044.  
  4045.     //: AKA[ AssertInteger | ass_int | AssInt | assint ] ::::://
  4046.     function AA2_InteAss( any_int ){
  4047.         if( false == (any_int >= 0 || any_int <= 0) ){
  4048.             throw("[YOU_DONE_FUCKED_UP]");
  4049.         };;
  4050.         return( any_int );
  4051.     };;
  4052.  
  4053.     //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
  4054.  
  4055.     //:AS:Addition_And_Subtraction:Funcs:(4:BELOW):----------://
  4056.     //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
  4057.     //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
  4058.     //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
  4059.     //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
  4060.  
  4061.         //:Make addition and subtraction wrap on
  4062.         //:underflow or overflow of uint32 boundaries.
  4063.         //:NOTE: I guess in C no such thing as "underflow"
  4064.         //:      for integers. Both ways is overflow.
  4065.         ;;;function AA2_U32_ADD( u32_001 , u32_002 ){
  4066.  
  4067.             var     res = ( u32_001 + u32_002 );
  4068.                     res = ( res % ( 0xFFFFFFFF + 1 ) );
  4069.             return( res );
  4070.  
  4071.         };;function AA2_U32_SUB( u32_001 , u32_002 ){
  4072.  
  4073.             var     res = ( u32_001 - u32_002 );
  4074.                 if( res < 0 ){ res = 0xFFFFFFFF + 1 - res ; };
  4075.             return( res );
  4076.  
  4077.         };;
  4078.  
  4079.         ;;;function //:______________________________________://
  4080.         AA2_U32_ADD_BOU(u32_var,u32_add,u32_min,u32_max){ //:://
  4081.  
  4082.             //:IT_IS_INTENTIONAL_THAT[ AA2_U32_ADD_BOU ]_____
  4083.             //:AND[ AA2_U32_SUB_BOU ]DO_NOT_SHARE_COMMON_____
  4084.             //:FUNCTION.THE_REDUNDANCY_IS_FOR_SIMPLICITY!!!!!
  4085.             //:DO_NOT_REFACTOR_JUST_TO_SHORTEN_LINES_OF_CODE!
  4086.              
  4087.             if( u32_add < 0       ){ throw("[20200531A:NEG]");};
  4088.             if( u32_max < u32_min ){ throw("[20200531A:OOB]");};
  4089.  
  4090.             //:It is erronious to start with with a value
  4091.             //:that is outside of the bounds given.
  4092.             if( u32_var < u32_min
  4093.             ||  u32_var > u32_max
  4094.             ){
  4095.                 throw("[AA_U32_SUB_BOU:STARTED_OUT_OF_BOUNDS]");
  4096.             };;
  4097.  
  4098.             //:TODO: more_careful_calculations_to
  4099.             //:      avoid_overflow_and_underflow.
  4100.  
  4101.             //:DEL_DIF:addition:
  4102.             //://////////////////////////////////////////////://
  4103.            
  4104.             if( /*......*/ u32_var + u32_add <= u32_max ){
  4105.                 u32_var =( u32_var + u32_add /*......*/ );
  4106.             }else{
  4107.                 u32_var = u32_max;
  4108.             };;
  4109.             //://////////////////////////////////////////////://
  4110.  
  4111.             return( u32_var );
  4112.  
  4113.         };;function //:______________________________________://
  4114.         AA2_U32_SUB_BOU(u32_var,u32_sub,u32_min,u32_max){ //:://
  4115.  
  4116.             //:IT_IS_INTENTIONAL_THAT[ AA2_U32_ADD_BOU ]_____
  4117.             //:AND[ AA2_U32_SUB_BOU ]DO_NOT_SHARE_COMMON_____
  4118.             //:FUNCTION.THE_REDUNDANCY_IS_FOR_SIMPLICITY!!!!!
  4119.             //:DO_NOT_REFACTOR_JUST_TO_SHORTEN_LINES_OF_CODE!
  4120.  
  4121.             if( u32_sub < 0       ){ throw("[20200531B:NEG]");};
  4122.             if( u32_max < u32_min ){ throw("[20200531B:OOB]");};
  4123.  
  4124.             //:It is erronious to start with with a value
  4125.             //:that is outside of the bounds given.
  4126.             if( u32_var < u32_min
  4127.             ||  u32_var > u32_max
  4128.             ){
  4129.                 throw("[AA_U32_SUB_BOU:STARTED_OUT_OF_BOUNDS]");
  4130.             };;
  4131.  
  4132.             //:TODO: more_careful_calculations_to
  4133.             //:      avoid_overflow_and_underflow.
  4134.  
  4135.             //:DEL_DIF:subtraction:
  4136.             //://////////////////////////////////////////////://
  4137.            
  4138.             if( /*......*/ u32_var - u32_sub >= u32_min ){
  4139.                 u32_var =( u32_var - u32_sub /*......*/ );
  4140.             }else{
  4141.                 u32_var = u32_min;
  4142.             };;
  4143.             //://////////////////////////////////////////////://
  4144.  
  4145.             return( u32_var );
  4146.  
  4147.         };; //:______________________________________________://
  4148.  
  4149.     //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
  4150.     //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
  4151.     //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
  4152.     //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
  4153.     //:AS:Addition_And_Subtraction:Funcs:(4:ABOVE):----------://
  4154.  
  4155. //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
  4156.  
  4157.         //:RI:rec_inc:("memberfuncs"):(BELOW):---------------://
  4158.         //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
  4159.         //:PROCOOP:rec_inc "member" functions:
  4160.         //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
  4161.         //:==================================================://
  4162.         //: ## AA2_rec_inc_MoveLef : MOVE:        ##         ://
  4163.         //: ## AA2_rec_inc_MoveRig : MOVE:        ##         ://
  4164.         //: ## AA2_rec_inc_MoveUpp : MOVE:        ##         ://
  4165.         //: ## AA2_rec_inc_MoveDow : MOVE:        ##         ://
  4166.         //: ##                                    ##         ://
  4167.         //: ## AA2_rec_inc_ZoomInn : ZOOM:        ##         ://
  4168.         //: ## AA2_rec_inc_ZoomOut : ZOOM:        ##         ://
  4169.         //: ##                                    ##         ://
  4170.         //: ## AA2_rec_inc_PullLef : PULL(INN)    ##         ://
  4171.         //: ## AA2_rec_inc_PullRig : PULL(INN)    ##         ://
  4172.         //: ## AA2_rec_inc_PullTop : PULL(INN)    ##         ://
  4173.         //: ## AA2_rec_inc_PullBot : PULL(INN)    ##         ://
  4174.         //: ##                                    ##         ://
  4175.         //: ## AA2_rec_inc_PushLef : PUSH(OUT)    ##         ://
  4176.         //: ## AA2_rec_inc_PushRig : PUSH(OUT)    ##         ://
  4177.         //: ## AA2_rec_inc_PushTop : PUSH(OUT)    ##         ://
  4178.         //: ## AA2_rec_inc_PushBot : PUSH(OUT)    ##         ://
  4179.         //:==================================================://
  4180.         //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
  4181.  
  4182.             //:M:MOVE:(BELOW):-------------------------------://
  4183.             //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
  4184.             //: rec_inc.MoveLef(...):
  4185.             //: rec_inc.MoveRig(...):
  4186.             //: rec_inc.MoveUpp(...):
  4187.             //: rec_inc.MoveDow(...):
  4188.             //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
  4189.             ;;;function AA2_rec_inc_MoveLef( rec_inc, u32_var){
  4190.                 /**------**/BUG0002("MoveLef",rec_inc, u32_var);
  4191.  
  4192.                 //:Simulate_Uint32_Integer_Overflow:
  4193.  
  4194.                 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0,u32_var );
  4195.                 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1,u32_var );
  4196.                 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0,   0    );
  4197.                 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1,   0    );
  4198.  
  4199.             };;function AA2_rec_inc_MoveRig( rec_inc, u32_var){
  4200.                 /**------**/BUG0002("MoveRig",rec_inc, u32_var);
  4201.  
  4202.                 //:Simulate_Uint32_Integer_Overflow:
  4203.  
  4204.                 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0,u32_var );
  4205.                 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1,u32_var );
  4206.                 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0,   0    );
  4207.                 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1,   0    );
  4208.  
  4209.             };;function AA2_rec_inc_MoveUpp( rec_inc, u32_var){
  4210.                 /**------**/BUG0002("MoveUpp",rec_inc, u32_var);
  4211.  
  4212.                 //:Simulate_Uint32_Integer_Overflow:
  4213.  
  4214.                 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0,   0    );
  4215.                 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1,   0    );
  4216.                 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0,u32_var );
  4217.                 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1,u32_var );
  4218.  
  4219.             };;function AA2_rec_inc_MoveDow( rec_inc, u32_var){
  4220.                 /**------**/BUG0002("MoveDow",rec_inc, u32_var);
  4221.  
  4222.                 //:Simulate_Uint32_Integer_Overflow:
  4223.  
  4224.                 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0,   0    );
  4225.                 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1,   0    );
  4226.                 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0,u32_var );
  4227.                 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1,u32_var );
  4228.             };;
  4229.             //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
  4230.             //:M:MOVE:(ABOVE):-------------------------------://
  4231.         //:ririririririririririririririririririririririririri://
  4232.             //:Z:ZOOM:(BELOW):-------------------------------://
  4233.             //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
  4234.             //: rec_inc.ZoomInn(...):
  4235.             //: rec_inc.ZoomOut(...):
  4236.             //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
  4237.             ;;;function AA2_rec_inc_ZoomInn( rec_inc, u32_var){
  4238.                 /**------**/BUG0002("ZoomInn",rec_inc, u32_var);
  4239.  
  4240.                 //: rec_inc.x_0 +=( u32_var ); --------------://
  4241.                 //: rec_inc.x_1 -=( u32_var ); --------------://
  4242.                 //: rec_inc.y_0 +=( u32_var ); --------------://
  4243.                 //: rec_inc.y_1 -=( u32_var ); --------------://
  4244.  
  4245.                 //:Simulate_Uint32_Integer_Overflow:
  4246.                 //:Allow_Rectangle_To_Invert_Itself:
  4247.  
  4248.                 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , u32_var);
  4249.                 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , u32_var);
  4250.                 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , u32_var);
  4251.                 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , u32_var);
  4252.  
  4253.             };;function AA2_rec_inc_ZoomOut( rec_inc, u32_var){
  4254.                 /**------**/BUG0002("ZoomOut",rec_inc, u32_var);
  4255.  
  4256.                 //: rec_inc.x_0 -=( u32_var ); --------------://
  4257.                 //: rec_inc.x_1 +=( u32_var ); --------------://
  4258.                 //: rec_inc.y_0 -=( u32_var ); --------------://
  4259.                 //: rec_inc.y_1 +=( u32_var ); --------------://
  4260.  
  4261.                 //:Simulate_Uint32_Integer_Overflow:
  4262.                 //:Allow_Rectangle_To_Invert_Itself:
  4263.  
  4264.                 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , u32_var);
  4265.                 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , u32_var);
  4266.                 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , u32_var);
  4267.                 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , u32_var);
  4268.  
  4269.             };;//:///////////////////////////////////////////://
  4270.             //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
  4271.             //:Z:ZOOM:(ABOVE):-------------------------------://
  4272.         //:ririririririririririririririririririririririririri://
  4273.             //:P:Pull:(BELOW):-------------------------------://
  4274.             //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
  4275.             ;;;function AA2_rec_inc_PullLef( rec_inc, u32_var){
  4276.                 /**------**/BUG0002("PullLef",rec_inc, u32_var);
  4277.                                                        
  4278.                 //:    lef <-----------------> rig   ://
  4279.                 //:    x_0 ( + )--->X<---( - ) x_1   ://
  4280.                 //:<<<<NEG                    POS>>>>://
  4281.  
  4282.                 //: rec_inc.x_0 +=( u32_var ); --------------://
  4283.                 //: rec_inc.x_1 +=(    0    ); --------------://
  4284.                 //: rec_inc.y_0 +=(    0    ); --------------://
  4285.                 //: rec_inc.y_1 +=(    0    ); --------------://
  4286.  
  4287.                 //:Simulate_Uint32_Integer_Overflow:
  4288.                 //:Allow_Rectangle_To_Invert_Itself:
  4289.  
  4290.                 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , u32_var);
  4291.                 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 ,    0   );
  4292.                 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 ,    0   );
  4293.                 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 ,    0   );
  4294.  
  4295.             };;function AA2_rec_inc_PullRig( rec_inc, u32_var){
  4296.                 /**------**/BUG0002("PullRig",rec_inc, u32_var);
  4297.  
  4298.                 //:    lef <-----------------> rig   ://
  4299.                 //:    x_0 ( + )--->X<---( - ) x_1   ://
  4300.                 //:<<<<NEG                    POS>>>>://
  4301.  
  4302.                 //: rec_inc.x_0 -=(    0    ); --------------://
  4303.                 //: rec_inc.x_1 -=( u32_var ); --------------://
  4304.                 //: rec_inc.y_0 -=(    0    ); --------------://
  4305.                 //: rec_inc.y_1 -=(    0    ); --------------://
  4306.  
  4307.                 //:Simulate_Uint32_Integer_Overflow:
  4308.                 //:Allow_Rectangle_To_Invert_Itself:
  4309.  
  4310.                 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 ,    0   );
  4311.                 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , u32_var);
  4312.                 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 ,    0   );
  4313.                 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 ,    0   );
  4314.      
  4315.             };;function AA2_rec_inc_PullTop( rec_inc, u32_var){
  4316.                 /**------**/BUG0002("PullTop",rec_inc, u32_var);
  4317.                                                        
  4318.                 //:    top <-----------------> bot   ://
  4319.                 //:    y_0 ( + )--->Y<---( - ) y_1   ://
  4320.                 //:<<<<NEG                    POS>>>>://
  4321.  
  4322.                 //: rec_inc.x_0 +=(    0    ); --------------://
  4323.                 //: rec_inc.x_1 +=(    0    ); --------------://
  4324.                 //: rec_inc.y_0 +=( u32_var ); --------------://
  4325.                 //: rec_inc.y_1 +=(    0    ); --------------://
  4326.  
  4327.                 //:Simulate_Uint32_Integer_Overflow:
  4328.                 //:Allow_Rectangle_To_Invert_Itself:
  4329.  
  4330.                 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 ,    0   );
  4331.                 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 ,    0   );
  4332.                 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , u32_var);
  4333.                 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 ,    0   );
  4334.  
  4335.             };;function AA2_rec_inc_PullBot( rec_inc, u32_var){
  4336.                 /**------**/BUG0002("PullBot",rec_inc, u32_var);
  4337.  
  4338.                 //:    top <-----------------> bot   ://
  4339.                 //:    y_0 ( + )--->Y<---( - ) y_1   ://
  4340.                 //:<<<<NEG                    POS>>>>://
  4341.            
  4342.                 //: rec_inc.x_0 -=(    0    ); --------------://
  4343.                 //: rec_inc.x_1 -=(    0    ); --------------://
  4344.                 //: rec_inc.y_0 -=(    0    ); --------------://
  4345.                 //: rec_inc.y_1 -=( u32_var ); --------------://
  4346.  
  4347.                 //:Simulate_Uint32_Integer_Overflow:
  4348.                 //:Allow_Rectangle_To_Invert_Itself:
  4349.  
  4350.                 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 ,    0   );
  4351.                 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 ,    0   );
  4352.                 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 ,    0   );
  4353.                 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , u32_var);
  4354.  
  4355.             };;
  4356.             //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
  4357.             //:P:Pull:(ABOVE):-------------------------------://
  4358.         //:ririririririririririririririririririririririririri://
  4359.             //:P:Push:(BELOW):-------------------------------://
  4360.             //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
  4361.             ;;;function AA2_rec_inc_PushLef( rec_inc, u32_var){
  4362.                 /**------**/BUG0002("PushLef",rec_inc, u32_var);
  4363.                                                        
  4364.                 //:<<<<lef <-----------------> rig>>>://
  4365.                 //:<<<<x_0 ( - )<<<<X>>>>( + ) x_1>>>://
  4366.                 //:<<<<NEG                    POS>>>>://
  4367.  
  4368.                 //: rec_inc.x_0 -=( u32_var ); --------------://
  4369.                 //: rec_inc.x_1 -=(    0    ); --------------://
  4370.                 //: rec_inc.y_0 -=(    0    ); --------------://
  4371.                 //: rec_inc.y_1 -=(    0    ); --------------://
  4372.  
  4373.                 //:Simulate_Uint32_Integer_Overflow:
  4374.                 //:Allow_Rectangle_To_Invert_Itself:
  4375.  
  4376.                 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , u32_var);
  4377.                 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 ,    0   );
  4378.                 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 ,    0   );
  4379.                 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 ,    0   );
  4380.  
  4381.             };;function AA2_rec_inc_PushRig( rec_inc, u32_var){
  4382.                 /**------**/BUG0002("PushRig",rec_inc, u32_var);
  4383.  
  4384.                 //:<<<<lef <-----------------> rig>>>://
  4385.                 //:<<<<x_0 ( - )<<<<X>>>>( + ) x_1>>>://
  4386.                 //:<<<<NEG                    POS>>>>://
  4387.            
  4388.                 //: rec_inc.x_0 +=(    0    ); --------------://
  4389.                 //: rec_inc.x_1 +=( u32_var ); --------------://
  4390.                 //: rec_inc.y_0 +=(    0    ); --------------://
  4391.                 //: rec_inc.y_1 +=(    0    ); --------------://
  4392.  
  4393.                 //:Simulate_Uint32_Integer_Overflow:
  4394.                 //:Allow_Rectangle_To_Invert_Itself:
  4395.  
  4396.                 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 ,    0   );
  4397.                 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , u32_var);
  4398.                 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 ,    0   );
  4399.                 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 ,    0   );
  4400.  
  4401.             };;function AA2_rec_inc_PushTop( rec_inc, u32_var){
  4402.                 /**------**/BUG0002("PushTop",rec_inc, u32_var);
  4403.                                                        
  4404.                 //:<<<<top <-----------------> bot>>>://
  4405.                 //:<<<<y_0 ( - )<<<<Y>>>>( + ) y_1>>>://
  4406.                 //:<<<<NEG                    POS>>>>://
  4407.  
  4408.                 //: rec_inc.x_0 -=(    0    ); --------------://
  4409.                 //: rec_inc.x_1 -=(    0    ); --------------://
  4410.                 //: rec_inc.y_0 -=( u32_var ); --------------://
  4411.                 //: rec_inc.y_1 -=(    0    ); --------------://
  4412.  
  4413.                 //:Simulate_Uint32_Integer_Overflow:
  4414.                 //:Allow_Rectangle_To_Invert_Itself:
  4415.  
  4416.                 rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 ,    0   );
  4417.                 rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 ,    0   );
  4418.                 rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , u32_var);
  4419.                 rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 ,    0   );
  4420.  
  4421.             };;function AA2_rec_inc_PushBot( rec_inc, u32_var){
  4422.                 /**------**/BUG0002("PushBot",rec_inc, u32_var);
  4423.  
  4424.                 //:<<<<top <-----------------> bot>>>://
  4425.                 //:<<<<y_0 ( - )<<<<Y>>>>( + ) y_1>>>://
  4426.                 //:<<<<NEG                    POS>>>>://
  4427.            
  4428.                 //: rec_inc.x_0 +=(    0    ); --------------://
  4429.                 //: rec_inc.x_1 +=(    0    ); --------------://
  4430.                 //: rec_inc.y_0 +=(    0    ); --------------://
  4431.                 //: rec_inc.y_1 +=( u32_var ); --------------://
  4432.  
  4433.                 //:Simulate_Uint32_Integer_Overflow:
  4434.                 //:Allow_Rectangle_To_Invert_Itself:
  4435.  
  4436.                 rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 ,    0   );
  4437.                 rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 ,    0   );
  4438.                 rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 ,    0   );
  4439.                 rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , u32_var);
  4440.  
  4441.             };;
  4442.             //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
  4443.             //:P:Push:(ABOVE):-------------------------------://
  4444.  
  4445. //:::::::::ririririririririririririririririririririririririri://
  4446.  
  4447.             //:B:BOUNDED:(BELOW):----------------------------://
  4448.             //:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB://
  4449.             //:  Bounded versions of Functions in other      ://
  4450.             //:  section. Adds corrections or takes no       ://
  4451.             //:  actions if action would result in defying   ://
  4452.             //:  bounds of rec_bou parameter.                ://
  4453.             //:                                              ://
  4454.             //:  NOTE: All functions in this category        ://
  4455.             //:        expect the rectangle to already       ://
  4456.             //:        be within bounds of rec_bou.          ://
  4457.             //:                                              ://
  4458.             //:        It is an error otherwise.             ://
  4459.             //:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB://
  4460.  
  4461.                 //:BM:BoundedMoves:(BELOW):------------------://
  4462.                 //:BMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBM://
  4463.                 //: rec_inc.MoveLef(...):
  4464.                 function    AA2_rec_inc_MoveLef_rec_bou(
  4465.                                  rec_inc,u32_var,rec_bou
  4466.                 ){
  4467.                     BUG0001(rec_inc,u32_var,rec_bou,"[Mov_L]");
  4468.  
  4469.                     var n_x = rec_inc.x_0 - u32_var;
  4470.                     if( n_x < rec_bou.x_0 ){
  4471.                         //:Do_Nothing_No_Room_For_Action
  4472.                     }else{
  4473.                             AA2_rec_inc_MovLef(
  4474.                                  rec_inc,u32_var
  4475.                             );;
  4476.                     };;
  4477.                 };;
  4478.                 //: rec_inc.MoveRig(...):
  4479.                 function    AA2_rec_inc_MoveRig_rec_bou(
  4480.                                  rec_inc,u32_var,rec_bou
  4481.                 ){
  4482.                     BUG0001(rec_inc,u32_var,rec_bou,"[Mov_R]");
  4483.  
  4484.                     var n_x = rec_inc.x_1 + u32_var;
  4485.                     if( n_x > rec_bou.x_1 ){
  4486.                         //:Do_Nothing_No_Room_For_Action
  4487.                     }else{
  4488.                             AA2_rec_inc_MovRig(
  4489.                                  rec_inc,u32_var
  4490.                             );;
  4491.                     };;
  4492.                 };;
  4493.                 //: rec_inc.MoveUpp(...):
  4494.                 function    AA2_rec_inc_MoveUpp_rec_bou(
  4495.                                  rec_inc,u32_var,rec_bou
  4496.                 ){
  4497.                     BUG0001(rec_inc,u32_var,rec_bou,"[Mov_U]");
  4498.  
  4499.                     var n_y = rec_inc.y_0 - u32_var;
  4500.                     if( n_y < rec_bou.y_0 ){
  4501.                         //:Do_Nothing_No_Room_For_Action
  4502.                     }else{
  4503.                             AA2_rec_inc_MovUpp(
  4504.                                  rec_inc,u32_var
  4505.                             );;
  4506.                     };;
  4507.                 };;
  4508.                 //: rec_inc.MoveDow(...):
  4509.                 function    AA2_rec_inc_MoveDow_rec_bou(
  4510.                                  rec_inc,u32_var,rec_bou
  4511.                 ){
  4512.                     BUG0001(rec_inc,u32_var,rec_bou,"[Mov_D]");
  4513.  
  4514.                     var n_y = rec_inc.y_1 + u32_var;
  4515.                     if( n_y > rec_bou.y_1 ){
  4516.                         //:Do_Nothing_No_Room_For_Action
  4517.                     }else{
  4518.                             AA2_rec_inc_MovDow(
  4519.                                  rec_inc,u32_var
  4520.                             );;
  4521.                     };;
  4522.                 };;
  4523.                 //:BMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBM://
  4524.                 //:BM:BoundedMoves:(ABOVE):------------------://
  4525.                 //:BZ:BoundedZooms:(BELOW):------------------://
  4526.                 //:BZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZ://
  4527.                 //: rec_inc.ZoomInn(...):
  4528.                 function    AA2_rec_inc_ZoomInn_rec_bou(
  4529.                                  rec_inc,u32_var,rec_bou
  4530.                 ){
  4531.                     BUG0001(rec_inc,u32_var,rec_bou,"[Zoom_i]");
  4532.  
  4533.                     //:Zoom in does not require boundary,
  4534.                     //:but is supplied for consistency.
  4535.                     if( rec_bou ){ /** NOOP **/ };
  4536.  
  4537.                     //:If full zoom results in overlap, zoom
  4538.                     //:as much as is possible without
  4539.                     //:distorting rec_inc proportions.
  4540.  
  4541.                     //:MAX[ x & y ]( m_x & m_y ):
  4542.                     //:Moving m_x or m_y inward on respective
  4543.                     //:axis makes points of rectangle tangental.
  4544.                     //:MINUS_ZERO_NOT_ONE_BECAUSE_CAN_OVERLAY
  4545.                     var m_x = ( rec_inc.x_1 - rec_inc.x_0 - 0 );
  4546.                     var m_y = ( rec_inc.y_1 - rec_inc.y_0 - 0 );
  4547.  
  4548.                     //:HALF_MAX: ( h_x & h_y ):
  4549.                     //:Since both sides are moving in, need
  4550.                     //:to use this value:
  4551.                     var h_x = Math.floor( m_x / 2 );
  4552.                     var h_y = Math.floor( m_y / 2 );
  4553.  
  4554.                     //:ActualInset: ( a_x & a_y )
  4555.                     var a_x = Math.min(h_x,u32_var);
  4556.                     var a_y = Math.min(h_y,u32_var);
  4557.  
  4558.                     //:New_XY:
  4559.                     rec_inc.y_0 += a_y;
  4560.                     rec_inc.y_1 -= a_y;
  4561.                     rec_inc.x_0 += a_x;
  4562.                     rec_inc.x_1 -= a_x;
  4563.  
  4564.                     //: If rectangle is somehow out of bounds,
  4565.                     //: move it in bounds? Hmm... That is
  4566.                     //: seperate behavior that belongs somewhere
  4567.                     //: else. And also, I don't want to write
  4568.                     //: that logic anyways.
  4569.      
  4570.                 };;
  4571.                 //: rec_inc.ZoomOut(...):
  4572.                 function    AA2_rec_inc_ZoomOut_rec_bou(
  4573.                                  rec_inc,u32_var,rec_bou
  4574.                 ){
  4575.                     BUG0001(rec_inc,u32_var,rec_bou,"[Zoom_o]");
  4576.  
  4577.                     //:The max zoom out for each axis is rougly
  4578.                     //:the minimum of the distance of each
  4579.                     //:rec_inc edge to it's RSPCTV rec_bou edge.
  4580.                     //:MINUS_ZERO_NOT_ONE_BECAUSE_CAN_OVERLAY
  4581.                     var lef = ( rec_inc.x0 - rec_bou.x0 - 0 );
  4582.                     var rig = ( rec_bou.x1 - rec_inc.x1 - 0 );
  4583.                     var top = ( rec_inc.y0 - rec_bou.y0 - 0 );
  4584.                     var bot = ( rec_bou.y1 - rec_inc.y1 - 0 );
  4585.                
  4586.                     //:Max x & y:
  4587.                     var m_x = Math.min( lef , rig );
  4588.                     var m_y = Math.min( top , bot );
  4589.  
  4590.                     //:HALF_MAX: ( h_x & h_y ):
  4591.                     //:Since both sides are moving in, need
  4592.                     //:to use this value:
  4593.                     var h_x = Math.floor( m_x / 2 );
  4594.                     var h_y = Math.floor( m_y / 2 );
  4595.  
  4596.                     //:ActualOutset:
  4597.                     var a_x = Math.min(h_x,u32_var);
  4598.                     var a_y = Math.max(h_y,u32_var);
  4599.  
  4600.                     //:New_XY:
  4601.                     rec_inc.y_0 -= a_y;
  4602.                     rec_inc.y_1 += a_y;
  4603.                     rec_inc.x_0 -= a_x;
  4604.                     rec_inc.x_1 += a_x;
  4605.  
  4606.                 };;
  4607.                 //:BZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZ://
  4608.                 //:BZ:BoundedZooms:(ABOVE):------------------://
  4609.  
  4610. //:::::::::ririririririririririririririririririririririririri://
  4611.  
  4612.                 //:PI:PullIn:BOUNDED:(BELOW):----------------://
  4613.                 //:PI>>>>>>>>>>>>>>>>>>PI<<<<<<<<<<<<<<<<<<PI://
  4614.                 //:PIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPI://
  4615.                 //:You are inside rectangle pulling the
  4616.                 //:edges INWARDS on themselves. Maximum pull
  4617.                 //:inward allows for co-linear rectangle edges.
  4618.                 //:PIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPI://
  4619.                 function AA2_rec_inc_PullLef_rec_bou(
  4620.                             rec_inc,u32_var,rec_bou
  4621.                 ){  //: LEF >>>>>>>>>> X <<<<<<<<<< RIG
  4622.                     //: TOP >>>>>>>>>> X <<<<<<<<<< BOT
  4623.                     BUG0001(rec_inc,u32_var,rec_bou,"[pul_L]");
  4624.                
  4625.                     var m_p =(rec_inc.x1 - rec_inc.x0 - 0 );
  4626.                     var a_p =Math.min(m_p,u32_var);
  4627.                     rec_inc.x_0 += ( a_p );
  4628.                 };;
  4629.                 function AA2_rec_inc_PullRig_rec_bou(
  4630.                             rec_inc,u32_var,rec_bou
  4631.                 ){  //: LEF >>>>>>>>>> X <<<<<<<<<< RIG
  4632.                     //: TOP >>>>>>>>>> X <<<<<<<<<< BOT
  4633.                     BUG0001(rec_inc,u32_var,rec_bou,"[pul_R]");
  4634.                
  4635.                     var m_p =(rec_inc.x1 - rec_inc.x0 - 0 );
  4636.                     var a_p =Math.min(m_p,u32_var);
  4637.                     rec_inc.x_1 -= ( a_p );
  4638.                 };;          
  4639.                 function AA2_rec_inc_PullTop_rec_bou(
  4640.                             rec_inc,u32_var,rec_bou
  4641.                 ){  //: LEF >>>>>>>>>> Y <<<<<<<<<< RIG
  4642.                     //: TOP >>>>>>>>>> Y <<<<<<<<<< BOT
  4643.                     BUG0001(rec_inc,u32_var,rec_bou,"[pul_T]");
  4644.                
  4645.                     var m_p =(rec_inc.y1 - rec_inc.y0 - 0 );
  4646.                     var a_p =Math.min(m_p,u32_var);
  4647.                     rec_inc.y_0 += ( a_p );
  4648.                 };;
  4649.                 function AA2_rec_inc_PullBot_rec_bou(
  4650.                             rec_inc,u32_var,rec_bou
  4651.                 ){  //: LEF >>>>>>>>>> Y <<<<<<<<<< RIG
  4652.                     //: TOP >>>>>>>>>> Y <<<<<<<<<< BOT
  4653.                     BUG0001(rec_inc,u32_var,rec_bou,"[pul_B]");
  4654.                
  4655.                     var m_p =(rec_inc.y1 - rec_inc.y0 - 0 );
  4656.                     var a_p =Math.min(m_p,u32_var);
  4657.                     rec_inc.y_1 -= ( a_p );
  4658.                 };;
  4659.                 //:PIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPI://
  4660.                 //:PI>>>>>>>>>>>>>>>>>>PI<<<<<<<<<<<<<<<<<<PI://
  4661.                 //:PI:PullIn:BOUNDED:(ABOVE):----------------://
  4662.  
  4663. //:::::::::ririririririririririririririririririririririririri://
  4664.  
  4665.                 //:PO:PushOut:BOUNDED:(ABOVE):---------------://
  4666.                 //:PO<<<<<<<<<<<<<<<<<<PO>>>>>>>>>>>>>>>>>>PO://
  4667.                 //:POPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO://
  4668.                 //:                                          ://
  4669.                 //: You are inside the rectangle and you are ://
  4670.                 //: pushing on the walls trying to get out.  ://
  4671.                 //:                                          ://
  4672.                 //:     VAR_NAMES:                           ://
  4673.                 //:     m_p: [ max | min ][ push | pull ]    ://
  4674.                 //:     a_p: [   actual  ][ push | pull ]    ://
  4675.                 //:POPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO://
  4676.                 ;;;function AA2_rec_inc_PushLef_rec_bou(
  4677.                                  rec_inc,u32_var,rec_bou
  4678.                 ){  //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
  4679.                     //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
  4680.                     BUG0001(rec_inc,u32_var,rec_bou,"[PusLef]");
  4681.  
  4682.                     var m_p =(rec_inc.x_0 - rec_bou.x_0 - 0 );
  4683.                     var a_p =Math.min(m_p,u32_var);
  4684.                     rec_inc.x_0 -= ( a_p );
  4685.                 };;function AA2_rec_inc_PushRig_rec_bou(
  4686.                                  rec_inc,u32_var,rec_bou
  4687.                 ){  //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
  4688.                     //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
  4689.                     BUG0001(rec_inc,u32_var,rec_bou,"[PusRig]");
  4690.  
  4691.                     var m_p =(rec_bou.x_1 - rec_inc.x_1 - 0 );
  4692.                     var a_p =Math.min(m_p,u32_var);
  4693.                     rec_inc.x_1 += ( a_p );
  4694.  
  4695.                 };;function AA2_rec_inc_PushTop_rec_bou(
  4696.                                  rec_inc,u32_var,rec_bou
  4697.                 ){  //: LEF <<<<<<<<<< Y >>>>>>>>>> RIG
  4698.                     //: TOP <<<<<<<<<< Y >>>>>>>>>> BOT
  4699.                     BUG0001(rec_inc,u32_var,rec_bou,"[PusTop]");
  4700.                
  4701.                     var m_p =(rec_inc.y_0 - rec_bou.y_0 - 0 );
  4702.                     var a_p =Math.min(m_p,u32_var);
  4703.                     rec_inc.y_0 -= ( a_p );
  4704.  
  4705.                 };;function AA2_rec_inc_PushBot_rec_bou(
  4706.                                  rec_inc,u32_var,rec_bou
  4707.                 ){  //: LEF <<<<<<<<<< Y >>>>>>>>>> RIG
  4708.                     //: TOP <<<<<<<<<< Y >>>>>>>>>> BOT
  4709.                     BUG0001(rec_inc,u32_var,rec_bou,"[PusBot]");
  4710.                    
  4711.                     var m_p =(rec_bou.y_1 - rec_inc.y_1 - 0 );
  4712.                     var a_p =Math.min(m_p,u32_var);
  4713.                     rec_inc.y_1 += ( a_p );
  4714.                 };;
  4715.                 //:PO<<<<<<<<<<<<<<<<<<PO>>>>>>>>>>>>>>>>>>PO://
  4716.                 //:POPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO://
  4717.  
  4718.             //:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB://
  4719.             //:B:BOUNDED:(ABOVE):----------------------------://
  4720.  
  4721. //:::::::::ririririririririririririririririririririririririri://
  4722.  
  4723.                 //:RS:Rectangle_Status_Functions:
  4724.                 //:RSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRS://
  4725.  
  4726.                 ;;;function AA2_rec_inc_OrdBad( rec_inc ){
  4727.  
  4728.                     var   x_0 = rec_inc.x_0;
  4729.                     var   y_0 = rec_inc.y_0;
  4730.                     var   x_1 = rec_inc.x_1;
  4731.                     var   y_1 = rec_inc.y_1;
  4732.                
  4733.                     var ord_bad = ( 0 );
  4734.                
  4735.                     if( !(x_0 >= 0 )){ ord_bad = ( 1 ); };
  4736.                     if( !(y_0 >= 0 )){ ord_bad = ( 1 ); };
  4737.                     if( !(x_1 >= 0 )){ ord_bad = ( 1 ); };
  4738.                     if( !(y_1 >= 0 )){ ord_bad = ( 1 ); };
  4739.                
  4740.                     if( x_0 > x_1 ){
  4741.                         ord_bad = ( 1 );
  4742.                     };;
  4743.                     if( y_0 > y_1 ){
  4744.                         ord_bad = ( 1 );
  4745.                     };;
  4746.  
  4747.                     return( ord_bad );
  4748.  
  4749.                 };;function AA2_rec_inc_NIN_rec_bou(
  4750.                             rec_inc  ,  rec_bou
  4751.                 ){
  4752.                     //:NIN: Not_INside (of rec_bou)
  4753.  
  4754.                     //:NOTE:                          - - - -://
  4755.                     //:     NIN:Not_INside(of):       - - - -://
  4756.                     //:     NOT_THE_SAME_AS:          - - - -://
  4757.                     //:     AA2_rec_inc_OUT_rec_bou  - - - -://
  4758.  
  4759.                     var nin=( 0 );
  4760.                
  4761.                     //:You are still inside if you are
  4762.                     //:exactly [ on / co-linear ] edge.
  4763.                     if( rec_inc.x_0 <  rec_bou.x_0 //:OOB?
  4764.                     ||  rec_inc.x_1 >  rec_bou.x_1 //:OOB?
  4765.                     ||  rec_inc.y_0 <  rec_bou.x_0 //:OOB?
  4766.                     ||  rec_inc.y_1 >  rec_bou.x_1 //:OOB?
  4767.                     ){
  4768.                         nin = ( 1 );
  4769.                     };;
  4770.                
  4771.                     return( nin );
  4772.                 };;function AA2_rec_inc_INN_rec_bou(
  4773.                             rec_inc  ,  rec_bou
  4774.                 ){
  4775.                     //:INN:Inside_of:rec_bou:100%
  4776.  
  4777.                     var inn=( 0 );
  4778.                
  4779.                     if( rec_inc.x_0 >= rec_bou.x_0 //:INN?
  4780.                     &&  rec_inc.x_1 <= rec_bou.x_1 //:INN?
  4781.                     &&  rec_inc.y_0 >= rec_bou.x_0 //:INN?
  4782.                     &&  rec_inc.y_1 <= rec_bou.x_1 //:INN?
  4783.                     ){
  4784.                         inn = ( 1 );
  4785.                     };;
  4786.                
  4787.                     return( inn );
  4788.                 };;function AA2_rec_inc_OUT_rec_bou(
  4789.                             rec_inc  ,  rec_bou
  4790.                 ){
  4791.                     //:OUT:Outside_Of: (Completely)
  4792.                     throw("[TODO:2020_05_25-A]");
  4793.  
  4794.                 };;function AA2_rec_inc_NOU_rec_bou(
  4795.                             rec_inc  ,  rec_bou
  4796.                 ){
  4797.                     //:NOU:Not_Outside_Of:
  4798.                     throw("[TODO:2020_05_25-B]");
  4799.                 };;
  4800.                 //:RSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRS://
  4801.  
  4802.         //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
  4803.         //:RI:rec_inc:("memberfuncs"):(ABOVE):---------------://
  4804.  
  4805. //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
  4806. //:                          (ABOVE)                         ://
  4807. //:NF: Namespaced_Functions: (CONTI):------------------------://
  4808. //:                          (BELOW)                         ://
  4809. //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
  4810.  
  4811.     //:Convert the global event to a keyboard key number:
  4812.     function AA2_glo_eve_KeyNum( glo_eve ){
  4813.  
  4814.         //:AKA[ Keyanum | KeyNum | key_num | key_as_num ]
  4815.         //:NegativeTwo( 0-2 ):Not even a keyboard event.
  4816.         var key_num =( 0 - 2 );
  4817.        
  4818.         if( 0 == ( glo_eve.k_u || glo_eve.k_d ) ){
  4819.            
  4820.             //:return negative for not-a-key:
  4821.             //: NegativeOne( 0-1 ): Key event, but not number.
  4822.             key_num =( 0 - 1 );
  4823.  
  4824.         }else{
  4825.             var key = ( glo_eve.key );
  4826.            
  4827.             if( "1"==key || "!"==key ){
  4828.                 key_num = ( 1 );
  4829.             }else
  4830.             if( "2"==key || "@"==key ){
  4831.                 key_num = ( 2 );
  4832.             }else
  4833.             if( "3"==key || "#"==key ){
  4834.                 key_num = ( 3 );
  4835.             }else
  4836.             if( "4"==key || "$"==key ){
  4837.                 key_num = ( 4 );
  4838.             }else
  4839.             if( "5"==key || "%"==key ){
  4840.                 key_num = ( 5 );
  4841.             }else
  4842.             if( "6"==key || "^"==key ){
  4843.                 key_num = ( 6 );
  4844.             }else
  4845.             if( "7"==key || "&"==key ){
  4846.                 key_num = ( 7 );
  4847.             }else
  4848.             if( "8"==key || "*"==key ){
  4849.                 key_num = ( 8 );
  4850.             }else
  4851.             if( "9"==key || "("==key ){
  4852.                 key_num = ( 9 );
  4853.             }else
  4854.             if( "0"==key || ")"==key ){
  4855.                 key_num = ( 0 );
  4856.             };;
  4857.         };;
  4858.  
  4859.         //:key_num is negative if could not resolve the
  4860.         //:key to a number.
  4861.         return( key_num );
  4862.     };;
  4863.  
  4864. //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
  4865. //:                          (ABOVE)                         ://
  4866. //:NF: Namespaced_Functions: (CONTI):------------------------://
  4867. //:                          (BELOW)                         ://
  4868. //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
  4869.  
  4870.     //:GS:GetShader:(BELOW):---------------------------------://
  4871.     //:GSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGS://
  4872.     function AA2_Get_edi_sha_src( edi_mod ){
  4873.         let N = "\n"; //:NewLine
  4874.         var code = "";
  4875.  
  4876.         //:00000000000000000000000000000000000000000000000000://
  4877.         ;;;;;;if( 0 == edi_mod ){ code=(""
  4878.         +N+"                                                   "
  4879.         +N+"                                                   "
  4880.         +N+"  //:Calculate_On_Screen_Pixel_Coords:             "
  4881.         +N+"                                                   "
  4882.         +N+"  float r = 0.2;                                   "
  4883.         +N+"  float g = 0.2;                                   "
  4884.         +N+"  float b = 0.2;                                   "
  4885.         +N+"  float a = 1.0;                                   "
  4886.         +N+"                                                   "                                        
  4887.         +N+"  uvec4 intrgba = Get_Tex_iso_mem(                 "
  4888.         +N+"  /**/ int(   ( gl_FragCoord.x - 0.5 ) )           "
  4889.         +N+"  ,                                                "
  4890.         +N+"      (int( SAN_ISO ) - 1) //: FLIP_Y              "
  4891.         +N+"      -int(   ( gl_FragCoord.y - 0.5 ) )           "                      
  4892.         +N+"  );;                                              "
  4893.         +N+"                                                   "
  4894.         +N+"  r = float( intrgba.x ) / 255.0;                  "
  4895.         +N+"  g = float( intrgba.y ) / 255.0;                  "
  4896.         +N+"  b = float( intrgba.z ) / 255.0;                  "
  4897.         +N+"  a = float( intrgba.w ) / 255.0;                  "
  4898.         +N+"                                                   "
  4899.         +N+"  float flt_gam_tim = float( gam_tim ) / 255.0;    "
  4900.         +N+"  r = r + sin( flt_gam_tim +   0.000 );            "
  4901.         +N+"  g = g + sin( flt_gam_tim +  64.000 );            "
  4902.         +N+"  b = b + sin( flt_gam_tim + 128.000 );            "
  4903.         +N+"                                                   "
  4904.         +N+"  pix_fra = vec4( r,g,b,a);                        "
  4905.         +N+"                                                   "
  4906.         +N+"                                                   "
  4907.         );;};;
  4908.         //:00000000000000000000000000000000000000000000000000://
  4909.     //:111111111111111111111111111111111111111111111111111111://
  4910.     if( 1 == edi_mod ){ code=(  ""
  4911.  
  4912. +N+"  //:P:test_bed_shaders_prelude:(BELOW):---------://"//[P]//
  4913. +N+"  //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://"//[P]//
  4914. +N+"                                                    "//[P]//
  4915. +N+"  //:dex_sha:Which test bed shader is active?       "//[P]//
  4916. +N+"  uint dex_sha = TAU_001_U32(                       "//[P]//
  4917. +N+"                 TAU_001_EDIT001_dex_sha            "//[P]//
  4918. +N+"  );;                                               "//[P]//
  4919. +N+"                                                    "//[P]//
  4920. +N+"      //:ZP:Zoom_Pan_fragCoordTransform:(BELOW):-://"//[P]//
  4921. +N+"      //:ZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZP://"//[P]//
  4922. +N+"                                                    "//[P]//
  4923. +N+"      //|¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯¯¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯|//"//[P]//
  4924. +N+"      //|VARIABLES_BELOW:SC[ V2M_JS_2020_05_27 ] |//"//[P]//
  4925. +N+"      //|- - - - - - - - - - - -- - - - - - - - -|//"//[P]//
  4926. +N+"      //| vp0_m_o : Viewport[ 0 ][ MAV ][ OUT ]  |//"//[P]//
  4927. +N+"      //| vp0_m_i : Viewport[ 0 ][ MAV ][ INN ]  |//"//[P]//
  4928. +N+"      //| vp2_m_o : Viewport[ 2 ][ MAV ][ OUT ]  |//"//[P]//
  4929. +N+"      //| vp2_m_i : Viewport[ 2 ][ MAV ][ INN ]  |//"//[P]//
  4930. +N+"      //| vpc_m_o : Viewport[ c ][ MAV ][ OUT ]  |//"//[P]//
  4931. +N+"      //| vpc_m_i : Viewport[ c ][ MAV ][ INN ]  |//"//[P]//
  4932. +N+"      //| vpc_n_o : Viewport[ c ][ NOR ][ OUT ]  |//"//[P]//
  4933. +N+"      //| vpc_n_i : Viewport[ c ][ NOR ][ INN ]  |//"//[P]//
  4934. +N+"      //|__ __ __ __ __ __ __ ____ __ __ __ __ __|//"//[P]//
  4935. +N+"                                                  //"//[P]//
  4936. +N+"      vec2 vp0_m_i =vec2(                         //"//[P]//
  4937. +N+"          gl_FragCoord.x                          //"//[P]//
  4938. +N+"      ,                                           //"//[P]//
  4939. +N+"          (rec_vpc.y_1-rec_vpc.y_0+0.0)           //"//[P]//
  4940. +N+"        - gl_FragCoord.y //:[FLIP_Y]://           //"//[P]//
  4941. +N+"      );;                                         //"//[P]//
  4942. +N+"                                                  //"//[P]//
  4943. +N+"      //:----------------------------------------://"//[P]//
  4944. +N+"      //: [ rec_vp0/vp0_m_i ]TO[ rec_vp2/vp2_m_o ]//"//[P]//
  4945. +N+"      //: INN: vp0 ( rec_vp0 & vp0_m_i )          //"//[P]//
  4946. +N+"      //: OUT: vp2 ( rec_vp2 & vp2_m_o )          //"//[P]//
  4947. +N+"      //:----------------------------------------://"//[P]//
  4948. +N+"      vec2 vp2_m_o=vec2(                          //"//[P]//
  4949. +N+"              ( ( vp0_m_i.x   - rec_vp0.x_0 )     //"//[P]//
  4950. +N+"              / ( rec_vp0.x_1 - rec_vp0.x_0 )     //"//[P]//
  4951. +N+"              * ( rec_vp2.x_1 - rec_vp2.x_0 )     //"//[P]//
  4952. +N+"              ) + rec_vp2.x_0 ///////////////     //"//[P]//
  4953. +N+"      ,                                           //"//[P]//
  4954. +N+"              ( ( vp0_m_i.y   - rec_vp0.y_0 )     //"//[P]//
  4955. +N+"              / ( rec_vp0.y_1 - rec_vp0.y_0 )     //"//[P]//
  4956. +N+"              * ( rec_vp2.y_1 - rec_vp2.y_0 )     //"//[P]//
  4957. +N+"              ) + rec_vp2.y_0 ///////////////     //"//[P]//
  4958. +N+"      );;                                         //"//[P]//
  4959. +N+"      //:----------------------------------------://"//[P]//
  4960. +N+"                                                  //"//[P]//
  4961. +N+"      //: Output_Becomes_Input:                   //"//[P]//
  4962. +N+"      vec2 vp2_m_i = vec2( vp2_m_o );             //"//[P]//
  4963. +N+"                                                  //"//[P]//
  4964. +N+"      //:----------------------------------------://"//[P]//
  4965. +N+"      //: YES. we are using rec_vpc AGAIN!        //"//[P]//
  4966. +N+"      //: The formula is just an assignment,      //"//[P]//
  4967. +N+"      //: because vp2 is a sub-sample of vpc.     //"//[P]//
  4968. +N+"      //:                                         //"//[P]//
  4969. +N+"      //: [ rec_vp2/vp2_m_i ]TO[ rec_vpc/vpc_m_o ]//"//[P]//
  4970. +N+"      //: INN: vp2 ( rec_vp2 & vp2_m_i )          //"//[P]//
  4971. +N+"      //: OUT: vpc ( rec_vpc / vpc_m_o )          //"//[P]//
  4972. +N+"      //:----------------------------------------://"//[P]//
  4973. +N+"      vec2 vpc_m_o =vec2( vp2_m_i );              //"//[P]//
  4974. +N+"      //:----------------------------------------://"//[P]//
  4975. +N+"                                                  //"//[P]//
  4976. +N+"      //: Output_Becomes_Input:                   //"//[P]//
  4977. +N+"      //: Already used[ vpc_m_i ]so we will call  //"//[P]//
  4978. +N+"      //: this var    [ vpc_mi2 ]to avoid prblms. //"//[P]//
  4979. +N+"      vec2 vpc_mi2 = vec2( vpc_m_o );             //"//[P]//
  4980. +N+"                                                  //"//[P]//
  4981. +N+"      //:----------------------------------------://"//[P]//
  4982. +N+"      //: [rec_vpc/vpc_m_i]TO[rec_vpc/vpc_n_o]    //"//[P]//
  4983. +N+"      //: Formula is simpler this time because we //"//[P]//
  4984. +N+"      //: only want the percentage_along_path on  //"//[P]//
  4985. +N+"      //: the sides of rec_vpc.                   //"//[P]//
  4986. +N+"      //:----------------------------------------://"//[P]//
  4987. +N+"      vec2 vpc_n_o = vec2(                        //"//[P]//
  4988. +N+"          (( vpc_mi2.x  - rec_vpc.x_0 )           //"//[P]//
  4989. +N+"          /( rec_vpc.x_1- rec_vpc.x_0 ))          //"//[P]//
  4990. +N+"          ,                                       //"//[P]//
  4991. +N+"          (( vpc_mi2.y  - rec_vpc.y_0 )           //"//[P]//
  4992. +N+"          /( rec_vpc.y_1- rec_vpc.y_0 ))          //"//[P]//
  4993. +N+"      );;                                         //"//[P]//
  4994. +N+"      //:----------------------------------------://"//[P]//
  4995. +N+"                                                  //"//[P]//
  4996. +N+"      //: Output_Becomes_Input:                   //"//[P]//
  4997. +N+"      vec2 vpc_n_i = vec2( vpc_n_o );             //"//[P]//
  4998. +N+"                                                  //"//[P]//
  4999. +N+"      //:These normalized coordinates represent   //"//[P]//
  5000. +N+"      //:rec_vpc coordinates after rec_vp2 has    //"//[P]//
  5001. +N+"      //:ZOOMED and PANNED over rec_vpc.          //"//[P]//
  5002. +N+"      vec2 tbs_noc = vec2( vpc_n_i );             //"//[P]//
  5003. +N+"                                                  //"//[P]//
  5004. +N+"      //:ZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZP://"//[P]//
  5005. +N+"      //:ZP:Zoom_Pan_fragCoordTransform:(BELOW):-://"//[P]//
  5006. +N+"                                                  //"//[P]//
  5007. +N+"  //:Make test bed shaders aware of vp0 bounds so //"//[P]//
  5008. +N+"  //:you can draw the shader code inset.          //"//[P]//
  5009. +N+"                                                  //"//[P]//
  5010. +N+"  #define R_0 ( rec_vp0 ) //:///////////////////////"//[P]//
  5011. +N+"  float VP0_WID =( R_0.x_1 - R_0.x_0 + 1.0 );     //"//[P]//
  5012. +N+"  float VP0_HIG =( R_0.y_1 - R_0.y_0 + 1.0 );     //"//[P]//
  5013. +N+"  #undef  R_0 //:///////////////////////////////////"//[P]//
  5014. +N+"                                                  //"//[P]//
  5015. +N+"  //:Variables for test bed shaders:              //"//[P]//
  5016. +N+"  float tbs_tim = float( gam_tim ) / 255.0;       //"//[P]//
  5017. +N+"                                                  //"//[P]//
  5018. +N+"  //:N0:Normalized_Within_VP0:SC[tbs_noc_vp0_math]//"//[P]//
  5019. +N+"  //:N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0://"//[P]//
  5020. +N+"  //:                                            ://"//[P]//
  5021. +N+"  //: tbs_noc: 0.0 to 1.0 when pixel in rec_vp0  ://"//[P]//
  5022. +N+"  //:                                            ://"//[P]//
  5023. +N+"  //:N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0://"//[P]//
  5024. +N+"                                                  //"//[P]//
  5025. +N+"  //: ###########################################://"//[P]//
  5026. +N+"  //: ##                                       ##://"//[P]//
  5027. +N+"  //: ##    |<----gl_FragCoord(Rougly)--->|    ##://"//[P]//
  5028. +N+"  //: ## ( min )                       ( min ) ##://"//[P]//
  5029. +N+"  //: ## tbs_uic                       tbs_uic ##://"//[P]//
  5030. +N+"  //: ##    |                             |    ##://"//[P]//
  5031. +N+"  //: ##    V                             V    ##://"//[P]//
  5032. +N+"  //: ##    |<----------- vpc ----------->|    ##://"//[P]//
  5033. +N+"  //: ##    ##---------------------------##    ##://"//[P]//
  5034. +N+"  //: ##            ##-----------##            ##://"//[P]//
  5035. +N+"  //: ##            |<--- vp0 --->|            ##://"//[P]//
  5036. +N+"  //: ##            ^             ^            ##://"//[P]//
  5037. +N+"  //: ##            |             |            ##://"//[P]//
  5038. +N+"  //: ##         tbs_noc       tbs_noc         ##://"//[P]//
  5039. +N+"  //: ##         tbs_mac       tbs_mac         ##://"//[P]//
  5040. +N+"  //: ##         ( max )       ( max )         ##://"//[P]//
  5041. +N+"  //: ##                                       ##://"//[P]//
  5042. +N+"  //: ###########################################://"//[P]//
  5043. +N+"                                                  //"//[P]//
  5044. +N+"  //:De-normalize: Make Maverick: tbs_mac         //"//[P]//
  5045. +N+"  vec2 tbs_mac = tbs_noc * vec2(                  //"//[P]//
  5046. +N+"      (VP0_WID - 1.0)//:(VP0_WID - 1)             //"//[P]//
  5047. +N+"  ,   (VP0_HIG - 1.0) //:(VP0_HIG - 1)            //"//[P]//
  5048. +N+"  );;                                             //"//[P]//
  5049. +N+"                                                  //"//[P]//
  5050. +N+"  //:N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0://"//[P]//
  5051. +N+"                                                  //"//[P]//
  5052. +N+"  //: tbs_uic: Uint_(Color|Coord)                 //"//[P]//
  5053. +N+"  uvec2 tbs_uic = uvec2(                          //"//[P]//
  5054. +N+"  /**/gl_FragCoord.x - 0.5                        //"//[P]//
  5055. +N+"  ,   gl_FragCoord.y - 0.5                        //"//[P]//
  5056. +N+"  );;                                             //"//[P]//
  5057. +N+"                                                  //"//[P]//
  5058. +N+"  bool inn_bou =(                                 //"//[P]//
  5059. +N+"      tbs_uic.x >= uint( rec_vp0.x_0 ) //:LEF     //"//[P]//
  5060. +N+"  &&  tbs_uic.x <= uint( rec_vp0.x_1 ) //:RIG     //"//[P]//
  5061. +N+"  &&  tbs_uic.y >= uint( rec_vp0.y_0 ) //:TOP     //"//[P]//
  5062. +N+"  &&  tbs_uic.y <= uint( rec_vp0.y_1 ) //:BOT     //"//[P]//
  5063. +N+"  );                                              //"//[P]//
  5064. +N+"                                                  //"//[P]//
  5065. +N+"  vec4  tbs_out = vec4( 0.3, 0.3, 0.3, 1.0 );     //"//[P]//
  5066. +N+"                                                  //"//[P]//
  5067. +N+"  //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://"//[P]//
  5068. +N+"  //:P:test_bed_shaders_prelude:(BELOW):---------://"//[P]//
  5069.  
  5070.     +N+" if( ! inn_bou ){                           "//+E1_FS+//
  5071.     +N+"       tbs_out.x =( 0.2 );                  "//+E1_FS+//
  5072.     +N+"       tbs_out.y =( 0.2 );                  "//+E1_FS+//
  5073.     +N+"       tbs_out.z =( 0.2 );                  "//+E1_FS+//
  5074.     +N+"       tbs_out.w =( 1.0 );//:100% alpha!    "//+E1_FS+//
  5075.     +N+" }else{                                     "//+E1_FS+//
  5076.     +N+" if( uint(0) == dex_sha ){                  "//+E1_FS+//
  5077.     +N+"                                            "//+E1_FS+//
  5078.     +N+"   "+AA2_EDIT001_FragSrc_dex_sha( 0 )+"     "//+E1_FS+//
  5079.     +N+"                                            "//+E1_FS+//
  5080.     +N+" };;                                        "//+E1_FS+//
  5081.     +N+" if( uint(1) == dex_sha ){                  "//+E1_FS+//
  5082.     +N+"                                            "//+E1_FS+//
  5083.     +N+"   "+AA2_EDIT001_FragSrc_dex_sha( 1 )+"     "//+E1_FS+//
  5084.     +N+"                                            "//+E1_FS+//
  5085.     +N+" };;                                        "//+E1_FS+//
  5086.     +N+" if( uint(2) == dex_sha ){                  "//+E1_FS+//
  5087.     +N+"                                            "//+E1_FS+//
  5088.     +N+"   "+AA2_EDIT001_FragSrc_dex_sha( 2 )+"     "//+E1_FS+//
  5089.     +N+"                                            "//+E1_FS+//
  5090.     +N+" };;                                        "//+E1_FS+//
  5091.     +N+" if( uint(3) == dex_sha ){                  "//+E1_FS+//
  5092.     +N+"                                            "//+E1_FS+//
  5093.     +N+"   "+AA2_EDIT001_FragSrc_dex_sha( 3 )+"     "//+E1_FS+//
  5094.     +N+"                                            "//+E1_FS+//
  5095.     +N+" };;                                        "//+E1_FS+//
  5096.     +N+" if( uint(4) == dex_sha ){                  "//+E1_FS+//
  5097.     +N+"                                            "//+E1_FS+//
  5098.     +N+"   "+AA2_EDIT001_FragSrc_dex_sha( 4 )+"     "//+E1_FS+//
  5099.     +N+"                                            "//+E1_FS+//
  5100.     +N+" };;                                        "//+E1_FS+//
  5101.     +N+" if( uint(5) == dex_sha ){                  "//+E1_FS+//
  5102.     +N+"                                            "//+E1_FS+//
  5103.     +N+"   "+AA2_EDIT001_FragSrc_dex_sha( 5 )+"     "//+E1_FS+//
  5104.     +N+"                                            "//+E1_FS+//
  5105.     +N+" };;                                        "//+E1_FS+//
  5106.     +N+" if( uint(6) == dex_sha ){                  "//+E1_FS+//
  5107.     +N+"                                            "//+E1_FS+//
  5108.     +N+"   "+AA2_EDIT001_FragSrc_dex_sha( 6 )+"     "//+E1_FS+//
  5109.     +N+"                                            "//+E1_FS+//
  5110.     +N+" };;                                        "//+E1_FS+//
  5111.     +N+" if( uint(7) == dex_sha ){                  "//+E1_FS+//
  5112.     +N+"                                            "//+E1_FS+//
  5113.     +N+"   "+AA2_EDIT001_FragSrc_dex_sha( 7 )+"     "//+E1_FS+//
  5114.     +N+"                                            "//+E1_FS+//
  5115.     +N+" };;                                        "//+E1_FS+//
  5116.     +N+" if( uint(8) == dex_sha ){                  "//+E1_FS+//
  5117.     +N+"                                            "//+E1_FS+//
  5118.     +N+"   "+AA2_EDIT001_FragSrc_dex_sha( 8 )+"     "//+E1_FS+//
  5119.     +N+"                                            "//+E1_FS+//
  5120.     +N+" };;                                        "//+E1_FS+//
  5121.     +N+" if( uint(9) == dex_sha ){                  "//+E1_FS+//
  5122.     +N+"                                            "//+E1_FS+//
  5123.     +N+"   "+AA2_EDIT001_FragSrc_dex_sha( 9 )+"     "//+E1_FS+//
  5124.     +N+"                                            "//+E1_FS+//
  5125.     +N+" };;                                        "//+E1_FS+//
  5126.     +N+"                                            "//+E1_FS+//
  5127.     +N+" };; //:inn_bou?                            "//+E1_FS+//
  5128.     +N+"                                            "//+E1_FS+//
  5129.     +N+" //:Test bed shaders outro:                 "//+E1_FS+//
  5130.     +N+" //://///////////////////////////////////://"//+E1_FS+//
  5131.     +N+" //: Load output of tbs shader branch:      "//+E1_FS+//
  5132.     +N+" //: fragColorVariable == tbs_out;          "//+E1_FS+//
  5133.     +N+"     pix_fra = tbs_out;                     "//+E1_FS+//
  5134.     +N+" //://///////////////////////////////////://"//+E1_FS+//
  5135.         );;};;//:////////////////////////////////////////////://
  5136.     //:111111111111111111111111111111111111111111111111111111://
  5137.     //:222222222222222222222222222222222222222222222222222222://
  5138.     //:TAGS[ #SHADER_CODE# / #shader_code# ]:::::::::::::::::://
  5139.     if(        2 == edi_mod ){ code=(""
  5140.    
  5141.     +N+"//:DA:DeclareAll_Variables:(BELOW):--------://"//[E_2]//
  5142.     +N+"//:DADADADADADADADADADADADADADADADADADADADA://"//[E_2]//
  5143.     +N+"//:                                           "//[E_2]//
  5144.     +N+"//: Logic transcribed from DAS_BOR.HTM        "//[E_2]//
  5145.     +N+"//: All variables declared up front to help   "//[E_2]//
  5146.     +N+"//: me get my head straight on all of this.   "//[E_2]//
  5147.     +N+"//:                                           "//[E_2]//
  5148.     +N+"//:DADADADADADADADADADADADADADADADADADADADA://"//[E_2]//
  5149.     +N+"                                              "//[E_2]//
  5150.     +N+"    REC_INC rec_src  ; //: rec_vp1            "//[E_2]//
  5151.     +N+"    REC_INC rec_dst  ; //: rec_vp0            "//[E_2]//
  5152.     +N+"    float   vpc_hig  ; //: FLIP__Y            "//[E_2]//
  5153.     +N+"                                              "//[E_2]//
  5154.     +N+"    //:Configuration: Source_Encoding_Cluster "//[E_2]//
  5155.     +N+"    //:How many pixels are used to encode a   "//[E_2]//
  5156.     +N+"    //:single tile value?                     "//[E_2]//
  5157.     +N+"    float SRC_ENC_C_X =(1.0); //:Cluster_X    "//[E_2]//
  5158.     +N+"    float SRC_ENC_C_Y =(1.0); //:Cluster_Y    "//[E_2]//
  5159.     +N+"                                              "//[E_2]//
  5160.     +N+"    //:VS:Viewport_Sizes:------------------://"//[E_2]//
  5161.     +N+"    //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://"//[E_2]//
  5162.     +N+"                                              "//[E_2]//
  5163.     +N+"        float vp0_wid; //:dst_wid[(dx1-dx0+1)]"//[E_2]//
  5164.     +N+"        float vp0_hig; //:dst_hig[(dy1-dy0+1)]"//[E_2]//
  5165.     +N+"                                              "//[E_2]//
  5166.     +N+"        float vp1_wid; //:src_wid[(sx1-sx0+1)]"//[E_2]//
  5167.     +N+"        float vp1_hig; //:src_hig[(sy1-sy0+1)]"//[E_2]//
  5168.     +N+"                                              "//[E_2]//
  5169.     +N+"    //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://"//[E_2]//
  5170.     +N+"    //:U:Uniforms:-------------------------://"//[E_2]//
  5171.     +N+"    //:UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU://"//[E_2]//
  5172.     +N+"                                              "//[E_2]//
  5173.     +N+"    //:#CAM_TXY_IS_CAM_UNITS#://              "//[E_2]//
  5174.     +N+"    uint     til_exp ; //:TileExponent        "//[E_2]//
  5175.     +N+"    uint     til_san ; //:TileSpan( 2^til_exp)"//[E_2]//
  5176.     +N+"    uint     cam_t_x ; //:CAMERA_TILE:X       "//[E_2]//
  5177.     +N+"    uint     cam_t_y ; //:CAMERA_TILE:Y       "//[E_2]//
  5178.     +N+"                                              "//[E_2]//
  5179.     +N+"    //:dex_hot:OfMemoryCell:ToSample          "//[E_2]//
  5180.     +N+"    //:Must be prefixed with [e02] so we      "//[E_2]//
  5181.     +N+"    //:don't collide with uniform of the      "//[E_2]//
  5182.     +N+"    //:same name.                             "//[E_2]//
  5183.     +N+"    uint e02_dex_hot ;                        "//[E_2]//
  5184.     +N+"                                              "//[E_2]//
  5185.     +N+"    //:UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU://"//[E_2]//
  5186.     +N+"    //:SD:Source_and_Dest:-----------------://"//[E_2]//
  5187.     +N+"    //:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
  5188.     +N+"                                              "//[E_2]//
  5189.     +N+"    //:SOURCE::(OFFSCREEN_DATA)::::::::::::://"//[E_2]//
  5190.     +N+"    //:[ rec_vp1 | rec_src ].[x_0|x_1|y_0|y_1]"//[E_2]//
  5191.     +N+"    float        sx0 ; //:[ vp1 | src ].x_0   "//[E_2]//
  5192.     +N+"    float        sx1 ; //:[ vp1 | src ].x_1   "//[E_2]//
  5193.     +N+"    float        sy0 ; //:[ vp1 | src ].y_0   "//[E_2]//
  5194.     +N+"    float        sy1 ; //:[ vp1 | src ].y_1   "//[E_2]//
  5195.     +N+"                                              "//[E_2]//
  5196.     +N+"        //:Source_as:Number_Of_Sections       "//[E_2]//
  5197.     +N+"        //:Size of viewport unless using      "//[E_2]//
  5198.     +N+"        //:multiple pixels to encode one tile."//[E_2]//
  5199.     +N+"        //://:IF[1:1]THEN[n_x =(sx1-sx0+1)]   "//[E_2]//
  5200.     +N+"        float    n_x ;                        "//[E_2]//
  5201.     +N+"        float    n_y ;                        "//[E_2]//
  5202.     +N+"                                              "//[E_2]//
  5203.     +N+"        //:src_as:offmoni_data_pixel_coord:://"//[E_2]//
  5204.     +N+"        //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
  5205.     +N+"                                              "//[E_2]//
  5206.     +N+"            //:Actual location of the data on "//[E_2]//
  5207.     +N+"            //:bitmap encoding our tile values"//[E_2]//
  5208.     +N+"            float        s_x ; //:Loc:BM/Data "//[E_2]//
  5209.     +N+"            float        s_y ; //:Loc:BM/Data "//[E_2]//
  5210.     +N+"                                              "//[E_2]//
  5211.     +N+"            //: Zeroed out location used to   "//[E_2]//
  5212.     +N+"            //: calculate the internal coords "//[E_2]//
  5213.     +N+"            //: of the current tile in focus. "//[E_2]//
  5214.     +N+"            float    loc_s_x ; //:ZeroedOutLoc"//[E_2]//
  5215.     +N+"            float    loc_s_y ; //:ZeroedOutLoc"//[E_2]//
  5216.     +N+"                                              "//[E_2]//
  5217.     +N+"        //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
  5218.     +N+"                                              "//[E_2]//
  5219.     +N+"    //:DEST::::::::::::::::::::::::::::::::://"//[E_2]//
  5220.     +N+"    //:[ rec_vp0 == rec_dst ]:::::::::::://   "//[E_2]//
  5221.     +N+"    float        dx0 ; //:[ vp0 | dst ].x_0   "//[E_2]//
  5222.     +N+"    float        dx1 ; //:[ vp0 | dst ].x_1   "//[E_2]//
  5223.     +N+"    float        dy0 ; //:[ vp0 | dst ].y_0   "//[E_2]//
  5224.     +N+"    float        dy1 ; //:[ vp0 | dst ].y_1   "//[E_2]//
  5225.     +N+"                                              "//[E_2]//
  5226.     +N+"        //:Dest_as:fragment_coord::::::::::://"//[E_2]//
  5227.     +N+"        float    f_x ; //:[Frag/Screen]Coord:X"//[E_2]//
  5228.     +N+"        float    f_y ; //:[Frag/Screen]Coord:Y"//[E_2]//
  5229.     +N+"                                              "//[E_2]//
  5230.     +N+"        //:Dest_as:screen_pixel_coord::::::://"//[E_2]//
  5231.     +N+"        float    d_x ; //:Destination:X       "//[E_2]//
  5232.     +N+"        float    d_y ; //:Destination:Y       "//[E_2]//
  5233.     +N+"                                              "//[E_2]//
  5234.     +N+"        int  int_d_x ; //:d_x as integer      "//[E_2]//
  5235.     +N+"        int  int_d_y ; //:d_y as integer      "//[E_2]//
  5236.     +N+"                                              "//[E_2]//
  5237.     +N+"        //:Local_To[ rec_vp0 / rec_dst ]      "//[E_2]//
  5238.     +N+"        float    ldx ; //:d_x local           "//[E_2]//
  5239.     +N+"        float    ldy ; //:d_y local           "//[E_2]//
  5240.     +N+"                                              "//[E_2]//
  5241.     +N+"    //:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
  5242.     +N+"    //:TS:TileSize:------------------------://"//[E_2]//
  5243.     +N+"    //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://"//[E_2]//
  5244.     +N+"                                              "//[E_2]//
  5245.     +N+"        //:  Vars for mapping local coords ://"//[E_2]//
  5246.     +N+"        //:  of a tile-sprite onto the     ://"//[E_2]//
  5247.     +N+"        //:  [ screen/rec_vp0/rec_vpc ].   ://"//[E_2]//
  5248.     +N+"                                              "//[E_2]//
  5249.     +N+"        //: [T:TileSize][P:Pixels][0:rec_vp0] "//[E_2]//
  5250.     +N+"        float tp0_wid ;                       "//[E_2]//
  5251.     +N+"        float tp0_hig ;                       "//[E_2]//
  5252.     +N+"                                              "//[E_2]//
  5253.     +N+"        //:tinco:TileINternalCOordinate:      "//[E_2]//
  5254.     +N+"        float tinco_x ; //:CURRENT:x          "//[E_2]//
  5255.     +N+"        float tinco_y ; //:CURRENT:y          "//[E_2]//
  5256.     +N+"        float tincox0 ; //:( X0 AKA MIN )     "//[E_2]//
  5257.     +N+"        float tincoy0 ; //:( Y0 AKA MIN )     "//[E_2]//
  5258.     +N+"        float tincox1 ; //:( X1 AKA MAX )     "//[E_2]//
  5259.     +N+"        float tincoy1 ; //:( Y1 AKA MAX )     "//[E_2]//
  5260.     +N+"                                              "//[E_2]//
  5261.     +N+"            //:SG:SquareGradient:----------://"//[E_2]//
  5262.     +N+"            //:SGSGSGSGSGSGSGSGSGSGSGSGSGSG://"//[E_2]//
  5263.     +N+"                                              "//[E_2]//
  5264.     +N+"            //:DIStances:from_edges_of_tile:  "//[E_2]//
  5265.     +N+"            float dis_lef ;                   "//[E_2]//
  5266.     +N+"            float dis_rig ;                   "//[E_2]//
  5267.     +N+"            float dis_top ;                   "//[E_2]//
  5268.     +N+"            float dis_bot ;                   "//[E_2]//
  5269.     +N+"                                              "//[E_2]//
  5270.     +N+"            //:TED:Tile_EDge(distances):      "//[E_2]//
  5271.     +N+"            float ted_m_x ; //:MAV_X          "//[E_2]//
  5272.     +N+"            float ted_m_y ; //:MAV_Y          "//[E_2]//
  5273.     +N+"            float ted_mav ; //:MAV_1D         "//[E_2]//
  5274.     +N+"            float ted_nor ; //:NOR_1D         "//[E_2]//
  5275.     +N+"                                              "//[E_2]//
  5276.     +N+"            //:SGSGSGSGSGSGSGSGSGSGSGSGSGSG://"//[E_2]//
  5277.     +N+"                                              "//[E_2]//
  5278.     +N+"    //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://"//[E_2]//
  5279.     +N+"                                              "//[E_2]//
  5280.     +N+"                                              "//[E_2]//
  5281.     +N+"//:DADADADADADADADADADADADADADADADADADADADA://"//[E_2]//
  5282.     +N+"//:DA:DeclareAll_Variables:(ABOVE):--------://"//[E_2]//
  5283.     +N+"                                              "//[E_2]//
  5284.     +N+"//:LU:Load_Uniform_values:(BELOW):---------://"//[E_2]//
  5285.     +N+"//:LULULULULULULULULULULULULULULULULULULULU://"//[E_2]//
  5286.     +N+"#define TIL_EXP ( TAU_001_EDIT002_til_exp )   "//[E_2]//
  5287.     +N+"#define TIL_SAN ( TAU_001_EDIT002_til_san )   "//[E_2]//
  5288.     +N+"#define CAM_T_X ( TAU_001_EDIT002_cam_t_x )   "//[E_2]//
  5289.     +N+"#define CAM_T_Y ( TAU_001_EDIT002_cam_t_y )   "//[E_2]//
  5290.     +N+"#define DEX_HOT ( TAU_001_EDIT002_dex_hot )   "//[E_2]//
  5291.     +N+"                                              "//[E_2]//
  5292.     +N+"        til_exp = TAU_001_U32( TIL_EXP );     "//[E_2]//
  5293.     +N+"        til_san = TAU_001_U32( TIL_SAN );     "//[E_2]//
  5294.     +N+"        cam_t_x = TAU_001_U32( CAM_T_X );     "//[E_2]//
  5295.     +N+"        cam_t_y = TAU_001_U32( CAM_T_Y );     "//[E_2]//
  5296.     +N+"    e02_dex_hot = TAU_001_U32( DEX_HOT );     "//[E_2]//
  5297.     +N+"                                              "//[E_2]//
  5298.     +N+"#undef  TIL_EXP  //:///////////////////////://"//[E_2]//
  5299.     +N+"#undef  TIL_SAN  //:///////////////////////://"//[E_2]//
  5300.     +N+"#undef  CAM_T_X  //:///////////////////////://"//[E_2]//
  5301.     +N+"#undef  CAM_T_Y  //:///////////////////////://"//[E_2]//
  5302.     +N+"#undef  DEX_HOT  //:///////////////////////://"//[E_2]//
  5303.     +N+"//:LULULULULULULULULULULULULULULULULULULULU://"//[E_2]//
  5304.     +N+"                                              "//[E_2]//
  5305.     +N+"//:SD:Source_and_Destination:(BELOW):------://"//[E_2]//
  5306.     +N+"//:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
  5307.     +N+"                                              "//[E_2]//
  5308.     +N+"    //:SOURCE:VIEWPORT:////:///////////////://"//[E_2]//
  5309.     +N+"    //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
  5310.     +N+"    //: Determine size of camera in tiles::://"//[E_2]//
  5311.     +N+"    //: Math.pow(2,til_exp) === til_san    ://"//[E_2]//
  5312.     +N+"    #define T_X ( float( cam_t_x ) ) //:///://"//[E_2]//
  5313.     +N+"    #define T_Y ( float( cam_t_y ) ) //:///://"//[E_2]//
  5314.     +N+"    #define SAN ( float( til_san ) ) //:///://"//[E_2]//
  5315.     +N+"                                              "//[E_2]//
  5316.     +N+"    //:|   0   ||   1   ||   2   |            "//[E_2]//
  5317.     +N+"    //:[0][1][2][3][4][5][6][7][8]//:rec_vp1  "//[E_2]//
  5318.     +N+"    sx0 = (  T_X * SAN ) + 0.0 - 0.0; //:vp1  "//[E_2]//
  5319.     +N+"    sx1 = (  T_X * SAN ) + SAN - 1.0; //:vp1  "//[E_2]//
  5320.     +N+"    sy0 = (  T_Y * SAN ) + 0.0 - 0.0; //:vp1  "//[E_2]//
  5321.     +N+"    sy1 = (  T_Y * SAN ) + SAN - 1.0; //:vp1  "//[E_2]//
  5322.     +N+"                                              "//[E_2]//
  5323.     +N+"    n_x = ( sx1 - sx0 + 1.0 ) / SRC_ENC_C_X;  "//[E_2]//
  5324.     +N+"    n_y = ( sy1 - sy0 + 1.0 ) / SRC_ENC_C_Y;  "//[E_2]//
  5325.     +N+"                                              "//[E_2]//
  5326.     +N+"    #undef  T_X  //:///////////////////////://"//[E_2]//
  5327.     +N+"    #undef  T_Y  //:///////////////////////://"//[E_2]//
  5328.     +N+"    #undef  SAN  //:///////////////////////://"//[E_2]//
  5329.     +N+"    //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
  5330.     +N+"    //:SOURCE + DEST: DAS_BOR.HTM :           "//[E_2]//
  5331.     +N+"    //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://"//[E_2]//
  5332.     +N+"                                              "//[E_2]//
  5333.     +N+"    //:SOURCE:[ rec_vp1 ]AKA[ rec_src ]       "//[E_2]//
  5334.     +N+"    rec_src.x_0 = sx0 ; //: [ vp1|src ]       "//[E_2]//
  5335.     +N+"    rec_src.x_1 = sx1 ; //: [ vp1|src ]       "//[E_2]//
  5336.     +N+"    rec_src.y_0 = sy0 ; //: [ vp1|src ]       "//[E_2]//
  5337.     +N+"    rec_src.y_1 = sy1 ; //: [ vp1|src ]       "//[E_2]//
  5338.     +N+"                                              "//[E_2]//
  5339.     +N+"    //:DEST:::[ rec_vp0 ]AKA[ rec_dst ]       "//[E_2]//
  5340.     +N+"          rec_dst =(          rec_vp0 );      "//[E_2]//
  5341.     +N+"    dx0 = rec_dst.x_0 ; //: [ dst|vp0 ]       "//[E_2]//
  5342.     +N+"    dx1 = rec_dst.x_1 ; //: [ dst|vp0 ]       "//[E_2]//
  5343.     +N+"    dy0 = rec_dst.y_0 ; //: [ dst|vp0 ]       "//[E_2]//
  5344.     +N+"    dy1 = rec_dst.y_1 ; //: [ dst|vp0 ]       "//[E_2]//
  5345.     +N+"                                              "//[E_2]//
  5346.     +N+"    //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://"//[E_2]//
  5347.     +N+"    //:CP:Current_Pixel:-------------------://"//[E_2]//
  5348.     +N+"    //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://"//[E_2]//
  5349.     +N+"    f_x = gl_FragCoord.x;                     "//[E_2]//
  5350.     +N+"    f_y = gl_FragCoord.y;                     "//[E_2]//
  5351.     +N+"                                              "//[E_2]//
  5352.     +N+"    vpc_hig =(                                "//[E_2]//
  5353.     +N+"          rec_vpc.y_1                         "//[E_2]//
  5354.     +N+"        - rec_vpc.y_0 + 1.0                   "//[E_2]//
  5355.     +N+"    );;                                       "//[E_2]//
  5356.     +N+"                                              "//[E_2]//
  5357.     +N+"    int_d_x = int( gl_FragCoord.x - 0.5 );    "//[E_2]//
  5358.     +N+"    int_d_y = int(                            "//[E_2]//
  5359.     +N+"         ( vpc_hig        - 1.0 ) //:FLIP_Y   "//[E_2]//
  5360.     +N+"        -( gl_FragCoord.y - 0.5 )             "//[E_2]//
  5361.     +N+"    );;                                       "//[E_2]//
  5362.     +N+"    d_x = float( int_d_x );                   "//[E_2]//
  5363.     +N+"    d_y = float( int_d_y );                   "//[E_2]//
  5364.     +N+"    //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://"//[E_2]//
  5365.     +N+"//:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
  5366.     +N+"//:SD:Source_and_Destination:(ABOVE):------://"//[E_2]//
  5367.     +N+"                                              "//[E_2]//
  5368.     +N+"//:==================================://      "//[E_2]//
  5369.     +N+"//: #DAS_BOR_HTM_LOOP_COMMENT#   ::::://      "//[E_2]//
  5370.     +N+"//:_loop_through_every_pixel_of__::::://      "//[E_2]//
  5371.     +N+"//:_CANVAS_instead_of_every_pixel::::://      "//[E_2]//
  5372.     +N+"//:_of_destination_viewport______::::://      "//[E_2]//
  5373.     +N+"#define MACRO_rec_dst ( rec_vp0 ) //:://      "//[E_2]//
  5374.     +N+"int outside_destination_viewport=( 1 );       "//[E_2]//
  5375.     +N+"if( d_x >= rec_dst.x_0 ){//:LEF://            "//[E_2]//
  5376.     +N+"if( d_x <= rec_dst.x_1 ){//:RIG://            "//[E_2]//
  5377.     +N+"if( d_y >= rec_dst.y_0 ){//:TOP://            "//[E_2]//
  5378.     +N+"if( d_y <= rec_dst.y_1 ){//:BOT://            "//[E_2]//
  5379.     +N+"    outside_destination_viewport=( 0 );       "//[E_2]//
  5380.     +N+"};;};;};;};;                                  "//[E_2]//
  5381.     +N+"#undef MACRO_rec_dst //://///////////://      "//[E_2]//
  5382.     +N+"//:==================================://      "//[E_2]//
  5383.     +N+"                                              "//[E_2]//
  5384.     +N+"uvec4 dye_out;                                "//[E_2]//
  5385.     +N+"if( outside_destination_viewport > 0 ){       "//[E_2]//
  5386.     +N+"                                              "//[E_2]//
  5387.     +N+"    dye_out.x =uint(   0 );                   "//[E_2]//
  5388.     +N+"    dye_out.y =uint(  64 );                   "//[E_2]//
  5389.     +N+"    dye_out.z =uint( 128 );                   "//[E_2]//
  5390.     +N+"    dye_out.w =uint( 255 );                   "//[E_2]//
  5391.     +N+"                                              "//[E_2]//
  5392.     +N+"}else                                         "//[E_2]//
  5393.     +N+"if( 0 == outside_destination_viewport ){      "//[E_2]//
  5394.     +N+"                                              "//[E_2]//
  5395.     +N+"    //:WH:Wid-&-Hig:-----------------------://"//[E_2]//
  5396.     +N+"    //:WHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWH://"//[E_2]//
  5397.     +N+"    //: ANOTHER_WAY_TO_CALCULATE_SAME_THING:  "//[E_2]//
  5398.     +N+"    //: vp0_wid =( rec_vp0[ x_1 - x_0 ] + 1 );"//[E_2]//
  5399.     +N+"    //: vp0_hig =( rec_vp0[ y_1 - y_0 ] + 1 );"//[E_2]//
  5400.     +N+"    //: vp1_wid =( rec_vp1[ x_1 - x_0 ] + 1 );"//[E_2]//
  5401.     +N+"    //: vp1_hig =( rec_vp1[ y_1 - y_0 ] + 1 );"//[E_2]//
  5402.     +N+"                                              "//[E_2]//
  5403.     +N+"    vp0_wid = (dx1 - dx0 + 1.0); //:DEST:WID  "//[E_2]//
  5404.     +N+"    vp0_hig = (dy1 - dy0 + 1.0); //:DEST:HIG  "//[E_2]//
  5405.     +N+"    vp1_wid = (sx1 - sx0 + 1.0); //:SRC::WID  "//[E_2]//
  5406.     +N+"    vp1_hig = (sy1 - sy0 + 1.0); //:SRC::HIG  "//[E_2]//
  5407.     +N+"    //:WHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWH://"//[E_2]//
  5408.     +N+"                                              "//[E_2]//
  5409.     +N+"    //:====================================://"//[E_2]//
  5410.     +N+"    //:[COMLINK_D_XY_TO_LD_XY_2020_06_01]     "//[E_2]//
  5411.     +N+"    //:[d_x,d_y]<==GLOBAL|LOCAL==>[ldx,ldy]:  "//[E_2]//
  5412.     +N+"    ldx = ( d_x - dx0 ); //:ldx:Local:Dest:X  "//[E_2]//
  5413.     +N+"    ldy = ( d_y - dy0 ); //:ldy:Local:Dest:Y  "//[E_2]//
  5414.     +N+"                                              "//[E_2]//
  5415.     +N+"    #define F floor //:////////////////////://"//[E_2]//
  5416.     +N+"    s_x = F(((ldx)/(vp0_wid))*(vp1_wid))+sx0; "//[E_2]//
  5417.     +N+"    s_y = F(((ldy)/(vp0_hig))*(vp1_hig))+sy0; "//[E_2]//
  5418.     +N+"    s_x = F( s_x );                           "//[E_2]//
  5419.     +N+"    s_y = F( s_y );                           "//[E_2]//
  5420.     +N+"    #undef  F //://////////////////////////://"//[E_2]//
  5421.     +N+"    //:====================================://"//[E_2]//
  5422.     +N+"                                              "//[E_2]//
  5423.     +N+"    //:SL:SourceLocal: [ loc.s_x , loc.s_y ]  "//[E_2]//
  5424.     +N+"    //:SLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSL://"//[E_2]//
  5425.     +N+"                                              "//[E_2]//
  5426.     +N+"        //: ( rec_vp1 === rec_src )           "//[E_2]//
  5427.     +N+"        loc_s_x = ( s_x - rec_src.x_0 );      "//[E_2]//
  5428.     +N+"        loc_s_y = ( s_y - rec_src.y_0 );      "//[E_2]//
  5429.     +N+"                                              "//[E_2]//
  5430.     +N+"    //:SLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSL://"//[E_2]//
  5431.     +N+"                                              "//[E_2]//
  5432.     +N+"    //:TI:Tile_Internal_Coordinates:          "//[E_2]//
  5433.     +N+"    //:TITITITITITITITITITITITITITITITITITI://"//[E_2]//
  5434.     +N+"                                              "//[E_2]//
  5435.     +N+"    //:Size of tile:                          "//[E_2]//
  5436.     +N+"    //:     1: Measured in pixels.            "//[E_2]//
  5437.     +N+"    //:     2: AsSeenIn[ rec_dst / rec_vp0 ]  "//[E_2]//
  5438.     +N+"    //:     [tp0_wid == ScreenTile:wid ]      "//[E_2]//
  5439.     +N+"    //:     [tp0_hig == ScreenTile:hig ]      "//[E_2]//
  5440.     +N+"    tp0_wid = ( vp0_wid / n_x );              "//[E_2]//
  5441.     +N+"    tp0_hig = ( vp0_hig / n_y );              "//[E_2]//
  5442.     +N+"                                              "//[E_2]//
  5443.     +N+"        //:TINCO:TileINternalCOordinate       "//[E_2]//
  5444.     +N+"        //:================================://"//[E_2]//
  5445.     +N+"            //:TINCO-( MIN( X1 | Y1 ) )       "//[E_2]//
  5446.     +N+"            tincox0 = 0.0;                    "//[E_2]//
  5447.     +N+"            tincoy0 = 0.0;                    "//[E_2]//
  5448.     +N+"                                              "//[E_2]//
  5449.     +N+"            //:TINCO-( MAX( X1 | Y1 ) )       "//[E_2]//
  5450.     +N+"            tincox1 =( tp0_wid - 1.0 );       "//[E_2]//
  5451.     +N+"            tincoy1 =( tp0_hig - 1.0 );       "//[E_2]//
  5452.     +N+"        //:================================://"//[E_2]//
  5453.     +N+"                                              "//[E_2]//
  5454.     +N+"    //[ KEEP: tinco NON-normalized ------- ]//"//[E_2]//
  5455.     +N+"    tinco_x = ldx - ( tp0_wid * loc_s_x );    "//[E_2]//
  5456.     +N+"    tinco_y = ldy - ( tp0_hig * loc_s_y );    "//[E_2]//
  5457.     +N+"                                              "//[E_2]//
  5458.     +N+"            //:GR:Gradient_Mapping:--------://"//[E_2]//
  5459.     +N+"            //:GRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[E_2]//
  5460.     +N+"            dis_lef =abs( tincox0 - tinco_x );"//[E_2]//
  5461.     +N+"            dis_rig =abs( tincox1 - tinco_x );"//[E_2]//
  5462.     +N+"            dis_top =abs( tincoy0 - tinco_y );"//[E_2]//
  5463.     +N+"            dis_bot =abs( tincoy1 - tinco_y );"//[E_2]//
  5464.     +N+"                                              "//[E_2]//
  5465.     +N+"            ted_m_x =min( dis_lef , dis_rig );"//[E_2]//
  5466.     +N+"            ted_m_y =min( dis_top , dis_bot );"//[E_2]//
  5467.     +N+"            ted_mav =min( ted_m_x , ted_m_y );"//[E_2]//
  5468.     +N+"            ted_nor =( 1.0                    "//[E_2]//
  5469.     +N+"                *   ted_mav                   "//[E_2]//
  5470.     +N+"                /   ((tp0_wid+tp0_hig)*0.5)   "//[E_2]//
  5471.     +N+"                * 4.0  //:2.0:Pyramid         "//[E_2]//
  5472.     +N+"            );;        //:4.0:OverblownFlatTop"//[E_2]//
  5473.     +N+"                                              "//[E_2]//
  5474.     +N+"            //:GRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[E_2]//
  5475.     +N+"                                              "//[E_2]//
  5476.     +N+"    //:TITITITITITITITITITITITITITITITITITI://"//[E_2]//
  5477.     +N+"                                              "//[E_2]//
  5478.     +N+"    //:Current u32_til value in focus:        "//[E_2]//
  5479.     +N+"    uvec4 dye_bas =(                          "//[E_2]//
  5480.     +N+"        Get_Tex_dex_hot(                      "//[E_2]//
  5481.     +N+"            int(         s_x )  //: d_x , s_x "//[E_2]//
  5482.     +N+"        ,   int(         s_y )  //: d_y , s_y "//[E_2]//
  5483.     +N+"        ,   int( e02_dex_hot )                "//[E_2]//
  5484.     +N+"        )                                     "//[E_2]//
  5485.     +N+"    );;                                       "//[E_2]//
  5486.     +N+"                                              "//[E_2]//
  5487.     +N+"    //:DO_NOT_RE_DECLARE[ dye_out ]!!!!!!!!   "//[E_2]//
  5488.     +N+"    //:DO_YOU_WANT_SHADOWED_VARIABLES??????   "//[E_2]//
  5489.     +N+"    //:BECAUSE_THAT_IS_HOW_YOU_GET_SHADOWED   "//[E_2]//
  5490.     +N+"    //:VARIABLES!!!!!!!!!!!!!!!!!!!!!!!!!!!   "//[E_2]//
  5491.     +N+"    dye_out =uvec4(                           "//[E_2]//
  5492.     +N+"        uint( float( dye_bas.x ) * ted_nor )  "//[E_2]//
  5493.     +N+"    ,   uint( float( dye_bas.y ) * ted_nor )  "//[E_2]//
  5494.     +N+"    ,   uint( float( dye_bas.z ) * ted_nor )  "//[E_2]//
  5495.     +N+"    ,   uint( 255 )                           "//[E_2]//
  5496.     +N+"    );;                                       "//[E_2]//
  5497.     +N+"                                              "//[E_2]//
  5498.     +N+"};;//:[0 == outside_destination_viewport ?]://"//[E_2]//
  5499.     +N+"                                              "//[E_2]//
  5500.     +N+"//:INDICATES_A_PROBLEM:                       "//[E_2]//
  5501.     +N+"if( til_san == uint(0) ){                     "//[E_2]//
  5502.     +N+"    dye_out = uvec4(234,8,9,255);             "//[E_2]//
  5503.     +N+"};;                                           "//[E_2]//
  5504.     +N+"                                              "//[E_2]//
  5505.     +N+"pix_fra = vec4(                               "//[E_2]//
  5506.     +N+"    float( dye_out.x ) / 255.0                "//[E_2]//
  5507.     +N+",   float( dye_out.y ) / 255.0                "//[E_2]//
  5508.     +N+",   float( dye_out.z ) / 255.0                "//[E_2]//
  5509.     +N+",   float( dye_out.w ) / 255.0                "//[E_2]//
  5510.     +N+");;                                           "//[E_2]//
  5511.     );;};;//:[ 2 == edi_mod]//:////://///////////////////////://
  5512.     //:222222222222222222222222222222222222222222222222222222://
  5513.     //:333333333333333333333333333333333333333333333333333333://
  5514.     if(        3 == edi_mod ){ code=(""
  5515.  
  5516.  
  5517.  
  5518.     );;};;//:[ 3 == edi_mod]//:////://///////////////////////://
  5519.     //:333333333333333333333333333333333333333333333333333333://
  5520.     //:444444444444444444444444444444444444444444444444444444://
  5521.     if(        4 == edi_mod ){ code=(""
  5522.  
  5523.  
  5524.  
  5525.     );;};;//:[ 4 == edi_mod]//:////://///////////////////////://
  5526.     //:444444444444444444444444444444444444444444444444444444://
  5527.     //:555555555555555555555555555555555555555555555555555555://
  5528.     if(        5 == edi_mod ){ code=(""
  5529.  
  5530.  
  5531.  
  5532.     );;};;//:[ 5 == edi_mod]//:////://///////////////////////://
  5533.     //:555555555555555555555555555555555555555555555555555555://
  5534.     //:666666666666666666666666666666666666666666666666666666://
  5535.     if(        6 == edi_mod ){ code=(""
  5536.  
  5537.  
  5538.  
  5539.     );;};;//:[ 6 == edi_mod]//:////://///////////////////////://
  5540.     //:666666666666666666666666666666666666666666666666666666://
  5541.     //:777777777777777777777777777777777777777777777777777777://
  5542.     if(        7 == edi_mod ){ code=(""
  5543.  
  5544.  
  5545.  
  5546.     );;};;//:[ 7 == edi_mod]//:////://///////////////////////://
  5547.     //:777777777777777777777777777777777777777777777777777777://
  5548.     //:888888888888888888888888888888888888888888888888888888://
  5549.     if(        8 == edi_mod ){ code=(""
  5550.  
  5551.  
  5552.  
  5553.     );;};;//:[ 8 == edi_mod]//:////://///////////////////////://
  5554.     //:888888888888888888888888888888888888888888888888888888://
  5555.     //:999999999999999999999999999999999999999999999999999999://
  5556.     if(        9 == edi_mod ){ code=(""
  5557.  
  5558.  
  5559.  
  5560.     );;};;//:[ 9 == edi_mod]//:////://///////////////////////://
  5561.     //:999999999999999999999999999999999999999999999999999999://
  5562.  
  5563.    
  5564.         return( code );
  5565.     };; //:[AA2_Get_edi_sha_src]:////://///////////://
  5566.     //:GSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGS://
  5567.     //:GS:GetShader:(ABOVE):---------------------------------://
  5568.  
  5569. //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
  5570. //:                          (ABOVE)                         ://
  5571. //:NF: Namespaced_Functions: (CONTI):------------------------://
  5572. //:                          (BELOW)                         ://
  5573. //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
  5574.  
  5575.     //:TAGS[ shader_code / shadercode / shader-code ]
  5576.     //:AKA[  AA2_FragFet_TestGal_InpArg_dex_sha               ]
  5577.     function AA2_EDIT001_FragSrc_dex_sha(
  5578.         dex_sha
  5579.     ){
  5580.         var N = "\n";
  5581.  
  5582.         var shader_code = "";
  5583.         if( 0 == dex_sha ){ shader_code =(""
  5584.  
  5585.             +N+"    //:vp0:Maverick_Coords:                    "
  5586.             +N+"    int p_x = int( tbs_mac.x );                "
  5587.             +N+"    int p_y = int( tbs_mac.y );                "                                  
  5588.             +N+"                                               "                
  5589.             +N+"    //:Viewport_Dimensions:                    "
  5590.             +N+"    //:TODO:UNHARDCODETHIS:                    "
  5591.             +N+"    float vp0_wid = ( Get_VP0_WID_f32());      "
  5592.             +N+"    float vp0_hig = ( Get_VP0_WID_f32());      "
  5593.             +N+"                                               "
  5594.             +N+"    float tau_wid = float(                     "
  5595.             +N+"        1                                      "
  5596.             +N+"        +TAU_001_x1                            "
  5597.             +N+"        -TAU_001_x0                            "
  5598.             +N+"    );;                                        "
  5599.             +N+"    float tau_hig = float(                     "
  5600.             +N+"        1                                      "
  5601.             +N+"        +TAU_001_y1                            "
  5602.             +N+"        -TAU_001_y0                            "
  5603.             +N+"    );;                                        "                                            
  5604.             +N+"                                               "
  5605.             +N+"    //: CALC_SCALEFACTOR:SEE[SCALEFAC_HELP]    "                          
  5606.             +N+"    //: Viewport #1 to Tau Coord:              "
  5607.             +N+"    vec2 vp1_to_tau =(                         "
  5608.             +N+"        vec2( tau_wid , tau_hig ) //:DST:tau   "
  5609.             +N+"    /   vec2( vp0_wid , vp0_hig ) //:SRC:vp1   "
  5610.             +N+"    );;                                        "
  5611.             +N+"                                               "                                          
  5612.             +N+"    //:scale viewport coordinate to TAU coord: "
  5613.             +N+"    vec2 tau_loc =(                            "
  5614.             +N+"        vec2( p_x ,  p_y )                     "
  5615.             +N+"        *     vp1_to_tau                       "
  5616.             +N+"    );;                                        "
  5617.             +N+"                                               "
  5618.             +N+"    //:Offset tau coord by tau's origin        "
  5619.             +N+"    //:to get correct sampling x/y coord:      "
  5620.             +N+"    vec2 tau_glo = tau_loc + vec2(             "
  5621.             +N+"         TAU_001_x0                            "
  5622.             +N+"    ,    TAU_001_y0                            "
  5623.             +N+"    );;                                        "
  5624.             +N+"                                               "
  5625.             +N+"    //:Sample TAU_001 sub-region using         "
  5626.             +N+"    //:the XY coordinate of of the             "
  5627.             +N+"    //:allocated uniform pixel.                "
  5628.             +N+"    uvec4 pix_rgb =(                           "
  5629.             +N+"        TAU_001_POS(                           "
  5630.             +N+"            int(tau_glo.x)                     "
  5631.             +N+"        ,   int(tau_glo.y)                     "
  5632.             +N+"        )//[x]//                               "
  5633.             +N+"    );;                                        "
  5634.             +N+"                                               "
  5635.             +N+"    tbs_out = vec4( pix_rgb ) / 255.0;         "
  5636.             +N+"                                               "                                  
  5637.         );;};;
  5638.  
  5639.         if( 1 == dex_sha ){shader_code=(""
  5640.        
  5641.     +N+"    //:LewisLeptonsVariables:                   "//[L]//
  5642.     +N+"    vec2   coord = tbs_noc;                     "//[L]//
  5643.     +N+"    vec3   color = vec3(0.0);                   "//[L]//
  5644.     +N+"    float u_time = tbs_tim;                     "//[L]//
  5645.     +N+"                                                "//[L]//
  5646.     +N+"    color =(                                    "//[L]//
  5647.     +N+"    color                                       "//[L]//
  5648.     +N+"    +   sin( 1.0                                "//[L]//
  5649.     +N+"             * coord.x                          "//[L]//
  5650.     +N+"             * cos( u_time / 30.0 )             "//[L]//
  5651.     +N+"             * 60.0                             "//[L]//
  5652.     +N+"        )                                       "//[L]//
  5653.     +N+"    +   sin( 1.0                                "//[L]//
  5654.     +N+"             * coord.y                          "//[L]//
  5655.     +N+"             * cos( u_time / 15.0)              "//[L]//
  5656.     +N+"             * 10.0                             "//[L]//
  5657.     +N+"        )                                       "//[L]//
  5658.     +N+"    );;                                         "//[L]//
  5659.     +N+"                                                "//[L]//
  5660.     +N+"    //:Flip Pattern:                            "//[L]//
  5661.     +N+"    color =(                                    "//[L]//
  5662.     +N+"    color                                       "//[L]//
  5663.     +N+"    +   cos( 1.0                                "//[L]//
  5664.     +N+"             * coord.y                          "//[L]//
  5665.     +N+"             * sin( u_time / 30.0 )             "//[L]//
  5666.     +N+"             * 60.0                             "//[L]//
  5667.     +N+"        )                                       "//[L]//
  5668.     +N+"    +   cos( 1.0                                "//[L]//
  5669.     +N+"             * coord.x                          "//[L]//
  5670.     +N+"             * sin( u_time / 15.0)              "//[L]//
  5671.     +N+"             * 10.0                             "//[L]//
  5672.     +N+"        )                                       "//[L]//
  5673.     +N+"    );;                                         "//[L]//
  5674.     +N+"                                                "//[L]//
  5675.     +N+"    //:How to we map extremes to zero?          "//[L]//
  5676.     +N+"    vec3 ove_dye = color;                       "//[L]//
  5677.     +N+"    float inn = ove_dye.x;                      "//[L]//
  5678.     +N+"    float m_3 = mod( inn*2.0 , 2.0 );           "//[L]//
  5679.     +N+"    ove_dye.x=  ove_dye.x / ( m_3 / 3.0 );      "//[L]//
  5680.     +N+"    ove_dye.y= 0.0; //: ove_dye.y;              "//[L]//
  5681.     +N+"    ove_dye.z=  ove_dye.z + ( m_3 / 3.0 );      "//[L]//
  5682.     +N+"    ove_dye.x = ( ove_dye.x + ove_dye.z ) /8.0; "//[L]//
  5683.     +N+"    ove_dye.z = ove_dye.z;                      "//[L]//
  5684.     +N+"                                                "//[L]//
  5685.     +N+"    color = ( ove_dye + color ) / 2.0;          "//[L]//
  5686.     +N+"                                                "//[L]//
  5687.     +N+"    tbs_out = vec4( color, 1.0 );               "//[L]//
  5688.         );;};;
  5689.         if( 2 == dex_sha ){shader_code=(""
  5690.             //[#MANDELBROT#]//
  5691.         +N+"  int dex_max = ( 50 );                 //"//|M_B|//
  5692.         +N+"                                        //"//|M_B|//                                  
  5693.         +N+"  vec2 z;                               //"//|M_B|//
  5694.         +N+"  float x,y;                            //"//|M_B|//
  5695.         +N+"  int steps;                            //"//|M_B|//
  5696.         +N+"                                        //"//|M_B|//                                  
  5697.         +N+"  //: Normalized(X|Y)[ n_x , n_y ];     //"//|M_B|//
  5698.         +N+"  float n_x = tbs_noc.x - float(0.75);  //"//|M_B|//
  5699.         +N+"  float n_y = tbs_noc.y + float(0.26);  //"//|M_B|//
  5700.         +N+"                                        //"//|M_B|//
  5701.         +N+"  z.x = n_x;                            //"//|M_B|//
  5702.         +N+"  z.y = n_y;                            //"//|M_B|//
  5703.         +N+"                                        //"//|M_B|//
  5704.         +N+"  for (int i=0;i<dex_max;i++) {         //"//|M_B|//
  5705.         +N+"                                        //"//|M_B|//
  5706.         +N+"      steps = i;                        //"//|M_B|//
  5707.         +N+"                                        //"//|M_B|//
  5708.         +N+"      x = (z.x * z.x - z.y * z.y) + n_x;//"//|M_B|//
  5709.         +N+"      y = (z.y * z.x + z.x * z.y) + n_y;//"//|M_B|//
  5710.         +N+"                                        //"//|M_B|//
  5711.         +N+"      if((x * x + y * y) > 4.0) {       //"//|M_B|//
  5712.         +N+"          break;                        //"//|M_B|//
  5713.         +N+"      }                                 //"//|M_B|//
  5714.         +N+"                                        //"//|M_B|//
  5715.         +N+"      z.x = x;                          //"//|M_B|//
  5716.         +N+"      z.y = y;                          //"//|M_B|//                            
  5717.         +N+"  };;                                   //"//|M_B|//
  5718.         +N+"                                        //"//|M_B|//
  5719.         +N+"  float tim = float( gam_tim )/256.0;   //"//|M_B|//
  5720.         +N+"  float f_1 = cos(tim);                 //"//|M_B|//
  5721.         +N+"  float f_2 = sin(tim);                 //"//|M_B|//
  5722.         +N+"                                        //"//|M_B|//
  5723.         +N+"  if (steps == dex_max-1) {             //"//|M_B|//
  5724.         +N+"      tbs_out = vec4(                   //"//|M_B|//
  5725.         +N+"          f_2, f_2, f_2, 1.0            //"//|M_B|//
  5726.         +N+"      );;                               //"//|M_B|//
  5727.         +N+"  } else {                              //"//|M_B|//
  5728.         +N+"                                        //"//|M_B|//
  5729.         +N+"      float dye =(                      //"//|M_B|//
  5730.         +N+"          float(steps)                  //"//|M_B|//
  5731.         +N+"          /float(dex_max)               //"//|M_B|//
  5732.         +N+"      );;                               //"//|M_B|//                                  
  5733.         +N+"      tbs_out = vec4(                   //"//|M_B|//
  5734.         +N+"          dye, 0.0, f_1, 1.0            //"//|M_B|//
  5735.         +N+"      );;                               //"//|M_B|//
  5736.         +N+"  };;                                   //"//|M_B|//
  5737.                                                    
  5738.         );;};;
  5739.         if( 3 == dex_sha ){shader_code=(""
  5740.  
  5741.             //[BLANK_SHADER_SLOT]//
  5742.             +N+" float t = (1.0 + cos( tbs_tim*8.0 ))/2.0; "
  5743.             +N+" tbs_out = vec4( 0,0,t,1 );"
  5744.  
  5745.         );;};;
  5746.         if( 4 == dex_sha ){shader_code=(""
  5747.  
  5748.             //[BLANK_SHADER_SLOT]//
  5749.             +N+" float t = (1.0 + cos( tbs_tim*16.0 ))/2.0; "
  5750.             +N+" tbs_out = vec4( 0,t,1,1 );" //:C:CYAN
  5751.  
  5752.         );;};;
  5753.         if( 5 == dex_sha ){shader_code=(""   //:M:MAGENTA
  5754.  
  5755.             //[BLANK_SHADER_SLOT]//
  5756.             +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
  5757.             +N+" tbs_out = vec4( 1,0,t,1 );"
  5758.  
  5759.         );;};;
  5760.         if( 6 == dex_sha ){shader_code=(""
  5761.  
  5762.             //[BLANK_SHADER_SLOT]//
  5763.             +N+" float t = (1.0 + cos( tbs_tim*64.0 ))/2.0; "
  5764.             +N+" tbs_out = vec4( t,1,0,1 );" //:Y:YELLOW
  5765.  
  5766.         );;};;
  5767.  
  5768.         if( 7 == dex_sha ){shader_code=(""
  5769.  
  5770.             //[BLANK_SHADER_SLOT]//
  5771.             +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
  5772.             +N+" tbs_out = vec4( 0.0,t,0.5,1 );" //:C:DARK
  5773.  
  5774.         );;};;
  5775.         if( 8 == dex_sha ){shader_code=(""   //:M:DARK
  5776.  
  5777.             //[BLANK_SHADER_SLOT]//
  5778.             +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
  5779.             +N+" tbs_out = vec4( 0.5,0.0,t,1 );"
  5780.  
  5781.         );;};;
  5782.         if( 9 == dex_sha ){shader_code=(""
  5783.  
  5784.             //[BLANK_SHADER_SLOT]//
  5785.             +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
  5786.             +N+" tbs_out = vec4( t,0.5,0.0,1 );" //:Y:DARK
  5787.  
  5788.         );;};;
  5789.    
  5790.         return( shader_code );
  5791.    
  5792.     };;//:[AA2_EDIT001_FragSrc_dex_sha]:////:///////////////://
  5793.  
  5794. //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
  5795. //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
  5796. //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
  5797. //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
  5798. //:NF:Namsepaced_Functions:(ABOVE):--------------------------://
  5799.  
  5800. //:BC:Base_Class_OfEverything:(BELOW):-----------------------://
  5801. //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
  5802. //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
  5803. //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
  5804. //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
  5805.  
  5806.         //:IE:Informal_Enum:(BELOW):-------------------------://
  5807.         //:IEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIE://
  5808.         //:NOTE: "VAR_TYP" ALWAYS identifies
  5809.         //:      [TERMINAL/DERIVED]
  5810.         //:      class when using inheritence,
  5811.         //:      never the base class.
  5812.         //:IEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIE://
  5813.  
  5814.         const AA2_VAR_TYP_edi_000 =( 0 );
  5815.         const AA2_VAR_TYP_edi_001 =( 1 );
  5816.         const AA2_VAR_TYP_edi_002 =( 2 );
  5817.  
  5818.         //:IEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIE://
  5819.  
  5820.         //:VT:VAR_TAG:(BELOW):-------------------------------://
  5821.         //:VTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVT://
  5822.         //:                                                  ://
  5823.         //:VAR_TAG is the base-class of all STRUCTS and      ://
  5824.         //:        CLASSES. We are going to use              ://
  5825.         //:       [ informal / conceptual ] inheritance.     ://
  5826.         //:       The inheritance is only enforced by        ://
  5827.         //:       rigid programming conventions, not by      ://
  5828.         //:       actual inheritance mechanisms.             ://
  5829.         //:                                                  ://
  5830.         //:VTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVT://
  5831.         var AA2_var_tag={
  5832.             //:Variable_Type: ALWAYS_FIRST_MEMBER_OF_TAG!
  5833.             VAR_TYP : 0   //:uint32:unique_type_identifier  
  5834.  
  5835.                 //:DB:Debug_Members:-------------------------://
  5836.                 //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
  5837.                 //: Variable_Hint: Exists only for debugging ://
  5838.                 //: since I can't exactly read "VAR_TYP"     ://
  5839.                 //: integer values. Feel free to change this ://
  5840.                 //: hint value to whatever you want while    ://
  5841.                 //: debugging.                               ://
  5842.                 //:                                          ://
  5843.                 //: Decided limiting myself to 3 b characters://
  5844.                 //: Is over optimizing. At least give enough ://
  5845.                 //: space to hold names of your types.       ://
  5846.                 //: All types are 7 characters long, so can  ://
  5847.                 //: use uint64 to hold.                      ://
  5848.                 ,   VAR_HIN : "var_hin"
  5849.                 //:uint32. 0x-FF-FF-FF-FF-FF-FF-FF-FF
  5850.                 //:........0x.01.02.03.04.05.06.07.08
  5851.                 //:............E..D..I.._..0..0..1.\0 (edi_001)
  5852.                                      
  5853.                 ,   VAR_NIL : 0     //:GUARD_BYTES
  5854.                 //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
  5855.  
  5856.         };;Object.seal( AA2_var_tag );    
  5857.         function NEW_var_tag(){
  5858.         "use strict"
  5859.             var var_tag = Object.assign(
  5860.                 Object.create(null)
  5861.             ,   AA2_var_tag
  5862.             );;
  5863.             Object.seal( var_tag );
  5864.             return(      var_tag );
  5865.         };;
  5866.         //:VTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVT://
  5867.  
  5868. //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
  5869. //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
  5870. //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
  5871. //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
  5872.                          
  5873.  
  5874. //:S:Structs_Section:(BELOW):--------------------------------://
  5875. //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
  5876. //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
  5877. //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
  5878. //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
  5879.  
  5880.     //:ixy_das:Index_and_XY_DAtaStructure:
  5881.     function NEW_ixy_das( /** void **/ ){
  5882.  
  5883.         var ixy_das ={
  5884.  
  5885.             i_i : 0 //:INDEX
  5886.         ,   x_x : 0 //:INDEX_TO_COORDINATE.X
  5887.         ,   y_y : 0 //:INDEX_TO_COORDINATE.Y
  5888.  
  5889.         };;Object.seal( ixy_das );
  5890.         return(         ixy_das );
  5891.     };;
  5892.  
  5893.     //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
  5894.  
  5895.     //: rec_inc:RECtangle_INClusive(points/bounds)
  5896.     var     AA2_rec_inc={
  5897.         x_0 : 0 - 101
  5898.     ,   y_0 : 0 - 202
  5899.     ,   x_1 : 0 - 303
  5900.     ,   y_1 : 0 - 404
  5901.     };; Object.seal( AA2_rec_inc );
  5902.     function    NEW_rec_inc( /** void **/ ){
  5903.     "use strict" //:rec_inc://
  5904.  
  5905.         var     rec_inc = AA2_ZeroIni( AA2_rec_inc );
  5906.         return( rec_inc );
  5907.     };;
  5908.  
  5909.     //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
  5910.  
  5911.     //: AKA[ NEW_GlobalEventStruct | NEW_glo_eve ]
  5912.     function NEW_glo_eve( /** void **/ ){
  5913.     "use strict"
  5914.         var glo_eve ={
  5915.  
  5916.             VAR_TYP : "glo_eve"
  5917.  
  5918.             //:The data in a keyboard event and mouse event
  5919.             //:does not intersect. So lets use this struct
  5920.             //:kind of like a union. Depending on what
  5921.             //:bits are set in eve_typ and eve_sub, we will
  5922.             //:handle as different type of event.
  5923.         ,   eve_typ : 0 /** BIT_PATTERN_SO_CAN_BE_MULTIPLE **/
  5924.         ,   eve_sub : 0 /** BIT_PATTERN_SO_CAN_BE_MULTIPLE **/
  5925.  
  5926.             //: sub_typ : "mouse_event" or "keyboard_event" ?
  5927.  
  5928.             //:KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK://
  5929.         ,   key : "" //:What key was pressed?
  5930.         ,   k_d :  0 //:IsKeyCurrentlyDown?
  5931.         ,   k_u :  0 //:IsKeyCurrentlyUp?
  5932.             //:KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK://
  5933.  
  5934.             //:M:Mouse Event Stuff:
  5935.             //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
  5936.  
  5937.         ,   m_x : 0  //:Mouse x
  5938.         ,   m_y : 0  //:Mouse y
  5939.                    
  5940.         ,   c_x : 0  //:Mouse CLICK: x
  5941.         ,   c_y : 0  //:Mouse CLICK: y
  5942.                    
  5943.         ,   u_x : 0  //:Mouse UP ( u_x == "Up X" )
  5944.         ,   u_y : 0  //:Mouse UP ( u_y == "Up Y" )
  5945.                    
  5946.         ,   d_x : 0  //:Mouse DOWN
  5947.         ,   d_y : 0  //:Mouse DOWN
  5948.  
  5949.             //:If both are set or unset,
  5950.             //:that is an error:
  5951.         ,   m_d : 0  //:IsMouseCurrentlyDown?
  5952.         ,   m_u : 0  //:IsMouseCurrentlyUp?
  5953.  
  5954.             //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
  5955.  
  5956.         };;Object.seal( glo_eve );
  5957.  
  5958.         return( glo_eve );
  5959.     };;
  5960.  
  5961.     //:CS:Configured_Structs:
  5962.     //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
  5963.     //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
  5964.     //:
  5965.     //:     What goes here?
  5966.     //:         1: Struct "NEW"er (Constructor) functions
  5967.     //:            that take 1 or more arguments.
  5968.     //:
  5969.     //:         2: Struct "NEW"er (Constructor) functions
  5970.     //:            that take 0 arguments, but internally
  5971.     //:            are calling another 0-argument "NEW"er
  5972.     //:            and then performing extra configuration
  5973.     //:            on the created object.
  5974.     //:
  5975.     //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
  5976.     //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
  5977.  
  5978.             //:New_RectangleInclusive_MadeIntoA_RectangleHot
  5979.             //:New_InclusiveRectangle_MadeIntoA_HotSwapRectangle
  5980.             function NEW_rec_inc_MAD_rec_hot(
  5981.                 h_x //:h_x:HotSwapRectangleGridCoordinate:X
  5982.             ,   h_y //:h_y:HotSwapRectangleGridCoordinate:Y
  5983.             ){
  5984.  
  5985.                 var sub_san =( GLO_CFG.SAN_MAM
  5986.                               /GLO_CFG.SAN_ISO );;
  5987.                 var sub_san_CHK = Math.floor( sub_san );
  5988.                 if( sub_san_CHK != sub_san ){
  5989.                     throw("[NOT_EVENLY]");
  5990.                 };;
  5991.  
  5992.                 //:SAN_MAM measured in  
  5993.                 //:SAN_ISO sub partitions.
  5994.                 var sub_wid=( sub_san );
  5995.                 var sub_hig=( sub_san );
  5996.  
  5997.                 if( h_x < 0 || h_x >= sub_wid
  5998.                 ||  h_y < 0 || h_y >= sub_hig
  5999.                 ){
  6000.                     throw("[REC_HOT:OOB]");
  6001.                 };;
  6002.  
  6003.                 //:AA2_MAKE_HOT_SWAP_RECTANGLE
  6004.                 //:NEW_rec_inc :Base_Type
  6005.                 //:MAD_rec_hot :Made_Type
  6006.  
  6007.                 var rec_inc =( NEW_rec_inc() );
  6008.                 rec_inc.x_0 = (         h_x * GLO_CFG.SAN_ISO );
  6009.                 rec_inc.y_0 = (         h_y * GLO_CFG.SAN_ISO );
  6010.                 rec_inc.x_1 = ( rec_inc.x_0 + GLO_CFG.SAN_ISO );
  6011.                 rec_inc.y_1 = ( rec_inc.y_0 + GLO_CFG.SAN_ISO );
  6012.                 Object.freeze(  rec_inc /** AKA:rec_hot **/   );
  6013.                 return(         rec_inc /** AKA:rec_hot **/   );
  6014.             };;
  6015.  
  6016.     //:- - - - - - - - - - - - - -- - - - - - - - - - - - - -://
  6017.  
  6018.     //:You can only make a "loo_tab" with some bit of
  6019.     //:configuration. (default function pointers). Thus
  6020.     //:it belongs in pre-configured structs section.
  6021.     function NEW_loo_tab(){ //:LoopTable: struct NOT class.
  6022.                             //:Struct instances belong in the
  6023.                             //:GLO_DAT object.
  6024.  
  6025.         //:Stub_Functions:
  6026.         //://////////////////////////////////////////////////://
  6027.         function
  6028.         AA2_LoopTableTickDefaultFunction_nat_win( /**VOID**/ ){
  6029.             //:                                              ://
  6030.             //: Keyboard and mouse code logic go into        ://
  6031.             //: the "nat_win" function because in C code     ://
  6032.             //: it is the window that recieves the           ://
  6033.             //: keyboard and  mouse inputs.                  ://
  6034.             //:                                              ://
  6035.             //: A bit akward, I know, but not changing it.   ://
  6036.             //:                                              ://
  6037.             console.log("[PLEASE_WIRE_UP:nat_win]");
  6038.         };;
  6039.         function
  6040.         AA2_LoopTableTickDefaultFunction_gam_obj( /**VOID**/ ){
  6041.             console.log("[PLEASE_WIRE_UP:gam_obj]");
  6042.         };;
  6043.         function
  6044.         AA2_LoopTableTickDefaultFunction_ren_log( /**VOID**/ ){
  6045.             console.log("[PLEASE_WIRE_UP:ren_log]");
  6046.         };;
  6047.         //://////////////////////////////////////////////////://
  6048.  
  6049.         var loo_tab ={
  6050.  
  6051.             //:WINDOW+KEYBOARD+MOUSE:
  6052.             //:KEYBOARD_LOGIC_GOES_INTO_THIS_CALLBACK:(nat_win)
  6053.             nat_win : AA2_LoopTableTickDefaultFunction_nat_win
  6054.            
  6055.             //:GameObjectUpdateTick:AKA[ gam_log ]
  6056.         ,   gam_obj : AA2_LoopTableTickDefaultFunction_gam_obj
  6057.  
  6058.             //:RenderingLogic: (Ex:glDrawArrays)
  6059.         ,   ren_log : AA2_LoopTableTickDefaultFunction_ren_log  
  6060.  
  6061.         ,   gam_tim : ( 0 - 1 )   //:GameTime/GameTicks
  6062.         ,   lop_tim : ( 0 - 1 )   //:LoopTime/LoopTicks
  6063.            
  6064.         };;Object.seal( loo_tab );
  6065.         return(         loo_tab );
  6066.     };; //:[FN:NEW_loo_tab(...)]:////:///////////////////////://
  6067.  
  6068.     //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
  6069.     //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
  6070.  
  6071. //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
  6072. //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
  6073. //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
  6074. //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
  6075. //:S:Structs_Section:(ABOVE):--------------------------------://
  6076.  
  6077. //:C:Classes_Section:(BELOW):--------------------------------://
  6078. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  6079. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  6080. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  6081. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  6082.  
  6083.     //:------------------------------------------------------://
  6084.  
  6085.     //:"Classes"/"Class" defined as: (In This Code Base)
  6086.     //: 1. Mixing functions with data.
  6087.     //: 2. Structs that contain other structs.
  6088.     //:    ( #2 might want to be moved to some type of)
  6089.     //:    (    "meta structs" section.               )
  6090.  
  6091.     //:------------------------------------------------------://
  6092.  
  6093.     //:AV:Adapter_Variables:(BELOW):-------------------------://
  6094.     //:AVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV://
  6095.     //:                                                      ://
  6096.     //:  Variables that determine game state may or may not  ://
  6097.     //:  need to be synced with the GPU. Thus, non-private   ://
  6098.     //:  variables that need to communicate state            ://
  6099.     //:  information to other game objects need to store     ://
  6100.     //:  their public variables "off-site" in the            ://
  6101.     //:  "ada_var"/"adapter_variables" class.                ://
  6102.     //:                                                      ://
  6103.     //:  This way we have one class responsible for          ://
  6104.     //:  synchronization of variables and don't have         ://
  6105.     //:  to worry about that logic in other classes.         ://
  6106.     //:                                                      ://
  6107.     //:  NOTE: THIS NEEDS TO BE NOTICABLY HIGHER LEVEL       ://
  6108.     //:        THAN "TextureAsUniformController"             ://
  6109.     //:        or else we are just juggling around           ://
  6110.     //:        data without actually transforming it.        ://
  6111.     //:                                                      ://
  6112.     //:  REASON_FOR_THIS_CLASS_USING_EXAMPLE:                ://
  6113.     //:  =================================================== ://
  6114.     //:  Need way to set variables that is decoupled from    ://
  6115.     //:  the webgl graphics code. If we change from          ://
  6116.     //:  "WebGL" to "Vulkan", only the internals of          ://
  6117.     //:  this class will need to be re-worked to fix         ://
  6118.     //:  variable synchronization. All public                ://
  6119.     //:  "GLO_CLA.ada_var.Put_*" &                           ://
  6120.     //:  "GLO_CLA.ada_var.Get_*"                             ://
  6121.     //:   calls will not need to be changed.                 ://
  6122.     //:  =================================================== ://
  6123.     //:                                                      ://
  6124.     //:AVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV://
  6125.     function NEW_ada_var( /** void **/ ){
  6126.         var ada_var = ( new AA2_AdapterVariables() );
  6127.         Object.seal( ada_var );
  6128.         return(      ada_var );
  6129.     };;
  6130.     function AA2_AdapterVariables( /** void **/ ){
  6131.  
  6132.         //:PE:Publically_Exposed_Functions:(BELOW):----------://
  6133.         //:PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE://
  6134.  
  6135.         this.Put_RenMod = Put_RenMod; //:PUT:ren_mod
  6136.         this.Get_RenMod = Get_RenMod; //:GET:ren_mod
  6137.                               //## <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   Todo: Undo camel case for the variable part of Get_VarName and Put_VarName.... Breaks Alignment ##//
  6138.         this.Put_EdiMod = Put_EdiMod; //:PUT:edi_mod
  6139.         this.Get_EdiMod = Get_EdiMod; //:GET:edi_mod
  6140.                              
  6141.         this.Put_GamTim = Put_GamTim; //:PUT:gam_tim
  6142.         this.Get_GamTim = Get_GamTim; //:GET:gam_tim
  6143.  
  6144.         this.Put_DexHot = Put_DexHot; //:PUT:dex_hot
  6145.         this.Get_DexHot = Get_DexHot; //:GET:dex_hot
  6146.  
  6147.             //:LV:LOSTVAR_S ( Global_Orphan_Variables )------://
  6148.             //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
  6149.  
  6150.             //[NONE_AT_THE_MOMENT]//
  6151.  
  6152.             //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
  6153.             //:GV:GLOBVAR_S: ( Intentionally_Global_Variables )
  6154.             //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
  6155.  
  6156.                     //:[ Get | Put ]rec_vpc[ x_0,x_1,y_0,y_1 ]
  6157.                     //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
  6158.  
  6159.                         this.Put_GLOBVAR_rec_vpc=(
  6160.                         /**/ Put_GLOBVAR_rec_vpc  );
  6161.                         this.Get_GLOBVAR_rec_vpc=(
  6162.                         /**/ Get_GLOBVAR_rec_vpc  );
  6163.                        
  6164.                         this.Put_GLOBVAR_rec_vpc_x_0 =(    
  6165.                         /**/ Put_GLOBVAR_rec_vpc_x_0   );;  
  6166.                         this.Get_GLOBVAR_rec_vpc_x_0 =(    
  6167.                         /**/ Get_GLOBVAR_rec_vpc_x_0   );;  
  6168.                                                            
  6169.                         this.Put_GLOBVAR_rec_vpc_x_1 =(    
  6170.                         /**/ Put_GLOBVAR_rec_vpc_x_1   );;  
  6171.                         this.Get_GLOBVAR_rec_vpc_x_1 =(    
  6172.                         /**/ Get_GLOBVAR_rec_vpc_x_1   );;  
  6173.                                                            
  6174.                         this.Put_GLOBVAR_rec_vpc_y_0 =(    
  6175.                         /**/ Put_GLOBVAR_rec_vpc_y_0   );;  
  6176.                         this.Get_GLOBVAR_rec_vpc_y_0 =(    
  6177.                         /**/ Get_GLOBVAR_rec_vpc_y_0   );;  
  6178.                                                            
  6179.                         this.Put_GLOBVAR_rec_vpc_y_1 =(    
  6180.                         /**/ Put_GLOBVAR_rec_vpc_y_1   );;  
  6181.                         this.Get_GLOBVAR_rec_vpc_y_1 =(    
  6182.                         /**/ Get_GLOBVAR_rec_vpc_y_1   );;
  6183.  
  6184.                     //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
  6185.                     //:[ Get | Put ]rec_vp0[ x_0,x_1,y_0,y_1 ]
  6186.                     //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
  6187.  
  6188.                         this.Put_GLOBVAR_rec_vp0=(
  6189.                         /**/ Put_GLOBVAR_rec_vp0  );
  6190.                         this.Get_GLOBVAR_rec_vp0=(
  6191.                         /**/ Get_GLOBVAR_rec_vp0  );
  6192.                        
  6193.                         this.Put_GLOBVAR_rec_vp0_x_0 =(    
  6194.                         /**/ Put_GLOBVAR_rec_vp0_x_0   );;  
  6195.                         this.Get_GLOBVAR_rec_vp0_x_0 =(    
  6196.                         /**/ Get_GLOBVAR_rec_vp0_x_0   );;  
  6197.                                                            
  6198.                         this.Put_GLOBVAR_rec_vp0_x_1 =(    
  6199.                         /**/ Put_GLOBVAR_rec_vp0_x_1   );;  
  6200.                         this.Get_GLOBVAR_rec_vp0_x_1 =(    
  6201.                         /**/ Get_GLOBVAR_rec_vp0_x_1   );;  
  6202.                                                            
  6203.                         this.Put_GLOBVAR_rec_vp0_y_0 =(    
  6204.                         /**/ Put_GLOBVAR_rec_vp0_y_0   );;  
  6205.                         this.Get_GLOBVAR_rec_vp0_y_0 =(    
  6206.                         /**/ Get_GLOBVAR_rec_vp0_y_0   );;  
  6207.                                                            
  6208.                         this.Put_GLOBVAR_rec_vp0_y_1 =(    
  6209.                         /**/ Put_GLOBVAR_rec_vp0_y_1   );;  
  6210.                         this.Get_GLOBVAR_rec_vp0_y_1 =(    
  6211.                         /**/ Get_GLOBVAR_rec_vp0_y_1   );;
  6212.  
  6213.                     //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
  6214.                     //:[ Get | Put ]rec_vp1[ x_0,x_1,y_0,y_1 ]
  6215.                     //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
  6216.  
  6217.                         this.Put_GLOBVAR_rec_vp1=(
  6218.                         /**/ Put_GLOBVAR_rec_vp1  );
  6219.                         this.Get_GLOBVAR_rec_vp1=(
  6220.                         /**/ Get_GLOBVAR_rec_vp1  );
  6221.                        
  6222.                         this.Put_GLOBVAR_rec_vp1_x_0 =(    
  6223.                         /**/ Put_GLOBVAR_rec_vp1_x_0   );;  
  6224.                         this.Get_GLOBVAR_rec_vp1_x_0 =(    
  6225.                         /**/ Get_GLOBVAR_rec_vp1_x_0   );;  
  6226.                                                            
  6227.                         this.Put_GLOBVAR_rec_vp1_x_1 =(    
  6228.                         /**/ Put_GLOBVAR_rec_vp1_x_1   );;  
  6229.                         this.Get_GLOBVAR_rec_vp1_x_1 =(    
  6230.                         /**/ Get_GLOBVAR_rec_vp1_x_1   );;  
  6231.                                                            
  6232.                         this.Put_GLOBVAR_rec_vp1_y_0 =(    
  6233.                         /**/ Put_GLOBVAR_rec_vp1_y_0   );;  
  6234.                         this.Get_GLOBVAR_rec_vp1_y_0 =(    
  6235.                         /**/ Get_GLOBVAR_rec_vp1_y_0   );;  
  6236.                                                            
  6237.                         this.Put_GLOBVAR_rec_vp1_y_1 =(    
  6238.                         /**/ Put_GLOBVAR_rec_vp1_y_1   );;  
  6239.                         this.Get_GLOBVAR_rec_vp1_y_1 =(    
  6240.                         /**/ Get_GLOBVAR_rec_vp1_y_1   );;
  6241.  
  6242.                     //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
  6243.                     //:[ Get | Put ]rec_vp2[ x_0,x_1,y_0,y_1 ]
  6244.                     //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
  6245.  
  6246.                         this.Put_GLOBVAR_rec_vp2=(
  6247.                         /**/ Put_GLOBVAR_rec_vp2  );
  6248.                         this.Get_GLOBVAR_rec_vp2=(
  6249.                         /**/ Get_GLOBVAR_rec_vp2  );
  6250.                        
  6251.                         this.Put_GLOBVAR_rec_vp2_x_0 =(    
  6252.                         /**/ Put_GLOBVAR_rec_vp2_x_0   );;  
  6253.                         this.Get_GLOBVAR_rec_vp2_x_0 =(    
  6254.                         /**/ Get_GLOBVAR_rec_vp2_x_0   );;  
  6255.                                                            
  6256.                         this.Put_GLOBVAR_rec_vp2_x_1 =(    
  6257.                         /**/ Put_GLOBVAR_rec_vp2_x_1   );;  
  6258.                         this.Get_GLOBVAR_rec_vp2_x_1 =(    
  6259.                         /**/ Get_GLOBVAR_rec_vp2_x_1   );;  
  6260.                                                            
  6261.                         this.Put_GLOBVAR_rec_vp2_y_0 =(    
  6262.                         /**/ Put_GLOBVAR_rec_vp2_y_0   );;  
  6263.                         this.Get_GLOBVAR_rec_vp2_y_0 =(    
  6264.                         /**/ Get_GLOBVAR_rec_vp2_y_0   );;  
  6265.                                                            
  6266.                         this.Put_GLOBVAR_rec_vp2_y_1 =(    
  6267.                         /**/ Put_GLOBVAR_rec_vp2_y_1   );;  
  6268.                         this.Get_GLOBVAR_rec_vp2_y_1 =(    
  6269.                         /**/ Get_GLOBVAR_rec_vp2_y_1   );;
  6270.  
  6271.                     //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
  6272.             //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
  6273.  
  6274.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  6275.  
  6276.             //:01:edi_001:variables:(BELOW):-----------------://
  6277.             //:0101010101010101010101010101010101010101010101://
  6278.  
  6279.             //:Put_DexSha  & Get_DexSha :
  6280.             //:PUT:dex_sha & GET:dex_sha:
  6281.             this.Put_EDIT001_dex_sha = Put_EDIT001_dex_sha;
  6282.             this.Get_EDIT001_dex_sha = Get_EDIT001_dex_sha;
  6283.  
  6284.             //:0101010101010101010101010101010101010101010101://
  6285.             //:01:edi_001:variables:(ABOVE):-----------------://
  6286.  
  6287.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  6288.  
  6289.             //:02:edi_002:variables:(BELOW):-----------------://
  6290.             //:0202020202020202020202020202020202020202020202://
  6291.  
  6292.             this.Put_EDIT002_til_exp = Put_EDIT002_til_exp;
  6293.             this.Get_EDIT002_til_exp = Get_EDIT002_til_exp;
  6294.  
  6295.             //:til_exp's value resolved to linear:
  6296.             //:This value needs to not be set directly
  6297.             //:but UPDATED as consequence of setting [til_exp]
  6298.             this.Put_EDIT002_til_san = Put_EDIT002_til_san;
  6299.             this.Get_EDIT002_til_san = Get_EDIT002_til_san;
  6300.  
  6301.             this.Put_EDIT002_cam_t_x = Put_EDIT002_cam_t_x;
  6302.             this.Get_EDIT002_cam_t_x = Get_EDIT002_cam_t_x;
  6303.                            
  6304.             this.Put_EDIT002_cam_t_y = Put_EDIT002_cam_t_y;
  6305.             this.Get_EDIT002_cam_t_y = Get_EDIT002_cam_t_y;
  6306.    
  6307.             //: Using dex_hot to identify the memory region  ://
  6308.             //: this camera is navigating over. Variable     ://
  6309.             //: does NOT signify which memory region is      ://
  6310.             //: currently hot-swapped out. The identical     ://
  6311.             //: name is because they are associated with     ://
  6312.             //: the exact same array of [rec_inc] that are   ://
  6313.             //: overlaid over [mam_mem].                     ://
  6314.             this.Put_EDIT002_dex_hot = Put_EDIT002_dex_hot;
  6315.             this.Get_EDIT002_dex_hot = Get_EDIT002_dex_hot;
  6316.  
  6317.             //:Use hyper_rectangle/hypermap/quarkmap
  6318.             //:interpretation of tilemap data on pixel data?
  6319.             this.Put_EDIT002_use_hyp = Put_EDIT002_use_hyp;
  6320.             this.Get_EDIT002_use_hyp = Get_EDIT002_use_hyp;
  6321.  
  6322.             //:0202020202020202020202020202020202020202020202://
  6323.             //:02:edi_002:variables:(ABOVE):-----------------://
  6324.  
  6325.         //:PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE://
  6326.         //:PE:Publically_Exposed_Functions:(ABOVE):----------://
  6327.  
  6328.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  6329.  
  6330.         function Put_RenMod( u32_val ){ //:put:ren_mod
  6331.  
  6332.             var ADA =( GLO_CLA.ada_gra         );
  6333.             var CON =( GLO_CLA.ada_gra.gpuvcon );
  6334.                 ADA.ren_mod.u32_val =( u32_val );
  6335.                 CON.u32_put( ADA , ADA.ren_mod );
  6336.         };;
  6337.         function Get_RenMod(/**VOI**/){ //:get:ren_mod
  6338.  
  6339.             var ADA =( GLO_CLA.ada_gra                 );
  6340.             var CON =( GLO_CLA.ada_gra.gpuvcon         );
  6341.                 CON.u32_get( ADA , ADA.ren_mod         );
  6342.                 var u32_val =(     ADA.ren_mod.u32_val );
  6343.             return( u32_val );
  6344.         };;
  6345.  
  6346.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  6347.  
  6348.         function Put_EdiMod( u32_val ){ //:put:edi_mod
  6349.  
  6350.             var ADA =( GLO_CLA.ada_gra         );
  6351.             var CON =( GLO_CLA.ada_gra.gpuvcon );
  6352.                 ADA.edi_mod.u32_val =( u32_val );
  6353.                 CON.u32_put( ADA , ADA.edi_mod );
  6354.         };;
  6355.         function Get_EdiMod(/**VOI**/){ //:get:edi_mod
  6356.  
  6357.             var ADA =( GLO_CLA.ada_gra                 );
  6358.             var CON =( GLO_CLA.ada_gra.gpuvcon         );
  6359.                 CON.u32_get( ADA , ADA.edi_mod         );
  6360.                 var u32_val =(     ADA.edi_mod.u32_val );
  6361.             return( u32_val );
  6362.         };;
  6363.  
  6364.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  6365.  
  6366.         function Put_GamTim( u32_val ){ //:put:gam_tim
  6367.  
  6368.             var ADA =( GLO_CLA.ada_gra         );
  6369.             var CON =( GLO_CLA.ada_gra.gpuvcon );
  6370.                 ADA.gam_tim.u32_val =( u32_val );
  6371.                 CON.u32_put( ADA , ADA.gam_tim );
  6372.         };;
  6373.         function Get_GamTim(/**VOI**/){ //:get:gam_tim
  6374.  
  6375.             var ADA =( GLO_CLA.ada_gra                 );
  6376.             var CON =( GLO_CLA.ada_gra.gpuvcon         );
  6377.                 CON.u32_get( ADA , ADA.gam_tim         );
  6378.                 var u32_val =(     ADA.gam_tim.u32_val );
  6379.             return( u32_val );
  6380.         };;
  6381.  
  6382.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  6383.  
  6384.         function Put_DexHot( u32_val ){ //:put:dex_hot
  6385.  
  6386.             var ADA =( GLO_CLA.ada_gra         );
  6387.             var CON =( GLO_CLA.ada_gra.gpuvcon );
  6388.                 ADA.dex_hot.u32_val =( u32_val );
  6389.                 CON.u32_put( ADA , ADA.dex_hot );
  6390.         };;
  6391.         function Get_DexHot(/**VOI**/){ //:get:dex_hot
  6392.  
  6393.             var ADA =( GLO_CLA.ada_gra                 );
  6394.             var CON =( GLO_CLA.ada_gra.gpuvcon         );
  6395.                 CON.u32_get( ADA , ADA.dex_hot         );
  6396.                 var u32_val =(     ADA.dex_hot.u32_val );
  6397.             return( u32_val );
  6398.         };;
  6399.  
  6400.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  6401.         //:LV:LOST_VARIABLES:(BELOW):------------------------://
  6402.         //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
  6403.  
  6404.             //[NONE_AT_THE_MOMENT]//
  6405.  
  6406.         //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
  6407.         //:LV:LOST_VARIABLES:(ABOVE):------------------------://
  6408.         //:GV:Global_Variables:(BELOW):----------------------://
  6409.         //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
  6410.  
  6411.             //:VC:[VIEWPORT_C / rec_vpc]:(BELOW):------------://
  6412.             //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
  6413.  
  6414.                 //:////////////////:---.GLOBVAR.rec_vpc_x_0::://
  6415.                 ;;;function         Put_GLOBVAR_rec_vpc_x_0(
  6416.                 /** u32_val ................ */ rec_vpc_x_0  ){
  6417.                     GLO_CLA.tau_001.uni_put( //:rec_vpc_x_0://
  6418.                         GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_0
  6419.                         ,                       rec_vpc_x_0 );;
  6420.                 };;function         Get_GLOBVAR_rec_vpc_x_0(
  6421.                 /** VOID **/                 //:rec_vpc_x_0://
  6422.                 ){  var /* ................. */ rec_vpc_x_0 =(
  6423.                     GLO_CLA.tau_001.uni_get( //:rec_vpc_x_0://
  6424.                         GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_0            
  6425.                     ));;return( /* ......... */ rec_vpc_x_0 );
  6426.                 };;//://///////////:---.GLOBVAR.rec_vpc_x_0::://
  6427.  
  6428.                 //:////////////////:---.GLOBVAR.rec_vpc_x_1::://
  6429.                 ;;;function         Put_GLOBVAR_rec_vpc_x_1(
  6430.                 /** u32_val ................ */ rec_vpc_x_1  ){
  6431.                     GLO_CLA.tau_001.uni_put( //:rec_vpc_x_1://
  6432.                         GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_1
  6433.                         ,                       rec_vpc_x_1 );;
  6434.                 };;function         Get_GLOBVAR_rec_vpc_x_1(
  6435.                 /** VOID **/                 //:rec_vpc_x_1://
  6436.                 ){  var /* ................. */ rec_vpc_x_1 =(
  6437.                     GLO_CLA.tau_001.uni_get( //:rec_vpc_x_1://
  6438.                         GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_1            
  6439.                     ));;return( /* ......... */ rec_vpc_x_1 );
  6440.                 };;//://///////////:---.GLOBVAR.rec_vpc_x_1::://
  6441.  
  6442.                 //:////////////////:---.GLOBVAR.rec_vpc_y_0::://
  6443.                 ;;;function         Put_GLOBVAR_rec_vpc_y_0(
  6444.                 /** u32_val ................ */ rec_vpc_y_0  ){
  6445.                     GLO_CLA.tau_001.uni_put( //:rec_vpc_y_0://
  6446.                         GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_0
  6447.                         ,                       rec_vpc_y_0 );;
  6448.                 };;function         Get_GLOBVAR_rec_vpc_y_0(
  6449.                 /** VOID **/                 //:rec_vpc_y_0://
  6450.                 ){  var /* ................. */ rec_vpc_y_0 =(
  6451.                     GLO_CLA.tau_001.uni_get( //:rec_vpc_y_0://
  6452.                         GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_0            
  6453.                     ));;return( /* ......... */ rec_vpc_y_0 );
  6454.                 };;//://///////////:---.GLOBVAR.rec_vpc_y_0::://
  6455.  
  6456.                 //:////////////////:---.GLOBVAR.rec_vpc_y_1::://
  6457.                 ;;;function         Put_GLOBVAR_rec_vpc_y_1(
  6458.                 /** u32_val ................ */ rec_vpc_y_1  ){
  6459.                     GLO_CLA.tau_001.uni_put( //:rec_vpc_y_1://
  6460.                         GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_1
  6461.                         ,                       rec_vpc_y_1 );;
  6462.                 };;function         Get_GLOBVAR_rec_vpc_y_1(
  6463.                 /** VOID **/                 //:rec_vpc_y_1://
  6464.                 ){  var /* ................. */ rec_vpc_y_1 =(
  6465.                     GLO_CLA.tau_001.uni_get( //:rec_vpc_y_1://
  6466.                         GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_1            
  6467.                     ));;return( /* ......... */ rec_vpc_y_1 );
  6468.                 };;//://///////////:---.GLOBVAR.rec_vpc_y_1::://
  6469.  
  6470.                 //:CA:Compound_Accessors:(Get/Put):----------://
  6471.                 //:CACACACACACACACACACACACACACACACACACACACACA://
  6472.                 //://////////////////////////////////////////://
  6473.                 ;;;function       Put_GLOBVAR_rec_vpc( //:///://
  6474.                                               rec_vpc  
  6475.                 ){  Put_GLOBVAR_rec_vpc_x_0(  rec_vpc.x_0  );
  6476.                     Put_GLOBVAR_rec_vpc_x_1(  rec_vpc.x_1  );
  6477.                     Put_GLOBVAR_rec_vpc_y_0(  rec_vpc.y_0  );
  6478.                     Put_GLOBVAR_rec_vpc_y_1(  rec_vpc.y_1  );
  6479.                 };;function       Get_GLOBVAR_rec_vpc(
  6480.                                               rec_vpc  
  6481.                 ){  rec_vpc.x_0 = Get_GLOBVAR_rec_vpc_x_0( );
  6482.                     rec_vpc.x_1 = Get_GLOBVAR_rec_vpc_x_1( );
  6483.                     rec_vpc.y_0 = Get_GLOBVAR_rec_vpc_y_0( );
  6484.                     rec_vpc.y_1 = Get_GLOBVAR_rec_vpc_y_1( );
  6485.                 };;//:///////////////////////////////////////://
  6486.                 //:CACACACACACACACACACACACACACACACACACACACACA://
  6487.  
  6488.             //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
  6489.             //:VC:[VIEWPORT_C / rec_vpc]:(ABOVE):------------://
  6490.  
  6491.             //:V0:[VIEWPORT_0 / rec_vp0]:(BELOW):------------://
  6492.             //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
  6493.  
  6494.                 //:////////////////:---.GLOBVAR.rec_vp0_x_0::://
  6495.                 ;;;function         Put_GLOBVAR_rec_vp0_x_0(
  6496.                 /** u32_val ................ */ rec_vp0_x_0  ){
  6497.                     GLO_CLA.tau_001.uni_put( //:rec_vp0_x_0://
  6498.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_0
  6499.                         ,                       rec_vp0_x_0 );;
  6500.                 };;function         Get_GLOBVAR_rec_vp0_x_0(
  6501.                 /** VOID **/                 //:rec_vp0_x_0://
  6502.                 ){  var /* ................. */ rec_vp0_x_0 =(
  6503.                     GLO_CLA.tau_001.uni_get( //:rec_vp0_x_0://
  6504.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_0            
  6505.                     ));;return( /* ......... */ rec_vp0_x_0 );
  6506.                 };;//://///////////:---.GLOBVAR.rec_vp0_x_0::://
  6507.  
  6508.                 //:////////////////:---.GLOBVAR.rec_vp0_x_1::://
  6509.                 ;;;function         Put_GLOBVAR_rec_vp0_x_1(
  6510.                 /** u32_val ................ */ rec_vp0_x_1  ){
  6511.                     GLO_CLA.tau_001.uni_put( //:rec_vp0_x_1://
  6512.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_1
  6513.                         ,                       rec_vp0_x_1 );;
  6514.                 };;function         Get_GLOBVAR_rec_vp0_x_1(
  6515.                 /** VOID **/                 //:rec_vp0_x_1://
  6516.                 ){  var /* ................. */ rec_vp0_x_1 =(
  6517.                     GLO_CLA.tau_001.uni_get( //:rec_vp0_x_1://
  6518.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_1            
  6519.                     ));;return( /* ......... */ rec_vp0_x_1 );
  6520.                 };;//://///////////:---.GLOBVAR.rec_vp0_x_1::://
  6521.  
  6522.                 //:////////////////:---.GLOBVAR.rec_vp0_y_0::://
  6523.                 ;;;function         Put_GLOBVAR_rec_vp0_y_0(
  6524.                 /** u32_val ................ */ rec_vp0_y_0  ){
  6525.                     GLO_CLA.tau_001.uni_put( //:rec_vp0_y_0://
  6526.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_0
  6527.                         ,                       rec_vp0_y_0 );;
  6528.                 };;function         Get_GLOBVAR_rec_vp0_y_0(
  6529.                 /** VOID **/                 //:rec_vp0_y_0://
  6530.                 ){  var /* ................. */ rec_vp0_y_0 =(
  6531.                     GLO_CLA.tau_001.uni_get( //:rec_vp0_y_0://
  6532.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_0            
  6533.                     ));;return( /* ......... */ rec_vp0_y_0 );
  6534.                 };;//://///////////:---.GLOBVAR.rec_vp0_y_0::://
  6535.  
  6536.                 //:////////////////:---.GLOBVAR.rec_vp0_y_1::://
  6537.                 ;;;function         Put_GLOBVAR_rec_vp0_y_1(
  6538.                 /** u32_val ................ */ rec_vp0_y_1  ){
  6539.                     GLO_CLA.tau_001.uni_put( //:rec_vp0_y_1://
  6540.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_1
  6541.                         ,                       rec_vp0_y_1 );;
  6542.                 };;function         Get_GLOBVAR_rec_vp0_y_1(
  6543.                 /** VOID **/                 //:rec_vp0_y_1://
  6544.                 ){  var /* ................. */ rec_vp0_y_1 =(
  6545.                     GLO_CLA.tau_001.uni_get( //:rec_vp0_y_1://
  6546.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_1            
  6547.                     ));;return( /* ......... */ rec_vp0_y_1 );
  6548.                 };;//://///////////:---.GLOBVAR.rec_vp0_y_1::://
  6549.    
  6550.                 //:CA:Compound_Accessors:(Get/Put):----------://
  6551.                 //:CACACACACACACACACACACACACACACACACACACACACA://
  6552.                 //://////////////////////////////////////////://
  6553.                 ;;;function       Put_GLOBVAR_rec_vp0( //:///://
  6554.                                               rec_vp0  
  6555.                 ){  Put_GLOBVAR_rec_vp0_x_0(  rec_vp0.x_0  );
  6556.                     Put_GLOBVAR_rec_vp0_x_1(  rec_vp0.x_1  );
  6557.                     Put_GLOBVAR_rec_vp0_y_0(  rec_vp0.y_0  );
  6558.                     Put_GLOBVAR_rec_vp0_y_1(  rec_vp0.y_1  );
  6559.                 };;function       Get_GLOBVAR_rec_vp0(
  6560.                                               rec_vp0  
  6561.                 ){  rec_vp0.x_0 = Get_GLOBVAR_rec_vp0_x_0( );
  6562.                     rec_vp0.x_1 = Get_GLOBVAR_rec_vp0_x_1( );
  6563.                     rec_vp0.y_0 = Get_GLOBVAR_rec_vp0_y_0( );
  6564.                     rec_vp0.y_1 = Get_GLOBVAR_rec_vp0_y_1( );
  6565.                 };;//:///////////////////////////////////////://
  6566.                 //:CACACACACACACACACACACACACACACACACACACACACA://
  6567.  
  6568.             //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
  6569.             //:V0:[VIEWPORT_0 / rec_vp0]:(ABOVE):------------://
  6570.            
  6571.             //:V1:[VIEWPORT_1 / rec_vp1]:(BELOW):------------://
  6572.             //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
  6573.  
  6574.                 //:////////////////:---.GLOBVAR.rec_vp1_x_0::://
  6575.                 ;;;function         Put_GLOBVAR_rec_vp1_x_0(
  6576.                 /** u32_val ................ */ rec_vp1_x_0  ){
  6577.                     GLO_CLA.tau_001.uni_put( //:rec_vp1_x_0://
  6578.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_0
  6579.                         ,                       rec_vp1_x_0 );;
  6580.                 };;function         Get_GLOBVAR_rec_vp1_x_0(
  6581.                 /** VOID **/                 //:rec_vp1_x_0://
  6582.                 ){  var /* ................. */ rec_vp1_x_0 =(
  6583.                     GLO_CLA.tau_001.uni_get( //:rec_vp1_x_0://
  6584.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_0            
  6585.                     ));;return( /* ......... */ rec_vp1_x_0 );
  6586.                 };;//://///////////:---.GLOBVAR.rec_vp1_x_0::://
  6587.  
  6588.                 //:////////////////:---.GLOBVAR.rec_vp1_x_1::://
  6589.                 ;;;function         Put_GLOBVAR_rec_vp1_x_1(
  6590.                 /** u32_val ................ */ rec_vp1_x_1  ){
  6591.                     GLO_CLA.tau_001.uni_put( //:rec_vp1_x_1://
  6592.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_1
  6593.                         ,                       rec_vp1_x_1 );;
  6594.                 };;function         Get_GLOBVAR_rec_vp1_x_1(
  6595.                 /** VOID **/                 //:rec_vp1_x_1://
  6596.                 ){  var /* ................. */ rec_vp1_x_1 =(
  6597.                     GLO_CLA.tau_001.uni_get( //:rec_vp1_x_1://
  6598.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_1            
  6599.                     ));;return( /* ......... */ rec_vp1_x_1 );
  6600.                 };;//://///////////:---.GLOBVAR.rec_vp1_x_1::://
  6601.  
  6602.                 //:////////////////:---.GLOBVAR.rec_vp1_y_0::://
  6603.                 ;;;function         Put_GLOBVAR_rec_vp1_y_0(
  6604.                 /** u32_val ................ */ rec_vp1_y_0  ){
  6605.                     GLO_CLA.tau_001.uni_put( //:rec_vp1_y_0://
  6606.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_0
  6607.                         ,                       rec_vp1_y_0 );;
  6608.                 };;function         Get_GLOBVAR_rec_vp1_y_0(
  6609.                 /** VOID **/                 //:rec_vp1_y_0://
  6610.                 ){  var /* ................. */ rec_vp1_y_0 =(
  6611.                     GLO_CLA.tau_001.uni_get( //:rec_vp1_y_0://
  6612.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_0            
  6613.                     ));;return( /* ......... */ rec_vp1_y_0 );
  6614.                 };;//://///////////:---.GLOBVAR.rec_vp1_y_0::://
  6615.  
  6616.                 //:////////////////:---.GLOBVAR.rec_vp1_y_1::://
  6617.                 ;;;function         Put_GLOBVAR_rec_vp1_y_1(
  6618.                 /** u32_val ................ */ rec_vp1_y_1  ){
  6619.                     GLO_CLA.tau_001.uni_put( //:rec_vp1_y_1://
  6620.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_1
  6621.                         ,                       rec_vp1_y_1 );;
  6622.                 };;function         Get_GLOBVAR_rec_vp1_y_1(
  6623.                 /** VOID **/                 //:rec_vp1_y_1://
  6624.                 ){  var /* ................. */ rec_vp1_y_1 =(
  6625.                     GLO_CLA.tau_001.uni_get( //:rec_vp1_y_1://
  6626.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_1            
  6627.                     ));;return( /* ......... */ rec_vp1_y_1 );
  6628.                 };;//://///////////:---.GLOBVAR.rec_vp1_y_1::://
  6629.  
  6630.                 //:CA:Compound_Accessors:(Get/Put):----------://
  6631.                 //:CACACACACACACACACACACACACACACACACACACACACA://
  6632.                 //://////////////////////////////////////////://
  6633.                 ;;;function       Put_GLOBVAR_rec_vp1( //:///://
  6634.                                               rec_vp1  
  6635.                 ){  Put_GLOBVAR_rec_vp1_x_0(  rec_vp1.x_0  );
  6636.                     Put_GLOBVAR_rec_vp1_x_1(  rec_vp1.x_1  );
  6637.                     Put_GLOBVAR_rec_vp1_y_0(  rec_vp1.y_0  );
  6638.                     Put_GLOBVAR_rec_vp1_y_1(  rec_vp1.y_1  );
  6639.                 };;function       Get_GLOBVAR_rec_vp1(
  6640.                                               rec_vp1  
  6641.                 ){  rec_vp1.x_0 = Get_GLOBVAR_rec_vp1_x_0( );
  6642.                     rec_vp1.x_1 = Get_GLOBVAR_rec_vp1_x_1( );
  6643.                     rec_vp1.y_0 = Get_GLOBVAR_rec_vp1_y_0( );
  6644.                     rec_vp1.y_1 = Get_GLOBVAR_rec_vp1_y_1( );
  6645.                 };;//:///////////////////////////////////////://
  6646.                 //:CACACACACACACACACACACACACACACACACACACACACA://
  6647.  
  6648.             //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
  6649.             //:V1:[VIEWPORT_1 / rec_vp1]:(ABOVE):------------://
  6650.  
  6651.             //:V2:[VIEWPORT_2 / rec_vp2]:(BELOW):------------://
  6652.             //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
  6653.  
  6654.                 //:////////////////:---.GLOBVAR.rec_vp2_x_0::://
  6655.                 ;;;function         Put_GLOBVAR_rec_vp2_x_0(
  6656.                 /** u32_val ................ */ rec_vp2_x_0  ){
  6657.                     GLO_CLA.tau_001.uni_put( //:rec_vp2_x_0://
  6658.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_0
  6659.                         ,                       rec_vp2_x_0 );;
  6660.                 };;function         Get_GLOBVAR_rec_vp2_x_0(
  6661.                 /** VOID **/                 //:rec_vp2_x_0://
  6662.                 ){  var /* ................. */ rec_vp2_x_0 =(
  6663.                     GLO_CLA.tau_001.uni_get( //:rec_vp2_x_0://
  6664.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_0            
  6665.                     ));;return( /* ......... */ rec_vp2_x_0 );
  6666.                 };;//://///////////:---.GLOBVAR.rec_vp2_x_0::://
  6667.  
  6668.                 //:////////////////:---.GLOBVAR.rec_vp2_x_1::://
  6669.                 ;;;function         Put_GLOBVAR_rec_vp2_x_1(
  6670.                 /** u32_val ................ */ rec_vp2_x_1  ){
  6671.                     GLO_CLA.tau_001.uni_put( //:rec_vp2_x_1://
  6672.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_1
  6673.                         ,                       rec_vp2_x_1 );;
  6674.                 };;function         Get_GLOBVAR_rec_vp2_x_1(
  6675.                 /** VOID **/                 //:rec_vp2_x_1://
  6676.                 ){  var /* ................. */ rec_vp2_x_1 =(
  6677.                     GLO_CLA.tau_001.uni_get( //:rec_vp2_x_1://
  6678.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_1            
  6679.                     ));;return( /* ......... */ rec_vp2_x_1 );
  6680.                 };;//://///////////:---.GLOBVAR.rec_vp2_x_1::://
  6681.  
  6682.                 //:////////////////:---.GLOBVAR.rec_vp2_y_0::://
  6683.                 ;;;function         Put_GLOBVAR_rec_vp2_y_0(
  6684.                 /** u32_val ................ */ rec_vp2_y_0  ){
  6685.                     GLO_CLA.tau_001.uni_put( //:rec_vp2_y_0://
  6686.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_0
  6687.                         ,                       rec_vp2_y_0 );;
  6688.                 };;function         Get_GLOBVAR_rec_vp2_y_0(
  6689.                 /** VOID **/                 //:rec_vp2_y_0://
  6690.                 ){  var /* ................. */ rec_vp2_y_0 =(
  6691.                     GLO_CLA.tau_001.uni_get( //:rec_vp2_y_0://
  6692.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_0            
  6693.                     ));;return( /* ......... */ rec_vp2_y_0 );
  6694.                 };;//://///////////:---.GLOBVAR.rec_vp2_y_0::://
  6695.  
  6696.                 //:////////////////:---.GLOBVAR.rec_vp2_y_1::://
  6697.                 ;;;function         Put_GLOBVAR_rec_vp2_y_1(
  6698.                 /** u32_val ................ */ rec_vp2_y_1  ){
  6699.                     GLO_CLA.tau_001.uni_put( //:rec_vp2_y_1://
  6700.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_1
  6701.                         ,                       rec_vp2_y_1 );;
  6702.                 };;function         Get_GLOBVAR_rec_vp2_y_1(
  6703.                 /** VOID **/                 //:rec_vp2_y_1://
  6704.                 ){  var /* ................. */ rec_vp2_y_1 =(
  6705.                     GLO_CLA.tau_001.uni_get( //:rec_vp2_y_1://
  6706.                         GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_1            
  6707.                     ));;return( /* ......... */ rec_vp2_y_1 );
  6708.                 };;//://///////////:---.GLOBVAR.rec_vp2_y_1::://
  6709.  
  6710.                 //:CA:Compound_Accessors:(Get/Put):----------://
  6711.                 //:CACACACACACACACACACACACACACACACACACACACACA://
  6712.                 //://////////////////////////////////////////://
  6713.                 ;;;function       Put_GLOBVAR_rec_vp2( //:///://
  6714.                                               rec_vp2  
  6715.                 ){  Put_GLOBVAR_rec_vp2_x_0(  rec_vp2.x_0  );
  6716.                     Put_GLOBVAR_rec_vp2_x_1(  rec_vp2.x_1  );
  6717.                     Put_GLOBVAR_rec_vp2_y_0(  rec_vp2.y_0  );
  6718.                     Put_GLOBVAR_rec_vp2_y_1(  rec_vp2.y_1  );
  6719.                 };;function       Get_GLOBVAR_rec_vp2(
  6720.                                               rec_vp2  
  6721.                 ){  rec_vp2.x_0 = Get_GLOBVAR_rec_vp2_x_0( );
  6722.                     rec_vp2.x_1 = Get_GLOBVAR_rec_vp2_x_1( );
  6723.                     rec_vp2.y_0 = Get_GLOBVAR_rec_vp2_y_0( );
  6724.                     rec_vp2.y_1 = Get_GLOBVAR_rec_vp2_y_1( );
  6725.                 };;//:///////////////////////////////////////://
  6726.                 //:CACACACACACACACACACACACACACACACACACACACACA://
  6727.  
  6728.             //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
  6729.             //:V2:[VIEWPORT_2 / rec_vp2]:(ABOVE):------------://
  6730.  
  6731.         //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
  6732.         //:GV:Global_Variables:(ABOVE):----------------------://
  6733.         //:E1:edi_001:vars:(BELOW):--------------------------://
  6734.         //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
  6735.         //:AKA[ put:dex_sha | Put_DexSha ]
  6736.         function Put_EDIT001_dex_sha( dex_sha /** u32_val **/ ){
  6737.             console.log("[put:dex_sha]:", dex_sha );
  6738.  
  6739.             GLO_CLA.tau_001.uni_put(
  6740.             GLO_CFG.TAU_001_EDIT001_dex_sha
  6741.             ,                       dex_sha );;
  6742.  
  6743.         };;
  6744.         //:AKA[ get:dex_sha | Get_DexSha ]
  6745.         function Get_EDIT001_dex_sha(/**VOI**/){
  6746.             console.log("[TODO:Get_DexSha]");
  6747.  
  6748.             var dex_sha = GLO_CLA.tau_001.uni_get(
  6749.                 GLO_CFG.TAU_001_EDIT001_dex_sha            
  6750.             );;
  6751.  
  6752.             console.log("[got:dex_sha]:", dex_sha );
  6753.             return( dex_sha );
  6754.         };;
  6755.         //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
  6756.         //:E2:edi_002:vars:(BELOW):--------------------------://
  6757.         //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
  6758.  
  6759.             //:////////////////:---.EDIT002.til_exp:////:////://
  6760.             ;;;function         Put_EDIT002_til_exp(
  6761.             /** u32_val ................ */ til_exp  ){
  6762.                 GLO_CLA.tau_001.uni_put( //:til_exp://
  6763.                     GLO_CFG.TAU_001_EDIT002_til_exp
  6764.                     ,                       til_exp );;
  6765.             };;function         Get_EDIT002_til_exp(
  6766.             /** VOID **/                 //:til_exp://
  6767.             ){  var /* ................. */ til_exp =(
  6768.                 GLO_CLA.tau_001.uni_get( //:til_exp://
  6769.                     GLO_CFG.TAU_001_EDIT002_til_exp            
  6770.                 ));;return( /* ......... */ til_exp );
  6771.             };;//://///////////:---.EDIT002.til_exp:////:////://
  6772.  
  6773.             //:////////////////:---.EDIT002.til_san:////:////://
  6774.             ;;;function         Put_EDIT002_til_san(
  6775.             /** u32_val ................ */ til_san  ){
  6776.                 GLO_CLA.tau_001.uni_put( //:til_san://
  6777.                     GLO_CFG.TAU_001_EDIT002_til_san
  6778.                     ,                       til_san );;
  6779.             };;function         Get_EDIT002_til_san(
  6780.             /** VOID **/                 //:til_san://
  6781.             ){  var /* ................. */ til_san =(
  6782.                 GLO_CLA.tau_001.uni_get( //:til_san://
  6783.                     GLO_CFG.TAU_001_EDIT002_til_san            
  6784.                 ));;return( /* ......... */ til_san );
  6785.             };;//://///////////:---.EDIT002.til_san:////:////://
  6786.  
  6787.             //:////////////////:---.EDIT002.cam_t_x:////:////://
  6788.             ;;;function         Put_EDIT002_cam_t_x(
  6789.             /** u32_val ................ */ cam_t_x  ){
  6790.                 GLO_CLA.tau_001.uni_put( //:cam_t_x://
  6791.                     GLO_CFG.TAU_001_EDIT002_cam_t_x
  6792.                     ,                       cam_t_x );;
  6793.             };;function         Get_EDIT002_cam_t_x(
  6794.             /** VOID **/                 //:cam_t_x://
  6795.             ){  var /* ................. */ cam_t_x =(
  6796.                 GLO_CLA.tau_001.uni_get( //:cam_t_x://
  6797.                     GLO_CFG.TAU_001_EDIT002_cam_t_x        
  6798.                 ));;return( /* ......... */ cam_t_x );
  6799.             };;//://///////////:---.EDIT002.cam_t_x:////:////://
  6800.  
  6801.             //:////////////////:---.EDIT002.cam_t_y:////:////://
  6802.             ;;;function         Put_EDIT002_cam_t_y(
  6803.             /** u32_val ................ */ cam_t_y  ){
  6804.                 GLO_CLA.tau_001.uni_put( //:cam_t_y://
  6805.                     GLO_CFG.TAU_001_EDIT002_cam_t_y
  6806.                     ,                       cam_t_y );;
  6807.             };;function         Get_EDIT002_cam_t_y(
  6808.             /** VOID **/                 //:cam_t_y://
  6809.             ){  var /* ................. */ cam_t_y =(
  6810.                 GLO_CLA.tau_001.uni_get( //:cam_t_y://
  6811.                     GLO_CFG.TAU_001_EDIT002_cam_t_y        
  6812.                 ));;return( /* ......... */ cam_t_y );
  6813.             };;//://///////////:---.EDIT002.cam_t_y:////:////://
  6814.  
  6815.             //:////////////////:---.EDIT002.dex_hot:////:////://
  6816.             ;;;function         Put_EDIT002_dex_hot(
  6817.             /** u32_val ................ */ dex_hot  ){
  6818.                 GLO_CLA.tau_001.uni_put( //:dex_hot://
  6819.                     GLO_CFG.TAU_001_EDIT002_dex_hot
  6820.                     ,                       dex_hot );;
  6821.             };;function         Get_EDIT002_dex_hot(
  6822.             /** VOID **/                 //:dex_hot://
  6823.             ){  var /* ................. */ dex_hot =(
  6824.                 GLO_CLA.tau_001.uni_get( //:dex_hot://
  6825.                     GLO_CFG.TAU_001_EDIT002_dex_hot        
  6826.                 ));;return( /* ......... */ dex_hot );
  6827.             };;//://///////////:---.EDIT002.dex_hot:////:////://
  6828.  
  6829.             //:////////////////:---.EDIT002.use_hyp:////:////://
  6830.             ;;;function         Put_EDIT002_use_hyp(
  6831.             /** u32_val ................ */ use_hyp  ){
  6832.                 GLO_CLA.tau_001.uni_put( //:use_hyp://
  6833.                     GLO_CFG.TAU_001_EDIT002_use_hyp
  6834.                     ,                       use_hyp );;
  6835.             };;function         Get_EDIT002_use_hyp(
  6836.             /** VOID **/                 //:use_hyp://
  6837.             ){  var /* ................. */ use_hyp =(
  6838.                 GLO_CLA.tau_001.uni_get( //:use_hyp://
  6839.                     GLO_CFG.TAU_001_EDIT002_use_hyp        
  6840.                 ));;return( /* ......... */ use_hyp );
  6841.             };;//://///////////:---.EDIT002.use_hyp:////:////://
  6842.  
  6843.         //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
  6844.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  6845.     };;
  6846.     //:AVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV://
  6847.     //:AV:Adapter_Variables:(ABOVE):-------------------------://
  6848.  
  6849.     //:EA:Editor_All:(BELOW):--------------------------------://
  6850.     //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
  6851.     //:                                                      ://
  6852.     //:  edi_all is ALWAYS in focus and always reading       ://
  6853.     //:  keyboard and mouse input. Depending on the          ://
  6854.     //:  current editor mode ( edi_mod ) it will pass        ://
  6855.     //:  the message on to other subordinate editors.        ://
  6856.     //:                                                      ://
  6857.     //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
  6858.     function NEW_edi_all( /** void **/ ){
  6859.         var edi_all =( new AA2_EditorAll() );
  6860.  
  6861.             //:HACK: Because of javascript oddness:
  6862.             edi_all.CONSTRUCTOR_AKA_INITIALIZER_edi_all( );
  6863.  
  6864.         Object.seal( edi_all );
  6865.         return(      edi_all );
  6866.     };;
  6867.     function AA2_EditorAll( ){
  6868.  
  6869.         //:Publically_Exposed_Functions:
  6870.         //://////////////////////////////////////////////////://
  6871.  
  6872.         //:A generic event reader that reads any type of
  6873.         //:input event. Whether it be keyboard or mouse.
  6874.         //:Could also extend to non-userinput events.
  6875.         this.ReadEvent = ReadEvent;
  6876.  
  6877.         //:Hack because of javascript weirdness.
  6878.         this.CONSTRUCTOR_AKA_INITIALIZER_edi_all=(
  6879.              CONSTRUCTOR_AKA_INITIALIZER_edi_all  );;
  6880.  
  6881.         //://////////////////////////////////////////////////://
  6882.  
  6883.         //:Hidden/Private:
  6884.         //:==================================================://
  6885.         var _ = {}; //:Private Variables Container.
  6886.             _.editor_is_in_command_mode =( 0 );
  6887.             _.arr_edi =[ 10 ];
  6888.         Object.seal( _ );
  6889.         //:==================================================://
  6890.  
  6891.         //:An explicit constructor/Initializer that is called
  6892.         //:within NEW_edi_all(...) will make this code
  6893.         //:easier to transcribe to C.
  6894.         function CONSTRUCTOR_AKA_INITIALIZER_edi_all(
  6895.             /** void **/
  6896.         ){
  6897.             _.arr_edi = [ 0 //:First Editor is null
  6898.             ,   GLO_CLA.edi_001
  6899.             ,   GLO_CLA.edi_002
  6900.             ,   GLO_CLA.edi_003
  6901.             ,   GLO_CLA.edi_004
  6902.             ,   GLO_CLA.edi_005
  6903.             ,   GLO_CLA.edi_006
  6904.             ,   GLO_CLA.edi_007
  6905.             ,   GLO_CLA.edi_008
  6906.             ,   GLO_CLA.edi_009
  6907.             ];;
  6908.         };;
  6909.  
  6910.         function ReadEvent( glo_eve ){
  6911.            
  6912.             //:Possible for object to simultaniously
  6913.             //:be BOTH event types at the same time,
  6914.             //:so do NOT use "if-else" or "switch" here.
  6915.             //://////////////////////////////////////////////://
  6916.             if( _IsKeyboardEvent(   glo_eve )){
  6917.                 _HandleEvent_Key(   glo_eve );
  6918.             };;
  6919.             if( _IsMouseEvent(      glo_eve )){
  6920.                 _HandleEvent_Mou(   glo_eve );
  6921.             };;
  6922.             //://////////////////////////////////////////////://
  6923.  
  6924.             //:reset's the bit pattersn on:
  6925.             //:     1: glo_eve.evt_typ
  6926.             //:     2: glo_eve.sub_typ
  6927.             //:To let us know the event data is now invalid.
  6928.             _MarkEventAsConsumed( glo_eve );
  6929.            
  6930.             //:Zeros out all values EXCEPT[ evt_typ & sub_typ ]
  6931.             //:So that old values don't get "necromanced"
  6932.             //:When bit patterns on "evt_typ" or "sub_type"
  6933.             //:get re-instated. If you are REALLY CAREFUL
  6934.             //:you could run code without this. But it means
  6935.             //:all handler functions MUST check "evt_typ"
  6936.             //:and "sub_typ" and only touch data associated
  6937.             //:with those event categories.
  6938.             //:AKA[ _BetterSafeThanSorryEventDataWhipe ]
  6939.             _EventDataWhipe( glo_eve );
  6940.         };;
  6941.  
  6942.         //://////////////////////////////////////////////////://
  6943.         ;;function _IsKeyboardEvent(      glo_eve ){ //://///://
  6944.  
  6945.             //:Bitwise_AND_to_determine_if_true:
  6946.             var res_var=( GLO_DAT.eve_bit.eve_typ_KEY
  6947.                                 & glo_eve.eve_typ );;
  6948.             return( res_var );
  6949.  
  6950.         };;function _IsMouseEvent(        glo_eve ){ //://///://
  6951.  
  6952.             //:Bitwise_AND_to_determine_if_true:
  6953.             var res_var =( GLO_DAT.eve_bit.eve_typ_MOU
  6954.                                  & glo_eve.eve_typ );;
  6955.             return( res_var );
  6956.        
  6957.         };;function _HandleEvent_Key(     glo_eve ){ //://///://
  6958.  
  6959.             var key_press_intercepted =( 0 );
  6960.  
  6961.             //:Hotkey_Override:
  6962.             //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
  6963.             if( glo_eve.k_d){
  6964.             if( //:------------------------------------------://      
  6965.                 0x00 ||  ( "~" == glo_eve.key )
  6966.                      ||  ( "`" == glo_eve.key )
  6967.             ){  //:------------------------------------------://
  6968.  
  6969.                 _.editor_is_in_command_mode =( 1 );
  6970.                 key_press_intercepted      = ( 1 );
  6971.  
  6972.                 //:------------------------------------------://
  6973.             }else
  6974.             if( _.editor_is_in_command_mode >  0 ){
  6975.                 _.editor_is_in_command_mode =( 0 );
  6976.                 _InvokeHotKey( glo_eve /** glo_eve.key **/ );
  6977.                 key_press_intercepted = ( 1 );
  6978.             };;};;
  6979.             //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
  6980.            
  6981.             //:Route:ToOtherEditors:
  6982.             //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
  6983.             if( key_press_intercepted <= 0 ){
  6984.                 //:Route to sub-editors here:
  6985.  
  6986.             //:    console.log( "[KEY]:", glo_eve     );
  6987.             //:    console.log( "[k_d]:", glo_eve.k_d );
  6988.             //:    console.log( "[k_u]:", glo_eve.k_u );
  6989.      
  6990.                 var tag_eve =( "K_" ); //:KeyWhatever
  6991.                 if( glo_eve.k_u > 0 ){ tag_eve = "KU"; };
  6992.                 if( glo_eve.k_d > 0 ){ tag_eve = "KD"; };
  6993.  
  6994.                 //:INSIDE_FUNCTION[ _HandleEvent_Key ]
  6995.                 _Call_edi_sub_ReadEvent_Tagged(
  6996.                     glo_eve //:Global_Event
  6997.                 ,   tag_eve //:TAG(for)EVEnt(type)
  6998.                 );;
  6999.             };;
  7000.             //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
  7001.  
  7002.         };;function _HandleEvent_Mou(   glo_eve ){ //://///://
  7003.             //:AKA[ _HandleEvent_Mouse | _HandleEvent_Mou ]
  7004.  
  7005.             //:If in command mode, ignore mouse events
  7006.             //:until user has pressed another key.
  7007.             //:NICE_TO_HAVE: red boarder around screen
  7008.             //:when in command mode and awaiting hot key input.
  7009.             if( _.editor_is_in_command_mode > 0 ){
  7010.                 return;
  7011.             }else{
  7012.  
  7013.             //:   console.log( "[MOU]:", glo_eve     );
  7014.             //:   console.log( "[m_d]:", glo_eve.m_d );
  7015.             //:   console.log( "[m_u]:", glo_eve.m_u );
  7016.  
  7017.                 //#******************************************#//
  7018.                 //#  For now, we will ignore passing event   #//
  7019.                 //#  down unless it is a click type event.   #//
  7020.                 //#******************************************#//
  7021.                 var is_click_event=(        
  7022.                     GLO_DAT.eve_bit.sub_typ_CLK
  7023.                           & glo_eve.sub_typ
  7024.                 );;
  7025.                 //:Even negative in case signed weirdness
  7026.                 //:somehow happens.
  7027.                 if( is_click_event != 0 /**EVEN NEGATIVE**/ ){
  7028.  
  7029.                     var tag_eve = "MC"; //:TAG:MouseClick
  7030.  
  7031.                     //:INSIDE_FUNCTION[ _HandleEvent_Mou ]
  7032.                     _Call_edi_sub_ReadEvent_Tagged(
  7033.                         glo_eve //:Global_Event
  7034.                     ,   tag_eve //:TAG(for)EVEnt(type)
  7035.                     );;
  7036.                 }else{
  7037.                     console.log(
  7038.                         "[FIX:SupportEventsBesides:CLK]"
  7039.                     );;
  7040.                 };;
  7041.             };;
  7042.  
  7043.         };;//:///////////////////////////////////////////////://
  7044.  
  7045.                 //:Function Name Reads:
  7046.                 //:"Call edi_sub.ReadEvent_Tagged(...)"
  7047.                 //:CALLED_FROM[ _HandleEvent_Key ]       //:-://
  7048.                 //:CALLED_FROM[ _HandleEvent_Mou ]       //:-://
  7049.                 function _Call_edi_sub_ReadEvent_Tagged( //:-://
  7050.                     glo_eve                              //:-://
  7051.                 ,   tag_eve                              //:-://
  7052.                 ){                                       //:-://
  7053.                     var edi_mod =(                       //:-://
  7054.                         GLO_CLA.ada_var.Get_EdiMod()     //:-://
  7055.                     );;                                  //:-://
  7056.                     //:Only supporting sub editors [1-9] // - //
  7057.                     if( edi_mod >= 1 && edi_mod <= 9 ){  
  7058.                     //:19191919191919191919191919191919191919://
  7059.                     var edi_sub = _.arr_edi[ edi_mod ];  
  7060.  
  7061.                         //+//////////////////////////////////+//
  7062.                         //+                                  +//
  7063.                         //+ Problems with this approach:     +//
  7064.                         //+                                  +//
  7065.                         //+ _.arr_edi[ edi_mod ].Func(...)   +//
  7066.                         //+                                  +//
  7067.                         //+ 1:Polymorphism in C could be     +//
  7068.                         //+   done here by having function   +//
  7069.                         //+   pointers.                      +//
  7070.                         //+   But then you would have to be  +//
  7071.                         //+   very careful that data-layout  +//
  7072.                         //+   for derived types is the same. +//
  7073.                         //+                                  +//
  7074.                         //+Using a void* collection of A & B +//
  7075.                         //+here would be disasterous.        +//
  7076.                         //+struct A{ void* FN_A;void* FN_B };+//
  7077.                         //+struct B{ void* FN_B;void* FN_A };+//
  7078.                         //+                                  +//
  7079.                         //+//:BUT if careful could work:     +//
  7080.                         //+struct A{ void* FN_A;void* FN_B };+//
  7081.                         //+struct B{ void* FN_A;void* FN_B };+//
  7082.                         //+                                  +//
  7083.                         //+2: If all of our editors were     +//
  7084.                         //+   written in style:              +//
  7085.                         //+   A: Proceedural (ALL EDITORS)   +//
  7086.                         //+   B: ObjectOriented( ALL EDITORS)+//
  7087.                         //+                                  +//
  7088.                         //+  This approach would work.       +//
  7089.                         //+  But will not work if mixing     +//
  7090.                         //+  procedural and OOP editor code. +//
  7091.                         //+                                  +//
  7092.                         //+  2.A: DANGER!!!!!!               +//
  7093.                         //+       Even if you did 2.A...     +//
  7094.                         //+       It would work in JavaScript+//
  7095.                         //+       But would be subject to    +//
  7096.                         //+       the problems of point #1.  +//
  7097.                         //- edi_sub.ReadEvent_Tagged(        -//      
  7098.                         //-     glo_eve                      -//      
  7099.                         //- ,   tag_eve                      -//      
  7100.                         //- );;                              -//
  7101.                         //+__________________________________+//
  7102.  
  7103.                         //:We can at least keep table for
  7104.                         //:a check to see if editor was
  7105.                         //:instantiated.
  7106.                         if(!edi_sub){ throw("[NO_SUB_EDI]");};
  7107.  
  7108.                         //:KISS:Keep_it_Simple_stupid:(BELOW)://
  7109.                         //:KSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKS://
  7110.                         /*--*/if( 0 == edi_mod ){
  7111.  
  7112.                             throw("[ThisShouldNeverExecute]");
  7113.  
  7114.                         }else if( 1 == edi_mod ){
  7115.    
  7116.                             GLO_CLA.edi_001.ReadEvent_Tagged(
  7117.                                 glo_eve , tag_eve
  7118.                             );;
  7119.  
  7120.                         }else if( 2 == edi_mod ){
  7121.                            
  7122.                             AA2_edi_002_ReadEvent_Tagged(
  7123.                                  edi_sub ,glo_eve,tag_eve
  7124.                             );;
  7125.  
  7126.                         }else if( 3 == edi_mod ){
  7127.                             console.log( "[TODO:03]" );
  7128.                         }else if( 4 == edi_mod ){
  7129.                             console.log( "[TODO:04]" );
  7130.                         }else if( 5 == edi_mod ){
  7131.                             console.log( "[TODO:05]" );
  7132.                         }else if( 6 == edi_mod ){
  7133.                             console.log( "[TODO:06]" );
  7134.                         }else if( 7 == edi_mod ){
  7135.                             console.log( "[TODO:07]" );
  7136.                         }else if( 8 == edi_mod ){
  7137.                             console.log( "[TODO:08]" );
  7138.                         }else if( 9 == edi_mod ){
  7139.                             console.log( "[TODO:09]" );
  7140.                         }else{
  7141.                             throw("[YOU_MISSED_AN_EDITOR]");
  7142.                         };;
  7143.                         //:KISS:Keep_it_Simple_stupid:(BELOW)://
  7144.                         //:KSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKS://
  7145.  
  7146.                     //:19191919191919191919191919191919191919://
  7147.                     }else
  7148.                     if( 0 == edi_mod ){
  7149.                         //:Okay. Only edi_all get's
  7150.                         //:Messages and does not pass
  7151.                         //:them down to sub editors.
  7152.                     }else{
  7153.                         throw( "[BAD:edi_mod]:" + edi_mod );
  7154.                     };;
  7155.                 };;                                
  7156.  
  7157.         //://////////////////////////////////////////////////://
  7158.         function _MarkEventAsConsumed( glo_eve ){    //://///://
  7159.  
  7160.             //:Must be done after all handler's are executed.
  7161.  
  7162.             glo_eve.eve_typ =( 0 );
  7163.             glo_eve.sub_typ =( 0 );
  7164.  
  7165.         };;function _EventDataWhipe(      glo_eve ){ //://///://
  7166.  
  7167.             //:EW:EventWhipe:(BELOW):------------------------://
  7168.             //:EWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEW://
  7169.             //:                                              ://
  7170.             //: Whipe all data EXCEPT FOR:                   ://
  7171.             //:     1: eve_typ  <-- _MarkEventAsConsumed     ://
  7172.             //:     2: sub_typ  <-- _MarkEventAsConsumed     ://
  7173.             //:     3: VAR_TYP  <--  CONSTANT                ://
  7174.             //:                                              ://
  7175.             //:EWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEW://
  7176.             glo_eve.key =("" );            //:               ://
  7177.                                            //:               ://
  7178.             glo_eve.k_d =( 0 ); //:KEY:DOW //:               ://
  7179.             glo_eve.k_u =( 0 ); //:KEY:UPP //:               ://
  7180.                                            //:               ://
  7181.             glo_eve.m_x =( 0 ); //:MOU:X_X //:               ://
  7182.             glo_eve.m_y =( 0 ); //:MOU:Y_Y //:               ://
  7183.                                            //:               ://
  7184.             glo_eve.c_x =( 0 ); //:CLK:X_X //:               ://
  7185.             glo_eve.c_y =( 0 ); //:CLK:Y_Y //:               ://
  7186.                                            //:               ://
  7187.             glo_eve.u_x =( 0 ); //:UPP:X_X //:               ://
  7188.             glo_eve.u_y =( 0 ); //:UPP:Y_Y //:               ://
  7189.                                            //:               ://
  7190.             glo_eve.d_x =( 0 ); //:DOW:X_X //:               ://
  7191.             glo_eve.d_y =( 0 ); //:DOW:Y_Y //:               ://
  7192.                                            //:               ://
  7193.             glo_eve.m_d =( 0 ); //:MOU:DOW //:               ://
  7194.             glo_eve.m_u =( 0 ); //:MOU:UPP //:               ://
  7195.             //:EWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEW://
  7196.  
  7197.         };;//:///////////////////////////////////////////////://
  7198.  
  7199.         function _InvokeHotKey( glo_eve /** glo_eve.key **/ ){
  7200.  
  7201.             console.log( "[_InvokeHotKey]" );
  7202.    
  7203.             var key =( glo_eve.key );
  7204.             var key_num=( AA2_glo_eve_KeyNum( glo_eve ) );
  7205.  
  7206.             //:EM:edi_mod:ChangeTheEditorInChange:-----------://
  7207.             //:EMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEM://
  7208.  
  7209.                 if( key_num >= 0 /** NON_NEG **/ ){
  7210.                     GLO_CLA.ada_var.Put_EdiMod( key_num );
  7211.                 };;
  7212.  
  7213.             //:EMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEM://
  7214.             //:EM:edi_mod:ChangeTheEditorInChange:-----------://
  7215.      
  7216.             if("_"==key || "-"==key ){
  7217.                 //:ZERO( 0 ) makes it so the renderer
  7218.                 //:shows raw data on "mam_mem" texture.
  7219.                 //:REGARDLESS of whate editor mode
  7220.                 //:is active.
  7221.                 GLO_CLA.ada_var.Put_RenMod( 0 );
  7222.             }else
  7223.             if("+"==key || "="==key ){
  7224.                 //:ONE( 1 ) delegates the rendering
  7225.                 //:technique to the current editor
  7226.                 //:in charge ( edi_mod ).
  7227.                 //:By design rendering and user input are
  7228.                 //:tightly coupled together by making the
  7229.                 //:active editor dictate how to render
  7230.                 //:and how to inferr user input.
  7231.                 //:
  7232.                 //:CUSTOM_DESIGN_PATTERN:
  7233.                 //:     GAAM+EV:    
  7234.                 //:         GraphicsAdapter_And_Model
  7235.                 //:         + EditorView
  7236.                 //:
  7237.                 GLO_CLA.ada_var.Put_RenMod( 1 );
  7238.             };;
  7239.         };;//:[_InvokeHotKey]:////://////////////////////////://
  7240.     };;
  7241.     //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
  7242.  
  7243.     //:EB:Editor_Base:
  7244.     //:EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB://
  7245.     //:WE_WILL_NOT_BE_USING_INHERITANCE_IN_JAVASCRIPT.
  7246.     //:1: Prototypical inheritance === no private data.
  7247.     //:2: Functions as classes === no inherited private data.
  7248.     //:3: Below is for conceptual reference only.
  7249.     //:EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB://
  7250.     function NEW_edi_bas( /** void **/ ){
  7251.         var          edi_bas =( new AA2_EditorBaseClass() );
  7252.         Object.seal( edi_bas );
  7253.         return(      edi_bas );
  7254.     };;
  7255.     function AA2_EditorBaseClass( ){
  7256.  
  7257.         this.ReadEvent_Tagged = ReadEvent_Tagged;
  7258.  
  7259.         var _ = {};
  7260.             _.VAR_BAS = "edi_bas"; //:BaseClass
  7261.             _.VAR_TYP = "edi_###"; //:Example: "edi_001"
  7262.         Object.seal( _ );
  7263.  
  7264.         //: The idea here is to not have to re-do the
  7265.         //: complex logic for determining what type of
  7266.         //: event the event is by supplying an
  7267.         //: [ event_tag / tag_eve ]. These tags will be
  7268.         //: SHORT values. Try to stick with short values
  7269.         //: that can be represented as two letters.
  7270.         function ReadEvent_Tagged( glo_eve , tag_eve ){
  7271.  
  7272.             //:  "K_" : Key   WHATEVER event.
  7273.             //:  "M_" : Mouse WHATEVER event.
  7274.             //:         WHATEVER: Figure it out yourself.
  7275.  
  7276.             //: 'K' ===  "KU"|"KD"|"K_"
  7277.             if( 'K' === tag_eve[0] ){
  7278.                 _HanEve_KeyKey( glo_eve );
  7279.             };;
  7280.             //: 'M' === "MM"|"MC"|"MD"|"MU"|"M_"
  7281.             if( 'M' === tag_eve[0] ){
  7282.                 _HanEve_MouMou( glo_eve );
  7283.             };;
  7284.    
  7285.             //:Alternatively:
  7286.             //: "K_" is "Key Whatever".
  7287.             if( "KU" == tag_eve ){ _HanEve_KeyUpp(glo_eve);};
  7288.             if( "KD" == tag_eve ){ _HanEve_KeyDow(glo_eve);};
  7289.             if( "K_" == tag_eve ){ _HanEve_KeyKey(glo_eve);};
  7290.         };;
  7291.  
  7292.         //:WHATEVER handlers:
  7293.         //://////////////////////////////////////////////////://
  7294.         //:AKA[  _HanEve_Key | _HandleEvent_Key ]
  7295.         function _HanEve_KeyKey( glo_eve ){
  7296.             //:Handle a key event of any kind.
  7297.         };;
  7298.         //:AKA[  _HanEve_Mou | _HandleEvent_Mou ]
  7299.         function _HanEve_MouMou( glo_eve ){
  7300.             //:Handle a mouse event of any kind.
  7301.         };;
  7302.         //://////////////////////////////////////////////////://
  7303.  
  7304.         //:TI: Typical Implementation:
  7305.         //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
  7306.         //:    Just handle "KD" (KeyDown) and "MC" (MouseClick)
  7307.         //:    to keep things simple.
  7308.         //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
  7309.         ;;function ReadEvent_Tagged( glo_eve , tag_eve ){
  7310.             if( "KD" === tag_eve ){ _HanEve_KeyDow(glo_eve);};
  7311.             if( "MC" === tag_eve ){ _HanEve_MouClk(glo_eve);};
  7312.         };;function _HanEve_KeyDow( glo_eve ){
  7313.  
  7314.             console.log("from:"+_.VAR_TYP+":[_HanEve_KeyDow]");
  7315.  
  7316.         };;function _HanEve_MouClk( glo_eve ){
  7317.  
  7318.             console.log("from:"+_.VAR_TYP+":[_HanEve_MouClk]");
  7319.  
  7320.         };;
  7321.         //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
  7322.  
  7323.     };;
  7324.     //:EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB://
  7325.     //:E:Editors:
  7326.     //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
  7327.     //:                                                      ://
  7328.     //:  Decided that I do not want to have to think about   ://
  7329.     //:  the names for each editor. So I will assign them    ://
  7330.     //:  serial numbers starting at "001" and the master     ://
  7331.     //:  editor (edi_all) can map to editors 1-9 by using    ://
  7332.     //:  the number keys 1-9.                                ://
  7333.     //:                                                      ://
  7334.     //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
  7335.  
  7336.     function NEW_edi_001( /** void **/ ){
  7337.         var          edi_001 =( new AA2_Editor_001() );
  7338.         Object.seal( edi_001 );
  7339.         return(      edi_001 );
  7340.     };;function AA2_Editor_001( ){
  7341.  
  7342.         this.ReadEvent_Tagged = ReadEvent_Tagged;
  7343.  
  7344.         var _ = {};
  7345.             _.VAR_BAS = "edi_bas"; //:BaseClass
  7346.             _.VAR_TYP = "edi_001"; //:DerivedClass.
  7347.             _.PIXEFOG_rec_vp2 = NEW_rec_inc(); //:vp2==Zoomer
  7348.         Object.seal( _ );
  7349.  
  7350.         //:TI: Typical Implementation:
  7351.         //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
  7352.         //:    Just handle "KD" (KeyDown) and "MC" (MouseClick)
  7353.         //:    to keep things simple.
  7354.         //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
  7355.         ;;function ReadEvent_Tagged( glo_eve , tag_eve ){
  7356.             if( "KD" === tag_eve ){ _HanEve_KeyDow(glo_eve);};
  7357.             if( "MC" === tag_eve ){ _HanEve_MouClk(glo_eve);};
  7358.         };;function _HanEve_KeyDow( glo_eve ){
  7359.  
  7360.         //:console.log("from:"+_.VAR_TYP+":[_HanEve_KeyDow]");
  7361.  
  7362.             //:If key can resolve to number, set the
  7363.             //:experimental shader index. ( DexSha )
  7364.             var key_num =( AA2_glo_eve_KeyNum( glo_eve ) );
  7365.             if( key_num >= 0 && key_num <= 9 ){
  7366.                 GLO_CLA.ada_var.Put_EDIT001_dex_sha( key_num );
  7367.             };;
  7368.  
  7369.             //:GET:rec_vp1:
  7370.             //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7371.             GLO_CLA.ada_var.Get_GLOBVAR_rec_vp2(
  7372.                               _.PIXEFOG_rec_vp2
  7373.             );;
  7374.             //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7375.  
  7376.                 //:R:Reset:rec_vp1 (source rectangle)
  7377.                 //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
  7378.                 if( "R" == glo_eve.key ){
  7379.                     console.log("RESET");
  7380.                 };;
  7381.                 //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
  7382.                 //:P:PAN:
  7383.                 //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
  7384.                 if( "ARR_LEF" == glo_eve.key ){
  7385.                     console.log("<--");
  7386.                     AA2_rec_inc_MoveLef(
  7387.                         _.PIXEFOG_rec_vp2
  7388.                     ,   1
  7389.                     );;
  7390.                 };;
  7391.                 if( "ARR_RIG" == glo_eve.key ){
  7392.                     console.log("-->");
  7393.                     AA2_rec_inc_MoveRig(
  7394.                         _.PIXEFOG_rec_vp2
  7395.                     ,   1
  7396.                     );;
  7397.                 };;
  7398.                 if( "ARR_UPP" == glo_eve.key ){
  7399.                     console.log("UPP");
  7400.                     AA2_rec_inc_MoveUpp(
  7401.                         _.PIXEFOG_rec_vp2
  7402.                     ,   1
  7403.                     );;
  7404.                 };;
  7405.                 if( "ARR_DOW" == glo_eve.key ){
  7406.                     console.log("DOW");
  7407.                     AA2_rec_inc_MoveDow(
  7408.                         _.PIXEFOG_rec_vp2
  7409.                     ,   1
  7410.                     );;
  7411.                 };;
  7412.                 //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
  7413.                 //:Z:ZOOM:
  7414.                 //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
  7415.                 if( "+" == glo_eve.key || "=" == glo_eve.key ){
  7416.                
  7417.                     console.log("+");
  7418.                     AA2_rec_inc_ZoomInn(
  7419.                         _.PIXEFOG_rec_vp2
  7420.                     ,   1
  7421.                     );;
  7422.                
  7423.                 };;
  7424.                 if( "-" == glo_eve.key || "_" == glo_eve.key ){
  7425.                
  7426.                     console.log("-");
  7427.                     AA2_rec_inc_ZoomOut(
  7428.                         _.PIXEFOG_rec_vp2
  7429.                     ,   1
  7430.                     );;
  7431.                
  7432.                 };;
  7433.                 //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
  7434.                 //:M:Manipulate_Side_Walls_By_Pulling_Them_In
  7435.                 //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
  7436.                 if( "A" == glo_eve.key ){ //:LEF:PULL_IN
  7437.                     console.log("A");
  7438.                     AA2_rec_inc_PullLef(
  7439.                         _.PIXEFOG_rec_vp2
  7440.                     ,   1
  7441.                     );;
  7442.                 };;
  7443.                 if( "D" == glo_eve.key ){ //:RIG:PULL_IN
  7444.                     console.log("D");
  7445.                     AA2_rec_inc_PullRig(
  7446.                         _.PIXEFOG_rec_vp2
  7447.                     ,   1
  7448.                     );;
  7449.                 };;
  7450.                 if( "W" == glo_eve.key ){ //:TOP:PULL_IN
  7451.                     console.log("W");
  7452.                     AA2_rec_inc_PullTop(
  7453.                         _.PIXEFOG_rec_vp2
  7454.                     ,   1
  7455.                     );;
  7456.                 };;
  7457.                 if( "S" == glo_eve.key ){ //:BOT:PULL_IN
  7458.                     console.log("S");
  7459.                     AA2_rec_inc_PullBot(
  7460.                         _.PIXEFOG_rec_vp2
  7461.                     ,   1
  7462.                     );;
  7463.                 };;
  7464.                 //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
  7465.  
  7466.                 if( "J" == glo_eve.key ){ //:LEF:PUSH_OUT:
  7467.                     console.log("J");
  7468.                     AA2_rec_inc_PushLef(
  7469.                         _.PIXEFOG_rec_vp2
  7470.                     ,   1
  7471.                     );;
  7472.                 };;
  7473.                 if( "L" == glo_eve.key ){ //:RIG:PUSH_OUT:
  7474.                     console.log("L");
  7475.                     AA2_rec_inc_PushRig(
  7476.                         _.PIXEFOG_rec_vp2
  7477.                     ,   1
  7478.                     );;
  7479.                 };;
  7480.                 if( "I" == glo_eve.key ){ //:TOP:PUSH_OUT:
  7481.                     console.log("I");
  7482.                     AA2_rec_inc_PushTop(
  7483.                         _.PIXEFOG_rec_vp2
  7484.                     ,   1
  7485.                     );;
  7486.                 };;
  7487.                 if( "K" == glo_eve.key ){ //:BOT:PUSH_OUT:
  7488.                     console.log("K");
  7489.                     AA2_rec_inc_PushBot(
  7490.                         _.PIXEFOG_rec_vp2
  7491.                     ,   1
  7492.                     );;
  7493.                 };;
  7494.  
  7495.  
  7496.             //:PUT:rec_vp1:
  7497.             //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7498.             GLO_CLA.ada_var.Put_GLOBVAR_rec_vp2(
  7499.                               _.PIXEFOG_rec_vp2
  7500.             );;
  7501.             //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7502.  
  7503.         };;function _HanEve_MouClk( glo_eve ){
  7504.  
  7505.             console.log("from:"+_.VAR_TYP+":[_HanEve_MouClk]");
  7506.  
  7507.         };;
  7508.         //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
  7509.     };;//:[AA2_Editor_001]:////://///////////////////////////://
  7510.  
  7511.  
  7512.     //:E2:edi_002:(BELOW):-----------------------------------://
  7513.     //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
  7514.     //:                                                      ://
  7515.     //:  Editor #02 is very likely our "vp1_sna" (VP1Snapper)://
  7516.     //:                                                      ://
  7517.     //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
  7518.  
  7519.  
  7520.     var AA2_edi_002={ //:///////////////////////////////////://
  7521.         //:VALUE_MEMBER:NOT_A_POINTER!  //:////://///////////://
  7522.         var_tag : null //:AA2_var_tag:  //:////://///////////://
  7523.         //:MUST_BE_FIRST_MEMBER!        //:////://///////////://
  7524.  
  7525.         //:VF:Visible(Public)Functions:(BELOW):--------------://
  7526.         //:VFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVF://
  7527.         /**-************************************************-:[]
  7528.  
  7529.             edi_002.ReadEvent_Tagged ::::::::
  7530.                 AA2_edi_002_ReadEvent_Tagged
  7531.        
  7532.         []:-************************************************-**/
  7533.         //:VFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVF://
  7534.  
  7535.         //:VALUE_MEMBER:NOT_A_POINTER!
  7536.         ,   rec_bou : null //:BOUNDS_OF_DATA_BEING_MANIPULATED
  7537.  
  7538.     };; //://////////////////////////////////////////////////://
  7539.     Object.seal( AA2_edi_002 );
  7540.  
  7541.     function NEW_edi_002(){
  7542.     "use strict"
  7543.         var edi_002 = null;
  7544.        
  7545.         //: C11[  struct AA2_edi_002 edi_002 = { 0 };  ]
  7546.         edi_002         = AA2_ZeroIni( AA2_edi_002 );
  7547.         edi_002.var_tag = AA2_ValuMem(  AA2_var_tag );
  7548.         edi_002.rec_bou = NEW_rec_inc();
  7549.  
  7550.         edi_002.var_tag.VAR_TYP=( AA2_VAR_TYP_edi_002 );
  7551.         edi_002.var_tag.VAR_HIN=("edi_002");//:7_Letters_Exact
  7552.  
  7553.         Object.seal( edi_002 );
  7554.         return(      edi_002 );
  7555.     };;
  7556.  
  7557.     //:H:[Hidden /private]functions:(BELOW):-----------------://
  7558.     //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
  7559.  
  7560.         //:MH:MoveHot_swap_rectangle_memory_in_focus:(BELOW):://
  7561.         //:MHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMH://
  7562.             //://////////////////////////////////////////////://
  7563.             function aa2_edi_002_Mov_Any_dex_hot(
  7564.                          edi_002,xos,yos
  7565.             ){
  7566.                 var A_V =( GLO_CLA.ada_var );
  7567.                 var G_F =( GLO_CFG         );
  7568.  
  7569.                 var dex_hot; //:<--value_being_edited
  7570.  
  7571.                 //:GP:[ (GET/PUT)/(LOAD/SAVE)/(QUERY/PERSIST)://
  7572.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7573.                     dex_hot = A_V.Get_EDIT002_dex_hot(   );
  7574.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7575.    
  7576.                 if( dex_hot < GLO_CFG.DEX_HOT_MIN //:[ 1 ]
  7577.                 ||  dex_hot > GLO_CFG.DEX_HOT_MAX //:[16 ]
  7578.                 ){
  7579.                     //:You probably forgot to init the
  7580.                     //:value to a sensible default on
  7581.                     //:startup.
  7582.                     var err_msg=("[[DEX_HOT:OOB]]");
  7583.                     console.log(err_msg);  
  7584.                     throw(      err_msg);
  7585.                 };;
  7586.  
  7587.                 var san_hot_001=( Math.sqrt(GLO_CFG.NUM_HOT) );
  7588.                 var san_hot_002=( GLO_CFG.SAN_MAM
  7589.                                  /GLO_CFG.SAN_ISO );;
  7590.                 if( san_hot_001 != san_hot_002 ){
  7591.                     throw("[MATH_OFF:2020_05_31:10_11AM]");
  7592.                 };;
  7593.                 var san_hot=((san_hot_001+san_hot_002)/2);
  7594.                 var max_xoy=( san_hot - 1 );
  7595.                 var min_xoy=(           0 );
  7596.  
  7597.                 //://////////////////////////////////////////://
  7598.                 //: dex_hot (verb-ish) ~=~ dex_mec (noun-ish):
  7599.                 //:
  7600.                 //: dex_hot: 1-indexed  (HOT:HOTswapper)
  7601.                 //: dex_mec: 0-indexed  (MEC:MEmoryCell)
  7602.                 //://////////////////////////////////////////://
  7603.                 var     dex_mec=( dex_hot - 1 );
  7604.                 var     wid =( G_F.SAN_MAM / G_F.SAN_ISO );
  7605.                 var     t_x =  dex_mec      % wid   ;;;;;;;
  7606.                 var     t_y = (dex_mec-t_x )/ wid   ;;;;;;;
  7607.  
  7608.                 //:Tile:XY:Coordinate on [ mam_mem ]
  7609.                 //:     [ memory_cell/hot_swapping ]
  7610.                 //:     sub-sectors.
  7611.                 t_x +=( xos ); //:ApplyOffset:x
  7612.                 t_y +=( yos ); //:ApplyOffset:y
  7613.  
  7614.                 //:CAP_INTO_VALID_RANGE:
  7615.                 if( t_x > max_xoy ){ t_x = max_xoy; };
  7616.                 if( t_y > max_xoy ){ t_y = max_xoy; };
  7617.                 if( t_x < min_xoy ){ t_x = min_xoy; };
  7618.                 if( t_y < min_xoy ){ t_y = min_xoy; };
  7619.  
  7620.                 var new_dex_mec = t_x + ( wid * t_y );
  7621.                 var new_dex_hot = ( new_dex_mec + 1 );
  7622.                 //://////////////////////////////////////////://
  7623.  
  7624.                 //:Error_Check:
  7625.                 if( new_dex_hot < GLO_CFG.DEX_HOT_MIN //:[ 1 ]
  7626.                 ||  new_dex_hot > GLO_CFG.DEX_HOT_MAX //:[16 ]
  7627.                 ){
  7628.                     var err_msg=("[BAD_MAT:new_dex_hot]");
  7629.                     console.log( err_msg );
  7630.                     throw(       err_msg );
  7631.                 };;
  7632.  
  7633.                 //:GP:[ (GET/PUT)/(LOAD/SAVE)/(QUERY/PERSIST)://
  7634.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7635.                 A_V.Put_EDIT002_dex_hot( new_dex_hot );
  7636.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7637.  
  7638.             };;function aa2_edi_002_Mov_Lef_dex_hot( edi_002 ){
  7639.             //:edi_002.Mov_Lef.dex_hot( vod )
  7640.                
  7641.                 aa2_edi_002_Mov_Any_dex_hot(
  7642.                     edi_002, 0 - 1, 0 * 0
  7643.                 );;
  7644.  
  7645.             };;function aa2_edi_002_Mov_Rig_dex_hot( edi_002 ){
  7646.             //:edi_002.Mov_Rig.dex_hot( vod )
  7647.                 var A_V =( GLO_CLA.ada_var );
  7648.  
  7649.                 aa2_edi_002_Mov_Any_dex_hot(
  7650.                     edi_002, 0 + 1, 0 * 0
  7651.                 );;
  7652.  
  7653.             };;function aa2_edi_002_Mov_Upp_dex_hot( edi_002 ){
  7654.             //:edi_002.Mov_Upp.dex_hot( vod )
  7655.                 var A_V =( GLO_CLA.ada_var );
  7656.  
  7657.                 aa2_edi_002_Mov_Any_dex_hot(
  7658.                     edi_002, 0 * 0, 0 - 1 //:INVERSE_Y
  7659.                 );;
  7660.  
  7661.             };;function aa2_edi_002_Mov_Dow_dex_hot( edi_002 ){
  7662.             //:edi_002.Mov_Dow.dex_hot( vod )
  7663.                 var A_V =( GLO_CLA.ada_var );
  7664.  
  7665.                 aa2_edi_002_Mov_Any_dex_hot(
  7666.                     edi_002, 0 * 0, 0 + 1 //:INVERSE_Y
  7667.                 );;
  7668.  
  7669.             };;//:///////////////////////////////////////////://
  7670.         //:MHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMH://
  7671.         //:MH:MoveHot_swap_rectangle_memory_in_focus:(ABOVE):://
  7672.  
  7673.             function //:edi_002.KeepCameraInBounds(...)
  7674.             aa2_edi_002_KeepCameraInBounds( edi_002 ){
  7675.  
  7676.                 aa2_edi_002_Cal_rec_bou( edi_002 );
  7677.  
  7678.                 var A_V =( GLO_CLA.ada_var );
  7679.    
  7680.                 //:GP:[Get/Put]::::::::::::::::::::::::::::::://
  7681.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7682.                 var cam_t_x = A_V.Get_EDIT002_cam_t_x( );
  7683.                 var cam_t_y = A_V.Get_EDIT002_cam_t_y( );
  7684.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7685.  
  7686.                 //:CLAMP:LOWER:
  7687.                 if( cam_t_x < edi_002.rec_bou.x_0 ){
  7688.                     cam_t_x = edi_002.rec_bou.x_0;
  7689.                 };;
  7690.                 if( cam_t_y < edi_002.rec_bou.y_0 ){
  7691.                     cam_t_y = edi_002.rec_bou.y_0;
  7692.                 };;
  7693.  
  7694.                 //:CLAMP:UPPER:
  7695.                 if( cam_t_x > edi_002.rec_bou.x_1 ){
  7696.                     cam_t_x = edi_002.rec_bou.x_1;
  7697.                 };;
  7698.                 if( cam_t_y > edi_002.rec_bou.y_1 ){
  7699.                     cam_t_y = edi_002.rec_bou.y_1;
  7700.                 };;
  7701.  
  7702.                 //:GP:[Get/Put]::::::::::::::::::::::::::::::://
  7703.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7704.                 A_V.Put_EDIT002_cam_t_x( cam_t_x );
  7705.                 A_V.Put_EDIT002_cam_t_y( cam_t_y );
  7706.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7707.  
  7708.             };;
  7709.  
  7710.         //:TE:Tile_Exponent:---------------------------------://
  7711.         //:TETETETETETETETETETETETETETETETETETETETETETETETETE://
  7712.             function
  7713.             aa2_STATIC_HACK_EDIT002_Put_til_exp_AND_til_san(
  7714.                                         til_exp
  7715.             ){
  7716.                 //:Store the resolved version of til_exp
  7717.                 //:so we do not have to call pow(...)
  7718.                 //:function in shader code.
  7719.                 var til_san = Math.pow( 2 , til_exp );
  7720.  
  7721.                 GLO_CLA.ada_var.Put_EDIT002_til_exp( til_exp );
  7722.                 GLO_CLA.ada_var.Put_EDIT002_til_san( til_san );
  7723.             };;
  7724.  
  7725.             //:edi_002.Put_til_exp_AND_til_san(...)
  7726.             function aa2_edi_002_Put_til_exp_AND_til_san(
  7727.                          edi_002  ,  til_exp
  7728.             ){
  7729.                 aa2_STATIC_HACK_EDIT002_Put_til_exp_AND_til_san(
  7730.                     til_exp
  7731.                 );;
  7732.             };;
  7733.  
  7734.             //:edi_002.Nex_til_exp:
  7735.             function aa2_edi_002_Nex_til_exp(
  7736.                          edi_002
  7737.             ){
  7738.                 //:GET:(Query):
  7739.                 var A_V =( GLO_CLA.ada_var );
  7740.                 var til_exp = A_V.Get_EDIT002_til_exp();
  7741.  
  7742.                     //:DEL_DIF[aa2_edi_002_Pre_til_exp]
  7743.                     til_exp++;
  7744.  
  7745.                 if( til_exp >= 8 /** TSE_SUN **/ ){
  7746.                     til_exp  =(8);
  7747.                 };;
  7748.                 if( til_exp <= 0 ){
  7749.                     til_exp  =(0 );
  7750.                 };;
  7751.  
  7752.                 //:PUT:(Persist):
  7753.                 aa2_edi_002_Put_til_exp_AND_til_san(
  7754.                     edi_002,    til_exp
  7755.                 );;
  7756.                 //:Corrections:
  7757.                 aa2_edi_002_KeepCameraInBounds( edi_002 );
  7758.             };;
  7759.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  7760.             //:edi_002.Pre_til_exp:
  7761.             function aa2_edi_002_Pre_til_exp(
  7762.                          edi_002
  7763.             ){
  7764.                 //:GET:(Query):
  7765.                 var A_V =( GLO_CLA.ada_var );
  7766.                 var til_exp = A_V.Get_EDIT002_til_exp();
  7767.  
  7768.                     //:DEL_DIF[aa2_edi_002_Nex_til_exp]
  7769.                     til_exp--;
  7770.  
  7771.                 if( til_exp >= 8 /** TSE_SUN **/ ){
  7772.                     til_exp  =(8);
  7773.                 };;
  7774.                 if( til_exp <= 0 ){
  7775.                     til_exp  =(0 );
  7776.                 };;
  7777.  
  7778.                 //:PUT:(Persist):
  7779.                 aa2_edi_002_Put_til_exp_AND_til_san(
  7780.                     edi_002,    til_exp
  7781.                 );;
  7782.  
  7783.                 aa2_edi_002_KeepCameraInBounds( edi_002 );
  7784.             };;
  7785.         //:TETETETETETETETETETETETETETETETETETETETETETETETETE://
  7786.  
  7787.         //:CB:CalcBounds:edi_002.CalculateRectBounds()(BELOW)://
  7788.         //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
  7789.         //:                                                  ://
  7790.         //: The current tile exponent (til_exp) will         ://
  7791.         //: determine the bounds of the camera.              ://
  7792.         //: Measured in numbers of cameras.                  ://
  7793.         //: The camera is a certain number of                ://
  7794.         //: [ pebbles / pixels / tiles ] wide and tall.      ://
  7795.         //: And we measure the bounds IN cameras.            ://
  7796.         //:                                                  ://
  7797.         //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
  7798.         function aa2_edi_002_Cal_rec_bou( edi_002 ){
  7799.             var     A_V=( GLO_CLA.ada_var );
  7800.             var     til_exp=( A_V.Get_EDIT002_til_exp() );
  7801.        
  7802.             if( til_exp < 0 || til_exp > 8 ){
  7803.                 //:DontForgetToInitToSensibleDefaults:
  7804.                 throw("[TILE_EXPONENT_OUT_OF_BOUNDS]");
  7805.             };;
  7806.  
  7807.             //:Size of CAMERA in [ pebbles / pixels ]
  7808.             var til_wto_pix = Math.pow( 2, til_exp );
  7809.             var til_hto_pix = Math.pow( 2, til_exp );
  7810.  
  7811.             //:size_of_tilemap:RAW_PIXEL_DATA
  7812.             //:No [HYPERMAP/QUARKMAP/MIPMAP] distortions.
  7813.             var map_wto_pix = GLO_CFG.SAN_ISO;
  7814.             var map_hto_pix = GLO_CFG.SAN_ISO;
  7815.  
  7816.             //:size_of_tilemap:AFTER[ use_hyp ]APPLIED:
  7817.             var map_wto_peb; //:Map_WID_Measured_In:PEBBLES
  7818.             var map_hto_peb; //:Map_HIG_Measured_In:PEBBLES
  7819.  
  7820.             var use_hyp; //:Conceptually[ edi_002.use_hyp ]
  7821.             use_hyp = A_V.Get_EDIT002_use_hyp( );
  7822.  
  7823.             //:total_area_that_can_be_traversed:
  7824.             ;;;;;;if( 0 === use_hyp ){ /** edi_002.use_hyp **/
  7825.  
  7826.                 //:DATA_VIEW:FLAT_2D
  7827.                 //:EITHER_CASE[ PEBBLE_SIZE === PIXEL_SIZE ]
  7828.                 map_wto_peb = ( map_wto_pix * 1 );
  7829.                 map_hto_peb = ( map_hto_pix * 1 );
  7830.  
  7831.             }else if( 1 === use_hyp ){ /** edi_002.use_hyp **/
  7832.            
  7833.                 //:DATA_VIEW:HYPER_MAP
  7834.                 //:EITHER_CASE[ PEBBLE_SIZE === PIXEL_SIZE ]
  7835.                 map_wto_peb = ( map_wto_pix / 2 );
  7836.                 map_hto_peb = ( map_hto_pix / 2 );
  7837.  
  7838.             }else{
  7839.                 var          err_msg =( "[BAD:use_hyp]" );
  7840.                 console.log( err_msg );
  7841.                 throw(       err_msg );
  7842.             };;
  7843.  
  7844.             //:EC:ErrorCheck:
  7845.             //:ECECECECECECECECECECECECECECECECECECECECECECEC://
  7846.  
  7847.             //: Camera is not allowed to be bigger than
  7848.             //: the tilemap. But it can be the exact same
  7849.             //: size as the tilemap.
  7850.                
  7851.             //:ECECECECECECECECECECECECECECECECECECECECECECEC://
  7852.  
  7853.                 if( til_wto_pix > map_wto_peb
  7854.                 ||  til_hto_pix > map_hto_peb
  7855.                 ){
  7856.                     throw("[CAMERA_IS_TOO_BIG]");
  7857.                 };;
  7858.                 if( til_wto_pix < 0
  7859.                 ||  til_hto_pix < 0
  7860.                 ){
  7861.                     throw("[CAMERA_SOMEHOW_NEGATIVE_SIZE]");
  7862.                 };;
  7863.  
  7864.             //:ECECECECECECECECECECECECECECECECECECECECECECEC://
  7865.  
  7866.             //: How wide and tall is our tilemap
  7867.             //: when measure in CAMERAS (cam)?
  7868.             //: numcams_wid =   tilemap_wid / tilecam_wid
  7869.             //: numcams_hig =   tilemap_hig / tilecam_hig
  7870.             var map_wto_cam = ( map_wto_peb / til_wto_pix );
  7871.             var map_hto_cam = ( map_hto_peb / til_hto_pix );
  7872.  
  7873.             //:L:load_calculated_bounds:_____________________://
  7874.             //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
  7875.             edi_002.rec_bou.x_0 =(  0 /** ALWAYS_ZERO **/);
  7876.             edi_002.rec_bou.y_0 =(  0 /** ALWAYS_ZERO **/);
  7877.             edi_002.rec_bou.x_1 =(  0 + map_wto_cam - 1  );  
  7878.             edi_002.rec_bou.y_1 =(  0 + map_hto_cam - 1  );  
  7879.             //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
  7880.         };;
  7881.         //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
  7882.         //:CB:CalcBounds:edi_002.CalculateRectBounds()(ABOVE)://
  7883.  
  7884.     //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
  7885.     //:H:[Hidden /private]functions:(ABOVE):-----------------://
  7886.  
  7887.     //[**C11_dictates_PRIVATE_HIDDEN_before_PUBLIC_VISIBLE:**]//
  7888.  
  7889.     //:V:[Visible/public ]functions:(BELOW):-----------------://
  7890.     //:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV://
  7891.  
  7892.             //:CM:Camera_Movement/Translation:(BELOW):-------://
  7893.             //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
  7894.             ;;;function AA2_edi_002_Mov_Any_cam_txy(
  7895.                             edi_002,o_x,o_y
  7896.             ){  
  7897.                 var     A_V=( GLO_CLA.ada_var );
  7898.  
  7899.                 var cam_t_x; //:Camera_Tilepos:X
  7900.                 var cam_t_y; //:Camera_Tilepos:Y
  7901.  
  7902.                 //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(BELOW):===://
  7903.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7904.                 cam_t_x=A_V.Get_EDIT002_cam_t_x( );
  7905.                 cam_t_y=A_V.Get_EDIT002_cam_t_y( );
  7906.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7907.                 //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(ABOVE):===://
  7908.  
  7909.                 //:CB:CalculateBounds:(BELOW):---------------://
  7910.                 //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
  7911.                 //:                                          ://
  7912.                 //:    It is erroneous to enter              ://
  7913.                 //:    this function [ Mov_Any_cam_txy ]     ://
  7914.                 //:    with the camera out of bounds.        ://
  7915.                 //:                                          ://
  7916.                 //:    Tile exponent determines              ://
  7917.                 //:    bounds if we are using                ://
  7918.                 //:    the hyper rectangle view:             ://
  7919.                 //:                                          ://
  7920.                 //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
  7921.                 //: edi_002.CalculateRectangleBounds();
  7922.                 aa2_edi_002_Cal_rec_bou( edi_002 );
  7923.                 if( cam_t_x < edi_002.rec_bou.x_0
  7924.                 ||  cam_t_x > edi_002.rec_bou.x_1
  7925.                 ||  cam_t_y < edi_002.rec_bou.y_0
  7926.                 ||  cam_t_y > edi_002.rec_bou.y_1
  7927.                 ){
  7928.                     //:Probable_Cause_Of_Error:
  7929.                     //:Make sure when changing til_exp
  7930.                     //:that you re-clamp [cam_t_x]&[cam_t_y]
  7931.                     throw("[StartedOutOfBounds]");
  7932.                 };;
  7933.                 //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
  7934.  
  7935.                 //:Convert_input_to_unsigned_values:
  7936.                 var u32_o_x=Math.abs(  o_x  );
  7937.                 var u32_o_y=Math.abs(  o_y  );
  7938.  
  7939.                 //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
  7940.                     if( o_x >= 0 ){
  7941.                         cam_t_x = AA2_U32_ADD_BOU(
  7942.                         /**/      cam_t_x      //: u32_var ::://
  7943.                         ,         u32_o_x      //: u32_add ::://
  7944.                         , edi_002.rec_bou.x_0  //: u32_min ::://
  7945.                         , edi_002.rec_bou.x_1  //: u32_max ::://
  7946.                         );;
  7947.                     }else
  7948.                     if( o_x < 0 ){
  7949.                         cam_t_x = AA2_U32_SUB_BOU(
  7950.                         /**/      cam_t_x      //: u32_var ::://
  7951.                         ,         u32_o_x      //: u32_sub ::://
  7952.                         , edi_002.rec_bou.x_0  //: u32_min ::://
  7953.                         , edi_002.rec_bou.x_1  //: u32_max ::://
  7954.                         );;
  7955.                     }else{
  7956.                         throw("[WTF_X:2020_05_31]");
  7957.                     };;
  7958.                 //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
  7959.                 //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
  7960.                     if( o_y >= 0 ){
  7961.                         cam_t_y = AA2_U32_ADD_BOU(
  7962.                         /**/      cam_t_y      //: u32_var ::://
  7963.                         ,         u32_o_y      //: u32_add ::://
  7964.                         , edi_002.rec_bou.y_0  //: u32_min ::://
  7965.                         , edi_002.rec_bou.y_1  //: u32_max ::://
  7966.                         );;
  7967.                     }else
  7968.                     if( o_y < 0 ){
  7969.                         cam_t_y = AA2_U32_SUB_BOU(
  7970.                         /**/      cam_t_y      //: u32_var ::://
  7971.                         ,         u32_o_y      //: u32_sub ::://
  7972.                         , edi_002.rec_bou.y_0  //: u32_min ::://
  7973.                         , edi_002.rec_bou.y_1  //: u32_max ::://
  7974.                         );;
  7975.                     }else{
  7976.                         throw("[WTF_Y:2020_05_31]");
  7977.                     };;
  7978.                 //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
  7979.  
  7980.                 //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(BELOW):===://
  7981.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7982.                 A_V.Put_EDIT002_cam_t_x( cam_t_x );
  7983.                 A_V.Put_EDIT002_cam_t_y( cam_t_y );
  7984.                 //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
  7985.                 //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(ABOVE):===://
  7986.             };;
  7987.             ;;;function AA2_edi_002_Mov_Lef_cam_t_x( edi_002 ){
  7988.             //:edi_002.Mov_Lef.cam_t_x( vod )
  7989.                
  7990.                 AA2_edi_002_Mov_Any_cam_txy(
  7991.                     edi_002, 0 - 1, 0 * 0
  7992.                 );;
  7993.  
  7994.             };;function AA2_edi_002_Mov_Rig_cam_t_x( edi_002 ){
  7995.             //:edi_002.Mov_Rig.cam_t_x( vod )
  7996.  
  7997.                 AA2_edi_002_Mov_Any_cam_txy(
  7998.                     edi_002, 0 + 1, 0 * 0
  7999.                 );;
  8000.  
  8001.             };;function AA2_edi_002_Mov_Upp_cam_t_y( edi_002 ){
  8002.             //:edi_002.Mov_Upp.cam_t_y( vod )
  8003.  
  8004.                 AA2_edi_002_Mov_Any_cam_txy(
  8005.                     edi_002, 0 * 0, 0 - 1 //:INVERSE_Y
  8006.                 );;
  8007.  
  8008.             };;function AA2_edi_002_Mov_Dow_cam_t_y( edi_002 ){
  8009.             //:edi_002.Mov_Dow.cam_t_y( vod )
  8010.  
  8011.                 AA2_edi_002_Mov_Any_cam_txy(
  8012.                     edi_002, 0 * 0, 0 + 1 //:INVERSE_Y
  8013.                 );;
  8014.  
  8015.             };;//:///////////////////////////////////////////://
  8016.             //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
  8017.             //:CM:Camera_Movement/Translation:(ABOVE):-------://
  8018.  
  8019.         //:edi_002.ReadEvent_Tagged(...):
  8020.         //:WRONG[ AA2_CLA_edi_002_ReadEvent_Tagged ]
  8021.         //:We do NOT need to put type CATEGORY (CLA/CLASS) here.
  8022.         //:That is redundant information. Knowing the
  8023.         //:function is meant for [ instance / type ] edi_002
  8024.         //:is plenty of information.
  8025.         function AA2_edi_002_ReadEvent_Tagged(
  8026.              edi_002 , glo_eve , tag_eve
  8027.         ){
  8028.             if(!edi_002){throw("[2020_05_28_1104PM_A]");};
  8029.  
  8030.             if( "KD" === tag_eve ){
  8031.  
  8032.                 //:LowerCaseNamspace==Private
  8033.                 aa2_edi_002_HanEve_KeyDow(
  8034.                      edi_002 , glo_eve
  8035.                 );;
  8036.  
  8037.             };;
  8038.  
  8039.             if( "MC" === tag_eve ){
  8040.  
  8041.                 //:LowerCaseNamspace==Private
  8042.                 aa2_edi_002_HanEve_MouClk(
  8043.                      edi_002
  8044.                 ,    glo_eve
  8045.                 );;
  8046.  
  8047.             };;
  8048.         };;
  8049.         function
  8050.         aa2_edi_002_HanEve_KeyDow(
  8051.              edi_002 , glo_eve
  8052.         ){
  8053.             if(!edi_002){throw("[2020_05_28_1104PM_B]");};
  8054.             if(!glo_eve){throw("[2020_05_28_1104PM_C]");};
  8055.  
  8056.             console.log(""
  8057.                 + "[aa2_edi_002_HanEve_KeyDow]:"
  8058.                 + edi_002.var_tag.VAR_HIN
  8059.             );;
  8060.  
  8061.             var A_V =( GLO_CLA.ada_var );
  8062.             //:var san_act = AA2_InteAss( GLO_CFG.SAN_MAM );;
  8063.            
  8064.             //:edi_002.POI_rec_bou = GLO_DAT.rec_hot[ xxxx ];
  8065.  
  8066.             //:If key can resolve to number, set the
  8067.             //:experimental shader index. ( DexSha )
  8068.             var key_num =( AA2_glo_eve_KeyNum( glo_eve ) );
  8069.             if( key_num >= 0 && key_num <= 8 ){
  8070.        
  8071.                 //:Set tile exponents 0-8:
  8072.                 //:     [ til_exp == 0 ]==>[ 2^0 ==   1 ]
  8073.                 //:     [ til_exp == 1 ]==>[ 2^1 ==   2 ]
  8074.                 //:     [ til_exp == 2 ]==>[ 2^2 ==   4 ]
  8075.                 //:     [ til_exp == 3 ]==>[ 2^3 ==   8 ]
  8076.                 //:     [ til_exp == 4 ]==>[ 2^4 ==  16 ]
  8077.                 //:     [ til_exp == 5 ]==>[ 2^5 ==  32 ]
  8078.                 //:     [ til_exp == 6 ]==>[ 2^6 ==  64 ]
  8079.                 //:     [ til_exp == 7 ]==>[ 2^7 == 128 ]
  8080.                 //:     [ til_exp == 8 ]==>[ 2^8 == 256 ]
  8081.    
  8082.                 //:More than 256 will be too big to navigate
  8083.                 //:your level map data. Because 256 pebble
  8084.                 //:tiles is a single BLUE_SUN tile.
  8085.                 //:     [ til_exp == 9 ]==>[ 2^9 == 512 ]
  8086.                 GLO_CLA.ada_var.Put_EDIT002_til_exp( key_num );
  8087.  
  8088.             }else
  8089.             if( 9 == key_num ){
  8090.                 console.log("[IGNORE:9 is too high]");
  8091.             };;
  8092.  
  8093.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  8094.  
  8095.                 //:R:Reset:rec_vp1 (source rectangle)
  8096.                 //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
  8097.                 if( "R" == glo_eve.key ){
  8098.                     console.log("RESET");
  8099.                 };;
  8100.                 //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
  8101.  
  8102.                 if( 0
  8103.                 ||  "+" == glo_eve.key  //:PLUS_KEY://
  8104.                 ||  "=" == glo_eve.key  //:PLUS_KEY://
  8105.                 ){
  8106.                     //: edi_002.Nex_til_exp(   vod   );
  8107.                     aa2_edi_002_Nex_til_exp( edi_002 );
  8108.                     console.log("[Nex_til_exp]");
  8109.                 };;
  8110.                 if( 0
  8111.                 ||  "-" == glo_eve.key  //:MINUS_KEY://
  8112.                 ||  "_" == glo_eve.key  //:MINUS_KEY://
  8113.                 ){
  8114.                     //: edi_002:Pre_til_exp(   vod   );
  8115.                     aa2_edi_002_Pre_til_exp( edi_002 );
  8116.                     console.log("[Pre_til_exp]");
  8117.                 };;
  8118.  
  8119.                 //:ChangeMemoryRegionBeingReadFrom:----------://
  8120.                 //://////////////////////////////////////////://
  8121.                 ;;;;;;if( "A" == glo_eve.key ){  //:LEF
  8122.  
  8123.                     aa2_edi_002_Mov_Lef_dex_hot( edi_002 );
  8124.  
  8125.                 }else if( "D" == glo_eve.key ){  //:RIG
  8126.  
  8127.                     aa2_edi_002_Mov_Rig_dex_hot( edi_002 );
  8128.  
  8129.                 }else if( "W" == glo_eve.key ){  //:UPP
  8130.  
  8131.                     aa2_edi_002_Mov_Upp_dex_hot( edi_002 );
  8132.  
  8133.                 }else if( "S" == glo_eve.key ){  //:DOW
  8134.  
  8135.                     aa2_edi_002_Mov_Dow_dex_hot( edi_002 );
  8136.  
  8137.                 };;//:///////////////////////////////////////://
  8138.                 //://////////////////////////////////////////://
  8139.                
  8140.                 //:Pan_using_Tile_locations:(BELOW):---------://
  8141.                 //:PTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPT://
  8142.                 if( "ARR_LEF" == glo_eve.key ){
  8143.                     console.log("[EDIT002[ <-- ]]");
  8144.  
  8145.                     AA2_edi_002_Mov_Lef_cam_t_x( edi_002 );
  8146.                    
  8147.                 };;
  8148.                 if( "ARR_RIG" == glo_eve.key ){
  8149.                     console.log("[EDIT002[ --> ]]");
  8150.  
  8151.                     AA2_edi_002_Mov_Rig_cam_t_x( edi_002 );
  8152.  
  8153.                 };;
  8154.                 if( "ARR_UPP" == glo_eve.key ){
  8155.                     console.log("[EDIT002[ UPP ]]");
  8156.  
  8157.                     AA2_edi_002_Mov_Upp_cam_t_y( edi_002 );
  8158.  
  8159.                 };;
  8160.                 if( "ARR_DOW" == glo_eve.key ){
  8161.                     console.log("[EDIT002[ DOW ]]");
  8162.  
  8163.                     AA2_edi_002_Mov_Dow_cam_t_y( edi_002 );
  8164.  
  8165.                 };;
  8166.                 //:PTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPT://
  8167.  
  8168.         };;
  8169.         //:edi_002.HanEve_MouClk
  8170.         function aa2_edi_002_HanEve_MouClk(
  8171.                       edi_002 , glo_eve
  8172.         ){
  8173.  
  8174.             console.log("[HANDLE_THEM_FUCKING_CLICKS]");
  8175.  
  8176.         };;
  8177.  
  8178.     //:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV://
  8179.     //:V:[Visible/public ]functions:(ABOVE):-----------------://
  8180.  
  8181.     //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
  8182.     //:                                                      ://
  8183.     //:  Editor #02 is very likely our "vp1_sna" (VP1Snapper)://
  8184.     //:                                                      ://
  8185.     //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
  8186.     //:E2:edi_002:(ABOVE):-----------------------------------://
  8187.  
  8188.     //:UC:UniformController:(BELOW):-------------------------://
  8189.     //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
  8190.     function NEW_tau_con( /** void **/ ){
  8191.         var tau_con =( new TextureAsUniformController() );
  8192.         Object.seal( tau_con );
  8193.         return(      tau_con );
  8194.     };;
  8195.     //: INSTANCE_NAME[ tau_001 | tau_### | tau_999 | tau_con ]
  8196.     //: CLASS____NAME[ tau_con | TextureAsUniformController  ]
  8197.     function TextureAsUniformController( ){ //://////////////://
  8198.      
  8199.         //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
  8200.         //|    rec_bou is mapped onto a sub-section of       |//
  8201.         //|    mam_mem (master memory) and is used to        |//
  8202.         //|    store "uniform values" as "texture            |//
  8203.         //|    pixels".                                      |//
  8204.         //||                                                ||//
  8205.         //||                                                ||//
  8206.         //|    rec_dir grows to fit all uniform values       |//
  8207.         //|    currently set using "uni_put". Uniforms       |//
  8208.         //|    values put are persisted with "uni_com"       |//
  8209.         //|    (uniform commit).                             |//
  8210.         //||                                                ||//
  8211.         //||                                                ||//
  8212.         //|    It is wasteful to push a single pixel to a    |//
  8213.         //|    texture,so try to batch them all.             |//
  8214.         //||                                                ||//
  8215.         //||    +--++--||--++--||--++--||--++--+            ||//
  8216.         //||    |                              |            ||//
  8217.         //||    |                              |            ||//
  8218.         //||    +      ++--------------++      +            ||//
  8219.         //||    |      ||              ||      |            ||//
  8220.         //||    |      ||    rec_dir   ||      |            ||//
  8221.         //||    +      ||              ||      +            ||//
  8222.         //||    |      ++--------------++      |            ||//
  8223.         //||    |                              |            ||//
  8224.         //||    +                              +            ||//
  8225.         //||    |            rec_bou           |            ||//
  8226.         //||    |                              |            ||//
  8227.         //||    +--++--||--++--||--++--||--++--+            ||//
  8228.         //||                                                ||//
  8229.         //|__________________________________________________|//
  8230.  
  8231.         //:Publically_Exposed_Functions:
  8232.         //://////////////////////////////////////////////////://
  8233.  
  8234.             this.uni_com = uni_com; //:Uniform:Commit
  8235.             this.uni_get = uni_get; //:Uniform:Get
  8236.             this.uni_put = uni_put; //:Uniform:Put
  8237.  
  8238.             //:SETS:BORROWED_POINTER_u32_pix
  8239.             //:Intentionally abnoxiously long name to get
  8240.             //:you attention to be careful with this.
  8241.             this.BorrowPointerAsWeakReference_u32_pix=(
  8242.                  BorrowPointerAsWeakReference_u32_pix
  8243.             );;
  8244.  
  8245.             //:Really just for debugger helpfulness:
  8246.             this.Put_VarNam = Put_VarNam;
  8247.  
  8248.             //:Memory sub_region to store uniform values on:
  8249.             this.Put_RecBou = Put_RecBou;
  8250.  
  8251.         //://////////////////////////////////////////////////://
  8252.  
  8253.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  8254.  
  8255.         //:Private_Variables:
  8256.         //://////////////////////////////////////////////////://
  8257.         var _ = {};
  8258.  
  8259.             _.VAR_TYP=( "tau_con" ); //:<--Variable_Type(Class)
  8260.             _.VAR_NAM=( "var_nam" ); //:<--Instance_Name
  8261.  
  8262.         //:Intentionally obnoxious name because we need to
  8263.         //:be very careful about memory ownership.
  8264.         //:Ever wonder why C++'s version of (void*)( ... )
  8265.         //:is reinterpret_cast( ... ) ? To be abnoxious.
  8266.         _.BORROWED_POINTER_u32_pix = null;
  8267.         _.rec_dir = null; //:RECtangle_DIRty
  8268.         _.use_dir =( 0 ); //:UseDirtyRectangle?          
  8269.         _.rec_bou = null; //:RECtangle_BOUnds
  8270.         _.ixy_bou = null; //:ixy:[ index + x + y ]
  8271.         _.ixy_pix = null; //:ixy:[ index + x + y ]
  8272.  
  8273.         Object.seal( _ );
  8274.         //://////////////////////////////////////////////////://
  8275.  
  8276.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  8277.  
  8278.         //:Constructor_Code:
  8279.         //:Wrapped inside function just for organization.
  8280.         //://////////////////////////////////////////////////://
  8281.         function CLASS_CONSTRUCTOR(){
  8282.            
  8283.             _.BORROWED_POINTER_u32_pix = null; //:SetAfterInit
  8284.             _.rec_dir = NEW_rec_inc(); //:RECtangle_DIRty(flag)
  8285.             _.use_dir = (    0      ); //:Use: rec_dir ?
  8286.             _.rec_bou = NEW_rec_inc(); //:Rectangle_BoundingBox
  8287.             _.ixy_bou = NEW_ixy_das(); //:RelativeTo:rec_bou
  8288.             _.ixy_pix = NEW_ixy_das(); //:RelativeTo:u32_pix
  8289.            
  8290.         };;CLASS_CONSTRUCTOR();
  8291.         //://////////////////////////////////////////////////://
  8292.  
  8293.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  8294.  
  8295.         function BorrowPointerAsWeakReference_u32_pix(
  8296.             u32_pix //:Uint32_Pixels_Container
  8297.         ){
  8298.             if( !u32_pix ){ throw("[NULL_INPUT:u32_pix]"); };
  8299.             if(  u32_pix.VAR_TYP != "uni_pix" ){
  8300.                 throw("[ERR:VAR_TYP!=uni_pix]");
  8301.             };;
  8302.  
  8303.             _.BORROWED_POINTER_u32_pix=(
  8304.                                u32_pix  
  8305.             );;
  8306.         };;
  8307.  
  8308.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  8309.  
  8310.         function Put_VarNam( var_nam ){ _.var_nam = var_nam; };
  8311.  
  8312.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  8313.        
  8314.         function Put_RecBou(
  8315.             x_0 //:TOP_LEF
  8316.         ,   y_0 //:TOP_LEF
  8317.    
  8318.         ,   x_1 //:BOT_RIG
  8319.         ,   y_1 //:BOT_RIG
  8320.         ){
  8321.             //:If we ever do this logic somewhere else again,
  8322.             //:create: AA2_rec_inc_PutAll(x_0,y_0,x_1,y_1);
  8323.             //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
  8324.  
  8325.             //:I don't care if you have to come up with      ://
  8326.             //:something convoluted, do NOT allow negative   ://
  8327.             //:coordinates in your rectangle structs!        ://
  8328.             //:The only reason I can think of negative rect  ://
  8329.             //:is a camera that is leaking of world bounds.  ://
  8330.             //:Don't allow camera to leak outside of bounds! ://
  8331.             if( x_0 < 0 || x_1 < 0 || y_0 < 0 || y_1 < 0 ){
  8332.                 throw("[CodeBaseDoesNotAllowNegativeCoord]");
  8333.             };;
  8334.  
  8335.             if( x_0 > x_1
  8336.             ||  y_0 > y_1
  8337.             ){
  8338.                 throw("[OUT_OF_ORDER_RECTANGLE]");
  8339.             };;
  8340.  
  8341.             _.rec_bou.x_0 = x_0;
  8342.             _.rec_bou.y_0 = y_0;
  8343.             _.rec_bou.x_1 = x_1;
  8344.             _.rec_bou.y_1 = y_1;
  8345.  
  8346.             if( x_0 > x_1
  8347.             ||  y_0 > y_1
  8348.             ){
  8349.                 throw("[TYPO_IN_ASSIGNMENT]");
  8350.             };;
  8351.             //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
  8352.         };;
  8353.  
  8354.         //:Uniform:COMmit
  8355.         function uni_com( /** void **/ ){
  8356.  
  8357.             //:If dirty flag is not set, exit.
  8358.             if( _.use_dir <= 0 ){ return; };
  8359.                 _.use_dir  = 0 ;//:MUST_RESET_TO_EXACTLY_ZERO
  8360.  
  8361.             //:Commit the pixels you decided to set in the
  8362.             //:openGL texture by using subTexWhatever
  8363.             //:with the dirty rectangle region.
  8364.  
  8365.             var G =( GLO_CLA.ada_gra.con_gra );
  8366.  
  8367.             //:BD:Borrowed_Data:-----------------------------://
  8368.             //:BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD://
  8369.             var pix_arr = _.BORROWED_POINTER_u32_pix.pix_arr;
  8370.             var pix_wid = _.BORROWED_POINTER_u32_pix.pix_wid;
  8371.             var pix_hig = _.BORROWED_POINTER_u32_pix.pix_hig;
  8372.             var pix_com = _.BORROWED_POINTER_u32_pix.pix_com;
  8373.  
  8374.             var tex_lot = _.BORROWED_POINTER_u32_pix.tex_lot;
  8375.             var tex_han = _.BORROWED_POINTER_u32_pix.tex_han;
  8376.             //:BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD://
  8377.  
  8378.             //:¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯://
  8379.             //:We probably DONT need to call "bindTexture"   ://
  8380.             //:since we never change the texture in a given  ://
  8381.             //:texture slot,but do it just in case.          ://
  8382.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  8383.             //:Also not certain if "pixelStorei" needs to be ://
  8384.             //:called,but is noted as required in my         ://
  8385.             //:texImage2D code,so figure also required here. ://
  8386.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  8387.             //:QUOTE:                                        ://
  8388.             //:Setting the pixel storage mode affects the    ://
  8389.             //:WebGLRenderingContext.readPixels() operations,://
  8390.             //:as well as unpacking of textures with the     ://
  8391.             //:WebGLRenderingContext.texImage2D() and        ://
  8392.             //:WebGLRenderingContext.texSubImage2D() methods.://
  8393.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  8394.             //:  SOURCE:                                     ://
  8395.             //:      developer.mozilla.org/en-US/docs/Web/   ://
  8396.             //:      API/WebGLRenderingContext/pixelStorei   ://
  8397.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  8398.  
  8399.                 //:BEFORE[ G.texSubImage2D ]//:////://///////://
  8400.                 G.activeTexture( G.TEXTURE0   +  tex_lot );
  8401.                 G.bindTexture(   G.TEXTURE_2D ,  tex_han );
  8402.                 const ALN = 4; //:ALN:"Alignment" GUESS?
  8403.                 G.pixelStorei(G.UNPACK_ALIGNMENT, ALN);
  8404.  
  8405.                 //:Because we are NOT using the entire image
  8406.                 //:source, but a sub-selection of it, we need
  8407.                 //:to specifiy how many pixels are in each
  8408.                 //:row. AKA[ width / stride / pitch ]
  8409.                 //:Of the image. The stride is measured in
  8410.                 //:pixels hear, NOT bytes.
  8411.                 //: SEE[ SC[ #PAK_ROW_LEN_URL# ] ]
  8412.                 //: SEE[ SC[ #MSDN_STRIDE_URL# ] ]
  8413.                 //: SEE[ SC[ #OGL_PIX_TRN_URL# ] ]
  8414.                 G.pixelStorei( G.UNPACK_ROW_LENGTH , pix_wid );
  8415.                 //:BEFORE[ G.texSubImage2D ]//:////://///////://
  8416.        
  8417.             //:- - - - - - - - - - - -- - - - - - - - - - - -://
  8418.             //:______________________________________________://
  8419.  
  8420.             //:DEBUGGING: Replace reference to "rec_dir"
  8421.             //:           below with "rec_bou" to trouble
  8422.             //:           shoot problems by reducing
  8423.             //:           problem search space.
  8424.             var org_lef=(     _.rec_dir.x_0 );
  8425.             var org_top=(     _.rec_dir.y_0 );
  8426.             var rec_wid=(   ( _.rec_dir.x_1 )
  8427.                           - ( _.rec_dir.x_0 ) + 1 );
  8428.             var rec_hig=(   ( _.rec_dir.y_1 )
  8429.                           - ( _.rec_dir.y_0 ) + 1 );
  8430.  
  8431.             //:We need the index location of the top-left
  8432.             //:pixel [ org_lef, org_top ] in order to
  8433.             //:put the correct starting offset into
  8434.             //:last param of texSubImage2D.
  8435.             //:IS_OFFSET_BYTES_OR_PIXELS?
  8436.             var p_x =( org_lef ); //:TOP_LEF:X
  8437.             var p_y =( org_top ); //:TOP_LEF:Y
  8438.             var pix_dex = p_x + ( pix_wid * p_y);
  8439.             var src_oip = pix_dex * (  1  );//:PixelOffset
  8440.             var src_oib = pix_dex * pix_com;//:ComponentOffset
  8441.  
  8442.             //: www.khronos.org/registry/OpenGL-Refpages/
  8443.             //: gl4/html/glTexSubImage2D.xhtml
  8444.             G.texSubImage2D(
  8445.             /**/  G.TEXTURE_2D //:TARGET
  8446.             ,     0            //:LEVEL (LOD/LevelOfDetail)
  8447.  
  8448.             , org_lef //: [ (rec_dir|red_bou).x_0 ] //:OSX
  8449.             , org_top //: [ (rec_dir|red_bou).y_0 ] //:OSY
  8450.             , rec_wid //: [ (rec_dir|red_bou).wid ] //:WID
  8451.             , rec_hig //: [ (rec_dir|red_bou).hig ] //:HIG
  8452.  
  8453.                 //:------------------------------------------://
  8454.                 //:FORMAT_OF_CPU_SIDE_DATA:SEE[#TSI2D_FORMAT#]
  8455.             ,   G.RGBA_INTEGER       //:SOURCE_FORMAT
  8456.             ,   G.UNSIGNED_BYTE      //:SOURCE_TYPE
  8457.                 //:------------------------------------------://
  8458.  
  8459.             ,   pix_arr              //:ARRAY_BUFFER_VIEW
  8460.  
  8461.                 //:  If you are using a sub-section of       ://
  8462.                 //:  a byte array on the CPU-side, you will  ://
  8463.                 //:  need to specify the index location of   ://
  8464.                 //:  the first byte of the first pixel.      ://
  8465.             ,   src_oib              //:SOURCE_OFFSET
  8466.             );;
  8467.  
  8468.         };; //:[FN:uni_com(...)]:////:///////////////////////://
  8469.  
  8470.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  8471.        
  8472.         //:Uniform:PUT
  8473.         function uni_put(
  8474.             tau_dex //: AKA[ tau_dex / tui_dex ]
  8475.         ,   u32_var //: AKA[ u32_var / u32_val ]
  8476.         ){
  8477.  
  8478.             //://////////////////////////////////////////////://
  8479.             //:Convert tau_dex:                              ://
  8480.             //:     TO::::: XY coordinate                    ://
  8481.             //:     WITHIN: _.rec_bou                        ://
  8482.             //:AKA[ tau_dex / VAR_IDENTIFIED_BY_LOCAL_INDEX ]://
  8483.             //://////////////////////////////////////////////://
  8484.  
  8485.                 //:CALCULATES[ ixy_bou.[ x_x | y_y | i_i ] ]
  8486.                 //:CALCULATES[ ixy_pix.[ x_x | y_y | i_i ] ]
  8487.                 CALCULATE_ixy_bou_CALCULATE_ixy_pix(
  8488.                     tau_dex
  8489.                 );;
  8490.  
  8491.                 //:Get component index by multiplying
  8492.                 //:pixel index by 4 because there are
  8493.                 //:4 components ( A R G B ) per pixel.
  8494.                 com_dex = ( _.ixy_pix.i_i * 4 );
  8495.  
  8496.             //://////////////////////////////////////////////://
  8497.             //:    Reach into the u32_pix.pix_arr you are    ://
  8498.             //:    borrowing and put the data there.         ://
  8499.             //://////////////////////////////////////////////://
  8500.  
  8501.                 var pix_arr =( _.BORROWED_POINTER_u32_pix.
  8502.                     pix_arr   );;
  8503.  
  8504.             //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
  8505.             { //:SCOPE:////:////////////////////:SC[JSB_UNPK]://
  8506.                 //:- - - - - - - - - - -- - - - - - - - - - -://
  8507.                 //: pix_arr; //:Uint8Array_Of_Pixel_Data
  8508.                 //: com_dex; //:IndexOf_1st_Component_Of_Pixel
  8509.                 //: u32_var; //:PixelValueAsUint32
  8510.                 //:- - - - - - - - - - -- - - - - - - - - - -://
  8511.                 let       B_M = 0xFF; //:Bit_Mask
  8512.  
  8513.                 oR=(  (( u32_var >> 24) & B_M )  >>>0 );
  8514.                 oG=(  (( u32_var >> 16) & B_M )  >>>0 );
  8515.                 oB=(  (( u32_var >>  8) & B_M )  >>>0 );
  8516.                 oA=(  (( u32_var >>  0) & B_M )  >>>0 );
  8517.  
  8518.                 //:---------------------:|_R|G|B|A|:---------://
  8519.                 pix_arr[ com_dex + 0 ] =( oR       );;;;;;
  8520.                 pix_arr[ com_dex + 1 ] =(   oG     );;;;;;
  8521.                 pix_arr[ com_dex + 2 ] =(     oB   );;;;;;
  8522.                 pix_arr[ com_dex + 3 ] =(       oA );;;;;;
  8523.                 //:---------------------:|_R|G|B|A|:---------://
  8524.                 //:- - - - - - - - - - -- - - - - - - - - - -://
  8525.             } //:SCOPE:////:////////////////////:SC[JSB_UNPK]://
  8526.             //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
  8527.  
  8528.             //://////////////////////////////////////////////://
  8529.             //:Using the XY coordinate local to _.rec_bou ,
  8530.             //:increase the dirty selection area.
  8531.             //://////////////////////////////////////////////://
  8532.  
  8533.                 //:If setting the first dirty pixel,
  8534.                 //:the dirty bounding box will begin here:
  8535.                 if( _.use_dir <= 0 ){
  8536.                    
  8537.                     //:MUSTBE_EXACTLY_ZERO_TO_DOUBLE_AS_COUNTER
  8538.                     if( _.use_dir != ( 0 )){
  8539.                         throw("[2020_05_20:0152AM]");
  8540.                     };;
  8541.  
  8542.                     //:DO_NOT_USE[ rec_bou ]HERE!
  8543.                     _.rec_dir.x_0 = _.ixy_bou.x_x;
  8544.                     _.rec_dir.x_1 = _.ixy_bou.x_x;
  8545.                     _.rec_dir.y_0 = _.ixy_bou.y_y;
  8546.                     _.rec_dir.y_1 = _.ixy_bou.y_y;
  8547.  
  8548.                 }else
  8549.                 if( _.use_dir >= 1 ){
  8550.                 //:If not the first dirty pixel, expand the
  8551.                 //:current dirty bounds to also include
  8552.                 //:the new pixel.
  8553.  
  8554.                     //:DO_NOT_USE[ bou_rec ]HERE!
  8555.                     //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
  8556.                     _.rec_dir.x_0=Math.min(
  8557.                     _.rec_dir.x_0,
  8558.                     _.ixy_bou.x_x
  8559.                     );;
  8560.                     _.rec_dir.x_1=Math.max(
  8561.                     _.rec_dir.x_1,
  8562.                     _.ixy_bou.x_x
  8563.                     );;
  8564.                     //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
  8565.  
  8566.                     //:DO_NOT_USE[ bou_rec ]HERE!
  8567.                     //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
  8568.                     _.rec_dir.y_0=Math.min(
  8569.                     _.rec_dir.y_0,
  8570.                     _.ixy_bou.y_y
  8571.                     );;
  8572.                     _.rec_dir.y_1=Math.max(
  8573.                     _.rec_dir.y_1,
  8574.                     _.ixy_bou.y_y
  8575.                     );;
  8576.                     //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
  8577.  
  8578.                 }else{
  8579.                     throw("[EDCL:ExpectedDeadCodeLine]");
  8580.                 };;
  8581.  
  8582.                 //:Flag dirty region as existing, and as bonus
  8583.                 //:count the total number of dirty pixels.
  8584.                 _.use_dir = ( _.use_dir + 1 );
  8585.  
  8586.         };;//:[FN:uni_put(...)]:////:////////////////////////://
  8587.  
  8588.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  8589.  
  8590.         //:UNIform:GET:
  8591.         function uni_get(
  8592.             //:AKA[ tui_dex / VAR_IDENTIFIED_BY_LOCAL_INDEX ]
  8593.             tau_dex
  8594.         ){
  8595.             //:The get operation does NOT pull value off the
  8596.             //:GPU. We never pull values off the GPU! We track
  8597.             //:GPU-side data in parallel by making sure we have
  8598.             //:an accurate CPU-side record of what values we
  8599.             //:pushed up to GPU.
  8600.      
  8601.                 //:CALCULATES[ ixy_bou.[ x_x | y_y | i_i ] ]
  8602.                 //:CALCULATES[ ixy_pix.[ x_x | y_y | i_i ] ]
  8603.                 CALCULATE_ixy_bou_CALCULATE_ixy_pix(
  8604.                     tau_dex
  8605.                 );;
  8606.  
  8607.                 //:Get component index by multiplying
  8608.                 //:pixel index by 4 because there are
  8609.                 //:4 components ( A R G B ) per pixel.
  8610.                 com_dex = ( _.ixy_pix.i_i * 4 );
  8611.        
  8612.                 //:Extract_All_Pixel_Bytes:
  8613.                 var     pix_arr =( _.BORROWED_POINTER_u32_pix.
  8614.                         pix_arr  );;
  8615.                 var R = pix_arr[ com_dex + 0 ]; //: R ://
  8616.                 var G = pix_arr[ com_dex + 1 ]; //: G ://
  8617.                 var B = pix_arr[ com_dex + 2 ]; //: B ://
  8618.                 var A = pix_arr[ com_dex + 3 ]; //: A ://
  8619.  
  8620.             //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
  8621.             //://///////////////////////////////:SC[JSB_PACK]://
  8622.             //:-----------:R_G_B_A_:-------------------------://
  8623.             const m_R =( 0xFF000000 ); //:MASK:RED
  8624.             const m_G =( 0x00FF0000 ); //:MASK:GREEN
  8625.             const m_B =( 0x0000FF00 ); //:MASK:BLUE
  8626.             const m_A =( 0x000000FF ); //:MASK:ALPHA
  8627.             //:-----------:R_G_B_A_:-------------------------://
  8628.  
  8629.             var //:------------------------------------------://
  8630.             u32_var = 0;  //:AKA[ u32_var | R_G_B_A ]        
  8631.             u32_var =( (u32_var |(( R << 24) & m_R )) >>>0 );
  8632.             u32_var =( (u32_var |(( G << 16) & m_G )) >>>0 );
  8633.             u32_var =( (u32_var |(( B <<  8) & m_B )) >>>0 );
  8634.             u32_var =( (u32_var |(( A <<  0) & m_A )) >>>0 );
  8635.             //://///////////////////////////////:SC[JSB_PACK]://
  8636.             //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
  8637.            
  8638.             return( u32_var );
  8639.         };;//:[FN:uni_get(...)]:////:////////////////////////://
  8640.  
  8641.         //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
  8642.  
  8643.         //:Returns_By_Side_Effect[ _.ixy_bou ]:////://///////://
  8644.         //:Returns_By_Side_Effect[ _.ixy_pix ]:////://///////://
  8645.         function CALCULATE_ixy_bou_CALCULATE_ixy_pix(
  8646.             tau_dex
  8647.         ){
  8648.  
  8649.             //://////////////////////////////////////////////://
  8650.             //: 1: Get reference to size of CPU-side bitmap:
  8651.             //: 2: Check rec_bou validity.
  8652.             //: 3: Check rec_dir validity.
  8653.             //://////////////////////////////////////////////://
  8654.             var                    u32_pix =(
  8655.                 _.BORROWED_POINTER_u32_pix
  8656.             );;//:----------------:u32_pix:--------------://
  8657.  
  8658.             if( !u32_pix ){
  8659.                 var msg=("[NULL_BORROWED_POINTER?]");
  8660.                 console.log( msg );
  8661.                 throw(       msg );
  8662.             };;
  8663.  
  8664.             var pix_wid =(         u32_pix.pix_wid  );
  8665.             var pix_hig =(         u32_pix.pix_hig  );
  8666.  
  8667.             if( 1 == 1 ){ //:AlwaysTrue.ForIndentation.
  8668.                 if( ( _.rec_bou.x_0 <     0    )
  8669.                 ||  ( _.rec_bou.y_0 <     0    )
  8670.                 ||  ( _.rec_bou.x_1 >= pix_wid )
  8671.                 ||  ( _.rec_bou.y_1 >= pix_hig )
  8672.                 ){
  8673.                     throw("[rec_bou:OutOFboundsOfPixels]");
  8674.                 };;
  8675.             };;
  8676.             if( _.use_dir > 0 ){ //:IsDirtyRectangleActive?
  8677.                 if( ( _.rec_dir.x_0 < _.rec_bou.x_0 )
  8678.                 ||  ( _.rec_dir.y_0 < _.rec_bou.y_0 )
  8679.                 ||  ( _.rec_dir.x_1 > _.rec_bou.x_1 )
  8680.                 ||  ( _.rec_dir.y_1 > _.rec_bou.y_1 )
  8681.                 ){
  8682.                     throw("[DirtyRegionIsOutOfBounds]");
  8683.                 };;
  8684.             };;
  8685.  
  8686.             //://////////////////////////////////////////////://
  8687.  
  8688.             //://////////////////////////////////////////////://
  8689.             //:Convert tau_dex:                              ://
  8690.             //:     TO:::::  XY coordinate                   ://
  8691.             //:     WITHIN:  _.rec_bou                       ://
  8692.             //:AKA[ tau_dex | VAR_IDENTIFIED_BY_LOCAL_INDEX ]://
  8693.             //://////////////////////////////////////////////://
  8694.  
  8695.                 var bou_wid = ( 1
  8696.                 +   _.rec_bou.x_1
  8697.                 -   _.rec_bou.x_0
  8698.                 );;
  8699.    
  8700.                 //:FORMULA:INDEX_TO_XY:
  8701.                 var t_x =  tau_dex     % bou_wid ;
  8702.                 var t_y = (tau_dex-t_x)/ bou_wid ;
  8703.                
  8704.                 //:XY position within _.ixy_bou:
  8705.                 _.ixy_bou.i_i =   tau_dex     +  0   ;
  8706.                 _.ixy_bou.x_x = _.rec_bou.x_0 + t_x  ;
  8707.                 _.ixy_bou.y_y = _.rec_bou.y_0 + t_y  ;
  8708.  
  8709.             //://////////////////////////////////////////////://
  8710.             //:Convert XY to index local to pix_arr
  8711.             //://////////////////////////////////////////////://
  8712.  
  8713.                 //:¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯://
  8714.                 //: Take XY coordinates local to rec_bou and ://
  8715.                 //: make them [ local / relative ] to        ://
  8716.                 //: u32_pix.[ pix_wid & pix_hig ] (AKA:      ://
  8717.                 //: pix_arr) Because ixy_bou is a 4-point    ://
  8718.                 //: rectangle overlayed over a bitmap        ://
  8719.                 //: rectangle with origin [0,0],the          ://
  8720.                 //: transformation is essentially a NOOP.    ://
  8721.                 //:__________________________________________://
  8722.                 var p_x =( _.ixy_bou.x_x - 0 );
  8723.                 var p_y =( _.ixy_bou.y_y - 0 );
  8724.  
  8725.                         //:EC:ErrorCheck:
  8726.                         //:ECECECECECECECECECECECECEC://
  8727.                         if( p_x < 0 || p_x >= pix_wid
  8728.                         ||  p_y < 0 || p_y >= pix_hig
  8729.                         ){
  8730.                             throw("[PXY_OOB]");
  8731.                         };;
  8732.                         //:ECECECECECECECECECECECECEC://
  8733.  
  8734.                 //:Convert pixel xy coordinate to pixel_index:
  8735.                 var pix_dex = p_x + ( pix_wid * p_y);
  8736.  
  8737.                 //:These are the coordinates of pixel LOCAL
  8738.                 //:to the GPU memory block we want to
  8739.                 //:set them on.
  8740.                 _.ixy_pix.i_i = pix_dex;
  8741.                 _.ixy_pix.x_x =   p_x  ;
  8742.                 _.ixy_pix.y_y =   p_y  ;
  8743.  
  8744.             //://////////////////////////////////////////////://
  8745.         };;//:[CALCULATE_ixy_bou_CALCULATE_ixy_pix]:////:////://
  8746.  
  8747.     };; //://////////////////////////////////////////////////://
  8748.     //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
  8749.     //:UC:UniformController:(ABOVE):-------------------------://
  8750.  
  8751.  
  8752.  
  8753. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  8754. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  8755. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  8756. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  8757. //:C:Classes_Section:(ABOVE):--------------------------------://
  8758.  
  8759.  
  8760. //:DB:DeBug_functions:(BELOW):-------------------------------://
  8761. //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
  8762. //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
  8763. //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
  8764. //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
  8765.  
  8766.     //:EXPERIMENT:
  8767.     //://////////////////////////////////////////////////////://
  8768.     //:                                                      ://
  8769.     //:   Give every debug function a unique ordered         ://
  8770.     //:   serial number. Even across your other code bases.  ://
  8771.     //:   If function exists in different code base, make    ://
  8772.     //:   comment stub saying such. This will help prevent   ://
  8773.     //:   name collision since I kept out the "AA2"         ://
  8774.     //:   namespace from function name.                      ://
  8775.     //:                                                      ://
  8776.     //://////////////////////////////////////////////////////://
  8777.  
  8778.                 //:Debug #0002:
  8779.                 //:Check rec_inc is valid, check u32_var
  8780.                 //:is non-negative.
  8781.                 //:rec_inc.BUG0002(...)
  8782.                 function BUG0002( err_msg , rec_inc, u32_var ){
  8783.  
  8784.                     var fai_tim=( 0 );
  8785.                     if(!(u32_var >= 0 ) ){ fai_tim++; };
  8786.  
  8787.                     //:Just do a null check:
  8788.                     if(!rec_inc){ fai_tim++; };
  8789.  
  8790.                     //+ Decided I will allow unbounded       +//
  8791.                     //+ rec_inc functions put the rec_inc    +//    
  8792.                     //+ into invalid states.                 +//
  8793.                     //- if( AA2_rec_inc_OrdBad( rec_inc )){ -//
  8794.                     //-     fai_tim++;                       -//
  8795.                     //- };;                                  -//
  8796.  
  8797.                     if( fai_tim > 0 ){
  8798.                         throw("[BUG0002]:", err_msg );
  8799.                     };;
  8800.                 };;
  8801.                
  8802.                 //:Debug # 0001.
  8803.                 //:Dont give a #funck# about knowing what is
  8804.                 //:being debugged when reading function calls.
  8805.                 //:rec_inc.BUG0001(...)
  8806.                 function BUG0001(
  8807.                     rec_inc,u32_var,rec_bou,err_msg
  8808.                 ){
  8809.  
  8810.                     var fai_tim=( 0 );
  8811.  
  8812.                     //:Neg_or_Nan_Check:
  8813.                     if(!(u32_var >= 0)){
  8814.                         fai_tim++;
  8815.                     };;
  8816.                
  8817.                     if( AA2_rec_inc_OrdBad( rec_inc ) ){
  8818.                         fai_tim++;
  8819.                     };;
  8820.                
  8821.                     //:NIN:Not_Inside_Of:Check:
  8822.                     if( AA2_rec_inc_NIN_rec_bou(
  8823.                     /**/     rec_inc  ,  rec_bou
  8824.                     )){
  8825.                         fai_tim++;
  8826.                     };;
  8827.                
  8828.                     if( fai_tim > 0 ){
  8829.                         throw( "[BUG0001]:" + err_msg );
  8830.                     };;
  8831.                 };;
  8832.  
  8833. //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
  8834. //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
  8835. //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
  8836. //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
  8837. //:DB:DeBug_functions:(ABOVE):-------------------------------://
  8838.  
  8839.  
  8840.  
  8841. //:CM:CallMain:
  8842. //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
  8843. //:                                                          ://
  8844. //:   Call to main() must come after ALL OTHER CODE.         ://
  8845. //:         1. All Data                                      ://
  8846. //:         2. All Classes                                   ://
  8847. //:         3. ALL CODE NO EXCEPTIONS                        ://
  8848. //:                                                          ://
  8849. //:         This is the case because we are starting         ://
  8850. //:         to re-organize the code in a procedural          ://
  8851. //:         style.                                           ://
  8852. //:                                                          ://
  8853. //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
  8854.  
  8855.  
  8856.             main();
  8857.  
  8858.  
  8859.  
  8860. //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
  8861.  
  8862.  
  8863. //:T:Todo_Section:(BELOW):
  8864. //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
  8865. //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
  8866. //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
  8867. //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
  8868.  
  8869.     //:TODO: Shader needs to know if it is using
  8870.     //:      ISO_MEM or MAM_MEM data.
  8871.  
  8872. //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
  8873. //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
  8874. //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
  8875. //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
  8876.  
  8877.  
  8878. //:CR:Code_Reference:(BELOW):--------------------------------://
  8879. //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
  8880. //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
  8881. //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
  8882. //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
  8883.  
  8884.  
  8885. //:==========================================================://
  8886. //|AUTHOR: John Mark Isaac Madison                           |//
  8887. //|EMAIL:: HeavyMetalCookies[ at ][ letterAfter_f-mail ].com |//
  8888. //|THIS_FILE_ON_PASTE_BIN[ https://pastebin.com/VvTNDiyi  ]  |//
  8889. //|YOUTUBE_CODE_OVERVIEW[ youtube.com/watch?v=vkkkeS4t2EU ]  |//
  8890. //:==========================================================://
  8891. //: GOAL/SUMMARY:                                            ://
  8892. //:     1: When viewport "#2" (rec_vp2) is snapped onto      ://
  8893. //:        viewport "C", the fragment shader code will       ://
  8894. //:        render at a "1:1" scale with zero translation.    ://
  8895. //:                                                          ://
  8896. //:     2: As viewport "#2" is resized, it performs a        ://
  8897. //:        sub-sample of the shader code input coordinates.  ://
  8898. //:                                                          ://
  8899. //:        2.1: If rec_vp2 is:                               ://
  8900. //:                 A: Same size as rec_vpc                  ://
  8901. //:                 B: Different location than vpc           ://
  8902. //:             You have a PAN.                              ://
  8903. //:                                                          ://
  8904. //:        2.2: If rec_vp2 is:                               ://
  8905. //:                 A: Different size than rec_vpc           ://
  8906. //:                 B: Same exact centerpoint as rec_vpc     ://
  8907. //:             You have a ZOOM into the CENTER.             ://
  8908. //:                                                          ://
  8909. //:        2.3: If rec_vp2 is:                               ://
  8910. //:                 A: Different size then rec_vpc           ://
  8911. //:                 B: Different centerpoint than rec_vpc    ://
  8912. //:             You have a PAN + ZOOM.                       ://
  8913. //:==========================================================://
  8914. //|//////////////////////////////////////////////////////////|//
  8915. //| GIVENS:                                                  |//
  8916. //|     1: vpc is always snapped 100% to opengl              |//
  8917. //|        context and thus can represent the                |//
  8918. //|        gl_FragCoord set of points.                       |//
  8919. //|                                                          |//
  8920. //|     2: vp2 is a SOURCE viewport like vp1 (not pictured). |//
  8921. //|        Except the source it samples is vpc's datapoints. |//
  8922. //|                                                          |//
  8923. //|        The smaller vp2 is relative to vpc, the more      |//
  8924. //|        "zoomed in" you are on the gl_FragCoord(s).       |//
  8925. //|                                                          |//
  8926. //| SOLVE:                                                   |//
  8927. //|     1: EASY: Fill vpc with grey pixels if gl_FragCoord   |//
  8928. //|              is NOT within vp0.                          |//
  8929. //|                                                          |//
  8930. //|     2: HARD: For each pixel inside of vp0,               |//
  8931. //|              map to vp2's data.                          |//
  8932. //|            ( vp2's data is a sub-sample of vpc's )       |//
  8933. //|            ( normalized screen coordinates.      )       |//
  8934. //|                                                          |//
  8935. //|                                                          |//
  8936. //| SUMMARY:                                                 |//
  8937. //|     INPUT: [ glFragCoord.x , glFragCoord.y ]             |//
  8938. //|       OUT: [     vpc_n_o.x ,     vpc_n_o.y ]             |//
  8939. //|//////////////////////////////////////////////////////////|//
  8940. ///
  8941. ///     //[//////////////////////////////////////////////////]//
  8942. ///     //[                                                  ]//
  8943. ///     //[  DIAGRAM_NAME[ SC[ DIA_VPC_TO_VP2_NORMALIZED ] ] ]//
  8944. ///     //[  CODE_EXAMPLE[ SC[ COD_VPC_TO_VP2_NORMALIZED ] ] ]//
  8945. ///     //[                                                  ]//
  8946. ///     //|                                                  |//
  8947. ///     //|   #############################################  |//
  8948. ///     //|   ##                                         ##  |//
  8949. ///     //|   ##  VP2/vp2: ViewPort2: (ZOOMER_SOURCE)    ##  |//
  8950. ///     //|   ##  VPC/vpc: ViewPortC: (CANVAS/CLIENT)    ##  |//
  8951. ///     //|   ##  VP0/vp0: ViewPort0: (DESTINATION  )    ##  |//
  8952. ///     //|   ##                                         ##  |//
  8953. ///     //|   ##  vp2: 0% zoomed when covering vpc 100%. ##  |//
  8954. ///     //|   ##  CHANGES TO VP0 POSITION:               ##  |//
  8955. ///     //|   ##      Should not alter image in VP0.     ##  |//
  8956. ///     //|   ##  CHANGES TO VP0     SIZE:               ##  |//
  8957. ///     //|   ##      Should squash+stretch the image    ##  |//
  8958. ///     //|   ##      but NOT expand or contract the     ##  |//
  8959. ///     //|   ##      upper+lower bounds of the data     ##  |//
  8960. ///     //|   ##      set being rendered to VP0.         ##  |//
  8961. ///     //|   ##                                         ##  |//
  8962. ///     //|   #############################################  |//
  8963. ///     //[                                                  ]//
  8964. ///     //[  DIAGRAM_NAME[ SC[ DIA_VPC_TO_VP2_NORMALIZED ] ] ]//
  8965. ///     //[  CODE_EXAMPLE[ SC[ COD_VPC_TO_VP2_NORMALIZED ] ] ]//
  8966. ///     //[  PASTE____BIN[ https://pastebin.com/VvTNDiyi ] ] ]//
  8967. ///     //[                                                  ]//
  8968. ///     //+  |<----------- EXAMPLE_SPAN==(11)----------->|  -+//
  8969. ///     //+  |<------------- gl_FragCoord(s) ----------->|  -+//
  8970. ///     //+  |<------------------ vpc ------------------>|  -+//
  8971. ///     //+  |                 (rec_vpc)                 |  -+//
  8972. ///     //+  |                                           |  -+//
  8973. ///     //+  |   |<-------------- vp0 -------------->|   |  -+//
  8974. ///     //+  |   |             (rec_vp0)             |   |  -+//
  8975. ///     //+  |   |                                   |   |  -+//
  8976. ///     //+  |   |                                   |   |  -+//
  8977. ///     //[  +---+---=---=---=---=---=---=---=---=---+---+  -]//
  8978. ///     //[  | 0 | 1   2   3 | 4   5 . 6 | 7 . 8 . 9 |10 |  0]//
  8979. ///     //[  +---+---=---=---=---=---=---=---=---=---+---+  -]//
  8980. ///     //[  | 1 |                   .   .   .   .   |   |  1]//
  8981. ///     //[  *   *                   .   .   .   .   *   *  -]//
  8982. ///     //[  | 2 |                   .   .   .   .   |   |  2]//
  8983. ///     //[  *   *                   .   .   .   .   *   *  -]//
  8984. ///     //[  | 3 |                   .   .   .   .   |   |  3]//
  8985. ///     //[  * - *                   .   .   .   .   * - *  -]//
  8986. ///     //[  | 4 |                   .   .   .   .   |   |  4]//
  8987. ///     //[  *   *...................+-----------+...*...*  -]//
  8988. ///     //[  | 5 |                   |           |   |0.5|  5]//
  8989. ///     //[  *   *...................|           |...*...*  -]//
  8990. ///     //[  | 6 |                   |    vp2    |   |0.6|  6]//
  8991. ///     //[  * - *...................| (rec_vp2) |...* - *  -]//
  8992. ///     //[  | 7 |                   |           |   |0.7|  7]//
  8993. ///     //[  *   *...................+-----------+...*...*  -]//
  8994. ///     //[  | 8 |                   .   .   .   .   |   |  8]//
  8995. ///     //[  *   *                   .   .   .   .   *   *  -]//
  8996. ///     //[  | 9 |                   .   .   .   .   |   |  9]//
  8997. ///     //[  +---+---=---=---=---=---=---=---=---=---+---+  -]//
  8998. ///     //[  |10 |           |       |0.6|0.7|0.8|   |   | 10]//
  8999. ///     //[  +---+---=---=---=---=---=---=---=---=---+---+  -]//
  9000. ///     //+      |                                   |       +//
  9001. ///     //+      |                                   |       +//
  9002. ///     //+      +---+---+---+---+---+---+---+---+---+       +//
  9003. ///     //+      |0.6|   |.65|   |0.7|   |.75|   |0.8|       +//
  9004. ///     //+      +-----------------------------------+       +//
  9005. ///     //+      |                                   |       +//
  9006. ///     //+      |<----------- vpc_n_o.x ----------->|       +//
  9007. ///     //+      |( Output gl_FragCoord(s) mapped   )|       +//
  9008. ///     //+      |( onto rec_vp0                    )|       +//
  9009. ///     //[                                                  ]//
  9010. ///     //[//////////////////////////////////////////////////]//
  9011. ///
  9012. ///
  9013. ///     //: Q: WHAT IS WRONG WITH FORMULA BELOW?
  9014. ///     //:
  9015. ///     //: [ rec_vp0 / vp0_m_i ]TO[ rec_vp2 / vp2_m_o ]
  9016. ///     //:--------------------------------------------------://
  9017. ///     //:.................|<---- rec_vp0.wid - 1 ---->|
  9018. ///     //:     vp0_m_i.x / ( rec_vp0.x_1 - rec_vp0.x_0 )
  9019. ///     //: === vp2_m_o.x / ( rec_vp2.x_1 - rec_vp2.x_0 )
  9020. ///     //:.................|<---- rec_vp2.wid - 1 ---->|
  9021. ///     //:--------------------------------------------------://
  9022. ///     //:
  9023. ///     //:
  9024. ///     //: A: vp0_m_i & vp2_m_0 values need to be offset
  9025. ///     //:    so they fit within range: 0 -to- (wid-1)
  9026. ///     //:
  9027. ///     //:
  9028. ///     //:--------------------------------------------------://
  9029. ///     //:      ( vp0_m_i.x   - rec_vp0.x_0 )  <-- On__Range
  9030. ///     //:    / ( rec_vp0.x_1 - rec_vp0.x_0 )  <-- The_Range
  9031. ///     //:      |<---- rec_vp0.wid - 1 ---->|
  9032. ///     //:   ===
  9033. ///     //:      |<---- rec_vp2.wid - 1 ---->|
  9034. ///     //:      ( vp2_m_o.x   - rec_vp2.x_0 )  <-- On__Range
  9035. ///     //:    / ( rec_vp2.x_1 - rec_vp2.x_0 )  <-- The_Range
  9036. ///     //:--------------------------------------------------://
  9037. ///     //:                                                  ://
  9038. ///     //: Q: Solve formula above for vp2_m_0.x             ://
  9039. ///     //: A: Answer below:                                 ://
  9040. ///     //:                                                  ://
  9041. ///     //: vp2_m_o.x =( ( vp0_m_i.x   - rec_vp0.x_0 )       ://
  9042. ///     //:            / ( rec_vp0.x_1 - rec_vp0.x_0 )       ://
  9043. ///     //:            * ( rec_vp2.x_1 - rec_vp2.x_0 )       ://
  9044. ///     //:            ) + rec_vp2.x_0 ;;;;;;;;;;;;;;;       ://
  9045. ///     //:                                                  ://
  9046. ///     //: Lets re-name:                                    ://
  9047. ///     //:     [vp2] to [OUT] for Output.                   ://
  9048. ///     //:     [vp0] to [INN] for Input .                   ://
  9049. ///     //:                                                  ://
  9050. ///     //: OUT_m_o.x =( ( INN_m_i.x   - rec_INN.x_0 )       ://
  9051. ///     //:            / ( rec_INN.x_1 - rec_INN.x_0 )       ://
  9052. ///     //:            * ( rec_OUT.x_1 - rec_OUT.x_0 )       ://
  9053. ///     //:            ) + rec_OUT.x_0 ;;;;;;;;;;;;;;;       ://
  9054. ///     //:                                                  ://
  9055. ///     //: When converting coordinate from 1 viewport       ://
  9056. ///     //: to another, we can replace "INN" with the        ://
  9057. ///     //: input viewport name and "OUT" with the output    ://
  9058. ///     //: viewport name. The viewports in this example     ://
  9059. ///     //: are named:                                       ://
  9060. ///     //:                                                  ://
  9061. ///     //:         [ vpc , vp0 , vp2 ]                      ://
  9062. ///     //:                                                  ://
  9063. ///     //:--------------------------------------------------://
  9064. ///
  9065. //| document.title = ( "[V2M.JS]" );                        ||//
  9066. //|                                                         ||//
  9067. //| //:Fake cast because I will need it in GLSL code.       ||//
  9068. //| function float( any_num ){                              ||//
  9069. //|     return(     any_num );                              ||//
  9070. //| };;                                                     ||//
  9071. //|                                                         ||//
  9072. //| function DEBUG_BOUNDS_CHECK(                            ||//
  9073. //|     cxy_inn                                             ||//
  9074. //| ,   rec_inn //:AKA[ rec_bou / bounds_rectangle ]        ||//
  9075. //| ){                                                      ||//
  9076. //|     if( cxy_inn.x >= rec_inn.x_0 //:LEF : GTE           ||//
  9077. //|     &&  cxy_inn.x <= rec_inn.x_1 //:RIG : LTE           ||//
  9078. //|     &&  cxy_inn.y >= rec_inn.y_0 //:TOP : GTE           ||//
  9079. //|     &&  cxy_inn.y <= rec_inn.y_1 //:BOT : LTE           ||//
  9080. //|     ){                                                  ||//
  9081. //|         //:Okay. Do nothing.                            ||//
  9082. //|     }else{                                              ||//
  9083. //|         var err_msg =( "[OUT_OF_BOUNDS]" );             ||//
  9084. //|         console.log( err_msg );                         ||//
  9085. //|         throw(       err_msg );                         ||//
  9086. //|     };;                                                 ||//
  9087. //| };;                                                     ||//
  9088. //|                                                         ||//
  9089. //| var gl_FragCoord = Object.seal({ x: 0 , y: 0});         ||//
  9090. //| var EXAMPLE_SPAN = ( 11 );                              ||//
  9091. //|                                                         ||//
  9092. //| //:Coordinates:                                         ||//
  9093. //| //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://||//
  9094. //| var vp0_m_o = Object.seal({ x: 0 , y: 0});              ||//
  9095. //| var vp0_m_i = Object.seal({ x: 0 , y: 0});              ||//
  9096. //| var vp2_m_o = Object.seal({ x: 0 , y: 0});              ||//
  9097. //| var vp2_m_i = Object.seal({ x: 0 , y: 0});              ||//
  9098. //| var vpc_m_o = Object.seal({ x: 0 , y: 0});              ||//
  9099. //| var vpc_m_i = Object.seal({ x: 0 , y: 0});              ||//
  9100. //| var vpc_mi2 = Object.seal({ x: 0 , y: 0});              ||//
  9101. //|                                                         ||//
  9102. //| var vpc_n_o = Object.seal({ x: 0 , y: 0});              ||//
  9103. //| var vpc_n_i = Object.seal({ x: 0 , y: 0});              ||//
  9104. //|                                                         ||//
  9105. //| //: tbs_noc: My "NOrmalized Coordinate" to execute      ||//
  9106. //| //:          GLSL shader code on. AKA: transformed      ||//
  9107. //| //:          gl_FragCoord.                              ||//
  9108. //| var tbs_noc = Object.seal({ x: 0 , y: 0});              ||//
  9109. //| //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://||//
  9110. //|                                                         ||//
  9111. //| //:R:Rectangles:                                        ||//
  9112. //| //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://||//
  9113. //| var rec_vpc =(Object.freeze({                           ||//
  9114. //|      x_0 :  0  //:TOP_LEF: (inclusive)                  ||//
  9115. //|     ,y_0 :  0  //:TOP_LEF: (inclusive)                  ||//
  9116. //|                                                         ||//
  9117. //|     ,x_1 : 10  //:BOT_RIG: (inclusive)                  ||//
  9118. //|     ,y_1 : 10  //:BOT_RIG: (inclusive)                  ||//
  9119. //| }));;                                                   ||//
  9120. //| var rec_vp0 = (Object.freeze({                          ||//
  9121. //|      x_0 : 1  //:TOP_LEF: (inclusive)                   ||//
  9122. //|     ,y_0 : 1  //:TOP_LEF: (inclusive)                   ||//
  9123. //|                                                         ||//
  9124. //|     ,x_1 : 9  //:BOT_RIG: (inclusive)                   ||//
  9125. //|     ,y_1 : 9  //:BOT_RIG: (inclusive)                   ||//
  9126. //| }));;                                                   ||//
  9127. //| var rec_vp2 = (Object.freeze({                          ||//
  9128. //|      x_0 : 6  //:TOP_LEF: (inclusive)                   ||//
  9129. //|     ,y_0 : 5  //:TOP_LEF: (inclusive)                   ||//
  9130. //|                                                         ||//
  9131. //|     ,x_1 : 8  //:BOT_RIG: (inclusive)                   ||//
  9132. //|     ,y_1 : 7  //:BOT_RIG: (inclusive)                   ||//
  9133. //| }));;                                                   ||//
  9134. //| //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://||//
  9135. //|                                                         ||//
  9136. //| for( gl_FragCoord.y = 0                                 ||//
  9137. //|     ;gl_FragCoord.y < EXAMPLE_SPAN                      ||//
  9138. //|     ;gl_FragCoord.y++                                   ||//
  9139. //| ){                                                      ||//
  9140. //| for( gl_FragCoord.x = 0                                 ||//
  9141. //|     ;gl_FragCoord.x < EXAMPLE_SPAN                      ||//
  9142. //|     ;gl_FragCoord.x++                                   ||//
  9143. //| ){                                                      ||//
  9144. //|                                                         ||//
  9145. //|     //:vpc is always snapped to entire[client/canvas]   ||//
  9146. //|     //:so we can make this assumption:                  ||//
  9147. //|     vpc_m_i.x = float( gl_FragCoord.x );//:MAV_INN:X    ||//
  9148. //|     vpc_m_i.y = float( gl_FragCoord.y );//:MAV_INN:Y    ||//
  9149. //|                                                         ||//
  9150. //|                                                         ||//
  9151. //|     //:IS[ vpc_m_i ]OUTSIDE_OF[rec_vp0]? SC[PT_IN_VP]://||//
  9152. //|     if( vpc_m_i.x < rec_vp0.x_0 //:LEF ( -X- )[ LT ]:://||//
  9153. //|     ||  vpc_m_i.x > rec_vp0.x_1 //:RIG ( +X+ )[ GT ]:://||//
  9154. //|     ||  vpc_m_i.y < rec_vp0.y_0 //:TOP ( -Y- )[ LT ]:://||//
  9155. //|     ||  vpc_m_i.y > rec_vp0.y_1 //:BOT ( +Y+ )[ GT ]:://||//
  9156. //|     ){ //:NOT:inside_the_rectangle[ rec_vp0 ]:////://://||//
  9157. //|     //://////:OUT_OF_BOUNDS_OF_REC[ rec_vp0 ]:////://://||//
  9158. //|                                                         ||//
  9159. //|         //:HERE: Make output pixel color some type of   ||//
  9160. //|         //:      solid color that will letterbox/outline||//
  9161. //|         //:      rec_vp0 when we draw all pixels on     ||//
  9162. //|         //:      rec_vpc.                               ||//
  9163. //|                                                         ||//
  9164. //|     }else{ //:INSIDE_THE_RECTANGLE[ rec_vp0 ]:////://://||//
  9165. //|                                                         ||//
  9166. //|         //+ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ +//||//
  9167. //|         //+VARIABLES_BELOW:                          +//||//
  9168. //|         //+- - - - - - - - - - -- - - - - - - - - - -+//||//
  9169. //|         //+ vp0_m_o : Viewport[ 0 ][ MAV ][ Output ] +//||//
  9170. //|         //+ vp0_m_i : Viewport[ 0 ][ MAV ][ Input  ] +//||//
  9171. //|         //+ vp2_m_o : Viewport[ 2 ][ MAV ][ Output ] +//||//
  9172. //|         //+ vp2_m_i : Viewport[ 2 ][ MAV ][ Input  ] +//||//
  9173. //|         //+ vpc_m_o : Viewport[ c ][ MAV ][ Output ] +//||//
  9174. //|         //+ vpc_m_i : Viewport[ c ][ MAV ][ Input  ] +//||//
  9175. //|         //+ vpc_n_o : Viewport[ c ][ NOR ][ Output ] +//||//
  9176. //|         //+ vpc_n_i : Viewport[ c ][ NOR ][ Input  ] +//||//
  9177. //|         //+ __ __ __ __ __ __ ____ __ __ __ __ __ __ +//||//
  9178. //|                                                         ||//
  9179. //|         //+//////////////////////////////////////////+//||//
  9180. //|         //+ [ rec_vpc/vpc_m_i ]TO[ rec_vp0/vp0_m_i ] +//||//
  9181. //|         //[>>>>>" Because rec_vp0 is sub region "<<<<]//||//
  9182. //|         //[>>>>>" of rec_vpc all we need is a   "<<<<]//||//
  9183. //|         //[>>>>>" simple assignment.            "<<<<]//||//
  9184. //|         vp0_m_o.x = vpc_m_i.x;                          ||//
  9185. //|         vp0_m_o.y = vpc_m_i.y;                          ||//
  9186. //|         //+//////////////////////////////////////////+//||//
  9187. //|                                                         ||//
  9188. //|         //:Output_Becomes_Input                         ||//
  9189. //|         vp0_m_i.x = vp0_m_o.x;                          ||//
  9190. //|         vp0_m_i.y = vp0_m_o.y;                          ||//
  9191. //|                                                         ||//
  9192. //|         //:------------------------------------------://||//
  9193. //|         //: [ rec_vp0 / vp0_m_i ]TO[ rec_vp2/vp2_m_o ]  ||//
  9194. //|         //: INN: vp0 ( rec_vp0 & vp0_m_i )              ||//
  9195. //|         //: OUT: vp2 ( rec_vp2 & vp2_m_o )              ||//
  9196. //|         //:------------------------------------------://||//
  9197. //|         vp2_m_o.x =( ( vp0_m_i.x   - rec_vp0.x_0 )      ||//
  9198. //|                    / ( rec_vp0.x_1 - rec_vp0.x_0 )      ||//
  9199. //|                    * ( rec_vp2.x_1 - rec_vp2.x_0 )      ||//
  9200. //|                    ) + rec_vp2.x_0 ;;;;;;;;;;;;;;;      ||//
  9201. //|         vp2_m_o.y =( ( vp0_m_i.y   - rec_vp0.y_0 )      ||//
  9202. //|                    / ( rec_vp0.y_1 - rec_vp0.y_0 )      ||//
  9203. //|                    * ( rec_vp2.y_1 - rec_vp2.y_0 )      ||//
  9204. //|                    ) + rec_vp2.y_0 ;;;;;;;;;;;;;;;      ||//
  9205. //|         //:------------------------------------------://||//
  9206. //|         DEBUG_BOUNDS_CHECK( vp2_m_o, rec_vp2 );         ||//
  9207. //|                                                         ||//
  9208. //|         //: Output_Becomes_Input:                       ||//
  9209. //|         vp2_m_i.x = vp2_m_o.x;                          ||//
  9210. //|         vp2_m_i.y = vp2_m_o.y;                          ||//
  9211. //|                                                         ||//
  9212. //|         //:------------------------------------------://||//
  9213. //|         //: YES. we are using rec_vpc AGAIN!            ||//
  9214. //|         //: The formula is just an assignment, because  ||//
  9215. //|         //: vp2 is a sub-sample of vpc.                 ||//
  9216. //|         //:                                             ||//
  9217. //|         //: [ rec_vp2 / vp2_m_i ]TO[ rec_vpc/vpc_m_o ]  ||//
  9218. //|         //: INN: vp2 ( rec_vp2 & vp2_m_i )              ||//
  9219. //|         //: OUT: vpc ( rec_vpc / vpc_m_o )              ||//
  9220. //|         //:------------------------------------------://||//
  9221. //|         vpc_m_o.x =( vp2_m_i.x );                       ||//
  9222. //|         vpc_m_o.y =( vp2_m_i.y );                       ||//
  9223. //|         //:------------------------------------------://||//
  9224. //|         DEBUG_BOUNDS_CHECK( vpc_m_o, rec_vpc );         ||//
  9225. //|                                                         ||//
  9226. //|         //: Output_Becomes_Input:                       ||//
  9227. //|         //: We already used[vpc_m_i]so we will call     ||//
  9228. //|         //: this variable  [vpc_mi2]to avoid problems.  ||//
  9229. //|         vpc_mi2.x = vpc_m_o.x;                          ||//
  9230. //|         vpc_mi2.y = vpc_m_o.y;                          ||//
  9231. //|                                                         ||//
  9232. //|         //: [ rec_vpc / vpc_m_i ]TO[ rec_vpc/vpc_n_o ]  ||//
  9233. //|         //: Formula is simpler this time because we     ||//
  9234. //|         //: only want the percentage_along_path on the  ||//
  9235. //|         //: sides of rec_vpc.                           ||//
  9236. //|         //:------------------------------------------://||//
  9237. //|         vpc_n_o.x =(( vpc_mi2.x  - rec_vpc.x_0 )        ||//
  9238. //|                    /( rec_vpc.x_1- rec_vpc.x_0 ));;     ||//
  9239. //|         vpc_n_o.y =(( vpc_mi2.y  - rec_vpc.y_0 )        ||//
  9240. //|                    /( rec_vpc.y_1- rec_vpc.y_0 ));;     ||//
  9241. //|         //:------------------------------------------://||//
  9242. //|                                                         ||//
  9243. //|         //: Output_Becomes_Input:                       ||//
  9244. //|         vpc_n_i.x = vpc_n_o.x;                          ||//
  9245. //|         vpc_n_i.y = vpc_n_o.y;                          ||//
  9246. //|                                                         ||//
  9247. //|         //:These normalized coordinates represent       ||//
  9248. //|         //:rec_vpc coordinates after rec_vp2 has        ||//
  9249. //|         //:ZOOMED and PANNED over rec_vpc.              ||//
  9250. //|         tbs_noc.x = vpc_n_i.x;                          ||//
  9251. //|         tbs_noc.y = vpc_n_i.y;                          ||//
  9252. //|                                                         ||//
  9253. //|         //:L:Log:Log_The_Results:(BELOW):------------://||//
  9254. //|         //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://||//
  9255. //|         var x = tbs_noc.x;                              ||//
  9256. //|         var y = tbs_noc.y;                              ||//
  9257. //|         console.log("[x,y]:[" + x +"]["+ y + "]");      ||//
  9258. //|                                                         ||//
  9259. //|         //:If all the math is correct, the coordinates  ||//
  9260. //|         //:should be within the bounds of the diagram.  ||//
  9261. //|         if( tbs_noc.x < 0.6 || tbs_noc.x > 0.8          ||//
  9262. //|         ||  tbs_noc.y < 0.5 || tbs_noc.y > 0.7          ||//
  9263. //|         ){                                              ||//
  9264. //|                                                         ||//
  9265. //|             var err_msg =("[YOUR_MATH_IS_WRONG]");      ||//
  9266. //|             console.log( err_msg );                     ||//
  9267. //|             throw(       err_msg );                     ||//
  9268. //|                                                         ||//
  9269. //|         };;                                             ||//
  9270. //|         //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://||//
  9271. //|                                                         ||//
  9272. //|     };; //:///////////////////////////:SC[ PT_IN_VP ]://||//
  9273. //|                                                         ||//
  9274. //| };;};;//:NEXT[ frag_coord ]                             ||//
  9275.                                                              
  9276. //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
  9277. //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
  9278. //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
  9279. //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
  9280. //:CR:Code_Reference:(ABOVE):--------------------------------://
  9281.  
  9282. //:C:Comments_Section:(BELOW):-------------------------------://
  9283. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  9284. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  9285. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  9286. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  9287.  
  9288. //:NOTES/COMMENTS:
  9289. //:     PWU_AFC: Probably_Wont_Use__Added_For_Completeness
  9290. //:              I didn't think I would need this, but I
  9291. //:              added it into the code anyways because
  9292. //:              it fufilled some type of pattern or
  9293. //:              compulsion.
  9294.  
  9295. //|:///////////////////////////:DIAGRAM[ SC[ DIA_GAM_TEX ] ]:|//
  9296. //|                                                          |//
  9297. //|     GAM: GAM_TEX: (Game_variables_as_TextureData)        |//
  9298. //|                                                          |//
  9299. //|     |<--- 2048 ---->|                                    |//
  9300. //|     +---+---+---+---+ -----                              |//
  9301. //|     |GAM|T_L|TOP|T_R|  512                               |//
  9302. //|     +---+---+---+---+ -----                              |//
  9303. //|     |HOR|LEF|CEN|RIG|  512                               |//
  9304. //|     +---+---+---+---+ -----                              |//
  9305. //|     |VER|B_L|BOT|B_R|  512                               |//
  9306. //|     +---+---+---+---+ -----                              |//
  9307. //|     |TS0|TS1|TS2|TS3|  512                               |//
  9308. //|     +---+---+---+---+ -----                              |//
  9309. //|     <--- mam_mem --->                                    |//
  9310. //|                                                          |//
  9311. //|     GAM: Game Data.                                      |//
  9312. //|     TS0,TS1,TS2,TS3: Tile Sets. TS0==Terminal.           |//
  9313. //|     HOR,VER: Horizontal+Vertical TransRooms              |//
  9314. //|     T_L,TOP,T_R,LEF,CEN,RIG,B_L,BOT,B_R: MainRooms       |//
  9315. //|                                                          |//
  9316. //|     +---+                   +---+---+---+  ---           |//
  9317. //|     |GAM| >>>>>>>>>>>>>>+   |T_L|TOP|T_R|   |            |//
  9318. //|     +---+               V   +---+---+---+   |            |//
  9319. //|                         V   |LEF|CEN|RIG|   |            |//
  9320. //|     +---+               V   +---+---+---+   |            |//
  9321. //|     |HOR|               V   |B_L|BOT|B_R|   |            |//
  9322. //|     +---+               V   +---+---+---+   |            |//
  9323. //|     |VER|               V                   |            |//
  9324. //|     +---+               V                   |            |//
  9325. //|                         V           EXPLODED_VIEW        |//
  9326. //|     +---+---+---+---+   V                   |            |//
  9327. //|     |TS0|TS1|TS2|TS3|   V                   |            |//
  9328. //|     +---+---+---+---+   V --------------------           |//
  9329. //|                         V                                |//
  9330. //|     |<---------------- GAM ---------------->|            |//
  9331. //|     |                                       |            |//
  9332. //|     |<---------------- 64 ----------------->|            |//
  9333. //|     |                                       |            |//
  9334. //|     +----+----+----+----+----+----+----+----+ =====      |//
  9335. //|     | 08 | 08 |         |                   |  |||       |//
  9336. //|     +----+----+    16   +                   +  |||       |//
  9337. //|     | 08 | 08 |         |                   |  |||       |//
  9338. //|     +----+----+----+----+        32         +  |||       |//
  9339. //|     |         |         |                   |  |||       |//
  9340. //|     +    16   +    16   +                   +  |||       |//
  9341. //|     |         |         |                   |  |||       |//
  9342. //|     +----+----+----+----+----+----+----+----+  GAM       |//
  9343. //|     |                   |                   |  |||       |//
  9344. //|     +                   +                   +  |||       |//
  9345. //|     |                   |                   |  |||       |//
  9346. //|     +        32         +        32         +  |||       |//
  9347. //|     |                   |                   |  |||       |//
  9348. //|     +                   +                   +  |||       |//
  9349. //|     |                   |                   |  |||       |//
  9350. //|     +----+----+----+----+----+----+----+----+  |||       |//
  9351. //|      \                                     /   |||       |//
  9352. //|       \                                   /    |||       |//
  9353. //|        +---------------------------------+     |||       |//
  9354. //|        |                                       |||       |//
  9355. //|        |                                       |||       |//
  9356. //|     +--|-+----+----+----+----+----+----+----+  |||       |//
  9357. //|     |ABOV| 64 |         |                   |  |||       |//
  9358. //|     +----+----+   128   +                   +  |||       |//
  9359. //|     | 64 | 64 |         |                   |  |||       |//
  9360. //|     +----+----+----+----+       256         +  |||       |//
  9361. //|     |         |         |                   |  |||       |//
  9362. //|     +   128   +   128   +                   +  |||       |//
  9363. //|     |         |         |                   |  |||       |//
  9364. //|     +----+----+----+----+----+----+----+----+  GAM       |//
  9365. //|     |                   |                   |  |||       |//
  9366. //|     +                   +                   +  |||       |//
  9367. //|     |                   |                   |  |||       |//
  9368. //|     +        256        +       256         +  |||       |//
  9369. //|     |                   |                   |  |||       |//
  9370. //|     +                   +                   +  |||       |//
  9371. //|     |                   |                   |  |||       |//
  9372. //|     +----+----+----+----+----+----+----+----+  |||       |//
  9373. //|      \                                     /   |||       |//
  9374. //|       \                                   /    |||       |//
  9375. //|        +---------------------------------+     |||       |//
  9376. //|        |                                       |||       |//
  9377. //|        |                                       |||       |//
  9378. //|     +--|-+----+----+----+----+----+----+----+  |||       |//
  9379. //|     |                                       |  |||       |//
  9380. //|     +                                       +  |||       |//
  9381. //|     |                                       |  |||       |//
  9382. //|     +                                       +  |||       |//
  9383. //|     |                                       |  |||       |//
  9384. //|     +                                       +  |||       |//
  9385. //|     |                                       |  |||       |//
  9386. //|     +                GAM_TEX                +  GAM       |//
  9387. //|     |                  512                  |  |||       |//
  9388. //|     +                                       +  |||       |//
  9389. //|     |                                       |  |||       |//
  9390. //|     +                                       +  |||       |//
  9391. //|     |                                       |  |||       |//
  9392. //|     +                                       +  |||       |//
  9393. //|     |                                       |  |||       |//
  9394. //|     +----+----+----+----+----+----+----+----+ =====      |//
  9395. //|     |                                       |            |//
  9396. //|     |<---------------- 512 ---------------->|            |//
  9397. //|     |                                       |            |//
  9398. //|                                                          |//
  9399. //|:///////////////////////////:DIAGRAM[ SC[ DIA_GAM_TEX ] ]:|//
  9400.  
  9401. //: ## non-fancy uniforms:
  9402. //: ############################################################
  9403. //: ##      1: has_mem
  9404. //: ##      2: ren_mod
  9405. //: ##      3: edi_mod
  9406. //: ##      4: gam_tim //:gameTime
  9407. //: ##      5: dex_hot //:HotSwappedMemoryBlockIndex
  9408. //: ##                    Use values 1-16 so zero can mean
  9409. //: ##                    "nothing hot swapped".
  9410. //: ############################################################
  9411.  
  9412. //: editor_list:
  9413. //:     edi_all : EditorAll, the master editor.
  9414. //:     edi_001 : Test bed shader code editor. 0-9 editors.
  9415. //:     edi_002 : Tile camera editor.
  9416.  
  9417. //:  PROCOOP: PROcedural_OOP
  9418. //:          Procedural Function Using:
  9419. //:          Object Orientation Pattern
  9420.  
  9421. //:  NON_NEG: NON_NEGATIVE_NUMBER ( x >= 0 )
  9422.  
  9423. //:  WHO_NUM_INC: WHOle_NUMber_INClusive
  9424.  
  9425. //: #PAK_ROW_LEN_URL#
  9426. //:     www.khronos.org/registry/OpenGL-Refpages/es3.0
  9427. //:    /html/glPixelStorei.xhtml
  9428.  
  9429. //: #OGL_PIX_TRN_URL#
  9430. //:     www.khronos.org/opengl/wiki/Pixel_Transfer
  9431.  
  9432. //: #MSDN_STRIDE_URL#
  9433. //:     docs.microsoft.com/en-us/windows
  9434. //:     /win32/medfound/image-stride
  9435.  
  9436. //: #TSI2D_FORMAT#
  9437.     //:Was wondering if I needed to use
  9438.     //:the internal format or source format.
  9439.     //:Since the texture was already set up using
  9440.     //:texImage2D it makes the most sense that
  9441.     //:the format and type describe the CPU-side
  9442.     //:data and not the GPU-side (internal) data.
  9443.  
  9444. //: Namspaced_Functions: TYPO_YOU_WANT[ Namespaced_Functions ]
  9445.  
  9446. //: #CANVAS_SIZE_TROUBLE_SHOOTING#:
  9447. ////////////////////////////////////////////////////////////////
  9448.  
  9449.             //:CS:Canvas_Size:
  9450.             //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
  9451.             //:                                              ://
  9452.             //: This was originally written for trouble      ://
  9453.             //: shooting. It didn't solve the problem.       ://
  9454.             //: The problem was:                             ://
  9455.             //:                                              ://
  9456.             //:     1: I wasn't sampling from the texture    ://
  9457.             //:        I thought I was sampling from.        ://
  9458.             //:                                              ://
  9459.             //:     2: The uniforms were never set for my    ://
  9460.             //:        texture samplers, thus all samplers   ://
  9461.             //:        defaulted to sampling texture0.       ://
  9462.             //:                                              ://
  9463.             //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
  9464.  
  9465. ////////////////////////////////////////////////////////////////
  9466.  
  9467. //#TODO: Because this object's bounds is located at [0,0]    #//
  9468. //#      try and have a hackish way to swap what texture     #//
  9469. //#      it is hooked up to so we can get visual feedback    #//
  9470. //#      that the data is working as expected.               #//
  9471. //#                                                          #//
  9472. //#      In fact... there should be a way for ANY            #//
  9473. //#      memory region to be swapped out and put on the      #//
  9474. //#      512x512 so we can visually look at and inspect      #//
  9475. //#      it. A "hot swap" so none of the values are          #//
  9476. //#      corrputed.                                          #//
  9477. //#                                                          #//
  9478. //#      There should be an editor called "hotswapper"       #//
  9479. //#      that when active can swap one of the 16 texture     #//
  9480. //#      sub regions on mam_mem into iso_mem.                #//
  9481.  
  9482.     //:AKA[ texelget | get_texel | texel_get    ]
  9483.     //:AKA[ texelfetch | texel_fetch | ........ ]
  9484.     //:AKA[ fetchtexel | gettexel | fetch_texel ]
  9485.     //:AKA[ texeGet | texe_get | tex_get        ]
  9486.     //: 1: Get_Tex_iso_mem
  9487.     //: 2: Get_Tex_mam_mem
  9488.     //: 3: Get_Tex_iso_mem_rot
  9489.     //: 4: Get_Tex_mam_mem_rot
  9490.  
  9491.  
  9492.     //:Weird things I say and what I mean:
  9493.     //://////////////////////////////////////////////////////://
  9494.     /**:****************************************************:[_]
  9495.  
  9496.     [raw_data_view]:
  9497.         All of the rendering data and game data is encoded
  9498.         as pixels. A "raw_data_view" is essentially looking
  9499.         at the level-maps and other data in their
  9500.         "ms-paint" representation rather than the
  9501.         "in game" representation.
  9502.    
  9503.     [C11_dictates_PRIVATE_HIDDEN_before_PUBLIC_VISIBLE]:
  9504.         Public functions are very likely to call private
  9505.         functions. But do NOT allow it the other way around.
  9506.         Thus in order of dependency with 1-pass compiling,
  9507.         we must put the private functions FIRST.
  9508.  
  9509.     [COMLINK_D_XY_TO_LD_XY_2020_06_01]:
  9510.         Comment Link between source code in DAS_BOR.HTM
  9511.         And it's equivalent in ICOG.JS at time of writing
  9512.         this. Converts a screen coordinate [ d_x , d_y ]
  9513.         to a local coordinate over the off-screen data
  9514.         [ ldx , ldy ].
  9515.  
  9516.     [CAM_TXY_IS_CAM_UNITS]:
  9517.     [CAM_TXY_IS_IN_CAMERA_UNITS_NOT_TILE_UNITS]:
  9518.     [CAM_TXY_IS_CAMERA_XY_MEASURED_IN_CAMERAS]:
  9519.     [CAM_TXY_IS_NOT_A_TOPLEFT_ORIGIN_TILE]:
  9520.         [ cam_t_x , cam_t_y ] does not represent a
  9521.         [tile/pixel] in the top left of the camera.
  9522.    
  9523.         It is the "camera's xy position measured in cameras".
  9524.  
  9525.     [_]:****************************************************:**/
  9526.  
  9527.    
  9528.  
  9529. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  9530. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  9531. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  9532. //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
  9533. //:C:Comments_Sections:(ABOVE):------------------------------://
Add Comment
Please, Sign In to add comment