@tresjs/post-processing 0.3.0 → 0.4.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,6 +1,5 @@
1
1
  import type { PropType as __PropType } from 'vue';
2
- import { Scene } from 'three';
3
- import { TresCamera, TresObject } from '@tresjs/core';
2
+ import { TresObject } from '@tresjs/core';
4
3
  export type EffectComposerProps = {
5
4
  enabled?: boolean;
6
5
  children?: TresObject[];
@@ -11,13 +10,12 @@ export type EffectComposerProps = {
11
10
  autoClear?: boolean;
12
11
  multisampling?: number;
13
12
  frameBufferType?: number;
14
- scene?: Scene;
15
- camera?: TresCamera;
16
13
  };
17
14
  declare const _sfc_main: import("vue").DefineComponent<{
18
15
  enabled: {
19
16
  type: __PropType<boolean | undefined>;
20
17
  required: false;
18
+ default: boolean;
21
19
  };
22
20
  children: {
23
21
  type: __PropType<TresObject[] | undefined>;
@@ -26,14 +24,17 @@ declare const _sfc_main: import("vue").DefineComponent<{
26
24
  depthBuffer: {
27
25
  type: __PropType<boolean | undefined>;
28
26
  required: false;
27
+ default: undefined;
29
28
  };
30
29
  disableNormalPass: {
31
30
  type: __PropType<boolean | undefined>;
32
31
  required: false;
32
+ default: boolean;
33
33
  };
34
34
  stencilBuffer: {
35
35
  type: __PropType<boolean | undefined>;
36
36
  required: false;
37
+ default: undefined;
37
38
  };
38
39
  resolutionScale: {
39
40
  type: __PropType<number | undefined>;
@@ -42,27 +43,23 @@ declare const _sfc_main: import("vue").DefineComponent<{
42
43
  autoClear: {
43
44
  type: __PropType<boolean | undefined>;
44
45
  required: false;
46
+ default: boolean;
45
47
  };
46
48
  multisampling: {
47
49
  type: __PropType<number | undefined>;
48
50
  required: false;
51
+ default: number;
49
52
  };
50
53
  frameBufferType: {
51
54
  type: __PropType<number | undefined>;
52
55
  required: false;
53
- };
54
- scene: {
55
- type: __PropType<Scene | undefined>;
56
- required: false;
57
- };
58
- camera: {
59
- type: __PropType<TresCamera | undefined>;
60
- required: false;
56
+ default: 1016;
61
57
  };
62
58
  }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
63
59
  enabled: {
64
60
  type: __PropType<boolean | undefined>;
65
61
  required: false;
62
+ default: boolean;
66
63
  };
67
64
  children: {
68
65
  type: __PropType<TresObject[] | undefined>;
@@ -71,14 +68,17 @@ declare const _sfc_main: import("vue").DefineComponent<{
71
68
  depthBuffer: {
72
69
  type: __PropType<boolean | undefined>;
73
70
  required: false;
71
+ default: undefined;
74
72
  };
75
73
  disableNormalPass: {
76
74
  type: __PropType<boolean | undefined>;
77
75
  required: false;
76
+ default: boolean;
78
77
  };
79
78
  stencilBuffer: {
80
79
  type: __PropType<boolean | undefined>;
81
80
  required: false;
81
+ default: undefined;
82
82
  };
83
83
  resolutionScale: {
84
84
  type: __PropType<number | undefined>;
@@ -87,22 +87,25 @@ declare const _sfc_main: import("vue").DefineComponent<{
87
87
  autoClear: {
88
88
  type: __PropType<boolean | undefined>;
89
89
  required: false;
90
+ default: boolean;
90
91
  };
91
92
  multisampling: {
92
93
  type: __PropType<number | undefined>;
93
94
  required: false;
95
+ default: number;
94
96
  };
95
97
  frameBufferType: {
96
98
  type: __PropType<number | undefined>;
97
99
  required: false;
98
- };
99
- scene: {
100
- type: __PropType<Scene | undefined>;
101
- required: false;
102
- };
103
- camera: {
104
- type: __PropType<TresCamera | undefined>;
105
- required: false;
106
- };
107
- }>>, {}, {}>;
100
+ default: 1016;
101
+ };
102
+ }>>, {
103
+ enabled: boolean | undefined;
104
+ depthBuffer: boolean | undefined;
105
+ disableNormalPass: boolean | undefined;
106
+ stencilBuffer: boolean | undefined;
107
+ autoClear: boolean | undefined;
108
+ multisampling: number | undefined;
109
+ frameBufferType: number | undefined;
110
+ }, {}>;
108
111
  export default _sfc_main;
@@ -1,5 +1,5 @@
1
1
  import type { PropType as __PropType } from 'vue';
2
- import { BlurPass, KernelSize, BlendFunction } from 'postprocessing';
2
+ import { KernelSize, BlendFunction } from 'postprocessing';
3
3
  export type BloomProps = {
4
4
  blendFunction?: BlendFunction;
5
5
  /**
@@ -10,27 +10,6 @@ export type BloomProps = {
10
10
  * @memberof BloomProps
11
11
  */
12
12
  intensity?: number;
13
- /**
14
- * An efficient, incremental blur pass.
15
- *
16
- * @type {BlurPass}
17
- * @memberof BloomProps
18
- */
19
- blurPass?: BlurPass;
20
- /**
21
- * The width of the render
22
- *
23
- * @type {number}
24
- * @memberof BloomProps
25
- */
26
- width?: number;
27
- /**
28
- * The height of the render
29
- *
30
- * @type {number}
31
- * @memberof BloomProps
32
- */
33
- height?: number;
34
13
  /**
35
14
  * The kernel size.
36
15
  *
@@ -77,18 +56,6 @@ declare const _sfc_main: import("vue").DefineComponent<{
77
56
  type: __PropType<number | undefined>;
78
57
  required: false;
79
58
  };
80
- blurPass: {
81
- type: __PropType<import("postprocessing").KawaseBlurPass | undefined>;
82
- required: false;
83
- };
84
- width: {
85
- type: __PropType<number | undefined>;
86
- required: false;
87
- };
88
- height: {
89
- type: __PropType<number | undefined>;
90
- required: false;
91
- };
92
59
  kernelSize: {
93
60
  type: __PropType<KernelSize | undefined>;
94
61
  required: false;
@@ -114,18 +81,6 @@ declare const _sfc_main: import("vue").DefineComponent<{
114
81
  type: __PropType<number | undefined>;
115
82
  required: false;
116
83
  };
117
- blurPass: {
118
- type: __PropType<import("postprocessing").KawaseBlurPass | undefined>;
119
- required: false;
120
- };
121
- width: {
122
- type: __PropType<number | undefined>;
123
- required: false;
124
- };
125
- height: {
126
- type: __PropType<number | undefined>;
127
- required: false;
128
- };
129
84
  kernelSize: {
130
85
  type: __PropType<KernelSize | undefined>;
131
86
  required: false;
@@ -78,7 +78,7 @@ export interface GlitchProps {
78
78
  * @type {Texture}
79
79
  * @memberof GlitchProps
80
80
  */
81
- peturbationMap?: Texture;
81
+ perturbationMap?: Texture;
82
82
  /**
83
83
  * The size of the generated noise map. Will be ignored if a perturbation map is provided.
84
84
  *
@@ -126,7 +126,7 @@ declare const _sfc_main: import("vue").DefineComponent<{
126
126
  type: __PropType<Vector2 | undefined>;
127
127
  required: false;
128
128
  };
129
- peturbationMap: {
129
+ perturbationMap: {
130
130
  type: __PropType<Texture | undefined>;
131
131
  required: false;
132
132
  };
@@ -171,7 +171,7 @@ declare const _sfc_main: import("vue").DefineComponent<{
171
171
  type: __PropType<Vector2 | undefined>;
172
172
  required: false;
173
173
  };
174
- peturbationMap: {
174
+ perturbationMap: {
175
175
  type: __PropType<Texture | undefined>;
176
176
  required: false;
177
177
  };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import EffectComposer from './core/EffectComposer.vue';
2
1
  import Bloom from './core/effects/Bloom.vue';
3
2
  import Glitch from './core/effects/Glitch.vue';
4
3
  import Outline from './core/effects/Outline.vue';
5
- export { EffectComposer, Bloom, Glitch, Outline };
4
+ import EffectComposer from './core/EffectComposer.vue';
5
+ export { EffectComposer, Bloom, Outline, Glitch };
@@ -1,302 +1,74 @@
1
1
  /**
2
2
  * name: @tresjs/post-processing
3
- * version: v0.3.0
3
+ * version: v0.4.0
4
4
  * (c) 2023
5
5
  * description: Post-processing library for TresJS
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- import { inject as C, getCurrentInstance as k, onMounted as I, nextTick as q, getCurrentScope as J, onScopeDispose as Q, unref as D, ref as b, watch as p, computed as y, defineComponent as O, shallowRef as T, provide as Z, watchEffect as P, renderSlot as _, toRaw as S, onUnmounted as F } from "vue";
9
- import { HalfFloatType as ee } from "three";
10
- import { useTres as te, useRenderLoop as ne, normalizeColor as R } from "@tresjs/core";
11
- import { EffectComposer as ae, RenderPass as le, NormalPass as ue, DepthDownsamplingPass as oe, BlendFunction as W, BloomEffect as ie, EffectPass as L, GlitchMode as j, GlitchEffect as re, OutlineEffect as G } from "postprocessing";
12
- function A() {
13
- const { state: e, setState: a } = C("useTres", te()), n = C("extend") || (() => {
14
- });
15
- return {
16
- state: e,
17
- setState: a,
18
- extend: n
19
- };
20
- }
21
- let w;
22
- function se() {
23
- var e;
24
- if (w !== void 0)
25
- return w;
26
- try {
27
- let a;
28
- const n = document.createElement("canvas");
29
- return w = !!(window.WebGL2RenderingContext && (a = n.getContext("webgl2"))), a && ((e = a.getExtension("WEBGL_lose_context")) == null || e.loseContext()), w;
30
- } catch {
31
- return w = !1;
32
- }
33
- }
34
- function N(e) {
35
- return J() ? (Q(e), !0) : !1;
36
- }
37
- function H(e) {
38
- return typeof e == "function" ? e() : D(e);
39
- }
40
- const ce = typeof window < "u", de = () => {
41
- };
42
- function fe(e, a = !0) {
43
- k() ? I(e) : a ? e() : q(e);
44
- }
45
- function E(e) {
46
- var a;
47
- const n = H(e);
48
- return (a = n == null ? void 0 : n.$el) != null ? a : n;
49
- }
50
- const X = ce ? window : void 0;
51
- function M(...e) {
52
- let a, n, t, l;
53
- if (typeof e[0] == "string" || Array.isArray(e[0]) ? ([n, t, l] = e, a = X) : [a, n, t, l] = e, !a)
54
- return de;
55
- Array.isArray(n) || (n = [n]), Array.isArray(t) || (t = [t]);
56
- const r = [], c = () => {
57
- r.forEach((i) => i()), r.length = 0;
58
- }, f = (i, o, s, d) => (i.addEventListener(o, s, d), () => i.removeEventListener(o, s, d)), v = p(
59
- () => [E(a), H(l)],
60
- ([i, o]) => {
61
- c(), i && r.push(
62
- ...n.flatMap((s) => t.map((d) => f(i, s, d, o)))
63
- );
64
- },
65
- { immediate: !0, flush: "post" }
66
- ), u = () => {
67
- v(), c();
68
- };
69
- return N(u), u;
70
- }
71
- function ve() {
72
- const e = b(!1);
73
- return k() && I(() => {
74
- e.value = !0;
75
- }), e;
76
- }
77
- function me(e) {
78
- const a = ve();
79
- return y(() => (a.value, !!e()));
80
- }
81
- var $ = Object.getOwnPropertySymbols, he = Object.prototype.hasOwnProperty, be = Object.prototype.propertyIsEnumerable, ge = (e, a) => {
82
- var n = {};
83
- for (var t in e)
84
- he.call(e, t) && a.indexOf(t) < 0 && (n[t] = e[t]);
85
- if (e != null && $)
86
- for (var t of $(e))
87
- a.indexOf(t) < 0 && be.call(e, t) && (n[t] = e[t]);
88
- return n;
89
- };
90
- function Se(e, a, n = {}) {
91
- const t = n, { window: l = X } = t, r = ge(t, ["window"]);
92
- let c;
93
- const f = me(() => l && "ResizeObserver" in l), v = () => {
94
- c && (c.disconnect(), c = void 0);
95
- }, u = y(
96
- () => Array.isArray(e) ? e.map((s) => E(s)) : [E(e)]
97
- ), i = p(
98
- u,
99
- (s) => {
100
- if (v(), f.value && l) {
101
- c = new ResizeObserver(a);
102
- for (const d of s)
103
- d && c.observe(d, r);
104
- }
105
- },
106
- { immediate: !0, flush: "post", deep: !0 }
107
- ), o = () => {
108
- v(), i();
109
- };
110
- return N(o), {
111
- isSupported: f,
112
- stop: o
113
- };
114
- }
115
- function pe(e, a = {}) {
116
- const {
117
- reset: n = !0,
118
- windowResize: t = !0,
119
- windowScroll: l = !0,
120
- immediate: r = !0
121
- } = a, c = b(0), f = b(0), v = b(0), u = b(0), i = b(0), o = b(0), s = b(0), d = b(0);
122
- function m() {
123
- const g = E(e);
124
- if (!g) {
125
- n && (c.value = 0, f.value = 0, v.value = 0, u.value = 0, i.value = 0, o.value = 0, s.value = 0, d.value = 0);
126
- return;
127
- }
128
- const h = g.getBoundingClientRect();
129
- c.value = h.height, f.value = h.bottom, v.value = h.left, u.value = h.right, i.value = h.top, o.value = h.width, s.value = h.x, d.value = h.y;
130
- }
131
- return Se(e, m), p(() => E(e), (g) => !g && m()), l && M("scroll", m, { capture: !0, passive: !0 }), t && M("resize", m, { passive: !0 }), fe(() => {
132
- r && m();
133
- }), {
134
- height: c,
135
- bottom: f,
136
- left: v,
137
- right: u,
138
- top: i,
139
- width: o,
140
- x: s,
141
- y: d,
142
- update: m
143
- };
144
- }
145
- const z = Symbol(), Ee = /* @__PURE__ */ O({
146
- __name: "EffectComposer",
147
- props: {
148
- enabled: { type: Boolean, default: !0 },
149
- children: {},
150
- depthBuffer: { type: Boolean },
151
- disableNormalPass: { type: Boolean, default: !1 },
152
- stencilBuffer: { type: Boolean },
153
- resolutionScale: {},
154
- autoClear: { type: Boolean, default: !0 },
155
- multisampling: { default: 8 },
156
- frameBufferType: { default: () => ee },
157
- scene: {},
158
- camera: {}
159
- },
160
- setup(e) {
161
- const { state: a } = A(), n = T(null), t = y(() => e.scene || a.scene), l = y(() => e.camera || a.camera);
162
- let r = null, c = null;
163
- const f = se();
164
- Z(z, n);
165
- function v() {
166
- n.value && (c = new ue(t.value, l.value), c.enabled = !1, n.value.addPass(c), e.resolutionScale !== void 0 && f && (r = new oe({
167
- normalBuffer: c.texture,
168
- resolutionScale: e.resolutionScale
169
- }), r.enabled = !1, n.value.addPass(r)));
170
- }
171
- const u = y(() => {
172
- var d;
173
- return (d = a.canvas) == null ? void 0 : d.value;
174
- }), { width: i, height: o } = pe(u);
175
- P(() => {
176
- n.value && i.value && o.value && n.value.setSize(i.value, o.value);
177
- }), P(() => {
178
- a.renderer && t.value && l.value && (n.value = new ae(a.renderer, {
179
- depthBuffer: e.depthBuffer,
180
- stencilBuffer: e.stencilBuffer,
181
- multisampling: e.multisampling > 0 && f ? e.multisampling : 0,
182
- frameBufferType: e.frameBufferType
183
- }), n.value.addPass(new le(t.value, l.value)), e.disableNormalPass || v());
184
- });
185
- const { onLoop: s } = ne();
186
- return s(({ delta: d }) => {
187
- if (e.enabled && a.renderer && n.value && i.value && o.value) {
188
- const m = a.renderer.autoClear;
189
- a.renderer.autoClear = e.autoClear, e.stencilBuffer && !e.autoClear && a.renderer.clearStencil(), n.value.render(d), a.renderer.autoClear = m;
190
- }
191
- }), (d, m) => _(d.$slots, "default");
192
- }
193
- }), Be = /* @__PURE__ */ O({
8
+ import { defineComponent as _, inject as T, shallowRef as g, watchEffect as h, onUnmounted as w, computed as j, watch as F, provide as H, renderSlot as I } from "vue";
9
+ import { useTresContext as P, normalizeColor as z, useRenderLoop as X } from "@tresjs/core";
10
+ import { BloomEffect as O, EffectPass as M, GlitchEffect as k, GlitchMode as Y, OutlineEffect as A, EffectComposer as R, RenderPass as K, NormalPass as U, DepthDownsamplingPass as q } from "postprocessing";
11
+ import { HalfFloatType as G } from "three";
12
+ const x = Symbol(), ee = /* @__PURE__ */ _({
194
13
  __name: "Bloom",
195
14
  props: {
196
- blendFunction: { default: () => W.ADD },
197
- intensity: { default: 1 },
198
- blurPass: {},
199
- width: {},
200
- height: {},
15
+ blendFunction: {},
16
+ intensity: {},
201
17
  kernelSize: {},
202
- luminanceThreshold: { default: 0.9 },
203
- luminanceSmoothing: { default: 0.025 },
204
- mipmapBlur: { type: Boolean, default: !1 }
18
+ luminanceThreshold: {},
19
+ luminanceSmoothing: {},
20
+ mipmapBlur: { type: Boolean }
205
21
  },
206
- setup(e, { expose: a }) {
207
- const { state: n } = A(), t = C(z), l = b(null), r = b(null);
208
- a({ pass: l, effect: r });
209
- function c() {
210
- r.value = new ie({
211
- blendFunction: e.blendFunction,
212
- mipmapBlur: e.mipmapBlur,
213
- intensity: e.intensity,
214
- luminanceThreshold: e.luminanceThreshold,
215
- luminanceSmoothing: e.luminanceSmoothing
216
- }), l.value = new L(D(n.camera), S(r.value));
217
- }
218
- function f() {
219
- var i, o, s;
220
- (i = r.value) == null || i.dispose(), (o = l.value) == null || o.dispose(), (s = t == null ? void 0 : t.value) == null || s.removePass(S(l.value));
221
- }
222
- const v = p(
223
- () => [n.camera, t == null ? void 0 : t.value],
224
- () => {
225
- var i;
226
- n.camera && t && t.value && (c(), (i = t == null ? void 0 : t.value) == null || i.addPass(S(l.value)));
227
- }
228
- ), u = p(
229
- () => [e.blendFunction, e.mipmapBlur, e.intensity, e.luminanceThreshold, e.luminanceSmoothing],
230
- () => {
231
- var i;
232
- l.value && (f(), c(), (i = t == null ? void 0 : t.value) == null || i.addPass(S(l.value)));
233
- }
234
- );
235
- return F(() => {
236
- f(), v(), u();
237
- }), (i, o) => null;
22
+ setup(f, { expose: o }) {
23
+ const l = f, n = T(x), t = g(null), e = g(null);
24
+ o({ pass: t, effect: e });
25
+ const { camera: i } = P();
26
+ let s;
27
+ return s = h(() => {
28
+ !i.value || !(n != null && n.value) || (s == null || s(), !e.value && (e.value = new O(l), t.value = new M(i.value, e.value), n.value.addPass(t.value)));
29
+ }), h(() => {
30
+ if (!e.value)
31
+ return;
32
+ const a = new O();
33
+ e.value.intensity = l.intensity !== void 0 ? l.intensity : a.intensity, e.value.kernelSize = l.kernelSize !== void 0 ? l.kernelSize : a.kernelSize, e.value.luminanceMaterial.smoothing = l.luminanceSmoothing !== void 0 ? l.luminanceSmoothing : a.luminanceMaterial.smoothing, e.value.luminanceMaterial.threshold = l.luminanceThreshold !== void 0 ? l.luminanceThreshold : a.luminanceMaterial.threshold, a.dispose();
34
+ }), w(() => {
35
+ var a, d, v;
36
+ t.value && ((a = n == null ? void 0 : n.value) == null || a.removePass(t.value)), (d = e.value) == null || d.dispose(), (v = t.value) == null || v.dispose();
37
+ }), (a, d) => null;
238
38
  }
239
- }), xe = /* @__PURE__ */ O({
39
+ }), le = /* @__PURE__ */ _({
240
40
  __name: "Glitch",
241
41
  props: {
242
- blendFunction: { default: () => W.ADD },
42
+ blendFunction: {},
243
43
  delay: {},
244
44
  duration: {},
245
45
  strength: {},
246
46
  mode: {},
247
47
  active: { type: Boolean },
248
- ratio: { default: 0.85 },
249
- columns: { default: 0.05 },
48
+ ratio: {},
49
+ columns: {},
250
50
  chromaticAberrationOffset: {},
251
- peturbationMap: {},
252
- dtSize: { default: 64 }
51
+ perturbationMap: {},
52
+ dtSize: {}
253
53
  },
254
- setup(e, { expose: a }) {
255
- const { state: n } = A(), t = C(z), l = b(null), r = b(null);
256
- a({ pass: l });
257
- function c() {
258
- r.value = new re({
259
- blendFunction: e.blendFunction,
260
- delay: e.delay,
261
- duration: e.duration,
262
- strength: e.strength,
263
- ratio: e.ratio,
264
- columns: e.columns,
265
- chromaticAberrationOffset: e.chromaticAberrationOffset,
266
- dtSize: e.dtSize
267
- }), l.value = new L(D(n.camera), S(r.value));
268
- }
269
- function f() {
270
- var o, s, d;
271
- (o = r.value) == null || o.dispose(), (s = l.value) == null || s.dispose(), (d = t == null ? void 0 : t.value) == null || d.removePass(S(l.value));
272
- }
273
- const v = p(
274
- () => [n.camera, t == null ? void 0 : t.value],
275
- () => {
276
- var o;
277
- n.camera && t && t.value && (c(), (o = t == null ? void 0 : t.value) == null || o.addPass(S(l.value)));
278
- }
279
- ), u = p(
280
- () => [e.delay, e.duration, e.strength, e.ratio, e.columns, e.chromaticAberrationOffset, e.peturbationMap, e.dtSize],
281
- () => {
282
- var o, s;
283
- l.value && ((o = t == null ? void 0 : t.value) == null || o.removePass(S(l.value)), c(), (s = t == null ? void 0 : t.value) == null || s.addPass(S(l.value)));
284
- }
285
- );
286
- P(() => {
287
- l.value && (l.value.mode = e.active ? e.mode || j.SPORADIC : j.DISABLED);
288
- });
289
- const i = p(
290
- () => e.active,
291
- (o) => {
292
- l.value && (l.value.enabled = o);
293
- }
294
- );
295
- return F(() => {
296
- f(), v(), u(), i();
297
- }), (o, s) => null;
54
+ setup(f, { expose: o }) {
55
+ const l = f, n = T(x), t = g(null), e = g(null);
56
+ o({ pass: t, effect: e });
57
+ const { camera: i } = P();
58
+ let s;
59
+ return s = h(() => {
60
+ !i.value || !(n != null && n.value) || (s == null || s(), !e.value && (e.value = new k(l), t.value = new M(i.value, e.value), n.value.addPass(t.value)));
61
+ }), h(() => {
62
+ if (!e.value)
63
+ return;
64
+ const a = new k(), d = () => l.mode !== void 0 ? l.active === !1 ? Y.DISABLED : l.mode : a.mode;
65
+ e.value.mode = d(), e.value.ratio = l.ratio !== void 0 ? l.ratio : a.ratio, e.value.delay = l.delay !== void 0 ? l.delay : a.delay, e.value.columns = l.columns !== void 0 ? l.columns : a.columns, e.value.duration = l.duration !== void 0 ? l.duration : a.duration, e.value.strength = l.strength !== void 0 ? l.strength : a.strength, e.value.perturbationMap = l.perturbationMap !== void 0 ? l.perturbationMap : a.perturbationMap, e.value.chromaticAberrationOffset = l.chromaticAberrationOffset !== void 0 ? l.chromaticAberrationOffset : a.chromaticAberrationOffset;
66
+ }), w(() => {
67
+ var a, d, v;
68
+ t.value && ((a = n == null ? void 0 : n.value) == null || a.removePass(t.value)), (d = e.value) == null || d.dispose(), (v = t.value) == null || v.dispose();
69
+ }), (a, d) => null;
298
70
  }
299
- }), Oe = /* @__PURE__ */ O({
71
+ }), ae = /* @__PURE__ */ _({
300
72
  __name: "Outline",
301
73
  props: {
302
74
  outlinedObjects: {},
@@ -315,78 +87,143 @@ const z = Symbol(), Ee = /* @__PURE__ */ O({
315
87
  hiddenEdgeColor: {},
316
88
  visibleEdgeColor: {}
317
89
  },
318
- setup(e) {
319
- const a = e, { state: n } = A(), t = C(z), l = T(null), r = T(null), c = (u) => u !== void 0 ? R(u).getHex() : void 0, f = y(() => {
90
+ setup(f, { expose: o }) {
91
+ const l = f, n = T(x), t = g(null), e = g(null);
92
+ o({ pass: t, effect: e });
93
+ const i = (u) => u !== void 0 ? z(u).getHex() : void 0, s = j(() => {
320
94
  const {
321
95
  blur: u,
322
- xRay: i,
323
- kernelSize: o,
324
- pulseSpeed: s,
325
- resolutionX: d,
326
- resolutionY: m,
327
- patternScale: g,
328
- edgeStrength: h,
329
- multisampling: B,
330
- blendFunction: x,
331
- patternTexture: Y,
332
- resolutionScale: K,
333
- hiddenEdgeColor: U,
334
- visibleEdgeColor: V
335
- } = a;
96
+ xRay: c,
97
+ kernelSize: p,
98
+ pulseSpeed: r,
99
+ resolutionX: m,
100
+ resolutionY: S,
101
+ patternScale: B,
102
+ edgeStrength: C,
103
+ multisampling: y,
104
+ blendFunction: E,
105
+ patternTexture: N,
106
+ resolutionScale: D,
107
+ hiddenEdgeColor: $,
108
+ visibleEdgeColor: W
109
+ } = l;
336
110
  return {
337
111
  blur: u,
338
- xRay: i,
339
- kernelSize: o,
340
- pulseSpeed: s,
341
- resolutionX: d,
342
- resolutionY: m,
343
- patternScale: g,
344
- edgeStrength: h,
345
- blendFunction: x,
346
- multisampling: B,
347
- patternTexture: Y,
348
- resolutionScale: K,
349
- hiddenEdgeColor: c(U),
350
- visibleEdgeColor: c(V)
112
+ xRay: c,
113
+ kernelSize: p,
114
+ pulseSpeed: r,
115
+ resolutionX: m,
116
+ resolutionY: S,
117
+ patternScale: B,
118
+ edgeStrength: C,
119
+ blendFunction: E,
120
+ multisampling: y,
121
+ patternTexture: N,
122
+ resolutionScale: D,
123
+ hiddenEdgeColor: i($),
124
+ visibleEdgeColor: i(W)
351
125
  };
352
- }), v = P(() => {
353
- var u;
354
- n.camera && t && t.value && n.scene && (r.value = new G(n.scene, n.camera, f.value), l.value = new L(n.camera, r.value), (u = t.value) == null || u.addPass(l.value), v());
355
- });
356
- return p(
357
- [() => a.outlinedObjects, r],
358
- // whatchEffect is intentionally not used here as it would result in an endless loop
126
+ }), { camera: a, scene: d } = P();
127
+ let v;
128
+ return v = h(() => {
129
+ !a.value || !(n != null && n.value) || !d.value || (v == null || v(), !e.value && (e.value = new A(d.value, a.value, s.value), t.value = new M(a.value, e.value), n.value.addPass(t.value)));
130
+ }), F(
131
+ [() => l.outlinedObjects, e],
132
+ // watchEffect is intentionally not used here as it would result in an endless loop
359
133
  () => {
360
134
  var u;
361
- (u = r.value) == null || u.selection.set(a.outlinedObjects || []);
135
+ (u = e.value) == null || u.selection.set(l.outlinedObjects || []);
362
136
  },
363
137
  {
364
138
  immediate: !0
365
139
  }
366
- ), P(() => {
367
- if (!r.value)
140
+ ), h(() => {
141
+ if (!e.value)
368
142
  return;
369
- const u = new G(), {
370
- blur: i,
371
- xRay: o,
372
- kernelSize: s,
373
- pulseSpeed: d,
374
- patternScale: m,
375
- edgeStrength: g,
376
- multisampling: h,
377
- hiddenEdgeColor: B,
378
- visibleEdgeColor: x
379
- } = f.value;
380
- r.value.blur = i !== void 0 ? i : u.blur, r.value.xRay = o !== void 0 ? o : u.xRay, r.value.pulseSpeed = d !== void 0 ? d : u.pulseSpeed, r.value.kernelSize = s !== void 0 ? s : u.kernelSize, r.value.edgeStrength = g !== void 0 ? g : u.edgeStrength, r.value.patternScale = m !== void 0 ? m : u.patternScale, r.value.multisampling = h !== void 0 ? h : u.multisampling, r.value.hiddenEdgeColor = B !== void 0 ? R(B) : u.hiddenEdgeColor, r.value.visibleEdgeColor = x !== void 0 ? R(x) : u.visibleEdgeColor, u.dispose();
381
- }), F(() => {
382
- var u, i, o, s;
383
- (u = r.value) == null || u.selection.clear(), l.value && ((i = t == null ? void 0 : t.value) == null || i.removePass(l.value)), (o = r.value) == null || o.dispose(), (s = l.value) == null || s.dispose();
384
- }), (u, i) => null;
143
+ const u = new A(), {
144
+ blur: c,
145
+ xRay: p,
146
+ kernelSize: r,
147
+ pulseSpeed: m,
148
+ patternScale: S,
149
+ edgeStrength: B,
150
+ multisampling: C,
151
+ hiddenEdgeColor: y,
152
+ visibleEdgeColor: E
153
+ } = s.value;
154
+ e.value.blur = c !== void 0 ? c : u.blur, e.value.xRay = p !== void 0 ? p : u.xRay, e.value.pulseSpeed = m !== void 0 ? m : u.pulseSpeed, e.value.kernelSize = r !== void 0 ? r : u.kernelSize, e.value.edgeStrength = B !== void 0 ? B : u.edgeStrength, e.value.patternScale = S !== void 0 ? S : u.patternScale, e.value.multisampling = C !== void 0 ? C : u.multisampling, e.value.hiddenEdgeColor = y !== void 0 ? z(y) : u.hiddenEdgeColor, e.value.visibleEdgeColor = E !== void 0 ? z(E) : u.visibleEdgeColor, u.dispose();
155
+ }), w(() => {
156
+ var u, c, p, r;
157
+ (u = e.value) == null || u.selection.clear(), t.value && ((c = n == null ? void 0 : n.value) == null || c.removePass(t.value)), (p = e.value) == null || p.dispose(), (r = t.value) == null || r.dispose();
158
+ }), (u, c) => null;
159
+ }
160
+ });
161
+ let b;
162
+ function L() {
163
+ var f;
164
+ if (b !== void 0)
165
+ return b;
166
+ try {
167
+ let o;
168
+ const l = document.createElement("canvas");
169
+ return b = !!(window.WebGL2RenderingContext && (o = l.getContext("webgl2"))), o && ((f = o.getExtension("WEBGL_lose_context")) == null || f.loseContext()), b;
170
+ } catch {
171
+ return b = !1;
172
+ }
173
+ }
174
+ const te = /* @__PURE__ */ _({
175
+ __name: "EffectComposer",
176
+ props: {
177
+ enabled: { type: Boolean, default: !0 },
178
+ children: {},
179
+ depthBuffer: { type: Boolean, default: void 0 },
180
+ disableNormalPass: { type: Boolean, default: !1 },
181
+ stencilBuffer: { type: Boolean, default: void 0 },
182
+ resolutionScale: {},
183
+ autoClear: { type: Boolean, default: !0 },
184
+ multisampling: { default: 0 },
185
+ frameBufferType: { default: G }
186
+ },
187
+ setup(f) {
188
+ const o = f, { scene: l, camera: n, renderer: t, sizes: e } = P(), i = g(null);
189
+ let s = null, a = null;
190
+ H(x, i);
191
+ const d = () => {
192
+ i.value && (a = new U(l.value, n.value), a.enabled = !1, i.value.addPass(a), o.resolutionScale !== void 0 && L() && (s = new q({
193
+ normalBuffer: a.texture,
194
+ resolutionScale: o.resolutionScale
195
+ }), s.enabled = !1, i.value.addPass(s)));
196
+ };
197
+ h(() => {
198
+ i.value && e.width.value && e.height.value && i.value.setSize(e.width.value, e.height.value);
199
+ });
200
+ const v = j(() => {
201
+ const r = new R(), m = {
202
+ depthBuffer: o.depthBuffer !== void 0 ? o.depthBuffer : r.inputBuffer.depthBuffer,
203
+ stencilBuffer: o.stencilBuffer !== void 0 ? o.stencilBuffer : r.inputBuffer.stencilBuffer,
204
+ multisampling: L() ? 0 : o.multisampling !== void 0 ? o.multisampling : r.multisampling,
205
+ frameBufferType: o.frameBufferType !== void 0 ? o.frameBufferType : G
206
+ };
207
+ return r.dispose(), m;
208
+ }), u = () => {
209
+ !t.value && !l.value && !n.value || (i.value = new R(t.value, v.value), i.value.addPass(new K(l.value, n.value)), o.disableNormalPass || d());
210
+ }, c = F([e.height, e.width], () => {
211
+ !e.height.value && !e.width.value || (h(u), c == null || c());
212
+ }), { onLoop: p } = X();
213
+ return p(({ delta: r }) => {
214
+ if (o.enabled && t.value && i.value && e.width.value && e.height.value) {
215
+ const m = t.value.autoClear;
216
+ t.value.autoClear = o.autoClear, o.stencilBuffer && !o.autoClear && t.value.clearStencil(), i.value.render(r), t.value.autoClear = m;
217
+ }
218
+ }), w(() => {
219
+ var r;
220
+ (r = i.value) == null || r.dispose();
221
+ }), (r, m) => I(r.$slots, "default");
385
222
  }
386
223
  });
387
224
  export {
388
- Be as Bloom,
389
- Ee as EffectComposer,
390
- xe as Glitch,
391
- Oe as Outline
225
+ ee as Bloom,
226
+ te as EffectComposer,
227
+ le as Glitch,
228
+ ae as Outline
392
229
  };
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/post-processing
3
- * version: v0.3.0
3
+ * version: v0.4.0
4
4
  * (c) 2023
5
5
  * description: Post-processing library for TresJS
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- (function(b,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("vue"),require("three"),require("@tresjs/core"),require("postprocessing")):typeof define=="function"&&define.amd?define(["exports","vue","three","@tresjs/core","postprocessing"],t):(b=typeof globalThis<"u"?globalThis:b||self,t(b["tres-postprocessing"]={},b.Vue,b.Three,b.TresjsCore,b.Postprocessing))})(this,function(b,t,j,g,v){"use strict";function P(){const{state:e,setState:l}=t.inject("useTres",g.useTres()),a=t.inject("extend")||(()=>{});return{state:e,setState:l,extend:a}}let C;function F(){var e;if(C!==void 0)return C;try{let l;const a=document.createElement("canvas");return C=!!(window.WebGL2RenderingContext&&(l=a.getContext("webgl2"))),l&&((e=l.getExtension("WEBGL_lose_context"))==null||e.loseContext()),C}catch{return C=!1}}function R(e){return t.getCurrentScope()?(t.onScopeDispose(e),!0):!1}function x(e){return typeof e=="function"?e():t.unref(e)}const M=typeof window<"u",D=()=>{};function L(e,l=!0){t.getCurrentInstance()?t.onMounted(e):l?e():t.nextTick(e)}function E(e){var l;const a=x(e);return(l=a==null?void 0:a.$el)!=null?l:a}const A=M?window:void 0;function z(...e){let l,a,n,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([a,n,o]=e,l=A):[l,a,n,o]=e,!l)return D;Array.isArray(a)||(a=[a]),Array.isArray(n)||(n=[n]);const s=[],d=()=>{s.forEach(u=>u()),s.length=0},m=(u,r,c,f)=>(u.addEventListener(r,c,f),()=>u.removeEventListener(r,c,f)),h=t.watch(()=>[E(l),x(o)],([u,r])=>{d(),u&&s.push(...a.flatMap(c=>n.map(f=>m(u,c,f,r))))},{immediate:!0,flush:"post"}),i=()=>{h(),d()};return R(i),i}function G(){const e=t.ref(!1);return t.getCurrentInstance()&&t.onMounted(()=>{e.value=!0}),e}function $(e){const l=G();return t.computed(()=>(l.value,!!e()))}var T=Object.getOwnPropertySymbols,k=Object.prototype.hasOwnProperty,I=Object.prototype.propertyIsEnumerable,W=(e,l)=>{var a={};for(var n in e)k.call(e,n)&&l.indexOf(n)<0&&(a[n]=e[n]);if(e!=null&&T)for(var n of T(e))l.indexOf(n)<0&&I.call(e,n)&&(a[n]=e[n]);return a};function N(e,l,a={}){const n=a,{window:o=A}=n,s=W(n,["window"]);let d;const m=$(()=>o&&"ResizeObserver"in o),h=()=>{d&&(d.disconnect(),d=void 0)},i=t.computed(()=>Array.isArray(e)?e.map(c=>E(c)):[E(e)]),u=t.watch(i,c=>{if(h(),m.value&&o){d=new ResizeObserver(l);for(const f of c)f&&d.observe(f,s)}},{immediate:!0,flush:"post",deep:!0}),r=()=>{h(),u()};return R(r),{isSupported:m,stop:r}}function q(e,l={}){const{reset:a=!0,windowResize:n=!0,windowScroll:o=!0,immediate:s=!0}=l,d=t.ref(0),m=t.ref(0),h=t.ref(0),i=t.ref(0),u=t.ref(0),r=t.ref(0),c=t.ref(0),f=t.ref(0);function w(){const S=E(e);if(!S){a&&(d.value=0,m.value=0,h.value=0,i.value=0,u.value=0,r.value=0,c.value=0,f.value=0);return}const y=S.getBoundingClientRect();d.value=y.height,m.value=y.bottom,h.value=y.left,i.value=y.right,u.value=y.top,r.value=y.width,c.value=y.x,f.value=y.y}return N(e,w),t.watch(()=>E(e),S=>!S&&w()),o&&z("scroll",w,{capture:!0,passive:!0}),n&&z("resize",w,{passive:!0}),L(()=>{s&&w()}),{height:d,bottom:m,left:h,right:i,top:u,width:r,x:c,y:f,update:w}}const p=Symbol(),U=t.defineComponent({__name:"EffectComposer",props:{enabled:{type:Boolean,default:!0},children:{},depthBuffer:{type:Boolean},disableNormalPass:{type:Boolean,default:!1},stencilBuffer:{type:Boolean},resolutionScale:{},autoClear:{type:Boolean,default:!0},multisampling:{default:8},frameBufferType:{default:()=>j.HalfFloatType},scene:{},camera:{}},setup(e){const{state:l}=P(),a=t.shallowRef(null),n=t.computed(()=>e.scene||l.scene),o=t.computed(()=>e.camera||l.camera);let s=null,d=null;const m=F();t.provide(p,a);function h(){a.value&&(d=new v.NormalPass(n.value,o.value),d.enabled=!1,a.value.addPass(d),e.resolutionScale!==void 0&&m&&(s=new v.DepthDownsamplingPass({normalBuffer:d.texture,resolutionScale:e.resolutionScale}),s.enabled=!1,a.value.addPass(s)))}const i=t.computed(()=>{var f;return(f=l.canvas)==null?void 0:f.value}),{width:u,height:r}=q(i);t.watchEffect(()=>{a.value&&u.value&&r.value&&a.value.setSize(u.value,r.value)}),t.watchEffect(()=>{l.renderer&&n.value&&o.value&&(a.value=new v.EffectComposer(l.renderer,{depthBuffer:e.depthBuffer,stencilBuffer:e.stencilBuffer,multisampling:e.multisampling>0&&m?e.multisampling:0,frameBufferType:e.frameBufferType}),a.value.addPass(new v.RenderPass(n.value,o.value)),e.disableNormalPass||h())});const{onLoop:c}=g.useRenderLoop();return c(({delta:f})=>{if(e.enabled&&l.renderer&&a.value&&u.value&&r.value){const w=l.renderer.autoClear;l.renderer.autoClear=e.autoClear,e.stencilBuffer&&!e.autoClear&&l.renderer.clearStencil(),a.value.render(f),l.renderer.autoClear=w}}),(f,w)=>t.renderSlot(f.$slots,"default")}}),H=t.defineComponent({__name:"Bloom",props:{blendFunction:{default:()=>v.BlendFunction.ADD},intensity:{default:1},blurPass:{},width:{},height:{},kernelSize:{},luminanceThreshold:{default:.9},luminanceSmoothing:{default:.025},mipmapBlur:{type:Boolean,default:!1}},setup(e,{expose:l}){const{state:a}=P(),n=t.inject(p),o=t.ref(null),s=t.ref(null);l({pass:o,effect:s});function d(){s.value=new v.BloomEffect({blendFunction:e.blendFunction,mipmapBlur:e.mipmapBlur,intensity:e.intensity,luminanceThreshold:e.luminanceThreshold,luminanceSmoothing:e.luminanceSmoothing}),o.value=new v.EffectPass(t.unref(a.camera),t.toRaw(s.value))}function m(){var u,r,c;(u=s.value)==null||u.dispose(),(r=o.value)==null||r.dispose(),(c=n==null?void 0:n.value)==null||c.removePass(t.toRaw(o.value))}const h=t.watch(()=>[a.camera,n==null?void 0:n.value],()=>{var u;a.camera&&n&&n.value&&(d(),(u=n==null?void 0:n.value)==null||u.addPass(t.toRaw(o.value)))}),i=t.watch(()=>[e.blendFunction,e.mipmapBlur,e.intensity,e.luminanceThreshold,e.luminanceSmoothing],()=>{var u;o.value&&(m(),d(),(u=n==null?void 0:n.value)==null||u.addPass(t.toRaw(o.value)))});return t.onUnmounted(()=>{m(),h(),i()}),(u,r)=>null}}),V=t.defineComponent({__name:"Glitch",props:{blendFunction:{default:()=>v.BlendFunction.ADD},delay:{},duration:{},strength:{},mode:{},active:{type:Boolean},ratio:{default:.85},columns:{default:.05},chromaticAberrationOffset:{},peturbationMap:{},dtSize:{default:64}},setup(e,{expose:l}){const{state:a}=P(),n=t.inject(p),o=t.ref(null),s=t.ref(null);l({pass:o});function d(){s.value=new v.GlitchEffect({blendFunction:e.blendFunction,delay:e.delay,duration:e.duration,strength:e.strength,ratio:e.ratio,columns:e.columns,chromaticAberrationOffset:e.chromaticAberrationOffset,dtSize:e.dtSize}),o.value=new v.EffectPass(t.unref(a.camera),t.toRaw(s.value))}function m(){var r,c,f;(r=s.value)==null||r.dispose(),(c=o.value)==null||c.dispose(),(f=n==null?void 0:n.value)==null||f.removePass(t.toRaw(o.value))}const h=t.watch(()=>[a.camera,n==null?void 0:n.value],()=>{var r;a.camera&&n&&n.value&&(d(),(r=n==null?void 0:n.value)==null||r.addPass(t.toRaw(o.value)))}),i=t.watch(()=>[e.delay,e.duration,e.strength,e.ratio,e.columns,e.chromaticAberrationOffset,e.peturbationMap,e.dtSize],()=>{var r,c;o.value&&((r=n==null?void 0:n.value)==null||r.removePass(t.toRaw(o.value)),d(),(c=n==null?void 0:n.value)==null||c.addPass(t.toRaw(o.value)))});t.watchEffect(()=>{o.value&&(o.value.mode=e.active?e.mode||v.GlitchMode.SPORADIC:v.GlitchMode.DISABLED)});const u=t.watch(()=>e.active,r=>{o.value&&(o.value.enabled=r)});return t.onUnmounted(()=>{m(),h(),i(),u()}),(r,c)=>null}}),X=t.defineComponent({__name:"Outline",props:{outlinedObjects:{},blur:{type:Boolean},xRay:{type:Boolean},kernelSize:{},pulseSpeed:{},resolutionX:{},resolutionY:{},edgeStrength:{},patternScale:{},multisampling:{},blendFunction:{},patternTexture:{},resolutionScale:{},hiddenEdgeColor:{},visibleEdgeColor:{}},setup(e){const l=e,{state:a}=P(),n=t.inject(p),o=t.shallowRef(null),s=t.shallowRef(null),d=i=>i!==void 0?g.normalizeColor(i).getHex():void 0,m=t.computed(()=>{const{blur:i,xRay:u,kernelSize:r,pulseSpeed:c,resolutionX:f,resolutionY:w,patternScale:S,edgeStrength:y,multisampling:B,blendFunction:O,patternTexture:Y,resolutionScale:K,hiddenEdgeColor:J,visibleEdgeColor:Q}=l;return{blur:i,xRay:u,kernelSize:r,pulseSpeed:c,resolutionX:f,resolutionY:w,patternScale:S,edgeStrength:y,blendFunction:O,multisampling:B,patternTexture:Y,resolutionScale:K,hiddenEdgeColor:d(J),visibleEdgeColor:d(Q)}}),h=t.watchEffect(()=>{var i;a.camera&&n&&n.value&&a.scene&&(s.value=new v.OutlineEffect(a.scene,a.camera,m.value),o.value=new v.EffectPass(a.camera,s.value),(i=n.value)==null||i.addPass(o.value),h())});return t.watch([()=>l.outlinedObjects,s],()=>{var i;(i=s.value)==null||i.selection.set(l.outlinedObjects||[])},{immediate:!0}),t.watchEffect(()=>{if(!s.value)return;const i=new v.OutlineEffect,{blur:u,xRay:r,kernelSize:c,pulseSpeed:f,patternScale:w,edgeStrength:S,multisampling:y,hiddenEdgeColor:B,visibleEdgeColor:O}=m.value;s.value.blur=u!==void 0?u:i.blur,s.value.xRay=r!==void 0?r:i.xRay,s.value.pulseSpeed=f!==void 0?f:i.pulseSpeed,s.value.kernelSize=c!==void 0?c:i.kernelSize,s.value.edgeStrength=S!==void 0?S:i.edgeStrength,s.value.patternScale=w!==void 0?w:i.patternScale,s.value.multisampling=y!==void 0?y:i.multisampling,s.value.hiddenEdgeColor=B!==void 0?g.normalizeColor(B):i.hiddenEdgeColor,s.value.visibleEdgeColor=O!==void 0?g.normalizeColor(O):i.visibleEdgeColor,i.dispose()}),t.onUnmounted(()=>{var i,u,r,c;(i=s.value)==null||i.selection.clear(),o.value&&((u=n==null?void 0:n.value)==null||u.removePass(o.value)),(r=s.value)==null||r.dispose(),(c=o.value)==null||c.dispose()}),(i,u)=>null}});b.Bloom=H,b.EffectComposer=U,b.Glitch=V,b.Outline=X,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})});
8
+ (function(v,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("vue"),require("@tresjs/core"),require("postprocessing"),require("three")):typeof define=="function"&&define.amd?define(["exports","vue","@tresjs/core","postprocessing","three"],l):(v=typeof globalThis<"u"?globalThis:v||self,l(v["tres-postprocessing"]={},v.Vue,v.TresjsCore,v.Postprocessing,v.Three))})(this,function(v,l,S,d,x){"use strict";const E=Symbol(),z=l.defineComponent({__name:"Bloom",props:{blendFunction:{},intensity:{},kernelSize:{},luminanceThreshold:{},luminanceSmoothing:{},mipmapBlur:{type:Boolean}},setup(h,{expose:i}){const t=h,o=l.inject(E),n=l.shallowRef(null),e=l.shallowRef(null);i({pass:n,effect:e});const{camera:r}=S.useTresContext();let f;return f=l.watchEffect(()=>{!r.value||!(o!=null&&o.value)||(f==null||f(),!e.value&&(e.value=new d.BloomEffect(t),n.value=new d.EffectPass(r.value,e.value),o.value.addPass(n.value)))}),l.watchEffect(()=>{if(!e.value)return;const a=new d.BloomEffect;e.value.intensity=t.intensity!==void 0?t.intensity:a.intensity,e.value.kernelSize=t.kernelSize!==void 0?t.kernelSize:a.kernelSize,e.value.luminanceMaterial.smoothing=t.luminanceSmoothing!==void 0?t.luminanceSmoothing:a.luminanceMaterial.smoothing,e.value.luminanceMaterial.threshold=t.luminanceThreshold!==void 0?t.luminanceThreshold:a.luminanceMaterial.threshold,a.dispose()}),l.onUnmounted(()=>{var a,c,m;n.value&&((a=o==null?void 0:o.value)==null||a.removePass(n.value)),(c=e.value)==null||c.dispose(),(m=n.value)==null||m.dispose()}),(a,c)=>null}}),R=l.defineComponent({__name:"Glitch",props:{blendFunction:{},delay:{},duration:{},strength:{},mode:{},active:{type:Boolean},ratio:{},columns:{},chromaticAberrationOffset:{},perturbationMap:{},dtSize:{}},setup(h,{expose:i}){const t=h,o=l.inject(E),n=l.shallowRef(null),e=l.shallowRef(null);i({pass:n,effect:e});const{camera:r}=S.useTresContext();let f;return f=l.watchEffect(()=>{!r.value||!(o!=null&&o.value)||(f==null||f(),!e.value&&(e.value=new d.GlitchEffect(t),n.value=new d.EffectPass(r.value,e.value),o.value.addPass(n.value)))}),l.watchEffect(()=>{if(!e.value)return;const a=new d.GlitchEffect,c=()=>t.mode!==void 0?t.active===!1?d.GlitchMode.DISABLED:t.mode:a.mode;e.value.mode=c(),e.value.ratio=t.ratio!==void 0?t.ratio:a.ratio,e.value.delay=t.delay!==void 0?t.delay:a.delay,e.value.columns=t.columns!==void 0?t.columns:a.columns,e.value.duration=t.duration!==void 0?t.duration:a.duration,e.value.strength=t.strength!==void 0?t.strength:a.strength,e.value.perturbationMap=t.perturbationMap!==void 0?t.perturbationMap:a.perturbationMap,e.value.chromaticAberrationOffset=t.chromaticAberrationOffset!==void 0?t.chromaticAberrationOffset:a.chromaticAberrationOffset}),l.onUnmounted(()=>{var a,c,m;n.value&&((a=o==null?void 0:o.value)==null||a.removePass(n.value)),(c=e.value)==null||c.dispose(),(m=n.value)==null||m.dispose()}),(a,c)=>null}}),O=l.defineComponent({__name:"Outline",props:{outlinedObjects:{},blur:{type:Boolean},xRay:{type:Boolean},kernelSize:{},pulseSpeed:{},resolutionX:{},resolutionY:{},edgeStrength:{},patternScale:{},multisampling:{},blendFunction:{},patternTexture:{},resolutionScale:{},hiddenEdgeColor:{},visibleEdgeColor:{}},setup(h,{expose:i}){const t=h,o=l.inject(E),n=l.shallowRef(null),e=l.shallowRef(null);i({pass:n,effect:e});const r=u=>u!==void 0?S.normalizeColor(u).getHex():void 0,f=l.computed(()=>{const{blur:u,xRay:p,kernelSize:g,pulseSpeed:s,resolutionX:C,resolutionY:w,patternScale:y,edgeStrength:B,multisampling:P,blendFunction:_,patternTexture:M,resolutionScale:k,hiddenEdgeColor:A,visibleEdgeColor:G}=t;return{blur:u,xRay:p,kernelSize:g,pulseSpeed:s,resolutionX:C,resolutionY:w,patternScale:y,edgeStrength:B,blendFunction:_,multisampling:P,patternTexture:M,resolutionScale:k,hiddenEdgeColor:r(A),visibleEdgeColor:r(G)}}),{camera:a,scene:c}=S.useTresContext();let m;return m=l.watchEffect(()=>{!a.value||!(o!=null&&o.value)||!c.value||(m==null||m(),!e.value&&(e.value=new d.OutlineEffect(c.value,a.value,f.value),n.value=new d.EffectPass(a.value,e.value),o.value.addPass(n.value)))}),l.watch([()=>t.outlinedObjects,e],()=>{var u;(u=e.value)==null||u.selection.set(t.outlinedObjects||[])},{immediate:!0}),l.watchEffect(()=>{if(!e.value)return;const u=new d.OutlineEffect,{blur:p,xRay:g,kernelSize:s,pulseSpeed:C,patternScale:w,edgeStrength:y,multisampling:B,hiddenEdgeColor:P,visibleEdgeColor:_}=f.value;e.value.blur=p!==void 0?p:u.blur,e.value.xRay=g!==void 0?g:u.xRay,e.value.pulseSpeed=C!==void 0?C:u.pulseSpeed,e.value.kernelSize=s!==void 0?s:u.kernelSize,e.value.edgeStrength=y!==void 0?y:u.edgeStrength,e.value.patternScale=w!==void 0?w:u.patternScale,e.value.multisampling=B!==void 0?B:u.multisampling,e.value.hiddenEdgeColor=P!==void 0?S.normalizeColor(P):u.hiddenEdgeColor,e.value.visibleEdgeColor=_!==void 0?S.normalizeColor(_):u.visibleEdgeColor,u.dispose()}),l.onUnmounted(()=>{var u,p,g,s;(u=e.value)==null||u.selection.clear(),n.value&&((p=o==null?void 0:o.value)==null||p.removePass(n.value)),(g=e.value)==null||g.dispose(),(s=n.value)==null||s.dispose()}),(u,p)=>null}});let b;function T(){var h;if(b!==void 0)return b;try{let i;const t=document.createElement("canvas");return b=!!(window.WebGL2RenderingContext&&(i=t.getContext("webgl2"))),i&&((h=i.getExtension("WEBGL_lose_context"))==null||h.loseContext()),b}catch{return b=!1}}const j=l.defineComponent({__name:"EffectComposer",props:{enabled:{type:Boolean,default:!0},children:{},depthBuffer:{type:Boolean,default:void 0},disableNormalPass:{type:Boolean,default:!1},stencilBuffer:{type:Boolean,default:void 0},resolutionScale:{},autoClear:{type:Boolean,default:!0},multisampling:{default:0},frameBufferType:{default:x.HalfFloatType}},setup(h){const i=h,{scene:t,camera:o,renderer:n,sizes:e}=S.useTresContext(),r=l.shallowRef(null);let f=null,a=null;l.provide(E,r);const c=()=>{r.value&&(a=new d.NormalPass(t.value,o.value),a.enabled=!1,r.value.addPass(a),i.resolutionScale!==void 0&&T()&&(f=new d.DepthDownsamplingPass({normalBuffer:a.texture,resolutionScale:i.resolutionScale}),f.enabled=!1,r.value.addPass(f)))};l.watchEffect(()=>{r.value&&e.width.value&&e.height.value&&r.value.setSize(e.width.value,e.height.value)});const m=l.computed(()=>{const s=new d.EffectComposer,C={depthBuffer:i.depthBuffer!==void 0?i.depthBuffer:s.inputBuffer.depthBuffer,stencilBuffer:i.stencilBuffer!==void 0?i.stencilBuffer:s.inputBuffer.stencilBuffer,multisampling:T()?0:i.multisampling!==void 0?i.multisampling:s.multisampling,frameBufferType:i.frameBufferType!==void 0?i.frameBufferType:x.HalfFloatType};return s.dispose(),C}),u=()=>{!n.value&&!t.value&&!o.value||(r.value=new d.EffectComposer(n.value,m.value),r.value.addPass(new d.RenderPass(t.value,o.value)),i.disableNormalPass||c())},p=l.watch([e.height,e.width],()=>{!e.height.value&&!e.width.value||(l.watchEffect(u),p==null||p())}),{onLoop:g}=S.useRenderLoop();return g(({delta:s})=>{if(i.enabled&&n.value&&r.value&&e.width.value&&e.height.value){const C=n.value.autoClear;n.value.autoClear=i.autoClear,i.stencilBuffer&&!i.autoClear&&n.value.clearStencil(),r.value.render(s),n.value.autoClear=C}}),l.onUnmounted(()=>{var s;(s=r.value)==null||s.dispose()}),(s,C)=>l.renderSlot(s.$slots,"default")}});v.Bloom=z,v.EffectComposer=j,v.Glitch=R,v.Outline=O,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/post-processing",
3
3
  "description": "Post-processing library for TresJS",
4
- "version": "0.3.0",
4
+ "version": "0.4.0",
5
5
  "type": "module",
6
6
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
7
7
  "files": [
@@ -42,11 +42,11 @@
42
42
  "docs:preview": "vitepress preview docs"
43
43
  },
44
44
  "peerDependencies": {
45
- "@tresjs/core": ">=2.3.0",
46
45
  "three": ">=0.133",
47
46
  "vue": ">=3.3"
48
47
  },
49
48
  "dependencies": {
49
+ "@tresjs/core": "^3.0.1",
50
50
  "@vueuse/core": "^10.2.0",
51
51
  "postprocessing": "^6.32.1",
52
52
  "three-stdlib": "^2.23.10"
@@ -54,8 +54,6 @@
54
54
  "devDependencies": {
55
55
  "@alvarosabu/prettier-config": "^1.3.0",
56
56
  "@release-it/conventional-changelog": "^5.1.1",
57
- "@tresjs/cientos": "2.1.4",
58
- "@tresjs/core": "2.3.0",
59
57
  "@types/three": "^0.152.1",
60
58
  "@vitejs/plugin-vue": "^4.2.3",
61
59
  "gsap": "^3.12.1",
@@ -1,11 +0,0 @@
1
- /**
2
- * Allows to use and extend the state of the core package.
3
- *
4
- * @export
5
- * @return {*}
6
- */
7
- export declare function useCore(): {
8
- state: import("@tresjs/core").TresState;
9
- setState: (key: string, value: any) => void;
10
- extend: (objects: any) => void;
11
- };