{"version":3,"sources":["https://lively-kernel.org/lively4/shadama/shadama.js"],"names":["ShadamaFactory","frame","optDimension","parent","optDefaultProgName","optDOMTools","threeRenderer","renderer","TEXTURE_SIZE","FIELD_WIDTH","FIELD_HEIGHT","VOXEL_STEP","VOXEL_WIDTH","VOXEL_HEIGHT","VOXEL_DEPTH","VOXEL_TEXTURE_WIDTH","VOXEL_TEXTURE_HEIGHT","T","FW","FH","VS","VW","VH","VD","VTW","VTH","N","dimension","breedVAO","patchVAO","programs","gl","state","audioContext","renderRequests","targetTexture","debugCanvas1","debugArray","debugArray1","debugArray2","debugTextureBreed","debugTexturePatch","framebufferDBreed","framebufferDPatch","framebufferBreed","framebufferPatch","framebufferDiffuse","framebufferU8RGBA","readFramebufferBreed","readFramebufferPatch","writeFramebufferBreed","writeFramebufferPatch","editor","editorType","parseErrorWidget","domTools","readout","watcherList","watcherElements","envList","shadamaCanvas","fullScreenScale","keepGoing","animationRequested","times","withThreeJS","runTests","showAllEnv","degaussdemo","shaders","initBreedVAO","allIndices","Array","divIndices","j","i","ind","createVertexArray","bindVertexArray","aBuffer","createBuffer","bBuffer","attrLocations","attrStrides","setBufferAttribute","initPatchVAO","w","h","makePrimitive","name","uniforms","vao","vs","createShader","fs","prog","createProgram","uniLocations","forEach","n","getUniformLocation","program","drawBreedProgram","drawPatchProgram","debugBreedProgram","debugPatchProgram","renderBreedProgram","renderPatchProgram","diffusePatchProgram","increasePatchProgram","increaseVoxelProgram","copyRGBAProgram","id","source","type","endsWith","VERTEX_SHADER","FRAGMENT_SHADER","shader","scriptElement","document","getElementById","text","shaderSource","compileShader","success","getShaderParameter","COMPILE_STATUS","console","log","getShaderInfoLog","alert","deleteShader","vertexShader","fragmentShader","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","deleteProgram","createTexture","data","width","height","UNSIGNED_BYTE","tex","bindTexture","TEXTURE_2D","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_COLORSPACE_CONVERSION_WEBGL","UNPACK_ROW_LENGTH","UNPACK_IMAGE_HEIGHT","UNPACK_SKIP_ROWS","UNPACK_SKIP_PIXELS","UNPACK_SKIP_IMAGES","texImage2D","RGBA","R32F","RED","FLOAT","RGBA32F","texParameteri","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","makeFramebuffer","format","Float32Array","Uint8Array","buffer","createFramebuffer","bindFramebuffer","FRAMEBUFFER","target","THREE","WebGLRenderTarget","properties","get","__webglFramebuffer","deleteTexture","setTargetBuffer","setRenderTarget","framebufferTexture2D","COLOR_ATTACHMENT0","setTargetBuffers","DRAW_FRAMEBUFFER","list","length","val","push","drawBuffers","buffers","attrL","attrS","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","noBlend","setCullFace","CullFaceNone","setBlending","NoBlending","disable","BLEND","normalBlend","NormalBlending","enable","blendFunc","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","oneBlend","CustomBlending","AddEquation","OneFactor","ONE","textureCopy","obj","src","dst","readbuffer","writebuffer","constructor","Breed","Patch","READ_FRAMEBUFFER","blitFramebuffer","COLOR_BUFFER_BIT","updateOwnVariable","optData","ary","own","removeOwnVariable","update","cls","fields","env","stringify","Object","prototype","toString","call","pairs","k","hasOwnProperty","sort","a","b","map","v","JSON","oldOwn","toBeDeleted","toBeCreated","newOwn","indexOf","programFromTable","table","vert","frag","debugName","forBreed","viewportW","viewportH","hasPatchInput","defaultUniforms","uniformTable","keysAndValuesDo","key","entry","uni","uniform","scalarParamTable","objects","outs","ins","params","object","targets","pair","useProgram","viewport","uniform2f","offset","activeTexture","TEXTURE0","x","uniform1i","TEXTURE1","y","glIndex","WebGLTexture","uniform1f","drawArrays","POINTS","count","flush","o","tmp","programFromTable3","uniform3f","TEXTURE2","z","initFramebuffers","Shadama","scripts","statics","staticsList","steppers","triggers","media","loadTime","compilation","setupCode","programName","readPixelArray","readPixelCallback","evalShadama","eval","loadShadama","newSetupCode","oldProgramName","schemaChange","clearMedia","newData","cleanUpEditorState","result","translate","reportError","bind","e","resetSystem","js","ShadamaFunction","func","insAndParamsAndOuts","ShadamaEvent","ShadamaTrigger","loadImage","loadAudio","loadCSV","evt","loadVideo","populateList","callSetup","window","performance","now","trigger","setTarget","aTexture","webglTexture","__webglTexture","setReadPixelCallback","makeOnAfterRender","scene","camera","geometry","material","group","mesh","pMatrix","projectionMatrix","mvMatrix","modelViewMatrix","item","realRender","readPixels","clamped","Uint8ClampedArray","img","ImageData","debugDisplay","objName","createElement","body","appendChild","setClearColor","Color","clearColor","clear","getContext","putImageData","readValues","maxWidth","maxHeight","error","Error","reason","expected","pos","s","detectEntry","stopClock","clock","removeAll","updateCode","code","getValue","maybeRunner","prompt","setValue","localStorage","setItem","initFileList","addListeners","aCanvas","that","set","symbol","rect","getBoundingClientRect","left","top","diffY","pageY","clientY","diffX","pageX","clientX","time","addEventListener","toggleScript","initServerFiles","examples","loadProgram","serverCode","localCode","getItem","event","location","AudioContext","loadSound","url","request","XMLHttpRequest","open","responseType","onload","decodeAudioData","response","send","startsWith","slash","lastIndexOf","slice","tmpCanvas","dir","imagePath","crossOrigin","onerror","newImage","emptyImageData","removeChild","hidden","drawImage","getImageData","xobj","dataPath","oEvent","blob","file","File","Papa","parse","complete","resultCSV","errorCSV","isCamera","video","initTexture","texture","pixel","LINEAR","videoTexture","updateTexture","playing","timeupdate","autoplay","muted","loop","checkReady","navigator","mediaDevices","getUserMedia","then","stream","srcObject","play","p","undefined","catch","value","pause","remove","initDisplay","Display","initEnv","callback","mousedown","mousemove","makeClock","aClock","ticking","hand","drawClock","onclick","scriptName","startClock","stopScript","startScript","drawFace","ctx","radius","backColor","moveTo","beginPath","arc","Math","PI","fillStyle","fill","strokeStyle","lineWidth","stroke","drawHand","lineCap","rotate","lineTo","transform","resetTransform","makeEntry","button","className","innerHTML","children","oldEntry","firstChild","addAll","elems","updateClocks","child","selectFile","dom","selectedIndex","option","options","label","doc","optSelection","onchange","selectIndex","keys","filter","Option","updateEnv","printNum","str","abs","toPrecision","toFixed","replace","print","props","getOwnPropertyNames","join","newList","addEnv","asset","runLoop","once","setEditor","anEditor","shadama","otherColor","t","copy","getClearColor","canvas","playSound","createBufferSource","connect","destination","start","encodeURIComponent","xhttp","onreadystatechange","readyState","status","responseText","StandAloneRenderer","framebuffer","optType","fillRandom","min","max","range","random","fillRandomDir","xName","yName","cos","sin","fillRandomDir3","zName","angleY","angleX","asin","fillSpace","xDim","yDim","setCount","fillCuboid","zDim","step","l","fillImage","rName","gName","bName","aName","imagedata","r","g","loadData","schema","loadVideoFrame","vTex","cs","uniform2i","videoWidth","videoHeight","draw","TEXTURE3","TEXTURE4","TEXTURE5","render","breed","TEXTURE6","maybeD","TEXTURE7","uniformMatrix4fv","elements","increasePatch","patch","valueOrSrcName","increaseVoxel","oldCount","diffuse","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","removeLineWidget","getAllMarks","mark","visible","showError","toDOM","xNode","yNode","createTextNode","message","setTimeout","msg","repeat","xs","docPos","posFromIndex","widget","ch","addLineWidget","line","scale","bounds2D","byOrdinal","bounds","vec","Vector3","orig","clone","localToWorld","TStickyNote","tAvatar","tObj","sticky","setShowError","m","mylaser","laserBeam","addChild","position","quaternion","image","fillRect","font","fillText","needsUpdate","release","track","maybeFire","optFunc","runner","runBody","shift","frameTime","stepTime","reduce","requestAnimationFrame","destroy","removeSelf","pointermove","pointerup","mouseup","pointerdown","tester","SymTable","goFullScreen","req","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","fsChanged","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","rx","innerWidth","ry","innerHeight","style","shadamaGrammar","String","raw","globalTable","primitives","initPrimitiveTable","initCompiler","ohm","grammar","createSemantics","initSemantics","addDefaults","processHelper","symDict","queue","traverse","head","add","d","usedHelpersAndPrimitives","dict","OrderedPair","allUsedHelpersAndPrimitives","addOperation","TopLevel","ds","addAsSet","symTable","ctor","ctorName","ProgramDecl","_p","_programName","sourceString","_b","_o","_c","process","Event","_e","beEvent","On","_a","optK","beTrigger","Data","_d","s1","s2","realS1","realS2","beData","Script","ns","Helper","beHelper","Static","_s","beStatic","Formals_list","args","StatementList","ss","VariableDeclaration","optI","IfStatement","_if","c","optF","LeftHandSideExpression_field","f","hasVariable","endIdx","PrimExpression_field","isBuiltin","PrimExpression_variable","PrimitiveCall","as","maybeHelperOrPrimitive","Actuals_list","ident","_h","_r","number","_terminal","_nonterminal","transBinOp","op","glsl","TriggerExpression_and","_op","TriggerExpression_or","TriggerExpression","concat","empty","glsl_helper","crIfNeeded","contents","helperCode","Block","pushWithSpace","addTab","decTab","tab","Statement","cr","_i","ReturnStatement","AssignmentStatement","_","VariableStatement","_v","Initialiser","ExpressionStatement","Expression","LogicalExpression","LogicalExpression_and","LogicalExpression_or","RelationalExpression","RelationalExpression_le","RelationalExpression_ge","RelationalExpression_lt","RelationalExpression_gt","RelationalExpression_equal","RelationalExpression_notEqual","AddExpression","AddExpression_plus","AddExpression_minus","MulExpression","MulExpression_times","MulExpression_divide","MulExpression_mod","UnaryExpression","UnaryExpression_plus","UnaryExpression_minus","UnaryExpression_not","PrimExpression","PrimExpression_paren","PrimExpression_number","isObject","rest","patchInput","voxelInput","patchPrologue","breedPrologue","voxelPrologue","epilogue","template1","uniformDefaults","elem","paramUniforms","vertVaryings","primitivesAndHelpers","fragVaryings","glsl_inner","fragColors","CodeStream","static","glsl_script_formals","triggerAction","inTable","varying","staticTransBinOp","method","isOther","realTable","param","at","usedAsOther","static_method_inner","beStaticVariable","isEvent","isStaticVariable","PrimExpression_string","prim","math","actuals","MethodCall","displayBuiltIns","builtIns","myTable","size","formals","objectsString","actual","formal","shortName","callProgram","shouldFire","ready","resetTrigger","stop","reset","entries","maybeEntry","other","keysAndValuesCollect","element","has","found","optIsPrimitive","hasBreedInput","defaultAttributes","thisIn","otherIn","thisOut","otherOut","local","varyingTable","apply","eventName","staticVarName","action","eventSource","newEntry","newK","methodName","methodPos","tag","rcvr","out","u_entry","shortParams","rawTable","aString","hadCR","hadSpace","tabLevel","skipSpace","last","flatten","isArray","optRule","rule","match","to","from","prod","errorCallback","succeeded","getExpectedText","getRightmostFailurePosition","defaultProgName","test","search","exec","parseInt","setTestParams","ext","getExtension","context","words","split","CodeMirror","defineMIME","keywords","atoms","cm","fromTextArea","mode","matchBrackets","onAfterRender","WebGL2RenderingContext","grammarUnitTests","symTableUnitTests","translateTests"],"mappings":"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","file":"shadama.js","sourcesContent":["function ShadamaFactory(frame, optDimension, parent, optDefaultProgName, optDOMTools) {\n    var threeRenderer = frame ? frame.renderer : null;\n    var TEXTURE_SIZE = 1024;\n    var FIELD_WIDTH = 512;\n    var FIELD_HEIGHT = 512;\n\n    var VOXEL_STEP = 8;\n    var VOXEL_WIDTH = 512;\n    var VOXEL_HEIGHT = 512;\n    var VOXEL_DEPTH = 512;\n\n    var VOXEL_TEXTURE_WIDTH = 512; // sqrt(512 * 512 * 512 / 8 / 8 / 8);\n    var VOXEL_TEXTURE_HEIGHT = 512; // sqrt(512 * 512 * 512 / 8 / 8 / 8);\n\n    var T = TEXTURE_SIZE;\n    var FW = FIELD_WIDTH;\n    var FH = FIELD_HEIGHT;\n\n    var VS = VOXEL_STEP;\n    var VW = VOXEL_WIDTH;\n    var VH = VOXEL_HEIGHT;\n    var VD = VOXEL_DEPTH;\n\n    var VTW = VOXEL_TEXTURE_WIDTH;\n    var VTH = VOXEL_TEXTURE_HEIGHT;\n\n    var N = \"_new_\";\n\n    var dimension = optDimension || 3; // 2 | 3;\n\n    // need to change things around here so that you can have different Shadma instances with different sizes\n\n    var breedVAO;\n    var patchVAO;\n    var programs = {};  // {name: {prog: shader, vao: VAO, uniLocations: uniformLocs}}\n\n    var renderer;\n    var gl;\n    var state;\n    var audioContext;\n\n    var renderRequests = [];\n\n    var targetTexture; // THREE.js texture, not WebGL texture\n\n    var debugCanvas1;\n    var debugArray;\n    var debugArray1;\n    var debugArray2;\n\n    var debugTextureBreed;\n    var debugTexturePatch;\n    var framebufferDBreed;  // for debugging u8rgba texture\n    var framebufferDPatch;  // for debugging u8rgba texture\n\n    var framebufferBreed;\n    var framebufferPatch;\n    var framebufferDiffuse;\n    var framebufferU8RGBA;  // for three js u8rgba texture\n\n    var readFramebufferBreed;\n    var readFramebufferPatch;\n    var writeFramebufferBreed;\n    var writeFramebufferPatch;\n\n    var editor = null;\n    var editorType = null;\n    var parseErrorWidget = null;\n\n    var domTools = false;\n\n    var readout;\n    var watcherList;  // DOM\n    var watcherElements = []; // [DOM]\n    var envList; // DOM\n\n    var shadamaCanvas;\n    var fullScreenScale = 1;\n\n    var keepGoing = true;\n    var animationRequested = false;\n\n    var times = [];\n\n    var withThreeJS;\n    var runTests;\n    var showAllEnv;\n    var degaussdemo;\n\n    var shaders = {\n        \"drawBreed.vert\":\n        `#version 300 es\n        layout (location = 0) in vec2 a_index;\n        layout (location = 1) in vec2 b_index;\n\n        uniform vec2 u_resolution;\n        uniform vec2 u_half;\n\n        uniform sampler2D u_x;\n        uniform sampler2D u_y;\n\n        uniform sampler2D u_r;\n        uniform sampler2D u_g;\n        uniform sampler2D u_b;\n        uniform sampler2D u_a;\n\n        out vec4 v_color;\n\n        void main(void) {\n            ivec2 fc = ivec2(a_index);\n            float x = texelFetch(u_x, fc, 0).r;\n            float y = texelFetch(u_y, fc, 0).r;\n            vec2 dPos = vec2(x, y);   // (0-resolution, 0-resolution)\n            vec2 normPos = dPos / u_resolution;  // (0-1.0, 0-1.0)\n            vec2 clipPos = (normPos + u_half) * 2.0 - 1.0;  // (-1.0-1.0, -1.0-1.0)\n            gl_Position = vec4(clipPos, 0, 1.0);\n\n            float r = texelFetch(u_r, fc, 0).r;\n            float g = texelFetch(u_g, fc, 0).r;\n            float b = texelFetch(u_b, fc, 0).r;\n            float a = texelFetch(u_a, fc, 0).r;\n            v_color = vec4(r, g, b, a);\n            gl_PointSize = 1.0;\n        }`,\n\n        \"drawBreed.frag\":\n        `#version 300 es\n        precision highp float;\n\n        in vec4 v_color;\n        out vec4 fragColor;\n\n        void main(void) {\n            fragColor = v_color;\n        }`,\n\n        \"drawPatch.vert\":\n        `#version 300 es\n        layout (location = 0) in vec2 a_index;\n        layout (location = 1) in vec2 b_index;\n\n        uniform vec2 u_resolution;\n        uniform vec2 u_half;\n\n        uniform sampler2D u_r;\n        uniform sampler2D u_g;\n        uniform sampler2D u_b;\n        uniform sampler2D u_a;\n\n        out vec4 v_color;\n\n        void main(void) {\n            vec2 clipPos = (b_index + u_half) * 2.0 - 1.0;  // (-1.0-1.0, -1.0-1.0)\n            gl_Position = vec4(clipPos, 0, 1.0);\n            gl_PointSize = 1.0;\n\n            ivec2 fc = ivec2(a_index);\n\n            float r = texelFetch(u_r, fc, 0).r;\n            float g = texelFetch(u_g, fc, 0).r;\n            float b = texelFetch(u_b, fc, 0).r;\n            float a = texelFetch(u_a, fc, 0).r;\n            v_color = vec4(r, g, b, a);\n        }`,\n\n        \"drawPatch.frag\":\n        `#version 300 es\n        precision highp float;\n\n        in vec4 v_color;\n        out vec4 fragColor;\n\n        void main(void) {\n            fragColor = v_color;\n        }`,\n\n        \"debug.vert\":\n        `#version 300 es\n        precision highp float;\n        layout (location = 0) in vec2 a_index;\n        layout (location = 1) in vec2 b_index;\n\n        uniform sampler2D u_value;\n        uniform vec2 u_half;\n\n        out vec4 v_color;\n\n        void main(void) {\n            vec2 clipPos = (b_index + u_half) * 2.0 - 1.0;  // (-1.0-1.0, -1.0-1.0)\n            gl_Position = vec4(clipPos, 0, 1.0);\n            gl_PointSize = 1.0;\n\n            ivec2 fc = ivec2(a_index);\n            v_color = texelFetch(u_value, fc, 0);\n        }`,\n\n        \"debug.frag\":\n        `#version 300 es\n        precision highp float;\n\n        in vec4 v_color;\n        out vec4 fragColor;\n\n        void main(void) {\n            fragColor = v_color;\n        }`,\n\n        \"renderBreed.vert\":\n        `#version 300 es\n        layout (location = 0) in vec2 a_index;\n        layout (location = 1) in vec2 b_index;\n\n        uniform mat4 mvMatrix;\n        uniform mat4 pMatrix;\n        uniform vec3 u_resolution;\n        uniform vec3 u_half;\n\n        uniform sampler2D u_x;\n        uniform sampler2D u_y;\n        uniform sampler2D u_z;\n\n        uniform sampler2D u_r;\n        uniform sampler2D u_g;\n        uniform sampler2D u_b;\n        uniform sampler2D u_a;\n\n        uniform sampler2D u_d;\n        uniform float u_dotSize;\n        uniform bool u_use_vector;\n\n        out vec4 v_color;\n\n        void main(void) {\n            ivec2 fc = ivec2(a_index);\n            float x = texelFetch(u_x, fc, 0).r;\n            float y = texelFetch(u_y, fc, 0).r;\n            float z = texelFetch(u_z, fc, 0).r;\n            vec3 dPos = vec3(x, y, z);\n            vec3 normPos = dPos / u_resolution;\n            vec3 clipPos = ((normPos + u_half) * 2.0 - 1.0) * (u_resolution.x / 2.0);\n\n            vec4 mvPos = mvMatrix * vec4(clipPos, 1.0);\n\n            gl_Position = pMatrix * mvPos;\n\n            float r = texelFetch(u_r, fc, 0).r;\n            float g = texelFetch(u_g, fc, 0).r;\n            float b = texelFetch(u_b, fc, 0).r;\n            float a = texelFetch(u_a, fc, 0).r;\n            v_color = vec4(r, g, b, a);\n            gl_PointSize = ((u_use_vector ? texelFetch(u_d, fc, 0).r : u_dotSize) / -mvPos.z);\n        }`,\n\n        \"renderBreed.frag\":\n        `#version 300 es\n        precision highp float;\n\n        in vec4 v_color;\n\n        out vec4 fragColor;\n\n        void main(void) {\n            fragColor = v_color;\n        }`,\n\n        \"renderPatch.vert\":\n        `#version 300 es\n        precision highp float;\n        layout (location = 0) in vec2 a_index;\n        layout (location = 1) in vec2 b_index;\n\n        uniform mat4 mvMatrix;\n        uniform mat4 pMatrix;\n        uniform vec3 u_resolution;\n        uniform vec3 v_resolution;\n        uniform int v_step;\n        uniform vec3 u_half;\n\n        uniform sampler2D u_r;\n        uniform sampler2D u_g;\n        uniform sampler2D u_b;\n        uniform sampler2D u_a;\n\n        out vec4 v_color;\n\n        void main(void) {\n            ivec2 fc = ivec2(a_index);\n            ivec3 iv_resolution = ivec3(v_resolution);\n            // the framebuffer will be 512^512, which is square of cube root of 64 * 64 * 64\n            // fc varies over this.\n\n            int index = int(a_index.y) * int(u_resolution.x) + int(a_index.x);\n\n            int z = index / (iv_resolution.x * iv_resolution.y);\n            int xy = index % (iv_resolution.x * iv_resolution.y);\n\n            int x = xy % iv_resolution.x;\n            int y = xy / iv_resolution.x;\n\n            x = x * v_step;\n            y = y * v_step;\n            z = z * v_step;\n\n            vec3 dPos = vec3(x, y, z);\n            vec3 normPos = dPos / u_resolution;\n            vec3 clipPos = ((normPos + u_half) * 2.0 - 1.0) * (u_resolution.x / 2.0);\n\n            vec4 mvPos = mvMatrix * vec4(clipPos, 1.0);\n            gl_Position = pMatrix * mvPos;\n            gl_PointSize = 24.0 * ( 24.0 / -mvPos.z );\n\n            float r = texelFetch(u_r, fc, 0).r;\n            float g = texelFetch(u_g, fc, 0).r;\n            float b = texelFetch(u_b, fc, 0).r;\n            float a = texelFetch(u_a, fc, 0).r;\n\n            v_color = vec4(r, g, b, a);\n\n        }`,\n\n        \"renderPatch.frag\":\n        `#version 300 es\n        precision highp float;\n\n        in vec4 v_color;\n\n        out vec4 fragColor;\n\n        void main(void) {\n            fragColor = v_color;\n        }`,\n\n        \"diffusePatch.vert\":\n        `#version 300 es\n        layout (location = 0) in vec2 a_index;\n        layout (location = 1) in vec2 b_index;\n\n        uniform vec2 u_half;\n        uniform sampler2D u_value;\n\n        out float v_value;\n\n        const float weight[9] = float[9](\n            0.077847, 0.123317, 0.077847,\n            0.123317, 0.195346, 0.123317,\n            0.077847, 0.123317, 0.077847\n        );\n\n        void main(void) {\n            vec2 clipPos = (b_index + u_half) * 2.0 - 1.0;  // (-1.0-1.0, -1.0-1.0)\n            gl_Position = vec4(clipPos, 0, 1.0);\n            gl_PointSize = 1.0;\n\n            ivec2 fc = ivec2(a_index);\n            float v = 0.0;\n            v += texelFetch(u_value, fc + ivec2(-1, -1), 0).r * weight[0];\n            v += texelFetch(u_value, fc + ivec2(-1,  0), 0).r * weight[1];\n            v += texelFetch(u_value, fc + ivec2(-1,  1), 0).r * weight[2];\n            v += texelFetch(u_value, fc + ivec2( 0, -1), 0).r * weight[3];\n            v += texelFetch(u_value, fc + ivec2( 0,  0), 0).r * weight[4];\n            v += texelFetch(u_value, fc + ivec2( 0,  1), 0).r * weight[5];\n            v += texelFetch(u_value, fc + ivec2( 1, -1), 0).r * weight[6];\n            v += texelFetch(u_value, fc + ivec2( 1,  0), 0).r * weight[7];\n            v += texelFetch(u_value, fc + ivec2( 1,  1), 0).r * weight[8];\n            v = v <= (1.0/256.0) ? 0.0 : v;\n            v_value = v;\n        }`,\n\n        \"diffusePatch.frag\":\n        `#version 300 es\n        precision highp float;\n        in float v_value;\n        layout (location = 0) out float fragColor;\n\n        void main(void) {\n            fragColor = v_value;\n        }`,\n\n        \"increasePatch.vert\":\n        `#version 300 es\n        precision highp float;\n\n        layout (location = 0) in vec2 a_index;\n        layout (location = 1) in vec2 b_index;\n\n        uniform vec2 u_resolution;\n        uniform vec2 u_half;\n\n        uniform sampler2D u_that_x;\n        uniform sampler2D u_that_y;\n\n        uniform bool u_use_vector;\n        uniform sampler2D u_texture;\n        uniform float u_value;\n\n        out float v_value;\n\n        void main() {\n\n            float _x = texelFetch(u_that_x, ivec2(a_index), 0).r;\n            float _y = texelFetch(u_that_y, ivec2(a_index), 0).r;\n            vec2 _pos = vec2(_x, _y);\n            vec2 oneToOne = ((_pos / u_resolution) + u_half) * 2.0 - 1.0;\n\n            gl_Position = vec4(oneToOne, 0.0, 1.0);\n            gl_PointSize = 1.0;\n\n            v_value = u_use_vector ? texelFetch(u_texture, ivec2(a_index), 0).r : u_value;\n        }`,\n\n        \"increasePatch.frag\":\n        `#version 300 es\n        precision highp float;\n        in float v_value;\n        layout (location = 0) out float fragColor;\n        void main() {\n            fragColor = v_value;\n        }`,\n\n        \"increaseVoxel.vert\":\n        `#version 300 es\n        precision highp float;\n\n        layout (location = 0) in vec2 a_index;\n        layout (location = 1) in vec2 b_index;\n\n        uniform vec2 u_resolution;\n        uniform vec3 v_resolution;\n        uniform float v_step;\n        uniform vec2 u_half;\n\n        uniform sampler2D u_that_x;\n        uniform sampler2D u_that_y;\n        uniform sampler2D u_that_z;\n\n        uniform bool u_use_vector;\n        uniform sampler2D u_texture;\n        uniform float u_value;\n\n        out float v_value;\n\n        void main() {\n            ivec2 fc = ivec2(a_index);\n            float _x = texelFetch(u_that_x, fc, 0).r;\n            float _y = texelFetch(u_that_y, fc, 0).r;\n            float _z = texelFetch(u_that_z, fc, 0).r;\n\n            _x = floor(_x / v_step); // 8   //  [0..64), if originally within [0..512)\n            _y = floor(_y / v_step); // 8\n            _z = floor(_z / v_step); // 8\n\n            int index = int(_z * v_resolution.x * v_resolution.y + _y * v_resolution.x + _x);\n            vec2 _pos = vec2(index % int(u_resolution.x), index / int(u_resolution.x));\n            vec2 oneToOne = ((_pos / u_resolution) + u_half) * 2.0 - 1.0;\n\n            gl_Position = vec4(oneToOne, 0.0, 1.0);\n            gl_PointSize = 1.0;\n\n            v_value = u_use_vector ? texelFetch(u_texture, ivec2(a_index), 0).r : u_value;\n        }`,\n        \"increaseVoxel.frag\":\n        `#version 300 es\n        precision highp float;\n        in float v_value;\n        layout (location = 0) out float fragColor;\n        void main() {\n            fragColor = v_value;\n        }`,\n\n        \"copyRGBA.vert\":\n        `#version 300 es\n        layout (location = 0) in vec2 a_index;\n        layout (location = 1) in vec2 b_index;\n        uniform vec2 u_resolution;\n        uniform vec2 u_half;\n\n        uniform ivec2 u_videoExtent;\n        uniform sampler2D u_videoTexture;\n\n        out vec4 v_value;\n        void main(void) {\n            ivec2 fc = ivec2(a_index);\n            int w = int(u_resolution.x);\n            int i = fc.y * w + fc.x;\n            ivec2 vp = ivec2(i % w, i / u_videoExtent.x);\n            vp.y = u_videoExtent.y - vp.y;\n\n            vec2 clipPos = (b_index + u_half) * 2.0 - 1.0;  // (-1.0-1.0, -1.0-1.0)\n            gl_Position = vec4(clipPos, 0.0, 1.0);\n            gl_PointSize = 1.0;\n            v_value = texelFetch(u_videoTexture, vp, 0);\n        }`,\n\n        \"copyRGBA.frag\":\n        `#version 300 es\n        precision highp float;\n        in vec4 v_value;\n        layout (location = 0) out float o_r;\n        layout (location = 1) out float o_g;\n        layout (location = 2) out float o_b;\n        layout (location = 3) out float o_a;\n        void main(void) {\n            o_r = v_value.r;\n            o_g = v_value.g;\n            o_b = v_value.b;\n            o_a = v_value.a;\n        }`,\n    }\n\n    function initBreedVAO() {\n        var allIndices = new Array(T * T * 2);\n        var divIndices = new Array(T * T * 2);\n        for (var j = 0; j < T; j++) {\n            for (var i = 0; i < T; i++) {\n                var ind = ((j * T) + i) * 2;\n                allIndices[ind + 0] = i;\n                allIndices[ind + 1] = j;\n                divIndices[ind + 0] = i / T;\n                divIndices[ind + 1] = j / T;\n            }\n        }\n\n        breedVAO = gl.createVertexArray();\n        gl.bindVertexArray(breedVAO);\n\n        var aBuffer = gl.createBuffer();\n        var bBuffer = gl.createBuffer();\n\n        var attrLocations = new Array(2);\n        attrLocations[0] = 0 // gl.getAttribLocation(prog, 'a_index'); a_index has layout location spec\n        attrLocations[1] = 1 // gl.getAttribLocation(prog, 'b_index'); b_index has layout location spec\n\n        var attrStrides = new Array(2);\n        attrStrides[0] = 2;\n        attrStrides[1] = 2;\n\n        setBufferAttribute([aBuffer, bBuffer], [allIndices, divIndices], attrLocations, attrStrides);\n        gl.bindVertexArray(null);\n    }\n\n    function initPatchVAO() {\n        var w;\n        var h;\n        if (dimension == 2) {\n            var w = FW;\n            var h = FH;\n        } else {\n            var w = VTW;\n            var h = VTH;\n        }\n        var allIndices = new Array(w * h * 2);\n        var divIndices = new Array(w * h * 2);\n        for (var j = 0; j < h; j++) {\n            for (var i = 0; i < w; i++) {\n                var ind = ((j * w) + i) * 2;\n                allIndices[ind + 0] = i;\n                allIndices[ind + 1] = j;\n                divIndices[ind + 0] = i / w;\n                divIndices[ind + 1] = j / h;\n            }\n        }\n\n        patchVAO = gl.createVertexArray();\n        gl.bindVertexArray(patchVAO);\n\n        var aBuffer = gl.createBuffer();\n        var bBuffer = gl.createBuffer();\n\n        var attrLocations = new Array(2);\n        attrLocations[0] = 0 // gl.getAttribLocation(prog, 'a_index'); a_index has layout location spec\n        attrLocations[1] = 1 // gl.getAttribLocation(prog, 'b_index'); b_index has layout location spec\n\n        var attrStrides = new Array(2);\n        attrStrides[0] = 2;\n        attrStrides[1] = 2;\n\n        setBufferAttribute([aBuffer, bBuffer], [allIndices, divIndices], attrLocations, attrStrides);\n        gl.bindVertexArray(null);\n    }\n\n    function makePrimitive(name, uniforms, vao) {\n        var vs = createShader(name + \".vert\", shaders[name+'.vert']);\n        var fs = createShader(name + \".frag\", shaders[name+'.frag']);\n\n        var prog = createProgram(vs, fs);\n\n        var uniLocations = {};\n        uniforms.forEach(function (n) {\n            uniLocations[n] = gl.getUniformLocation(prog, n);\n        });\n\n        return {program: prog, uniLocations: uniLocations, vao: vao};\n    }\n\n    function drawBreedProgram() {\n        return makePrimitive(\"drawBreed\", [\"u_resolution\", \"u_half\", \"u_x\", \"u_y\", \"u_r\", \"u_g\", \"u_b\", \"u_a\"], breedVAO);\n    }\n\n    function drawPatchProgram() {\n        return makePrimitive(\"drawPatch\", [\"u_resolution\", \"u_half\", \"u_a\", \"u_r\", \"u_g\", \"u_b\"], patchVAO);\n    }\n\n    function debugBreedProgram() {\n        return makePrimitive(\"debug\", [\"u_value\", \"u_half\"], breedVAO);\n    }\n\n    function debugPatchProgram() {\n        return makePrimitive(\"debug\", [\"u_value\", \"u_half\"], patchVAO);\n    }\n\n    function renderBreedProgram() {\n        return makePrimitive(\"renderBreed\", [\"mvMatrix\", \"pMatrix\", \"u_resolution\", \"u_half\", \"u_x\", \"u_y\", \"u_z\", \"u_r\", \"u_g\", \"u_b\", \"u_a\", \"u_d\", \"u_dotSize\", \"u_use_vector\"], breedVAO);\n    }\n\n    function renderPatchProgram() {\n        return makePrimitive(\"renderPatch\", [\"mvMatrix\", \"pMatrix\", \"u_resolution\", \"u_half\", \"v_resolution\", \"v_step\", \"u_r\", \"u_g\", \"u_b\", \"u_a\"], patchVAO);\n    }\n\n    function diffusePatchProgram() {\n        return makePrimitive(\"diffusePatch\", [\"u_value\", \"u_half\",], patchVAO);\n    }\n\n    function increasePatchProgram() {\n        return makePrimitive(\"increasePatch\", [\"u_resolution\", \"u_half\", \"u_that_x\", \"u_that_y\", \"u_use_vector\", \"u_texture\", \"u_value\"], breedVAO);\n    }\n\n    function increaseVoxelProgram() {\n        return makePrimitive(\"increaseVoxel\", [\"u_resolution\", \"u_half\", \"v_resolution\", \"v_step\", \"u_that_x\", \"u_that_y\", \"u_that_z\", \"u_use_vector\", \"u_texture\", \"u_value\"], breedVAO);\n    }\n\n    function copyRGBAProgram() {\n        return makePrimitive(\"copyRGBA\", [\"u_resolution\", \"u_half\", \"u_videoExtent\", \"u_videoTexture\"], breedVAO);\n    }\n\n    function createShader(id, source) {\n        var type;\n        if (id.endsWith(\".vert\")) {\n            type = gl.VERTEX_SHADER;\n        } else if (id.endsWith(\".frag\")) {\n            type = gl.FRAGMENT_SHADER;\n        }\n\n        var shader = gl.createShader(type);\n\n        if (!source) {\n            var scriptElement = document.getElementById(id);\n            if(!scriptElement){return;}\n            source = scriptElement.text;\n        }\n        gl.shaderSource(shader, source);\n        gl.compileShader(shader);\n        var success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n        if (success) {\n            return shader;\n        }\n        console.log(source);\n        console.log(gl.getShaderInfoLog(shader));\n        alert(gl.getShaderInfoLog(shader));\n        gl.deleteShader(shader);\n    }\n\n    function createProgram(vertexShader, fragmentShader) {\n        var program = gl.createProgram();\n        gl.attachShader(program, vertexShader);\n        gl.attachShader(program, fragmentShader);\n        gl.linkProgram(program);\n        var success = gl.getProgramParameter(program, gl.LINK_STATUS);\n        if (success) {\n            return program;\n        }\n\n        console.log(gl.getProgramInfoLog(program));\n        //    alert(gl.getProgramInfoLog(program));\n        gl.deleteProgram(program);\n    }\n\n    function createTexture(data, type, width, height) {\n        if (!type) {\n            type = gl.UNSIGNED_BYTE;\n        }\n        if (!width) {\n            width = T;\n        }\n        if (!height) {\n            height = T;\n        }\n\n        var tex = gl.createTexture();\n        state.bindTexture(gl.TEXTURE_2D, tex);\n\n        gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n        gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n        gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, false);\n\n        gl.pixelStorei(gl.UNPACK_ROW_LENGTH, width);\n        gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, height);\n        gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0);\n        gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0);\n        gl.pixelStorei(gl.UNPACK_SKIP_IMAGES, 0);\n\n        if (type == gl.UNSIGNED_BYTE) {\n            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, type, data, 0);\n        } else if (type == gl.R32F) {\n            gl.texImage2D(gl.TEXTURE_2D, 0, type, width, height, 0, gl.RED, gl.FLOAT, data, 0);\n        } else {\n            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, width, height, 0, gl.RGBA, type, data, 0);\n        }\n\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n        state.bindTexture(gl.TEXTURE_2D, null);\n        return tex;\n    }\n\n    function makeFramebuffer(format, width, height) {\n        if (!format) {\n            format = gl.UNSIGNED_BYTE;\n        }\n        if (!width) {\n            width = T;\n        }\n        if (!height) {\n            height = T;\n        }\n\n        var tex;\n        if (format == gl.FLOAT) {\n            tex = createTexture(new Float32Array(width * height * 4), format, width, height);\n        }\n        if (format == gl.R32F) {\n            tex = createTexture(new Float32Array(width * height), format, width, height);\n        }\n        if (format == gl.UNSIGNED_BYTE) {\n            tex = createTexture(new Uint8Array(width * height * 4), format, width, height);\n        }\n\n        var buffer = gl.createFramebuffer();\n\n        gl.bindFramebuffer(gl.FRAMEBUFFER, buffer);\n        state.bindTexture(gl.TEXTURE_2D, tex);\n\n        if (format == gl.R32F) {\n            gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, width, height, 0, gl.RED, gl.FLOAT, null);\n        } else if (format == gl.UNSIGNED_BYTE) {\n            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, format, null);\n        } else {\n            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, width, height, 0, gl.RGBA, format, null);\n        }\n        state.bindTexture(gl.TEXTURE_2D, null);\n        gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n        if (withThreeJS) {\n            var target = new THREE.WebGLRenderTarget(width, height);\n            renderer.properties.get(target).__webglFramebuffer = buffer;\n            gl.deleteTexture(tex);\n            return target;\n        } else {\n            return buffer;\n        }\n    }\n\n    function setTargetBuffer(buffer, tex) {\n        renderer.setRenderTarget(buffer);\n        if (buffer) {\n            gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);\n        }\n    }\n\n    function setTargetBuffers(buffer, tex) {\n        if (!buffer) {\n            renderer.setRenderTarget(null, gl.DRAW_FRAMEBUFFER);\n            return;\n        }\n\n        var list = [];\n        renderer.setRenderTarget(buffer, gl.DRAW_FRAMEBUFFER);\n        for (var i = 0; i < tex.length; i++) {\n            var val = gl.COLOR_ATTACHMENT0 + i;\n            gl.framebufferTexture2D(gl.DRAW_FRAMEBUFFER, val, gl.TEXTURE_2D, tex[i], 0);\n            list.push(val);\n        }\n        gl.drawBuffers(list);\n    }\n\n    function setBufferAttribute(buffers, data, attrL, attrS) {\n        for (var i in buffers) {\n            gl.bindBuffer(gl.ARRAY_BUFFER, buffers[i]);\n            gl.bufferData(gl.ARRAY_BUFFER,\n                          new Float32Array(data[i]), gl.STATIC_DRAW);\n            gl.enableVertexAttribArray(attrL[i]);\n            gl.vertexAttribPointer(attrL[i], attrS[i], gl.FLOAT, false, 0, 0);\n        }\n    }\n\n    function noBlend() {\n        if (withThreeJS) {\n            state.setCullFace(THREE.CullFaceNone);\n            state.setBlending(THREE.NoBlending);\n        } else {\n            gl.disable(gl.BLEND);\n        }\n    }\n\n    function normalBlend() {\n        if (withThreeJS) {\n            state.setBlending(THREE.NormalBlending);\n        } else {\n            gl.enable(gl.BLEND);\n            gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n        }\n    }\n\n    function oneBlend() {\n        if (withThreeJS) {\n            state.setBlending(THREE.CustomBlending, THREE.AddEquation, THREE.OneFactor, THREE.OneFactor);\n        } else {\n            gl.enable(gl.BLEND);\n            gl.blendFunc(gl.ONE, gl.ONE);\n        }\n    }\n\n    function textureCopy(obj, src, dst) {\n        var w;\n        var h;\n        var readbuffer;\n        var writebuffer;\n\n        if (obj.constructor === Breed) {\n            w = T;\n            h = T;\n            readbuffer = readFramebufferBreed;\n            writebuffer = writeFramebufferBreed;\n        } else if (obj.constructor === Patch) {\n            w = FW;\n            h = FH;\n            readbuffer = readFramebufferPatch;\n            writebuffer = writeFramebufferPatch;\n        }\n\n        renderer.setRenderTarget(readbuffer, gl.READ_FRAMEBUFFER);\n        gl.framebufferTexture2D(gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, src, 0);\n\n        renderer.setRenderTarget(writebuffer, gl.DRAW_FRAMEBUFFER);\n        gl.framebufferTexture2D(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, dst, 0);\n\n        gl.blitFramebuffer(0, 0, w, h, 0, 0, w, h, gl.COLOR_BUFFER_BIT, gl.NEAREST);\n        setTargetBuffer(null, null);\n    }\n\n    function updateOwnVariable(obj, name, optData) {\n        var width;\n        var height;\n        var ary;\n        if (obj.constructor === Breed) {\n            var width = T;\n            var height = T;\n        } else if (obj.constructor === Patch) {\n            var width = FW;\n            var height = FH;\n        } else {\n            var width = VTW;\n            var height = VTH;\n        }\n\n        var ary = optData || new Float32Array(width * height);\n\n        if (obj[name]) {\n            gl.deleteTexture(obj[name]);\n        }\n        if (obj[N + name]) {\n            gl.deleteTexture(obj[N + name]);\n        }\n\n        obj.own[name] = name;\n        obj[name] = createTexture(ary, gl.R32F, width, height);\n        obj[N + name] = createTexture(ary, gl.R32F, width, height);\n    }\n\n    function removeOwnVariable(obj, name) {\n        delete obj.own[name];\n        if (obj[name]) {\n            gl.deleteTexture(obj[name]);\n            delete obj[name];\n        }\n        if (obj[N + name]) {\n            gl.deleteTexture(obj[N  + name]);\n            delete obj[N + name];\n        }\n    }\n\n    function update(cls, name, fields, env) {\n        var stringify = (obj) => {\n            var type = Object.prototype.toString.call(obj);\n            if (type === \"[object Object]\") {\n                var pairs = [];\n                for (var k in obj) {\n                    if (!obj.hasOwnProperty(k)) continue;\n                    pairs.push([k, stringify(obj[k])]);\n                }\n                pairs.sort((a, b) => a[0] < b[0] ? -1 : 1);\n                pairs = pairs.map(v => '\"' + v[0] + '\":' + v[1]);\n                return \"{\" + pairs + \"}\";\n            }\n            if (type === \"[object Array]\") {\n                return \"[\" + obj.map(v => stringify(v)) + \"]\";\n            }\n            return JSON.stringify(obj);\n        };\n\n        var obj = env[name];\n        if (!obj) {\n            obj = new cls();\n            for (var i = 0; i < fields.length; i++) {\n                updateOwnVariable(obj, fields[i]);\n            }\n            env[name] = obj;\n            return true;\n        }\n\n        var oldOwn = obj.own;\n        var toBeDeleted = [];  // [<str>]\n        var toBeCreated = [];  // [<str>]\n        var newOwn = {};\n\n        // common case: when the existing own and fields are the same\n        for (var i = 0; i < fields.length; i++) {\n            var k = fields[i];\n            newOwn[k] = k;\n        }\n        if (stringify(newOwn) === stringify(oldOwn)) {\n            return false;\n        }\n\n        // other case: get things into toBeDeleted and toBeCreated, and toBeMoved\n        for (var k in oldOwn) {\n            if (fields.indexOf(k) < 0) {\n                toBeDeleted.push(k)\n            }\n        }\n        for (var i = 0; i < fields.length; i++) {\n            var k = fields[i];\n            if (!oldOwn[k]) {\n                toBeCreated.push(k);\n            }\n        }\n\n        toBeCreated.forEach((k) => updateOwnVariable(obj, k));\n        toBeDeleted.forEach((k) => removeOwnVariable(obj, k));\n        return true;\n    }\n\n    function programFromTable(table, vert, frag, name) {\n        return (function () {\n            var debugName = name;\n            if (debugName === \"set\") {\n            }\n            var prog = createProgram(createShader(name + \".vert\", vert),\n                                     createShader(name + \".frag\", frag));\n            var vao = breedVAO;\n            var uniLocations = {};\n\n\n            var forBreed = table.forBreed;\n            var viewportW = forBreed ? T : FW;\n            var viewportH = forBreed ? T : FH;\n            var hasPatchInput = table.hasPatchInput;\n\n            table.defaultUniforms.forEach(function(n) {\n                uniLocations[n] = gl.getUniformLocation(prog, n);\n            });\n\n            table.uniformTable.keysAndValuesDo((key, entry) => {\n                var uni = table.uniform(entry);\n                uniLocations[uni] = gl.getUniformLocation(prog, uni);\n            });\n\n            table.scalarParamTable.keysAndValuesDo((key, entry) => {\n                var name = entry[2];\n                var uni = \"u_scalar_\" + name;\n                uniLocations[uni] = gl.getUniformLocation(prog, uni);\n            });\n\n            return function(objects, outs, ins, params) {\n                // objects: {varName: object}\n                // outs: [[varName, fieldName]]\n                // ins: [[varName, fieldName]]\n                // params: {shortName: value}\n            if (debugName === \"set\") {\n            }\n                var object = objects[\"this\"];\n\n                var targets = outs.map(function(pair) {return objects[pair[0]][N + pair[1]]});\n                if (forBreed) {\n                    setTargetBuffers(framebufferBreed, targets);\n                } else {\n                    outs.forEach((pair) => {\n                        textureCopy(objects[pair[0]],\n                                    objects[pair[0]][pair[1]],\n                                    objects[pair[0]][N + pair[1]])});\n                    setTargetBuffers(framebufferPatch, targets);\n                }\n\n                state.useProgram(prog);\n                gl.bindVertexArray(vao);\n                noBlend();\n\n                if (!withThreeJS) {\n                    gl.viewport(0, 0, viewportW, viewportH);\n                }\n\n                gl.uniform2f(uniLocations[\"u_resolution\"], FW, FH);\n                gl.uniform2f(uniLocations[\"u_half\"], 0.5/viewportW, 0.5/viewportH);\n\n                var offset = 0;\n                if (!forBreed || hasPatchInput) {\n                    state.activeTexture(gl.TEXTURE0);\n                    state.bindTexture(gl.TEXTURE_2D, object.x);\n                    gl.uniform1i(uniLocations[\"u_that_x\"], 0);\n\n                    state.activeTexture(gl.TEXTURE1);\n                    state.bindTexture(gl.TEXTURE_2D, object.y);\n                    gl.uniform1i(uniLocations[\"u_that_y\"], 1);\n                    offset = 2;\n                }\n\n                for (var ind = 0; ind < ins.length; ind++) {\n                    var pair = ins[ind];\n                    var glIndex = gl.TEXTURE0 + ind + offset;\n                    var k = pair[1]\n                    var val = objects[pair[0]][k];\n                    state.activeTexture(glIndex);\n                    state.bindTexture(gl.TEXTURE_2D, val);\n                    gl.uniform1i(uniLocations[\"u\" + \"_\" + pair[0] + \"_\" + k], ind + offset);\n                }\n\n                for (var k in params) {\n                    var val = params[k];\n                    if (val.constructor == WebGLTexture) {\n                        var glIndex = gl.TEXTURE0 + ind + offset;\n                        state.activeTexture(glIndex);\n                        state.bindTexture(gl.TEXTURE_2D, val);\n                        gl.uniform1i(uniLocations[\"u_vector_\" + k], ind + offset);\n                        ind++;\n                    } else {\n                        gl.uniform1f(uniLocations[\"u_scalar_\" + k], val);\n                    }\n                }\n\n                gl.drawArrays(gl.POINTS, 0, object.count);\n                gl.flush();\n                setTargetBuffers(null, null);\n                for (var i = 0; i < outs.length; i++) {\n                    var pair = outs[i];\n                    var o = objects[pair[0]];\n                    var name = pair[1];\n                    var tmp = o[name];\n                    o[name] = o[N + name];\n                    o[N + name] = tmp;\n                }\n                gl.bindVertexArray(null);\n            }\n        })();\n    }\n\n    function programFromTable3(table, vert, frag, name) {\n        return (function () {\n            var debugName = name;\n            if (debugName === \"setCoreColor\") {\n            }\n            var prog = createProgram(createShader(name + \".vert\", vert),\n                                     createShader(name + \".frag\", frag));\n            var vao = breedVAO;\n            var uniLocations = {};\n\n            var forBreed = table.forBreed;\n            var viewportW = forBreed ? T : VTW;\n            var viewportH = forBreed ? T : VTH;\n            var hasPatchInput = table.hasPatchInput;\n\n            table.defaultUniforms.forEach(function(n) {\n                uniLocations[n] = gl.getUniformLocation(prog, n);\n            });\n\n            table.uniformTable.keysAndValuesDo((key, entry) => {\n                var uni = table.uniform(entry);\n                uniLocations[uni] = gl.getUniformLocation(prog, uni);\n            });\n\n            table.scalarParamTable.keysAndValuesDo((key, entry) => {\n                var name = entry[2];\n                var uni = \"u_scalar_\" + name;\n                uniLocations[uni] = gl.getUniformLocation(prog, uni);\n            });\n\n            return function(objects, outs, ins, params) {\n                // objects: {varName: object}\n                // outs: [[varName, fieldName]]\n                // ins: [[varName, fieldName]]\n                // params: {shortName: value}\n                if (debugName === \"setCoreColor\") {\n                }\n                var object = objects[\"this\"];\n\n                var targets = outs.map(function(pair) {return objects[pair[0]][N + pair[1]]});\n                if (forBreed) {\n                    setTargetBuffers(framebufferBreed, targets);\n                } else {\n                    outs.forEach((pair) => {\n                        textureCopy(objects[pair[0]],\n                                    objects[pair[0]][pair[1]],\n                                    objects[pair[0]][N + pair[1]])});\n                    setTargetBuffers(framebufferPatch, targets);\n                }\n\n                state.useProgram(prog);\n                gl.bindVertexArray(vao);\n                noBlend();\n\n                gl.uniform3f(uniLocations[\"u_resolution\"], VW, VH, VD);\n                gl.uniform3f(uniLocations[\"v_resolution\"], VW/VS, VH/VS, VD/VS);\n                gl.uniform1f(uniLocations[\"v_step\"], VS);\n                gl.uniform2f(uniLocations[\"u_half\"], 0.5/viewportW, 0.5/viewportH);\n\n                var offset = 0;\n                if (!forBreed || hasPatchInput) {\n                    state.activeTexture(gl.TEXTURE0);\n                    state.bindTexture(gl.TEXTURE_2D, object.x);\n                    gl.uniform1i(uniLocations[\"u_that_x\"], 0);\n\n                    state.activeTexture(gl.TEXTURE1);\n                    state.bindTexture(gl.TEXTURE_2D, object.y);\n                    gl.uniform1i(uniLocations[\"u_that_y\"], 1);\n\n                    state.activeTexture(gl.TEXTURE2);\n                    state.bindTexture(gl.TEXTURE_2D, object.z);\n                    gl.uniform1i(uniLocations[\"u_that_z\"], 2);\n\n                    offset = 3;\n                }\n\n                for (var ind = 0; ind < ins.length; ind++) {\n                    var pair = ins[ind];\n                    var glIndex = gl.TEXTURE0 + ind + offset;\n                    var k = pair[1]\n                    var val = objects[pair[0]][k];\n                    state.activeTexture(glIndex);\n                    state.bindTexture(gl.TEXTURE_2D, val);\n                    gl.uniform1i(uniLocations[\"u\" + \"_\" + pair[0] + \"_\" + k], ind + offset);\n                }\n\n                for (var k in params) {\n                    var val = params[k];\n                    if (val.constructor == WebGLTexture) {\n                        var glIndex = gl.TEXTURE0 + ind + offset;\n                        state.activeTexture(glIndex);\n                        state.bindTexture(gl.TEXTURE_2D, val);\n                        gl.uniform1i(uniLocations[\"u_vector_\" + k], ind + offset);\n                        ind++;\n                    } else {\n                        gl.uniform1f(uniLocations[\"u_scalar_\" + k], val);\n                    }\n                }\n\n                gl.drawArrays(gl.POINTS, 0, object.count);\n                gl.flush();\n                setTargetBuffers(null, null);\n                for (var i = 0; i < outs.length; i++) {\n                    var pair = outs[i];\n                    var o = objects[pair[0]];\n                    var name = pair[1];\n                    var tmp = o[name];\n                    o[name] = o[N + name];\n                    o[N + name] = tmp;\n                }\n                gl.bindVertexArray(null);\n            }\n        })();\n    }\n\n    function initFramebuffers() {\n        debugTextureBreed = createTexture(new Float32Array(T*T*4), gl.FLOAT, T, T);\n        debugTexturePatch = createTexture(new Float32Array(FW*FH*4), gl.FLOAT, FW, FH);\n\n        framebufferBreed = makeFramebuffer(gl.R32F, T, T);\n        framebufferPatch = makeFramebuffer(gl.R32F, FW, FH);\n\n        framebufferU8RGBA = makeFramebuffer(gl.UNSIGNED_BYTE, FW, FH);\n\n        framebufferDiffuse = makeFramebuffer(gl.R32F, FW, FH);\n\n        readFramebufferBreed = makeFramebuffer(gl.R32F, T, T);\n        readFramebufferPatch = makeFramebuffer(gl.R32F, FW, FH);\n\n        writeFramebufferBreed = makeFramebuffer(gl.R32F, T, T);\n        writeFramebufferPatch = makeFramebuffer(gl.R32F, FW, FH);\n\n        framebufferDBreed = makeFramebuffer(gl.FLOAT, T, T);\n        framebufferDPatch = makeFramebuffer(gl.FLOAT, FW, FH);\n    }\n\n    function Shadama() {\n        this.env = {};  // {name: value}\n        this.scripts = {};    // {name: [function, inOutParam]}\n        this.statics = {};    // {name: function}\n        this.staticsList = []; // [name];\n        this.steppers = {};  // {name: name}\n        this.triggers = {};  // {triggerName: ShadamaTrigger}\n        this.media = {}; // {name: ShadamaTrigger}\n\n        this.loadTime = 0.0;\n\n        this.compilation = null;\n        this.setupCode = null;\n        this.programName = null;\n\n        this.readPixelArray = null;\n        this.readPixelCallback = null;\n    }\n\n    Shadama.prototype.evalShadama = function(source) {\n        // evaluates ohm compiled shadama code (js code) so that variables are\n        // accessible inside the eval\n        var env = this.env;\n        var scripts = this.scripts;\n        return eval(source);\n    }\n\n    Shadama.prototype.loadShadama = function(id, source) {\n        var newSetupCode;\n        var oldProgramName = this.programName;\n        var schemaChange = false;\n        this.statics = {};\n        this.staticsList = [];\n        this.scripts = {};\n        this.triggers = {};\n        this.clearMedia();\n        var newData = [];\n        if (!source) {\n            var scriptElement = document.getElementById(id);\n            if(!scriptElement){return \"\";}\n            source = scriptElement.text;\n        }\n        this.cleanUpEditorState();\n        try {\n            var result = translate(source, \"TopLevel\", this.reportError.bind(this));\n        } catch (e) {\n            this.reportError(e);\n            return;\n        }\n        this.compilation = result;\n\n        if (!result) {return \"\";}\n        if (oldProgramName != result[\"_programName\"]) {\n            this.resetSystem();\n        }\n        this.programName = result[\"_programName\"];\n        delete result[\"_programName\"];\n\n        for (var k in result) {\n            var entry = result[k];\n            if (entry[0] == \"static\") { // static function case\n                var src = entry[2];\n                var js = entry[1];\n                this.statics[k] = this.evalShadama(js);\n                this.staticsList.push(k);\n                this.env[k] = new ShadamaFunction(k, this);\n                if (k === \"setup\") {\n                    newSetupCode = src;\n                }\n            } else {\n                var js = entry[3];\n                if (js[0] === \"updateBreed\") {\n                    schemaChange = update(Breed, js[1], js[2], this.env) || schemaChange;\n                } else if (js[0] === \"updatePatch\") {\n                    schemaChange = update(Patch, js[1], js[2], this.env) || schemaChange;\n                } else if (js[0] === \"updateScript\") {\n                    var table = entry[0];\n                    var func = dimension == 2 ? programFromTable : programFromTable3;\n                    this.scripts[js[1]] = [ func(table, entry[1], entry[2], js[1]),\n                                      table.insAndParamsAndOuts()];\n                } else if (js[0] === \"event\") {\n                    this.env[js[1]] = new ShadamaEvent();\n                } else if (js[0] === \"trigger\") {\n                    this.triggers[k] = new ShadamaTrigger(js[1], js[2]);\n                } else if (js[0] === \"data\") {\n                    this.env[js[1]] = new ShadamaEvent();\n                    if (js[3] == \"image\") {\n                        this.env[js[1]] = this.loadImage(js[2]);\n                    } else if (js[3] == \"audio\") {\n                        this.env[js[1]] = this.loadAudio(js[2]);\n                    } else if (js[3] == \"csv\") {\n                        this.env[js[1]] = this.loadCSV(js[2]);\n                    } else if (js[3] == \"video\" || js[3] == \"camera\") {\n                        var evt = this.loadVideo(js[2], js[3] == \"camera\");\n                        this.env[js[1]] = evt;\n                        this.media[js[1]] = evt;\n                    }\n\n                    if (newData.length == 0) {\n                        newData = js[1];\n                    } else {\n                        newData = [\"and\", js[1], newData];\n                    }\n                }\n            }\n        }\n\n        if (this.setupCode !== newSetupCode) {\n            schemaChange = true;\n            this.setupCode = newSetupCode;\n        }\n\n        this.populateList(this.staticsList);\n\n        // setup should be triggered in response to receicing 'load event',\n        // but for now we keep the old way\n\n        if (schemaChange) {\n            if (newData.length === 0) {\n                var success = this.callSetup();\n                if (!success) {return };\n            } else {\n                this.loadTime = window.performance.now() / 1000.0;\n                this.env[\"time\"] = 0.0;\n                var trigger = new ShadamaTrigger(newData, [\"step\", \"setup\"]);\n                this.triggers[\"_trigger\" + trigger.trigger.toString()] = trigger;\n            }\n        }\n//        this.runLoop();\n        return source;\n    }\n\n    Shadama.prototype.setTarget = function(aTexture) {\n        targetTexture = aTexture;\n    }\n\n    function webglTexture() {\n        return withThreeJS ? (targetTexture && renderer.properties.get(targetTexture).__webglTexture || null) : null;\n    }\n\n    Shadama.prototype.setReadPixelCallback = function(func) {\n        this.readPixelCallback = func;\n    }\n\n    Shadama.prototype.makeOnAfterRender = function() {\n        return function(renderer, scene, camera, geometry, material, group) {\n            var mesh = this;\n            var pMatrix = camera.projectionMatrix;\n            var mvMatrix = mesh.modelViewMatrix;\n           // mvpMatrix.multiply(modelViewMatrix);\n\n            for (var i = 0; i < renderRequests.length; i++) {\n                var item = renderRequests[i];\n                if (item.constructor == Breed || item.constructor == Patch) {\n                    item.realRender(mvMatrix, pMatrix);\n                }\n            }\n            renderRequests.length = 0;\n        }\n    }\n\n    Shadama.prototype.readPixels = function() {\n        var width = FW;\n        var height = FH;\n\n        if (!this.readPixelArray) {\n            this.readPixelArray = new Uint8Array(width * height * 4);\n        }\n        gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, this.readPixelArray);\n\n        var clamped = new Uint8ClampedArray(this.readPixelArray);\n        var img = new ImageData(clamped, width, height);\n        gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n        return img;\n    }\n\n    Shadama.prototype.debugDisplay = function(objName, name) {\n        var object = this.env[objName];\n        var forBreed = object.constructor == Breed;\n        var width = forBreed ? T : FW;\n        var height = forBreed ? T : FH;\n\n        if (!debugCanvas1) {\n            debugCanvas1 = document.getElementById(\"debugCanvas1\");\n            if (!debugCanvas1) {\n                debugCanvas1 = document.createElement(\"canvas\");\n            }\n            debugCanvas1.width = width;\n            debugCanvas1.height = height;\n            if (domTools) {\n                document.body.appendChild(debugCanvas1);\n            }\n        }\n\n        var prog = programs[forBreed ? \"debugBreed\" : \"debugPatch\"];\n\n        if (forBreed) {\n            setTargetBuffer(framebufferDBreed, debugTextureBreed);\n        } else {\n            setTargetBuffer(framebufferDPatch, debugTexturePatch);\n        }\n\n        state.useProgram(prog.program);\n        gl.bindVertexArray(prog.vao);\n\n        var tex = object[name];\n\n        state.activeTexture(gl.TEXTURE0);\n        state.bindTexture(gl.TEXTURE_2D, tex);\n\n        if (!withThreeJS) {\n            gl.viewport(0, 0, width, height);\n        }\n        gl.uniform1i(prog.uniLocations[\"u_value\"], 0);\n        gl.uniform2f(prog.uniLocations[\"u_half\"], 0.5/width, 0.5/height);\n\n        if (withThreeJS) {\n            renderer.setClearColor(new THREE.Color(0x000000));\n            renderer.clearColor();\n        } else {\n            gl.clearColor(0.0, 0.0, 0.0, 0.0);\n            gl.clear(gl.COLOR_BUFFER_BIT);\n        }\n\n        noBlend();\n\n        gl.drawArrays(gl.POINTS, 0, width * height);\n        gl.flush();\n\n        debugArray = new Float32Array(width * height * 4);\n        debugArray1 = new Float32Array(width * height);\n        debugArray2 = new Uint8ClampedArray(width * height * 4);\n        gl.readPixels(0, 0, width, height, gl.RGBA, gl.FLOAT, debugArray, 0);\n\n        for (var i = 0; i < width * height; i++) {\n            debugArray1[i] = debugArray[i * 4 + 0];\n        }\n\n        for (var i = 0; i < width * height; i++) {\n            debugArray2[i * 4 + 0] = debugArray[i * 4 + 0] * 255;\n            debugArray2[i * 4 + 1] = debugArray[i * 4 + 1] * 255;\n            debugArray2[i * 4 + 2] = debugArray[i * 4 + 2] * 255;\n            debugArray2[i * 4 + 3] = debugArray[i * 4 + 3] * 255;\n        }\n\n        var img = new ImageData(debugArray2, width, height);\n        debugCanvas1.getContext(\"2d\").putImageData(img, 0, 0);\n        setTargetBuffer(null, null);\n\n        gl.bindVertexArray(null);\n        return debugArray1;\n    }\n\n    Shadama.prototype.readValues = function(object, name, x, y, w, h) {\n        var forBreed = object.constructor == Breed;\n        var maxWidth = forBreed ? T : FW;\n        var maxHeight = forBreed ? T : FH;\n\n        if (x < 0 || y < 0 || x >= maxWidth || y >= maxHeight\n            || x + w >= maxWidth || y + h >= maxHeight) {\n            var error = new Error(\"runtime error\");\n            error.reason = `coordiate is out of bounds`;\n            error.expected = `coordiate is out of bounds`;\n            error.pos = -1;\n            error.src = null;\n            throw error;\n        }\n\n        var prog = programs[forBreed ? \"debugBreed\" : \"debugPatch\"];\n\n        if (forBreed) {\n            setTargetBuffer(framebufferDBreed, debugTextureBreed);\n        } else {\n            setTargetBuffer(framebufferDPatch, debugTexturePatch);\n        }\n\n        state.useProgram(prog.program);\n        gl.bindVertexArray(prog.vao);\n\n        var tex = object[name];\n\n        state.activeTexture(gl.TEXTURE0);\n        state.bindTexture(gl.TEXTURE_2D, tex);\n\n        if (!withThreeJS) {\n            gl.viewport(0, 0, maxWidth, maxHeight);\n        }\n        gl.uniform1i(prog.uniLocations[\"u_value\"], 0);\n        gl.uniform2f(prog.uniLocations[\"u_half\"], 0.5/maxWidth, 0.5/maxHeight);\n\n        if (withThreeJS) {\n            renderer.setClearColor(new THREE.Color(0x000000));\n            renderer.clearColor();\n        } else {\n            gl.clearColor(0.0, 0.0, 0.0, 0.0);\n            gl.clear(gl.COLOR_BUFFER_BIT);\n        }\n\n        noBlend();\n\n        gl.drawArrays(gl.POINTS, 0, maxWidth * maxHeight);\n        gl.flush();\n\n        debugArray = new Float32Array(w * h * 4);\n        debugArray1 = new Float32Array(w * h);\n        gl.readPixels(x, y, w, h, gl.RGBA, gl.FLOAT, debugArray, 0);\n\n        setTargetBuffer(null, null);\n        gl.bindVertexArray(null);\n\n        if (w == 1 && h == 1) {\n            return debugArray[0];\n        }\n\n        for (var i = 0; i < w * h; i++) {\n            debugArray1[i] = debugArray[i * 4 + 0];\n        }\n\n        return debugArray1;\n    }\n\n    Shadama.prototype.resetSystem = function() {\n        for (var s in this.steppers) {\n            var e = this.detectEntry(s);\n            if (e) {\n                this.stopClock(e.clock);\n            }\n        }\n        this.removeAll();\n\n        this.scripts = {};\n        this.statics = {};\n        this.steppers = {};\n        this.setupCode = null;\n        this.programName = null;\n\n        renderRequests = [];\n\n        for (var o in this.env) {\n            var obj = this.env[o];\n            if (typeof obj == \"object\" && (obj.constructor == Breed || obj.constructor == Patch)) {\n                for (var k in obj.own) {\n                    var tex = obj[k];\n                    if (tex.constructor === WebGLTexture) {\n                        gl.deleteTexture(obj[k]);\n                    }\n                }\n                delete this.env[o];\n            }\n        }\n    }\n\n    Shadama.prototype.updateCode = function() {\n        if (!editor) {return;}\n        var code = editor.getValue();\n        this.loadShadama(null, code);\n        this.maybeRunner();\n        if (!this.programName) {\n            this.programName = prompt(\"Enter the program name:\", \"My Cool Effect!\");\n            if (!this.programName) {\n                alert(\"program not saved\");\n                return;\n            }\n            code = \"program \" + '\"' + this.programName + '\"\\n' + code;\n            editor.setValue(code);\n        }\n        localStorage.setItem(this.programName + \".shadama\", code);\n        this.initFileList(this.programName);\n    }\n\n    Shadama.prototype.callSetup = function() {\n        this.loadTime = window.performance.now() / 1000.0;\n        this.env[\"time\"] = 0.0;\n        if (this.statics[\"setup\"]) {\n            try {\n                this.statics[\"setup\"](this.env);\n            } catch (e) {\n                this.reportError(e);\n                return false;\n            }\n        }\n        return true;\n    }\n\n    Shadama.prototype.addListeners = function(aCanvas) {\n        if (!domTools) {return;}\n        var that = this;\n        var set = function(e, symbol) {\n            var rect = aCanvas.getBoundingClientRect();\n            var left = rect.left;\n            var top = rect.top;\n            var diffY = e.pageY - e.clientY;\n            var diffX = e.pageX - e.clientX;\n            var x = (e.clientX + diffX - left) / fullScreenScale;\n            var y = FH - (e.clientY + diffY - top) / fullScreenScale;\n            //  console.log(\"y \" + e.clientY + \" top \" + top + \" pageY: \" + e.pageY);\n            //  console.log(\"x \" + x + \" y: \" + y);\n            that.env[symbol] = {x: x,  y: y, time: that.env[\"time\"]};\n        }\n\n        aCanvas.addEventListener(\"mousemove\", function(e) {\n            set(e, \"mousemove\");\n        });\n        aCanvas.addEventListener(\"mousedown\", function(e) {\n            set(e, \"mousedown\");\n        });\n        aCanvas.addEventListener(\"mouseup\", function(e) {\n            set(e, \"mouseup\");\n        });\n        document.addEventListener('keypress', function(evt) {\n            if (evt.target === document.body) {\n                if (evt.key =='`') {\n                    that.callSetup();\n                } else if (evt.key == \"\\\\\") {\n                    that.toggleScript(\"loop\");\n                }\n            }\n        }, true);\n    }\n\n    Shadama.prototype.initServerFiles = function() {\n        if (!editor) {return;}\n        var examples = [\n            \"1-Fill.shadama\", \"2-Disperse.shadama\", \"3-Gravity.shadama\", \"4-Two Circles.shadama\", \"5-Bounce.shadama\", \"6-Picture.shadama\", \"7-Duck Bounce.shadama\", \"8-Back and Forth.shadama\", \"9-Mandelbrot.shadama\", \"10-Life Game.shadama\", \"11-Ball Gravity.shadama\", \"12-Duck Gravity.shadama\", \"13-Ribbons.shadama\", \"16-Diffuse.shadama\", \"19-Bump.shadama\", \"21-ForestFire.shadama\", \"22-WhoAmI.shadama\", \"23-Camera.shadama\"\n        ];\n        examples.forEach((n) => {\n            this.env[\"Display\"].loadProgram(n, (serverCode) => {\n                var localCode = localStorage.getItem(n);\n                //if (!localCode) {\n                    localStorage.setItem(n, serverCode);\n                //}\n                this.initFileList();\n            })\n        });\n    }\n\n    Shadama.prototype.loadAudio = function(name) {\n        var event = new ShadamaEvent();\n        var that = this;\n        var location = window.location.toString();\n\n        if (!audioContext) {\n            audioContext = new AudioContext();\n        }\n\n        function loadSound(url) {\n            var request = new XMLHttpRequest();\n            request.open('GET', url, true);\n            request.responseType = 'arraybuffer';\n\n            // Decode asynchronously\n            request.onload = function() {\n                audioContext.decodeAudioData(request.response,\n                                             function(buffer) {\n                                                 event.setValue(buffer);\n                                             },\n                                             function(error) {\n                                                 console.log(error);\n                                                 event.setValue(\"\");\n                                             });\n            }\n            request.send();\n        }\n\n        if (location.startsWith(\"http\")) {\n            var slash = location.lastIndexOf(\"/\");\n            loadSound(location.slice(0, slash) + \"/\" + name);\n        } else {\n            loadSound(\"http://tinlizzie.org/~ohshima/shadama2/\" + name);\n        }\n        return event;\n    }\n\n    Shadama.prototype.loadImage = function(name) {\n        var event = new ShadamaEvent();\n        var that = this;\n\n        var img = document.createElement(\"img\");\n        var tmpCanvas = document.createElement(\"canvas\");\n        var location = window.location.toString();\n\n        if (location.startsWith(\"http\")) {\n            if (frame) {\n                var dir = frame.imagePath + name;\n            } else {\n                var slash = location.lastIndexOf(\"/\");\n                var dir = location.slice(0, slash) + \"/\" + name;\n            }\n            img.src = dir;\n        } else {\n            img.crossOrigin = \"Anonymous\";\n            img.onerror = function() {\n                console.log(\"no internet\");\n                var newImage = that.emptyImageData(256, 256);\n                document.body.removeChild(img);\n                event.setValue(newImage);\n            }\n            img.src = \"http://tinlizzie.org/~ohshima/shadama2/\" + name;\n        }\n\n        img.hidden = true;\n\n        img.onload = function() {\n            tmpCanvas.width = img.width;\n            tmpCanvas.height = img.height;\n            tmpCanvas.getContext('2d').drawImage(img, 0, 0);\n            var newImage = tmpCanvas.getContext('2d').getImageData(0, 0, img.width, img.height);\n            document.body.removeChild(img);\n            event.setValue(newImage);\n        }\n        document.body.appendChild(img);\n        return event;\n    }\n\n    Shadama.prototype.loadCSV = function(name) {\n        var that = this;\n        return (function() {\n            var xobj = new XMLHttpRequest();\n            var event = new ShadamaEvent();\n            var location = window.location.toString();\n            var dir;\n            if (name.startsWith(\"http\")) {\n                dir = name;\n            } else {\n                if (location.startsWith(\"http\")) {\n                    if (frame) {\n                        var dir = frame.dataPath + name;\n                    } else {\n                        var slash = location.lastIndexOf(\"/\");\n                        var dir = location.slice(0, slash) + \"/\" + name;\n                    }\n                } else {\n                    dir = \"http://tinlizzie.org/~ohshima/shadama2/\" + name;\n                }\n            }\n            xobj.open(\"GET\", dir, true);\n            xobj.responseType = \"blob\";\n            \n            xobj.onload = function(oEvent) {\n                var blob = xobj.response;\n                var file = new File([blob], dir);\n                Papa.parse(file, {complete: resultCSV, error: errorCSV});\n            };\n            \n            function errorCSV(error, file) {\n                console.log(\"ERROR:\", error, file);\n                event.setValue(\"\");\n            }\n            \n            function resultCSV(result) {\n                var data = result.data;\n                event.setValue(data);\n            }\n            xobj.send();\n            return event;\n        })();\n    }\n\n    Shadama.prototype.loadVideo = function(name, isCamera) {\n        var event = new ShadamaEvent(); //event to trigger that a frame is ready\n        var video = document.createElement(\"video\");\n\n        function initTexture() {\n            var texture = gl.createTexture();\n            gl.bindTexture(gl.TEXTURE_2D, texture);\n\n            // Because video has to be download over the internet\n            // they might take a moment until it's ready so\n            // put a single pixel in the texture so we can\n            // use it immediately.\n            var pixel = new Uint8Array([0, 0, 255, 255]);  // opaque blue\n            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA,\n                          1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE,\n                          pixel);\n            \n            // Turn off mips and set  wrapping to clamp to edge so it\n            // will work regardless of the dimensions of the video.\n            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n            \n            return texture;\n        }\n\n        var videoTexture = initTexture();\n\n        function updateTexture(gl, texture, video) {\n            state.activeTexture(gl.TEXTURE0);\n            gl.bindTexture(gl.TEXTURE_2D, texture);\n            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA,\n                          gl.RGBA, gl.UNSIGNED_BYTE, video);\n        }\n\n        var playing = false;\n        var timeupdate = false;\n\n        video.autoplay = true;\n        video.muted = true;\n        video.loop = true;\n\n        video.addEventListener('playing', function() {\n            playing = true;\n        }, true);\n\n        video.addEventListener('timeupdate', function() {\n            timeupdate = true;\n        }, true);\n\n        function checkReady() {\n            return playing && timeupdate;\n        }\n\n        video.hidden = true;\n        //document.body.appendChild(video);\n\n        if (isCamera) {\n            if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n                // Not adding `{ audio: true }` since we only want video now\n                navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) {\n                    video.srcObject = stream; //window.URL.createObjectURL(stream);\n                    video.play();\n                });\n            }\n        } else {\n            var location = window.location.toString();\n            if (location.startsWith(\"http\")) {\n                if (frame) {\n                    var dir = frame.imagePath + name;\n                } else {\n                    var slash = location.lastIndexOf(\"/\");\n                    var dir = location.slice(0, slash) + \"/\" + name;\n                }\n                video.src = dir;\n            } else {\n                video.crossOrigin = \"Anonymous\";\n                video.onerror = function() {\n                    console.log(\"no internet\");\n                }\n                video.src = \"http://tinlizzie.org/~ohshima/shadama2/\" + name;\n            }\n            var p = video.play();\n        \n            if (p !== undefined) {\n                p.then(function() {\n                    console.log(\"Automatic playback started!\");\n                }).catch(function(error) {\n                    console.log(\"Automatic playback failed!\");\n                });\n            }\n        }\n\n        event.setValue({updateTexture: updateTexture, video: video, texture: videoTexture, checkReady: checkReady});\n\n        return event;\n    }\n\n    Shadama.prototype.clearMedia = function() {\n        for (var k in this.media) {\n            var event = this.media[k];\n            var value = event.value;\n            if (value.video) {\n                value.video.pause();\n                value.video.remove();\n            }\n        }\n        this.media = {};\n    }\n\n    Shadama.prototype.initDisplay = function() {\n        this.env[\"Display\"] = new Display(this);\n    }\n\n    Shadama.prototype.initEnv = function(callback) {\n        this.env.mousedown = {x: 0, y: 0};\n        this.env.mousemove = {x: 0, y: 0};\n        this.env.width = FW;\n        this.env.height = FH;\n\n        callback();\n    }\n\n    Shadama.prototype.makeClock = function() {\n        var aClock = document.createElement(\"canvas\");\n        var that = this;\n        aClock.width = 40;\n        aClock.height = 40;\n        aClock.ticking = false;\n        aClock.hand = 0;\n        drawClock(aClock, 0, false);\n\n        aClock.onclick = function () {that.toggleScript(aClock.entry.scriptName)};\n\n        return aClock;\n    }\n\n    Shadama.prototype.stopClock = function(aClock) {\n        aClock.ticking = false;\n        drawClock(aClock);\n    }\n\n    Shadama.prototype.startClock = function(aClock) {\n        aClock.ticking = true;\n        drawClock(aClock);\n    }\n\n    Shadama.prototype.stopScript = function(name) {\n        delete this.steppers[name];\n        var entry = this.detectEntry(name);\n        if (entry) {\n            this.stopClock(entry.clock);\n        }\n    }\n\n    Shadama.prototype.startScript = function(name) {\n        this.steppers[name] = name;\n        var entry = this.detectEntry(name);\n        if (entry) {\n            this.startClock(entry.clock);\n        }\n    }\n\n    Shadama.prototype.toggleScript = function(name) {\n        if (this.steppers[name]) {\n            this.stopScript(name);\n        } else {\n            this.startScript(name);\n        }\n    }\n\n    function drawClock(aClock) {\n        var hand = aClock.hand;\n        var ticking = aClock.ticking;\n        function drawFace(ctx, radius, backColor) {\n            ctx.moveTo(0, 0);\n            ctx.beginPath();\n            ctx.arc(0, 0, radius, 0, 2*Math.PI);\n            ctx.fillStyle = backColor;\n            ctx.fill();\n\n            ctx.strokeStyle = '#333';\n            ctx.lineWidth = radius*0.1;\n            ctx.stroke();\n\n            ctx.beginPath();\n            ctx.arc(0, 0, radius*0.1, 0, 2*Math.PI);\n            ctx.fillStyle = \"#333\";\n            ctx.fill();\n        };\n\n        function drawHand(ctx, length, dir) {\n            ctx.beginPath();\n            ctx.lineWidth = 2;\n            ctx.lineCap = \"round\";\n            ctx.moveTo(0, 0);\n            ctx.rotate(dir);\n            ctx.lineTo(0, -length);\n            ctx.stroke();\n        };\n\n        var ctx = aClock.getContext('2d');\n        var backColor = ticking ? '#ffcccc' : '#ffffff';\n        var dir = hand / 360.0 * (Math.PI * 2.0);\n\n        ctx.transform(1, 0, 0, 1, 18, 18);\n        drawFace(aClock.getContext('2d'), 16, backColor);\n        drawHand(aClock.getContext('2d'), 10, dir);\n        ctx.resetTransform();\n    }\n\n    Shadama.prototype.makeEntry = function(name) {\n        if (!domTools) {return;}\n        var entry = document.createElement(\"div\");\n        var aClock = this.makeClock();\n        var that = this;\n        entry.scriptName = name;\n        entry.appendChild(aClock);\n        entry.clock = aClock;\n        aClock.entry = entry;\n        var button = document.createElement(\"div\");\n        button.className = \"staticName\";\n        button.innerHTML = name;\n        button.onclick = function() {\n            that.env[\"time\"] = (window.performance.now() / 1000) - that.loadTime;\n            if (that.statics[entry.scriptName]) {\n                try {\n                    that.statics[entry.scriptName](that.env);\n                } catch (e) {\n                    that.reportError(e);\n                }\n            }\n        };\n        entry.appendChild(button);\n        return entry;\n    }\n\n    Shadama.prototype.detectEntry = function(name) {\n        if (!domTools) {return;}\n        for (var j = 0; j < watcherList.children.length; j++) {\n            var oldEntry = watcherList.children[j];\n            if (oldEntry.scriptName === name) {return oldEntry;}\n        }\n        return null;\n    }\n\n    Shadama.prototype.removeAll = function() {\n        if (!domTools) {return;}\n        while (watcherList.firstChild) {\n            watcherList.removeChild(watcherList.firstChild);\n        }\n    }\n\n    Shadama.prototype.addAll = function(elems) {\n        if (!domTools) {return;}\n        for (var j = 0; j < elems.length; j++) {\n            watcherList.appendChild(elems[j]);\n        }\n    }\n\n    Shadama.prototype.updateClocks = function() {\n        if (!domTools) {return;}\n        for (var j = 0; j < watcherList.children.length; j++) {\n            var child = watcherList.children[j];\n            var aClock = child.clock;\n            if (aClock.ticking) {\n                aClock.hand = (aClock.hand + 2) % 360;\n            }\n            drawClock(aClock);\n        }\n    }\n\n    Shadama.prototype.selectFile = function(dom) {\n        if (dom.selectedIndex > 0) {// 0 is for the default label\n            var option = dom.options[dom.selectedIndex];\n            var name = option.label;\n            var source = localStorage.getItem(name);\n            if (source) {\n                this.env[\"Display\"].clear();\n                console.log(\"loading: \" + name);\n                this.resetSystem();\n                this.loadShadama(null, source);\n                if (editor) {\n                    editor.doc.setValue(source);\n                }\n                this.maybeRunner();\n            }\n        }\n    }\n\n    Shadama.prototype.initFileList = function(optSelection) {\n        var that = this;\n        if (optSelection) {\n            if (!optSelection.endsWith(\".shadama\")) {\n                optSelection = optSelection + \".shadama\";\n            }\n        }\n        var dom = document.getElementById(\"myDropdown\");\n        dom.onchange = function() {that.selectFile(dom);};\n        var selectIndex = null;\n        if (localStorage) {\n            var list = Object.keys(localStorage).filter((k) => k.endsWith(\".shadama\"));\n            dom.options.length = 0;\n            dom.options[0] = new Option(\"Choose a File:\", 0);\n            for(var i = 0; i < list.length; i++) {\n                dom.options[dom.options.length] = new Option(list[i], i + 1);\n                if (optSelection && list[i] === optSelection) {\n                    selectIndex = i + 1;\n                }\n            }\n            if (selectIndex) {\n                dom.selectedIndex = selectIndex;\n            }\n        }\n    }\n\n    Shadama.prototype.updateEnv = function() {\n        var that = this;\n        function printNum(obj) {\n            if (typeof obj !== \"number\") return obj;\n            let str = Math.abs(obj) < 1 ? obj.toPrecision(3) : obj.toFixed(3);\n            return str.replace(/\\.0*$/, \"\");\n        }\n        function print(obj) {\n            if (typeof obj !== \"object\") return printNum(obj);\n            if (typeof obj == \"object\" && obj.constructor === ShadamaEvent) return print(obj.value);\n            let props = Object.getOwnPropertyNames(obj)\n                .filter((k)=>typeof obj[k] !== \"object\")\n                .map((k)=>`${k}:${printNum(obj[k])}`);\n            return `{${props.join(' ')}}`;\n        }\n        function filter(k) {\n            if (showAllEnv) {\n                return true;\n            } else {\n                return(that.env[k] && that.env[k].constructor != ImageData);\n            }\n        }\n        let list = Object.getOwnPropertyNames(that.env)\n            .sort()\n            .filter(filter)\n            .map((k)=>`${k}: ${print(that.env[k])}`);\n        if (envList) {\n            envList.innerHTML = `<pre>${list.join('\\n')}</pre>`;\n        }\n    }\n\n    Shadama.prototype.populateList = function(newList) {\n        if (!domTools) {return;}\n        watcherElements = [];\n        for (var i = 0; i < newList.length; i++) {\n            var name = newList[i];\n            var entry = this.detectEntry(name);\n            if (!entry) {\n                entry = this.makeEntry(name);\n            }\n            watcherElements.push(entry);\n        }\n        this.removeAll();\n        this.addAll(watcherElements);\n    }\n\n    Shadama.prototype.addEnv = function(key, asset) {\n        this.env[key] = asset;\n    }\n\n    Shadama.prototype.runLoop = function() {\n        if (this.statics[\"loop\"]) {\n            this.startScript(\"loop\");\n        }\n    }\n\n    Shadama.prototype.once = function(name) {\n        if (this.statics[name]) {\n            this.statics[name](this.env);\n        }\n    }\n\n    Shadama.prototype.setEditor = function(anEditor, type) {\n        editor = anEditor;\n        editorType = type;\n    }\n\n    function Display(shadama) {\n        this.shadama = shadama;\n        if (withThreeJS) {\n            this.clearColor = new THREE.Color(0xFFFFFFFF);\n            this.otherColor = new THREE.Color(0x00000000);\n        } else {\n            this.clearColor = 'white';\n        }\n    }\n\n    Display.prototype.clear = function() {\n        var t = webglTexture();\n        if (t) {\n            setTargetBuffer(framebufferU8RGBA, t);\n        } else {\n            setTargetBuffer(null, null);\n        }\n\n        if (withThreeJS) {\n            this.otherColor.copy(renderer.getClearColor());\n            renderer.setClearColor(this.clearColor);\n            renderer.clearColor();\n            renderer.setClearColor(this.otherColor);\n        } else {\n            gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\n            gl.clearColor(1.0, 1.0, 1.0, 1.0);\n            gl.clear(gl.COLOR_BUFFER_BIT);\n        }\n\n        if (!t) {\n            setTargetBuffer(null, null);\n        }\n    }\n\n    Display.prototype.playSound = function(buffer) {\n        if (!buffer) {return}\n        if (buffer.constructor === ShadamaEvent) {\n            buffer = buffer.value;\n        }\n        var source = audioContext.createBufferSource(); // creates a sound source\n        source.buffer = buffer;                    // tell the source which sound to play\n        source.connect(audioContext.destination);       // connect the source to the context's destination (the speakers)\n        source.start(0);                           // play the source now\n    }\n\n    Display.prototype.loadProgram = function(name, func) {\n        var location = window.location.toString();\n        if (!location.startsWith(\"http\")) {return;}\n        var slash = location.lastIndexOf(\"/\");\n        var dir = location.slice(0, slash) + \"/\" + \"examples\";\n        var that = this;\n\n        var file = dir + \"/\" + encodeURIComponent(name);\n        var xhttp = new XMLHttpRequest();\n        xhttp.onreadystatechange = function() {\n            if (this.readyState == 4 && this.status == 200) {\n                var serverCode = xhttp.responseText;\n                if (func) {\n                    func(serverCode);\n                } else {\n                    that.shadama.loadShadama(null, serverCode);\n                    if (editor) {\n                        editor.doc.setValue(serverCode);\n                    }\n                    that.shadama.maybeRunner();\n                }\n            }\n        };\n        xhttp.open(\"GET\", file, true);\n        xhttp.send();\n    };\n\n    Shadama.prototype.emptyImageData = function(width, height) {\n        var ary = new Uint8ClampedArray(width * height * 4);\n        for (var i = 0; i < width * height; i++) {\n            ary[i * 4 + 0] = i;\n            ary[i * 4 + 1] = 0;\n            ary[i * 4 + 2] = 0;\n            ary[i * 4 + 3] = 255;\n        }\n        return new ImageData(ary, 256, 256);\n    }\n\n    class StandAloneRenderer {\n        setRenderTarget(framebuffer, optType) {\n            gl.bindFramebuffer( optType || gl.FRAMEBUFFER, framebuffer );\n        }\n    }\n\n    class Breed {\n        constructor(count) {\n            this.own = {};\n            this.count = count;\n        }\n\n        fillRandom(name, min, max) {\n            var ary = new Float32Array(T * T);\n            var range = max - min;\n            for (var i = 0; i < ary.length; i++) {\n                ary[i] = Math.random() * range + min;\n            }\n            updateOwnVariable(this, name, ary);\n        }\n\n        fillRandomDir(xName, yName) {\n            var x = new Float32Array(T * T);\n            var y = new Float32Array(T * T);\n            for (var i = 0; i < x.length; i++) {\n                var dir = Math.random() * Math.PI * 2.0;\n                x[i] = Math.cos(dir);\n                y[i] = Math.sin(dir);\n            }\n            updateOwnVariable(this, xName, x);\n            updateOwnVariable(this, yName, y);\n        }\n\n        fillRandomDir3(xName, yName, zName) {\n            var x = new Float32Array(T * T);\n            var y = new Float32Array(T * T);\n            var z = new Float32Array(T * T);\n            for (var i = 0; i < x.length; i++) {\n                var angleY = Math.random() * Math.PI * 2.0;\n                var angleX = Math.asin(Math.random() * 2.0 - 1.0);\n                x[i] = Math.sin(angleX);\n                y[i] = Math.cos(angleX) * Math.cos(angleY);\n                z[i] = Math.cos(angleX) * Math.sin(angleY);\n            }\n            updateOwnVariable(this, xName, x);\n            updateOwnVariable(this, yName, y);\n            updateOwnVariable(this, zName, z);\n        }\n\n        fillSpace(xName, yName, xDim, yDim) {\n            this.setCount(xDim * yDim);\n            var x = new Float32Array(T * T);\n            var y = new Float32Array(T * T);\n\n            for (var j = 0; j < yDim; j++) {\n                for (var i = 0; i < xDim; i++) {\n                    var ind = xDim * j + i;\n                    x[ind] = i;\n                    y[ind] = j;\n                }\n            }\n            updateOwnVariable(this, xName, x);\n            updateOwnVariable(this, yName, y);\n        }\n\n        fillCuboid(xName, yName, zName, xDim, yDim, zDim, step) {\n            this.setCount(xDim * yDim);\n            var x = new Float32Array(T * T);\n            var y = new Float32Array(T * T);\n            var z = new Float32Array(T * T);\n\n            var ind = 0;\n\n            for (var l = 0; l < zDim; l += step) {\n                for (var j = 0; j < yDim; j += step) {\n                    for (var i = 0; i < xDim; i += step) {\n                        x[ind] = i;\n                        y[ind] = j;\n                        z[ind] = l;\n                        ind++;\n                    }\n                }\n            }\n            updateOwnVariable(this, xName, x);\n            updateOwnVariable(this, yName, y);\n            updateOwnVariable(this, zName, z);\n        }\n\n        fill(name, value) {\n            var x = new Float32Array(T * T);\n\n            for (var j = 0; j < this.count; j++) {\n                x[j] = value;\n            }\n            updateOwnVariable(this, name, x);\n        }\n\n        fillImage(xName, yName, rName, gName, bName, aName, imagedata) {\n            if (imagedata === undefined) {\n                var error = new Error(\"runtime error\");\n                error.reason = `imagedata is not available`;\n                error.expected = `imagedata is not available`;\n                error.pos = -1;\n                error.src = null;\n                throw error;\n            }\n            if (imagedata.constructor === ShadamaEvent) {\n                imagedata = imagedata.value;\n            }\n            var xDim = imagedata.width;\n            var yDim = imagedata.height;\n            this.fillSpace(xName, yName, xDim, yDim);\n\n            var r = new Float32Array(T * T);\n            var g = new Float32Array(T * T);\n            var b = new Float32Array(T * T);\n            var a = new Float32Array(T * T);\n\n            for (var j = 0; j < yDim; j++) {\n                for (var i = 0; i < xDim; i++) {\n                    var src = j * xDim + i;\n                    var dst = (yDim - 1 - j) * xDim + i;\n                    r[dst] = imagedata.data[src * 4 + 0] / 255.0;\n                    g[dst] = imagedata.data[src * 4 + 1] / 255.0;\n                    b[dst] = imagedata.data[src * 4 + 2] / 255.0;\n                    a[dst] = imagedata.data[src * 4 + 3] / 255.0;\n                }\n            }\n            updateOwnVariable(this, rName, r);\n            updateOwnVariable(this, gName, g);\n            updateOwnVariable(this, bName, b);\n            updateOwnVariable(this, aName, a);\n        }\n\n        loadData(data) {\n            // assumes that the first line is the schema of the table\n            if (data.constructor === ShadamaEvent) {\n                data = data.value;\n            }\n            var schema = data[0];\n\n            for (var k in this.own) {\n                var ind = schema.indexOf(k);\n                if (ind >= 0) {\n                    var ary = new Float32Array(T * T);\n                    for (var i = 1; i < data.length; i++) {\n                        ary[i - 1] = data[i][ind];\n                    }\n                    updateOwnVariable(this, k, ary);\n                }\n                this.setCount(data.length - 1);\n            }\n        }\n\n        loadVideoFrame(video) {\n            if (video.constructor === ShadamaEvent) {\n                video = video.value;\n            }\n\n            if (!video.checkReady()) {return;}\n\n            var vTex = video.texture; // rgba\n\n            var updateTexture = video.updateTexture;\n            updateTexture(gl, vTex, video.video);\n\n            var prog = programs[\"copyRGBA\"];\n            var that = this;\n\n            var cs = [\"r\", \"g\", \"b\", \"a\"];\n\n            var targets = cs.map(function(n) {return that[N + n]});\n            setTargetBuffers(framebufferBreed, targets);\n\n            state.useProgram(prog.program);\n            gl.bindVertexArray(prog.vao);\n            noBlend();\n\n            state.activeTexture(gl.TEXTURE1);\n            state.bindTexture(gl.TEXTURE_2D, vTex);\n            gl.uniform1i(prog.uniLocations[\"u_videoTexture\"], 1);\n\n            if (!withThreeJS) {\n                gl.viewport(0, 0, T, T);\n            }\n            gl.uniform2f(prog.uniLocations[\"u_resolution\"], T, T);\n            gl.uniform2f(prog.uniLocations[\"u_half\"], 0.5/T, 0.5/T);\n            gl.uniform2i(prog.uniLocations[\"u_videoExtent\"], video.video.videoWidth, video.video.videoHeight);\n\n            this.count = video.video.videoWidth * video.video.videoHeight;\n\n            gl.drawArrays(gl.POINTS, 0, this.count);\n            gl.flush();\n\n            noBlend();\n\n            setTargetBuffer(null, null);\n            for (var i = 0; i < cs.length; i++) {\n                var name = cs[i];\n                var tmp = that[name];\n                this[name] = this[N + name];\n                this[N + name] = tmp;\n            }\n            gl.bindVertexArray(null);\n        }\n\n        draw() {\n            var prog = programs[\"drawBreed\"];\n            var t = webglTexture();\n\n            if (t) {\n                setTargetBuffer(framebufferU8RGBA, t);\n            } else {\n                setTargetBuffer(null, null);\n            }\n\n            state.useProgram(prog.program);\n            gl.bindVertexArray(prog.vao);\n\n            normalBlend();\n\n            state.activeTexture(gl.TEXTURE0);\n            state.bindTexture(gl.TEXTURE_2D, this.x);\n            gl.uniform1i(prog.uniLocations[\"u_x\"], 0);\n\n            state.activeTexture(gl.TEXTURE1);\n            state.bindTexture(gl.TEXTURE_2D, this.y);\n            gl.uniform1i(prog.uniLocations[\"u_y\"], 1);\n\n            state.activeTexture(gl.TEXTURE2);\n            state.bindTexture(gl.TEXTURE_2D, this.r);\n            gl.uniform1i(prog.uniLocations[\"u_r\"], 2);\n\n            state.activeTexture(gl.TEXTURE3);\n            state.bindTexture(gl.TEXTURE_2D, this.g);\n            gl.uniform1i(prog.uniLocations[\"u_g\"], 3);\n\n            state.activeTexture(gl.TEXTURE4);\n            state.bindTexture(gl.TEXTURE_2D, this.b);\n            gl.uniform1i(prog.uniLocations[\"u_b\"], 4);\n\n            state.activeTexture(gl.TEXTURE5);\n            state.bindTexture(gl.TEXTURE_2D, this.a);\n            gl.uniform1i(prog.uniLocations[\"u_a\"], 5);\n\n            if (!withThreeJS) {\n                gl.viewport(0, 0, FW, FH);\n            }\n            gl.uniform2f(prog.uniLocations[\"u_resolution\"], FW, FH);\n            gl.uniform2f(prog.uniLocations[\"u_half\"], 0.5/FW, 0.5/FH);\n\n            gl.drawArrays(gl.POINTS, 0, this.count);\n            gl.flush();\n\n            noBlend();\n\n            if (!t) {\n                setTargetBuffer(null, null);\n            }\n            gl.bindVertexArray(null);\n        }\n\n        render() {\n            renderRequests.push(this);\n        }\n\n        realRender(mvMatrix, pMatrix) {\n            var prog = programs[\"renderBreed\"];\n            var breed = this;\n            var uniLocations = prog.uniLocations;\n\n            state.useProgram(prog.program);\n            gl.bindVertexArray(prog.vao);\n\n            normalBlend();\n\n            state.activeTexture(gl.TEXTURE0);\n            state.bindTexture(gl.TEXTURE_2D, breed.x);\n            gl.uniform1i(prog.uniLocations[\"u_x\"], 0);\n\n            state.activeTexture(gl.TEXTURE1);\n            state.bindTexture(gl.TEXTURE_2D, breed.y);\n            gl.uniform1i(prog.uniLocations[\"u_y\"], 1);\n\n            state.activeTexture(gl.TEXTURE2);\n            state.bindTexture(gl.TEXTURE_2D, breed.z);\n            gl.uniform1i(prog.uniLocations[\"u_z\"], 2);\n\n            state.activeTexture(gl.TEXTURE3);\n            state.bindTexture(gl.TEXTURE_2D, breed.r);\n            gl.uniform1i(prog.uniLocations[\"u_r\"], 3);\n\n            state.activeTexture(gl.TEXTURE4);\n            state.bindTexture(gl.TEXTURE_2D, breed.g);\n            gl.uniform1i(prog.uniLocations[\"u_g\"], 4);\n\n            state.activeTexture(gl.TEXTURE5);\n            state.bindTexture(gl.TEXTURE_2D, breed.b);\n            gl.uniform1i(prog.uniLocations[\"u_b\"], 5);\n\n            state.activeTexture(gl.TEXTURE6);\n            state.bindTexture(gl.TEXTURE_2D, breed.a);\n            gl.uniform1i(prog.uniLocations[\"u_a\"], 6);\n\n            var maybeD = breed[\"d\"];\n            if (maybeD !== undefined) {\n                if (typeof maybeD == \"number\") {\n                    gl.uniform1i(prog.uniLocations[\"u_use_vector\"], 0);\n                    gl.uniform1f(prog.uniLocations[\"u_dotSize\"], maybeD);\n                    gl.uniform1i(prog.uniLocations[\"u_d\"], 0);\n                } else {\n                    state.activeTexture(gl.TEXTURE7);\n                    state.bindTexture(gl.TEXTURE_2D, maybeD);\n                    gl.uniform1i(prog.uniLocations[\"u_d\"], 7);\n\n                    gl.uniform1i(prog.uniLocations[\"u_use_vector\"], 1);\n                    gl.uniform1f(prog.uniLocations[\"u_dotSize\"], 0);\n                }\n            } else {\n                gl.uniform1i(prog.uniLocations[\"u_use_vector\"], 0);\n                gl.uniform1f(prog.uniLocations[\"u_dotSize\"], 16);\n                gl.uniform1i(prog.uniLocations[\"u_d\"], 0);\n            }\n\n            gl.uniformMatrix4fv(uniLocations[\"mvMatrix\"], false, mvMatrix.elements);\n            gl.uniformMatrix4fv(uniLocations[\"pMatrix\"], false, pMatrix.elements);\n            gl.uniform3f(prog.uniLocations[\"u_resolution\"], VW, VH, VD);\n            gl.uniform3f(prog.uniLocations[\"u_half\"], 0.5/VW, 0.5/VH, 0.5/VD);\n\n            gl.drawArrays(gl.POINTS, 0, this.count);\n            gl.flush();\n            noBlend();\n\n            gl.bindVertexArray(null);\n        }\n\n        increasePatch(patch, name, valueOrSrcName) {\n            var prog = programs[\"increasePatch\"];\n\n            var src = patch[name];\n            var dst = patch[N + name];\n            textureCopy(patch, src, dst);\n            setTargetBuffer(framebufferDiffuse, dst);\n\n            var uniLocations = prog.uniLocations;\n\n            state.useProgram(prog.program);\n            gl.bindVertexArray(prog.vao);\n\n            oneBlend();\n\n            state.activeTexture(gl.TEXTURE0);\n            state.bindTexture(gl.TEXTURE_2D, this.x);\n            gl.uniform1i(uniLocations[\"u_that_x\"], 0);\n\n            state.activeTexture(gl.TEXTURE1);\n            state.bindTexture(gl.TEXTURE_2D, this.y);\n            gl.uniform1i(uniLocations[\"u_that_y\"], 1);\n\n            gl.uniform2f(uniLocations[\"u_resolution\"], FW, FH);\n            gl.uniform2f(uniLocations[\"u_half\"], 0.5/FW, 0.5/FH);\n\n            if (typeof valueOrSrcName === \"string\") {\n                state.activeTexture(gl.TEXTURE2);\n                state.bindTexture(gl.TEXTURE_2D, this[valueOrSrcName]);\n                gl.uniform1i(prog.uniLocations[\"u_texture\"], 2);\n                gl.uniform1i(prog.uniLocations[\"u_use_vector\"], 1);\n            } else {\n                gl.uniform1i(prog.uniLocations[\"u_texture\"], 0);\n                gl.uniform1i(prog.uniLocations[\"u_use_vector\"], 0);\n                gl.uniform1f(prog.uniLocations[\"u_value\"], valueOrSrcName);\n            }\n\n            if (!withThreeJS) {\n                gl.viewport(0, 0, FW, FH);\n            }\n\n            gl.drawArrays(gl.POINTS, 0, this.count);\n            gl.flush();\n\n            normalBlend();\n\n            setTargetBuffer(null, null);\n            gl.bindVertexArray(null);\n\n            patch[name] = dst;\n            patch[N + name] = src;\n        }\n\n        increaseVoxel(patch, name, valueOrSrcName) {\n            var prog = programs[\"increaseVoxel\"];\n\n            var src = patch[name];\n            var dst = patch[N + name];\n            textureCopy(patch, src, dst);\n            setTargetBuffer(framebufferDiffuse, dst);\n\n            var uniLocations = prog.uniLocations;\n\n            state.useProgram(prog.program);\n            gl.bindVertexArray(prog.vao);\n\n            oneBlend();\n\n            state.activeTexture(gl.TEXTURE0);\n            state.bindTexture(gl.TEXTURE_2D, this.x);\n            gl.uniform1i(uniLocations[\"u_that_x\"], 0);\n\n            state.activeTexture(gl.TEXTURE1);\n            state.bindTexture(gl.TEXTURE_2D, this.y);\n            gl.uniform1i(uniLocations[\"u_that_y\"], 1);\n\n            state.activeTexture(gl.TEXTURE2);\n            state.bindTexture(gl.TEXTURE_2D, this.z);\n            gl.uniform1i(uniLocations[\"u_that_z\"], 2);\n\n            gl.uniform2f(prog.uniLocations[\"u_resolution\"], FW, FH);\n            gl.uniform3f(prog.uniLocations[\"v_resolution\"], VW/VS, VH/VS, VD/VS);\n            gl.uniform1f(prog.uniLocations[\"v_step\"], VS);\n            gl.uniform2f(uniLocations[\"u_half\"], 0.5/FW, 0.5/FH);\n\n            if (typeof valueOrSrcName === \"string\") {\n                state.activeTexture(gl.TEXTURE3);\n                state.bindTexture(gl.TEXTURE_2D, this[valueOrSrcName]);\n                gl.uniform1i(prog.uniLocations[\"u_texture\"], 3);\n                gl.uniform1i(prog.uniLocations[\"u_use_vector\"], 1);\n            } else {\n                gl.uniform1i(prog.uniLocations[\"u_texture\"], 0);\n                gl.uniform1i(prog.uniLocations[\"u_use_vector\"], 0);\n                gl.uniform1f(prog.uniLocations[\"u_value\"], valueOrSrcName);\n            }\n\n            if (!withThreeJS) {\n                gl.viewport(0, 0, FW, FH);\n            }\n\n            gl.drawArrays(gl.POINTS, 0, this.count);\n            gl.flush();\n\n            normalBlend();\n\n            setTargetBuffer(null, null);\n            gl.bindVertexArray(null);\n\n            patch[name] = dst;\n            patch[N + name] = src;\n        }\n\n        readValues(n, x, y, w, h) {\n            var val = shadama.readValues(this, n, x, y, w, h);\n            return new ShadamaEvent().setValue(val);\n        }\n\n        setCount(n) {\n            var oldCount = this.count;\n            if (n < 0 || !n) {\n                n = 0;\n            }\n            this.count = n;\n            //\n        }\n    }\n\n    class Patch {\n        constructor() {\n            this.own = {};\n        }\n\n        draw() {\n            var prog = programs[\"drawPatch\"];\n            var t = webglTexture();\n\n            if (t) {\n                setTargetBuffer(framebufferU8RGBA, t);\n            } else {\n                setTargetBuffer(null, null);\n            }\n\n            state.useProgram(prog.program);\n            gl.bindVertexArray(prog.vao);\n\n            normalBlend();\n\n            state.activeTexture(gl.TEXTURE0);\n            state.bindTexture(gl.TEXTURE_2D, this.r);\n            gl.uniform1i(prog.uniLocations[\"u_r\"], 0);\n\n            state.activeTexture(gl.TEXTURE0 + 1);\n            state.bindTexture(gl.TEXTURE_2D, this.g);\n            gl.uniform1i(prog.uniLocations[\"u_g\"], 1);\n\n            state.activeTexture(gl.TEXTURE0 + 2);\n            state.bindTexture(gl.TEXTURE_2D, this.b);\n            gl.uniform1i(prog.uniLocations[\"u_b\"], 2);\n\n            state.activeTexture(gl.TEXTURE0 + 3);\n            state.bindTexture(gl.TEXTURE_2D, this.a);\n            gl.uniform1i(prog.uniLocations[\"u_a\"], 3);\n\n            if (!withThreeJS) {\n                gl.viewport(0, 0, FW, FH);\n            }\n            gl.uniform2f(prog.uniLocations[\"u_resolution\"], FW, FH);\n            gl.uniform2f(prog.uniLocations[\"u_half\"], 0.5/FW, 0.5/FH);\n\n            gl.drawArrays(gl.POINTS, 0, FW * FH);\n            gl.flush();\n\n            noBlend();\n\n            if (!t) {\n                setTargetBuffer(null, null);\n            }\n\n            gl.bindVertexArray(null);\n        }\n\n        render() {\n            renderRequests.push(this);\n        }\n\n        realRender(mvMatrix, pMatrix) {\n            var prog = programs[\"renderPatch\"];\n            var t = webglTexture();\n\n            if (t) {\n                setTargetBuffer(framebufferU8RGBA, t);\n            } else {\n                setTargetBuffer(null, null);\n            }\n\n            var uniLocations = prog.uniLocations;\n\n            state.useProgram(prog.program);\n            gl.bindVertexArray(prog.vao);\n\n            normalBlend();\n\n            state.activeTexture(gl.TEXTURE0);\n            state.bindTexture(gl.TEXTURE_2D, this.r);\n            gl.uniform1i(prog.uniLocations[\"u_r\"], 0);\n\n            state.activeTexture(gl.TEXTURE0 + 1);\n            state.bindTexture(gl.TEXTURE_2D, this.g);\n            gl.uniform1i(prog.uniLocations[\"u_g\"], 1);\n\n            state.activeTexture(gl.TEXTURE0 + 2);\n            state.bindTexture(gl.TEXTURE_2D, this.b);\n            gl.uniform1i(prog.uniLocations[\"u_b\"], 2);\n\n            state.activeTexture(gl.TEXTURE0 + 3);\n            state.bindTexture(gl.TEXTURE_2D, this.a);\n            gl.uniform1i(prog.uniLocations[\"u_a\"], 3);\n\n            gl.uniformMatrix4fv(uniLocations[\"mvMatrix\"], false, mvMatrix.elements);\n            gl.uniformMatrix4fv(uniLocations[\"pMatrix\"], false, pMatrix.elements);\n            gl.uniform3f(prog.uniLocations[\"u_resolution\"], VW, VH, VD);\n            gl.uniform3f(prog.uniLocations[\"v_resolution\"], VW/VS, VH/VS, VD/VS);\n            gl.uniform1i(prog.uniLocations[\"v_step\"], VS);\n            gl.uniform3f(prog.uniLocations[\"u_half\"], 0.5/VW, 0.5/VH, 0.5/VD);\n\n            gl.drawArrays(gl.POINTS, 0, VTW * VTH);\n            gl.flush();\n\n            noBlend();\n\n            if (!t) {\n                setTargetBuffer(null, null);\n            }\n\n            gl.bindVertexArray(null);\n        }\n\n        diffuse(name) {\n            var prog = programs[\"diffusePatch\"];\n            var src = this[name];\n            var dst = this[N + name];\n\n            setTargetBuffer(framebufferDiffuse, dst);\n\n            if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {\n                console.log(\"incomplete framebuffer\");\n            }\n\n            var uniLocations = prog.uniLocations;\n\n            state.useProgram(prog.program);\n            gl.bindVertexArray(prog.vao);\n\n            noBlend();\n\n            state.activeTexture(gl.TEXTURE0);\n            state.bindTexture(gl.TEXTURE_2D, src);\n            gl.uniform1i(prog.uniLocations[\"u_value\"], 0);\n\n            if (!withThreeJS) {\n                gl.viewport(0, 0, FW, FH);\n            }\n\n            gl.uniform2f(prog.uniLocations[\"u_half\"], 0.5/FW, 0.5/FH);\n\n            gl.drawArrays(gl.POINTS, 0, FW * FH);\n            gl.flush();\n\n            setTargetBuffer(null, null);\n            gl.bindVertexArray(null);\n\n            this[name] = dst;\n            this[N + name] = src;\n        }\n\n        readValues(n, x, y, w, h) {\n            var val = shadama.readValues(this, n, x, y, w, h);\n            return new ShadamaEvent().setValue(val);\n        }\n    }\n\n    Shadama.prototype.cleanUpEditorState = function() {\n        if (editor) {\n            if (editorType == \"CodeMirror\") {\n                if (parseErrorWidget) {\n                    editor.removeLineWidget(parseErrorWidget);\n                    parseErrorWidget = undefined;\n                }\n                editor.getAllMarks().forEach(function(mark) { mark.clear(); });\n            }\n            if (editorType == \"Carota\") {\n                if (parseErrorWidget) {\n                    parseErrorWidget.visible(false);\n                }\n            }\n        }\n    }\n\n    var showError;\n\n    Shadama.prototype.reportError = function(error) {\n        function toDOM(x) {\n            if (x instanceof Array) {\n                var xNode = document.createElement(x[0]);\n                x.slice(1)\n                    .map(toDOM)\n                    .forEach(yNode => xNode.appendChild(yNode));\n                return xNode;\n            } else {\n                return document.createTextNode(x);\n            }\n        };\n\n        if (editor) {\n            if (editorType == \"CodeMirror\") {\n                if (error.message != \"runtime error\") {\n                    setTimeout(\n                        function() {\n                            var msg = error.expected;\n                            var pos = error.pos;\n                            var src = error.src;\n                            if ((!src || editor.getValue() === src) && !parseErrorWidget) {\n                                function repeat(x, n) {\n                                    var xs = [];\n                                    while (n-- > 0) {\n                                        xs.push(x);\n                                    }\n                                    return xs.join('');\n                                }\n                                var docPos = editor.doc.posFromIndex(pos);\n                                var widget = toDOM(['parseerror', repeat(' ', docPos.ch) + '^\\n' + msg]);\n                                if (pos && msg) {\n                                    console.log(pos, msg);\n                                } else {\n                                    console.log(error);\n                                }\n                                parseErrorWidget = editor.addLineWidget(docPos.line, widget);\n                            }\n                        },\n                        2500\n                    );\n                } else {\n                    for (var n in this.steppers) {\n                        this.stopScript(n);\n                    }\n                    alert(error.expected);\n                }\n            }\n            if (editorType == \"Carota\") {\n                var scale = 8; // need to compute it\n                var bounds2D = editor.editor.byOrdinal(error.pos).bounds();\n                var x = (bounds2D.r - (editor.width / 2)) / scale;\n                var y = (editor.height - bounds2D.b - editor.height / 2) / scale;\n                var vec = new THREE.Vector3(x, y, 0);\n                var orig = vec.clone();\n                editor.parent.localToWorld(vec);\n\n                var msg = 'Expected: ' + error.msg;\n\n                if (!parseErrorWidget) {\n                    parseErrorWidget =\n                        new TStickyNote(frame.tAvatar,\n                            function(tObj){\n                                //tObj.position.set(5, -2, -2);\n                                //tObj.setLaser();\n                                showError(tObj, msg, vec);}, 512, 256);\n                    frame.sticky = parseErrorWidget;\n                    parseErrorWidget.scale.set(0.05, 0.05, 0.05);\n                } else {\n                    showError(parseErrorWidget, msg, vec);\n                }\n            }\n        } else {\n            var msg = error.expected;\n            var pos = error.pos;\n            var src = error.src;\n            if (pos && msg) {\n                console.log(pos, msg);\n            } else {\n                console.log(error);\n            }\n        }\n    }\n\n    Shadama.prototype.setShowError = function(func) {\n        showError = func;\n    }\n\n    showError = function(obj, m, v) {\n        obj.visible(true);\n\n        frame.mylaser = obj.laserBeam;\n        frame.tAvatar.addChild(obj);\n        obj.position.set(30, 10, -40);\n        obj.quaternion.set(0,0,0,1);\n\n        var canvas = obj.material.map.image;\n        var ctx = canvas.getContext(\"2d\");\n        ctx.fillStyle = \"white\";\n        ctx.fillRect(0, 0, canvas.width, canvas.height);\n        ctx.font = \"60px Arial\";\n        ctx.fillStyle = \"blue\";\n        ctx.fillText(m, 5, 20);\n        obj.material.map.needsUpdate = true;\n        obj.release();\n\n        obj.track(v);\n    }\n\n    Shadama.prototype.step = function() {\n        this.env[\"time\"] = (window.performance.now() / 1000) - this.loadTime;\n        for (var k in this.triggers) {\n            this.triggers[k].maybeFire(this);\n        }\n        try {\n            for (var k in this.steppers) {\n                var func = this.statics[k];\n                if (func) {\n                    func(this.env);\n                }\n            }\n        } catch(e) {\n            this.reportError(e);\n        }\n    }\n\n    Shadama.prototype.maybeRunner = function(optFunc) {\n        if (!animationRequested) {\n            this.runner(optFunc);\n        }\n    }\n\n    Shadama.prototype.runner = function(optFunc) {\n        var that = this;\n\n        function runBody() {\n            if (domTools) {\n                animationRequested = false;\n                var start = performance.now();\n                that.step();\n                var now = performance.now();\n                times.push({start: start, step: now - start});\n                \n                if ((times.length > 0 && now - times[0].start > 1000) || times.length === 2) {\n                    while (times.length > 1 && now - times[0].start > 500) { times.shift() };\n                    var frameTime = (times[times.length-1].start - times[0].start) / (times.length - 1);\n                    var stepTime = times.reduce((a, b) => ({step: a.step + b.step})).step / times.length;\n                    readout.innerHTML = \"\" + frameTime.toFixed(1) + \" msecs/frame (\" + (1000 / frameTime).toFixed(1) + \" fps)\";\n                    that.updateEnv();\n                }\n                \n                that.updateClocks();\n\n                if (optFunc) {\n                    optFunc();\n                }\n                if (keepGoing) {\n                    window.requestAnimationFrame(runBody);\n                    animationRequested = true;\n                } else {\n                    keepGoing = true;\n                }\n            }\n        };\n        runBody();\n    }\n\n    Shadama.prototype.destroy = function() {\n        if (editorType == \"Carota\") {\n            if (parseErrorWidget) {\n                parseErrorWidget.removeSelf();\n            }\n        }\n        //\n    }\n\n    Shadama.prototype.pause = function() {\n        this.steppers = {};\n    }\n\n    Shadama.prototype.pointermove = function(x, y) {\n        this.env.mousemove = {x: x, y: y};\n    }\n\n    Shadama.prototype.pointerup = function(x, y) {\n        this.env.mouseup = {x: x, y: y};\n    }\n\n    Shadama.prototype.pointerdown = function(x, y) {\n        this.env.mousedown = {x: x, y: y}\n    }\n\n    Shadama.prototype.tester = function() {\n        return {\n            parse: parse,\n            update: update,\n            translate: translate,\n            s: s,\n            Breed: Breed,\n            Patch: Patch,\n            SymTable: SymTable,\n        }\n    }\n\n    Shadama.prototype.goFullScreen = function() {\n\n        var req = shadamaCanvas.requestFullscreen || shadamaCanvas.webkitRequestFullscreen ||\n            shadamaCanvas.mozRequestFullScreen || shadamaCanvas.msRequestFullscreen;\n\n        if (req) {\n            req.call(shadamaCanvas);\n\n            function fsChanged() {\n                if (document.fullscreenElement ||\n                        document.webkitFullscreenElement ||\n                        document.mozFullScreenElement ||\n                        document.msFullscreenElement) {\n                    var rx = window.innerWidth / FW;\n                    var ry = window.innerHeight / FH;\n                    fullScreenScale = Math.min(rx, ry);\n                    shadamaCanvas.style.width = FW * fullScreenScale + 'px';\n                    shadamaCanvas.style.height = FH * fullScreenScale + 'px';\n                } else {\n                    fullScreenScale = 1.0;\n                    shadamaCanvas.style.width = FW + 'px';\n                    shadamaCanvas.style.height = FH + 'px';\n                }\n            };\n\n            document.addEventListener(\"fullscreenchange\", fsChanged);\n            document.addEventListener(\"webkitfullscreenchange\", fsChanged);\n            document.addEventListener(\"mozfullscreenchange\", fsChanged);\n            document.addEventListener(\"MSFullscreenChange\", fsChanged);\n        }\n    }\n\n    var shadamaGrammar = String.raw`\nShadama {\n  TopLevel\n    = ProgramDecl? (Breed | Patch | Event | On | Data | Script | Helper | Static)*\n\n  ProgramDecl = program string\n  Breed = breed ident \"(\" Formals \")\"\n  Patch = patch ident \"(\" Formals \")\"\n  Event = event ident\n  On = on TriggerExpression arrow (start|stop)? ident\n  Data = data ident \"(\" string \",\" string \")\"\n  Script = def ident \"(\" Formals \")\" Block\n  Helper = helper ident \"(\" Formals \")\" Block\n  Static = static ident \"(\" Formals \")\" Block\n\n  Formals\n    = ident (\",\" ident)* -- list\n    | empty\n\n  Block = \"{\" StatementList \"}\"\n\n  StatementList = Statement*\n\n  Statement\n    = Block\n    | VariableStatement\n    | AssignmentStatement\n    | IfStatement\n    | ExpressionStatement\n    | ReturnStatement\n\n  VariableStatement = var VariableDeclaration \";\"?\n  VariableDeclaration = ident Initialiser?\n  Initialiser = \"=\" Expression\n\n  ReturnStatement = return Expression \";\"?\n\n  ExpressionStatement = Expression \";\"?\n  IfStatement = if \"(\" Expression \")\" Statement (else Statement)?\n\n  AssignmentStatement\n    = LeftHandSideExpression \"=\" Expression \";\"?\n\n  LeftHandSideExpression\n    = ident \".\" ident -- field\n    | ident\n\n  TriggerExpression = \n    | TriggerExpression \"&&\" ident                      -- and\n    | TriggerExpression \"||\" ident                      -- or\n    | ident\n\n  Expression = LogicalExpression\n\n  LogicalExpression\n    = LogicalExpression \"&&\" RelationalExpression       -- and\n    | LogicalExpression \"||\" RelationalExpression       -- or\n    | RelationalExpression\n\n  RelationalExpression\n    = RelationalExpression \"<=\" AddExpression          -- le\n    | RelationalExpression \">=\" AddExpression          -- ge\n    | RelationalExpression \"<\" AddExpression           -- lt\n    | RelationalExpression \">\" AddExpression           -- gt\n    | RelationalExpression \"==\" AddExpression          -- equal\n    | RelationalExpression \"!=\" AddExpression          -- notEqual\n    | AddExpression\n\n  AddExpression\n    = AddExpression \"+\" MulExpression  -- plus\n    | AddExpression \"-\" MulExpression -- minus\n    | MulExpression\n\n  MulExpression\n    = MulExpression \"*\" PrimExpression  -- times\n    | MulExpression \"/\" PrimExpression  -- divide\n    | MulExpression \"%\" PrimExpression  -- mod\n    | UnaryExpression\n\n  UnaryExpression\n    = \"+\" PrimExpression -- plus\n    | \"-\" PrimExpression -- minus\n    | \"!\" PrimExpression -- not\n    | PrimExpression\n\n  PrimExpression\n    = \"(\" Expression \")\"  -- paren\n    | PrimitiveCall\n    | MethodCall\n    | PrimExpression \".\" ident     -- field\n    | ident               -- variable\n    | string              -- string\n    | number              -- number\n\n  PrimitiveCall\n    = ident \"(\" Actuals \")\"\n\n  MethodCall\n    = ident \".\" ident \"(\" Actuals \")\"\n\n  Actuals\n    = Expression (\",\" Expression)* -- list\n    | empty\n\n  ident\n    = letter (alnum | \"_\")*\n\n  number\n    = digit* \".\" digit+  -- fract\n    | digit+             -- whole\n\n  string = \"\\\"\" doubleStringCharacter* \"\\\"\"\n\n  doubleStringCharacter\n    = \"\\\\\" any           -- escaped\n    | ~\"\\\"\" any          -- nonEscaped\n\n  identifierStart = letter | \"_\"\n  identifierPart = identifierStart | digit\n\n  var = \"var\" ~identifierPart\n  if = \"if\" ~identifierPart\n  breed = \"breed\" ~identifierPart\n  patch = \"patch\" ~identifierPart\n  else = \"else\" ~identifierPart\n  def = \"def\" ~identifierPart\n  helper = \"helper\" ~identifierPart\n  this = \"this\" ~identifierPart\n  self = \"self\" ~identifierPart\n  static = \"static\" ~identifierPart\n  program = \"program\" ~identifierPart\n  return = \"return\" ~identifierPart\n  event = \"event\" ~identifierPart\n  on = \"on\" ~identifierPart\n  arrow = \"=>\" ~identifierPart\n  start = \"start\" ~identifierPart\n  stop = \"stop\" ~identifierPart\n  data = \"data\" ~identifierPart\n\n  empty =\n  space\n   += \"//\" (~nl any)* nl  -- cppComment\n    | \"/*\" (~\"*/\" any)* \"*/\" -- cComment\n  nl = \"\\n\"\n}\n`;\n\n    var g;\n    var s;\n\n    var globalTable; // This is a bad idea but then I don't know how to keep the reference to global.\n\n    var primitives;\n\n    function initPrimitiveTable() {\n        var data = {\n            \"clear\": new SymTable([], true),\n            \"setCount\": new SymTable([\n                [\"param\", null, \"num\"]], true),\n            \"draw\": new SymTable([], true),\n            \"render\": new SymTable([], true),\n            \"fillRandom\": new SymTable([\n                [\"param\", null, \"name\"],\n                [\"param\", null, \"min\"],\n                [\"param\", null, \"max\"]], true),\n            \"fillRandomDir\": new SymTable([\n                [\"param\", null, \"xDir\"],\n                [\"param\", null, \"yDir\"]] ,true),\n            \"fillRandomDir3\":  new SymTable([\n                [\"param\", null, \"xDir\"],\n                [\"param\", null, \"yDir\"],\n                [\"param\", null, \"zDir\"]], true),\n            \"fillSpace\": new SymTable([\n                [\"param\", null, \"xName\"],\n                [\"param\", null, \"yName\"],\n                [\"param\", null, \"x\"],\n                [\"param\", null, \"y\"]], true),\n            \"fillCuboid\": new SymTable([\n                [\"param\", null, \"xName\"],\n                [\"param\", null, \"yName\"],\n                [\"param\", null, \"zName\"],\n                [\"param\", null, \"x\"],\n                [\"param\", null, \"y\"],\n                [\"param\", null, \"z\"],\n                [\"param\", null, \"step\"]], true),\n            \"fillImage\": new SymTable([\n                [\"param\", null, \"xName\"],\n                [\"param\", null, \"yName\"],\n                [\"param\", null, \"rName\"],\n                [\"param\", null, \"gName\"],\n                [\"param\", null, \"bName\"],\n                [\"param\", null, \"aName\"],\n                [\"param\", null, \"imageData\"]], true),\n            \"loadVideoFrame\": new SymTable([\n                [\"param\", null, \"video\"]], true),\n            \"diffuse\": new SymTable([\n                [\"param\", null, \"name\"]], true),\n            \"increasePatch\": new SymTable([\n                [\"param\", null, \"name\"],\n                [\"param\", null, \"patch\"],\n                [\"param\", null, \"valueOrSrcName\"]], true),\n            \"increaseVoxel\": new SymTable([\n                [\"param\", null, \"name\"],\n                [\"param\", null, \"patch\"],\n                [\"param\", null, \"valueOrSrcName\"]], true),\n            \"random\": new SymTable([\n                [\"param\", null, \"seed\"]], true),\n            \"playSound\": new SymTable([\n                [\"param\", null, \"name\"]], true),\n            \"loadProgram\": new SymTable([\n                [\"param\", null, \"name\"]], true),\n            \"loadData\": new SymTable([\n                [\"param\", null, \"data\"]], true),\n            \"readValues\": new SymTable([\n                [\"param\", null, \"name\"],\n                [\"param\", null, \"x\"],\n                [\"param\", null, \"y\"],\n                [\"param\", null, \"w\"],\n                [\"param\", null, \"h\"]], true),\n            \"start\": new SymTable([], true),\n            \"step\": new SymTable([], true),\n            \"stop\": new SymTable([], true),\n        };\n\n        primitives = {};\n        for (var k in data) {\n            primitives[k] = data[k];\n        }\n    }\n\n    function initCompiler() {\n        g = ohm.grammar(shadamaGrammar);\n        s = g.createSemantics();\n        initPrimitiveTable();\n        initSemantics();\n    }\n\n    function initSemantics() {\n        function addDefaults(obj) {\n            for (var k in primitives) {\n                obj[k] = primitives[k];\n            }\n\n            obj[\"mousedown\"] = {x:0, y:0};\n            obj[\"mousemove\"] = {x:0, y:0};\n            obj[\"mouseup\"] = {x:0, y:0};\n\n        }\n\n        function processHelper(symDict) {\n            var queue;   // = [name]\n            var result;  // = {<name>: <name>}\n            function traverse() {\n                var head = queue.shift();\n                if (!result[head]) {\n                    result.add(head, head);\n                    var d = symDict[head];\n                    if (d && d.type == \"helper\") {\n                        d.usedHelpersAndPrimitives.keysAndValuesDo((h, v) => {\n                            queue.push(h);\n                        });\n                    }\n                }\n            }\n\n            for (var k in symDict) {\n                var dict = symDict[k];\n                if (dict.type == \"method\") {\n                    queue = [];\n                    result = new OrderedPair();\n                    dict.usedHelpersAndPrimitives.keysAndValuesDo((i, v) => {\n                        queue.push(i);\n                    });\n                    while (queue.length > 0) {\n                        traverse();\n                    }\n                    dict.allUsedHelpersAndPrimitives = result;\n                }\n            }\n        }\n\n        s.addOperation(\n            \"symTable(table)\",\n            {\n                TopLevel(p, ds) {\n                    var result = {};\n                    addDefaults(result);\n                    if (p.children.length > 0) {\n                        result = addAsSet(result, p.children[0].symTable(null));\n                    }\n                    for (var i = 0; i< ds.children.length; i++) {\n                        var d = ds.children[i].symTable(null);\n                        var ctor = ds.children[i].ctorName;\n                        if (ctor == \"Script\" || ctor == \"Static\" || ctor == \"Helper\") {\n                            addAsSet(result, d);\n                        }\n                        if (ctor == \"On\" || ctor == \"Event\" || ctor == \"Data\") {\n                            addAsSet(result, d);\n                        }\n                    }\n                    processHelper(result);\n                    globalTable = result;\n                    return result;\n                },\n\n                ProgramDecl(_p, s) {\n                    return {_programName: s.sourceString.slice(1, s.sourceString.length - 1)}\n                },\n\n                Breed(_b, n, _o, fs, _c) {\n                    var table = new SymTable();\n                    fs.symTable(table);\n                    table.process();\n                    return {[n.sourceString]: table};\n                },\n\n                Patch(_p, n, _o, fs, _c) {\n                    var table = new SymTable();\n                    fs.symTable(table);\n                    table.process();\n                    return {[n.sourceString]: table};\n                },\n\n                Event(_e, n) {\n                    var table = new SymTable();\n                    table.beEvent(n.sourceString);\n                    return {[n.sourceString]: table};\n                },\n\n                On(_o, t, _a, optK, n) {\n                    var table = new SymTable();\n                    var trigger = t.trigger();\n                    if (optK.children.length > 0) {\n                        var k = optK.children[0].sourceString;\n                    } else {\n                        k = \"step\";\n                    }\n                    table.beTrigger(trigger, [k, n.sourceString]);\n                    return {[\"_trigger\" + trigger.toString()]: table};\n                },\n\n                Data(_d, n, _o, s1, _a, s2, _c) {\n                    var table = new SymTable();\n                    var realS1 = s1.children[1].sourceString;\n                    var realS2 = s2.children[1].sourceString;\n                    table.beData(n.sourceString, realS1, realS2);\n                    return {[n.sourceString]: table};\n                },\n\n                Script(_d, n, _o, ns, _c, b) {\n                    var table = new SymTable();\n                    ns.symTable(table);\n                    b.symTable(table);\n                    table.process();\n                    return {[n.sourceString]: table};\n                },\n\n                Helper(_d, n, _o, ns, _c, b) {\n                    var table = new SymTable();\n                    ns.symTable(table);\n                    b.symTable(table);\n                    table.beHelper();\n                    return {[n.sourceString]: table};\n                },\n\n                Static(_s, n, _o, ns, _c, b) {\n                    var table = new SymTable();\n                    ns.symTable(table);\n                    table.process();\n                    table.beStatic();\n                    return {[n.sourceString]: table};\n                },\n\n                Formals_list(h, _c, r) {\n                    var table = this.args.table;\n                    table.add(\"param\", null, h.sourceString);\n                    for (var i = 0; i < r.children.length; i++) {\n                        var n = r.children[i].sourceString;\n                        table.add(\"param\", null, n);\n                    }\n                    return table;\n                },\n\n                StatementList(ss) { // an iter node\n                    var table = this.args.table;\n                    for (var i = 0; i< ss.children.length; i++) {\n                        ss.children[i].symTable(table);\n                    }\n                    return table;\n                },\n\n                VariableDeclaration(n, optI) {\n                    var table = this.args.table;\n                    table.add(\"var\", null, n.sourceString);\n                    if (optI.children.length > 0) {\n                        optI.children[0].symTable(table);\n                    }\n                    return table;\n                },\n\n                IfStatement(_if, _o, c, _c, t, _e, optF) {\n                    var table = this.args.table;\n                    c.symTable(table);\n                    t.symTable(table);\n                    if (optF.children.length > 0) {\n                        optF.children[0].symTable(table);\n                    }\n                    return table;\n                },\n\n                LeftHandSideExpression_field(n, _a, f) {\n                    var name = n.sourceString;\n                    var table = this.args.table;\n                    if (!table.hasVariable(name)) {\n                        var error = new Error(\"syntax error\");\n                        error.reason = `variable ${name} is not declared`;\n                        error.expected = `variable ${name} is not declared`;\n                        error.pos = n.source.endIdx;\n                        error.src = null;\n                        throw error;\n                    }\n\n                    this.args.table.add(\"propOut\", n.sourceString, f.sourceString);\n                    return this.args.table;\n                },\n\n                PrimExpression_field(n, _p, f) {\n                    var table = this.args.table;\n                    if (!(n.ctorName === \"PrimExpression\" && (n.children[0].ctorName === \"PrimExpression_variable\"))) {\n                        console.log(\"you can only use 'this' or incoming patch name\");\n                    }\n                    var name = n.sourceString;\n                    if (!table.isBuiltin(name)) {\n                        table.add(\"propIn\", n.sourceString, f.sourceString);\n                    }\n                    if (!table.hasVariable(name)) {\n                        var error = new Error(\"syntax error\");\n                        error.reason = `variable ${name} is not declared`;\n                        error.expected = `variable ${name} is not declared`;\n                        error.pos = n.source.endIdx;\n                        error.src = null;\n                        throw error;\n                    }\n                    return table;\n                },\n\n                PrimExpression_variable(n) {\n                    return {};//[\"var.\" + n.sourceString]: [\"var\", null, n.sourceString]};\n                },\n\n                PrimitiveCall(n, _o, as, _c) {\n                    this.args.table.maybeHelperOrPrimitive(n.sourceString);\n                    return as.symTable(this.args.table);\n                },\n\n                Actuals_list(h, _c, r) {\n                    var table = this.args.table;\n                    h.symTable(table);\n                    for (var i = 0; i < r.children.length; i++) {\n                        r.children[i].symTable(table);\n                    }\n                    return table;\n                },\n\n                ident(_h, _r) {return this.args.table;},\n                number(s) {return this.args.table;},\n                _terminal() {return this.args.table;},\n                _nonterminal(children) {\n                    var table = this.args.table;\n                    for (var i = 0; i < children.length; i++) {\n                        children[i].symTable(table);\n                    }\n                    return table;\n                },\n            });\n\n        function transBinOp(l, r, op, args) {\n            var table = args.table;\n            var vert = args.vert;\n            var frag = args.frag;\n            vert.push(\"(\");\n            l.glsl(table, vert, frag);\n            vert.push(op);\n            r.glsl(table, vert, frag);\n            vert.push(\")\");\n        };\n\n        s.addOperation(\n            \"trigger\",\n            {\n                TriggerExpression_and(t, _op, i) {\n                    return [\"and\", t, i.sourceString];\n                },\n                TriggerExpression_or(t, _op, i) {\n                    return [\"or\", t, i.sourceString];\n                },\n                TriggerExpression(i) {\n                    return i.sourceString;\n                }\n            }\n        );\n        \n        s.addOperation(\n            \"glsl_script_formals\",\n            {\n                Formals_list(h, _c, r) {\n                    return [h.sourceString].concat(r.children.map((c) => c.sourceString));\n                },\n                empty() {\n                    return [];\n                }\n            });\n\n        s.addOperation(\n            \"glsl_helper(table, vert)\",\n            {\n                Helper(_d, n, _o, ns, _c, b) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n\n                    vert.push(\"float \" + n.sourceString);\n                    vert.push(\"(\");\n                    ns.glsl_helper(table, vert);\n                    vert.push(\")\");\n                    b.glsl_helper(table, vert);\n\n                    vert.crIfNeeded();\n                    var code = vert.contents();\n                    table.helperCode = code;\n\n                    return {[n.sourceString]: [table, code, \"\", [\"updateHelper\", n.sourceString]]};\n                },\n\n                Formals_list(h, _c, r) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n\n                    vert.push(\"float \" + h.sourceString);\n                    for (var i = 0; i < r.children.length; i++) {\n                        var c = r.children[i];\n                        vert.push(\", float \");\n                        vert.push(c.sourceString);\n                    }\n                },\n\n                Block(_o, ss, _c) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n\n                    vert.pushWithSpace(\"{\\n\");\n                    vert.addTab();\n\n                    ss.glsl_helper(table, vert);\n\n                    vert.decTab();\n                    vert.tab();\n                    vert.push(\"}\");\n                },\n\n                StatementList(ss) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    for (var i = 0; i < ss.children.length; i++) {\n                        vert.tab();\n                        ss.children[i].glsl_helper(table, vert);\n                    }\n                },\n\n                Statement(e) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    e.glsl_helper(table, vert);\n                    if (e.ctorName !== \"Block\" && e.ctorName !== \"IfStatement\") {\n                        vert.push(\";\");\n                        vert.cr();\n                    }\n                    if (e.ctorName == \"IfStatement\") {\n                        vert.cr();\n                    }\n                },\n\n                IfStatement(_i, _o, c, _c, t, _e, optF) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    vert.pushWithSpace(\"if\");\n                    vert.pushWithSpace(\"(\");\n                    c.glsl_helper(table, vert);\n                    vert.push(\")\");\n                    t.glsl_helper(table, vert);\n                    if (optF.children.length === 0) { return;}\n                    vert.pushWithSpace(\"else\");\n                    optF.glsl_helper(table, vert);\n                },\n\n\n                ReturnStatement(_r, e, _s) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n\n                    vert.pushWithSpace(\"return\");\n                    vert.push(\" \");\n                    e.glsl_helper(table, vert);\n                },\n\n                AssignmentStatement(l, _a, e, _) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    l.glsl_helper(table, vert);\n                    vert.push(\" = \");\n                    e.glsl_helper(table, vert);\n                },\n\n                VariableStatement(_v, d, _s) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    d.glsl_helper(table, vert);\n                },\n\n                VariableDeclaration(n, i) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    vert.push(\"float\");\n                    vert.pushWithSpace(n.sourceString);\n                    if (i.children.length !== 0) {\n                        vert.push(\" = \");\n                        i.glsl_helper(table, vert);\n                    }\n                },\n\n                Initialiser(_a, e) {\n                    e.glsl_helper(this.args.table, this.args.vert);\n                },\n\n                LeftHandSideExpression_field(n, _p, f) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    vert.push(n.sourceString);\n                },\n\n                ExpressionStatement(e ,_s) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    e.glsl_helper(table, vert);\n                },\n\n                Expression(e) {\n                    e.glsl_helper(this.args.table, this.args.vert);\n                },\n\n                LogicalExpression(e) {\n                    e.glsl_helper(this.args.table, this.args.vert);\n                },\n\n                LogicalExpression_and(l, _, r) {\n                    transBinOp(l, r, \" && \", this.args);\n                },\n\n                LogicalExpression_or(l, _, r) {\n                    transBinOp(l, r, \" || \", this.args);\n                },\n\n                RelationalExpression(e) {\n                    e.glsl_helper(this.args.table, this.args.vert);\n                },\n\n                RelationalExpression_le(l, _, r) {\n                    transBinOp(l, r, \" <= \", this.args);\n                },\n\n                RelationalExpression_ge(l, _, r) {\n                    transBinOp(l, r, \" >= \", this.args);\n                },\n\n                RelationalExpression_lt(l, _, r) {\n                    transBinOp(l, r, \" < \", this.args);\n                },\n\n                RelationalExpression_gt(l, _, r) {\n                    transBinOp(l, r, \" > \", this.args);\n                },\n\n                RelationalExpression_equal(l, _, r) {\n                    transBinOp(l, r, \" == \", this.args);\n                },\n\n                RelationalExpression_notEqual(l, _, r) {\n                    transBinOp(l, r, \" != \", this.args);\n                },\n\n                AddExpression(e) {\n                    e.glsl_helper(this.args.table, this.args.vert);\n                },\n\n                AddExpression_plus(l, _, r) {\n                    transBinOp(l, r, \" + \", this.args);\n                },\n\n                AddExpression_minus(l, _, r) {\n                    transBinOp(l, r, \" - \", this.args);\n                },\n\n                MulExpression(e) {\n                    e.glsl_helper(this.args.table, this.args.vert);\n                },\n\n                MulExpression_times(l, _, r) {\n                    transBinOp(l, r, \" * \", this.args);\n                },\n\n                MulExpression_divide(l, _, r) {\n                    transBinOp(l, r, \" / \", this.args);\n                },\n\n                MulExpression_mod(l, _, r) {\n                    transBinOp(l, r, \" % \", this.args);\n                },\n\n                UnaryExpression(e) {\n                    e.glsl_helper(this.args.table, this.args.vert);\n                },\n\n                UnaryExpression_plus(_p, e) {\n                    e.glsl_helper(this.args.table, this.args.vert);\n                },\n\n                UnaryExpression_minus(_p, e) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    vert.pushWithSpace(\"-\");\n                    e.glsl_helper(table, vert);\n                },\n\n                UnaryExpression_not(_p, e) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    vert.pushWithSpace(\"!\");\n                    e.glsl_helper(table, vert);\n                },\n\n                PrimExpression(e) {\n                    e.glsl_helper(this.args.table, this.args.vert);\n                },\n\n                PrimExpression_paren(_o, e, _c) {\n                    e.glsl_helper(this.args.table, this.args.vert);\n                },\n\n                PrimExpression_number(e) {\n                    var vert = this.args.vert;\n                    var ind = e.sourceString.indexOf(\".\");\n                    if (ind < 0) {\n                        vert.push(e.sourceString + \".0\");\n                    } else {\n                        vert.push(e.sourceString);\n                    }\n                },\n\n                PrimExpression_field(n, _p, f) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n\n                    if (table.isObject(n.sourceString)) {\n                        vert.push(n.sourceString + \".\" + f.sourceString);\n                    } else {\n                        throw \"error\";\n                    }\n                },\n\n                PrimExpression_variable(n) {\n                    this.args.vert.push(n.sourceString);\n                },\n\n                PrimitiveCall(n, _o, as, _c) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    vert.push(n.sourceString);\n                    vert.push(\"(\");\n                    as.glsl_helper(table, vert);\n                    vert.push(\")\");\n                },\n\n                Actuals_list(h, _c, r) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    h.glsl_helper(table, vert);\n                    for (var i = 0; i < r.children.length; i++) {\n                        vert.push(\", \");\n                        r.children[i].glsl_helper(table, vert);\n                    }\n                },\n\n                ident(n, rest) {\n                    // ??\n                    this.args.vert.push(this.sourceString);\n                },\n            });\n\n        s.addOperation(\n            \"glsl_inner(table, vert, frag)\",\n            {\n                Block(_o, ss, _c) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n\n                    var patchInput = `\n  float _x = texelFetch(u_that_x, ivec2(a_index), 0).r;\n  float _y = texelFetch(u_that_y, ivec2(a_index), 0).r;\n  vec2 _pos = vec2(_x, _y);\n`;\n\n                    var voxelInput = `\n  float _x = texelFetch(u_that_x, ivec2(a_index), 0).r;\n  float _y = texelFetch(u_that_y, ivec2(a_index), 0).r;\n  float _z = texelFetch(u_that_z, ivec2(a_index), 0).r;\n  _x = floor(_x / v_step); // 8   //  [0..64), if originally within [0..512)\n  _y = floor(_y / v_step); // 8\n  _z = floor(_z / v_step); // 8\n\n  int index = int(_z * v_resolution.x * v_resolution.y + _y * v_resolution.x + _x);\n  vec2 _pos = vec2(index % int(u_resolution.x), index / int(u_resolution.x));\n`;\n\n                    var patchPrologue = `\n  vec2 oneToOne = ((_pos / u_resolution) + u_half) * 2.0 - 1.0;\n`;\n\n                    var breedPrologue = `\n  vec2 oneToOne = (b_index + u_half) * 2.0 - 1.0;\n`;\n\n                    var voxelPrologue = `\n  vec2 oneToOne = ((_pos / u_resolution.xy) + u_half) * 2.0 - 1.0;\n`;\n\n                    var epilogue = `\n  gl_Position = vec4(oneToOne, 0.0, 1.0);\n  gl_PointSize = 1.0;\n`;\n\n                    vert.pushWithSpace(\"{\\n\");\n                    vert.addTab();\n\n                    if ((table.hasPatchInput || !table.forBreed)) {\n                        if (dimension == 2) {\n                            vert.push(patchInput);\n                        } else {\n                            vert.push(voxelInput);\n                        }\n                    }\n\n                    if (table.forBreed) {\n                        vert.push(breedPrologue);\n                    } else {\n                        if (dimension == 2) {\n                            vert.push(patchPrologue);\n                        } else {\n                            vert.push(voxelPrologue);\n                        }\n                    }\n\n                    table.scalarParamTable.keysAndValuesDo((key, entry) => {\n                        var e = entry[2];\n                        var template1 = `float ${e} = u_scalar_${e};`;\n                        vert.tab();\n                        vert.push(template1);\n                        vert.cr();\n                    });\n\n                    table.uniformDefaults().forEach(elem => {\n                        vert.tab();\n                        vert.push(elem);\n                        vert.cr();\n                    });\n\n                    ss.glsl(table, vert, frag);\n                    vert.push(epilogue);\n\n                    vert.decTab();\n                    vert.tab();\n                    vert.push(\"}\");\n                },\n\n                Script(_d, n, _o, ns, _c, b) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n\n                    var breedPrologue =\n`#version 300 es\nprecision highp float;\nlayout (location = 0) in vec2 a_index;\nlayout (location = 1) in vec2 b_index;\nuniform vec${dimension} u_resolution;\nuniform vec2 u_half;\n`;\n\n                    if (dimension == 3) {\n                        breedPrologue = breedPrologue + `uniform float v_step;\nuniform vec3 v_resolution;\n`;\n                    }\n\n                    var patchPrologue = breedPrologue + `\nuniform sampler2D u_that_x;\nuniform sampler2D u_that_y;\n`;\n\n                    if (dimension == 3) {\n                        patchPrologue = patchPrologue + `uniform sampler2D u_that_z;\n`;\n                    }\n\n                    vert.push(table.forBreed && !table.hasPatchInput ? breedPrologue : patchPrologue);\n\n                    table.uniforms().forEach(elem => {\n                        vert.push(elem);\n                        vert.cr();\n                    });\n\n                    table.paramUniforms().forEach(elem => {\n                        vert.push(elem);\n                        vert.cr();\n                    });\n\n                    table.vertVaryings().forEach(elem => {\n                        vert.push(elem);\n                        vert.cr();\n                    });\n\n                    vert.crIfNeeded();\n\n                    table.primitivesAndHelpers().forEach((n) => {\n                        vert.push(n);\n                    });\n\n                    vert.push(\"void main()\");\n\n                    // fragment head\n\n                    frag.push(\"#version 300 es\\n\");\n                    frag.push(\"precision highp float;\\n\");\n\n                    table.fragVaryings().forEach((elem) =>{\n                        frag.push(elem);\n                        frag.cr();\n                    });\n\n                    table.outs().forEach((elem) => {\n                        frag.push(elem);\n                        frag.cr();\n                    });\n\n                    frag.crIfNeeded();\n                    frag.push(\"void main()\");\n\n                    b.glsl_inner(table, vert, frag);\n\n                    vert.crIfNeeded();\n\n                    frag.pushWithSpace(\"{\");\n                    frag.cr();\n\n                    frag.addTab();\n                    table.fragColors().forEach((line) => {\n                        frag.tab();\n                        frag.push(line);\n                        frag.cr();\n                    });\n                    frag.decTab();\n                    frag.crIfNeeded();\n                    frag.push(\"}\");\n                    frag.cr();\n\n                    return {[n.sourceString]: [table, vert.contents(), frag.contents(), [\"updateScript\", n.sourceString]]};\n                }\n            });\n\n        s.addOperation(\n            \"glsl(table, vert, frag)\",\n            {\n                TopLevel(p, ds) {\n                    var table = this.args.table;\n                    var result = {};\n                    for (var i = 0; i < ds.children.length; i++) {\n                        var child = ds.children[i];\n                        if (child.ctorName == \"Static\") {\n                            var js = new CodeStream();\n                            var val = child.static(table, js, null, false);\n                            addAsSet(result, val);\n                        } else {\n                            var val = child.glsl(table, null, null);\n                            addAsSet(result, val);\n                        }\n                    }\n                    result[\"_programName\"] = table[\"_programName\"];\n                    return result;\n                },\n\n                Breed(_b, n, _o, fs, _c) {\n                    var table = this.args.table;\n                    var js = [\"updateBreed\", n.sourceString, fs.glsl_script_formals()];\n                    return {[n.sourceString]: [table[n.sourceString], \"\", \"\", js]};\n                },\n\n                Patch(_p, n, _o, fs, _c) {\n                    var table = this.args.table;\n                    var js = [\"updatePatch\", n.sourceString, fs.glsl_script_formals()];\n                    return {[n.sourceString]: [table[n.sourceString], \"\", \"\" ,js]};\n                },\n\n                Event(_e, n) {\n                    var table = this.args.table;\n                    var js = [\"event\", n.sourceString];\n                    return {[n.sourceString]: [table[n.sourceString], \"\", \"\", js]};\n                },\n\n                On(_o, t, _a, optK, k) {\n                    var table = this.args.table;\n                    var trigger = t.trigger();\n                    var key = \"_trigger\" + trigger.toString();\n                    var entry = table[key];\n                    var js = [\"trigger\", entry.trigger, entry.triggerAction];\n                    return {[key]: [table[key], \"\", \"\", js]};\n                },\n\n                Data(_d, i, _o, s1, _a, s2, _c) {\n                    var table = this.args.table;\n                    var key = i.sourceString;\n                    var entry = table[key];\n                    var realS1 = s1.children[1].sourceString;\n                    var realS2 = s2.children[1].sourceString;\n                    var js = [\"data\", i.sourceString, realS1, realS2];\n                    return {[key]: [entry, \"\", \"\", js]};\n                },\n\n                Script(_d, n, _o, ns, _c, b) {\n                    var inTable = this.args.table;\n                    var table = inTable[n.sourceString];\n                    var vert = new CodeStream();\n                    var frag = new CodeStream();\n\n                    return this.glsl_inner(table, vert, frag);\n                },\n\n                Helper(_d, n, _o, ns, _c, b) {\n                    var inTable = this.args.table;\n                    var table = inTable[n.sourceString];\n                    var vert = new CodeStream();\n\n                    return this.glsl_helper(table, vert);\n                },\n\n                Block(_o, ss, _c) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n\n                    vert.pushWithSpace(\"{\");\n                    vert.cr();\n                    vert.addTab();\n                    ss.glsl(table, vert, frag);\n                    vert.decTab();\n                    vert.tab();\n                    vert.push(\"}\");\n                },\n\n                StatementList(ss) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n                    for (var i = 0; i < ss.children.length; i++) {\n                        vert.tab();\n                        ss.children[i].glsl(table, vert, frag);\n                    }\n                },\n\n                Statement(e) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n                    e.glsl(table, vert, frag);\n                    if (e.ctorName !== \"Block\" && e.ctorName !== \"IfStatement\") {\n                        vert.push(\";\");\n                        vert.cr();\n                    }\n                    if (e.ctorName == \"IfStatement\") {\n                        vert.cr();\n                    }\n                },\n\n                IfStatement(_i, _o, c, _c, t, _e, optF) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n                    vert.pushWithSpace(\"if\");\n                    vert.pushWithSpace(\"(\");\n                    c.glsl(table, vert, frag);\n                    vert.push(\")\");\n                    t.glsl(table, vert, frag);\n                    if (optF.children.length === 0) { return;}\n                    vert.pushWithSpace(\"else\");\n                    optF.glsl(table, vert, frag);\n                },\n\n                AssignmentStatement(l, _a, e, _) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n                    l.glsl(table, vert, frag);\n                    vert.push(\" = \");\n                    e.glsl(table, vert, frag);\n                },\n\n                VariableStatement(_v, d, _s) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n                    d.glsl(table, vert, frag);\n                },\n\n                VariableDeclaration(n, i) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n                    vert.push(\"float\");\n                    vert.pushWithSpace(n.sourceString);\n                    if (i.children.length !== 0) {\n                        vert.push(\" = \");\n                        i.glsl(table, vert, frag);\n                    }\n                },\n\n                Initialiser(_a, e) {\n                    e.glsl(this.args.table, this.args.vert, this.args.frag);\n                },\n\n                LeftHandSideExpression_field(n, _p, f) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    vert.push(table.varying([\"propOut\", n.sourceString, f.sourceString]));\n                },\n\n                ExpressionStatement(e ,_s) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n                    e.glsl(table, vert, frag);\n                },\n\n                Expression(e) {\n                    e.glsl(this.args.table, this.args.vert, this.args.frag);\n                },\n\n                LogicalExpression(e) {\n                    e.glsl(this.args.table, this.args.vert, this.args.frag);\n                },\n\n                LogicalExpression_and(l, _, r) {\n                    transBinOp(l, r, \" && \", this.args);\n                },\n\n                LogicalExpression_or(l, _, r) {\n                    transBinOp(l, r, \" || \", this.args);\n                },\n\n                RelationalExpression(e) {\n                    e.glsl(this.args.table, this.args.vert, this.args.frag);\n                },\n\n                RelationalExpression_le(l, _, r) {\n                    transBinOp(l, r, \" <= \", this.args);\n                },\n\n                RelationalExpression_ge(l, _, r) {\n                    transBinOp(l, r, \" >= \", this.args);\n                },\n\n                RelationalExpression_lt(l, _, r) {\n                    transBinOp(l, r, \" < \", this.args);\n                },\n\n                RelationalExpression_gt(l, _, r) {\n                    transBinOp(l, r, \" > \", this.args);\n                },\n\n                RelationalExpression_equal(l, _, r) {\n                    transBinOp(l, r, \" == \", this.args);\n                },\n\n                RelationalExpression_notEqual(l, _, r) {\n                    transBinOp(l, r, \" != \", this.args);\n                },\n\n                AddExpression(e) {\n                    e.glsl(this.args.table, this.args.vert, this.args.frag);\n                },\n\n                AddExpression_plus(l, _, r) {\n                    transBinOp(l, r, \" + \", this.args);\n                },\n\n                AddExpression_minus(l, _, r) {\n                    transBinOp(l, r, \" - \", this.args);\n                },\n\n                MulExpression(e) {\n                    e.glsl(this.args.table, this.args.vert, this.args.frag);\n                },\n\n                MulExpression_times(l, _, r) {\n                    transBinOp(l, r, \" * \", this.args);\n                },\n\n                MulExpression_divide(l, _, r) {\n                    transBinOp(l, r, \" / \", this.args);\n                },\n\n                MulExpression_mod(l, _, r) {\n                    transBinOp(l, r, \" % \", this.args);\n                },\n\n                UnaryExpression(e) {\n                    e.glsl(this.args.table, this.args.vert, this.args.frag);\n                },\n\n                UnaryExpression_plus(_p, e) {\n                    e.glsl(this.args.table, this.args.vert, this.args.frag);\n                },\n\n                UnaryExpression_minus(_p, e) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n                    vert.pushWithSpace(\"-\");\n                    e.glsl(table, vert, frag);\n                },\n\n                UnaryExpression_not(_p, e) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n                    vert.pushWithSpace(\"!\");\n                    e.glsl(table, vert, frag);\n                },\n\n                PrimExpression(e) {\n                    e.glsl(this.args.table, this.args.vert, this.args.frag);\n                },\n\n                PrimExpression_paren(_o, e, _c) {\n                    e.glsl(this.args.table, this.args.vert, this.args.frag);\n                },\n\n                PrimExpression_number(e) {\n                    var vert = this.args.vert;\n                    var ind = e.sourceString.indexOf(\".\");\n                    if (ind < 0) {\n                        vert.push(e.sourceString + \".0\");\n                    } else {\n                        vert.push(e.sourceString);\n                    }\n                },\n\n                PrimExpression_field(n, _p, f) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n\n                    if (table.isBuiltin(n.sourceString)) {\n                        vert.push(n.sourceString + \".\" + f.sourceString);\n                    } else {\n                        if (n.sourceString === \"this\") {\n                            vert.push(\"texelFetch(\" +\n                                      table.uniform([\"propIn\", n.sourceString, f.sourceString]) +\n                                      `, ivec2(a_index), 0).r`);\n                        } else {\n                            vert.push(\"texelFetch(\" +\n                                      table.uniform([\"propIn\", n.sourceString, f.sourceString]) +\n                                      `, ivec2(_pos), 0).r`);\n                        }\n                    }\n                },\n\n                PrimExpression_variable(n) {\n                    this.args.vert.push(n.sourceString);\n                },\n\n                PrimitiveCall(n, _o, as, _c) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n                    vert.push(n.sourceString);\n                    vert.push(\"(\");\n                    as.glsl(table, vert, frag);\n                    vert.push(\")\");\n                },\n\n                Actuals_list(h, _c, r) {\n                    var table = this.args.table;\n                    var vert = this.args.vert;\n                    var frag = this.args.frag;\n                    h.glsl(table, vert, frag);\n                    for (var i = 0; i < r.children.length; i++) {\n                        vert.push(\", \");\n                        r.children[i].glsl(table, vert, frag);\n                    }\n                },\n\n                ident(n, rest) {\n                    this.args.vert.push(this.sourceString);\n                }\n            });\n\n        function staticTransBinOp(l, r, op, args) {\n            var table = args.table;\n            var js = args.js;\n            var method = args.method;\n            var isOther = args.isOther;\n            js.push(\"(\");\n            l.static(table, js, method, isOther);\n            js.push(op);\n            r.static(table, js, method, isOther);\n            js.push(\")\");\n        };\n\n        s.addOperation(\n            \"static_method_inner(table, js, method, isOther)\",\n            {\n                Actuals_list(h, _c, r) {\n                    var table = this.args.table;\n                    var result = [];\n                    var js = new CodeStream();\n                    var method = this.args.method;\n\n                    function isOther(i) {\n                        var realTable = table[method];\n                        if (!realTable) {return false}\n                        var p = realTable.param.at(i);\n                        if (!p) {\n                            var error = new Error(\"semantic error\");\n                            error.reason = `argument count does not match for method ${method}`;\n                            error.expected = `argument count does not match for method ${method}`;\n                            error.pos = h.source.endIdx;\n                            error.src = null;\n                            throw error;\n                        }\n                        var r = realTable.usedAsOther(p[2]);\n                        return r;\n                    };\n                    h.static(table, js, method, isOther(0));\n                    result.push(js.contents());\n                    for (var i = 0; i < r.children.length; i++) {\n                        var c = r.children[i];\n                        var js = new CodeStream();\n                        c.static(table, js, method, isOther(i+1));\n                        result.push(js.contents());\n                    }\n                    return result;\n                },\n\n                Formals_list(h, _c, r) {\n                    var table = this.args.table;\n                    var result = [];\n                    var js = new CodeStream();\n\n                    result.push(h.sourceString);\n                    for (var i = 0; i < r.children.length; i++) {\n                        var c = r.children[i];\n                        result.push(\", \");\n                        result.push(c.sourceString);\n                    }\n                    return result;\n                },\n\n                empty() {\n                    return [];\n                }\n            });\n\n        s.addOperation(\n            \"static(table, js, method, isOther)\",\n            {\n\n                Static(_s, n, _o, fs, _c, b) {\n                    var table = this.args.table;\n                    var js = this.args.js;\n                    var method = this.args.method;\n\n                    js.push(\"(function\");\n                    js.pushWithSpace(n.sourceString);\n                    js.push(\"(\");\n                    js.push(fs.static_method_inner(table, null, null, null));\n                    js.push(\") \");\n                    b.static(table, js, method, false);\n                    js.push(\")\");\n                    return {[n.sourceString]: [\"static\", js.contents(), this.sourceString]};\n                },\n\n                Block(_o, ss, _c) {\n                    var table = this.args.table;\n                    var js = this.args.js;\n                    var method = this.args.method;\n                    js.pushWithSpace(\"{\");\n                    js.cr();\n                    js.addTab();\n                    ss.static(table, js, method, false);\n                    js.decTab();\n                    js.tab();\n                    js.push(\"}\");\n                },\n\n                StatementList(ss) {\n                    var table = this.args.table;\n                    var js = this.args.js;\n                    var method = this.args.method;\n                    var isOther = this.args.isOther;\n                    for (var i = 0; i < ss.children.length; i++) {\n                        js.tab();\n                        ss.children[i].static(table, js, method, isOther);\n                    }\n                },\n\n                Statement(e) {\n                    var table = this.args.table;\n                    var js = this.args.js;\n                    var method = this.args.method;\n                    var isOther = this.args.isOther;\n                    e.static(table, js, method, isOther);\n                    if (e.ctorName !== \"Block\" && e.ctorName !== \"IfStatement\") {\n                        js.push(\";\");\n                        js.cr();\n                    }\n                    if (e.ctorName == \"IfStatement\") {\n                        js.cr();\n                    }\n                },\n\n                IfStatement(_i, _o, c, _c, t, _e, optF) {\n                    var table = this.args.table;\n                    var js = this.args.js;\n                    var method = this.args.method;\n                    var isOther = this.args.isOther;\n                    js.push(\"if\");\n                    js.pushWithSpace(\"(\");\n                    c.static(table, js, method, isOther);\n                    js.push(\")\");\n                    t.static(table, js, method, isOther);\n                    if (optF.children.length === 0) {return;}\n                    js.pushWithSpace(\"else\");\n                    optF.static(table, js, method, isOther);\n                },\n\n                VariableStatement(_v, d, _s) {\n                    var table = this.args.table;\n                    var js = this.args.js;\n                    var method = this.args.method;\n                    var isOther = this.args.isOther;\n                    d.static(table, js, method, isOther);\n                },\n\n                VariableDeclaration(n, i) {\n                    var table = this.args.table;\n                    var js = this.args.js;\n                    var method = this.args.method;\n                    var isOther = this.args.isOther;\n                    var symTable = new SymTable();\n                    symTable.beStaticVariable(i.sourceString);\n                    table[n.sourceString] = symTable;\n                    js.push(\"env.\");\n                    js.push(n.sourceString);\n                    js.pushWithSpace(\"= \");\n                    if (i.children.length !== 0) {\n                        i.static(table, js, method, isOther);\n                    } else {\n                        js.pushWithSpace(\"null;\");\n                    }\n                },\n\n                AssignmentStatement(l, _a, e, _) {\n                    var table = this.args.table;\n                    var js = this.args.js;\n                    var method = this.args.method;\n                    var isOther = this.args.isOther;\n                    var left = table[l.sourceString];\n                    if (!left || (!left.isEvent() && !left.isStaticVariable())) {\n//                            var error = new Error(\"semantic error\");\n//                            error.reason = `assignment into undeclared static variable or event ${l.sourceString}`;\n//                            error.expected = `assignment into undeclared static variable or event ${l.sourceString}`;\n//                            error.pos = l.source.endIdx;\n//                            error.src = null;\n//                            throw error;\n                    }\n                    js.push(\"env.\");\n                    js.push(l.sourceString);\n                    js.pushWithSpace(\"= \");\n                    e.static(table, js, method, isOther);\n                },\n\n                Initialiser(_a, e) {\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                ExpressionStatement(e, _s) {\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                Expression(e) {\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                LogicalExpression(e) {\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                LogicalExpression_and(l, _, r) {\n                    staticTransBinOp(l, r, \" && \", this.args);\n                },\n\n                LogicalExpression_or(l, _, r) {\n                    staticTransBinOp(l, r, \" || \", this.args);\n                },\n\n                RelationalExpression(e) {\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                RelationalExpression_le(l, _, r) {\n                    staticTransBinOp(l, r, \" <= \", this.args);\n                },\n\n                RelationalExpression_ge(l, _, r) {\n                    staticTransBinOp(l, r, \" >= \", this.args);\n                },\n\n                RelationalExpression_lt(l, _, r) {\n                    staticTransBinOp(l, r, \" < \", this.args);\n                },\n\n                RelationalExpression_gt(l, _, r) {\n                    staticTransBinOp(l, r, \" > \", this.args);\n                },\n\n                RelationalExpression_equal(l, _, r) {\n                    staticTransBinOp(l, r, \" == \", this.args);\n                },\n\n                RelationalExpression_notEqual(l, _, r) {\n                    staticTransBinOp(l, r, \" != \", this.args);\n                },\n\n                AddExpression(e) {\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                AddExpression_plus(l, _, r) {\n                    staticTransBinOp(l, r, \" + \", this.args);\n                },\n\n                AddExpression_minus(l, _, r) {\n                    staticTransBinOp(l, r, \" - \", this.args);\n                },\n\n                MulExpression(e) {\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                MulExpression_times(l, _, r) {\n                    staticTransBinOp(l, r, \" * \", this.args);\n                },\n\n                MulExpression_divide(l, _, r) {\n                    staticTransBinOp(l, r, \" / \", this.args);\n                },\n\n                MulExpression_mod(l, _, r) {\n                    staticTransBinOp(l, r, \" % \", this.args);\n                },\n\n                UnaryExpression(e) {\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                UnaryExpression_plus(_p, e) {\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                UnaryExpression_minus(_p, e) {\n                    var js = this.args.js;\n                    js.pushWithSpace(\"-\");\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                UnaryExpression_not(_p, e) {\n                    var js = this.args.js;\n                    js.pushWithSpace(\"!\");\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                PrimExpression(e) {\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                PrimExpression_paren(_o, e, _c) {\n                    e.static(this.args.table, this.args.js, this.args.method, this.args.isOther);\n                },\n\n                PrimExpression_string(e) {\n                    var js = this.args.js;\n                    js.push(e.sourceString);\n                },\n\n                PrimExpression_number(e) {\n                    var js = this.args.js;\n                    js.push(e.sourceString);\n                },\n\n                PrimExpression_field(n, _p, f) {\n                    var js = this.args.js;\n                    n.static(this.args.table, js, this.args.method, this.args.isOther);\n                    js.push(\".\");\n                    js.push(f.sourceString);\n                },\n\n                PrimExpression_variable(n) {\n                    var table = this.args.table;\n                    var js = this.args.js;\n                    var method = this.args.method;\n                    var isOther = this.args.isOther;\n                    js.push('env[\"' + n.sourceString + '\"]');\n                },\n\n                PrimitiveCall(n, _o, as, _c) {\n                    var table = this.args.table;\n                    var js = this.args.js;\n                    var prim = n.sourceString;\n                    var math = [\"random\", // 0 arg\n                                \"abs\", \"acos\", \"acosh\", \"asin\", \"asinh\", \"atan\", \"atanh\",\n                                \"cbrt\", \"ceil\", \"cos\", \"cosh\", \"exp\", \"expm1\", \"floor\",\n                                \"log\", \"log1p\", \"log10\", \"log2\", \"round\", \"sign\", \"sin\",\n                                \"sinh\", \"sqrt\", \"tan\", \"tanh\", \"trunc\", // 1 arg\n                                \"atan2\", \"max\", \"min\", \"pow\" // 2 args\n                               ];\n                    if (math.indexOf(prim) >= 0) {\n                        var actuals = as.static_method_inner(table, null, null, false);\n                        var str = actuals.join(\", \");\n                        js.push(\"Math.\");\n                        js.push(prim);\n                        js.push(\"(\");\n                        js.push(str);\n                        js.push(\")\");\n                    }\n                },\n\n                MethodCall(r, _p, n, _o, as, _c) {\n                    var table = this.args.table;\n                    var js = this.args.js;\n                    var method = n.sourceString;\n\n                    var displayBuiltIns = [\"clear\", \"playSound\", \"loadProgram\"];\n\n                    var builtIns = [\"draw\", \"render\", \"setCount\", \"fillRandom\", \"fillSpace\", \"fillCuboid\", \"fillRandomDir\", \"fillRandomDir3\", \"fillImage\", \"loadVideoFrame\", \"loadData\", \"readValues\", \"start\", \"stop\", \"step\", \"diffuse\", \"increasePatch\", \"increaseVoxel\"];\n                    var myTable = table[n.sourceString];\n\n                    var actuals = as.static_method_inner(table, null, method, false);\n                    if ((r.sourceString === \"Display\" && displayBuiltIns.indexOf(method) >= 0) || builtIns.indexOf(method) >= 0) {\n                        if (actuals.length !== primitives[method].param.size()) {\n                            var error = new Error(\"semantic error\");\n                            error.reason = `argument count does not match for primitive ${method}`;\n                            error.expected = `argument count does not match for primitive ${method}`;\n                            error.pos = as.source.endIdx;\n                            error.src = null;\n                            throw error;\n                        }\n                        var str = actuals.join(\", \");\n                        js.push(`env[\"${r.sourceString}\"].${method}(${str})`);\n                        return;\n                    }\n\n                    var formals;\n                    if (myTable) {\n                        formals = myTable.param;\n                    }\n\n                    if (formals && (actuals.length !== formals.size())) {\n                        var error = new Error(\"semantic error\");\n                        error.reason = `argument count does not match for method ${n.sourceString}`;\n                        error.expected = `argument count does not match for method ${n.sourceString}`;\n                        error.pos = as.source.endIdx;\n                        error.src = null;\n                        throw error;\n                    }\n                    var params = new CodeStream();\n                    var objectsString = new CodeStream();\n\n                    params.addTab();\n                    objectsString.addTab();\n                    for (var i = 0; i < actuals.length; i++) {\n                        var actual = actuals[i];\n                        if (formals) {\n                            var formal = formals.at(i);\n                            var shortName = formal[2];\n                            var isOther = myTable.usedAsOther(shortName);\n                        } else {\n                            var shortName = \"t\" + i;\n                            isOther = false;\n                        }\n\n                        if (isOther) {\n                            objectsString.tab();\n                            objectsString.push(`objects[\"${shortName}\"] = ${actual};\\n`);\n                        } else {\n                            params.push(`params[\"${shortName}\"] = ${actual};\\n`);\n                        }\n                    }\n\n                    var callProgram = `\n(function() {\n    var data = scripts[\"${n.sourceString}\"];\n    if (!data) {\n        var error = new Error(\"semantic error\");\n        error.reason = \"Method named ${n.sourceString} does not exist\";\n        error.expected = \"Method named ${n.sourceString} does not exist\";\n        error.pos = ${_c.source.endIdx};\n        error.src = null;\n        throw error;\n    }\n    var func = data[0];\n    var ins = data[1][0]; // [[name, <fieldName>]]\n    var formals = data[1][1];\n    var outs = data[1][2]; //[[object, <fieldName>]]\n    var objects = {};\n    objects.this = env[\"${r.sourceString}\"];\n    ${objectsString.contents()}\n    var params = {};\n    ${params.contents()}\n    func(objects, outs, ins, params);\n})()`;\n                js.push(callProgram);\n            },\n        });\n    }\n\n    function shouldFire(trigger, env) {\n        if (typeof trigger == \"string\") {\n            var evt = env[trigger];\n            return evt && evt.ready;\n        } else {\n            var key = trigger[0];\n            if (key == \"and\") {\n                return shouldFire(trigger[1], env) && shouldFire(trigger[2], env);\n            } else if (key == \"and\") {\n                return shouldFire(trigger[1], env) || shouldFire(trigger[2], env);\n            } else {\n                return false;\n            }\n        }\n    }\n\n    function resetTrigger(trigger, env) {\n        if (typeof trigger == \"string\") {\n            var evt = env[trigger];\n            if (evt) {\n                evt.ready = false;\n            }\n        } else {\n            resetTrigger(trigger[1], env);\n            resetTrigger(trigger[2], env);\n        }\n    }\n\n    class ShadamaFunction {\n        constructor(name, shadama) {\n            this.name = name;\n            this.shadama = shadama;\n        }\n\n        start() {\n            this.shadama.startScript(this.name);\n        }\n\n        stop() {\n            this.shadama.stopScript(this.name);\n        }\n\n        step() {\n            this.shadama.once(this.name);\n        }\n    }\n\n    class ShadamaEvent {\n        constructor() {\n            this.value = undefined;\n            this.ready = false;\n        }\n\n        setValue(value) {\n            this.value = value;\n            this.ready = true;\n            return this;\n        }\n\n        reset() {\n            this.ready = false;\n        }\n    }\n\n    class ShadamaTrigger {\n        constructor(trigger, triggerAction) {\n            this.trigger = trigger;\n            this.triggerAction = triggerAction;\n        }\n\n        maybeFire(shadama) {\n            var env = shadama.env;\n            if (shouldFire(this.trigger, env)) {\n                resetTrigger(this.trigger, env);\n                var type = this.triggerAction[0];\n                var name = this.triggerAction[1];\n                if (type == \"start\") {\n                    shadama.startScript(name);\n                } else if (type == \"stop\") {\n                    shadama.stopScript(this.triggerAction[1]);\n                } else if (type == \"step\") {\n                    shadama.once(name);\n                }\n            }\n        }\n    }\n\n    class OrderedPair {\n        constructor() {\n            this.keys = [];\n            this.entries = {};\n        }\n\n        add(k, entry) {\n            var maybeEntry = this.entries[k];\n            if (maybeEntry) {\n                if (maybeEntry[0] === entry[0] &&\n                    maybeEntry[1] === entry[1] &&\n                    maybeEntry[2] === entry[2]) {\n                    return;\n                } else {\n                    throw \"error duplicate variable\" + k\n                    return;\n                }\n            }\n            this.entries[k] = entry;\n            this.keys.push(k);\n        }\n\n        addAll(other) {\n            other.keysAndValuesDo((key, entry) =>\n                                  this.add(key, entry));\n        }\n\n        at(key) {\n            if (typeof key === \"number\") {\n                return this.entries[this.keys[key]];\n            } else {\n                return this.entries[key];\n            }\n        }\n\n        keysAndValuesDo(func) {\n            for (var i = 0; i < this.keys.length; i++) {\n                func(this.keys[i], this.entries[this.keys[i]]);\n            }\n        }\n\n        keysAndValuesCollect(func) {\n            var result = [];\n            this.keysAndValuesDo((key, value) => {\n                var element = func(key, value);\n                result.push(element);\n            });\n            return result;\n        }\n\n        has(name) {\n            var found = null;\n            this.keysAndValuesDo((key, value) => {\n                if (value[2] == name) {\n                    found = value;\n                }\n            });\n            return found != null;\n        }\n\n        size() {\n            return this.keys.length;\n        }\n    }\n\n    class SymTable {\n        constructor(entries, optIsPrimitive) {\n            this.forBreed = true;\n            this.hasBreedInput = false;\n            this.hasPatchInput = false;\n            this.defaultUniforms = null;\n            this.defaultAttributes = null;\n\n            this.usedHelpersAndPrimitives = new OrderedPair();   // foo(a) => foo -> foo\n            this.type = optIsPrimitive ? \"primitive\" : \"method\";\n            // - from source (extensional)\n            // I use this term because I want to remember which is which)\n\n            this.thisIn = new OrderedPair();   // v = this.x    -> [\"propIn\", \"this\", \"x\"]\n            this.otherIn = new OrderedPair();  // v = other.x   -> [\"propIn\", \"other\", \"x\"]\n            this.thisOut = new OrderedPair();  // this.x = ... -> [\"propOut\", \"this\", \"x\"]\n            this.otherOut = new OrderedPair(); // other.x = ... -> [\"propOut\", \"other\", \"x\"]\n            this.param = new OrderedPair();   // def foo(a, b, c) -> [[\"param\", null, \"a\"], ...]\n            this.local = new OrderedPair();    // var x = ... -> [\"var\", null, \"x\"]\n\n            // - generated (intensional)\n\n            this.varyingTable = new OrderedPair();\n            this.uniformTable = new OrderedPair();\n            this.scalarParamTable = new OrderedPair();\n\n            if (entries) {\n                for (var i = 0; i < entries.length; i++) {\n                    this.add.apply(this, (entries[i]))\n                }\n            }\n\n            this.defaultUniforms = [\"u_resolution\", \"u_half\"];\n            this.defaultAttributes = [\"a_index\", \"b_index\"];\n        }\n\n        beHelper() {\n            this.type = \"helper\";\n        }\n\n        beStatic() {\n            this.type = \"static\";\n        }\n\n        beEvent(name) {\n            this.type = \"event\";\n            this.eventName = name;\n        }\n\n        isEvent() {\n            return this.type === \"event\";\n        }\n\n        beStaticVariable(name) {\n            this.type = \"staticVar\";\n            this.staticVarName = name;\n        }\n\n        isStaticVariable() {\n            return this.type == \"staticVar\";\n        }\n\n        beTrigger(trigger, action) {\n            // trigger: name | [\"and\", trigger, triger] | [or trigger, trigger]\n            // action [\"start\"|\"step\"|\"stop\", static name]\n            this.type = \"trigger\";\n            this.trigger = trigger;\n            this.triggerAction = action;\n        }\n\n        beData(name, s1, s2) {\n            this.type = \"data\";\n            this.eventName = name;\n            this.eventSource = [s1, s2]; // not really used;\n        }\n\n        process() {\n            // maybe a hack: look for outs that are not ins and add them to ins.  Those are use\n            this.thisOut.keysAndValuesDo((key, entry) => {\n                var newEntry = [\"propIn\", \"this\", entry[2]];\n                var newK = newEntry.join(\".\");\n                this.thisIn.add(newK, newEntry);\n            });\n            this.otherOut.keysAndValuesDo((key, entry) => {\n                var newEntry = [\"propIn\", entry[1], entry[2]];\n                var newK = newEntry.join(\".\");\n                this.otherIn.add(newK, newEntry);\n            });\n\n            this.uniformTable.addAll(this.thisIn);\n            this.uniformTable.addAll(this.otherIn);\n\n            if (this.thisIn.size() > 0) {\n                this.hasBreedInput = true;\n            }\n            if (this.otherIn.size() > 0) {\n                this.hasPatchInput = true;\n            }\n\n            if (this.thisOut.size() > 0 && this.otherOut.size() > 0) {\n                var error = new Error(\"semantic error\");\n                error.reason = \"shadama cannot write into this and others from the same script.\";\n                error.expected = \"Make sure \" + this.methodName + \" only writes into either properties of 'this', or properties of method arguments\";\n                error.pos = this.methodPos;\n                error.src = null;\n                throw error;\n            } else {\n                this.forBreed = this.thisOut.size() > 0;\n            }\n\n            if (this.forBreed) {\n                this.varyingTable.addAll(this.thisOut);\n            } else {\n                this.varyingTable.addAll(this.otherOut);\n            }\n            this.param.keysAndValuesDo((key, entry) => {\n                if (!this.usedAsOther(entry[2])) {\n                    this.scalarParamTable.add(key, entry);\n                }\n            });\n        };\n\n        add(tag, rcvr, name) {\n            var entry = [tag, rcvr, name];\n            var k = [tag, rcvr ? rcvr : \"null\", name].join(\".\");\n\n            if (tag === \"propOut\" && rcvr === \"this\") {\n                this.thisOut.add(k, entry);\n            } else if (tag === \"propOut\" && rcvr !== \"this\") {\n                this.otherOut.add(k, entry);\n            } else if (tag === \"propIn\" && rcvr === \"this\") {\n                this.thisIn.add(k, entry);\n            } else if (tag === \"propIn\" && rcvr !== \"this\") {\n                this.otherIn.add(k, entry);\n            } else if (tag === \"param\") {\n                this.param.add(k, entry);\n            } else if (tag === \"var\") {\n                this.local.add(k, entry);\n            }\n\n            if ((this.otherOut.size() > 0 || this.otherIn.size() > 0) &&\n                this.defaultUniforms.indexOf(\"u_that_x\") < 0) {\n                this.defaultUniforms = this.defaultUniforms.concat([\"u_that_x\", \"u_that_y\"]);\n                if (dimension == 3) {\n                    if (this.defaultUniforms.indexOf(\"u_that_z\") < 0) {\n                        this.defaultUniforms = this.defaultUniforms.concat([\"u_that_z\", \"v_step\", \"v_resolution\"]);\n                    }\n                }\n            }\n        }\n\n        usedAsOther(n) {\n            var result = false;\n            this.otherIn.keysAndValuesDo((k, entry) => {\n                result = result || (entry[1] === n);\n            });\n            this.otherOut.keysAndValuesDo((k, entry) => {\n                result = result || (entry[1] === n);\n            });\n            return result;\n        }\n\n        uniform(entry) {\n            var k = [\"propIn\", entry[1], entry[2]].join(\".\");\n            var entry = this.uniformTable.at(k);\n            if (!entry) {\n                debugger;\n            }\n            return [\"u\", entry[1], entry[2]].join(\"_\");\n        }\n\n        varying(entry) {\n            var k = [\"propOut\", entry[1], entry[2]].join(\".\");\n            var entry = this.varyingTable.at(k);\n            return [\"v\", entry[1],  entry[2]].join(\"_\");\n        }\n\n        out(entry) {\n            var k = [\"propOut\", entry[1], entry[2]].join(\".\");\n            var entry = this.varyingTable.at(k);\n            return [\"o\", entry[1],  entry[2]].join(\"_\");\n        }\n\n        uniforms() {\n            return this.uniformTable.keysAndValuesCollect((key, entry) =>\n                                                          \"uniform sampler2D \" + this.uniform(entry) + \";\");\n        }\n\n        paramUniforms() {\n            var result = [];\n            this.scalarParamTable.keysAndValuesDo((key, entry) => {\n                result.push(\"uniform float u_scalar_\" + entry[2] + \";\");\n            });\n            return result;\n        }\n\n        vertVaryings() {\n            return this.varyingTable.keysAndValuesCollect((key, entry) =>\n                                                          \"out float \" + this.varying(entry) + \";\");\n        }\n\n        fragVaryings() {\n            return this.varyingTable.keysAndValuesCollect((key, entry) =>\n                                                          \"in float \" + this.varying(entry) + \";\");\n        }\n\n        uniformDefaults() {\n            return this.varyingTable.keysAndValuesCollect((key, entry) => {\n                var u_entry = [\"propIn\", entry[1], entry[2]];\n                var ind = entry[1] === \"this\" ? `ivec2(a_index)` : `ivec2(_pos)`;\n                return `${this.varying(entry)} = texelFetch(${this.uniform(u_entry)}, ${ind}, 0).r;`;\n            })\n        }\n\n        outs() {\n            var i = 0;\n            var result = [];\n            this.varyingTable.keysAndValuesDo((key, entry) => {\n                result.push(\"layout (location = \" + i + \") out float \" + this.out(entry) + \";\");\n                i++;\n            })\n            return result;\n        }\n\n        fragColors() {\n            return this.varyingTable.keysAndValuesCollect((key, entry) =>\n                                                          this.out(entry) + \" = \" + this.varying(entry) + \";\");\n        }\n\n        isBuiltin(n) {\n            return this.defaultAttributes.indexOf(n) >= 0 || this.defaultUniforms.indexOf(n) >= 0 ;\n        }\n\n        hasVariable(n) {\n            if (this.param.has(n)) {return true;}\n            if (this.local.has(n)) {return true;}\n            if ([\"this\", \"u_resolution\", \"u_half\", \"a_index\", \"b_index\"].indexOf(n) >= 0) {\n                return true;\n            }\n            return false;\n        }\n\n        insAndParamsAndOuts() {\n            var ins = this.uniformTable.keysAndValuesCollect((key, entry) => [entry[1], entry[2]]);\n            var shortParams = this.scalarParamTable.keysAndValuesCollect((key, entry) => entry[2]);\n            var outs;\n            if (this.forBreed) {\n                outs = this.thisOut.keysAndValuesCollect((key, entry) => [entry[1], entry[2]]);\n            } else {\n                outs = this.otherOut.keysAndValuesCollect((key, entry) => [entry[1], entry[2]]);\n            }\n            return [ins, shortParams, outs];\n        }\n\n        rawTable() {\n            var result = {};\n            this.thisIn.keysAndValuesDo((key, entry) => result[key] = entry);\n            this.thisOut.keysAndValuesDo((key, entry) => result[key] = entry);\n            this.otherIn.keysAndValuesDo((key, entry) => result[key] = entry);\n            this.otherOut.keysAndValuesDo((key, entry) => result[key] = entry);\n            this.param.keysAndValuesDo((key, entry) => result[key] = entry);\n            this.local.keysAndValuesDo((key, entry) => result[key] = entry);\n            return result;\n        }\n\n        maybeHelperOrPrimitive(aString) {\n            this.usedHelpersAndPrimitives.add(aString, aString);\n        }\n\n        primitivesAndHelpers() {\n            return this.allUsedHelpersAndPrimitives.keysAndValuesCollect((n, v) => {\n                if (n === \"random\") {\n                    return `\nhighp float random(float seed) {\n   highp float a  = 12.9898;\n   highp float b  = 78.233;\n   highp float c  = 43758.5453;\n   highp float dt = seed * a + b;\n   highp float sn = mod(dt, 3.14159);\n   return fract(sin(sn) * c);\n}\n`\n                } else if (globalTable[n] && globalTable[n].type == \"helper\") {\n                    return globalTable[n].helperCode;\n                } else {\n                    return \"\";\n                }\n            });\n        }\n    }\n\n    class CodeStream {\n        constructor() {\n            this.result = [];\n            this.hadCR = true;\n            this.hadSpace = true;\n            this.tabLevel = 0;\n        }\n\n        addTab() {\n            this.tabLevel++;\n        }\n\n        decTab() {\n            this.tabLevel--;\n        }\n\n        cr() {\n            this.result.push(\"\\n\");\n            this.hadCR = true;\n        }\n\n        tab() {\n            for (var i = 0; i < this.tabLevel; i++) {\n                this.result.push(\"  \");\n                this.hadSpace = true;\n            }\n        }\n\n        skipSpace() {\n            this.hadSpace = true;\n        }\n\n        crIfNeeded() {\n            if (!this.hadCR) {\n                this.cr();\n            }\n        }\n\n        push(val) {\n            this.result.push(val);\n            var last = val[val.length - 1];\n            this.hadSpace = (last === \" \" || last == \"\\n\" || last == \"{\" || last == \"(\");\n            this.hadCR = last == \"\\n\";\n        }\n\n        pushWithSpace(val) {\n            if (!this.hadSpace) {\n                this.push(\" \");\n            }\n            this.push(val);\n        }\n\n        contents() {\n            function flatten(ary) {\n                return ary.reduce(function (a, b) {\n                    return a.concat(Array.isArray(b) ? flatten(b) : b)}, []).join(\"\");\n            };\n            return flatten(this.result);\n        }\n    }\n\n    function parse(aString, optRule) {\n        var rule = optRule;\n        if (!rule) {\n            rule = \"TopLevel\";\n        }\n        return g.match(aString, rule);\n    }\n\n    function addAsSet(to, from) {\n        for (var k in from) {\n            if (from.hasOwnProperty(k)) {\n                to[k] = from[k];\n            }\n        }\n        return to;\n    }\n\n    function translate(str, prod, errorCallback) {\n        if (!prod) {\n            prod = \"TopLevel\";\n        }\n        var match = g.match(str, prod);\n        if (!match.succeeded()) {\n            console.log(str);\n            console.log(\"did not parse: \" + str);\n            var error = new Error(\"parse error\");\n            error.reason = \"parse error\";\n            error.expected = \"Expected: \" + match.getExpectedText();\n            error.pos = match.getRightmostFailurePosition();\n            error.src = str;\n            throw error;\n        }\n\n        var n = s(match);\n        var symTable = n.symTable(null);\n        return n.glsl(symTable, null, null);\n    }\n\n    var shadama;\n    var defaultProgName = optDefaultProgName || \"5-Bounce.shadama\";\n\n    withThreeJS = !!threeRenderer;\n    domTools = !!optDOMTools;\n\n    renderer = threeRenderer;\n\n    if (!renderer) {\n        renderer = new StandAloneRenderer();\n\n    }\n\n    runTests = /test.?=/.test(window.location.search);\n    showAllEnv = !(/allEnv=/.test(window.location.search));\n    degaussdemo = /degaussdemo/.test(window.location.search);\n\n    if (domTools) {\n        if (degaussdemo) {\n            FIELD_WIDTH = 1024;\n            FIELD_HEIGHT = 768\n            defaultProgName = \"14-DeGauss.shadama\";\n        }\n        var match;\n        match = /fw=([0-9]+)/.exec(window.location.search);\n        FW = (match && match.length == 2) ? parseInt(match[1]) : FIELD_WIDTH;\n\n        match = /fh=([0-9]+)/.exec(window.location.search);\n        FH = (match && match.length == 2)  ? parseInt(match[1]) : FIELD_HEIGHT;\n\n        match = /t=([0-9]+)/.exec(window.location.search);\n        T = (match && match.length == 2) ? parseInt(match[1]) : TEXTURE_SIZE;\n\n        if (runTests) {\n            setTestParams();\n            document.getElementById(\"bigTitle\").innerHTML = \"Shadama Tests\";\n        }\n\n        readout = document.getElementById(\"readout\");\n        watcherList = document.getElementById(\"watcherList\");\n        envList = document.getElementById(\"envList\");\n\n        if (!withThreeJS) {\n            shadamaCanvas = document.getElementById(\"shadamaCanvas\");\n            if (!shadamaCanvas) {\n                shadamaCanvas = document.createElement(\"canvas\");\n            }\n            shadamaCanvas.id = \"shadamaCanvas\";\n            shadamaCanvas.width = FW;\n            shadamaCanvas.height = FH;\n            shadamaCanvas.style.width = FW + \"px\";\n            shadamaCanvas.style.height = FH + \"px\";\n            gl = shadamaCanvas.getContext(\"webgl2\");\n            var ext = gl.getExtension(\"EXT_color_buffer_float\");\n            state = gl;\n        } else {\n            gl = renderer.context;\n            if (!renderer.state) {\n                throw \"a WebGLState has to be passed in\";\n            }\n            state = renderer.state;\n            var ext = gl.getExtension(\"EXT_color_buffer_float\");\n            shadamaCanvas = gl.canvas;\n            shadamaCanvas.id = \"shadamaCanvas\";\n            shadamaCanvas.width = FW;\n            shadamaCanvas.height = FH;\n            shadamaCanvas.style.width = FW + \"px\";\n            shadamaCanvas.style.height = FH + \"px\";\n\n        }\n\n        shadama = new Shadama();\n        shadama.initDisplay();\n        if (!withThreeJS) {\n            shadama.addListeners(shadamaCanvas);\n        }\n\n        if (degaussdemo) {\n            document.getElementById(\"bigTitle\").innerHTML = \"<button>Full Screen</button>\";\n            document.getElementById(\"bigTitle\").firstChild.onclick = shadama.goFullScreen;\n        }\n\n        if (!editor) {\n            function words(str) { let o = {}; str.split(\" \").forEach((s) => o[s] = true); return o; }\n            CodeMirror.defineMIME(\"text/shadama\", {\n                name: \"clike\",\n                keywords: words(\"program breed patch def static var if else\"),\n                atoms: words(\"true false this self width height image mousedown mousemove mouseup time\"),\n            });\n\n            var cm = CodeMirror.fromTextArea(document.getElementById(\"code\"), {\n                mode: \"text/shadama\",\n                matchBrackets: true,\n                \"extraKeys\": {\n                    \"Cmd-S\": function(cm) {shadama.updateCode()},\n                    \"Alt-S\": function(cm) {shadama.updateCode()},\n                    \"Ctrl-S\": function(cm) {shadama.updateCode()},\n                },\n            });\n            shadama.setEditor(cm, \"CodeMirror\");\n        }\n\n        shadama.initServerFiles();\n        shadama.initFileList();\n\n        shadama.initEnv(function() {\n            var func = function (source) {\n                shadama.loadShadama(null, source);\n                if (editor) {\n                    editor.doc.setValue(source);\n                }\n                if (withThreeJS) {\n                    if (parent) {\n                        parent.onAfterRender = shadama.makeOnAfterRender();\n                    }\n                }\n                if (!withThreeJS) {\n                    shadama.maybeRunner();\n                }\n            };\n            shadama.env[\"Display\"].loadProgram(defaultProgName, func);\n        });\n    } else {\n        if (!renderer.context ||\n            renderer.context.constructor != WebGL2RenderingContext) {\n            throw \"needs a WebGL2 context\";\n            return;\n        }\n        gl = renderer.context;\n        if (!renderer.state) {\n            throw \"a WebGLState has to be passed in\";\n        }\n        state = renderer.state;\n        var ext = gl.getExtension(\"EXT_color_buffer_float\");\n        shadama = new Shadama();\n        shadama.initDisplay();\n        shadama.initEnv(function() {\n            if (parent) {\n                shadama.env[\"Display\"].loadProgram(defaultProgName);\n                parent.onAfterRender = shadama.makeOnAfterRender();\n            }\n        });\n    }\n\n    initBreedVAO();\n    initPatchVAO();\n    initFramebuffers();\n\n    programs[\"drawBreed\"] = drawBreedProgram();\n    programs[\"drawPatch\"] = drawPatchProgram();\n    programs[\"debugPatch\"] = debugPatchProgram();\n    programs[\"debugBreed\"] = debugBreedProgram();\n    programs[\"renderBreed\"] = renderBreedProgram();\n    programs[\"renderPatch\"] = renderPatchProgram();\n    programs[\"diffusePatch\"] = diffusePatchProgram();\n    programs[\"increasePatch\"] = increasePatchProgram();\n    programs[\"increaseVoxel\"] = increaseVoxelProgram();\n    programs[\"copyRGBA\"] = copyRGBAProgram();\n\n    initCompiler();\n\n    if (runTests) {\n        setTestParams(shadama.tester());\n        grammarUnitTests();\n        symTableUnitTests();\n        translateTests();\n    }\n//    window.shadama = shadama;\n    return shadama;\n}\n\nexport {\n  ShadamaFactory\n}\n"]}