@tresjs/post-processing 0.2.1 → 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,23 +1,21 @@
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[];
7
6
  depthBuffer?: boolean;
8
- dissableNormalPass?: boolean;
7
+ disableNormalPass?: boolean;
9
8
  stencilBuffer?: boolean;
10
9
  resolutionScale?: number;
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
- dissableNormalPass: {
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
- dissableNormalPass: {
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
  };
@@ -0,0 +1,163 @@
1
+ import type { PropType as __PropType } from 'vue';
2
+ import type { TresColor } from '@tresjs/core';
3
+ import type { Object3D, Texture } from 'three';
4
+ import type { BlendFunction, KernelSize } from 'postprocessing';
5
+ export type OutlineProps = {
6
+ /**
7
+ * The objects in the scene which should have an outline.
8
+ */
9
+ outlinedObjects: Object3D[];
10
+ blur?: boolean;
11
+ /**
12
+ * Whether occluded parts of selected objects should be visible
13
+ */
14
+ xRay?: boolean;
15
+ /**
16
+ * The blur kernel size. Must be used with blur being true.
17
+ */
18
+ kernelSize?: KernelSize;
19
+ /**
20
+ * The pulse speed. A value of zero disables the pulse effect.
21
+ */
22
+ pulseSpeed?: number;
23
+ resolutionX?: number;
24
+ resolutionY?: number;
25
+ edgeStrength?: number;
26
+ patternScale?: number;
27
+ /**
28
+ * The number of samples used for multisample antialiasing. Requires WebGL 2.
29
+ */
30
+ multisampling?: number;
31
+ /**
32
+ * The blend function. Use `BlendFunction.ALPHA` for dark outlines.
33
+ */
34
+ blendFunction?: BlendFunction;
35
+ patternTexture?: Texture;
36
+ resolutionScale?: number;
37
+ hiddenEdgeColor?: TresColor;
38
+ visibleEdgeColor?: TresColor;
39
+ };
40
+ declare const _sfc_main: import("vue").DefineComponent<{
41
+ outlinedObjects: {
42
+ type: __PropType<Object3D<import("three").Event>[]>;
43
+ required: true;
44
+ };
45
+ blur: {
46
+ type: __PropType<boolean | undefined>;
47
+ required: false;
48
+ };
49
+ xRay: {
50
+ type: __PropType<boolean | undefined>;
51
+ required: false;
52
+ };
53
+ kernelSize: {
54
+ type: __PropType<KernelSize | undefined>;
55
+ required: false;
56
+ };
57
+ pulseSpeed: {
58
+ type: __PropType<number | undefined>;
59
+ required: false;
60
+ };
61
+ resolutionX: {
62
+ type: __PropType<number | undefined>;
63
+ required: false;
64
+ };
65
+ resolutionY: {
66
+ type: __PropType<number | undefined>;
67
+ required: false;
68
+ };
69
+ edgeStrength: {
70
+ type: __PropType<number | undefined>;
71
+ required: false;
72
+ };
73
+ patternScale: {
74
+ type: __PropType<number | undefined>;
75
+ required: false;
76
+ };
77
+ multisampling: {
78
+ type: __PropType<number | undefined>;
79
+ required: false;
80
+ };
81
+ blendFunction: {
82
+ type: __PropType<BlendFunction | undefined>;
83
+ required: false;
84
+ };
85
+ patternTexture: {
86
+ type: __PropType<Texture | undefined>;
87
+ required: false;
88
+ };
89
+ resolutionScale: {
90
+ type: __PropType<number | undefined>;
91
+ required: false;
92
+ };
93
+ hiddenEdgeColor: {
94
+ type: __PropType<[r: number, g: number, b: number] | import("three").ColorRepresentation | undefined>;
95
+ required: false;
96
+ };
97
+ visibleEdgeColor: {
98
+ type: __PropType<[r: number, g: number, b: number] | import("three").ColorRepresentation | undefined>;
99
+ required: false;
100
+ };
101
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
102
+ outlinedObjects: {
103
+ type: __PropType<Object3D<import("three").Event>[]>;
104
+ required: true;
105
+ };
106
+ blur: {
107
+ type: __PropType<boolean | undefined>;
108
+ required: false;
109
+ };
110
+ xRay: {
111
+ type: __PropType<boolean | undefined>;
112
+ required: false;
113
+ };
114
+ kernelSize: {
115
+ type: __PropType<KernelSize | undefined>;
116
+ required: false;
117
+ };
118
+ pulseSpeed: {
119
+ type: __PropType<number | undefined>;
120
+ required: false;
121
+ };
122
+ resolutionX: {
123
+ type: __PropType<number | undefined>;
124
+ required: false;
125
+ };
126
+ resolutionY: {
127
+ type: __PropType<number | undefined>;
128
+ required: false;
129
+ };
130
+ edgeStrength: {
131
+ type: __PropType<number | undefined>;
132
+ required: false;
133
+ };
134
+ patternScale: {
135
+ type: __PropType<number | undefined>;
136
+ required: false;
137
+ };
138
+ multisampling: {
139
+ type: __PropType<number | undefined>;
140
+ required: false;
141
+ };
142
+ blendFunction: {
143
+ type: __PropType<BlendFunction | undefined>;
144
+ required: false;
145
+ };
146
+ patternTexture: {
147
+ type: __PropType<Texture | undefined>;
148
+ required: false;
149
+ };
150
+ resolutionScale: {
151
+ type: __PropType<number | undefined>;
152
+ required: false;
153
+ };
154
+ hiddenEdgeColor: {
155
+ type: __PropType<[r: number, g: number, b: number] | import("three").ColorRepresentation | undefined>;
156
+ required: false;
157
+ };
158
+ visibleEdgeColor: {
159
+ type: __PropType<[r: number, g: number, b: number] | import("three").ColorRepresentation | undefined>;
160
+ required: false;
161
+ };
162
+ }>>, {}, {}>;
163
+ export default _sfc_main;
@@ -0,0 +1,3 @@
1
+ import { EffectComposer } from 'postprocessing';
2
+ import { InjectionKey, ShallowRef } from 'vue';
3
+ export declare const effectComposerInjectionKey: InjectionKey<ShallowRef<EffectComposer | null>>;
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
- import { Outline } from './core/effects/Outline';
5
- export { EffectComposer, Bloom, Glitch, Outline };
3
+ import Outline from './core/effects/Outline.vue';
4
+ import EffectComposer from './core/EffectComposer.vue';
5
+ export { EffectComposer, Bloom, Outline, Glitch };
@@ -1,407 +1,229 @@
1
1
  /**
2
2
  * name: @tresjs/post-processing
3
- * version: v0.2.1
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 b, getCurrentInstance as D, onMounted as F, nextTick as Y, getCurrentScope as q, onScopeDispose as U, unref as N, toRef as V, readonly as J, customRef as K, ref as h, watch as y, watchEffect as S, computed as G, defineComponent as B, shallowRef as L, provide as Z, renderSlot as _, toRaw as v, onUnmounted as R } from "vue";
9
- import { HalfFloatType as ee, Color as A } from "three";
10
- import { useTres as te, useRenderLoop as ne } from "@tresjs/core";
11
- import { EffectComposer as ae, RenderPass as le, NormalPass as ie, DepthDownsamplingPass as ue, BlendFunction as W, BloomEffect as re, EffectPass as z, GlitchMode as O, GlitchEffect as oe, OutlineEffect as T } from "postprocessing";
12
- function x() {
13
- const { state: e, setState: n } = b("useTres", te()), l = b("extend") || (() => {
14
- });
15
- return {
16
- state: e,
17
- setState: n,
18
- extend: l
19
- };
20
- }
21
- let g;
22
- function se() {
23
- var e;
24
- if (g !== void 0)
25
- return g;
26
- try {
27
- let n;
28
- const l = document.createElement("canvas");
29
- return g = !!(window.WebGL2RenderingContext && (n = l.getContext("webgl2"))), n && ((e = n.getExtension("WEBGL_lose_context")) == null || e.loseContext()), g;
30
- } catch {
31
- return g = !1;
32
- }
33
- }
34
- function k(e) {
35
- return q() ? (U(e), !0) : !1;
36
- }
37
- function H(e) {
38
- return typeof e == "function" ? e() : N(e);
39
- }
40
- const ce = typeof window < "u", I = () => {
41
- };
42
- function de(...e) {
43
- if (e.length !== 1)
44
- return V(...e);
45
- const n = e[0];
46
- return typeof n == "function" ? J(K(() => ({ get: n, set: I }))) : h(n);
47
- }
48
- function fe(e, n = !0) {
49
- D() ? F(e) : n ? e() : Y(e);
50
- }
51
- function me(e) {
52
- var n;
53
- const l = H(e);
54
- return (n = l == null ? void 0 : l.$el) != null ? n : l;
55
- }
56
- const M = ce ? window : void 0;
57
- function ve(...e) {
58
- let n, l, a, t;
59
- if (typeof e[0] == "string" || Array.isArray(e[0]) ? ([l, a, t] = e, n = M) : [n, l, a, t] = e, !n)
60
- return I;
61
- Array.isArray(l) || (l = [l]), Array.isArray(a) || (a = [a]);
62
- const o = [], s = () => {
63
- o.forEach((r) => r()), o.length = 0;
64
- }, c = (r, u, d, m) => (r.addEventListener(u, d, m), () => r.removeEventListener(u, d, m)), f = y(
65
- () => [me(n), H(t)],
66
- ([r, u]) => {
67
- s(), r && o.push(
68
- ...l.flatMap((d) => a.map((m) => c(r, d, m, u)))
69
- );
70
- },
71
- { immediate: !0, flush: "post" }
72
- ), i = () => {
73
- f(), s();
74
- };
75
- return k(i), i;
76
- }
77
- function he() {
78
- const e = h(!1);
79
- return D() && F(() => {
80
- e.value = !0;
81
- }), e;
82
- }
83
- function ye(e) {
84
- const n = he();
85
- return G(() => (n.value, !!e()));
86
- }
87
- function ge(e, n = {}) {
88
- const { window: l = M } = n, a = ye(() => l && "matchMedia" in l && typeof l.matchMedia == "function");
89
- let t;
90
- const o = h(!1), s = () => {
91
- t && ("removeEventListener" in t ? t.removeEventListener("change", c) : t.removeListener(c));
92
- }, c = () => {
93
- a.value && (s(), t = l.matchMedia(de(e).value), o.value = !!(t != null && t.matches), t && ("addEventListener" in t ? t.addEventListener("change", c) : t.addListener(c)));
94
- };
95
- return S(c), k(() => s()), o;
96
- }
97
- function be(e = {}) {
98
- const {
99
- window: n = M,
100
- initialWidth: l = 1 / 0,
101
- initialHeight: a = 1 / 0,
102
- listenOrientation: t = !0,
103
- includeScrollbar: o = !0
104
- } = e, s = h(l), c = h(a), f = () => {
105
- n && (o ? (s.value = n.innerWidth, c.value = n.innerHeight) : (s.value = n.document.documentElement.clientWidth, c.value = n.document.documentElement.clientHeight));
106
- };
107
- if (f(), fe(f), ve("resize", f, { passive: !0 }), t) {
108
- const i = ge("(orientation: portrait)");
109
- y(i, () => f());
110
- }
111
- return { width: s, height: c };
112
- }
113
- const Ee = /* @__PURE__ */ B({
114
- __name: "EffectComposer",
115
- props: {
116
- enabled: { type: Boolean, default: !0 },
117
- children: {},
118
- depthBuffer: { type: Boolean },
119
- dissableNormalPass: { type: Boolean, default: !1 },
120
- stencilBuffer: { type: Boolean },
121
- resolutionScale: {},
122
- autoClear: { type: Boolean, default: !0 },
123
- multisampling: { default: 8 },
124
- frameBufferType: { default: () => ee },
125
- scene: {},
126
- camera: {}
127
- },
128
- setup(e) {
129
- const { state: n } = x(), l = L(null), a = e.scene || n.scene, t = e.camera || n.camera;
130
- let o = null, s = null;
131
- const c = se();
132
- Z("effectComposer", l);
133
- const { width: f, height: i } = be();
134
- function r() {
135
- l.value && (s = new ie(e.scene, e.camera), s.enabled = !1, l.value.addPass(s), e.resolutionScale !== void 0 && c && (o = new ue({
136
- normalBuffer: s.texture,
137
- resolutionScale: e.resolutionScale
138
- }), o.enabled = !1, l.value.addPass(o)));
139
- }
140
- S(() => {
141
- n.renderer && (n.renderer.setSize(f.value, i.value), n.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)), l.value = new ae(n.renderer, {
142
- depthBuffer: e.depthBuffer,
143
- stencilBuffer: e.stencilBuffer,
144
- multisampling: e.multisampling > 0 && c ? e.multisampling : 0,
145
- frameBufferType: e.frameBufferType
146
- }), l.value.addPass(new le(a, t)), e.dissableNormalPass || r());
147
- });
148
- const { onLoop: u } = ne();
149
- return u(() => {
150
- l.value && l.value.render();
151
- }), u(({ delta: d }) => {
152
- if (e.enabled && n.renderer && l.value) {
153
- const m = n.renderer.autoClear;
154
- n.renderer.autoClear = e.autoClear, e.stencilBuffer && !e.autoClear && n.renderer.clearStencil(), l.value.render(d), n.renderer.autoClear = m;
155
- }
156
- }), (d, m) => _(d.$slots, "default");
157
- }
158
- }), Pe = /* @__PURE__ */ B({
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__ */ _({
159
13
  __name: "Bloom",
160
14
  props: {
161
- blendFunction: { default: () => W.ADD },
162
- intensity: { default: 1 },
163
- blurPass: {},
164
- width: {},
165
- height: {},
15
+ blendFunction: {},
16
+ intensity: {},
166
17
  kernelSize: {},
167
- luminanceThreshold: { default: 0.9 },
168
- luminanceSmoothing: { default: 0.025 },
169
- mipmapBlur: { type: Boolean, default: !1 }
18
+ luminanceThreshold: {},
19
+ luminanceSmoothing: {},
20
+ mipmapBlur: { type: Boolean }
170
21
  },
171
- setup(e, { expose: n }) {
172
- const { state: l } = x(), a = b("effectComposer"), t = h(null), o = h(null);
173
- n({ pass: t, effect: o });
174
- function s() {
175
- o.value = new re({
176
- blendFunction: e.blendFunction,
177
- mipmapBlur: e.mipmapBlur,
178
- intensity: e.intensity,
179
- luminanceThreshold: e.luminanceThreshold,
180
- luminanceSmoothing: e.luminanceSmoothing
181
- }), t.value = new z(N(l.camera), v(o.value));
182
- }
183
- function c() {
184
- var r, u;
185
- (r = o.value) == null || r.dispose(), (u = t.value) == null || u.dispose(), a == null || a.value.removePass(v(t.value));
186
- }
187
- const f = y(
188
- () => [l.camera, a == null ? void 0 : a.value],
189
- () => {
190
- var r;
191
- l.camera && a && a.value && (s(), (r = a == null ? void 0 : a.value) == null || r.addPass(v(t.value)));
192
- }
193
- ), i = y(
194
- () => [e.blendFunction, e.mipmapBlur, e.intensity, e.luminanceThreshold, e.luminanceSmoothing],
195
- () => {
196
- var r;
197
- t.value && (c(), s(), (r = a == null ? void 0 : a.value) == null || r.addPass(v(t.value)));
198
- }
199
- );
200
- return R(() => {
201
- c(), f(), i();
202
- }), (r, u) => 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;
203
38
  }
204
- }), Be = /* @__PURE__ */ B({
39
+ }), le = /* @__PURE__ */ _({
205
40
  __name: "Glitch",
206
41
  props: {
207
- blendFunction: { default: () => W.ADD },
42
+ blendFunction: {},
208
43
  delay: {},
209
44
  duration: {},
210
45
  strength: {},
211
46
  mode: {},
212
47
  active: { type: Boolean },
213
- ratio: { default: 0.85 },
214
- columns: { default: 0.05 },
48
+ ratio: {},
49
+ columns: {},
215
50
  chromaticAberrationOffset: {},
216
- peturbationMap: {},
217
- dtSize: { default: 64 }
51
+ perturbationMap: {},
52
+ dtSize: {}
218
53
  },
219
- setup(e, { expose: n }) {
220
- const { state: l } = x(), a = b("effectComposer"), t = h(null), o = h(null);
221
- n({ pass: t });
222
- function s() {
223
- o.value = new oe({
224
- blendFunction: e.blendFunction,
225
- delay: e.delay,
226
- duration: e.duration,
227
- strength: e.strength,
228
- ratio: e.ratio,
229
- columns: e.columns,
230
- chromaticAberrationOffset: e.chromaticAberrationOffset,
231
- dtSize: e.dtSize
232
- }), t.value = new z(N(l.camera), v(o.value));
233
- }
234
- function c() {
235
- var u, d;
236
- (u = o.value) == null || u.dispose(), (d = t.value) == null || d.dispose(), a == null || a.value.removePass(v(t.value));
237
- }
238
- const f = y(
239
- () => [l.camera, a == null ? void 0 : a.value],
240
- () => {
241
- var u;
242
- l.camera && a && a.value && (s(), (u = a == null ? void 0 : a.value) == null || u.addPass(v(t.value)));
243
- }
244
- ), i = y(
245
- () => [e.delay, e.duration, e.strength, e.ratio, e.columns, e.chromaticAberrationOffset, e.peturbationMap, e.dtSize],
246
- () => {
247
- var u;
248
- t.value && (a == null || a.value.removePass(v(t.value)), s(), (u = a == null ? void 0 : a.value) == null || u.addPass(v(t.value)));
249
- }
250
- );
251
- S(() => {
252
- t.value && (t.value.mode = e.active ? e.mode || O.SPORADIC : O.DISABLED);
253
- });
254
- const r = y(
255
- () => e.active,
256
- (u) => {
257
- t.value && (t.value.enabled = u);
258
- }
259
- );
260
- return R(() => {
261
- c(), f(), i(), r();
262
- }), (u, d) => 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;
263
70
  }
264
- }), xe = B({
265
- name: "Outline",
71
+ }), ae = /* @__PURE__ */ _({
72
+ __name: "Outline",
266
73
  props: {
267
- /**
268
- * The objects in the scene which should have an outline.
269
- */
270
- outlinedObjects: {
271
- type: Array,
272
- requred: !0
273
- },
274
- /**
275
- * The blend function. Use `BlendFunction.ALPHA` for dark outlines.
276
- */
277
- blendFunction: {
278
- type: Number
279
- },
280
- patternTexture: {
281
- type: Number
282
- },
283
- patternScale: {
284
- type: Number
285
- },
286
- edgeStrength: {
287
- type: Number
288
- },
289
- /**
290
- * The pulse speed. A value of zero disables the pulse effect.
291
- */
292
- pulseSpeed: {
293
- type: Number
294
- },
295
- visibleEdgeColor: {
296
- type: [String, Number, Array]
297
- },
298
- hiddenEdgeColor: {
299
- type: [String, Number, Array]
300
- },
301
- /**
302
- * The number of samples used for multisample antialiasing. Requires WebGL 2.
303
- */
304
- multisampling: {
305
- type: Number
306
- },
307
- resolutionScale: {
308
- type: Number
309
- },
310
- resolutionX: {
311
- type: Number
312
- },
313
- resolutionY: {
314
- type: Number
315
- },
316
- /**
317
- * The blur kernel size.
318
- */
319
- kernelSize: {
320
- type: Number
321
- },
322
- blur: {
323
- type: Boolean
324
- },
325
- /**
326
- * Whether occluded parts of selected objects should be visible
327
- */
328
- xRay: {
329
- type: Boolean
330
- }
74
+ outlinedObjects: {},
75
+ blur: { type: Boolean },
76
+ xRay: { type: Boolean },
77
+ kernelSize: {},
78
+ pulseSpeed: {},
79
+ resolutionX: {},
80
+ resolutionY: {},
81
+ edgeStrength: {},
82
+ patternScale: {},
83
+ multisampling: {},
84
+ blendFunction: {},
85
+ patternTexture: {},
86
+ resolutionScale: {},
87
+ hiddenEdgeColor: {},
88
+ visibleEdgeColor: {}
331
89
  },
332
- setup(e) {
333
- const { state: n } = x(), l = b("effectComposer"), a = L(null), t = L(null), o = (i) => i instanceof A ? i : Array.isArray(i) ? new A(...i) : new A(i), s = (i) => i !== void 0 ? o(i).getHex() : void 0, c = G(() => {
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(() => {
334
94
  const {
335
- blur: i,
336
- xRay: r,
337
- kernelSize: u,
338
- pulseSpeed: d,
95
+ blur: u,
96
+ xRay: c,
97
+ kernelSize: p,
98
+ pulseSpeed: r,
339
99
  resolutionX: m,
340
- resolutionY: p,
341
- patternScale: w,
100
+ resolutionY: S,
101
+ patternScale: B,
342
102
  edgeStrength: C,
103
+ multisampling: y,
343
104
  blendFunction: E,
344
- multisampling: P,
345
- patternTexture: $,
346
- resolutionScale: j,
347
- hiddenEdgeColor: Q,
348
- visibleEdgeColor: X
349
- } = e;
105
+ patternTexture: N,
106
+ resolutionScale: D,
107
+ hiddenEdgeColor: $,
108
+ visibleEdgeColor: W
109
+ } = l;
350
110
  return {
351
- blur: i,
352
- xRay: r,
353
- kernelSize: u,
354
- pulseSpeed: d,
111
+ blur: u,
112
+ xRay: c,
113
+ kernelSize: p,
114
+ pulseSpeed: r,
355
115
  resolutionX: m,
356
- resolutionY: p,
357
- patternScale: w,
116
+ resolutionY: S,
117
+ patternScale: B,
358
118
  edgeStrength: C,
359
119
  blendFunction: E,
360
- multisampling: P,
361
- patternTexture: $,
362
- resolutionScale: j,
363
- hiddenEdgeColor: s(Q),
364
- visibleEdgeColor: s(X)
120
+ multisampling: y,
121
+ patternTexture: N,
122
+ resolutionScale: D,
123
+ hiddenEdgeColor: i($),
124
+ visibleEdgeColor: i(W)
365
125
  };
366
- }), f = S(() => {
367
- var i;
368
- n.camera && l && l.value && n.scene && (t.value = new T(n.scene, n.camera, c.value), a.value = new z(n.camera, t.value), (i = l.value) == null || i.addPass(a.value), f());
369
- });
370
- return y(
371
- [() => e.outlinedObjects, t],
372
- // 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
373
133
  () => {
374
- var i;
375
- (i = t.value) == null || i.selection.set(e.outlinedObjects || []);
134
+ var u;
135
+ (u = e.value) == null || u.selection.set(l.outlinedObjects || []);
376
136
  },
377
137
  {
378
138
  immediate: !0
379
139
  }
380
- ), S(() => {
381
- if (!t.value)
140
+ ), h(() => {
141
+ if (!e.value)
382
142
  return;
383
- const i = new T(), {
384
- blur: r,
385
- xRay: u,
386
- kernelSize: d,
143
+ const u = new A(), {
144
+ blur: c,
145
+ xRay: p,
146
+ kernelSize: r,
387
147
  pulseSpeed: m,
388
- patternScale: p,
389
- edgeStrength: w,
148
+ patternScale: S,
149
+ edgeStrength: B,
390
150
  multisampling: C,
391
- hiddenEdgeColor: E,
392
- visibleEdgeColor: P
393
- } = c.value;
394
- t.value.blur = r !== void 0 ? r : i.blur, t.value.xRay = u !== void 0 ? u : i.xRay, t.value.pulseSpeed = m !== void 0 ? m : i.pulseSpeed, t.value.kernelSize = d !== void 0 ? d : i.kernelSize, t.value.edgeStrength = w !== void 0 ? w : i.edgeStrength, t.value.patternScale = p !== void 0 ? p : i.patternScale, t.value.multisampling = C !== void 0 ? C : i.multisampling, t.value.hiddenEdgeColor = E !== void 0 ? o(E) : i.hiddenEdgeColor, t.value.visibleEdgeColor = P !== void 0 ? o(P) : i.visibleEdgeColor, i.dispose();
395
- }), R(() => {
396
- var i, r, u, d;
397
- (i = t.value) == null || i.selection.clear(), (r = l.value) == null || r.removePass(a.value), (u = t.value) == null || u.dispose(), (d = a.value) == null || d.dispose();
398
- }), () => {
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)));
399
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");
400
222
  }
401
223
  });
402
224
  export {
403
- Pe as Bloom,
404
- Ee as EffectComposer,
405
- Be as Glitch,
406
- xe as Outline
225
+ ee as Bloom,
226
+ te as EffectComposer,
227
+ le as Glitch,
228
+ ae as Outline
407
229
  };
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/post-processing
3
- * version: v0.2.1
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(v,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):(v=typeof globalThis<"u"?globalThis:v||self,t(v["tres-postprocessing"]={},v.Vue,v.Three,v.TresjsCore,v.Postprocessing))})(this,function(v,t,b,A,m){"use strict";function S(){const{state:e,setState:a}=t.inject("useTres",A.useTres()),i=t.inject("extend")||(()=>{});return{state:e,setState:a,extend:i}}let w;function M(){var e;if(w!==void 0)return w;try{let a;const i=document.createElement("canvas");return w=!!(window.WebGL2RenderingContext&&(a=i.getContext("webgl2"))),a&&((e=a.getExtension("WEBGL_lose_context"))==null||e.loseContext()),w}catch{return w=!1}}function R(e){return t.getCurrentScope()?(t.onScopeDispose(e),!0):!1}function x(e){return typeof e=="function"?e():t.unref(e)}const N=typeof window<"u",L=()=>{};function O(...e){if(e.length!==1)return t.toRef(...e);const a=e[0];return typeof a=="function"?t.readonly(t.customRef(()=>({get:a,set:L}))):t.ref(a)}function T(e,a=!0){t.getCurrentInstance()?t.onMounted(e):a?e():t.nextTick(e)}function z(e){var a;const i=x(e);return(a=i==null?void 0:i.$el)!=null?a:i}const p=N?window:void 0;function j(...e){let a,i,l,n;if(typeof e[0]=="string"||Array.isArray(e[0])?([i,l,n]=e,a=p):[a,i,l,n]=e,!a)return L;Array.isArray(i)||(i=[i]),Array.isArray(l)||(l=[l]);const c=[],s=()=>{c.forEach(u=>u()),c.length=0},d=(u,o,f,y)=>(u.addEventListener(o,f,y),()=>u.removeEventListener(o,f,y)),h=t.watch(()=>[z(a),x(n)],([u,o])=>{s(),u&&c.push(...i.flatMap(f=>l.map(y=>d(u,f,y,o))))},{immediate:!0,flush:"post"}),r=()=>{h(),s()};return R(r),r}function F(){const e=t.ref(!1);return t.getCurrentInstance()&&t.onMounted(()=>{e.value=!0}),e}function D(e){const a=F();return t.computed(()=>(a.value,!!e()))}function G(e,a={}){const{window:i=p}=a,l=D(()=>i&&"matchMedia"in i&&typeof i.matchMedia=="function");let n;const c=t.ref(!1),s=()=>{n&&("removeEventListener"in n?n.removeEventListener("change",d):n.removeListener(d))},d=()=>{l.value&&(s(),n=i.matchMedia(O(e).value),c.value=!!(n!=null&&n.matches),n&&("addEventListener"in n?n.addEventListener("change",d):n.addListener(d)))};return t.watchEffect(d),R(()=>s()),c}function W(e={}){const{window:a=p,initialWidth:i=1/0,initialHeight:l=1/0,listenOrientation:n=!0,includeScrollbar:c=!0}=e,s=t.ref(i),d=t.ref(l),h=()=>{a&&(c?(s.value=a.innerWidth,d.value=a.innerHeight):(s.value=a.document.documentElement.clientWidth,d.value=a.document.documentElement.clientHeight))};if(h(),T(h),j("resize",h,{passive:!0}),n){const r=G("(orientation: portrait)");t.watch(r,()=>h())}return{width:s,height:d}}const k=t.defineComponent({__name:"EffectComposer",props:{enabled:{type:Boolean,default:!0},children:{},depthBuffer:{type:Boolean},dissableNormalPass:{type:Boolean,default:!1},stencilBuffer:{type:Boolean},resolutionScale:{},autoClear:{type:Boolean,default:!0},multisampling:{default:8},frameBufferType:{default:()=>b.HalfFloatType},scene:{},camera:{}},setup(e){const{state:a}=S(),i=t.shallowRef(null),l=e.scene||a.scene,n=e.camera||a.camera;let c=null,s=null;const d=M();t.provide("effectComposer",i);const{width:h,height:r}=W();function u(){i.value&&(s=new m.NormalPass(e.scene,e.camera),s.enabled=!1,i.value.addPass(s),e.resolutionScale!==void 0&&d&&(c=new m.DepthDownsamplingPass({normalBuffer:s.texture,resolutionScale:e.resolutionScale}),c.enabled=!1,i.value.addPass(c)))}t.watchEffect(()=>{a.renderer&&(a.renderer.setSize(h.value,r.value),a.renderer.setPixelRatio(Math.min(window.devicePixelRatio,2)),i.value=new m.EffectComposer(a.renderer,{depthBuffer:e.depthBuffer,stencilBuffer:e.stencilBuffer,multisampling:e.multisampling>0&&d?e.multisampling:0,frameBufferType:e.frameBufferType}),i.value.addPass(new m.RenderPass(l,n)),e.dissableNormalPass||u())});const{onLoop:o}=A.useRenderLoop();return o(()=>{i.value&&i.value.render()}),o(({delta:f})=>{if(e.enabled&&a.renderer&&i.value){const y=a.renderer.autoClear;a.renderer.autoClear=e.autoClear,e.stencilBuffer&&!e.autoClear&&a.renderer.clearStencil(),i.value.render(f),a.renderer.autoClear=y}}),(f,y)=>t.renderSlot(f.$slots,"default")}}),I=t.defineComponent({__name:"Bloom",props:{blendFunction:{default:()=>m.BlendFunction.ADD},intensity:{default:1},blurPass:{},width:{},height:{},kernelSize:{},luminanceThreshold:{default:.9},luminanceSmoothing:{default:.025},mipmapBlur:{type:Boolean,default:!1}},setup(e,{expose:a}){const{state:i}=S(),l=t.inject("effectComposer"),n=t.ref(null),c=t.ref(null);a({pass:n,effect:c});function s(){c.value=new m.BloomEffect({blendFunction:e.blendFunction,mipmapBlur:e.mipmapBlur,intensity:e.intensity,luminanceThreshold:e.luminanceThreshold,luminanceSmoothing:e.luminanceSmoothing}),n.value=new m.EffectPass(t.unref(i.camera),t.toRaw(c.value))}function d(){var u,o;(u=c.value)==null||u.dispose(),(o=n.value)==null||o.dispose(),l==null||l.value.removePass(t.toRaw(n.value))}const h=t.watch(()=>[i.camera,l==null?void 0:l.value],()=>{var u;i.camera&&l&&l.value&&(s(),(u=l==null?void 0:l.value)==null||u.addPass(t.toRaw(n.value)))}),r=t.watch(()=>[e.blendFunction,e.mipmapBlur,e.intensity,e.luminanceThreshold,e.luminanceSmoothing],()=>{var u;n.value&&(d(),s(),(u=l==null?void 0:l.value)==null||u.addPass(t.toRaw(n.value)))});return t.onUnmounted(()=>{d(),h(),r()}),(u,o)=>null}}),q=t.defineComponent({__name:"Glitch",props:{blendFunction:{default:()=>m.BlendFunction.ADD},delay:{},duration:{},strength:{},mode:{},active:{type:Boolean},ratio:{default:.85},columns:{default:.05},chromaticAberrationOffset:{},peturbationMap:{},dtSize:{default:64}},setup(e,{expose:a}){const{state:i}=S(),l=t.inject("effectComposer"),n=t.ref(null),c=t.ref(null);a({pass:n});function s(){c.value=new m.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}),n.value=new m.EffectPass(t.unref(i.camera),t.toRaw(c.value))}function d(){var o,f;(o=c.value)==null||o.dispose(),(f=n.value)==null||f.dispose(),l==null||l.value.removePass(t.toRaw(n.value))}const h=t.watch(()=>[i.camera,l==null?void 0:l.value],()=>{var o;i.camera&&l&&l.value&&(s(),(o=l==null?void 0:l.value)==null||o.addPass(t.toRaw(n.value)))}),r=t.watch(()=>[e.delay,e.duration,e.strength,e.ratio,e.columns,e.chromaticAberrationOffset,e.peturbationMap,e.dtSize],()=>{var o;n.value&&(l==null||l.value.removePass(t.toRaw(n.value)),s(),(o=l==null?void 0:l.value)==null||o.addPass(t.toRaw(n.value)))});t.watchEffect(()=>{n.value&&(n.value.mode=e.active?e.mode||m.GlitchMode.SPORADIC:m.GlitchMode.DISABLED)});const u=t.watch(()=>e.active,o=>{n.value&&(n.value.enabled=o)});return t.onUnmounted(()=>{d(),h(),r(),u()}),(o,f)=>null}}),$=t.defineComponent({name:"Outline",props:{outlinedObjects:{type:Array,requred:!0},blendFunction:{type:Number},patternTexture:{type:Number},patternScale:{type:Number},edgeStrength:{type:Number},pulseSpeed:{type:Number},visibleEdgeColor:{type:[String,Number,Array]},hiddenEdgeColor:{type:[String,Number,Array]},multisampling:{type:Number},resolutionScale:{type:Number},resolutionX:{type:Number},resolutionY:{type:Number},kernelSize:{type:Number},blur:{type:Boolean},xRay:{type:Boolean}},setup(e){const{state:a}=S(),i=t.inject("effectComposer"),l=t.shallowRef(null),n=t.shallowRef(null),c=r=>r instanceof b.Color?r:Array.isArray(r)?new b.Color(...r):new b.Color(r),s=r=>r!==void 0?c(r).getHex():void 0,d=t.computed(()=>{const{blur:r,xRay:u,kernelSize:o,pulseSpeed:f,resolutionX:y,resolutionY:g,patternScale:C,edgeStrength:E,blendFunction:P,multisampling:B,patternTexture:U,resolutionScale:H,hiddenEdgeColor:Q,visibleEdgeColor:V}=e;return{blur:r,xRay:u,kernelSize:o,pulseSpeed:f,resolutionX:y,resolutionY:g,patternScale:C,edgeStrength:E,blendFunction:P,multisampling:B,patternTexture:U,resolutionScale:H,hiddenEdgeColor:s(Q),visibleEdgeColor:s(V)}}),h=t.watchEffect(()=>{var r;a.camera&&i&&i.value&&a.scene&&(n.value=new m.OutlineEffect(a.scene,a.camera,d.value),l.value=new m.EffectPass(a.camera,n.value),(r=i.value)==null||r.addPass(l.value),h())});return t.watch([()=>e.outlinedObjects,n],()=>{var r;(r=n.value)==null||r.selection.set(e.outlinedObjects||[])},{immediate:!0}),t.watchEffect(()=>{if(!n.value)return;const r=new m.OutlineEffect,{blur:u,xRay:o,kernelSize:f,pulseSpeed:y,patternScale:g,edgeStrength:C,multisampling:E,hiddenEdgeColor:P,visibleEdgeColor:B}=d.value;n.value.blur=u!==void 0?u:r.blur,n.value.xRay=o!==void 0?o:r.xRay,n.value.pulseSpeed=y!==void 0?y:r.pulseSpeed,n.value.kernelSize=f!==void 0?f:r.kernelSize,n.value.edgeStrength=C!==void 0?C:r.edgeStrength,n.value.patternScale=g!==void 0?g:r.patternScale,n.value.multisampling=E!==void 0?E:r.multisampling,n.value.hiddenEdgeColor=P!==void 0?c(P):r.hiddenEdgeColor,n.value.visibleEdgeColor=B!==void 0?c(B):r.visibleEdgeColor,r.dispose()}),t.onUnmounted(()=>{var r,u,o,f;(r=n.value)==null||r.selection.clear(),(u=i.value)==null||u.removePass(l.value),(o=n.value)==null||o.dispose(),(f=l.value)==null||f.dispose()}),()=>{}}});v.Bloom=I,v.EffectComposer=k,v.Glitch=q,v.Outline=$,Object.defineProperty(v,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.2.1",
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,38 +42,36 @@
42
42
  "docs:preview": "vitepress preview docs"
43
43
  },
44
44
  "peerDependencies": {
45
- "@tresjs/core": ">=2.2.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"
53
53
  },
54
54
  "devDependencies": {
55
- "vue": "^3.3.4",
56
- "three": "^0.153.0",
57
55
  "@alvarosabu/prettier-config": "^1.3.0",
58
56
  "@release-it/conventional-changelog": "^5.1.1",
59
- "@tresjs/cientos": "2.1.4",
60
- "@tresjs/core": "2.2.0",
61
57
  "@types/three": "^0.152.1",
62
- "@vitejs/plugin-vue": "^4.1.0",
58
+ "@vitejs/plugin-vue": "^4.2.3",
63
59
  "gsap": "^3.12.1",
64
- "kolorist": "^1.7.0",
60
+ "kolorist": "^1.8.0",
65
61
  "pathe": "^1.1.1",
66
62
  "prettier": "^2.8.8",
67
63
  "release-it": "^15.11.0",
68
64
  "rollup-plugin-analyzer": "^4.0.0",
69
65
  "rollup-plugin-visualizer": "^5.9.2",
66
+ "three": "^0.153.0",
70
67
  "typescript": "^5.1.3",
71
- "unocss": "^0.53.1",
68
+ "unocss": "^0.53.3",
72
69
  "vite": "^4.3.9",
73
70
  "vite-plugin-banner": "^0.7.0",
74
71
  "vite-plugin-dts": "2.3.0",
75
72
  "vite-svg-loader": "^4.0.0",
76
- "vitepress": "1.0.0-beta.2",
77
- "vue-tsc": "^1.8.0"
73
+ "vitepress": "1.0.0-beta.3",
74
+ "vue": "^3.3.4",
75
+ "vue-tsc": "^1.8.1"
78
76
  }
79
77
  }
