interactive-shader-format-for-modv
Version:
Rendering engine for Interactive Shader Format effects and generators
1 lines • 20.7 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.interactiveShaderFormat=t():e.interactiveShaderFormat=t()}(this,function(){return function(e){function t(i){if(r[i])return r[i].exports;var n=r[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,i){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=3)}([function(e,t,r){"use strict";function i(e){var t=/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+/,r=t.exec(e);if(!r)throw new Error("There is no metadata here.");var i=r[0];i=i.substring(1,i.length-1);var n=void 0;try{n=JSON.parse(i)}catch(e){for(var o=e.message.split(" "),s=parseInt(o[o.length-1],10),a=1,h=0;h<s;h++)"\n"===i[h]&&a++;var l=new Error("Something is wrong with your metadata at position "+s+" and line "+a);throw l.lineNumber=a,l}var u=e.indexOf("/*"),f=e.indexOf("*/");return{objectValue:n,stringValue:i,startIndex:u,endIndex:f}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i},function(e,t,r){"use strict";function i(e,t){null==e&&(e={}),this.contextState=t,this.float=e.float,this.gl=this.contextState.gl,this.texture=this.gl.createTexture(),this.gl.bindTexture(this.gl.TEXTURE_2D,this.texture),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL,!0),this.gl.bindTexture(this.gl.TEXTURE_2D,null)}Object.defineProperty(t,"__esModule",{value:!0}),i.prototype.bind=function(e){null!==e&&void 0!==e||(e=-1);var t=this.contextState.newTextureIndex();this.gl.activeTexture(this.gl.TEXTURE0+t),this.gl.bindTexture(this.gl.TEXTURE_2D,this.texture),-1!==e&&this.gl.uniform1i(e,t)},i.prototype.setSize=function(e,t){if(this.width!==e||this.height!==t){this.width=e,this.height=t;var r=this.float?this.gl.FLOAT:this.gl.UNSIGNED_BYTE;this.gl.bindTexture(this.gl.TEXTURE_2D,this.texture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,e,t,0,this.gl.RGBA,r,null)}},i.prototype.destroy=function(){this.gl.deleteTexture(this.texture)},t.default=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),n=function(e){return e&&e.__esModule?e:{default:e}}(i),o={float:"float",image:"sampler2D",bool:"bool",event:"bool",long:"int",color:"vec4",point2D:"vec2"},s=function(){};s.prototype.parse=function(e,t){try{this.valid=!0,this.rawFragmentShader=e,this.rawVertexShader=t||s.vertexShaderDefault,this.error=null;var r=(0,n.default)(this.rawFragmentShader),i=r.objectValue,o=r.stringValue;this.metadata=i,this.credit=i.CREDIT,this.categories=i.CATEGORIES,this.inputs=i.INPUTS,this.imports=i.IMPORTED||{},this.description=i.DESCRIPTION;var a=i.PASSES||[{}];this.passes=this.parsePasses(a);var h=this.rawFragmentShader.indexOf(o)+o.length+2;this.rawFragmentMain=this.rawFragmentShader.substring(h),this.generateShaders(),this.inferFilterType(),this.isfVersion=this.inferISFVersion()}catch(e){this.valid=!1,this.error=e,this.inputs=[],this.categories=[],this.credit="",this.errorLine=e.lineNumber}},s.prototype.parsePasses=function(e){for(var t=[],r=0;r<e.length;++r){var i=e[r],n={};i.TARGET&&(n.target=i.TARGET),n.persistent=!!i.PERSISTENT,n.width=i.WIDTH||"$WIDTH",n.height=i.HEIGHT||"$HEIGHT",n.float=!!i.FLOAT,t.push(n)}return t},s.prototype.generateShaders=function(){this.uniformDefs="";for(var e=0;e<this.inputs.length;++e)this.addUniform(this.inputs[e]);for(var t=0;t<this.passes.length;++t)this.passes[t].target&&this.addUniform({NAME:this.passes[t].target,TYPE:"image"});for(var r in this.imports)({}).hasOwnProperty.call(this.imports,r)&&this.addUniform({NAME:r,TYPE:"image"});this.fragmentShader=this.buildFragmentShader(),this.vertexShader=this.buildVertexShader()},s.prototype.addUniform=function(e){var t=this.inputToType(e.TYPE);this.addUniformLine("uniform "+t+" "+e.NAME+";"),"sampler2D"===t&&this.addUniformLine(this.samplerUniforms(e))},s.prototype.addUniformLine=function(e){this.uniformDefs+=e+"\n"},s.prototype.samplerUniforms=function(e){var t=e.NAME,r="";return r+="uniform vec4 _"+t+"_imgRect;\n",r+="uniform vec2 _"+t+"_imgSize;\n",r+="uniform bool _"+t+"_flip;\n",r+="varying vec2 _"+t+"_normTexCoord;\n",r+="varying vec2 _"+t+"_texCoord;\n",r+="\n"},s.prototype.buildFragmentShader=function(){var e=this.replaceSpecialFunctions(this.rawFragmentMain);return s.fragmentShaderSkeleton.replace("[[uniforms]]",this.uniformDefs).replace("[[main]]",e)},s.prototype.replaceSpecialFunctions=function(e){var t=void 0;return t=/IMG_THIS_PIXEL\((.+?)\)/g,e=e.replace(t,function(e,t){return"texture2D("+t+", isf_FragNormCoord)"}),t=/IMG_THIS_NORM_PIXEL\((.+?)\)/g,e=e.replace(t,function(e,t){return"texture2D("+t+", isf_FragNormCoord)"}),t=/IMG_PIXEL\((.+?)\)/g,e=e.replace(t,function(e,t){var r=t.split(",");return"texture2D("+r[0]+", ("+r[1]+") / RENDERSIZE)"}),t=/IMG_NORM_PIXEL\((.+?)\)/g,e=e.replace(t,function(e,t){var r=t.split(","),i=r[0];return"VVSAMPLER_2DBYNORM("+i+", _"+i+"_imgRect, _"+i+"_imgSize, _"+i+"_flip, "+r[1]+")"})},s.prototype.buildVertexShader=function(){for(var e="\n",t=0;t<this.inputs.length;++t){var r=this.inputs[t];"image"===r.TYPE&&(e+=this.texCoordFunctions(r)+"\n")}return s.vertexShaderSkeleton.replace("[[functions]]",e).replace("[[uniforms]]",this.uniformDefs).replace("[[main]]",this.rawVertexShader)},s.prototype.texCoordFunctions=function(e){var t=e.NAME;return["_[[name]]_texCoord ="," vec2(((isf_fragCoord.x / _[[name]]_imgSize.x * _[[name]]_imgRect.z) + _[[name]]_imgRect.x), "," (isf_fragCoord.y / _[[name]]_imgSize.y * _[[name]]_imgRect.w) + _[[name]]_imgRect.y);","","_[[name]]_normTexCoord ="," vec2((((isf_FragNormCoord.x * _[[name]]_imgSize.x) / _[[name]]_imgSize.x * _[[name]]_imgRect.z) + _[[name]]_imgRect.x),"," ((isf_FragNormCoord.y * _[[name]]_imgSize.y) / _[[name]]_imgSize.y * _[[name]]_imgRect.w) + _[[name]]_imgRect.y);"].join("\n").replace(/\[\[name\]\]/g,t)},s.prototype.inferFilterType=function(){function e(e,t){return e.filter(t).length>0}var t=e(this.inputs,function(e){return"image"===e.TYPE&&"inputImage"===e.NAME}),r=e(this.inputs,function(e){return"image"===e.TYPE&&"startImage"===e.NAME})&&e(this.inputs,function(e){return"image"===e.TYPE&&"endImage"===e.NAME})&&e(this.inputs,function(e){return"float"===e.TYPE&&"progress"===e.NAME});this.type=t?"filter":r?"transition":"generator"},s.prototype.inferISFVersion=function(){var e=2;return(this.metadata.PERSISTENT_BUFFERS||-1!==this.rawFragmentShader.indexOf("vv_FragNormCoord")||-1!==this.rawVertexShader.indexOf("vv_vertShaderInit")||-1!==this.rawVertexShader.indexOf("vv_FragNormCoord"))&&(e=1),e},s.prototype.inputToType=function(e){var t=o[e];if(!t)throw new Error("Unknown input type ["+e+"]");return t},s.fragmentShaderSkeleton="\nprecision highp float;\nprecision highp int;\n\nuniform int PASSINDEX;\nuniform vec2 RENDERSIZE;\nvarying vec2 isf_FragNormCoord;\nvarying vec2 isf_FragCoord;\nuniform float TIME;\nuniform float TIMEDELTA;\nuniform int FRAMEINDEX;\nuniform vec4 DATE;\n\n[[uniforms]]\n\n// We don't need 2DRect functions since we control all inputs. Don't need flip either, but leaving\n// for consistency sake.\nvec4 VVSAMPLER_2DBYPIXEL(sampler2D sampler, vec4 samplerImgRect, vec2 samplerImgSize, bool samplerFlip, vec2 loc) {\n return (samplerFlip)\n ? texture2D (sampler,vec2(((loc.x/samplerImgSize.x*samplerImgRect.z)+samplerImgRect.x), (samplerImgRect.w-(loc.y/samplerImgSize.y*samplerImgRect.w)+samplerImgRect.y)))\n : texture2D (sampler,vec2(((loc.x/samplerImgSize.x*samplerImgRect.z)+samplerImgRect.x), ((loc.y/samplerImgSize.y*samplerImgRect.w)+samplerImgRect.y)));\n}\nvec4 VVSAMPLER_2DBYNORM(sampler2D sampler, vec4 samplerImgRect, vec2 samplerImgSize, bool samplerFlip, vec2 normLoc) {\n vec4 returnMe = VVSAMPLER_2DBYPIXEL( sampler,samplerImgRect,samplerImgSize,samplerFlip,vec2(normLoc.x*samplerImgSize.x, normLoc.y*samplerImgSize.y));\n return returnMe;\n}\n\n[[main]]\n\n",s.vertexShaderDefault="\nvoid main() {\n isf_vertShaderInit();\n}\n",s.vertexShaderSkeleton="\nprecision highp float;\nprecision highp int;\nvoid isf_vertShaderInit();\n\nattribute vec2 position; // -1..1\n\nuniform int PASSINDEX;\nuniform vec2 RENDERSIZE;\nvarying vec2 isf_FragNormCoord; // 0..1\nvec2 isf_fragCoord; // Pixel Space\n\n[[uniforms]]\n\n[[main]]\nvoid isf_vertShaderInit(void) {\ngl_Position = vec4( position, 0.0, 1.0 );\n isf_FragNormCoord = vec2((gl_Position.x+1.0)/2.0, (gl_Position.y+1.0)/2.0);\n isf_fragCoord = floor(isf_FragNormCoord * RENDERSIZE);\n [[functions]]\n}\n",t.default=s},function(e,t,r){"use strict";t.Renderer=r(4).default,t.Parser=r(2).default,t.Upgrader=r(9).default,t.MetadataExtractor=r(0).default},function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function n(e){this.gl=e,this.uniforms=[],this.contextState=new s.default(this.gl),this.setupPaintToScreen(),this.startTime=Date.now(),this.lastRenderTime=Date.now(),this.frameIndex=0}Object.defineProperty(t,"__esModule",{value:!0});var o=r(5),s=i(o),a=r(6),h=i(a),l=r(7),u=i(l),f=r(2),g=i(f),p=r(1),c=i(p),m=r(8),d=i(m);n.prototype.loadSource=function(e,t){var r=new g.default;r.parse(e,t),this.sourceChanged(r.fragmentShader,r.vertexShader,r)},n.prototype.sourceChanged=function(e,t,r){if(this.fragmentShader=e,this.vertexShader=t,this.model=r,!this.model.valid)return this.valid=!1,this.error=this.model.error,void(this.errorLine=this.model.errorLine);try{this.valid=!0,this.error=null,this.errorLine=null,this.setupGL(),this.initUniforms();for(var i=0;i<r.inputs.length;i++){var n=r.inputs[i];void 0!==n.DEFAULT&&this.setValue(n.NAME,n.DEFAULT)}}catch(e){this.valid=!1,this.error=e,this.errorLine=(0,d.default)(e,this.fragmentShader,this.model.rawFragmentShader)}},n.prototype.initUniforms=function(){this.uniforms=this.findUniforms(this.fragmentShader);for(var e=this.model.inputs,t=0;t<e.length;++t){var r=e[t],i=this.uniforms[r.NAME];i&&(i.value=this.model[r.NAME],"t"===i.type&&(i.texture=new c.default({},this.contextState)))}this.pushTextures()},n.prototype.setValue=function(e,t){this.program.use();var r=this.uniforms[e];if(!r)return void console.error("No uniform named "+e);r.value=t,"t"===r.type&&(r.textureLoaded=!1),this.pushUniform(r)},n.prototype.setNormalizedValue=function(e,t){for(var r=this.model.inputs,i=null,n=0;n<r.length;n++){var o=r[n];if(o.NAME===e){i=o;break}}i&&void 0!==i.MIN&&void 0!==i.MAX?this.setValue(e,i.MIN+(i.MAX-i.MIN)*t):console.log("Trying to set normalized value without MIN and MAX input",e,i)},n.prototype.setupPaintToScreen=function(){return this.paintProgram=new h.default(this.gl,this.basicVertexShader,this.basicFragmentShader),this.paintProgram.bindVertices()},n.prototype.setupGL=function(){this.cleanup(),this.program=new h.default(this.gl,this.vertexShader,this.fragmentShader),this.program.bindVertices(),this.generatePersistentBuffers()},n.prototype.generatePersistentBuffers=function(){this.renderBuffers=[];for(var e=this.model.passes,t=0;t<e.length;++t){var r=e[t],i=new u.default(r,this.contextState);r.buffer=i,this.renderBuffers.push(i)}},n.prototype.paintToScreen=function(e,t){this.paintProgram.use(),this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,null),this.gl.viewport(0,0,e.width,e.height);var r=this.paintProgram.getUniformLocation("tex");t.readTexture().bind(r),this.gl.drawArrays(this.gl.TRIANGLES,0,6),this.program.use()},n.prototype.pushTextures=function(){var e=this;Object.keys(this.uniforms).forEach(function(t){var r=e.uniforms[t];"t"===r.type&&e.pushTexture(r)})},n.prototype.pushTexture=function(e){if(e.value&&("CANVAS"===e.value.tagName||e.value.complete||4===e.value.readyState)){var t=this.program.getUniformLocation(e.name);if(e.texture.bind(t),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,e.value),!e.textureLoaded){var r=e.value;e.textureLoaded=!0;var i=r.naturalWidth||r.width||r.videoWidth,n=r.naturalHeight||r.height||r.videoHeight;this.setValue("_"+e.name+"_imgSize",[i,n]),this.setValue("_"+e.name+"_imgRect",[0,0,1,1]),this.setValue("_"+e.name+"_flip",!1)}}},n.prototype.pushUniforms=function(){var e=!0,t=!1,r=void 0;try{for(var i,n=this.uniforms[Symbol.iterator]();!(e=(i=n.next()).done);e=!0){var o=i.value;this.pushUniform(o)}}catch(e){t=!0,r=e}finally{try{!e&&n.return&&n.return()}finally{if(t)throw r}}},n.prototype.pushUniform=function(e){var t=this.program.getUniformLocation(e.name);if(-1!==t){if("t"===e.type)return void this.pushTexture(e);var r=e.value;switch(e.type){case"f":this.gl.uniform1f(t,r);break;case"v2":this.gl.uniform2f(t,r[0],r[1]);break;case"v3":this.gl.uniform3f(t,r[0],r[1],r[2]);break;case"v4":this.gl.uniform4f(t,r[0],r[1],r[2],r[3]);break;case"i":this.gl.uniform1i(t,r);break;case"color":this.gl.uniform4f(t,r[0],r[1],r[2],r[3]);break;default:console.log("Unknown type for uniform setting "+e.type,e)}}},n.prototype.findUniforms=function(e){for(var t=e.split("\n"),r={},i=t.length,n=0;n<i;++n){var o=t[n].trim();if(0===o.indexOf("uniform")){var s=o.split(" "),a=s[2].substring(0,s[2].length-1),h=this.typeToUniform(s[1]);h.name=a,r[a]=h}}return r},n.prototype.typeToUniform=function(e){switch(e){case"float":return{type:"f",value:0};case"vec2":return{type:"v2",value:[0,0]};case"vec3":return{type:"v3",value:[0,0,0]};case"vec4":return{type:"v4",value:[0,0,0,0]};case"bool":case"int":return{type:"i",value:0};case"color":return{type:"v4",value:[0,0,0,0]};case"point2D":return{type:"v2",value:[0,0],isPoint:!0};case"sampler2D":return{type:"t",value:{complete:!1,readyState:0},texture:null,textureUnit:null};default:throw new Error("Unknown uniform type in ISFRenderer.typeToUniform: "+e)}},n.prototype.setDateUniforms=function(){this.program.use();var e=Date.now();this.setValue("TIME",(e-this.startTime)/1e3),this.setValue("TIMEDELTA",(e-this.lastRenderTime)/1e3),this.setValue("FRAMEINDEX",this.frameIndex++);var t=new Date;this.setValue("DATE",[t.getFullYear(),t.getMonth()+1,t.getDate(),3600*t.getHours()+60*t.getMinutes()+t.getSeconds()]),this.lastRenderTime=e},n.prototype.draw=function(e){this.contextState.reset(),this.program.use(),this.setDateUniforms();for(var t=this.renderBuffers,r=0;r<t.length;++r){var i=t[r],n=i.readTexture(),o=this.program.getUniformLocation(i.name);n.bind(o),i.name&&(this.setValue("_"+i.name+"_imgSize",[i.width,i.height]),this.setValue("_"+i.name+"_imgRect",[0,0,1,1]),this.setValue("_"+i.name+"_flip",!1))}for(var s=null,a=this.model.passes,h=0;h<a.length;++h){var l=a[h];this.setValue("PASSINDEX",h);var u=l.buffer;if(l.target){var f=this.evaluateSize(e,l.width),g=this.evaluateSize(e,l.height);u.setSize(f,g);var p=u.writeTexture();this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,u.fbo),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,this.gl.COLOR_ATTACHMENT0,this.gl.TEXTURE_2D,p.texture,0),this.setValue("RENDERSIZE",[u.width,u.height]),s=u,this.gl.viewport(0,0,f,g)}else{var c=e.width,m=e.height;this.gl.bindTexture(this.gl.TEXTURE_2D,null),this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,null),this.setValue("RENDERSIZE",[c,m]),s=null,this.gl.viewport(0,0,c,m)}this.gl.drawArrays(this.gl.TRIANGLES,0,6),this.gl.bindTexture(this.gl.TEXTURE_2D,null),this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,null)}for(var d=0;d<t.length;++d)t[d].flip();s&&this.paintToScreen(e,s)},n.prototype.evaluateSize=function(e,t){t+="";var r=t.replace("$WIDTH",e.offsetWidth||e.width).replace("$HEIGHT",e.offsetHeight||e.height);for(var i in this.uniforms)if({}.hasOwnProperty.call(this.uniforms,i)){var n=this.uniforms[i];r=r.replace("$"+i,n.value)}return Number(r)},n.prototype.cleanup=function(){if(this.contextState.reset(),this.renderBuffers)for(var e=0;e<this.renderBuffers.length;++e)this.renderBuffers[e].destroy()},n.prototype.basicVertexShader="precision mediump float;\nprecision mediump int;\nattribute vec2 position; // -1..1\nvarying vec2 texCoord;\n\nvoid main(void) {\n // Since webgl doesn't support ftransform, we do this by hand.\n gl_Position = vec4(position, 0, 1);\n texCoord = position;\n}\n",n.prototype.basicFragmentShader="precision mediump float;\nuniform sampler2D tex;\nvarying vec2 texCoord;\nvoid main()\n{\n gl_FragColor = texture2D(tex, texCoord * 0.5 + 0.5);\n //gl_FragColor = vec4(texCoord.x);\n}",t.default=n},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){this.gl=e,this.textureIndex=0};i.prototype.newTextureIndex=function(){var e=this.textureIndex;return this.textureIndex+=1,e},i.prototype.reset=function(){this.textureIndex=0},t.default=i},function(e,t,r){"use strict";function i(e,t,r){this.gl=e,this.vShader=this.createShader(t,this.gl.VERTEX_SHADER),this.fShader=this.createShader(r,this.gl.FRAGMENT_SHADER),this.program=this.createProgram(this.vShader,this.fShader),this.locations={}}Object.defineProperty(t,"__esModule",{value:!0}),i.prototype.use=function(){this.gl.useProgram(this.program)},i.prototype.getUniformLocation=function(e){return this.gl.getUniformLocation(this.program,e)},i.prototype.bindVertices=function(){this.use();var e=this.gl.getAttribLocation(this.program,"position");this.buffer=this.gl.createBuffer(),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.buffer);var t=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);this.gl.bufferData(this.gl.ARRAY_BUFFER,t,this.gl.STATIC_DRAW),this.gl.enableVertexAttribArray(e),this.gl.vertexAttribPointer(e,2,this.gl.FLOAT,!1,0,0)},i.prototype.cleanup=function(){this.gl.deleteShader(this.fShader),this.gl.deleteShader(this.vShader),this.gl.deleteProgram(this.program),this.gl.deleteBuffer(this.buffer)},i.prototype.createShader=function(e,t){var r=this.gl.createShader(t);if(this.gl.shaderSource(r,e),this.gl.compileShader(r),!this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)){var i=this.gl.getShaderInfoLog(r);throw console.log("Error Compiling Shader ",i),new Error({message:i,type:"shader"})}return r},i.prototype.createProgram=function(e,t){var r=this.gl.createProgram();if(this.gl.attachShader(r,e),this.gl.attachShader(r,t),this.gl.linkProgram(r),!this.gl.getProgramParameter(r,this.gl.LINK_STATUS)){var i=this.gl.getProgramInfoLog(r);throw console.log("Error in program linking",i),new Error({message:i,type:"program"})}return r},t.default=i},function(e,t,r){"use strict";function i(e,t){this.contextState=t,this.gl=this.contextState.gl,this.persistent=e.persistent,this.name=e.target,this.textures=[],this.textures.push(new o.default(e,this.contextState)),this.textures.push(new o.default(e,this.contextState)),this.flipFlop=!1,this.fbo=this.gl.createFramebuffer(),this.flipFlop=!1}Object.defineProperty(t,"__esModule",{value:!0});var n=r(1),o=function(e){return e&&e.__esModule?e:{default:e}}(n);i.prototype.setSize=function(e,t){if(this.width!==e||this.height!==t){this.width=e,this.height=t;for(var r=0;r<this.textures.length;r++){this.textures[r].setSize(e,t)}}},i.prototype.readTexture=function(){return this.flipFlop?this.textures[1]:this.textures[0]},i.prototype.writeTexture=function(){return this.flipFlop?this.textures[0]:this.textures[1]},i.prototype.flip=function(){this.flipFlop=!this.flipFlop},i.prototype.destroy=function(){for(var e=0;e<this.textures.length;e++){this.textures[e].destroy()}this.gl.deleteFramebuffer(this.fbo)},t.default=i},function(e,t,r){"use strict";function i(e){for(var t=e.split("\n"),r=0;r<t.length;r++)if(console.log("line",t[r]),-1!==t[r].indexOf("main()"))return r;return-1}function n(e,t,r){var n=i(t),o=i(r),s=/ERROR: (\d+):(\d+): (.*)/g,a=s.exec(e.message),h=a[2];return parseInt(h,10)+o-n}Object.defineProperty(t,"__esModule",{value:!0}),t.default=n},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),n=function(e){return e&&e.__esModule?e:{default:e}}(i),o=function(e){var t=(0,n.default)(e),r=t.objectValue,i=r.PERSISTENT_BUFFERS||[];return r.PASSES&&r.PASSES.forEach(function(e){-1!==i.indexOf(e.TARGET)&&(e.persistent=!0)}),delete r.PERSISTENT_BUFFERS,e=e.replace(t.stringValue,JSON.stringify(r,null,2)),e=e.replace(/vv_FragNormCoord/g,"isf_FragNormCoord")},s=function(e){return e=e.replace(/vv_vertShaderInit/g,"isf_vertShaderInit"),e=e.replace(/vv_FragNormCoord/g,"isf_FragNormCoord")};t.default={convertFragment:o,convertVertex:s}}])});