Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //:Summary: This is an OpenGL adaptation of ::::::::::://
- //: DAS_BOR.HTM using the youtube ::::::::::://
- //: video tutorial below to help ::::::::::://
- //: me get started: ::::::::::://
- //:ICOG: Indigo Code Open GL ::::::::::://
- //:IC01: indigo code 01: ::::::::::://
- //:https://www.youtube.com/watch?v=kB0ZVUrI4Aw ::::::::::://
- //:___AUTHOR[ John_Mark_Isaac_Madison ______]
- //:_____DATE[ 2020_06_02 ___________________]
- //:PASTE_BIN[ https://pastebin.com/zbCj283k ]
- //:YOU__TUBE[ www.youtube.com/channel/UCoqC7gqrxjD1odmQUxch7ew ]
- document.title="[ICOG.JS]";
- //://////////////////////////////////////////////////////////://
- //:GW: Global_Whatever:----------------------------------://
- //:GWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGW:SC[JSGW_VARS]://
- //: ://
- //:Containers organized in initialization order. ://
- //:GLO_CFG: CONFIG ://
- //: Primitive values only. ://
- //: NOT_ALLOWED: ://
- //: 1: Function Calls. ://
- //: 2: Structs. ://
- //: ALLOWED: ://
- //: Constant expressions as int, ://
- //: float, string. ://
- //: ://
- //:GLO_DAT: DATA ://
- //: Primitive types and structs. ://
- //: ( struct ~=~ class with no methods ) ://
- //: ://
- //:GLO_FUN: FUNCTIONS: ://
- //: Functions in the procedural sense. They are ://
- //: loose functions that are NOT part of a class. ://
- //: MEMBER METHODS DO NOT BELONG HERE. ://
- //: If function put into GLO_FUN is namespaced, ://
- //: the namespace should be accomplished using ://
- //: "plain C" style syntax. ://
- //: ://
- //: YES: MYNAMESPACE_FunctionName ://
- //: WRONG: MYNAMESPACE.FunctionName ://
- //: ://
- //:GLO_CLA: CLASSES: ://
- //: Previously named "GLO_OBJ" but the word "object" ://
- //: is much to vauge. Any data structure that ://
- //: combines both DATA and FUNCTIONS. ://
- //:GWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGW:SC[JSGW_VARS]://
- var NIL = "[NIL]"; //:Stand-in for null pointer.
- var GLO_CFG = null; //:GLOBAL_CONFIGURATION
- var GLO_DAT = null; //:GLOBAL_DATA
- var GLO_FUN = null; //:GLOBAL_FUNCTIONS
- var GLO_CLA = null; //:GLOBAL_CLASSES (AKA:GLO_OBJ)
- //:GWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGW:SC[JSGW_VARS]://
- //://////////////////////////////////////////////////////////://
- function main(){ //://///////////////////////////////////://
- //:IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII:SC[ JSGW_INIT ]://
- GLO_CFG=( INI_GLO_CFG( ) ); //:PRIMITIVES/CONFIGURATION
- Object.seal( GLO_CFG ); //:PRIMITIVES/CONFIGURATION
- GLO_DAT=( INI_GLO_DAT( ) ); //:DATA
- Object.seal( GLO_DAT ); //:DATA
- GLO_FUN=( INI_GLO_FUN( ) ); //:FUNCTIONS
- Object.seal( GLO_FUN ); //:FUNCTIONS
- GLO_CLA=( INI_GLO_CLA( ) ); //:CLASSES/OBJECTS:AKA:GLO_OBJ
- Object.seal( GLO_CLA ); //:CLASSES/OBJECTS:AKA:GLO_OBJ
- //:IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII:SC[ JSGW_INIT ]://
- //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://
- //:Initialize other stuff that couldn't be handled
- //:by our coarse initialization order by categories.
- //:( Categories[ GLO_CFG,GLO_DAT,GLO_FUN,GLO_CLA ] )
- //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://
- ;;;INI_GLO_001();function INI_GLO_001(){ //://///////://
- //://////////////////////////////////////////////://
- //:This is ugly and possibly overly convouted.
- //:I am not sure. Let's just keep it this way.
- //:We will know if it is overly convoluted
- //:once we transcribe it to C-11 code.
- //://////////////////////////////////////////////://
- GLO_DAT.loo_tab.nat_win =(
- GLO_FUN.LOOP_TABLE_TICK_nat_win );;
- GLO_DAT.loo_tab.gam_obj =(
- GLO_FUN.LOOP_TABLE_TICK_gam_obj );;
- GLO_DAT.loo_tab.ren_log =(
- GLO_FUN.LOOP_TABLE_TICK_ren_log );;
- //://////////////////////////////////////////////://
- };;INI_GLO_002();function INI_GLO_002(){ //://///////://
- //:VS:VarSync:GPU<==>CPU:sync_all_vars:(BELOW):--://
- //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://
- //:PV:Persist_Viewport_rectangles:(BELOW):---://
- //:PVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPV://
- { //:SCOPE:////://///////////////////////////://
- //:**************************************://
- //:Viewport rectangles are #PIXEFOG# ://
- //:They do not exist structurally. ://
- //:**************************************://
- //:rec_vpc: Exists_In_The_Pixel_Fog(PIXEFOG)
- //:rec_vp0: Exists_In_The_Pixel_Fog(PIXEFOG)
- //:rec_vp1: Exists_In_The_Pixel_Fog(PIXEFOG)
- let rec_vpc = NEW_rec_inc(); //:CLIENT -//
- let rec_vp0 = NEW_rec_inc(); //:DEST -//
- let rec_vp1 = NEW_rec_inc(); //:SOURCE -//
- let rec_vp2 = NEW_rec_inc(); //:ZOOMER -//
- let I_V = ( GLO_DAT.INI_VAL );
- //: vpc: [ canvas / client ] viewport:
- rec_vpc.x_0 = ( I_V.INI_REC_VPC_x_0 );
- rec_vpc.x_1 = ( I_V.INI_REC_VPC_x_1 );
- rec_vpc.y_0 = ( I_V.INI_REC_VPC_y_0 );
- rec_vpc.y_1 = ( I_V.INI_REC_VPC_y_1 );
- //: vp0: OnScreen Visible Viewport:
- rec_vp0.x_0 = ( I_V.INI_REC_VP0_x_0 );
- rec_vp0.x_1 = ( I_V.INI_REC_VP0_x_1 );
- rec_vp0.y_0 = ( I_V.INI_REC_VP0_y_0 );
- rec_vp0.y_1 = ( I_V.INI_REC_VP0_y_1 );
- //: vp1: Offscreen_Data_Sampler_Viewport:
- rec_vp1.x_0 = ( I_V.INI_REC_VP1_x_0 );
- rec_vp1.x_1 = ( I_V.INI_REC_VP1_x_1 );
- rec_vp1.y_0 = ( I_V.INI_REC_VP1_y_0 );
- rec_vp1.y_1 = ( I_V.INI_REC_VP1_y_1 );
- //: vp2: 0% zoomed when covering vp0 100%.
- rec_vp2.x_0 = ( I_V.INI_REC_VP2_x_0 );
- rec_vp2.x_1 = ( I_V.INI_REC_VP2_x_1 );
- rec_vp2.y_0 = ( I_V.INI_REC_VP2_y_0 );
- rec_vp2.y_1 = ( I_V.INI_REC_VP2_y_1 );
- GLO_CLA.ada_var.Put_GLOBVAR_rec_vpc(
- rec_vpc );;
- GLO_CLA.ada_var.Put_GLOBVAR_rec_vp0(
- rec_vp0 );;
- GLO_CLA.ada_var.Put_GLOBVAR_rec_vp1(
- rec_vp1 );;
- GLO_CLA.ada_var.Put_GLOBVAR_rec_vp2(
- rec_vp2 );;
- } //:SCOPE:////://///////////////////////////://
- //:PVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPV://
- //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://
- //:VS:VarSync:GPU<==>CPU:sync_all_vars:(BELOW):--://
- //:AI:After_Init:(BELOW):------------------------://
- //:AIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAI://
- //: Do_Here:
- //: 1: Init to more DESIREABLE state.
- //: 2: Init to a VALID state.
- //:AIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAI://
- //:EDITOR_INITS[ E1 | E2 | E3 | ... ](BELOW):://
- //:==========================================://
- //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
- GLO_CLA.ada_var.Put_EDIT001_dex_sha( 0 );
- //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
- //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
- GLO_CLA.ada_var.Put_EDIT002_cam_t_x( 0 );
- GLO_CLA.ada_var.Put_EDIT002_cam_t_y( 0 );
- GLO_CLA.ada_var.Put_EDIT002_dex_hot( 16 );
- GLO_CLA.ada_var.Put_EDIT002_use_hyp( 0 );
- //:DOES_BOTH: Put_EDIT002_til_exp( til_exp)
- //:DOES_BOTH: Put_EDIT002_til_san( 2^til_exp)
- aa2_STATIC_HACK_EDIT002_Put_til_exp_AND_til_san(
- 4 /** til_exp: 4 ===> til_san: 16 **/
- /** Because: 2^4 is 16. **/
- );;
- //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
- //:==========================================://
- //:EDITOR_INITS[ E1 | E2 | E3 | ... ](ABOVE):://
- //:AIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAIAI://
- //:AI:After_Init:(ABOVE):------------------------://
- };;//:///////////////////////////////////////////////://
- //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://
- //:ML:MainLoop:(BELOW):------------------------------://
- //:MLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLML://
- //:ENTER_FOREVER_LOOP:
- window.requestAnimationFrame(
- AA2_InlinedMainLoopTick_NotAFunctionWhenIn_C11);;
- function //:while( 1 )
- AA2_InlinedMainLoopTick_NotAFunctionWhenIn_C11(){
- GLO_FUN.loop_table_tick(
- GLO_DAT.loo_tab
- );;
- //:Next loop iteration via recursive call:
- window.requestAnimationFrame(
- AA2_InlinedMainLoopTick_NotAFunctionWhenIn_C11
- );;
- };; //://////////////////////////////////////////////://
- //:MLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLML://
- };; //://////////////////////////////////////////////////://
- //:GI:Global_Initialization:(BELOW):-------------------------://
- //:GIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGI:SC[JSGW_BODY]://
- //: ://
- //: ORDER: ://
- //: 1. INI_GLO_CFG ( Const Expressions Only ) ://
- //: 1. INI_GLO_DAT ( DATA / PRIMITIVES / STRUCTS ) ://
- //: 2. INI_GLO_FUN ( FUNCTIONS / PROCEDURES ) ://
- //: 3. INI_GLO_CLA ( CLASSES / OBJECTS ) ://
- //: ://
- //:GIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGI:SC[JSGW_BODY]://
- //://////////////////////////////////////////////////////://
- ;;;function INI_GLO_CFG( ){ //://///////////////////////://
- "use strict" //://///////////////////////://
- //://////////////////////////////////////////////////////://
- var GLO_CFG ={
- /**/NUM_HOT:( 16 ) //:NumberOfHotSwapRectangles
- //:AKA[ HOT_LEN ]
- , SAN_ISO:( 512 * 1 )
- , SAN_MAM:( 512 * 4 )
- //:VP:Viewport:(BELOW):--------------------------://
- //:VPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVP://
- //:DESIGN_NOTE: VPC always fills the entire
- //: canvas. Or if a win32 application,
- //: fills the entire CLIENT AREA.
- //: The [ OpenGL / WegGl ] viewport
- //: always fills 100% of VPC.
- //:
- //: THUS! VPC can mean:
- //: [Canvas | gl.Viewport | ClientArea]
- //: This ambiguity is intentional,
- //: because they should always be
- //: identical.
- //:
- //:VP0:ViewportZero AKA [Screen/Dest] viewport.
- //:VPC:ViewportCanvas AKA [gl.viewport] viewport.
- , INI_VPC_WID : 512 //:Initial__ViewPortCanvas__WID
- , INI_VPC_HIG : 512 //:Initial__ViewPortCanvas__HIG
- //:VPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVPVP://
- //:VP:Viewport:(ABOVE):--------------------------://
- //:TU0: Texure_as_Uniform( block 0 ):
- //:Very intentional that we are not using
- //:"rec_inc" types here. Want these values to
- //:be able to appear in shader code the exact
- //:same way.
- , TAU_001_x0 : ( 0 ) //:TEXTURE_DATA_MAPPING
- , TAU_001_x1 : ( 8 - 1 ) //:TEXTURE_DATA_MAPPING
- , TAU_001_y0 : ( 0 ) //:TEXTURE_DATA_MAPPING
- , TAU_001_y1 : ( 8 - 1 ) //:TEXTURE_DATA_MAPPING
- //:TAU_001: uniform enums:
- //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
- //:Values assigned are local pixel [locations/indexes].
- //:They must be:
- //: 1: NON_NEGATIVE
- //: 2: WITHIN_BOUNDS_OF: TAU_000_[x0,x1,y0,y1]
- //: 3: NON_OVERLAPPING
- //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //[ Visual Debugging Guide: Index <==> XY ___________]//
- //++-----------------------------------------------+-+//
- //+| . 00 . 01 . 02 . 03 . 04 . 05 . 06 . 07 |-+//
- //+| +----+----+----+----+----+----+----+----+ |-+//
- //+|00 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 00|-+//
- //+|-- +----+----+----+----*----+----+----+----+ --|-+//
- //+|01 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 01|-+//
- //+|-- +----+----+----+----*----+----+----+----+ --|-+//
- //+|02 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 02|-+//
- //+|-- +----+----+----+----*----+----+----+----+ --|-+//
- //+|03 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 03|-+//
- //+|-- +****+****+****+>>>>*<<<<+****+****+****+ --|-+//
- //+|04 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 04|-+//
- //+|-- +----+----+----+----*----+----+----+----+ --|-+//
- //+|05 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 05|-+//
- //+|-- +----+----+----+----*----+----+----+----+ --|-+//
- //+|06 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 06|-+//
- //+|-- +----+----+----+----*----+----+----+----+ --|-+//
- //+|07 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 07|-+//
- //+|-- +----+----+----+----+----+----+----+----+ --|-+//
- //+| . 00 . 01 . 02 . 03 . 04 . 05 . 06 . 07 |-+//
- //++-----------------------------------------------+-+//
- //:KEEP_ALL_GROUPED_TOGETHER_SO_YOU_CAN_SPOT_ERRORS:
- , TAU_001_GLOBVAR_rec_vpc_x_0 : ( 0 ) //:rec_vpc.x_0
- , TAU_001_GLOBVAR_rec_vpc_x_1 : ( 1 ) //:rec_vpc.x_1
- , TAU_001_GLOBVAR_rec_vpc_y_0 : ( 2 ) //:rec_vpc.y_0
- , TAU_001_GLOBVAR_rec_vpc_y_1 : ( 3 ) //:rec_vpc.y_1
- , TAU_001_GLOBVAR_rec_vp0_x_0 : ( 4 ) //:rec_vp0.x_0
- , TAU_001_GLOBVAR_rec_vp0_x_1 : ( 5 ) //:rec_vp0.x_1
- , TAU_001_GLOBVAR_rec_vp0_y_0 : ( 6 ) //:rec_vp0.y_0
- , TAU_001_GLOBVAR_rec_vp0_y_1 : ( 7 ) //:rec_vp0.y_1
- , TAU_001_GLOBVAR_rec_vp1_x_0 : ( 8 ) //:rec_vp1.x_0
- , TAU_001_GLOBVAR_rec_vp1_x_1 : ( 9 ) //:rec_vp1.x_1
- , TAU_001_GLOBVAR_rec_vp1_y_0 : ( 10 ) //:rec_vp1.y_0
- , TAU_001_GLOBVAR_rec_vp1_y_1 : ( 11 ) //:rec_vp1.y_1
- , TAU_001_GLOBVAR_rec_vp2_x_0 : ( 12 ) //:rec_vp1.x_0
- , TAU_001_GLOBVAR_rec_vp2_x_1 : ( 13 ) //:rec_vp1.x_1
- , TAU_001_GLOBVAR_rec_vp2_y_0 : ( 14 ) //:rec_vp1.y_0
- , TAU_001_GLOBVAR_rec_vp2_y_1 : ( 15 ) //:rec_vp1.y_1
- , TAU_001_EDIT001_dex_sha : ( 16 ) //:TestShaderDex
- , TAU_001_EDIT002_til_exp : ( 17 ) //:Tile_Exponent
- , TAU_001_EDIT002_til_san : ( 18 ) //:Tile_Span
- , TAU_001_EDIT002_cam_t_x : ( 19 ) //:Tile_X
- , TAU_001_EDIT002_cam_t_y : ( 20 ) //:Tile_Y
- , TAU_001_EDIT002_dex_hot : ( 21 ) //:MemBlockIndex
- , TAU_001_EDIT002_use_hyp : ( 22 ) //:MemBlockIndex
- , TAU_001_ENUMCAP : ( 64 ) //:LEN:64,M_I:63
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:*EDIT001*[ edi_001 (editor #1) Variables ]
- //: edi_001: Test_Bed_Shader_Editor
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:*EDIT002*[ edi_001 (editor #2) Variables ] ://
- //: edi_002:Raw Data Editor With Tile Abstraction. ://
- //: This is the groundwork for the ://
- //: auset (autotileset) editor... But ://
- //: I don't want to add too much extra ://
- //: functionality. So let's just use this ://
- //: as a way to visually edit ANY data on ://
- //: the master memory block or iso memory ://
- //: block. With maybe... Some type of ://
- //: saftey lock on the GAM_TEX sub section. ://
- //: ://
- //: Once finished, we can use this editor's ://
- //: code as REFERENCE ( NOT REFACTOR IT) ://
- //: to build edi_003 (Auset Editor) ://
- //: ://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
- //|//////////////////////////////////////////////////|//
- //| |//
- //| MEC_DEX:MEmoryCell_inDEX: |//
- //| |//
- //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
- //| |GAM|T_L|TOP|T_R| 512 ::::::::::::::::::::::::|//
- //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
- //| |HOR|LEF|CEN|RIG| 512 ::::::::::::::::::::::::|//
- //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
- //| |VER|B_L|BOT|B_R| 512 ::::::::::::::::::::::::|//
- //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
- //| |TS0|TS1|TS2|TS3| 512 ::::::::::::::::::::::::|//
- //| +---+---+---+---+ -----. ::::::::::::::::::::::::|//
- //|________________________. ::::::|//
- , MEC_DEX_GAM : ( 1 - 1) //| GAM : GAM_TEX ::::::|//
- , MEC_DEX_T_L : ( 2 - 1) //| T_L : TOP_LEF ::::::|//
- , MEC_DEX_TOP : ( 3 - 1) //| TOP : TOP ::::::|//
- , MEC_DEX_T_R : ( 4 - 1) //| T_R : TOP_RIG ::::::|//
- , MEC_DEX_HOR : ( 5 - 1) //| HOR : HOR ::::::|//
- , MEC_DEX_LEF : ( 6 - 1) //| LEF : LEF ::::::|//
- , MEC_DEX_CEN : ( 7 - 1) //| CEN : CEN ::::::|//
- , MEC_DEX_RIG : ( 8 - 1) //| RIG : RIG ::::::|//
- , MEC_DEX_VER : ( 9 - 1) //| VER : VER ::::::|//
- , MEC_DEX_B_L : (10 - 1) //| B_L : BOT_LEF ::::::|//
- , MEC_DEX_BOT : (11 - 1) //| BOT : BOT ::::::|//
- , MEC_DEX_B_R : (12 - 1) //| B_R : BOT_RIG ::::::|//
- , MEC_DEX_TS0 : (13 - 1) //| TS0 : TIL_SET:000 ::::::|//
- , MEC_DEX_TS1 : (14 - 1) //| TS1 : TIL_SET:001 ::::::|//
- , MEC_DEX_TS2 : (15 - 1) //| TS2 : TIL_SET:002 ::::::|//
- , MEC_DEX_TS3 : (16 - 1) //| TS3 : TIL_SET:003 ::::::|//
- //:Memory Cells that hot swapping points to:
- , MEC_DEX_MIN : ( 0 ) //:0_INDEXED
- , MEC_DEX_MAX : ( 15 ) //:0_INDEXED
- //:Hot Swapping index:
- , DEX_HOT_MIN : ( 1 ) //:1_INDEXED
- , DEX_HOT_MAX : ( 16 ) //:1_INDEXED
- //| |//
- //|__________________________________________________|//
- };;//:<<<[GLO_CFG]<<<<<<<<<<<<<<<<<<<<<<<<<<[GLO_CFG]://
- //:Codify/MakeExplicit the relationship between
- //:"MEC_DEX" and "DEX_HOT" values.
- //: MEC_DEX: MemoryCellIndex
- //: DEX_HOT: HotSwappingIndex
- //:ECECECECECECECECECECECECECECECECECECECECECECEC://
- if( ( GLO_CFG.MEC_DEX_MIN * 1 )
- != ( GLO_CFG.DEX_HOT_MIN - 1 )
- ){
- throw("[VALUES_SHOULD_DIFFER_ONLY_BY_ONE:MIN]");
- };;
- if( ( GLO_CFG.MEC_DEX_MAX * 1 )
- != ( GLO_CFG.DEX_HOT_MAX - 1 )
- ){
- throw("[VALUES_SHOULD_DIFFER_ONLY_BY_ONE:MAX]");
- };;
- //:ececececececececececececececececececececececec://
- //:
- //: Further error checking. I realize that many ://
- //: of these values could just be computed at ://
- //: runtime, but HARDCODING and then error ://
- //: checking at run time ironically gives us ://
- //: MORE flexibility when we move to C11. ://
- //: It also makes the code less abstract and ://
- //: easier to read in my opinion. ://
- //: -John_Mark, DATE[ 2020_05_30 ] ://
- //: ://
- //:ececececececececececececececececececececececec://
- var san_hot = ( GLO_CFG.SAN_MAM
- /GLO_CFG.SAN_ISO );;
- if( ( san_hot * san_hot ) //:MultiplyBothSides
- != ( GLO_CFG.NUM_HOT ) //:ToGetTotalSquares
- ){
- throw("[BAD_CFG:NUM_HOT]");
- };;
- if( GLO_CFG.NUM_HOT
- != GLO_CFG.DEX_HOT_MAX
- ){
- throw("[BAD_CFG:(MEC_DEX_*)&(DEX_HOT_*)]");
- };;
- //:ECECECECECECECECECECECECECECECECECECECECECECEC://
- Object.freeze( GLO_CFG );
- return( GLO_CFG );
- //://////////////////////////////////////////////////////://
- };;function INI_GLO_DAT( ){ //://///////////////////////://
- "use strict" //://///////////////////////://
- //://////////////////////////////////////////////////////://
- //:Enum:GlobalEvent:Types-&-SubTypes:
- var eve_bit ={ //:Event_Bits(ForEventTypes)
- eve_typ_BAD : ( 1 << 0 )>>>0 //:INVALID
- //:eve_typ:Main_Event_Types:
- , eve_typ_KEY : ( 1 << 1 )>>>0 //:KEY:KEYBOARD
- , eve_typ_MOU : ( 1 << 2 )>>>0 //:MOU:MOUSE
- //:sub_typ:Event_Sub_Types
- , sub_typ_KUD : ( 1 << 3 )>>>0 //:KUD:KeyUpDown
- , sub_typ_CLK : ( 1 << 4 )>>>0 //:CLK:Click
- , sub_typ_K_D : ( 1 << 5 )>>>0 //:KEY:DOWN
- , sub_typ_K_U : ( 1 << 6 )>>>0 //:KEY:UP
- , sub_typ_M_D : ( 1 << 7 )>>>0 //:MOU:DOWN
- , sub_typ_M_U : ( 1 << 8 )>>>0 //:MOU:UP
- , sub_typ_M_M : ( 1 << 9 )>>>0 //:MOU:MOVE
- };;Object.freeze( eve_bit );
- //:USED FOR:
- //: 1: Swapping mam_mem section into iso_mem
- //: so we can look at it.
- //: 2: Suffling around levels in focus as
- //: you walk from room to room.
- //:Hot swapping rectangles indexed [ 1 - 16 ]
- //:Zero is invalid index so dex_hot uniform's
- //:zero initialization will be interpreted as invalid.
- var arr_hot=[ null /**---- ZERO_SLOT_ALWAYS_NULL ----**/
- //:hot_rec[ 1 - 4 ] dex_hot==[ 1 - 4 ] //:------://
- , NEW_rec_inc_MAD_rec_hot( 0 , 0 ) //: 01 ://
- , NEW_rec_inc_MAD_rec_hot( 1 , 0 ) //: 02 ://
- , NEW_rec_inc_MAD_rec_hot( 2 , 0 ) //: 03 ://
- , NEW_rec_inc_MAD_rec_hot( 3 , 0 ) //: 04 ://
- //:hot_rec[ 5 - 8 ] dex_hot==[ 5 - 8 ] //:------://
- , NEW_rec_inc_MAD_rec_hot( 0 , 1 ) //: 05 ://
- , NEW_rec_inc_MAD_rec_hot( 1 , 1 ) //: 06 ://
- , NEW_rec_inc_MAD_rec_hot( 2 , 1 ) //: 07 ://
- , NEW_rec_inc_MAD_rec_hot( 3 , 1 ) //: 08 ://
- //:hot_rec[ 9 -12 ] dex_hot==[ 9 -12 ] //:------://
- , NEW_rec_inc_MAD_rec_hot( 0 , 2 ) //: 09 ://
- , NEW_rec_inc_MAD_rec_hot( 1 , 2 ) //: 10 ://
- , NEW_rec_inc_MAD_rec_hot( 2 , 2 ) //: 11 ://
- , NEW_rec_inc_MAD_rec_hot( 3 , 2 ) //: 12 ://
- //:hot_rec[13 -16 ] dex_hot==[13 -16 ] //:------://
- , NEW_rec_inc_MAD_rec_hot( 0 , 3 ) //: 13 ://
- , NEW_rec_inc_MAD_rec_hot( 1 , 3 ) //: 14 ://
- , NEW_rec_inc_MAD_rec_hot( 2 , 3 ) //: 15 ://
- , NEW_rec_inc_MAD_rec_hot( 3 , 3 ) //: 16 ://
- //:---------------------------------------:----:-://
- ];; //://////////////////////////////////////////////://
- let BOU =( GLO_CFG.SAN_ISO );
- if( BOU != 512 ){
- throw("[InspectCodeForBreaksBeforeRemovingThis]");
- };;
- let VPC_WID = GLO_CFG.INI_VPC_WID;
- let VPC_HIG = GLO_CFG.INI_VPC_HIG;
- var GLO_DAT = {
- eve_bit : eve_bit
- ,
- arr_hot : arr_hot
- ,
- event_listeners_registered : 0
- ,
- //:Global Event Object For Keyboard And Mouse
- //:user input. Widdled down version of "nat_eve"
- glo_eve : NEW_glo_eve()
- ,
- //:LoopTable. (Main loop struct)
- loo_tab : NEW_loo_tab()
- ,
- INI_VAL:{ //:[INITIAL/STARTING] values. /////////://
- //://////////////////////////////////////////://
- //:Initial Spans for texture memory:
- //:[ ada_gra.iso_mem.[ pix_wid | pix_hig ] ]
- //:[ ada_gra.mam_mem.[ pix_wid | pix_hig ] ]
- //- SAN_ISO : 512 //:INI_SAN_iso_mem -//
- SAN_ISO : GLO_CFG.SAN_ISO
- //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
- //| |<---------- san_wid ---------->| |//
- //| |<---------- san_mam ---------->| |//
- //| +-------+-------+-------+-------+ |//
- //| | | | | | |//
- //| |san_iso|san_iso|san_iso|san_iso| |//
- //| | | | | | |//
- //| +-------+-------+-------+-------+ |//
- //| | | | | | |//
- //| |san_iso|san_iso|san_iso|san_iso| |//
- //| | | | | | |//
- //| +-------+-------+-------+-------+ |//
- //| | | | | | |//
- //| |san_iso|san_iso|san_iso|san_iso| |//
- //| | | | | | |//
- //| +-------+-------+-------+-------+ |//
- //| | | | | | |//
- //| |san_iso|san_iso|san_iso|san_iso| |//
- //| | | | | | |//
- //| +-------+-------+-------+-------+ |//
- //| |< 512 >|< 512 >|< 512 >|< 512 >| |//
- //| |<----------- 2048 ------------>| |//
- //| |<--- SAN_MAM:2048 ------------>| |//
- //| |//
- //| SAN_MAM should be able to fit |//
- //| sixteen(16) SAN_ISO via. |//
- //| (Because: 4x4==16 ) |//
- //| ( 2048 === 512 * 4 ) |//
- //|______________________________________|//
- //- , SAN_MAM : 2048 //:INI_SAN_mam_mem -//
- , SAN_MAM : GLO_CFG.SAN_MAM
- //:Decided to write it this way instead
- //:of put a "rec_vpc={ .x_0 ... }"
- //:Because that would introduce risk
- //:of accidentially passing the rec_vpc
- //:in here around in your code.
- , INI_REC_VPC_x_0 : 0 -0 + 0
- , INI_REC_VPC_x_1 : VPC_WID -1 - 0
- , INI_REC_VPC_y_0 : 0 -0 + 0
- , INI_REC_VPC_y_1 : VPC_HIG -1 - 0
- , INI_REC_VP0_x_0 : 0 -0 + 32
- , INI_REC_VP0_x_1 : VPC_WID -1 - 32
- , INI_REC_VP0_y_0 : 0 -0 + 32
- , INI_REC_VP0_y_1 : VPC_HIG -1 - 32
- //: INIT TO INVALID VALUES BECAUSE IT IS
- //: RESPONSIBILITY OF THE EDITORS TO
- //: CONTROL THIS VIEWPORT'S POSITION OVER
- //: THE GPU TEXTURE DATA.
- , INI_REC_VP1_x_0 : ( 0 - 1111 ) //:SRC:x_0
- , INI_REC_VP1_x_1 : ( 0 - 2222 ) //:SRC:x_1
- , INI_REC_VP1_y_0 : ( 0 - 3333 ) //:SRC:y_0
- , INI_REC_VP1_y_1 : ( 0 - 4444 ) //:SRC:y_1
- , INI_REC_VP2_x_0 : ( 0 - 55 ) //:ZOOMER:x_0
- , INI_REC_VP2_x_1 : ( 0 - 66 ) //:ZOOMER:x_1
- , INI_REC_VP2_y_0 : ( 0 - 77 ) //:ZOOMER:y_0
- , INI_REC_VP2_y_1 : ( 0 - 88 ) //:ZOOMER:y_1
- //://////////////////////////////////////////://
- } //:////////////////////////////////////////////://
- };;
- //://////////////////////////////////////////////////://
- //: WRONG: ://
- //: Make the "zoomer" (vp2) viewport snapped ://
- //: exactly to the "destination" (vp0) ://
- //: viewport so that testbed shaders (tbs) ://
- //: in edi_001 start at 1:1 zoom. ://
- //: ://
- //: CORRECT: ://
- //: Snap rec_vp2 (zoomer) onto rec_vpc (client).
- //: This is because rec_vp2 is a sub-sampler ://
- //: of the gl_FragCoord range that goes ://
- //: over the client area. ://
- GLO_DAT.INI_VAL.INI_REC_VP2_x_0 =(
- GLO_DAT.INI_VAL.INI_REC_VPC_x_0 );;
- GLO_DAT.INI_VAL.INI_REC_VP2_x_1 =(
- GLO_DAT.INI_VAL.INI_REC_VPC_x_1 );;
- GLO_DAT.INI_VAL.INI_REC_VP2_y_0 =(
- GLO_DAT.INI_VAL.INI_REC_VPC_y_0 );;
- GLO_DAT.INI_VAL.INI_REC_VP2_y_1 =(
- GLO_DAT.INI_VAL.INI_REC_VPC_y_1 );;
- //://////////////////////////////////////////////////://
- Object.seal( GLO_DAT );
- return( GLO_DAT );
- //://////////////////////////////////////////////////////://
- };;function INI_GLO_FUN( ){ //://///////////////////////://
- "use strict" //://///////////////////////://
- //://////////////////////////////////////////////////////://
- var GLO_FUN ={ //:GLO_FUN:GLObal_FUNctions (container )
- loop_table_tick : AA2_LoopTableTick
- , LOOP_TABLE_TICK_nat_win : AA2_LoopTableTick_nat_win
- , LOOP_TABLE_TICK_gam_obj : AA2_LoopTableTick_gam_obj
- , LOOP_TABLE_TICK_ren_log : AA2_LoopTableTick_ren_log
- };;
- Object.seal( GLO_FUN );
- return( GLO_FUN );
- //://////////////////////////////////////////////////////://
- };;function INI_GLO_CLA( ){ //://///////////////////////://
- "use strict" //://///////////////////////://
- //://////////////////////////////////////////////////////://
- //# Removed: VAR keyword from here so we can #//
- //# reference "GLO_CLA" members during #//
- //# initialization. #//
- /**global:GLO_CLA**/
- GLO_CLA={
- ada_gra : NEW_ada_gra() //: ADApter_GRAphics
- //:tau_001 or any tau_### instance should be
- //:created AFTER [ ada_gra ] because it borrows
- //:u32_pix container pointers from ada_gra.
- , tau_001 : NEW_tau_con() //: TextureAsUniformCTRL
- //:ada_var should come AFTER [ tau_001 | tau_### ]
- //:and AFTER [ ada_gra ] because this adapter
- //:will reference EITHER of these objects when
- //:implementing its "Get_VarNam" and "Put_VarNam"
- //:functions. ( Generally: "Get_*" and "Put_*"
- , ada_var : NEW_ada_var() //: ADApater_VARiables
- //:SESESESESESESESESESESESESESESESESESESESESE|//
- //|Sub editors dont know about edi_all,but |//
- //|edi_all knows about sub editors. Thus,sub |//
- //|editors should be created BEFORE edi_all |//
- //|to maintain correct initialization order. |//
- //:SESESESESESESESESESESESESESESESESESESESESE://
- , edi_001 : NEW_edi_001()
- , edi_002 : NEW_edi_002()
- //:------------------------------------------://
- //: Rather than having null slots for editors
- //: that do not exist, we will put placeholder
- //: editors of "AA2_EditorBaseClass":
- //:------------------------------------------://
- , edi_003 : NEW_edi_bas() //:EditorBaseClass
- , edi_004 : NEW_edi_bas() //:EditorBaseClass
- , edi_005 : NEW_edi_bas() //:EditorBaseClass
- , edi_006 : NEW_edi_bas() //:EditorBaseClass
- , edi_007 : NEW_edi_bas() //:EditorBaseClass
- , edi_008 : NEW_edi_bas() //:EditorBaseClass
- , edi_009 : NEW_edi_bas() //:EditorBaseClass
- //:------------------------------------------://
- //:SESESESESESESESESESESESESESESESESESESESESE://
- //:Now Init [Main/Master] Editor (Editor_All)://
- //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
- , edi_all : null //:NEW_edi_all()
- //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
- };;Object.seal( GLO_CLA );
- //:Configure tau_001:
- //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
- GLO_CLA.tau_001.Put_VarNam( "tau_001" );
- GLO_CLA.tau_001.BorrowPointerAsWeakReference_u32_pix(
- GLO_CLA.ada_gra.mam_mem //:MasterMemory
- //: TYPE_OF( mam_mem ) === "uni_pix"
- );;
- GLO_CLA.tau_001.Put_RecBou(
- /**/ GLO_CFG.TAU_001_x0 //:TOP_LEF
- , GLO_CFG.TAU_001_y0 //:TOP_LEF
- , GLO_CFG.TAU_001_x1 //:BOT_RIG
- , GLO_CFG.TAU_001_y1 //:BOT_RIG
- );;
- //:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://
- function ALREADY_SET( obj_any ){
- if( ! obj_any ){
- throw("[INPUT_OBJECT_WAS_NULL]");
- };;
- return( obj_any );
- };;
- //:Because some classes may access other classes
- //:via the GLO_CLA container during initialization.
- //:Any spaghetti code access like that requires
- //:initilization of members outside of the
- //:GLO_CLA declaration. Lets not go overkill and
- //:only do it for specific parts to fix dependency
- //:loop errors.
- //://////////////////////////////////////////////////://
- GLO_CLA.ada_gra = ALREADY_SET( GLO_CLA.ada_gra );
- GLO_CLA.tau_001 = ALREADY_SET( GLO_CLA.tau_001 );
- GLO_CLA.ada_var = ALREADY_SET( GLO_CLA.ada_var );
- GLO_CLA.edi_001 = ALREADY_SET( GLO_CLA.edi_001 );
- GLO_CLA.edi_002 = ALREADY_SET( GLO_CLA.edi_002 );
- GLO_CLA.edi_003 = ALREADY_SET( GLO_CLA.edi_003 );
- GLO_CLA.edi_004 = ALREADY_SET( GLO_CLA.edi_004 );
- GLO_CLA.edi_005 = ALREADY_SET( GLO_CLA.edi_005 );
- GLO_CLA.edi_006 = ALREADY_SET( GLO_CLA.edi_006 );
- GLO_CLA.edi_007 = ALREADY_SET( GLO_CLA.edi_007 );
- GLO_CLA.edi_008 = ALREADY_SET( GLO_CLA.edi_008 );
- GLO_CLA.edi_009 = ALREADY_SET( GLO_CLA.edi_009 );
- //:Needs to reference [ edi_001 - edi_009 - edi_### ]
- //:For initialization, so must be created here:
- GLO_CLA.edi_all = NEW_edi_all();
- //://////////////////////////////////////////////////://
- return( GLO_CLA );
- };; //://////////////////////////////////////////////////://
- //://////////////////////////////////////////////////////://
- //:GIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGIGI:SC[JSGW_BODY]://
- //:GI:Global_Initialization:(ABOVE):-------------------------://
- //:AG:Adapter:Graphics:(BELOW):------------------------------://
- //:AGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAG://
- function NEW_ada_gra(){ //://////////////////////////////////://
- "use strict"
- //:C:Constant_Like_Setup:
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:This code was moved from the INI_GLO_DAT(...) function.
- //:Because I thought the information here was too
- //:specific to belong in the global data section.
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:ada_gra:Adapter_Graphics:
- var ada_gra ={
- con_gra : null //:AKA[ gl | con_gra | ogl_ctx | ctx_ogl ]
- , iso_mem : null
- , mam_mem : null
- //:BootStrapping_Uniforms:
- //:These_lay_the_foundational_structure_of_engine:
- //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS://
- , has_mem : null //: [ uni_u32 / NEW_uni_u32() ] 01 ://
- , ren_mod : null //: [ uni_u32 / NEW_uni_u32() ] 02 ://
- , edi_mod : null //: [ uni_u32 / NEW_uni_u32() ] 03 ://
- , gam_tim : null //: [ uni_u32 / NEW_uni_u32() ] 04 ://
- , dex_hot : null //: [ uni_u32 / NEW_uni_u32() ] 05 ://
- //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS://
- , gpuvcon : null //: GPU_VARIABLE_CONTROLLER
- , all_pro : null //: OurMainWebGLProgramObject
- , ver_pro : null //: <--SEE[ PWU_AFC ]
- , fra_pro : null //: <--SEE[ PWU_AFC ]
- , can_htm : null //:<-- html5 canvas object.
- //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
- //| #PIXEFOG# ------------------------------------------ |//
- //| |//
- //| rec_inc: RECtangle(s)INClusive: |//
- //| Thought about putting these in GLO_DAT |//
- //| but the likelyhood that a function which |//
- //| takes "ada_gra" also needs one of these |//
- //| rectangles is very high. |//
- //- rec_vpc : null //:<--AlwaysSizeOfCanvas. -//
- //- rec_vp0 : null //:<--[ DEST / SCREEN ] viewport. -//
- //- rec_vp1 : null //:<--[ SRC / OFFSCREEN ] viewport. -//
- //|______________________________________________________|//
- };;Object.seal( ada_gra );
- //:VR:Viewport_Rectangles:(BELOW):-------------------://
- //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://
- { //:BLOCK_SCOPE
- //[¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯]//
- //[ #PIXEFOG#: Relevant Parts Moved To: ]//
- //[ ]//
- //[ INI_GLO_002(...) ]//
- //[ ]//
- //- ada_gra.rec_vpc = NEW_rec_inc(); //:CLIENT -//
- //- ada_gra.rec_vp0 = NEW_rec_inc(); //:DEST -//
- //- ada_gra.rec_vp1 = NEW_rec_inc(); //:SOURCE -//
- //- -//
- //- let I_V = ( GLO_DAT.INI_VAL ); /** var I_V **/ -//
- //- -//
- //- ada_gra.rec_vpc.x_0 = ( I_V.INI_REC_VPC_x_0 ); -//
- //- ada_gra.rec_vpc.x_1 = ( I_V.INI_REC_VPC_x_1 ); -//
- //- ada_gra.rec_vpc.y_0 = ( I_V.INI_REC_VPC_y_0 ); -//
- //- ada_gra.rec_vpc.y_1 = ( I_V.INI_REC_VPC_y_1 ); -//
- //- -//
- //- ada_gra.rec_vp0.x_0 = ( I_V.INI_REC_VP0_x_0 ); -//
- //- ada_gra.rec_vp0.x_1 = ( I_V.INI_REC_VP0_x_1 ); -//
- //- ada_gra.rec_vp0.y_0 = ( I_V.INI_REC_VP0_y_0 ); -//
- //- ada_gra.rec_vp0.y_1 = ( I_V.INI_REC_VP0_y_1 ); -//
- //- -//
- //- ada_gra.rec_vp1.x_0 = ( I_V.INI_REC_VP1_x_0 ); -//
- //- ada_gra.rec_vp1.x_1 = ( I_V.INI_REC_VP1_x_1 ); -//
- //- ada_gra.rec_vp1.y_0 = ( I_V.INI_REC_VP1_y_0 ); -//
- //- ada_gra.rec_vp1.y_1 = ( I_V.INI_REC_VP1_y_1 ); -//
- //[__________________________________________________]//
- } //:BLOCK_SCOPE
- //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://
- //:Assert that value is positive:
- function A( val ){
- //:If value is valid, return it:
- if( val > 0 ){
- return( val );
- };;
- //:If value is invalid, crash the program:
- if(!val > 0 ){
- console.log("[suspect:val]:",val);
- var err_npv = "[NOT_POSITIVE_VALUE]";
- console.log( err_npv );
- throw( err_npv );
- };;
- throw("[EDCL]");
- return( 0 - 666 );
- };;
- //:UP:uni_pix:---------------------------------------://
- //:Create_Texture_Containers( uni_pix ):-------------://
- //:UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP://
- var ISO_MEM =( NEW_uni_pix() );
- var MAM_MEM =( NEW_uni_pix() );
- ISO_MEM.tex_han = (0 - 333 ) ; //: ISO_MEM.tex_han
- ISO_MEM.tex_lot = 1 ; //: ISO_MEM.tex_lot
- ISO_MEM.pix_arr = null ;
- ISO_MEM.pix_wid =A(GLO_DAT.INI_VAL.SAN_ISO) ; //: 512
- ISO_MEM.pix_hig =A(GLO_DAT.INI_VAL.SAN_ISO) ; //: 512
- ISO_MEM.pix_com = 4 ; //:ComponentsPerPixel
- ISO_MEM.pix_nam = "iso_mem" ;
- ISO_MEM.sam_val = ( ISO_MEM.tex_lot );
- ISO_MEM.sam_loc = ( 0 - ( 901 ) );
- ISO_MEM.has_loc = ( 0 - ( 1001 ) );
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- MAM_MEM.tex_han = (0 - 666 ) ; //: MAM_MEM.tex_han
- MAM_MEM.tex_lot = 0 ; //: MAM_MEM.tex_lot
- MAM_MEM.pix_arr = null ;
- MAM_MEM.pix_wid =A(GLO_DAT.INI_VAL.SAN_MAM) ; //: 2048
- MAM_MEM.pix_hig =A(GLO_DAT.INI_VAL.SAN_MAM) ; //: 2048
- MAM_MEM.pix_com = 4 ; //:ComponentsPerPixel
- MAM_MEM.pix_nam = "mam_mem" ;
- MAM_MEM.sam_val = ( MAM_MEM.tex_lot );
- MAM_MEM.sam_loc = ( 0 - ( 902 ) );
- MAM_MEM.has_loc = ( 0 - ( 1002 ) );
- //:UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP://
- ISO_MEM.pix_arr = new Uint8Array( 1
- * ISO_MEM.pix_wid
- * ISO_MEM.pix_hig
- * ISO_MEM.pix_com
- );;
- MAM_MEM.pix_arr = new Uint8Array( 1
- * MAM_MEM.pix_wid
- * MAM_MEM.pix_hig
- * MAM_MEM.pix_com
- );;
- ada_gra.iso_mem = ISO_MEM;
- ada_gra.mam_mem = MAM_MEM;
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //://///////////////////////////////////SC[ icogstep_01 ]://
- var NL="\n"; //:NL=="newline"
- var ver_src=(""/**ver:[ vertext / vtx_src ]**/
- +" #version 300 es "+NL
- +" precision highp float; "+NL
- //: When Moving From Previous WebGL to "300 es"
- //: "attribute" becomes: "layout( location = # ) in ..."
- +" layout(location = 0) in vec2 ver_pos; "+NL
- +" layout(location = 1) in vec3 ver_col; "+NL
- +" out vec3 pix_ver; /**fragColor/fra_col_ver**/ "+NL
- +" void main(){ "+NL
- +" "+NL
- +" pix_ver = ( ver_col ); "+NL
- +" gl_Position = vec4( ver_pos,0.0,1.0); "+NL
- +" "+NL
- +" } "+NL
- );;
- //://////////////////////////////////////////////////////://
- //|/////////////////////////:DIAGRAM[SC[DIA_TILTEX_ULTRA]]///|//
- //| |//
- //| //[/////////////////:DIAGRAM[SC[DIA_TILTEX]]:]// |//
- //| //[ ]// |//
- //| //[ Working out logic using a 4x4 tilemap: ]// |//
- //| //[ ]// |//
- //| //[ TILE[ 0 ]: ( 0 + 0.5 ) / 4 === 0.125 ]// |//
- //| //[ TILE[ 1 ]: ( 1 + 0.5 ) / 4 === 0.375 ]// |//
- //| //[ TILE[ 2 ]: ( 2 + 0.5 ) / 4 === 0.625 ]// |//
- //| //[ TILE[ 3 ]: ( 3 + 0.5 ) / 4 === 0.875 ]// |//
- //| //[ ]// |//
- //| //[ |<----- 4 pixels / texels ----->| ]// |//
- //| //[ +---+---+---+---+---+---+---+---+ ]// |//
- //| //[ | | | | | ]// |//
- //| //[ + 0 + 1 + 2 + 3 + <<<<< ]// |//
- //| //[ | | | | | ^^ ]// |//
- //| //[ +---+---+---+---+---+---+---+---+ ^^ ]// |//
- //| //[ ^ ^ .25 ^ 0.5 ^ .75 ^ ^ ^^ ]// |//
- //| //[ | | | | | | ^^ ]// |//
- //| //[ | 0.125 0.375 0.625 0.875 | ^^ ]// |//
- //| //[ | | ^^ ]// |//
- //| //[ 0<--WEBGL_MAPPED_RANGE_0_TO_1-->1 ^^ ]// |//
- //| //[ ^^ ]// |//
- //| //[ [ TILE_COORDINATES >>>^^] ]// |//
- //| //[ (If each pixel encodes ) ]// |//
- //| //[ (a tile value on tilemap) ]// |//
- //| //[ ]// |//
- //| //[/////////////////:DIAGRAM[SC[DIA_TILTEX]]:]// |//
- //| |//
- //| Solving in a more detailed manner yeilds a more |//
- //| complex formula... But the results are almost |//
- //| identical. And identical enough for what I need. |//
- //| |//
- //| +---+---+---+---+---+---+ |//
- //| | | | | |//
- //| + 0 + 1 + 2 + |//
- //| | | | | |//
- //| +---+---+---+---+---+---+ |//
- //| ^ ~.16~ 0.5 .83 ^ |//
- //| | | |//
- //| | | |//
- //| | | |//
- //| 0<-------- 0-1 -------->1 |//
- //| |//
- //| 1: Figure how many half segments there are: |//
- //| var num_seg = ( wid * 2 ); |//
- //| |//
- //| 2: Get the length of a single half segment |//
- //| as portion of normalized length: |//
- //| var nom_seg = ( 1 / num_seg ); |//
- //| |//
- //| 3: First pixel center is one nom_seg from zero. |//
- //| Each succesive coordinate is 2 more nom_seg. |//
- //| |//
- //| //:til_cor: Tile Coordinate |//
- //| //:til_tex: Tile texture/normalized position. |//
- //| til_tex = (nom_seg*1) + ( til_cor * ( nom_seg * 2 ) ) |//
- //| |//
- //| ((1/(wid*2))*1)+(til*((1/(wid*2))*2)) |//
- //| //:::wid:::::::::til::::::wid:::::::: |//
- //| |//
- //| |//
- //| wid:3 til:0 ((1/( 3 *2))*1)+( 0 *((1/( 3 *2))*2)) |//
- //| wid:3 til:1 ((1/( 3 *2))*1)+( 1 *((1/( 3 *2))*2)) |//
- //| wid:3 til:2 ((1/( 3 *2))*1)+( 2 *((1/( 3 *2))*2)) |//
- //| |//
- //| [ FORMULA:01 / fom_001 ] |//
- //| ((1/(wid*2))*1)+(til*((1/(wid*2))*2)) |//
- //| |//
- //| [ FORMULA:02 / fom_002 ] |//
- //| ( til + 0.5 ) / ( wid + 0 /** DONT_ADD_ONE **/ ) |//
- //| |//
- //| |//
- //|/////////////////////////:DIAGRAM[SC[DIA_TILTEX_ULTRA]]///|//
- //:Ripped from M128.JS library to figure out the
- //:code needed to get access to integer textures.
- let N = "\n";
- var its_a_string =("#version 300 es "//[F]//
- +N+"//::1234____1234____1234 ____1234 ____1234 ____1234:"//[F]//
- +N+" //:Version '300 es' gives you access to ://"//[F]//
- +N+" //:the 'usampler2D' (uint sampler2D) ://"//[F]//
- +N+" //:ALSO: Make sure context is webgl2 (TWO) ://"//[F]//
- +N+" //:AKA: can.getContext('webgl2') ://"//[F]//
- +N+" //:------------------------------------------://"//[F]//
- +N+" //: Must declare precision before ://"//[F]//
- +N+" //: declaring any uniforms ://"//[F]//
- +N+" //://////////////////////////////////////////://"//[F]//
- +N+" #ifdef GL_FRAGMENT_PRECISION_HIGH "//[F]//
- +N+" precision highp float; "//[F]//
- +N+" precision highp int; "//[F]//
- +N+" #else "//[F]//
- +N+" precision mediump float; "//[F]//
- +N+" precision mediump int; "//[F]//
- +N+" #endif "//[F]//
- +N+" //://////////////////////////////////////////://"//[F]//
- +N+" //: Pretty sure sampler precision must ://"//[F]//
- +N+" //: always be high. Otherwise we will corrupt://"//[F]//
- +N+" //: our bit-packing patterns that are stored ://"//[F]//
- +N+" //: in each pixel. ://"//[F]//
- +N+" precision highp usampler2D;//:- - - - - - - -://"//[F]//
- +N+" //://////////////////////////////////////////://"//[F]//
- +N+" //: JavaScript's inclusive rectangle type. ://"//[F]//
- +N+" //: Though the coordinates here should be ://"//[F]//
- +N+" //: INTEGER/WHOLE we define as float ://"//[F]//
- +N+" //: to make the math easier. Specificaly ://"//[F]//
- +N+" //: less explicit casts needed in our ://"//[F]//
- +N+" //: shader code. ://"//[F]//
- +N+" struct REC_INC{ //:////////////:[glsl_struct]://"//[F]//
- +N+" "//[F]//
- +N+" float x_0; //:#WHO_NUM_INC#:LEF:X "//[F]//
- +N+" float x_1; //:#WHO_NUM_INC#:RIG:X "//[F]//
- +N+" float y_0; //:#WHO_NUM_INC#:TOP:Y "//[F]//
- +N+" float y_1; //:#WHO_NUM_INC#:BOT:Y "//[F]//
- +N+" "//[F]//
- +N+" };//://////////////////////////:[glsl_struct]://"//[F]//
- +N+" "//[F]//
- +N+" //:IO:Input_Output_variables:(BELOW):--------://"//[F]//
- +N+" //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://"//[F]//
- +N+" //: ://"//[F]//
- +N+" //: Old webgl uses [varying] instead of ://"//[F]//
- +N+" //: [in] or [out]. ://"//[F]//
- +N+" //: ://"//[F]//
- +N+" //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://"//[F]//
- +N+" "//[F]//
- +N+" //:**************************************://"//[F]//
- +N+" //: Mapped red to x axis and green to y: ://"//[F]//
- +N+" //: THUS: s == x == red ://"//[F]//
- +N+" //: t == y == green ://"//[F]//
- +N+" //: (pix_ver == texcoord == fra_col_ver) ://"//[F]//
- +N+" in vec3 pix_ver; //:- - - - - - - -://"//[F]//
- +N+" //:**************************************://"//[F]//
- +N+" "//[F]//
- +N+" //:Not allowed in webgl2 (AKA: ESSL ) "//[F]//
- +N+" //--layout( origin_upper_left )[in|out] --//"//[F]//
- +N+" "//[F]//
- +N+" out vec4 pix_fra; /** fra_col_fra **/ "//[F]//
- +N+" //:IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIO://"//[F]//
- +N+" //: ://"//[F]//
- +N+" //:mam_mem: MASTER_MEMORY: (2048*2048) ://"//[F]//
- +N+" //:mam_mem: MASTER_MEMORY: [512*4]x[512*4] ://"//[F]//
- +N+" //: ://"//[F]//
- +N+" //: Stores NINE(9) 512x512 level maps ://"//[F]//
- +N+" //: and TWO(2) transitional level maps. ://"//[F]//
- +N+" //: ( MAPS:Vertical and horizontal ) ://"//[F]//
- +N+" //: And some other 512x512 data that ://"//[F]//
- +N+" //: I have not decided on yet. ://"//[F]//
- +N+" //: ://"//[F]//
- +N+" //:iso_mem: Isolated_Memory: 512x512 for ://"//[F]//
- +N+" //: ://"//[F]//
- +N+" //: whatever the fuck you [want/need]. ://"//[F]//
- +N+" //: For example, could just be a ://"//[F]//
- +N+" //: scratchpad if the edi_mod value is ://"//[F]//
- +N+" //: flagged with a value indicating ://"//[F]//
- +N+" //: scratchpad behavior on data. ://"//[F]//
- +N+" //:- - - - - - - - - - -- - - - - - - - - - -://"//[F]//
- +N+" uniform uint has_mem ; //:TexureLoaded?://"//[F]//
- +N+" uniform uint ren_mod ; //:Render_Mode ://"//[F]//
- +N+" uniform uint edi_mod ; //:Editor_Mode ://"//[F]//
- +N+" uniform uint gam_tim ; //:Game___Time ://"//[F]//
- +N+" uniform uint dex_hot ; //:HotSwapIndex ://"//[F]//
- +N+" //:- - - - - - - - - - -- - - - - - - - - - -://"//[F]//
- +N+" uniform usampler2D iso_mem ; //:Whatever__Mem://"//[F]//
- +N+" uniform usampler2D mam_mem ; //:Main_Mem_2048://"//[F]//
- //://////////////////////////////////////////////////////////://
- //[//////////////////////////////////////////////////////////]//
- //[--]////|//////////////////////////////////////////|////[--]//
- //[--]////| To_Josh: |////[--]//
- //[--]////| |////[--]//
- //[--]////|Because I am writing this all in one file,|////[--]//
- //[--]////|it makes it easy to [ embedd/hardcode ] |////[--]//
- //[--]////|values written in the JavaScript into the |////[--]//
- //[--]////|GLSL shader code. This is nice because the|////[--]//
- //[--]////|game engine code in JavaScript will need |////[--]//
- //[--]////|to synchronize and communicate with the |////[--]//
- //[--]////|GLSL shader (rendering) code. |////[--]//
- //[--]////| |////[--]//
- //[--]////| JAVASCRIPT: |////[--]//
- //[--]////| |////[--]//
- //[--]////| +N+" #define SAN_MAM ( " |////[--]//
- //[--]////| + GLO_CFG.SAN_MAM + ")\n" |////[--]//
- //[--]////| |////[--]//
- //[--]////| +N+" #define SAN_ISO ( " |////[--]//
- //[--]////| + GLO_CFG.SAN_ISO + ")\n" |////[--]//
- //[--]////| |////[--]//
- //[--]////| |////[--]//
- //[--]////| RESULTING:GLSL: |////[--]//
- //[--]////| |////[--]//
- //[--]////| #define SAN_MAM ( 2048 ) |////[--]//
- //[--]////| #define SAN_ISO ( 512 ) |////[--]//
- //[--]////| |////[--]//
- //[--]////|//////////////////////////////////////////|////[--]//
- //[//////////////////////////////////////////////////////////]//
- //:Defines for texture sizes.________________:////|MEMORY|//
- //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS:////|MEMORY|//
- //|MEMORY|//
- +N+" #define SAN_MAM ( " //|MEMORY|//
- + GLO_CFG.SAN_MAM + ")\n" //|MEMORY|//
- //|MEMORY|//
- +N+" #define SAN_ISO ( " //|MEMORY|//
- + GLO_CFG.SAN_ISO + ")\n" //|MEMORY|//
- //|MEMORY|//
- //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS:////|MEMORY|//
- //|MEMORY|//
- //:Hotswapping_and_MemoryCells:______________:////|MEMORY|//
- //:HMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHM:////|MEMORY|//
- //:hot_swapping_indexes_range:::::::::::::::::////|MEMORY|//
- //|MEMORY|//
- +N+" #define DEX_HOT_MIN ( " //|MEMORY|//
- + GLO_CFG.DEX_HOT_MIN + ")\n" //|MEMORY|//
- //|MEMORY|//
- +N+" #define DEX_HOT_MAX ( " //|MEMORY|//
- + GLO_CFG.DEX_HOT_MAX + ")\n" //|MEMORY|//
- //|MEMORY|//
- //|MEMORY|//
- //|MEMORY|//
- //:Memory_Cells: ( MEC_DEX === DEX_HOT - 1 )::////|MEMORY|//
- //:SAN_ISO sized sub-divisions of SAN_MAM: ::////|MEMORY|//
- //|MEMORY|//
- +N+" #define MEC_DEX_MIN ( " //|MEMORY|//
- + GLO_CFG.MEC_DEX_MIN + ")\n" //|MEMORY|//
- //|MEMORY|//
- +N+" #define MEC_DEX_MAX ( " //|MEMORY|//
- + GLO_CFG.MEC_DEX_MAX + ")\n" //|MEMORY|//
- //|MEMORY|//
- //|MEMORY|//
- //|MEMORY|//
- //:HMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHM:////|MEMORY|//
- //[------]//
- //|TAU_01|//
- //|TAU_01|//
- //: TAU_001_* : Texture_As_Uniforms:Block#001:////|TAU_01|//
- //|TAU_01|//
- +N+" #define TAU_001_x0 (" //|TAU_01|//
- + GLO_CFG.TAU_001_x0 + ")\n" //|TAU_01|//
- //|TAU_01|//
- +N+" #define TAU_001_x1 (" //|TAU_01|//
- + GLO_CFG.TAU_001_x1 + ")\n" //|TAU_01|//
- //|TAU_01|//
- +N+" #define TAU_001_y0 (" //|TAU_01|//
- + GLO_CFG.TAU_001_y0 + ")\n" //|TAU_01|//
- //|TAU_01|//
- +N+" #define TAU_001_y1 (" //|TAU_01|//
- + GLO_CFG.TAU_001_y1 + ")\n" //|TAU_01|//
- //|TAU_01|//
- +N+" #define TAU_001_wid " //|TAU_01|//
- + " (TAU_001_x1-TAU_001_x0+1) " //|TAU_01|//
- +N+" #define TAU_001_hig " //|TAU_01|//
- + " (TAU_001_y1-TAU_001_y0+1) " //|TAU_01|//
- //|TAU_01|//
- //:Index of the TestBedShader(tbs) that :////|TAU_01|//
- //:editor#1 (edi_001) is displaying. :////|TAU_01|//
- +N+" #define TAU_001_EDIT001_dex_sha ( "//|TAU_01|//
- + GLO_CFG.TAU_001_EDIT001_dex_sha + ")\n "//|TAU_01|//
- //|TAU_01|//
- //:E2:Editor_02_vars:(BELOW):----------------:////|TAU_01|//
- //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2:////|TAU_01|//
- +N+" #define TAU_001_EDIT002_til_exp ( "//|TAU_01|//
- + GLO_CFG.TAU_001_EDIT002_til_exp + ")\n "//|TAU_01|//
- //|TAU_01|//
- +N+" #define TAU_001_EDIT002_til_san ( "//|TAU_01|//
- + GLO_CFG.TAU_001_EDIT002_til_san + ")\n "//|TAU_01|//
- //|TAU_01|//
- +N+" #define TAU_001_EDIT002_cam_t_x ( "//|TAU_01|//
- + GLO_CFG.TAU_001_EDIT002_cam_t_x + ")\n "//|TAU_01|//
- //|TAU_01|//
- +N+" #define TAU_001_EDIT002_cam_t_y ( "//|TAU_01|//
- + GLO_CFG.TAU_001_EDIT002_cam_t_y + ")\n "//|TAU_01|//
- //|TAU_01|//
- +N+" #define TAU_001_EDIT002_dex_hot ( "//|TAU_01|//
- + GLO_CFG.TAU_001_EDIT002_dex_hot + ")\n "//|TAU_01|//
- //|TAU_01|//
- +N+" #define TAU_001_EDIT002_use_hyp ( "//|TAU_01|//
- + GLO_CFG.TAU_001_EDIT002_use_hyp + ")\n "//|TAU_01|//
- //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2:////|TAU_01|//
- //:E2:Editor_02_vars:(ABOVE):----------------:////|TAU_01|//
- //|TAU_01|//
- //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR:////|TAU_01|//
- //:VR:Viewport_Rectangles: :////|TAU_01|//
- //: Where datapoints exist on texture: :////|TAU_01|//
- //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR:////|TAU_01|//
- //|TAU_01|//
- //:rec_vpc:__________________________________:////|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vpc_x_0 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_0+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vpc_x_1 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_1+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vpc_y_0 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_0+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vpc_y_1 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_1+ ") "//|TAU_01|//
- //|TAU_01|//
- //:rec_vp0:__________________________________:////|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp0_x_0 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_0+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp0_x_1 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_1+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp0_y_0 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_0+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp0_y_1 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_1+ ") "//|TAU_01|//
- //|TAU_01|//
- //:rec_vp1:__________________________________:////|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp1_x_0 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_0+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp1_x_1 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_1+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp1_y_0 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_0+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp1_y_1 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_1+ ") "//|TAU_01|//
- //|TAU_01|//
- //:rec_vp2:__________________________________:////|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp2_x_0 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_0+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp2_x_1 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_1+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp2_y_0 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_0+ ") "//|TAU_01|//
- +N+" #define TAU_001_GLOBVAR_rec_vp2_y_1 ( "//|TAU_01|//
- + GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_1+ ") "//|TAU_01|//
- //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR:////|TAU_01|//
- //://////////////////////////////////////////////////////////://
- //://////////////////////////////////////////////////////////://
- +N+" "//[F]//
- +N+" //:M:ModulusFunctions:(BELOW):-----------://"//[F]//
- +N+" //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://"//[F]//
- +N+" uint mod_u32( "//[F]//
- +N+" uint u32_bas "//[F]//
- +N+" , uint u32_div "//[F]//
- +N+" ){ "//[F]//
- +N+" "//[F]//
- +N+" float flt_res = mod( "//[F]//
- +N+" float(u32_bas) "//[F]//
- +N+" , float(u32_div) "//[F]//
- +N+" );; "//[F]//
- +N+" uint u32_res = uint( flt_res ); "//[F]//
- +N+" return( u32_res ); "//[F]//
- +N+" } "//[F]//
- +N+" "//[F]//
- +N+" int mod_i32( "//[F]//
- +N+" int i32_bas "//[F]//
- +N+" , int i32_div "//[F]//
- +N+" ){ "//[F]//
- +N+" "//[F]//
- +N+" float flt_res = mod( "//[F]//
- +N+" float(i32_bas) "//[F]//
- +N+" , float(i32_div) "//[F]//
- +N+" );; "//[F]//
- +N+" int i32_res = int( flt_res ); "//[F]//
- +N+" return( i32_res ); "//[F]//
- +N+" } "//[F]//
- +N+" //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://"//[F]//
- +N+" //:M:ModulusFunctions:(ABOVE):-----------://"//[F]//
- //[F]//
- +N+"//: SAMPLE[ TAU_001 ]USING[ POS ](Position-2D) "//[F]//
- +N+"uvec4 TAU_001_POS( int t_x, int t_y ){ "//[F]//
- +N+" "//[F]//
- +N+" uvec4 out_rgb; //:OUTPUT_RGB "//[F]//
- +N+" "//[F]//
- +N+" //:1: Convert coordinate in TAU_001 "//[F]//
- +N+" //: FROM: TILE coordinate "//[F]//
- +N+" //: TO: PIXEL_CENTER coordinate "//[F]//
- +N+" //:2: NORMALIZE:Range[ 0.0 to 1.0 ] "//[F]//
- +N+" float WID = float( SAN_MAM ); //:MasterMem:WID "//[F]//
- +N+" float HIG = float( SAN_MAM ); //:MasterMem:HIG "//[F]//
- +N+" vec2 u_v = vec2( "//[F]//
- +N+" ( float( t_x ) + 0.5 /**pix_cen**/ ) / WID "//[F]//
- +N+" , ( float( t_y ) + 0.5 /**pix_cen**/ ) / HIG "//[F]//
- +N+" );; "//[F]//
- +N+" "//[F]//
- +N+" if( 1 == 1 "//[F]//
- +N+" //:Inside bounds of sub-selection: "//[F]//
- +N+" && t_x >= TAU_001_x0 && t_x <= TAU_001_x1 "//[F]//
- +N+" && t_y >= TAU_001_y0 && t_y <= TAU_001_y1 "//[F]//
- +N+" "//[F]//
- +N+" //:Bounds of master memory (MAM_MEM) "//[F]//
- +N+" && t_x >= 0 && t_x <= (SAN_MAM-1) "//[F]//
- +N+" && t_y >= 0 && t_y <= (SAN_MAM-1) "//[F]//
- +N+" "//[F]//
- +N+" ){ "//[F]//
- +N+" //:WITHIN_THE_BOUNDS_OF_EVERYTHING: "//[F]//
- +N+" out_rgb = texture( mam_mem , u_v ); "//[F]//
- +N+" "//[F]//
- +N+" }else{ "//[F]//
- +N+" "//[F]//
- +N+" //:OW:Outofbounds_Where?:(BELOW):------------://"//[F]//
- +N+" //:OWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOW://"//[F]//
- +N+" //:which_regions_are_you_out_of_bounds_on? "//[F]//
- +N+" //:OWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOW://"//[F]//
- +N+" "//[F]//
- +N+" if( 0 == 0 //: OOB: TAU sub selection? "//[F]//
- +N+" || ( t_x < TAU_001_x0 || t_x > TAU_001_x1 ) "//[F]//
- +N+" || ( t_y < TAU_001_y0 || t_y > TAU_001_y1 ) "//[F]//
- +N+" "//[F]//
- +N+" && 0 == 0 //: OOB: MAM_MEM texture region? "//[F]//
- +N+" || ( t_x < 0 || t_x > (SAN_MAM-1) ) "//[F]//
- +N+" || ( t_y < 0 || t_y > (SAN_MAM-1) ) "//[F]//
- +N+" ){ "//[F]//
- +N+" //:OUT_OF_BOUNDS:ALL: "//[F]//
- +N+" out_rgb = uvec4(32,0+0,0+0,255); //:RED "//[F]//
- +N+" }else "//[F]//
- +N+" if( 0 == 0 //: OOB: TAU sub selection? "//[F]//
- +N+" || ( t_x < TAU_001_x0 || t_x > TAU_001_x1 ) "//[F]//
- +N+" || ( t_y < TAU_001_y0 || t_y > TAU_001_y1 ) "//[F]//
- +N+" ){ "//[F]//
- +N+" //:OUT_OF_BOUNDS:REC: "//[F]//
- +N+" out_rgb = uvec4(0+0,32,0+0,255); //:GREEN "//[F]//
- +N+" }else "//[F]//
- +N+" if( 0 == 0 //: OOB: MAM_MEM texture region? "//[F]//
- +N+" || ( t_x < 0 || t_x > (SAN_MAM-1) ) "//[F]//
- +N+" || ( t_y < 0 || t_y > (SAN_MAM-1) ) "//[F]//
- +N+" ){ "//[F]//
- +N+" //:OUT_OF_BOUNDS:MEM: "//[F]//
- +N+" out_rgb = uvec4(0+0,0+0,32,255); //:BLUE "//[F]//
- +N+" };; "//[F]//
- +N+" "//[F]//
- +N+" //:OWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWOW://"//[F]//
- +N+" //:OW:Outofbounds_Where?:(ABOVE):------------://"//[F]//
- +N+" };; "//[F]//
- +N+" "//[F]//
- +N+" return( out_rgb ); "//[F]//
- +N+"}//[FN]// "//[F]//
- //://////////////////////////////////////////////////////////://
- +N+"//:T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1T1://"//[DEX]//
- +N+"//: SAMPLE[ TAU_001 ]USING[ DEX ](Index-1D) "//[DEX]//
- +N+"//: TAU: Texture_As_Uniform "//[DEX]//
- +N+"//: TAU[ Faux_Uniform_Via_Texture_Mapped_Pixel ] "//[DEX]//
- +N+"//: AKA[ TAU_001 | uniformfetch_TAU_001 ] "//[DEX]//
- +N+"uvec4 TAU_001_DEX( int tau_dex ){ "//[DEX]//
- +N+" "//[DEX]//
- +N+" uvec4 out_rgb; //:OUTPUT_RGB "//[DEX]//
- +N+" "//[DEX]//
- +N+" #define WID ( TAU_001_wid ) //:////////////://"//[DEX]//
- +N+" "//[DEX]//
- +N+" int l_x = mod_i32( tau_dex , WID ); "//[DEX]//
- +N+" int l_y = ( (tau_dex-l_x)/ WID ); "//[DEX]//
- +N+" int t_x =( l_x + TAU_001_x0 ); "//[DEX]//
- +N+" int t_y =( l_y + TAU_001_y0 ); "//[DEX]//
- +N+" "//[DEX]//
- +N+" out_rgb = TAU_001_POS( t_x, t_y ); "//[DEX]//
- +N+" "//[DEX]//
- +N+" #undef WID //:////////////////////////////://"//[DEX]//
- +N+" "//[DEX]//
- +N+" return( out_rgb ); "//[DEX]//
- +N+"} "//[DEX]//
- +N+" "//[DEX]//
- +N+"//:Get encoded value as original uint32 value: "//|U32|//
- +N+"uint TAU_001_U32( int tau_dex ){ "//|U32|//
- +N+" "//|U32|//
- +N+" uvec4 tau_vec = TAU_001_DEX( tau_dex ); "//|U32|//
- +N+" uint tau_u32 =uint( 0 ); "//|U32|//
- +N+" tau_u32 |= ( uint(0) //:RE_PACK_COMPONENTS: "//|U32|//
- +N+" | (tau_vec.x << 24) //:RE_PACK_COMPONENTS: "//|U32|//
- +N+" | (tau_vec.y << 16) //:RE_PACK_COMPONENTS: "//|U32|//
- +N+" | (tau_vec.z << 8) //:RE_PACK_COMPONENTS: "//|U32|//
- +N+" | (tau_vec.w << 0) //:RE_PACK_COMPONENTS: "//|U32|//
- +N+" );; //:RE_PACK_COMPONENTS: "//|U32|//
- +N+" "//|U32|//
- +N+" return uint( tau_u32 ); "//|U32|//
- +N+"}//[fn]// "//|U32|//
- +N+" "//|U32|//
- +N+"uvec4 Get_Tex_iso_mem( //://///////////////////://"//[ISO]//
- +N+" int tilco_x "//[ISO]//
- +N+", int tilco_y "//[ISO]//
- +N+"){ "//[ISO]//
- +N+" "//[ISO]//
- +N+" float flt_wid = float( SAN_ISO /**512**/ ); "//[ISO]//
- +N+" float flt_hig = float( SAN_ISO /**512**/ ); "//[ISO]//
- +N+" "//[ISO]//
- +N+" int int_wid = int( SAN_ISO /**512**/ ); "//[ISO]//
- +N+" int int_hig = int( SAN_ISO /**512**/ ); "//[ISO]//
- +N+" "//[ISO]//
- +N+" vec2 u_v = vec2( "//[ISO]//
- +N+" ( float( tilco_x ) + 0.5 ) "//[ISO]//
- +N+" / ( flt_wid - 0.0 ) "//[ISO]//
- +N+" "//[ISO]//
- +N+" , ( float( tilco_y ) + 0.5 ) "//[ISO]//
- +N+" / ( flt_hig - 0.0 ) "//[ISO]//
- +N+" );; "//[ISO]//
- ///// +N+" vec2 u_v = vec2( "//[ISO]//
- ///// +N+" ( float( tilco_x )+ 0.0 ) "//[ISO]//
- ///// +N+" / ( flt_wid - 0.0 )+0.0 "//[ISO]//
- ///// +N+" "//[ISO]//
- ///// +N+" , ( float( tilco_y )+ 0.0 ) "//[ISO]//
- ///// +N+" / ( flt_hig - 0.0 )+0.0 "//[ISO]//
- ///// +N+" );; "//[ISO]//
- +N+" "//[ISO]//
- +N+" uvec4 out_rgb; "//[ISO]//
- +N+" "//[ISO]//
- +N+" if( "//[ISO]//
- +N+" //: |<-------- iso_mem.wid -------->| "//[ISO]//
- +N+" tilco_x >= 0 && tilco_x < int_wid "//[ISO]//
- +N+" && tilco_y >= 0 && tilco_y < int_hig "//[ISO]//
- +N+" //: |<-------- iso_mem.hig -------->| "//[ISO]//
- +N+" ){ //:in_bounds_take_texture_sample_here: "//[ISO]//
- +N+" "//[ISO]//
- +N+" out_rgb = texture( iso_mem , u_v ); "//[ISO]//
- +N+" "//[ISO]//
- +N+" }else{ "//[ISO]//
- +N+" //:make_checker_pattern_if_out_of_bounds: "//[ISO]//
- +N+" "//[ISO]//
- +N+" //: o_e: Odd_Or_Even (1 or 0 output) "//[ISO]//
- +N+" //: txy: Tile_X_Y "//[ISO]//
- +N+" int txy = ( tilco_x + tilco_y ); "//[ISO]//
- +N+" int o_e = int( float( 0 ) "//[ISO]//
- +N+" + float(txy) "//[ISO]//
- +N+" -(2.0*floor( float(txy) / 2.0 )) "//[ISO]//
- +N+" );; "//[ISO]//
- +N+" int o_e_255 = o_e*255; "//[ISO]//
- +N+" "//[ISO]//
- +N+" out_rgb = uvec4( "//[ISO]//
- +N+" o_e_255 //: RED "//[ISO]//
- +N+" , o_e_255 //: GREEN "//[ISO]//
- +N+" , o_e_255 //: BLUE "//[ISO]//
- +N+" , 255 //: ALPHA "//[ISO]//
- +N+" );; "//[ISO]//
- +N+" };; "//[ISO]//
- +N+" return( out_rgb ); "//[ISO]//
- +N+" "//[ISO]//
- +N+"} //:[ Get_Tex_iso_mem ]://////////////////////://"//[ISO]//
- +N+" "//|ROT|//
- +N+"uvec4 Get_Tex_iso_mem_rot( //://///////////////://"//|ROT|//
- +N+" int tilco_x "//|ROT|//
- +N+", int tilco_y "//|ROT|//
- +N+"){ "//|ROT|//
- +N+" "//|ROT|//
- +N+" float x1 = float(SAN_ISO) / 2.0; //:CENTER "//|ROT|//
- +N+" float y1 = float(SAN_ISO) / 2.0; //:CENTER "//|ROT|//
- +N+" "//|ROT|//
- +N+" float x2 = float( tilco_x ); "//|ROT|//
- +N+" float y2 = float( tilco_y ); "//|ROT|//
- +N+" "//|ROT|//
- +N+" float dx = x1-x2; "//|ROT|//
- +N+" float dy = y1-y2; "//|ROT|//
- +N+" float ar = atan( dy , dx ); "//|ROT|//
- +N+" "//|ROT|//
- +N+" float dxy = sqrt( "//|ROT|//
- +N+" pow(x1-x2 , 2.0) "//|ROT|//
- +N+" + pow(y1-y2 , 2.0) "//|ROT|//
- +N+" );; "//|ROT|//
- +N+" "//|ROT|//
- +N+" float f_t = float( gam_tim ) / 255.0; "//|ROT|//
- +N+" "//|ROT|//
- +N+" float f_x = x1 + cos( ar + f_t ) * dxy; "//|ROT|//
- +N+" float f_y = y1 + sin( ar + f_t ) * dxy; "//|ROT|//
- +N+" "//|ROT|//
- +N+" int i_x = int( f_x ); "//|ROT|//
- +N+" int i_y = int( f_y ); "//|ROT|//
- +N+" "//|ROT|//
- +N+" "//|ROT|//
- +N+" uvec4 out_rgb = Get_Tex_iso_mem( "//|ROT|//
- +N+" i_x "//|ROT|//
- +N+" , i_y "//|ROT|//
- +N+" );; "//|ROT|//
- +N+" "//|ROT|//
- +N+" return( out_rgb ); "//|ROT|//
- +N+"} //://////////////////////////////////////////://"//|ROT|//
- //:CP:Cut_and_Paste:(BELOW):---------------------------------://
- //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://
- //: ://
- //: CUT_PASTE( Get_Tex_iso_mem )===>[ Get_Tex_mam_mem ]://
- //: CUT_PASTE( Get_Tex_iso_mem_rot)===>[ Get_Tex_mam_mem_rot]://
- //: ://
- //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://
- +N+"uvec4 Get_Tex_mam_mem( //://///////////////////://"//[ISO]//
- +N+" int tilco_x "//[ISO]//
- +N+", int tilco_y "//[ISO]//
- +N+"){ "//[ISO]//
- +N+" "//[ISO]//
- +N+" float flt_wid = float( SAN_MAM /**2048**/ ); "//[ISO]//
- +N+" float flt_hig = float( SAN_MAM /**2048**/ ); "//[ISO]//
- +N+" "//[ISO]//
- +N+" int int_wid = int( SAN_MAM /**2048**/ ); "//[ISO]//
- +N+" int int_hig = int( SAN_MAM /**2048**/ ); "//[ISO]//
- +N+" "//[ISO]//
- +N+" vec2 u_v = vec2( "//[ISO]//
- +N+" ( float( tilco_x ) + 0.5 ) "//[ISO]//
- +N+" / ( flt_wid - 0.0 ) "//[ISO]//
- +N+" "//[ISO]//
- +N+" , ( float( tilco_y ) + 0.5 ) "//[ISO]//
- +N+" / ( flt_hig - 0.0 ) "//[ISO]//
- +N+" );; "//[ISO]//
- +N+" "//[ISO]//
- +N+" uvec4 out_rgb; "//[ISO]//
- +N+" "//[ISO]//
- +N+" if( "//[ISO]//
- +N+" //: |<-------- mam_mem.wid -------->| "//[ISO]//
- +N+" tilco_x >= 0 && tilco_x < int_wid "//[ISO]//
- +N+" && tilco_y >= 0 && tilco_y < int_hig "//[ISO]//
- +N+" //: |<-------- mam_mem.hig -------->| "//[ISO]//
- +N+" ){ //:in_bounds_take_texture_sample_here: "//[ISO]//
- +N+" "//[ISO]//
- +N+" out_rgb = texture( mam_mem , u_v ); "//[ISO]//
- +N+" "//[ISO]//
- +N+" }else{ "//[ISO]//
- +N+" //:make_checker_pattern_if_out_of_bounds: "//[ISO]//
- +N+" "//[ISO]//
- +N+" //: o_e: Odd_Or_Even (1 or 0 output) "//[ISO]//
- +N+" //: txy: Tile_X_Y "//[ISO]//
- +N+" int txy = ( tilco_x + tilco_y ); "//[ISO]//
- +N+" int o_e = int( float( 0 ) "//[ISO]//
- +N+" + float(txy) "//[ISO]//
- +N+" -(2.0*floor( float(txy) / 2.0 )) "//[ISO]//
- +N+" );; "//[ISO]//
- +N+" int o_e_255 = o_e*255; "//[ISO]//
- +N+" "//[ISO]//
- +N+" out_rgb = uvec4( "//[ISO]//
- +N+" o_e_255 //: RED "//[ISO]//
- +N+" , o_e_255 //: GREEN "//[ISO]//
- +N+" , o_e_255 //: BLUE "//[ISO]//
- +N+" , 255 //: ALPHA "//[ISO]//
- +N+" );; "//[ISO]//
- +N+" };; "//[ISO]//
- +N+" return( out_rgb ); "//[ISO]//
- +N+" "//[ISO]//
- +N+"} //:[ Get_Tex_mam_mem ]://////////////////////://"//[ISO]//
- +N+" "//|ROT|//
- +N+"uvec4 Get_Tex_mam_mem_rot( //://///////////////://"//|ROT|//
- +N+" int tilco_x "//|ROT|//
- +N+", int tilco_y "//|ROT|//
- +N+"){ "//|ROT|//
- +N+" "//|ROT|//
- +N+" float x1 = float(SAN_MAM) / 2.0; //:CENTER "//|ROT|//
- +N+" float y1 = float(SAN_MAM) / 2.0; //:CENTER "//|ROT|//
- +N+" "//|ROT|//
- +N+" float x2 = float( tilco_x ); "//|ROT|//
- +N+" float y2 = float( tilco_y ); "//|ROT|//
- +N+" "//|ROT|//
- +N+" float dx = x1-x2; "//|ROT|//
- +N+" float dy = y1-y2; "//|ROT|//
- +N+" float ar = atan( dy , dx ); "//|ROT|//
- +N+" "//|ROT|//
- +N+" float dxy = sqrt( "//|ROT|//
- +N+" pow(x1-x2 , 2.0) "//|ROT|//
- +N+" + pow(y1-y2 , 2.0) "//|ROT|//
- +N+" );; "//|ROT|//
- +N+" "//|ROT|//
- +N+" float f_t = float( gam_tim ) / 255.0; "//|ROT|//
- +N+" "//|ROT|//
- +N+" float f_x = x1 + cos( ar + f_t ) * dxy; "//|ROT|//
- +N+" float f_y = y1 + sin( ar + f_t ) * dxy; "//|ROT|//
- +N+" "//|ROT|//
- +N+" int i_x = int( f_x ); "//|ROT|//
- +N+" int i_y = int( f_y ); "//|ROT|//
- +N+" "//|ROT|//
- +N+" "//|ROT|//
- +N+" uvec4 out_rgb = Get_Tex_mam_mem( "//|ROT|//
- +N+" i_x "//|ROT|//
- +N+" , i_y "//|ROT|//
- +N+" );; "//|ROT|//
- +N+" "//|ROT|//
- +N+" return( out_rgb ); "//|ROT|//
- +N+"} //://////////////////////////////////////////://"//|ROT|//
- //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://
- //:CP:Cut_and_Paste:(ABOVE):---------------------------------://
- +N+" //: Help make an error checker pattern if ://"//[OXY]//
- +N+" //: sampler goes out of bounds. Pick exact ://"//[OXY]//
- +N+" //: RGB colors for checker pattern so we can ://"//[OXY]//
- +N+" //: figure out where the error is comming ://"//[OXY]//
- +N+" //: from by looking at the resulting image ://"//[OXY]//
- +N+" //: in shader in raw data view. ://"//[OXY]//
- +N+" uvec4 OOB_TXY( //:.................:ERR_OOB_TXY"//[OXY]//
- +N+" "//[OXY]//
- +N+" //:XY tile coordinate that is out of bounds:"//[OXY]//
- +N+" int oob_t_x //:................:OutOfBou:t_x"//[OXY]//
- +N+" , int oob_t_y //:................:OutOfBou:t_y"//[OXY]//
- +N+" "//[OXY]//
- +N+" //: Parameters intentionally NOT uvec input ://"//[OXY]//
- +N+" //: Because all callsites to OOB_TXY should ://"//[OXY]//
- +N+" //: use unique RGB colors and should NOT ://"//[OXY]//
- +N+" //: be re-used. All calls should be directly ://"//[OXY]//
- +N+" //: [*inlined*] at the point they are needed.://"//[OXY]//
- +N+" , int r_0 , int g_0, int b_0 //:even_RGB "//[OXY]//
- +N+" , int r_1 , int g_1, int b_1 //:odd__RGB "//[OXY]//
- +N+" ){ "//[OXY]//
- +N+" "//[OXY]//
- +N+" uvec4 dye_eve = uvec4(r_0,g_0,b_0, 255); "//[OXY]//
- +N+" uvec4 dye_odd = uvec4(r_1,g_1,b_1, 255); "//[OXY]//
- +N+" uvec4 dye_err = uvec4(12 , 24, 48, 255); "//[OXY]//
- +N+" uvec4 dye_out = dye_err; "//[OXY]//
- +N+" "//[OXY]//
- +N+" //:--------------------------:SC[OGL_OXY]://"//[OXY]//
- +N+" #define _1_ (uint( 1 ))//:///////////////://"//[OXY]//
- +N+" #define _0_ (uint( 0 ))//:///////////////://"//[OXY]//
- +N+" uint u_x = uint( oob_t_x );//:AKA[u32_t_x] "//[OXY]//
- +N+" uint u_y = uint( oob_t_y );//:AKA[u32_t_y] "//[OXY]//
- +N+" uint o_x = uint(( u_x & _1_) > _0_); "//[OXY]//
- +N+" uint o_y = uint(( u_y & _1_) > _0_); "//[OXY]//
- +N+" uint oxy = uint(((o_x+o_y) & _1_) > _0_); "//[OXY]//
- +N+" #undef _1_ //://///////////////////////://"//[OXY]//
- +N+" #undef _0_ //://///////////////////////://"//[OXY]//
- +N+" //:--------------------------:SC[OGL_OXY]://"//[OXY]//
- +N+" "//[OXY]//
- +N+" //:On an [*odd*] or [*even*] checker? "//[OXY]//
- +N+" if( oxy == uint(0) ){ dye_out = dye_eve; }; "//[OXY]//
- +N+" if( oxy == uint(1) ){ dye_out = dye_odd; }; "//[OXY]//
- +N+" "//[OXY]//
- +N+" return( dye_out ); "//[OXY]//
- +N+" }//:[OOB_TXY]:_______________________________://"//[OXY]//
- +N+"//:Get memory that may or may not be "//|G_T_D_HOT|//
- +N+"//:hot-swapped out. "//|G_T_D_HOT|//
- +N+"uvec4 Get_Tex_dex_hot( "//|G_T_D_HOT|//
- +N+" int mem_t_x //:Memory:Tile_X :// "//|G_T_D_HOT|//
- +N+", int mem_t_y //:Memory:Tile_Y :// "//|G_T_D_HOT|//
- +N+", int inn_hot //: dex_hot :// "//|G_T_D_HOT|//
- +N+"){ "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" uvec4 out_rgb; "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" #define _0_ int(0) //:///////////////://"//|G_T_D_HOT|//
- +N+" #define _1_ int(1) //:///////////////://"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" //:calculate how many sub-sections of://"//|G_T_D_HOT|//
- +N+" //:SAN_MAM there are. Then minus one ://"//|G_T_D_HOT|//
- +N+" //:to get the MAX_HOT_SWA_DEX. ://"//|G_T_D_HOT|//
- +N+" //:m_i_hot starts at 1, not 0, hence ://"//|G_T_D_HOT|//
- +N+" //:the ( - _0_ ) ....................://"//|G_T_D_HOT|//
- +N+" int san_hot = ((SAN_MAM / SAN_ISO)); "//|G_T_D_HOT|//
- +N+" int m_i_hot = ((san_hot*san_hot)- _0_ );"//|G_T_D_HOT|//
- +N+" int m_i_txy = ((SAN_ISO )- _1_ );"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" bool oob_neg_hot =( inn_hot < 0 );"//|G_T_D_HOT|//
- +N+" bool oob_neg_txy =( mem_t_x < 0 );"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" bool oob_pos_hot =( inn_hot > m_i_hot );"//|G_T_D_HOT|//
- +N+" bool oob_pos_txy =( mem_t_x > m_i_txy );"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" bool oob_hot =( oob_neg_hot "//|G_T_D_HOT|//
- +N+" || oob_pos_hot );; "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" bool oob_txy =( oob_neg_txy "//|G_T_D_HOT|//
- +N+" || oob_pos_txy );; "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" bool oob_all =( oob_hot && oob_txy); "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" #define DEX_HOT int(dex_hot) //:::// "//|G_T_D_HOT|//
- +N+" bool use_hot = (DEX_HOT == inn_hot); "//|G_T_D_HOT|//
- +N+" bool not_hot = (DEX_HOT != inn_hot); "//|G_T_D_HOT|//
- +N+" #undef DEX_HOT //://////////////:// "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" #undef _0_ //://////////////////////://"//|G_T_D_HOT|//
- +N+" #undef _1_ //://////////////////////://"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" ;;;;;;if( oob_all ){ "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" out_rgb = OOB_TXY(mem_t_x,mem_t_y "//|G_T_D_HOT|//
- +N+" , 222,222,222 "//|G_T_D_HOT|//
- +N+" , 22, 22, 22);;"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" }else if( oob_neg_hot ){ //:-----://"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" out_rgb = OOB_TXY(mem_t_x,mem_t_y "//|G_T_D_HOT|//
- +N+" , 111,111,111 "//|G_T_D_HOT|//
- +N+" , 33, 33, 33);;"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" }else if( oob_pos_hot ){ //:-----://"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" out_rgb = OOB_TXY(mem_t_x,mem_t_y "//|G_T_D_HOT|//
- +N+" , 101,101,101 "//|G_T_D_HOT|//
- +N+" , 44, 44, 44);;"//|G_T_D_HOT|//
- +N+" }else if( oob_neg_txy ){ //:-----://"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" out_rgb = OOB_TXY(mem_t_x,mem_t_y "//|G_T_D_HOT|//
- +N+" , 123,123,123 "//|G_T_D_HOT|//
- +N+" , 55, 55, 55);;"//|G_T_D_HOT|//
- +N+" }else if( oob_pos_txy ){ //:-----://"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" out_rgb = OOB_TXY(mem_t_x,mem_t_y "//|G_T_D_HOT|//
- +N+" , 234,234,234 "//|G_T_D_HOT|//
- +N+" , 66, 66, 66);;"//|G_T_D_HOT|//
- +N+" }else if( use_hot ){ //:-----://"//|G_T_D_HOT|//
- +N+" //: Sample from isolated memory ://"//|G_T_D_HOT|//
- +N+" //: because the memory you are ://"//|G_T_D_HOT|//
- +N+" //: targeting is hot swapped out. ://"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" int iso_t_x = mem_t_x + 0; "//|G_T_D_HOT|//
- +N+" int iso_t_y = mem_t_y + 0; "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" out_rgb = Get_Tex_iso_mem( "//|G_T_D_HOT|//
- +N+" /**/ iso_t_x "//|G_T_D_HOT|//
- +N+" /**/ , iso_t_y );; "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" }else if( not_hot ){ //:-----://"//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" //:Offset the memory location to :// "//|G_T_D_HOT|//
- +N+" //:The correct 512-x-512 section :// "//|G_T_D_HOT|//
- +N+" //:of the master memory (mam_mem):// "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" //:________________:SC[GLSL_ITXY]:// "//|G_T_D_HOT|//
- +N+" #define DEX_STARTS_FROM_ONE ( 1 ) // "//|G_T_D_HOT|//
- +N+" #define INN_DEX ( inn_hot ) //:// "//|G_T_D_HOT|//
- +N+" #define INN_WID ( san_hot ) //:// "//|G_T_D_HOT|//
- +N+" //:- - - - - - - -- - - - - - - -:// "//|G_T_D_HOT|//
- +N+" #if( DEX_STARTS_FROM_ONE > 0 ) // "//|G_T_D_HOT|//
- +N+" #define DEX ( INN_DEX - 1 )//:// "//|G_T_D_HOT|//
- +N+" #define WID ( INN_WID )//:// "//|G_T_D_HOT|//
- +N+" #else //:// "//|G_T_D_HOT|//
- +N+" #define DEX ( INN_DEX )//:// "//|G_T_D_HOT|//
- +N+" #define WID ( INN_WID )//:// "//|G_T_D_HOT|//
- +N+" #endif //:// "//|G_T_D_HOT|//
- +N+" //:- - - - - - - -- - - - - - - -:// "//|G_T_D_HOT|//
- +N+" #define T trunc //://////:// "//|G_T_D_HOT|//
- +N+" int h_y = ( DEX /( WID ) ); "//|G_T_D_HOT|//
- +N+" int h_x = ( DEX -( h_y*WID ) ); "//|G_T_D_HOT|//
- +N+" #undef WID //://///////////:// "//|G_T_D_HOT|//
- +N+" #undef DEX //://///////////:// "//|G_T_D_HOT|//
- +N+" #undef T //://///////////:// "//|G_T_D_HOT|//
- +N+" #undef INN_DEX //://///////////:// "//|G_T_D_HOT|//
- +N+" #undef INN_WID //://///////////:// "//|G_T_D_HOT|//
- +N+" #undef DEX_STARTS_FROM_ONE //://:// "//|G_T_D_HOT|//
- +N+" //:________________:SC[GLSL_ITXY]:// "//|G_T_D_HOT|//
- +N+" //:// "//|G_T_D_HOT|//
- +N+" int o_x =( h_x * SAN_ISO );//:// "//|G_T_D_HOT|//
- +N+" int o_y =( h_y * SAN_ISO );//:// "//|G_T_D_HOT|//
- +N+" //:// "//|G_T_D_HOT|//
- +N+" int mam_t_x =( mem_t_x + o_x );//:// "//|G_T_D_HOT|//
- +N+" int mam_t_y =( mem_t_y + o_y );//:// "//|G_T_D_HOT|//
- +N+" //:// "//|G_T_D_HOT|//
- +N+" out_rgb = Get_Tex_mam_mem( //:// "//|G_T_D_HOT|//
- +N+" /**/ mam_t_x //:// "//|G_T_D_HOT|//
- +N+" /**/ , mam_t_y );; //:// "//|G_T_D_HOT|//
- +N+" //:// "//|G_T_D_HOT|//
- +N+" }else{ //:---------------------:-----:// "//|G_T_D_HOT|//
- +N+" //:WRONG:EDCL:(EXPECTED_DEAD_CODE_LINE) "//|G_T_D_HOT|//
- +N+" //:// "//|G_T_D_HOT|//
- +N+" //:// "//|G_T_D_HOT|//
- +N+" out_rgb = OOB_TXY( //:// "//|G_T_D_HOT|//
- +N+" mem_t_x,mem_t_y //:// "//|G_T_D_HOT|//
- +N+" ,128, 64, 32 //:// "//|G_T_D_HOT|//
- +N+" , 32, 64, 128 );;//:// "//|G_T_D_HOT|//
- +N+" //:// "//|G_T_D_HOT|//
- +N+" };; //:--:---------------------:-----:// "//|G_T_D_HOT|//
- +N+" "//|G_T_D_HOT|//
- +N+" //:----------------://"//|G_T_D_HOT|//
- +N+" return( out_rgb ); //:----------------://"//|G_T_D_HOT|//
- +N+" //:----------------://"//|G_T_D_HOT|//
- +N+"}//:[Get_tex_dex_hot / Get_tex_hot_mem]::://"//|G_T_D_HOT|//
- +N+"//:RotatedVersionOf[ Get_Tex_dex_hot ]/////://"//:HOT_ROT://
- +N+"uvec4 Get_Tex_dex_hot_rot( //://///////////://"//:HOT_ROT://
- +N+" int tilco_x /** tile::x **/ "//:HOT_ROT://
- +N+", int tilco_y /** tile::y **/ "//:HOT_ROT://
- +N+", int inn_hot /** dex_hot **/ "//:HOT_ROT://
- +N+"){ "//:HOT_ROT://
- +N+" "//:HOT_ROT://
- +N+" float x1 = float(SAN_ISO) / 2.0; //:CENTER"//:HOT_ROT://
- +N+" float y1 = float(SAN_ISO) / 2.0; //:CENTER"//:HOT_ROT://
- +N+" "//:HOT_ROT://
- +N+" float x2 = float( tilco_x ); "//:HOT_ROT://
- +N+" float y2 = float( tilco_y ); "//:HOT_ROT://
- +N+" "//:HOT_ROT://
- +N+" float dx = x1-x2; "//:HOT_ROT://
- +N+" float dy = y1-y2; "//:HOT_ROT://
- +N+" float ar = atan( dy , dx ); "//:HOT_ROT://
- +N+" "//:HOT_ROT://
- +N+" float dxy = sqrt( "//:HOT_ROT://
- +N+" pow(x1-x2 , 2.0) "//:HOT_ROT://
- +N+" + pow(y1-y2 , 2.0) "//:HOT_ROT://
- +N+" );; "//:HOT_ROT://
- +N+" "//:HOT_ROT://
- +N+" float f_t = float( gam_tim ) / 255.0; "//:HOT_ROT://
- +N+" "//:HOT_ROT://
- +N+" float f_x = x1 + cos( ar + f_t ) * dxy; "//:HOT_ROT://
- +N+" float f_y = y1 + sin( ar + f_t ) * dxy; "//:HOT_ROT://
- +N+" "//:HOT_ROT://
- +N+" int i_x = int( f_x ); "//:HOT_ROT://
- +N+" int i_y = int( f_y ); "//:HOT_ROT://
- +N+" "//:HOT_ROT://
- +N+" "//:HOT_ROT://
- +N+" uvec4 out_rgb = Get_Tex_dex_hot( "//:HOT_ROT://
- +N+" i_x /** tile::x **/ "//:HOT_ROT://
- +N+" , i_y /** tile::y **/ "//:HOT_ROT://
- +N+" , inn_hot /** dex_hot **/ "//:HOT_ROT://
- +N+" );; "//:HOT_ROT://
- +N+" "//:HOT_ROT://
- +N+" return( out_rgb ); "//:HOT_ROT://
- +N+"} //://////////////////////////////////////://"//:HOT_ROT://
- +N+"//:////////////////////////////////////////://"//[HOT_MEM]//
- +N+"//:----------------------------------------://"//[HOT_MEM]//
- +N+"//:Sample from whatever 512-x-512 region//:://"//[HOT_MEM]//
- +N+"//:of memory is targeted by [ hot_dex ].//:://"//[HOT_MEM]//
- +N+"//:If [ hot_dex === 0 ] then their //:://"//[HOT_MEM]//
- +N+"//:is no hot swapping target and //:://"//[HOT_MEM]//
- +N+"//:sample from [ iso_mem ] instead //:://"//[HOT_MEM]//
- +N+"//:of [ mam_mem ]. //:://"//[HOT_MEM]//
- +N+"//:----------------------------------------://"//[HOT_MEM]//
- +N+"uvec4 Get_Tex_hot_mem( //:://"//[HOT_MEM]//
- +N+"/**/ int mem_t_x //:Memory:Tile_X :// //:://"//[HOT_MEM]//
- +N+", int mem_t_y //:Memory:Tile_Y :// //:://"//[HOT_MEM]//
- +N+"){ //:://"//[HOT_MEM]//
- +N+" //:://"//[HOT_MEM]//
- +N+" //:dye_out: Like [rgb_out],but //:://"//[HOT_MEM]//
- +N+" //:pixel values in 0-255 range. //:://"//[HOT_MEM]//
- +N+" uvec4 dye_out; //:://"//[HOT_MEM]//
- +N+" //:://"//[HOT_MEM]//
- +N+" //:get_hot_swapping_index_uniform::::::://"//[HOT_MEM]//
- +N+" int inn_hot =int( dex_hot ); //:://"//[HOT_MEM]//
- +N+" //:://"//[HOT_MEM]//
- +N+" if( inn_hot >= DEX_HOT_MIN //:://"//[HOT_MEM]//
- +N+" && inn_hot <= DEX_HOT_MAX //:://"//[HOT_MEM]//
- +N+" ){ //:://"//[HOT_MEM]//
- +N+" //:If we have a valid hot swapping ://"//[HOT_MEM]//
- +N+" //:index [ 1 - 16 ], we will sample://"//[HOT_MEM]//
- +N+" //:data from that sub-sector ------://"//[HOT_MEM]//
- +N+" //:of [ mam_mem ]. ----------------://"//[HOT_MEM]//
- +N+" dye_out=( //:://"//[HOT_MEM]//
- +N+" Get_Tex_dex_hot( //:://"//[HOT_MEM]//
- +N+" /**/ mem_t_x //:Memory:Tile_X---://"//[HOT_MEM]//
- +N+" , mem_t_y //:Memory:Tile_Y---://"//[HOT_MEM]//
- +N+" , inn_hot //: dex_hot ---://"//[HOT_MEM]//
- +N+" ));; //:://"//[HOT_MEM]//
- +N+" }else //:://"//[HOT_MEM]//
- +N+" if( 0 == inn_hot ){ //:://"//[HOT_MEM]//
- +N+" //:- If no hot swapping index is---://"//[HOT_MEM]//
- +N+" //:- loaded, we will sample from---://"//[HOT_MEM]//
- +N+" //:- [ iso_mem ]. ---://"//[HOT_MEM]//
- +N+" dye_out=( //:://"//[HOT_MEM]//
- +N+" Get_Tex_iso_mem( //:://"//[HOT_MEM]//
- +N+" /**/ mem_t_x //:Memory:Tile_X---://"//[HOT_MEM]//
- +N+" , mem_t_y //:Memory:Tile_Y---://"//[HOT_MEM]//
- +N+" ));; //:://"//[HOT_MEM]//
- +N+" }else{ //:://"//[HOT_MEM]//
- +N+" //:://"//[HOT_MEM]//
- +N+" //:Create an error pattern in our -://"//[HOT_MEM]//
- +N+" //:data. May only be obvious when -://"//[HOT_MEM]//
- +N+" //:using a [raw_data_view] shader. ://"//[HOT_MEM]//
- +N+" dye_out = OOB_TXY( //:://"//[HOT_MEM]//
- +N+" mem_t_x //:TILE_COORD:X ---://"//[HOT_MEM]//
- +N+" , mem_t_y //:TILE_COORD:Y ---://"//[HOT_MEM]//
- +N+" , 121,131,141 //:EVEN_CHECKER ---://"//[HOT_MEM]//
- +N+" , 212,232,242 //:ODD__CHECKER ---://"//[HOT_MEM]//
- +N+" );; //:://"//[HOT_MEM]//
- +N+" };; //:://"//[HOT_MEM]//
- +N+" //:://"//[HOT_MEM]//
- +N+" return( dye_out ); //:://"//[HOT_MEM]//
- +N+" //:://"//[HOT_MEM]//
- +N+"}//:[Get_Tex_hot_mem]:_____________________://"//[HOT_MEM]//
- +N+"//::[Get_Tex_hot_mem]://///////////////////://"//[HOT_MEM]//
- //://////////////////////////////////////////////////////////://
- +N+"//:GR:Get_Rectangle:(BELOW):-------------------://"//[G_R]//
- +N+"//:GRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[G_R]//
- +N+"//: ://"//[G_R]//
- +N+"//: FUNCTION_NAMES_IDENTICAL_TO_CPU_SIDE_CODE! ://"//[G_R]//
- +N+"//: ://"//[G_R]//
- +N+"//:GRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[G_R]//
- +N+"/*-*/uvec4 Get_GLOBVAR_rec_vpc( /** void **/ ){ "//[G_R]//
- +N+" "//[G_R]//
- +N+" uvec4 rec_vpc =uvec4( "//[G_R]//
- +N+" TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_x_0 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_x_1 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_y_0 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vpc_y_1 )"//[G_R]//
- +N+" );; "//[G_R]//
- +N+" return( rec_vpc ); "//[G_R]//
- +N+" "//[G_R]//
- +N+"}/**/uvec4 Get_GLOBVAR_rec_vp0( /** void **/ ){ "//[G_R]//
- +N+" "//[G_R]//
- +N+" uvec4 rec_vp0 =uvec4( "//[G_R]//
- +N+" TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_x_0 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_x_1 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_y_0 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp0_y_1 )"//[G_R]//
- +N+" );; "//[G_R]//
- +N+" return( rec_vp0 ); "//[G_R]//
- +N+" "//[G_R]//
- +N+"}/**/uvec4 Get_GLOBVAR_rec_vp1( /** void **/ ){ "//[G_R]//
- +N+" "//[G_R]//
- +N+" uvec4 rec_vp1 =uvec4( "//[G_R]//
- +N+" TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_x_0 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_x_1 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_y_0 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp1_y_1 )"//[G_R]//
- +N+" );; "//[G_R]//
- +N+" return( rec_vp1 ); "//[G_R]//
- +N+"}/**/uvec4 Get_GLOBVAR_rec_vp2( /** void **/ ){ "//[G_R]//
- +N+" "//[G_R]//
- +N+" uvec4 rec_vp2 =uvec4( "//[G_R]//
- +N+" TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_x_0 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_x_1 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_y_0 )"//[G_R]//
- +N+" , TAU_001_U32( TAU_001_GLOBVAR_rec_vp2_y_1 )"//[G_R]//
- +N+" );; "//[G_R]//
- +N+" return( rec_vp2 ); "//[G_R]//
- +N+"} "//[G_R]//
- +N+"//:GRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[G_R]//
- +N+" "//|C_M|//
- +N+"//:////////////////////////////////////////////://"//|C_M|//
- +N+" "//|C_M|//
- +N+"//:CM:Convience_Methods: "//|C_M|//
- +N+"//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://"//|C_M|//
- +N+"//: Really better to calculate yourself seeing://"//|C_M|//
- +N+"//: how getting width and height is 8 texture ://"//|C_M|//
- +N+"//: fetches instead of 4 because has to call ://"//|C_M|//
- +N+"//: getter TWICE. TWICE because I can't think ://"//|C_M|//
- +N+"//: of scenario where I would be using only ://"//|C_M|//
- +N+"//: [ VP0_WID ] But not [ VP0_HIG ] ://"//|C_M|//
- +N+"//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://"//|C_M|//
- +N+"/*-*/float Get_VP0_WID_f32(){ "//|C_M|//
- +N+" uvec4 rec_vp0 = Get_GLOBVAR_rec_vp0( ); "//|C_M|//
- +N+" return(float( uint( 1 ) "//|C_M|//
- +N+" + rec_vp0.y "//|C_M|//
- +N+" - rec_vp0.x "//|C_M|//
- +N+" ));;//[VP0_WID]// "//|C_M|//
- +N+"}/**/float Get_VP0_HIG_f32(){ "//|C_M|//
- +N+" uvec4 rec_vp0 = Get_GLOBVAR_rec_vp0( ); "//|C_M|//
- +N+" return(float( uint(1) "//|C_M|//
- +N+" + rec_vp0.w "//|C_M|//
- +N+" - rec_vp0.z "//|C_M|//
- +N+" ));; "//|C_M|//
- +N+"} "//|C_M|//
- +N+"//:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://"//|C_M|//
- +N+" "//|C_M|//
- +N+"//:////////////////////////////////////////////://"//|C_M|//
- +N+"//:[glsl_main]:::::::::::::::::::::::::::::::::://"//[H_M]//
- +N+"void main(){ if( has_mem <= uint(0) ){ //://///://"//[H_M]//
- +N+" "//[H_M]//
- +N+" //:Default_Gradient_If_Textures_Not_Loaded: "//[H_M]//
- +N+" pix_fra = vec4( pix_ver , 0.5 ); "//[H_M]//
- +N+" "//[H_M]//
- +N+"}else{ //:////////////////////////////////////://"//[H_M]//
- +N+"if( uint(0) == ren_mod ){ //://////////////////://"//| 0 |//
- +N+" "//| 0 |//
- +N+" //: If render mode is zero(0), we will use ://"//| 0 |//
- +N+" //: a default shader that will show us what://"//| 0 |//
- +N+" //: is on the iso_mem memory block. ://"//| 0 |//
- +N+" //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" uint x_0; //"//| 0 |//
- +N+" uint x_1; //"//| 0 |//
- +N+" uint y_0; //"//| 0 |//
- +N+" uint y_1; //"//| 0 |//
- +N+" int vpc_wid; //"//| 0 |//
- +N+" int vpc_hig; //"//| 0 |//
- +N+" int iso_wid; //"//| 0 |//
- +N+" int iso_hig; //"//| 0 |//
- +N+" int mam_wid; //"//| 0 |//
- +N+" int mam_hig; //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" #define X_0 (TAU_001_GLOBVAR_rec_vpc_x_0) //"//| 0 |//
- +N+" #define X_1 (TAU_001_GLOBVAR_rec_vpc_x_1) //"//| 0 |//
- +N+" x_0 = TAU_001_U32( X_0 ); //"//| 0 |//
- +N+" x_1 = TAU_001_U32( X_1 ); //"//| 0 |//
- +N+" #undef X_0 //"//| 0 |//
- +N+" #undef X_1 //"//| 0 |//
- +N+" #define Y_0 (TAU_001_GLOBVAR_rec_vpc_y_0) //"//| 0 |//
- +N+" #define Y_1 (TAU_001_GLOBVAR_rec_vpc_y_1) //"//| 0 |//
- +N+" y_0 = TAU_001_U32( Y_0 ); //"//| 0 |//
- +N+" y_1 = TAU_001_U32( Y_1 ); //"//| 0 |//
- +N+" #undef Y_0 //"//| 0 |//
- +N+" #undef Y_1 //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" vpc_wid =( int( x_1 - x_0 ) + int( 1 ) ); //"//| 0 |//
- +N+" vpc_hig =( int( y_1 - y_0 ) + int( 1 ) ); //"//| 0 |//
- +N+" iso_wid =( SAN_ISO ); //"//| 0 |//
- +N+" iso_hig =( SAN_ISO ); //"//| 0 |//
- +N+" mam_wid =( SAN_MAM ); //"//| 0 |//
- +N+" mam_hig =( SAN_MAM ); //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" //:Calculate_On_Screen_Pixel_Coordinates:::://"//| 0 |//
- +N+" float f_x = gl_FragCoord.x; //"//| 0 |//
- +N+" float f_y = gl_FragCoord.y; //"//| 0 |//
- +N+" int vpc_p_x = int( floor( f_x - 0.5 ) ); //"//| 0 |//
- +N+" int vpc_p_y = int( floor( f_y - 0.5 ) ); //"//| 0 |//
- +N+" //: |<--------- FLIP_Y_AXIS ------->| ://"//| 0 |//
- +N+" vpc_p_y = (vpc_hig - 1 - vpc_p_y); //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" float r = 0.2; //"//| 0 |//
- +N+" float g = 0.2; //"//| 0 |//
- +N+" float b = 0.2; //"//| 0 |//
- +N+" float a = 1.0; //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" #define F float //:FFFFFFFFFFFFFFFFFFFFFFFF://"//| 0 |//
- +N+" #define I int //:IIIIIIIIIIIIIIIIIIIIIIII://"//| 0 |//
- +N+" "//| 0 |//
- +N+" float vpc_mtx_iso =(1.0//:[A]----->[B]:::::://"//| 0 |//
- +N+" * float( iso_wid ) //:DST/DEST/[B]:::::://"//| 0 |//
- +N+" / float( vpc_wid ) //:SRC/FROM/[A]:::::://"//| 0 |//
- +N+" );; //"//| 0 |//
- +N+" float vpc_mty_iso =(1.0//:[A]----->[B]:::::://"//| 0 |//
- +N+" * float( iso_hig ) //:DST/DEST/[B]:::::://"//| 0 |//
- +N+" / float( vpc_hig ) //:SRC/FROM/[A]:::::://"//| 0 |//
- +N+" );; //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" float vpc_mtx_mam =(1.0//:[A]----->[B]:::::://"//| 0 |//
- +N+" * float( mam_wid ) //:DST/DEST/[B]:::::://"//| 0 |//
- +N+" / float( vpc_wid ) //:SRC/FROM/[A]:::::://"//| 0 |//
- +N+" );; //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" float vpc_mty_mam =(1.0//:[A]----->[B]:::::://"//| 0 |//
- +N+" * float( mam_hig ) //:DST/DEST/[B]:::::://"//| 0 |//
- +N+" / float( vpc_hig ) //:SRC/FROM/[A]:::::://"//| 0 |//
- +N+" );; //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" // uvec4 intrgba = Get_Tex_mam_mem_rot //"//| 0 |//
- +N+" // uvec4 intrgba = Get_Tex_hot_mem //"//| 0 |//
- +N+" uvec4 intrgba = Get_Tex_iso_mem //"//| 0 |//
- +N+" ( //"//| 0 |//
- +N+" /**/ I( F(vpc_p_x) * vpc_mtx_iso ) //"//| 0 |//
- +N+" , I( F(vpc_p_y) * vpc_mty_iso ) //"//| 0 |//
- +N+" );; //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" //- uvec4 intrgba = Get_Tex_iso_mem_rot( -//"//| 0 |//
- +N+" //- /**/ I( F(vpc_p_x) * vpc_mto_mam ) -//"//| 0 |//
- +N+" //- , I( F(vpc_p_y) * vpc_mto_mam ) -//"//| 0 |//
- +N+" //- );; -//"//| 0 |//
- +N+" "//| 0 |//
- +N+" #undef F //:----:FFFFFFFFFFFFFFFFFFFFFFFF://"//| 0 |//
- +N+" #undef I //:----:IIIIIIIIIIIIIIIIIIIIIIII://"//| 0 |//
- +N+" //"//| 0 |//
- +N+" r = float( intrgba.x ) / 255.0; //"//| 0 |//
- +N+" g = float( intrgba.y ) / 255.0; //"//| 0 |//
- +N+" b = float( intrgba.z ) / 255.0; //"//| 0 |//
- +N+" a = float( intrgba.w ) / 255.0; //"//| 0 |//
- +N+" //"//| 0 |//
- +N+" pix_fra = vec4( r,g,b,a); //"//| 0 |//
- +N+" //"//| 0 |//
- +N+"}else //"//| 0 |//
- +N+"if( ren_mod > uint(0) ){ //:///////////////////://"//+ 0 +//
- +N+"//:AE:All_Editors:VarAccessibleToAnyEdi:(BELOW)://"//[A_E]//
- +N+"//:AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE://"//[A_E]//
- +N+" "//[A_E]//
- +N+" //:VR:ViewPortRectangles: "//[A_E]//
- +N+" //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://"//[A_E]//
- +N+" #define F float //:FFFFFFFFFFFFFFFFFF://"//[A_E]//
- +N+" #define T TAU_001_U32 //:TTTTTTTTTTTTTTTTTT://"//[A_E]//
- +N+" REC_INC rec_vpc = REC_INC( "//[A_E]//
- +N+" F( T( TAU_001_GLOBVAR_rec_vpc_x_0 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vpc_x_1 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vpc_y_0 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vpc_y_1 ) ) "//[A_E]//
- +N+" );; "//[A_E]//
- +N+" REC_INC rec_vp0 = REC_INC( "//[A_E]//
- +N+" F( T( TAU_001_GLOBVAR_rec_vp0_x_0 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vp0_x_1 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vp0_y_0 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vp0_y_1 ) ) "//[A_E]//
- +N+" );; "//[A_E]//
- +N+" REC_INC rec_vp1 = REC_INC( "//[A_E]//
- +N+" F( T( TAU_001_GLOBVAR_rec_vp1_x_0 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vp1_x_1 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vp1_y_0 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vp1_y_1 ) ) "//[A_E]//
- +N+" );; "//[A_E]//
- +N+" REC_INC rec_vp2 = REC_INC( "//[A_E]//
- +N+" F( T( TAU_001_GLOBVAR_rec_vp2_x_0 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vp2_x_1 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vp2_y_0 ) ) "//[A_E]//
- +N+" , F( T( TAU_001_GLOBVAR_rec_vp2_y_1 ) ) "//[A_E]//
- +N+" );; "//[A_E]//
- +N+" #undef F //://////////:FFFFFFFFFFFFFFFFFF://"//[A_E]//
- +N+" #undef T //://////////:TTTTTTTTTTTTTTTTTT://"//[A_E]//
- +N+" //:VRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVRVR://"//[A_E]//
- +N+" "//[A_E]//
- +N+"//:AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE://"//[A_E]//
- +N+"//:AE:All_Editors:VarAccessibleToAnyEdi:(ABOVE)://"//[A_E]//
- +N+ //|FSC|//
- +N+";;;;;;if( uint(0) == edi_mod ){ //:00000000000://"//|FSC|//
- +N+""+AA2_Get_edi_sha_src( 0 )+" "//|FSC|//
- +N+"" //|FSC|//
- +N+"}else if( uint(1) == edi_mod ){ //:11111111111://"//|FSC|//
- +N+""+AA2_Get_edi_sha_src( 1 )+" "//|FSC|//
- +N+"" //|FSC|//
- +N+"}else if( uint(2) == edi_mod ){ //:22222222222://"//|FSC|//
- +N+""+AA2_Get_edi_sha_src( 2 )+" "//|FSC|//
- +N+"" //|FSC|//
- +N+"}else if( uint(3) == edi_mod ){ //:33333333333://"//|FSC|//
- +N+""+AA2_Get_edi_sha_src( 3 )+" "//|FSC|//
- +N+"" //|FSC|//
- +N+"};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"//|FSC|//
- +N+"};;};;}//:[main]://////////////////////////////://"//|FSC|//
- );;//:its_a_string
- var fra_src=(""/**fra:[ fragment / fag_src ]**/
- + its_a_string
- );;//:[fra_src]/////////////////////////////////[fra_src]://
- //://///////////////////////////////////SC[ icogstep_01 ]://
- //://///////////////////////////////////SC[ icogstep_02 ]://
- var can_htm = document.createElement('canvas' /** can **/ );
- var bod =( document.body );
- if(!bod){
- bod = document.createElement("BODY");
- document.body=( bod );
- };;
- document.body.appendChild( can_htm );
- //://///////////////////////////////////SC[ icogstep_02 ]://
- //:////////////////////////////////////:SC[ icogstep_03 ]://
- can_htm.width =( GLO_CFG.INI_VPC_WID ); //:[ 512 ]
- can_htm.height=( GLO_CFG.INI_VPC_HIG ); //:[ 512 ]
- //:////////////////////////////////////:SC[ icogstep_03 ]://
- //://///////////////////////////////////SC[ icogstep_04 ]://
- var gl =(0
- || can_htm.getContext("webgl2")
- //: These context types likely wont support gl 300 es.
- //: so commenting them out.
- //: || can_htm.getContext("webgl")
- //: || can_htm.getContext("experimental-webgl")
- || alert("[NO_GL_FOR_YOU]")
- );;//://///////////////////////////////:SC[ icogstep_04 ]://
- //:////////////////////////////////////:SC[ icogstep_05 ]://
- var GL_CLEARCOLOR={
- //:Named "COLOR_BUFFER_BIT" but is not
- //:the "COLOR_BUFFER_BIT" but the color used when
- //:supplying "COLOR_BUFFER_BIT"
- COLOR_BUFFER_BIT:{ /**CLEARCOLOR.COLOR_BUFFER **/
- R: 255
- , G: 128
- , B: 64
- , A: 255
- }
- ,
- //:Named "DEPTH_BUFFER_BIT" but is not
- //:the "DEPTH_BUFFER_BIT" but the color used when
- //:supplying "DEPTH_BUFFER_BIT"
- DEPTH_BUFFER_BIT:{ /**CLEARCOLOR.DEPTH_BUFFER **/
- R: 0
- , G: 0
- , B: 0
- , A: 255
- }
- };;Object.seal( GL_CLEARCOLOR );
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:Clear Color Buffer:
- gl.clearColor( /** glClearColor **/
- GL_CLEARCOLOR.COLOR_BUFFER_BIT.R
- , GL_CLEARCOLOR.COLOR_BUFFER_BIT.G
- , GL_CLEARCOLOR.COLOR_BUFFER_BIT.B
- , GL_CLEARCOLOR.COLOR_BUFFER_BIT.A
- );;
- gl.clear( 0
- | gl.COLOR_BUFFER_BIT
- );;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:Clear Depth Buffer:
- gl.clearColor( /** glClearColor **/
- GL_CLEARCOLOR.DEPTH_BUFFER_BIT.R
- , GL_CLEARCOLOR.DEPTH_BUFFER_BIT.G
- , GL_CLEARCOLOR.DEPTH_BUFFER_BIT.B
- , GL_CLEARCOLOR.DEPTH_BUFFER_BIT.A
- );;
- gl.clear( 0
- | gl.DEPTH_BUFFER_BIT
- );;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:////////////////////////////////////:SC[ icogstep_05 ]://
- //://///////////////////////////////////SC[ icogstep_06 ]://
- //: ver_pro:VERtex___PROgram / ver_pog / vtx_pog
- //: fra_pro:FRAgment_PROgram / fag_pog / frg_pog
- var ver_pro = gl.createShader( gl. VERTEX_SHADER );
- var fra_pro = gl.createShader( gl.FRAGMENT_SHADER );
- //:Shader_Pack: (AKA: sad_pak | sad_pay | sha_pay )
- //:Shader_Pack: (AKA: Shader Payload ____________ )
- var sha_pak=[
- { //:AKA[ sad_typ,sad_src,sad_pro,sad_pog ]
- //:AKA[ ver_sad,ver_sor,ver_pog,vtx_pog ]
- sha_typ:"ver_sha" //:Shader_Type :Vertex
- , sha_src: ver_src //:Shader_Source
- , sha_pro: ver_pro //:Shader_Program
- }
- ,
- {
- //:AKA[ sad_typ,sad_src,sad_pro,sad_pog ]
- //:AKA[ fag_sad,fag_sor,fag_pog,frg_pog ]
- sha_typ:"fra_sha" //:Shader_Type :Fragment
- , sha_src: fra_src //:Shader_Source
- , sha_pro: fra_pro //:Shader_Program
- }
- ];;
- for( i = 0; i < sha_pak.length; i++ ){
- var sha_cur = ( sha_pak[ i ] ); //:ShaderCurrent
- gl.shaderSource(
- sha_cur.sha_pro //:[ver_pro | fra_pro ]::::::://
- , sha_cur.sha_src //:[ver_src | fra_src ]::::::://
- );;
- gl.compileShader( sha_cur.sha_pro );
- if( false
- ==
- gl.getShaderParameter(
- sha_cur.sha_pro //:[ ver_pro | fra_pro ]:://
- , gl.COMPILE_STATUS
- )
- ){
- var inf_log=( gl.getShaderInfoLog(
- sha_cur.sha_pro //:[ ver_pro | fra_pro ]:://
- ));;
- console.log( inf_log /** info_log **/ );
- throw( "[ICOG_JS:COMPILE_SHADER_FAILURE]" );
- };;
- };;//:NEXT[ sha_cur ]
- //://///////////////////////////////////SC[ icogstep_06 ]://
- //://///////////////////////////////////SC[ icogstep_07 ]://
- var all_pro = gl.createProgram(); //:AKA[ all_pog ]
- gl.attachShader( all_pro, ver_pro ); //:Vertex___Program
- gl.attachShader( all_pro, fra_pro ); //:Fragment_Program
- gl.linkProgram( all_pro );
- if( false
- ==
- gl.getProgramParameter(all_pro,gl.LINK_STATUS)
- ){
- var inf_log=( gl.getProgramInfoLog(
- all_pro
- ));;
- console.log( inf_log /** info_log **/ );
- throw( "[ICOG_JS:LINK_PROGRAM_FAILURE]" );
- };;
- gl.validateProgram( all_pro ); //:AKA[ all_pog ]
- if(false
- ==
- gl.getProgramParameter(all_pro,gl.VALIDATE_STATUS)
- ){
- var inf_log=( gl.getProgramInfoLog(
- all_pro
- ));;
- console.log( inf_log /** info_log **/ );
- throw( "[ICOG_JS:PROGRAM_VALIDATION_FAILURE]" );
- };;
- //://///////////////////////////////////SC[ icogstep_07 ]://
- //://///////////////////////////////////SC[ icogstep_08 ]://
- //: Create vertex data CPU side:
- var RGBGRA =[ 0.5 , 0.5 , 0.5 ]; //:GREY
- var RGB__W =[ 1.0 , 1.0 , 1.0 ]; //:WHITE
- var RGB__K =[ 0.0 , 0.0 , 0.0 ]; //:BLACK
- var RGB__R =[ 1.0 , 0.0 , 0.0 ]; //:RED
- var RGB__G =[ 0.0 , 1.0 , 0.0 ]; //:GREEN
- var RGB__B =[ 0.0 , 0.0 , 1.0 ]; //:BLUE
- var RGB__M =[ 1.0 , 0.0 , 1.0 ]; //:MAGENTA(RED+BLUE)
- var RGB__Y =[ 1.0 , 1.0 , 0.0 ]; //:YELLOW( R+G )
- var RGBCEN =[ 0.5, 0.5 , 0.0 ]; //:HALF:(BLUE & RED)
- var RGB_00= RGBCEN; //:B:TRI:CEN [ 0 , 0 ]
- var RGB_01= RGB__R; //:R:TRI:TOP [ + , + ]
- var RGB_02= RGB__K; //:W:TRI:TOP [ - , + ]
- var RGB_03= RGB__G; //:B:TRI:LEF [ - , - ]
- var RGB_04= RGB__Y; //:M:TRI:BOT [ + , - ]
- var RGB_05= RGB__R; //:R:TRI:BOT [ + , + ]
- var ZER =(0 * 0.0);
- var POS =(0 + 1.0);
- var NEG =(0 - 1.0);
- var CEN =(0 * 0.0);
- var tri_arr =[ //: AKA[ arr_ver|arr_tri|ver_arr|tri_arr]
- //:CENTER_VERTEX_IN_CENTER_OF_SCREEN:
- CEN, CEN , RGB_00[0], RGB_00[1],RGB_00[2]
- //:TRI:TOP: (Via:TRIANGLE_FAN)
- , POS, POS , RGB_01[0], RGB_01[1],RGB_01[2]
- , NEG, POS , RGB_02[0], RGB_02[1],RGB_02[2]
- //:TRI:LEF: (Via:TRIANGLE_FAN)
- , NEG, NEG , RGB_03[0], RGB_03[1],RGB_03[2]
- //:TRI:BOT: (Via:TRIANGLE_FAN)
- , POS, NEG , RGB_04[0], RGB_04[1],RGB_04[2]
- //:TRI:BOT: (Via:TRIANGLE_FAN)
- , POS, POS , RGB_05[0], RGB_05[1],RGB_05[2]
- ];;
- var tri_f3a =( new Float32Array( tri_arr ) );
- //://///////////////////////////////////SC[ icogstep_08 ]://
- //://///////////////////////////////////SC[ icogstep_09 ]://
- //: Upload data to GPU:
- //: [ ver_vbo === tri_vbo ]
- var tri_vbo = gl.createBuffer( ); //:vbo:VertexBufferObject
- gl.bindBuffer(gl.ARRAY_BUFFER,tri_vbo);
- gl.bufferData(gl.ARRAY_BUFFER,tri_f3a,gl.STATIC_DRAW);
- //://///////////////////////////////////SC[ icogstep_09 ]://
- //://///////////////////////////////////SC[ icogstep_10 ]://
- var NUM_COM,SIZ_COM,ver_pos,ver_col;
- { //:ANY_ORDER
- //:Define the data-layout for [ tri_arr / tri_f3a ]:
- NUM_COM={ //:NumberOfComponentsPer:whatever
- ver_pos : 2 //:NumComponentsFor:VertexPosition
- , ver_col : 3 //:NumComponentsFor:VertexColor
- , ver_all : 5
- };;
- SIZ_COM={ //:Component_Sizes
- siz_flt : Float32Array.BYTES_PER_ELEMENT
- };;
- //: att_loc(s):
- ver_pos = gl.getAttribLocation(all_pro,"ver_pos");
- ver_col = gl.getAttribLocation(all_pro,"ver_col");
- } //:ANY_ORDER
- //://///////////////////////////////////SC[ icogstep_10 ]://
- //://///////////////////////////////////SC[ icogstep_11 ]://
- if(
- (0
- + NUM_COM.ver_pos
- + NUM_COM.ver_col
- )
- !=
- NUM_COM.ver_all
- ){
- throw("[DOESNT_ADD_UP]");
- };;
- //://///////////////////////////////////SC[ icogstep_11 ]://
- //://///////////////////////////////////SC[ icogstep_12 ]://
- { //:ANY_ORDER
- gl.vertexAttribPointer(
- ver_pos
- , NUM_COM.ver_pos /** components_per_vertex **/
- , gl.FLOAT
- , gl.FALSE
- ,
- ( 1 //:ENTIRE_VERTEX_SIZE_NOT_JUST_SUB_COMPONENT
- * NUM_COM.ver_all //:NumberOfVerticies
- * SIZ_COM.siz_flt //:SizeOfVerticies
- * 1
- )
- , 0 /** initial_offset_into_data **/
- );;
- gl.vertexAttribPointer(
- ver_col
- , NUM_COM.ver_col /** components_per_vertex **/
- , gl.FLOAT
- , gl.FALSE
- ,
- ( 1 //:ENTIRE_VERTEX_SIZE_NOT_JUST_SUB_COMPONENT
- * NUM_COM.ver_all //:NumberOfVerticies
- * SIZ_COM.siz_flt //:SizeOfVerticies
- * 1
- )
- ,
- //:Skipping over slots for : ver_pos
- //:so we can start at first: ver_col
- /** initial_offset_into_data **/
- (1
- * NUM_COM.ver_pos //:OFFSET_IN_BYTES
- * SIZ_COM.siz_flt //:OFFSET_IN_BYTES
- )
- );;
- } //:ANY_ORDER
- //://///////////////////////////////////SC[ icogstep_12 ]://
- //://///////////////////////////////////SC[ icogstep_13 ]://
- { //:ANY_ORDER
- gl.enableVertexAttribArray( ver_pos /** att_loc **/ );
- gl.enableVertexAttribArray( ver_col /** att_loc **/ );
- } //:ANY_ORDER
- gl.useProgram( all_pro /** all_pog **/ );
- //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
- //|Added this just in case gl context was not |//
- //|same size as viewport. This call seems to have|//
- //|no effect. CONCLUSION: gl Context snaps to |//
- //|canvas size when created. |//
- //|______________________________________________|//
- var can_wid = can_htm.width;
- var can_hig = can_htm.height;
- //:DATE[2020_05_24]:ERROR_CHECK:////:////////////://
- //://////////////////////////////////////////////://
- //:SEE[ #CANVAS_SIZE_TROUBLE_SHOOTING# ]
- if( GLO_CFG.INI_VPC_WID != can_htm.width
- || GLO_CFG.INI_VPC_HIG != can_htm.height
- ){
- throw("[NOPE_NOPE:2020_05_24]");
- };;
- //://////////////////////////////////////////////://
- gl.viewport(
- 0 //:-------------- x --------------------://
- , 0 //:-------------- y --------------------://
- , GLO_CFG.INI_VPC_WID //:[ can_htm.WID | can_wid ]
- , GLO_CFG.INI_VPC_HIG //:[ can_htm.HIG | can_hig ]
- );;
- var buf_wid = gl.drawingBufferWidth;
- var buf_hig = gl.drawingBufferHeight;
- var size_fail=( 0 );
- if( can_wid != buf_wid ){
- size_fail++;
- console.log("[buf_wid!=can_wid]");
- };;
- if( can_hig != buf_hig ){
- size_fail++;
- console.log("[buf_hig!=can_hig]");
- };;
- if( size_fail > 0 ){
- throw("[size_fail]");
- }else{
- console.log("[size_pass]");
- };;
- //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
- gl.drawArrays(
- gl.TRIANGLE_FAN
- , 0
- , 6
- );;
- //://///////////////////////////////////SC[ icogstep_13 ]://
- //:Reserve variables on GPU
- //:side and return handles to them:
- //:[ ada_gra.iso_mem === GLO_DAT.ISO_MEM ]
- //:[ ada_gra.mam_mem === GLO_DAT.MAM_MEM ]
- ada_gra.iso_mem.tex_han = gl.createTexture(); //:uni_pix
- ada_gra.mam_mem.tex_han = gl.createTexture(); //:uni_pix
- var dat_arr = [
- ada_gra.iso_mem //:<---type:uni_pix
- //:GLO_DAT.ISO_MEM
- //: {
- //: tex_han : GLO_DAT.ISO_MEM_tex_han
- //: , tex_lot : GLO_DAT.ISO_MEM_tex_lot
- //: , pix_arr : GLO_DAT.ISO_MEM_pix_arr
- //: , pix_wid : GLO_DAT.ISO_MEM_pix_wid | SAN_ISO
- //: , pix_hig : GLO_DAT.ISO_MEM_pix_hig | SAN_ISO
- //: , pix_com : 4 //:pixelarray_components
- //: , pix_nam : "iso_mem" //:pixelarray_name
- //: , sam_val : ( 0 - 8 ) //:sampler_value
- //: , sam_loc : ( 0 - 9 ) //:sampler_location
- //: , has_loc : ( 0 - 10 ) //:sampler_location_set
- //: }
- ,
- ada_gra.mam_mem //:<---type:uni_pix
- //:GLO_DAT.MAM_MEM
- //: {
- //: tex_han : GLO_DAT.MAM_MEM_tex_han
- //: , tex_lot : GLO_DAT.MAM_MEM_tex_lot
- //: , pix_arr : GLO_DAT.MAM_MEM_pix_arr
- //: , pix_wid : GLO_DAT.MAM_MEM_pix_wid | SAN_MAM
- //: , pix_hig : GLO_DAT.MAM_MEM_pix_hig | SAN_MAM
- //: , pix_com : 4 //:pixelarray_components
- //: , pix_nam : "mam_mem" //:pixelarray_name
- //: , sam_val : ( 0 - 8 ) //:sampler_value
- //: , sam_loc : ( 0 - 9 ) //:sampler_location
- //: , has_loc : ( 0 - 10 ) //:sampler_location_set
- //: }
- ];;
- var dat_len = ( dat_arr.length );
- //:Validate the data in dat_arr:
- for( var i = 0 ; i < dat_len ; i++ ){
- if( dat_arr[ i ].pix_wid <= 0 ){
- throw("[INVALID:pix_wid]");
- };;
- if( dat_arr[ i ].pix_hig <= 0 ){
- throw("[INVALID:pix_hig]");
- };;
- if( dat_arr[ i ].pix_com <= 0 ){ //:AKA[ num_com ]
- throw("[INVALID:pix_com]");
- };;
- //://////////////////////////////////////////////////://
- //:Expect data for pixel array to already be
- //:allocated, even if we haven't put any
- //:meaningful values into it yet.
- //://////////////////////////////////////////////////://
- var cur_pix_wid = dat_arr[ i ].pix_wid;
- var cur_pix_hig = dat_arr[ i ].pix_hig;
- var cur_pix_com = dat_arr[ i ].pix_com; //:AKA[num_com]
- var exp_len=( 1
- * cur_pix_wid
- * cur_pix_hig
- * cur_pix_com //:AKA[ cur_num_com ]
- );;
- var got_len=( dat_arr[ i ].pix_arr.length );
- if( got_len != exp_len ){
- var err_dmm = ( "[ERR:DATA_MISMATCH]" );
- console.log( err_dmm );
- throw( err_dmm );
- };;
- //://////////////////////////////////////////////////://
- };;
- for( var i = 0 ; i < dat_len ; i++ ){
- var uni_pix =( dat_arr[ i ] );
- AA2_DebugFillPattern_Pyramid( uni_pix );
- if( uni_pix.pix_nam == "mam_mem" ){
- //:TODO: Fill areas of interest with patterns
- //:that can be located in shader code.
- //: //:FILL_FIRST_TO_NOT_OVERWRITE_OUTLINE:
- //: AA2_DebugFillPattern_FloodFill(
- //: uni_pix
- //:
- //: , GLO_CFG.TAU_001_x0 //:( x_0 )TOP_LEF:INCLUSIVE
- //: , GLO_CFG.TAU_001_y0 //:( y_0 )TOP_LEF:INCLUSIVE
- //:
- //: , GLO_CFG.TAU_001_x1 //:( x_1 )BOT_RIG:INCLUSIVE
- //: , GLO_CFG.TAU_001_y1 //:( y_1 )BOT_RIG:INCLUSIVE
- //: );;
- //:OUTLINE_AFTER_FILL_TO_OVERLAY_THE_OUTLINE:
- AA2_DebugFillPattern_OnePixelSolidOutline(
- uni_pix //:uniform_pixels (PixelContainer)
- , GLO_CFG.TAU_001_x0 //:( x_0 )TOP_LEF:INCLUSIVE
- , GLO_CFG.TAU_001_y0 //:( y_0 )TOP_LEF:INCLUSIVE
- , GLO_CFG.TAU_001_x1 //:( x_1 )BOT_RIG:INCLUSIVE
- , GLO_CFG.TAU_001_y1 //:( y_1 )BOT_RIG:INCLUSIVE
- );;
- //:Outline the bottom-right memorycell:
- var tmp_rec = NEW_rec_inc( ); //:<--DeclareFileScoped
- tmp_rec.x_0 =(( GLO_CFG.SAN_ISO * 3 ) - 0) ;
- tmp_rec.y_0 =(( GLO_CFG.SAN_ISO * 3 ) - 0) ;
- tmp_rec.x_1 =(( GLO_CFG.SAN_ISO * 4 ) - 1) ;
- tmp_rec.y_1 =(( GLO_CFG.SAN_ISO * 4 ) - 1) ;
- AA2_DebugFillPattern_OnePixelSolidOutline(
- uni_pix //:uniform_pixels (PixelContainer)
- , tmp_rec.x_0 + 0 //:( x_0 )BOU_LEF:(Top_Lef)
- , tmp_rec.y_0 + 0 //:( y_0 )BOU_TOP:(Top_Lef)
- , tmp_rec.x_1 - 0 //:( x_1 )BOU_RIG:(Bot_Rig)
- , tmp_rec.y_1 - 0 //:( y_1 )TOP_BOT:(Bot_Rig)
- );;
- AA2_DebugFillPattern_OnePixelSolidOutline(
- uni_pix //:uniform_pixels (PixelContainer)
- , tmp_rec.x_0 + 2 //:( x_0 )BOU_LEF:(Top_Lef)
- , tmp_rec.y_0 + 2 //:( y_0 )BOU_TOP:(Top_Lef)
- , tmp_rec.x_1 - 2 //:( x_1 )BOU_RIG:(Bot_Rig)
- , tmp_rec.y_1 - 2 //:( y_1 )TOP_BOT:(Bot_Rig)
- );;
- AA2_DebugFillPattern_OnePixelSolidOutline(
- uni_pix //:uniform_pixels (PixelContainer)
- , tmp_rec.x_0 + 16 //:( x_0 )BOU_LEF:(Top_Lef)
- , tmp_rec.y_0 + 16 //:( y_0 )BOU_TOP:(Top_Lef)
- , tmp_rec.x_1 - 16 //:( x_1 )BOU_RIG:(Bot_Rig)
- , tmp_rec.y_1 - 16 //:( y_1 )TOP_BOT:(Bot_Rig)
- );;
- aa2_PutPixelOfInterest(
- uni_pix
- , tmp_rec.x_0
- , tmp_rec.y_0
- );;
- }else
- if( uni_pix.pix_nam == "iso_mem" ){
- //:Do nothing.
- }else{
- throw(
- "[UNKNOWN_MEMORY_REGION_NAME]:"
- +"(((" +((( uni_pix.pix_nam )))+ ")))"
- );;
- };;
- };; //:NEXT[ i ]:::::::::::::::::::::::::::::::::::::::::://
- //:BootStrapping_Uniforms:
- //:These_lay_the_foundational_structure_of_engine:
- //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS====://
- ada_gra.has_mem = NEW_uni_u32( ); //: -- ://
- ada_gra.has_mem.varlock.u32_nam = ( "has_mem" ); //: 01 ://
- //: -- ://
- ada_gra.ren_mod = NEW_uni_u32( ); //: -- ://
- ada_gra.ren_mod.varlock.u32_nam = ( "ren_mod" ); //: 02 ://
- //: -- ://
- ada_gra.edi_mod = NEW_uni_u32( ); //: -- ://
- ada_gra.edi_mod.varlock.u32_nam = ( "edi_mod" ); //: 03 ://
- //: -- ://
- ada_gra.gam_tim = NEW_uni_u32( ); //: -- ://
- ada_gra.gam_tim.varlock.u32_nam = ( "gam_tim" ); //: 04 ://
- //: -- ://
- ada_gra.dex_hot = NEW_uni_u32( ); //: -- ://
- ada_gra.dex_hot.varlock.u32_nam = ( "dex_hot" ); //: 05 ://
- //:BSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBSBS====://
- ada_gra.gpuvcon = NEW_GPUVCON();
- Object.seal( ada_gra.gpuvcon );
- //:Populate Missing Components In Container:
- //://////////////////////////////////////://
- ada_gra.con_gra = gl ;
- ada_gra.all_pro = all_pro;
- ada_gra.ver_pro = ver_pro;
- ada_gra.fra_pro = fra_pro;
- ada_gra.can_htm = can_htm;
- //://////////////////////////////////////://
- //:BELOW:DEPENDS_ON[ ada_gra.con_gra ]///////////////////://
- //:------------------------------------------------------://
- //:Flag textures as uploaded so shader code will
- //:know it can safely use them.
- //://////////////////////////////////////////////////://
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //:[ 1==TRUE/ON/LOADED ]
- ada_gra.has_mem.u32_val =( 1 );
- ada_gra.gpuvcon.u32_put(
- ada_gra
- , ada_gra.has_mem
- );;
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //:PERSIST:
- //: 1: Textures (pix_arr)
- //: 2: TextureSamplers (sam_val)
- //:- - - - - - - - - -- - - - - - - - - -://
- ada_gra.gpuvcon.pix_put(
- ada_gra
- , ada_gra.iso_mem
- );;
- //:- - - - - - - - - -- - - - - - - - - -://
- ada_gra.gpuvcon.pix_put(
- ada_gra
- , ada_gra.mam_mem
- );;
- //:- - - - - - - - - -- - - - - - - - - -://
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //://////////////////////////////////////////////////://
- //:------------------------------------------------------://
- //:ABOVE:DEPENDS_ON[ ada_gra.con_gra ]///////////////////://
- return( ada_gra );
- };;//:///////////////////////////////////////////////////////://
- function aa2_PutPixelOfInterest(
- uni_pix, x_x, y_y
- ){
- var R =( 135 );//:UNIQUE_DIGITS
- var G =( 248 );//:UNIQUE_DIGITS
- var B =( 697 );//:UNIQUE_DIGITS
- var A =( 255 );
- AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
- };;
- function aa2_DebugFillPattern_FloodFill_PRIVATE(
- uni_pix
- , x_0 //:( x_0 )TOP_LEF:INCLUSIVE
- , y_0 //:( y_0 )TOP_LEF:INCLUSIVE
- , x_1 //:( x_1 )BOT_RIG:INCLUSIVE
- , y_1 //:( y_1 )BOT_RIG:INCLUSIVE
- , R //:RED
- , G //:GREEN
- , B //:BLUE
- , A //:ALPHA
- ){
- //:Invalid_If_Nan_Or_Negative:
- if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
- var msg = "[NAN_OR_NEG:(From:FloodFill:HID)]";
- console.log( msg );
- throw( msg );
- };;
- for( var y_y = y_0; y_y <= y_1; y_y++ ){
- for( var x_x = x_0; x_x <= x_1; x_x++ ){
- AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
- };;};;
- };;
- function AA2_DebugFillPattern_FloodFill(
- uni_pix
- , x_0 //:( x_0 )TOP_LEF:INCLUSIVE
- , y_0 //:( y_0 )TOP_LEF:INCLUSIVE
- , x_1 //:( x_1 )BOT_RIG:INCLUSIVE
- , y_1 //:( y_1 )BOT_RIG:INCLUSIVE
- ){
- //:Invalid_If_Nan_Or_Negative:
- if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
- var msg = "[NAN_OR_NEG:2020_06_01:A]";
- console.log( msg );
- throw( msg );
- };;
- var R = 64;
- var G = 64;
- var B = 128;
- var A = 255;
- aa2_DebugFillPattern_FloodFill_PRIVATE(
- uni_pix //:OBJ
- , x_0,y_0 //:MIN
- , x_1,y_1 //:MAX
- , R,G,B,A //:RGB
- );;
- };;
- function AA2_DebugFillPattern_FloodFill_Green(
- uni_pix
- , x_0 //:( x_0 )TOP_LEF:INCLUSIVE
- , y_0 //:( y_0 )TOP_LEF:INCLUSIVE
- , x_1 //:( x_1 )BOT_RIG:INCLUSIVE
- , y_1 //:( y_1 )BOT_RIG:INCLUSIVE
- ){
- //:Invalid_If_Nan_Or_Negative:
- if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
- var msg = "[NAN_OR_NEG:2020_06_01:B]";
- console.log( msg );
- throw( msg );
- };;
- var R = 16;
- var G = 128;
- var B = 16;
- var A = 255;
- aa2_DebugFillPattern_FloodFill_PRIVATE(
- uni_pix //:OBJ
- , x_0,y_0 //:MIN
- , x_1,y_1 //:MAX
- , R,G,B,A //:RGB
- );;
- };;
- function AA2_DebugFillPattern_OnePixelSolidOutline(
- uni_pix //:uniform_pixles (PixelContainer)
- , x_0 //:( x_0 )TOP_LEF:INCLUSIVE
- , y_0 //:( y_0 )TOP_LEF:INCLUSIVE
- , x_1 //:( x_1 )BOT_RIG:INCLUSIVE
- , y_1 //:( y_1 )BOT_RIG:INCLUSIVE
- ){
- //:Invalid_If_Nan_Or_Negative:
- if((!(x_0>=0))||(!(x_1>=0))||(!(y_0>=0))||(!(y_1>=0))){
- var msg = "[NAN_OR_NEG:2020_06_01:C]";
- console.log( msg );
- throw( msg );
- };;
- var R = 128;
- var G = 128;
- var B = 128;
- var A = 255;
- var x_x = ( 0 - 5678 );
- var y_y = ( 0 - 6789 );
- //:Top and bottom lines:
- //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
- y_y = y_0;
- for( x_x = x_0; x_x <= x_1 ; x_x++ ){
- AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
- };;
- y_y = y_1;
- for( x_x = x_0; x_x <= x_1 ; x_x++ ){
- AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
- };;
- //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
- //:Left And Right Lines:
- //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
- x_x = x_0;
- for( y_y = y_0; y_y <= y_1; y_y++ ){
- AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
- };;
- x_x = x_1;
- for( y_y = y_0; y_y <= y_1; y_y++ ){
- AA2_uni_pix_PutPix_XY( uni_pix ,R,G,B,A, x_x,y_y );
- };;
- //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
- };;
- //:PROCOOP[ uni_pix.PutPix.XY( R,G,B,A ) ]
- function AA2_uni_pix_PutPix_XY(
- uni_pix
- , R,G,B,A //:Colors as byte (0-255) values.
- , t_x,t_y //:XY_Coordinate_Of_Pixel
- ){
- //:Added_To_Make_Easier_To_See_In_Debugger:
- var pix_arr = uni_pix.pix_arr;
- var pix_wid = uni_pix.pix_wid;
- var pix_hig = uni_pix.pix_hig;
- var pix_com = uni_pix.pix_com;
- //:FORMULA[ XY_TO_INDEX-JAVASCRIPT ]:////:///////////://
- var pix_dex = t_x + ( pix_wid * t_y); //:SC[XYIP_JS]
- var com_dex = ( pix_dex * pix_com ); //:SC[XYIP_JS]
- //:FORMULA[ XY_TO_INDEX-JAVASCRIPT ]:////:///////////://
- uni_pix.pix_arr[ com_dex + 0 ] =(((( R ))));
- uni_pix.pix_arr[ com_dex + 1 ] =(((( G ))));
- uni_pix.pix_arr[ com_dex + 2 ] =(((( B ))));
- uni_pix.pix_arr[ com_dex + 3 ] =(((( A ))));
- };;
- function AA2_DebugFillPattern_Pyramid( uni_pix ){
- //:Added_To_Make_Easier_To_See_In_Debugger:
- var pix_arr = uni_pix.pix_arr;
- var pix_wid = uni_pix.pix_wid;
- var pix_hig = uni_pix.pix_hig;
- var pix_com = uni_pix.pix_com;
- //:Populate textures with bogus pattern for feedback:
- var pix_max =( pix_wid * pix_hig ) -1;
- if(! pix_max > 0 ){ throw("[BAD_PIX_MAX]"); };
- for( var pix_dex = 0 ; pix_dex <= pix_max ; pix_dex++ ){
- var com_dex = ( pix_dex * pix_com );
- var t_x = pix_dex % pix_wid ;
- var t_y = (pix_dex-t_x)/ pix_wid ;
- //:RG:Rectangular_Gradient_Formula:
- //:RGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRG://
- //: ://
- //: The shortest possible distance to ://
- //: any edge determines the pixel color. ://
- //: ://
- //:RGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRG://
- var x_0 = t_x; //:DIST_FROM_SIDE:LEF
- var x_1 = pix_wid - 1 - t_x; //:DIST_FROM_SIDE:RIG
- var y_0 = t_y; //:DIST_FROM_SIDE:TOP
- var y_1 = pix_hig - 1 - t_y; //:DIST_FROM_SIDE:BOT
- var min=(
- Math.min(
- Math.min( x_0, x_1 )
- , Math.min( y_0, y_1 )
- )
- );;
- //:RGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRGRG://
- var o_e = ( ( t_x + t_y ) % 2 )
- var inv = 1-o_e;
- //:DP:Diagonal_Primaries(ForVisualDebug):--------://
- //:DPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDP://
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- if( t_x == 0 && t_y == 0 ){
- AA2_uni_pix_PutPix_XY(
- uni_pix
- , 0 , 0 , 0 ,255 //:BLACK
- , t_x,t_y
- );;
- }else
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- if( t_x == 1 && t_y == 1 ){
- AA2_uni_pix_PutPix_XY(
- uni_pix
- , 255, 0 , 0 ,255 //:RED
- , t_x,t_y
- );;
- }else
- if( t_x == 2 && t_y == 2 ){
- AA2_uni_pix_PutPix_XY(
- uni_pix
- , 0 ,255, 0 ,255 //:GREEN
- , t_x,t_y
- );;
- }else
- if( t_x == 3 && t_y == 3 ){
- AA2_uni_pix_PutPix_XY(
- uni_pix
- , 0 , 0 ,255,255 //:BLUE
- , t_x,t_y
- );;
- }else
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- if( t_x == 4 && t_y == 4 ){
- AA2_uni_pix_PutPix_XY(
- uni_pix
- , 0 ,255,255,255 //:CYAN
- , t_x,t_y
- );;
- }else
- if( t_x == 5 && t_y == 5 ){
- AA2_uni_pix_PutPix_XY(
- uni_pix
- , 255,255, 0 ,255 //:YELLOW
- , t_x,t_y
- );;
- }else
- if( t_x == 6 && t_y == 6 ){
- AA2_uni_pix_PutPix_XY(
- uni_pix
- , 255, 0 ,255,255 //:MAGENTA
- , t_x,t_y
- );;
- }else
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //:DPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDP://
- //:E:ELSE: - - - - - - - -- - - - - - - - - - - -://
- //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
- {
- if( false /** t_y % 4 <= 1 **/ ){
- //:USE[ t_y % 4 <= 1 ] in "if" above
- //:if you want to:
- //:Draw lines 2 pixels thick.
- //:(Helpful for debugging resolution bugs)
- uni_pix.pix_arr[ com_dex + 0 ] = 0 +255 ;
- uni_pix.pix_arr[ com_dex + 1 ] = 0 +0 ;
- uni_pix.pix_arr[ com_dex + 2 ] = 0 +0 ;
- uni_pix.pix_arr[ com_dex + 3 ] = 0 +255 ;
- }else{
- uni_pix.pix_arr[ com_dex + 0 ] = o_e*128 ;
- uni_pix.pix_arr[ com_dex + 1 ] = inv*128 ;
- uni_pix.pix_arr[ com_dex + 2 ] = min%256 ;
- uni_pix.pix_arr[ com_dex + 3 ] = 0 +255 ;
- };;
- };;
- //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
- };;
- };; //:[AA2_DebugFillPattern_Pyramid]:////://////////////://
- //:AGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAG://
- //:AG:Adapter:Graphics:(ABOVE):------------------------------://
- function NEW_uni_pix( ){ //:uni_pix:Texture_Container
- var uni_pix={
- VAR_TYP:"uni_pix" /**VARIABLE_TYPE**/
- //:INDEX:
- //:==================================================://
- //: tex_han : ( 0 - 1 ) //:texture_handle
- //: tex_lot : ( 0 - 2 ) //:texture_slot
- //: pix_arr : ( 0 - 3 ) //:pixelarray
- //: pix_wid : ( 0 - 4 ) //:pixelarray_width
- //: pix_hig : ( 0 - 5 ) //:pixelarray_height
- //: pix_com : ( 0 - 6 ) //:pixelarray_components
- //: pix_nam : ( 0 - 7 ) //:pixelarray_name
- //: sam_val : ( 0 - 8 ) //:sampler_value
- //: sam_loc : ( 0 - 9 ) //:sampler_location
- //: has_loc : ( 0 - 10 ) //:sampler_location_set
- //:==================================================://
- , tex_han :(0 - 111 ) //: Texture_Handle
- , tex_lot :(0 - 222 ) //: Texture_Slot
- //: pix_arr : Array of texture data.
- //: pix_arr : AKA[ tex_arr | tex_val | pix_val ]
- , pix_arr : null
- , pix_wid :(0 - 333 ) //: PixelBitmap:WID
- , pix_hig :(0 - 444 ) //: PixelBitmap:HIG
- , pix_com :(0 - 555 ) //: ComponentsPerPixel
- //: pix_val : could be contrued as the pixel array
- //: data or as the texture sampler's value.
- //: Thus "pix_val" should not be used here.
- //: "pix_val" should be used in singular sense
- //: to mean "value of a single pixel.
- //:Unlike the "varlock" object for uni_u32,
- //:this varlock container also has the VALUE of
- //:the uniform as well. Meaning you can only
- //:set it once, and then it is frozen.
- //:
- //:UPDATE:
- //:Decided against putting these values into
- //:"varlock" container. Reasons:
- //: 1: It nest things too deep.
- //: 2: Nested layouts are difficult to define
- //: on the fly.
- //: 3: I said that you shouldn't encapsulate
- //: just to prevent programmers from doing
- //: stupid things with data. Let's stick
- //: to that.
- //:varlock:{ ////////////////////////////////////://
- , pix_nam : "" //: AKA[ tex_nam | sam_nam ]
- , sam_val : 0 //: AKA[ pix_val | tex_val ]
- , sam_loc : 0
- , has_loc : 0 //:Has location for sam_loc
- //:NOTE: Pretty sure [ sam_val == tex_lot ]
- //: must always be true if sampler is
- //: to sample from it's associated texture.
- //:} ////////////////////////////////////////////://
- };;Object.seal( uni_pix );
- return( uni_pix );
- };;
- //:UH:Uniform_Helpers:(BELOW):-------------------------------://
- //:UHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUH://
- //:UC:Uniform_Containers:(BELOW):------------------------://
- //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
- //: ://
- //: The structs below are all analogous in structure, ://
- //: though may have sligh differences that make them ://
- //: not suitable for templating. ://
- //: ://
- //: (Templates are complex, rather be verbose ) ://
- //: (So what I am saying is... Even if I could ) ://
- //: (template out and make this generic and re-usable ) ://
- //: (I would choose not to for the sake of simplicity.) ://
- //: ://
- //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
- function NEW_uni_u32(){
- //:UNIform_Uint32:(struct)
- var uni_u32={
- VAR_TYP:"uni_u32" /**VARIABLE_TYPE**/
- ,
- u32_val : 0 //:UINT32_VARIABLE:VALUE
- ,
- //:Nesting these params a bit deeper so we can
- //:Object.freeze( varlock ) once the uniform value
- //:has been cached.
- varlock:{
- u32_nam : "" //:UINT32_VARIABLE:NAME
- , u32_loc : 0 //:UINT32_VARIABLE:LOCATION
- , has_loc : 0 //:variable_location_fetched
- }
- };;Object.seal( uni_u32 );
- return( uni_u32 );
- };;
- //:ucucucucucucucucucucucucucucucucucucucucucucucucucucuc://
- //: TODO: move "uni_pix" struct declaration back
- //: into this location within code.
- //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
- //:UC:Uniform_Containers:(ABOVE):------------------------://
- //:uhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuh://
- //:VC:Variable_Controllers:(BELOW):----------------------://
- //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
- function NEW_GPUVCON(){
- var gpuvcon = new GPUVCON();
- Object.seal( gpuvcon );
- return( gpuvcon );
- };;
- function GPUVCON( ){ //:GPU_VARIABLE_CONTROLLER
- "use strict"
- //://////////////////////////////////////////////////://
- //:uni_u32: get/put:
- //:Represents an unsigned integer value that is
- //:shared between the GPU and CPU.
- this.u32_get = u32_get; //:get( ada_gra, uni_u32 )
- this.u32_put = u32_put; //:put( ada_gra, uni_u32 )
- //:uni_pix: get/put:
- //:Represents tile-map formatted data shared
- //:between GPU and CPU.
- this.pix_get = pix_get; //:get( ada_gra, uni_pix )
- this.pix_put = pix_put; //:put( ada_gra, uni_pix )
- //:////////////////////////////////////////////////--://
- //:u32:uni_u32:[get|put]:(BELOW):--------------------://
- //:u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32--://
- //: - - - - - - - - - - - - ---- - - - - - - - - - --://
- function u32_get(
- ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
- , uni_u32 //:Uniform_Package
- ){
- "use strict"
- //:EC:Error_Checking_Inputs:
- //:ECECECECECECECECECECECECECECECECECECECECECECEC://
- if(uni_u32.VAR_TYP!="uni_u32"){
- throw("[u32_get:VT]");
- };;
- //:AKA[ ogl_ctx | ctx_ogl | con_gra | gra_con ]
- if(false === ada_gra.con_gra
- || true === ada_gra.con_gra
- ){
- throw("[u32_get:NOT_A_BOOL:ada_gra.con_gra]");
- };;
- if( null == ada_gra.con_gra ){
- throw("[u32_get:MISSING:ada_gra.con_gra]");
- };;
- //:ECECECECECECECECECECECECECECECECECECECECECECEC://
- //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
- u32_loc( ada_gra, uni_u32 ); //:( uni_u32.u32_loc );
- //: developer.mozilla.org/en-US/docs/
- //: Web/API/WebGLRenderingContext/getUniform
- //:Not sure why "v" at end:
- uni_u32.u32_val=(
- //:getUniformuiv: NOT A FUNCTION
- //:getUniformuv: NOT A FUNCTION
- //:getUniformu : NOT A FUNCTION
- //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
- //:[ con_gra ]AKA[ gra_con ]
- ada_gra.con_gra.getUniform( //: getUniform
- ada_gra.all_pro //:PROGRAM
- , uni_u32.varlock.u32_loc //:LOCATION
- )
- );;
- return( undefined /**void**/ );
- };;
- //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
- function u32_put(
- ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
- , uni_u32 //:Uniform_Package
- ){
- "use strict"
- //:EC:Error_Checking_Inputs:
- //:ECECECECECECECECECECECECECECECECECECECECECECEC://
- if(uni_u32.VAR_TYP!="uni_u32"){
- throw("[u32_put:VT]");
- };;
- //:AKA[ ogl_ctx | ctx_ogl | con_gra | gra_con ]
- if(false === ada_gra.con_gra
- || true === ada_gra.con_gra
- ){
- throw("[u32_put:NOT_A_BOOL:ada_gra.con_gra]");
- };;
- if( null == ada_gra.con_gra ){
- throw("[u32_put:MISSING:ada_gra.con_gra]");
- };;
- //:ECECECECECECECECECECECECECECECECECECECECECECEC://
- //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
- u32_loc( ada_gra, uni_u32 ); //:( uni_u32.u32_loc );
- //:make_sure_value_is_valid:
- if( !( uni_u32.u32_val >= 0 ) ){
- throw("[uniform_value_invalid]");
- };;
- ada_gra.con_gra.uniform1ui( /** uniform1ui **/
- uni_u32.varlock.u32_loc //:LOCATION
- , uni_u32.u32_val //:<<<<<<<:VALUE
- );;
- };;
- //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
- function u32_loc(
- ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
- , uni_u32
- ){
- "use strict"
- if(uni_u32.VAR_TYP!="uni_u32"){
- throw("[u32_loc:VT]");
- };;
- if( "" == uni_u32.varlock.u32_nam ){
- //:UNNS:Uniform_Name_Never_Set
- throw("[FN:u32_loc(...):UNNS]");
- };;
- //:L:Location:Stash_Location_And_Freeze:---------://
- //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
- //://////////////////////////////////////////////://
- if( uni_u32.varlock.has_loc <= 0 ){
- uni_u32.varlock.has_loc = 1 ;
- uni_u32.varlock.u32_loc=(
- //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
- //:[ con_gra ]AKA[ gra_con ]
- ada_gra.con_gra.getUniformLocation(
- ada_gra.all_pro
- , uni_u32.varlock.u32_nam
- )
- );;
- //:We should never have to fetch this again,
- //:so freeze the "varlock" container:
- uni_u32.varlock.has_loc =( 2 );
- Object.freeze( uni_u32.varlock );
- };;//:///////////////////////////////////////////://
- //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
- if( null == uni_u32.varlock.u32_loc //:WEBGL
- || 0 > uni_u32.varlock.u32_loc //:C99/C11
- ){
- //:Also note that shader variables can be
- //:optimized out of your shader code if you
- //:do not use them.
- //:( Declared But Not Used ===> OptimizedOut )
- var u32_nam=( uni_u32.varlock.u32_nam );
- var msg=(""
- + "[ERR:DOES_UNIFORM_EXIST_IN_SHADER?]:((("
- + u32_nam
- + ")))"
- );;
- console.log( msg );
- throw( msg );
- };;
- };;
- //: - - - - - - - - - - - - ---- - - - - - - - - - --://
- //:u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32u32--://
- //:u32:uni_u32:[get|put]:(ABOVE):--------------------://
- //:vcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvc://
- //:uhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuh://
- //:vcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvc://
- //:TL:Top_Level_publicly_exposed_functions:----------://
- //:TLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTL://
- function pix_get(
- ada_gra
- , uni_pix
- ){
- //:TS:TextureSampler( sam_val & sam_loc ):-------://
- //:TS:tex_sam ===== ( sam_val & sam_loc ):-------://
- //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
- _pix_get_TextureSamplerUniform(
- ada_gra
- , uni_pix
- );;
- //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
- //:PA:pix_arr:(pixel_array):(BELOW):-------------://
- //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
- _pix_get_TexturePixelData(
- ada_gra
- , uni_pix
- );;
- //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
- };;
- function pix_put(
- ada_gra
- , uni_pix
- ){
- //:TS:TextureSampler( sam_val & sam_loc ):-------://
- //:TS:tex_sam ===== ( sam_val & sam_loc ):-------://
- //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
- _pix_put_TextureSamplerUniform(
- ada_gra
- , uni_pix
- );;
- //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://
- //:PA:pix_arr:(pixel_array):(BELOW):-------------://
- //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
- _pix_put_TexturePixelData(
- ada_gra
- , uni_pix
- );;
- //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
- };;
- //:TLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTL://
- //:TD:Texture_Data:----------------------------------://
- //:TDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTD://
- function _pix_get_TexturePixelData(
- ada_gra
- , uni_pix
- ){
- //:DATE[ 2020_05_17 ]
- //:Looked around the web for usage....
- //:I think I ahve the function call correct
- //:but not certain.
- throw("[I_DONT_KNOW_IF_THIS_CODE_WORKS_YET]");
- var G = ada_gra.con_gra;
- //: Extract_Variables_From_Container:
- //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
- var tex_lot = uni_pix.tex_lot;
- var tex_han = uni_pix.tex_han;
- var pix_arr = uni_pix.pix_arr;
- //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
- G.activeTexture( G.TEXTURE0 + tex_lot );
- G.bindTexture( G.TEXTURE_2D , tex_han );
- G.getTexImage( //:RELATED[ texImage2D ]
- GL_TEXTURE_2D //:TARGET
- , 0 //:LEVEL
- , G.RGBA_INTEGER //:SOURCE_FORMAT
- , pix_arr //:ARRAY_BUFFER_VIEW
- );;
- };;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- function _pix_put_TexturePixelData(
- ada_gra
- , uni_pix
- ){
- var G = ada_gra.con_gra;
- //: Extract_Variables_From_Container:
- //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
- var tex_lot = uni_pix.tex_lot;
- var tex_han = uni_pix.tex_han;
- var pix_wid = uni_pix.pix_wid;
- var pix_hig = uni_pix.pix_hig;
- var pix_arr = uni_pix.pix_arr;
- //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
- //:TP:Texture_Push:------------------------------://
- //:TPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTP://
- G.activeTexture( G.TEXTURE0 + tex_lot );
- G.bindTexture( G.TEXTURE_2D , tex_han );
- //: NEAREST_MIPMAP_NEAREST:
- //: gamedev.stackexchange.com/questions/158738
- var T_2D = G.TEXTURE_2D ;
- var NEAR = G.NEAREST ;
- var EDGE = G.CLAMP_TO_EDGE;
- var MIN_FIL = G.TEXTURE_MIN_FILTER;
- var MAG_FIL = G.TEXTURE_MAG_FILTER;
- var TWRAP_S = G.TEXTURE_WRAP_S;
- var TWRAP_T = G.TEXTURE_WRAP_T;
- G.texParameteri( T_2D, MIN_FIL , NEAR );
- G.texParameteri( T_2D, MAG_FIL , NEAR );
- G.texParameteri( T_2D, TWRAP_S , EDGE );
- G.texParameteri( T_2D, TWRAP_T , EDGE );
- //:Before pushing, set alignment:
- const ALN = 4; //:ALN:"Alignment"
- G.pixelStorei(G.UNPACK_ALIGNMENT, ALN);
- //+ Turns out TexStorage2D does not exist in +//
- //+ modern WebGL2 and is marked as exprimental. +//
- //+ So just keep doing it the way you are +//
- //+ doing it. +//
- //- G.TexStorage2D( | NEVER_MIND: | -//
- //- G.TEXTURE_2D | replace: texImage2D | -//
- //- , 0 | with: | -//
- //- , G.RGBA8UI | 1. texStorage2D | -//
- //- , pix_wid | THEN | -//
- //- , pix_hig | 2. texSubImage2D | -//
- //- );; | | -//
- //- SEE[ GL_CREATE_COMPLETE_TEXTURE ] | -//
- //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
- //|Note that GL_BGRA pixel transfer format is |//
- //|only preferred when uploading to GL_RGBA8 |//
- //|images. When dealing with other formats,like |//
- //|GL_RGBA16,GL_RGBA8UI or even GL_RGBA8_SNORM, |//
- //|then the regular GL_RGBA ordering may be |//
- //|preferred. |//
- //| khronos.org/opengl/wiki/Common_Mistakes |//
- //|______________________________________________|//
- G.texImage2D( //:-------------------------------://
- G.TEXTURE_2D //:TARGET
- , 0 //:LEVEL
- , G.RGBA8UI //:INTERNAL_FORMAT
- //:------------------------------------------://
- , pix_wid //:WIDTH / PIX_WID
- , pix_hig //:HEIGHT / PIX_HIG
- , 0 //:BORDER
- //:------------------------------------------://
- , G.RGBA_INTEGER //:SOURCE_FORMAT
- , G.UNSIGNED_BYTE //:SOURCE_TYPE
- , pix_arr //:ARRAY_BUFFER_VIEW
- );//:--------------------------------------------://
- //:TPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTP://
- };;
- //:TDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTDTD://
- //:pix:uni_pix:[get|put]:(BELOW):--------------------://
- //:pixpixpixpixpixpixpixpixpixpixpixpixpixpixpixpix--://
- //: - - - - - - - - - - - - ---- - - - - - - - - - --://
- function _pix_get_TextureSamplerUniform(
- ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
- , uni_pix //:Uniform_Package
- ){
- "use strict"
- if(uni_pix.VAR_TYP!="uni_pix"){
- //:VT:Variable_Type:
- throw("[_pix_put_TextureSamplerUniform:VT]");
- };;
- //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
- //:( uni_pix.[ sam_loc === pix_loc ] );
- _pix_loc_TextureSamplerUniform(
- ada_gra //:Adapter_Graphics
- , uni_pix //:Uniform_Pixels
- );;
- //: developer.mozilla.org/en-US/docs/
- //: Web/API/WebGLRenderingContext/getUniform
- //:Not sure why "v" at end:
- uni_pix.sam_val=(
- //:POTENTIAL_BUG:
- //: Pretty sure texture samplers are
- //: signed integers and you use
- //: "getUniformiv" instead of
- //: "getUniformuiv". But no internet
- //: access to look this up.
- //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
- //:[ con_gra ]AKA[ gra_con ]
- ada_gra.con_gra.getUniformiv( //:get:Uniform
- ada_gra.all_pro //:PROGRAM
- , uni_pix.sam_loc //:LOCATION
- ) //:aka[ pix_loc ]
- );;
- return( undefined /**void**/ );
- };;
- //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
- function _pix_put_TextureSamplerUniform(
- ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
- , uni_pix //:Uniform_Package:[PIXELS/PIX]
- ){
- "use strict"
- if(uni_pix.VAR_TYP!="uni_pix"){
- //:VT:Variable_Type:
- throw("[_pix_put_TextureSamplerUniform:VT]");
- };;
- //:CACHE_UNIFORM_LOCATION_IF_NOT_ALREADY_FETCHED
- //:( uni_pix.[ sam_loc === pix_loc ] );
- _pix_loc_TextureSamplerUniform(
- ada_gra //:Adapter_Graphics
- , uni_pix //:Uniform_Pixels
- );;
- //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
- //:[ con_gra ]AKA[ gra_con ]
- ada_gra.con_gra.uniform1i( //:put:Uniform
- //:POTENTIAL_BUG:
- //: Pretty sure samplers are signed
- //: integers, so use "uniform1i"
- //: instead of "uniform1ui"
- uni_pix.sam_loc //:SamplerLocation:AKA:pix_loc
- , uni_pix.sam_val //:SamplerValue::::AKA:pix_val
- );;
- };;
- //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
- //:Caches the location of the uniform variable
- //:within the GLSL source code.
- //: [ pix_loc / sam_loc ]
- function _pix_loc_TextureSamplerUniform(
- ada_gra //:[ con_ada | ada_con | ada_gra | gra_ada ]
- , uni_pix //:uniform_container_for_pixel_array_data
- ){
- "use strict"
- if(uni_pix.VAR_TYP!="uni_pix"){
- //:VT:Variable_Type
- throw("[_pix_loc_TextureSamplerUniform:VT]");
- };;
- //:.............[ pix_nam == sam_nam ]...........://
- if( "" == uni_pix.pix_nam ){
- //:UNNS:Uniform_Name_Never_Set:
- throw("[_pix_loc_TextureSamplerUniform:UNNS]");
- };;
- if( uni_pix.has_loc <= 0 ){ //:has_loc:sam_loc ?
- uni_pix.has_loc = 1 ; //:has_loc:sam_loc ?
- uni_pix.sam_loc=( /** pix_loc === sam_loc **/
- //:[ con_gra ]AKA[ gl | ogl_ctx | ctx_ogl ]
- //:[ con_gra ]AKA[ gra_con ]
- ada_gra.con_gra.getUniformLocation(
- ada_gra.all_pro //:PROGRAM
- , uni_pix.pix_nam //:UNIFORM
- //:...........[ pix_nam == sam_nam ].....://
- )
- );;
- };;
- //: 0: False
- //: 1: Mostly true (making it true)
- //: 2: True (done updating to true state)
- uni_pix.has_loc =( 2 );
- };;
- //: - - - - - - - - - - - - ---- - - - - - - - - - - ://
- //:pixpixpixpixpixpixpixpixpixpixpixpixpixpixpixpix--://
- //:pix:uni_pix:[get|put]:(ABOVE):--------------------://
- };;
- //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
- //:VC:Variable_Controllers:(ABOVE):----------------------://
- //:UHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUHUH://
- //:UH:Uniform_Helpers:(ABOVE):-------------------------------://
- //:Dont call directly, call from our
- //:function container object.
- function AA2_LoopTableTick( loo_tab ){
- if( ! loo_tab || null == loo_tab ){
- throw("[AA2_LoopTableTick:NULL_INPUT:loo_tab]");
- };;
- loo_tab.gam_tim++; //:GAME_TIME
- loo_tab.lop_tim++; //:LOOP_TIME
- loo_tab.nat_win( );
- loo_tab.gam_obj( );
- loo_tab.ren_log( );
- };;
- //:LT:Loop_Tick_functions:(BELOW):---------------------------://
- //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
- //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
- //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
- //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
- ;;;function AA2_LoopTableTick_nat_win(){ //:NATive_WINdow
- //:---------------------------:nat_win():--------------------://
- //:nat_win:AKA[ nat_win | win_code | win_loop | native_window ]
- //:nat_win:AKA[ window_loop | ............................... ]
- //://////////////////////////////////////////////////////://
- if( GLO_DAT.event_listeners_registered <= 0 ){
- GLO_DAT.event_listeners_registered = 1;
- //:Grab HTML5 Canvas:
- let can_htm = GLO_CLA.ada_gra.can_htm; /** var **/
- //: ## click
- //: ## mousedown
- //: ## mouseout
- //: ## mouseover
- //: ##
- //: ## keydown
- //: ## keyup
- //: ## keypress <--OBSOLETE
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //: MOUSE :////://///////////////////////////////////://
- //: NATIVE_HANDLER_CALLS:
- //: AA2_PollEvents_Click
- can_htm.addEventListener(
- "click"
- , _NativeClickEventHandler
- );;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //: KEYBOARD :////://////////////////////////////////://
- //:NATIVE_HANDLER_CALLS:
- //:AA2_PollEvents_KeyPressOrKeyRelease
- document.addEventListener( "keyup"
- , _NativeKeyboardEventHandler_UPP
- );;
- document.addEventListener( "keydown"
- , _NativeKeyboardEventHandler_DOW
- );;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:IF_THIS_WAS_C_CODE:
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //: AA2_PollEvents_Click() ://
- //: AA2_PollEvents_KeyPressOrKeyRelease() ://
- //:OR_MAYBE: ://
- //: all_evt = AA2_PollEvents_ALL(); ://
- //: AA2_HandleEvents( all_evt ); ://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:UD:Up_Down_mouse:(BELOW):
- //:UDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUD://
- //: A bit convoluted. But need to set the ://
- //: event sub type of GLO_DAT.glo_eve ://
- //:UDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUD://
- //:sub_typ_M_U[ M_U / MOUSE_UP ]
- function _NativeKeyboardEventHandler_UPP(
- nat_eve
- ){ var glo_eve = GLO_DAT.glo_eve;
- //:BT:Bit_Twiddle:
- //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
- //:SUB_TYPE:KEY_UP
- /**/ glo_eve.sub_typ=( 0
- | glo_eve.sub_typ
- | GLO_DAT.eve_bit.sub_typ_K_U
- );;
- //:ERASE_BIT:KEY_DOWN:
- /**/ glo_eve.sub_typ &=(
- ( ~ GLO_DAT.eve_bit.sub_typ_K_D)
- );;
- //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
- glo_eve.k_u =( 1 ); //:KEY:UPP ( up )
- glo_eve.k_d =( 0 ); //:KEY:DOW (down)
- _NativeKeyboardEventHandler(
- nat_eve //:NativeEvent
- , glo_eve //:CustomEvent
- );;
- };;
- //:- - - - - - - - - - -- - - - - - - - - - -://
- //:sub_typ_M_D[ M_D / MOUSE_DOWN ]
- function _NativeKeyboardEventHandler_DOW(
- nat_eve
- ){ var glo_eve = GLO_DAT.glo_eve;
- //:BT:Bit_Twiddle:
- //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
- //:SUB_TYPE:KEY_DOWN
- /**/ glo_eve.sub_typ=( 0
- | glo_eve.sub_typ
- | GLO_DAT.eve_bit.sub_typ_K_D
- );;
- //:ERASE:KEY_UP
- /**/ glo_eve.sub_typ &=(
- ( ~ GLO_DAT.eve_bit.sub_typ_K_U)
- );;
- //:BTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT://
- glo_eve.k_u =( 0 ); //:KEY:UPP ( up )
- glo_eve.k_d =( 1 ); //:KEY:DOW (down)
- _NativeKeyboardEventHandler(
- nat_eve //:NativeEvent
- , glo_eve //:CustomEvent
- );;
- };;
- //:UDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUDUD://
- //:This function is a bit convoluted becasue it is
- //:either called by keyup or keydown handlers.
- function _NativeKeyboardEventHandler(
- nat_eve //:NativeEvent
- , glo_eve //:MyCustomLeanEventObject
- ){
- var cod = nat_eve.code.toUpperCase( );
- var key = nat_eve.key .toUpperCase( );
- //: Capslock key event is killing my keyboard ://
- //: interactivity because it seems "CAPSLOCK" ://
- //: event is fired during same event cycle as ://
- //: a non-CAPSLOCK event. Thus if "K" is pressed ://
- //: during the event cycle, you might end up with://
- //: "CAPSLOCK" as your key value by the time the ://
- //: event is handled. ://
- //# CURRENT DESIGN DOES NOT SUPPORT MULTIPLE #//
- //# KEY PRESSES AT THE SAME TIME. #//
- //[ FIX: Queue of glo_eve objects. ]//
- //[ 5 in array means can handle up to 5 input ]//
- //[ events per cycle. ]//
- if( "CAPSLOCK"==cod || "CAPSLOCK"==key ){
- return;
- };;
- //: console.log( "[_NativeKeyboardEventHandler]");
- //: var glo_eve = GLO_DAT.glo_eve;
- //://////////////////////////////////////////////://
- //:Store keyboard key that was pressed:
- //://////////////////////////////////////////://
- if( "ARROWLEFT" == key ){ key = "ARR_LEF"; };
- if( "ARROWRIGHT" == key ){ key = "ARR_RIG"; };
- if( "ARROWUP" == key ){ key = "ARR_UPP"; };
- if( "ARROWDOWN" == key ){ key = "ARR_DOW"; };
- glo_eve.key = key;
- //://////////////////////////////////////////://
- //:Add Event Type Flags.
- //:DO NOT REMOVE ANY PREVIOUSLY SET FLAGS!
- //:ETETETETETETETETETETETETETETETETETETETETET://
- //:MAIN_TYPE:KEYBOARD
- /**/ glo_eve.eve_typ=( 0
- | glo_eve.eve_typ
- | GLO_DAT.eve_bit.eve_typ_KEY
- );;
- //:ETETETETETETETETETETETETETETETETETETETETET://
- AA2_PollEvents_KeyPressOrKeyRelease( glo_eve );
- //://////////////////////////////////////////////://
- };;
- function _NativeClickEventHandler( nat_eve ){
- //:console.log("[_NativeClickEventHandler]");
- var glo_eve = GLO_DAT.glo_eve;
- //://////////////////////////////////////////////://
- var rec =(
- GLO_CLA. //:GLOBAL_CLASSES
- ada_gra. //:ADAPTER_GRAPHICS
- can_htm. //:CANVAS_HTM (HTM==HTML5)
- getBoundingClientRect()
- );;
- var CAN_X=( nat_eve.clientX - rec.left );
- var CAN_Y=( nat_eve.clientY - rec.top );
- glo_eve.c_x=( CAN_X ); //:Click_X
- glo_eve.c_y=( CAN_Y ); //:Click_Y
- //:Add Event Type Flags.
- //:DO NOT REMOVE ANY PREVIOUSLY SET FLAGS!
- //:ETETETETETETETETETETETETETETETETETETETETET://
- //:MAIN_TYPE:MOUSE
- /**/ glo_eve.eve_typ=( 0
- | glo_eve.eve_typ
- | GLO_DAT.eve_bit.eve_typ_MOU
- );;
- //:SUB_TYPE:CLICK
- /**/ glo_eve.sub_typ=( 0
- | glo_eve.sub_typ
- | GLO_DAT.eve_bit.sub_typ_CLK
- );;
- //:ETETETETETETETETETETETETETETETETETETETETET://
- //:A click does not happen until
- //:the mouse is released. Thus the
- //:mouse state is mouse_up( m_u ).
- glo_eve.m_u =( 1 ); //:MOU:UPP ( up )
- glo_eve.m_d =( 0 ); //:MOU:DOW (down)
- //://////////////////////////////////////////////://
- AA2_PollEvents_Click( glo_eve );
- };;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- function
- AA2_PollEvents_Click(
- glo_eve /** glo_eve:GLObal_EVEnt **/
- ){
- //: console.log( "[AA2_PollEvents_Click]" );
- GLO_CLA.edi_all.ReadEvent( glo_eve );
- };;
- function
- AA2_PollEvents_KeyPressOrKeyRelease(
- glo_eve /** glo_eve:GLObal_EVEnt **/
- ){
- //: console.log(
- //: "[AA2_PollEvents_KeyPressOrKeyRelease]"
- //: );;
- GLO_CLA.edi_all.ReadEvent( glo_eve );
- };;
- };;//:[ event_listeners_registered ? ]:////://///////////://
- //://////////////////////////////////////////////////////://
- };;function AA2_LoopTableTick_gam_obj(){ //:GAMe_OBJect(update)
- //:TODO: Update game objects.
- //:UPDATE_GAME_TIME_STORED_IN_SHADER:
- //:GTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGT://
- var gam_tim = GLO_CLA.ada_var.Get_GamTim();
- gam_tim++;GLO_CLA.ada_var.Put_GamTim( gam_tim );
- //:GTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGT://
- };;function AA2_LoopTableTick_ren_log(){ //:RENder_LOGic
- //:AKA[ uni_com | UniCom | UniformCommit | UniformsCommit ]
- GLO_CLA.tau_001.uni_com();
- var con_gra = GLO_CLA.ada_gra.con_gra;
- //:Clearing will help you see if you have accidentially
- //:make your viewport triangles too small.
- con_gra.clear( 0
- | con_gra.COLOR_BUFFER_BIT
- );;
- con_gra.drawArrays(
- con_gra.TRIANGLE_FAN
- , 0
- , 6
- );;
- };;
- //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
- //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
- //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
- //:LTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLT://
- //:LT:Loop_Tick_functions:(ABOVE):---------------------------://
- //:NF:Namespaced_Functions:(BELOW):--------------------------://
- //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
- //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
- //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
- //: ://
- //: Try to order as such that forward declarations ://
- //: are not a requirement. ://
- //: //:CTRL_F[ namespaced | nf_funcs | nffuncs | nf_fn ] ://
- //: ://
- //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
- //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
- //:C11:C11_Refactoring_Help:(BELOW):---------------------://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //: ://
- //: ZeroIni: Zero Initialize A Struct ://
- //: PoinMem: Declare a POINTER member inside struct. ://
- //: ValuMem: Declare a VALUE member inside struct. ://
- //: ://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //: C11[ struct AA2_typ_nam typ_nam ={ }; ]
- function AA2_ZeroIni( AA2_typ_nam /** DAS_orr_CLA **/ ){
- //:AA2_typ_nam: AA2:TypeName
- //:DAS_orr_CLA: DAtaStructure_orr_CLAss
- var typ_nam =(
- Object.assign(
- Object.create( null )
- , AA2_typ_nam
- )
- );;
- Object.seal( typ_nam /** zero_inited_struct **/ );
- return( typ_nam /** zero_inited_struct **/ );
- };;
- //: C11[ struct AA2_typ_nam * typ_nam ; ]
- function AA2_PoinMem( AA2_typ_nam /** DAS_or_CLA **/ ){
- return( AA2_ZeroIni( AA2_typ_nam /** DAS_or_CLA **/ ));
- };;
- //: C11[ struct AA2_typ_nam typ_nam ; ]
- function AA2_ValuMem( AA2_typ_nam /** DAS_or_CLA **/ ){
- return( AA2_ZeroIni( AA2_typ_nam /** DAS_or_CLA **/ ));
- };;
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:C11:C11_Refactoring_Help:(ABOVE):---------------------://
- //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
- //: AKA[ AssertInteger | ass_int | AssInt | assint ] ::::://
- function AA2_InteAss( any_int ){
- if( false == (any_int >= 0 || any_int <= 0) ){
- throw("[YOU_DONE_FUCKED_UP]");
- };;
- return( any_int );
- };;
- //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
- //:AS:Addition_And_Subtraction:Funcs:(4:BELOW):----------://
- //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
- //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
- //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
- //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
- //:Make addition and subtraction wrap on
- //:underflow or overflow of uint32 boundaries.
- //:NOTE: I guess in C no such thing as "underflow"
- //: for integers. Both ways is overflow.
- ;;;function AA2_U32_ADD( u32_001 , u32_002 ){
- var res = ( u32_001 + u32_002 );
- res = ( res % ( 0xFFFFFFFF + 1 ) );
- return( res );
- };;function AA2_U32_SUB( u32_001 , u32_002 ){
- var res = ( u32_001 - u32_002 );
- if( res < 0 ){ res = 0xFFFFFFFF + 1 - res ; };
- return( res );
- };;
- ;;;function //:______________________________________://
- AA2_U32_ADD_BOU(u32_var,u32_add,u32_min,u32_max){ //:://
- //:IT_IS_INTENTIONAL_THAT[ AA2_U32_ADD_BOU ]_____
- //:AND[ AA2_U32_SUB_BOU ]DO_NOT_SHARE_COMMON_____
- //:FUNCTION.THE_REDUNDANCY_IS_FOR_SIMPLICITY!!!!!
- //:DO_NOT_REFACTOR_JUST_TO_SHORTEN_LINES_OF_CODE!
- if( u32_add < 0 ){ throw("[20200531A:NEG]");};
- if( u32_max < u32_min ){ throw("[20200531A:OOB]");};
- //:It is erronious to start with with a value
- //:that is outside of the bounds given.
- if( u32_var < u32_min
- || u32_var > u32_max
- ){
- throw("[AA_U32_SUB_BOU:STARTED_OUT_OF_BOUNDS]");
- };;
- //:TODO: more_careful_calculations_to
- //: avoid_overflow_and_underflow.
- //:DEL_DIF:addition:
- //://////////////////////////////////////////////://
- if( /*......*/ u32_var + u32_add <= u32_max ){
- u32_var =( u32_var + u32_add /*......*/ );
- }else{
- u32_var = u32_max;
- };;
- //://////////////////////////////////////////////://
- return( u32_var );
- };;function //:______________________________________://
- AA2_U32_SUB_BOU(u32_var,u32_sub,u32_min,u32_max){ //:://
- //:IT_IS_INTENTIONAL_THAT[ AA2_U32_ADD_BOU ]_____
- //:AND[ AA2_U32_SUB_BOU ]DO_NOT_SHARE_COMMON_____
- //:FUNCTION.THE_REDUNDANCY_IS_FOR_SIMPLICITY!!!!!
- //:DO_NOT_REFACTOR_JUST_TO_SHORTEN_LINES_OF_CODE!
- if( u32_sub < 0 ){ throw("[20200531B:NEG]");};
- if( u32_max < u32_min ){ throw("[20200531B:OOB]");};
- //:It is erronious to start with with a value
- //:that is outside of the bounds given.
- if( u32_var < u32_min
- || u32_var > u32_max
- ){
- throw("[AA_U32_SUB_BOU:STARTED_OUT_OF_BOUNDS]");
- };;
- //:TODO: more_careful_calculations_to
- //: avoid_overflow_and_underflow.
- //:DEL_DIF:subtraction:
- //://////////////////////////////////////////////://
- if( /*......*/ u32_var - u32_sub >= u32_min ){
- u32_var =( u32_var - u32_sub /*......*/ );
- }else{
- u32_var = u32_min;
- };;
- //://////////////////////////////////////////////://
- return( u32_var );
- };; //:______________________________________________://
- //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
- //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
- //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
- //:ASASASASASASASASASASASASASASASASASASASASASASASASASASAS://
- //:AS:Addition_And_Subtraction:Funcs:(4:ABOVE):----------://
- //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
- //:RI:rec_inc:("memberfuncs"):(BELOW):---------------://
- //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
- //:PROCOOP:rec_inc "member" functions:
- //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
- //:==================================================://
- //: ## AA2_rec_inc_MoveLef : MOVE: ## ://
- //: ## AA2_rec_inc_MoveRig : MOVE: ## ://
- //: ## AA2_rec_inc_MoveUpp : MOVE: ## ://
- //: ## AA2_rec_inc_MoveDow : MOVE: ## ://
- //: ## ## ://
- //: ## AA2_rec_inc_ZoomInn : ZOOM: ## ://
- //: ## AA2_rec_inc_ZoomOut : ZOOM: ## ://
- //: ## ## ://
- //: ## AA2_rec_inc_PullLef : PULL(INN) ## ://
- //: ## AA2_rec_inc_PullRig : PULL(INN) ## ://
- //: ## AA2_rec_inc_PullTop : PULL(INN) ## ://
- //: ## AA2_rec_inc_PullBot : PULL(INN) ## ://
- //: ## ## ://
- //: ## AA2_rec_inc_PushLef : PUSH(OUT) ## ://
- //: ## AA2_rec_inc_PushRig : PUSH(OUT) ## ://
- //: ## AA2_rec_inc_PushTop : PUSH(OUT) ## ://
- //: ## AA2_rec_inc_PushBot : PUSH(OUT) ## ://
- //:==================================================://
- //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
- //:M:MOVE:(BELOW):-------------------------------://
- //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
- //: rec_inc.MoveLef(...):
- //: rec_inc.MoveRig(...):
- //: rec_inc.MoveUpp(...):
- //: rec_inc.MoveDow(...):
- //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
- ;;;function AA2_rec_inc_MoveLef( rec_inc, u32_var){
- /**------**/BUG0002("MoveLef",rec_inc, u32_var);
- //:Simulate_Uint32_Integer_Overflow:
- rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0,u32_var );
- rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1,u32_var );
- rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0, 0 );
- rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1, 0 );
- };;function AA2_rec_inc_MoveRig( rec_inc, u32_var){
- /**------**/BUG0002("MoveRig",rec_inc, u32_var);
- //:Simulate_Uint32_Integer_Overflow:
- rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0,u32_var );
- rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1,u32_var );
- rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0, 0 );
- rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1, 0 );
- };;function AA2_rec_inc_MoveUpp( rec_inc, u32_var){
- /**------**/BUG0002("MoveUpp",rec_inc, u32_var);
- //:Simulate_Uint32_Integer_Overflow:
- rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0, 0 );
- rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1, 0 );
- rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0,u32_var );
- rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1,u32_var );
- };;function AA2_rec_inc_MoveDow( rec_inc, u32_var){
- /**------**/BUG0002("MoveDow",rec_inc, u32_var);
- //:Simulate_Uint32_Integer_Overflow:
- rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0, 0 );
- rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1, 0 );
- rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0,u32_var );
- rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1,u32_var );
- };;
- //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
- //:M:MOVE:(ABOVE):-------------------------------://
- //:ririririririririririririririririririririririririri://
- //:Z:ZOOM:(BELOW):-------------------------------://
- //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
- //: rec_inc.ZoomInn(...):
- //: rec_inc.ZoomOut(...):
- //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
- ;;;function AA2_rec_inc_ZoomInn( rec_inc, u32_var){
- /**------**/BUG0002("ZoomInn",rec_inc, u32_var);
- //: rec_inc.x_0 +=( u32_var ); --------------://
- //: rec_inc.x_1 -=( u32_var ); --------------://
- //: rec_inc.y_0 +=( u32_var ); --------------://
- //: rec_inc.y_1 -=( u32_var ); --------------://
- //:Simulate_Uint32_Integer_Overflow:
- //:Allow_Rectangle_To_Invert_Itself:
- rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , u32_var);
- rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , u32_var);
- rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , u32_var);
- rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , u32_var);
- };;function AA2_rec_inc_ZoomOut( rec_inc, u32_var){
- /**------**/BUG0002("ZoomOut",rec_inc, u32_var);
- //: rec_inc.x_0 -=( u32_var ); --------------://
- //: rec_inc.x_1 +=( u32_var ); --------------://
- //: rec_inc.y_0 -=( u32_var ); --------------://
- //: rec_inc.y_1 +=( u32_var ); --------------://
- //:Simulate_Uint32_Integer_Overflow:
- //:Allow_Rectangle_To_Invert_Itself:
- rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , u32_var);
- rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , u32_var);
- rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , u32_var);
- rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , u32_var);
- };;//:///////////////////////////////////////////://
- //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
- //:Z:ZOOM:(ABOVE):-------------------------------://
- //:ririririririririririririririririririririririririri://
- //:P:Pull:(BELOW):-------------------------------://
- //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
- ;;;function AA2_rec_inc_PullLef( rec_inc, u32_var){
- /**------**/BUG0002("PullLef",rec_inc, u32_var);
- //: lef <-----------------> rig ://
- //: x_0 ( + )--->X<---( - ) x_1 ://
- //:<<<<NEG POS>>>>://
- //: rec_inc.x_0 +=( u32_var ); --------------://
- //: rec_inc.x_1 +=( 0 ); --------------://
- //: rec_inc.y_0 +=( 0 ); --------------://
- //: rec_inc.y_1 +=( 0 ); --------------://
- //:Simulate_Uint32_Integer_Overflow:
- //:Allow_Rectangle_To_Invert_Itself:
- rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , u32_var);
- rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , 0 );
- rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , 0 );
- rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , 0 );
- };;function AA2_rec_inc_PullRig( rec_inc, u32_var){
- /**------**/BUG0002("PullRig",rec_inc, u32_var);
- //: lef <-----------------> rig ://
- //: x_0 ( + )--->X<---( - ) x_1 ://
- //:<<<<NEG POS>>>>://
- //: rec_inc.x_0 -=( 0 ); --------------://
- //: rec_inc.x_1 -=( u32_var ); --------------://
- //: rec_inc.y_0 -=( 0 ); --------------://
- //: rec_inc.y_1 -=( 0 ); --------------://
- //:Simulate_Uint32_Integer_Overflow:
- //:Allow_Rectangle_To_Invert_Itself:
- rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , 0 );
- rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , u32_var);
- rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , 0 );
- rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , 0 );
- };;function AA2_rec_inc_PullTop( rec_inc, u32_var){
- /**------**/BUG0002("PullTop",rec_inc, u32_var);
- //: top <-----------------> bot ://
- //: y_0 ( + )--->Y<---( - ) y_1 ://
- //:<<<<NEG POS>>>>://
- //: rec_inc.x_0 +=( 0 ); --------------://
- //: rec_inc.x_1 +=( 0 ); --------------://
- //: rec_inc.y_0 +=( u32_var ); --------------://
- //: rec_inc.y_1 +=( 0 ); --------------://
- //:Simulate_Uint32_Integer_Overflow:
- //:Allow_Rectangle_To_Invert_Itself:
- rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , 0 );
- rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , 0 );
- rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , u32_var);
- rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , 0 );
- };;function AA2_rec_inc_PullBot( rec_inc, u32_var){
- /**------**/BUG0002("PullBot",rec_inc, u32_var);
- //: top <-----------------> bot ://
- //: y_0 ( + )--->Y<---( - ) y_1 ://
- //:<<<<NEG POS>>>>://
- //: rec_inc.x_0 -=( 0 ); --------------://
- //: rec_inc.x_1 -=( 0 ); --------------://
- //: rec_inc.y_0 -=( 0 ); --------------://
- //: rec_inc.y_1 -=( u32_var ); --------------://
- //:Simulate_Uint32_Integer_Overflow:
- //:Allow_Rectangle_To_Invert_Itself:
- rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , 0 );
- rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , 0 );
- rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , 0 );
- rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , u32_var);
- };;
- //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
- //:P:Pull:(ABOVE):-------------------------------://
- //:ririririririririririririririririririririririririri://
- //:P:Push:(BELOW):-------------------------------://
- //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
- ;;;function AA2_rec_inc_PushLef( rec_inc, u32_var){
- /**------**/BUG0002("PushLef",rec_inc, u32_var);
- //:<<<<lef <-----------------> rig>>>://
- //:<<<<x_0 ( - )<<<<X>>>>( + ) x_1>>>://
- //:<<<<NEG POS>>>>://
- //: rec_inc.x_0 -=( u32_var ); --------------://
- //: rec_inc.x_1 -=( 0 ); --------------://
- //: rec_inc.y_0 -=( 0 ); --------------://
- //: rec_inc.y_1 -=( 0 ); --------------://
- //:Simulate_Uint32_Integer_Overflow:
- //:Allow_Rectangle_To_Invert_Itself:
- rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , u32_var);
- rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , 0 );
- rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , 0 );
- rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , 0 );
- };;function AA2_rec_inc_PushRig( rec_inc, u32_var){
- /**------**/BUG0002("PushRig",rec_inc, u32_var);
- //:<<<<lef <-----------------> rig>>>://
- //:<<<<x_0 ( - )<<<<X>>>>( + ) x_1>>>://
- //:<<<<NEG POS>>>>://
- //: rec_inc.x_0 +=( 0 ); --------------://
- //: rec_inc.x_1 +=( u32_var ); --------------://
- //: rec_inc.y_0 +=( 0 ); --------------://
- //: rec_inc.y_1 +=( 0 ); --------------://
- //:Simulate_Uint32_Integer_Overflow:
- //:Allow_Rectangle_To_Invert_Itself:
- rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , 0 );
- rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , u32_var);
- rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , 0 );
- rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , 0 );
- };;function AA2_rec_inc_PushTop( rec_inc, u32_var){
- /**------**/BUG0002("PushTop",rec_inc, u32_var);
- //:<<<<top <-----------------> bot>>>://
- //:<<<<y_0 ( - )<<<<Y>>>>( + ) y_1>>>://
- //:<<<<NEG POS>>>>://
- //: rec_inc.x_0 -=( 0 ); --------------://
- //: rec_inc.x_1 -=( 0 ); --------------://
- //: rec_inc.y_0 -=( u32_var ); --------------://
- //: rec_inc.y_1 -=( 0 ); --------------://
- //:Simulate_Uint32_Integer_Overflow:
- //:Allow_Rectangle_To_Invert_Itself:
- rec_inc.x_0=AA2_U32_SUB(rec_inc.x_0 , 0 );
- rec_inc.x_1=AA2_U32_SUB(rec_inc.x_1 , 0 );
- rec_inc.y_0=AA2_U32_SUB(rec_inc.y_0 , u32_var);
- rec_inc.y_1=AA2_U32_SUB(rec_inc.y_1 , 0 );
- };;function AA2_rec_inc_PushBot( rec_inc, u32_var){
- /**------**/BUG0002("PushBot",rec_inc, u32_var);
- //:<<<<top <-----------------> bot>>>://
- //:<<<<y_0 ( - )<<<<Y>>>>( + ) y_1>>>://
- //:<<<<NEG POS>>>>://
- //: rec_inc.x_0 +=( 0 ); --------------://
- //: rec_inc.x_1 +=( 0 ); --------------://
- //: rec_inc.y_0 +=( 0 ); --------------://
- //: rec_inc.y_1 +=( u32_var ); --------------://
- //:Simulate_Uint32_Integer_Overflow:
- //:Allow_Rectangle_To_Invert_Itself:
- rec_inc.x_0=AA2_U32_ADD(rec_inc.x_0 , 0 );
- rec_inc.x_1=AA2_U32_ADD(rec_inc.x_1 , 0 );
- rec_inc.y_0=AA2_U32_ADD(rec_inc.y_0 , 0 );
- rec_inc.y_1=AA2_U32_ADD(rec_inc.y_1 , u32_var);
- };;
- //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
- //:P:Push:(ABOVE):-------------------------------://
- //:::::::::ririririririririririririririririririririririririri://
- //:B:BOUNDED:(BELOW):----------------------------://
- //:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB://
- //: Bounded versions of Functions in other ://
- //: section. Adds corrections or takes no ://
- //: actions if action would result in defying ://
- //: bounds of rec_bou parameter. ://
- //: ://
- //: NOTE: All functions in this category ://
- //: expect the rectangle to already ://
- //: be within bounds of rec_bou. ://
- //: ://
- //: It is an error otherwise. ://
- //:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB://
- //:BM:BoundedMoves:(BELOW):------------------://
- //:BMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBM://
- //: rec_inc.MoveLef(...):
- function AA2_rec_inc_MoveLef_rec_bou(
- rec_inc,u32_var,rec_bou
- ){
- BUG0001(rec_inc,u32_var,rec_bou,"[Mov_L]");
- var n_x = rec_inc.x_0 - u32_var;
- if( n_x < rec_bou.x_0 ){
- //:Do_Nothing_No_Room_For_Action
- }else{
- AA2_rec_inc_MovLef(
- rec_inc,u32_var
- );;
- };;
- };;
- //: rec_inc.MoveRig(...):
- function AA2_rec_inc_MoveRig_rec_bou(
- rec_inc,u32_var,rec_bou
- ){
- BUG0001(rec_inc,u32_var,rec_bou,"[Mov_R]");
- var n_x = rec_inc.x_1 + u32_var;
- if( n_x > rec_bou.x_1 ){
- //:Do_Nothing_No_Room_For_Action
- }else{
- AA2_rec_inc_MovRig(
- rec_inc,u32_var
- );;
- };;
- };;
- //: rec_inc.MoveUpp(...):
- function AA2_rec_inc_MoveUpp_rec_bou(
- rec_inc,u32_var,rec_bou
- ){
- BUG0001(rec_inc,u32_var,rec_bou,"[Mov_U]");
- var n_y = rec_inc.y_0 - u32_var;
- if( n_y < rec_bou.y_0 ){
- //:Do_Nothing_No_Room_For_Action
- }else{
- AA2_rec_inc_MovUpp(
- rec_inc,u32_var
- );;
- };;
- };;
- //: rec_inc.MoveDow(...):
- function AA2_rec_inc_MoveDow_rec_bou(
- rec_inc,u32_var,rec_bou
- ){
- BUG0001(rec_inc,u32_var,rec_bou,"[Mov_D]");
- var n_y = rec_inc.y_1 + u32_var;
- if( n_y > rec_bou.y_1 ){
- //:Do_Nothing_No_Room_For_Action
- }else{
- AA2_rec_inc_MovDow(
- rec_inc,u32_var
- );;
- };;
- };;
- //:BMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBMBM://
- //:BM:BoundedMoves:(ABOVE):------------------://
- //:BZ:BoundedZooms:(BELOW):------------------://
- //:BZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZ://
- //: rec_inc.ZoomInn(...):
- function AA2_rec_inc_ZoomInn_rec_bou(
- rec_inc,u32_var,rec_bou
- ){
- BUG0001(rec_inc,u32_var,rec_bou,"[Zoom_i]");
- //:Zoom in does not require boundary,
- //:but is supplied for consistency.
- if( rec_bou ){ /** NOOP **/ };
- //:If full zoom results in overlap, zoom
- //:as much as is possible without
- //:distorting rec_inc proportions.
- //:MAX[ x & y ]( m_x & m_y ):
- //:Moving m_x or m_y inward on respective
- //:axis makes points of rectangle tangental.
- //:MINUS_ZERO_NOT_ONE_BECAUSE_CAN_OVERLAY
- var m_x = ( rec_inc.x_1 - rec_inc.x_0 - 0 );
- var m_y = ( rec_inc.y_1 - rec_inc.y_0 - 0 );
- //:HALF_MAX: ( h_x & h_y ):
- //:Since both sides are moving in, need
- //:to use this value:
- var h_x = Math.floor( m_x / 2 );
- var h_y = Math.floor( m_y / 2 );
- //:ActualInset: ( a_x & a_y )
- var a_x = Math.min(h_x,u32_var);
- var a_y = Math.min(h_y,u32_var);
- //:New_XY:
- rec_inc.y_0 += a_y;
- rec_inc.y_1 -= a_y;
- rec_inc.x_0 += a_x;
- rec_inc.x_1 -= a_x;
- //: If rectangle is somehow out of bounds,
- //: move it in bounds? Hmm... That is
- //: seperate behavior that belongs somewhere
- //: else. And also, I don't want to write
- //: that logic anyways.
- };;
- //: rec_inc.ZoomOut(...):
- function AA2_rec_inc_ZoomOut_rec_bou(
- rec_inc,u32_var,rec_bou
- ){
- BUG0001(rec_inc,u32_var,rec_bou,"[Zoom_o]");
- //:The max zoom out for each axis is rougly
- //:the minimum of the distance of each
- //:rec_inc edge to it's RSPCTV rec_bou edge.
- //:MINUS_ZERO_NOT_ONE_BECAUSE_CAN_OVERLAY
- var lef = ( rec_inc.x0 - rec_bou.x0 - 0 );
- var rig = ( rec_bou.x1 - rec_inc.x1 - 0 );
- var top = ( rec_inc.y0 - rec_bou.y0 - 0 );
- var bot = ( rec_bou.y1 - rec_inc.y1 - 0 );
- //:Max x & y:
- var m_x = Math.min( lef , rig );
- var m_y = Math.min( top , bot );
- //:HALF_MAX: ( h_x & h_y ):
- //:Since both sides are moving in, need
- //:to use this value:
- var h_x = Math.floor( m_x / 2 );
- var h_y = Math.floor( m_y / 2 );
- //:ActualOutset:
- var a_x = Math.min(h_x,u32_var);
- var a_y = Math.max(h_y,u32_var);
- //:New_XY:
- rec_inc.y_0 -= a_y;
- rec_inc.y_1 += a_y;
- rec_inc.x_0 -= a_x;
- rec_inc.x_1 += a_x;
- };;
- //:BZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZBZ://
- //:BZ:BoundedZooms:(ABOVE):------------------://
- //:::::::::ririririririririririririririririririririririririri://
- //:PI:PullIn:BOUNDED:(BELOW):----------------://
- //:PI>>>>>>>>>>>>>>>>>>PI<<<<<<<<<<<<<<<<<<PI://
- //:PIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPI://
- //:You are inside rectangle pulling the
- //:edges INWARDS on themselves. Maximum pull
- //:inward allows for co-linear rectangle edges.
- //:PIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPI://
- function AA2_rec_inc_PullLef_rec_bou(
- rec_inc,u32_var,rec_bou
- ){ //: LEF >>>>>>>>>> X <<<<<<<<<< RIG
- //: TOP >>>>>>>>>> X <<<<<<<<<< BOT
- BUG0001(rec_inc,u32_var,rec_bou,"[pul_L]");
- var m_p =(rec_inc.x1 - rec_inc.x0 - 0 );
- var a_p =Math.min(m_p,u32_var);
- rec_inc.x_0 += ( a_p );
- };;
- function AA2_rec_inc_PullRig_rec_bou(
- rec_inc,u32_var,rec_bou
- ){ //: LEF >>>>>>>>>> X <<<<<<<<<< RIG
- //: TOP >>>>>>>>>> X <<<<<<<<<< BOT
- BUG0001(rec_inc,u32_var,rec_bou,"[pul_R]");
- var m_p =(rec_inc.x1 - rec_inc.x0 - 0 );
- var a_p =Math.min(m_p,u32_var);
- rec_inc.x_1 -= ( a_p );
- };;
- function AA2_rec_inc_PullTop_rec_bou(
- rec_inc,u32_var,rec_bou
- ){ //: LEF >>>>>>>>>> Y <<<<<<<<<< RIG
- //: TOP >>>>>>>>>> Y <<<<<<<<<< BOT
- BUG0001(rec_inc,u32_var,rec_bou,"[pul_T]");
- var m_p =(rec_inc.y1 - rec_inc.y0 - 0 );
- var a_p =Math.min(m_p,u32_var);
- rec_inc.y_0 += ( a_p );
- };;
- function AA2_rec_inc_PullBot_rec_bou(
- rec_inc,u32_var,rec_bou
- ){ //: LEF >>>>>>>>>> Y <<<<<<<<<< RIG
- //: TOP >>>>>>>>>> Y <<<<<<<<<< BOT
- BUG0001(rec_inc,u32_var,rec_bou,"[pul_B]");
- var m_p =(rec_inc.y1 - rec_inc.y0 - 0 );
- var a_p =Math.min(m_p,u32_var);
- rec_inc.y_1 -= ( a_p );
- };;
- //:PIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPI://
- //:PI>>>>>>>>>>>>>>>>>>PI<<<<<<<<<<<<<<<<<<PI://
- //:PI:PullIn:BOUNDED:(ABOVE):----------------://
- //:::::::::ririririririririririririririririririririririririri://
- //:PO:PushOut:BOUNDED:(ABOVE):---------------://
- //:PO<<<<<<<<<<<<<<<<<<PO>>>>>>>>>>>>>>>>>>PO://
- //:POPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO://
- //: ://
- //: You are inside the rectangle and you are ://
- //: pushing on the walls trying to get out. ://
- //: ://
- //: VAR_NAMES: ://
- //: m_p: [ max | min ][ push | pull ] ://
- //: a_p: [ actual ][ push | pull ] ://
- //:POPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO://
- ;;;function AA2_rec_inc_PushLef_rec_bou(
- rec_inc,u32_var,rec_bou
- ){ //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
- //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
- BUG0001(rec_inc,u32_var,rec_bou,"[PusLef]");
- var m_p =(rec_inc.x_0 - rec_bou.x_0 - 0 );
- var a_p =Math.min(m_p,u32_var);
- rec_inc.x_0 -= ( a_p );
- };;function AA2_rec_inc_PushRig_rec_bou(
- rec_inc,u32_var,rec_bou
- ){ //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
- //: TOP <<<<<<<<<< X >>>>>>>>>> BOT
- BUG0001(rec_inc,u32_var,rec_bou,"[PusRig]");
- var m_p =(rec_bou.x_1 - rec_inc.x_1 - 0 );
- var a_p =Math.min(m_p,u32_var);
- rec_inc.x_1 += ( a_p );
- };;function AA2_rec_inc_PushTop_rec_bou(
- rec_inc,u32_var,rec_bou
- ){ //: LEF <<<<<<<<<< Y >>>>>>>>>> RIG
- //: TOP <<<<<<<<<< Y >>>>>>>>>> BOT
- BUG0001(rec_inc,u32_var,rec_bou,"[PusTop]");
- var m_p =(rec_inc.y_0 - rec_bou.y_0 - 0 );
- var a_p =Math.min(m_p,u32_var);
- rec_inc.y_0 -= ( a_p );
- };;function AA2_rec_inc_PushBot_rec_bou(
- rec_inc,u32_var,rec_bou
- ){ //: LEF <<<<<<<<<< Y >>>>>>>>>> RIG
- //: TOP <<<<<<<<<< Y >>>>>>>>>> BOT
- BUG0001(rec_inc,u32_var,rec_bou,"[PusBot]");
- var m_p =(rec_bou.y_1 - rec_inc.y_1 - 0 );
- var a_p =Math.min(m_p,u32_var);
- rec_inc.y_1 += ( a_p );
- };;
- //:PO<<<<<<<<<<<<<<<<<<PO>>>>>>>>>>>>>>>>>>PO://
- //:POPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO://
- //:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB://
- //:B:BOUNDED:(ABOVE):----------------------------://
- //:::::::::ririririririririririririririririririririririririri://
- //:RS:Rectangle_Status_Functions:
- //:RSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRS://
- ;;;function AA2_rec_inc_OrdBad( rec_inc ){
- var x_0 = rec_inc.x_0;
- var y_0 = rec_inc.y_0;
- var x_1 = rec_inc.x_1;
- var y_1 = rec_inc.y_1;
- var ord_bad = ( 0 );
- if( !(x_0 >= 0 )){ ord_bad = ( 1 ); };
- if( !(y_0 >= 0 )){ ord_bad = ( 1 ); };
- if( !(x_1 >= 0 )){ ord_bad = ( 1 ); };
- if( !(y_1 >= 0 )){ ord_bad = ( 1 ); };
- if( x_0 > x_1 ){
- ord_bad = ( 1 );
- };;
- if( y_0 > y_1 ){
- ord_bad = ( 1 );
- };;
- return( ord_bad );
- };;function AA2_rec_inc_NIN_rec_bou(
- rec_inc , rec_bou
- ){
- //:NIN: Not_INside (of rec_bou)
- //:NOTE: - - - -://
- //: NIN:Not_INside(of): - - - -://
- //: NOT_THE_SAME_AS: - - - -://
- //: AA2_rec_inc_OUT_rec_bou - - - -://
- var nin=( 0 );
- //:You are still inside if you are
- //:exactly [ on / co-linear ] edge.
- if( rec_inc.x_0 < rec_bou.x_0 //:OOB?
- || rec_inc.x_1 > rec_bou.x_1 //:OOB?
- || rec_inc.y_0 < rec_bou.x_0 //:OOB?
- || rec_inc.y_1 > rec_bou.x_1 //:OOB?
- ){
- nin = ( 1 );
- };;
- return( nin );
- };;function AA2_rec_inc_INN_rec_bou(
- rec_inc , rec_bou
- ){
- //:INN:Inside_of:rec_bou:100%
- var inn=( 0 );
- if( rec_inc.x_0 >= rec_bou.x_0 //:INN?
- && rec_inc.x_1 <= rec_bou.x_1 //:INN?
- && rec_inc.y_0 >= rec_bou.x_0 //:INN?
- && rec_inc.y_1 <= rec_bou.x_1 //:INN?
- ){
- inn = ( 1 );
- };;
- return( inn );
- };;function AA2_rec_inc_OUT_rec_bou(
- rec_inc , rec_bou
- ){
- //:OUT:Outside_Of: (Completely)
- throw("[TODO:2020_05_25-A]");
- };;function AA2_rec_inc_NOU_rec_bou(
- rec_inc , rec_bou
- ){
- //:NOU:Not_Outside_Of:
- throw("[TODO:2020_05_25-B]");
- };;
- //:RSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRS://
- //:RIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRIRI://
- //:RI:rec_inc:("memberfuncs"):(ABOVE):---------------://
- //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
- //: (ABOVE) ://
- //:NF: Namespaced_Functions: (CONTI):------------------------://
- //: (BELOW) ://
- //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
- //:Convert the global event to a keyboard key number:
- function AA2_glo_eve_KeyNum( glo_eve ){
- //:AKA[ Keyanum | KeyNum | key_num | key_as_num ]
- //:NegativeTwo( 0-2 ):Not even a keyboard event.
- var key_num =( 0 - 2 );
- if( 0 == ( glo_eve.k_u || glo_eve.k_d ) ){
- //:return negative for not-a-key:
- //: NegativeOne( 0-1 ): Key event, but not number.
- key_num =( 0 - 1 );
- }else{
- var key = ( glo_eve.key );
- if( "1"==key || "!"==key ){
- key_num = ( 1 );
- }else
- if( "2"==key || "@"==key ){
- key_num = ( 2 );
- }else
- if( "3"==key || "#"==key ){
- key_num = ( 3 );
- }else
- if( "4"==key || "$"==key ){
- key_num = ( 4 );
- }else
- if( "5"==key || "%"==key ){
- key_num = ( 5 );
- }else
- if( "6"==key || "^"==key ){
- key_num = ( 6 );
- }else
- if( "7"==key || "&"==key ){
- key_num = ( 7 );
- }else
- if( "8"==key || "*"==key ){
- key_num = ( 8 );
- }else
- if( "9"==key || "("==key ){
- key_num = ( 9 );
- }else
- if( "0"==key || ")"==key ){
- key_num = ( 0 );
- };;
- };;
- //:key_num is negative if could not resolve the
- //:key to a number.
- return( key_num );
- };;
- //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
- //: (ABOVE) ://
- //:NF: Namespaced_Functions: (CONTI):------------------------://
- //: (BELOW) ://
- //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
- //:GS:GetShader:(BELOW):---------------------------------://
- //:GSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGS://
- function AA2_Get_edi_sha_src( edi_mod ){
- let N = "\n"; //:NewLine
- var code = "";
- //:00000000000000000000000000000000000000000000000000://
- ;;;;;;if( 0 == edi_mod ){ code=(""
- +N+" "
- +N+" "
- +N+" //:Calculate_On_Screen_Pixel_Coords: "
- +N+" "
- +N+" float r = 0.2; "
- +N+" float g = 0.2; "
- +N+" float b = 0.2; "
- +N+" float a = 1.0; "
- +N+" "
- +N+" uvec4 intrgba = Get_Tex_iso_mem( "
- +N+" /**/ int( ( gl_FragCoord.x - 0.5 ) ) "
- +N+" , "
- +N+" (int( SAN_ISO ) - 1) //: FLIP_Y "
- +N+" -int( ( gl_FragCoord.y - 0.5 ) ) "
- +N+" );; "
- +N+" "
- +N+" r = float( intrgba.x ) / 255.0; "
- +N+" g = float( intrgba.y ) / 255.0; "
- +N+" b = float( intrgba.z ) / 255.0; "
- +N+" a = float( intrgba.w ) / 255.0; "
- +N+" "
- +N+" float flt_gam_tim = float( gam_tim ) / 255.0; "
- +N+" r = r + sin( flt_gam_tim + 0.000 ); "
- +N+" g = g + sin( flt_gam_tim + 64.000 ); "
- +N+" b = b + sin( flt_gam_tim + 128.000 ); "
- +N+" "
- +N+" pix_fra = vec4( r,g,b,a); "
- +N+" "
- +N+" "
- );;};;
- //:00000000000000000000000000000000000000000000000000://
- //:111111111111111111111111111111111111111111111111111111://
- if( 1 == edi_mod ){ code=( ""
- +N+" //:P:test_bed_shaders_prelude:(BELOW):---------://"//[P]//
- +N+" //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://"//[P]//
- +N+" "//[P]//
- +N+" //:dex_sha:Which test bed shader is active? "//[P]//
- +N+" uint dex_sha = TAU_001_U32( "//[P]//
- +N+" TAU_001_EDIT001_dex_sha "//[P]//
- +N+" );; "//[P]//
- +N+" "//[P]//
- +N+" //:ZP:Zoom_Pan_fragCoordTransform:(BELOW):-://"//[P]//
- +N+" //:ZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZP://"//[P]//
- +N+" "//[P]//
- +N+" //|¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯¯¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯|//"//[P]//
- +N+" //|VARIABLES_BELOW:SC[ V2M_JS_2020_05_27 ] |//"//[P]//
- +N+" //|- - - - - - - - - - - -- - - - - - - - -|//"//[P]//
- +N+" //| vp0_m_o : Viewport[ 0 ][ MAV ][ OUT ] |//"//[P]//
- +N+" //| vp0_m_i : Viewport[ 0 ][ MAV ][ INN ] |//"//[P]//
- +N+" //| vp2_m_o : Viewport[ 2 ][ MAV ][ OUT ] |//"//[P]//
- +N+" //| vp2_m_i : Viewport[ 2 ][ MAV ][ INN ] |//"//[P]//
- +N+" //| vpc_m_o : Viewport[ c ][ MAV ][ OUT ] |//"//[P]//
- +N+" //| vpc_m_i : Viewport[ c ][ MAV ][ INN ] |//"//[P]//
- +N+" //| vpc_n_o : Viewport[ c ][ NOR ][ OUT ] |//"//[P]//
- +N+" //| vpc_n_i : Viewport[ c ][ NOR ][ INN ] |//"//[P]//
- +N+" //|__ __ __ __ __ __ __ ____ __ __ __ __ __|//"//[P]//
- +N+" //"//[P]//
- +N+" vec2 vp0_m_i =vec2( //"//[P]//
- +N+" gl_FragCoord.x //"//[P]//
- +N+" , //"//[P]//
- +N+" (rec_vpc.y_1-rec_vpc.y_0+0.0) //"//[P]//
- +N+" - gl_FragCoord.y //:[FLIP_Y]:// //"//[P]//
- +N+" );; //"//[P]//
- +N+" //"//[P]//
- +N+" //:----------------------------------------://"//[P]//
- +N+" //: [ rec_vp0/vp0_m_i ]TO[ rec_vp2/vp2_m_o ]//"//[P]//
- +N+" //: INN: vp0 ( rec_vp0 & vp0_m_i ) //"//[P]//
- +N+" //: OUT: vp2 ( rec_vp2 & vp2_m_o ) //"//[P]//
- +N+" //:----------------------------------------://"//[P]//
- +N+" vec2 vp2_m_o=vec2( //"//[P]//
- +N+" ( ( vp0_m_i.x - rec_vp0.x_0 ) //"//[P]//
- +N+" / ( rec_vp0.x_1 - rec_vp0.x_0 ) //"//[P]//
- +N+" * ( rec_vp2.x_1 - rec_vp2.x_0 ) //"//[P]//
- +N+" ) + rec_vp2.x_0 /////////////// //"//[P]//
- +N+" , //"//[P]//
- +N+" ( ( vp0_m_i.y - rec_vp0.y_0 ) //"//[P]//
- +N+" / ( rec_vp0.y_1 - rec_vp0.y_0 ) //"//[P]//
- +N+" * ( rec_vp2.y_1 - rec_vp2.y_0 ) //"//[P]//
- +N+" ) + rec_vp2.y_0 /////////////// //"//[P]//
- +N+" );; //"//[P]//
- +N+" //:----------------------------------------://"//[P]//
- +N+" //"//[P]//
- +N+" //: Output_Becomes_Input: //"//[P]//
- +N+" vec2 vp2_m_i = vec2( vp2_m_o ); //"//[P]//
- +N+" //"//[P]//
- +N+" //:----------------------------------------://"//[P]//
- +N+" //: YES. we are using rec_vpc AGAIN! //"//[P]//
- +N+" //: The formula is just an assignment, //"//[P]//
- +N+" //: because vp2 is a sub-sample of vpc. //"//[P]//
- +N+" //: //"//[P]//
- +N+" //: [ rec_vp2/vp2_m_i ]TO[ rec_vpc/vpc_m_o ]//"//[P]//
- +N+" //: INN: vp2 ( rec_vp2 & vp2_m_i ) //"//[P]//
- +N+" //: OUT: vpc ( rec_vpc / vpc_m_o ) //"//[P]//
- +N+" //:----------------------------------------://"//[P]//
- +N+" vec2 vpc_m_o =vec2( vp2_m_i ); //"//[P]//
- +N+" //:----------------------------------------://"//[P]//
- +N+" //"//[P]//
- +N+" //: Output_Becomes_Input: //"//[P]//
- +N+" //: Already used[ vpc_m_i ]so we will call //"//[P]//
- +N+" //: this var [ vpc_mi2 ]to avoid prblms. //"//[P]//
- +N+" vec2 vpc_mi2 = vec2( vpc_m_o ); //"//[P]//
- +N+" //"//[P]//
- +N+" //:----------------------------------------://"//[P]//
- +N+" //: [rec_vpc/vpc_m_i]TO[rec_vpc/vpc_n_o] //"//[P]//
- +N+" //: Formula is simpler this time because we //"//[P]//
- +N+" //: only want the percentage_along_path on //"//[P]//
- +N+" //: the sides of rec_vpc. //"//[P]//
- +N+" //:----------------------------------------://"//[P]//
- +N+" vec2 vpc_n_o = vec2( //"//[P]//
- +N+" (( vpc_mi2.x - rec_vpc.x_0 ) //"//[P]//
- +N+" /( rec_vpc.x_1- rec_vpc.x_0 )) //"//[P]//
- +N+" , //"//[P]//
- +N+" (( vpc_mi2.y - rec_vpc.y_0 ) //"//[P]//
- +N+" /( rec_vpc.y_1- rec_vpc.y_0 )) //"//[P]//
- +N+" );; //"//[P]//
- +N+" //:----------------------------------------://"//[P]//
- +N+" //"//[P]//
- +N+" //: Output_Becomes_Input: //"//[P]//
- +N+" vec2 vpc_n_i = vec2( vpc_n_o ); //"//[P]//
- +N+" //"//[P]//
- +N+" //:These normalized coordinates represent //"//[P]//
- +N+" //:rec_vpc coordinates after rec_vp2 has //"//[P]//
- +N+" //:ZOOMED and PANNED over rec_vpc. //"//[P]//
- +N+" vec2 tbs_noc = vec2( vpc_n_i ); //"//[P]//
- +N+" //"//[P]//
- +N+" //:ZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZPZP://"//[P]//
- +N+" //:ZP:Zoom_Pan_fragCoordTransform:(BELOW):-://"//[P]//
- +N+" //"//[P]//
- +N+" //:Make test bed shaders aware of vp0 bounds so //"//[P]//
- +N+" //:you can draw the shader code inset. //"//[P]//
- +N+" //"//[P]//
- +N+" #define R_0 ( rec_vp0 ) //:///////////////////////"//[P]//
- +N+" float VP0_WID =( R_0.x_1 - R_0.x_0 + 1.0 ); //"//[P]//
- +N+" float VP0_HIG =( R_0.y_1 - R_0.y_0 + 1.0 ); //"//[P]//
- +N+" #undef R_0 //:///////////////////////////////////"//[P]//
- +N+" //"//[P]//
- +N+" //:Variables for test bed shaders: //"//[P]//
- +N+" float tbs_tim = float( gam_tim ) / 255.0; //"//[P]//
- +N+" //"//[P]//
- +N+" //:N0:Normalized_Within_VP0:SC[tbs_noc_vp0_math]//"//[P]//
- +N+" //:N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0://"//[P]//
- +N+" //: ://"//[P]//
- +N+" //: tbs_noc: 0.0 to 1.0 when pixel in rec_vp0 ://"//[P]//
- +N+" //: ://"//[P]//
- +N+" //:N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0://"//[P]//
- +N+" //"//[P]//
- +N+" //: ###########################################://"//[P]//
- +N+" //: ## ##://"//[P]//
- +N+" //: ## |<----gl_FragCoord(Rougly)--->| ##://"//[P]//
- +N+" //: ## ( min ) ( min ) ##://"//[P]//
- +N+" //: ## tbs_uic tbs_uic ##://"//[P]//
- +N+" //: ## | | ##://"//[P]//
- +N+" //: ## V V ##://"//[P]//
- +N+" //: ## |<----------- vpc ----------->| ##://"//[P]//
- +N+" //: ## ##---------------------------## ##://"//[P]//
- +N+" //: ## ##-----------## ##://"//[P]//
- +N+" //: ## |<--- vp0 --->| ##://"//[P]//
- +N+" //: ## ^ ^ ##://"//[P]//
- +N+" //: ## | | ##://"//[P]//
- +N+" //: ## tbs_noc tbs_noc ##://"//[P]//
- +N+" //: ## tbs_mac tbs_mac ##://"//[P]//
- +N+" //: ## ( max ) ( max ) ##://"//[P]//
- +N+" //: ## ##://"//[P]//
- +N+" //: ###########################################://"//[P]//
- +N+" //"//[P]//
- +N+" //:De-normalize: Make Maverick: tbs_mac //"//[P]//
- +N+" vec2 tbs_mac = tbs_noc * vec2( //"//[P]//
- +N+" (VP0_WID - 1.0)//:(VP0_WID - 1) //"//[P]//
- +N+" , (VP0_HIG - 1.0) //:(VP0_HIG - 1) //"//[P]//
- +N+" );; //"//[P]//
- +N+" //"//[P]//
- +N+" //:N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0N0://"//[P]//
- +N+" //"//[P]//
- +N+" //: tbs_uic: Uint_(Color|Coord) //"//[P]//
- +N+" uvec2 tbs_uic = uvec2( //"//[P]//
- +N+" /**/gl_FragCoord.x - 0.5 //"//[P]//
- +N+" , gl_FragCoord.y - 0.5 //"//[P]//
- +N+" );; //"//[P]//
- +N+" //"//[P]//
- +N+" bool inn_bou =( //"//[P]//
- +N+" tbs_uic.x >= uint( rec_vp0.x_0 ) //:LEF //"//[P]//
- +N+" && tbs_uic.x <= uint( rec_vp0.x_1 ) //:RIG //"//[P]//
- +N+" && tbs_uic.y >= uint( rec_vp0.y_0 ) //:TOP //"//[P]//
- +N+" && tbs_uic.y <= uint( rec_vp0.y_1 ) //:BOT //"//[P]//
- +N+" ); //"//[P]//
- +N+" //"//[P]//
- +N+" vec4 tbs_out = vec4( 0.3, 0.3, 0.3, 1.0 ); //"//[P]//
- +N+" //"//[P]//
- +N+" //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://"//[P]//
- +N+" //:P:test_bed_shaders_prelude:(BELOW):---------://"//[P]//
- +N+" if( ! inn_bou ){ "//+E1_FS+//
- +N+" tbs_out.x =( 0.2 ); "//+E1_FS+//
- +N+" tbs_out.y =( 0.2 ); "//+E1_FS+//
- +N+" tbs_out.z =( 0.2 ); "//+E1_FS+//
- +N+" tbs_out.w =( 1.0 );//:100% alpha! "//+E1_FS+//
- +N+" }else{ "//+E1_FS+//
- +N+" if( uint(0) == dex_sha ){ "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" "+AA2_EDIT001_FragSrc_dex_sha( 0 )+" "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" };; "//+E1_FS+//
- +N+" if( uint(1) == dex_sha ){ "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" "+AA2_EDIT001_FragSrc_dex_sha( 1 )+" "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" };; "//+E1_FS+//
- +N+" if( uint(2) == dex_sha ){ "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" "+AA2_EDIT001_FragSrc_dex_sha( 2 )+" "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" };; "//+E1_FS+//
- +N+" if( uint(3) == dex_sha ){ "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" "+AA2_EDIT001_FragSrc_dex_sha( 3 )+" "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" };; "//+E1_FS+//
- +N+" if( uint(4) == dex_sha ){ "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" "+AA2_EDIT001_FragSrc_dex_sha( 4 )+" "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" };; "//+E1_FS+//
- +N+" if( uint(5) == dex_sha ){ "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" "+AA2_EDIT001_FragSrc_dex_sha( 5 )+" "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" };; "//+E1_FS+//
- +N+" if( uint(6) == dex_sha ){ "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" "+AA2_EDIT001_FragSrc_dex_sha( 6 )+" "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" };; "//+E1_FS+//
- +N+" if( uint(7) == dex_sha ){ "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" "+AA2_EDIT001_FragSrc_dex_sha( 7 )+" "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" };; "//+E1_FS+//
- +N+" if( uint(8) == dex_sha ){ "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" "+AA2_EDIT001_FragSrc_dex_sha( 8 )+" "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" };; "//+E1_FS+//
- +N+" if( uint(9) == dex_sha ){ "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" "+AA2_EDIT001_FragSrc_dex_sha( 9 )+" "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" };; "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" };; //:inn_bou? "//+E1_FS+//
- +N+" "//+E1_FS+//
- +N+" //:Test bed shaders outro: "//+E1_FS+//
- +N+" //://///////////////////////////////////://"//+E1_FS+//
- +N+" //: Load output of tbs shader branch: "//+E1_FS+//
- +N+" //: fragColorVariable == tbs_out; "//+E1_FS+//
- +N+" pix_fra = tbs_out; "//+E1_FS+//
- +N+" //://///////////////////////////////////://"//+E1_FS+//
- );;};;//:////////////////////////////////////////////://
- //:111111111111111111111111111111111111111111111111111111://
- //:222222222222222222222222222222222222222222222222222222://
- //:TAGS[ #SHADER_CODE# / #shader_code# ]:::::::::::::::::://
- if( 2 == edi_mod ){ code=(""
- +N+"//:DA:DeclareAll_Variables:(BELOW):--------://"//[E_2]//
- +N+"//:DADADADADADADADADADADADADADADADADADADADA://"//[E_2]//
- +N+"//: "//[E_2]//
- +N+"//: Logic transcribed from DAS_BOR.HTM "//[E_2]//
- +N+"//: All variables declared up front to help "//[E_2]//
- +N+"//: me get my head straight on all of this. "//[E_2]//
- +N+"//: "//[E_2]//
- +N+"//:DADADADADADADADADADADADADADADADADADADADA://"//[E_2]//
- +N+" "//[E_2]//
- +N+" REC_INC rec_src ; //: rec_vp1 "//[E_2]//
- +N+" REC_INC rec_dst ; //: rec_vp0 "//[E_2]//
- +N+" float vpc_hig ; //: FLIP__Y "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:Configuration: Source_Encoding_Cluster "//[E_2]//
- +N+" //:How many pixels are used to encode a "//[E_2]//
- +N+" //:single tile value? "//[E_2]//
- +N+" float SRC_ENC_C_X =(1.0); //:Cluster_X "//[E_2]//
- +N+" float SRC_ENC_C_Y =(1.0); //:Cluster_Y "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:VS:Viewport_Sizes:------------------://"//[E_2]//
- +N+" //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://"//[E_2]//
- +N+" "//[E_2]//
- +N+" float vp0_wid; //:dst_wid[(dx1-dx0+1)]"//[E_2]//
- +N+" float vp0_hig; //:dst_hig[(dy1-dy0+1)]"//[E_2]//
- +N+" "//[E_2]//
- +N+" float vp1_wid; //:src_wid[(sx1-sx0+1)]"//[E_2]//
- +N+" float vp1_hig; //:src_hig[(sy1-sy0+1)]"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:VSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVS://"//[E_2]//
- +N+" //:U:Uniforms:-------------------------://"//[E_2]//
- +N+" //:UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:#CAM_TXY_IS_CAM_UNITS#:// "//[E_2]//
- +N+" uint til_exp ; //:TileExponent "//[E_2]//
- +N+" uint til_san ; //:TileSpan( 2^til_exp)"//[E_2]//
- +N+" uint cam_t_x ; //:CAMERA_TILE:X "//[E_2]//
- +N+" uint cam_t_y ; //:CAMERA_TILE:Y "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:dex_hot:OfMemoryCell:ToSample "//[E_2]//
- +N+" //:Must be prefixed with [e02] so we "//[E_2]//
- +N+" //:don't collide with uniform of the "//[E_2]//
- +N+" //:same name. "//[E_2]//
- +N+" uint e02_dex_hot ; "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU://"//[E_2]//
- +N+" //:SD:Source_and_Dest:-----------------://"//[E_2]//
- +N+" //:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:SOURCE::(OFFSCREEN_DATA)::::::::::::://"//[E_2]//
- +N+" //:[ rec_vp1 | rec_src ].[x_0|x_1|y_0|y_1]"//[E_2]//
- +N+" float sx0 ; //:[ vp1 | src ].x_0 "//[E_2]//
- +N+" float sx1 ; //:[ vp1 | src ].x_1 "//[E_2]//
- +N+" float sy0 ; //:[ vp1 | src ].y_0 "//[E_2]//
- +N+" float sy1 ; //:[ vp1 | src ].y_1 "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:Source_as:Number_Of_Sections "//[E_2]//
- +N+" //:Size of viewport unless using "//[E_2]//
- +N+" //:multiple pixels to encode one tile."//[E_2]//
- +N+" //://:IF[1:1]THEN[n_x =(sx1-sx0+1)] "//[E_2]//
- +N+" float n_x ; "//[E_2]//
- +N+" float n_y ; "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:src_as:offmoni_data_pixel_coord:://"//[E_2]//
- +N+" //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:Actual location of the data on "//[E_2]//
- +N+" //:bitmap encoding our tile values"//[E_2]//
- +N+" float s_x ; //:Loc:BM/Data "//[E_2]//
- +N+" float s_y ; //:Loc:BM/Data "//[E_2]//
- +N+" "//[E_2]//
- +N+" //: Zeroed out location used to "//[E_2]//
- +N+" //: calculate the internal coords "//[E_2]//
- +N+" //: of the current tile in focus. "//[E_2]//
- +N+" float loc_s_x ; //:ZeroedOutLoc"//[E_2]//
- +N+" float loc_s_y ; //:ZeroedOutLoc"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:DEST::::::::::::::::::::::::::::::::://"//[E_2]//
- +N+" //:[ rec_vp0 == rec_dst ]::::::::::::// "//[E_2]//
- +N+" float dx0 ; //:[ vp0 | dst ].x_0 "//[E_2]//
- +N+" float dx1 ; //:[ vp0 | dst ].x_1 "//[E_2]//
- +N+" float dy0 ; //:[ vp0 | dst ].y_0 "//[E_2]//
- +N+" float dy1 ; //:[ vp0 | dst ].y_1 "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:Dest_as:fragment_coord::::::::::://"//[E_2]//
- +N+" float f_x ; //:[Frag/Screen]Coord:X"//[E_2]//
- +N+" float f_y ; //:[Frag/Screen]Coord:Y"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:Dest_as:screen_pixel_coord::::::://"//[E_2]//
- +N+" float d_x ; //:Destination:X "//[E_2]//
- +N+" float d_y ; //:Destination:Y "//[E_2]//
- +N+" "//[E_2]//
- +N+" int int_d_x ; //:d_x as integer "//[E_2]//
- +N+" int int_d_y ; //:d_y as integer "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:Local_To[ rec_vp0 / rec_dst ] "//[E_2]//
- +N+" float ldx ; //:d_x local "//[E_2]//
- +N+" float ldy ; //:d_y local "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
- +N+" //:TS:TileSize:------------------------://"//[E_2]//
- +N+" //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //: Vars for mapping local coords ://"//[E_2]//
- +N+" //: of a tile-sprite onto the ://"//[E_2]//
- +N+" //: [ screen/rec_vp0/rec_vpc ]. ://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //: [T:TileSize][P:Pixels][0:rec_vp0] "//[E_2]//
- +N+" float tp0_wid ; "//[E_2]//
- +N+" float tp0_hig ; "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:tinco:TileINternalCOordinate: "//[E_2]//
- +N+" float tinco_x ; //:CURRENT:x "//[E_2]//
- +N+" float tinco_y ; //:CURRENT:y "//[E_2]//
- +N+" float tincox0 ; //:( X0 AKA MIN ) "//[E_2]//
- +N+" float tincoy0 ; //:( Y0 AKA MIN ) "//[E_2]//
- +N+" float tincox1 ; //:( X1 AKA MAX ) "//[E_2]//
- +N+" float tincoy1 ; //:( Y1 AKA MAX ) "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:SG:SquareGradient:----------://"//[E_2]//
- +N+" //:SGSGSGSGSGSGSGSGSGSGSGSGSGSG://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:DIStances:from_edges_of_tile: "//[E_2]//
- +N+" float dis_lef ; "//[E_2]//
- +N+" float dis_rig ; "//[E_2]//
- +N+" float dis_top ; "//[E_2]//
- +N+" float dis_bot ; "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:TED:Tile_EDge(distances): "//[E_2]//
- +N+" float ted_m_x ; //:MAV_X "//[E_2]//
- +N+" float ted_m_y ; //:MAV_Y "//[E_2]//
- +N+" float ted_mav ; //:MAV_1D "//[E_2]//
- +N+" float ted_nor ; //:NOR_1D "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:SGSGSGSGSGSGSGSGSGSGSGSGSGSG://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:TSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTS://"//[E_2]//
- +N+" "//[E_2]//
- +N+" "//[E_2]//
- +N+"//:DADADADADADADADADADADADADADADADADADADADA://"//[E_2]//
- +N+"//:DA:DeclareAll_Variables:(ABOVE):--------://"//[E_2]//
- +N+" "//[E_2]//
- +N+"//:LU:Load_Uniform_values:(BELOW):---------://"//[E_2]//
- +N+"//:LULULULULULULULULULULULULULULULULULULULU://"//[E_2]//
- +N+"#define TIL_EXP ( TAU_001_EDIT002_til_exp ) "//[E_2]//
- +N+"#define TIL_SAN ( TAU_001_EDIT002_til_san ) "//[E_2]//
- +N+"#define CAM_T_X ( TAU_001_EDIT002_cam_t_x ) "//[E_2]//
- +N+"#define CAM_T_Y ( TAU_001_EDIT002_cam_t_y ) "//[E_2]//
- +N+"#define DEX_HOT ( TAU_001_EDIT002_dex_hot ) "//[E_2]//
- +N+" "//[E_2]//
- +N+" til_exp = TAU_001_U32( TIL_EXP ); "//[E_2]//
- +N+" til_san = TAU_001_U32( TIL_SAN ); "//[E_2]//
- +N+" cam_t_x = TAU_001_U32( CAM_T_X ); "//[E_2]//
- +N+" cam_t_y = TAU_001_U32( CAM_T_Y ); "//[E_2]//
- +N+" e02_dex_hot = TAU_001_U32( DEX_HOT ); "//[E_2]//
- +N+" "//[E_2]//
- +N+"#undef TIL_EXP //:///////////////////////://"//[E_2]//
- +N+"#undef TIL_SAN //:///////////////////////://"//[E_2]//
- +N+"#undef CAM_T_X //:///////////////////////://"//[E_2]//
- +N+"#undef CAM_T_Y //:///////////////////////://"//[E_2]//
- +N+"#undef DEX_HOT //:///////////////////////://"//[E_2]//
- +N+"//:LULULULULULULULULULULULULULULULULULULULU://"//[E_2]//
- +N+" "//[E_2]//
- +N+"//:SD:Source_and_Destination:(BELOW):------://"//[E_2]//
- +N+"//:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:SOURCE:VIEWPORT:////:///////////////://"//[E_2]//
- +N+" //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
- +N+" //: Determine size of camera in tiles::://"//[E_2]//
- +N+" //: Math.pow(2,til_exp) === til_san ://"//[E_2]//
- +N+" #define T_X ( float( cam_t_x ) ) //:///://"//[E_2]//
- +N+" #define T_Y ( float( cam_t_y ) ) //:///://"//[E_2]//
- +N+" #define SAN ( float( til_san ) ) //:///://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:| 0 || 1 || 2 | "//[E_2]//
- +N+" //:[0][1][2][3][4][5][6][7][8]//:rec_vp1 "//[E_2]//
- +N+" sx0 = ( T_X * SAN ) + 0.0 - 0.0; //:vp1 "//[E_2]//
- +N+" sx1 = ( T_X * SAN ) + SAN - 1.0; //:vp1 "//[E_2]//
- +N+" sy0 = ( T_Y * SAN ) + 0.0 - 0.0; //:vp1 "//[E_2]//
- +N+" sy1 = ( T_Y * SAN ) + SAN - 1.0; //:vp1 "//[E_2]//
- +N+" "//[E_2]//
- +N+" n_x = ( sx1 - sx0 + 1.0 ) / SRC_ENC_C_X; "//[E_2]//
- +N+" n_y = ( sy1 - sy0 + 1.0 ) / SRC_ENC_C_Y; "//[E_2]//
- +N+" "//[E_2]//
- +N+" #undef T_X //:///////////////////////://"//[E_2]//
- +N+" #undef T_Y //:///////////////////////://"//[E_2]//
- +N+" #undef SAN //:///////////////////////://"//[E_2]//
- +N+" //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://"//[E_2]//
- +N+" //:SOURCE + DEST: DAS_BOR.HTM : "//[E_2]//
- +N+" //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:SOURCE:[ rec_vp1 ]AKA[ rec_src ] "//[E_2]//
- +N+" rec_src.x_0 = sx0 ; //: [ vp1|src ] "//[E_2]//
- +N+" rec_src.x_1 = sx1 ; //: [ vp1|src ] "//[E_2]//
- +N+" rec_src.y_0 = sy0 ; //: [ vp1|src ] "//[E_2]//
- +N+" rec_src.y_1 = sy1 ; //: [ vp1|src ] "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:DEST:::[ rec_vp0 ]AKA[ rec_dst ] "//[E_2]//
- +N+" rec_dst =( rec_vp0 ); "//[E_2]//
- +N+" dx0 = rec_dst.x_0 ; //: [ dst|vp0 ] "//[E_2]//
- +N+" dx1 = rec_dst.x_1 ; //: [ dst|vp0 ] "//[E_2]//
- +N+" dy0 = rec_dst.y_0 ; //: [ dst|vp0 ] "//[E_2]//
- +N+" dy1 = rec_dst.y_1 ; //: [ dst|vp0 ] "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://"//[E_2]//
- +N+" //:CP:Current_Pixel:-------------------://"//[E_2]//
- +N+" //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://"//[E_2]//
- +N+" f_x = gl_FragCoord.x; "//[E_2]//
- +N+" f_y = gl_FragCoord.y; "//[E_2]//
- +N+" "//[E_2]//
- +N+" vpc_hig =( "//[E_2]//
- +N+" rec_vpc.y_1 "//[E_2]//
- +N+" - rec_vpc.y_0 + 1.0 "//[E_2]//
- +N+" );; "//[E_2]//
- +N+" "//[E_2]//
- +N+" int_d_x = int( gl_FragCoord.x - 0.5 ); "//[E_2]//
- +N+" int_d_y = int( "//[E_2]//
- +N+" ( vpc_hig - 1.0 ) //:FLIP_Y "//[E_2]//
- +N+" -( gl_FragCoord.y - 0.5 ) "//[E_2]//
- +N+" );; "//[E_2]//
- +N+" d_x = float( int_d_x ); "//[E_2]//
- +N+" d_y = float( int_d_y ); "//[E_2]//
- +N+" //:CPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCP://"//[E_2]//
- +N+"//:SDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSDSD://"//[E_2]//
- +N+"//:SD:Source_and_Destination:(ABOVE):------://"//[E_2]//
- +N+" "//[E_2]//
- +N+"//:==================================:// "//[E_2]//
- +N+"//: #DAS_BOR_HTM_LOOP_COMMENT# :::::// "//[E_2]//
- +N+"//:_loop_through_every_pixel_of__:::::// "//[E_2]//
- +N+"//:_CANVAS_instead_of_every_pixel:::::// "//[E_2]//
- +N+"//:_of_destination_viewport______:::::// "//[E_2]//
- +N+"#define MACRO_rec_dst ( rec_vp0 ) //::// "//[E_2]//
- +N+"int outside_destination_viewport=( 1 ); "//[E_2]//
- +N+"if( d_x >= rec_dst.x_0 ){//:LEF:// "//[E_2]//
- +N+"if( d_x <= rec_dst.x_1 ){//:RIG:// "//[E_2]//
- +N+"if( d_y >= rec_dst.y_0 ){//:TOP:// "//[E_2]//
- +N+"if( d_y <= rec_dst.y_1 ){//:BOT:// "//[E_2]//
- +N+" outside_destination_viewport=( 0 ); "//[E_2]//
- +N+"};;};;};;};; "//[E_2]//
- +N+"#undef MACRO_rec_dst //://///////////:// "//[E_2]//
- +N+"//:==================================:// "//[E_2]//
- +N+" "//[E_2]//
- +N+"uvec4 dye_out; "//[E_2]//
- +N+"if( outside_destination_viewport > 0 ){ "//[E_2]//
- +N+" "//[E_2]//
- +N+" dye_out.x =uint( 0 ); "//[E_2]//
- +N+" dye_out.y =uint( 64 ); "//[E_2]//
- +N+" dye_out.z =uint( 128 ); "//[E_2]//
- +N+" dye_out.w =uint( 255 ); "//[E_2]//
- +N+" "//[E_2]//
- +N+"}else "//[E_2]//
- +N+"if( 0 == outside_destination_viewport ){ "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:WH:Wid-&-Hig:-----------------------://"//[E_2]//
- +N+" //:WHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWH://"//[E_2]//
- +N+" //: ANOTHER_WAY_TO_CALCULATE_SAME_THING: "//[E_2]//
- +N+" //: vp0_wid =( rec_vp0[ x_1 - x_0 ] + 1 );"//[E_2]//
- +N+" //: vp0_hig =( rec_vp0[ y_1 - y_0 ] + 1 );"//[E_2]//
- +N+" //: vp1_wid =( rec_vp1[ x_1 - x_0 ] + 1 );"//[E_2]//
- +N+" //: vp1_hig =( rec_vp1[ y_1 - y_0 ] + 1 );"//[E_2]//
- +N+" "//[E_2]//
- +N+" vp0_wid = (dx1 - dx0 + 1.0); //:DEST:WID "//[E_2]//
- +N+" vp0_hig = (dy1 - dy0 + 1.0); //:DEST:HIG "//[E_2]//
- +N+" vp1_wid = (sx1 - sx0 + 1.0); //:SRC::WID "//[E_2]//
- +N+" vp1_hig = (sy1 - sy0 + 1.0); //:SRC::HIG "//[E_2]//
- +N+" //:WHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWHWH://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:====================================://"//[E_2]//
- +N+" //:[COMLINK_D_XY_TO_LD_XY_2020_06_01] "//[E_2]//
- +N+" //:[d_x,d_y]<==GLOBAL|LOCAL==>[ldx,ldy]: "//[E_2]//
- +N+" ldx = ( d_x - dx0 ); //:ldx:Local:Dest:X "//[E_2]//
- +N+" ldy = ( d_y - dy0 ); //:ldy:Local:Dest:Y "//[E_2]//
- +N+" "//[E_2]//
- +N+" #define F floor //:////////////////////://"//[E_2]//
- +N+" s_x = F(((ldx)/(vp0_wid))*(vp1_wid))+sx0; "//[E_2]//
- +N+" s_y = F(((ldy)/(vp0_hig))*(vp1_hig))+sy0; "//[E_2]//
- +N+" s_x = F( s_x ); "//[E_2]//
- +N+" s_y = F( s_y ); "//[E_2]//
- +N+" #undef F //://////////////////////////://"//[E_2]//
- +N+" //:====================================://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:SL:SourceLocal: [ loc.s_x , loc.s_y ] "//[E_2]//
- +N+" //:SLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSL://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //: ( rec_vp1 === rec_src ) "//[E_2]//
- +N+" loc_s_x = ( s_x - rec_src.x_0 ); "//[E_2]//
- +N+" loc_s_y = ( s_y - rec_src.y_0 ); "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:SLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLSL://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:TI:Tile_Internal_Coordinates: "//[E_2]//
- +N+" //:TITITITITITITITITITITITITITITITITITI://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:Size of tile: "//[E_2]//
- +N+" //: 1: Measured in pixels. "//[E_2]//
- +N+" //: 2: AsSeenIn[ rec_dst / rec_vp0 ] "//[E_2]//
- +N+" //: [tp0_wid == ScreenTile:wid ] "//[E_2]//
- +N+" //: [tp0_hig == ScreenTile:hig ] "//[E_2]//
- +N+" tp0_wid = ( vp0_wid / n_x ); "//[E_2]//
- +N+" tp0_hig = ( vp0_hig / n_y ); "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:TINCO:TileINternalCOordinate "//[E_2]//
- +N+" //:================================://"//[E_2]//
- +N+" //:TINCO-( MIN( X1 | Y1 ) ) "//[E_2]//
- +N+" tincox0 = 0.0; "//[E_2]//
- +N+" tincoy0 = 0.0; "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:TINCO-( MAX( X1 | Y1 ) ) "//[E_2]//
- +N+" tincox1 =( tp0_wid - 1.0 ); "//[E_2]//
- +N+" tincoy1 =( tp0_hig - 1.0 ); "//[E_2]//
- +N+" //:================================://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //[ KEEP: tinco NON-normalized ------- ]//"//[E_2]//
- +N+" tinco_x = ldx - ( tp0_wid * loc_s_x ); "//[E_2]//
- +N+" tinco_y = ldy - ( tp0_hig * loc_s_y ); "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:GR:Gradient_Mapping:--------://"//[E_2]//
- +N+" //:GRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[E_2]//
- +N+" dis_lef =abs( tincox0 - tinco_x );"//[E_2]//
- +N+" dis_rig =abs( tincox1 - tinco_x );"//[E_2]//
- +N+" dis_top =abs( tincoy0 - tinco_y );"//[E_2]//
- +N+" dis_bot =abs( tincoy1 - tinco_y );"//[E_2]//
- +N+" "//[E_2]//
- +N+" ted_m_x =min( dis_lef , dis_rig );"//[E_2]//
- +N+" ted_m_y =min( dis_top , dis_bot );"//[E_2]//
- +N+" ted_mav =min( ted_m_x , ted_m_y );"//[E_2]//
- +N+" ted_nor =( 1.0 "//[E_2]//
- +N+" * ted_mav "//[E_2]//
- +N+" / ((tp0_wid+tp0_hig)*0.5) "//[E_2]//
- +N+" * 4.0 //:2.0:Pyramid "//[E_2]//
- +N+" );; //:4.0:OverblownFlatTop"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:GRGRGRGRGRGRGRGRGRGRGRGRGRGR://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:TITITITITITITITITITITITITITITITITITI://"//[E_2]//
- +N+" "//[E_2]//
- +N+" //:Current u32_til value in focus: "//[E_2]//
- +N+" uvec4 dye_bas =( "//[E_2]//
- +N+" Get_Tex_dex_hot( "//[E_2]//
- +N+" int( s_x ) //: d_x , s_x "//[E_2]//
- +N+" , int( s_y ) //: d_y , s_y "//[E_2]//
- +N+" , int( e02_dex_hot ) "//[E_2]//
- +N+" ) "//[E_2]//
- +N+" );; "//[E_2]//
- +N+" "//[E_2]//
- +N+" //:DO_NOT_RE_DECLARE[ dye_out ]!!!!!!!! "//[E_2]//
- +N+" //:DO_YOU_WANT_SHADOWED_VARIABLES?????? "//[E_2]//
- +N+" //:BECAUSE_THAT_IS_HOW_YOU_GET_SHADOWED "//[E_2]//
- +N+" //:VARIABLES!!!!!!!!!!!!!!!!!!!!!!!!!!! "//[E_2]//
- +N+" dye_out =uvec4( "//[E_2]//
- +N+" uint( float( dye_bas.x ) * ted_nor ) "//[E_2]//
- +N+" , uint( float( dye_bas.y ) * ted_nor ) "//[E_2]//
- +N+" , uint( float( dye_bas.z ) * ted_nor ) "//[E_2]//
- +N+" , uint( 255 ) "//[E_2]//
- +N+" );; "//[E_2]//
- +N+" "//[E_2]//
- +N+"};;//:[0 == outside_destination_viewport ?]://"//[E_2]//
- +N+" "//[E_2]//
- +N+"//:INDICATES_A_PROBLEM: "//[E_2]//
- +N+"if( til_san == uint(0) ){ "//[E_2]//
- +N+" dye_out = uvec4(234,8,9,255); "//[E_2]//
- +N+"};; "//[E_2]//
- +N+" "//[E_2]//
- +N+"pix_fra = vec4( "//[E_2]//
- +N+" float( dye_out.x ) / 255.0 "//[E_2]//
- +N+", float( dye_out.y ) / 255.0 "//[E_2]//
- +N+", float( dye_out.z ) / 255.0 "//[E_2]//
- +N+", float( dye_out.w ) / 255.0 "//[E_2]//
- +N+");; "//[E_2]//
- );;};;//:[ 2 == edi_mod]//:////://///////////////////////://
- //:222222222222222222222222222222222222222222222222222222://
- //:333333333333333333333333333333333333333333333333333333://
- if( 3 == edi_mod ){ code=(""
- );;};;//:[ 3 == edi_mod]//:////://///////////////////////://
- //:333333333333333333333333333333333333333333333333333333://
- //:444444444444444444444444444444444444444444444444444444://
- if( 4 == edi_mod ){ code=(""
- );;};;//:[ 4 == edi_mod]//:////://///////////////////////://
- //:444444444444444444444444444444444444444444444444444444://
- //:555555555555555555555555555555555555555555555555555555://
- if( 5 == edi_mod ){ code=(""
- );;};;//:[ 5 == edi_mod]//:////://///////////////////////://
- //:555555555555555555555555555555555555555555555555555555://
- //:666666666666666666666666666666666666666666666666666666://
- if( 6 == edi_mod ){ code=(""
- );;};;//:[ 6 == edi_mod]//:////://///////////////////////://
- //:666666666666666666666666666666666666666666666666666666://
- //:777777777777777777777777777777777777777777777777777777://
- if( 7 == edi_mod ){ code=(""
- );;};;//:[ 7 == edi_mod]//:////://///////////////////////://
- //:777777777777777777777777777777777777777777777777777777://
- //:888888888888888888888888888888888888888888888888888888://
- if( 8 == edi_mod ){ code=(""
- );;};;//:[ 8 == edi_mod]//:////://///////////////////////://
- //:888888888888888888888888888888888888888888888888888888://
- //:999999999999999999999999999999999999999999999999999999://
- if( 9 == edi_mod ){ code=(""
- );;};;//:[ 9 == edi_mod]//:////://///////////////////////://
- //:999999999999999999999999999999999999999999999999999999://
- return( code );
- };; //:[AA2_Get_edi_sha_src]:////://///////////://
- //:GSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGS://
- //:GS:GetShader:(ABOVE):---------------------------------://
- //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
- //: (ABOVE) ://
- //:NF: Namespaced_Functions: (CONTI):------------------------://
- //: (BELOW) ://
- //:nfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnfnf://
- //:TAGS[ shader_code / shadercode / shader-code ]
- //:AKA[ AA2_FragFet_TestGal_InpArg_dex_sha ]
- function AA2_EDIT001_FragSrc_dex_sha(
- dex_sha
- ){
- var N = "\n";
- var shader_code = "";
- if( 0 == dex_sha ){ shader_code =(""
- +N+" //:vp0:Maverick_Coords: "
- +N+" int p_x = int( tbs_mac.x ); "
- +N+" int p_y = int( tbs_mac.y ); "
- +N+" "
- +N+" //:Viewport_Dimensions: "
- +N+" //:TODO:UNHARDCODETHIS: "
- +N+" float vp0_wid = ( Get_VP0_WID_f32()); "
- +N+" float vp0_hig = ( Get_VP0_WID_f32()); "
- +N+" "
- +N+" float tau_wid = float( "
- +N+" 1 "
- +N+" +TAU_001_x1 "
- +N+" -TAU_001_x0 "
- +N+" );; "
- +N+" float tau_hig = float( "
- +N+" 1 "
- +N+" +TAU_001_y1 "
- +N+" -TAU_001_y0 "
- +N+" );; "
- +N+" "
- +N+" //: CALC_SCALEFACTOR:SEE[SCALEFAC_HELP] "
- +N+" //: Viewport #1 to Tau Coord: "
- +N+" vec2 vp1_to_tau =( "
- +N+" vec2( tau_wid , tau_hig ) //:DST:tau "
- +N+" / vec2( vp0_wid , vp0_hig ) //:SRC:vp1 "
- +N+" );; "
- +N+" "
- +N+" //:scale viewport coordinate to TAU coord: "
- +N+" vec2 tau_loc =( "
- +N+" vec2( p_x , p_y ) "
- +N+" * vp1_to_tau "
- +N+" );; "
- +N+" "
- +N+" //:Offset tau coord by tau's origin "
- +N+" //:to get correct sampling x/y coord: "
- +N+" vec2 tau_glo = tau_loc + vec2( "
- +N+" TAU_001_x0 "
- +N+" , TAU_001_y0 "
- +N+" );; "
- +N+" "
- +N+" //:Sample TAU_001 sub-region using "
- +N+" //:the XY coordinate of of the "
- +N+" //:allocated uniform pixel. "
- +N+" uvec4 pix_rgb =( "
- +N+" TAU_001_POS( "
- +N+" int(tau_glo.x) "
- +N+" , int(tau_glo.y) "
- +N+" )//[x]// "
- +N+" );; "
- +N+" "
- +N+" tbs_out = vec4( pix_rgb ) / 255.0; "
- +N+" "
- );;};;
- if( 1 == dex_sha ){shader_code=(""
- +N+" //:LewisLeptonsVariables: "//[L]//
- +N+" vec2 coord = tbs_noc; "//[L]//
- +N+" vec3 color = vec3(0.0); "//[L]//
- +N+" float u_time = tbs_tim; "//[L]//
- +N+" "//[L]//
- +N+" color =( "//[L]//
- +N+" color "//[L]//
- +N+" + sin( 1.0 "//[L]//
- +N+" * coord.x "//[L]//
- +N+" * cos( u_time / 30.0 ) "//[L]//
- +N+" * 60.0 "//[L]//
- +N+" ) "//[L]//
- +N+" + sin( 1.0 "//[L]//
- +N+" * coord.y "//[L]//
- +N+" * cos( u_time / 15.0) "//[L]//
- +N+" * 10.0 "//[L]//
- +N+" ) "//[L]//
- +N+" );; "//[L]//
- +N+" "//[L]//
- +N+" //:Flip Pattern: "//[L]//
- +N+" color =( "//[L]//
- +N+" color "//[L]//
- +N+" + cos( 1.0 "//[L]//
- +N+" * coord.y "//[L]//
- +N+" * sin( u_time / 30.0 ) "//[L]//
- +N+" * 60.0 "//[L]//
- +N+" ) "//[L]//
- +N+" + cos( 1.0 "//[L]//
- +N+" * coord.x "//[L]//
- +N+" * sin( u_time / 15.0) "//[L]//
- +N+" * 10.0 "//[L]//
- +N+" ) "//[L]//
- +N+" );; "//[L]//
- +N+" "//[L]//
- +N+" //:How to we map extremes to zero? "//[L]//
- +N+" vec3 ove_dye = color; "//[L]//
- +N+" float inn = ove_dye.x; "//[L]//
- +N+" float m_3 = mod( inn*2.0 , 2.0 ); "//[L]//
- +N+" ove_dye.x= ove_dye.x / ( m_3 / 3.0 ); "//[L]//
- +N+" ove_dye.y= 0.0; //: ove_dye.y; "//[L]//
- +N+" ove_dye.z= ove_dye.z + ( m_3 / 3.0 ); "//[L]//
- +N+" ove_dye.x = ( ove_dye.x + ove_dye.z ) /8.0; "//[L]//
- +N+" ove_dye.z = ove_dye.z; "//[L]//
- +N+" "//[L]//
- +N+" color = ( ove_dye + color ) / 2.0; "//[L]//
- +N+" "//[L]//
- +N+" tbs_out = vec4( color, 1.0 ); "//[L]//
- );;};;
- if( 2 == dex_sha ){shader_code=(""
- //[#MANDELBROT#]//
- +N+" int dex_max = ( 50 ); //"//|M_B|//
- +N+" //"//|M_B|//
- +N+" vec2 z; //"//|M_B|//
- +N+" float x,y; //"//|M_B|//
- +N+" int steps; //"//|M_B|//
- +N+" //"//|M_B|//
- +N+" //: Normalized(X|Y)[ n_x , n_y ]; //"//|M_B|//
- +N+" float n_x = tbs_noc.x - float(0.75); //"//|M_B|//
- +N+" float n_y = tbs_noc.y + float(0.26); //"//|M_B|//
- +N+" //"//|M_B|//
- +N+" z.x = n_x; //"//|M_B|//
- +N+" z.y = n_y; //"//|M_B|//
- +N+" //"//|M_B|//
- +N+" for (int i=0;i<dex_max;i++) { //"//|M_B|//
- +N+" //"//|M_B|//
- +N+" steps = i; //"//|M_B|//
- +N+" //"//|M_B|//
- +N+" x = (z.x * z.x - z.y * z.y) + n_x;//"//|M_B|//
- +N+" y = (z.y * z.x + z.x * z.y) + n_y;//"//|M_B|//
- +N+" //"//|M_B|//
- +N+" if((x * x + y * y) > 4.0) { //"//|M_B|//
- +N+" break; //"//|M_B|//
- +N+" } //"//|M_B|//
- +N+" //"//|M_B|//
- +N+" z.x = x; //"//|M_B|//
- +N+" z.y = y; //"//|M_B|//
- +N+" };; //"//|M_B|//
- +N+" //"//|M_B|//
- +N+" float tim = float( gam_tim )/256.0; //"//|M_B|//
- +N+" float f_1 = cos(tim); //"//|M_B|//
- +N+" float f_2 = sin(tim); //"//|M_B|//
- +N+" //"//|M_B|//
- +N+" if (steps == dex_max-1) { //"//|M_B|//
- +N+" tbs_out = vec4( //"//|M_B|//
- +N+" f_2, f_2, f_2, 1.0 //"//|M_B|//
- +N+" );; //"//|M_B|//
- +N+" } else { //"//|M_B|//
- +N+" //"//|M_B|//
- +N+" float dye =( //"//|M_B|//
- +N+" float(steps) //"//|M_B|//
- +N+" /float(dex_max) //"//|M_B|//
- +N+" );; //"//|M_B|//
- +N+" tbs_out = vec4( //"//|M_B|//
- +N+" dye, 0.0, f_1, 1.0 //"//|M_B|//
- +N+" );; //"//|M_B|//
- +N+" };; //"//|M_B|//
- );;};;
- if( 3 == dex_sha ){shader_code=(""
- //[BLANK_SHADER_SLOT]//
- +N+" float t = (1.0 + cos( tbs_tim*8.0 ))/2.0; "
- +N+" tbs_out = vec4( 0,0,t,1 );"
- );;};;
- if( 4 == dex_sha ){shader_code=(""
- //[BLANK_SHADER_SLOT]//
- +N+" float t = (1.0 + cos( tbs_tim*16.0 ))/2.0; "
- +N+" tbs_out = vec4( 0,t,1,1 );" //:C:CYAN
- );;};;
- if( 5 == dex_sha ){shader_code=("" //:M:MAGENTA
- //[BLANK_SHADER_SLOT]//
- +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
- +N+" tbs_out = vec4( 1,0,t,1 );"
- );;};;
- if( 6 == dex_sha ){shader_code=(""
- //[BLANK_SHADER_SLOT]//
- +N+" float t = (1.0 + cos( tbs_tim*64.0 ))/2.0; "
- +N+" tbs_out = vec4( t,1,0,1 );" //:Y:YELLOW
- );;};;
- if( 7 == dex_sha ){shader_code=(""
- //[BLANK_SHADER_SLOT]//
- +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
- +N+" tbs_out = vec4( 0.0,t,0.5,1 );" //:C:DARK
- );;};;
- if( 8 == dex_sha ){shader_code=("" //:M:DARK
- //[BLANK_SHADER_SLOT]//
- +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
- +N+" tbs_out = vec4( 0.5,0.0,t,1 );"
- );;};;
- if( 9 == dex_sha ){shader_code=(""
- //[BLANK_SHADER_SLOT]//
- +N+" float t = (1.0 + cos( tbs_tim*32.0 ))/2.0; "
- +N+" tbs_out = vec4( t,0.5,0.0,1 );" //:Y:DARK
- );;};;
- return( shader_code );
- };;//:[AA2_EDIT001_FragSrc_dex_sha]:////:///////////////://
- //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
- //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
- //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
- //:NFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNFNF://
- //:NF:Namsepaced_Functions:(ABOVE):--------------------------://
- //:BC:Base_Class_OfEverything:(BELOW):-----------------------://
- //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
- //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
- //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
- //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
- //:IE:Informal_Enum:(BELOW):-------------------------://
- //:IEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIE://
- //:NOTE: "VAR_TYP" ALWAYS identifies
- //: [TERMINAL/DERIVED]
- //: class when using inheritence,
- //: never the base class.
- //:IEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIE://
- const AA2_VAR_TYP_edi_000 =( 0 );
- const AA2_VAR_TYP_edi_001 =( 1 );
- const AA2_VAR_TYP_edi_002 =( 2 );
- //:IEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIEIE://
- //:VT:VAR_TAG:(BELOW):-------------------------------://
- //:VTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVT://
- //: ://
- //:VAR_TAG is the base-class of all STRUCTS and ://
- //: CLASSES. We are going to use ://
- //: [ informal / conceptual ] inheritance. ://
- //: The inheritance is only enforced by ://
- //: rigid programming conventions, not by ://
- //: actual inheritance mechanisms. ://
- //: ://
- //:VTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVT://
- var AA2_var_tag={
- //:Variable_Type: ALWAYS_FIRST_MEMBER_OF_TAG!
- VAR_TYP : 0 //:uint32:unique_type_identifier
- //:DB:Debug_Members:-------------------------://
- //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
- //: Variable_Hint: Exists only for debugging ://
- //: since I can't exactly read "VAR_TYP" ://
- //: integer values. Feel free to change this ://
- //: hint value to whatever you want while ://
- //: debugging. ://
- //: ://
- //: Decided limiting myself to 3 b characters://
- //: Is over optimizing. At least give enough ://
- //: space to hold names of your types. ://
- //: All types are 7 characters long, so can ://
- //: use uint64 to hold. ://
- , VAR_HIN : "var_hin"
- //:uint32. 0x-FF-FF-FF-FF-FF-FF-FF-FF
- //:........0x.01.02.03.04.05.06.07.08
- //:............E..D..I.._..0..0..1.\0 (edi_001)
- , VAR_NIL : 0 //:GUARD_BYTES
- //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
- };;Object.seal( AA2_var_tag );
- function NEW_var_tag(){
- "use strict"
- var var_tag = Object.assign(
- Object.create(null)
- , AA2_var_tag
- );;
- Object.seal( var_tag );
- return( var_tag );
- };;
- //:VTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVT://
- //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
- //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
- //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
- //:BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC://
- //:S:Structs_Section:(BELOW):--------------------------------://
- //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
- //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
- //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
- //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
- //:ixy_das:Index_and_XY_DAtaStructure:
- function NEW_ixy_das( /** void **/ ){
- var ixy_das ={
- i_i : 0 //:INDEX
- , x_x : 0 //:INDEX_TO_COORDINATE.X
- , y_y : 0 //:INDEX_TO_COORDINATE.Y
- };;Object.seal( ixy_das );
- return( ixy_das );
- };;
- //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
- //: rec_inc:RECtangle_INClusive(points/bounds)
- var AA2_rec_inc={
- x_0 : 0 - 101
- , y_0 : 0 - 202
- , x_1 : 0 - 303
- , y_1 : 0 - 404
- };; Object.seal( AA2_rec_inc );
- function NEW_rec_inc( /** void **/ ){
- "use strict" //:rec_inc://
- var rec_inc = AA2_ZeroIni( AA2_rec_inc );
- return( rec_inc );
- };;
- //: - - - - - - - - - - - - ---- - - - - - - - - - - - - ://
- //: AKA[ NEW_GlobalEventStruct | NEW_glo_eve ]
- function NEW_glo_eve( /** void **/ ){
- "use strict"
- var glo_eve ={
- VAR_TYP : "glo_eve"
- //:The data in a keyboard event and mouse event
- //:does not intersect. So lets use this struct
- //:kind of like a union. Depending on what
- //:bits are set in eve_typ and eve_sub, we will
- //:handle as different type of event.
- , eve_typ : 0 /** BIT_PATTERN_SO_CAN_BE_MULTIPLE **/
- , eve_sub : 0 /** BIT_PATTERN_SO_CAN_BE_MULTIPLE **/
- //: sub_typ : "mouse_event" or "keyboard_event" ?
- //:KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK://
- , key : "" //:What key was pressed?
- , k_d : 0 //:IsKeyCurrentlyDown?
- , k_u : 0 //:IsKeyCurrentlyUp?
- //:KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK://
- //:M:Mouse Event Stuff:
- //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
- , m_x : 0 //:Mouse x
- , m_y : 0 //:Mouse y
- , c_x : 0 //:Mouse CLICK: x
- , c_y : 0 //:Mouse CLICK: y
- , u_x : 0 //:Mouse UP ( u_x == "Up X" )
- , u_y : 0 //:Mouse UP ( u_y == "Up Y" )
- , d_x : 0 //:Mouse DOWN
- , d_y : 0 //:Mouse DOWN
- //:If both are set or unset,
- //:that is an error:
- , m_d : 0 //:IsMouseCurrentlyDown?
- , m_u : 0 //:IsMouseCurrentlyUp?
- //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
- };;Object.seal( glo_eve );
- return( glo_eve );
- };;
- //:CS:Configured_Structs:
- //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
- //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
- //:
- //: What goes here?
- //: 1: Struct "NEW"er (Constructor) functions
- //: that take 1 or more arguments.
- //:
- //: 2: Struct "NEW"er (Constructor) functions
- //: that take 0 arguments, but internally
- //: are calling another 0-argument "NEW"er
- //: and then performing extra configuration
- //: on the created object.
- //:
- //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
- //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
- //:New_RectangleInclusive_MadeIntoA_RectangleHot
- //:New_InclusiveRectangle_MadeIntoA_HotSwapRectangle
- function NEW_rec_inc_MAD_rec_hot(
- h_x //:h_x:HotSwapRectangleGridCoordinate:X
- , h_y //:h_y:HotSwapRectangleGridCoordinate:Y
- ){
- var sub_san =( GLO_CFG.SAN_MAM
- /GLO_CFG.SAN_ISO );;
- var sub_san_CHK = Math.floor( sub_san );
- if( sub_san_CHK != sub_san ){
- throw("[NOT_EVENLY]");
- };;
- //:SAN_MAM measured in
- //:SAN_ISO sub partitions.
- var sub_wid=( sub_san );
- var sub_hig=( sub_san );
- if( h_x < 0 || h_x >= sub_wid
- || h_y < 0 || h_y >= sub_hig
- ){
- throw("[REC_HOT:OOB]");
- };;
- //:AA2_MAKE_HOT_SWAP_RECTANGLE
- //:NEW_rec_inc :Base_Type
- //:MAD_rec_hot :Made_Type
- var rec_inc =( NEW_rec_inc() );
- rec_inc.x_0 = ( h_x * GLO_CFG.SAN_ISO );
- rec_inc.y_0 = ( h_y * GLO_CFG.SAN_ISO );
- rec_inc.x_1 = ( rec_inc.x_0 + GLO_CFG.SAN_ISO );
- rec_inc.y_1 = ( rec_inc.y_0 + GLO_CFG.SAN_ISO );
- Object.freeze( rec_inc /** AKA:rec_hot **/ );
- return( rec_inc /** AKA:rec_hot **/ );
- };;
- //:- - - - - - - - - - - - - -- - - - - - - - - - - - - -://
- //:You can only make a "loo_tab" with some bit of
- //:configuration. (default function pointers). Thus
- //:it belongs in pre-configured structs section.
- function NEW_loo_tab(){ //:LoopTable: struct NOT class.
- //:Struct instances belong in the
- //:GLO_DAT object.
- //:Stub_Functions:
- //://////////////////////////////////////////////////://
- function
- AA2_LoopTableTickDefaultFunction_nat_win( /**VOID**/ ){
- //: ://
- //: Keyboard and mouse code logic go into ://
- //: the "nat_win" function because in C code ://
- //: it is the window that recieves the ://
- //: keyboard and mouse inputs. ://
- //: ://
- //: A bit akward, I know, but not changing it. ://
- //: ://
- console.log("[PLEASE_WIRE_UP:nat_win]");
- };;
- function
- AA2_LoopTableTickDefaultFunction_gam_obj( /**VOID**/ ){
- console.log("[PLEASE_WIRE_UP:gam_obj]");
- };;
- function
- AA2_LoopTableTickDefaultFunction_ren_log( /**VOID**/ ){
- console.log("[PLEASE_WIRE_UP:ren_log]");
- };;
- //://////////////////////////////////////////////////://
- var loo_tab ={
- //:WINDOW+KEYBOARD+MOUSE:
- //:KEYBOARD_LOGIC_GOES_INTO_THIS_CALLBACK:(nat_win)
- nat_win : AA2_LoopTableTickDefaultFunction_nat_win
- //:GameObjectUpdateTick:AKA[ gam_log ]
- , gam_obj : AA2_LoopTableTickDefaultFunction_gam_obj
- //:RenderingLogic: (Ex:glDrawArrays)
- , ren_log : AA2_LoopTableTickDefaultFunction_ren_log
- , gam_tim : ( 0 - 1 ) //:GameTime/GameTicks
- , lop_tim : ( 0 - 1 ) //:LoopTime/LoopTicks
- };;Object.seal( loo_tab );
- return( loo_tab );
- };; //:[FN:NEW_loo_tab(...)]:////:///////////////////////://
- //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
- //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
- //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
- //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
- //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
- //:SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS://
- //:S:Structs_Section:(ABOVE):--------------------------------://
- //:C:Classes_Section:(BELOW):--------------------------------://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:------------------------------------------------------://
- //:"Classes"/"Class" defined as: (In This Code Base)
- //: 1. Mixing functions with data.
- //: 2. Structs that contain other structs.
- //: ( #2 might want to be moved to some type of)
- //: ( "meta structs" section. )
- //:------------------------------------------------------://
- //:AV:Adapter_Variables:(BELOW):-------------------------://
- //:AVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV://
- //: ://
- //: Variables that determine game state may or may not ://
- //: need to be synced with the GPU. Thus, non-private ://
- //: variables that need to communicate state ://
- //: information to other game objects need to store ://
- //: their public variables "off-site" in the ://
- //: "ada_var"/"adapter_variables" class. ://
- //: ://
- //: This way we have one class responsible for ://
- //: synchronization of variables and don't have ://
- //: to worry about that logic in other classes. ://
- //: ://
- //: NOTE: THIS NEEDS TO BE NOTICABLY HIGHER LEVEL ://
- //: THAN "TextureAsUniformController" ://
- //: or else we are just juggling around ://
- //: data without actually transforming it. ://
- //: ://
- //: REASON_FOR_THIS_CLASS_USING_EXAMPLE: ://
- //: =================================================== ://
- //: Need way to set variables that is decoupled from ://
- //: the webgl graphics code. If we change from ://
- //: "WebGL" to "Vulkan", only the internals of ://
- //: this class will need to be re-worked to fix ://
- //: variable synchronization. All public ://
- //: "GLO_CLA.ada_var.Put_*" & ://
- //: "GLO_CLA.ada_var.Get_*" ://
- //: calls will not need to be changed. ://
- //: =================================================== ://
- //: ://
- //:AVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV://
- function NEW_ada_var( /** void **/ ){
- var ada_var = ( new AA2_AdapterVariables() );
- Object.seal( ada_var );
- return( ada_var );
- };;
- function AA2_AdapterVariables( /** void **/ ){
- //:PE:Publically_Exposed_Functions:(BELOW):----------://
- //:PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE://
- this.Put_RenMod = Put_RenMod; //:PUT:ren_mod
- this.Get_RenMod = Get_RenMod; //:GET:ren_mod
- //## <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Todo: Undo camel case for the variable part of Get_VarName and Put_VarName.... Breaks Alignment ##//
- this.Put_EdiMod = Put_EdiMod; //:PUT:edi_mod
- this.Get_EdiMod = Get_EdiMod; //:GET:edi_mod
- this.Put_GamTim = Put_GamTim; //:PUT:gam_tim
- this.Get_GamTim = Get_GamTim; //:GET:gam_tim
- this.Put_DexHot = Put_DexHot; //:PUT:dex_hot
- this.Get_DexHot = Get_DexHot; //:GET:dex_hot
- //:LV:LOSTVAR_S ( Global_Orphan_Variables )------://
- //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
- //[NONE_AT_THE_MOMENT]//
- //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
- //:GV:GLOBVAR_S: ( Intentionally_Global_Variables )
- //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
- //:[ Get | Put ]rec_vpc[ x_0,x_1,y_0,y_1 ]
- //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
- this.Put_GLOBVAR_rec_vpc=(
- /**/ Put_GLOBVAR_rec_vpc );
- this.Get_GLOBVAR_rec_vpc=(
- /**/ Get_GLOBVAR_rec_vpc );
- this.Put_GLOBVAR_rec_vpc_x_0 =(
- /**/ Put_GLOBVAR_rec_vpc_x_0 );;
- this.Get_GLOBVAR_rec_vpc_x_0 =(
- /**/ Get_GLOBVAR_rec_vpc_x_0 );;
- this.Put_GLOBVAR_rec_vpc_x_1 =(
- /**/ Put_GLOBVAR_rec_vpc_x_1 );;
- this.Get_GLOBVAR_rec_vpc_x_1 =(
- /**/ Get_GLOBVAR_rec_vpc_x_1 );;
- this.Put_GLOBVAR_rec_vpc_y_0 =(
- /**/ Put_GLOBVAR_rec_vpc_y_0 );;
- this.Get_GLOBVAR_rec_vpc_y_0 =(
- /**/ Get_GLOBVAR_rec_vpc_y_0 );;
- this.Put_GLOBVAR_rec_vpc_y_1 =(
- /**/ Put_GLOBVAR_rec_vpc_y_1 );;
- this.Get_GLOBVAR_rec_vpc_y_1 =(
- /**/ Get_GLOBVAR_rec_vpc_y_1 );;
- //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
- //:[ Get | Put ]rec_vp0[ x_0,x_1,y_0,y_1 ]
- //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
- this.Put_GLOBVAR_rec_vp0=(
- /**/ Put_GLOBVAR_rec_vp0 );
- this.Get_GLOBVAR_rec_vp0=(
- /**/ Get_GLOBVAR_rec_vp0 );
- this.Put_GLOBVAR_rec_vp0_x_0 =(
- /**/ Put_GLOBVAR_rec_vp0_x_0 );;
- this.Get_GLOBVAR_rec_vp0_x_0 =(
- /**/ Get_GLOBVAR_rec_vp0_x_0 );;
- this.Put_GLOBVAR_rec_vp0_x_1 =(
- /**/ Put_GLOBVAR_rec_vp0_x_1 );;
- this.Get_GLOBVAR_rec_vp0_x_1 =(
- /**/ Get_GLOBVAR_rec_vp0_x_1 );;
- this.Put_GLOBVAR_rec_vp0_y_0 =(
- /**/ Put_GLOBVAR_rec_vp0_y_0 );;
- this.Get_GLOBVAR_rec_vp0_y_0 =(
- /**/ Get_GLOBVAR_rec_vp0_y_0 );;
- this.Put_GLOBVAR_rec_vp0_y_1 =(
- /**/ Put_GLOBVAR_rec_vp0_y_1 );;
- this.Get_GLOBVAR_rec_vp0_y_1 =(
- /**/ Get_GLOBVAR_rec_vp0_y_1 );;
- //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
- //:[ Get | Put ]rec_vp1[ x_0,x_1,y_0,y_1 ]
- //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
- this.Put_GLOBVAR_rec_vp1=(
- /**/ Put_GLOBVAR_rec_vp1 );
- this.Get_GLOBVAR_rec_vp1=(
- /**/ Get_GLOBVAR_rec_vp1 );
- this.Put_GLOBVAR_rec_vp1_x_0 =(
- /**/ Put_GLOBVAR_rec_vp1_x_0 );;
- this.Get_GLOBVAR_rec_vp1_x_0 =(
- /**/ Get_GLOBVAR_rec_vp1_x_0 );;
- this.Put_GLOBVAR_rec_vp1_x_1 =(
- /**/ Put_GLOBVAR_rec_vp1_x_1 );;
- this.Get_GLOBVAR_rec_vp1_x_1 =(
- /**/ Get_GLOBVAR_rec_vp1_x_1 );;
- this.Put_GLOBVAR_rec_vp1_y_0 =(
- /**/ Put_GLOBVAR_rec_vp1_y_0 );;
- this.Get_GLOBVAR_rec_vp1_y_0 =(
- /**/ Get_GLOBVAR_rec_vp1_y_0 );;
- this.Put_GLOBVAR_rec_vp1_y_1 =(
- /**/ Put_GLOBVAR_rec_vp1_y_1 );;
- this.Get_GLOBVAR_rec_vp1_y_1 =(
- /**/ Get_GLOBVAR_rec_vp1_y_1 );;
- //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
- //:[ Get | Put ]rec_vp2[ x_0,x_1,y_0,y_1 ]
- //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
- this.Put_GLOBVAR_rec_vp2=(
- /**/ Put_GLOBVAR_rec_vp2 );
- this.Get_GLOBVAR_rec_vp2=(
- /**/ Get_GLOBVAR_rec_vp2 );
- this.Put_GLOBVAR_rec_vp2_x_0 =(
- /**/ Put_GLOBVAR_rec_vp2_x_0 );;
- this.Get_GLOBVAR_rec_vp2_x_0 =(
- /**/ Get_GLOBVAR_rec_vp2_x_0 );;
- this.Put_GLOBVAR_rec_vp2_x_1 =(
- /**/ Put_GLOBVAR_rec_vp2_x_1 );;
- this.Get_GLOBVAR_rec_vp2_x_1 =(
- /**/ Get_GLOBVAR_rec_vp2_x_1 );;
- this.Put_GLOBVAR_rec_vp2_y_0 =(
- /**/ Put_GLOBVAR_rec_vp2_y_0 );;
- this.Get_GLOBVAR_rec_vp2_y_0 =(
- /**/ Get_GLOBVAR_rec_vp2_y_0 );;
- this.Put_GLOBVAR_rec_vp2_y_1 =(
- /**/ Put_GLOBVAR_rec_vp2_y_1 );;
- this.Get_GLOBVAR_rec_vp2_y_1 =(
- /**/ Get_GLOBVAR_rec_vp2_y_1 );;
- //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
- //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //:01:edi_001:variables:(BELOW):-----------------://
- //:0101010101010101010101010101010101010101010101://
- //:Put_DexSha & Get_DexSha :
- //:PUT:dex_sha & GET:dex_sha:
- this.Put_EDIT001_dex_sha = Put_EDIT001_dex_sha;
- this.Get_EDIT001_dex_sha = Get_EDIT001_dex_sha;
- //:0101010101010101010101010101010101010101010101://
- //:01:edi_001:variables:(ABOVE):-----------------://
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //:02:edi_002:variables:(BELOW):-----------------://
- //:0202020202020202020202020202020202020202020202://
- this.Put_EDIT002_til_exp = Put_EDIT002_til_exp;
- this.Get_EDIT002_til_exp = Get_EDIT002_til_exp;
- //:til_exp's value resolved to linear:
- //:This value needs to not be set directly
- //:but UPDATED as consequence of setting [til_exp]
- this.Put_EDIT002_til_san = Put_EDIT002_til_san;
- this.Get_EDIT002_til_san = Get_EDIT002_til_san;
- this.Put_EDIT002_cam_t_x = Put_EDIT002_cam_t_x;
- this.Get_EDIT002_cam_t_x = Get_EDIT002_cam_t_x;
- this.Put_EDIT002_cam_t_y = Put_EDIT002_cam_t_y;
- this.Get_EDIT002_cam_t_y = Get_EDIT002_cam_t_y;
- //: Using dex_hot to identify the memory region ://
- //: this camera is navigating over. Variable ://
- //: does NOT signify which memory region is ://
- //: currently hot-swapped out. The identical ://
- //: name is because they are associated with ://
- //: the exact same array of [rec_inc] that are ://
- //: overlaid over [mam_mem]. ://
- this.Put_EDIT002_dex_hot = Put_EDIT002_dex_hot;
- this.Get_EDIT002_dex_hot = Get_EDIT002_dex_hot;
- //:Use hyper_rectangle/hypermap/quarkmap
- //:interpretation of tilemap data on pixel data?
- this.Put_EDIT002_use_hyp = Put_EDIT002_use_hyp;
- this.Get_EDIT002_use_hyp = Get_EDIT002_use_hyp;
- //:0202020202020202020202020202020202020202020202://
- //:02:edi_002:variables:(ABOVE):-----------------://
- //:PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE://
- //:PE:Publically_Exposed_Functions:(ABOVE):----------://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- function Put_RenMod( u32_val ){ //:put:ren_mod
- var ADA =( GLO_CLA.ada_gra );
- var CON =( GLO_CLA.ada_gra.gpuvcon );
- ADA.ren_mod.u32_val =( u32_val );
- CON.u32_put( ADA , ADA.ren_mod );
- };;
- function Get_RenMod(/**VOI**/){ //:get:ren_mod
- var ADA =( GLO_CLA.ada_gra );
- var CON =( GLO_CLA.ada_gra.gpuvcon );
- CON.u32_get( ADA , ADA.ren_mod );
- var u32_val =( ADA.ren_mod.u32_val );
- return( u32_val );
- };;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- function Put_EdiMod( u32_val ){ //:put:edi_mod
- var ADA =( GLO_CLA.ada_gra );
- var CON =( GLO_CLA.ada_gra.gpuvcon );
- ADA.edi_mod.u32_val =( u32_val );
- CON.u32_put( ADA , ADA.edi_mod );
- };;
- function Get_EdiMod(/**VOI**/){ //:get:edi_mod
- var ADA =( GLO_CLA.ada_gra );
- var CON =( GLO_CLA.ada_gra.gpuvcon );
- CON.u32_get( ADA , ADA.edi_mod );
- var u32_val =( ADA.edi_mod.u32_val );
- return( u32_val );
- };;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- function Put_GamTim( u32_val ){ //:put:gam_tim
- var ADA =( GLO_CLA.ada_gra );
- var CON =( GLO_CLA.ada_gra.gpuvcon );
- ADA.gam_tim.u32_val =( u32_val );
- CON.u32_put( ADA , ADA.gam_tim );
- };;
- function Get_GamTim(/**VOI**/){ //:get:gam_tim
- var ADA =( GLO_CLA.ada_gra );
- var CON =( GLO_CLA.ada_gra.gpuvcon );
- CON.u32_get( ADA , ADA.gam_tim );
- var u32_val =( ADA.gam_tim.u32_val );
- return( u32_val );
- };;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- function Put_DexHot( u32_val ){ //:put:dex_hot
- var ADA =( GLO_CLA.ada_gra );
- var CON =( GLO_CLA.ada_gra.gpuvcon );
- ADA.dex_hot.u32_val =( u32_val );
- CON.u32_put( ADA , ADA.dex_hot );
- };;
- function Get_DexHot(/**VOI**/){ //:get:dex_hot
- var ADA =( GLO_CLA.ada_gra );
- var CON =( GLO_CLA.ada_gra.gpuvcon );
- CON.u32_get( ADA , ADA.dex_hot );
- var u32_val =( ADA.dex_hot.u32_val );
- return( u32_val );
- };;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:LV:LOST_VARIABLES:(BELOW):------------------------://
- //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
- //[NONE_AT_THE_MOMENT]//
- //:LVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLVLV://
- //:LV:LOST_VARIABLES:(ABOVE):------------------------://
- //:GV:Global_Variables:(BELOW):----------------------://
- //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
- //:VC:[VIEWPORT_C / rec_vpc]:(BELOW):------------://
- //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
- //:////////////////:---.GLOBVAR.rec_vpc_x_0::://
- ;;;function Put_GLOBVAR_rec_vpc_x_0(
- /** u32_val ................ */ rec_vpc_x_0 ){
- GLO_CLA.tau_001.uni_put( //:rec_vpc_x_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_0
- , rec_vpc_x_0 );;
- };;function Get_GLOBVAR_rec_vpc_x_0(
- /** VOID **/ //:rec_vpc_x_0://
- ){ var /* ................. */ rec_vpc_x_0 =(
- GLO_CLA.tau_001.uni_get( //:rec_vpc_x_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_0
- ));;return( /* ......... */ rec_vpc_x_0 );
- };;//://///////////:---.GLOBVAR.rec_vpc_x_0::://
- //:////////////////:---.GLOBVAR.rec_vpc_x_1::://
- ;;;function Put_GLOBVAR_rec_vpc_x_1(
- /** u32_val ................ */ rec_vpc_x_1 ){
- GLO_CLA.tau_001.uni_put( //:rec_vpc_x_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_1
- , rec_vpc_x_1 );;
- };;function Get_GLOBVAR_rec_vpc_x_1(
- /** VOID **/ //:rec_vpc_x_1://
- ){ var /* ................. */ rec_vpc_x_1 =(
- GLO_CLA.tau_001.uni_get( //:rec_vpc_x_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vpc_x_1
- ));;return( /* ......... */ rec_vpc_x_1 );
- };;//://///////////:---.GLOBVAR.rec_vpc_x_1::://
- //:////////////////:---.GLOBVAR.rec_vpc_y_0::://
- ;;;function Put_GLOBVAR_rec_vpc_y_0(
- /** u32_val ................ */ rec_vpc_y_0 ){
- GLO_CLA.tau_001.uni_put( //:rec_vpc_y_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_0
- , rec_vpc_y_0 );;
- };;function Get_GLOBVAR_rec_vpc_y_0(
- /** VOID **/ //:rec_vpc_y_0://
- ){ var /* ................. */ rec_vpc_y_0 =(
- GLO_CLA.tau_001.uni_get( //:rec_vpc_y_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_0
- ));;return( /* ......... */ rec_vpc_y_0 );
- };;//://///////////:---.GLOBVAR.rec_vpc_y_0::://
- //:////////////////:---.GLOBVAR.rec_vpc_y_1::://
- ;;;function Put_GLOBVAR_rec_vpc_y_1(
- /** u32_val ................ */ rec_vpc_y_1 ){
- GLO_CLA.tau_001.uni_put( //:rec_vpc_y_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_1
- , rec_vpc_y_1 );;
- };;function Get_GLOBVAR_rec_vpc_y_1(
- /** VOID **/ //:rec_vpc_y_1://
- ){ var /* ................. */ rec_vpc_y_1 =(
- GLO_CLA.tau_001.uni_get( //:rec_vpc_y_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vpc_y_1
- ));;return( /* ......... */ rec_vpc_y_1 );
- };;//://///////////:---.GLOBVAR.rec_vpc_y_1::://
- //:CA:Compound_Accessors:(Get/Put):----------://
- //:CACACACACACACACACACACACACACACACACACACACACA://
- //://////////////////////////////////////////://
- ;;;function Put_GLOBVAR_rec_vpc( //:///://
- rec_vpc
- ){ Put_GLOBVAR_rec_vpc_x_0( rec_vpc.x_0 );
- Put_GLOBVAR_rec_vpc_x_1( rec_vpc.x_1 );
- Put_GLOBVAR_rec_vpc_y_0( rec_vpc.y_0 );
- Put_GLOBVAR_rec_vpc_y_1( rec_vpc.y_1 );
- };;function Get_GLOBVAR_rec_vpc(
- rec_vpc
- ){ rec_vpc.x_0 = Get_GLOBVAR_rec_vpc_x_0( );
- rec_vpc.x_1 = Get_GLOBVAR_rec_vpc_x_1( );
- rec_vpc.y_0 = Get_GLOBVAR_rec_vpc_y_0( );
- rec_vpc.y_1 = Get_GLOBVAR_rec_vpc_y_1( );
- };;//:///////////////////////////////////////://
- //:CACACACACACACACACACACACACACACACACACACACACA://
- //:VCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVCVC://
- //:VC:[VIEWPORT_C / rec_vpc]:(ABOVE):------------://
- //:V0:[VIEWPORT_0 / rec_vp0]:(BELOW):------------://
- //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
- //:////////////////:---.GLOBVAR.rec_vp0_x_0::://
- ;;;function Put_GLOBVAR_rec_vp0_x_0(
- /** u32_val ................ */ rec_vp0_x_0 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp0_x_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_0
- , rec_vp0_x_0 );;
- };;function Get_GLOBVAR_rec_vp0_x_0(
- /** VOID **/ //:rec_vp0_x_0://
- ){ var /* ................. */ rec_vp0_x_0 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp0_x_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_0
- ));;return( /* ......... */ rec_vp0_x_0 );
- };;//://///////////:---.GLOBVAR.rec_vp0_x_0::://
- //:////////////////:---.GLOBVAR.rec_vp0_x_1::://
- ;;;function Put_GLOBVAR_rec_vp0_x_1(
- /** u32_val ................ */ rec_vp0_x_1 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp0_x_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_1
- , rec_vp0_x_1 );;
- };;function Get_GLOBVAR_rec_vp0_x_1(
- /** VOID **/ //:rec_vp0_x_1://
- ){ var /* ................. */ rec_vp0_x_1 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp0_x_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp0_x_1
- ));;return( /* ......... */ rec_vp0_x_1 );
- };;//://///////////:---.GLOBVAR.rec_vp0_x_1::://
- //:////////////////:---.GLOBVAR.rec_vp0_y_0::://
- ;;;function Put_GLOBVAR_rec_vp0_y_0(
- /** u32_val ................ */ rec_vp0_y_0 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp0_y_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_0
- , rec_vp0_y_0 );;
- };;function Get_GLOBVAR_rec_vp0_y_0(
- /** VOID **/ //:rec_vp0_y_0://
- ){ var /* ................. */ rec_vp0_y_0 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp0_y_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_0
- ));;return( /* ......... */ rec_vp0_y_0 );
- };;//://///////////:---.GLOBVAR.rec_vp0_y_0::://
- //:////////////////:---.GLOBVAR.rec_vp0_y_1::://
- ;;;function Put_GLOBVAR_rec_vp0_y_1(
- /** u32_val ................ */ rec_vp0_y_1 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp0_y_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_1
- , rec_vp0_y_1 );;
- };;function Get_GLOBVAR_rec_vp0_y_1(
- /** VOID **/ //:rec_vp0_y_1://
- ){ var /* ................. */ rec_vp0_y_1 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp0_y_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp0_y_1
- ));;return( /* ......... */ rec_vp0_y_1 );
- };;//://///////////:---.GLOBVAR.rec_vp0_y_1::://
- //:CA:Compound_Accessors:(Get/Put):----------://
- //:CACACACACACACACACACACACACACACACACACACACACA://
- //://////////////////////////////////////////://
- ;;;function Put_GLOBVAR_rec_vp0( //:///://
- rec_vp0
- ){ Put_GLOBVAR_rec_vp0_x_0( rec_vp0.x_0 );
- Put_GLOBVAR_rec_vp0_x_1( rec_vp0.x_1 );
- Put_GLOBVAR_rec_vp0_y_0( rec_vp0.y_0 );
- Put_GLOBVAR_rec_vp0_y_1( rec_vp0.y_1 );
- };;function Get_GLOBVAR_rec_vp0(
- rec_vp0
- ){ rec_vp0.x_0 = Get_GLOBVAR_rec_vp0_x_0( );
- rec_vp0.x_1 = Get_GLOBVAR_rec_vp0_x_1( );
- rec_vp0.y_0 = Get_GLOBVAR_rec_vp0_y_0( );
- rec_vp0.y_1 = Get_GLOBVAR_rec_vp0_y_1( );
- };;//:///////////////////////////////////////://
- //:CACACACACACACACACACACACACACACACACACACACACA://
- //:V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0V0://
- //:V0:[VIEWPORT_0 / rec_vp0]:(ABOVE):------------://
- //:V1:[VIEWPORT_1 / rec_vp1]:(BELOW):------------://
- //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
- //:////////////////:---.GLOBVAR.rec_vp1_x_0::://
- ;;;function Put_GLOBVAR_rec_vp1_x_0(
- /** u32_val ................ */ rec_vp1_x_0 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp1_x_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_0
- , rec_vp1_x_0 );;
- };;function Get_GLOBVAR_rec_vp1_x_0(
- /** VOID **/ //:rec_vp1_x_0://
- ){ var /* ................. */ rec_vp1_x_0 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp1_x_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_0
- ));;return( /* ......... */ rec_vp1_x_0 );
- };;//://///////////:---.GLOBVAR.rec_vp1_x_0::://
- //:////////////////:---.GLOBVAR.rec_vp1_x_1::://
- ;;;function Put_GLOBVAR_rec_vp1_x_1(
- /** u32_val ................ */ rec_vp1_x_1 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp1_x_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_1
- , rec_vp1_x_1 );;
- };;function Get_GLOBVAR_rec_vp1_x_1(
- /** VOID **/ //:rec_vp1_x_1://
- ){ var /* ................. */ rec_vp1_x_1 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp1_x_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp1_x_1
- ));;return( /* ......... */ rec_vp1_x_1 );
- };;//://///////////:---.GLOBVAR.rec_vp1_x_1::://
- //:////////////////:---.GLOBVAR.rec_vp1_y_0::://
- ;;;function Put_GLOBVAR_rec_vp1_y_0(
- /** u32_val ................ */ rec_vp1_y_0 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp1_y_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_0
- , rec_vp1_y_0 );;
- };;function Get_GLOBVAR_rec_vp1_y_0(
- /** VOID **/ //:rec_vp1_y_0://
- ){ var /* ................. */ rec_vp1_y_0 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp1_y_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_0
- ));;return( /* ......... */ rec_vp1_y_0 );
- };;//://///////////:---.GLOBVAR.rec_vp1_y_0::://
- //:////////////////:---.GLOBVAR.rec_vp1_y_1::://
- ;;;function Put_GLOBVAR_rec_vp1_y_1(
- /** u32_val ................ */ rec_vp1_y_1 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp1_y_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_1
- , rec_vp1_y_1 );;
- };;function Get_GLOBVAR_rec_vp1_y_1(
- /** VOID **/ //:rec_vp1_y_1://
- ){ var /* ................. */ rec_vp1_y_1 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp1_y_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp1_y_1
- ));;return( /* ......... */ rec_vp1_y_1 );
- };;//://///////////:---.GLOBVAR.rec_vp1_y_1::://
- //:CA:Compound_Accessors:(Get/Put):----------://
- //:CACACACACACACACACACACACACACACACACACACACACA://
- //://////////////////////////////////////////://
- ;;;function Put_GLOBVAR_rec_vp1( //:///://
- rec_vp1
- ){ Put_GLOBVAR_rec_vp1_x_0( rec_vp1.x_0 );
- Put_GLOBVAR_rec_vp1_x_1( rec_vp1.x_1 );
- Put_GLOBVAR_rec_vp1_y_0( rec_vp1.y_0 );
- Put_GLOBVAR_rec_vp1_y_1( rec_vp1.y_1 );
- };;function Get_GLOBVAR_rec_vp1(
- rec_vp1
- ){ rec_vp1.x_0 = Get_GLOBVAR_rec_vp1_x_0( );
- rec_vp1.x_1 = Get_GLOBVAR_rec_vp1_x_1( );
- rec_vp1.y_0 = Get_GLOBVAR_rec_vp1_y_0( );
- rec_vp1.y_1 = Get_GLOBVAR_rec_vp1_y_1( );
- };;//:///////////////////////////////////////://
- //:CACACACACACACACACACACACACACACACACACACACACA://
- //:V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1://
- //:V1:[VIEWPORT_1 / rec_vp1]:(ABOVE):------------://
- //:V2:[VIEWPORT_2 / rec_vp2]:(BELOW):------------://
- //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
- //:////////////////:---.GLOBVAR.rec_vp2_x_0::://
- ;;;function Put_GLOBVAR_rec_vp2_x_0(
- /** u32_val ................ */ rec_vp2_x_0 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp2_x_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_0
- , rec_vp2_x_0 );;
- };;function Get_GLOBVAR_rec_vp2_x_0(
- /** VOID **/ //:rec_vp2_x_0://
- ){ var /* ................. */ rec_vp2_x_0 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp2_x_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_0
- ));;return( /* ......... */ rec_vp2_x_0 );
- };;//://///////////:---.GLOBVAR.rec_vp2_x_0::://
- //:////////////////:---.GLOBVAR.rec_vp2_x_1::://
- ;;;function Put_GLOBVAR_rec_vp2_x_1(
- /** u32_val ................ */ rec_vp2_x_1 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp2_x_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_1
- , rec_vp2_x_1 );;
- };;function Get_GLOBVAR_rec_vp2_x_1(
- /** VOID **/ //:rec_vp2_x_1://
- ){ var /* ................. */ rec_vp2_x_1 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp2_x_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp2_x_1
- ));;return( /* ......... */ rec_vp2_x_1 );
- };;//://///////////:---.GLOBVAR.rec_vp2_x_1::://
- //:////////////////:---.GLOBVAR.rec_vp2_y_0::://
- ;;;function Put_GLOBVAR_rec_vp2_y_0(
- /** u32_val ................ */ rec_vp2_y_0 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp2_y_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_0
- , rec_vp2_y_0 );;
- };;function Get_GLOBVAR_rec_vp2_y_0(
- /** VOID **/ //:rec_vp2_y_0://
- ){ var /* ................. */ rec_vp2_y_0 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp2_y_0://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_0
- ));;return( /* ......... */ rec_vp2_y_0 );
- };;//://///////////:---.GLOBVAR.rec_vp2_y_0::://
- //:////////////////:---.GLOBVAR.rec_vp2_y_1::://
- ;;;function Put_GLOBVAR_rec_vp2_y_1(
- /** u32_val ................ */ rec_vp2_y_1 ){
- GLO_CLA.tau_001.uni_put( //:rec_vp2_y_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_1
- , rec_vp2_y_1 );;
- };;function Get_GLOBVAR_rec_vp2_y_1(
- /** VOID **/ //:rec_vp2_y_1://
- ){ var /* ................. */ rec_vp2_y_1 =(
- GLO_CLA.tau_001.uni_get( //:rec_vp2_y_1://
- GLO_CFG.TAU_001_GLOBVAR_rec_vp2_y_1
- ));;return( /* ......... */ rec_vp2_y_1 );
- };;//://///////////:---.GLOBVAR.rec_vp2_y_1::://
- //:CA:Compound_Accessors:(Get/Put):----------://
- //:CACACACACACACACACACACACACACACACACACACACACA://
- //://////////////////////////////////////////://
- ;;;function Put_GLOBVAR_rec_vp2( //:///://
- rec_vp2
- ){ Put_GLOBVAR_rec_vp2_x_0( rec_vp2.x_0 );
- Put_GLOBVAR_rec_vp2_x_1( rec_vp2.x_1 );
- Put_GLOBVAR_rec_vp2_y_0( rec_vp2.y_0 );
- Put_GLOBVAR_rec_vp2_y_1( rec_vp2.y_1 );
- };;function Get_GLOBVAR_rec_vp2(
- rec_vp2
- ){ rec_vp2.x_0 = Get_GLOBVAR_rec_vp2_x_0( );
- rec_vp2.x_1 = Get_GLOBVAR_rec_vp2_x_1( );
- rec_vp2.y_0 = Get_GLOBVAR_rec_vp2_y_0( );
- rec_vp2.y_1 = Get_GLOBVAR_rec_vp2_y_1( );
- };;//:///////////////////////////////////////://
- //:CACACACACACACACACACACACACACACACACACACACACA://
- //:V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2V2://
- //:V2:[VIEWPORT_2 / rec_vp2]:(ABOVE):------------://
- //:GVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGV://
- //:GV:Global_Variables:(ABOVE):----------------------://
- //:E1:edi_001:vars:(BELOW):--------------------------://
- //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
- //:AKA[ put:dex_sha | Put_DexSha ]
- function Put_EDIT001_dex_sha( dex_sha /** u32_val **/ ){
- console.log("[put:dex_sha]:", dex_sha );
- GLO_CLA.tau_001.uni_put(
- GLO_CFG.TAU_001_EDIT001_dex_sha
- , dex_sha );;
- };;
- //:AKA[ get:dex_sha | Get_DexSha ]
- function Get_EDIT001_dex_sha(/**VOI**/){
- console.log("[TODO:Get_DexSha]");
- var dex_sha = GLO_CLA.tau_001.uni_get(
- GLO_CFG.TAU_001_EDIT001_dex_sha
- );;
- console.log("[got:dex_sha]:", dex_sha );
- return( dex_sha );
- };;
- //:E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1://
- //:E2:edi_002:vars:(BELOW):--------------------------://
- //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
- //:////////////////:---.EDIT002.til_exp:////:////://
- ;;;function Put_EDIT002_til_exp(
- /** u32_val ................ */ til_exp ){
- GLO_CLA.tau_001.uni_put( //:til_exp://
- GLO_CFG.TAU_001_EDIT002_til_exp
- , til_exp );;
- };;function Get_EDIT002_til_exp(
- /** VOID **/ //:til_exp://
- ){ var /* ................. */ til_exp =(
- GLO_CLA.tau_001.uni_get( //:til_exp://
- GLO_CFG.TAU_001_EDIT002_til_exp
- ));;return( /* ......... */ til_exp );
- };;//://///////////:---.EDIT002.til_exp:////:////://
- //:////////////////:---.EDIT002.til_san:////:////://
- ;;;function Put_EDIT002_til_san(
- /** u32_val ................ */ til_san ){
- GLO_CLA.tau_001.uni_put( //:til_san://
- GLO_CFG.TAU_001_EDIT002_til_san
- , til_san );;
- };;function Get_EDIT002_til_san(
- /** VOID **/ //:til_san://
- ){ var /* ................. */ til_san =(
- GLO_CLA.tau_001.uni_get( //:til_san://
- GLO_CFG.TAU_001_EDIT002_til_san
- ));;return( /* ......... */ til_san );
- };;//://///////////:---.EDIT002.til_san:////:////://
- //:////////////////:---.EDIT002.cam_t_x:////:////://
- ;;;function Put_EDIT002_cam_t_x(
- /** u32_val ................ */ cam_t_x ){
- GLO_CLA.tau_001.uni_put( //:cam_t_x://
- GLO_CFG.TAU_001_EDIT002_cam_t_x
- , cam_t_x );;
- };;function Get_EDIT002_cam_t_x(
- /** VOID **/ //:cam_t_x://
- ){ var /* ................. */ cam_t_x =(
- GLO_CLA.tau_001.uni_get( //:cam_t_x://
- GLO_CFG.TAU_001_EDIT002_cam_t_x
- ));;return( /* ......... */ cam_t_x );
- };;//://///////////:---.EDIT002.cam_t_x:////:////://
- //:////////////////:---.EDIT002.cam_t_y:////:////://
- ;;;function Put_EDIT002_cam_t_y(
- /** u32_val ................ */ cam_t_y ){
- GLO_CLA.tau_001.uni_put( //:cam_t_y://
- GLO_CFG.TAU_001_EDIT002_cam_t_y
- , cam_t_y );;
- };;function Get_EDIT002_cam_t_y(
- /** VOID **/ //:cam_t_y://
- ){ var /* ................. */ cam_t_y =(
- GLO_CLA.tau_001.uni_get( //:cam_t_y://
- GLO_CFG.TAU_001_EDIT002_cam_t_y
- ));;return( /* ......... */ cam_t_y );
- };;//://///////////:---.EDIT002.cam_t_y:////:////://
- //:////////////////:---.EDIT002.dex_hot:////:////://
- ;;;function Put_EDIT002_dex_hot(
- /** u32_val ................ */ dex_hot ){
- GLO_CLA.tau_001.uni_put( //:dex_hot://
- GLO_CFG.TAU_001_EDIT002_dex_hot
- , dex_hot );;
- };;function Get_EDIT002_dex_hot(
- /** VOID **/ //:dex_hot://
- ){ var /* ................. */ dex_hot =(
- GLO_CLA.tau_001.uni_get( //:dex_hot://
- GLO_CFG.TAU_001_EDIT002_dex_hot
- ));;return( /* ......... */ dex_hot );
- };;//://///////////:---.EDIT002.dex_hot:////:////://
- //:////////////////:---.EDIT002.use_hyp:////:////://
- ;;;function Put_EDIT002_use_hyp(
- /** u32_val ................ */ use_hyp ){
- GLO_CLA.tau_001.uni_put( //:use_hyp://
- GLO_CFG.TAU_001_EDIT002_use_hyp
- , use_hyp );;
- };;function Get_EDIT002_use_hyp(
- /** VOID **/ //:use_hyp://
- ){ var /* ................. */ use_hyp =(
- GLO_CLA.tau_001.uni_get( //:use_hyp://
- GLO_CFG.TAU_001_EDIT002_use_hyp
- ));;return( /* ......... */ use_hyp );
- };;//://///////////:---.EDIT002.use_hyp:////:////://
- //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- };;
- //:AVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV://
- //:AV:Adapter_Variables:(ABOVE):-------------------------://
- //:EA:Editor_All:(BELOW):--------------------------------://
- //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
- //: ://
- //: edi_all is ALWAYS in focus and always reading ://
- //: keyboard and mouse input. Depending on the ://
- //: current editor mode ( edi_mod ) it will pass ://
- //: the message on to other subordinate editors. ://
- //: ://
- //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
- function NEW_edi_all( /** void **/ ){
- var edi_all =( new AA2_EditorAll() );
- //:HACK: Because of javascript oddness:
- edi_all.CONSTRUCTOR_AKA_INITIALIZER_edi_all( );
- Object.seal( edi_all );
- return( edi_all );
- };;
- function AA2_EditorAll( ){
- //:Publically_Exposed_Functions:
- //://////////////////////////////////////////////////://
- //:A generic event reader that reads any type of
- //:input event. Whether it be keyboard or mouse.
- //:Could also extend to non-userinput events.
- this.ReadEvent = ReadEvent;
- //:Hack because of javascript weirdness.
- this.CONSTRUCTOR_AKA_INITIALIZER_edi_all=(
- CONSTRUCTOR_AKA_INITIALIZER_edi_all );;
- //://////////////////////////////////////////////////://
- //:Hidden/Private:
- //:==================================================://
- var _ = {}; //:Private Variables Container.
- _.editor_is_in_command_mode =( 0 );
- _.arr_edi =[ 10 ];
- Object.seal( _ );
- //:==================================================://
- //:An explicit constructor/Initializer that is called
- //:within NEW_edi_all(...) will make this code
- //:easier to transcribe to C.
- function CONSTRUCTOR_AKA_INITIALIZER_edi_all(
- /** void **/
- ){
- _.arr_edi = [ 0 //:First Editor is null
- , GLO_CLA.edi_001
- , GLO_CLA.edi_002
- , GLO_CLA.edi_003
- , GLO_CLA.edi_004
- , GLO_CLA.edi_005
- , GLO_CLA.edi_006
- , GLO_CLA.edi_007
- , GLO_CLA.edi_008
- , GLO_CLA.edi_009
- ];;
- };;
- function ReadEvent( glo_eve ){
- //:Possible for object to simultaniously
- //:be BOTH event types at the same time,
- //:so do NOT use "if-else" or "switch" here.
- //://////////////////////////////////////////////://
- if( _IsKeyboardEvent( glo_eve )){
- _HandleEvent_Key( glo_eve );
- };;
- if( _IsMouseEvent( glo_eve )){
- _HandleEvent_Mou( glo_eve );
- };;
- //://////////////////////////////////////////////://
- //:reset's the bit pattersn on:
- //: 1: glo_eve.evt_typ
- //: 2: glo_eve.sub_typ
- //:To let us know the event data is now invalid.
- _MarkEventAsConsumed( glo_eve );
- //:Zeros out all values EXCEPT[ evt_typ & sub_typ ]
- //:So that old values don't get "necromanced"
- //:When bit patterns on "evt_typ" or "sub_type"
- //:get re-instated. If you are REALLY CAREFUL
- //:you could run code without this. But it means
- //:all handler functions MUST check "evt_typ"
- //:and "sub_typ" and only touch data associated
- //:with those event categories.
- //:AKA[ _BetterSafeThanSorryEventDataWhipe ]
- _EventDataWhipe( glo_eve );
- };;
- //://////////////////////////////////////////////////://
- ;;function _IsKeyboardEvent( glo_eve ){ //://///://
- //:Bitwise_AND_to_determine_if_true:
- var res_var=( GLO_DAT.eve_bit.eve_typ_KEY
- & glo_eve.eve_typ );;
- return( res_var );
- };;function _IsMouseEvent( glo_eve ){ //://///://
- //:Bitwise_AND_to_determine_if_true:
- var res_var =( GLO_DAT.eve_bit.eve_typ_MOU
- & glo_eve.eve_typ );;
- return( res_var );
- };;function _HandleEvent_Key( glo_eve ){ //://///://
- var key_press_intercepted =( 0 );
- //:Hotkey_Override:
- //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
- if( glo_eve.k_d){
- if( //:------------------------------------------://
- 0x00 || ( "~" == glo_eve.key )
- || ( "`" == glo_eve.key )
- ){ //:------------------------------------------://
- _.editor_is_in_command_mode =( 1 );
- key_press_intercepted = ( 1 );
- //:------------------------------------------://
- }else
- if( _.editor_is_in_command_mode > 0 ){
- _.editor_is_in_command_mode =( 0 );
- _InvokeHotKey( glo_eve /** glo_eve.key **/ );
- key_press_intercepted = ( 1 );
- };;};;
- //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
- //:Route:ToOtherEditors:
- //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
- if( key_press_intercepted <= 0 ){
- //:Route to sub-editors here:
- //: console.log( "[KEY]:", glo_eve );
- //: console.log( "[k_d]:", glo_eve.k_d );
- //: console.log( "[k_u]:", glo_eve.k_u );
- var tag_eve =( "K_" ); //:KeyWhatever
- if( glo_eve.k_u > 0 ){ tag_eve = "KU"; };
- if( glo_eve.k_d > 0 ){ tag_eve = "KD"; };
- //:INSIDE_FUNCTION[ _HandleEvent_Key ]
- _Call_edi_sub_ReadEvent_Tagged(
- glo_eve //:Global_Event
- , tag_eve //:TAG(for)EVEnt(type)
- );;
- };;
- //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
- };;function _HandleEvent_Mou( glo_eve ){ //://///://
- //:AKA[ _HandleEvent_Mouse | _HandleEvent_Mou ]
- //:If in command mode, ignore mouse events
- //:until user has pressed another key.
- //:NICE_TO_HAVE: red boarder around screen
- //:when in command mode and awaiting hot key input.
- if( _.editor_is_in_command_mode > 0 ){
- return;
- }else{
- //: console.log( "[MOU]:", glo_eve );
- //: console.log( "[m_d]:", glo_eve.m_d );
- //: console.log( "[m_u]:", glo_eve.m_u );
- //#******************************************#//
- //# For now, we will ignore passing event #//
- //# down unless it is a click type event. #//
- //#******************************************#//
- var is_click_event=(
- GLO_DAT.eve_bit.sub_typ_CLK
- & glo_eve.sub_typ
- );;
- //:Even negative in case signed weirdness
- //:somehow happens.
- if( is_click_event != 0 /**EVEN NEGATIVE**/ ){
- var tag_eve = "MC"; //:TAG:MouseClick
- //:INSIDE_FUNCTION[ _HandleEvent_Mou ]
- _Call_edi_sub_ReadEvent_Tagged(
- glo_eve //:Global_Event
- , tag_eve //:TAG(for)EVEnt(type)
- );;
- }else{
- console.log(
- "[FIX:SupportEventsBesides:CLK]"
- );;
- };;
- };;
- };;//:///////////////////////////////////////////////://
- //:Function Name Reads:
- //:"Call edi_sub.ReadEvent_Tagged(...)"
- //:CALLED_FROM[ _HandleEvent_Key ] //:-://
- //:CALLED_FROM[ _HandleEvent_Mou ] //:-://
- function _Call_edi_sub_ReadEvent_Tagged( //:-://
- glo_eve //:-://
- , tag_eve //:-://
- ){ //:-://
- var edi_mod =( //:-://
- GLO_CLA.ada_var.Get_EdiMod() //:-://
- );; //:-://
- //:Only supporting sub editors [1-9] // - //
- if( edi_mod >= 1 && edi_mod <= 9 ){
- //:19191919191919191919191919191919191919://
- var edi_sub = _.arr_edi[ edi_mod ];
- //+//////////////////////////////////+//
- //+ +//
- //+ Problems with this approach: +//
- //+ +//
- //+ _.arr_edi[ edi_mod ].Func(...) +//
- //+ +//
- //+ 1:Polymorphism in C could be +//
- //+ done here by having function +//
- //+ pointers. +//
- //+ But then you would have to be +//
- //+ very careful that data-layout +//
- //+ for derived types is the same. +//
- //+ +//
- //+Using a void* collection of A & B +//
- //+here would be disasterous. +//
- //+struct A{ void* FN_A;void* FN_B };+//
- //+struct B{ void* FN_B;void* FN_A };+//
- //+ +//
- //+//:BUT if careful could work: +//
- //+struct A{ void* FN_A;void* FN_B };+//
- //+struct B{ void* FN_A;void* FN_B };+//
- //+ +//
- //+2: If all of our editors were +//
- //+ written in style: +//
- //+ A: Proceedural (ALL EDITORS) +//
- //+ B: ObjectOriented( ALL EDITORS)+//
- //+ +//
- //+ This approach would work. +//
- //+ But will not work if mixing +//
- //+ procedural and OOP editor code. +//
- //+ +//
- //+ 2.A: DANGER!!!!!! +//
- //+ Even if you did 2.A... +//
- //+ It would work in JavaScript+//
- //+ But would be subject to +//
- //+ the problems of point #1. +//
- //- edi_sub.ReadEvent_Tagged( -//
- //- glo_eve -//
- //- , tag_eve -//
- //- );; -//
- //+__________________________________+//
- //:We can at least keep table for
- //:a check to see if editor was
- //:instantiated.
- if(!edi_sub){ throw("[NO_SUB_EDI]");};
- //:KISS:Keep_it_Simple_stupid:(BELOW)://
- //:KSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKS://
- /*--*/if( 0 == edi_mod ){
- throw("[ThisShouldNeverExecute]");
- }else if( 1 == edi_mod ){
- GLO_CLA.edi_001.ReadEvent_Tagged(
- glo_eve , tag_eve
- );;
- }else if( 2 == edi_mod ){
- AA2_edi_002_ReadEvent_Tagged(
- edi_sub ,glo_eve,tag_eve
- );;
- }else if( 3 == edi_mod ){
- console.log( "[TODO:03]" );
- }else if( 4 == edi_mod ){
- console.log( "[TODO:04]" );
- }else if( 5 == edi_mod ){
- console.log( "[TODO:05]" );
- }else if( 6 == edi_mod ){
- console.log( "[TODO:06]" );
- }else if( 7 == edi_mod ){
- console.log( "[TODO:07]" );
- }else if( 8 == edi_mod ){
- console.log( "[TODO:08]" );
- }else if( 9 == edi_mod ){
- console.log( "[TODO:09]" );
- }else{
- throw("[YOU_MISSED_AN_EDITOR]");
- };;
- //:KISS:Keep_it_Simple_stupid:(BELOW)://
- //:KSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKS://
- //:19191919191919191919191919191919191919://
- }else
- if( 0 == edi_mod ){
- //:Okay. Only edi_all get's
- //:Messages and does not pass
- //:them down to sub editors.
- }else{
- throw( "[BAD:edi_mod]:" + edi_mod );
- };;
- };;
- //://////////////////////////////////////////////////://
- function _MarkEventAsConsumed( glo_eve ){ //://///://
- //:Must be done after all handler's are executed.
- glo_eve.eve_typ =( 0 );
- glo_eve.sub_typ =( 0 );
- };;function _EventDataWhipe( glo_eve ){ //://///://
- //:EW:EventWhipe:(BELOW):------------------------://
- //:EWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEW://
- //: ://
- //: Whipe all data EXCEPT FOR: ://
- //: 1: eve_typ <-- _MarkEventAsConsumed ://
- //: 2: sub_typ <-- _MarkEventAsConsumed ://
- //: 3: VAR_TYP <-- CONSTANT ://
- //: ://
- //:EWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEW://
- glo_eve.key =("" ); //: ://
- //: ://
- glo_eve.k_d =( 0 ); //:KEY:DOW //: ://
- glo_eve.k_u =( 0 ); //:KEY:UPP //: ://
- //: ://
- glo_eve.m_x =( 0 ); //:MOU:X_X //: ://
- glo_eve.m_y =( 0 ); //:MOU:Y_Y //: ://
- //: ://
- glo_eve.c_x =( 0 ); //:CLK:X_X //: ://
- glo_eve.c_y =( 0 ); //:CLK:Y_Y //: ://
- //: ://
- glo_eve.u_x =( 0 ); //:UPP:X_X //: ://
- glo_eve.u_y =( 0 ); //:UPP:Y_Y //: ://
- //: ://
- glo_eve.d_x =( 0 ); //:DOW:X_X //: ://
- glo_eve.d_y =( 0 ); //:DOW:Y_Y //: ://
- //: ://
- glo_eve.m_d =( 0 ); //:MOU:DOW //: ://
- glo_eve.m_u =( 0 ); //:MOU:UPP //: ://
- //:EWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEWEW://
- };;//:///////////////////////////////////////////////://
- function _InvokeHotKey( glo_eve /** glo_eve.key **/ ){
- console.log( "[_InvokeHotKey]" );
- var key =( glo_eve.key );
- var key_num=( AA2_glo_eve_KeyNum( glo_eve ) );
- //:EM:edi_mod:ChangeTheEditorInChange:-----------://
- //:EMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEM://
- if( key_num >= 0 /** NON_NEG **/ ){
- GLO_CLA.ada_var.Put_EdiMod( key_num );
- };;
- //:EMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEM://
- //:EM:edi_mod:ChangeTheEditorInChange:-----------://
- if("_"==key || "-"==key ){
- //:ZERO( 0 ) makes it so the renderer
- //:shows raw data on "mam_mem" texture.
- //:REGARDLESS of whate editor mode
- //:is active.
- GLO_CLA.ada_var.Put_RenMod( 0 );
- }else
- if("+"==key || "="==key ){
- //:ONE( 1 ) delegates the rendering
- //:technique to the current editor
- //:in charge ( edi_mod ).
- //:By design rendering and user input are
- //:tightly coupled together by making the
- //:active editor dictate how to render
- //:and how to inferr user input.
- //:
- //:CUSTOM_DESIGN_PATTERN:
- //: GAAM+EV:
- //: GraphicsAdapter_And_Model
- //: + EditorView
- //:
- GLO_CLA.ada_var.Put_RenMod( 1 );
- };;
- };;//:[_InvokeHotKey]:////://////////////////////////://
- };;
- //:EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA://
- //:EB:Editor_Base:
- //:EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB://
- //:WE_WILL_NOT_BE_USING_INHERITANCE_IN_JAVASCRIPT.
- //:1: Prototypical inheritance === no private data.
- //:2: Functions as classes === no inherited private data.
- //:3: Below is for conceptual reference only.
- //:EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB://
- function NEW_edi_bas( /** void **/ ){
- var edi_bas =( new AA2_EditorBaseClass() );
- Object.seal( edi_bas );
- return( edi_bas );
- };;
- function AA2_EditorBaseClass( ){
- this.ReadEvent_Tagged = ReadEvent_Tagged;
- var _ = {};
- _.VAR_BAS = "edi_bas"; //:BaseClass
- _.VAR_TYP = "edi_###"; //:Example: "edi_001"
- Object.seal( _ );
- //: The idea here is to not have to re-do the
- //: complex logic for determining what type of
- //: event the event is by supplying an
- //: [ event_tag / tag_eve ]. These tags will be
- //: SHORT values. Try to stick with short values
- //: that can be represented as two letters.
- function ReadEvent_Tagged( glo_eve , tag_eve ){
- //: "K_" : Key WHATEVER event.
- //: "M_" : Mouse WHATEVER event.
- //: WHATEVER: Figure it out yourself.
- //: 'K' === "KU"|"KD"|"K_"
- if( 'K' === tag_eve[0] ){
- _HanEve_KeyKey( glo_eve );
- };;
- //: 'M' === "MM"|"MC"|"MD"|"MU"|"M_"
- if( 'M' === tag_eve[0] ){
- _HanEve_MouMou( glo_eve );
- };;
- //:Alternatively:
- //: "K_" is "Key Whatever".
- if( "KU" == tag_eve ){ _HanEve_KeyUpp(glo_eve);};
- if( "KD" == tag_eve ){ _HanEve_KeyDow(glo_eve);};
- if( "K_" == tag_eve ){ _HanEve_KeyKey(glo_eve);};
- };;
- //:WHATEVER handlers:
- //://////////////////////////////////////////////////://
- //:AKA[ _HanEve_Key | _HandleEvent_Key ]
- function _HanEve_KeyKey( glo_eve ){
- //:Handle a key event of any kind.
- };;
- //:AKA[ _HanEve_Mou | _HandleEvent_Mou ]
- function _HanEve_MouMou( glo_eve ){
- //:Handle a mouse event of any kind.
- };;
- //://////////////////////////////////////////////////://
- //:TI: Typical Implementation:
- //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
- //: Just handle "KD" (KeyDown) and "MC" (MouseClick)
- //: to keep things simple.
- //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
- ;;function ReadEvent_Tagged( glo_eve , tag_eve ){
- if( "KD" === tag_eve ){ _HanEve_KeyDow(glo_eve);};
- if( "MC" === tag_eve ){ _HanEve_MouClk(glo_eve);};
- };;function _HanEve_KeyDow( glo_eve ){
- console.log("from:"+_.VAR_TYP+":[_HanEve_KeyDow]");
- };;function _HanEve_MouClk( glo_eve ){
- console.log("from:"+_.VAR_TYP+":[_HanEve_MouClk]");
- };;
- //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
- };;
- //:EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB://
- //:E:Editors:
- //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
- //: ://
- //: Decided that I do not want to have to think about ://
- //: the names for each editor. So I will assign them ://
- //: serial numbers starting at "001" and the master ://
- //: editor (edi_all) can map to editors 1-9 by using ://
- //: the number keys 1-9. ://
- //: ://
- //:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE://
- function NEW_edi_001( /** void **/ ){
- var edi_001 =( new AA2_Editor_001() );
- Object.seal( edi_001 );
- return( edi_001 );
- };;function AA2_Editor_001( ){
- this.ReadEvent_Tagged = ReadEvent_Tagged;
- var _ = {};
- _.VAR_BAS = "edi_bas"; //:BaseClass
- _.VAR_TYP = "edi_001"; //:DerivedClass.
- _.PIXEFOG_rec_vp2 = NEW_rec_inc(); //:vp2==Zoomer
- Object.seal( _ );
- //:TI: Typical Implementation:
- //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
- //: Just handle "KD" (KeyDown) and "MC" (MouseClick)
- //: to keep things simple.
- //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
- ;;function ReadEvent_Tagged( glo_eve , tag_eve ){
- if( "KD" === tag_eve ){ _HanEve_KeyDow(glo_eve);};
- if( "MC" === tag_eve ){ _HanEve_MouClk(glo_eve);};
- };;function _HanEve_KeyDow( glo_eve ){
- //:console.log("from:"+_.VAR_TYP+":[_HanEve_KeyDow]");
- //:If key can resolve to number, set the
- //:experimental shader index. ( DexSha )
- var key_num =( AA2_glo_eve_KeyNum( glo_eve ) );
- if( key_num >= 0 && key_num <= 9 ){
- GLO_CLA.ada_var.Put_EDIT001_dex_sha( key_num );
- };;
- //:GET:rec_vp1:
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- GLO_CLA.ada_var.Get_GLOBVAR_rec_vp2(
- _.PIXEFOG_rec_vp2
- );;
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- //:R:Reset:rec_vp1 (source rectangle)
- //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
- if( "R" == glo_eve.key ){
- console.log("RESET");
- };;
- //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
- //:P:PAN:
- //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
- if( "ARR_LEF" == glo_eve.key ){
- console.log("<--");
- AA2_rec_inc_MoveLef(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- if( "ARR_RIG" == glo_eve.key ){
- console.log("-->");
- AA2_rec_inc_MoveRig(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- if( "ARR_UPP" == glo_eve.key ){
- console.log("UPP");
- AA2_rec_inc_MoveUpp(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- if( "ARR_DOW" == glo_eve.key ){
- console.log("DOW");
- AA2_rec_inc_MoveDow(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- //:PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP://
- //:Z:ZOOM:
- //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
- if( "+" == glo_eve.key || "=" == glo_eve.key ){
- console.log("+");
- AA2_rec_inc_ZoomInn(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- if( "-" == glo_eve.key || "_" == glo_eve.key ){
- console.log("-");
- AA2_rec_inc_ZoomOut(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- //:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ://
- //:M:Manipulate_Side_Walls_By_Pulling_Them_In
- //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
- if( "A" == glo_eve.key ){ //:LEF:PULL_IN
- console.log("A");
- AA2_rec_inc_PullLef(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- if( "D" == glo_eve.key ){ //:RIG:PULL_IN
- console.log("D");
- AA2_rec_inc_PullRig(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- if( "W" == glo_eve.key ){ //:TOP:PULL_IN
- console.log("W");
- AA2_rec_inc_PullTop(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- if( "S" == glo_eve.key ){ //:BOT:PULL_IN
- console.log("S");
- AA2_rec_inc_PullBot(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- //:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM://
- if( "J" == glo_eve.key ){ //:LEF:PUSH_OUT:
- console.log("J");
- AA2_rec_inc_PushLef(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- if( "L" == glo_eve.key ){ //:RIG:PUSH_OUT:
- console.log("L");
- AA2_rec_inc_PushRig(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- if( "I" == glo_eve.key ){ //:TOP:PUSH_OUT:
- console.log("I");
- AA2_rec_inc_PushTop(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- if( "K" == glo_eve.key ){ //:BOT:PUSH_OUT:
- console.log("K");
- AA2_rec_inc_PushBot(
- _.PIXEFOG_rec_vp2
- , 1
- );;
- };;
- //:PUT:rec_vp1:
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- GLO_CLA.ada_var.Put_GLOBVAR_rec_vp2(
- _.PIXEFOG_rec_vp2
- );;
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- };;function _HanEve_MouClk( glo_eve ){
- console.log("from:"+_.VAR_TYP+":[_HanEve_MouClk]");
- };;
- //:TITITITITITITITITITITITITITITITITITITITITITITITITI://
- };;//:[AA2_Editor_001]:////://///////////////////////////://
- //:E2:edi_002:(BELOW):-----------------------------------://
- //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
- //: ://
- //: Editor #02 is very likely our "vp1_sna" (VP1Snapper)://
- //: ://
- //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
- var AA2_edi_002={ //:///////////////////////////////////://
- //:VALUE_MEMBER:NOT_A_POINTER! //:////://///////////://
- var_tag : null //:AA2_var_tag: //:////://///////////://
- //:MUST_BE_FIRST_MEMBER! //:////://///////////://
- //:VF:Visible(Public)Functions:(BELOW):--------------://
- //:VFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVF://
- /**-************************************************-:[]
- edi_002.ReadEvent_Tagged ::::::::
- AA2_edi_002_ReadEvent_Tagged
- []:-************************************************-**/
- //:VFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVFVF://
- //:VALUE_MEMBER:NOT_A_POINTER!
- , rec_bou : null //:BOUNDS_OF_DATA_BEING_MANIPULATED
- };; //://////////////////////////////////////////////////://
- Object.seal( AA2_edi_002 );
- function NEW_edi_002(){
- "use strict"
- var edi_002 = null;
- //: C11[ struct AA2_edi_002 edi_002 = { 0 }; ]
- edi_002 = AA2_ZeroIni( AA2_edi_002 );
- edi_002.var_tag = AA2_ValuMem( AA2_var_tag );
- edi_002.rec_bou = NEW_rec_inc();
- edi_002.var_tag.VAR_TYP=( AA2_VAR_TYP_edi_002 );
- edi_002.var_tag.VAR_HIN=("edi_002");//:7_Letters_Exact
- Object.seal( edi_002 );
- return( edi_002 );
- };;
- //:H:[Hidden /private]functions:(BELOW):-----------------://
- //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
- //:MH:MoveHot_swap_rectangle_memory_in_focus:(BELOW):://
- //:MHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMH://
- //://////////////////////////////////////////////://
- function aa2_edi_002_Mov_Any_dex_hot(
- edi_002,xos,yos
- ){
- var A_V =( GLO_CLA.ada_var );
- var G_F =( GLO_CFG );
- var dex_hot; //:<--value_being_edited
- //:GP:[ (GET/PUT)/(LOAD/SAVE)/(QUERY/PERSIST)://
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- dex_hot = A_V.Get_EDIT002_dex_hot( );
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- if( dex_hot < GLO_CFG.DEX_HOT_MIN //:[ 1 ]
- || dex_hot > GLO_CFG.DEX_HOT_MAX //:[16 ]
- ){
- //:You probably forgot to init the
- //:value to a sensible default on
- //:startup.
- var err_msg=("[[DEX_HOT:OOB]]");
- console.log(err_msg);
- throw( err_msg);
- };;
- var san_hot_001=( Math.sqrt(GLO_CFG.NUM_HOT) );
- var san_hot_002=( GLO_CFG.SAN_MAM
- /GLO_CFG.SAN_ISO );;
- if( san_hot_001 != san_hot_002 ){
- throw("[MATH_OFF:2020_05_31:10_11AM]");
- };;
- var san_hot=((san_hot_001+san_hot_002)/2);
- var max_xoy=( san_hot - 1 );
- var min_xoy=( 0 );
- //://////////////////////////////////////////://
- //: dex_hot (verb-ish) ~=~ dex_mec (noun-ish):
- //:
- //: dex_hot: 1-indexed (HOT:HOTswapper)
- //: dex_mec: 0-indexed (MEC:MEmoryCell)
- //://////////////////////////////////////////://
- var dex_mec=( dex_hot - 1 );
- var wid =( G_F.SAN_MAM / G_F.SAN_ISO );
- var t_x = dex_mec % wid ;;;;;;;
- var t_y = (dex_mec-t_x )/ wid ;;;;;;;
- //:Tile:XY:Coordinate on [ mam_mem ]
- //: [ memory_cell/hot_swapping ]
- //: sub-sectors.
- t_x +=( xos ); //:ApplyOffset:x
- t_y +=( yos ); //:ApplyOffset:y
- //:CAP_INTO_VALID_RANGE:
- if( t_x > max_xoy ){ t_x = max_xoy; };
- if( t_y > max_xoy ){ t_y = max_xoy; };
- if( t_x < min_xoy ){ t_x = min_xoy; };
- if( t_y < min_xoy ){ t_y = min_xoy; };
- var new_dex_mec = t_x + ( wid * t_y );
- var new_dex_hot = ( new_dex_mec + 1 );
- //://////////////////////////////////////////://
- //:Error_Check:
- if( new_dex_hot < GLO_CFG.DEX_HOT_MIN //:[ 1 ]
- || new_dex_hot > GLO_CFG.DEX_HOT_MAX //:[16 ]
- ){
- var err_msg=("[BAD_MAT:new_dex_hot]");
- console.log( err_msg );
- throw( err_msg );
- };;
- //:GP:[ (GET/PUT)/(LOAD/SAVE)/(QUERY/PERSIST)://
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- A_V.Put_EDIT002_dex_hot( new_dex_hot );
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- };;function aa2_edi_002_Mov_Lef_dex_hot( edi_002 ){
- //:edi_002.Mov_Lef.dex_hot( vod )
- aa2_edi_002_Mov_Any_dex_hot(
- edi_002, 0 - 1, 0 * 0
- );;
- };;function aa2_edi_002_Mov_Rig_dex_hot( edi_002 ){
- //:edi_002.Mov_Rig.dex_hot( vod )
- var A_V =( GLO_CLA.ada_var );
- aa2_edi_002_Mov_Any_dex_hot(
- edi_002, 0 + 1, 0 * 0
- );;
- };;function aa2_edi_002_Mov_Upp_dex_hot( edi_002 ){
- //:edi_002.Mov_Upp.dex_hot( vod )
- var A_V =( GLO_CLA.ada_var );
- aa2_edi_002_Mov_Any_dex_hot(
- edi_002, 0 * 0, 0 - 1 //:INVERSE_Y
- );;
- };;function aa2_edi_002_Mov_Dow_dex_hot( edi_002 ){
- //:edi_002.Mov_Dow.dex_hot( vod )
- var A_V =( GLO_CLA.ada_var );
- aa2_edi_002_Mov_Any_dex_hot(
- edi_002, 0 * 0, 0 + 1 //:INVERSE_Y
- );;
- };;//:///////////////////////////////////////////://
- //:MHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMH://
- //:MH:MoveHot_swap_rectangle_memory_in_focus:(ABOVE):://
- function //:edi_002.KeepCameraInBounds(...)
- aa2_edi_002_KeepCameraInBounds( edi_002 ){
- aa2_edi_002_Cal_rec_bou( edi_002 );
- var A_V =( GLO_CLA.ada_var );
- //:GP:[Get/Put]::::::::::::::::::::::::::::::://
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- var cam_t_x = A_V.Get_EDIT002_cam_t_x( );
- var cam_t_y = A_V.Get_EDIT002_cam_t_y( );
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- //:CLAMP:LOWER:
- if( cam_t_x < edi_002.rec_bou.x_0 ){
- cam_t_x = edi_002.rec_bou.x_0;
- };;
- if( cam_t_y < edi_002.rec_bou.y_0 ){
- cam_t_y = edi_002.rec_bou.y_0;
- };;
- //:CLAMP:UPPER:
- if( cam_t_x > edi_002.rec_bou.x_1 ){
- cam_t_x = edi_002.rec_bou.x_1;
- };;
- if( cam_t_y > edi_002.rec_bou.y_1 ){
- cam_t_y = edi_002.rec_bou.y_1;
- };;
- //:GP:[Get/Put]::::::::::::::::::::::::::::::://
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- A_V.Put_EDIT002_cam_t_x( cam_t_x );
- A_V.Put_EDIT002_cam_t_y( cam_t_y );
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- };;
- //:TE:Tile_Exponent:---------------------------------://
- //:TETETETETETETETETETETETETETETETETETETETETETETETETE://
- function
- aa2_STATIC_HACK_EDIT002_Put_til_exp_AND_til_san(
- til_exp
- ){
- //:Store the resolved version of til_exp
- //:so we do not have to call pow(...)
- //:function in shader code.
- var til_san = Math.pow( 2 , til_exp );
- GLO_CLA.ada_var.Put_EDIT002_til_exp( til_exp );
- GLO_CLA.ada_var.Put_EDIT002_til_san( til_san );
- };;
- //:edi_002.Put_til_exp_AND_til_san(...)
- function aa2_edi_002_Put_til_exp_AND_til_san(
- edi_002 , til_exp
- ){
- aa2_STATIC_HACK_EDIT002_Put_til_exp_AND_til_san(
- til_exp
- );;
- };;
- //:edi_002.Nex_til_exp:
- function aa2_edi_002_Nex_til_exp(
- edi_002
- ){
- //:GET:(Query):
- var A_V =( GLO_CLA.ada_var );
- var til_exp = A_V.Get_EDIT002_til_exp();
- //:DEL_DIF[aa2_edi_002_Pre_til_exp]
- til_exp++;
- if( til_exp >= 8 /** TSE_SUN **/ ){
- til_exp =(8);
- };;
- if( til_exp <= 0 ){
- til_exp =(0 );
- };;
- //:PUT:(Persist):
- aa2_edi_002_Put_til_exp_AND_til_san(
- edi_002, til_exp
- );;
- //:Corrections:
- aa2_edi_002_KeepCameraInBounds( edi_002 );
- };;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:edi_002.Pre_til_exp:
- function aa2_edi_002_Pre_til_exp(
- edi_002
- ){
- //:GET:(Query):
- var A_V =( GLO_CLA.ada_var );
- var til_exp = A_V.Get_EDIT002_til_exp();
- //:DEL_DIF[aa2_edi_002_Nex_til_exp]
- til_exp--;
- if( til_exp >= 8 /** TSE_SUN **/ ){
- til_exp =(8);
- };;
- if( til_exp <= 0 ){
- til_exp =(0 );
- };;
- //:PUT:(Persist):
- aa2_edi_002_Put_til_exp_AND_til_san(
- edi_002, til_exp
- );;
- aa2_edi_002_KeepCameraInBounds( edi_002 );
- };;
- //:TETETETETETETETETETETETETETETETETETETETETETETETETE://
- //:CB:CalcBounds:edi_002.CalculateRectBounds()(BELOW)://
- //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
- //: ://
- //: The current tile exponent (til_exp) will ://
- //: determine the bounds of the camera. ://
- //: Measured in numbers of cameras. ://
- //: The camera is a certain number of ://
- //: [ pebbles / pixels / tiles ] wide and tall. ://
- //: And we measure the bounds IN cameras. ://
- //: ://
- //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
- function aa2_edi_002_Cal_rec_bou( edi_002 ){
- var A_V=( GLO_CLA.ada_var );
- var til_exp=( A_V.Get_EDIT002_til_exp() );
- if( til_exp < 0 || til_exp > 8 ){
- //:DontForgetToInitToSensibleDefaults:
- throw("[TILE_EXPONENT_OUT_OF_BOUNDS]");
- };;
- //:Size of CAMERA in [ pebbles / pixels ]
- var til_wto_pix = Math.pow( 2, til_exp );
- var til_hto_pix = Math.pow( 2, til_exp );
- //:size_of_tilemap:RAW_PIXEL_DATA
- //:No [HYPERMAP/QUARKMAP/MIPMAP] distortions.
- var map_wto_pix = GLO_CFG.SAN_ISO;
- var map_hto_pix = GLO_CFG.SAN_ISO;
- //:size_of_tilemap:AFTER[ use_hyp ]APPLIED:
- var map_wto_peb; //:Map_WID_Measured_In:PEBBLES
- var map_hto_peb; //:Map_HIG_Measured_In:PEBBLES
- var use_hyp; //:Conceptually[ edi_002.use_hyp ]
- use_hyp = A_V.Get_EDIT002_use_hyp( );
- //:total_area_that_can_be_traversed:
- ;;;;;;if( 0 === use_hyp ){ /** edi_002.use_hyp **/
- //:DATA_VIEW:FLAT_2D
- //:EITHER_CASE[ PEBBLE_SIZE === PIXEL_SIZE ]
- map_wto_peb = ( map_wto_pix * 1 );
- map_hto_peb = ( map_hto_pix * 1 );
- }else if( 1 === use_hyp ){ /** edi_002.use_hyp **/
- //:DATA_VIEW:HYPER_MAP
- //:EITHER_CASE[ PEBBLE_SIZE === PIXEL_SIZE ]
- map_wto_peb = ( map_wto_pix / 2 );
- map_hto_peb = ( map_hto_pix / 2 );
- }else{
- var err_msg =( "[BAD:use_hyp]" );
- console.log( err_msg );
- throw( err_msg );
- };;
- //:EC:ErrorCheck:
- //:ECECECECECECECECECECECECECECECECECECECECECECEC://
- //: Camera is not allowed to be bigger than
- //: the tilemap. But it can be the exact same
- //: size as the tilemap.
- //:ECECECECECECECECECECECECECECECECECECECECECECEC://
- if( til_wto_pix > map_wto_peb
- || til_hto_pix > map_hto_peb
- ){
- throw("[CAMERA_IS_TOO_BIG]");
- };;
- if( til_wto_pix < 0
- || til_hto_pix < 0
- ){
- throw("[CAMERA_SOMEHOW_NEGATIVE_SIZE]");
- };;
- //:ECECECECECECECECECECECECECECECECECECECECECECEC://
- //: How wide and tall is our tilemap
- //: when measure in CAMERAS (cam)?
- //: numcams_wid = tilemap_wid / tilecam_wid
- //: numcams_hig = tilemap_hig / tilecam_hig
- var map_wto_cam = ( map_wto_peb / til_wto_pix );
- var map_hto_cam = ( map_hto_peb / til_hto_pix );
- //:L:load_calculated_bounds:_____________________://
- //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
- edi_002.rec_bou.x_0 =( 0 /** ALWAYS_ZERO **/);
- edi_002.rec_bou.y_0 =( 0 /** ALWAYS_ZERO **/);
- edi_002.rec_bou.x_1 =( 0 + map_wto_cam - 1 );
- edi_002.rec_bou.y_1 =( 0 + map_hto_cam - 1 );
- //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://
- };;
- //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
- //:CB:CalcBounds:edi_002.CalculateRectBounds()(ABOVE)://
- //:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH://
- //:H:[Hidden /private]functions:(ABOVE):-----------------://
- //[**C11_dictates_PRIVATE_HIDDEN_before_PUBLIC_VISIBLE:**]//
- //:V:[Visible/public ]functions:(BELOW):-----------------://
- //:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV://
- //:CM:Camera_Movement/Translation:(BELOW):-------://
- //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
- ;;;function AA2_edi_002_Mov_Any_cam_txy(
- edi_002,o_x,o_y
- ){
- var A_V=( GLO_CLA.ada_var );
- var cam_t_x; //:Camera_Tilepos:X
- var cam_t_y; //:Camera_Tilepos:Y
- //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(BELOW):===://
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- cam_t_x=A_V.Get_EDIT002_cam_t_x( );
- cam_t_y=A_V.Get_EDIT002_cam_t_y( );
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(ABOVE):===://
- //:CB:CalculateBounds:(BELOW):---------------://
- //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
- //: ://
- //: It is erroneous to enter ://
- //: this function [ Mov_Any_cam_txy ] ://
- //: with the camera out of bounds. ://
- //: ://
- //: Tile exponent determines ://
- //: bounds if we are using ://
- //: the hyper rectangle view: ://
- //: ://
- //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
- //: edi_002.CalculateRectangleBounds();
- aa2_edi_002_Cal_rec_bou( edi_002 );
- if( cam_t_x < edi_002.rec_bou.x_0
- || cam_t_x > edi_002.rec_bou.x_1
- || cam_t_y < edi_002.rec_bou.y_0
- || cam_t_y > edi_002.rec_bou.y_1
- ){
- //:Probable_Cause_Of_Error:
- //:Make sure when changing til_exp
- //:that you re-clamp [cam_t_x]&[cam_t_y]
- throw("[StartedOutOfBounds]");
- };;
- //:CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB://
- //:Convert_input_to_unsigned_values:
- var u32_o_x=Math.abs( o_x );
- var u32_o_y=Math.abs( o_y );
- //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
- if( o_x >= 0 ){
- cam_t_x = AA2_U32_ADD_BOU(
- /**/ cam_t_x //: u32_var ::://
- , u32_o_x //: u32_add ::://
- , edi_002.rec_bou.x_0 //: u32_min ::://
- , edi_002.rec_bou.x_1 //: u32_max ::://
- );;
- }else
- if( o_x < 0 ){
- cam_t_x = AA2_U32_SUB_BOU(
- /**/ cam_t_x //: u32_var ::://
- , u32_o_x //: u32_sub ::://
- , edi_002.rec_bou.x_0 //: u32_min ::://
- , edi_002.rec_bou.x_1 //: u32_max ::://
- );;
- }else{
- throw("[WTF_X:2020_05_31]");
- };;
- //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
- //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
- if( o_y >= 0 ){
- cam_t_y = AA2_U32_ADD_BOU(
- /**/ cam_t_y //: u32_var ::://
- , u32_o_y //: u32_add ::://
- , edi_002.rec_bou.y_0 //: u32_min ::://
- , edi_002.rec_bou.y_1 //: u32_max ::://
- );;
- }else
- if( o_y < 0 ){
- cam_t_y = AA2_U32_SUB_BOU(
- /**/ cam_t_y //: u32_var ::://
- , u32_o_y //: u32_sub ::://
- , edi_002.rec_bou.y_0 //: u32_min ::://
- , edi_002.rec_bou.y_1 //: u32_max ::://
- );;
- }else{
- throw("[WTF_Y:2020_05_31]");
- };;
- //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
- //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(BELOW):===://
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- A_V.Put_EDIT002_cam_t_x( cam_t_x );
- A_V.Put_EDIT002_cam_t_y( cam_t_y );
- //:GPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGPGP://
- //:GP:[ GET/PUT ]AKA[ LOAD/SAVE ]:(ABOVE):===://
- };;
- ;;;function AA2_edi_002_Mov_Lef_cam_t_x( edi_002 ){
- //:edi_002.Mov_Lef.cam_t_x( vod )
- AA2_edi_002_Mov_Any_cam_txy(
- edi_002, 0 - 1, 0 * 0
- );;
- };;function AA2_edi_002_Mov_Rig_cam_t_x( edi_002 ){
- //:edi_002.Mov_Rig.cam_t_x( vod )
- AA2_edi_002_Mov_Any_cam_txy(
- edi_002, 0 + 1, 0 * 0
- );;
- };;function AA2_edi_002_Mov_Upp_cam_t_y( edi_002 ){
- //:edi_002.Mov_Upp.cam_t_y( vod )
- AA2_edi_002_Mov_Any_cam_txy(
- edi_002, 0 * 0, 0 - 1 //:INVERSE_Y
- );;
- };;function AA2_edi_002_Mov_Dow_cam_t_y( edi_002 ){
- //:edi_002.Mov_Dow.cam_t_y( vod )
- AA2_edi_002_Mov_Any_cam_txy(
- edi_002, 0 * 0, 0 + 1 //:INVERSE_Y
- );;
- };;//:///////////////////////////////////////////://
- //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
- //:CM:Camera_Movement/Translation:(ABOVE):-------://
- //:edi_002.ReadEvent_Tagged(...):
- //:WRONG[ AA2_CLA_edi_002_ReadEvent_Tagged ]
- //:We do NOT need to put type CATEGORY (CLA/CLASS) here.
- //:That is redundant information. Knowing the
- //:function is meant for [ instance / type ] edi_002
- //:is plenty of information.
- function AA2_edi_002_ReadEvent_Tagged(
- edi_002 , glo_eve , tag_eve
- ){
- if(!edi_002){throw("[2020_05_28_1104PM_A]");};
- if( "KD" === tag_eve ){
- //:LowerCaseNamspace==Private
- aa2_edi_002_HanEve_KeyDow(
- edi_002 , glo_eve
- );;
- };;
- if( "MC" === tag_eve ){
- //:LowerCaseNamspace==Private
- aa2_edi_002_HanEve_MouClk(
- edi_002
- , glo_eve
- );;
- };;
- };;
- function
- aa2_edi_002_HanEve_KeyDow(
- edi_002 , glo_eve
- ){
- if(!edi_002){throw("[2020_05_28_1104PM_B]");};
- if(!glo_eve){throw("[2020_05_28_1104PM_C]");};
- console.log(""
- + "[aa2_edi_002_HanEve_KeyDow]:"
- + edi_002.var_tag.VAR_HIN
- );;
- var A_V =( GLO_CLA.ada_var );
- //:var san_act = AA2_InteAss( GLO_CFG.SAN_MAM );;
- //:edi_002.POI_rec_bou = GLO_DAT.rec_hot[ xxxx ];
- //:If key can resolve to number, set the
- //:experimental shader index. ( DexSha )
- var key_num =( AA2_glo_eve_KeyNum( glo_eve ) );
- if( key_num >= 0 && key_num <= 8 ){
- //:Set tile exponents 0-8:
- //: [ til_exp == 0 ]==>[ 2^0 == 1 ]
- //: [ til_exp == 1 ]==>[ 2^1 == 2 ]
- //: [ til_exp == 2 ]==>[ 2^2 == 4 ]
- //: [ til_exp == 3 ]==>[ 2^3 == 8 ]
- //: [ til_exp == 4 ]==>[ 2^4 == 16 ]
- //: [ til_exp == 5 ]==>[ 2^5 == 32 ]
- //: [ til_exp == 6 ]==>[ 2^6 == 64 ]
- //: [ til_exp == 7 ]==>[ 2^7 == 128 ]
- //: [ til_exp == 8 ]==>[ 2^8 == 256 ]
- //:More than 256 will be too big to navigate
- //:your level map data. Because 256 pebble
- //:tiles is a single BLUE_SUN tile.
- //: [ til_exp == 9 ]==>[ 2^9 == 512 ]
- GLO_CLA.ada_var.Put_EDIT002_til_exp( key_num );
- }else
- if( 9 == key_num ){
- console.log("[IGNORE:9 is too high]");
- };;
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //:R:Reset:rec_vp1 (source rectangle)
- //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
- if( "R" == glo_eve.key ){
- console.log("RESET");
- };;
- //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://
- if( 0
- || "+" == glo_eve.key //:PLUS_KEY://
- || "=" == glo_eve.key //:PLUS_KEY://
- ){
- //: edi_002.Nex_til_exp( vod );
- aa2_edi_002_Nex_til_exp( edi_002 );
- console.log("[Nex_til_exp]");
- };;
- if( 0
- || "-" == glo_eve.key //:MINUS_KEY://
- || "_" == glo_eve.key //:MINUS_KEY://
- ){
- //: edi_002:Pre_til_exp( vod );
- aa2_edi_002_Pre_til_exp( edi_002 );
- console.log("[Pre_til_exp]");
- };;
- //:ChangeMemoryRegionBeingReadFrom:----------://
- //://////////////////////////////////////////://
- ;;;;;;if( "A" == glo_eve.key ){ //:LEF
- aa2_edi_002_Mov_Lef_dex_hot( edi_002 );
- }else if( "D" == glo_eve.key ){ //:RIG
- aa2_edi_002_Mov_Rig_dex_hot( edi_002 );
- }else if( "W" == glo_eve.key ){ //:UPP
- aa2_edi_002_Mov_Upp_dex_hot( edi_002 );
- }else if( "S" == glo_eve.key ){ //:DOW
- aa2_edi_002_Mov_Dow_dex_hot( edi_002 );
- };;//:///////////////////////////////////////://
- //://////////////////////////////////////////://
- //:Pan_using_Tile_locations:(BELOW):---------://
- //:PTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPT://
- if( "ARR_LEF" == glo_eve.key ){
- console.log("[EDIT002[ <-- ]]");
- AA2_edi_002_Mov_Lef_cam_t_x( edi_002 );
- };;
- if( "ARR_RIG" == glo_eve.key ){
- console.log("[EDIT002[ --> ]]");
- AA2_edi_002_Mov_Rig_cam_t_x( edi_002 );
- };;
- if( "ARR_UPP" == glo_eve.key ){
- console.log("[EDIT002[ UPP ]]");
- AA2_edi_002_Mov_Upp_cam_t_y( edi_002 );
- };;
- if( "ARR_DOW" == glo_eve.key ){
- console.log("[EDIT002[ DOW ]]");
- AA2_edi_002_Mov_Dow_cam_t_y( edi_002 );
- };;
- //:PTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPT://
- };;
- //:edi_002.HanEve_MouClk
- function aa2_edi_002_HanEve_MouClk(
- edi_002 , glo_eve
- ){
- console.log("[HANDLE_THEM_FUCKING_CLICKS]");
- };;
- //:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV://
- //:V:[Visible/public ]functions:(ABOVE):-----------------://
- //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
- //: ://
- //: Editor #02 is very likely our "vp1_sna" (VP1Snapper)://
- //: ://
- //:E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2://
- //:E2:edi_002:(ABOVE):-----------------------------------://
- //:UC:UniformController:(BELOW):-------------------------://
- //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
- function NEW_tau_con( /** void **/ ){
- var tau_con =( new TextureAsUniformController() );
- Object.seal( tau_con );
- return( tau_con );
- };;
- //: INSTANCE_NAME[ tau_001 | tau_### | tau_999 | tau_con ]
- //: CLASS____NAME[ tau_con | TextureAsUniformController ]
- function TextureAsUniformController( ){ //://////////////://
- //|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|//
- //| rec_bou is mapped onto a sub-section of |//
- //| mam_mem (master memory) and is used to |//
- //| store "uniform values" as "texture |//
- //| pixels". |//
- //|| ||//
- //|| ||//
- //| rec_dir grows to fit all uniform values |//
- //| currently set using "uni_put". Uniforms |//
- //| values put are persisted with "uni_com" |//
- //| (uniform commit). |//
- //|| ||//
- //|| ||//
- //| It is wasteful to push a single pixel to a |//
- //| texture,so try to batch them all. |//
- //|| ||//
- //|| +--++--||--++--||--++--||--++--+ ||//
- //|| | | ||//
- //|| | | ||//
- //|| + ++--------------++ + ||//
- //|| | || || | ||//
- //|| | || rec_dir || | ||//
- //|| + || || + ||//
- //|| | ++--------------++ | ||//
- //|| | | ||//
- //|| + + ||//
- //|| | rec_bou | ||//
- //|| | | ||//
- //|| +--++--||--++--||--++--||--++--+ ||//
- //|| ||//
- //|__________________________________________________|//
- //:Publically_Exposed_Functions:
- //://////////////////////////////////////////////////://
- this.uni_com = uni_com; //:Uniform:Commit
- this.uni_get = uni_get; //:Uniform:Get
- this.uni_put = uni_put; //:Uniform:Put
- //:SETS:BORROWED_POINTER_u32_pix
- //:Intentionally abnoxiously long name to get
- //:you attention to be careful with this.
- this.BorrowPointerAsWeakReference_u32_pix=(
- BorrowPointerAsWeakReference_u32_pix
- );;
- //:Really just for debugger helpfulness:
- this.Put_VarNam = Put_VarNam;
- //:Memory sub_region to store uniform values on:
- this.Put_RecBou = Put_RecBou;
- //://////////////////////////////////////////////////://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:Private_Variables:
- //://////////////////////////////////////////////////://
- var _ = {};
- _.VAR_TYP=( "tau_con" ); //:<--Variable_Type(Class)
- _.VAR_NAM=( "var_nam" ); //:<--Instance_Name
- //:Intentionally obnoxious name because we need to
- //:be very careful about memory ownership.
- //:Ever wonder why C++'s version of (void*)( ... )
- //:is reinterpret_cast( ... ) ? To be abnoxious.
- _.BORROWED_POINTER_u32_pix = null;
- _.rec_dir = null; //:RECtangle_DIRty
- _.use_dir =( 0 ); //:UseDirtyRectangle?
- _.rec_bou = null; //:RECtangle_BOUnds
- _.ixy_bou = null; //:ixy:[ index + x + y ]
- _.ixy_pix = null; //:ixy:[ index + x + y ]
- Object.seal( _ );
- //://////////////////////////////////////////////////://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:Constructor_Code:
- //:Wrapped inside function just for organization.
- //://////////////////////////////////////////////////://
- function CLASS_CONSTRUCTOR(){
- _.BORROWED_POINTER_u32_pix = null; //:SetAfterInit
- _.rec_dir = NEW_rec_inc(); //:RECtangle_DIRty(flag)
- _.use_dir = ( 0 ); //:Use: rec_dir ?
- _.rec_bou = NEW_rec_inc(); //:Rectangle_BoundingBox
- _.ixy_bou = NEW_ixy_das(); //:RelativeTo:rec_bou
- _.ixy_pix = NEW_ixy_das(); //:RelativeTo:u32_pix
- };;CLASS_CONSTRUCTOR();
- //://////////////////////////////////////////////////://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- function BorrowPointerAsWeakReference_u32_pix(
- u32_pix //:Uint32_Pixels_Container
- ){
- if( !u32_pix ){ throw("[NULL_INPUT:u32_pix]"); };
- if( u32_pix.VAR_TYP != "uni_pix" ){
- throw("[ERR:VAR_TYP!=uni_pix]");
- };;
- _.BORROWED_POINTER_u32_pix=(
- u32_pix
- );;
- };;
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- function Put_VarNam( var_nam ){ _.var_nam = var_nam; };
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- function Put_RecBou(
- x_0 //:TOP_LEF
- , y_0 //:TOP_LEF
- , x_1 //:BOT_RIG
- , y_1 //:BOT_RIG
- ){
- //:If we ever do this logic somewhere else again,
- //:create: AA2_rec_inc_PutAll(x_0,y_0,x_1,y_1);
- //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
- //:I don't care if you have to come up with ://
- //:something convoluted, do NOT allow negative ://
- //:coordinates in your rectangle structs! ://
- //:The only reason I can think of negative rect ://
- //:is a camera that is leaking of world bounds. ://
- //:Don't allow camera to leak outside of bounds! ://
- if( x_0 < 0 || x_1 < 0 || y_0 < 0 || y_1 < 0 ){
- throw("[CodeBaseDoesNotAllowNegativeCoord]");
- };;
- if( x_0 > x_1
- || y_0 > y_1
- ){
- throw("[OUT_OF_ORDER_RECTANGLE]");
- };;
- _.rec_bou.x_0 = x_0;
- _.rec_bou.y_0 = y_0;
- _.rec_bou.x_1 = x_1;
- _.rec_bou.y_1 = y_1;
- if( x_0 > x_1
- || y_0 > y_1
- ){
- throw("[TYPO_IN_ASSIGNMENT]");
- };;
- //:PAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPA://
- };;
- //:Uniform:COMmit
- function uni_com( /** void **/ ){
- //:If dirty flag is not set, exit.
- if( _.use_dir <= 0 ){ return; };
- _.use_dir = 0 ;//:MUST_RESET_TO_EXACTLY_ZERO
- //:Commit the pixels you decided to set in the
- //:openGL texture by using subTexWhatever
- //:with the dirty rectangle region.
- var G =( GLO_CLA.ada_gra.con_gra );
- //:BD:Borrowed_Data:-----------------------------://
- //:BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD://
- var pix_arr = _.BORROWED_POINTER_u32_pix.pix_arr;
- var pix_wid = _.BORROWED_POINTER_u32_pix.pix_wid;
- var pix_hig = _.BORROWED_POINTER_u32_pix.pix_hig;
- var pix_com = _.BORROWED_POINTER_u32_pix.pix_com;
- var tex_lot = _.BORROWED_POINTER_u32_pix.tex_lot;
- var tex_han = _.BORROWED_POINTER_u32_pix.tex_han;
- //:BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD://
- //:¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯://
- //:We probably DONT need to call "bindTexture" ://
- //:since we never change the texture in a given ://
- //:texture slot,but do it just in case. ://
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //:Also not certain if "pixelStorei" needs to be ://
- //:called,but is noted as required in my ://
- //:texImage2D code,so figure also required here. ://
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //:QUOTE: ://
- //:Setting the pixel storage mode affects the ://
- //:WebGLRenderingContext.readPixels() operations,://
- //:as well as unpacking of textures with the ://
- //:WebGLRenderingContext.texImage2D() and ://
- //:WebGLRenderingContext.texSubImage2D() methods.://
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //: SOURCE: ://
- //: developer.mozilla.org/en-US/docs/Web/ ://
- //: API/WebGLRenderingContext/pixelStorei ://
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //:BEFORE[ G.texSubImage2D ]//:////://///////://
- G.activeTexture( G.TEXTURE0 + tex_lot );
- G.bindTexture( G.TEXTURE_2D , tex_han );
- const ALN = 4; //:ALN:"Alignment" GUESS?
- G.pixelStorei(G.UNPACK_ALIGNMENT, ALN);
- //:Because we are NOT using the entire image
- //:source, but a sub-selection of it, we need
- //:to specifiy how many pixels are in each
- //:row. AKA[ width / stride / pitch ]
- //:Of the image. The stride is measured in
- //:pixels hear, NOT bytes.
- //: SEE[ SC[ #PAK_ROW_LEN_URL# ] ]
- //: SEE[ SC[ #MSDN_STRIDE_URL# ] ]
- //: SEE[ SC[ #OGL_PIX_TRN_URL# ] ]
- G.pixelStorei( G.UNPACK_ROW_LENGTH , pix_wid );
- //:BEFORE[ G.texSubImage2D ]//:////://///////://
- //:- - - - - - - - - - - -- - - - - - - - - - - -://
- //:______________________________________________://
- //:DEBUGGING: Replace reference to "rec_dir"
- //: below with "rec_bou" to trouble
- //: shoot problems by reducing
- //: problem search space.
- var org_lef=( _.rec_dir.x_0 );
- var org_top=( _.rec_dir.y_0 );
- var rec_wid=( ( _.rec_dir.x_1 )
- - ( _.rec_dir.x_0 ) + 1 );
- var rec_hig=( ( _.rec_dir.y_1 )
- - ( _.rec_dir.y_0 ) + 1 );
- //:We need the index location of the top-left
- //:pixel [ org_lef, org_top ] in order to
- //:put the correct starting offset into
- //:last param of texSubImage2D.
- //:IS_OFFSET_BYTES_OR_PIXELS?
- var p_x =( org_lef ); //:TOP_LEF:X
- var p_y =( org_top ); //:TOP_LEF:Y
- var pix_dex = p_x + ( pix_wid * p_y);
- var src_oip = pix_dex * ( 1 );//:PixelOffset
- var src_oib = pix_dex * pix_com;//:ComponentOffset
- //: www.khronos.org/registry/OpenGL-Refpages/
- //: gl4/html/glTexSubImage2D.xhtml
- G.texSubImage2D(
- /**/ G.TEXTURE_2D //:TARGET
- , 0 //:LEVEL (LOD/LevelOfDetail)
- , org_lef //: [ (rec_dir|red_bou).x_0 ] //:OSX
- , org_top //: [ (rec_dir|red_bou).y_0 ] //:OSY
- , rec_wid //: [ (rec_dir|red_bou).wid ] //:WID
- , rec_hig //: [ (rec_dir|red_bou).hig ] //:HIG
- //:------------------------------------------://
- //:FORMAT_OF_CPU_SIDE_DATA:SEE[#TSI2D_FORMAT#]
- , G.RGBA_INTEGER //:SOURCE_FORMAT
- , G.UNSIGNED_BYTE //:SOURCE_TYPE
- //:------------------------------------------://
- , pix_arr //:ARRAY_BUFFER_VIEW
- //: If you are using a sub-section of ://
- //: a byte array on the CPU-side, you will ://
- //: need to specify the index location of ://
- //: the first byte of the first pixel. ://
- , src_oib //:SOURCE_OFFSET
- );;
- };; //:[FN:uni_com(...)]:////:///////////////////////://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:Uniform:PUT
- function uni_put(
- tau_dex //: AKA[ tau_dex / tui_dex ]
- , u32_var //: AKA[ u32_var / u32_val ]
- ){
- //://////////////////////////////////////////////://
- //:Convert tau_dex: ://
- //: TO::::: XY coordinate ://
- //: WITHIN: _.rec_bou ://
- //:AKA[ tau_dex / VAR_IDENTIFIED_BY_LOCAL_INDEX ]://
- //://////////////////////////////////////////////://
- //:CALCULATES[ ixy_bou.[ x_x | y_y | i_i ] ]
- //:CALCULATES[ ixy_pix.[ x_x | y_y | i_i ] ]
- CALCULATE_ixy_bou_CALCULATE_ixy_pix(
- tau_dex
- );;
- //:Get component index by multiplying
- //:pixel index by 4 because there are
- //:4 components ( A R G B ) per pixel.
- com_dex = ( _.ixy_pix.i_i * 4 );
- //://////////////////////////////////////////////://
- //: Reach into the u32_pix.pix_arr you are ://
- //: borrowing and put the data there. ://
- //://////////////////////////////////////////////://
- var pix_arr =( _.BORROWED_POINTER_u32_pix.
- pix_arr );;
- //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
- { //:SCOPE:////:////////////////////:SC[JSB_UNPK]://
- //:- - - - - - - - - - -- - - - - - - - - - -://
- //: pix_arr; //:Uint8Array_Of_Pixel_Data
- //: com_dex; //:IndexOf_1st_Component_Of_Pixel
- //: u32_var; //:PixelValueAsUint32
- //:- - - - - - - - - - -- - - - - - - - - - -://
- let B_M = 0xFF; //:Bit_Mask
- oR=( (( u32_var >> 24) & B_M ) >>>0 );
- oG=( (( u32_var >> 16) & B_M ) >>>0 );
- oB=( (( u32_var >> 8) & B_M ) >>>0 );
- oA=( (( u32_var >> 0) & B_M ) >>>0 );
- //:---------------------:|_R|G|B|A|:---------://
- pix_arr[ com_dex + 0 ] =( oR );;;;;;
- pix_arr[ com_dex + 1 ] =( oG );;;;;;
- pix_arr[ com_dex + 2 ] =( oB );;;;;;
- pix_arr[ com_dex + 3 ] =( oA );;;;;;
- //:---------------------:|_R|G|B|A|:---------://
- //:- - - - - - - - - - -- - - - - - - - - - -://
- } //:SCOPE:////:////////////////////:SC[JSB_UNPK]://
- //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
- //://////////////////////////////////////////////://
- //:Using the XY coordinate local to _.rec_bou ,
- //:increase the dirty selection area.
- //://////////////////////////////////////////////://
- //:If setting the first dirty pixel,
- //:the dirty bounding box will begin here:
- if( _.use_dir <= 0 ){
- //:MUSTBE_EXACTLY_ZERO_TO_DOUBLE_AS_COUNTER
- if( _.use_dir != ( 0 )){
- throw("[2020_05_20:0152AM]");
- };;
- //:DO_NOT_USE[ rec_bou ]HERE!
- _.rec_dir.x_0 = _.ixy_bou.x_x;
- _.rec_dir.x_1 = _.ixy_bou.x_x;
- _.rec_dir.y_0 = _.ixy_bou.y_y;
- _.rec_dir.y_1 = _.ixy_bou.y_y;
- }else
- if( _.use_dir >= 1 ){
- //:If not the first dirty pixel, expand the
- //:current dirty bounds to also include
- //:the new pixel.
- //:DO_NOT_USE[ bou_rec ]HERE!
- //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
- _.rec_dir.x_0=Math.min(
- _.rec_dir.x_0,
- _.ixy_bou.x_x
- );;
- _.rec_dir.x_1=Math.max(
- _.rec_dir.x_1,
- _.ixy_bou.x_x
- );;
- //:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX://
- //:DO_NOT_USE[ bou_rec ]HERE!
- //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
- _.rec_dir.y_0=Math.min(
- _.rec_dir.y_0,
- _.ixy_bou.y_y
- );;
- _.rec_dir.y_1=Math.max(
- _.rec_dir.y_1,
- _.ixy_bou.y_y
- );;
- //:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY://
- }else{
- throw("[EDCL:ExpectedDeadCodeLine]");
- };;
- //:Flag dirty region as existing, and as bonus
- //:count the total number of dirty pixels.
- _.use_dir = ( _.use_dir + 1 );
- };;//:[FN:uni_put(...)]:////:////////////////////////://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:UNIform:GET:
- function uni_get(
- //:AKA[ tui_dex / VAR_IDENTIFIED_BY_LOCAL_INDEX ]
- tau_dex
- ){
- //:The get operation does NOT pull value off the
- //:GPU. We never pull values off the GPU! We track
- //:GPU-side data in parallel by making sure we have
- //:an accurate CPU-side record of what values we
- //:pushed up to GPU.
- //:CALCULATES[ ixy_bou.[ x_x | y_y | i_i ] ]
- //:CALCULATES[ ixy_pix.[ x_x | y_y | i_i ] ]
- CALCULATE_ixy_bou_CALCULATE_ixy_pix(
- tau_dex
- );;
- //:Get component index by multiplying
- //:pixel index by 4 because there are
- //:4 components ( A R G B ) per pixel.
- com_dex = ( _.ixy_pix.i_i * 4 );
- //:Extract_All_Pixel_Bytes:
- var pix_arr =( _.BORROWED_POINTER_u32_pix.
- pix_arr );;
- var R = pix_arr[ com_dex + 0 ]; //: R ://
- var G = pix_arr[ com_dex + 1 ]; //: G ://
- var B = pix_arr[ com_dex + 2 ]; //: B ://
- var A = pix_arr[ com_dex + 3 ]; //: A ://
- //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
- //://///////////////////////////////:SC[JSB_PACK]://
- //:-----------:R_G_B_A_:-------------------------://
- const m_R =( 0xFF000000 ); //:MASK:RED
- const m_G =( 0x00FF0000 ); //:MASK:GREEN
- const m_B =( 0x0000FF00 ); //:MASK:BLUE
- const m_A =( 0x000000FF ); //:MASK:ALPHA
- //:-----------:R_G_B_A_:-------------------------://
- var //:------------------------------------------://
- u32_var = 0; //:AKA[ u32_var | R_G_B_A ]
- u32_var =( (u32_var |(( R << 24) & m_R )) >>>0 );
- u32_var =( (u32_var |(( G << 16) & m_G )) >>>0 );
- u32_var =( (u32_var |(( B << 8) & m_B )) >>>0 );
- u32_var =( (u32_var |(( A << 0) & m_A )) >>>0 );
- //://///////////////////////////////:SC[JSB_PACK]://
- //://///////////:CTRL_F_COMPLIMENT[ JSB_BITPACK ]://
- return( u32_var );
- };;//:[FN:uni_get(...)]:////:////////////////////////://
- //: - - - - - - - - - - - -- - - - - - - - - - - - - ://
- //:Returns_By_Side_Effect[ _.ixy_bou ]:////://///////://
- //:Returns_By_Side_Effect[ _.ixy_pix ]:////://///////://
- function CALCULATE_ixy_bou_CALCULATE_ixy_pix(
- tau_dex
- ){
- //://////////////////////////////////////////////://
- //: 1: Get reference to size of CPU-side bitmap:
- //: 2: Check rec_bou validity.
- //: 3: Check rec_dir validity.
- //://////////////////////////////////////////////://
- var u32_pix =(
- _.BORROWED_POINTER_u32_pix
- );;//:----------------:u32_pix:--------------://
- if( !u32_pix ){
- var msg=("[NULL_BORROWED_POINTER?]");
- console.log( msg );
- throw( msg );
- };;
- var pix_wid =( u32_pix.pix_wid );
- var pix_hig =( u32_pix.pix_hig );
- if( 1 == 1 ){ //:AlwaysTrue.ForIndentation.
- if( ( _.rec_bou.x_0 < 0 )
- || ( _.rec_bou.y_0 < 0 )
- || ( _.rec_bou.x_1 >= pix_wid )
- || ( _.rec_bou.y_1 >= pix_hig )
- ){
- throw("[rec_bou:OutOFboundsOfPixels]");
- };;
- };;
- if( _.use_dir > 0 ){ //:IsDirtyRectangleActive?
- if( ( _.rec_dir.x_0 < _.rec_bou.x_0 )
- || ( _.rec_dir.y_0 < _.rec_bou.y_0 )
- || ( _.rec_dir.x_1 > _.rec_bou.x_1 )
- || ( _.rec_dir.y_1 > _.rec_bou.y_1 )
- ){
- throw("[DirtyRegionIsOutOfBounds]");
- };;
- };;
- //://////////////////////////////////////////////://
- //://////////////////////////////////////////////://
- //:Convert tau_dex: ://
- //: TO::::: XY coordinate ://
- //: WITHIN: _.rec_bou ://
- //:AKA[ tau_dex | VAR_IDENTIFIED_BY_LOCAL_INDEX ]://
- //://////////////////////////////////////////////://
- var bou_wid = ( 1
- + _.rec_bou.x_1
- - _.rec_bou.x_0
- );;
- //:FORMULA:INDEX_TO_XY:
- var t_x = tau_dex % bou_wid ;
- var t_y = (tau_dex-t_x)/ bou_wid ;
- //:XY position within _.ixy_bou:
- _.ixy_bou.i_i = tau_dex + 0 ;
- _.ixy_bou.x_x = _.rec_bou.x_0 + t_x ;
- _.ixy_bou.y_y = _.rec_bou.y_0 + t_y ;
- //://////////////////////////////////////////////://
- //:Convert XY to index local to pix_arr
- //://////////////////////////////////////////////://
- //:¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯://
- //: Take XY coordinates local to rec_bou and ://
- //: make them [ local / relative ] to ://
- //: u32_pix.[ pix_wid & pix_hig ] (AKA: ://
- //: pix_arr) Because ixy_bou is a 4-point ://
- //: rectangle overlayed over a bitmap ://
- //: rectangle with origin [0,0],the ://
- //: transformation is essentially a NOOP. ://
- //:__________________________________________://
- var p_x =( _.ixy_bou.x_x - 0 );
- var p_y =( _.ixy_bou.y_y - 0 );
- //:EC:ErrorCheck:
- //:ECECECECECECECECECECECECEC://
- if( p_x < 0 || p_x >= pix_wid
- || p_y < 0 || p_y >= pix_hig
- ){
- throw("[PXY_OOB]");
- };;
- //:ECECECECECECECECECECECECEC://
- //:Convert pixel xy coordinate to pixel_index:
- var pix_dex = p_x + ( pix_wid * p_y);
- //:These are the coordinates of pixel LOCAL
- //:to the GPU memory block we want to
- //:set them on.
- _.ixy_pix.i_i = pix_dex;
- _.ixy_pix.x_x = p_x ;
- _.ixy_pix.y_y = p_y ;
- //://////////////////////////////////////////////://
- };;//:[CALCULATE_ixy_bou_CALCULATE_ixy_pix]:////:////://
- };; //://////////////////////////////////////////////////://
- //:UCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUC://
- //:UC:UniformController:(ABOVE):-------------------------://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:C:Classes_Section:(ABOVE):--------------------------------://
- //:DB:DeBug_functions:(BELOW):-------------------------------://
- //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
- //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
- //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
- //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
- //:EXPERIMENT:
- //://////////////////////////////////////////////////////://
- //: ://
- //: Give every debug function a unique ordered ://
- //: serial number. Even across your other code bases. ://
- //: If function exists in different code base, make ://
- //: comment stub saying such. This will help prevent ://
- //: name collision since I kept out the "AA2" ://
- //: namespace from function name. ://
- //: ://
- //://////////////////////////////////////////////////////://
- //:Debug #0002:
- //:Check rec_inc is valid, check u32_var
- //:is non-negative.
- //:rec_inc.BUG0002(...)
- function BUG0002( err_msg , rec_inc, u32_var ){
- var fai_tim=( 0 );
- if(!(u32_var >= 0 ) ){ fai_tim++; };
- //:Just do a null check:
- if(!rec_inc){ fai_tim++; };
- //+ Decided I will allow unbounded +//
- //+ rec_inc functions put the rec_inc +//
- //+ into invalid states. +//
- //- if( AA2_rec_inc_OrdBad( rec_inc )){ -//
- //- fai_tim++; -//
- //- };; -//
- if( fai_tim > 0 ){
- throw("[BUG0002]:", err_msg );
- };;
- };;
- //:Debug # 0001.
- //:Dont give a #funck# about knowing what is
- //:being debugged when reading function calls.
- //:rec_inc.BUG0001(...)
- function BUG0001(
- rec_inc,u32_var,rec_bou,err_msg
- ){
- var fai_tim=( 0 );
- //:Neg_or_Nan_Check:
- if(!(u32_var >= 0)){
- fai_tim++;
- };;
- if( AA2_rec_inc_OrdBad( rec_inc ) ){
- fai_tim++;
- };;
- //:NIN:Not_Inside_Of:Check:
- if( AA2_rec_inc_NIN_rec_bou(
- /**/ rec_inc , rec_bou
- )){
- fai_tim++;
- };;
- if( fai_tim > 0 ){
- throw( "[BUG0001]:" + err_msg );
- };;
- };;
- //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
- //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
- //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
- //:DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB://
- //:DB:DeBug_functions:(ABOVE):-------------------------------://
- //:CM:CallMain:
- //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
- //: ://
- //: Call to main() must come after ALL OTHER CODE. ://
- //: 1. All Data ://
- //: 2. All Classes ://
- //: 3. ALL CODE NO EXCEPTIONS ://
- //: ://
- //: This is the case because we are starting ://
- //: to re-organize the code in a procedural ://
- //: style. ://
- //: ://
- //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
- main();
- //:CMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCMCM://
- //:T:Todo_Section:(BELOW):
- //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
- //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
- //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
- //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
- //:TODO: Shader needs to know if it is using
- //: ISO_MEM or MAM_MEM data.
- //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
- //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
- //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
- //:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT://
- //:CR:Code_Reference:(BELOW):--------------------------------://
- //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
- //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
- //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
- //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
- //:==========================================================://
- //|AUTHOR: John Mark Isaac Madison |//
- //|EMAIL:: HeavyMetalCookies[ at ][ letterAfter_f-mail ].com |//
- //|THIS_FILE_ON_PASTE_BIN[ https://pastebin.com/VvTNDiyi ] |//
- //|YOUTUBE_CODE_OVERVIEW[ youtube.com/watch?v=vkkkeS4t2EU ] |//
- //:==========================================================://
- //: GOAL/SUMMARY: ://
- //: 1: When viewport "#2" (rec_vp2) is snapped onto ://
- //: viewport "C", the fragment shader code will ://
- //: render at a "1:1" scale with zero translation. ://
- //: ://
- //: 2: As viewport "#2" is resized, it performs a ://
- //: sub-sample of the shader code input coordinates. ://
- //: ://
- //: 2.1: If rec_vp2 is: ://
- //: A: Same size as rec_vpc ://
- //: B: Different location than vpc ://
- //: You have a PAN. ://
- //: ://
- //: 2.2: If rec_vp2 is: ://
- //: A: Different size than rec_vpc ://
- //: B: Same exact centerpoint as rec_vpc ://
- //: You have a ZOOM into the CENTER. ://
- //: ://
- //: 2.3: If rec_vp2 is: ://
- //: A: Different size then rec_vpc ://
- //: B: Different centerpoint than rec_vpc ://
- //: You have a PAN + ZOOM. ://
- //:==========================================================://
- //|//////////////////////////////////////////////////////////|//
- //| GIVENS: |//
- //| 1: vpc is always snapped 100% to opengl |//
- //| context and thus can represent the |//
- //| gl_FragCoord set of points. |//
- //| |//
- //| 2: vp2 is a SOURCE viewport like vp1 (not pictured). |//
- //| Except the source it samples is vpc's datapoints. |//
- //| |//
- //| The smaller vp2 is relative to vpc, the more |//
- //| "zoomed in" you are on the gl_FragCoord(s). |//
- //| |//
- //| SOLVE: |//
- //| 1: EASY: Fill vpc with grey pixels if gl_FragCoord |//
- //| is NOT within vp0. |//
- //| |//
- //| 2: HARD: For each pixel inside of vp0, |//
- //| map to vp2's data. |//
- //| ( vp2's data is a sub-sample of vpc's ) |//
- //| ( normalized screen coordinates. ) |//
- //| |//
- //| |//
- //| SUMMARY: |//
- //| INPUT: [ glFragCoord.x , glFragCoord.y ] |//
- //| OUT: [ vpc_n_o.x , vpc_n_o.y ] |//
- //|//////////////////////////////////////////////////////////|//
- ///
- /// //[//////////////////////////////////////////////////]//
- /// //[ ]//
- /// //[ DIAGRAM_NAME[ SC[ DIA_VPC_TO_VP2_NORMALIZED ] ] ]//
- /// //[ CODE_EXAMPLE[ SC[ COD_VPC_TO_VP2_NORMALIZED ] ] ]//
- /// //[ ]//
- /// //| |//
- /// //| ############################################# |//
- /// //| ## ## |//
- /// //| ## VP2/vp2: ViewPort2: (ZOOMER_SOURCE) ## |//
- /// //| ## VPC/vpc: ViewPortC: (CANVAS/CLIENT) ## |//
- /// //| ## VP0/vp0: ViewPort0: (DESTINATION ) ## |//
- /// //| ## ## |//
- /// //| ## vp2: 0% zoomed when covering vpc 100%. ## |//
- /// //| ## CHANGES TO VP0 POSITION: ## |//
- /// //| ## Should not alter image in VP0. ## |//
- /// //| ## CHANGES TO VP0 SIZE: ## |//
- /// //| ## Should squash+stretch the image ## |//
- /// //| ## but NOT expand or contract the ## |//
- /// //| ## upper+lower bounds of the data ## |//
- /// //| ## set being rendered to VP0. ## |//
- /// //| ## ## |//
- /// //| ############################################# |//
- /// //[ ]//
- /// //[ DIAGRAM_NAME[ SC[ DIA_VPC_TO_VP2_NORMALIZED ] ] ]//
- /// //[ CODE_EXAMPLE[ SC[ COD_VPC_TO_VP2_NORMALIZED ] ] ]//
- /// //[ PASTE____BIN[ https://pastebin.com/VvTNDiyi ] ] ]//
- /// //[ ]//
- /// //+ |<----------- EXAMPLE_SPAN==(11)----------->| -+//
- /// //+ |<------------- gl_FragCoord(s) ----------->| -+//
- /// //+ |<------------------ vpc ------------------>| -+//
- /// //+ | (rec_vpc) | -+//
- /// //+ | | -+//
- /// //+ | |<-------------- vp0 -------------->| | -+//
- /// //+ | | (rec_vp0) | | -+//
- /// //+ | | | | -+//
- /// //+ | | | | -+//
- /// //[ +---+---=---=---=---=---=---=---=---=---+---+ -]//
- /// //[ | 0 | 1 2 3 | 4 5 . 6 | 7 . 8 . 9 |10 | 0]//
- /// //[ +---+---=---=---=---=---=---=---=---=---+---+ -]//
- /// //[ | 1 | . . . . | | 1]//
- /// //[ * * . . . . * * -]//
- /// //[ | 2 | . . . . | | 2]//
- /// //[ * * . . . . * * -]//
- /// //[ | 3 | . . . . | | 3]//
- /// //[ * - * . . . . * - * -]//
- /// //[ | 4 | . . . . | | 4]//
- /// //[ * *...................+-----------+...*...* -]//
- /// //[ | 5 | | | |0.5| 5]//
- /// //[ * *...................| |...*...* -]//
- /// //[ | 6 | | vp2 | |0.6| 6]//
- /// //[ * - *...................| (rec_vp2) |...* - * -]//
- /// //[ | 7 | | | |0.7| 7]//
- /// //[ * *...................+-----------+...*...* -]//
- /// //[ | 8 | . . . . | | 8]//
- /// //[ * * . . . . * * -]//
- /// //[ | 9 | . . . . | | 9]//
- /// //[ +---+---=---=---=---=---=---=---=---=---+---+ -]//
- /// //[ |10 | | |0.6|0.7|0.8| | | 10]//
- /// //[ +---+---=---=---=---=---=---=---=---=---+---+ -]//
- /// //+ | | +//
- /// //+ | | +//
- /// //+ +---+---+---+---+---+---+---+---+---+ +//
- /// //+ |0.6| |.65| |0.7| |.75| |0.8| +//
- /// //+ +-----------------------------------+ +//
- /// //+ | | +//
- /// //+ |<----------- vpc_n_o.x ----------->| +//
- /// //+ |( Output gl_FragCoord(s) mapped )| +//
- /// //+ |( onto rec_vp0 )| +//
- /// //[ ]//
- /// //[//////////////////////////////////////////////////]//
- ///
- ///
- /// //: Q: WHAT IS WRONG WITH FORMULA BELOW?
- /// //:
- /// //: [ rec_vp0 / vp0_m_i ]TO[ rec_vp2 / vp2_m_o ]
- /// //:--------------------------------------------------://
- /// //:.................|<---- rec_vp0.wid - 1 ---->|
- /// //: vp0_m_i.x / ( rec_vp0.x_1 - rec_vp0.x_0 )
- /// //: === vp2_m_o.x / ( rec_vp2.x_1 - rec_vp2.x_0 )
- /// //:.................|<---- rec_vp2.wid - 1 ---->|
- /// //:--------------------------------------------------://
- /// //:
- /// //:
- /// //: A: vp0_m_i & vp2_m_0 values need to be offset
- /// //: so they fit within range: 0 -to- (wid-1)
- /// //:
- /// //:
- /// //:--------------------------------------------------://
- /// //: ( vp0_m_i.x - rec_vp0.x_0 ) <-- On__Range
- /// //: / ( rec_vp0.x_1 - rec_vp0.x_0 ) <-- The_Range
- /// //: |<---- rec_vp0.wid - 1 ---->|
- /// //: ===
- /// //: |<---- rec_vp2.wid - 1 ---->|
- /// //: ( vp2_m_o.x - rec_vp2.x_0 ) <-- On__Range
- /// //: / ( rec_vp2.x_1 - rec_vp2.x_0 ) <-- The_Range
- /// //:--------------------------------------------------://
- /// //: ://
- /// //: Q: Solve formula above for vp2_m_0.x ://
- /// //: A: Answer below: ://
- /// //: ://
- /// //: vp2_m_o.x =( ( vp0_m_i.x - rec_vp0.x_0 ) ://
- /// //: / ( rec_vp0.x_1 - rec_vp0.x_0 ) ://
- /// //: * ( rec_vp2.x_1 - rec_vp2.x_0 ) ://
- /// //: ) + rec_vp2.x_0 ;;;;;;;;;;;;;;; ://
- /// //: ://
- /// //: Lets re-name: ://
- /// //: [vp2] to [OUT] for Output. ://
- /// //: [vp0] to [INN] for Input . ://
- /// //: ://
- /// //: OUT_m_o.x =( ( INN_m_i.x - rec_INN.x_0 ) ://
- /// //: / ( rec_INN.x_1 - rec_INN.x_0 ) ://
- /// //: * ( rec_OUT.x_1 - rec_OUT.x_0 ) ://
- /// //: ) + rec_OUT.x_0 ;;;;;;;;;;;;;;; ://
- /// //: ://
- /// //: When converting coordinate from 1 viewport ://
- /// //: to another, we can replace "INN" with the ://
- /// //: input viewport name and "OUT" with the output ://
- /// //: viewport name. The viewports in this example ://
- /// //: are named: ://
- /// //: ://
- /// //: [ vpc , vp0 , vp2 ] ://
- /// //: ://
- /// //:--------------------------------------------------://
- ///
- //| document.title = ( "[V2M.JS]" ); ||//
- //| ||//
- //| //:Fake cast because I will need it in GLSL code. ||//
- //| function float( any_num ){ ||//
- //| return( any_num ); ||//
- //| };; ||//
- //| ||//
- //| function DEBUG_BOUNDS_CHECK( ||//
- //| cxy_inn ||//
- //| , rec_inn //:AKA[ rec_bou / bounds_rectangle ] ||//
- //| ){ ||//
- //| if( cxy_inn.x >= rec_inn.x_0 //:LEF : GTE ||//
- //| && cxy_inn.x <= rec_inn.x_1 //:RIG : LTE ||//
- //| && cxy_inn.y >= rec_inn.y_0 //:TOP : GTE ||//
- //| && cxy_inn.y <= rec_inn.y_1 //:BOT : LTE ||//
- //| ){ ||//
- //| //:Okay. Do nothing. ||//
- //| }else{ ||//
- //| var err_msg =( "[OUT_OF_BOUNDS]" ); ||//
- //| console.log( err_msg ); ||//
- //| throw( err_msg ); ||//
- //| };; ||//
- //| };; ||//
- //| ||//
- //| var gl_FragCoord = Object.seal({ x: 0 , y: 0}); ||//
- //| var EXAMPLE_SPAN = ( 11 ); ||//
- //| ||//
- //| //:Coordinates: ||//
- //| //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://||//
- //| var vp0_m_o = Object.seal({ x: 0 , y: 0}); ||//
- //| var vp0_m_i = Object.seal({ x: 0 , y: 0}); ||//
- //| var vp2_m_o = Object.seal({ x: 0 , y: 0}); ||//
- //| var vp2_m_i = Object.seal({ x: 0 , y: 0}); ||//
- //| var vpc_m_o = Object.seal({ x: 0 , y: 0}); ||//
- //| var vpc_m_i = Object.seal({ x: 0 , y: 0}); ||//
- //| var vpc_mi2 = Object.seal({ x: 0 , y: 0}); ||//
- //| ||//
- //| var vpc_n_o = Object.seal({ x: 0 , y: 0}); ||//
- //| var vpc_n_i = Object.seal({ x: 0 , y: 0}); ||//
- //| ||//
- //| //: tbs_noc: My "NOrmalized Coordinate" to execute ||//
- //| //: GLSL shader code on. AKA: transformed ||//
- //| //: gl_FragCoord. ||//
- //| var tbs_noc = Object.seal({ x: 0 , y: 0}); ||//
- //| //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://||//
- //| ||//
- //| //:R:Rectangles: ||//
- //| //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://||//
- //| var rec_vpc =(Object.freeze({ ||//
- //| x_0 : 0 //:TOP_LEF: (inclusive) ||//
- //| ,y_0 : 0 //:TOP_LEF: (inclusive) ||//
- //| ||//
- //| ,x_1 : 10 //:BOT_RIG: (inclusive) ||//
- //| ,y_1 : 10 //:BOT_RIG: (inclusive) ||//
- //| }));; ||//
- //| var rec_vp0 = (Object.freeze({ ||//
- //| x_0 : 1 //:TOP_LEF: (inclusive) ||//
- //| ,y_0 : 1 //:TOP_LEF: (inclusive) ||//
- //| ||//
- //| ,x_1 : 9 //:BOT_RIG: (inclusive) ||//
- //| ,y_1 : 9 //:BOT_RIG: (inclusive) ||//
- //| }));; ||//
- //| var rec_vp2 = (Object.freeze({ ||//
- //| x_0 : 6 //:TOP_LEF: (inclusive) ||//
- //| ,y_0 : 5 //:TOP_LEF: (inclusive) ||//
- //| ||//
- //| ,x_1 : 8 //:BOT_RIG: (inclusive) ||//
- //| ,y_1 : 7 //:BOT_RIG: (inclusive) ||//
- //| }));; ||//
- //| //:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR://||//
- //| ||//
- //| for( gl_FragCoord.y = 0 ||//
- //| ;gl_FragCoord.y < EXAMPLE_SPAN ||//
- //| ;gl_FragCoord.y++ ||//
- //| ){ ||//
- //| for( gl_FragCoord.x = 0 ||//
- //| ;gl_FragCoord.x < EXAMPLE_SPAN ||//
- //| ;gl_FragCoord.x++ ||//
- //| ){ ||//
- //| ||//
- //| //:vpc is always snapped to entire[client/canvas] ||//
- //| //:so we can make this assumption: ||//
- //| vpc_m_i.x = float( gl_FragCoord.x );//:MAV_INN:X ||//
- //| vpc_m_i.y = float( gl_FragCoord.y );//:MAV_INN:Y ||//
- //| ||//
- //| ||//
- //| //:IS[ vpc_m_i ]OUTSIDE_OF[rec_vp0]? SC[PT_IN_VP]://||//
- //| if( vpc_m_i.x < rec_vp0.x_0 //:LEF ( -X- )[ LT ]:://||//
- //| || vpc_m_i.x > rec_vp0.x_1 //:RIG ( +X+ )[ GT ]:://||//
- //| || vpc_m_i.y < rec_vp0.y_0 //:TOP ( -Y- )[ LT ]:://||//
- //| || vpc_m_i.y > rec_vp0.y_1 //:BOT ( +Y+ )[ GT ]:://||//
- //| ){ //:NOT:inside_the_rectangle[ rec_vp0 ]:////://://||//
- //| //://////:OUT_OF_BOUNDS_OF_REC[ rec_vp0 ]:////://://||//
- //| ||//
- //| //:HERE: Make output pixel color some type of ||//
- //| //: solid color that will letterbox/outline||//
- //| //: rec_vp0 when we draw all pixels on ||//
- //| //: rec_vpc. ||//
- //| ||//
- //| }else{ //:INSIDE_THE_RECTANGLE[ rec_vp0 ]:////://://||//
- //| ||//
- //| //+ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ ¯¯ +//||//
- //| //+VARIABLES_BELOW: +//||//
- //| //+- - - - - - - - - - -- - - - - - - - - - -+//||//
- //| //+ vp0_m_o : Viewport[ 0 ][ MAV ][ Output ] +//||//
- //| //+ vp0_m_i : Viewport[ 0 ][ MAV ][ Input ] +//||//
- //| //+ vp2_m_o : Viewport[ 2 ][ MAV ][ Output ] +//||//
- //| //+ vp2_m_i : Viewport[ 2 ][ MAV ][ Input ] +//||//
- //| //+ vpc_m_o : Viewport[ c ][ MAV ][ Output ] +//||//
- //| //+ vpc_m_i : Viewport[ c ][ MAV ][ Input ] +//||//
- //| //+ vpc_n_o : Viewport[ c ][ NOR ][ Output ] +//||//
- //| //+ vpc_n_i : Viewport[ c ][ NOR ][ Input ] +//||//
- //| //+ __ __ __ __ __ __ ____ __ __ __ __ __ __ +//||//
- //| ||//
- //| //+//////////////////////////////////////////+//||//
- //| //+ [ rec_vpc/vpc_m_i ]TO[ rec_vp0/vp0_m_i ] +//||//
- //| //[>>>>>" Because rec_vp0 is sub region "<<<<]//||//
- //| //[>>>>>" of rec_vpc all we need is a "<<<<]//||//
- //| //[>>>>>" simple assignment. "<<<<]//||//
- //| vp0_m_o.x = vpc_m_i.x; ||//
- //| vp0_m_o.y = vpc_m_i.y; ||//
- //| //+//////////////////////////////////////////+//||//
- //| ||//
- //| //:Output_Becomes_Input ||//
- //| vp0_m_i.x = vp0_m_o.x; ||//
- //| vp0_m_i.y = vp0_m_o.y; ||//
- //| ||//
- //| //:------------------------------------------://||//
- //| //: [ rec_vp0 / vp0_m_i ]TO[ rec_vp2/vp2_m_o ] ||//
- //| //: INN: vp0 ( rec_vp0 & vp0_m_i ) ||//
- //| //: OUT: vp2 ( rec_vp2 & vp2_m_o ) ||//
- //| //:------------------------------------------://||//
- //| vp2_m_o.x =( ( vp0_m_i.x - rec_vp0.x_0 ) ||//
- //| / ( rec_vp0.x_1 - rec_vp0.x_0 ) ||//
- //| * ( rec_vp2.x_1 - rec_vp2.x_0 ) ||//
- //| ) + rec_vp2.x_0 ;;;;;;;;;;;;;;; ||//
- //| vp2_m_o.y =( ( vp0_m_i.y - rec_vp0.y_0 ) ||//
- //| / ( rec_vp0.y_1 - rec_vp0.y_0 ) ||//
- //| * ( rec_vp2.y_1 - rec_vp2.y_0 ) ||//
- //| ) + rec_vp2.y_0 ;;;;;;;;;;;;;;; ||//
- //| //:------------------------------------------://||//
- //| DEBUG_BOUNDS_CHECK( vp2_m_o, rec_vp2 ); ||//
- //| ||//
- //| //: Output_Becomes_Input: ||//
- //| vp2_m_i.x = vp2_m_o.x; ||//
- //| vp2_m_i.y = vp2_m_o.y; ||//
- //| ||//
- //| //:------------------------------------------://||//
- //| //: YES. we are using rec_vpc AGAIN! ||//
- //| //: The formula is just an assignment, because ||//
- //| //: vp2 is a sub-sample of vpc. ||//
- //| //: ||//
- //| //: [ rec_vp2 / vp2_m_i ]TO[ rec_vpc/vpc_m_o ] ||//
- //| //: INN: vp2 ( rec_vp2 & vp2_m_i ) ||//
- //| //: OUT: vpc ( rec_vpc / vpc_m_o ) ||//
- //| //:------------------------------------------://||//
- //| vpc_m_o.x =( vp2_m_i.x ); ||//
- //| vpc_m_o.y =( vp2_m_i.y ); ||//
- //| //:------------------------------------------://||//
- //| DEBUG_BOUNDS_CHECK( vpc_m_o, rec_vpc ); ||//
- //| ||//
- //| //: Output_Becomes_Input: ||//
- //| //: We already used[vpc_m_i]so we will call ||//
- //| //: this variable [vpc_mi2]to avoid problems. ||//
- //| vpc_mi2.x = vpc_m_o.x; ||//
- //| vpc_mi2.y = vpc_m_o.y; ||//
- //| ||//
- //| //: [ rec_vpc / vpc_m_i ]TO[ rec_vpc/vpc_n_o ] ||//
- //| //: Formula is simpler this time because we ||//
- //| //: only want the percentage_along_path on the ||//
- //| //: sides of rec_vpc. ||//
- //| //:------------------------------------------://||//
- //| vpc_n_o.x =(( vpc_mi2.x - rec_vpc.x_0 ) ||//
- //| /( rec_vpc.x_1- rec_vpc.x_0 ));; ||//
- //| vpc_n_o.y =(( vpc_mi2.y - rec_vpc.y_0 ) ||//
- //| /( rec_vpc.y_1- rec_vpc.y_0 ));; ||//
- //| //:------------------------------------------://||//
- //| ||//
- //| //: Output_Becomes_Input: ||//
- //| vpc_n_i.x = vpc_n_o.x; ||//
- //| vpc_n_i.y = vpc_n_o.y; ||//
- //| ||//
- //| //:These normalized coordinates represent ||//
- //| //:rec_vpc coordinates after rec_vp2 has ||//
- //| //:ZOOMED and PANNED over rec_vpc. ||//
- //| tbs_noc.x = vpc_n_i.x; ||//
- //| tbs_noc.y = vpc_n_i.y; ||//
- //| ||//
- //| //:L:Log:Log_The_Results:(BELOW):------------://||//
- //| //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://||//
- //| var x = tbs_noc.x; ||//
- //| var y = tbs_noc.y; ||//
- //| console.log("[x,y]:[" + x +"]["+ y + "]"); ||//
- //| ||//
- //| //:If all the math is correct, the coordinates ||//
- //| //:should be within the bounds of the diagram. ||//
- //| if( tbs_noc.x < 0.6 || tbs_noc.x > 0.8 ||//
- //| || tbs_noc.y < 0.5 || tbs_noc.y > 0.7 ||//
- //| ){ ||//
- //| ||//
- //| var err_msg =("[YOUR_MATH_IS_WRONG]"); ||//
- //| console.log( err_msg ); ||//
- //| throw( err_msg ); ||//
- //| ||//
- //| };; ||//
- //| //:LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL://||//
- //| ||//
- //| };; //:///////////////////////////:SC[ PT_IN_VP ]://||//
- //| ||//
- //| };;};;//:NEXT[ frag_coord ] ||//
- //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
- //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
- //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
- //:CRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCR://
- //:CR:Code_Reference:(ABOVE):--------------------------------://
- //:C:Comments_Section:(BELOW):-------------------------------://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:NOTES/COMMENTS:
- //: PWU_AFC: Probably_Wont_Use__Added_For_Completeness
- //: I didn't think I would need this, but I
- //: added it into the code anyways because
- //: it fufilled some type of pattern or
- //: compulsion.
- //|:///////////////////////////:DIAGRAM[ SC[ DIA_GAM_TEX ] ]:|//
- //| |//
- //| GAM: GAM_TEX: (Game_variables_as_TextureData) |//
- //| |//
- //| |<--- 2048 ---->| |//
- //| +---+---+---+---+ ----- |//
- //| |GAM|T_L|TOP|T_R| 512 |//
- //| +---+---+---+---+ ----- |//
- //| |HOR|LEF|CEN|RIG| 512 |//
- //| +---+---+---+---+ ----- |//
- //| |VER|B_L|BOT|B_R| 512 |//
- //| +---+---+---+---+ ----- |//
- //| |TS0|TS1|TS2|TS3| 512 |//
- //| +---+---+---+---+ ----- |//
- //| <--- mam_mem ---> |//
- //| |//
- //| GAM: Game Data. |//
- //| TS0,TS1,TS2,TS3: Tile Sets. TS0==Terminal. |//
- //| HOR,VER: Horizontal+Vertical TransRooms |//
- //| T_L,TOP,T_R,LEF,CEN,RIG,B_L,BOT,B_R: MainRooms |//
- //| |//
- //| +---+ +---+---+---+ --- |//
- //| |GAM| >>>>>>>>>>>>>>+ |T_L|TOP|T_R| | |//
- //| +---+ V +---+---+---+ | |//
- //| V |LEF|CEN|RIG| | |//
- //| +---+ V +---+---+---+ | |//
- //| |HOR| V |B_L|BOT|B_R| | |//
- //| +---+ V +---+---+---+ | |//
- //| |VER| V | |//
- //| +---+ V | |//
- //| V EXPLODED_VIEW |//
- //| +---+---+---+---+ V | |//
- //| |TS0|TS1|TS2|TS3| V | |//
- //| +---+---+---+---+ V -------------------- |//
- //| V |//
- //| |<---------------- GAM ---------------->| |//
- //| | | |//
- //| |<---------------- 64 ----------------->| |//
- //| | | |//
- //| +----+----+----+----+----+----+----+----+ ===== |//
- //| | 08 | 08 | | | ||| |//
- //| +----+----+ 16 + + ||| |//
- //| | 08 | 08 | | | ||| |//
- //| +----+----+----+----+ 32 + ||| |//
- //| | | | | ||| |//
- //| + 16 + 16 + + ||| |//
- //| | | | | ||| |//
- //| +----+----+----+----+----+----+----+----+ GAM |//
- //| | | | ||| |//
- //| + + + ||| |//
- //| | | | ||| |//
- //| + 32 + 32 + ||| |//
- //| | | | ||| |//
- //| + + + ||| |//
- //| | | | ||| |//
- //| +----+----+----+----+----+----+----+----+ ||| |//
- //| \ / ||| |//
- //| \ / ||| |//
- //| +---------------------------------+ ||| |//
- //| | ||| |//
- //| | ||| |//
- //| +--|-+----+----+----+----+----+----+----+ ||| |//
- //| |ABOV| 64 | | | ||| |//
- //| +----+----+ 128 + + ||| |//
- //| | 64 | 64 | | | ||| |//
- //| +----+----+----+----+ 256 + ||| |//
- //| | | | | ||| |//
- //| + 128 + 128 + + ||| |//
- //| | | | | ||| |//
- //| +----+----+----+----+----+----+----+----+ GAM |//
- //| | | | ||| |//
- //| + + + ||| |//
- //| | | | ||| |//
- //| + 256 + 256 + ||| |//
- //| | | | ||| |//
- //| + + + ||| |//
- //| | | | ||| |//
- //| +----+----+----+----+----+----+----+----+ ||| |//
- //| \ / ||| |//
- //| \ / ||| |//
- //| +---------------------------------+ ||| |//
- //| | ||| |//
- //| | ||| |//
- //| +--|-+----+----+----+----+----+----+----+ ||| |//
- //| | | ||| |//
- //| + + ||| |//
- //| | | ||| |//
- //| + + ||| |//
- //| | | ||| |//
- //| + + ||| |//
- //| | | ||| |//
- //| + GAM_TEX + GAM |//
- //| | 512 | ||| |//
- //| + + ||| |//
- //| | | ||| |//
- //| + + ||| |//
- //| | | ||| |//
- //| + + ||| |//
- //| | | ||| |//
- //| +----+----+----+----+----+----+----+----+ ===== |//
- //| | | |//
- //| |<---------------- 512 ---------------->| |//
- //| | | |//
- //| |//
- //|:///////////////////////////:DIAGRAM[ SC[ DIA_GAM_TEX ] ]:|//
- //: ## non-fancy uniforms:
- //: ############################################################
- //: ## 1: has_mem
- //: ## 2: ren_mod
- //: ## 3: edi_mod
- //: ## 4: gam_tim //:gameTime
- //: ## 5: dex_hot //:HotSwappedMemoryBlockIndex
- //: ## Use values 1-16 so zero can mean
- //: ## "nothing hot swapped".
- //: ############################################################
- //: editor_list:
- //: edi_all : EditorAll, the master editor.
- //: edi_001 : Test bed shader code editor. 0-9 editors.
- //: edi_002 : Tile camera editor.
- //: PROCOOP: PROcedural_OOP
- //: Procedural Function Using:
- //: Object Orientation Pattern
- //: NON_NEG: NON_NEGATIVE_NUMBER ( x >= 0 )
- //: WHO_NUM_INC: WHOle_NUMber_INClusive
- //: #PAK_ROW_LEN_URL#
- //: www.khronos.org/registry/OpenGL-Refpages/es3.0
- //: /html/glPixelStorei.xhtml
- //: #OGL_PIX_TRN_URL#
- //: www.khronos.org/opengl/wiki/Pixel_Transfer
- //: #MSDN_STRIDE_URL#
- //: docs.microsoft.com/en-us/windows
- //: /win32/medfound/image-stride
- //: #TSI2D_FORMAT#
- //:Was wondering if I needed to use
- //:the internal format or source format.
- //:Since the texture was already set up using
- //:texImage2D it makes the most sense that
- //:the format and type describe the CPU-side
- //:data and not the GPU-side (internal) data.
- //: Namspaced_Functions: TYPO_YOU_WANT[ Namespaced_Functions ]
- //: #CANVAS_SIZE_TROUBLE_SHOOTING#:
- ////////////////////////////////////////////////////////////////
- //:CS:Canvas_Size:
- //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
- //: ://
- //: This was originally written for trouble ://
- //: shooting. It didn't solve the problem. ://
- //: The problem was: ://
- //: ://
- //: 1: I wasn't sampling from the texture ://
- //: I thought I was sampling from. ://
- //: ://
- //: 2: The uniforms were never set for my ://
- //: texture samplers, thus all samplers ://
- //: defaulted to sampling texture0. ://
- //: ://
- //:CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS://
- ////////////////////////////////////////////////////////////////
- //#TODO: Because this object's bounds is located at [0,0] #//
- //# try and have a hackish way to swap what texture #//
- //# it is hooked up to so we can get visual feedback #//
- //# that the data is working as expected. #//
- //# #//
- //# In fact... there should be a way for ANY #//
- //# memory region to be swapped out and put on the #//
- //# 512x512 so we can visually look at and inspect #//
- //# it. A "hot swap" so none of the values are #//
- //# corrputed. #//
- //# #//
- //# There should be an editor called "hotswapper" #//
- //# that when active can swap one of the 16 texture #//
- //# sub regions on mam_mem into iso_mem. #//
- //:AKA[ texelget | get_texel | texel_get ]
- //:AKA[ texelfetch | texel_fetch | ........ ]
- //:AKA[ fetchtexel | gettexel | fetch_texel ]
- //:AKA[ texeGet | texe_get | tex_get ]
- //: 1: Get_Tex_iso_mem
- //: 2: Get_Tex_mam_mem
- //: 3: Get_Tex_iso_mem_rot
- //: 4: Get_Tex_mam_mem_rot
- //:Weird things I say and what I mean:
- //://////////////////////////////////////////////////////://
- /**:****************************************************:[_]
- [raw_data_view]:
- All of the rendering data and game data is encoded
- as pixels. A "raw_data_view" is essentially looking
- at the level-maps and other data in their
- "ms-paint" representation rather than the
- "in game" representation.
- [C11_dictates_PRIVATE_HIDDEN_before_PUBLIC_VISIBLE]:
- Public functions are very likely to call private
- functions. But do NOT allow it the other way around.
- Thus in order of dependency with 1-pass compiling,
- we must put the private functions FIRST.
- [COMLINK_D_XY_TO_LD_XY_2020_06_01]:
- Comment Link between source code in DAS_BOR.HTM
- And it's equivalent in ICOG.JS at time of writing
- this. Converts a screen coordinate [ d_x , d_y ]
- to a local coordinate over the off-screen data
- [ ldx , ldy ].
- [CAM_TXY_IS_CAM_UNITS]:
- [CAM_TXY_IS_IN_CAMERA_UNITS_NOT_TILE_UNITS]:
- [CAM_TXY_IS_CAMERA_XY_MEASURED_IN_CAMERAS]:
- [CAM_TXY_IS_NOT_A_TOPLEFT_ORIGIN_TILE]:
- [ cam_t_x , cam_t_y ] does not represent a
- [tile/pixel] in the top left of the camera.
- It is the "camera's xy position measured in cameras".
- [_]:****************************************************:**/
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC://
- //:C:Comments_Sections:(ABOVE):------------------------------://
Add Comment
Please, Sign In to add comment