three-stdlib 2.7.1 → 2.8.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. package/cameras/CinematicCamera.cjs.js +1 -1
  2. package/cameras/CinematicCamera.js +3 -8
  3. package/controls/ArcballControls.cjs.js +1 -1
  4. package/controls/ArcballControls.d.ts +2 -3
  5. package/controls/ArcballControls.js +0 -14
  6. package/controls/FirstPersonControls.cjs.js +1 -1
  7. package/controls/FirstPersonControls.d.ts +4 -5
  8. package/controls/FirstPersonControls.js +36 -45
  9. package/exporters/GLTFExporter.cjs.js +1 -1
  10. package/exporters/GLTFExporter.js +9 -18
  11. package/index.cjs.js +1 -1
  12. package/loaders/EXRLoader.cjs.js +1 -1
  13. package/loaders/EXRLoader.js +21 -10
  14. package/loaders/GLTFLoader.cjs.js +1 -1
  15. package/loaders/GLTFLoader.js +4 -4
  16. package/loaders/HDRCubeTextureLoader.cjs.js +1 -1
  17. package/loaders/HDRCubeTextureLoader.js +1 -3
  18. package/loaders/LDrawLoader.cjs.js +1 -1
  19. package/loaders/LDrawLoader.js +1450 -1105
  20. package/loaders/LUT3dlLoader.cjs.js +1 -1
  21. package/loaders/LUT3dlLoader.js +18 -11
  22. package/loaders/LUTCubeLoader.cjs.js +1 -1
  23. package/loaders/LUTCubeLoader.js +4 -5
  24. package/loaders/PCDLoader.cjs.js +1 -1
  25. package/loaders/PCDLoader.js +2 -2
  26. package/loaders/RGBELoader.cjs.js +1 -1
  27. package/loaders/RGBELoader.js +6 -6
  28. package/loaders/VRMLLoader.cjs.js +1 -1
  29. package/loaders/VRMLLoader.js +10 -18
  30. package/modifiers/CurveModifier.cjs.js +1 -1
  31. package/modifiers/CurveModifier.js +9 -8
  32. package/objects/Lensflare.cjs.js +1 -1
  33. package/objects/Lensflare.js +3 -11
  34. package/objects/Reflector.cjs.js +1 -1
  35. package/objects/Reflector.js +16 -12
  36. package/objects/ReflectorForSSRPass.cjs.js +1 -1
  37. package/objects/ReflectorForSSRPass.js +1 -9
  38. package/objects/Refractor.cjs.js +1 -1
  39. package/objects/Refractor.js +7 -12
  40. package/objects/Water.cjs.js +1 -1
  41. package/objects/Water.js +5 -16
  42. package/package.json +1 -1
  43. package/postprocessing/GlitchPass.cjs.js +1 -1
  44. package/postprocessing/GlitchPass.js +36 -33
  45. package/postprocessing/SMAAPass.cjs.js +1 -1
  46. package/postprocessing/SMAAPass.js +93 -96
  47. package/postprocessing/SSAOPass.cjs.js +1 -1
  48. package/postprocessing/SSAOPass.js +151 -152
  49. package/postprocessing/SavePass.cjs.js +1 -1
  50. package/postprocessing/SavePass.js +27 -28
  51. package/renderers/webgpu/WebGPUTextures.cjs.js +1 -1
  52. package/renderers/webgpu/WebGPUTextures.js +1 -2
  53. package/utils/LDrawUtils.cjs.js +1 -0
  54. package/utils/LDrawUtils.js +144 -0
