three-stdlib 2.7.0 → 2.8.1

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.
Files changed (78) hide show
  1. package/{Nodes-ec4e1143.js → Nodes-894ac9dc.js} +0 -0
  2. package/{Nodes-427f68b0.js → Nodes-af575af7.js} +0 -0
  3. package/cameras/CinematicCamera.cjs.js +1 -1
  4. package/cameras/CinematicCamera.js +3 -8
  5. package/controls/ArcballControls.cjs.js +1 -1
  6. package/controls/ArcballControls.d.ts +6 -9
  7. package/controls/ArcballControls.js +188 -234
  8. package/controls/FirstPersonControls.cjs.js +1 -1
  9. package/controls/FirstPersonControls.d.ts +4 -5
  10. package/controls/FirstPersonControls.js +36 -45
  11. package/controls/TransformControls.cjs.js +1 -1
  12. package/controls/TransformControls.d.ts +2 -1
  13. package/controls/TransformControls.js +25 -26
  14. package/exporters/GLTFExporter.cjs.js +1 -1
  15. package/exporters/GLTFExporter.js +9 -18
  16. package/geometries/TeapotGeometry.js +2 -2
  17. package/index.cjs.js +1 -1
  18. package/loaders/EXRLoader.cjs.js +1 -1
  19. package/loaders/EXRLoader.js +21 -10
  20. package/loaders/GLTFLoader.cjs.js +1 -1
  21. package/loaders/GLTFLoader.js +5 -6
  22. package/loaders/HDRCubeTextureLoader.cjs.js +1 -1
  23. package/loaders/HDRCubeTextureLoader.js +1 -3
  24. package/loaders/LDrawLoader.cjs.js +1 -1
  25. package/loaders/LDrawLoader.js +1450 -1105
  26. package/loaders/LUT3dlLoader.cjs.js +1 -1
  27. package/loaders/LUT3dlLoader.js +18 -11
  28. package/loaders/LUTCubeLoader.cjs.js +1 -1
  29. package/loaders/LUTCubeLoader.js +4 -5
  30. package/loaders/NodeMaterialLoader.cjs.js +1 -1
  31. package/loaders/PCDLoader.cjs.js +1 -1
  32. package/loaders/PCDLoader.js +2 -2
  33. package/loaders/RGBELoader.cjs.js +1 -1
  34. package/loaders/RGBELoader.js +6 -6
  35. package/loaders/STLLoader.js +7 -7
  36. package/loaders/VRMLLoader.cjs.js +1 -1
  37. package/loaders/VRMLLoader.js +10 -18
  38. package/modifiers/CurveModifier.cjs.js +1 -1
  39. package/modifiers/CurveModifier.js +9 -8
  40. package/nodes/accessors/CameraNode.js +12 -12
  41. package/nodes/accessors/PositionNode.js +3 -3
  42. package/nodes/accessors/ReflectNode.js +3 -3
  43. package/nodes/core/FunctionNode.js +3 -3
  44. package/nodes/core/InputNode.js +3 -3
  45. package/nodes/core/Node.js +6 -6
  46. package/nodes/core/TempNode.js +6 -6
  47. package/nodes/effects/BlurNode.js +3 -3
  48. package/nodes/math/MathNode.js +3 -3
  49. package/nodes/utils/VelocityNode.js +6 -6
  50. package/objects/Lensflare.cjs.js +1 -1
  51. package/objects/Lensflare.js +3 -11
  52. package/objects/Reflector.cjs.js +1 -1
  53. package/objects/Reflector.js +16 -12
  54. package/objects/ReflectorForSSRPass.cjs.js +1 -1
  55. package/objects/ReflectorForSSRPass.js +1 -9
  56. package/objects/Refractor.cjs.js +1 -1
  57. package/objects/Refractor.js +7 -12
  58. package/objects/Water.cjs.js +1 -1
  59. package/objects/Water.js +5 -16
  60. package/package.json +2 -2
  61. package/postprocessing/GlitchPass.cjs.js +1 -1
  62. package/postprocessing/GlitchPass.js +36 -33
  63. package/postprocessing/SMAAPass.cjs.js +1 -1
  64. package/postprocessing/SMAAPass.js +93 -96
  65. package/postprocessing/SSAOPass.cjs.js +1 -1
  66. package/postprocessing/SSAOPass.js +151 -152
  67. package/postprocessing/SavePass.cjs.js +1 -1
  68. package/postprocessing/SavePass.js +27 -28
  69. package/renderers/nodes/accessors/UVNode.js +1 -3
  70. package/renderers/nodes/core/AttributeNode.js +1 -3
  71. package/renderers/nodes/core/Node.js +4 -12
  72. package/renderers/nodes/core/NodeBuilder.js +6 -18
  73. package/renderers/webgpu/WebGPUTextures.cjs.js +1 -1
  74. package/renderers/webgpu/WebGPUTextures.js +1 -2
  75. package/utils/LDrawUtils.cjs.js +1 -0
  76. package/utils/LDrawUtils.js +144 -0
  77. package/webxr/ARButton.js +6 -6
  78. package/webxr/VRButton.js +6 -6
