@tresjs/post-processing 2.4.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,21 @@
1
1
  /**
2
2
  * name: @tresjs/post-processing
3
- * version: v2.4.0
3
+ * version: v3.0.0
4
4
  * (c) 2025
5
5
  * description: Post-processing library for TresJS
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- import { defineComponent as u, shallowRef as H, provide as He, computed as O, watch as g, onUnmounted as W, renderSlot as Ie, inject as J, watchEffect as w, nextTick as ce, toRaw as fe } from "vue";
9
- import { EffectComposer as he, RenderPass as Je, NormalPass as Ze, DepthDownsamplingPass as _e, EffectPass as Xe, BloomEffect as pe, DepthOfFieldEffect as me, GlitchEffect as j, GlitchMode as $e, NoiseEffect as ve, OutlineEffect as ge, PixelationEffect as xe, VignetteEffect as be, Effect as Z, BlendFunction as _, ToneMappingEffect as Se, ChromaticAberrationEffect as ee, HueSaturationEffect as we, ScanlineEffect as te, ColorAverageEffect as oe, LensDistortionEffect as Ae, ShockWaveEffect as ye, TiltShiftEffect as Me, DotScreenEffect as Te, SepiaEffect as Ce, DepthPickingPass as et, GodRaysEffect as se, ColorDepthEffect as V, GridEffect as Ee, BrightnessContrastEffect as Pe, SMAAEffect as ae, TextureEffect as q, FXAAEffect as re, ASCIIEffect as ne, ASCIITexture as tt } from "postprocessing";
10
- import { useTresContext as y, useLoop as I, normalizeColor as ie } from "@tresjs/core";
11
- import { HalfFloatType as P, Uniform as C, Vector2 as f, Vector3 as B, Mesh as je, SphereGeometry as ot, MeshBasicMaterial as Ve, OrthographicCamera as st, BufferGeometry as at, Float32BufferAttribute as De, ShaderMaterial as T, UniformsUtils as L, WebGLRenderTarget as F, NoBlending as rt, Clock as nt, Color as K, MathUtils as M, DataTexture as it, RedFormat as lt, FloatType as ut, MeshNormalMaterial as ct, NearestFilter as N, DepthTexture as dt, Vector4 as ft, RawShaderMaterial as ht, ColorManagement as pt, SRGBTransfer as mt, LinearToneMapping as vt, ReinhardToneMapping as gt, CineonToneMapping as xt, ACESFilmicToneMapping as bt, AgXToneMapping as St, NeutralToneMapping as wt, CustomToneMapping as At, Texture as Le, LinearFilter as yt, AdditiveBlending as Mt } from "three";
12
- import { useDevicePixelRatio as Ye } from "@vueuse/core";
13
- class Fe {
8
+ import { defineComponent as c, shallowRef as W, provide as je, computed as L, watch as m, onUnmounted as N, renderSlot as Ve, inject as K, watchEffect as S, nextTick as fe, toRaw as me } from "vue";
9
+ import { EffectComposer as ve, RenderPass as Ze, NormalPass as $e, DepthDownsamplingPass as et, EffectPass as _e, BloomEffect as ge, DepthOfFieldEffect as xe, GlitchEffect as I, GlitchMode as tt, NoiseEffect as be, OutlineEffect as Se, PixelationEffect as we, VignetteEffect as Ae, Effect as J, BlendFunction as Z, ToneMappingEffect as ye, ChromaticAberrationEffect as te, HueSaturationEffect as Me, ScanlineEffect as oe, ColorAverageEffect as se, LensDistortionEffect as Te, ShockWaveEffect as Ce, TiltShiftEffect as Ee, DotScreenEffect as Pe, SepiaEffect as De, DepthPickingPass as ot, GodRaysEffect as ae, ColorDepthEffect as X, GridEffect as Le, BrightnessContrastEffect as Fe, SMAAEffect as re, TextureEffect as Y, FXAAEffect as ie, ASCIIEffect as ne, ASCIITexture as st } from "postprocessing";
10
+ import { useTresContext as G, useTres as T, useLoop as he, normalizeColor as le } from "@tresjs/core";
11
+ import { HalfFloatType as C, Uniform as M, Vector2 as d, Vector3 as F, Mesh as Ye, SphereGeometry as at, MeshBasicMaterial as ke, OrthographicCamera as rt, BufferGeometry as it, Float32BufferAttribute as Oe, ShaderMaterial as y, UniformsUtils as P, WebGLRenderTarget as D, NoBlending as nt, Clock as lt, Color as Q, MathUtils as A, DataTexture as ct, RedFormat as ut, FloatType as dt, MeshNormalMaterial as ft, NearestFilter as B, DepthTexture as ht, Vector4 as pt, RawShaderMaterial as mt, ColorManagement as vt, SRGBTransfer as gt, LinearToneMapping as xt, ReinhardToneMapping as bt, CineonToneMapping as St, ACESFilmicToneMapping as wt, AgXToneMapping as At, NeutralToneMapping as yt, CustomToneMapping as Mt, Texture as Be, LinearFilter as Tt, AdditiveBlending as Ct } from "three";
12
+ import { useDevicePixelRatio as qe } from "@vueuse/core";
13
+ class Re {
14
+ /**
15
+ * Returns `true` if WebGL 2 is available.
16
+ *
17
+ * @return {boolean} Whether WebGL 2 is available or not.
18
+ */
14
19
  static isWebGL2Available() {
15
20
  try {
16
21
  const t = document.createElement("canvas");
@@ -19,44 +24,45 @@ class Fe {
19
24
  return !1;
20
25
  }
21
26
  }
27
+ /**
28
+ * Returns `true` if the given color space is available. This method can only be used
29
+ * if WebGL 2 is supported.
30
+ *
31
+ * @param {string} colorSpace - The color space to test.
32
+ * @return {boolean} Whether the given color space is available or not.
33
+ */
22
34
  static isColorSpaceAvailable(t) {
23
35
  try {
24
- const e = document.createElement("canvas"), o = window.WebGL2RenderingContext && e.getContext("webgl2");
25
- return o.drawingBufferColorSpace = t, o.drawingBufferColorSpace === t;
36
+ const e = document.createElement("canvas"), s = window.WebGL2RenderingContext && e.getContext("webgl2");
37
+ return s.drawingBufferColorSpace = t, s.drawingBufferColorSpace === t;
26
38
  } catch {
27
39
  return !1;
28
40
  }
29
41
  }
42
+ /**
43
+ * Returns a `div` element representing a formatted error message that can be appended in
44
+ * web sites if WebGL 2 isn't supported.
45
+ *
46
+ * @return {HTMLDivElement} A `div` element representing a formatted error message that WebGL 2 isn't supported.
47
+ */
30
48
  static getWebGL2ErrorMessage() {
31
- return this.getErrorMessage(2);
49
+ return this._getErrorMessage(2);
32
50
  }
33
- static getErrorMessage(t) {
51
+ // private
52
+ static _getErrorMessage(t) {
34
53
  const e = {
35
54
  1: "WebGL",
36
55
  2: "WebGL 2"
37
- }, o = {
56
+ }, s = {
38
57
  1: window.WebGLRenderingContext,
39
58
  2: window.WebGL2RenderingContext
40
59
  };
41
- let s = 'Your $0 does not seem to support <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" style="color:#000">$1</a>';
60
+ let o = 'Your $0 does not seem to support <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" style="color:#000">$1</a>';
42
61
  const a = document.createElement("div");
43
- return a.id = "webglmessage", a.style.fontFamily = "monospace", a.style.fontSize = "13px", a.style.fontWeight = "normal", a.style.textAlign = "center", a.style.background = "#fff", a.style.color = "#000", a.style.padding = "1.5em", a.style.width = "400px", a.style.margin = "5em auto 0", o[t] ? s = s.replace("$0", "graphics card") : s = s.replace("$0", "browser"), s = s.replace("$1", e[t]), a.innerHTML = s, a;
44
- }
45
- // @deprecated, r168
46
- static isWebGLAvailable() {
47
- console.warn("isWebGLAvailable() has been deprecated and will be removed in r178. Use isWebGL2Available() instead.");
48
- try {
49
- const t = document.createElement("canvas");
50
- return !!(window.WebGLRenderingContext && (t.getContext("webgl") || t.getContext("experimental-webgl")));
51
- } catch {
52
- return !1;
53
- }
54
- }
55
- static getWebGLErrorMessage() {
56
- return console.warn("getWebGLErrorMessage() has been deprecated and will be removed in r178. Use getWebGL2ErrorMessage() instead."), this.getErrorMessage(1);
62
+ return a.id = "webglmessage", a.style.fontFamily = "monospace", a.style.fontSize = "13px", a.style.fontWeight = "normal", a.style.textAlign = "center", a.style.background = "#fff", a.style.color = "#000", a.style.padding = "1.5em", a.style.width = "400px", a.style.margin = "5em auto 0", s[t] ? o = o.replace("$0", "graphics card") : o = o.replace("$0", "browser"), o = o.replace("$1", e[t]), a.innerHTML = o, a;
57
63
  }
58
64
  }
59
- const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
65
+ const $ = Symbol("effectComposerPmndrs"), _t = /* @__PURE__ */ c({
60
66
  __name: "EffectComposerPmndrs",
61
67
  props: {
62
68
  enabled: { type: Boolean, default: !0 },
@@ -66,109 +72,96 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
66
72
  resolutionScale: {},
67
73
  autoClear: { type: Boolean, default: !0 },
68
74
  multisampling: { default: 0 },
69
- frameBufferType: { default: P }
75
+ frameBufferType: { default: C }
70
76
  },
71
77
  emits: ["render"],
72
- setup(n, { expose: t, emit: e }) {
73
- const o = n, s = e, { scene: a, camera: r, renderer: i, sizes: l, render: d } = y(), p = H(null);
74
- let b = null, c = null;
75
- He($, p), t({ composer: p });
76
- const S = () => {
77
- p.value && (c = new Ze(a.value, r.value), c.enabled = !1, p.value.addPass(c), o.resolutionScale !== void 0 && Fe.isWebGL2Available() && (b = new _e({
78
- normalBuffer: c.texture,
79
- resolutionScale: o.resolutionScale
80
- }), b.enabled = !1, p.value.addPass(b)));
81
- }, m = O(() => {
82
- const x = new he(), G = {
83
- depthBuffer: o.depthBuffer !== void 0 ? o.depthBuffer : x.inputBuffer.depthBuffer,
84
- stencilBuffer: o.stencilBuffer !== void 0 ? o.stencilBuffer : x.inputBuffer.stencilBuffer,
85
- multisampling: Fe.isWebGL2Available() ? o.multisampling !== void 0 ? o.multisampling : x.multisampling : 0,
86
- frameBufferType: o.frameBufferType !== void 0 ? o.frameBufferType : P
78
+ setup(r, { expose: t, emit: e }) {
79
+ const s = r, o = e, { scene: a, camera: i, renderer: n, sizes: l } = G(), u = W(null);
80
+ let h = null, x = null;
81
+ je($, u), t({ composer: u });
82
+ const w = () => {
83
+ u.value && (x = new $e(a.value, i.activeCamera.value), x.enabled = !1, u.value.addPass(x), s.resolutionScale !== void 0 && Re.isWebGL2Available() && (h = new et({
84
+ normalBuffer: x.texture,
85
+ resolutionScale: s.resolutionScale
86
+ }), h.enabled = !1, u.value.addPass(h)));
87
+ }, U = L(() => {
88
+ const v = new ve(), b = {
89
+ depthBuffer: s.depthBuffer !== void 0 ? s.depthBuffer : v.inputBuffer.depthBuffer,
90
+ stencilBuffer: s.stencilBuffer !== void 0 ? s.stencilBuffer : v.inputBuffer.stencilBuffer,
91
+ multisampling: Re.isWebGL2Available() ? s.multisampling !== void 0 ? s.multisampling : v.multisampling : 0,
92
+ frameBufferType: s.frameBufferType !== void 0 ? s.frameBufferType : C
87
93
  };
88
- return x.dispose(), G;
89
- }), A = () => {
90
- var x;
91
- !i.value && !a.value && !r.value || ((x = p.value) == null || x.dispose(), p.value = new he(i.value, m.value), p.value.addPass(new Je(a.value, r.value)), o.disableNormalPass || S());
94
+ return v.dispose(), b;
95
+ }), g = () => {
96
+ !n.instance && !a.value && !i.activeCamera.value || (u.value?.dispose(), u.value = new ve(n.instance, U.value), u.value.addPass(new Ze(a.value, i.activeCamera.value)), s.disableNormalPass || w());
92
97
  };
93
- g([i, a, r, () => o.disableNormalPass], () => {
94
- !l.width.value || !l.height.value || A();
95
- }), g(() => [l.width.value, l.height.value], ([x, G]) => {
96
- !x && !G || (p.value ? p.value.setSize(x, G) : A());
98
+ return m([a, i.activeCamera, () => s.disableNormalPass], () => {
99
+ !l.width.value || !l.height.value || g();
100
+ }), m(() => [l.width.value, l.height.value], ([v, b]) => {
101
+ !v && !b || (u.value ? u.value.setSize(v, b) : g());
97
102
  }, {
98
103
  immediate: !0
99
- });
100
- const { render: E } = I();
101
- return E(() => {
102
- if (o.enabled && i.value && p.value && l.width.value && l.height.value && d.frames.value > 0) {
103
- const x = i.value.autoClear;
104
- i.value.autoClear = o.autoClear, o.stencilBuffer && !o.autoClear && i.value.clearStencil(), p.value.render(), s("render", p.value), i.value.autoClear = x;
104
+ }), n.replaceRenderFunction((v) => {
105
+ if (s.enabled && n.instance && u.value && l.width.value && l.height.value) {
106
+ const b = n.instance.autoClear;
107
+ n.instance.autoClear = s.autoClear, s.stencilBuffer && !s.autoClear && n.instance.clearStencil(), u.value.render(), o("render", u.value), n.instance.autoClear = b, v();
105
108
  }
106
- d.frames.value = d.mode.value === "always" ? 1 : Math.max(0, d.frames.value - 1);
107
- }), W(() => {
108
- var x;
109
- (x = p.value) == null || x.dispose();
110
- }), (x, G) => Ie(x.$slots, "default");
111
- }
112
- }), h = (n, t, e) => {
113
- const o = J($), s = H(null), a = H(null), { scene: r, camera: i, invalidate: l } = y();
114
- g(t, () => l());
115
- const d = () => {
116
- var c, S, m;
117
- s.value && ((c = o == null ? void 0 : o.value) == null || c.removePass(s.value)), (S = a.value) == null || S.dispose(), (m = s.value) == null || m.dispose();
118
- }, p = (c) => {
119
- !i.value || !(o != null && o.value) || !r.value || (a.value = n(), s.value = new Xe(i.value, a.value), o.value.addPass(s.value, c));
109
+ }), N(() => {
110
+ u.value?.dispose();
111
+ }), (v, b) => Ve(v.$slots, "default");
112
+ }
113
+ }), f = (r, t, e) => {
114
+ const s = K($), o = W(null), a = W(null), { scene: i, camera: n, invalidate: l } = T();
115
+ m(t, () => l());
116
+ const u = () => {
117
+ o.value && s?.value?.removePass(o.value), a.value?.dispose(), o.value?.dispose();
118
+ }, h = (w) => {
119
+ !n.value || !s?.value || !i.value || (a.value = r(), o.value = new _e(n.value, a.value), s.value.addPass(o.value, w));
120
120
  };
121
- e && g(
122
- () => e.map((c) => t[c]),
121
+ e && m(
122
+ () => e.map((w) => t[w]),
123
123
  () => {
124
- var S;
125
- if (!(o != null && o.value))
124
+ if (!s?.value)
126
125
  return;
127
- const c = (S = o.value) == null ? void 0 : S.passes.findIndex((m) => m === s.value);
128
- ~c && (d(), p(c));
126
+ const w = s.value?.passes.findIndex((U) => U === o.value);
127
+ ~w && (u(), h(w));
129
128
  }
130
- ), w(() => {
131
- !i.value || !(a != null && a.value) || (a.value.mainCamera = i.value);
129
+ ), S(() => {
130
+ !n.value || !a?.value || (a.value.mainCamera = n.value);
132
131
  });
133
- const b = w(() => {
134
- !i.value || !(o != null && o.value) || !r.value || (ce(() => b()), !a.value && p());
132
+ const x = S(() => {
133
+ !n.value || !s?.value || !i.value || (fe(() => x()), !a.value && h());
135
134
  });
136
- return W(() => {
137
- d();
135
+ return N(() => {
136
+ u();
138
137
  }), {
139
- pass: s,
138
+ pass: o,
140
139
  effect: a
141
140
  };
142
- }, ke = /([^[.\]])+/g, Tt = (n, t) => {
143
- if (!t)
144
- return;
145
- const e = Array.isArray(t) ? t : t.match(ke);
146
- return e == null ? void 0 : e.reduce((o, s) => o && o[s], n);
147
- }, Oe = (n, t, e) => {
148
- const o = Array.isArray(t) ? t : t.match(ke);
149
- o && o.reduce((s, a, r) => (s[a] === void 0 && (s[a] = {}), r === o.length - 1 && (s[a] = e), s[a]), n);
150
- }, Ct = (n, t) => {
151
- const e = { ...n };
152
- return t.forEach((o) => delete e[o]), e;
153
- }, X = (n, t, e, o, s = {}) => g(n, (a) => {
154
- var r;
141
+ }, Qe = /([^[.\]])+/g, Et = (r, t) => t ? (Array.isArray(t) ? t : t.match(Qe))?.reduce((s, o) => s && s[o], r) : void 0, Ne = (r, t, e) => {
142
+ const s = Array.isArray(t) ? t : t.match(Qe);
143
+ s && s.reduce((o, a, i) => (o[a] === void 0 && (o[a] = {}), i === s.length - 1 && (o[a] = e), o[a]), r);
144
+ }, Pt = (r, t) => {
145
+ const e = { ...r };
146
+ return t.forEach((s) => delete e[s]), e;
147
+ }, H = (r, t, e, s, o = {}) => m(r, (a) => {
155
148
  if (t.value)
156
149
  if (a === void 0) {
157
- const i = o();
158
- Oe(t.value, e, Tt(i, e)), (r = i.dispose) == null || r.call(i);
150
+ const i = s();
151
+ Ne(t.value, e, Et(i, e)), i.dispose?.();
159
152
  } else
160
- Oe(t.value, e, n());
161
- }, s), v = (n, t, e) => n.map(([o, s]) => X(
162
- o,
163
- t,
153
+ Ne(t.value, e, r());
154
+ }, o), p = (r, t, e) => r.map(([s, o]) => H(
164
155
  s,
165
- e
166
- )), de = (n, t, e) => Object.keys(n).map((o) => X(
167
- () => n[o],
168
156
  t,
169
157
  o,
170
158
  e
171
- )), kt = /* @__PURE__ */ u({
159
+ )), pe = (r, t, e) => Object.keys(r).map((s) => H(
160
+ () => r[s],
161
+ t,
162
+ s,
163
+ e
164
+ )), Yt = /* @__PURE__ */ c({
172
165
  __name: "BloomPmndrs",
173
166
  props: {
174
167
  blendFunction: {},
@@ -178,9 +171,9 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
178
171
  luminanceSmoothing: {},
179
172
  mipmapBlur: { type: Boolean, default: void 0 }
180
173
  },
181
- setup(n, { expose: t }) {
182
- const e = n, { pass: o, effect: s } = h(() => new pe(e), e, ["mipmapBlur"]);
183
- return t({ pass: o, effect: s }), v(
174
+ setup(r, { expose: t }) {
175
+ const e = r, { pass: s, effect: o } = f(() => new ge(e), e, ["mipmapBlur"]);
176
+ return t({ pass: s, effect: o }), p(
184
177
  [
185
178
  [() => e.blendFunction, "blendMode.blendFunction"],
186
179
  [() => e.intensity, "intensity"],
@@ -188,12 +181,12 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
188
181
  [() => e.luminanceSmoothing, "luminanceMaterial.smoothing"],
189
182
  [() => e.luminanceThreshold, "luminanceMaterial.threshold"]
190
183
  ],
191
- s,
192
- () => new pe()
184
+ o,
185
+ () => new ge()
193
186
  ), () => {
194
187
  };
195
188
  }
196
- }), qt = /* @__PURE__ */ u({
189
+ }), kt = /* @__PURE__ */ c({
197
190
  __name: "DepthOfFieldPmndrs",
198
191
  props: {
199
192
  blendFunction: {},
@@ -206,9 +199,9 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
206
199
  resolutionX: {},
207
200
  resolutionY: {}
208
201
  },
209
- setup(n, { expose: t }) {
210
- const e = n, { camera: o } = y(), { pass: s, effect: a } = h(() => new me(o.value, e), e);
211
- return t({ pass: s, effect: a }), v(
202
+ setup(r, { expose: t }) {
203
+ const e = r, { camera: s } = T(), { pass: o, effect: a } = f(() => new xe(s.value, e), e);
204
+ return t({ pass: o, effect: a }), p(
212
205
  [
213
206
  [() => e.blendFunction, "blendMode.blendFunction"],
214
207
  [() => e.worldFocusDistance, "circleOfConfusionMaterial.worldFocusDistance"],
@@ -221,11 +214,11 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
221
214
  [() => e.resolutionY, "resolution.height"]
222
215
  ],
223
216
  a,
224
- () => new me()
217
+ () => new xe()
225
218
  ), () => {
226
219
  };
227
220
  }
228
- }), Qt = /* @__PURE__ */ u({
221
+ }), qt = /* @__PURE__ */ c({
229
222
  __name: "GlitchPmndrs",
230
223
  props: {
231
224
  blendFunction: {},
@@ -240,51 +233,51 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
240
233
  perturbationMap: {},
241
234
  dtSize: {}
242
235
  },
243
- setup(n, { expose: t }) {
244
- const e = n, { pass: o, effect: s } = h(() => new j(e), e, ["dtSize"]);
245
- t({ pass: o, effect: s });
246
- const { onBeforeRender: a } = I();
247
- return a(({ invalidate: r }) => r()), w(() => {
248
- const r = () => {
236
+ setup(r, { expose: t }) {
237
+ const e = r, { pass: s, effect: o } = f(() => new I(e), e, ["dtSize"]);
238
+ t({ pass: s, effect: o });
239
+ const { invalidate: a } = T(), { onBeforeRender: i } = he();
240
+ return i(() => a()), S(() => {
241
+ const n = () => {
249
242
  if (e.mode !== void 0)
250
- return e.active === !1 ? $e.DISABLED : e.mode;
251
- const i = new j(), l = i.mode;
252
- return i.dispose(), l;
243
+ return e.active === !1 ? tt.DISABLED : e.mode;
244
+ const l = new I(), u = l.mode;
245
+ return l.dispose(), u;
253
246
  };
254
- s.value && (s.value.mode = r());
255
- }), X(
247
+ o.value && (o.value.mode = n());
248
+ }), H(
256
249
  () => e.blendFunction,
257
- s,
250
+ o,
258
251
  "blendMode.blendFunction",
259
- () => new j()
260
- ), de(
261
- Ct(e, ["active", "blendFunction"]),
262
- s,
263
- () => new j()
252
+ () => new I()
253
+ ), pe(
254
+ Pt(e, ["active", "blendFunction"]),
255
+ o,
256
+ () => new I()
264
257
  ), () => {
265
258
  };
266
259
  }
267
- }), Kt = /* @__PURE__ */ u({
260
+ }), Qt = /* @__PURE__ */ c({
268
261
  __name: "NoisePmndrs",
269
262
  props: {
270
263
  premultiply: { type: Boolean, default: void 0 },
271
264
  blendFunction: {}
272
265
  },
273
- setup(n, { expose: t }) {
274
- const e = n, { pass: o, effect: s } = h(() => new ve(e), e);
275
- t({ pass: o, effect: s });
276
- const { onBeforeRender: a } = I();
277
- return a(({ invalidate: r }) => r()), v(
266
+ setup(r, { expose: t }) {
267
+ const e = r, { pass: s, effect: o } = f(() => new be(e), e);
268
+ t({ pass: s, effect: o });
269
+ const { invalidate: a } = T(), { onBeforeRender: i } = he();
270
+ return i(() => a()), p(
278
271
  [
279
272
  [() => e.blendFunction, "blendMode.blendFunction"],
280
273
  [() => e.premultiply, "premultiply"]
281
274
  ],
282
- s,
283
- () => new ve()
275
+ o,
276
+ () => new be()
284
277
  ), () => {
285
278
  };
286
279
  }
287
- }), Jt = /* @__PURE__ */ u({
280
+ }), Kt = /* @__PURE__ */ c({
288
281
  __name: "OutlinePmndrs",
289
282
  props: {
290
283
  outlinedObjects: {},
@@ -303,11 +296,11 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
303
296
  hiddenEdgeColor: {},
304
297
  visibleEdgeColor: {}
305
298
  },
306
- setup(n, { expose: t }) {
307
- const e = n, o = (d) => d !== void 0 ? ie(d).getHex() : void 0, { camera: s, scene: a } = y(), { pass: r, effect: i } = h(
308
- () => new ge(
299
+ setup(r, { expose: t }) {
300
+ const e = r, s = (u) => u !== void 0 ? le(u).getHex() : void 0, { camera: o, scene: a } = T(), { pass: i, effect: n } = f(
301
+ () => new Se(
309
302
  a.value,
310
- s.value,
303
+ o.value,
311
304
  {
312
305
  blur: e.blur,
313
306
  xRay: e.xRay,
@@ -321,29 +314,28 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
321
314
  multisampling: e.multisampling,
322
315
  patternTexture: e.patternTexture,
323
316
  resolutionScale: e.resolutionScale,
324
- hiddenEdgeColor: o(e.hiddenEdgeColor),
325
- visibleEdgeColor: o(e.visibleEdgeColor)
317
+ hiddenEdgeColor: s(e.hiddenEdgeColor),
318
+ visibleEdgeColor: s(e.visibleEdgeColor)
326
319
  // width and height are explicitly omitted, because they are deprecated in postprocessing's OutlineEffect
327
320
  }
328
321
  ),
329
322
  e
330
323
  );
331
- t({ pass: r, effect: i }), g(
332
- [() => e.outlinedObjects, i],
324
+ t({ pass: i, effect: n }), m(
325
+ [() => e.outlinedObjects, n],
333
326
  // watchEffect is intentionally not used here as it would result in an endless loop
334
327
  () => {
335
- var d;
336
- (d = i.value) == null || d.selection.set(e.outlinedObjects || []);
328
+ n.value?.selection.set(e.outlinedObjects || []);
337
329
  },
338
330
  {
339
331
  immediate: !0
340
332
  }
341
333
  );
342
- const l = O(() => ({
343
- hiddenEdgeColor: e.hiddenEdgeColor ? ie(e.hiddenEdgeColor) : void 0,
344
- visibleEdgeColor: e.visibleEdgeColor ? ie(e.visibleEdgeColor) : void 0
334
+ const l = L(() => ({
335
+ hiddenEdgeColor: e.hiddenEdgeColor ? le(e.hiddenEdgeColor) : void 0,
336
+ visibleEdgeColor: e.visibleEdgeColor ? le(e.visibleEdgeColor) : void 0
345
337
  }));
346
- return v(
338
+ return p(
347
339
  [
348
340
  [() => e.blendFunction, "blendMode.blendFunction"],
349
341
  [() => e.blur, "blur"],
@@ -360,26 +352,26 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
360
352
  [() => l.value.hiddenEdgeColor, "hiddenEdgeColor"],
361
353
  [() => l.value.visibleEdgeColor, "visibleEdgeColor"]
362
354
  ],
363
- i,
364
- () => new ge()
355
+ n,
356
+ () => new Se()
365
357
  ), () => {
366
358
  };
367
359
  }
368
- }), Zt = /* @__PURE__ */ u({
360
+ }), Jt = /* @__PURE__ */ c({
369
361
  __name: "PixelationPmndrs",
370
362
  props: {
371
363
  granularity: {}
372
364
  },
373
- setup(n, { expose: t }) {
374
- const e = n, { pass: o, effect: s } = h(() => new xe(e.granularity), e);
375
- return t({ pass: o, effect: s }), de(
365
+ setup(r, { expose: t }) {
366
+ const e = r, { pass: s, effect: o } = f(() => new we(e.granularity), e);
367
+ return t({ pass: s, effect: o }), pe(
376
368
  e,
377
- s,
378
- () => new xe()
369
+ o,
370
+ () => new we()
379
371
  ), () => {
380
372
  };
381
373
  }
382
- }), _t = /* @__PURE__ */ u({
374
+ }), Zt = /* @__PURE__ */ c({
383
375
  __name: "VignettePmndrs",
384
376
  props: {
385
377
  technique: {},
@@ -387,22 +379,22 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
387
379
  offset: {},
388
380
  darkness: {}
389
381
  },
390
- setup(n, { expose: t }) {
391
- const e = n, { pass: o, effect: s } = h(() => new be(e), e);
392
- return t({ pass: o, effect: s }), v(
382
+ setup(r, { expose: t }) {
383
+ const e = r, { pass: s, effect: o } = f(() => new Ae(e), e);
384
+ return t({ pass: s, effect: o }), p(
393
385
  [
394
386
  [() => e.blendFunction, "blendMode.blendFunction"],
395
387
  [() => e.offset, "offset"],
396
388
  [() => e.darkness, "darkness"],
397
389
  [() => e.technique, "technique"]
398
390
  ],
399
- s,
400
- () => new be()
391
+ o,
392
+ () => new Ae()
401
393
  ), () => {
402
394
  };
403
395
  }
404
396
  });
405
- class Be extends Z {
397
+ class ze extends J {
406
398
  /**
407
399
  * Creates a new BarrelBlurEffect instance.
408
400
  *
@@ -412,7 +404,7 @@ class Be extends Z {
412
404
  * @param {Vector2} [options.offset] - Offset of the barrel distortion center (0 to 1 for both x and y). This allows you to change the position of the distortion effect.
413
405
  *
414
406
  */
415
- constructor({ blendFunction: t = _.NORMAL, amount: e = 0.15, offset: o = new f(0.5, 0.5) } = {}) {
407
+ constructor({ blendFunction: t = Z.NORMAL, amount: e = 0.15, offset: s = new d(0.5, 0.5) } = {}) {
416
408
  super("BarrelBlurEffect", `
417
409
  uniform float amount;
418
410
  uniform vec2 offset;
@@ -460,9 +452,9 @@ class Be extends Z {
460
452
  `, {
461
453
  blendFunction: t,
462
454
  uniforms: /* @__PURE__ */ new Map([
463
- ["amount", new C(e)],
455
+ ["amount", new M(e)],
464
456
  // Uniform controlling the intensity of distortion
465
- ["offset", new C(o)]
457
+ ["offset", new M(s)]
466
458
  // Uniform controlling the offset of distortion
467
459
  ])
468
460
  });
@@ -473,8 +465,7 @@ class Be extends Z {
473
465
  * @type {number}
474
466
  */
475
467
  get amount() {
476
- var t;
477
- return (t = this.uniforms.get("amount")) == null ? void 0 : t.value;
468
+ return this.uniforms.get("amount")?.value;
478
469
  }
479
470
  set amount(t) {
480
471
  this.uniforms.get("amount").value = t;
@@ -485,40 +476,39 @@ class Be extends Z {
485
476
  * @type {Vector2}
486
477
  */
487
478
  get offset() {
488
- var t;
489
- return (t = this.uniforms.get("offset")) == null ? void 0 : t.value;
479
+ return this.uniforms.get("offset")?.value;
490
480
  }
491
481
  set offset(t) {
492
482
  this.uniforms.get("offset").value = t;
493
483
  }
494
484
  }
495
- const $t = /* @__PURE__ */ u({
485
+ const $t = /* @__PURE__ */ c({
496
486
  __name: "BarrelBlurPmndrs",
497
487
  props: {
498
488
  blendFunction: {},
499
489
  amount: {},
500
490
  offset: {}
501
491
  },
502
- setup(n, { expose: t }) {
503
- const e = n, { pass: o, effect: s } = h(
504
- () => new Be({
492
+ setup(r, { expose: t }) {
493
+ const e = r, { pass: s, effect: o } = f(
494
+ () => new ze({
505
495
  ...e,
506
- offset: Array.isArray(e.offset) ? new f(...e.offset) : e.offset
496
+ offset: Array.isArray(e.offset) ? new d(...e.offset) : e.offset
507
497
  }),
508
498
  e
509
499
  );
510
- return t({ pass: o, effect: s }), v(
500
+ return t({ pass: s, effect: o }), p(
511
501
  [
512
502
  [() => e.blendFunction, "blendMode.blendFunction"],
513
503
  [() => e.amount, "amount"],
514
504
  [() => e.offset, "offset"]
515
505
  ],
516
- s,
517
- () => new Be()
506
+ o,
507
+ () => new ze()
518
508
  ), () => {
519
509
  };
520
510
  }
521
- }), eo = /* @__PURE__ */ u({
511
+ }), eo = /* @__PURE__ */ c({
522
512
  __name: "ToneMappingPmndrs",
523
513
  props: {
524
514
  mode: {},
@@ -529,9 +519,9 @@ const $t = /* @__PURE__ */ u({
529
519
  minLuminance: {},
530
520
  whitePoint: {}
531
521
  },
532
- setup(n, { expose: t }) {
533
- const e = n, { pass: o, effect: s } = h(() => new Se(e), e);
534
- return t({ pass: o, effect: s }), v(
522
+ setup(r, { expose: t }) {
523
+ const e = r, { pass: s, effect: o } = f(() => new ye(e), e);
524
+ return t({ pass: s, effect: o }), p(
535
525
  [
536
526
  [() => e.mode, "mode"],
537
527
  [() => e.blendFunction, "blendMode.blendFunction"],
@@ -541,12 +531,12 @@ const $t = /* @__PURE__ */ u({
541
531
  [() => e.minLuminance, "adaptiveLuminanceMaterial.minLuminance"],
542
532
  [() => e.whitePoint, "whitePoint"]
543
533
  ],
544
- s,
545
- () => new Se()
534
+ o,
535
+ () => new ye()
546
536
  ), () => {
547
537
  };
548
538
  }
549
- }), to = /* @__PURE__ */ u({
539
+ }), to = /* @__PURE__ */ c({
550
540
  __name: "ChromaticAberrationPmndrs",
551
541
  props: {
552
542
  blendFunction: {},
@@ -554,15 +544,15 @@ const $t = /* @__PURE__ */ u({
554
544
  radialModulation: { type: Boolean, default: void 0 },
555
545
  modulationOffset: {}
556
546
  },
557
- setup(n, { expose: t }) {
558
- const e = n, o = new ee(), { pass: s, effect: a } = h(() => new ee({
547
+ setup(r, { expose: t }) {
548
+ const e = r, s = new te(), { pass: o, effect: a } = f(() => new te({
559
549
  ...e,
560
550
  // Unfortunately, these defaults must be set this way as the type in postprocessing is not correct.
561
551
  // The arguments are optional in the actual constructor, but not in the type.
562
- radialModulation: e.radialModulation ?? o.radialModulation,
563
- modulationOffset: e.modulationOffset ?? o.modulationOffset
552
+ radialModulation: e.radialModulation ?? s.radialModulation,
553
+ modulationOffset: e.modulationOffset ?? s.modulationOffset
564
554
  }), e);
565
- return o.dispose(), t({ pass: s, effect: a }), v(
555
+ return s.dispose(), t({ pass: o, effect: a }), p(
566
556
  [
567
557
  [() => e.blendFunction, "blendMode.blendFunction"],
568
558
  [() => e.offset, "offset"],
@@ -570,31 +560,31 @@ const $t = /* @__PURE__ */ u({
570
560
  [() => e.modulationOffset, "modulationOffset"]
571
561
  ],
572
562
  a,
573
- () => new ee()
563
+ () => new te()
574
564
  ), () => {
575
565
  };
576
566
  }
577
- }), oo = /* @__PURE__ */ u({
567
+ }), oo = /* @__PURE__ */ c({
578
568
  __name: "HueSaturationPmndrs",
579
569
  props: {
580
570
  saturation: {},
581
571
  hue: {},
582
572
  blendFunction: {}
583
573
  },
584
- setup(n, { expose: t }) {
585
- const e = n, { pass: o, effect: s } = h(() => new we(e), e);
586
- return t({ pass: o, effect: s }), v(
574
+ setup(r, { expose: t }) {
575
+ const e = r, { pass: s, effect: o } = f(() => new Me(e), e);
576
+ return t({ pass: s, effect: o }), p(
587
577
  [
588
578
  [() => e.blendFunction, "blendMode.blendFunction"],
589
579
  [() => e.hue, "hue"],
590
580
  [() => e.saturation, "saturation"]
591
581
  ],
592
- s,
593
- () => new we()
582
+ o,
583
+ () => new Me()
594
584
  ), () => {
595
585
  };
596
586
  }
597
- }), so = /* @__PURE__ */ u({
587
+ }), so = /* @__PURE__ */ c({
598
588
  __name: "ScanlinePmndrs",
599
589
  props: {
600
590
  blendFunction: {},
@@ -602,25 +592,24 @@ const $t = /* @__PURE__ */ u({
602
592
  scrollSpeed: {},
603
593
  opacity: {}
604
594
  },
605
- setup(n, { expose: t }) {
606
- const e = n, { pass: o, effect: s } = h(() => new te(e), e);
607
- return t({ pass: o, effect: s }), v(
595
+ setup(r, { expose: t }) {
596
+ const e = r, { pass: s, effect: o } = f(() => new oe(e), e);
597
+ return t({ pass: s, effect: o }), p(
608
598
  [
609
599
  [() => e.blendFunction, "blendMode.blendFunction"],
610
600
  [() => e.density, "density"],
611
601
  [() => e.scrollSpeed, "scrollSpeed"]
612
602
  ],
613
- s,
614
- () => new te()
615
- ), g(
603
+ o,
604
+ () => new oe()
605
+ ), m(
616
606
  [() => e.opacity],
617
607
  () => {
618
- var a, r;
619
608
  if (e.opacity !== void 0)
620
- (a = s.value) == null || a.blendMode.setOpacity(e.opacity);
609
+ o.value?.blendMode.setOpacity(e.opacity);
621
610
  else {
622
- const i = new te();
623
- (r = s.value) == null || r.blendMode.setOpacity(i.blendMode.getOpacity()), i.dispose();
611
+ const a = new oe();
612
+ o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
624
613
  }
625
614
  },
626
615
  {
@@ -629,7 +618,7 @@ const $t = /* @__PURE__ */ u({
629
618
  ), () => {
630
619
  };
631
620
  }
632
- }), Et = `
621
+ }), Dt = `
633
622
  uniform float radius;
634
623
  uniform int sectorCount;
635
624
 
@@ -726,7 +715,7 @@ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor)
726
715
  outputColor = vec4(finalColor, inputColor.a);
727
716
  }
728
717
  `;
729
- class Re extends Z {
718
+ class Ue extends J {
730
719
  /**
731
720
  * Creates a new KuwaharaEffect instance.
732
721
  *
@@ -736,12 +725,12 @@ class Re extends Z {
736
725
  * @param {number} [options.sectorCount] - Number of sectors.
737
726
  *
738
727
  */
739
- constructor({ blendFunction: t = _.NORMAL, radius: e = 1, sectorCount: o = 4 } = {}) {
740
- super("KuwaharaEffect", Et, {
728
+ constructor({ blendFunction: t = Z.NORMAL, radius: e = 1, sectorCount: s = 4 } = {}) {
729
+ super("KuwaharaEffect", Dt, {
741
730
  blendFunction: t,
742
731
  uniforms: /* @__PURE__ */ new Map([
743
- ["radius", new C(e)],
744
- ["sectorCount", new C(o)]
732
+ ["radius", new M(e)],
733
+ ["sectorCount", new M(s)]
745
734
  ])
746
735
  });
747
736
  }
@@ -751,8 +740,7 @@ class Re extends Z {
751
740
  * @type {number}
752
741
  */
753
742
  get radius() {
754
- var t;
755
- return (t = this.uniforms.get("radius")) == null ? void 0 : t.value;
743
+ return this.uniforms.get("radius")?.value;
756
744
  }
757
745
  set radius(t) {
758
746
  this.uniforms.get("radius").value = t;
@@ -763,65 +751,63 @@ class Re extends Z {
763
751
  * @type {number}
764
752
  */
765
753
  get sectorCount() {
766
- var t;
767
- return (t = this.uniforms.get("sectorCount")) == null ? void 0 : t.value;
754
+ return this.uniforms.get("sectorCount")?.value;
768
755
  }
769
756
  set sectorCount(t) {
770
757
  this.uniforms.get("sectorCount").value = t;
771
758
  }
772
759
  }
773
- const ao = /* @__PURE__ */ u({
760
+ const ao = /* @__PURE__ */ c({
774
761
  __name: "KuwaharaPmndrs",
775
762
  props: {
776
763
  blendFunction: {},
777
764
  radius: {},
778
765
  sectorCount: {}
779
766
  },
780
- setup(n, { expose: t }) {
781
- const e = n, { pass: o, effect: s } = h(
782
- () => new Re(e),
767
+ setup(r, { expose: t }) {
768
+ const e = r, { pass: s, effect: o } = f(
769
+ () => new Ue(e),
783
770
  e
784
771
  );
785
- return t({ pass: o, effect: s }), v(
772
+ return t({ pass: s, effect: o }), p(
786
773
  [
787
774
  [() => e.blendFunction, "blendMode.blendFunction"],
788
775
  [() => e.radius, "radius"],
789
776
  [() => e.sectorCount, "sectorCount"]
790
777
  ],
791
- s,
792
- () => new Re()
778
+ o,
779
+ () => new Ue()
793
780
  ), () => {
794
781
  };
795
782
  }
796
- }), ro = /* @__PURE__ */ u({
783
+ }), ro = /* @__PURE__ */ c({
797
784
  __name: "ColorAveragePmndrs",
798
785
  props: {
799
786
  blendFunction: {},
800
787
  opacity: {}
801
788
  },
802
- setup(n, { expose: t }) {
803
- const e = n, { pass: o, effect: s } = h(() => new oe(e.blendFunction), e);
804
- return t({ pass: o, effect: s }), X(
789
+ setup(r, { expose: t }) {
790
+ const e = r, { pass: s, effect: o } = f(() => new se(e.blendFunction), e);
791
+ return t({ pass: s, effect: o }), H(
805
792
  () => e.blendFunction,
806
- s,
793
+ o,
807
794
  "blendMode.blendFunction",
808
- () => new oe()
809
- ), g(
810
- [s, () => e.opacity],
795
+ () => new se()
796
+ ), m(
797
+ [o, () => e.opacity],
811
798
  () => {
812
- var a, r;
813
- if (s.value)
799
+ if (o.value)
814
800
  if (e.opacity !== void 0)
815
- (a = s.value) == null || a.blendMode.setOpacity(e.opacity);
801
+ o.value?.blendMode.setOpacity(e.opacity);
816
802
  else {
817
- const i = new oe();
818
- (r = s.value) == null || r.blendMode.setOpacity(i.blendMode.getOpacity()), i.dispose();
803
+ const a = new se();
804
+ o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
819
805
  }
820
806
  }
821
807
  ), () => {
822
808
  };
823
809
  }
824
- }), no = /* @__PURE__ */ u({
810
+ }), io = /* @__PURE__ */ c({
825
811
  __name: "LensDistortionPmndrs",
826
812
  props: {
827
813
  distortion: {},
@@ -829,24 +815,24 @@ const ao = /* @__PURE__ */ u({
829
815
  focalLength: {},
830
816
  skew: {}
831
817
  },
832
- setup(n, { expose: t }) {
833
- const e = n, { pass: o, effect: s } = h(
834
- () => new Ae({
818
+ setup(r, { expose: t }) {
819
+ const e = r, { pass: s, effect: o } = f(
820
+ () => new Te({
835
821
  ...e,
836
- distortion: e.distortion ? Array.isArray(e.distortion) ? new f(...e.distortion) : e.distortion : new f(),
837
- principalPoint: e.principalPoint ? Array.isArray(e.principalPoint) ? new f(...e.principalPoint) : e.principalPoint : new f(),
838
- focalLength: e.focalLength ? Array.isArray(e.focalLength) ? new f(...e.focalLength) : e.focalLength : new f()
822
+ distortion: e.distortion ? Array.isArray(e.distortion) ? new d(...e.distortion) : e.distortion : new d(),
823
+ principalPoint: e.principalPoint ? Array.isArray(e.principalPoint) ? new d(...e.principalPoint) : e.principalPoint : new d(),
824
+ focalLength: e.focalLength ? Array.isArray(e.focalLength) ? new d(...e.focalLength) : e.focalLength : new d()
839
825
  }),
840
826
  e
841
827
  );
842
- return t({ pass: o, effect: s }), de(
828
+ return t({ pass: s, effect: o }), pe(
843
829
  e,
844
- s,
845
- () => new Ae()
830
+ o,
831
+ () => new Te()
846
832
  ), () => {
847
833
  };
848
834
  }
849
- }), io = /* @__PURE__ */ u({
835
+ }), no = /* @__PURE__ */ c({
850
836
  __name: "ShockWavePmndrs",
851
837
  props: {
852
838
  position: {},
@@ -855,18 +841,18 @@ const ao = /* @__PURE__ */ u({
855
841
  maxRadius: {},
856
842
  waveSize: {}
857
843
  },
858
- setup(n, { expose: t }) {
859
- const e = n, { camera: o } = y(), { pass: s, effect: a } = h(
860
- () => new ye(o.value, Array.isArray(e.position) ? new B(...e.position) : e.position, e),
844
+ setup(r, { expose: t }) {
845
+ const e = r, { camera: s } = T(), { pass: o, effect: a } = f(
846
+ () => new Ce(s.value, Array.isArray(e.position) ? new F(...e.position) : e.position, e),
861
847
  e
862
848
  );
863
- return t({ pass: s, effect: a }), g(
849
+ return t({ pass: o, effect: a }), m(
864
850
  () => e.position,
865
- (r) => {
866
- a.value && (Array.isArray(r) ? a.value.position.set(...r) : r instanceof B && a.value.position.copy(r));
851
+ (i) => {
852
+ a.value && (Array.isArray(i) ? a.value.position.set(...i) : i instanceof F && a.value.position.copy(i));
867
853
  },
868
854
  { immediate: !0 }
869
- ), v(
855
+ ), p(
870
856
  [
871
857
  [() => e.amplitude, "amplitude"],
872
858
  [() => e.waveSize, "waveSize"],
@@ -874,11 +860,11 @@ const ao = /* @__PURE__ */ u({
874
860
  [() => e.speed, "speed"]
875
861
  ],
876
862
  a,
877
- () => new ye()
863
+ () => new Ce()
878
864
  ), () => {
879
865
  };
880
866
  }
881
- }), lo = /* @__PURE__ */ u({
867
+ }), lo = /* @__PURE__ */ c({
882
868
  __name: "TiltShiftPmndrs",
883
869
  props: {
884
870
  blendFunction: {},
@@ -891,9 +877,9 @@ const ao = /* @__PURE__ */ u({
891
877
  resolutionX: {},
892
878
  resolutionY: {}
893
879
  },
894
- setup(n, { expose: t }) {
895
- const e = n, { pass: o, effect: s } = h(() => new Me(e), e);
896
- return t({ pass: o, effect: s }), v(
880
+ setup(r, { expose: t }) {
881
+ const e = r, { pass: s, effect: o } = f(() => new Ee(e), e);
882
+ return t({ pass: s, effect: o }), p(
897
883
  [
898
884
  [() => e.blendFunction, "blendMode.blendFunction"],
899
885
  [() => e.offset, "offset"],
@@ -905,59 +891,59 @@ const ao = /* @__PURE__ */ u({
905
891
  [() => e.resolutionX, "resolution.width"],
906
892
  [() => e.resolutionY, "resolution.height"]
907
893
  ],
908
- s,
909
- () => new Me()
894
+ o,
895
+ () => new Ee()
910
896
  ), () => {
911
897
  };
912
898
  }
913
- }), uo = /* @__PURE__ */ u({
899
+ }), co = /* @__PURE__ */ c({
914
900
  __name: "DotScreenPmndrs",
915
901
  props: {
916
902
  angle: {},
917
903
  scale: {},
918
904
  blendFunction: {}
919
905
  },
920
- setup(n, { expose: t }) {
921
- const e = n, { pass: o, effect: s } = h(() => new Te(e), e);
922
- return t({ pass: o, effect: s }), v(
906
+ setup(r, { expose: t }) {
907
+ const e = r, { pass: s, effect: o } = f(() => new Pe(e), e);
908
+ return t({ pass: s, effect: o }), p(
923
909
  [
924
910
  [() => e.blendFunction, "blendMode.blendFunction"],
925
911
  [() => e.angle, "angle"],
926
912
  [() => e.scale, "scale"]
927
913
  ],
928
- s,
929
- () => new Te()
914
+ o,
915
+ () => new Pe()
930
916
  ), () => {
931
917
  };
932
918
  }
933
- }), co = /* @__PURE__ */ u({
919
+ }), uo = /* @__PURE__ */ c({
934
920
  __name: "SepiaPmndrs",
935
921
  props: {
936
922
  blendFunction: {},
937
923
  intensity: {}
938
924
  },
939
- setup(n, { expose: t }) {
940
- const e = n, { pass: o, effect: s } = h(() => new Ce(e), e);
941
- return t({ pass: o, effect: s }), v(
925
+ setup(r, { expose: t }) {
926
+ const e = r, { pass: s, effect: o } = f(() => new De(e), e);
927
+ return t({ pass: s, effect: o }), p(
942
928
  [
943
929
  [() => e.blendFunction, "blendMode.blendFunction"],
944
930
  [() => e.intensity, "intensity"]
945
931
  ],
946
- s,
947
- () => new Ce()
932
+ o,
933
+ () => new De()
948
934
  ), () => {
949
935
  };
950
936
  }
951
937
  });
952
- class Ne extends Z {
938
+ class We extends J {
953
939
  /**
954
940
  * Creates a new LinocutEffect instance.
955
941
  *
956
942
  * @param {LinocutPmndrsProps} [options] - Configuration options for the effect.
957
943
  *
958
944
  */
959
- constructor({ blendFunction: t = _.NORMAL, scale: e = 0.85, noiseScale: o = 0, center: s = [0.5, 0.5], rotation: a = 0 } = {}) {
960
- const r = Array.isArray(s) ? new f().fromArray(s) : s;
945
+ constructor({ blendFunction: t = Z.NORMAL, scale: e = 0.85, noiseScale: s = 0, center: o = [0.5, 0.5], rotation: a = 0 } = {}) {
946
+ const i = Array.isArray(o) ? new d().fromArray(o) : o;
961
947
  super("LinocutEffect", `
962
948
  uniform float scale;
963
949
  uniform float noiseScale;
@@ -1021,43 +1007,39 @@ class Ne extends Z {
1021
1007
  `, {
1022
1008
  blendFunction: t,
1023
1009
  uniforms: /* @__PURE__ */ new Map([
1024
- ["scale", new C(e)],
1025
- ["noiseScale", new C(o)],
1026
- ["center", new C(r)],
1027
- ["rotation", new C(a)]
1010
+ ["scale", new M(e)],
1011
+ ["noiseScale", new M(s)],
1012
+ ["center", new M(i)],
1013
+ ["rotation", new M(a)]
1028
1014
  ])
1029
1015
  });
1030
1016
  }
1031
1017
  get scale() {
1032
- var t;
1033
- return (t = this.uniforms.get("scale")) == null ? void 0 : t.value;
1018
+ return this.uniforms.get("scale")?.value;
1034
1019
  }
1035
1020
  set scale(t) {
1036
1021
  this.uniforms.get("scale").value = t;
1037
1022
  }
1038
1023
  get noiseScale() {
1039
- var t;
1040
- return (t = this.uniforms.get("noiseScale")) == null ? void 0 : t.value;
1024
+ return this.uniforms.get("noiseScale")?.value;
1041
1025
  }
1042
1026
  set noiseScale(t) {
1043
1027
  this.uniforms.get("noiseScale").value = t;
1044
1028
  }
1045
1029
  get center() {
1046
- var t;
1047
- return (t = this.uniforms.get("center")) == null ? void 0 : t.value;
1030
+ return this.uniforms.get("center")?.value;
1048
1031
  }
1049
1032
  set center(t) {
1050
- this.uniforms.get("center").value = Array.isArray(t) ? new f().fromArray(t) : t;
1033
+ this.uniforms.get("center").value = Array.isArray(t) ? new d().fromArray(t) : t;
1051
1034
  }
1052
1035
  get rotation() {
1053
- var t;
1054
- return (t = this.uniforms.get("rotation")) == null ? void 0 : t.value;
1036
+ return this.uniforms.get("rotation")?.value;
1055
1037
  }
1056
1038
  set rotation(t) {
1057
1039
  this.uniforms.get("rotation").value = t;
1058
1040
  }
1059
1041
  }
1060
- const fo = /* @__PURE__ */ u({
1042
+ const fo = /* @__PURE__ */ c({
1061
1043
  __name: "LinocutPmndrs",
1062
1044
  props: {
1063
1045
  blendFunction: {},
@@ -1066,15 +1048,15 @@ const fo = /* @__PURE__ */ u({
1066
1048
  center: {},
1067
1049
  rotation: {}
1068
1050
  },
1069
- setup(n, { expose: t }) {
1070
- const e = n, { pass: o, effect: s } = h(
1071
- () => new Ne({
1051
+ setup(r, { expose: t }) {
1052
+ const e = r, { pass: s, effect: o } = f(
1053
+ () => new We({
1072
1054
  ...e,
1073
- center: e.center instanceof f ? [e.center.x, e.center.y] : e.center
1055
+ center: e.center instanceof d ? [e.center.x, e.center.y] : e.center
1074
1056
  }),
1075
1057
  e
1076
1058
  );
1077
- return t({ pass: o, effect: s }), v(
1059
+ return t({ pass: s, effect: o }), p(
1078
1060
  [
1079
1061
  [() => e.blendFunction, "blendMode.blendFunction"],
1080
1062
  [() => e.scale, "scale"],
@@ -1082,28 +1064,27 @@ const fo = /* @__PURE__ */ u({
1082
1064
  [() => e.center, "center"],
1083
1065
  [() => e.rotation, "rotation"]
1084
1066
  ],
1085
- s,
1086
- () => new Ne()
1067
+ o,
1068
+ () => new We()
1087
1069
  ), () => {
1088
1070
  };
1089
1071
  }
1090
- }), ho = /* @__PURE__ */ u({
1072
+ }), ho = /* @__PURE__ */ c({
1091
1073
  __name: "DepthPickingPassPmndrs",
1092
1074
  props: {
1093
1075
  depthPacking: {},
1094
1076
  mode: {}
1095
1077
  },
1096
- setup(n, { expose: t }) {
1097
- const e = n, o = J($), s = new et(e), a = w(() => {
1098
- o != null && o.value && (ce(() => a()), o.value.addPass(s));
1078
+ setup(r, { expose: t }) {
1079
+ const e = r, s = K($), o = new ot(e), a = S(() => {
1080
+ s?.value && (fe(() => a()), s.value.addPass(o));
1099
1081
  });
1100
- return W(() => {
1101
- var r;
1102
- !(o != null && o.value) || !s || ((r = o == null ? void 0 : o.value) == null || r.removePass(s), s.dispose());
1103
- }), t({ pass: s }), () => {
1082
+ return N(() => {
1083
+ !s?.value || !o || (s?.value?.removePass(o), o.dispose());
1084
+ }), t({ pass: o }), () => {
1104
1085
  };
1105
1086
  }
1106
- }), po = /* @__PURE__ */ u({
1087
+ }), po = /* @__PURE__ */ c({
1107
1088
  __name: "GodRaysPmndrs",
1108
1089
  props: {
1109
1090
  blendFunction: {},
@@ -1121,17 +1102,17 @@ const fo = /* @__PURE__ */ u({
1121
1102
  samples: {},
1122
1103
  clampMax: {}
1123
1104
  },
1124
- setup(n, { expose: t }) {
1125
- const e = n, { camera: o } = y(), s = O(
1126
- () => e.lightSource ?? new je(
1127
- new ot(1e-5),
1128
- new Ve({ visible: !1 })
1105
+ setup(r, { expose: t }) {
1106
+ const e = r, { camera: s } = T(), o = L(
1107
+ () => e.lightSource ?? new Ye(
1108
+ new at(1e-5),
1109
+ new ke({ visible: !1 })
1129
1110
  )
1130
- ), { pass: a, effect: r } = h(
1131
- () => new se(o.value, s.value, e),
1111
+ ), { pass: a, effect: i } = f(
1112
+ () => new ae(s.value, o.value, e),
1132
1113
  e
1133
1114
  );
1134
- return t({ pass: a, effect: r }), v(
1115
+ return t({ pass: a, effect: i }), p(
1135
1116
  [
1136
1117
  [() => e.blendFunction, "blendMode.blendFunction"],
1137
1118
  [() => e.density, "godRaysMaterial.density"],
@@ -1146,26 +1127,25 @@ const fo = /* @__PURE__ */ u({
1146
1127
  [() => e.kernelSize, "blurPass.kernelSize"],
1147
1128
  [() => e.blur, "blurPass.enabled"]
1148
1129
  ],
1149
- r,
1150
- () => new se()
1151
- ), g(
1152
- [() => e.lightSource, r],
1130
+ i,
1131
+ () => new ae()
1132
+ ), m(
1133
+ [() => e.lightSource, i],
1153
1134
  () => {
1154
- r.value && (r.value.lightSource = fe(s.value));
1135
+ i.value && (i.value.lightSource = me(o.value));
1155
1136
  },
1156
1137
  { immediate: !0 }
1157
- ), g(
1138
+ ), m(
1158
1139
  [() => e.opacity],
1159
1140
  () => {
1160
- var i, l;
1161
1141
  if (e.opacity !== void 0)
1162
- (i = r.value) == null || i.blendMode.setOpacity(e.opacity);
1142
+ i.value?.blendMode.setOpacity(e.opacity);
1163
1143
  else {
1164
- const d = new se(
1165
- o.value,
1166
- fe(s.value)
1144
+ const n = new ae(
1145
+ s.value,
1146
+ me(o.value)
1167
1147
  );
1168
- (l = r.value) == null || l.blendMode.setOpacity(d.blendMode.getOpacity()), d.dispose();
1148
+ i.value?.blendMode.setOpacity(n.blendMode.getOpacity()), n.dispose();
1169
1149
  }
1170
1150
  },
1171
1151
  {
@@ -1174,69 +1154,67 @@ const fo = /* @__PURE__ */ u({
1174
1154
  ), () => {
1175
1155
  };
1176
1156
  }
1177
- }), mo = /* @__PURE__ */ u({
1157
+ }), mo = /* @__PURE__ */ c({
1178
1158
  __name: "ColorDepthPmndrs",
1179
1159
  props: {
1180
1160
  blendFunction: {},
1181
1161
  bits: {},
1182
1162
  opacity: {}
1183
1163
  },
1184
- setup(n, { expose: t }) {
1185
- const e = n, { pass: o, effect: s } = h(() => new V(e), e);
1186
- return t({ pass: o, effect: s }), X(
1164
+ setup(r, { expose: t }) {
1165
+ const e = r, { pass: s, effect: o } = f(() => new X(e), e);
1166
+ return t({ pass: s, effect: o }), H(
1187
1167
  () => e.blendFunction,
1188
- s,
1168
+ o,
1189
1169
  "blendMode.blendFunction",
1190
- () => new V()
1191
- ), g(
1192
- [s, () => e.bits],
1170
+ () => new X()
1171
+ ), m(
1172
+ [o, () => e.bits],
1193
1173
  () => {
1194
- var a, r;
1195
- if (s.value)
1174
+ if (o.value)
1196
1175
  if (e.bits !== void 0)
1197
- (a = s.value) == null || a.setBitDepth(e.bits);
1176
+ o.value?.setBitDepth(e.bits);
1198
1177
  else {
1199
- const i = new V();
1200
- (r = s.value) == null || r.setBitDepth(i.getBitDepth()), i.dispose();
1178
+ const a = new X();
1179
+ o.value?.setBitDepth(a.getBitDepth()), a.dispose();
1201
1180
  }
1202
1181
  }
1203
- ), g(
1204
- [s, () => e.opacity],
1182
+ ), m(
1183
+ [o, () => e.opacity],
1205
1184
  () => {
1206
- var a, r;
1207
- if (s.value)
1185
+ if (o.value)
1208
1186
  if (e.opacity !== void 0)
1209
- (a = s.value) == null || a.blendMode.setOpacity(e.opacity);
1187
+ o.value?.blendMode.setOpacity(e.opacity);
1210
1188
  else {
1211
- const i = new V();
1212
- (r = s.value) == null || r.blendMode.setOpacity(i.blendMode.getOpacity()), i.dispose();
1189
+ const a = new X();
1190
+ o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
1213
1191
  }
1214
1192
  }
1215
1193
  ), () => {
1216
1194
  };
1217
1195
  }
1218
- }), vo = /* @__PURE__ */ u({
1196
+ }), vo = /* @__PURE__ */ c({
1219
1197
  __name: "GridPmndrs",
1220
1198
  props: {
1221
1199
  blendFunction: {},
1222
1200
  scale: {},
1223
1201
  lineWidth: {}
1224
1202
  },
1225
- setup(n, { expose: t }) {
1226
- const e = n, { pass: o, effect: s } = h(() => new Ee(e), e);
1227
- return t({ pass: o, effect: s }), v(
1203
+ setup(r, { expose: t }) {
1204
+ const e = r, { pass: s, effect: o } = f(() => new Le(e), e);
1205
+ return t({ pass: s, effect: o }), p(
1228
1206
  [
1229
1207
  [() => e.blendFunction, "blendMode.blendFunction"],
1230
1208
  [() => e.scale, "scale"],
1231
1209
  [() => e.lineWidth, "lineWidth"]
1232
1210
  ],
1233
- s,
1234
- () => new Ee()
1211
+ o,
1212
+ () => new Le()
1235
1213
  ), () => {
1236
1214
  };
1237
1215
  }
1238
1216
  });
1239
- class ze extends Z {
1217
+ class Ge extends J {
1240
1218
  /**
1241
1219
  * Creates a new FishEyeEffect instance.
1242
1220
  *
@@ -1247,7 +1225,7 @@ class ze extends Z {
1247
1225
  * @param {number} [options.scale] - Scale.
1248
1226
  *
1249
1227
  */
1250
- constructor({ blendFunction: t = _.NORMAL, lensS: e = new f(1, 1), lensF: o = new f(0, 1), scale: s = 1 } = {}) {
1228
+ constructor({ blendFunction: t = Z.NORMAL, lensS: e = new d(1, 1), lensF: s = new d(0, 1), scale: o = 1 } = {}) {
1251
1229
  super("FishEyeEffect", `
1252
1230
  uniform vec2 lensS;
1253
1231
  uniform vec2 lensF;
@@ -1269,9 +1247,9 @@ class ze extends Z {
1269
1247
  `, {
1270
1248
  blendFunction: t,
1271
1249
  uniforms: /* @__PURE__ */ new Map([
1272
- ["lensS", new C(e)],
1273
- ["lensF", new C(o)],
1274
- ["scale", new C(s)]
1250
+ ["lensS", new M(e)],
1251
+ ["lensF", new M(s)],
1252
+ ["scale", new M(o)]
1275
1253
  ])
1276
1254
  });
1277
1255
  }
@@ -1281,8 +1259,7 @@ class ze extends Z {
1281
1259
  * @type {Vector2}
1282
1260
  */
1283
1261
  get lensS() {
1284
- var t;
1285
- return (t = this.uniforms.get("lensS")) == null ? void 0 : t.value;
1262
+ return this.uniforms.get("lensS")?.value;
1286
1263
  }
1287
1264
  set lensS(t) {
1288
1265
  this.uniforms.get("lensS").value = t;
@@ -1293,8 +1270,7 @@ class ze extends Z {
1293
1270
  * @type {Vector2}
1294
1271
  */
1295
1272
  get lensF() {
1296
- var t;
1297
- return (t = this.uniforms.get("lensF")) == null ? void 0 : t.value;
1273
+ return this.uniforms.get("lensF")?.value;
1298
1274
  }
1299
1275
  set lensF(t) {
1300
1276
  this.uniforms.get("lensF").value = t;
@@ -1305,14 +1281,13 @@ class ze extends Z {
1305
1281
  * @type {number}
1306
1282
  */
1307
1283
  get scale() {
1308
- var t;
1309
- return (t = this.uniforms.get("scale")) == null ? void 0 : t.value;
1284
+ return this.uniforms.get("scale")?.value;
1310
1285
  }
1311
1286
  set scale(t) {
1312
1287
  this.uniforms.get("scale").value = t;
1313
1288
  }
1314
1289
  }
1315
- const go = /* @__PURE__ */ u({
1290
+ const go = /* @__PURE__ */ c({
1316
1291
  __name: "FishEyePmndrs",
1317
1292
  props: {
1318
1293
  blendFunction: {},
@@ -1320,56 +1295,56 @@ const go = /* @__PURE__ */ u({
1320
1295
  lensF: {},
1321
1296
  scale: {}
1322
1297
  },
1323
- setup(n, { expose: t }) {
1324
- const e = n, o = O(
1325
- () => Array.isArray(e.lensS) ? new f(...e.lensS) : e.lensS
1326
- ), s = O(
1327
- () => Array.isArray(e.lensF) ? new f(...e.lensF) : e.lensF
1328
- ), { pass: a, effect: r } = h(
1329
- () => new ze({
1298
+ setup(r, { expose: t }) {
1299
+ const e = r, s = L(
1300
+ () => Array.isArray(e.lensS) ? new d(...e.lensS) : e.lensS
1301
+ ), o = L(
1302
+ () => Array.isArray(e.lensF) ? new d(...e.lensF) : e.lensF
1303
+ ), { pass: a, effect: i } = f(
1304
+ () => new Ge({
1330
1305
  ...e,
1331
- lensS: o.value,
1332
- lensF: s.value
1306
+ lensS: s.value,
1307
+ lensF: o.value
1333
1308
  }),
1334
1309
  e
1335
1310
  );
1336
- return t({ pass: a, effect: r }), v(
1311
+ return t({ pass: a, effect: i }), p(
1337
1312
  [
1338
1313
  [() => e.blendFunction, "blendMode.blendFunction"],
1339
- [() => o.value, "lensS"],
1340
- [() => s.value, "lensF"],
1314
+ [() => s.value, "lensS"],
1315
+ [() => o.value, "lensF"],
1341
1316
  [() => e.scale, "scale"]
1342
1317
  ],
1343
- r,
1344
- () => new ze()
1318
+ i,
1319
+ () => new Ge()
1345
1320
  ), () => {
1346
1321
  };
1347
1322
  }
1348
- }), xo = /* @__PURE__ */ u({
1323
+ }), xo = /* @__PURE__ */ c({
1349
1324
  __name: "BrightnessContrastPmndrs",
1350
1325
  props: {
1351
1326
  blendFunction: {},
1352
1327
  brightness: {},
1353
1328
  contrast: {}
1354
1329
  },
1355
- setup(n, { expose: t }) {
1356
- const e = n, { pass: o, effect: s } = h(() => new Pe(e), e);
1357
- return t({ pass: o, effect: s }), v(
1330
+ setup(r, { expose: t }) {
1331
+ const e = r, { pass: s, effect: o } = f(() => new Fe(e), e);
1332
+ return t({ pass: s, effect: o }), p(
1358
1333
  [
1359
1334
  [() => e.blendFunction, "blendMode.blendFunction"],
1360
1335
  [() => e.brightness, "brightness"],
1361
1336
  [() => e.contrast, "contrast"]
1362
1337
  ],
1363
- s,
1364
- () => new Pe()
1338
+ o,
1339
+ () => new Fe()
1365
1340
  ), () => {
1366
1341
  };
1367
1342
  }
1368
- }), le = {
1343
+ }), ce = {
1369
1344
  OFF: 0,
1370
1345
  EDGES: 1,
1371
1346
  WEIGHTS: 2
1372
- }, bo = /* @__PURE__ */ u({
1347
+ }, bo = /* @__PURE__ */ c({
1373
1348
  __name: "SMAAPmndrs",
1374
1349
  props: {
1375
1350
  blendFunction: {},
@@ -1379,56 +1354,56 @@ const go = /* @__PURE__ */ u({
1379
1354
  predicationMode: {},
1380
1355
  debug: {}
1381
1356
  },
1382
- setup(n, { expose: t }) {
1383
- const e = n, { pass: o, effect: s } = h(() => new ae(e), e), { camera: a } = y(), r = J($);
1384
- t({ pass: o, effect: s });
1385
- const i = new ae();
1386
- v(
1357
+ setup(r, { expose: t }) {
1358
+ const e = r, { pass: s, effect: o } = f(() => new re(e), e), { camera: a } = T(), i = K($);
1359
+ t({ pass: s, effect: o });
1360
+ const n = new re();
1361
+ p(
1387
1362
  [
1388
1363
  [() => Number(e.blendFunction), "blendMode.blendFunction"],
1389
1364
  [() => Number(e.predicationMode), "edgeDetectionMaterial.predicationMode"],
1390
1365
  [() => Number(e.edgeDetectionMode), "edgeDetectionMaterial.edgeDetectionMode"]
1391
1366
  ],
1392
- s,
1393
- () => new ae()
1394
- ), g(
1395
- [s, () => e.opacity],
1367
+ o,
1368
+ () => new re()
1369
+ ), m(
1370
+ [o, () => e.opacity],
1396
1371
  () => {
1397
- s.value && (e.opacity !== void 0 ? s.value.blendMode.setOpacity(e.opacity) : s.value.blendMode.setOpacity(i.blendMode.getOpacity()));
1372
+ o.value && (e.opacity !== void 0 ? o.value.blendMode.setOpacity(e.opacity) : o.value.blendMode.setOpacity(n.blendMode.getOpacity()));
1398
1373
  },
1399
1374
  { immediate: !0 }
1400
- ), g(
1401
- [s, () => e.preset],
1375
+ ), m(
1376
+ [o, () => e.preset],
1402
1377
  () => {
1403
- s.value && s.value.applyPreset(Number(e.preset));
1378
+ o.value && o.value.applyPreset(Number(e.preset));
1404
1379
  }
1405
1380
  );
1406
- let l = null, d = null;
1407
- const p = (m) => {
1408
- if (!s.value)
1409
- return null;
1410
- const A = m === "edges" ? s.value.edgesTexture : s.value.weightsTexture, E = new Xe(a.value, s.value, new q({ texture: A }));
1411
- return E.renderToScreen = !1, E.enabled = !1, E.fullscreenMaterial.encodeOutput = !1, E;
1412
- }, b = (m) => {
1413
- m === "edges" && !l ? l = p("edges") : m === "weights" && !d && (d = p("weights"));
1414
- }, c = (m, A) => {
1415
- !m || !(r != null && r.value) || m.enabled !== A && (m.enabled = A, m.renderToScreen = A, A && !(r != null && r.value.passes.includes(m)) ? r == null || r.value.addPass(m) : !A && (r != null && r.value.passes.includes(m)) && (r == null || r.value.removePass(m), m.dispose()));
1416
- }, S = (m) => {
1381
+ let l = null, u = null;
1382
+ const h = (g) => {
1417
1383
  if (!o.value)
1384
+ return null;
1385
+ const v = g === "edges" ? o.value.edgesTexture : o.value.weightsTexture, b = new _e(a.value, o.value, new Y({ texture: v }));
1386
+ return b.renderToScreen = !1, b.enabled = !1, b.fullscreenMaterial.encodeOutput = !1, b;
1387
+ }, x = (g) => {
1388
+ g === "edges" && !l ? l = h("edges") : g === "weights" && !u && (u = h("weights"));
1389
+ }, w = (g, v) => {
1390
+ !g || !i?.value || g.enabled !== v && (g.enabled = v, g.renderToScreen = v, v && !i?.value.passes.includes(g) ? i?.value.addPass(g) : !v && i?.value.passes.includes(g) && (i?.value.removePass(g), g.dispose()));
1391
+ }, U = (g) => {
1392
+ if (!s.value)
1418
1393
  return;
1419
- const A = m === le.OFF, E = m === le.EDGES, x = m === le.WEIGHTS;
1420
- o.value.enabled = A, o.value.renderToScreen = A, E && b("edges"), x && b("weights"), c(l, E), c(d, x), E || (l = null), x || (d = null);
1394
+ const v = g === ce.OFF, b = g === ce.EDGES, ee = g === ce.WEIGHTS;
1395
+ s.value.enabled = v, s.value.renderToScreen = v, b && x("edges"), ee && x("weights"), w(l, b), w(u, ee), b || (l = null), ee || (u = null);
1421
1396
  };
1422
- return g(
1397
+ return m(
1423
1398
  () => e.debug,
1424
1399
  () => {
1425
- !o.value || e.debug === void 0 || S(e.debug);
1400
+ !s.value || e.debug === void 0 || U(e.debug);
1426
1401
  },
1427
1402
  { immediate: !0 }
1428
1403
  ), () => {
1429
1404
  };
1430
1405
  }
1431
- }), So = /* @__PURE__ */ u({
1406
+ }), So = /* @__PURE__ */ c({
1432
1407
  __name: "FXAAPmndrs",
1433
1408
  props: {
1434
1409
  blendFunction: {},
@@ -1438,9 +1413,9 @@ const go = /* @__PURE__ */ u({
1438
1413
  maxEdgeThreshold: {},
1439
1414
  subpixelQuality: {}
1440
1415
  },
1441
- setup(n, { expose: t }) {
1442
- const e = n, { pass: o, effect: s } = h(() => new re(e), e);
1443
- return t({ pass: o, effect: s }), v(
1416
+ setup(r, { expose: t }) {
1417
+ const e = r, { pass: s, effect: o } = f(() => new ie(e), e);
1418
+ return t({ pass: s, effect: o }), p(
1444
1419
  [
1445
1420
  [() => e.blendFunction, "blendMode.blendFunction"],
1446
1421
  [() => e.samples, "samples"],
@@ -1448,51 +1423,49 @@ const go = /* @__PURE__ */ u({
1448
1423
  [() => e.maxEdgeThreshold, "maxEdgeThreshold"],
1449
1424
  [() => e.subpixelQuality, "subpixelQuality"]
1450
1425
  ],
1451
- s,
1452
- () => new re()
1453
- ), g(
1454
- [s, () => e.opacity],
1426
+ o,
1427
+ () => new ie()
1428
+ ), m(
1429
+ [o, () => e.opacity],
1455
1430
  () => {
1456
- var a, r;
1457
- if (s.value)
1431
+ if (o.value)
1458
1432
  if (e.opacity !== void 0)
1459
- (a = s.value) == null || a.blendMode.setOpacity(e.opacity);
1433
+ o.value?.blendMode.setOpacity(e.opacity);
1460
1434
  else {
1461
- const i = new re();
1462
- (r = s.value) == null || r.blendMode.setOpacity(i.blendMode.getOpacity()), i.dispose();
1435
+ const a = new ie();
1436
+ o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
1463
1437
  }
1464
1438
  },
1465
1439
  { immediate: !0 }
1466
1440
  ), () => {
1467
1441
  };
1468
1442
  }
1469
- }), wo = /* @__PURE__ */ u({
1443
+ }), wo = /* @__PURE__ */ c({
1470
1444
  __name: "TexturePmndrs",
1471
1445
  props: {
1472
1446
  blendFunction: {},
1473
1447
  texture: {},
1474
1448
  opacity: {}
1475
1449
  },
1476
- setup(n, { expose: t }) {
1477
- const e = n, { pass: o, effect: s } = h(() => new q(e), e);
1450
+ setup(r, { expose: t }) {
1451
+ const e = r, { pass: s, effect: o } = f(() => new Y(e), e);
1478
1452
  return t({
1479
- pass: o,
1480
- effect: s
1481
- }), v(
1453
+ pass: s,
1454
+ effect: o
1455
+ }), p(
1482
1456
  [
1483
1457
  [() => e.blendFunction, "blendMode.blendFunction"]
1484
1458
  ],
1485
- s,
1486
- () => new q()
1487
- ), g(
1459
+ o,
1460
+ () => new Y()
1461
+ ), m(
1488
1462
  [() => e.opacity],
1489
1463
  () => {
1490
- var a, r;
1491
1464
  if (e.opacity !== void 0)
1492
- (a = s.value) == null || a.blendMode.setOpacity(e.opacity);
1465
+ o.value?.blendMode.setOpacity(e.opacity);
1493
1466
  else {
1494
- const i = new q();
1495
- (r = s.value) == null || r.blendMode.setOpacity(i.blendMode.getOpacity()), i.dispose();
1467
+ const a = new Y();
1468
+ o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
1496
1469
  }
1497
1470
  },
1498
1471
  {
@@ -1501,7 +1474,7 @@ const go = /* @__PURE__ */ u({
1501
1474
  ), () => {
1502
1475
  };
1503
1476
  }
1504
- }), Ao = /* @__PURE__ */ u({
1477
+ }), Ao = /* @__PURE__ */ c({
1505
1478
  __name: "ASCIIPmndrs",
1506
1479
  props: {
1507
1480
  blendFunction: {},
@@ -1512,55 +1485,55 @@ const go = /* @__PURE__ */ u({
1512
1485
  useSceneColor: { type: Boolean },
1513
1486
  asciiTexture: {}
1514
1487
  },
1515
- setup(n, { expose: t }) {
1516
- const e = n, o = new ne(), { asciiTexture: s, ...a } = e, { pass: r, effect: i } = h(() => new ne(a), e);
1517
- return t({ pass: r, effect: i }), W(() => {
1518
- o.dispose();
1519
- }), v(
1488
+ setup(r, { expose: t }) {
1489
+ const e = r, s = new ne(), { asciiTexture: o, ...a } = e, { pass: i, effect: n } = f(() => new ne(a), e);
1490
+ return t({ pass: i, effect: n }), N(() => {
1491
+ s.dispose();
1492
+ }), p(
1520
1493
  [
1521
1494
  [() => e.blendFunction, "blendMode.blendFunction"],
1522
1495
  [() => e.cellSize, "cellSize"],
1523
1496
  [() => e.inverted, "inverted"]
1524
1497
  ],
1525
- i,
1498
+ n,
1526
1499
  () => new ne()
1527
- ), g(
1528
- [i, () => e.useSceneColor],
1500
+ ), m(
1501
+ [n, () => e.useSceneColor],
1529
1502
  () => {
1530
- i.value && (e.useSceneColor ? i.value.color = null : i.value.color = e.color ?? o.color);
1503
+ n.value && (e.useSceneColor ? n.value.color = null : n.value.color = e.color ?? s.color);
1531
1504
  },
1532
1505
  { immediate: !0 }
1533
- ), g(
1534
- [i, () => e.opacity],
1506
+ ), m(
1507
+ [n, () => e.opacity],
1535
1508
  () => {
1536
- i.value && i.value.blendMode.setOpacity(e.opacity ?? o.blendMode.getOpacity());
1509
+ n.value && n.value.blendMode.setOpacity(e.opacity ?? s.blendMode.getOpacity());
1537
1510
  },
1538
1511
  { immediate: !0 }
1539
- ), g(
1540
- [i, () => e.color],
1512
+ ), m(
1513
+ [n, () => e.color],
1541
1514
  () => {
1542
- i.value && (e.useSceneColor || (i.value.color = e.color ?? null));
1515
+ n.value && (e.useSceneColor || (n.value.color = e.color ?? null));
1543
1516
  },
1544
1517
  { immediate: !0 }
1545
- ), g(
1546
- [i, () => e.asciiTexture],
1518
+ ), m(
1519
+ [n, () => e.asciiTexture],
1547
1520
  () => {
1548
- if (!i.value)
1521
+ if (!n.value)
1549
1522
  return;
1550
- const l = e.asciiTexture ? new tt(e.asciiTexture) : o.asciiTexture;
1551
- i.value.asciiTexture = l;
1523
+ const l = e.asciiTexture ? new st(e.asciiTexture) : s.asciiTexture;
1524
+ n.value.asciiTexture = l;
1552
1525
  },
1553
1526
  { immediate: !0 }
1554
- ), g(
1555
- [i, () => e.blendFunction],
1527
+ ), m(
1528
+ [n, () => e.blendFunction],
1556
1529
  () => {
1557
- i.value && (i.value.blendMode.blendFunction = e.blendFunction ? Number(e.blendFunction) : Number(o.blendMode.blendFunction));
1530
+ n.value && (n.value.blendMode.blendFunction = e.blendFunction ? Number(e.blendFunction) : Number(s.blendMode.blendFunction));
1558
1531
  },
1559
1532
  { immediate: !0 }
1560
1533
  ), () => {
1561
1534
  };
1562
1535
  }
1563
- }), qe = {
1536
+ }), k = {
1564
1537
  name: "CopyShader",
1565
1538
  uniforms: {
1566
1539
  tDiffuse: { value: null },
@@ -1598,35 +1571,82 @@ const go = /* @__PURE__ */ u({
1598
1571
  }`
1599
1572
  )
1600
1573
  };
1601
- class D {
1574
+ class E {
1575
+ /**
1576
+ * Constructs a new pass.
1577
+ */
1602
1578
  constructor() {
1603
1579
  this.isPass = !0, this.enabled = !0, this.needsSwap = !0, this.clear = !1, this.renderToScreen = !1;
1604
1580
  }
1581
+ /**
1582
+ * Sets the size of the pass.
1583
+ *
1584
+ * @abstract
1585
+ * @param {number} width - The width to set.
1586
+ * @param {number} height - The height to set.
1587
+ */
1605
1588
  setSize() {
1606
1589
  }
1590
+ /**
1591
+ * This method holds the render logic of a pass. It must be implemented in all derived classes.
1592
+ *
1593
+ * @abstract
1594
+ * @param {WebGLRenderer} renderer - The renderer.
1595
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
1596
+ * destination for the pass.
1597
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
1598
+ * previous pass from this buffer.
1599
+ * @param {number} deltaTime - The delta time in seconds.
1600
+ * @param {boolean} maskActive - Whether masking is active or not.
1601
+ */
1607
1602
  render() {
1608
1603
  console.error("THREE.Pass: .render() must be implemented in derived pass.");
1609
1604
  }
1605
+ /**
1606
+ * Frees the GPU-related resources allocated by this instance. Call this
1607
+ * method whenever the pass is no longer used in your app.
1608
+ *
1609
+ * @abstract
1610
+ */
1610
1611
  dispose() {
1611
1612
  }
1612
1613
  }
1613
- const Pt = new st(-1, 1, 1, -1, 0, 1);
1614
- class Dt extends at {
1614
+ const Lt = new rt(-1, 1, 1, -1, 0, 1);
1615
+ class Ft extends it {
1615
1616
  constructor() {
1616
- super(), this.setAttribute("position", new De([-1, 3, 0, -1, -1, 0, 3, -1, 0], 3)), this.setAttribute("uv", new De([0, 2, 0, 0, 2, 0], 2));
1617
+ super(), this.setAttribute("position", new Oe([-1, 3, 0, -1, -1, 0, 3, -1, 0], 3)), this.setAttribute("uv", new Oe([0, 2, 0, 0, 2, 0], 2));
1617
1618
  }
1618
1619
  }
1619
- const Lt = new Dt();
1620
- class R {
1620
+ const Ot = new Ft();
1621
+ class O {
1622
+ /**
1623
+ * Constructs a new full screen quad.
1624
+ *
1625
+ * @param {?Material} material - The material to render te full screen quad with.
1626
+ */
1621
1627
  constructor(t) {
1622
- this._mesh = new je(Lt, t);
1628
+ this._mesh = new Ye(Ot, t);
1623
1629
  }
1630
+ /**
1631
+ * Frees the GPU-related resources allocated by this instance. Call this
1632
+ * method whenever the instance is no longer used in your app.
1633
+ */
1624
1634
  dispose() {
1625
1635
  this._mesh.geometry.dispose();
1626
1636
  }
1637
+ /**
1638
+ * Renders the full screen quad.
1639
+ *
1640
+ * @param {WebGLRenderer} renderer - The renderer.
1641
+ */
1627
1642
  render(t) {
1628
- t.render(this._mesh, Pt);
1643
+ t.render(this._mesh, Lt);
1629
1644
  }
1645
+ /**
1646
+ * The quad's material.
1647
+ *
1648
+ * @type {?Material}
1649
+ */
1630
1650
  get material() {
1631
1651
  return this._mesh.material;
1632
1652
  }
@@ -1634,178 +1654,308 @@ class R {
1634
1654
  this._mesh.material = t;
1635
1655
  }
1636
1656
  }
1637
- class Ft extends D {
1638
- constructor(t, e) {
1639
- super(), this.textureID = e !== void 0 ? e : "tDiffuse", t instanceof T ? (this.uniforms = t.uniforms, this.material = t) : t && (this.uniforms = L.clone(t.uniforms), this.material = new T({
1657
+ class Bt extends E {
1658
+ /**
1659
+ * Constructs a new shader pass.
1660
+ *
1661
+ * @param {Object|ShaderMaterial} [shader] - A shader object holding vertex and fragment shader as well as
1662
+ * defines and uniforms. It's also valid to pass a custom shader material.
1663
+ * @param {string} [textureID='tDiffuse'] - The name of the texture uniform that should sample
1664
+ * the read buffer.
1665
+ */
1666
+ constructor(t, e = "tDiffuse") {
1667
+ super(), this.textureID = e, this.uniforms = null, this.material = null, t instanceof y ? (this.uniforms = t.uniforms, this.material = t) : t && (this.uniforms = P.clone(t.uniforms), this.material = new y({
1640
1668
  name: t.name !== void 0 ? t.name : "unspecified",
1641
1669
  defines: Object.assign({}, t.defines),
1642
1670
  uniforms: this.uniforms,
1643
1671
  vertexShader: t.vertexShader,
1644
1672
  fragmentShader: t.fragmentShader
1645
- })), this.fsQuad = new R(this.material);
1673
+ })), this._fsQuad = new O(this.material);
1646
1674
  }
1647
- render(t, e, o) {
1648
- this.uniforms[this.textureID] && (this.uniforms[this.textureID].value = o.texture), this.fsQuad.material = this.material, this.renderToScreen ? (t.setRenderTarget(null), this.fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), this.fsQuad.render(t));
1675
+ /**
1676
+ * Performs the shader pass.
1677
+ *
1678
+ * @param {WebGLRenderer} renderer - The renderer.
1679
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
1680
+ * destination for the pass.
1681
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
1682
+ * previous pass from this buffer.
1683
+ * @param {number} deltaTime - The delta time in seconds.
1684
+ * @param {boolean} maskActive - Whether masking is active or not.
1685
+ */
1686
+ render(t, e, s) {
1687
+ this.uniforms[this.textureID] && (this.uniforms[this.textureID].value = s.texture), this._fsQuad.material = this.material, this.renderToScreen ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), this._fsQuad.render(t));
1649
1688
  }
1689
+ /**
1690
+ * Frees the GPU-related resources allocated by this instance. Call this
1691
+ * method whenever the pass is no longer used in your app.
1692
+ */
1650
1693
  dispose() {
1651
- this.material.dispose(), this.fsQuad.dispose();
1694
+ this.material.dispose(), this._fsQuad.dispose();
1652
1695
  }
1653
1696
  }
1654
- class We extends D {
1697
+ class He extends E {
1698
+ /**
1699
+ * Constructs a new mask pass.
1700
+ *
1701
+ * @param {Scene} scene - The 3D objects in this scene will define the mask.
1702
+ * @param {Camera} camera - The camera.
1703
+ */
1655
1704
  constructor(t, e) {
1656
1705
  super(), this.scene = t, this.camera = e, this.clear = !0, this.needsSwap = !1, this.inverse = !1;
1657
1706
  }
1658
- render(t, e, o) {
1659
- const s = t.getContext(), a = t.state;
1707
+ /**
1708
+ * Performs a mask pass with the configured scene and camera.
1709
+ *
1710
+ * @param {WebGLRenderer} renderer - The renderer.
1711
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
1712
+ * destination for the pass.
1713
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
1714
+ * previous pass from this buffer.
1715
+ * @param {number} deltaTime - The delta time in seconds.
1716
+ * @param {boolean} maskActive - Whether masking is active or not.
1717
+ */
1718
+ render(t, e, s) {
1719
+ const o = t.getContext(), a = t.state;
1660
1720
  a.buffers.color.setMask(!1), a.buffers.depth.setMask(!1), a.buffers.color.setLocked(!0), a.buffers.depth.setLocked(!0);
1661
- let r, i;
1662
- this.inverse ? (r = 0, i = 1) : (r = 1, i = 0), a.buffers.stencil.setTest(!0), a.buffers.stencil.setOp(s.REPLACE, s.REPLACE, s.REPLACE), a.buffers.stencil.setFunc(s.ALWAYS, r, 4294967295), a.buffers.stencil.setClear(i), a.buffers.stencil.setLocked(!0), t.setRenderTarget(o), this.clear && t.clear(), t.render(this.scene, this.camera), t.setRenderTarget(e), this.clear && t.clear(), t.render(this.scene, this.camera), a.buffers.color.setLocked(!1), a.buffers.depth.setLocked(!1), a.buffers.color.setMask(!0), a.buffers.depth.setMask(!0), a.buffers.stencil.setLocked(!1), a.buffers.stencil.setFunc(s.EQUAL, 1, 4294967295), a.buffers.stencil.setOp(s.KEEP, s.KEEP, s.KEEP), a.buffers.stencil.setLocked(!0);
1721
+ let i, n;
1722
+ this.inverse ? (i = 0, n = 1) : (i = 1, n = 0), a.buffers.stencil.setTest(!0), a.buffers.stencil.setOp(o.REPLACE, o.REPLACE, o.REPLACE), a.buffers.stencil.setFunc(o.ALWAYS, i, 4294967295), a.buffers.stencil.setClear(n), a.buffers.stencil.setLocked(!0), t.setRenderTarget(s), this.clear && t.clear(), t.render(this.scene, this.camera), t.setRenderTarget(e), this.clear && t.clear(), t.render(this.scene, this.camera), a.buffers.color.setLocked(!1), a.buffers.depth.setLocked(!1), a.buffers.color.setMask(!0), a.buffers.depth.setMask(!0), a.buffers.stencil.setLocked(!1), a.buffers.stencil.setFunc(o.EQUAL, 1, 4294967295), a.buffers.stencil.setOp(o.KEEP, o.KEEP, o.KEEP), a.buffers.stencil.setLocked(!0);
1663
1723
  }
1664
1724
  }
1665
- class Ot extends D {
1725
+ class Rt extends E {
1726
+ /**
1727
+ * Constructs a new clear mask pass.
1728
+ */
1666
1729
  constructor() {
1667
1730
  super(), this.needsSwap = !1;
1668
1731
  }
1732
+ /**
1733
+ * Performs the clear of the currently defined mask.
1734
+ *
1735
+ * @param {WebGLRenderer} renderer - The renderer.
1736
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
1737
+ * destination for the pass.
1738
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
1739
+ * previous pass from this buffer.
1740
+ * @param {number} deltaTime - The delta time in seconds.
1741
+ * @param {boolean} maskActive - Whether masking is active or not.
1742
+ */
1669
1743
  render(t) {
1670
1744
  t.state.buffers.stencil.setLocked(!1), t.state.buffers.stencil.setTest(!1);
1671
1745
  }
1672
1746
  }
1673
- class Bt {
1747
+ class Nt {
1748
+ /**
1749
+ * Constructs a new effect composer.
1750
+ *
1751
+ * @param {WebGLRenderer} renderer - The renderer.
1752
+ * @param {WebGLRenderTarget} [renderTarget] - This render target and a clone will
1753
+ * be used as the internal read and write buffers. If not given, the composer creates
1754
+ * the buffers automatically.
1755
+ */
1674
1756
  constructor(t, e) {
1675
1757
  if (this.renderer = t, this._pixelRatio = t.getPixelRatio(), e === void 0) {
1676
- const o = t.getSize(new f());
1677
- this._width = o.width, this._height = o.height, e = new F(this._width * this._pixelRatio, this._height * this._pixelRatio, { type: P }), e.texture.name = "EffectComposer.rt1";
1758
+ const s = t.getSize(new d());
1759
+ this._width = s.width, this._height = s.height, e = new D(this._width * this._pixelRatio, this._height * this._pixelRatio, { type: C }), e.texture.name = "EffectComposer.rt1";
1678
1760
  } else
1679
1761
  this._width = e.width, this._height = e.height;
1680
- this.renderTarget1 = e, this.renderTarget2 = e.clone(), this.renderTarget2.texture.name = "EffectComposer.rt2", this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2, this.renderToScreen = !0, this.passes = [], this.copyPass = new Ft(qe), this.copyPass.material.blending = rt, this.clock = new nt();
1762
+ this.renderTarget1 = e, this.renderTarget2 = e.clone(), this.renderTarget2.texture.name = "EffectComposer.rt2", this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2, this.renderToScreen = !0, this.passes = [], this.copyPass = new Bt(k), this.copyPass.material.blending = nt, this.clock = new lt();
1681
1763
  }
1764
+ /**
1765
+ * Swaps the internal read/write buffers.
1766
+ */
1682
1767
  swapBuffers() {
1683
1768
  const t = this.readBuffer;
1684
1769
  this.readBuffer = this.writeBuffer, this.writeBuffer = t;
1685
1770
  }
1771
+ /**
1772
+ * Adds the given pass to the pass chain.
1773
+ *
1774
+ * @param {Pass} pass - The pass to add.
1775
+ */
1686
1776
  addPass(t) {
1687
1777
  this.passes.push(t), t.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
1688
1778
  }
1779
+ /**
1780
+ * Inserts the given pass at a given index.
1781
+ *
1782
+ * @param {Pass} pass - The pass to insert.
1783
+ * @param {number} index - The index into the pass chain.
1784
+ */
1689
1785
  insertPass(t, e) {
1690
1786
  this.passes.splice(e, 0, t), t.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
1691
1787
  }
1788
+ /**
1789
+ * Removes the given pass from the pass chain.
1790
+ *
1791
+ * @param {Pass} pass - The pass to remove.
1792
+ */
1692
1793
  removePass(t) {
1693
1794
  const e = this.passes.indexOf(t);
1694
1795
  e !== -1 && this.passes.splice(e, 1);
1695
1796
  }
1797
+ /**
1798
+ * Returns `true` if the pass for the given index is the last enabled pass in the pass chain.
1799
+ *
1800
+ * @param {number} passIndex - The pass index.
1801
+ * @return {boolean} Whether the pass for the given index is the last pass in the pass chain.
1802
+ */
1696
1803
  isLastEnabledPass(t) {
1697
1804
  for (let e = t + 1; e < this.passes.length; e++)
1698
1805
  if (this.passes[e].enabled)
1699
1806
  return !1;
1700
1807
  return !0;
1701
1808
  }
1809
+ /**
1810
+ * Executes all enabled post-processing passes in order to produce the final frame.
1811
+ *
1812
+ * @param {number} deltaTime - The delta time in seconds. If not given, the composer computes
1813
+ * its own time delta value.
1814
+ */
1702
1815
  render(t) {
1703
1816
  t === void 0 && (t = this.clock.getDelta());
1704
1817
  const e = this.renderer.getRenderTarget();
1705
- let o = !1;
1706
- for (let s = 0, a = this.passes.length; s < a; s++) {
1707
- const r = this.passes[s];
1708
- if (r.enabled !== !1) {
1709
- if (r.renderToScreen = this.renderToScreen && this.isLastEnabledPass(s), r.render(this.renderer, this.writeBuffer, this.readBuffer, t, o), r.needsSwap) {
1710
- if (o) {
1711
- const i = this.renderer.getContext(), l = this.renderer.state.buffers.stencil;
1712
- l.setFunc(i.NOTEQUAL, 1, 4294967295), this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, t), l.setFunc(i.EQUAL, 1, 4294967295);
1818
+ let s = !1;
1819
+ for (let o = 0, a = this.passes.length; o < a; o++) {
1820
+ const i = this.passes[o];
1821
+ if (i.enabled !== !1) {
1822
+ if (i.renderToScreen = this.renderToScreen && this.isLastEnabledPass(o), i.render(this.renderer, this.writeBuffer, this.readBuffer, t, s), i.needsSwap) {
1823
+ if (s) {
1824
+ const n = this.renderer.getContext(), l = this.renderer.state.buffers.stencil;
1825
+ l.setFunc(n.NOTEQUAL, 1, 4294967295), this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, t), l.setFunc(n.EQUAL, 1, 4294967295);
1713
1826
  }
1714
1827
  this.swapBuffers();
1715
1828
  }
1716
- We !== void 0 && (r instanceof We ? o = !0 : r instanceof Ot && (o = !1));
1829
+ He !== void 0 && (i instanceof He ? s = !0 : i instanceof Rt && (s = !1));
1717
1830
  }
1718
1831
  }
1719
1832
  this.renderer.setRenderTarget(e);
1720
1833
  }
1834
+ /**
1835
+ * Resets the internal state of the EffectComposer.
1836
+ *
1837
+ * @param {WebGLRenderTarget} [renderTarget] - This render target has the same purpose like
1838
+ * the one from the constructor. If set, it is used to setup the read and write buffers.
1839
+ */
1721
1840
  reset(t) {
1722
1841
  if (t === void 0) {
1723
- const e = this.renderer.getSize(new f());
1842
+ const e = this.renderer.getSize(new d());
1724
1843
  this._pixelRatio = this.renderer.getPixelRatio(), this._width = e.width, this._height = e.height, t = this.renderTarget1.clone(), t.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
1725
1844
  }
1726
1845
  this.renderTarget1.dispose(), this.renderTarget2.dispose(), this.renderTarget1 = t, this.renderTarget2 = t.clone(), this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2;
1727
1846
  }
1847
+ /**
1848
+ * Resizes the internal read and write buffers as well as all passes. Similar to {@link WebGLRenderer#setSize},
1849
+ * this method honors the current pixel ration.
1850
+ *
1851
+ * @param {number} width - The width in logical pixels.
1852
+ * @param {number} height - The height in logical pixels.
1853
+ */
1728
1854
  setSize(t, e) {
1729
1855
  this._width = t, this._height = e;
1730
- const o = this._width * this._pixelRatio, s = this._height * this._pixelRatio;
1731
- this.renderTarget1.setSize(o, s), this.renderTarget2.setSize(o, s);
1856
+ const s = this._width * this._pixelRatio, o = this._height * this._pixelRatio;
1857
+ this.renderTarget1.setSize(s, o), this.renderTarget2.setSize(s, o);
1732
1858
  for (let a = 0; a < this.passes.length; a++)
1733
- this.passes[a].setSize(o, s);
1859
+ this.passes[a].setSize(s, o);
1734
1860
  }
1861
+ /**
1862
+ * Sets device pixel ratio. This is usually used for HiDPI device to prevent blurring output.
1863
+ * Setting the pixel ratio will automatically resize the composer.
1864
+ *
1865
+ * @param {number} pixelRatio - The pixel ratio to set.
1866
+ */
1735
1867
  setPixelRatio(t) {
1736
1868
  this._pixelRatio = t, this.setSize(this._width, this._height);
1737
1869
  }
1870
+ /**
1871
+ * Frees the GPU-related resources allocated by this instance. Call this
1872
+ * method whenever the composer is no longer used in your app.
1873
+ */
1738
1874
  dispose() {
1739
1875
  this.renderTarget1.dispose(), this.renderTarget2.dispose(), this.copyPass.dispose();
1740
1876
  }
1741
1877
  }
1742
- class Rt extends D {
1743
- constructor(t, e, o = null, s = null, a = null) {
1744
- super(), this.scene = t, this.camera = e, this.overrideMaterial = o, this.clearColor = s, this.clearAlpha = a, this.clear = !0, this.clearDepth = !1, this.needsSwap = !1, this._oldClearColor = new K();
1878
+ class zt extends E {
1879
+ /**
1880
+ * Constructs a new render pass.
1881
+ *
1882
+ * @param {Scene} scene - The scene to render.
1883
+ * @param {Camera} camera - The camera.
1884
+ * @param {?Material} [overrideMaterial=null] - The override material. If set, this material is used
1885
+ * for all objects in the scene.
1886
+ * @param {?(number|Color|string)} [clearColor=null] - The clear color of the render pass.
1887
+ * @param {?number} [clearAlpha=null] - The clear alpha of the render pass.
1888
+ */
1889
+ constructor(t, e, s = null, o = null, a = null) {
1890
+ super(), this.scene = t, this.camera = e, this.overrideMaterial = s, this.clearColor = o, this.clearAlpha = a, this.clear = !0, this.clearDepth = !1, this.needsSwap = !1, this._oldClearColor = new Q();
1745
1891
  }
1746
- render(t, e, o) {
1747
- const s = t.autoClear;
1892
+ /**
1893
+ * Performs a beauty pass with the configured scene and camera.
1894
+ *
1895
+ * @param {WebGLRenderer} renderer - The renderer.
1896
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
1897
+ * destination for the pass.
1898
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
1899
+ * previous pass from this buffer.
1900
+ * @param {number} deltaTime - The delta time in seconds.
1901
+ * @param {boolean} maskActive - Whether masking is active or not.
1902
+ */
1903
+ render(t, e, s) {
1904
+ const o = t.autoClear;
1748
1905
  t.autoClear = !1;
1749
- let a, r;
1750
- this.overrideMaterial !== null && (r = this.scene.overrideMaterial, this.scene.overrideMaterial = this.overrideMaterial), this.clearColor !== null && (t.getClearColor(this._oldClearColor), t.setClearColor(this.clearColor, t.getClearAlpha())), this.clearAlpha !== null && (a = t.getClearAlpha(), t.setClearAlpha(this.clearAlpha)), this.clearDepth == !0 && t.clearDepth(), t.setRenderTarget(this.renderToScreen ? null : o), this.clear === !0 && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), t.render(this.scene, this.camera), this.clearColor !== null && t.setClearColor(this._oldClearColor), this.clearAlpha !== null && t.setClearAlpha(a), this.overrideMaterial !== null && (this.scene.overrideMaterial = r), t.autoClear = s;
1906
+ let a, i;
1907
+ this.overrideMaterial !== null && (i = this.scene.overrideMaterial, this.scene.overrideMaterial = this.overrideMaterial), this.clearColor !== null && (t.getClearColor(this._oldClearColor), t.setClearColor(this.clearColor, t.getClearAlpha())), this.clearAlpha !== null && (a = t.getClearAlpha(), t.setClearAlpha(this.clearAlpha)), this.clearDepth == !0 && t.clearDepth(), t.setRenderTarget(this.renderToScreen ? null : s), this.clear === !0 && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), t.render(this.scene, this.camera), this.clearColor !== null && t.setClearColor(this._oldClearColor), this.clearAlpha !== null && t.setClearAlpha(a), this.overrideMaterial !== null && (this.scene.overrideMaterial = i), t.autoClear = o;
1751
1908
  }
1752
1909
  }
1753
- const Qe = Symbol("effectComposerThree"), yo = /* @__PURE__ */ u({
1910
+ const Ke = Symbol("effectComposerThree"), yo = /* @__PURE__ */ c({
1754
1911
  __name: "EffectComposer",
1755
1912
  props: {
1756
1913
  enabled: { type: Boolean, default: !0 },
1757
1914
  withoutRenderPass: { type: Boolean }
1758
1915
  },
1759
- setup(n, { expose: t }) {
1760
- const e = n, o = H(null);
1761
- He(Qe, o), t({ composer: o });
1762
- const { renderer: s, sizes: a, scene: r, camera: i, render: l } = y();
1763
- w(() => {
1764
- var c;
1765
- (c = o.value) == null || c.dispose(), o.value = new Bt(s.value);
1766
- }), w(() => {
1767
- var m;
1768
- const { width: c, height: S } = a;
1769
- S.value && c.value && ((m = o.value) == null || m.setSize(c.value, S.value));
1770
- });
1771
- const { pixelRatio: p } = Ye();
1772
- w(() => {
1773
- var c;
1774
- (c = o.value) == null || c.setPixelRatio(p.value);
1775
- }), e.withoutRenderPass || w(() => {
1776
- i.value && r.value && o.value && o.value.addPass(new Rt(r.value, i.value));
1916
+ setup(r, { expose: t }) {
1917
+ const e = r, s = W(null);
1918
+ je(Ke, s), t({ composer: s });
1919
+ const { renderer: o, sizes: a, scene: i, camera: n } = G();
1920
+ S(() => {
1921
+ s.value?.dispose(), s.value = new Nt(o.instance);
1922
+ }), S(() => {
1923
+ const { width: h, height: x } = a;
1924
+ x.value && h.value && s.value?.setSize(h.value, x.value);
1777
1925
  });
1778
- const { render: b } = I();
1779
- return b(() => {
1780
- l.frames.value > 0 && o.value && e.enabled && o.value.render(), l.frames.value = l.mode.value === "always" ? 1 : Math.max(0, l.frames.value - 1);
1781
- }), W(() => {
1782
- var c;
1783
- (c = o.value) == null || c.dispose();
1784
- }), (c, S) => Ie(c.$slots, "default");
1785
- }
1786
- }), U = (n, t, e) => {
1926
+ const { pixelRatio: u } = qe();
1927
+ return S(() => {
1928
+ s.value?.setPixelRatio(u.value);
1929
+ }), e.withoutRenderPass || S(() => {
1930
+ n.activeCamera.value && i.value && s.value && s.value.addPass(new zt(i.value, n.activeCamera.value));
1931
+ }), o.replaceRenderFunction((h) => {
1932
+ s.value && e.enabled && (s.value.render(), h());
1933
+ }), N(() => {
1934
+ s.value?.dispose();
1935
+ }), (h, x) => Ve(h.$slots, "default");
1936
+ }
1937
+ }), z = (r, t, e) => {
1787
1938
  if (!t && e)
1788
1939
  throw new Error("passDependencies is required when dependencyFieldsTriggeringRecreation is provided");
1789
- const o = J(Qe), s = H(n()), { sizes: a, invalidate: r } = y();
1790
- t && g(t, () => r());
1791
- const i = () => {
1792
- var d;
1793
- (d = o == null ? void 0 : o.value) == null || d.removePass(s.value), s.value.dispose();
1794
- }, l = w(() => {
1795
- !(o != null && o.value) || !a.height.value || !a.width.value || (o.value.addPass(s.value), ce(() => l()));
1940
+ const s = K(Ke), o = W(r()), { sizes: a, invalidate: i } = T();
1941
+ t && m(t, () => i());
1942
+ const n = () => {
1943
+ s?.value?.removePass(o.value), o.value.dispose();
1944
+ }, l = S(() => {
1945
+ !s?.value || !a.height.value || !a.width.value || (s.value.addPass(o.value), fe(() => l()));
1796
1946
  });
1797
- return e && g(
1798
- () => e.map((d) => t == null ? void 0 : t[d]),
1947
+ return e && m(
1948
+ () => e.map((u) => t?.[u]),
1799
1949
  () => {
1800
- if (!(o != null && o.value))
1950
+ if (!s?.value)
1801
1951
  return;
1802
- const d = o.value.passes.findIndex((p) => p === s.value);
1803
- ~d && (i(), s.value = n(), o.value.insertPass(s.value, d));
1952
+ const u = s.value.passes.findIndex((h) => h === o.value);
1953
+ ~u && (n(), o.value = r(), s.value.insertPass(o.value, u));
1804
1954
  }
1805
- ), W(() => {
1806
- i();
1807
- }), { pass: s };
1808
- }, Nt = {
1955
+ ), N(() => {
1956
+ n();
1957
+ }), { pass: o };
1958
+ }, ue = {
1809
1959
  uniforms: {
1810
1960
  tDiffuse: { value: null },
1811
1961
  //diffuse texture
@@ -1900,54 +2050,73 @@ const Qe = Symbol("effectComposerThree"), yo = /* @__PURE__ */ u({
1900
2050
  }`
1901
2051
  )
1902
2052
  };
1903
- class Ue extends D {
2053
+ class Ie extends E {
2054
+ /**
2055
+ * Constructs a new glitch pass.
2056
+ *
2057
+ * @param {number} [dt_size=64] - The size of the displacement texture
2058
+ * for digital glitch squares.
2059
+ */
1904
2060
  constructor(t = 64) {
1905
- super();
1906
- const e = Nt;
1907
- this.uniforms = L.clone(e.uniforms), this.heightMap = this.generateHeightmap(t), this.uniforms.tDisp.value = this.heightMap, this.material = new T({
2061
+ super(), this.uniforms = P.clone(ue.uniforms), this.material = new y({
1908
2062
  uniforms: this.uniforms,
1909
- vertexShader: e.vertexShader,
1910
- fragmentShader: e.fragmentShader
1911
- }), this.fsQuad = new R(this.material), this.goWild = !1, this.curF = 0, this.generateTrigger();
2063
+ vertexShader: ue.vertexShader,
2064
+ fragmentShader: ue.fragmentShader
2065
+ }), this.goWild = !1, this._heightMap = this._generateHeightmap(t), this.uniforms.tDisp.value = this.heightMap, this._fsQuad = new O(this.material), this._curF = 0, this._randX = 0, this._generateTrigger();
1912
2066
  }
1913
- render(t, e, o) {
1914
- this.uniforms.tDiffuse.value = o.texture, this.uniforms.seed.value = Math.random(), this.uniforms.byp.value = 0, this.curF % this.randX == 0 || this.goWild == !0 ? (this.uniforms.amount.value = Math.random() / 30, this.uniforms.angle.value = M.randFloat(-Math.PI, Math.PI), this.uniforms.seed_x.value = M.randFloat(-1, 1), this.uniforms.seed_y.value = M.randFloat(-1, 1), this.uniforms.distortion_x.value = M.randFloat(0, 1), this.uniforms.distortion_y.value = M.randFloat(0, 1), this.curF = 0, this.generateTrigger()) : this.curF % this.randX < this.randX / 5 ? (this.uniforms.amount.value = Math.random() / 90, this.uniforms.angle.value = M.randFloat(-Math.PI, Math.PI), this.uniforms.distortion_x.value = M.randFloat(0, 1), this.uniforms.distortion_y.value = M.randFloat(0, 1), this.uniforms.seed_x.value = M.randFloat(-0.3, 0.3), this.uniforms.seed_y.value = M.randFloat(-0.3, 0.3)) : this.goWild == !1 && (this.uniforms.byp.value = 1), this.curF++, this.renderToScreen ? (t.setRenderTarget(null), this.fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(), this.fsQuad.render(t));
2067
+ /**
2068
+ * Performs the glitch pass.
2069
+ *
2070
+ * @param {WebGLRenderer} renderer - The renderer.
2071
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
2072
+ * destination for the pass.
2073
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
2074
+ * previous pass from this buffer.
2075
+ * @param {number} deltaTime - The delta time in seconds.
2076
+ * @param {boolean} maskActive - Whether masking is active or not.
2077
+ */
2078
+ render(t, e, s) {
2079
+ this.uniforms.tDiffuse.value = s.texture, this.uniforms.seed.value = Math.random(), this.uniforms.byp.value = 0, this._curF % this._randX == 0 || this.goWild == !0 ? (this.uniforms.amount.value = Math.random() / 30, this.uniforms.angle.value = A.randFloat(-Math.PI, Math.PI), this.uniforms.seed_x.value = A.randFloat(-1, 1), this.uniforms.seed_y.value = A.randFloat(-1, 1), this.uniforms.distortion_x.value = A.randFloat(0, 1), this.uniforms.distortion_y.value = A.randFloat(0, 1), this._curF = 0, this._generateTrigger()) : this._curF % this._randX < this._randX / 5 ? (this.uniforms.amount.value = Math.random() / 90, this.uniforms.angle.value = A.randFloat(-Math.PI, Math.PI), this.uniforms.distortion_x.value = A.randFloat(0, 1), this.uniforms.distortion_y.value = A.randFloat(0, 1), this.uniforms.seed_x.value = A.randFloat(-0.3, 0.3), this.uniforms.seed_y.value = A.randFloat(-0.3, 0.3)) : this.goWild == !1 && (this.uniforms.byp.value = 1), this._curF++, this.renderToScreen ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(), this._fsQuad.render(t));
1915
2080
  }
1916
- generateTrigger() {
1917
- this.randX = M.randInt(120, 240);
2081
+ /**
2082
+ * Frees the GPU-related resources allocated by this instance. Call this
2083
+ * method whenever the pass is no longer used in your app.
2084
+ */
2085
+ dispose() {
2086
+ this.material.dispose(), this.heightMap.dispose(), this._fsQuad.dispose();
1918
2087
  }
1919
- generateHeightmap(t) {
1920
- const e = new Float32Array(t * t), o = t * t;
1921
- for (let a = 0; a < o; a++) {
1922
- const r = M.randFloat(0, 1);
1923
- e[a] = r;
1924
- }
1925
- const s = new it(e, t, t, lt, ut);
1926
- return s.needsUpdate = !0, s;
2088
+ // internals
2089
+ _generateTrigger() {
2090
+ this._randX = A.randInt(120, 240);
1927
2091
  }
1928
- dispose() {
1929
- this.material.dispose(), this.heightMap.dispose(), this.fsQuad.dispose();
2092
+ _generateHeightmap(t) {
2093
+ const e = new Float32Array(t * t), s = t * t;
2094
+ for (let a = 0; a < s; a++) {
2095
+ const i = A.randFloat(0, 1);
2096
+ e[a] = i;
2097
+ }
2098
+ const o = new ct(e, t, t, ut, dt);
2099
+ return o.needsUpdate = !0, o;
1930
2100
  }
1931
2101
  }
1932
- const Mo = /* @__PURE__ */ u({
2102
+ const Mo = /* @__PURE__ */ c({
1933
2103
  __name: "Glitch",
1934
2104
  props: {
1935
2105
  dtSize: {},
1936
2106
  goWild: { type: Boolean }
1937
2107
  },
1938
- setup(n, { expose: t }) {
1939
- const e = n, { pass: o } = U(() => new Ue(e.dtSize), e, ["dtSize"]);
1940
- t({ pass: o });
1941
- const { onBeforeRender: s } = I();
1942
- return s(({ invalidate: a }) => a()), v(
2108
+ setup(r, { expose: t }) {
2109
+ const e = r, { pass: s } = z(() => new Ie(e.dtSize), e, ["dtSize"]), { invalidate: o } = T();
2110
+ t({ pass: s });
2111
+ const { onBeforeRender: a } = he();
2112
+ return a(() => o()), p(
1943
2113
  [[() => e.goWild, "goWild"]],
1944
- o,
1945
- () => new Ue()
2114
+ s,
2115
+ () => new Ie()
1946
2116
  ), () => {
1947
2117
  };
1948
2118
  }
1949
- }), Q = {
1950
- name: "HalftoneShader",
2119
+ }), q = {
1951
2120
  uniforms: {
1952
2121
  tDiffuse: { value: null },
1953
2122
  shape: { value: 1 },
@@ -2250,28 +2419,54 @@ const Mo = /* @__PURE__ */ u({
2250
2419
  }`
2251
2420
  )
2252
2421
  };
2253
- class zt extends D {
2254
- constructor(t, e, o) {
2255
- super(), this.uniforms = L.clone(Q.uniforms), this.material = new T({
2422
+ class Ut extends E {
2423
+ /**
2424
+ * Constructs a new halftone pass.
2425
+ *
2426
+ * @param {Object} params - The halftone shader parameter.
2427
+ */
2428
+ constructor(t) {
2429
+ super(), this.uniforms = P.clone(q.uniforms), this.material = new y({
2256
2430
  uniforms: this.uniforms,
2257
- fragmentShader: Q.fragmentShader,
2258
- vertexShader: Q.vertexShader
2259
- }), this.uniforms.width.value = t, this.uniforms.height.value = e;
2260
- for (const s in o)
2261
- o.hasOwnProperty(s) && this.uniforms.hasOwnProperty(s) && (this.uniforms[s].value = o[s]);
2262
- this.fsQuad = new R(this.material);
2431
+ fragmentShader: q.fragmentShader,
2432
+ vertexShader: q.vertexShader
2433
+ });
2434
+ for (const e in t)
2435
+ t.hasOwnProperty(e) && this.uniforms.hasOwnProperty(e) && (this.uniforms[e].value = t[e]);
2436
+ this._fsQuad = new O(this.material);
2263
2437
  }
2264
- render(t, e, o) {
2265
- this.material.uniforms.tDiffuse.value = o.texture, this.renderToScreen ? (t.setRenderTarget(null), this.fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(), this.fsQuad.render(t));
2438
+ /**
2439
+ * Performs the halftone pass.
2440
+ *
2441
+ * @param {WebGLRenderer} renderer - The renderer.
2442
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
2443
+ * destination for the pass.
2444
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
2445
+ * previous pass from this buffer.
2446
+ * @param {number} deltaTime - The delta time in seconds.
2447
+ * @param {boolean} maskActive - Whether masking is active or not.
2448
+ */
2449
+ render(t, e, s) {
2450
+ this.material.uniforms.tDiffuse.value = s.texture, this.renderToScreen ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(), this._fsQuad.render(t));
2266
2451
  }
2452
+ /**
2453
+ * Sets the size of the pass.
2454
+ *
2455
+ * @param {number} width - The width to set.
2456
+ * @param {number} height - The height to set.
2457
+ */
2267
2458
  setSize(t, e) {
2268
2459
  this.uniforms.width.value = t, this.uniforms.height.value = e;
2269
2460
  }
2461
+ /**
2462
+ * Frees the GPU-related resources allocated by this instance. Call this
2463
+ * method whenever the pass is no longer used in your app.
2464
+ */
2270
2465
  dispose() {
2271
- this.material.dispose(), this.fsQuad.dispose();
2466
+ this.material.dispose(), this._fsQuad.dispose();
2272
2467
  }
2273
2468
  }
2274
- const To = /* @__PURE__ */ u({
2469
+ const To = /* @__PURE__ */ c({
2275
2470
  __name: "Halftone",
2276
2471
  props: {
2277
2472
  shape: {},
@@ -2284,61 +2479,85 @@ const To = /* @__PURE__ */ u({
2284
2479
  greyscale: { type: Boolean },
2285
2480
  blendingMode: {}
2286
2481
  },
2287
- setup(n, { expose: t }) {
2288
- const e = n, { sizes: o } = y(), s = O(
2482
+ setup(r, { expose: t }) {
2483
+ const e = r, { sizes: s } = G(), o = L(
2289
2484
  () => Object.fromEntries(
2290
- Object.entries(e).filter(([r, i]) => i !== void 0)
2485
+ Object.entries(e).filter(([i, n]) => n !== void 0)
2291
2486
  )
2292
- ), { pass: a } = U(() => new zt(
2293
- o.width.value,
2294
- o.height.value,
2295
- s.value
2296
- ), e);
2297
- return t({ pass: a }), w(() => {
2298
- a.value.setSize(o.width.value, o.height.value);
2299
- }), w(() => {
2300
- Object.entries(e).forEach(([r, i]) => {
2301
- r in a.value.uniforms && (a.value.uniforms[r].value = i ?? Q.uniforms[r].value);
2487
+ ), { pass: a } = z(() => new Ut(o.value), e);
2488
+ return t({ pass: a }), S(() => {
2489
+ a.value.setSize(s.width.value, s.height.value);
2490
+ }), S(() => {
2491
+ Object.entries(e).forEach(([i, n]) => {
2492
+ i in a.value.uniforms && (a.value.uniforms[i].value = n ?? q.uniforms[i].value);
2302
2493
  });
2303
2494
  }), () => {
2304
2495
  };
2305
2496
  }
2306
2497
  });
2307
- class Ge extends D {
2308
- constructor(t, e, o, s = {}) {
2309
- super(), this.pixelSize = t, this.resolution = new f(), this.renderResolution = new f(), this.pixelatedMaterial = this.createPixelatedMaterial(), this.normalMaterial = new ct(), this.fsQuad = new R(this.pixelatedMaterial), this.scene = e, this.camera = o, this.normalEdgeStrength = s.normalEdgeStrength || 0.3, this.depthEdgeStrength = s.depthEdgeStrength || 0.4, this.beautyRenderTarget = new F(), this.beautyRenderTarget.texture.minFilter = N, this.beautyRenderTarget.texture.magFilter = N, this.beautyRenderTarget.texture.type = P, this.beautyRenderTarget.depthTexture = new dt(), this.normalRenderTarget = new F(), this.normalRenderTarget.texture.minFilter = N, this.normalRenderTarget.texture.magFilter = N, this.normalRenderTarget.texture.type = P;
2498
+ class Xe extends E {
2499
+ /**
2500
+ * Constructs a new render pixelated pass.
2501
+ *
2502
+ * @param {number} pixelSize - The effect's pixel size.
2503
+ * @param {Scene} scene - The scene to render.
2504
+ * @param {Camera} camera - The camera.
2505
+ * @param {{normalEdgeStrength:number,depthEdgeStrength:number}} options - The pass options.
2506
+ */
2507
+ constructor(t, e, s, o = {}) {
2508
+ super(), this.pixelSize = t, this.scene = e, this.camera = s, this.normalEdgeStrength = o.normalEdgeStrength || 0.3, this.depthEdgeStrength = o.depthEdgeStrength || 0.4, this.pixelatedMaterial = this._createPixelatedMaterial(), this._resolution = new d(), this._renderResolution = new d(), this._normalMaterial = new ft(), this._beautyRenderTarget = new D(), this._beautyRenderTarget.texture.minFilter = B, this._beautyRenderTarget.texture.magFilter = B, this._beautyRenderTarget.texture.type = C, this._beautyRenderTarget.depthTexture = new ht(), this._normalRenderTarget = new D(), this._normalRenderTarget.texture.minFilter = B, this._normalRenderTarget.texture.magFilter = B, this._normalRenderTarget.texture.type = C, this._fsQuad = new O(this.pixelatedMaterial);
2310
2509
  }
2510
+ /**
2511
+ * Frees the GPU-related resources allocated by this instance. Call this
2512
+ * method whenever the pass is no longer used in your app.
2513
+ */
2311
2514
  dispose() {
2312
- this.beautyRenderTarget.dispose(), this.normalRenderTarget.dispose(), this.pixelatedMaterial.dispose(), this.normalMaterial.dispose(), this.fsQuad.dispose();
2515
+ this._beautyRenderTarget.dispose(), this._normalRenderTarget.dispose(), this.pixelatedMaterial.dispose(), this._normalMaterial.dispose(), this._fsQuad.dispose();
2313
2516
  }
2517
+ /**
2518
+ * Sets the size of the pass.
2519
+ *
2520
+ * @param {number} width - The width to set.
2521
+ * @param {number} height - The height to set.
2522
+ */
2314
2523
  setSize(t, e) {
2315
- this.resolution.set(t, e), this.renderResolution.set(t / this.pixelSize | 0, e / this.pixelSize | 0);
2316
- const { x: o, y: s } = this.renderResolution;
2317
- this.beautyRenderTarget.setSize(o, s), this.normalRenderTarget.setSize(o, s), this.fsQuad.material.uniforms.resolution.value.set(o, s, 1 / o, 1 / s);
2524
+ this._resolution.set(t, e), this._renderResolution.set(t / this.pixelSize | 0, e / this.pixelSize | 0);
2525
+ const { x: s, y: o } = this._renderResolution;
2526
+ this._beautyRenderTarget.setSize(s, o), this._normalRenderTarget.setSize(s, o), this._fsQuad.material.uniforms.resolution.value.set(s, o, 1 / s, 1 / o);
2318
2527
  }
2528
+ /**
2529
+ * Sets the effect's pixel size.
2530
+ *
2531
+ * @param {number} pixelSize - The pixel size to set.
2532
+ */
2319
2533
  setPixelSize(t) {
2320
- this.pixelSize = t, this.setSize(this.resolution.x, this.resolution.y);
2534
+ this.pixelSize = t, this.setSize(this._resolution.x, this._resolution.y);
2321
2535
  }
2536
+ /**
2537
+ * Performs the pixelation pass.
2538
+ *
2539
+ * @param {WebGLRenderer} renderer - The renderer.
2540
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
2541
+ * destination for the pass.
2542
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
2543
+ * previous pass from this buffer.
2544
+ * @param {number} deltaTime - The delta time in seconds.
2545
+ * @param {boolean} maskActive - Whether masking is active or not.
2546
+ */
2322
2547
  render(t, e) {
2323
- const o = this.fsQuad.material.uniforms;
2324
- o.normalEdgeStrength.value = this.normalEdgeStrength, o.depthEdgeStrength.value = this.depthEdgeStrength, t.setRenderTarget(this.beautyRenderTarget), t.render(this.scene, this.camera);
2325
- const s = this.scene.overrideMaterial;
2326
- t.setRenderTarget(this.normalRenderTarget), this.scene.overrideMaterial = this.normalMaterial, t.render(this.scene, this.camera), this.scene.overrideMaterial = s, o.tDiffuse.value = this.beautyRenderTarget.texture, o.tDepth.value = this.beautyRenderTarget.depthTexture, o.tNormal.value = this.normalRenderTarget.texture, this.renderToScreen ? t.setRenderTarget(null) : (t.setRenderTarget(e), this.clear && t.clear()), this.fsQuad.render(t);
2327
- }
2328
- createPixelatedMaterial() {
2329
- return new T({
2548
+ const s = this._fsQuad.material.uniforms;
2549
+ s.normalEdgeStrength.value = this.normalEdgeStrength, s.depthEdgeStrength.value = this.depthEdgeStrength, t.setRenderTarget(this._beautyRenderTarget), t.render(this.scene, this.camera);
2550
+ const o = this.scene.overrideMaterial;
2551
+ t.setRenderTarget(this._normalRenderTarget), this.scene.overrideMaterial = this._normalMaterial, t.render(this.scene, this.camera), this.scene.overrideMaterial = o, s.tDiffuse.value = this._beautyRenderTarget.texture, s.tDepth.value = this._beautyRenderTarget.depthTexture, s.tNormal.value = this._normalRenderTarget.texture, this.renderToScreen ? t.setRenderTarget(null) : (t.setRenderTarget(e), this.clear && t.clear()), this._fsQuad.render(t);
2552
+ }
2553
+ // internals
2554
+ _createPixelatedMaterial() {
2555
+ return new y({
2330
2556
  uniforms: {
2331
2557
  tDiffuse: { value: null },
2332
2558
  tDepth: { value: null },
2333
2559
  tNormal: { value: null },
2334
- resolution: {
2335
- value: new ft(
2336
- this.renderResolution.x,
2337
- this.renderResolution.y,
2338
- 1 / this.renderResolution.x,
2339
- 1 / this.renderResolution.y
2340
- )
2341
- },
2560
+ resolution: { value: new pt() },
2342
2561
  normalEdgeStrength: { value: 0 },
2343
2562
  depthEdgeStrength: { value: 0 }
2344
2563
  },
@@ -2451,28 +2670,28 @@ class Ge extends D {
2451
2670
  });
2452
2671
  }
2453
2672
  }
2454
- const Co = /* @__PURE__ */ u({
2673
+ const Co = /* @__PURE__ */ c({
2455
2674
  __name: "Pixelation",
2456
2675
  props: {
2457
2676
  pixelSize: {},
2458
2677
  depthEdgeStrength: {},
2459
2678
  normalEdgeStrength: {}
2460
2679
  },
2461
- setup(n, { expose: t }) {
2462
- const e = n, { scene: o, camera: s } = y(), { pass: a } = U(() => new Ge(e.pixelSize, o.value, s.value), e);
2463
- return t({ pass: a }), w(() => {
2680
+ setup(r, { expose: t }) {
2681
+ const e = r, { scene: s, camera: o } = T(), { pass: a } = z(() => new Xe(e.pixelSize, s.value, o.value), e);
2682
+ return t({ pass: a }), S(() => {
2464
2683
  a.value.setPixelSize(e.pixelSize);
2465
- }), v(
2684
+ }), p(
2466
2685
  [
2467
2686
  [() => e.depthEdgeStrength, "depthEdgeStrength"],
2468
2687
  [() => e.normalEdgeStrength, "normalEdgeStrength"]
2469
2688
  ],
2470
2689
  a,
2471
- () => new Ge(1, o.value, s.value)
2690
+ () => new Xe(1, s.value, o.value)
2472
2691
  ), () => {
2473
2692
  };
2474
2693
  }
2475
- }), Wt = {
2694
+ }), j = {
2476
2695
  name: "OutputShader",
2477
2696
  uniforms: {
2478
2697
  tDiffuse: { value: null },
@@ -2558,39 +2777,54 @@ const Co = /* @__PURE__ */ u({
2558
2777
  }`
2559
2778
  )
2560
2779
  };
2561
- class Ut extends D {
2780
+ class Wt extends E {
2781
+ /**
2782
+ * Constructs a new output pass.
2783
+ */
2562
2784
  constructor() {
2563
- super();
2564
- const t = Wt;
2565
- this.uniforms = L.clone(t.uniforms), this.material = new ht({
2566
- name: t.name,
2785
+ super(), this.uniforms = P.clone(j.uniforms), this.material = new mt({
2786
+ name: j.name,
2567
2787
  uniforms: this.uniforms,
2568
- vertexShader: t.vertexShader,
2569
- fragmentShader: t.fragmentShader
2570
- }), this.fsQuad = new R(this.material), this._outputColorSpace = null, this._toneMapping = null;
2788
+ vertexShader: j.vertexShader,
2789
+ fragmentShader: j.fragmentShader
2790
+ }), this._fsQuad = new O(this.material), this._outputColorSpace = null, this._toneMapping = null;
2571
2791
  }
2572
- render(t, e, o) {
2573
- this.uniforms.tDiffuse.value = o.texture, this.uniforms.toneMappingExposure.value = t.toneMappingExposure, (this._outputColorSpace !== t.outputColorSpace || this._toneMapping !== t.toneMapping) && (this._outputColorSpace = t.outputColorSpace, this._toneMapping = t.toneMapping, this.material.defines = {}, pt.getTransfer(this._outputColorSpace) === mt && (this.material.defines.SRGB_TRANSFER = ""), this._toneMapping === vt ? this.material.defines.LINEAR_TONE_MAPPING = "" : this._toneMapping === gt ? this.material.defines.REINHARD_TONE_MAPPING = "" : this._toneMapping === xt ? this.material.defines.CINEON_TONE_MAPPING = "" : this._toneMapping === bt ? this.material.defines.ACES_FILMIC_TONE_MAPPING = "" : this._toneMapping === St ? this.material.defines.AGX_TONE_MAPPING = "" : this._toneMapping === wt ? this.material.defines.NEUTRAL_TONE_MAPPING = "" : this._toneMapping === At && (this.material.defines.CUSTOM_TONE_MAPPING = ""), this.material.needsUpdate = !0), this.renderToScreen === !0 ? (t.setRenderTarget(null), this.fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), this.fsQuad.render(t));
2792
+ /**
2793
+ * Performs the output pass.
2794
+ *
2795
+ * @param {WebGLRenderer} renderer - The renderer.
2796
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
2797
+ * destination for the pass.
2798
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
2799
+ * previous pass from this buffer.
2800
+ * @param {number} deltaTime - The delta time in seconds.
2801
+ * @param {boolean} maskActive - Whether masking is active or not.
2802
+ */
2803
+ render(t, e, s) {
2804
+ this.uniforms.tDiffuse.value = s.texture, this.uniforms.toneMappingExposure.value = t.toneMappingExposure, (this._outputColorSpace !== t.outputColorSpace || this._toneMapping !== t.toneMapping) && (this._outputColorSpace = t.outputColorSpace, this._toneMapping = t.toneMapping, this.material.defines = {}, vt.getTransfer(this._outputColorSpace) === gt && (this.material.defines.SRGB_TRANSFER = ""), this._toneMapping === xt ? this.material.defines.LINEAR_TONE_MAPPING = "" : this._toneMapping === bt ? this.material.defines.REINHARD_TONE_MAPPING = "" : this._toneMapping === St ? this.material.defines.CINEON_TONE_MAPPING = "" : this._toneMapping === wt ? this.material.defines.ACES_FILMIC_TONE_MAPPING = "" : this._toneMapping === At ? this.material.defines.AGX_TONE_MAPPING = "" : this._toneMapping === yt ? this.material.defines.NEUTRAL_TONE_MAPPING = "" : this._toneMapping === Mt && (this.material.defines.CUSTOM_TONE_MAPPING = ""), this.material.needsUpdate = !0), this.renderToScreen === !0 ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), this._fsQuad.render(t));
2574
2805
  }
2806
+ /**
2807
+ * Frees the GPU-related resources allocated by this instance. Call this
2808
+ * method whenever the pass is no longer used in your app.
2809
+ */
2575
2810
  dispose() {
2576
- this.material.dispose(), this.fsQuad.dispose();
2811
+ this.material.dispose(), this._fsQuad.dispose();
2577
2812
  }
2578
2813
  }
2579
- const Eo = /* @__PURE__ */ u({
2814
+ const Eo = /* @__PURE__ */ c({
2580
2815
  __name: "Output",
2581
- setup(n, { expose: t }) {
2582
- const { pass: e } = U(() => new Ut());
2816
+ setup(r, { expose: t }) {
2817
+ const { pass: e } = z(() => new Wt());
2583
2818
  return t({ pass: e }), () => {
2584
2819
  };
2585
2820
  }
2586
- }), Y = {
2587
- name: "SMAAEdgesShader",
2821
+ }), V = {
2588
2822
  defines: {
2589
2823
  SMAA_THRESHOLD: "0.1"
2590
2824
  },
2591
2825
  uniforms: {
2592
2826
  tDiffuse: { value: null },
2593
- resolution: { value: new f(1 / 1024, 1 / 512) }
2827
+ resolution: { value: new d(1 / 1024, 1 / 512) }
2594
2828
  },
2595
2829
  vertexShader: (
2596
2830
  /* glsl */
@@ -2684,8 +2918,7 @@ const Eo = /* @__PURE__ */ u({
2684
2918
 
2685
2919
  }`
2686
2920
  )
2687
- }, k = {
2688
- name: "SMAAWeightsShader",
2921
+ }, _ = {
2689
2922
  defines: {
2690
2923
  SMAA_MAX_SEARCH_STEPS: "8",
2691
2924
  SMAA_AREATEX_MAX_DISTANCE: "16",
@@ -2696,7 +2929,7 @@ const Eo = /* @__PURE__ */ u({
2696
2929
  tDiffuse: { value: null },
2697
2930
  tArea: { value: null },
2698
2931
  tSearch: { value: null },
2699
- resolution: { value: new f(1 / 1024, 1 / 512) }
2932
+ resolution: { value: new d(1 / 1024, 1 / 512) }
2700
2933
  },
2701
2934
  vertexShader: (
2702
2935
  /* glsl */
@@ -2934,12 +3167,11 @@ const Eo = /* @__PURE__ */ u({
2934
3167
 
2935
3168
  }`
2936
3169
  )
2937
- }, ue = {
2938
- name: "SMAABlendShader",
3170
+ }, de = {
2939
3171
  uniforms: {
2940
3172
  tDiffuse: { value: null },
2941
3173
  tColor: { value: null },
2942
- resolution: { value: new f(1 / 1024, 1 / 512) }
3174
+ resolution: { value: new d(1 / 1024, 1 / 512) }
2943
3175
  },
2944
3176
  vertexShader: (
2945
3177
  /* glsl */
@@ -3024,75 +3256,98 @@ const Eo = /* @__PURE__ */ u({
3024
3256
  }`
3025
3257
  )
3026
3258
  };
3027
- class Gt extends D {
3028
- constructor(t, e) {
3029
- super(), this.edgesRT = new F(t, e, {
3259
+ class Gt extends E {
3260
+ /**
3261
+ * Constructs a new SMAA pass.
3262
+ */
3263
+ constructor() {
3264
+ super(), this._edgesRT = new D(1, 1, {
3030
3265
  depthBuffer: !1,
3031
- type: P
3032
- }), this.edgesRT.texture.name = "SMAAPass.edges", this.weightsRT = new F(t, e, {
3266
+ type: C
3267
+ }), this._edgesRT.texture.name = "SMAAPass.edges", this._weightsRT = new D(1, 1, {
3033
3268
  depthBuffer: !1,
3034
- type: P
3035
- }), this.weightsRT.texture.name = "SMAAPass.weights";
3036
- const o = this, s = new Image();
3037
- s.src = this.getAreaTexture(), s.onload = function() {
3038
- o.areaTexture.needsUpdate = !0;
3039
- }, this.areaTexture = new Le(), this.areaTexture.name = "SMAAPass.area", this.areaTexture.image = s, this.areaTexture.minFilter = yt, this.areaTexture.generateMipmaps = !1, this.areaTexture.flipY = !1;
3040
- const a = new Image();
3041
- a.src = this.getSearchTexture(), a.onload = function() {
3042
- o.searchTexture.needsUpdate = !0;
3043
- }, this.searchTexture = new Le(), this.searchTexture.name = "SMAAPass.search", this.searchTexture.image = a, this.searchTexture.magFilter = N, this.searchTexture.minFilter = N, this.searchTexture.generateMipmaps = !1, this.searchTexture.flipY = !1, this.uniformsEdges = L.clone(Y.uniforms), this.uniformsEdges.resolution.value.set(1 / t, 1 / e), this.materialEdges = new T({
3044
- defines: Object.assign({}, Y.defines),
3045
- uniforms: this.uniformsEdges,
3046
- vertexShader: Y.vertexShader,
3047
- fragmentShader: Y.fragmentShader
3048
- }), this.uniformsWeights = L.clone(k.uniforms), this.uniformsWeights.resolution.value.set(1 / t, 1 / e), this.uniformsWeights.tDiffuse.value = this.edgesRT.texture, this.uniformsWeights.tArea.value = this.areaTexture, this.uniformsWeights.tSearch.value = this.searchTexture, this.materialWeights = new T({
3049
- defines: Object.assign({}, k.defines),
3050
- uniforms: this.uniformsWeights,
3051
- vertexShader: k.vertexShader,
3052
- fragmentShader: k.fragmentShader
3053
- }), this.uniformsBlend = L.clone(ue.uniforms), this.uniformsBlend.resolution.value.set(1 / t, 1 / e), this.uniformsBlend.tDiffuse.value = this.weightsRT.texture, this.materialBlend = new T({
3054
- uniforms: this.uniformsBlend,
3055
- vertexShader: ue.vertexShader,
3056
- fragmentShader: ue.fragmentShader
3057
- }), this.fsQuad = new R(null);
3269
+ type: C
3270
+ }), this._weightsRT.texture.name = "SMAAPass.weights";
3271
+ const t = this, e = new Image();
3272
+ e.src = this._getAreaTexture(), e.onload = function() {
3273
+ t._areaTexture.needsUpdate = !0;
3274
+ }, this._areaTexture = new Be(), this._areaTexture.name = "SMAAPass.area", this._areaTexture.image = e, this._areaTexture.minFilter = Tt, this._areaTexture.generateMipmaps = !1, this._areaTexture.flipY = !1;
3275
+ const s = new Image();
3276
+ s.src = this._getSearchTexture(), s.onload = function() {
3277
+ t._searchTexture.needsUpdate = !0;
3278
+ }, this._searchTexture = new Be(), this._searchTexture.name = "SMAAPass.search", this._searchTexture.image = s, this._searchTexture.magFilter = B, this._searchTexture.minFilter = B, this._searchTexture.generateMipmaps = !1, this._searchTexture.flipY = !1, this._uniformsEdges = P.clone(V.uniforms), this._materialEdges = new y({
3279
+ defines: Object.assign({}, V.defines),
3280
+ uniforms: this._uniformsEdges,
3281
+ vertexShader: V.vertexShader,
3282
+ fragmentShader: V.fragmentShader
3283
+ }), this._uniformsWeights = P.clone(_.uniforms), this._uniformsWeights.tDiffuse.value = this._edgesRT.texture, this._uniformsWeights.tArea.value = this._areaTexture, this._uniformsWeights.tSearch.value = this._searchTexture, this._materialWeights = new y({
3284
+ defines: Object.assign({}, _.defines),
3285
+ uniforms: this._uniformsWeights,
3286
+ vertexShader: _.vertexShader,
3287
+ fragmentShader: _.fragmentShader
3288
+ }), this._uniformsBlend = P.clone(de.uniforms), this._uniformsBlend.tDiffuse.value = this._weightsRT.texture, this._materialBlend = new y({
3289
+ uniforms: this._uniformsBlend,
3290
+ vertexShader: de.vertexShader,
3291
+ fragmentShader: de.fragmentShader
3292
+ }), this._fsQuad = new O(null);
3058
3293
  }
3059
- render(t, e, o) {
3060
- this.uniformsEdges.tDiffuse.value = o.texture, this.fsQuad.material = this.materialEdges, t.setRenderTarget(this.edgesRT), this.clear && t.clear(), this.fsQuad.render(t), this.fsQuad.material = this.materialWeights, t.setRenderTarget(this.weightsRT), this.clear && t.clear(), this.fsQuad.render(t), this.uniformsBlend.tColor.value = o.texture, this.fsQuad.material = this.materialBlend, this.renderToScreen ? (t.setRenderTarget(null), this.fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(), this.fsQuad.render(t));
3294
+ /**
3295
+ * Performs the SMAA pass.
3296
+ *
3297
+ * @param {WebGLRenderer} renderer - The renderer.
3298
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
3299
+ * destination for the pass.
3300
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
3301
+ * previous pass from this buffer.
3302
+ * @param {number} deltaTime - The delta time in seconds.
3303
+ * @param {boolean} maskActive - Whether masking is active or not.
3304
+ */
3305
+ render(t, e, s) {
3306
+ this._uniformsEdges.tDiffuse.value = s.texture, this._fsQuad.material = this._materialEdges, t.setRenderTarget(this._edgesRT), this.clear && t.clear(), this._fsQuad.render(t), this._fsQuad.material = this._materialWeights, t.setRenderTarget(this._weightsRT), this.clear && t.clear(), this._fsQuad.render(t), this._uniformsBlend.tColor.value = s.texture, this._fsQuad.material = this._materialBlend, this.renderToScreen ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(), this._fsQuad.render(t));
3061
3307
  }
3308
+ /**
3309
+ * Sets the size of the pass.
3310
+ *
3311
+ * @param {number} width - The width to set.
3312
+ * @param {number} height - The height to set.
3313
+ */
3062
3314
  setSize(t, e) {
3063
- this.edgesRT.setSize(t, e), this.weightsRT.setSize(t, e), this.materialEdges.uniforms.resolution.value.set(1 / t, 1 / e), this.materialWeights.uniforms.resolution.value.set(1 / t, 1 / e), this.materialBlend.uniforms.resolution.value.set(1 / t, 1 / e);
3315
+ this._edgesRT.setSize(t, e), this._weightsRT.setSize(t, e), this._materialEdges.uniforms.resolution.value.set(1 / t, 1 / e), this._materialWeights.uniforms.resolution.value.set(1 / t, 1 / e), this._materialBlend.uniforms.resolution.value.set(1 / t, 1 / e);
3064
3316
  }
3065
- getAreaTexture() {
3317
+ /**
3318
+ * Frees the GPU-related resources allocated by this instance. Call this
3319
+ * method whenever the pass is no longer used in your app.
3320
+ */
3321
+ dispose() {
3322
+ this._edgesRT.dispose(), this._weightsRT.dispose(), this._areaTexture.dispose(), this._searchTexture.dispose(), this._materialEdges.dispose(), this._materialWeights.dispose(), this._materialBlend.dispose(), this._fsQuad.dispose();
3323
+ }
3324
+ // internals
3325
+ _getAreaTexture() {
3066
3326
  return "data:image/png;base64,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";
3067
3327
  }
3068
- getSearchTexture() {
3328
+ _getSearchTexture() {
3069
3329
  return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=";
3070
3330
  }
3071
- dispose() {
3072
- this.edgesRT.dispose(), this.weightsRT.dispose(), this.areaTexture.dispose(), this.searchTexture.dispose(), this.materialEdges.dispose(), this.materialWeights.dispose(), this.materialBlend.dispose(), this.fsQuad.dispose();
3073
- }
3074
3331
  }
3075
- const Po = /* @__PURE__ */ u({
3332
+ const Po = /* @__PURE__ */ c({
3076
3333
  __name: "SMAA",
3077
3334
  props: {
3078
3335
  width: {},
3079
3336
  height: {}
3080
3337
  },
3081
- setup(n, { expose: t }) {
3082
- const e = n, { sizes: o } = y(), { pixelRatio: s } = Ye(), a = O(() => e.width ?? o.width.value * s.value), r = O(() => e.height ?? o.height.value * s.value), { pass: i } = U(() => new Gt(a.value, r.value), e);
3083
- return t({ pass: i }), w(() => {
3084
- i.value.setSize(a.value, r.value);
3338
+ setup(r, { expose: t }) {
3339
+ const e = r, { sizes: s } = G(), { pixelRatio: o } = qe(), a = L(() => e.width ?? s.width.value * o.value), i = L(() => e.height ?? s.height.value * o.value), { pass: n } = z(() => new Gt(), e);
3340
+ return t({ pass: n }), S(() => {
3341
+ n.value.setSize(a.value, i.value);
3085
3342
  }), () => {
3086
3343
  };
3087
3344
  }
3088
- }), Ke = {
3089
- name: "LuminosityHighPassShader",
3090
- shaderID: "luminosityHighPass",
3345
+ }), Je = {
3091
3346
  uniforms: {
3092
3347
  tDiffuse: { value: null },
3093
3348
  luminosityThreshold: { value: 1 },
3094
3349
  smoothWidth: { value: 1 },
3095
- defaultColor: { value: new K(0) },
3350
+ defaultColor: { value: new Q(0) },
3096
3351
  defaultOpacity: { value: 0 }
3097
3352
  },
3098
3353
  vertexShader: (
@@ -3136,41 +3391,51 @@ const Po = /* @__PURE__ */ u({
3136
3391
  }`
3137
3392
  )
3138
3393
  };
3139
- class z extends D {
3140
- constructor(t, e, o, s) {
3141
- super(), this.strength = e !== void 0 ? e : 1, this.radius = o, this.threshold = s, this.resolution = t !== void 0 ? new f(t.x, t.y) : new f(256, 256), this.clearColor = new K(0, 0, 0), this.renderTargetsHorizontal = [], this.renderTargetsVertical = [], this.nMips = 5;
3142
- let a = Math.round(this.resolution.x / 2), r = Math.round(this.resolution.y / 2);
3143
- this.renderTargetBright = new F(a, r, { type: P }), this.renderTargetBright.texture.name = "UnrealBloomPass.bright", this.renderTargetBright.texture.generateMipmaps = !1;
3144
- for (let b = 0; b < this.nMips; b++) {
3145
- const c = new F(a, r, { type: P });
3146
- c.texture.name = "UnrealBloomPass.h" + b, c.texture.generateMipmaps = !1, this.renderTargetsHorizontal.push(c);
3147
- const S = new F(a, r, { type: P });
3148
- S.texture.name = "UnrealBloomPass.v" + b, S.texture.generateMipmaps = !1, this.renderTargetsVertical.push(S), a = Math.round(a / 2), r = Math.round(r / 2);
3394
+ class R extends E {
3395
+ /**
3396
+ * Constructs a new Unreal Bloom pass.
3397
+ *
3398
+ * @param {Vector2} [resolution] - The effect's resolution.
3399
+ * @param {number} [strength=1] - The Bloom strength.
3400
+ * @param {number} radius - The Bloom radius.
3401
+ * @param {number} threshold - The luminance threshold limits which bright areas contribute to the Bloom effect.
3402
+ */
3403
+ constructor(t, e = 1, s, o) {
3404
+ super(), this.strength = e, this.radius = s, this.threshold = o, this.resolution = t !== void 0 ? new d(t.x, t.y) : new d(256, 256), this.clearColor = new Q(0, 0, 0), this.needsSwap = !1, this.renderTargetsHorizontal = [], this.renderTargetsVertical = [], this.nMips = 5;
3405
+ let a = Math.round(this.resolution.x / 2), i = Math.round(this.resolution.y / 2);
3406
+ this.renderTargetBright = new D(a, i, { type: C }), this.renderTargetBright.texture.name = "UnrealBloomPass.bright", this.renderTargetBright.texture.generateMipmaps = !1;
3407
+ for (let h = 0; h < this.nMips; h++) {
3408
+ const x = new D(a, i, { type: C });
3409
+ x.texture.name = "UnrealBloomPass.h" + h, x.texture.generateMipmaps = !1, this.renderTargetsHorizontal.push(x);
3410
+ const w = new D(a, i, { type: C });
3411
+ w.texture.name = "UnrealBloomPass.v" + h, w.texture.generateMipmaps = !1, this.renderTargetsVertical.push(w), a = Math.round(a / 2), i = Math.round(i / 2);
3149
3412
  }
3150
- const i = Ke;
3151
- this.highPassUniforms = L.clone(i.uniforms), this.highPassUniforms.luminosityThreshold.value = s, this.highPassUniforms.smoothWidth.value = 0.01, this.materialHighPassFilter = new T({
3413
+ const n = Je;
3414
+ this.highPassUniforms = P.clone(n.uniforms), this.highPassUniforms.luminosityThreshold.value = o, this.highPassUniforms.smoothWidth.value = 0.01, this.materialHighPassFilter = new y({
3152
3415
  uniforms: this.highPassUniforms,
3153
- vertexShader: i.vertexShader,
3154
- fragmentShader: i.fragmentShader
3416
+ vertexShader: n.vertexShader,
3417
+ fragmentShader: n.fragmentShader
3155
3418
  }), this.separableBlurMaterials = [];
3156
3419
  const l = [3, 5, 7, 9, 11];
3157
- a = Math.round(this.resolution.x / 2), r = Math.round(this.resolution.y / 2);
3158
- for (let b = 0; b < this.nMips; b++)
3159
- this.separableBlurMaterials.push(this.getSeparableBlurMaterial(l[b])), this.separableBlurMaterials[b].uniforms.invSize.value = new f(1 / a, 1 / r), a = Math.round(a / 2), r = Math.round(r / 2);
3160
- this.compositeMaterial = this.getCompositeMaterial(this.nMips), this.compositeMaterial.uniforms.blurTexture1.value = this.renderTargetsVertical[0].texture, this.compositeMaterial.uniforms.blurTexture2.value = this.renderTargetsVertical[1].texture, this.compositeMaterial.uniforms.blurTexture3.value = this.renderTargetsVertical[2].texture, this.compositeMaterial.uniforms.blurTexture4.value = this.renderTargetsVertical[3].texture, this.compositeMaterial.uniforms.blurTexture5.value = this.renderTargetsVertical[4].texture, this.compositeMaterial.uniforms.bloomStrength.value = e, this.compositeMaterial.uniforms.bloomRadius.value = 0.1;
3161
- const d = [1, 0.8, 0.6, 0.4, 0.2];
3162
- this.compositeMaterial.uniforms.bloomFactors.value = d, this.bloomTintColors = [new B(1, 1, 1), new B(1, 1, 1), new B(1, 1, 1), new B(1, 1, 1), new B(1, 1, 1)], this.compositeMaterial.uniforms.bloomTintColors.value = this.bloomTintColors;
3163
- const p = qe;
3164
- this.copyUniforms = L.clone(p.uniforms), this.blendMaterial = new T({
3420
+ a = Math.round(this.resolution.x / 2), i = Math.round(this.resolution.y / 2);
3421
+ for (let h = 0; h < this.nMips; h++)
3422
+ this.separableBlurMaterials.push(this._getSeparableBlurMaterial(l[h])), this.separableBlurMaterials[h].uniforms.invSize.value = new d(1 / a, 1 / i), a = Math.round(a / 2), i = Math.round(i / 2);
3423
+ this.compositeMaterial = this._getCompositeMaterial(this.nMips), this.compositeMaterial.uniforms.blurTexture1.value = this.renderTargetsVertical[0].texture, this.compositeMaterial.uniforms.blurTexture2.value = this.renderTargetsVertical[1].texture, this.compositeMaterial.uniforms.blurTexture3.value = this.renderTargetsVertical[2].texture, this.compositeMaterial.uniforms.blurTexture4.value = this.renderTargetsVertical[3].texture, this.compositeMaterial.uniforms.blurTexture5.value = this.renderTargetsVertical[4].texture, this.compositeMaterial.uniforms.bloomStrength.value = e, this.compositeMaterial.uniforms.bloomRadius.value = 0.1;
3424
+ const u = [1, 0.8, 0.6, 0.4, 0.2];
3425
+ this.compositeMaterial.uniforms.bloomFactors.value = u, this.bloomTintColors = [new F(1, 1, 1), new F(1, 1, 1), new F(1, 1, 1), new F(1, 1, 1), new F(1, 1, 1)], this.compositeMaterial.uniforms.bloomTintColors.value = this.bloomTintColors, this.copyUniforms = P.clone(k.uniforms), this.blendMaterial = new y({
3165
3426
  uniforms: this.copyUniforms,
3166
- vertexShader: p.vertexShader,
3167
- fragmentShader: p.fragmentShader,
3168
- blending: Mt,
3427
+ vertexShader: k.vertexShader,
3428
+ fragmentShader: k.fragmentShader,
3429
+ blending: Ct,
3169
3430
  depthTest: !1,
3170
3431
  depthWrite: !1,
3171
3432
  transparent: !0
3172
- }), this.enabled = !0, this.needsSwap = !1, this._oldClearColor = new K(), this.oldClearAlpha = 1, this.basic = new Ve(), this.fsQuad = new R(null);
3433
+ }), this._oldClearColor = new Q(), this._oldClearAlpha = 1, this._basic = new ke(), this._fsQuad = new O(null);
3173
3434
  }
3435
+ /**
3436
+ * Frees the GPU-related resources allocated by this instance. Call this
3437
+ * method whenever the pass is no longer used in your app.
3438
+ */
3174
3439
  dispose() {
3175
3440
  for (let t = 0; t < this.renderTargetsHorizontal.length; t++)
3176
3441
  this.renderTargetsHorizontal[t].dispose();
@@ -3179,36 +3444,54 @@ class z extends D {
3179
3444
  this.renderTargetBright.dispose();
3180
3445
  for (let t = 0; t < this.separableBlurMaterials.length; t++)
3181
3446
  this.separableBlurMaterials[t].dispose();
3182
- this.compositeMaterial.dispose(), this.blendMaterial.dispose(), this.basic.dispose(), this.fsQuad.dispose();
3447
+ this.compositeMaterial.dispose(), this.blendMaterial.dispose(), this._basic.dispose(), this._fsQuad.dispose();
3183
3448
  }
3449
+ /**
3450
+ * Sets the size of the pass.
3451
+ *
3452
+ * @param {number} width - The width to set.
3453
+ * @param {number} height - The height to set.
3454
+ */
3184
3455
  setSize(t, e) {
3185
- let o = Math.round(t / 2), s = Math.round(e / 2);
3186
- this.renderTargetBright.setSize(o, s);
3456
+ let s = Math.round(t / 2), o = Math.round(e / 2);
3457
+ this.renderTargetBright.setSize(s, o);
3187
3458
  for (let a = 0; a < this.nMips; a++)
3188
- this.renderTargetsHorizontal[a].setSize(o, s), this.renderTargetsVertical[a].setSize(o, s), this.separableBlurMaterials[a].uniforms.invSize.value = new f(1 / o, 1 / s), o = Math.round(o / 2), s = Math.round(s / 2);
3459
+ this.renderTargetsHorizontal[a].setSize(s, o), this.renderTargetsVertical[a].setSize(s, o), this.separableBlurMaterials[a].uniforms.invSize.value = new d(1 / s, 1 / o), s = Math.round(s / 2), o = Math.round(o / 2);
3189
3460
  }
3190
- render(t, e, o, s, a) {
3191
- t.getClearColor(this._oldClearColor), this.oldClearAlpha = t.getClearAlpha();
3192
- const r = t.autoClear;
3193
- t.autoClear = !1, t.setClearColor(this.clearColor, 0), a && t.state.buffers.stencil.setTest(!1), this.renderToScreen && (this.fsQuad.material = this.basic, this.basic.map = o.texture, t.setRenderTarget(null), t.clear(), this.fsQuad.render(t)), this.highPassUniforms.tDiffuse.value = o.texture, this.highPassUniforms.luminosityThreshold.value = this.threshold, this.fsQuad.material = this.materialHighPassFilter, t.setRenderTarget(this.renderTargetBright), t.clear(), this.fsQuad.render(t);
3194
- let i = this.renderTargetBright;
3461
+ /**
3462
+ * Performs the Bloom pass.
3463
+ *
3464
+ * @param {WebGLRenderer} renderer - The renderer.
3465
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
3466
+ * destination for the pass.
3467
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
3468
+ * previous pass from this buffer.
3469
+ * @param {number} deltaTime - The delta time in seconds.
3470
+ * @param {boolean} maskActive - Whether masking is active or not.
3471
+ */
3472
+ render(t, e, s, o, a) {
3473
+ t.getClearColor(this._oldClearColor), this._oldClearAlpha = t.getClearAlpha();
3474
+ const i = t.autoClear;
3475
+ t.autoClear = !1, t.setClearColor(this.clearColor, 0), a && t.state.buffers.stencil.setTest(!1), this.renderToScreen && (this._fsQuad.material = this._basic, this._basic.map = s.texture, t.setRenderTarget(null), t.clear(), this._fsQuad.render(t)), this.highPassUniforms.tDiffuse.value = s.texture, this.highPassUniforms.luminosityThreshold.value = this.threshold, this._fsQuad.material = this.materialHighPassFilter, t.setRenderTarget(this.renderTargetBright), t.clear(), this._fsQuad.render(t);
3476
+ let n = this.renderTargetBright;
3195
3477
  for (let l = 0; l < this.nMips; l++)
3196
- this.fsQuad.material = this.separableBlurMaterials[l], this.separableBlurMaterials[l].uniforms.colorTexture.value = i.texture, this.separableBlurMaterials[l].uniforms.direction.value = z.BlurDirectionX, t.setRenderTarget(this.renderTargetsHorizontal[l]), t.clear(), this.fsQuad.render(t), this.separableBlurMaterials[l].uniforms.colorTexture.value = this.renderTargetsHorizontal[l].texture, this.separableBlurMaterials[l].uniforms.direction.value = z.BlurDirectionY, t.setRenderTarget(this.renderTargetsVertical[l]), t.clear(), this.fsQuad.render(t), i = this.renderTargetsVertical[l];
3197
- this.fsQuad.material = this.compositeMaterial, this.compositeMaterial.uniforms.bloomStrength.value = this.strength, this.compositeMaterial.uniforms.bloomRadius.value = this.radius, this.compositeMaterial.uniforms.bloomTintColors.value = this.bloomTintColors, t.setRenderTarget(this.renderTargetsHorizontal[0]), t.clear(), this.fsQuad.render(t), this.fsQuad.material = this.blendMaterial, this.copyUniforms.tDiffuse.value = this.renderTargetsHorizontal[0].texture, a && t.state.buffers.stencil.setTest(!0), this.renderToScreen ? (t.setRenderTarget(null), this.fsQuad.render(t)) : (t.setRenderTarget(o), this.fsQuad.render(t)), t.setClearColor(this._oldClearColor, this.oldClearAlpha), t.autoClear = r;
3478
+ this._fsQuad.material = this.separableBlurMaterials[l], this.separableBlurMaterials[l].uniforms.colorTexture.value = n.texture, this.separableBlurMaterials[l].uniforms.direction.value = R.BlurDirectionX, t.setRenderTarget(this.renderTargetsHorizontal[l]), t.clear(), this._fsQuad.render(t), this.separableBlurMaterials[l].uniforms.colorTexture.value = this.renderTargetsHorizontal[l].texture, this.separableBlurMaterials[l].uniforms.direction.value = R.BlurDirectionY, t.setRenderTarget(this.renderTargetsVertical[l]), t.clear(), this._fsQuad.render(t), n = this.renderTargetsVertical[l];
3479
+ this._fsQuad.material = this.compositeMaterial, this.compositeMaterial.uniforms.bloomStrength.value = this.strength, this.compositeMaterial.uniforms.bloomRadius.value = this.radius, this.compositeMaterial.uniforms.bloomTintColors.value = this.bloomTintColors, t.setRenderTarget(this.renderTargetsHorizontal[0]), t.clear(), this._fsQuad.render(t), this._fsQuad.material = this.blendMaterial, this.copyUniforms.tDiffuse.value = this.renderTargetsHorizontal[0].texture, a && t.state.buffers.stencil.setTest(!0), this.renderToScreen ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(s), this._fsQuad.render(t)), t.setClearColor(this._oldClearColor, this._oldClearAlpha), t.autoClear = i;
3198
3480
  }
3199
- getSeparableBlurMaterial(t) {
3481
+ // internals
3482
+ _getSeparableBlurMaterial(t) {
3200
3483
  const e = [];
3201
- for (let o = 0; o < t; o++)
3202
- e.push(0.39894 * Math.exp(-0.5 * o * o / (t * t)) / t);
3203
- return new T({
3484
+ for (let s = 0; s < t; s++)
3485
+ e.push(0.39894 * Math.exp(-0.5 * s * s / (t * t)) / t);
3486
+ return new y({
3204
3487
  defines: {
3205
3488
  KERNEL_RADIUS: t
3206
3489
  },
3207
3490
  uniforms: {
3208
3491
  colorTexture: { value: null },
3209
- invSize: { value: new f(0.5, 0.5) },
3492
+ invSize: { value: new d(0.5, 0.5) },
3210
3493
  // inverse texture size
3211
- direction: { value: new f(0.5, 0.5) },
3494
+ direction: { value: new d(0.5, 0.5) },
3212
3495
  gaussianCoefficients: { value: e }
3213
3496
  // precomputed Gaussian coefficients
3214
3497
  },
@@ -3240,8 +3523,8 @@ class z extends D {
3240
3523
  }`
3241
3524
  });
3242
3525
  }
3243
- getCompositeMaterial(t) {
3244
- return new T({
3526
+ _getCompositeMaterial(t) {
3527
+ return new y({
3245
3528
  defines: {
3246
3529
  NUM_MIPS: t
3247
3530
  },
@@ -3287,31 +3570,28 @@ class z extends D {
3287
3570
  });
3288
3571
  }
3289
3572
  }
3290
- z.BlurDirectionX = new f(1, 0);
3291
- z.BlurDirectionY = new f(0, 1);
3292
- const Do = /* @__PURE__ */ u({
3573
+ R.BlurDirectionX = new d(1, 0);
3574
+ R.BlurDirectionY = new d(0, 1);
3575
+ const Do = /* @__PURE__ */ c({
3293
3576
  __name: "UnrealBloom",
3294
3577
  props: {
3295
3578
  radius: { default: 0 },
3296
3579
  strength: { default: 1 },
3297
3580
  threshold: { default: 0 }
3298
3581
  },
3299
- setup(n, { expose: t }) {
3300
- const e = n, { sizes: o } = y(), { pass: s } = U(() => new z(
3301
- new f(o.width.value, o.height.value),
3582
+ setup(r, { expose: t }) {
3583
+ const e = r, { sizes: s } = G(), { pass: o } = z(() => new R(
3584
+ new d(s.width.value, s.height.value),
3302
3585
  e.radius,
3303
3586
  e.strength,
3304
3587
  e.threshold
3305
3588
  ), e);
3306
- return t({ pass: s }), w(() => {
3307
- var a;
3308
- s.value.radius = e.radius ?? ((a = s.value.getCompositeMaterial().uniforms.bloomRadius) == null ? void 0 : a.value) ?? 0.1;
3309
- }), w(() => {
3310
- var a;
3311
- s.value.strength = e.strength ?? ((a = s.value.getCompositeMaterial().uniforms.bloomStrength) == null ? void 0 : a.value) ?? 1;
3312
- }), w(() => {
3313
- var a;
3314
- s.value.threshold = e.threshold ?? ((a = Ke.uniforms.luminosityThreshold) == null ? void 0 : a.value) ?? 1;
3589
+ return t({ pass: o }), S(() => {
3590
+ o.value.radius = e.radius ?? o.value.getCompositeMaterial().uniforms.bloomRadius?.value ?? 0.1;
3591
+ }), S(() => {
3592
+ o.value.strength = e.strength ?? o.value.getCompositeMaterial().uniforms.bloomStrength?.value ?? 1;
3593
+ }), S(() => {
3594
+ o.value.threshold = e.threshold ?? Je.uniforms.luminosityThreshold?.value ?? 1;
3315
3595
  }), () => {
3316
3596
  };
3317
3597
  }
@@ -3319,42 +3599,42 @@ const Do = /* @__PURE__ */ u({
3319
3599
  export {
3320
3600
  Ao as ASCIIPmndrs,
3321
3601
  $t as BarrelBlurPmndrs,
3322
- kt as BloomPmndrs,
3602
+ Yt as BloomPmndrs,
3323
3603
  xo as BrightnessContrastPmndrs,
3324
3604
  to as ChromaticAberrationPmndrs,
3325
3605
  ro as ColorAveragePmndrs,
3326
3606
  mo as ColorDepthPmndrs,
3327
- qt as DepthOfFieldPmndrs,
3607
+ kt as DepthOfFieldPmndrs,
3328
3608
  ho as DepthPickingPassPmndrs,
3329
- uo as DotScreenPmndrs,
3609
+ co as DotScreenPmndrs,
3330
3610
  yo as EffectComposer,
3331
- Yt as EffectComposerPmndrs,
3611
+ _t as EffectComposerPmndrs,
3332
3612
  So as FXAAPmndrs,
3333
3613
  go as FishEyePmndrs,
3334
3614
  Mo as Glitch,
3335
- Qt as GlitchPmndrs,
3615
+ qt as GlitchPmndrs,
3336
3616
  po as GodRaysPmndrs,
3337
3617
  vo as GridPmndrs,
3338
3618
  To as Halftone,
3339
3619
  oo as HueSaturationPmndrs,
3340
3620
  ao as KuwaharaPmndrs,
3341
- no as LensDistortionPmndrs,
3621
+ io as LensDistortionPmndrs,
3342
3622
  fo as LinocutPmndrs,
3343
- Kt as NoisePmndrs,
3344
- Jt as OutlinePmndrs,
3623
+ Qt as NoisePmndrs,
3624
+ Kt as OutlinePmndrs,
3345
3625
  Eo as Output,
3346
3626
  Co as Pixelation,
3347
- Zt as PixelationPmndrs,
3627
+ Jt as PixelationPmndrs,
3348
3628
  Po as SMAA,
3349
3629
  bo as SMAAPmndrs,
3350
3630
  so as ScanlinePmndrs,
3351
- co as SepiaPmndrs,
3352
- io as ShockWavePmndrs,
3631
+ uo as SepiaPmndrs,
3632
+ no as ShockWavePmndrs,
3353
3633
  wo as TexturePmndrs,
3354
3634
  lo as TiltShiftPmndrs,
3355
3635
  eo as ToneMappingPmndrs,
3356
3636
  Do as UnrealBloom,
3357
- _t as VignettePmndrs,
3358
- U as useEffect,
3359
- h as useEffectPmndrs
3637
+ Zt as VignettePmndrs,
3638
+ z as useEffect,
3639
+ f as useEffectPmndrs
3360
3640
  };