@@ -1,134 +0,0 @@
1
- import type { PropType } from 'vue';
2
- import type { BlendFunction, KernelSize } from 'postprocessing';
3
- import type { Object3D, ColorRepresentation } from 'three';
4
- export declare const Outline: import("vue").DefineComponent<{
5
- /**
6
- * The objects in the scene which should have an outline.
7
- */
8
- outlinedObjects: {
9
- type: PropType<Object3D<import("three").Event>[]>;
10
- requred: boolean;
11
- };
12
- /**
13
- * The blend function. Use `BlendFunction.ALPHA` for dark outlines.
14
- */
15
- blendFunction: {
16
- type: PropType<BlendFunction>;
17
- };
18
- patternTexture: {
19
- type: PropType<number>;
20
- };
21
- patternScale: {
22
- type: PropType<number>;
23
- };
24
- edgeStrength: {
25
- type: PropType<number>;
26
- };
27
- /**
28
- * The pulse speed. A value of zero disables the pulse effect.
29
- */
30
- pulseSpeed: {
31
- type: PropType<number>;
32
- };
33
- visibleEdgeColor: {
34
- type: PropType<[r: number, g: number, b: number] | ColorRepresentation>;
35
- };
36
- hiddenEdgeColor: {
37
- type: PropType<[r: number, g: number, b: number] | ColorRepresentation>;
38
- };
39
- /**
40
- * The number of samples used for multisample antialiasing. Requires WebGL 2.
41
- */
42
- multisampling: {
43
- type: PropType<number>;
44
- };
45
- resolutionScale: {
46
- type: PropType<number>;
47
- };
48
- resolutionX: {
49
- type: PropType<number>;
50
- };
51
- resolutionY: {
52
- type: PropType<number>;
53
- };
54
- /**
55
- * The blur kernel size.
56
- */
57
- kernelSize: {
58
- type: PropType<KernelSize>;
59
- };
60
- blur: {
61
- type: PropType<boolean>;
62
- };
63
- /**
64
- * Whether occluded parts of selected objects should be visible
65
- */
66
- xRay: {
67
- type: PropType<boolean>;
68
- };
69
- }, () => void, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
70
- /**
71
- * The objects in the scene which should have an outline.
72
- */
73
- outlinedObjects: {
74
- type: PropType<Object3D<import("three").Event>[]>;
75
- requred: boolean;
76
- };
77
- /**
78
- * The blend function. Use `BlendFunction.ALPHA` for dark outlines.
79
- */
80
- blendFunction: {
81
- type: PropType<BlendFunction>;
82
- };
83
- patternTexture: {
84
- type: PropType<number>;
85
- };
86
- patternScale: {
87
- type: PropType<number>;
88
- };
89
- edgeStrength: {
90
- type: PropType<number>;
91
- };
92
- /**
93
- * The pulse speed. A value of zero disables the pulse effect.
94
- */
95
- pulseSpeed: {
96
- type: PropType<number>;
97
- };
98
- visibleEdgeColor: {
99
- type: PropType<[r: number, g: number, b: number] | ColorRepresentation>;
100
- };
101
- hiddenEdgeColor: {
102
- type: PropType<[r: number, g: number, b: number] | ColorRepresentation>;
103
- };
104
- /**
105
- * The number of samples used for multisample antialiasing. Requires WebGL 2.
106
- */
107
- multisampling: {
108
- type: PropType<number>;
109
- };
110
- resolutionScale: {
111
- type: PropType<number>;
112
- };
113
- resolutionX: {
114
- type: PropType<number>;
115
- };
116
- resolutionY: {
117
- type: PropType<number>;
118
- };
119
- /**
120
- * The blur kernel size.
121
- */
122
- kernelSize: {
123
- type: PropType<KernelSize>;
124
- };
125
- blur: {
126
- type: PropType<boolean>;
127
- };
128
- /**
129
- * Whether occluded parts of selected objects should be visible
130
- */
131
- xRay: {
132
- type: PropType<boolean>;
133
- };
134
- }>>, {}, {}>;
@@ -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
- };