@@ -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 };
@@ -8,9 +8,7 @@ class UVNode extends AttributeNode {
8
8
  this.index = index;
9
9
  }
10
10
 
11
- getAttributeName()
12
- /*builder*/
13
- {
11
+ getAttributeName() {
14
12
  return 'uv' + (this.index > 0 ? this.index + 1 : '');
15
13
  }
16
14
 
@@ -12,9 +12,7 @@ class AttributeNode extends Node {
12
12
  return this;
13
13
  }
14
14
 
15
- getAttributeName()
16
- /*builder*/
17
- {
15
+ getAttributeName() {
18
16
  return this.name;
19
17
  }
20
18
 
@@ -9,27 +9,19 @@ class Node {
9
9
  });
10
10
  }
11
11
 
12
- getUpdateType()
13
- /*builder*/
14
- {
12
+ getUpdateType() {
15
13
  return this.updateType;
16
14
  }
17
15
 
18
- getType()
19
- /*builder*/
20
- {
16
+ getType() {
21
17
  return this.type;
22
18
  }
23
19
 
24
- update()
25
- /*frame*/
26
- {
20
+ update() {
27
21
  console.warn('Abstract function.');
28
22
  }
29
23
 
30
- generate()
31
- /*builder, output*/
32
- {
24
+ generate() {
33
25
  console.warn('Abstract function.');
34
26
  }
35
27
 
@@ -49,9 +49,7 @@ class NodeBuilder {
49
49
  this.defines[shaderStage][name] = value;
50
50
  }
51
51
 
52
- getTexture()
53
- /* textureProperty, uvSnippet */
54
- {
52
+ getTexture() {
55
53
  console.warn('Abstract function.');
56
54
  }
57
55
 
@@ -183,33 +181,23 @@ class NodeBuilder {
183
181
  return code;
184
182
  }
185
183
 
186
- getAttributesBodySnippet()
187
- /*shaderStage*/
188
- {
184
+ getAttributesBodySnippet() {
189
185
  console.warn('Abstract function.');
190
186
  }
191
187
 
192
- getAttributesHeaderSnippet()
193
- /*shaderStage*/
194
- {
188
+ getAttributesHeaderSnippet() {
195
189
  console.warn('Abstract function.');
196
190
  }
197
191
 
198
- getVarysHeaderSnippet()
199
- /*shaderStage*/
200
- {
192
+ getVarysHeaderSnippet() {
201
193
  console.warn('Abstract function.');
202
194
  }
203
195
 
204
- getVarysBodySnippet()
205
- /*shaderStage*/
206
- {
196
+ getVarysBodySnippet() {
207
197
  console.warn('Abstract function.');
208
198
  }
209
199
 
210
- getUniformsHeaderSnippet()
211
- /*shaderStage*/
212
- {
200
+ getUniformsHeaderSnippet() {
213
201
  console.warn('Abstract function.');
214
202
  }
215
203
 
@@ -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}};