@react-three/postprocessing 2.18.0 → 3.0.0-rc.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.
- package/LICENSE +21 -21
- package/README.md +81 -81
- package/dist/index.d.ts +1 -38
- package/dist/index.js +554 -88
- package/dist/index.js.map +1 -1
- package/package.json +69 -96
- package/src/EffectComposer.test.tsx +126 -0
- package/src/EffectComposer.tsx +202 -0
- package/src/Selection.tsx +46 -0
- package/src/effects/ASCII.tsx +135 -0
- package/src/effects/Autofocus.tsx +153 -0
- package/src/effects/Bloom.tsx +6 -0
- package/src/effects/BrightnessContrast.tsx +4 -0
- package/src/effects/ChromaticAberration.tsx +5 -0
- package/src/effects/ColorAverage.tsx +15 -0
- package/src/effects/ColorDepth.tsx +4 -0
- package/src/effects/Depth.tsx +4 -0
- package/src/effects/DepthOfField.tsx +89 -0
- package/src/effects/DotScreen.tsx +4 -0
- package/src/effects/FXAA.tsx +4 -0
- package/src/effects/Glitch.tsx +40 -0
- package/src/effects/GodRays.tsx +16 -0
- package/src/effects/Grid.tsx +21 -0
- package/src/effects/HueSaturation.tsx +4 -0
- package/src/effects/LUT.tsx +26 -0
- package/src/effects/LensFlare.tsx +611 -0
- package/src/effects/N8AO.tsx +81 -0
- package/src/effects/Noise.tsx +4 -0
- package/src/effects/Outline.tsx +117 -0
- package/src/effects/Pixelation.tsx +15 -0
- package/{dist/effects/Ramp.js → src/effects/Ramp.tsx} +150 -156
- package/src/effects/SMAA.tsx +4 -0
- package/src/effects/SSAO.tsx +41 -0
- package/src/effects/ScanlineEffect.tsx +7 -0
- package/src/effects/SelectiveBloom.tsx +126 -0
- package/src/effects/Sepia.tsx +4 -0
- package/src/effects/ShockWave.tsx +4 -0
- package/src/effects/Texture.tsx +23 -0
- package/src/effects/TiltShift.tsx +4 -0
- package/{dist/effects/TiltShift2.js → src/effects/TiltShift2.tsx} +90 -98
- package/src/effects/ToneMapping.tsx +6 -0
- package/src/effects/Vignette.tsx +4 -0
- package/{dist/effects/Water.js → src/effects/Water.tsx} +35 -38
- package/src/index.ts +40 -0
- package/src/util.tsx +55 -0
- package/dist/EffectComposer.cjs +0 -137
- package/dist/EffectComposer.cjs.map +0 -1
- package/dist/EffectComposer.d.ts +0 -27
- package/dist/EffectComposer.js +0 -137
- package/dist/EffectComposer.js.map +0 -1
- package/dist/EffectComposer.test.d.ts +0 -4
- package/dist/Selection.cjs +0 -36
- package/dist/Selection.cjs.map +0 -1
- package/dist/Selection.d.ts +0 -16
- package/dist/Selection.js +0 -36
- package/dist/Selection.js.map +0 -1
- package/dist/compat.cjs +0 -77
- package/dist/compat.cjs.map +0 -1
- package/dist/compat.js +0 -60
- package/dist/compat.js.map +0 -1
- package/dist/effects/ASCII.cjs +0 -113
- package/dist/effects/ASCII.cjs.map +0 -1
- package/dist/effects/ASCII.d.ts +0 -17
- package/dist/effects/ASCII.js +0 -113
- package/dist/effects/ASCII.js.map +0 -1
- package/dist/effects/Autofocus.cjs +0 -126
- package/dist/effects/Autofocus.cjs.map +0 -1
- package/dist/effects/Autofocus.d.ts +0 -22
- package/dist/effects/Autofocus.js +0 -109
- package/dist/effects/Autofocus.js.map +0 -1
- package/dist/effects/Bloom.cjs +0 -9
- package/dist/effects/Bloom.cjs.map +0 -1
- package/dist/effects/Bloom.d.ts +0 -6
- package/dist/effects/Bloom.js +0 -9
- package/dist/effects/Bloom.js.map +0 -1
- package/dist/effects/BrightnessContrast.cjs +0 -7
- package/dist/effects/BrightnessContrast.cjs.map +0 -1
- package/dist/effects/BrightnessContrast.d.ts +0 -10
- package/dist/effects/BrightnessContrast.js +0 -7
- package/dist/effects/BrightnessContrast.js.map +0 -1
- package/dist/effects/ChromaticAberration.cjs +0 -7
- package/dist/effects/ChromaticAberration.cjs.map +0 -1
- package/dist/effects/ChromaticAberration.d.ts +0 -13
- package/dist/effects/ChromaticAberration.js +0 -7
- package/dist/effects/ChromaticAberration.js.map +0 -1
- package/dist/effects/ColorAverage.cjs +0 -11
- package/dist/effects/ColorAverage.cjs.map +0 -1
- package/dist/effects/ColorAverage.d.ts +0 -8
- package/dist/effects/ColorAverage.js +0 -11
- package/dist/effects/ColorAverage.js.map +0 -1
- package/dist/effects/ColorDepth.cjs +0 -7
- package/dist/effects/ColorDepth.cjs.map +0 -1
- package/dist/effects/ColorDepth.d.ts +0 -9
- package/dist/effects/ColorDepth.js +0 -7
- package/dist/effects/ColorDepth.js.map +0 -1
- package/dist/effects/Depth.cjs +0 -7
- package/dist/effects/Depth.cjs.map +0 -1
- package/dist/effects/Depth.d.ts +0 -9
- package/dist/effects/Depth.js +0 -7
- package/dist/effects/Depth.js.map +0 -1
- package/dist/effects/DepthOfField.cjs +0 -74
- package/dist/effects/DepthOfField.cjs.map +0 -1
- package/dist/effects/DepthOfField.d.ts +0 -25
- package/dist/effects/DepthOfField.js +0 -74
- package/dist/effects/DepthOfField.js.map +0 -1
- package/dist/effects/DotScreen.cjs +0 -7
- package/dist/effects/DotScreen.cjs.map +0 -1
- package/dist/effects/DotScreen.d.ts +0 -10
- package/dist/effects/DotScreen.js +0 -7
- package/dist/effects/DotScreen.js.map +0 -1
- package/dist/effects/FXAA.cjs +0 -7
- package/dist/effects/FXAA.cjs.map +0 -1
- package/dist/effects/FXAA.d.ts +0 -8
- package/dist/effects/FXAA.js +0 -7
- package/dist/effects/FXAA.js.map +0 -1
- package/dist/effects/Glitch.cjs +0 -31
- package/dist/effects/Glitch.cjs.map +0 -1
- package/dist/effects/Glitch.d.ts +0 -30
- package/dist/effects/Glitch.js +0 -31
- package/dist/effects/Glitch.js.map +0 -1
- package/dist/effects/GodRays.cjs +0 -15
- package/dist/effects/GodRays.cjs.map +0 -1
- package/dist/effects/GodRays.d.ts +0 -21
- package/dist/effects/GodRays.js +0 -15
- package/dist/effects/GodRays.js.map +0 -1
- package/dist/effects/Grid.cjs +0 -18
- package/dist/effects/Grid.cjs.map +0 -1
- package/dist/effects/Grid.d.ts +0 -12
- package/dist/effects/Grid.js +0 -18
- package/dist/effects/Grid.js.map +0 -1
- package/dist/effects/HueSaturation.cjs +0 -7
- package/dist/effects/HueSaturation.cjs.map +0 -1
- package/dist/effects/HueSaturation.d.ts +0 -10
- package/dist/effects/HueSaturation.js +0 -7
- package/dist/effects/HueSaturation.js.map +0 -1
- package/dist/effects/LUT.cjs +0 -20
- package/dist/effects/LUT.cjs.map +0 -1
- package/dist/effects/LUT.d.ts +0 -9
- package/dist/effects/LUT.js +0 -20
- package/dist/effects/LUT.js.map +0 -1
- package/dist/effects/LensFlare.cjs +0 -189
- package/dist/effects/LensFlare.cjs.map +0 -1
- package/dist/effects/LensFlare.d.ts +0 -52
- package/dist/effects/LensFlare.js +0 -172
- package/dist/effects/LensFlare.js.map +0 -1
- package/dist/effects/N8AO/BlueNoise.cjs +0 -4
- package/dist/effects/N8AO/BlueNoise.cjs.map +0 -1
- package/dist/effects/N8AO/BlueNoise.js +0 -5
- package/dist/effects/N8AO/BlueNoise.js.map +0 -1
- package/dist/effects/N8AO/DepthDownSample.cjs +0 -183
- package/dist/effects/N8AO/DepthDownSample.cjs.map +0 -1
- package/dist/effects/N8AO/DepthDownSample.js +0 -166
- package/dist/effects/N8AO/DepthDownSample.js.map +0 -1
- package/dist/effects/N8AO/EffectCompositer.cjs +0 -278
- package/dist/effects/N8AO/EffectCompositer.cjs.map +0 -1
- package/dist/effects/N8AO/EffectCompositer.js +0 -261
- package/dist/effects/N8AO/EffectCompositer.js.map +0 -1
- package/dist/effects/N8AO/EffectShader.cjs +0 -236
- package/dist/effects/N8AO/EffectShader.cjs.map +0 -1
- package/dist/effects/N8AO/EffectShader.js +0 -219
- package/dist/effects/N8AO/EffectShader.js.map +0 -1
- package/dist/effects/N8AO/FullScreenTriangle.cjs +0 -59
- package/dist/effects/N8AO/FullScreenTriangle.cjs.map +0 -1
- package/dist/effects/N8AO/FullScreenTriangle.js +0 -42
- package/dist/effects/N8AO/FullScreenTriangle.js.map +0 -1
- package/dist/effects/N8AO/N8AOPostPass.cjs +0 -502
- package/dist/effects/N8AO/N8AOPostPass.cjs.map +0 -1
- package/dist/effects/N8AO/N8AOPostPass.js +0 -485
- package/dist/effects/N8AO/N8AOPostPass.js.map +0 -1
- package/dist/effects/N8AO/PoissionBlur.cjs +0 -186
- package/dist/effects/N8AO/PoissionBlur.cjs.map +0 -1
- package/dist/effects/N8AO/PoissionBlur.js +0 -169
- package/dist/effects/N8AO/PoissionBlur.js.map +0 -1
- package/dist/effects/N8AO/index.cjs +0 -60
- package/dist/effects/N8AO/index.cjs.map +0 -1
- package/dist/effects/N8AO/index.d.ts +0 -18
- package/dist/effects/N8AO/index.js +0 -60
- package/dist/effects/N8AO/index.js.map +0 -1
- package/dist/effects/Noise.cjs +0 -7
- package/dist/effects/Noise.cjs.map +0 -1
- package/dist/effects/Noise.d.ts +0 -9
- package/dist/effects/Noise.js +0 -7
- package/dist/effects/Noise.js.map +0 -1
- package/dist/effects/Outline.cjs +0 -100
- package/dist/effects/Outline.cjs.map +0 -1
- package/dist/effects/Outline.d.ts +0 -30
- package/dist/effects/Outline.js +0 -100
- package/dist/effects/Outline.js.map +0 -1
- package/dist/effects/Pixelation.cjs +0 -11
- package/dist/effects/Pixelation.cjs.map +0 -1
- package/dist/effects/Pixelation.d.ts +0 -6
- package/dist/effects/Pixelation.js +0 -11
- package/dist/effects/Pixelation.js.map +0 -1
- package/dist/effects/Ramp.cjs +0 -156
- package/dist/effects/Ramp.cjs.map +0 -1
- package/dist/effects/Ramp.d.ts +0 -88
- package/dist/effects/Ramp.js.map +0 -1
- package/dist/effects/SMAA.cjs +0 -7
- package/dist/effects/SMAA.cjs.map +0 -1
- package/dist/effects/SMAA.d.ts +0 -10
- package/dist/effects/SMAA.js +0 -7
- package/dist/effects/SMAA.js.map +0 -1
- package/dist/effects/SSAO.cjs +0 -37
- package/dist/effects/SSAO.cjs.map +0 -1
- package/dist/effects/SSAO.d.ts +0 -30
- package/dist/effects/SSAO.js +0 -37
- package/dist/effects/SSAO.js.map +0 -1
- package/dist/effects/SSR/index.cjs +0 -33
- package/dist/effects/SSR/index.cjs.map +0 -1
- package/dist/effects/SSR/index.d.ts +0 -55
- package/dist/effects/SSR/index.js +0 -33
- package/dist/effects/SSR/index.js.map +0 -1
- package/dist/effects/SSR/screen-space-reflections.cjs +0 -1699
- package/dist/effects/SSR/screen-space-reflections.cjs.map +0 -1
- package/dist/effects/SSR/screen-space-reflections.js +0 -1699
- package/dist/effects/SSR/screen-space-reflections.js.map +0 -1
- package/dist/effects/ScanlineEffect.cjs +0 -7
- package/dist/effects/ScanlineEffect.cjs.map +0 -1
- package/dist/effects/ScanlineEffect.d.ts +0 -9
- package/dist/effects/ScanlineEffect.js +0 -7
- package/dist/effects/ScanlineEffect.js.map +0 -1
- package/dist/effects/SelectiveBloom.cjs +0 -94
- package/dist/effects/SelectiveBloom.cjs.map +0 -1
- package/dist/effects/SelectiveBloom.d.ts +0 -20
- package/dist/effects/SelectiveBloom.js +0 -94
- package/dist/effects/SelectiveBloom.js.map +0 -1
- package/dist/effects/Sepia.cjs +0 -7
- package/dist/effects/Sepia.cjs.map +0 -1
- package/dist/effects/Sepia.d.ts +0 -9
- package/dist/effects/Sepia.js +0 -7
- package/dist/effects/Sepia.js.map +0 -1
- package/dist/effects/ShockWave.cjs +0 -7
- package/dist/effects/ShockWave.cjs.map +0 -1
- package/dist/effects/ShockWave.d.ts +0 -6
- package/dist/effects/ShockWave.js +0 -7
- package/dist/effects/ShockWave.js.map +0 -1
- package/dist/effects/Texture.cjs +0 -21
- package/dist/effects/Texture.cjs.map +0 -1
- package/dist/effects/Texture.d.ts +0 -11
- package/dist/effects/Texture.js +0 -21
- package/dist/effects/Texture.js.map +0 -1
- package/dist/effects/TiltShift.cjs +0 -7
- package/dist/effects/TiltShift.cjs.map +0 -1
- package/dist/effects/TiltShift.d.ts +0 -17
- package/dist/effects/TiltShift.js +0 -7
- package/dist/effects/TiltShift.js.map +0 -1
- package/dist/effects/TiltShift2.cjs +0 -98
- package/dist/effects/TiltShift2.cjs.map +0 -1
- package/dist/effects/TiltShift2.d.ts +0 -30
- package/dist/effects/TiltShift2.js.map +0 -1
- package/dist/effects/ToneMapping.cjs +0 -7
- package/dist/effects/ToneMapping.cjs.map +0 -1
- package/dist/effects/ToneMapping.d.ts +0 -19
- package/dist/effects/ToneMapping.js +0 -7
- package/dist/effects/ToneMapping.js.map +0 -1
- package/dist/effects/Vignette.cjs +0 -7
- package/dist/effects/Vignette.cjs.map +0 -1
- package/dist/effects/Vignette.d.ts +0 -12
- package/dist/effects/Vignette.js +0 -7
- package/dist/effects/Vignette.js.map +0 -1
- package/dist/effects/Water.cjs +0 -38
- package/dist/effects/Water.cjs.map +0 -1
- package/dist/effects/Water.d.ts +0 -15
- package/dist/effects/Water.js.map +0 -1
- package/dist/index.cjs +0 -89
- package/dist/index.cjs.map +0 -1
- package/dist/util.cjs +0 -69
- package/dist/util.cjs.map +0 -1
- package/dist/util.d.ts +0 -13
- package/dist/util.js +0 -52
- package/dist/util.js.map +0 -1
package/dist/EffectComposer.js
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { NoToneMapping, HalfFloatType } from "three";
|
|
3
|
-
import React, { createContext, forwardRef, useMemo, useEffect, useRef, useLayoutEffect, useImperativeHandle } from "react";
|
|
4
|
-
import { useThree, useFrame } from "@react-three/fiber";
|
|
5
|
-
import { EffectComposer as EffectComposer$1, RenderPass, NormalPass, DepthDownsamplingPass, Effect, EffectPass, EffectAttribute, Pass } from "postprocessing";
|
|
6
|
-
import { isWebGL2Available } from "three-stdlib";
|
|
7
|
-
const EffectComposerContext = createContext(null);
|
|
8
|
-
const isConvolution = (effect) => (effect.getAttributes() & EffectAttribute.CONVOLUTION) === EffectAttribute.CONVOLUTION;
|
|
9
|
-
const EffectComposer = React.memo(
|
|
10
|
-
forwardRef(
|
|
11
|
-
({
|
|
12
|
-
children,
|
|
13
|
-
camera: _camera,
|
|
14
|
-
scene: _scene,
|
|
15
|
-
resolutionScale,
|
|
16
|
-
enabled = true,
|
|
17
|
-
renderPriority = 1,
|
|
18
|
-
autoClear = true,
|
|
19
|
-
depthBuffer,
|
|
20
|
-
enableNormalPass,
|
|
21
|
-
stencilBuffer,
|
|
22
|
-
multisampling = 8,
|
|
23
|
-
frameBufferType = HalfFloatType
|
|
24
|
-
}, ref) => {
|
|
25
|
-
const { gl, scene: defaultScene, camera: defaultCamera, size } = useThree();
|
|
26
|
-
const scene = _scene || defaultScene;
|
|
27
|
-
const camera = _camera || defaultCamera;
|
|
28
|
-
const [composer, normalPass, downSamplingPass] = useMemo(() => {
|
|
29
|
-
const webGL2Available = isWebGL2Available();
|
|
30
|
-
const effectComposer = new EffectComposer$1(gl, {
|
|
31
|
-
depthBuffer,
|
|
32
|
-
stencilBuffer,
|
|
33
|
-
multisampling: multisampling > 0 && webGL2Available ? multisampling : 0,
|
|
34
|
-
frameBufferType
|
|
35
|
-
});
|
|
36
|
-
effectComposer.addPass(new RenderPass(scene, camera));
|
|
37
|
-
let downSamplingPass2 = null;
|
|
38
|
-
let normalPass2 = null;
|
|
39
|
-
if (enableNormalPass) {
|
|
40
|
-
normalPass2 = new NormalPass(scene, camera);
|
|
41
|
-
normalPass2.enabled = false;
|
|
42
|
-
effectComposer.addPass(normalPass2);
|
|
43
|
-
if (resolutionScale !== void 0 && webGL2Available) {
|
|
44
|
-
downSamplingPass2 = new DepthDownsamplingPass({ normalBuffer: normalPass2.texture, resolutionScale });
|
|
45
|
-
downSamplingPass2.enabled = false;
|
|
46
|
-
effectComposer.addPass(downSamplingPass2);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return [effectComposer, normalPass2, downSamplingPass2];
|
|
50
|
-
}, [
|
|
51
|
-
camera,
|
|
52
|
-
gl,
|
|
53
|
-
depthBuffer,
|
|
54
|
-
stencilBuffer,
|
|
55
|
-
multisampling,
|
|
56
|
-
frameBufferType,
|
|
57
|
-
scene,
|
|
58
|
-
enableNormalPass,
|
|
59
|
-
resolutionScale
|
|
60
|
-
]);
|
|
61
|
-
useEffect(() => composer == null ? void 0 : composer.setSize(size.width, size.height), [composer, size]);
|
|
62
|
-
useFrame(
|
|
63
|
-
(_, delta) => {
|
|
64
|
-
if (enabled) {
|
|
65
|
-
const currentAutoClear = gl.autoClear;
|
|
66
|
-
gl.autoClear = autoClear;
|
|
67
|
-
if (stencilBuffer && !autoClear)
|
|
68
|
-
gl.clearStencil();
|
|
69
|
-
composer.render(delta);
|
|
70
|
-
gl.autoClear = currentAutoClear;
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
enabled ? renderPriority : 0
|
|
74
|
-
);
|
|
75
|
-
const group = useRef(null);
|
|
76
|
-
useLayoutEffect(() => {
|
|
77
|
-
var _a;
|
|
78
|
-
const passes = [];
|
|
79
|
-
const groupInstance = (_a = group.current) == null ? void 0 : _a.__r3f;
|
|
80
|
-
if (groupInstance && composer) {
|
|
81
|
-
const children2 = groupInstance.objects;
|
|
82
|
-
for (let i = 0; i < children2.length; i++) {
|
|
83
|
-
const child = children2[i];
|
|
84
|
-
if (child instanceof Effect) {
|
|
85
|
-
const effects = [child];
|
|
86
|
-
if (!isConvolution(child)) {
|
|
87
|
-
let next = null;
|
|
88
|
-
while ((next = children2[i + 1]) instanceof Effect) {
|
|
89
|
-
if (isConvolution(next))
|
|
90
|
-
break;
|
|
91
|
-
effects.push(next);
|
|
92
|
-
i++;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
const pass = new EffectPass(camera, ...effects);
|
|
96
|
-
passes.push(pass);
|
|
97
|
-
} else if (child instanceof Pass) {
|
|
98
|
-
passes.push(child);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
for (const pass of passes)
|
|
102
|
-
composer == null ? void 0 : composer.addPass(pass);
|
|
103
|
-
if (normalPass)
|
|
104
|
-
normalPass.enabled = true;
|
|
105
|
-
if (downSamplingPass)
|
|
106
|
-
downSamplingPass.enabled = true;
|
|
107
|
-
}
|
|
108
|
-
return () => {
|
|
109
|
-
for (const pass of passes)
|
|
110
|
-
composer == null ? void 0 : composer.removePass(pass);
|
|
111
|
-
if (normalPass)
|
|
112
|
-
normalPass.enabled = false;
|
|
113
|
-
if (downSamplingPass)
|
|
114
|
-
downSamplingPass.enabled = false;
|
|
115
|
-
};
|
|
116
|
-
}, [composer, children, camera, normalPass, downSamplingPass]);
|
|
117
|
-
useEffect(() => {
|
|
118
|
-
const currentTonemapping = gl.toneMapping;
|
|
119
|
-
gl.toneMapping = NoToneMapping;
|
|
120
|
-
return () => {
|
|
121
|
-
gl.toneMapping = currentTonemapping;
|
|
122
|
-
};
|
|
123
|
-
}, [gl]);
|
|
124
|
-
const state = useMemo(
|
|
125
|
-
() => ({ composer, normalPass, downSamplingPass, resolutionScale, camera, scene }),
|
|
126
|
-
[composer, normalPass, downSamplingPass, resolutionScale, camera, scene]
|
|
127
|
-
);
|
|
128
|
-
useImperativeHandle(ref, () => composer, [composer]);
|
|
129
|
-
return /* @__PURE__ */ jsx(EffectComposerContext.Provider, { value: state, children: /* @__PURE__ */ jsx("group", { ref: group, children }) });
|
|
130
|
-
}
|
|
131
|
-
)
|
|
132
|
-
);
|
|
133
|
-
export {
|
|
134
|
-
EffectComposer,
|
|
135
|
-
EffectComposerContext
|
|
136
|
-
};
|
|
137
|
-
//# sourceMappingURL=EffectComposer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EffectComposer.js","sources":["../src/EffectComposer.tsx"],"sourcesContent":["import type { TextureDataType } from 'three'\nimport { HalfFloatType, NoToneMapping } from 'three'\nimport React, {\n forwardRef,\n useMemo,\n useEffect,\n useLayoutEffect,\n createContext,\n useRef,\n useImperativeHandle,\n} from 'react'\nimport { useThree, useFrame } from '@react-three/fiber'\nimport {\n EffectComposer as EffectComposerImpl,\n RenderPass,\n EffectPass,\n NormalPass,\n // @ts-ignore\n DepthDownsamplingPass,\n Effect,\n Pass,\n EffectAttribute,\n} from 'postprocessing'\nimport { isWebGL2Available } from 'three-stdlib'\n\nexport const EffectComposerContext = createContext<{\n composer: EffectComposerImpl\n normalPass: NormalPass | null\n downSamplingPass: DepthDownsamplingPass | null\n camera: THREE.Camera\n scene: THREE.Scene\n resolutionScale?: number\n}>(null!)\n\nexport type EffectComposerProps = {\n enabled?: boolean\n children: JSX.Element | JSX.Element[]\n depthBuffer?: boolean\n /** Only used for SSGI currently, leave it disabled for everything else unless it's needed */\n enableNormalPass?: boolean\n stencilBuffer?: boolean\n autoClear?: boolean\n resolutionScale?: number\n multisampling?: number\n frameBufferType?: TextureDataType\n renderPriority?: number\n camera?: THREE.Camera\n scene?: THREE.Scene\n}\n\nconst isConvolution = (effect: Effect): boolean =>\n (effect.getAttributes() & EffectAttribute.CONVOLUTION) === EffectAttribute.CONVOLUTION\n\nexport const EffectComposer = React.memo(\n forwardRef<EffectComposerImpl, EffectComposerProps>(\n (\n {\n children,\n camera: _camera,\n scene: _scene,\n resolutionScale,\n enabled = true,\n renderPriority = 1,\n autoClear = true,\n depthBuffer,\n enableNormalPass,\n stencilBuffer,\n multisampling = 8,\n frameBufferType = HalfFloatType,\n },\n ref\n ) => {\n const { gl, scene: defaultScene, camera: defaultCamera, size } = useThree()\n const scene = _scene || defaultScene\n const camera = _camera || defaultCamera\n\n const [composer, normalPass, downSamplingPass] = useMemo(() => {\n const webGL2Available = isWebGL2Available()\n // Initialize composer\n const effectComposer = new EffectComposerImpl(gl, {\n depthBuffer,\n stencilBuffer,\n multisampling: multisampling > 0 && webGL2Available ? multisampling : 0,\n frameBufferType,\n })\n\n // Add render pass\n effectComposer.addPass(new RenderPass(scene, camera))\n\n // Create normal pass\n let downSamplingPass = null\n let normalPass = null\n if (enableNormalPass) {\n normalPass = new NormalPass(scene, camera)\n normalPass.enabled = false\n effectComposer.addPass(normalPass)\n if (resolutionScale !== undefined && webGL2Available) {\n downSamplingPass = new DepthDownsamplingPass({ normalBuffer: normalPass.texture, resolutionScale })\n downSamplingPass.enabled = false\n effectComposer.addPass(downSamplingPass)\n }\n }\n\n return [effectComposer, normalPass, downSamplingPass]\n }, [\n camera,\n gl,\n depthBuffer,\n stencilBuffer,\n multisampling,\n frameBufferType,\n scene,\n enableNormalPass,\n resolutionScale,\n ])\n\n useEffect(() => composer?.setSize(size.width, size.height), [composer, size])\n useFrame(\n (_, delta) => {\n if (enabled) {\n const currentAutoClear = gl.autoClear\n gl.autoClear = autoClear\n if (stencilBuffer && !autoClear) gl.clearStencil()\n composer.render(delta)\n gl.autoClear = currentAutoClear\n }\n },\n enabled ? renderPriority : 0\n )\n\n const group = useRef(null)\n useLayoutEffect(() => {\n const passes: Pass[] = []\n\n // TODO: rewrite all of this with R3F v9\n const groupInstance = (group.current as any)?.__r3f as { objects: unknown[] }\n\n if (groupInstance && composer) {\n const children = groupInstance.objects\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child instanceof Effect) {\n const effects: Effect[] = [child]\n\n if (!isConvolution(child)) {\n let next: unknown = null\n while ((next = children[i + 1]) instanceof Effect) {\n if (isConvolution(next)) break\n effects.push(next)\n i++\n }\n }\n\n const pass = new EffectPass(camera, ...effects)\n passes.push(pass)\n } else if (child instanceof Pass) {\n passes.push(child)\n }\n }\n\n for (const pass of passes) composer?.addPass(pass)\n\n if (normalPass) normalPass.enabled = true\n if (downSamplingPass) downSamplingPass.enabled = true\n }\n\n return () => {\n for (const pass of passes) composer?.removePass(pass)\n if (normalPass) normalPass.enabled = false\n if (downSamplingPass) downSamplingPass.enabled = false\n }\n }, [composer, children, camera, normalPass, downSamplingPass])\n\n // Disable tone mapping because threejs disallows tonemapping on render targets\n useEffect(() => {\n const currentTonemapping = gl.toneMapping\n gl.toneMapping = NoToneMapping\n return () => {\n gl.toneMapping = currentTonemapping\n }\n }, [gl])\n\n // Memoize state, otherwise it would trigger all consumers on every render\n const state = useMemo(\n () => ({ composer, normalPass, downSamplingPass, resolutionScale, camera, scene }),\n [composer, normalPass, downSamplingPass, resolutionScale, camera, scene]\n )\n\n // Expose the composer\n useImperativeHandle(ref, () => composer, [composer])\n\n return (\n <EffectComposerContext.Provider value={state}>\n <group ref={group}>{children}</group>\n </EffectComposerContext.Provider>\n )\n }\n )\n)\n"],"names":["EffectComposerImpl","downSamplingPass","normalPass","children"],"mappings":"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"}
|
package/dist/Selection.cjs
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const React = require("react");
|
|
5
|
-
const selectionContext = React.createContext(null);
|
|
6
|
-
function Selection({ children, enabled = true }) {
|
|
7
|
-
const [selected, select] = React.useState([]);
|
|
8
|
-
const value = React.useMemo(() => ({ selected, select, enabled }), [selected, select, enabled]);
|
|
9
|
-
return /* @__PURE__ */ jsxRuntime.jsx(selectionContext.Provider, { value, children });
|
|
10
|
-
}
|
|
11
|
-
function Select({ enabled = false, children, ...props }) {
|
|
12
|
-
const group = React.useRef(null);
|
|
13
|
-
const api = React.useContext(selectionContext);
|
|
14
|
-
React.useEffect(() => {
|
|
15
|
-
if (api && enabled) {
|
|
16
|
-
let changed = false;
|
|
17
|
-
const current = [];
|
|
18
|
-
group.current.traverse((o) => {
|
|
19
|
-
o.type === "Mesh" && current.push(o);
|
|
20
|
-
if (api.selected.indexOf(o) === -1)
|
|
21
|
-
changed = true;
|
|
22
|
-
});
|
|
23
|
-
if (changed) {
|
|
24
|
-
api.select((state) => [...state, ...current]);
|
|
25
|
-
return () => {
|
|
26
|
-
api.select((state) => state.filter((selected) => !current.includes(selected)));
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}, [enabled, children, api]);
|
|
31
|
-
return /* @__PURE__ */ jsxRuntime.jsx("group", { ref: group, ...props, children });
|
|
32
|
-
}
|
|
33
|
-
exports.Select = Select;
|
|
34
|
-
exports.Selection = Selection;
|
|
35
|
-
exports.selectionContext = selectionContext;
|
|
36
|
-
//# sourceMappingURL=Selection.cjs.map
|
package/dist/Selection.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Selection.cjs","sources":["../src/Selection.tsx"],"sourcesContent":["import * as THREE from 'three'\nimport React, { createContext, useState, useContext, useEffect, useRef, useMemo } from 'react'\n\nexport type Api = {\n selected: THREE.Object3D[]\n select: React.Dispatch<React.SetStateAction<THREE.Object3D[]>>\n enabled: boolean\n}\nexport type SelectApi = JSX.IntrinsicElements['group'] & {\n enabled?: boolean\n}\n\nexport const selectionContext = createContext<Api | null>(null)\n\nexport function Selection({ children, enabled = true }: { enabled?: boolean; children: React.ReactNode }) {\n const [selected, select] = useState<THREE.Object3D[]>([])\n const value = useMemo(() => ({ selected, select, enabled }), [selected, select, enabled])\n return <selectionContext.Provider value={value}>{children}</selectionContext.Provider>\n}\n\nexport function Select({ enabled = false, children, ...props }: SelectApi) {\n const group = useRef<THREE.Group>(null!)\n const api = useContext(selectionContext)\n useEffect(() => {\n if (api && enabled) {\n let changed = false\n const current: THREE.Object3D<THREE.Event>[] = []\n group.current.traverse((o) => {\n o.type === 'Mesh' && current.push(o)\n if (api.selected.indexOf(o) === -1) changed = true\n })\n if (changed) {\n api.select((state) => [...state, ...current])\n return () => {\n api.select((state) => state.filter((selected) => !current.includes(selected)))\n }\n }\n }\n }, [enabled, children, api])\n return (\n <group ref={group} {...props}>\n {children}\n </group>\n )\n}\n"],"names":["createContext","useState","useMemo","jsx","useRef","useContext","useEffect"],"mappings":";;;;AAYa,MAAA,mBAAmBA,oBAA0B,IAAI;AAEvD,SAAS,UAAU,EAAE,UAAU,UAAU,QAA0D;AACxG,QAAM,CAAC,UAAU,MAAM,IAAIC,MAAA,SAA2B,CAAE,CAAA;AACxD,QAAM,QAAQC,MAAAA,QAAQ,OAAO,EAAE,UAAU,QAAQ,QAAQ,IAAI,CAAC,UAAU,QAAQ,OAAO,CAAC;AACxF,SAAQC,2BAAAA,IAAA,iBAAiB,UAAjB,EAA0B,OAAe,SAAS,CAAA;AAC5D;AAEO,SAAS,OAAO,EAAE,UAAU,OAAO,UAAU,GAAG,SAAoB;AACnE,QAAA,QAAQC,aAAoB,IAAK;AACjC,QAAA,MAAMC,iBAAW,gBAAgB;AACvCC,QAAAA,UAAU,MAAM;AACd,QAAI,OAAO,SAAS;AAClB,UAAI,UAAU;AACd,YAAM,UAAyC,CAAA;AACzC,YAAA,QAAQ,SAAS,CAAC,MAAM;AAC5B,UAAE,SAAS,UAAU,QAAQ,KAAK,CAAC;AACnC,YAAI,IAAI,SAAS,QAAQ,CAAC,MAAM;AAAc,oBAAA;AAAA,MAAA,CAC/C;AACD,UAAI,SAAS;AACP,YAAA,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC;AAC5C,eAAO,MAAM;AACX,cAAI,OAAO,CAAC,UAAU,MAAM,OAAO,CAAC,aAAa,CAAC,QAAQ,SAAS,QAAQ,CAAC,CAAC;AAAA,QAAA;AAAA,MAEjF;AAAA,IACF;AAAA,EACC,GAAA,CAAC,SAAS,UAAU,GAAG,CAAC;AAC3B,wCACG,SAAM,EAAA,KAAK,OAAQ,GAAG,OACpB,SACH,CAAA;AAEJ;;;;"}
|
package/dist/Selection.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
export type Api = {
|
|
4
|
-
selected: THREE.Object3D[];
|
|
5
|
-
select: React.Dispatch<React.SetStateAction<THREE.Object3D[]>>;
|
|
6
|
-
enabled: boolean;
|
|
7
|
-
};
|
|
8
|
-
export type SelectApi = JSX.IntrinsicElements['group'] & {
|
|
9
|
-
enabled?: boolean;
|
|
10
|
-
};
|
|
11
|
-
export declare const selectionContext: React.Context<Api | null>;
|
|
12
|
-
export declare function Selection({ children, enabled }: {
|
|
13
|
-
enabled?: boolean;
|
|
14
|
-
children: React.ReactNode;
|
|
15
|
-
}): JSX.Element;
|
|
16
|
-
export declare function Select({ enabled, children, ...props }: SelectApi): JSX.Element;
|
package/dist/Selection.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useState, useMemo, useRef, useContext, useEffect } from "react";
|
|
3
|
-
const selectionContext = createContext(null);
|
|
4
|
-
function Selection({ children, enabled = true }) {
|
|
5
|
-
const [selected, select] = useState([]);
|
|
6
|
-
const value = useMemo(() => ({ selected, select, enabled }), [selected, select, enabled]);
|
|
7
|
-
return /* @__PURE__ */ jsx(selectionContext.Provider, { value, children });
|
|
8
|
-
}
|
|
9
|
-
function Select({ enabled = false, children, ...props }) {
|
|
10
|
-
const group = useRef(null);
|
|
11
|
-
const api = useContext(selectionContext);
|
|
12
|
-
useEffect(() => {
|
|
13
|
-
if (api && enabled) {
|
|
14
|
-
let changed = false;
|
|
15
|
-
const current = [];
|
|
16
|
-
group.current.traverse((o) => {
|
|
17
|
-
o.type === "Mesh" && current.push(o);
|
|
18
|
-
if (api.selected.indexOf(o) === -1)
|
|
19
|
-
changed = true;
|
|
20
|
-
});
|
|
21
|
-
if (changed) {
|
|
22
|
-
api.select((state) => [...state, ...current]);
|
|
23
|
-
return () => {
|
|
24
|
-
api.select((state) => state.filter((selected) => !current.includes(selected)));
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}, [enabled, children, api]);
|
|
29
|
-
return /* @__PURE__ */ jsx("group", { ref: group, ...props, children });
|
|
30
|
-
}
|
|
31
|
-
export {
|
|
32
|
-
Select,
|
|
33
|
-
Selection,
|
|
34
|
-
selectionContext
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=Selection.js.map
|
package/dist/Selection.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Selection.js","sources":["../src/Selection.tsx"],"sourcesContent":["import * as THREE from 'three'\nimport React, { createContext, useState, useContext, useEffect, useRef, useMemo } from 'react'\n\nexport type Api = {\n selected: THREE.Object3D[]\n select: React.Dispatch<React.SetStateAction<THREE.Object3D[]>>\n enabled: boolean\n}\nexport type SelectApi = JSX.IntrinsicElements['group'] & {\n enabled?: boolean\n}\n\nexport const selectionContext = createContext<Api | null>(null)\n\nexport function Selection({ children, enabled = true }: { enabled?: boolean; children: React.ReactNode }) {\n const [selected, select] = useState<THREE.Object3D[]>([])\n const value = useMemo(() => ({ selected, select, enabled }), [selected, select, enabled])\n return <selectionContext.Provider value={value}>{children}</selectionContext.Provider>\n}\n\nexport function Select({ enabled = false, children, ...props }: SelectApi) {\n const group = useRef<THREE.Group>(null!)\n const api = useContext(selectionContext)\n useEffect(() => {\n if (api && enabled) {\n let changed = false\n const current: THREE.Object3D<THREE.Event>[] = []\n group.current.traverse((o) => {\n o.type === 'Mesh' && current.push(o)\n if (api.selected.indexOf(o) === -1) changed = true\n })\n if (changed) {\n api.select((state) => [...state, ...current])\n return () => {\n api.select((state) => state.filter((selected) => !current.includes(selected)))\n }\n }\n }\n }, [enabled, children, api])\n return (\n <group ref={group} {...props}>\n {children}\n </group>\n )\n}\n"],"names":[],"mappings":";;AAYa,MAAA,mBAAmB,cAA0B,IAAI;AAEvD,SAAS,UAAU,EAAE,UAAU,UAAU,QAA0D;AACxG,QAAM,CAAC,UAAU,MAAM,IAAI,SAA2B,CAAE,CAAA;AACxD,QAAM,QAAQ,QAAQ,OAAO,EAAE,UAAU,QAAQ,QAAQ,IAAI,CAAC,UAAU,QAAQ,OAAO,CAAC;AACxF,SAAQ,oBAAA,iBAAiB,UAAjB,EAA0B,OAAe,SAAS,CAAA;AAC5D;AAEO,SAAS,OAAO,EAAE,UAAU,OAAO,UAAU,GAAG,SAAoB;AACnE,QAAA,QAAQ,OAAoB,IAAK;AACjC,QAAA,MAAM,WAAW,gBAAgB;AACvC,YAAU,MAAM;AACd,QAAI,OAAO,SAAS;AAClB,UAAI,UAAU;AACd,YAAM,UAAyC,CAAA;AACzC,YAAA,QAAQ,SAAS,CAAC,MAAM;AAC5B,UAAE,SAAS,UAAU,QAAQ,KAAK,CAAC;AACnC,YAAI,IAAI,SAAS,QAAQ,CAAC,MAAM;AAAc,oBAAA;AAAA,MAAA,CAC/C;AACD,UAAI,SAAS;AACP,YAAA,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC;AAC5C,eAAO,MAAM;AACX,cAAI,OAAO,CAAC,UAAU,MAAM,OAAO,CAAC,aAAa,CAAC,QAAQ,SAAS,QAAQ,CAAC,CAAC;AAAA,QAAA;AAAA,MAEjF;AAAA,IACF;AAAA,EACC,GAAA,CAAC,SAAS,UAAU,GAAG,CAAC;AAC3B,6BACG,SAAM,EAAA,KAAK,OAAQ,GAAG,OACpB,SACH,CAAA;AAEJ;"}
|
package/dist/compat.cjs
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const THREE = require("three");
|
|
4
|
-
function _interopNamespaceDefault(e) {
|
|
5
|
-
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
6
|
-
if (e) {
|
|
7
|
-
for (const k in e) {
|
|
8
|
-
if (k !== "default") {
|
|
9
|
-
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
10
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: () => e[k]
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
n.default = e;
|
|
18
|
-
return Object.freeze(n);
|
|
19
|
-
}
|
|
20
|
-
const THREE__namespace = /* @__PURE__ */ _interopNamespaceDefault(THREE);
|
|
21
|
-
const version = /* @__PURE__ */ (() => parseInt(THREE__namespace.REVISION.replace(/\D+/g, "")))();
|
|
22
|
-
const WebGLMultipleRenderTargets = version >= 162 ? class extends THREE__namespace.WebGLRenderTarget {
|
|
23
|
-
constructor(width = 1, height = 1, count = 1, options = {}) {
|
|
24
|
-
super(width, height, { ...options, count });
|
|
25
|
-
this.isWebGLMultipleRenderTargets = true;
|
|
26
|
-
}
|
|
27
|
-
get texture() {
|
|
28
|
-
return this.textures;
|
|
29
|
-
}
|
|
30
|
-
} : class extends THREE__namespace.WebGLRenderTarget {
|
|
31
|
-
constructor(width = 1, height = 1, count = 1, options = {}) {
|
|
32
|
-
super(width, height, options);
|
|
33
|
-
this.isWebGLMultipleRenderTargets = true;
|
|
34
|
-
const texture = this.texture;
|
|
35
|
-
this.texture = [];
|
|
36
|
-
for (let i = 0; i < count; i++) {
|
|
37
|
-
this.texture[i] = texture.clone();
|
|
38
|
-
this.texture[i].isRenderTargetTexture = true;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
setSize(width, height, depth = 1) {
|
|
42
|
-
if (this.width !== width || this.height !== height || this.depth !== depth) {
|
|
43
|
-
this.width = width;
|
|
44
|
-
this.height = height;
|
|
45
|
-
this.depth = depth;
|
|
46
|
-
for (let i = 0, il = this.texture.length; i < il; i++) {
|
|
47
|
-
this.texture[i].image.width = width;
|
|
48
|
-
this.texture[i].image.height = height;
|
|
49
|
-
this.texture[i].image.depth = depth;
|
|
50
|
-
}
|
|
51
|
-
this.dispose();
|
|
52
|
-
}
|
|
53
|
-
this.viewport.set(0, 0, width, height);
|
|
54
|
-
this.scissor.set(0, 0, width, height);
|
|
55
|
-
}
|
|
56
|
-
copy(source) {
|
|
57
|
-
this.dispose();
|
|
58
|
-
this.width = source.width;
|
|
59
|
-
this.height = source.height;
|
|
60
|
-
this.depth = source.depth;
|
|
61
|
-
this.scissor.copy(source.scissor);
|
|
62
|
-
this.scissorTest = source.scissorTest;
|
|
63
|
-
this.viewport.copy(source.viewport);
|
|
64
|
-
this.depthBuffer = source.depthBuffer;
|
|
65
|
-
this.stencilBuffer = source.stencilBuffer;
|
|
66
|
-
if (source.depthTexture !== null)
|
|
67
|
-
this.depthTexture = source.depthTexture.clone();
|
|
68
|
-
this.texture.length = 0;
|
|
69
|
-
for (let i = 0, il = source.texture.length; i < il; i++) {
|
|
70
|
-
this.texture[i] = source.texture[i].clone();
|
|
71
|
-
this.texture[i].isRenderTargetTexture = true;
|
|
72
|
-
}
|
|
73
|
-
return this;
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
exports.WebGLMultipleRenderTargets = WebGLMultipleRenderTargets;
|
|
77
|
-
//# sourceMappingURL=compat.cjs.map
|
package/dist/compat.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compat.cjs","sources":["../src/compat.js"],"sourcesContent":["import * as THREE from 'three'\n\nconst version = /* @__PURE__ */ (() => parseInt(THREE.REVISION.replace(/\\D+/g, '')))()\n\n// NOTE: WebGLMultipleRenderTargets is removed since r172, so we implement it ourselves.\n// https://github.com/mrdoob/three.js/pull/26427\nexport const WebGLMultipleRenderTargets =\n version >= 162\n ? class extends THREE.WebGLRenderTarget {\n constructor(width = 1, height = 1, count = 1, options = {}) {\n super(width, height, { ...options, count })\n\n this.isWebGLMultipleRenderTargets = true\n }\n\n get texture() {\n return this.textures\n }\n }\n : class extends THREE.WebGLRenderTarget {\n constructor(width = 1, height = 1, count = 1, options = {}) {\n super(width, height, options)\n\n this.isWebGLMultipleRenderTargets = true\n\n const texture = this.texture\n\n this.texture = []\n\n for (let i = 0; i < count; i++) {\n this.texture[i] = texture.clone()\n this.texture[i].isRenderTargetTexture = true\n }\n }\n\n setSize(width, height, depth = 1) {\n if (this.width !== width || this.height !== height || this.depth !== depth) {\n this.width = width\n this.height = height\n this.depth = depth\n\n for (let i = 0, il = this.texture.length; i < il; i++) {\n this.texture[i].image.width = width\n this.texture[i].image.height = height\n this.texture[i].image.depth = depth\n }\n\n this.dispose()\n }\n\n this.viewport.set(0, 0, width, height)\n this.scissor.set(0, 0, width, height)\n }\n\n copy(source) {\n this.dispose()\n\n this.width = source.width\n this.height = source.height\n this.depth = source.depth\n\n this.scissor.copy(source.scissor)\n this.scissorTest = source.scissorTest\n\n this.viewport.copy(source.viewport)\n\n this.depthBuffer = source.depthBuffer\n this.stencilBuffer = source.stencilBuffer\n\n if (source.depthTexture !== null) this.depthTexture = source.depthTexture.clone()\n\n this.texture.length = 0\n\n for (let i = 0, il = source.texture.length; i < il; i++) {\n this.texture[i] = source.texture[i].clone()\n this.texture[i].isRenderTargetTexture = true\n }\n\n return this\n }\n }\n"],"names":["THREE"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEA,MAAM,UAA2B,uBAAM,SAASA,iBAAM,SAAS,QAAQ,QAAQ,EAAE,CAAC,GAAI;AAI1E,MAAC,6BACX,WAAW,MACP,cAAcA,iBAAM,kBAAkB;AAAA,EACpC,YAAY,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,IAAI;AAC1D,UAAM,OAAO,QAAQ,EAAE,GAAG,SAAS,MAAK,CAAE;AAE1C,SAAK,+BAA+B;AAAA,EACrC;AAAA,EAED,IAAI,UAAU;AACZ,WAAO,KAAK;AAAA,EACb;AACF,IACD,cAAcA,iBAAM,kBAAkB;AAAA,EACpC,YAAY,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,IAAI;AAC1D,UAAM,OAAO,QAAQ,OAAO;AAE5B,SAAK,+BAA+B;AAEpC,UAAM,UAAU,KAAK;AAErB,SAAK,UAAU,CAAE;AAEjB,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,WAAK,QAAQ,CAAC,IAAI,QAAQ,MAAO;AACjC,WAAK,QAAQ,CAAC,EAAE,wBAAwB;AAAA,IACzC;AAAA,EACF;AAAA,EAED,QAAQ,OAAO,QAAQ,QAAQ,GAAG;AAChC,QAAI,KAAK,UAAU,SAAS,KAAK,WAAW,UAAU,KAAK,UAAU,OAAO;AAC1E,WAAK,QAAQ;AACb,WAAK,SAAS;AACd,WAAK,QAAQ;AAEb,eAAS,IAAI,GAAG,KAAK,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;AACrD,aAAK,QAAQ,CAAC,EAAE,MAAM,QAAQ;AAC9B,aAAK,QAAQ,CAAC,EAAE,MAAM,SAAS;AAC/B,aAAK,QAAQ,CAAC,EAAE,MAAM,QAAQ;AAAA,MAC/B;AAED,WAAK,QAAS;AAAA,IACf;AAED,SAAK,SAAS,IAAI,GAAG,GAAG,OAAO,MAAM;AACrC,SAAK,QAAQ,IAAI,GAAG,GAAG,OAAO,MAAM;AAAA,EACrC;AAAA,EAED,KAAK,QAAQ;AACX,SAAK,QAAS;AAEd,SAAK,QAAQ,OAAO;AACpB,SAAK,SAAS,OAAO;AACrB,SAAK,QAAQ,OAAO;AAEpB,SAAK,QAAQ,KAAK,OAAO,OAAO;AAChC,SAAK,cAAc,OAAO;AAE1B,SAAK,SAAS,KAAK,OAAO,QAAQ;AAElC,SAAK,cAAc,OAAO;AAC1B,SAAK,gBAAgB,OAAO;AAE5B,QAAI,OAAO,iBAAiB;AAAM,WAAK,eAAe,OAAO,aAAa,MAAO;AAEjF,SAAK,QAAQ,SAAS;AAEtB,aAAS,IAAI,GAAG,KAAK,OAAO,QAAQ,QAAQ,IAAI,IAAI,KAAK;AACvD,WAAK,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,EAAE,MAAO;AAC3C,WAAK,QAAQ,CAAC,EAAE,wBAAwB;AAAA,IACzC;AAED,WAAO;AAAA,EACR;AACT;;"}
|
package/dist/compat.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import * as THREE from "three";
|
|
2
|
-
const version = /* @__PURE__ */ (() => parseInt(THREE.REVISION.replace(/\D+/g, "")))();
|
|
3
|
-
const WebGLMultipleRenderTargets = version >= 162 ? class extends THREE.WebGLRenderTarget {
|
|
4
|
-
constructor(width = 1, height = 1, count = 1, options = {}) {
|
|
5
|
-
super(width, height, { ...options, count });
|
|
6
|
-
this.isWebGLMultipleRenderTargets = true;
|
|
7
|
-
}
|
|
8
|
-
get texture() {
|
|
9
|
-
return this.textures;
|
|
10
|
-
}
|
|
11
|
-
} : class extends THREE.WebGLRenderTarget {
|
|
12
|
-
constructor(width = 1, height = 1, count = 1, options = {}) {
|
|
13
|
-
super(width, height, options);
|
|
14
|
-
this.isWebGLMultipleRenderTargets = true;
|
|
15
|
-
const texture = this.texture;
|
|
16
|
-
this.texture = [];
|
|
17
|
-
for (let i = 0; i < count; i++) {
|
|
18
|
-
this.texture[i] = texture.clone();
|
|
19
|
-
this.texture[i].isRenderTargetTexture = true;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
setSize(width, height, depth = 1) {
|
|
23
|
-
if (this.width !== width || this.height !== height || this.depth !== depth) {
|
|
24
|
-
this.width = width;
|
|
25
|
-
this.height = height;
|
|
26
|
-
this.depth = depth;
|
|
27
|
-
for (let i = 0, il = this.texture.length; i < il; i++) {
|
|
28
|
-
this.texture[i].image.width = width;
|
|
29
|
-
this.texture[i].image.height = height;
|
|
30
|
-
this.texture[i].image.depth = depth;
|
|
31
|
-
}
|
|
32
|
-
this.dispose();
|
|
33
|
-
}
|
|
34
|
-
this.viewport.set(0, 0, width, height);
|
|
35
|
-
this.scissor.set(0, 0, width, height);
|
|
36
|
-
}
|
|
37
|
-
copy(source) {
|
|
38
|
-
this.dispose();
|
|
39
|
-
this.width = source.width;
|
|
40
|
-
this.height = source.height;
|
|
41
|
-
this.depth = source.depth;
|
|
42
|
-
this.scissor.copy(source.scissor);
|
|
43
|
-
this.scissorTest = source.scissorTest;
|
|
44
|
-
this.viewport.copy(source.viewport);
|
|
45
|
-
this.depthBuffer = source.depthBuffer;
|
|
46
|
-
this.stencilBuffer = source.stencilBuffer;
|
|
47
|
-
if (source.depthTexture !== null)
|
|
48
|
-
this.depthTexture = source.depthTexture.clone();
|
|
49
|
-
this.texture.length = 0;
|
|
50
|
-
for (let i = 0, il = source.texture.length; i < il; i++) {
|
|
51
|
-
this.texture[i] = source.texture[i].clone();
|
|
52
|
-
this.texture[i].isRenderTargetTexture = true;
|
|
53
|
-
}
|
|
54
|
-
return this;
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
export {
|
|
58
|
-
WebGLMultipleRenderTargets
|
|
59
|
-
};
|
|
60
|
-
//# sourceMappingURL=compat.js.map
|
package/dist/compat.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compat.js","sources":["../src/compat.js"],"sourcesContent":["import * as THREE from 'three'\n\nconst version = /* @__PURE__ */ (() => parseInt(THREE.REVISION.replace(/\\D+/g, '')))()\n\n// NOTE: WebGLMultipleRenderTargets is removed since r172, so we implement it ourselves.\n// https://github.com/mrdoob/three.js/pull/26427\nexport const WebGLMultipleRenderTargets =\n version >= 162\n ? class extends THREE.WebGLRenderTarget {\n constructor(width = 1, height = 1, count = 1, options = {}) {\n super(width, height, { ...options, count })\n\n this.isWebGLMultipleRenderTargets = true\n }\n\n get texture() {\n return this.textures\n }\n }\n : class extends THREE.WebGLRenderTarget {\n constructor(width = 1, height = 1, count = 1, options = {}) {\n super(width, height, options)\n\n this.isWebGLMultipleRenderTargets = true\n\n const texture = this.texture\n\n this.texture = []\n\n for (let i = 0; i < count; i++) {\n this.texture[i] = texture.clone()\n this.texture[i].isRenderTargetTexture = true\n }\n }\n\n setSize(width, height, depth = 1) {\n if (this.width !== width || this.height !== height || this.depth !== depth) {\n this.width = width\n this.height = height\n this.depth = depth\n\n for (let i = 0, il = this.texture.length; i < il; i++) {\n this.texture[i].image.width = width\n this.texture[i].image.height = height\n this.texture[i].image.depth = depth\n }\n\n this.dispose()\n }\n\n this.viewport.set(0, 0, width, height)\n this.scissor.set(0, 0, width, height)\n }\n\n copy(source) {\n this.dispose()\n\n this.width = source.width\n this.height = source.height\n this.depth = source.depth\n\n this.scissor.copy(source.scissor)\n this.scissorTest = source.scissorTest\n\n this.viewport.copy(source.viewport)\n\n this.depthBuffer = source.depthBuffer\n this.stencilBuffer = source.stencilBuffer\n\n if (source.depthTexture !== null) this.depthTexture = source.depthTexture.clone()\n\n this.texture.length = 0\n\n for (let i = 0, il = source.texture.length; i < il; i++) {\n this.texture[i] = source.texture[i].clone()\n this.texture[i].isRenderTargetTexture = true\n }\n\n return this\n }\n }\n"],"names":[],"mappings":";AAEA,MAAM,UAA2B,uBAAM,SAAS,MAAM,SAAS,QAAQ,QAAQ,EAAE,CAAC,GAAI;AAI1E,MAAC,6BACX,WAAW,MACP,cAAc,MAAM,kBAAkB;AAAA,EACpC,YAAY,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,IAAI;AAC1D,UAAM,OAAO,QAAQ,EAAE,GAAG,SAAS,MAAK,CAAE;AAE1C,SAAK,+BAA+B;AAAA,EACrC;AAAA,EAED,IAAI,UAAU;AACZ,WAAO,KAAK;AAAA,EACb;AACF,IACD,cAAc,MAAM,kBAAkB;AAAA,EACpC,YAAY,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,IAAI;AAC1D,UAAM,OAAO,QAAQ,OAAO;AAE5B,SAAK,+BAA+B;AAEpC,UAAM,UAAU,KAAK;AAErB,SAAK,UAAU,CAAE;AAEjB,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,WAAK,QAAQ,CAAC,IAAI,QAAQ,MAAO;AACjC,WAAK,QAAQ,CAAC,EAAE,wBAAwB;AAAA,IACzC;AAAA,EACF;AAAA,EAED,QAAQ,OAAO,QAAQ,QAAQ,GAAG;AAChC,QAAI,KAAK,UAAU,SAAS,KAAK,WAAW,UAAU,KAAK,UAAU,OAAO;AAC1E,WAAK,QAAQ;AACb,WAAK,SAAS;AACd,WAAK,QAAQ;AAEb,eAAS,IAAI,GAAG,KAAK,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;AACrD,aAAK,QAAQ,CAAC,EAAE,MAAM,QAAQ;AAC9B,aAAK,QAAQ,CAAC,EAAE,MAAM,SAAS;AAC/B,aAAK,QAAQ,CAAC,EAAE,MAAM,QAAQ;AAAA,MAC/B;AAED,WAAK,QAAS;AAAA,IACf;AAED,SAAK,SAAS,IAAI,GAAG,GAAG,OAAO,MAAM;AACrC,SAAK,QAAQ,IAAI,GAAG,GAAG,OAAO,MAAM;AAAA,EACrC;AAAA,EAED,KAAK,QAAQ;AACX,SAAK,QAAS;AAEd,SAAK,QAAQ,OAAO;AACpB,SAAK,SAAS,OAAO;AACrB,SAAK,QAAQ,OAAO;AAEpB,SAAK,QAAQ,KAAK,OAAO,OAAO;AAChC,SAAK,cAAc,OAAO;AAE1B,SAAK,SAAS,KAAK,OAAO,QAAQ;AAElC,SAAK,cAAc,OAAO;AAC1B,SAAK,gBAAgB,OAAO;AAE5B,QAAI,OAAO,iBAAiB;AAAM,WAAK,eAAe,OAAO,aAAa,MAAO;AAEjF,SAAK,QAAQ,SAAS;AAEtB,aAAS,IAAI,GAAG,KAAK,OAAO,QAAQ,QAAQ,IAAI,IAAI,KAAK;AACvD,WAAK,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,EAAE,MAAO;AAC3C,WAAK,QAAQ,CAAC,EAAE,wBAAwB;AAAA,IACzC;AAED,WAAO;AAAA,EACR;AACT;"}
|
package/dist/effects/ASCII.cjs
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const React = require("react");
|
|
5
|
-
const THREE = require("three");
|
|
6
|
-
const postprocessing = require("postprocessing");
|
|
7
|
-
const fragment = `
|
|
8
|
-
uniform sampler2D uCharacters;
|
|
9
|
-
uniform float uCharactersCount;
|
|
10
|
-
uniform float uCellSize;
|
|
11
|
-
uniform bool uInvert;
|
|
12
|
-
uniform vec3 uColor;
|
|
13
|
-
|
|
14
|
-
const vec2 SIZE = vec2(16.);
|
|
15
|
-
|
|
16
|
-
vec3 greyscale(vec3 color, float strength) {
|
|
17
|
-
float g = dot(color, vec3(0.299, 0.587, 0.114));
|
|
18
|
-
return mix(color, vec3(g), strength);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
vec3 greyscale(vec3 color) {
|
|
22
|
-
return greyscale(color, 1.0);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
26
|
-
vec2 cell = resolution / uCellSize;
|
|
27
|
-
vec2 grid = 1.0 / cell;
|
|
28
|
-
vec2 pixelizedUV = grid * (0.5 + floor(uv / grid));
|
|
29
|
-
vec4 pixelized = texture2D(inputBuffer, pixelizedUV);
|
|
30
|
-
float greyscaled = greyscale(pixelized.rgb).r;
|
|
31
|
-
|
|
32
|
-
if (uInvert) {
|
|
33
|
-
greyscaled = 1.0 - greyscaled;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
float characterIndex = floor((uCharactersCount - 1.0) * greyscaled);
|
|
37
|
-
vec2 characterPosition = vec2(mod(characterIndex, SIZE.x), floor(characterIndex / SIZE.y));
|
|
38
|
-
vec2 offset = vec2(characterPosition.x, -characterPosition.y) / SIZE;
|
|
39
|
-
vec2 charUV = mod(uv * (cell / SIZE), 1.0 / SIZE) - vec2(0., 1.0 / SIZE) + offset;
|
|
40
|
-
vec4 asciiCharacter = texture2D(uCharacters, charUV);
|
|
41
|
-
|
|
42
|
-
asciiCharacter.rgb = uColor * asciiCharacter.r;
|
|
43
|
-
asciiCharacter.a = pixelized.a;
|
|
44
|
-
outputColor = asciiCharacter;
|
|
45
|
-
}
|
|
46
|
-
`;
|
|
47
|
-
class ASCIIEffect extends postprocessing.Effect {
|
|
48
|
-
constructor({
|
|
49
|
-
font = "arial",
|
|
50
|
-
characters = ` .:,'-^=*+?!|0#X%WM@`,
|
|
51
|
-
fontSize = 54,
|
|
52
|
-
cellSize = 16,
|
|
53
|
-
color = "#ffffff",
|
|
54
|
-
invert = false
|
|
55
|
-
} = {}) {
|
|
56
|
-
const uniforms = /* @__PURE__ */ new Map([
|
|
57
|
-
["uCharacters", new THREE.Uniform(new THREE.Texture())],
|
|
58
|
-
["uCellSize", new THREE.Uniform(cellSize)],
|
|
59
|
-
["uCharactersCount", new THREE.Uniform(characters.length)],
|
|
60
|
-
["uColor", new THREE.Uniform(new THREE.Color(color))],
|
|
61
|
-
["uInvert", new THREE.Uniform(invert)]
|
|
62
|
-
]);
|
|
63
|
-
super("ASCIIEffect", fragment, { uniforms });
|
|
64
|
-
const charactersTextureUniform = this.uniforms.get("uCharacters");
|
|
65
|
-
if (charactersTextureUniform) {
|
|
66
|
-
charactersTextureUniform.value = this.createCharactersTexture(characters, font, fontSize);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/** Draws the characters on a Canvas and returns a texture */
|
|
70
|
-
createCharactersTexture(characters, font, fontSize) {
|
|
71
|
-
const canvas = document.createElement("canvas");
|
|
72
|
-
const SIZE = 1024;
|
|
73
|
-
const MAX_PER_ROW = 16;
|
|
74
|
-
const CELL = SIZE / MAX_PER_ROW;
|
|
75
|
-
canvas.width = canvas.height = SIZE;
|
|
76
|
-
const texture = new THREE.CanvasTexture(canvas, void 0, THREE.RepeatWrapping, THREE.RepeatWrapping, THREE.NearestFilter, THREE.NearestFilter);
|
|
77
|
-
const context = canvas.getContext("2d");
|
|
78
|
-
if (!context) {
|
|
79
|
-
throw new Error("Context not available");
|
|
80
|
-
}
|
|
81
|
-
context.clearRect(0, 0, SIZE, SIZE);
|
|
82
|
-
context.font = `${fontSize}px ${font}`;
|
|
83
|
-
context.textAlign = "center";
|
|
84
|
-
context.textBaseline = "middle";
|
|
85
|
-
context.fillStyle = "#fff";
|
|
86
|
-
for (let i = 0; i < characters.length; i++) {
|
|
87
|
-
const char = characters[i];
|
|
88
|
-
const x = i % MAX_PER_ROW;
|
|
89
|
-
const y = Math.floor(i / MAX_PER_ROW);
|
|
90
|
-
context.fillText(char, x * CELL + CELL / 2, y * CELL + CELL / 2);
|
|
91
|
-
}
|
|
92
|
-
texture.needsUpdate = true;
|
|
93
|
-
return texture;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
const ASCII = React.forwardRef(
|
|
97
|
-
({
|
|
98
|
-
font = "arial",
|
|
99
|
-
characters = ` .:,'-^=*+?!|0#X%WM@`,
|
|
100
|
-
fontSize = 54,
|
|
101
|
-
cellSize = 16,
|
|
102
|
-
color = "#ffffff",
|
|
103
|
-
invert = false
|
|
104
|
-
}, fref) => {
|
|
105
|
-
const effect = React.useMemo(
|
|
106
|
-
() => new ASCIIEffect({ characters, font, fontSize, cellSize, color, invert }),
|
|
107
|
-
[characters, fontSize, cellSize, color, invert, font]
|
|
108
|
-
);
|
|
109
|
-
return /* @__PURE__ */ jsxRuntime.jsx("primitive", { ref: fref, object: effect });
|
|
110
|
-
}
|
|
111
|
-
);
|
|
112
|
-
exports.ASCII = ASCII;
|
|
113
|
-
//# sourceMappingURL=ASCII.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ASCII.cjs","sources":["../../src/effects/ASCII.tsx"],"sourcesContent":["// From: https://github.com/emilwidlund/ASCII\n// https://twitter.com/emilwidlund/status/1652386482420609024\n\nimport { forwardRef, useMemo } from 'react'\nimport { CanvasTexture, Color, NearestFilter, RepeatWrapping, Texture, Uniform } from 'three'\nimport { Effect } from 'postprocessing'\n\nconst fragment = `\nuniform sampler2D uCharacters;\nuniform float uCharactersCount;\nuniform float uCellSize;\nuniform bool uInvert;\nuniform vec3 uColor;\n\nconst vec2 SIZE = vec2(16.);\n\nvec3 greyscale(vec3 color, float strength) {\n float g = dot(color, vec3(0.299, 0.587, 0.114));\n return mix(color, vec3(g), strength);\n}\n\nvec3 greyscale(vec3 color) {\n return greyscale(color, 1.0);\n}\n\nvoid mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {\n vec2 cell = resolution / uCellSize;\n vec2 grid = 1.0 / cell;\n vec2 pixelizedUV = grid * (0.5 + floor(uv / grid));\n vec4 pixelized = texture2D(inputBuffer, pixelizedUV);\n float greyscaled = greyscale(pixelized.rgb).r;\n\n if (uInvert) {\n greyscaled = 1.0 - greyscaled;\n }\n\n float characterIndex = floor((uCharactersCount - 1.0) * greyscaled);\n vec2 characterPosition = vec2(mod(characterIndex, SIZE.x), floor(characterIndex / SIZE.y));\n vec2 offset = vec2(characterPosition.x, -characterPosition.y) / SIZE;\n vec2 charUV = mod(uv * (cell / SIZE), 1.0 / SIZE) - vec2(0., 1.0 / SIZE) + offset;\n vec4 asciiCharacter = texture2D(uCharacters, charUV);\n\n asciiCharacter.rgb = uColor * asciiCharacter.r;\n asciiCharacter.a = pixelized.a;\n outputColor = asciiCharacter;\n}\n`\n\ninterface IASCIIEffectProps {\n font?: string\n characters?: string\n fontSize?: number\n cellSize?: number\n color?: string\n invert?: boolean\n}\n\nclass ASCIIEffect extends Effect {\n constructor({\n font = 'arial',\n characters = ` .:,'-^=*+?!|0#X%WM@`,\n fontSize = 54,\n cellSize = 16,\n color = '#ffffff',\n invert = false,\n }: IASCIIEffectProps = {}) {\n const uniforms = new Map<string, Uniform>([\n ['uCharacters', new Uniform(new Texture())],\n ['uCellSize', new Uniform(cellSize)],\n ['uCharactersCount', new Uniform(characters.length)],\n ['uColor', new Uniform(new Color(color))],\n ['uInvert', new Uniform(invert)],\n ])\n\n super('ASCIIEffect', fragment, { uniforms })\n\n const charactersTextureUniform = this.uniforms.get('uCharacters')\n\n if (charactersTextureUniform) {\n charactersTextureUniform.value = this.createCharactersTexture(characters, font, fontSize)\n }\n }\n\n /** Draws the characters on a Canvas and returns a texture */\n public createCharactersTexture(characters: string, font: string, fontSize: number): THREE.Texture {\n const canvas = document.createElement('canvas')\n const SIZE = 1024\n const MAX_PER_ROW = 16\n const CELL = SIZE / MAX_PER_ROW\n\n canvas.width = canvas.height = SIZE\n const texture = new CanvasTexture(canvas, undefined, RepeatWrapping, RepeatWrapping, NearestFilter, NearestFilter)\n const context = canvas.getContext('2d')\n\n if (!context) {\n throw new Error('Context not available')\n }\n\n context.clearRect(0, 0, SIZE, SIZE)\n context.font = `${fontSize}px ${font}`\n context.textAlign = 'center'\n context.textBaseline = 'middle'\n context.fillStyle = '#fff'\n\n for (let i = 0; i < characters.length; i++) {\n const char = characters[i]\n const x = i % MAX_PER_ROW\n const y = Math.floor(i / MAX_PER_ROW)\n context.fillText(char, x * CELL + CELL / 2, y * CELL + CELL / 2)\n }\n\n texture.needsUpdate = true\n return texture\n }\n}\n\nexport const ASCII = forwardRef<ASCIIEffect, IASCIIEffectProps>(\n (\n {\n font = 'arial',\n characters = ` .:,'-^=*+?!|0#X%WM@`,\n fontSize = 54,\n cellSize = 16,\n color = '#ffffff',\n invert = false,\n },\n fref\n ) => {\n const effect = useMemo(\n () => new ASCIIEffect({ characters, font, fontSize, cellSize, color, invert }),\n [characters, fontSize, cellSize, color, invert, font]\n )\n return <primitive ref={fref} object={effect} />\n }\n)\n"],"names":["Effect","Uniform","Texture","Color","CanvasTexture","RepeatWrapping","NearestFilter","forwardRef","useMemo","jsx"],"mappings":";;;;;;AAOA,MAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkDjB,MAAM,oBAAoBA,eAAAA,OAAO;AAAA,EAC/B,YAAY;AAAA,IACV,OAAO;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,IACX,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,EACX,IAAuB,IAAI;AACnB,UAAA,+BAAe,IAAqB;AAAA,MACxC,CAAC,eAAe,IAAIC,MAAAA,QAAQ,IAAIC,MAAAA,QAAS,CAAA,CAAC;AAAA,MAC1C,CAAC,aAAa,IAAID,cAAQ,QAAQ,CAAC;AAAA,MACnC,CAAC,oBAAoB,IAAIA,MAAAA,QAAQ,WAAW,MAAM,CAAC;AAAA,MACnD,CAAC,UAAU,IAAIA,MAAA,QAAQ,IAAIE,MAAAA,MAAM,KAAK,CAAC,CAAC;AAAA,MACxC,CAAC,WAAW,IAAIF,cAAQ,MAAM,CAAC;AAAA,IAAA,CAChC;AAED,UAAM,eAAe,UAAU,EAAE,SAAU,CAAA;AAE3C,UAAM,2BAA2B,KAAK,SAAS,IAAI,aAAa;AAEhE,QAAI,0BAA0B;AAC5B,+BAAyB,QAAQ,KAAK,wBAAwB,YAAY,MAAM,QAAQ;AAAA,IAC1F;AAAA,EACF;AAAA;AAAA,EAGO,wBAAwB,YAAoB,MAAc,UAAiC;AAC1F,UAAA,SAAS,SAAS,cAAc,QAAQ;AAC9C,UAAM,OAAO;AACb,UAAM,cAAc;AACpB,UAAM,OAAO,OAAO;AAEb,WAAA,QAAQ,OAAO,SAAS;AACzB,UAAA,UAAU,IAAIG,MAAc,cAAA,QAAQ,QAAWC,MAAAA,gBAAgBA,MAAA,gBAAgBC,qBAAeA,MAAAA,aAAa;AAC3G,UAAA,UAAU,OAAO,WAAW,IAAI;AAEtC,QAAI,CAAC,SAAS;AACN,YAAA,IAAI,MAAM,uBAAuB;AAAA,IACzC;AAEA,YAAQ,UAAU,GAAG,GAAG,MAAM,IAAI;AAC1B,YAAA,OAAO,GAAG,cAAc;AAChC,YAAQ,YAAY;AACpB,YAAQ,eAAe;AACvB,YAAQ,YAAY;AAEpB,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACpC,YAAA,OAAO,WAAW,CAAC;AACzB,YAAM,IAAI,IAAI;AACd,YAAM,IAAI,KAAK,MAAM,IAAI,WAAW;AAC5B,cAAA,SAAS,MAAM,IAAI,OAAO,OAAO,GAAG,IAAI,OAAO,OAAO,CAAC;AAAA,IACjE;AAEA,YAAQ,cAAc;AACf,WAAA;AAAA,EACT;AACF;AAEO,MAAM,QAAQC,MAAA;AAAA,EACnB,CACE;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,IACX,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,KAEX,SACG;AACH,UAAM,SAASC,MAAA;AAAA,MACb,MAAM,IAAI,YAAY,EAAE,YAAY,MAAM,UAAU,UAAU,OAAO,QAAQ;AAAA,MAC7E,CAAC,YAAY,UAAU,UAAU,OAAO,QAAQ,IAAI;AAAA,IAAA;AAEtD,WAAQC,2BAAAA,IAAA,aAAA,EAAU,KAAK,MAAM,QAAQ,OAAQ,CAAA;AAAA,EAC/C;AACF;;"}
|
package/dist/effects/ASCII.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { Effect } from 'postprocessing';
|
|
3
|
-
interface IASCIIEffectProps {
|
|
4
|
-
font?: string;
|
|
5
|
-
characters?: string;
|
|
6
|
-
fontSize?: number;
|
|
7
|
-
cellSize?: number;
|
|
8
|
-
color?: string;
|
|
9
|
-
invert?: boolean;
|
|
10
|
-
}
|
|
11
|
-
declare class ASCIIEffect extends Effect {
|
|
12
|
-
constructor({ font, characters, fontSize, cellSize, color, invert, }?: IASCIIEffectProps);
|
|
13
|
-
/** Draws the characters on a Canvas and returns a texture */
|
|
14
|
-
createCharactersTexture(characters: string, font: string, fontSize: number): THREE.Texture;
|
|
15
|
-
}
|
|
16
|
-
export declare const ASCII: import("react").ForwardRefExoticComponent<IASCIIEffectProps & import("react").RefAttributes<ASCIIEffect>>;
|
|
17
|
-
export {};
|