@petkoneo/phaser3-rex-plugins
Version:
2 lines (1 loc) • 5.21 kB
JavaScript
var e,t;e=void 0,t=function(){var e=function(e,t,i){void 0===i&&(i=[]),i.length=t;for(var s=t;s>0;s--)i[s]=e*(s/t);return i};class t{constructor(e){this.postFXPipeline=e,this.shader=void 0}setShader(e){return this.shader=e,this}getAnotherFrame(e){var t=this.postFXPipeline,i=t.fullFrame1,s=t.fullFrame2;return e===i?s:i}init(e,t){var i=this.postFXPipeline;return void 0===t&&(t=i.fullFrame1),i.copyFrame(e,t),t}draw(e,t){}}class i extends t{draw(e,t){for(var i,s,r,n,l=this.postFXPipeline,o=this.shader,a=e,u=this.getAnotherFrame(a),h=l.pixelWidth/l.renderer.width,p=l.pixelHeight/l.renderer.height,f=0,d=l._quality-1;f<=d;f++)r=(s=l._kernels[f]+.5)*h,n=s*p,l.set2f("uOffset",r,n,o),f<d?(l.bindAndDraw(a,u,!0,!0,o),a=u,u=this.getAnotherFrame(a)):t?(l.bindAndDraw(a,u,!0,!0,o),i=u):l.bindAndDraw(a,null,!0,!0,o);return i}}const s=Phaser.Renderer.WebGL.Pipelines.PostFXPipeline,r=Phaser.Utils.Objects.GetValue;class n extends s{constructor(e){super({name:"rexKawaseBlurFilterPostFx",game:e,renderTarget:!0,fragShader:"#ifdef GL_FRAGMENT_PRECISION_HIGH\n#define highmedp highp\n#else\n#define highmedp mediump\n#endif\nprecision highmedp float;\n\n// Scene buffer\nuniform sampler2D uMainSampler; \nvarying vec2 outTexCoord;\n\n// Effect parameters\nuniform vec2 uOffset;\n\nvoid main (void) {\n vec4 color = vec4(0.0);\n\n // Sample top left pixel\n color += texture2D(uMainSampler, vec2(outTexCoord.x - uOffset.x, outTexCoord.y + uOffset.y));\n\n // Sample top right pixel\n color += texture2D(uMainSampler, vec2(outTexCoord.x + uOffset.x, outTexCoord.y + uOffset.y));\n\n // Sample bottom right pixel\n color += texture2D(uMainSampler, vec2(outTexCoord.x + uOffset.x, outTexCoord.y - uOffset.y));\n\n // Sample bottom left pixel\n color += texture2D(uMainSampler, vec2(outTexCoord.x - uOffset.x, outTexCoord.y - uOffset.y));\n\n // Average\n color *= 0.25;\n\n gl_FragColor = color;\n}\n"}),this.drawer=new i(this),this._kernels=[0],this._blur=0,this._quality=1,this.pixelWidth=1,this.pixelHeight=1}resetFromJSON(e){var t=r(e,"blur",4);return"number"==typeof t?(this.setBlur(t),this.setQuality(r(e,"quality",3))):this.setKernela(t),this.setPixelSize(r(e,"pixelWidth",1),r(e,"pixelHeight",1)),this}onPreRender(){}onDraw(e){this.drawer.draw(this.drawer.init(e))}get blur(){return this._blur}set blur(t){this._blur!==t&&(this._blur=t,e(this._blur,this._quality,this._kernels))}setBlur(e){return this.blur=e,this}get quality(){return this._quality}set quality(t){this._quality!==t&&(this._quality=t,e(this._blur,this._quality,this._kernels))}setQuality(e){return this.quality=e,this}get kernels(){return this._kernels}set kernels(e){void 0===e&&(e=[0]),this._kernels=e,this._quality=e.length,this._blur=Math.max(...e)}setKernela(e){return this.kernels=e,this}setPixelWidth(e){return this.pixelWidth=e,this}setPixelHeight(e){return this.pixelHeight=e,this}setPixelSize(e,t){return void 0===t&&(t=e),this.pixelWidth=e,this.pixelHeight=t,this}}const l=Phaser.Game;var o=function(e){return e instanceof l};const a=Phaser.Scene;var u=function(e){return e instanceof a},h=function(e,t,i){var s;(s=e,null==s||"object"!=typeof s?null:o(s)?s:o(s.game)?s.game:u(s)?s.sys.game:u(s.scene)?s.scene.sys.game:void 0).renderer.pipelines.addPostPipeline(t,i)};const p=Phaser.Utils.Array.SpliceOne;class f extends Phaser.Plugins.BasePlugin{setPostPipelineClass(e,t){return this.PostFxPipelineClass=e,this.postFxPipelineName=t,this}start(){this.game.events.once("destroy",this.destroy,this),h(this.game,this.postFxPipelineName,this.PostFxPipelineClass)}add(e,t){return function(e,t,i){void 0===i&&(i={}),e.setPostPipeline(t);var s=e.postPipelines[e.postPipelines.length-1];return s.resetFromJSON(i),i.name&&(s.name=i.name),s}(e,this.PostFxPipelineClass,t)}remove(e,t){return function(e,t,i){if(void 0===i)for(var s=(r=e.postPipelines).length-1;s>=0;s--)(l=r[s])instanceof t&&(l.destroy(),p(r,s));else{s=0;for(var r,n=(r=e.postPipelines).length;s<n;s++){var l;(l=r[s])instanceof t&&l.name===i&&(l.destroy(),p(r,s))}}e.hasPostPipeline=e.postPipelines.length>0}(e,this.PostFxPipelineClass,t),this}get(e,t){return function(e,t,i){if(void 0===i){for(var s=[],r=0,n=(l=e.postPipelines).length;r<n;r++)(o=l[r])instanceof t&&s.push(o);return s}var l;for(r=0,n=(l=e.postPipelines).length;r<n;r++){var o;if((o=l[r])instanceof t&&o.name===i)return o}}(e,this.PostFxPipelineClass,t)}}var d=function(e){return null==e||""===e||0===e.length};return Phaser.Utils.Objects.GetValue,function(e,t,i,s){if(void 0===s&&(s="."),"object"==typeof e)if(d(t)){if(null==i)return;"object"==typeof i&&(e=i)}else{"string"==typeof t&&(t=t.split(s));var r=t.pop(),n=function(e,t,i){var s=e;if(d(t));else{var r;"string"==typeof t&&(t=t.split("."));for(var n=0,l=t.length;n<l;n++){var o;null!=s[r=t[n]]&&"object"==typeof s[r]||(o=n===l-1?void 0===i?{}:i:{},s[r]=o),s=s[r]}}return s}(e,t);n[r]=i}}(window,"RexPlugins.Pipelines.KawaseBlurFilterPostFx",n),class extends f{constructor(e){super(e),this.setPostPipelineClass(n,"rexKawaseBlurFilterPostFx")}}},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).rexkawaseblurpipelineplugin=t();