@tresjs/post-processing 3.0.0-next.0 → 3.1.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: v3.0.0-next.0
3
+ * version: v3.1.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 c, shallowRef as U, provide as He, computed as F, watch as g, onUnmounted as z, renderSlot as Ie, inject as Q, watchEffect as S, nextTick as ue, 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 I, GlitchMode as $e, NoiseEffect as ve, OutlineEffect as ge, PixelationEffect as xe, VignetteEffect as be, Effect as K, BlendFunction as J, ToneMappingEffect as we, ChromaticAberrationEffect as $, HueSaturationEffect as Se, ScanlineEffect as ee, ColorAverageEffect as te, LensDistortionEffect as Ae, ShockWaveEffect as ye, TiltShiftEffect as Me, DotScreenEffect as Te, SepiaEffect as Ce, DepthPickingPass as et, GodRaysEffect as oe, ColorDepthEffect as X, GridEffect as Ee, BrightnessContrastEffect as Pe, SMAAEffect as se, TextureEffect as Y, FXAAEffect as ae, ASCIIEffect as re, ASCIITexture as tt } from "postprocessing";
10
- import { useTresContext as G, useTres as C, useLoop as ce, normalizeColor as ie } from "@tresjs/core";
11
- import { HalfFloatType as E, Uniform as T, Vector2 as f, Vector3 as O, Mesh as je, SphereGeometry as ot, MeshBasicMaterial as Ve, OrthographicCamera as st, BufferGeometry as at, Float32BufferAttribute as De, ShaderMaterial as M, UniformsUtils as D, WebGLRenderTarget as L, NoBlending as rt, Clock as it, Color as q, MathUtils as y, DataTexture as nt, RedFormat as lt, FloatType as ut, MeshNormalMaterial as ct, NearestFilter as B, 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 wt, NeutralToneMapping as St, 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 Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
65
+ const $ = Symbol("effectComposerPmndrs"), _t = /* @__PURE__ */ c({
60
66
  __name: "EffectComposerPmndrs",
61
67
  props: {
62
68
  enabled: { type: Boolean, default: !0 },
@@ -66,106 +72,96 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
66
72
  resolutionScale: {},
67
73
  autoClear: { type: Boolean, default: !0 },
68
74
  multisampling: { default: 0 },
69
- frameBufferType: { default: E }
75
+ frameBufferType: { default: C }
70
76
  },
71
77
  emits: ["render"],
72
- setup(i, { expose: t, emit: e }) {
73
- const o = i, s = e, { scene: a, camera: r, renderer: n, sizes: u } = G(), l = U(null);
74
- let d = null, x = null;
75
- He(Z, l), t({ composer: l });
76
- const b = () => {
77
- l.value && (x = new Ze(a.value, r.activeCamera.value), x.enabled = !1, l.value.addPass(x), o.resolutionScale !== void 0 && Fe.isWebGL2Available() && (d = new _e({
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({
78
84
  normalBuffer: x.texture,
79
- resolutionScale: o.resolutionScale
80
- }), d.enabled = !1, l.value.addPass(d)));
81
- }, A = F(() => {
82
- const p = new he(), w = {
83
- depthBuffer: o.depthBuffer !== void 0 ? o.depthBuffer : p.inputBuffer.depthBuffer,
84
- stencilBuffer: o.stencilBuffer !== void 0 ? o.stencilBuffer : p.inputBuffer.stencilBuffer,
85
- multisampling: Fe.isWebGL2Available() ? o.multisampling !== void 0 ? o.multisampling : p.multisampling : 0,
86
- frameBufferType: o.frameBufferType !== void 0 ? o.frameBufferType : E
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 p.dispose(), w;
89
- }), m = () => {
90
- var p;
91
- !n.instance && !a.value && !r.activeCamera.value || ((p = l.value) == null || p.dispose(), l.value = new he(n.instance, A.value), l.value.addPass(new Je(a.value, r.activeCamera.value)), o.disableNormalPass || b());
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
- return g([a, r.activeCamera, () => o.disableNormalPass], () => {
94
- !u.width.value || !u.height.value || m();
95
- }), g(() => [u.width.value, u.height.value], ([p, w]) => {
96
- !p && !w || (l.value ? l.value.setSize(p, w) : m());
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
- }), n.replaceRenderFunction((p) => {
100
- if (o.enabled && n.instance && l.value && u.width.value && u.height.value) {
101
- const w = n.instance.autoClear;
102
- n.instance.autoClear = o.autoClear, o.stencilBuffer && !o.autoClear && n.instance.clearStencil(), l.value.render(), s("render", l.value), n.instance.autoClear = w, p();
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();
103
108
  }
104
- }), z(() => {
105
- var p;
106
- (p = l.value) == null || p.dispose();
107
- }), (p, w) => Ie(p.$slots, "default");
108
- }
109
- }), h = (i, t, e) => {
110
- const o = Q(Z), s = U(null), a = U(null), { scene: r, camera: n, invalidate: u } = C();
111
- g(t, () => u());
112
- const l = () => {
113
- var b, A, m;
114
- s.value && ((b = o == null ? void 0 : o.value) == null || b.removePass(s.value)), (A = a.value) == null || A.dispose(), (m = s.value) == null || m.dispose();
115
- }, d = (b) => {
116
- !n.value || !(o != null && o.value) || !r.value || (a.value = i(), s.value = new Xe(n.value, a.value), o.value.addPass(s.value, b));
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));
117
120
  };
118
- e && g(
119
- () => e.map((b) => t[b]),
121
+ e && m(
122
+ () => e.map((w) => t[w]),
120
123
  () => {
121
- var A;
122
- if (!(o != null && o.value))
124
+ if (!s?.value)
123
125
  return;
124
- const b = (A = o.value) == null ? void 0 : A.passes.findIndex((m) => m === s.value);
125
- ~b && (l(), d(b));
126
+ const w = s.value?.passes.findIndex((U) => U === o.value);
127
+ ~w && (u(), h(w));
126
128
  }
127
129
  ), S(() => {
128
- !n.value || !(a != null && a.value) || (a.value.mainCamera = n.value);
130
+ !n.value || !a?.value || (a.value.mainCamera = n.value);
129
131
  });
130
132
  const x = S(() => {
131
- !n.value || !(o != null && o.value) || !r.value || (ue(() => x()), !a.value && d());
133
+ !n.value || !s?.value || !i.value || (fe(() => x()), !a.value && h());
132
134
  });
133
- return z(() => {
134
- l();
135
+ return N(() => {
136
+ u();
135
137
  }), {
136
- pass: s,
138
+ pass: o,
137
139
  effect: a
138
140
  };
139
- }, ke = /([^[.\]])+/g, Tt = (i, t) => {
140
- if (!t)
141
- return;
142
- const e = Array.isArray(t) ? t : t.match(ke);
143
- return e == null ? void 0 : e.reduce((o, s) => o && o[s], i);
144
- }, Oe = (i, t, e) => {
145
- const o = Array.isArray(t) ? t : t.match(ke);
146
- o && o.reduce((s, a, r) => (s[a] === void 0 && (s[a] = {}), r === o.length - 1 && (s[a] = e), s[a]), i);
147
- }, Ct = (i, t) => {
148
- const e = { ...i };
149
- return t.forEach((o) => delete e[o]), e;
150
- }, H = (i, t, e, o, s = {}) => g(i, (a) => {
151
- 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) => {
152
148
  if (t.value)
153
149
  if (a === void 0) {
154
- const n = o();
155
- Oe(t.value, e, Tt(n, e)), (r = n.dispose) == null || r.call(n);
150
+ const i = s();
151
+ Ne(t.value, e, Et(i, e)), i.dispose?.();
156
152
  } else
157
- Oe(t.value, e, i());
158
- }, s), v = (i, t, e) => i.map(([o, s]) => H(
159
- o,
160
- t,
153
+ Ne(t.value, e, r());
154
+ }, o), p = (r, t, e) => r.map(([s, o]) => H(
161
155
  s,
162
- e
163
- )), de = (i, t, e) => Object.keys(i).map((o) => H(
164
- () => i[o],
165
156
  t,
166
157
  o,
167
158
  e
168
- )), kt = /* @__PURE__ */ c({
159
+ )), pe = (r, t, e) => Object.keys(r).map((s) => H(
160
+ () => r[s],
161
+ t,
162
+ s,
163
+ e
164
+ )), Yt = /* @__PURE__ */ c({
169
165
  __name: "BloomPmndrs",
170
166
  props: {
171
167
  blendFunction: {},
@@ -175,9 +171,9 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
175
171
  luminanceSmoothing: {},
176
172
  mipmapBlur: { type: Boolean, default: void 0 }
177
173
  },
178
- setup(i, { expose: t }) {
179
- const e = i, { pass: o, effect: s } = h(() => new pe(e), e, ["mipmapBlur"]);
180
- 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(
181
177
  [
182
178
  [() => e.blendFunction, "blendMode.blendFunction"],
183
179
  [() => e.intensity, "intensity"],
@@ -185,12 +181,12 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
185
181
  [() => e.luminanceSmoothing, "luminanceMaterial.smoothing"],
186
182
  [() => e.luminanceThreshold, "luminanceMaterial.threshold"]
187
183
  ],
188
- s,
189
- () => new pe()
184
+ o,
185
+ () => new ge()
190
186
  ), () => {
191
187
  };
192
188
  }
193
- }), qt = /* @__PURE__ */ c({
189
+ }), kt = /* @__PURE__ */ c({
194
190
  __name: "DepthOfFieldPmndrs",
195
191
  props: {
196
192
  blendFunction: {},
@@ -203,9 +199,9 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
203
199
  resolutionX: {},
204
200
  resolutionY: {}
205
201
  },
206
- setup(i, { expose: t }) {
207
- const e = i, { camera: o } = C(), { pass: s, effect: a } = h(() => new me(o.value, e), e);
208
- 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(
209
205
  [
210
206
  [() => e.blendFunction, "blendMode.blendFunction"],
211
207
  [() => e.worldFocusDistance, "circleOfConfusionMaterial.worldFocusDistance"],
@@ -218,11 +214,11 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
218
214
  [() => e.resolutionY, "resolution.height"]
219
215
  ],
220
216
  a,
221
- () => new me()
217
+ () => new xe()
222
218
  ), () => {
223
219
  };
224
220
  }
225
- }), Qt = /* @__PURE__ */ c({
221
+ }), qt = /* @__PURE__ */ c({
226
222
  __name: "GlitchPmndrs",
227
223
  props: {
228
224
  blendFunction: {},
@@ -237,51 +233,51 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
237
233
  perturbationMap: {},
238
234
  dtSize: {}
239
235
  },
240
- setup(i, { expose: t }) {
241
- const e = i, { pass: o, effect: s } = h(() => new I(e), e, ["dtSize"]);
242
- t({ pass: o, effect: s });
243
- const { invalidate: a } = C(), { onBeforeRender: r } = ce();
244
- return r(() => a()), S(() => {
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(() => {
245
241
  const n = () => {
246
242
  if (e.mode !== void 0)
247
- return e.active === !1 ? $e.DISABLED : e.mode;
248
- const u = new I(), l = u.mode;
249
- return u.dispose(), l;
243
+ return e.active === !1 ? tt.DISABLED : e.mode;
244
+ const l = new I(), u = l.mode;
245
+ return l.dispose(), u;
250
246
  };
251
- s.value && (s.value.mode = n());
247
+ o.value && (o.value.mode = n());
252
248
  }), H(
253
249
  () => e.blendFunction,
254
- s,
250
+ o,
255
251
  "blendMode.blendFunction",
256
252
  () => new I()
257
- ), de(
258
- Ct(e, ["active", "blendFunction"]),
259
- s,
253
+ ), pe(
254
+ Pt(e, ["active", "blendFunction"]),
255
+ o,
260
256
  () => new I()
261
257
  ), () => {
262
258
  };
263
259
  }
264
- }), Kt = /* @__PURE__ */ c({
260
+ }), Qt = /* @__PURE__ */ c({
265
261
  __name: "NoisePmndrs",
266
262
  props: {
267
263
  premultiply: { type: Boolean, default: void 0 },
268
264
  blendFunction: {}
269
265
  },
270
- setup(i, { expose: t }) {
271
- const e = i, { pass: o, effect: s } = h(() => new ve(e), e);
272
- t({ pass: o, effect: s });
273
- const { invalidate: a } = C(), { onBeforeRender: r } = ce();
274
- return r(() => a()), 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(
275
271
  [
276
272
  [() => e.blendFunction, "blendMode.blendFunction"],
277
273
  [() => e.premultiply, "premultiply"]
278
274
  ],
279
- s,
280
- () => new ve()
275
+ o,
276
+ () => new be()
281
277
  ), () => {
282
278
  };
283
279
  }
284
- }), Jt = /* @__PURE__ */ c({
280
+ }), Kt = /* @__PURE__ */ c({
285
281
  __name: "OutlinePmndrs",
286
282
  props: {
287
283
  outlinedObjects: {},
@@ -300,11 +296,11 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
300
296
  hiddenEdgeColor: {},
301
297
  visibleEdgeColor: {}
302
298
  },
303
- setup(i, { expose: t }) {
304
- const e = i, o = (l) => l !== void 0 ? ie(l).getHex() : void 0, { camera: s, scene: a } = C(), { pass: r, effect: n } = h(
305
- () => 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(
306
302
  a.value,
307
- s.value,
303
+ o.value,
308
304
  {
309
305
  blur: e.blur,
310
306
  xRay: e.xRay,
@@ -318,29 +314,28 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
318
314
  multisampling: e.multisampling,
319
315
  patternTexture: e.patternTexture,
320
316
  resolutionScale: e.resolutionScale,
321
- hiddenEdgeColor: o(e.hiddenEdgeColor),
322
- visibleEdgeColor: o(e.visibleEdgeColor)
317
+ hiddenEdgeColor: s(e.hiddenEdgeColor),
318
+ visibleEdgeColor: s(e.visibleEdgeColor)
323
319
  // width and height are explicitly omitted, because they are deprecated in postprocessing's OutlineEffect
324
320
  }
325
321
  ),
326
322
  e
327
323
  );
328
- t({ pass: r, effect: n }), g(
324
+ t({ pass: i, effect: n }), m(
329
325
  [() => e.outlinedObjects, n],
330
326
  // watchEffect is intentionally not used here as it would result in an endless loop
331
327
  () => {
332
- var l;
333
- (l = n.value) == null || l.selection.set(e.outlinedObjects || []);
328
+ n.value?.selection.set(e.outlinedObjects || []);
334
329
  },
335
330
  {
336
331
  immediate: !0
337
332
  }
338
333
  );
339
- const u = F(() => ({
340
- hiddenEdgeColor: e.hiddenEdgeColor ? ie(e.hiddenEdgeColor) : void 0,
341
- 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
342
337
  }));
343
- return v(
338
+ return p(
344
339
  [
345
340
  [() => e.blendFunction, "blendMode.blendFunction"],
346
341
  [() => e.blur, "blur"],
@@ -354,29 +349,29 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
354
349
  [() => e.resolutionY, "resolution.height"],
355
350
  [() => e.patternTexture, "patternTexture"],
356
351
  [() => e.resolutionScale, "resolution.scale"],
357
- [() => u.value.hiddenEdgeColor, "hiddenEdgeColor"],
358
- [() => u.value.visibleEdgeColor, "visibleEdgeColor"]
352
+ [() => l.value.hiddenEdgeColor, "hiddenEdgeColor"],
353
+ [() => l.value.visibleEdgeColor, "visibleEdgeColor"]
359
354
  ],
360
355
  n,
361
- () => new ge()
356
+ () => new Se()
362
357
  ), () => {
363
358
  };
364
359
  }
365
- }), Zt = /* @__PURE__ */ c({
360
+ }), Jt = /* @__PURE__ */ c({
366
361
  __name: "PixelationPmndrs",
367
362
  props: {
368
363
  granularity: {}
369
364
  },
370
- setup(i, { expose: t }) {
371
- const e = i, { pass: o, effect: s } = h(() => new xe(e.granularity), e);
372
- 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(
373
368
  e,
374
- s,
375
- () => new xe()
369
+ o,
370
+ () => new we()
376
371
  ), () => {
377
372
  };
378
373
  }
379
- }), _t = /* @__PURE__ */ c({
374
+ }), Zt = /* @__PURE__ */ c({
380
375
  __name: "VignettePmndrs",
381
376
  props: {
382
377
  technique: {},
@@ -384,22 +379,22 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
384
379
  offset: {},
385
380
  darkness: {}
386
381
  },
387
- setup(i, { expose: t }) {
388
- const e = i, { pass: o, effect: s } = h(() => new be(e), e);
389
- 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(
390
385
  [
391
386
  [() => e.blendFunction, "blendMode.blendFunction"],
392
387
  [() => e.offset, "offset"],
393
388
  [() => e.darkness, "darkness"],
394
389
  [() => e.technique, "technique"]
395
390
  ],
396
- s,
397
- () => new be()
391
+ o,
392
+ () => new Ae()
398
393
  ), () => {
399
394
  };
400
395
  }
401
396
  });
402
- class Re extends K {
397
+ class ze extends J {
403
398
  /**
404
399
  * Creates a new BarrelBlurEffect instance.
405
400
  *
@@ -409,7 +404,7 @@ class Re extends K {
409
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.
410
405
  *
411
406
  */
412
- constructor({ blendFunction: t = J.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) } = {}) {
413
408
  super("BarrelBlurEffect", `
414
409
  uniform float amount;
415
410
  uniform vec2 offset;
@@ -457,9 +452,9 @@ class Re extends K {
457
452
  `, {
458
453
  blendFunction: t,
459
454
  uniforms: /* @__PURE__ */ new Map([
460
- ["amount", new T(e)],
455
+ ["amount", new M(e)],
461
456
  // Uniform controlling the intensity of distortion
462
- ["offset", new T(o)]
457
+ ["offset", new M(s)]
463
458
  // Uniform controlling the offset of distortion
464
459
  ])
465
460
  });
@@ -470,8 +465,7 @@ class Re extends K {
470
465
  * @type {number}
471
466
  */
472
467
  get amount() {
473
- var t;
474
- return (t = this.uniforms.get("amount")) == null ? void 0 : t.value;
468
+ return this.uniforms.get("amount")?.value;
475
469
  }
476
470
  set amount(t) {
477
471
  this.uniforms.get("amount").value = t;
@@ -482,8 +476,7 @@ class Re extends K {
482
476
  * @type {Vector2}
483
477
  */
484
478
  get offset() {
485
- var t;
486
- return (t = this.uniforms.get("offset")) == null ? void 0 : t.value;
479
+ return this.uniforms.get("offset")?.value;
487
480
  }
488
481
  set offset(t) {
489
482
  this.uniforms.get("offset").value = t;
@@ -496,22 +489,22 @@ const $t = /* @__PURE__ */ c({
496
489
  amount: {},
497
490
  offset: {}
498
491
  },
499
- setup(i, { expose: t }) {
500
- const e = i, { pass: o, effect: s } = h(
501
- () => new Re({
492
+ setup(r, { expose: t }) {
493
+ const e = r, { pass: s, effect: o } = f(
494
+ () => new ze({
502
495
  ...e,
503
- offset: Array.isArray(e.offset) ? new f(...e.offset) : e.offset
496
+ offset: Array.isArray(e.offset) ? new d(...e.offset) : e.offset
504
497
  }),
505
498
  e
506
499
  );
507
- return t({ pass: o, effect: s }), v(
500
+ return t({ pass: s, effect: o }), p(
508
501
  [
509
502
  [() => e.blendFunction, "blendMode.blendFunction"],
510
503
  [() => e.amount, "amount"],
511
504
  [() => e.offset, "offset"]
512
505
  ],
513
- s,
514
- () => new Re()
506
+ o,
507
+ () => new ze()
515
508
  ), () => {
516
509
  };
517
510
  }
@@ -526,9 +519,9 @@ const $t = /* @__PURE__ */ c({
526
519
  minLuminance: {},
527
520
  whitePoint: {}
528
521
  },
529
- setup(i, { expose: t }) {
530
- const e = i, { pass: o, effect: s } = h(() => new we(e), e);
531
- 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(
532
525
  [
533
526
  [() => e.mode, "mode"],
534
527
  [() => e.blendFunction, "blendMode.blendFunction"],
@@ -538,8 +531,8 @@ const $t = /* @__PURE__ */ c({
538
531
  [() => e.minLuminance, "adaptiveLuminanceMaterial.minLuminance"],
539
532
  [() => e.whitePoint, "whitePoint"]
540
533
  ],
541
- s,
542
- () => new we()
534
+ o,
535
+ () => new ye()
543
536
  ), () => {
544
537
  };
545
538
  }
@@ -551,15 +544,15 @@ const $t = /* @__PURE__ */ c({
551
544
  radialModulation: { type: Boolean, default: void 0 },
552
545
  modulationOffset: {}
553
546
  },
554
- setup(i, { expose: t }) {
555
- const e = i, o = new $(), { pass: s, effect: a } = h(() => new $({
547
+ setup(r, { expose: t }) {
548
+ const e = r, s = new te(), { pass: o, effect: a } = f(() => new te({
556
549
  ...e,
557
550
  // Unfortunately, these defaults must be set this way as the type in postprocessing is not correct.
558
551
  // The arguments are optional in the actual constructor, but not in the type.
559
- radialModulation: e.radialModulation ?? o.radialModulation,
560
- modulationOffset: e.modulationOffset ?? o.modulationOffset
552
+ radialModulation: e.radialModulation ?? s.radialModulation,
553
+ modulationOffset: e.modulationOffset ?? s.modulationOffset
561
554
  }), e);
562
- return o.dispose(), t({ pass: s, effect: a }), v(
555
+ return s.dispose(), t({ pass: o, effect: a }), p(
563
556
  [
564
557
  [() => e.blendFunction, "blendMode.blendFunction"],
565
558
  [() => e.offset, "offset"],
@@ -567,7 +560,7 @@ const $t = /* @__PURE__ */ c({
567
560
  [() => e.modulationOffset, "modulationOffset"]
568
561
  ],
569
562
  a,
570
- () => new $()
563
+ () => new te()
571
564
  ), () => {
572
565
  };
573
566
  }
@@ -578,16 +571,16 @@ const $t = /* @__PURE__ */ c({
578
571
  hue: {},
579
572
  blendFunction: {}
580
573
  },
581
- setup(i, { expose: t }) {
582
- const e = i, { pass: o, effect: s } = h(() => new Se(e), e);
583
- 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(
584
577
  [
585
578
  [() => e.blendFunction, "blendMode.blendFunction"],
586
579
  [() => e.hue, "hue"],
587
580
  [() => e.saturation, "saturation"]
588
581
  ],
589
- s,
590
- () => new Se()
582
+ o,
583
+ () => new Me()
591
584
  ), () => {
592
585
  };
593
586
  }
@@ -599,25 +592,24 @@ const $t = /* @__PURE__ */ c({
599
592
  scrollSpeed: {},
600
593
  opacity: {}
601
594
  },
602
- setup(i, { expose: t }) {
603
- const e = i, { pass: o, effect: s } = h(() => new ee(e), e);
604
- 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(
605
598
  [
606
599
  [() => e.blendFunction, "blendMode.blendFunction"],
607
600
  [() => e.density, "density"],
608
601
  [() => e.scrollSpeed, "scrollSpeed"]
609
602
  ],
610
- s,
611
- () => new ee()
612
- ), g(
603
+ o,
604
+ () => new oe()
605
+ ), m(
613
606
  [() => e.opacity],
614
607
  () => {
615
- var a, r;
616
608
  if (e.opacity !== void 0)
617
- (a = s.value) == null || a.blendMode.setOpacity(e.opacity);
609
+ o.value?.blendMode.setOpacity(e.opacity);
618
610
  else {
619
- const n = new ee();
620
- (r = s.value) == null || r.blendMode.setOpacity(n.blendMode.getOpacity()), n.dispose();
611
+ const a = new oe();
612
+ o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
621
613
  }
622
614
  },
623
615
  {
@@ -626,7 +618,7 @@ const $t = /* @__PURE__ */ c({
626
618
  ), () => {
627
619
  };
628
620
  }
629
- }), Et = `
621
+ }), Dt = `
630
622
  uniform float radius;
631
623
  uniform int sectorCount;
632
624
 
@@ -723,7 +715,7 @@ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor)
723
715
  outputColor = vec4(finalColor, inputColor.a);
724
716
  }
725
717
  `;
726
- class Be extends K {
718
+ class Ue extends J {
727
719
  /**
728
720
  * Creates a new KuwaharaEffect instance.
729
721
  *
@@ -733,12 +725,12 @@ class Be extends K {
733
725
  * @param {number} [options.sectorCount] - Number of sectors.
734
726
  *
735
727
  */
736
- constructor({ blendFunction: t = J.NORMAL, radius: e = 1, sectorCount: o = 4 } = {}) {
737
- super("KuwaharaEffect", Et, {
728
+ constructor({ blendFunction: t = Z.NORMAL, radius: e = 1, sectorCount: s = 4 } = {}) {
729
+ super("KuwaharaEffect", Dt, {
738
730
  blendFunction: t,
739
731
  uniforms: /* @__PURE__ */ new Map([
740
- ["radius", new T(e)],
741
- ["sectorCount", new T(o)]
732
+ ["radius", new M(e)],
733
+ ["sectorCount", new M(s)]
742
734
  ])
743
735
  });
744
736
  }
@@ -748,8 +740,7 @@ class Be extends K {
748
740
  * @type {number}
749
741
  */
750
742
  get radius() {
751
- var t;
752
- return (t = this.uniforms.get("radius")) == null ? void 0 : t.value;
743
+ return this.uniforms.get("radius")?.value;
753
744
  }
754
745
  set radius(t) {
755
746
  this.uniforms.get("radius").value = t;
@@ -760,8 +751,7 @@ class Be extends K {
760
751
  * @type {number}
761
752
  */
762
753
  get sectorCount() {
763
- var t;
764
- return (t = this.uniforms.get("sectorCount")) == null ? void 0 : t.value;
754
+ return this.uniforms.get("sectorCount")?.value;
765
755
  }
766
756
  set sectorCount(t) {
767
757
  this.uniforms.get("sectorCount").value = t;
@@ -774,19 +764,19 @@ const ao = /* @__PURE__ */ c({
774
764
  radius: {},
775
765
  sectorCount: {}
776
766
  },
777
- setup(i, { expose: t }) {
778
- const e = i, { pass: o, effect: s } = h(
779
- () => new Be(e),
767
+ setup(r, { expose: t }) {
768
+ const e = r, { pass: s, effect: o } = f(
769
+ () => new Ue(e),
780
770
  e
781
771
  );
782
- return t({ pass: o, effect: s }), v(
772
+ return t({ pass: s, effect: o }), p(
783
773
  [
784
774
  [() => e.blendFunction, "blendMode.blendFunction"],
785
775
  [() => e.radius, "radius"],
786
776
  [() => e.sectorCount, "sectorCount"]
787
777
  ],
788
- s,
789
- () => new Be()
778
+ o,
779
+ () => new Ue()
790
780
  ), () => {
791
781
  };
792
782
  }
@@ -796,23 +786,22 @@ const ao = /* @__PURE__ */ c({
796
786
  blendFunction: {},
797
787
  opacity: {}
798
788
  },
799
- setup(i, { expose: t }) {
800
- const e = i, { pass: o, effect: s } = h(() => new te(e.blendFunction), e);
801
- return t({ pass: o, effect: s }), H(
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(
802
792
  () => e.blendFunction,
803
- s,
793
+ o,
804
794
  "blendMode.blendFunction",
805
- () => new te()
806
- ), g(
807
- [s, () => e.opacity],
795
+ () => new se()
796
+ ), m(
797
+ [o, () => e.opacity],
808
798
  () => {
809
- var a, r;
810
- if (s.value)
799
+ if (o.value)
811
800
  if (e.opacity !== void 0)
812
- (a = s.value) == null || a.blendMode.setOpacity(e.opacity);
801
+ o.value?.blendMode.setOpacity(e.opacity);
813
802
  else {
814
- const n = new te();
815
- (r = s.value) == null || r.blendMode.setOpacity(n.blendMode.getOpacity()), n.dispose();
803
+ const a = new se();
804
+ o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
816
805
  }
817
806
  }
818
807
  ), () => {
@@ -826,20 +815,20 @@ const ao = /* @__PURE__ */ c({
826
815
  focalLength: {},
827
816
  skew: {}
828
817
  },
829
- setup(i, { expose: t }) {
830
- const e = i, { pass: o, effect: s } = h(
831
- () => new Ae({
818
+ setup(r, { expose: t }) {
819
+ const e = r, { pass: s, effect: o } = f(
820
+ () => new Te({
832
821
  ...e,
833
- distortion: e.distortion ? Array.isArray(e.distortion) ? new f(...e.distortion) : e.distortion : new f(),
834
- principalPoint: e.principalPoint ? Array.isArray(e.principalPoint) ? new f(...e.principalPoint) : e.principalPoint : new f(),
835
- 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()
836
825
  }),
837
826
  e
838
827
  );
839
- return t({ pass: o, effect: s }), de(
828
+ return t({ pass: s, effect: o }), pe(
840
829
  e,
841
- s,
842
- () => new Ae()
830
+ o,
831
+ () => new Te()
843
832
  ), () => {
844
833
  };
845
834
  }
@@ -852,18 +841,18 @@ const ao = /* @__PURE__ */ c({
852
841
  maxRadius: {},
853
842
  waveSize: {}
854
843
  },
855
- setup(i, { expose: t }) {
856
- const e = i, { camera: o } = C(), { pass: s, effect: a } = h(
857
- () => new ye(o.value, Array.isArray(e.position) ? new O(...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),
858
847
  e
859
848
  );
860
- return t({ pass: s, effect: a }), g(
849
+ return t({ pass: o, effect: a }), m(
861
850
  () => e.position,
862
- (r) => {
863
- a.value && (Array.isArray(r) ? a.value.position.set(...r) : r instanceof O && 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));
864
853
  },
865
854
  { immediate: !0 }
866
- ), v(
855
+ ), p(
867
856
  [
868
857
  [() => e.amplitude, "amplitude"],
869
858
  [() => e.waveSize, "waveSize"],
@@ -871,7 +860,7 @@ const ao = /* @__PURE__ */ c({
871
860
  [() => e.speed, "speed"]
872
861
  ],
873
862
  a,
874
- () => new ye()
863
+ () => new Ce()
875
864
  ), () => {
876
865
  };
877
866
  }
@@ -888,9 +877,9 @@ const ao = /* @__PURE__ */ c({
888
877
  resolutionX: {},
889
878
  resolutionY: {}
890
879
  },
891
- setup(i, { expose: t }) {
892
- const e = i, { pass: o, effect: s } = h(() => new Me(e), e);
893
- 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(
894
883
  [
895
884
  [() => e.blendFunction, "blendMode.blendFunction"],
896
885
  [() => e.offset, "offset"],
@@ -902,59 +891,59 @@ const ao = /* @__PURE__ */ c({
902
891
  [() => e.resolutionX, "resolution.width"],
903
892
  [() => e.resolutionY, "resolution.height"]
904
893
  ],
905
- s,
906
- () => new Me()
894
+ o,
895
+ () => new Ee()
907
896
  ), () => {
908
897
  };
909
898
  }
910
- }), uo = /* @__PURE__ */ c({
899
+ }), co = /* @__PURE__ */ c({
911
900
  __name: "DotScreenPmndrs",
912
901
  props: {
913
902
  angle: {},
914
903
  scale: {},
915
904
  blendFunction: {}
916
905
  },
917
- setup(i, { expose: t }) {
918
- const e = i, { pass: o, effect: s } = h(() => new Te(e), e);
919
- 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(
920
909
  [
921
910
  [() => e.blendFunction, "blendMode.blendFunction"],
922
911
  [() => e.angle, "angle"],
923
912
  [() => e.scale, "scale"]
924
913
  ],
925
- s,
926
- () => new Te()
914
+ o,
915
+ () => new Pe()
927
916
  ), () => {
928
917
  };
929
918
  }
930
- }), co = /* @__PURE__ */ c({
919
+ }), uo = /* @__PURE__ */ c({
931
920
  __name: "SepiaPmndrs",
932
921
  props: {
933
922
  blendFunction: {},
934
923
  intensity: {}
935
924
  },
936
- setup(i, { expose: t }) {
937
- const e = i, { pass: o, effect: s } = h(() => new Ce(e), e);
938
- 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(
939
928
  [
940
929
  [() => e.blendFunction, "blendMode.blendFunction"],
941
930
  [() => e.intensity, "intensity"]
942
931
  ],
943
- s,
944
- () => new Ce()
932
+ o,
933
+ () => new De()
945
934
  ), () => {
946
935
  };
947
936
  }
948
937
  });
949
- class Ne extends K {
938
+ class We extends J {
950
939
  /**
951
940
  * Creates a new LinocutEffect instance.
952
941
  *
953
942
  * @param {LinocutPmndrsProps} [options] - Configuration options for the effect.
954
943
  *
955
944
  */
956
- constructor({ blendFunction: t = J.NORMAL, scale: e = 0.85, noiseScale: o = 0, center: s = [0.5, 0.5], rotation: a = 0 } = {}) {
957
- 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;
958
947
  super("LinocutEffect", `
959
948
  uniform float scale;
960
949
  uniform float noiseScale;
@@ -1018,37 +1007,33 @@ class Ne extends K {
1018
1007
  `, {
1019
1008
  blendFunction: t,
1020
1009
  uniforms: /* @__PURE__ */ new Map([
1021
- ["scale", new T(e)],
1022
- ["noiseScale", new T(o)],
1023
- ["center", new T(r)],
1024
- ["rotation", new T(a)]
1010
+ ["scale", new M(e)],
1011
+ ["noiseScale", new M(s)],
1012
+ ["center", new M(i)],
1013
+ ["rotation", new M(a)]
1025
1014
  ])
1026
1015
  });
1027
1016
  }
1028
1017
  get scale() {
1029
- var t;
1030
- return (t = this.uniforms.get("scale")) == null ? void 0 : t.value;
1018
+ return this.uniforms.get("scale")?.value;
1031
1019
  }
1032
1020
  set scale(t) {
1033
1021
  this.uniforms.get("scale").value = t;
1034
1022
  }
1035
1023
  get noiseScale() {
1036
- var t;
1037
- return (t = this.uniforms.get("noiseScale")) == null ? void 0 : t.value;
1024
+ return this.uniforms.get("noiseScale")?.value;
1038
1025
  }
1039
1026
  set noiseScale(t) {
1040
1027
  this.uniforms.get("noiseScale").value = t;
1041
1028
  }
1042
1029
  get center() {
1043
- var t;
1044
- return (t = this.uniforms.get("center")) == null ? void 0 : t.value;
1030
+ return this.uniforms.get("center")?.value;
1045
1031
  }
1046
1032
  set center(t) {
1047
- 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;
1048
1034
  }
1049
1035
  get rotation() {
1050
- var t;
1051
- return (t = this.uniforms.get("rotation")) == null ? void 0 : t.value;
1036
+ return this.uniforms.get("rotation")?.value;
1052
1037
  }
1053
1038
  set rotation(t) {
1054
1039
  this.uniforms.get("rotation").value = t;
@@ -1063,15 +1048,15 @@ const fo = /* @__PURE__ */ c({
1063
1048
  center: {},
1064
1049
  rotation: {}
1065
1050
  },
1066
- setup(i, { expose: t }) {
1067
- const e = i, { pass: o, effect: s } = h(
1068
- () => new Ne({
1051
+ setup(r, { expose: t }) {
1052
+ const e = r, { pass: s, effect: o } = f(
1053
+ () => new We({
1069
1054
  ...e,
1070
- 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
1071
1056
  }),
1072
1057
  e
1073
1058
  );
1074
- return t({ pass: o, effect: s }), v(
1059
+ return t({ pass: s, effect: o }), p(
1075
1060
  [
1076
1061
  [() => e.blendFunction, "blendMode.blendFunction"],
1077
1062
  [() => e.scale, "scale"],
@@ -1079,8 +1064,8 @@ const fo = /* @__PURE__ */ c({
1079
1064
  [() => e.center, "center"],
1080
1065
  [() => e.rotation, "rotation"]
1081
1066
  ],
1082
- s,
1083
- () => new Ne()
1067
+ o,
1068
+ () => new We()
1084
1069
  ), () => {
1085
1070
  };
1086
1071
  }
@@ -1090,14 +1075,13 @@ const fo = /* @__PURE__ */ c({
1090
1075
  depthPacking: {},
1091
1076
  mode: {}
1092
1077
  },
1093
- setup(i, { expose: t }) {
1094
- const e = i, o = Q(Z), s = new et(e), a = S(() => {
1095
- o != null && o.value && (ue(() => 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));
1096
1081
  });
1097
- return z(() => {
1098
- var r;
1099
- !(o != null && o.value) || !s || ((r = o == null ? void 0 : o.value) == null || r.removePass(s), s.dispose());
1100
- }), t({ pass: s }), () => {
1082
+ return N(() => {
1083
+ !s?.value || !o || (s?.value?.removePass(o), o.dispose());
1084
+ }), t({ pass: o }), () => {
1101
1085
  };
1102
1086
  }
1103
1087
  }), po = /* @__PURE__ */ c({
@@ -1118,17 +1102,17 @@ const fo = /* @__PURE__ */ c({
1118
1102
  samples: {},
1119
1103
  clampMax: {}
1120
1104
  },
1121
- setup(i, { expose: t }) {
1122
- const e = i, { camera: o } = C(), s = F(
1123
- () => e.lightSource ?? new je(
1124
- new ot(1e-5),
1125
- 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 })
1126
1110
  )
1127
- ), { pass: a, effect: r } = h(
1128
- () => new oe(o.value, s.value, e),
1111
+ ), { pass: a, effect: i } = f(
1112
+ () => new ae(s.value, o.value, e),
1129
1113
  e
1130
1114
  );
1131
- return t({ pass: a, effect: r }), v(
1115
+ return t({ pass: a, effect: i }), p(
1132
1116
  [
1133
1117
  [() => e.blendFunction, "blendMode.blendFunction"],
1134
1118
  [() => e.density, "godRaysMaterial.density"],
@@ -1143,26 +1127,25 @@ const fo = /* @__PURE__ */ c({
1143
1127
  [() => e.kernelSize, "blurPass.kernelSize"],
1144
1128
  [() => e.blur, "blurPass.enabled"]
1145
1129
  ],
1146
- r,
1147
- () => new oe()
1148
- ), g(
1149
- [() => e.lightSource, r],
1130
+ i,
1131
+ () => new ae()
1132
+ ), m(
1133
+ [() => e.lightSource, i],
1150
1134
  () => {
1151
- r.value && (r.value.lightSource = fe(s.value));
1135
+ i.value && (i.value.lightSource = me(o.value));
1152
1136
  },
1153
1137
  { immediate: !0 }
1154
- ), g(
1138
+ ), m(
1155
1139
  [() => e.opacity],
1156
1140
  () => {
1157
- var n, u;
1158
1141
  if (e.opacity !== void 0)
1159
- (n = r.value) == null || n.blendMode.setOpacity(e.opacity);
1142
+ i.value?.blendMode.setOpacity(e.opacity);
1160
1143
  else {
1161
- const l = new oe(
1162
- o.value,
1163
- fe(s.value)
1144
+ const n = new ae(
1145
+ s.value,
1146
+ me(o.value)
1164
1147
  );
1165
- (u = r.value) == null || u.blendMode.setOpacity(l.blendMode.getOpacity()), l.dispose();
1148
+ i.value?.blendMode.setOpacity(n.blendMode.getOpacity()), n.dispose();
1166
1149
  }
1167
1150
  },
1168
1151
  {
@@ -1178,35 +1161,33 @@ const fo = /* @__PURE__ */ c({
1178
1161
  bits: {},
1179
1162
  opacity: {}
1180
1163
  },
1181
- setup(i, { expose: t }) {
1182
- const e = i, { pass: o, effect: s } = h(() => new X(e), e);
1183
- return t({ pass: o, effect: s }), H(
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(
1184
1167
  () => e.blendFunction,
1185
- s,
1168
+ o,
1186
1169
  "blendMode.blendFunction",
1187
1170
  () => new X()
1188
- ), g(
1189
- [s, () => e.bits],
1171
+ ), m(
1172
+ [o, () => e.bits],
1190
1173
  () => {
1191
- var a, r;
1192
- if (s.value)
1174
+ if (o.value)
1193
1175
  if (e.bits !== void 0)
1194
- (a = s.value) == null || a.setBitDepth(e.bits);
1176
+ o.value?.setBitDepth(e.bits);
1195
1177
  else {
1196
- const n = new X();
1197
- (r = s.value) == null || r.setBitDepth(n.getBitDepth()), n.dispose();
1178
+ const a = new X();
1179
+ o.value?.setBitDepth(a.getBitDepth()), a.dispose();
1198
1180
  }
1199
1181
  }
1200
- ), g(
1201
- [s, () => e.opacity],
1182
+ ), m(
1183
+ [o, () => e.opacity],
1202
1184
  () => {
1203
- var a, r;
1204
- if (s.value)
1185
+ if (o.value)
1205
1186
  if (e.opacity !== void 0)
1206
- (a = s.value) == null || a.blendMode.setOpacity(e.opacity);
1187
+ o.value?.blendMode.setOpacity(e.opacity);
1207
1188
  else {
1208
- const n = new X();
1209
- (r = s.value) == null || r.blendMode.setOpacity(n.blendMode.getOpacity()), n.dispose();
1189
+ const a = new X();
1190
+ o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
1210
1191
  }
1211
1192
  }
1212
1193
  ), () => {
@@ -1219,21 +1200,21 @@ const fo = /* @__PURE__ */ c({
1219
1200
  scale: {},
1220
1201
  lineWidth: {}
1221
1202
  },
1222
- setup(i, { expose: t }) {
1223
- const e = i, { pass: o, effect: s } = h(() => new Ee(e), e);
1224
- 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(
1225
1206
  [
1226
1207
  [() => e.blendFunction, "blendMode.blendFunction"],
1227
1208
  [() => e.scale, "scale"],
1228
1209
  [() => e.lineWidth, "lineWidth"]
1229
1210
  ],
1230
- s,
1231
- () => new Ee()
1211
+ o,
1212
+ () => new Le()
1232
1213
  ), () => {
1233
1214
  };
1234
1215
  }
1235
1216
  });
1236
- class ze extends K {
1217
+ class Ge extends J {
1237
1218
  /**
1238
1219
  * Creates a new FishEyeEffect instance.
1239
1220
  *
@@ -1244,7 +1225,7 @@ class ze extends K {
1244
1225
  * @param {number} [options.scale] - Scale.
1245
1226
  *
1246
1227
  */
1247
- constructor({ blendFunction: t = J.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 } = {}) {
1248
1229
  super("FishEyeEffect", `
1249
1230
  uniform vec2 lensS;
1250
1231
  uniform vec2 lensF;
@@ -1266,9 +1247,9 @@ class ze extends K {
1266
1247
  `, {
1267
1248
  blendFunction: t,
1268
1249
  uniforms: /* @__PURE__ */ new Map([
1269
- ["lensS", new T(e)],
1270
- ["lensF", new T(o)],
1271
- ["scale", new T(s)]
1250
+ ["lensS", new M(e)],
1251
+ ["lensF", new M(s)],
1252
+ ["scale", new M(o)]
1272
1253
  ])
1273
1254
  });
1274
1255
  }
@@ -1278,8 +1259,7 @@ class ze extends K {
1278
1259
  * @type {Vector2}
1279
1260
  */
1280
1261
  get lensS() {
1281
- var t;
1282
- return (t = this.uniforms.get("lensS")) == null ? void 0 : t.value;
1262
+ return this.uniforms.get("lensS")?.value;
1283
1263
  }
1284
1264
  set lensS(t) {
1285
1265
  this.uniforms.get("lensS").value = t;
@@ -1290,8 +1270,7 @@ class ze extends K {
1290
1270
  * @type {Vector2}
1291
1271
  */
1292
1272
  get lensF() {
1293
- var t;
1294
- return (t = this.uniforms.get("lensF")) == null ? void 0 : t.value;
1273
+ return this.uniforms.get("lensF")?.value;
1295
1274
  }
1296
1275
  set lensF(t) {
1297
1276
  this.uniforms.get("lensF").value = t;
@@ -1302,8 +1281,7 @@ class ze extends K {
1302
1281
  * @type {number}
1303
1282
  */
1304
1283
  get scale() {
1305
- var t;
1306
- return (t = this.uniforms.get("scale")) == null ? void 0 : t.value;
1284
+ return this.uniforms.get("scale")?.value;
1307
1285
  }
1308
1286
  set scale(t) {
1309
1287
  this.uniforms.get("scale").value = t;
@@ -1317,28 +1295,28 @@ const go = /* @__PURE__ */ c({
1317
1295
  lensF: {},
1318
1296
  scale: {}
1319
1297
  },
1320
- setup(i, { expose: t }) {
1321
- const e = i, o = F(
1322
- () => Array.isArray(e.lensS) ? new f(...e.lensS) : e.lensS
1323
- ), s = F(
1324
- () => Array.isArray(e.lensF) ? new f(...e.lensF) : e.lensF
1325
- ), { pass: a, effect: r } = h(
1326
- () => 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({
1327
1305
  ...e,
1328
- lensS: o.value,
1329
- lensF: s.value
1306
+ lensS: s.value,
1307
+ lensF: o.value
1330
1308
  }),
1331
1309
  e
1332
1310
  );
1333
- return t({ pass: a, effect: r }), v(
1311
+ return t({ pass: a, effect: i }), p(
1334
1312
  [
1335
1313
  [() => e.blendFunction, "blendMode.blendFunction"],
1336
- [() => o.value, "lensS"],
1337
- [() => s.value, "lensF"],
1314
+ [() => s.value, "lensS"],
1315
+ [() => o.value, "lensF"],
1338
1316
  [() => e.scale, "scale"]
1339
1317
  ],
1340
- r,
1341
- () => new ze()
1318
+ i,
1319
+ () => new Ge()
1342
1320
  ), () => {
1343
1321
  };
1344
1322
  }
@@ -1349,20 +1327,20 @@ const go = /* @__PURE__ */ c({
1349
1327
  brightness: {},
1350
1328
  contrast: {}
1351
1329
  },
1352
- setup(i, { expose: t }) {
1353
- const e = i, { pass: o, effect: s } = h(() => new Pe(e), e);
1354
- 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(
1355
1333
  [
1356
1334
  [() => e.blendFunction, "blendMode.blendFunction"],
1357
1335
  [() => e.brightness, "brightness"],
1358
1336
  [() => e.contrast, "contrast"]
1359
1337
  ],
1360
- s,
1361
- () => new Pe()
1338
+ o,
1339
+ () => new Fe()
1362
1340
  ), () => {
1363
1341
  };
1364
1342
  }
1365
- }), ne = {
1343
+ }), ce = {
1366
1344
  OFF: 0,
1367
1345
  EDGES: 1,
1368
1346
  WEIGHTS: 2
@@ -1376,56 +1354,56 @@ const go = /* @__PURE__ */ c({
1376
1354
  predicationMode: {},
1377
1355
  debug: {}
1378
1356
  },
1379
- setup(i, { expose: t }) {
1380
- const e = i, { pass: o, effect: s } = h(() => new se(e), e), { camera: a } = C(), r = Q(Z);
1381
- t({ pass: o, effect: s });
1382
- const n = new se();
1383
- 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(
1384
1362
  [
1385
1363
  [() => Number(e.blendFunction), "blendMode.blendFunction"],
1386
1364
  [() => Number(e.predicationMode), "edgeDetectionMaterial.predicationMode"],
1387
1365
  [() => Number(e.edgeDetectionMode), "edgeDetectionMaterial.edgeDetectionMode"]
1388
1366
  ],
1389
- s,
1390
- () => new se()
1391
- ), g(
1392
- [s, () => e.opacity],
1367
+ o,
1368
+ () => new re()
1369
+ ), m(
1370
+ [o, () => e.opacity],
1393
1371
  () => {
1394
- s.value && (e.opacity !== void 0 ? s.value.blendMode.setOpacity(e.opacity) : s.value.blendMode.setOpacity(n.blendMode.getOpacity()));
1372
+ o.value && (e.opacity !== void 0 ? o.value.blendMode.setOpacity(e.opacity) : o.value.blendMode.setOpacity(n.blendMode.getOpacity()));
1395
1373
  },
1396
1374
  { immediate: !0 }
1397
- ), g(
1398
- [s, () => e.preset],
1375
+ ), m(
1376
+ [o, () => e.preset],
1399
1377
  () => {
1400
- s.value && s.value.applyPreset(Number(e.preset));
1378
+ o.value && o.value.applyPreset(Number(e.preset));
1401
1379
  }
1402
1380
  );
1403
- let u = null, l = null;
1404
- const d = (m) => {
1405
- if (!s.value)
1406
- return null;
1407
- const p = m === "edges" ? s.value.edgesTexture : s.value.weightsTexture, w = new Xe(a.value, s.value, new Y({ texture: p }));
1408
- return w.renderToScreen = !1, w.enabled = !1, w.fullscreenMaterial.encodeOutput = !1, w;
1409
- }, x = (m) => {
1410
- m === "edges" && !u ? u = d("edges") : m === "weights" && !l && (l = d("weights"));
1411
- }, b = (m, p) => {
1412
- !m || !(r != null && r.value) || m.enabled !== p && (m.enabled = p, m.renderToScreen = p, p && !(r != null && r.value.passes.includes(m)) ? r == null || r.value.addPass(m) : !p && (r != null && r.value.passes.includes(m)) && (r == null || r.value.removePass(m), m.dispose()));
1413
- }, A = (m) => {
1381
+ let l = null, u = null;
1382
+ const h = (g) => {
1414
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)
1415
1393
  return;
1416
- const p = m === ne.OFF, w = m === ne.EDGES, _ = m === ne.WEIGHTS;
1417
- o.value.enabled = p, o.value.renderToScreen = p, w && x("edges"), _ && x("weights"), b(u, w), b(l, _), w || (u = null), _ || (l = 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);
1418
1396
  };
1419
- return g(
1397
+ return m(
1420
1398
  () => e.debug,
1421
1399
  () => {
1422
- !o.value || e.debug === void 0 || A(e.debug);
1400
+ !s.value || e.debug === void 0 || U(e.debug);
1423
1401
  },
1424
1402
  { immediate: !0 }
1425
1403
  ), () => {
1426
1404
  };
1427
1405
  }
1428
- }), wo = /* @__PURE__ */ c({
1406
+ }), So = /* @__PURE__ */ c({
1429
1407
  __name: "FXAAPmndrs",
1430
1408
  props: {
1431
1409
  blendFunction: {},
@@ -1435,9 +1413,9 @@ const go = /* @__PURE__ */ c({
1435
1413
  maxEdgeThreshold: {},
1436
1414
  subpixelQuality: {}
1437
1415
  },
1438
- setup(i, { expose: t }) {
1439
- const e = i, { pass: o, effect: s } = h(() => new ae(e), e);
1440
- 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(
1441
1419
  [
1442
1420
  [() => e.blendFunction, "blendMode.blendFunction"],
1443
1421
  [() => e.samples, "samples"],
@@ -1445,51 +1423,49 @@ const go = /* @__PURE__ */ c({
1445
1423
  [() => e.maxEdgeThreshold, "maxEdgeThreshold"],
1446
1424
  [() => e.subpixelQuality, "subpixelQuality"]
1447
1425
  ],
1448
- s,
1449
- () => new ae()
1450
- ), g(
1451
- [s, () => e.opacity],
1426
+ o,
1427
+ () => new ie()
1428
+ ), m(
1429
+ [o, () => e.opacity],
1452
1430
  () => {
1453
- var a, r;
1454
- if (s.value)
1431
+ if (o.value)
1455
1432
  if (e.opacity !== void 0)
1456
- (a = s.value) == null || a.blendMode.setOpacity(e.opacity);
1433
+ o.value?.blendMode.setOpacity(e.opacity);
1457
1434
  else {
1458
- const n = new ae();
1459
- (r = s.value) == null || r.blendMode.setOpacity(n.blendMode.getOpacity()), n.dispose();
1435
+ const a = new ie();
1436
+ o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
1460
1437
  }
1461
1438
  },
1462
1439
  { immediate: !0 }
1463
1440
  ), () => {
1464
1441
  };
1465
1442
  }
1466
- }), So = /* @__PURE__ */ c({
1443
+ }), wo = /* @__PURE__ */ c({
1467
1444
  __name: "TexturePmndrs",
1468
1445
  props: {
1469
1446
  blendFunction: {},
1470
1447
  texture: {},
1471
1448
  opacity: {}
1472
1449
  },
1473
- setup(i, { expose: t }) {
1474
- const e = i, { pass: o, effect: s } = h(() => new Y(e), e);
1450
+ setup(r, { expose: t }) {
1451
+ const e = r, { pass: s, effect: o } = f(() => new Y(e), e);
1475
1452
  return t({
1476
- pass: o,
1477
- effect: s
1478
- }), v(
1453
+ pass: s,
1454
+ effect: o
1455
+ }), p(
1479
1456
  [
1480
1457
  [() => e.blendFunction, "blendMode.blendFunction"]
1481
1458
  ],
1482
- s,
1459
+ o,
1483
1460
  () => new Y()
1484
- ), g(
1461
+ ), m(
1485
1462
  [() => e.opacity],
1486
1463
  () => {
1487
- var a, r;
1488
1464
  if (e.opacity !== void 0)
1489
- (a = s.value) == null || a.blendMode.setOpacity(e.opacity);
1465
+ o.value?.blendMode.setOpacity(e.opacity);
1490
1466
  else {
1491
- const n = new Y();
1492
- (r = s.value) == null || r.blendMode.setOpacity(n.blendMode.getOpacity()), n.dispose();
1467
+ const a = new Y();
1468
+ o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
1493
1469
  }
1494
1470
  },
1495
1471
  {
@@ -1509,55 +1485,55 @@ const go = /* @__PURE__ */ c({
1509
1485
  useSceneColor: { type: Boolean },
1510
1486
  asciiTexture: {}
1511
1487
  },
1512
- setup(i, { expose: t }) {
1513
- const e = i, o = new re(), { asciiTexture: s, ...a } = e, { pass: r, effect: n } = h(() => new re(a), e);
1514
- return t({ pass: r, effect: n }), z(() => {
1515
- o.dispose();
1516
- }), 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(
1517
1493
  [
1518
1494
  [() => e.blendFunction, "blendMode.blendFunction"],
1519
1495
  [() => e.cellSize, "cellSize"],
1520
1496
  [() => e.inverted, "inverted"]
1521
1497
  ],
1522
1498
  n,
1523
- () => new re()
1524
- ), g(
1499
+ () => new ne()
1500
+ ), m(
1525
1501
  [n, () => e.useSceneColor],
1526
1502
  () => {
1527
- n.value && (e.useSceneColor ? n.value.color = null : n.value.color = e.color ?? o.color);
1503
+ n.value && (e.useSceneColor ? n.value.color = null : n.value.color = e.color ?? s.color);
1528
1504
  },
1529
1505
  { immediate: !0 }
1530
- ), g(
1506
+ ), m(
1531
1507
  [n, () => e.opacity],
1532
1508
  () => {
1533
- n.value && n.value.blendMode.setOpacity(e.opacity ?? o.blendMode.getOpacity());
1509
+ n.value && n.value.blendMode.setOpacity(e.opacity ?? s.blendMode.getOpacity());
1534
1510
  },
1535
1511
  { immediate: !0 }
1536
- ), g(
1512
+ ), m(
1537
1513
  [n, () => e.color],
1538
1514
  () => {
1539
1515
  n.value && (e.useSceneColor || (n.value.color = e.color ?? null));
1540
1516
  },
1541
1517
  { immediate: !0 }
1542
- ), g(
1518
+ ), m(
1543
1519
  [n, () => e.asciiTexture],
1544
1520
  () => {
1545
1521
  if (!n.value)
1546
1522
  return;
1547
- const u = e.asciiTexture ? new tt(e.asciiTexture) : o.asciiTexture;
1548
- n.value.asciiTexture = u;
1523
+ const l = e.asciiTexture ? new st(e.asciiTexture) : s.asciiTexture;
1524
+ n.value.asciiTexture = l;
1549
1525
  },
1550
1526
  { immediate: !0 }
1551
- ), g(
1527
+ ), m(
1552
1528
  [n, () => e.blendFunction],
1553
1529
  () => {
1554
- n.value && (n.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));
1555
1531
  },
1556
1532
  { immediate: !0 }
1557
1533
  ), () => {
1558
1534
  };
1559
1535
  }
1560
- }), qe = {
1536
+ }), k = {
1561
1537
  name: "CopyShader",
1562
1538
  uniforms: {
1563
1539
  tDiffuse: { value: null },
@@ -1595,35 +1571,82 @@ const go = /* @__PURE__ */ c({
1595
1571
  }`
1596
1572
  )
1597
1573
  };
1598
- class P {
1574
+ class E {
1575
+ /**
1576
+ * Constructs a new pass.
1577
+ */
1599
1578
  constructor() {
1600
1579
  this.isPass = !0, this.enabled = !0, this.needsSwap = !0, this.clear = !1, this.renderToScreen = !1;
1601
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
+ */
1602
1588
  setSize() {
1603
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
+ */
1604
1602
  render() {
1605
1603
  console.error("THREE.Pass: .render() must be implemented in derived pass.");
1606
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
+ */
1607
1611
  dispose() {
1608
1612
  }
1609
1613
  }
1610
- const Pt = new st(-1, 1, 1, -1, 0, 1);
1611
- class Dt extends at {
1614
+ const Lt = new rt(-1, 1, 1, -1, 0, 1);
1615
+ class Ft extends it {
1612
1616
  constructor() {
1613
- 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));
1614
1618
  }
1615
1619
  }
1616
- const Lt = new Dt();
1617
- 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
+ */
1618
1627
  constructor(t) {
1619
- this._mesh = new je(Lt, t);
1628
+ this._mesh = new Ye(Ot, t);
1620
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
+ */
1621
1634
  dispose() {
1622
1635
  this._mesh.geometry.dispose();
1623
1636
  }
1637
+ /**
1638
+ * Renders the full screen quad.
1639
+ *
1640
+ * @param {WebGLRenderer} renderer - The renderer.
1641
+ */
1624
1642
  render(t) {
1625
- t.render(this._mesh, Pt);
1643
+ t.render(this._mesh, Lt);
1626
1644
  }
1645
+ /**
1646
+ * The quad's material.
1647
+ *
1648
+ * @type {?Material}
1649
+ */
1627
1650
  get material() {
1628
1651
  return this._mesh.material;
1629
1652
  }
@@ -1631,176 +1654,308 @@ class R {
1631
1654
  this._mesh.material = t;
1632
1655
  }
1633
1656
  }
1634
- class Ft extends P {
1635
- constructor(t, e) {
1636
- super(), this.textureID = e !== void 0 ? e : "tDiffuse", t instanceof M ? (this.uniforms = t.uniforms, this.material = t) : t && (this.uniforms = D.clone(t.uniforms), this.material = new M({
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({
1637
1668
  name: t.name !== void 0 ? t.name : "unspecified",
1638
1669
  defines: Object.assign({}, t.defines),
1639
1670
  uniforms: this.uniforms,
1640
1671
  vertexShader: t.vertexShader,
1641
1672
  fragmentShader: t.fragmentShader
1642
- })), this.fsQuad = new R(this.material);
1673
+ })), this._fsQuad = new O(this.material);
1643
1674
  }
1644
- render(t, e, o) {
1645
- 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));
1646
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
+ */
1647
1693
  dispose() {
1648
- this.material.dispose(), this.fsQuad.dispose();
1694
+ this.material.dispose(), this._fsQuad.dispose();
1649
1695
  }
1650
1696
  }
1651
- class We extends P {
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
+ */
1652
1704
  constructor(t, e) {
1653
1705
  super(), this.scene = t, this.camera = e, this.clear = !0, this.needsSwap = !1, this.inverse = !1;
1654
1706
  }
1655
- render(t, e, o) {
1656
- 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;
1657
1720
  a.buffers.color.setMask(!1), a.buffers.depth.setMask(!1), a.buffers.color.setLocked(!0), a.buffers.depth.setLocked(!0);
1658
- let r, n;
1659
- this.inverse ? (r = 0, n = 1) : (r = 1, n = 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(n), 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);
1660
1723
  }
1661
1724
  }
1662
- class Ot extends P {
1725
+ class Rt extends E {
1726
+ /**
1727
+ * Constructs a new clear mask pass.
1728
+ */
1663
1729
  constructor() {
1664
1730
  super(), this.needsSwap = !1;
1665
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
+ */
1666
1743
  render(t) {
1667
1744
  t.state.buffers.stencil.setLocked(!1), t.state.buffers.stencil.setTest(!1);
1668
1745
  }
1669
1746
  }
1670
- class Rt {
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
+ */
1671
1756
  constructor(t, e) {
1672
1757
  if (this.renderer = t, this._pixelRatio = t.getPixelRatio(), e === void 0) {
1673
- const o = t.getSize(new f());
1674
- this._width = o.width, this._height = o.height, e = new L(this._width * this._pixelRatio, this._height * this._pixelRatio, { type: E }), 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";
1675
1760
  } else
1676
1761
  this._width = e.width, this._height = e.height;
1677
- 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 it();
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();
1678
1763
  }
1764
+ /**
1765
+ * Swaps the internal read/write buffers.
1766
+ */
1679
1767
  swapBuffers() {
1680
1768
  const t = this.readBuffer;
1681
1769
  this.readBuffer = this.writeBuffer, this.writeBuffer = t;
1682
1770
  }
1771
+ /**
1772
+ * Adds the given pass to the pass chain.
1773
+ *
1774
+ * @param {Pass} pass - The pass to add.
1775
+ */
1683
1776
  addPass(t) {
1684
1777
  this.passes.push(t), t.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
1685
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
+ */
1686
1785
  insertPass(t, e) {
1687
1786
  this.passes.splice(e, 0, t), t.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
1688
1787
  }
1788
+ /**
1789
+ * Removes the given pass from the pass chain.
1790
+ *
1791
+ * @param {Pass} pass - The pass to remove.
1792
+ */
1689
1793
  removePass(t) {
1690
1794
  const e = this.passes.indexOf(t);
1691
1795
  e !== -1 && this.passes.splice(e, 1);
1692
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
+ */
1693
1803
  isLastEnabledPass(t) {
1694
1804
  for (let e = t + 1; e < this.passes.length; e++)
1695
1805
  if (this.passes[e].enabled)
1696
1806
  return !1;
1697
1807
  return !0;
1698
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
+ */
1699
1815
  render(t) {
1700
1816
  t === void 0 && (t = this.clock.getDelta());
1701
1817
  const e = this.renderer.getRenderTarget();
1702
- let o = !1;
1703
- for (let s = 0, a = this.passes.length; s < a; s++) {
1704
- const r = this.passes[s];
1705
- if (r.enabled !== !1) {
1706
- if (r.renderToScreen = this.renderToScreen && this.isLastEnabledPass(s), r.render(this.renderer, this.writeBuffer, this.readBuffer, t, o), r.needsSwap) {
1707
- if (o) {
1708
- const n = this.renderer.getContext(), u = this.renderer.state.buffers.stencil;
1709
- u.setFunc(n.NOTEQUAL, 1, 4294967295), this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, t), u.setFunc(n.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);
1710
1826
  }
1711
1827
  this.swapBuffers();
1712
1828
  }
1713
- 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));
1714
1830
  }
1715
1831
  }
1716
1832
  this.renderer.setRenderTarget(e);
1717
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
+ */
1718
1840
  reset(t) {
1719
1841
  if (t === void 0) {
1720
- const e = this.renderer.getSize(new f());
1842
+ const e = this.renderer.getSize(new d());
1721
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);
1722
1844
  }
1723
1845
  this.renderTarget1.dispose(), this.renderTarget2.dispose(), this.renderTarget1 = t, this.renderTarget2 = t.clone(), this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2;
1724
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
+ */
1725
1854
  setSize(t, e) {
1726
1855
  this._width = t, this._height = e;
1727
- const o = this._width * this._pixelRatio, s = this._height * this._pixelRatio;
1728
- 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);
1729
1858
  for (let a = 0; a < this.passes.length; a++)
1730
- this.passes[a].setSize(o, s);
1859
+ this.passes[a].setSize(s, o);
1731
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
+ */
1732
1867
  setPixelRatio(t) {
1733
1868
  this._pixelRatio = t, this.setSize(this._width, this._height);
1734
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
+ */
1735
1874
  dispose() {
1736
1875
  this.renderTarget1.dispose(), this.renderTarget2.dispose(), this.copyPass.dispose();
1737
1876
  }
1738
1877
  }
1739
- class Bt extends P {
1740
- constructor(t, e, o = null, s = null, a = null) {
1741
- 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 q();
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();
1742
1891
  }
1743
- render(t, e, o) {
1744
- 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;
1745
1905
  t.autoClear = !1;
1746
- let a, r;
1747
- 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;
1748
1908
  }
1749
1909
  }
1750
- const Qe = Symbol("effectComposerThree"), yo = /* @__PURE__ */ c({
1910
+ const Ke = Symbol("effectComposerThree"), yo = /* @__PURE__ */ c({
1751
1911
  __name: "EffectComposer",
1752
1912
  props: {
1753
1913
  enabled: { type: Boolean, default: !0 },
1754
1914
  withoutRenderPass: { type: Boolean }
1755
1915
  },
1756
- setup(i, { expose: t }) {
1757
- const e = i, o = U(null);
1758
- He(Qe, o), t({ composer: o });
1759
- const { renderer: s, sizes: a, scene: r, camera: n } = G();
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();
1760
1920
  S(() => {
1761
- var d;
1762
- (d = o.value) == null || d.dispose(), o.value = new Rt(s.instance);
1921
+ s.value?.dispose(), s.value = new Nt(o.instance);
1763
1922
  }), S(() => {
1764
- var b;
1765
- const { width: d, height: x } = a;
1766
- x.value && d.value && ((b = o.value) == null || b.setSize(d.value, x.value));
1923
+ const { width: h, height: x } = a;
1924
+ x.value && h.value && s.value?.setSize(h.value, x.value);
1767
1925
  });
1768
- const { pixelRatio: l } = Ye();
1926
+ const { pixelRatio: u } = qe();
1769
1927
  return S(() => {
1770
- var d;
1771
- (d = o.value) == null || d.setPixelRatio(l.value);
1928
+ s.value?.setPixelRatio(u.value);
1772
1929
  }), e.withoutRenderPass || S(() => {
1773
- n.activeCamera.value && r.value && o.value && o.value.addPass(new Bt(r.value, n.activeCamera.value));
1774
- }), s.replaceRenderFunction((d) => {
1775
- o.value && e.enabled && (o.value.render(), d());
1776
- }), z(() => {
1777
- var d;
1778
- (d = o.value) == null || d.dispose();
1779
- }), (d, x) => Ie(d.$slots, "default");
1780
- }
1781
- }), W = (i, t, e) => {
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) => {
1782
1938
  if (!t && e)
1783
1939
  throw new Error("passDependencies is required when dependencyFieldsTriggeringRecreation is provided");
1784
- const o = Q(Qe), s = U(i()), { sizes: a, invalidate: r } = C();
1785
- t && g(t, () => r());
1940
+ const s = K(Ke), o = W(r()), { sizes: a, invalidate: i } = T();
1941
+ t && m(t, () => i());
1786
1942
  const n = () => {
1787
- var l;
1788
- (l = o == null ? void 0 : o.value) == null || l.removePass(s.value), s.value.dispose();
1789
- }, u = S(() => {
1790
- !(o != null && o.value) || !a.height.value || !a.width.value || (o.value.addPass(s.value), ue(() => u()));
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()));
1791
1946
  });
1792
- return e && g(
1793
- () => e.map((l) => t == null ? void 0 : t[l]),
1947
+ return e && m(
1948
+ () => e.map((u) => t?.[u]),
1794
1949
  () => {
1795
- if (!(o != null && o.value))
1950
+ if (!s?.value)
1796
1951
  return;
1797
- const l = o.value.passes.findIndex((d) => d === s.value);
1798
- ~l && (n(), s.value = i(), o.value.insertPass(s.value, l));
1952
+ const u = s.value.passes.findIndex((h) => h === o.value);
1953
+ ~u && (n(), o.value = r(), s.value.insertPass(o.value, u));
1799
1954
  }
1800
- ), z(() => {
1955
+ ), N(() => {
1801
1956
  n();
1802
- }), { pass: s };
1803
- }, Nt = {
1957
+ }), { pass: o };
1958
+ }, ue = {
1804
1959
  uniforms: {
1805
1960
  tDiffuse: { value: null },
1806
1961
  //diffuse texture
@@ -1895,33 +2050,53 @@ const Qe = Symbol("effectComposerThree"), yo = /* @__PURE__ */ c({
1895
2050
  }`
1896
2051
  )
1897
2052
  };
1898
- class Ue extends P {
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
+ */
1899
2060
  constructor(t = 64) {
1900
- super();
1901
- const e = Nt;
1902
- this.uniforms = D.clone(e.uniforms), this.heightMap = this.generateHeightmap(t), this.uniforms.tDisp.value = this.heightMap, this.material = new M({
2061
+ super(), this.uniforms = P.clone(ue.uniforms), this.material = new y({
1903
2062
  uniforms: this.uniforms,
1904
- vertexShader: e.vertexShader,
1905
- fragmentShader: e.fragmentShader
1906
- }), 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();
2066
+ }
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));
1907
2080
  }
1908
- render(t, e, o) {
1909
- 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 = y.randFloat(-Math.PI, Math.PI), this.uniforms.seed_x.value = y.randFloat(-1, 1), this.uniforms.seed_y.value = y.randFloat(-1, 1), this.uniforms.distortion_x.value = y.randFloat(0, 1), this.uniforms.distortion_y.value = y.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 = y.randFloat(-Math.PI, Math.PI), this.uniforms.distortion_x.value = y.randFloat(0, 1), this.uniforms.distortion_y.value = y.randFloat(0, 1), this.uniforms.seed_x.value = y.randFloat(-0.3, 0.3), this.uniforms.seed_y.value = y.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));
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();
1910
2087
  }
1911
- generateTrigger() {
1912
- this.randX = y.randInt(120, 240);
2088
+ // internals
2089
+ _generateTrigger() {
2090
+ this._randX = A.randInt(120, 240);
1913
2091
  }
1914
- generateHeightmap(t) {
1915
- const e = new Float32Array(t * t), o = t * t;
1916
- for (let a = 0; a < o; a++) {
1917
- const r = y.randFloat(0, 1);
1918
- e[a] = r;
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;
1919
2097
  }
1920
- const s = new nt(e, t, t, lt, ut);
1921
- return s.needsUpdate = !0, s;
1922
- }
1923
- dispose() {
1924
- this.material.dispose(), this.heightMap.dispose(), this.fsQuad.dispose();
2098
+ const o = new ct(e, t, t, ut, dt);
2099
+ return o.needsUpdate = !0, o;
1925
2100
  }
1926
2101
  }
1927
2102
  const Mo = /* @__PURE__ */ c({
@@ -1930,18 +2105,18 @@ const Mo = /* @__PURE__ */ c({
1930
2105
  dtSize: {},
1931
2106
  goWild: { type: Boolean }
1932
2107
  },
1933
- setup(i, { expose: t }) {
1934
- const e = i, { pass: o } = W(() => new Ue(e.dtSize), e, ["dtSize"]), { invalidate: s } = C();
1935
- t({ pass: o });
1936
- const { onBeforeRender: a } = ce();
1937
- return a(() => s()), 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(
1938
2113
  [[() => e.goWild, "goWild"]],
1939
- o,
1940
- () => new Ue()
2114
+ s,
2115
+ () => new Ie()
1941
2116
  ), () => {
1942
2117
  };
1943
2118
  }
1944
- }), k = {
2119
+ }), q = {
1945
2120
  uniforms: {
1946
2121
  tDiffuse: { value: null },
1947
2122
  shape: { value: 1 },
@@ -2244,25 +2419,51 @@ const Mo = /* @__PURE__ */ c({
2244
2419
  }`
2245
2420
  )
2246
2421
  };
2247
- class zt extends P {
2248
- constructor(t, e, o) {
2249
- super(), this.uniforms = D.clone(k.uniforms), this.material = new M({
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({
2250
2430
  uniforms: this.uniforms,
2251
- fragmentShader: k.fragmentShader,
2252
- vertexShader: k.vertexShader
2253
- }), this.uniforms.width.value = t, this.uniforms.height.value = e;
2254
- for (const s in o)
2255
- o.hasOwnProperty(s) && this.uniforms.hasOwnProperty(s) && (this.uniforms[s].value = o[s]);
2256
- 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);
2257
2437
  }
2258
- render(t, e, o) {
2259
- 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));
2260
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
+ */
2261
2458
  setSize(t, e) {
2262
2459
  this.uniforms.width.value = t, this.uniforms.height.value = e;
2263
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
+ */
2264
2465
  dispose() {
2265
- this.material.dispose(), this.fsQuad.dispose();
2466
+ this.material.dispose(), this._fsQuad.dispose();
2266
2467
  }
2267
2468
  }
2268
2469
  const To = /* @__PURE__ */ c({
@@ -2278,61 +2479,85 @@ const To = /* @__PURE__ */ c({
2278
2479
  greyscale: { type: Boolean },
2279
2480
  blendingMode: {}
2280
2481
  },
2281
- setup(i, { expose: t }) {
2282
- const e = i, { sizes: o } = G(), s = F(
2482
+ setup(r, { expose: t }) {
2483
+ const e = r, { sizes: s } = G(), o = L(
2283
2484
  () => Object.fromEntries(
2284
- Object.entries(e).filter(([r, n]) => n !== void 0)
2485
+ Object.entries(e).filter(([i, n]) => n !== void 0)
2285
2486
  )
2286
- ), { pass: a } = W(() => new zt(
2287
- o.width.value,
2288
- o.height.value,
2289
- s.value
2290
- ), e);
2487
+ ), { pass: a } = z(() => new Ut(o.value), e);
2291
2488
  return t({ pass: a }), S(() => {
2292
- a.value.setSize(o.width.value, o.height.value);
2489
+ a.value.setSize(s.width.value, s.height.value);
2293
2490
  }), S(() => {
2294
- Object.entries(e).forEach(([r, n]) => {
2295
- r in a.value.uniforms && (a.value.uniforms[r].value = n ?? k.uniforms[r].value);
2491
+ Object.entries(e).forEach(([i, n]) => {
2492
+ i in a.value.uniforms && (a.value.uniforms[i].value = n ?? q.uniforms[i].value);
2296
2493
  });
2297
2494
  }), () => {
2298
2495
  };
2299
2496
  }
2300
2497
  });
2301
- class Ge extends P {
2302
- constructor(t, e, o, s = {}) {
2303
- 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 L(), this.beautyRenderTarget.texture.minFilter = B, this.beautyRenderTarget.texture.magFilter = B, this.beautyRenderTarget.texture.type = E, this.beautyRenderTarget.depthTexture = new dt(), this.normalRenderTarget = new L(), this.normalRenderTarget.texture.minFilter = B, this.normalRenderTarget.texture.magFilter = B, this.normalRenderTarget.texture.type = E;
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);
2304
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
+ */
2305
2514
  dispose() {
2306
- 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();
2307
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
+ */
2308
2523
  setSize(t, e) {
2309
- this.resolution.set(t, e), this.renderResolution.set(t / this.pixelSize | 0, e / this.pixelSize | 0);
2310
- const { x: o, y: s } = this.renderResolution;
2311
- 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);
2312
2527
  }
2528
+ /**
2529
+ * Sets the effect's pixel size.
2530
+ *
2531
+ * @param {number} pixelSize - The pixel size to set.
2532
+ */
2313
2533
  setPixelSize(t) {
2314
- this.pixelSize = t, this.setSize(this.resolution.x, this.resolution.y);
2534
+ this.pixelSize = t, this.setSize(this._resolution.x, this._resolution.y);
2315
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
+ */
2316
2547
  render(t, e) {
2317
- const o = this.fsQuad.material.uniforms;
2318
- o.normalEdgeStrength.value = this.normalEdgeStrength, o.depthEdgeStrength.value = this.depthEdgeStrength, t.setRenderTarget(this.beautyRenderTarget), t.render(this.scene, this.camera);
2319
- const s = this.scene.overrideMaterial;
2320
- 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);
2321
- }
2322
- createPixelatedMaterial() {
2323
- return new M({
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({
2324
2556
  uniforms: {
2325
2557
  tDiffuse: { value: null },
2326
2558
  tDepth: { value: null },
2327
2559
  tNormal: { value: null },
2328
- resolution: {
2329
- value: new ft(
2330
- this.renderResolution.x,
2331
- this.renderResolution.y,
2332
- 1 / this.renderResolution.x,
2333
- 1 / this.renderResolution.y
2334
- )
2335
- },
2560
+ resolution: { value: new pt() },
2336
2561
  normalEdgeStrength: { value: 0 },
2337
2562
  depthEdgeStrength: { value: 0 }
2338
2563
  },
@@ -2452,21 +2677,21 @@ const Co = /* @__PURE__ */ c({
2452
2677
  depthEdgeStrength: {},
2453
2678
  normalEdgeStrength: {}
2454
2679
  },
2455
- setup(i, { expose: t }) {
2456
- const e = i, { scene: o, camera: s } = C(), { pass: a } = W(() => new Ge(e.pixelSize, o.value, s.value), e);
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);
2457
2682
  return t({ pass: a }), S(() => {
2458
2683
  a.value.setPixelSize(e.pixelSize);
2459
- }), v(
2684
+ }), p(
2460
2685
  [
2461
2686
  [() => e.depthEdgeStrength, "depthEdgeStrength"],
2462
2687
  [() => e.normalEdgeStrength, "normalEdgeStrength"]
2463
2688
  ],
2464
2689
  a,
2465
- () => new Ge(1, o.value, s.value)
2690
+ () => new Xe(1, s.value, o.value)
2466
2691
  ), () => {
2467
2692
  };
2468
2693
  }
2469
- }), Wt = {
2694
+ }), j = {
2470
2695
  name: "OutputShader",
2471
2696
  uniforms: {
2472
2697
  tDiffuse: { value: null },
@@ -2552,38 +2777,54 @@ const Co = /* @__PURE__ */ c({
2552
2777
  }`
2553
2778
  )
2554
2779
  };
2555
- class Ut extends P {
2780
+ class Wt extends E {
2781
+ /**
2782
+ * Constructs a new output pass.
2783
+ */
2556
2784
  constructor() {
2557
- super();
2558
- const t = Wt;
2559
- this.uniforms = D.clone(t.uniforms), this.material = new ht({
2560
- name: t.name,
2785
+ super(), this.uniforms = P.clone(j.uniforms), this.material = new mt({
2786
+ name: j.name,
2561
2787
  uniforms: this.uniforms,
2562
- vertexShader: t.vertexShader,
2563
- fragmentShader: t.fragmentShader
2564
- }), 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;
2565
2791
  }
2566
- render(t, e, o) {
2567
- 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 === wt ? this.material.defines.AGX_TONE_MAPPING = "" : this._toneMapping === St ? 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));
2568
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
+ */
2569
2810
  dispose() {
2570
- this.material.dispose(), this.fsQuad.dispose();
2811
+ this.material.dispose(), this._fsQuad.dispose();
2571
2812
  }
2572
2813
  }
2573
2814
  const Eo = /* @__PURE__ */ c({
2574
2815
  __name: "Output",
2575
- setup(i, { expose: t }) {
2576
- const { pass: e } = W(() => new Ut());
2816
+ setup(r, { expose: t }) {
2817
+ const { pass: e } = z(() => new Wt());
2577
2818
  return t({ pass: e }), () => {
2578
2819
  };
2579
2820
  }
2580
- }), j = {
2821
+ }), V = {
2581
2822
  defines: {
2582
2823
  SMAA_THRESHOLD: "0.1"
2583
2824
  },
2584
2825
  uniforms: {
2585
2826
  tDiffuse: { value: null },
2586
- resolution: { value: new f(1 / 1024, 1 / 512) }
2827
+ resolution: { value: new d(1 / 1024, 1 / 512) }
2587
2828
  },
2588
2829
  vertexShader: (
2589
2830
  /* glsl */
@@ -2677,7 +2918,7 @@ const Eo = /* @__PURE__ */ c({
2677
2918
 
2678
2919
  }`
2679
2920
  )
2680
- }, V = {
2921
+ }, _ = {
2681
2922
  defines: {
2682
2923
  SMAA_MAX_SEARCH_STEPS: "8",
2683
2924
  SMAA_AREATEX_MAX_DISTANCE: "16",
@@ -2688,7 +2929,7 @@ const Eo = /* @__PURE__ */ c({
2688
2929
  tDiffuse: { value: null },
2689
2930
  tArea: { value: null },
2690
2931
  tSearch: { value: null },
2691
- resolution: { value: new f(1 / 1024, 1 / 512) }
2932
+ resolution: { value: new d(1 / 1024, 1 / 512) }
2692
2933
  },
2693
2934
  vertexShader: (
2694
2935
  /* glsl */
@@ -2926,11 +3167,11 @@ const Eo = /* @__PURE__ */ c({
2926
3167
 
2927
3168
  }`
2928
3169
  )
2929
- }, le = {
3170
+ }, de = {
2930
3171
  uniforms: {
2931
3172
  tDiffuse: { value: null },
2932
3173
  tColor: { value: null },
2933
- resolution: { value: new f(1 / 1024, 1 / 512) }
3174
+ resolution: { value: new d(1 / 1024, 1 / 512) }
2934
3175
  },
2935
3176
  vertexShader: (
2936
3177
  /* glsl */
@@ -3015,53 +3256,78 @@ const Eo = /* @__PURE__ */ c({
3015
3256
  }`
3016
3257
  )
3017
3258
  };
3018
- class Gt extends P {
3019
- constructor(t, e) {
3020
- super(), this.edgesRT = new L(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, {
3021
3265
  depthBuffer: !1,
3022
- type: E
3023
- }), this.edgesRT.texture.name = "SMAAPass.edges", this.weightsRT = new L(t, e, {
3266
+ type: C
3267
+ }), this._edgesRT.texture.name = "SMAAPass.edges", this._weightsRT = new D(1, 1, {
3024
3268
  depthBuffer: !1,
3025
- type: E
3026
- }), this.weightsRT.texture.name = "SMAAPass.weights";
3027
- const o = this, s = new Image();
3028
- s.src = this.getAreaTexture(), s.onload = function() {
3029
- o.areaTexture.needsUpdate = !0;
3030
- }, 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;
3031
- const a = new Image();
3032
- a.src = this.getSearchTexture(), a.onload = function() {
3033
- o.searchTexture.needsUpdate = !0;
3034
- }, this.searchTexture = new Le(), this.searchTexture.name = "SMAAPass.search", this.searchTexture.image = a, this.searchTexture.magFilter = B, this.searchTexture.minFilter = B, this.searchTexture.generateMipmaps = !1, this.searchTexture.flipY = !1, this.uniformsEdges = D.clone(j.uniforms), this.uniformsEdges.resolution.value.set(1 / t, 1 / e), this.materialEdges = new M({
3035
- defines: Object.assign({}, j.defines),
3036
- uniforms: this.uniformsEdges,
3037
- vertexShader: j.vertexShader,
3038
- fragmentShader: j.fragmentShader
3039
- }), this.uniformsWeights = D.clone(V.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 M({
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({
3040
3279
  defines: Object.assign({}, V.defines),
3041
- uniforms: this.uniformsWeights,
3280
+ uniforms: this._uniformsEdges,
3042
3281
  vertexShader: V.vertexShader,
3043
3282
  fragmentShader: V.fragmentShader
3044
- }), this.uniformsBlend = D.clone(le.uniforms), this.uniformsBlend.resolution.value.set(1 / t, 1 / e), this.uniformsBlend.tDiffuse.value = this.weightsRT.texture, this.materialBlend = new M({
3045
- uniforms: this.uniformsBlend,
3046
- vertexShader: le.vertexShader,
3047
- fragmentShader: le.fragmentShader
3048
- }), this.fsQuad = new R(null);
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);
3049
3293
  }
3050
- render(t, e, o) {
3051
- 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));
3052
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
+ */
3053
3314
  setSize(t, e) {
3054
- 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);
3055
3316
  }
3056
- 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() {
3057
3326
  return "data:image/png;base64,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";
3058
3327
  }
3059
- getSearchTexture() {
3328
+ _getSearchTexture() {
3060
3329
  return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=";
3061
3330
  }
3062
- dispose() {
3063
- this.edgesRT.dispose(), this.weightsRT.dispose(), this.areaTexture.dispose(), this.searchTexture.dispose(), this.materialEdges.dispose(), this.materialWeights.dispose(), this.materialBlend.dispose(), this.fsQuad.dispose();
3064
- }
3065
3331
  }
3066
3332
  const Po = /* @__PURE__ */ c({
3067
3333
  __name: "SMAA",
@@ -3069,19 +3335,19 @@ const Po = /* @__PURE__ */ c({
3069
3335
  width: {},
3070
3336
  height: {}
3071
3337
  },
3072
- setup(i, { expose: t }) {
3073
- const e = i, { sizes: o } = G(), { pixelRatio: s } = Ye(), a = F(() => e.width ?? o.width.value * s.value), r = F(() => e.height ?? o.height.value * s.value), { pass: n } = W(() => new Gt(a.value, r.value), e);
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);
3074
3340
  return t({ pass: n }), S(() => {
3075
- n.value.setSize(a.value, r.value);
3341
+ n.value.setSize(a.value, i.value);
3076
3342
  }), () => {
3077
3343
  };
3078
3344
  }
3079
- }), Ke = {
3345
+ }), Je = {
3080
3346
  uniforms: {
3081
3347
  tDiffuse: { value: null },
3082
3348
  luminosityThreshold: { value: 1 },
3083
3349
  smoothWidth: { value: 1 },
3084
- defaultColor: { value: new q(0) },
3350
+ defaultColor: { value: new Q(0) },
3085
3351
  defaultOpacity: { value: 0 }
3086
3352
  },
3087
3353
  vertexShader: (
@@ -3125,41 +3391,51 @@ const Po = /* @__PURE__ */ c({
3125
3391
  }`
3126
3392
  )
3127
3393
  };
3128
- class N extends P {
3129
- constructor(t, e, o, s) {
3130
- 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 q(0, 0, 0), this.renderTargetsHorizontal = [], this.renderTargetsVertical = [], this.nMips = 5;
3131
- let a = Math.round(this.resolution.x / 2), r = Math.round(this.resolution.y / 2);
3132
- this.renderTargetBright = new L(a, r, { type: E }), this.renderTargetBright.texture.name = "UnrealBloomPass.bright", this.renderTargetBright.texture.generateMipmaps = !1;
3133
- for (let x = 0; x < this.nMips; x++) {
3134
- const b = new L(a, r, { type: E });
3135
- b.texture.name = "UnrealBloomPass.h" + x, b.texture.generateMipmaps = !1, this.renderTargetsHorizontal.push(b);
3136
- const A = new L(a, r, { type: E });
3137
- A.texture.name = "UnrealBloomPass.v" + x, A.texture.generateMipmaps = !1, this.renderTargetsVertical.push(A), 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);
3138
3412
  }
3139
- const n = Ke;
3140
- this.highPassUniforms = D.clone(n.uniforms), this.highPassUniforms.luminosityThreshold.value = s, this.highPassUniforms.smoothWidth.value = 0.01, this.materialHighPassFilter = new M({
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({
3141
3415
  uniforms: this.highPassUniforms,
3142
3416
  vertexShader: n.vertexShader,
3143
3417
  fragmentShader: n.fragmentShader
3144
3418
  }), this.separableBlurMaterials = [];
3145
- const u = [3, 5, 7, 9, 11];
3146
- a = Math.round(this.resolution.x / 2), r = Math.round(this.resolution.y / 2);
3147
- for (let x = 0; x < this.nMips; x++)
3148
- this.separableBlurMaterials.push(this.getSeparableBlurMaterial(u[x])), this.separableBlurMaterials[x].uniforms.invSize.value = new f(1 / a, 1 / r), a = Math.round(a / 2), r = Math.round(r / 2);
3149
- 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;
3150
- const l = [1, 0.8, 0.6, 0.4, 0.2];
3151
- this.compositeMaterial.uniforms.bloomFactors.value = l, this.bloomTintColors = [new O(1, 1, 1), new O(1, 1, 1), new O(1, 1, 1), new O(1, 1, 1), new O(1, 1, 1)], this.compositeMaterial.uniforms.bloomTintColors.value = this.bloomTintColors;
3152
- const d = qe;
3153
- this.copyUniforms = D.clone(d.uniforms), this.blendMaterial = new M({
3419
+ const l = [3, 5, 7, 9, 11];
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({
3154
3426
  uniforms: this.copyUniforms,
3155
- vertexShader: d.vertexShader,
3156
- fragmentShader: d.fragmentShader,
3157
- blending: Mt,
3427
+ vertexShader: k.vertexShader,
3428
+ fragmentShader: k.fragmentShader,
3429
+ blending: Ct,
3158
3430
  depthTest: !1,
3159
3431
  depthWrite: !1,
3160
3432
  transparent: !0
3161
- }), this.enabled = !0, this.needsSwap = !1, this._oldClearColor = new q(), 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);
3162
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
+ */
3163
3439
  dispose() {
3164
3440
  for (let t = 0; t < this.renderTargetsHorizontal.length; t++)
3165
3441
  this.renderTargetsHorizontal[t].dispose();
@@ -3168,36 +3444,54 @@ class N extends P {
3168
3444
  this.renderTargetBright.dispose();
3169
3445
  for (let t = 0; t < this.separableBlurMaterials.length; t++)
3170
3446
  this.separableBlurMaterials[t].dispose();
3171
- 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();
3172
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
+ */
3173
3455
  setSize(t, e) {
3174
- let o = Math.round(t / 2), s = Math.round(e / 2);
3175
- this.renderTargetBright.setSize(o, s);
3456
+ let s = Math.round(t / 2), o = Math.round(e / 2);
3457
+ this.renderTargetBright.setSize(s, o);
3176
3458
  for (let a = 0; a < this.nMips; a++)
3177
- 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);
3178
3460
  }
3179
- render(t, e, o, s, a) {
3180
- t.getClearColor(this._oldClearColor), this.oldClearAlpha = t.getClearAlpha();
3181
- const r = t.autoClear;
3182
- 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);
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);
3183
3476
  let n = this.renderTargetBright;
3184
- for (let u = 0; u < this.nMips; u++)
3185
- this.fsQuad.material = this.separableBlurMaterials[u], this.separableBlurMaterials[u].uniforms.colorTexture.value = n.texture, this.separableBlurMaterials[u].uniforms.direction.value = N.BlurDirectionX, t.setRenderTarget(this.renderTargetsHorizontal[u]), t.clear(), this.fsQuad.render(t), this.separableBlurMaterials[u].uniforms.colorTexture.value = this.renderTargetsHorizontal[u].texture, this.separableBlurMaterials[u].uniforms.direction.value = N.BlurDirectionY, t.setRenderTarget(this.renderTargetsVertical[u]), t.clear(), this.fsQuad.render(t), n = this.renderTargetsVertical[u];
3186
- 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;
3477
+ for (let l = 0; l < this.nMips; l++)
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;
3187
3480
  }
3188
- getSeparableBlurMaterial(t) {
3481
+ // internals
3482
+ _getSeparableBlurMaterial(t) {
3189
3483
  const e = [];
3190
- for (let o = 0; o < t; o++)
3191
- e.push(0.39894 * Math.exp(-0.5 * o * o / (t * t)) / t);
3192
- return new M({
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({
3193
3487
  defines: {
3194
3488
  KERNEL_RADIUS: t
3195
3489
  },
3196
3490
  uniforms: {
3197
3491
  colorTexture: { value: null },
3198
- invSize: { value: new f(0.5, 0.5) },
3492
+ invSize: { value: new d(0.5, 0.5) },
3199
3493
  // inverse texture size
3200
- direction: { value: new f(0.5, 0.5) },
3494
+ direction: { value: new d(0.5, 0.5) },
3201
3495
  gaussianCoefficients: { value: e }
3202
3496
  // precomputed Gaussian coefficients
3203
3497
  },
@@ -3229,8 +3523,8 @@ class N extends P {
3229
3523
  }`
3230
3524
  });
3231
3525
  }
3232
- getCompositeMaterial(t) {
3233
- return new M({
3526
+ _getCompositeMaterial(t) {
3527
+ return new y({
3234
3528
  defines: {
3235
3529
  NUM_MIPS: t
3236
3530
  },
@@ -3276,8 +3570,8 @@ class N extends P {
3276
3570
  });
3277
3571
  }
3278
3572
  }
3279
- N.BlurDirectionX = new f(1, 0);
3280
- N.BlurDirectionY = new f(0, 1);
3573
+ R.BlurDirectionX = new d(1, 0);
3574
+ R.BlurDirectionY = new d(0, 1);
3281
3575
  const Do = /* @__PURE__ */ c({
3282
3576
  __name: "UnrealBloom",
3283
3577
  props: {
@@ -3285,22 +3579,19 @@ const Do = /* @__PURE__ */ c({
3285
3579
  strength: { default: 1 },
3286
3580
  threshold: { default: 0 }
3287
3581
  },
3288
- setup(i, { expose: t }) {
3289
- const e = i, { sizes: o } = G(), { pass: s } = W(() => new N(
3290
- 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),
3291
3585
  e.radius,
3292
3586
  e.strength,
3293
3587
  e.threshold
3294
3588
  ), e);
3295
- return t({ pass: s }), S(() => {
3296
- var a;
3297
- s.value.radius = e.radius ?? ((a = s.value.getCompositeMaterial().uniforms.bloomRadius) == null ? void 0 : a.value) ?? 0.1;
3589
+ return t({ pass: o }), S(() => {
3590
+ o.value.radius = e.radius ?? o.value.getCompositeMaterial().uniforms.bloomRadius?.value ?? 0.1;
3298
3591
  }), S(() => {
3299
- var a;
3300
- s.value.strength = e.strength ?? ((a = s.value.getCompositeMaterial().uniforms.bloomStrength) == null ? void 0 : a.value) ?? 1;
3592
+ o.value.strength = e.strength ?? o.value.getCompositeMaterial().uniforms.bloomStrength?.value ?? 1;
3301
3593
  }), S(() => {
3302
- var a;
3303
- s.value.threshold = e.threshold ?? ((a = Ke.uniforms.luminosityThreshold) == null ? void 0 : a.value) ?? 1;
3594
+ o.value.threshold = e.threshold ?? Je.uniforms.luminosityThreshold?.value ?? 1;
3304
3595
  }), () => {
3305
3596
  };
3306
3597
  }
@@ -3308,20 +3599,20 @@ const Do = /* @__PURE__ */ c({
3308
3599
  export {
3309
3600
  Ao as ASCIIPmndrs,
3310
3601
  $t as BarrelBlurPmndrs,
3311
- kt as BloomPmndrs,
3602
+ Yt as BloomPmndrs,
3312
3603
  xo as BrightnessContrastPmndrs,
3313
3604
  to as ChromaticAberrationPmndrs,
3314
3605
  ro as ColorAveragePmndrs,
3315
3606
  mo as ColorDepthPmndrs,
3316
- qt as DepthOfFieldPmndrs,
3607
+ kt as DepthOfFieldPmndrs,
3317
3608
  ho as DepthPickingPassPmndrs,
3318
- uo as DotScreenPmndrs,
3609
+ co as DotScreenPmndrs,
3319
3610
  yo as EffectComposer,
3320
- Yt as EffectComposerPmndrs,
3321
- wo as FXAAPmndrs,
3611
+ _t as EffectComposerPmndrs,
3612
+ So as FXAAPmndrs,
3322
3613
  go as FishEyePmndrs,
3323
3614
  Mo as Glitch,
3324
- Qt as GlitchPmndrs,
3615
+ qt as GlitchPmndrs,
3325
3616
  po as GodRaysPmndrs,
3326
3617
  vo as GridPmndrs,
3327
3618
  To as Halftone,
@@ -3329,21 +3620,21 @@ export {
3329
3620
  ao as KuwaharaPmndrs,
3330
3621
  io as LensDistortionPmndrs,
3331
3622
  fo as LinocutPmndrs,
3332
- Kt as NoisePmndrs,
3333
- Jt as OutlinePmndrs,
3623
+ Qt as NoisePmndrs,
3624
+ Kt as OutlinePmndrs,
3334
3625
  Eo as Output,
3335
3626
  Co as Pixelation,
3336
- Zt as PixelationPmndrs,
3627
+ Jt as PixelationPmndrs,
3337
3628
  Po as SMAA,
3338
3629
  bo as SMAAPmndrs,
3339
3630
  so as ScanlinePmndrs,
3340
- co as SepiaPmndrs,
3631
+ uo as SepiaPmndrs,
3341
3632
  no as ShockWavePmndrs,
3342
- So as TexturePmndrs,
3633
+ wo as TexturePmndrs,
3343
3634
  lo as TiltShiftPmndrs,
3344
3635
  eo as ToneMappingPmndrs,
3345
3636
  Do as UnrealBloom,
3346
- _t as VignettePmndrs,
3347
- W as useEffect,
3348
- h as useEffectPmndrs
3637
+ Zt as VignettePmndrs,
3638
+ z as useEffect,
3639
+ f as useEffectPmndrs
3349
3640
  };