macaw-threejs
Version:
Macaw Three.js is ready to use library to connect Three.js with your project.<br/> Under the hood is a fully optimized, clean Three.js set up to make it easy to implement effects for images (future text, etc.). With effects out of the box, you don't even
2 lines (1 loc) • 2.02 kB
JavaScript
class e{constructor(e){this.countEffectsShaderPass=0,this.countEffectsImage=0;const{core:s}=e;this._core=s}addEffect(e){var s;const{key:r,effect:t}=e;if(!(null===(s=t.type)||void 0===s?void 0:s.has(this._core.scene.settings.type)))throw new Error(`This effect doesn't support ${this._core.scene.settings.type} type!`);return this._core.storage.effects.has(r)?(this.removeEffect({key:r}),!1):(t.core=this._core,this._core.storage.effects.set(r,t),void 0!==t.composerFragmentString&&(this.setCountEffectsShaderPass(1),this._core.controllers.shader.composer.shader.create(this._core.storage.effects),this._core.composer.refreshShaderPass(this._core.controllers.shader.composer.shader,t.composerUniforms)),void 0!==t.imageFragmentString&&(this.setCountEffectsImage(1),this._core.controllers.shader.image.shader.create(this._core.storage.effects),this._core.storage.meshImages.forEach((e=>{e.refreshMaterial(t.imageUniforms)}))),this._core.controllers.render.shouldRender()||this._core.controllers.render.manualRender(),!0)}removeEffect(e){const{key:s}=e;if(!this._core.storage.effects.has(s))return!1;const r=Object.assign({},this._core.storage.effects.get(s));return this._core.storage.effects.delete(s),void 0!==r.composerFragmentString&&(this.setCountEffectsShaderPass(-1),this._core.controllers.shader.composer.shader.create(this._core.storage.effects),this._core.composer.refreshShaderPass(this._core.controllers.shader.composer.shader)),void 0!==r.imageFragmentString&&(this.setCountEffectsImage(-1),this._core.controllers.shader.image.shader.create(this._core.storage.effects),this._core.storage.meshImages.forEach((e=>e.refreshMaterial()))),this._core.controllers.render.shouldRender()||this._core.controllers.render.manualRender(),!0}setCountEffectsShaderPass(e=1){this.countEffectsShaderPass+=e,this._core.controllers.render.isShaderPass=this.countEffectsShaderPass>0}setCountEffectsImage(e){this.countEffectsImage+=e,this._core.controllers.render.isImage=this.countEffectsImage>0}}export{e as EffectController};