three-stdlib 2.8.0 → 2.8.1
Sign up to get free protection for your applications and to get access to all the features.
- package/cameras/CinematicCamera.cjs.js +1 -1
- package/cameras/CinematicCamera.js +3 -8
- package/exporters/GLTFExporter.cjs.js +1 -1
- package/exporters/GLTFExporter.js +9 -18
- package/index.cjs.js +1 -1
- package/loaders/EXRLoader.cjs.js +1 -1
- package/loaders/EXRLoader.js +21 -10
- package/loaders/GLTFLoader.cjs.js +1 -1
- package/loaders/GLTFLoader.js +4 -3
- package/loaders/HDRCubeTextureLoader.cjs.js +1 -1
- package/loaders/HDRCubeTextureLoader.js +1 -3
- package/loaders/LDrawLoader.cjs.js +1 -1
- package/loaders/LDrawLoader.js +1450 -1105
- package/loaders/LUT3dlLoader.cjs.js +1 -1
- package/loaders/LUT3dlLoader.js +18 -11
- package/loaders/LUTCubeLoader.cjs.js +1 -1
- package/loaders/LUTCubeLoader.js +4 -5
- package/loaders/PCDLoader.cjs.js +1 -1
- package/loaders/PCDLoader.js +2 -2
- package/loaders/RGBELoader.cjs.js +1 -1
- package/loaders/RGBELoader.js +6 -6
- package/loaders/VRMLLoader.cjs.js +1 -1
- package/loaders/VRMLLoader.js +10 -18
- package/modifiers/CurveModifier.cjs.js +1 -1
- package/modifiers/CurveModifier.js +9 -8
- package/objects/Lensflare.cjs.js +1 -1
- package/objects/Lensflare.js +3 -11
- package/objects/Reflector.cjs.js +1 -1
- package/objects/Reflector.js +16 -12
- package/objects/ReflectorForSSRPass.cjs.js +1 -1
- package/objects/ReflectorForSSRPass.js +1 -9
- package/objects/Refractor.cjs.js +1 -1
- package/objects/Refractor.js +7 -12
- package/objects/Water.cjs.js +1 -1
- package/objects/Water.js +5 -16
- package/package.json +1 -1
- package/postprocessing/GlitchPass.cjs.js +1 -1
- package/postprocessing/GlitchPass.js +36 -33
- package/postprocessing/SMAAPass.cjs.js +1 -1
- package/postprocessing/SMAAPass.js +93 -96
- package/postprocessing/SSAOPass.cjs.js +1 -1
- package/postprocessing/SSAOPass.js +151 -152
- package/postprocessing/SavePass.cjs.js +1 -1
- package/postprocessing/SavePass.js +27 -28
- package/renderers/webgpu/WebGPUTextures.cjs.js +1 -1
- package/renderers/webgpu/WebGPUTextures.js +1 -2
- package/utils/LDrawUtils.cjs.js +1 -0
- package/utils/LDrawUtils.js +144 -0
@@ -1,115 +1,107 @@
|
|
1
|
-
import { DepthTexture,
|
2
|
-
import {
|
1
|
+
import { DepthTexture, DepthStencilFormat, UnsignedInt248Type, WebGLRenderTarget, NearestFilter, ShaderMaterial, UniformsUtils, NoBlending, MeshNormalMaterial, DstColorFactor, ZeroFactor, AddEquation, DstAlphaFactor, Color, LuminanceFormat, CustomBlending, Vector3, MathUtils, DataTexture, RedFormat, FloatType, RepeatWrapping } from 'three';
|
2
|
+
import { Pass, FullScreenQuad } from './Pass.js';
|
3
3
|
import { SimplexNoise } from '../math/SimplexNoise.js';
|
4
4
|
import { SSAOShader, SSAOBlurShader, SSAODepthShader } from '../shaders/SSAOShader.js';
|
5
5
|
import { CopyShader } from '../shaders/CopyShader.js';
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
});
|
45
|
-
this.blurRenderTarget = this.ssaoRenderTarget.clone(); // ssao material
|
46
|
-
|
47
|
-
if (SSAOShader === undefined) {
|
48
|
-
console.error('THREE.SSAOPass: The pass relies on SSAOShader.');
|
49
|
-
}
|
7
|
+
class SSAOPass extends Pass {
|
8
|
+
constructor(scene, camera, width, height) {
|
9
|
+
super();
|
10
|
+
this.width = width !== undefined ? width : 512;
|
11
|
+
this.height = height !== undefined ? height : 512;
|
12
|
+
this.clear = true;
|
13
|
+
this.camera = camera;
|
14
|
+
this.scene = scene;
|
15
|
+
this.kernelRadius = 8;
|
16
|
+
this.kernelSize = 32;
|
17
|
+
this.kernel = [];
|
18
|
+
this.noiseTexture = null;
|
19
|
+
this.output = 0;
|
20
|
+
this.minDistance = 0.005;
|
21
|
+
this.maxDistance = 0.1;
|
22
|
+
this._visibilityCache = new Map(); //
|
23
|
+
|
24
|
+
this.generateSampleKernel();
|
25
|
+
this.generateRandomKernelRotations(); // beauty render target
|
26
|
+
|
27
|
+
const depthTexture = new DepthTexture();
|
28
|
+
depthTexture.format = DepthStencilFormat;
|
29
|
+
depthTexture.type = UnsignedInt248Type;
|
30
|
+
this.beautyRenderTarget = new WebGLRenderTarget(this.width, this.height); // normal render target with depth buffer
|
31
|
+
|
32
|
+
this.normalRenderTarget = new WebGLRenderTarget(this.width, this.height, {
|
33
|
+
minFilter: NearestFilter,
|
34
|
+
magFilter: NearestFilter,
|
35
|
+
depthTexture: depthTexture
|
36
|
+
}); // ssao render target
|
37
|
+
|
38
|
+
this.ssaoRenderTarget = new WebGLRenderTarget(this.width, this.height);
|
39
|
+
this.blurRenderTarget = this.ssaoRenderTarget.clone(); // ssao material
|
40
|
+
|
41
|
+
if (SSAOShader === undefined) {
|
42
|
+
console.error('THREE.SSAOPass: The pass relies on SSAOShader.');
|
43
|
+
}
|
50
44
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
this.blurMaterial = new ShaderMaterial({
|
73
|
-
defines: Object.assign({}, SSAOBlurShader.defines),
|
74
|
-
uniforms: UniformsUtils.clone(SSAOBlurShader.uniforms),
|
75
|
-
vertexShader: SSAOBlurShader.vertexShader,
|
76
|
-
fragmentShader: SSAOBlurShader.fragmentShader
|
77
|
-
});
|
78
|
-
this.blurMaterial.uniforms['tDiffuse'].value = this.ssaoRenderTarget.texture;
|
79
|
-
this.blurMaterial.uniforms['resolution'].value.set(this.width, this.height); // material for rendering the depth
|
80
|
-
|
81
|
-
this.depthRenderMaterial = new ShaderMaterial({
|
82
|
-
defines: Object.assign({}, SSAODepthShader.defines),
|
83
|
-
uniforms: UniformsUtils.clone(SSAODepthShader.uniforms),
|
84
|
-
vertexShader: SSAODepthShader.vertexShader,
|
85
|
-
fragmentShader: SSAODepthShader.fragmentShader,
|
86
|
-
blending: NoBlending
|
87
|
-
});
|
88
|
-
this.depthRenderMaterial.uniforms['tDepth'].value = this.normalRenderTarget.depthTexture;
|
89
|
-
this.depthRenderMaterial.uniforms['cameraNear'].value = this.camera.near;
|
90
|
-
this.depthRenderMaterial.uniforms['cameraFar'].value = this.camera.far; // material for rendering the content of a render target
|
91
|
-
|
92
|
-
this.copyMaterial = new ShaderMaterial({
|
93
|
-
uniforms: UniformsUtils.clone(CopyShader.uniforms),
|
94
|
-
vertexShader: CopyShader.vertexShader,
|
95
|
-
fragmentShader: CopyShader.fragmentShader,
|
96
|
-
transparent: true,
|
97
|
-
depthTest: false,
|
98
|
-
depthWrite: false,
|
99
|
-
blendSrc: DstColorFactor,
|
100
|
-
blendDst: ZeroFactor,
|
101
|
-
blendEquation: AddEquation,
|
102
|
-
blendSrcAlpha: DstAlphaFactor,
|
103
|
-
blendDstAlpha: ZeroFactor,
|
104
|
-
blendEquationAlpha: AddEquation
|
105
|
-
});
|
106
|
-
this.fsQuad = new FullScreenQuad(null);
|
107
|
-
this.originalClearColor = new Color();
|
108
|
-
};
|
45
|
+
this.ssaoMaterial = new ShaderMaterial({
|
46
|
+
defines: Object.assign({}, SSAOShader.defines),
|
47
|
+
uniforms: UniformsUtils.clone(SSAOShader.uniforms),
|
48
|
+
vertexShader: SSAOShader.vertexShader,
|
49
|
+
fragmentShader: SSAOShader.fragmentShader,
|
50
|
+
blending: NoBlending
|
51
|
+
});
|
52
|
+
this.ssaoMaterial.uniforms['tDiffuse'].value = this.beautyRenderTarget.texture;
|
53
|
+
this.ssaoMaterial.uniforms['tNormal'].value = this.normalRenderTarget.texture;
|
54
|
+
this.ssaoMaterial.uniforms['tDepth'].value = this.normalRenderTarget.depthTexture;
|
55
|
+
this.ssaoMaterial.uniforms['tNoise'].value = this.noiseTexture;
|
56
|
+
this.ssaoMaterial.uniforms['kernel'].value = this.kernel;
|
57
|
+
this.ssaoMaterial.uniforms['cameraNear'].value = this.camera.near;
|
58
|
+
this.ssaoMaterial.uniforms['cameraFar'].value = this.camera.far;
|
59
|
+
this.ssaoMaterial.uniforms['resolution'].value.set(this.width, this.height);
|
60
|
+
this.ssaoMaterial.uniforms['cameraProjectionMatrix'].value.copy(this.camera.projectionMatrix);
|
61
|
+
this.ssaoMaterial.uniforms['cameraInverseProjectionMatrix'].value.copy(this.camera.projectionMatrixInverse); // normal material
|
62
|
+
|
63
|
+
this.normalMaterial = new MeshNormalMaterial();
|
64
|
+
this.normalMaterial.blending = NoBlending; // blur material
|
109
65
|
|
110
|
-
|
111
|
-
|
112
|
-
|
66
|
+
this.blurMaterial = new ShaderMaterial({
|
67
|
+
defines: Object.assign({}, SSAOBlurShader.defines),
|
68
|
+
uniforms: UniformsUtils.clone(SSAOBlurShader.uniforms),
|
69
|
+
vertexShader: SSAOBlurShader.vertexShader,
|
70
|
+
fragmentShader: SSAOBlurShader.fragmentShader
|
71
|
+
});
|
72
|
+
this.blurMaterial.uniforms['tDiffuse'].value = this.ssaoRenderTarget.texture;
|
73
|
+
this.blurMaterial.uniforms['resolution'].value.set(this.width, this.height); // material for rendering the depth
|
74
|
+
|
75
|
+
this.depthRenderMaterial = new ShaderMaterial({
|
76
|
+
defines: Object.assign({}, SSAODepthShader.defines),
|
77
|
+
uniforms: UniformsUtils.clone(SSAODepthShader.uniforms),
|
78
|
+
vertexShader: SSAODepthShader.vertexShader,
|
79
|
+
fragmentShader: SSAODepthShader.fragmentShader,
|
80
|
+
blending: NoBlending
|
81
|
+
});
|
82
|
+
this.depthRenderMaterial.uniforms['tDepth'].value = this.normalRenderTarget.depthTexture;
|
83
|
+
this.depthRenderMaterial.uniforms['cameraNear'].value = this.camera.near;
|
84
|
+
this.depthRenderMaterial.uniforms['cameraFar'].value = this.camera.far; // material for rendering the content of a render target
|
85
|
+
|
86
|
+
this.copyMaterial = new ShaderMaterial({
|
87
|
+
uniforms: UniformsUtils.clone(CopyShader.uniforms),
|
88
|
+
vertexShader: CopyShader.vertexShader,
|
89
|
+
fragmentShader: CopyShader.fragmentShader,
|
90
|
+
transparent: true,
|
91
|
+
depthTest: false,
|
92
|
+
depthWrite: false,
|
93
|
+
blendSrc: DstColorFactor,
|
94
|
+
blendDst: ZeroFactor,
|
95
|
+
blendEquation: AddEquation,
|
96
|
+
blendSrcAlpha: DstAlphaFactor,
|
97
|
+
blendDstAlpha: ZeroFactor,
|
98
|
+
blendEquationAlpha: AddEquation
|
99
|
+
});
|
100
|
+
this.fsQuad = new FullScreenQuad(null);
|
101
|
+
this.originalClearColor = new Color();
|
102
|
+
}
|
103
|
+
|
104
|
+
dispose() {
|
113
105
|
// dispose render targets
|
114
106
|
this.beautyRenderTarget.dispose();
|
115
107
|
this.normalRenderTarget.dispose();
|
@@ -122,11 +114,13 @@ SSAOPass.prototype = Object.assign(Object.create(Pass.prototype), {
|
|
122
114
|
this.depthRenderMaterial.dispose(); // dipsose full screen quad
|
123
115
|
|
124
116
|
this.fsQuad.dispose();
|
125
|
-
}
|
126
|
-
|
117
|
+
}
|
118
|
+
|
119
|
+
render(renderer, writeBuffer
|
127
120
|
/*, readBuffer, deltaTime, maskActive */
|
128
121
|
) {
|
129
|
-
// render beauty
|
122
|
+
if (renderer.capabilities.isWebGL2 === false) this.noiseTexture.format = LuminanceFormat; // render beauty
|
123
|
+
|
130
124
|
renderer.setRenderTarget(this.beautyRenderTarget);
|
131
125
|
renderer.clear();
|
132
126
|
renderer.render(this.scene, this.camera); // render normals and depth (honor only meshes, points and lines do not contribute to SSAO)
|
@@ -183,12 +177,13 @@ SSAOPass.prototype = Object.assign(Object.create(Pass.prototype), {
|
|
183
177
|
default:
|
184
178
|
console.warn('THREE.SSAOPass: Unknown output type.');
|
185
179
|
}
|
186
|
-
}
|
187
|
-
|
180
|
+
}
|
181
|
+
|
182
|
+
renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) {
|
188
183
|
// save original state
|
189
184
|
renderer.getClearColor(this.originalClearColor);
|
190
|
-
|
191
|
-
|
185
|
+
const originalClearAlpha = renderer.getClearAlpha();
|
186
|
+
const originalAutoClear = renderer.autoClear;
|
192
187
|
renderer.setRenderTarget(renderTarget); // setup pass state
|
193
188
|
|
194
189
|
renderer.autoClear = false;
|
@@ -205,11 +200,12 @@ SSAOPass.prototype = Object.assign(Object.create(Pass.prototype), {
|
|
205
200
|
renderer.autoClear = originalAutoClear;
|
206
201
|
renderer.setClearColor(this.originalClearColor);
|
207
202
|
renderer.setClearAlpha(originalClearAlpha);
|
208
|
-
}
|
209
|
-
|
203
|
+
}
|
204
|
+
|
205
|
+
renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {
|
210
206
|
renderer.getClearColor(this.originalClearColor);
|
211
|
-
|
212
|
-
|
207
|
+
const originalClearAlpha = renderer.getClearAlpha();
|
208
|
+
const originalAutoClear = renderer.autoClear;
|
213
209
|
renderer.setRenderTarget(renderTarget);
|
214
210
|
renderer.autoClear = false;
|
215
211
|
clearColor = overrideMaterial.clearColor || clearColor;
|
@@ -228,8 +224,9 @@ SSAOPass.prototype = Object.assign(Object.create(Pass.prototype), {
|
|
228
224
|
renderer.autoClear = originalAutoClear;
|
229
225
|
renderer.setClearColor(this.originalClearColor);
|
230
226
|
renderer.setClearAlpha(originalClearAlpha);
|
231
|
-
}
|
232
|
-
|
227
|
+
}
|
228
|
+
|
229
|
+
setSize(width, height) {
|
233
230
|
this.width = width;
|
234
231
|
this.height = height;
|
235
232
|
this.beautyRenderTarget.setSize(width, height);
|
@@ -240,69 +237,71 @@ SSAOPass.prototype = Object.assign(Object.create(Pass.prototype), {
|
|
240
237
|
this.ssaoMaterial.uniforms['cameraProjectionMatrix'].value.copy(this.camera.projectionMatrix);
|
241
238
|
this.ssaoMaterial.uniforms['cameraInverseProjectionMatrix'].value.copy(this.camera.projectionMatrixInverse);
|
242
239
|
this.blurMaterial.uniforms['resolution'].value.set(width, height);
|
243
|
-
}
|
244
|
-
|
245
|
-
|
246
|
-
|
240
|
+
}
|
241
|
+
|
242
|
+
generateSampleKernel() {
|
243
|
+
const kernelSize = this.kernelSize;
|
244
|
+
const kernel = this.kernel;
|
247
245
|
|
248
246
|
for (let i = 0; i < kernelSize; i++) {
|
249
|
-
|
247
|
+
const sample = new Vector3();
|
250
248
|
sample.x = Math.random() * 2 - 1;
|
251
249
|
sample.y = Math.random() * 2 - 1;
|
252
250
|
sample.z = Math.random();
|
253
251
|
sample.normalize();
|
254
|
-
|
252
|
+
let scale = i / kernelSize;
|
255
253
|
scale = MathUtils.lerp(0.1, 1, scale * scale);
|
256
254
|
sample.multiplyScalar(scale);
|
257
255
|
kernel.push(sample);
|
258
256
|
}
|
259
|
-
}
|
260
|
-
|
261
|
-
|
262
|
-
|
257
|
+
}
|
258
|
+
|
259
|
+
generateRandomKernelRotations() {
|
260
|
+
const width = 4,
|
261
|
+
height = 4;
|
263
262
|
|
264
263
|
if (SimplexNoise === undefined) {
|
265
264
|
console.error('THREE.SSAOPass: The pass relies on SimplexNoise.');
|
266
265
|
}
|
267
266
|
|
268
|
-
|
269
|
-
|
270
|
-
|
267
|
+
const simplex = new SimplexNoise();
|
268
|
+
const size = width * height;
|
269
|
+
const data = new Float32Array(size);
|
271
270
|
|
272
271
|
for (let i = 0; i < size; i++) {
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
var noise = simplex.noise3d(x, y, z);
|
278
|
-
data[stride] = noise;
|
279
|
-
data[stride + 1] = noise;
|
280
|
-
data[stride + 2] = noise;
|
281
|
-
data[stride + 3] = 1;
|
272
|
+
const x = Math.random() * 2 - 1;
|
273
|
+
const y = Math.random() * 2 - 1;
|
274
|
+
const z = 0;
|
275
|
+
data[i] = simplex.noise3d(x, y, z);
|
282
276
|
}
|
283
277
|
|
284
|
-
this.noiseTexture = new DataTexture(data, width, height,
|
278
|
+
this.noiseTexture = new DataTexture(data, width, height, RedFormat, FloatType);
|
285
279
|
this.noiseTexture.wrapS = RepeatWrapping;
|
286
280
|
this.noiseTexture.wrapT = RepeatWrapping;
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
281
|
+
this.noiseTexture.needsUpdate = true;
|
282
|
+
}
|
283
|
+
|
284
|
+
overrideVisibility() {
|
285
|
+
const scene = this.scene;
|
286
|
+
const cache = this._visibilityCache;
|
291
287
|
scene.traverse(function (object) {
|
292
288
|
cache.set(object, object.visible);
|
293
289
|
if (object.isPoints || object.isLine) object.visible = false;
|
294
290
|
});
|
295
|
-
}
|
296
|
-
|
297
|
-
|
298
|
-
|
291
|
+
}
|
292
|
+
|
293
|
+
restoreVisibility() {
|
294
|
+
const scene = this.scene;
|
295
|
+
const cache = this._visibilityCache;
|
299
296
|
scene.traverse(function (object) {
|
300
|
-
|
297
|
+
const visible = cache.get(object);
|
301
298
|
object.visible = visible;
|
302
299
|
});
|
303
300
|
cache.clear();
|
304
301
|
}
|
305
|
-
|
302
|
+
|
303
|
+
}
|
304
|
+
|
306
305
|
SSAOPass.OUTPUT = {
|
307
306
|
Default: 0,
|
308
307
|
SSAO: 1,
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("./Pass.cjs.js"),
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("./Pass.cjs.js"),s=require("../shaders/CopyShader.cjs.js");require("@babel/runtime/helpers/defineProperty");class t extends r.Pass{constructor(t){super(),void 0===s.CopyShader&&console.error("THREE.SavePass relies on CopyShader");const i=s.CopyShader;this.textureID="tDiffuse",this.uniforms=e.UniformsUtils.clone(i.uniforms),this.material=new e.ShaderMaterial({uniforms:this.uniforms,vertexShader:i.vertexShader,fragmentShader:i.fragmentShader}),this.renderTarget=t,void 0===this.renderTarget&&(this.renderTarget=new e.WebGLRenderTarget(window.innerWidth,window.innerHeight),this.renderTarget.texture.name="SavePass.rt"),this.needsSwap=!1,this.fsQuad=new r.FullScreenQuad(this.material)}render(e,r,s){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=s.texture),e.setRenderTarget(this.renderTarget),this.clear&&e.clear(),this.fsQuad.render(e)}}exports.SavePass=t;
|
@@ -1,35 +1,33 @@
|
|
1
|
-
import { UniformsUtils, ShaderMaterial, WebGLRenderTarget
|
2
|
-
import {
|
1
|
+
import { UniformsUtils, ShaderMaterial, WebGLRenderTarget } from 'three';
|
2
|
+
import { Pass, FullScreenQuad } from './Pass.js';
|
3
3
|
import { CopyShader } from '../shaders/CopyShader.js';
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
uniforms
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
if (this.renderTarget === undefined) {
|
18
|
-
this.renderTarget = new WebGLRenderTarget(window.innerWidth, window.innerHeight, {
|
19
|
-
minFilter: LinearFilter,
|
20
|
-
magFilter: LinearFilter,
|
21
|
-
format: RGBFormat
|
5
|
+
class SavePass extends Pass {
|
6
|
+
constructor(renderTarget) {
|
7
|
+
super();
|
8
|
+
if (CopyShader === undefined) console.error('THREE.SavePass relies on CopyShader');
|
9
|
+
const shader = CopyShader;
|
10
|
+
this.textureID = 'tDiffuse';
|
11
|
+
this.uniforms = UniformsUtils.clone(shader.uniforms);
|
12
|
+
this.material = new ShaderMaterial({
|
13
|
+
uniforms: this.uniforms,
|
14
|
+
vertexShader: shader.vertexShader,
|
15
|
+
fragmentShader: shader.fragmentShader
|
22
16
|
});
|
23
|
-
this.renderTarget
|
24
|
-
|
17
|
+
this.renderTarget = renderTarget;
|
18
|
+
|
19
|
+
if (this.renderTarget === undefined) {
|
20
|
+
this.renderTarget = new WebGLRenderTarget(window.innerWidth, window.innerHeight);
|
21
|
+
this.renderTarget.texture.name = 'SavePass.rt';
|
22
|
+
}
|
25
23
|
|
26
|
-
|
27
|
-
|
28
|
-
}
|
24
|
+
this.needsSwap = false;
|
25
|
+
this.fsQuad = new FullScreenQuad(this.material);
|
26
|
+
}
|
29
27
|
|
30
|
-
|
31
|
-
|
32
|
-
|
28
|
+
render(renderer, writeBuffer, readBuffer
|
29
|
+
/*, deltaTime, maskActive */
|
30
|
+
) {
|
33
31
|
if (this.uniforms[this.textureID]) {
|
34
32
|
this.uniforms[this.textureID].value = readBuffer.texture;
|
35
33
|
}
|
@@ -38,6 +36,7 @@ SavePass.prototype = Object.assign(Object.create(Pass.prototype), {
|
|
38
36
|
if (this.clear) renderer.clear();
|
39
37
|
this.fsQuad.render(renderer);
|
40
38
|
}
|
41
|
-
|
39
|
+
|
40
|
+
}
|
42
41
|
|
43
42
|
export { SavePass };
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";var e=require("./constants.cjs.js"),t=require("three"),r=require("./WebGPUTextureUtils.cjs.js");function i(e){const t=e.target,r=this.properties,i=r.get(t);t.removeEventListener("dispose",i.disposeCallback),i.colorTextureGPU.destroy(),r.remove(t.texture),this.info.memory.textures--,!0===t.depthBuffer&&(i.depthTextureGPU.destroy(),this.info.memory.textures--,null!==t.depthTexture&&r.remove(t.depthTexture)),r.remove(t)}function a(e){const t=e.target,r=this.properties.get(t);r.textureGPU.destroy(),t.removeEventListener("dispose",r.disposeCallback),this.properties.remove(t),this.info.memory.textures--}module.exports=class{constructor(e,t,r,i){this.device=e,this.properties=t,this.info=r,this.glslang=i,this.defaultTexture=null,this.defaultCubeTexture=null,this.defaultSampler=null,this.samplerCache=new Map,this.utils=null}getDefaultSampler(){return null===this.defaultSampler&&(this.defaultSampler=this.device.createSampler({})),this.defaultSampler}getDefaultTexture(){if(null===this.defaultTexture){const e=new t.Texture;e.minFilter=t.NearestFilter,e.magFilter=t.NearestFilter,this.defaultTexture=this._createTexture(e)}return this.defaultTexture}getDefaultCubeTexture(){if(null===this.defaultCubeTexture){const e=new t.CubeTexture;e.minFilter=t.NearestFilter,e.magFilter=t.NearestFilter,this.defaultCubeTexture=this._createTexture(e)}return this.defaultCubeTexture}getTextureGPU(e){return this.properties.get(e).textureGPU}getSampler(e){return this.properties.get(e).samplerGPU}updateTexture(e){let t=!1;const r=this.properties.get(e);if(e.version>0&&r.version!==e.version){const i=e.image;if(void 0===i)console.warn("THREE.WebGPURenderer: Texture marked for update but image is undefined.");else if(!1===i.complete)console.warn("THREE.WebGPURenderer: Texture marked for update but image is incomplete.");else{if(void 0===r.initialized){r.initialized=!0;const t=a.bind(this);r.disposeCallback=t,e.addEventListener("dispose",t),this.info.memory.textures++}void 0!==r.textureGPU&&r.textureGPU.destroy(),r.textureGPU=this._createTexture(e),r.version=e.version,t=!0}}return!1===r.initializedRTT&&(r.initializedRTT=!0,t=!0),t}updateSampler(e){const t=[];t.push(e.wrapS),t.push(e.wrapT),t.push(e.wrapR),t.push(e.magFilter),t.push(e.minFilter),t.push(e.anisotropy);const r=t.join();let i=this.samplerCache.get(r);void 0===i&&(i=this.device.createSampler({addressModeU:this._convertAddressMode(e.wrapS),addressModeV:this._convertAddressMode(e.wrapT),addressModeW:this._convertAddressMode(e.wrapR),magFilter:this._convertFilterMode(e.magFilter),minFilter:this._convertFilterMode(e.minFilter),mipmapFilter:this._convertFilterMode(e.minFilter),maxAnisotropy:e.anisotropy}),this.samplerCache.set(r,i));this.properties.get(e).samplerGPU=i}initRenderTarget(t){const r=this.properties,a=r.get(t);if(void 0===a.initialized){const o=this.device,s=t.width,u=t.height,n=this._getFormat(t.texture),m=o.createTexture({size:{width:s,height:u,depthOrArrayLayers:1},format:n,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.SAMPLED});this.info.memory.textures++,a.colorTextureGPU=m,a.colorTextureFormat=n;const h=r.get(t.texture);if(h.textureGPU=m,h.initializedRTT=!1,!0===t.depthBuffer){const i=e.GPUTextureFormat.Depth24PlusStencil8,n=o.createTexture({size:{width:s,height:u,depthOrArrayLayers:1},format:i,usage:GPUTextureUsage.RENDER_ATTACHMENT});if(this.info.memory.textures++,a.depthTextureGPU=n,a.depthTextureFormat=i,null!==t.depthTexture){const e=r.get(t.depthTexture);e.textureGPU=n,e.initializedRTT=!1}}const l=i.bind(this);a.disposeCallback=l,t.addEventListener("dispose",l),a.initialized=!0}}dispose(){this.samplerCache.clear()}_convertAddressMode(r){let i=e.GPUAddressMode.ClampToEdge;return r===t.RepeatWrapping?i=e.GPUAddressMode.Repeat:r===t.MirroredRepeatWrapping&&(i=e.GPUAddressMode.MirrorRepeat),i}_convertFilterMode(r){let i=e.GPUFilterMode.Linear;return r!==t.NearestFilter&&r!==t.NearestMipmapNearestFilter&&r!==t.NearestMipmapLinearFilter||(i=e.GPUFilterMode.Nearest),i}_createTexture(e){const t=this.device,r=e.image,{width:i,height:a,depth:o}=this._getSize(e),s=this._needsMipmaps(e),u=this._getDimension(e),n=this._getMipLevelCount(e,i,a,s),m=this._getFormat(e);let h=GPUTextureUsage.SAMPLED|GPUTextureUsage.COPY_DST;!0===s&&(h|=GPUTextureUsage.RENDER_ATTACHMENT);const l={size:{width:i,height:a,depthOrArrayLayers:o},mipLevelCount:n,sampleCount:1,dimension:u,format:m,usage:h},d=t.createTexture(l);return e.isDataTexture||e.isDataTexture2DArray||e.isDataTexture3D?(this._copyBufferToTexture(r,m,d),!0===s&&this._generateMipmaps(d,l)):e.isCompressedTexture?this._copyCompressedBufferToTexture(e.mipmaps,m,d):e.isCubeTexture?this._copyCubeMapToTexture(r,e,d):void 0!==r&&this._getImageBitmap(r,e).then((e=>{this._copyImageBitmapToTexture(e,d),!0===s&&this._generateMipmaps(d,l)})),d}_copyBufferToTexture(e,t,r){const i=e.data,a=this._getBytesPerTexel(t),o=256*Math.ceil(e.width*a/256);this.device.queue.writeTexture({texture:r,mipLevel:0},i,{offset:0,bytesPerRow:o},{width:e.width,height:e.height,depthOrArrayLayers:void 0!==e.depth?e.depth:1})}_copyCubeMapToTexture(e,t,r){for(let i=0;i<e.length;i++){const a=e[i];this._getImageBitmap(a,t).then((e=>{this._copyImageBitmapToTexture(e,r,{x:0,y:0,z:i})}))}}_copyImageBitmapToTexture(e,t,r={x:0,y:0,z:0}){this.device.queue.copyImageBitmapToTexture({imageBitmap:e},{texture:t,mipLevel:0,origin:r},{width:e.width,height:e.height,depthOrArrayLayers:1})}_copyCompressedBufferToTexture(e,t,r){const i=this._getBlockData(t);for(let t=0;t<e.length;t++){const a=e[t],o=a.width,s=a.height,u=Math.ceil(o/i.width)*i.byteLength;this.device.queue.writeTexture({texture:r,mipLevel:t},a.data,{offset:0,bytesPerRow:u},{width:Math.ceil(o/i.width)*i.width,height:Math.ceil(s/i.width)*i.width,depthOrArrayLayers:1})}}_generateMipmaps(e,t){null===this.utils&&(this.utils=new r(this.device,this.glslang)),this.utils.generateMipmaps(e,t)}_getBlockData(t){return t===e.GPUTextureFormat.BC1RGBAUnorm||t===e.GPUTextureFormat.BC1RGBAUnormSRGB?{byteLength:8,width:4,height:4}:t===e.GPUTextureFormat.BC2RGBAUnorm||t===e.GPUTextureFormat.BC2RGBAUnormSRGB||t===e.GPUTextureFormat.BC3RGBAUnorm||t===e.GPUTextureFormat.BC3RGBAUnormSRGB?{byteLength:16,width:4,height:4}:t===e.GPUTextureFormat.BC4RUnorm||t===e.GPUTextureFormat.BC4RSNorm?{byteLength:8,width:4,height:4}:t===e.GPUTextureFormat.BC5RGUnorm||t===e.GPUTextureFormat.BC5RGSnorm||t===e.GPUTextureFormat.BC6HRGBUFloat||t===e.GPUTextureFormat.BC6HRGBFloat||t===e.GPUTextureFormat.BC7RGBAUnorm||t===e.GPUTextureFormat.BC7RGBAUnormSRGB?{byteLength:16,width:4,height:4}:void 0}_getBytesPerTexel(t){return t===e.GPUTextureFormat.R8Unorm?1:t===e.GPUTextureFormat.R16Float||t===e.GPUTextureFormat.RG8Unorm?2:t===e.GPUTextureFormat.RG16Float||t===e.GPUTextureFormat.R32Float||t===e.GPUTextureFormat.RGBA8Unorm||t===e.GPUTextureFormat.RGBA8UnormSRGB?4:t===e.GPUTextureFormat.RG32Float||t===e.GPUTextureFormat.RGBA16Float?8:t===e.GPUTextureFormat.RGBA32Float?16:void 0}_getDimension(t){let r;return r=t.isDataTexture3D?e.GPUTextureDimension.ThreeD:e.GPUTextureDimension.TwoD,r}_getFormat(r){const i=r.format,a=r.type,o=r.encoding;let s;switch(i){case t.RGBA_S3TC_DXT1_Format:s=o===t.sRGBEncoding?e.GPUTextureFormat.BC1RGBAUnormSRGB:e.GPUTextureFormat.BC1RGBAUnorm;break;case t.RGBA_S3TC_DXT3_Format:s=o===t.sRGBEncoding?e.GPUTextureFormat.BC2RGBAUnormSRGB:e.GPUTextureFormat.BC2RGBAUnorm;break;case t.RGBA_S3TC_DXT5_Format:s=o===t.sRGBEncoding?e.GPUTextureFormat.BC3RGBAUnormSRGB:e.GPUTextureFormat.BC3RGBAUnorm;break;case t.
|
1
|
+
"use strict";var e=require("./constants.cjs.js"),t=require("three"),r=require("./WebGPUTextureUtils.cjs.js");function i(e){const t=e.target,r=this.properties,i=r.get(t);t.removeEventListener("dispose",i.disposeCallback),i.colorTextureGPU.destroy(),r.remove(t.texture),this.info.memory.textures--,!0===t.depthBuffer&&(i.depthTextureGPU.destroy(),this.info.memory.textures--,null!==t.depthTexture&&r.remove(t.depthTexture)),r.remove(t)}function a(e){const t=e.target,r=this.properties.get(t);r.textureGPU.destroy(),t.removeEventListener("dispose",r.disposeCallback),this.properties.remove(t),this.info.memory.textures--}module.exports=class{constructor(e,t,r,i){this.device=e,this.properties=t,this.info=r,this.glslang=i,this.defaultTexture=null,this.defaultCubeTexture=null,this.defaultSampler=null,this.samplerCache=new Map,this.utils=null}getDefaultSampler(){return null===this.defaultSampler&&(this.defaultSampler=this.device.createSampler({})),this.defaultSampler}getDefaultTexture(){if(null===this.defaultTexture){const e=new t.Texture;e.minFilter=t.NearestFilter,e.magFilter=t.NearestFilter,this.defaultTexture=this._createTexture(e)}return this.defaultTexture}getDefaultCubeTexture(){if(null===this.defaultCubeTexture){const e=new t.CubeTexture;e.minFilter=t.NearestFilter,e.magFilter=t.NearestFilter,this.defaultCubeTexture=this._createTexture(e)}return this.defaultCubeTexture}getTextureGPU(e){return this.properties.get(e).textureGPU}getSampler(e){return this.properties.get(e).samplerGPU}updateTexture(e){let t=!1;const r=this.properties.get(e);if(e.version>0&&r.version!==e.version){const i=e.image;if(void 0===i)console.warn("THREE.WebGPURenderer: Texture marked for update but image is undefined.");else if(!1===i.complete)console.warn("THREE.WebGPURenderer: Texture marked for update but image is incomplete.");else{if(void 0===r.initialized){r.initialized=!0;const t=a.bind(this);r.disposeCallback=t,e.addEventListener("dispose",t),this.info.memory.textures++}void 0!==r.textureGPU&&r.textureGPU.destroy(),r.textureGPU=this._createTexture(e),r.version=e.version,t=!0}}return!1===r.initializedRTT&&(r.initializedRTT=!0,t=!0),t}updateSampler(e){const t=[];t.push(e.wrapS),t.push(e.wrapT),t.push(e.wrapR),t.push(e.magFilter),t.push(e.minFilter),t.push(e.anisotropy);const r=t.join();let i=this.samplerCache.get(r);void 0===i&&(i=this.device.createSampler({addressModeU:this._convertAddressMode(e.wrapS),addressModeV:this._convertAddressMode(e.wrapT),addressModeW:this._convertAddressMode(e.wrapR),magFilter:this._convertFilterMode(e.magFilter),minFilter:this._convertFilterMode(e.minFilter),mipmapFilter:this._convertFilterMode(e.minFilter),maxAnisotropy:e.anisotropy}),this.samplerCache.set(r,i));this.properties.get(e).samplerGPU=i}initRenderTarget(t){const r=this.properties,a=r.get(t);if(void 0===a.initialized){const o=this.device,s=t.width,u=t.height,n=this._getFormat(t.texture),m=o.createTexture({size:{width:s,height:u,depthOrArrayLayers:1},format:n,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.SAMPLED});this.info.memory.textures++,a.colorTextureGPU=m,a.colorTextureFormat=n;const h=r.get(t.texture);if(h.textureGPU=m,h.initializedRTT=!1,!0===t.depthBuffer){const i=e.GPUTextureFormat.Depth24PlusStencil8,n=o.createTexture({size:{width:s,height:u,depthOrArrayLayers:1},format:i,usage:GPUTextureUsage.RENDER_ATTACHMENT});if(this.info.memory.textures++,a.depthTextureGPU=n,a.depthTextureFormat=i,null!==t.depthTexture){const e=r.get(t.depthTexture);e.textureGPU=n,e.initializedRTT=!1}}const l=i.bind(this);a.disposeCallback=l,t.addEventListener("dispose",l),a.initialized=!0}}dispose(){this.samplerCache.clear()}_convertAddressMode(r){let i=e.GPUAddressMode.ClampToEdge;return r===t.RepeatWrapping?i=e.GPUAddressMode.Repeat:r===t.MirroredRepeatWrapping&&(i=e.GPUAddressMode.MirrorRepeat),i}_convertFilterMode(r){let i=e.GPUFilterMode.Linear;return r!==t.NearestFilter&&r!==t.NearestMipmapNearestFilter&&r!==t.NearestMipmapLinearFilter||(i=e.GPUFilterMode.Nearest),i}_createTexture(e){const t=this.device,r=e.image,{width:i,height:a,depth:o}=this._getSize(e),s=this._needsMipmaps(e),u=this._getDimension(e),n=this._getMipLevelCount(e,i,a,s),m=this._getFormat(e);let h=GPUTextureUsage.SAMPLED|GPUTextureUsage.COPY_DST;!0===s&&(h|=GPUTextureUsage.RENDER_ATTACHMENT);const l={size:{width:i,height:a,depthOrArrayLayers:o},mipLevelCount:n,sampleCount:1,dimension:u,format:m,usage:h},d=t.createTexture(l);return e.isDataTexture||e.isDataTexture2DArray||e.isDataTexture3D?(this._copyBufferToTexture(r,m,d),!0===s&&this._generateMipmaps(d,l)):e.isCompressedTexture?this._copyCompressedBufferToTexture(e.mipmaps,m,d):e.isCubeTexture?this._copyCubeMapToTexture(r,e,d):void 0!==r&&this._getImageBitmap(r,e).then((e=>{this._copyImageBitmapToTexture(e,d),!0===s&&this._generateMipmaps(d,l)})),d}_copyBufferToTexture(e,t,r){const i=e.data,a=this._getBytesPerTexel(t),o=256*Math.ceil(e.width*a/256);this.device.queue.writeTexture({texture:r,mipLevel:0},i,{offset:0,bytesPerRow:o},{width:e.width,height:e.height,depthOrArrayLayers:void 0!==e.depth?e.depth:1})}_copyCubeMapToTexture(e,t,r){for(let i=0;i<e.length;i++){const a=e[i];this._getImageBitmap(a,t).then((e=>{this._copyImageBitmapToTexture(e,r,{x:0,y:0,z:i})}))}}_copyImageBitmapToTexture(e,t,r={x:0,y:0,z:0}){this.device.queue.copyImageBitmapToTexture({imageBitmap:e},{texture:t,mipLevel:0,origin:r},{width:e.width,height:e.height,depthOrArrayLayers:1})}_copyCompressedBufferToTexture(e,t,r){const i=this._getBlockData(t);for(let t=0;t<e.length;t++){const a=e[t],o=a.width,s=a.height,u=Math.ceil(o/i.width)*i.byteLength;this.device.queue.writeTexture({texture:r,mipLevel:t},a.data,{offset:0,bytesPerRow:u},{width:Math.ceil(o/i.width)*i.width,height:Math.ceil(s/i.width)*i.width,depthOrArrayLayers:1})}}_generateMipmaps(e,t){null===this.utils&&(this.utils=new r(this.device,this.glslang)),this.utils.generateMipmaps(e,t)}_getBlockData(t){return t===e.GPUTextureFormat.BC1RGBAUnorm||t===e.GPUTextureFormat.BC1RGBAUnormSRGB?{byteLength:8,width:4,height:4}:t===e.GPUTextureFormat.BC2RGBAUnorm||t===e.GPUTextureFormat.BC2RGBAUnormSRGB||t===e.GPUTextureFormat.BC3RGBAUnorm||t===e.GPUTextureFormat.BC3RGBAUnormSRGB?{byteLength:16,width:4,height:4}:t===e.GPUTextureFormat.BC4RUnorm||t===e.GPUTextureFormat.BC4RSNorm?{byteLength:8,width:4,height:4}:t===e.GPUTextureFormat.BC5RGUnorm||t===e.GPUTextureFormat.BC5RGSnorm||t===e.GPUTextureFormat.BC6HRGBUFloat||t===e.GPUTextureFormat.BC6HRGBFloat||t===e.GPUTextureFormat.BC7RGBAUnorm||t===e.GPUTextureFormat.BC7RGBAUnormSRGB?{byteLength:16,width:4,height:4}:void 0}_getBytesPerTexel(t){return t===e.GPUTextureFormat.R8Unorm?1:t===e.GPUTextureFormat.R16Float||t===e.GPUTextureFormat.RG8Unorm?2:t===e.GPUTextureFormat.RG16Float||t===e.GPUTextureFormat.R32Float||t===e.GPUTextureFormat.RGBA8Unorm||t===e.GPUTextureFormat.RGBA8UnormSRGB?4:t===e.GPUTextureFormat.RG32Float||t===e.GPUTextureFormat.RGBA16Float?8:t===e.GPUTextureFormat.RGBA32Float?16:void 0}_getDimension(t){let r;return r=t.isDataTexture3D?e.GPUTextureDimension.ThreeD:e.GPUTextureDimension.TwoD,r}_getFormat(r){const i=r.format,a=r.type,o=r.encoding;let s;switch(i){case t.RGBA_S3TC_DXT1_Format:s=o===t.sRGBEncoding?e.GPUTextureFormat.BC1RGBAUnormSRGB:e.GPUTextureFormat.BC1RGBAUnorm;break;case t.RGBA_S3TC_DXT3_Format:s=o===t.sRGBEncoding?e.GPUTextureFormat.BC2RGBAUnormSRGB:e.GPUTextureFormat.BC2RGBAUnorm;break;case t.RGBA_S3TC_DXT5_Format:s=o===t.sRGBEncoding?e.GPUTextureFormat.BC3RGBAUnormSRGB:e.GPUTextureFormat.BC3RGBAUnorm;break;case t.RGBAFormat:switch(a){case t.UnsignedByteType:s=o===t.sRGBEncoding?e.GPUTextureFormat.RGBA8UnormSRGB:e.GPUTextureFormat.RGBA8Unorm;break;case t.HalfFloatType:s=e.GPUTextureFormat.RGBA16Float;break;case t.FloatType:s=e.GPUTextureFormat.RGBA32Float;break;default:console.error("WebGPURenderer: Unsupported texture type with RGBAFormat.",a)}break;case t.RedFormat:switch(a){case t.UnsignedByteType:s=e.GPUTextureFormat.R8Unorm;break;case t.HalfFloatType:s=e.GPUTextureFormat.R16Float;break;case t.FloatType:s=e.GPUTextureFormat.R32Float;break;default:console.error("WebGPURenderer: Unsupported texture type with RedFormat.",a)}break;case t.RGFormat:switch(a){case t.UnsignedByteType:s=e.GPUTextureFormat.RG8Unorm;break;case t.HalfFloatType:s=e.GPUTextureFormat.RG16Float;break;case t.FloatType:s=e.GPUTextureFormat.RG32Float;break;default:console.error("WebGPURenderer: Unsupported texture type with RGFormat.",a)}break;default:console.error("WebGPURenderer: Unsupported texture format.",i)}return s}_getImageBitmap(e,t){const r=e.width,i=e.height;if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement){const a={};return a.imageOrientation=!0===t.flipY?"flipY":"none",a.premultiplyAlpha=!0===t.premultiplyAlpha?"premultiply":"default",createImageBitmap(e,0,0,r,i,a)}return Promise.resolve(e)}_getMipLevelCount(e,t,r,i){let a;return a=e.isCompressedTexture?e.mipmaps.length:!0===i?Math.floor(Math.log2(Math.max(t,r)))+1:1,a}_getSize(e){const t=e.image;let r,i,a;return e.isCubeTexture?(r=t.length>0?t[0].width:1,i=t.length>0?t[0].height:1,a=6):void 0!==t?(r=t.width,i=t.height,a=void 0!==t.depth?t.depth:1):r=i=a=1,{width:r,height:i,depth:a}}_needsMipmaps(e){return!0!==e.isCompressedTexture&&!0===e.generateMipmaps&&e.minFilter!==t.NearestFilter&&e.minFilter!==t.LinearFilter}};
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { GPUTextureFormat, GPUAddressMode, GPUFilterMode, GPUTextureDimension } from './constants.js';
|
2
|
-
import { Texture, NearestFilter, CubeTexture, RGFormat, FloatType, HalfFloatType, UnsignedByteType, RedFormat, RGBAFormat,
|
2
|
+
import { Texture, NearestFilter, CubeTexture, RGFormat, FloatType, HalfFloatType, UnsignedByteType, RedFormat, RGBAFormat, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, LinearFilter, RepeatWrapping, MirroredRepeatWrapping, NearestMipmapNearestFilter, NearestMipmapLinearFilter, sRGBEncoding } from 'three';
|
3
3
|
import WebGPUTextureUtils from './WebGPUTextureUtils.js';
|
4
4
|
|
5
5
|
class WebGPUTextures {
|
@@ -451,7 +451,6 @@ class WebGPUTextures {
|
|
451
451
|
formatGPU = encoding === sRGBEncoding ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm;
|
452
452
|
break;
|
453
453
|
|
454
|
-
case RGBFormat:
|
455
454
|
case RGBAFormat:
|
456
455
|
switch (type) {
|
457
456
|
case UnsignedByteType:
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("three"),r=require("../BufferGeometryUtils-9eb5c2e7.js");require("../types/helpers.cjs.js");exports.LDrawUtils=class{static mergeObject(e){function i(r,e,i,n){const a=new t.BufferGeometry,o=r.getAttribute("position").array,s=3===i?r.getAttribute("normal").array:null,u=Math.min(e.count,Math.floor(o.length/3)-e.start),l=3*e.start,c=3*(e.start+u),f=o.subarray(l,c),m=null!==s?s.subarray(l,c):null;if(a.setAttribute("position",new t.BufferAttribute(f,3)),null!==m&&a.setAttribute("normal",new t.BufferAttribute(m,3)),n){const e=r.getAttribute("control0").array.subarray(l,c),i=r.getAttribute("control1").array.subarray(l,c),n=r.getAttribute("direction").array.subarray(l,c);a.setAttribute("control0",new t.BufferAttribute(e,3,!1)),a.setAttribute("control1",new t.BufferAttribute(i,3,!1)),a.setAttribute("direction",new t.BufferAttribute(n,3,!1))}return a}function n(t,r,e){const i=e[t.uuid];i?i.arr.push(r):e[t.uuid]={mat:t,arr:[r]}}function a(t,r){if(!t)return;const e=t.array,i=Math.floor(e.length/3);let n=0;for(let t=0;t<i;t++){const t=e[n],i=e[n+1],a=e[n+2];e[n]=e[n+3],e[n+1]=e[n+4],e[n+2]=e[n+5],e[n+3]=t,e[n+4]=i,e[n+5]=a,n+=3*r}}const o={},s={},u={};e.updateMatrixWorld(!0);const l=new t.Matrix3;e.traverse((t=>{if(t.isMesh|t.isLineSegments){const r=t.isMesh?3:2,e=t.geometry.clone();t.matrixWorld.determinant()<0&&(a(e.attributes.position,r),a(e.attributes.normal,r)),e.applyMatrix4(t.matrixWorld),t.isConditionalLine&&(e.attributes.control0.applyMatrix4(t.matrixWorld),e.attributes.control1.applyMatrix4(t.matrixWorld),l.getNormalMatrix(t.matrixWorld),e.attributes.direction.applyNormalMatrix(l));const c=t.isMesh?o:t.isConditionalLine?u:s;if(Array.isArray(t.material))for(const a in e.groups){const o=e.groups[a];n(t.material[o.materialIndex],i(e,o,r,t.isConditionalLine),c)}else n(t.material,e,c)}}));const c=new t.Group,f=Object.keys(o);for(const e in f){const i=o[f[e]],n=r.mergeBufferGeometries(i.arr);c.add(new t.Mesh(n,i.mat))}const m=Object.keys(s);for(const e in m){const i=s[m[e]],n=r.mergeBufferGeometries(i.arr);c.add(new t.LineSegments(n,i.mat))}const b=Object.keys(u);for(const e in b){const i=u[b[e]],n=r.mergeBufferGeometries(i.arr),a=new t.LineSegments(n,i.mat);a.isConditionalLine=!0,c.add(a)}return c.userData.constructionStep=0,c.userData.numConstructionSteps=1,c}};
|