@@ -1,115 +1,107 @@
1
- import { DepthTexture, UnsignedShortType, WebGLRenderTarget, LinearFilter, RGBAFormat, NearestFilter, ShaderMaterial, UniformsUtils, NoBlending, MeshNormalMaterial, DstColorFactor, ZeroFactor, AddEquation, DstAlphaFactor, Color, CustomBlending, Vector3, MathUtils, DataTexture, FloatType, RepeatWrapping } from 'three';
2
- import { FullScreenQuad, Pass } from './Pass.js';
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
- var SSAOPass = function (scene, camera, width, height) {
8
- this.width = width !== undefined ? width : 512;
9
- this.height = height !== undefined ? height : 512;
10
- this.clear = true;
11
- this.camera = camera;
12
- this.scene = scene;
13
- this.kernelRadius = 8;
14
- this.kernelSize = 32;
15
- this.kernel = [];
16
- this.noiseTexture = null;
17
- this.output = 0;
18
- this.minDistance = 0.005;
19
- this.maxDistance = 0.1;
20
- this._visibilityCache = new Map(); //
21
-
22
- this.generateSampleKernel();
23
- this.generateRandomKernelRotations(); // beauty render target
24
-
25
- var depthTexture = new DepthTexture();
26
- depthTexture.type = UnsignedShortType;
27
- this.beautyRenderTarget = new WebGLRenderTarget(this.width, this.height, {
28
- minFilter: LinearFilter,
29
- magFilter: LinearFilter,
30
- format: RGBAFormat
31
- }); // normal render target with depth buffer
32
-
33
- this.normalRenderTarget = new WebGLRenderTarget(this.width, this.height, {
34
- minFilter: NearestFilter,
35
- magFilter: NearestFilter,
36
- format: RGBAFormat,
37
- depthTexture: depthTexture
38
- }); // ssao render target
39
-
40
- this.ssaoRenderTarget = new WebGLRenderTarget(this.width, this.height, {
41
- minFilter: LinearFilter,
42
- magFilter: LinearFilter,
43
- format: RGBAFormat
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
- this.ssaoMaterial = new ShaderMaterial({
52
- defines: Object.assign({}, SSAOShader.defines),
53
- uniforms: UniformsUtils.clone(SSAOShader.uniforms),
54
- vertexShader: SSAOShader.vertexShader,
55
- fragmentShader: SSAOShader.fragmentShader,
56
- blending: NoBlending
57
- });
58
- this.ssaoMaterial.uniforms['tDiffuse'].value = this.beautyRenderTarget.texture;
59
- this.ssaoMaterial.uniforms['tNormal'].value = this.normalRenderTarget.texture;
60
- this.ssaoMaterial.uniforms['tDepth'].value = this.normalRenderTarget.depthTexture;
61
- this.ssaoMaterial.uniforms['tNoise'].value = this.noiseTexture;
62
- this.ssaoMaterial.uniforms['kernel'].value = this.kernel;
63
- this.ssaoMaterial.uniforms['cameraNear'].value = this.camera.near;
64
- this.ssaoMaterial.uniforms['cameraFar'].value = this.camera.far;
65
- this.ssaoMaterial.uniforms['resolution'].value.set(this.width, this.height);
66
- this.ssaoMaterial.uniforms['cameraProjectionMatrix'].value.copy(this.camera.projectionMatrix);
67
- this.ssaoMaterial.uniforms['cameraInverseProjectionMatrix'].value.copy(this.camera.projectionMatrixInverse); // normal material
68
-
69
- this.normalMaterial = new MeshNormalMaterial();
70
- this.normalMaterial.blending = NoBlending; // blur material
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
- SSAOPass.prototype = Object.assign(Object.create(Pass.prototype), {
111
- constructor: SSAOPass,
112
- dispose: function () {
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
- render: function (renderer, writeBuffer
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
- renderPass: function (renderer, passMaterial, renderTarget, clearColor, clearAlpha) {
180
+ }
181
+
182
+ renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) {
188
183
  // save original state
189
184
  renderer.getClearColor(this.originalClearColor);
190
- var originalClearAlpha = renderer.getClearAlpha();
191
- var originalAutoClear = renderer.autoClear;
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
- renderOverride: function (renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {
203
+ }
204
+
205
+ renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {
210
206
  renderer.getClearColor(this.originalClearColor);
211
- var originalClearAlpha = renderer.getClearAlpha();
212
- var originalAutoClear = renderer.autoClear;
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
- setSize: function (width, height) {
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
- generateSampleKernel: function () {
245
- var kernelSize = this.kernelSize;
246
- var kernel = this.kernel;
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
- var sample = new Vector3();
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
- var scale = i / kernelSize;
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
- generateRandomKernelRotations: function () {
261
- var width = 4,
262
- height = 4;
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
- var simplex = new SimplexNoise();
269
- var size = width * height;
270
- var data = new Float32Array(size * 4);
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
- var stride = i * 4;
274
- var x = Math.random() * 2 - 1;
275
- var y = Math.random() * 2 - 1;
276
- var z = 0;
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, RGBAFormat, FloatType);
278
+ this.noiseTexture = new DataTexture(data, width, height, RedFormat, FloatType);
285
279
  this.noiseTexture.wrapS = RepeatWrapping;
286
280
  this.noiseTexture.wrapT = RepeatWrapping;
287
- },
288
- overrideVisibility: function () {
289
- var scene = this.scene;
290
- var cache = this._visibilityCache;
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
- restoreVisibility: function () {
297
- var scene = this.scene;
298
- var cache = this._visibilityCache;
291
+ }
292
+
293
+ restoreVisibility() {
294
+ const scene = this.scene;
295
+ const cache = this._visibilityCache;
299
296
  scene.traverse(function (object) {
300
- var visible = cache.get(object);
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"),t=require("../shaders/CopyShader.cjs.js");require("@babel/runtime/helpers/defineProperty");var s=function(s){void 0===t.CopyShader&&console.error("THREE.SavePass relies on CopyShader");var i=t.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=s,void 0===this.renderTarget&&(this.renderTarget=new e.WebGLRenderTarget(window.innerWidth,window.innerHeight,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,format:e.RGBFormat}),this.renderTarget.texture.name="SavePass.rt"),this.needsSwap=!1,this.fsQuad=new r.FullScreenQuad(this.material)};s.prototype=Object.assign(Object.create(r.Pass.prototype),{constructor:s,render:function(e,r,t){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=t.texture),e.setRenderTarget(this.renderTarget),this.clear&&e.clear(),this.fsQuad.render(e)}}),exports.SavePass=s;
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, LinearFilter, RGBFormat } from 'three';
2
- import { FullScreenQuad, Pass } from './Pass.js';
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
- var SavePass = function (renderTarget) {
6
- if (CopyShader === undefined) console.error('THREE.SavePass relies on CopyShader');
7
- var shader = CopyShader;
8
- this.textureID = 'tDiffuse';
9
- this.uniforms = UniformsUtils.clone(shader.uniforms);
10
- this.material = new ShaderMaterial({
11
- uniforms: this.uniforms,
12
- vertexShader: shader.vertexShader,
13
- fragmentShader: shader.fragmentShader
14
- });
15
- this.renderTarget = renderTarget;
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.texture.name = 'SavePass.rt';
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
- this.needsSwap = false;
27
- this.fsQuad = new FullScreenQuad(this.material);
28
- };
24
+ this.needsSwap = false;
25
+ this.fsQuad = new FullScreenQuad(this.material);
26
+ }
29
27
 
30
- SavePass.prototype = Object.assign(Object.create(Pass.prototype), {
31
- constructor: SavePass,
32
- render: function (renderer, writeBuffer, readBuffer) {
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.RGBFormat: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
+ "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, RGBFormat, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, LinearFilter, RepeatWrapping, MirroredRepeatWrapping, NearestMipmapNearestFilter, NearestMipmapLinearFilter, sRGBEncoding } from 'three';
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}};