Bladeren bron

Updated builds.

Mugen87 1 jaar geleden
bovenliggende
commit
c9bdf266ce
7 gewijzigde bestanden met toevoegingen van 550 en 1028 verwijderingen
  1. 129 140
      build/three.cjs
  2. 129 140
      build/three.module.js
  3. 0 0
      build/three.module.min.js
  4. 146 374
      build/three.webgpu.js
  5. 0 0
      build/three.webgpu.min.js
  6. 146 374
      build/three.webgpu.nodes.js
  7. 0 0
      build/three.webgpu.nodes.min.js

+ 129 - 140
build/three.cjs

@@ -5,7 +5,7 @@
  */
 'use strict';
 
-const REVISION = '170';
+const REVISION = '171dev';
 
 const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };
 const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };
@@ -9201,20 +9201,6 @@ let _materialId = 0;
 
 class Material extends EventDispatcher {
 
-	static get type() {
-
-		return 'Material';
-
-	}
-
-	get type() {
-
-		return this.constructor.type;
-
-	}
-
-	set type( _value ) { /* */ }
-
 	constructor() {
 
 		super();
@@ -9226,6 +9212,7 @@ class Material extends EventDispatcher {
 		this.uuid = generateUUID();
 
 		this.name = '';
+		this.type = 'Material';
 
 		this.blending = NormalBlending;
 		this.side = FrontSide;
@@ -9737,18 +9724,14 @@ class Material extends EventDispatcher {
 
 class MeshBasicMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshBasicMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshBasicMaterial = true;
 
+		this.type = 'MeshBasicMaterial';
+
 		this.color = new Color( 0xffffff ); // emissive
 
 		this.map = null;
@@ -12385,18 +12368,14 @@ var default_fragment = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0
 
 class ShaderMaterial extends Material {
 
-	static get type() {
-
-		return 'ShaderMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isShaderMaterial = true;
 
+		this.type = 'ShaderMaterial';
+
 		this.defines = {};
 		this.uniforms = {};
 		this.uniformsGroups = [];
@@ -22223,18 +22202,14 @@ function WebGLRenderStates( extensions ) {
 
 class MeshDepthMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshDepthMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshDepthMaterial = true;
 
+		this.type = 'MeshDepthMaterial';
+
 		this.depthPacking = BasicDepthPacking;
 
 		this.map = null;
@@ -22277,18 +22252,14 @@ class MeshDepthMaterial extends Material {
 
 class MeshDistanceMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshDistanceMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshDistanceMaterial = true;
 
+		this.type = 'MeshDistanceMaterial';
+
 		this.map = null;
 
 		this.alphaMap = null;
@@ -31428,7 +31399,9 @@ class WebGLRenderer {
 
 		};
 
-		this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
+		const _srcFramebuffer = _gl.createFramebuffer();
+		const _dstFramebuffer = _gl.createFramebuffer();
+		this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
 
 			// support previous signature with dstPosition first
 			if ( srcTexture.isTexture !== true ) {
@@ -31439,15 +31412,33 @@ class WebGLRenderer {
 				dstPosition = arguments[ 0 ] || null;
 				srcTexture = arguments[ 1 ];
 				dstTexture = arguments[ 2 ];
-				level = arguments[ 3 ] || 0;
+				dstLevel = arguments[ 3 ] || 0;
 				srcRegion = null;
 
 			}
 
+			// support the previous signature with just a single dst mipmap level
+			if ( dstLevel === null ) {
+
+				if ( srcLevel !== 0 ) {
+
+					// @deprecated, r171
+					warnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels.' );
+					dstLevel = srcLevel;
+					srcLevel = 0;
+
+				} else {
+
+					dstLevel = 0;
+
+				}
+
+			}
+
 			// gather the necessary dimensions to copy
 			let width, height, depth, minX, minY, minZ;
 			let dstX, dstY, dstZ;
-			const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;
+			const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ dstLevel ] : srcTexture.image;
 			if ( srcRegion !== null ) {
 
 				width = srcRegion.max.x - srcRegion.min.x;
@@ -31459,9 +31450,23 @@ class WebGLRenderer {
 
 			} else {
 
-				width = image.width;
-				height = image.height;
-				depth = image.depth || 1;
+				const levelScale = Math.pow( 2, - srcLevel );
+				width = Math.floor( image.width * levelScale );
+				height = Math.floor( image.height * levelScale );
+				if ( srcTexture.isDataArrayTexture ) {
+
+					depth = image.depth;
+
+				} else if ( srcTexture.isData3DTexture ) {
+
+					depth = Math.floor( image.depth * levelScale );
+
+				} else {
+
+					depth = 1;
+
+				}
+
 				minX = 0;
 				minY = 0;
 				minZ = 0;
@@ -31524,13 +31529,12 @@ class WebGLRenderer {
 			// set up the src texture
 			const isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture;
 			const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture;
-			if ( srcTexture.isRenderTargetTexture || srcTexture.isDepthTexture ) {
+			if ( srcTexture.isDepthTexture ) {
 
 				const srcTextureProperties = properties.get( srcTexture );
 				const dstTextureProperties = properties.get( dstTexture );
 				const srcRenderTargetProperties = properties.get( srcTextureProperties.__renderTarget );
 				const dstRenderTargetProperties = properties.get( dstTextureProperties.__renderTarget );
-
 				state.bindFramebuffer( _gl.READ_FRAMEBUFFER, srcRenderTargetProperties.__webglFramebuffer );
 				state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, dstRenderTargetProperties.__webglFramebuffer );
 
@@ -31539,32 +31543,69 @@ class WebGLRenderer {
 					// if the source or destination are a 3d target then a layer needs to be bound
 					if ( isSrc3D ) {
 
-						_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( srcTexture ).__webglTexture, level, minZ + i );
+						_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( srcTexture ).__webglTexture, srcLevel, minZ + i );
+						_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( dstTexture ).__webglTexture, dstLevel, dstZ + i );
 
 					}
 
-					if ( srcTexture.isDepthTexture ) {
+					_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );
 
-						if ( isDst3D ) {
+				}
 
-							_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( dstTexture ).__webglTexture, level, dstZ + i );
+				state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
+				state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
 
-						}
+			} else if ( srcLevel !== 0 || srcTexture.isRenderTargetTexture || properties.has( srcTexture ) ) {
+
+				// get the appropriate frame buffers
+				const srcTextureProperties = properties.get( srcTexture );
+				const dstTextureProperties = properties.get( dstTexture );
+
+				// bind the frame buffer targets
+				state.bindFramebuffer( _gl.READ_FRAMEBUFFER, _srcFramebuffer );
+				state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, _dstFramebuffer );
+
+				for ( let i = 0; i < depth; i ++ ) {
+
+					// assign the correct layers and mip maps to the frame buffers
+					if ( isSrc3D ) {
+
+						_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, srcTextureProperties.__webglTexture, srcLevel, minZ + i );
+
+					} else {
+
+						_gl.framebufferTexture2D( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, srcTextureProperties.__webglTexture, srcLevel );
+
+					}
+
+					if ( isDst3D ) {
+
+						_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, dstTextureProperties.__webglTexture, dstLevel, dstZ + i );
+
+					} else {
+
+						_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, dstTextureProperties.__webglTexture, dstLevel );
+
+					}
+
+					// copy the data using the fastest function that can achieve the copy
+					if ( srcLevel !== 0 ) {
 
-						_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );
+						_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.COLOR_BUFFER_BIT, _gl.NEAREST );
 
 					} else if ( isDst3D ) {
 
-						_gl.copyTexSubImage3D( glTarget, level, dstX, dstY, dstZ + i, minX, minY, width, height );
+						_gl.copyTexSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ + i, minX, minY, width, height );
 
 					} else {
 
-						_gl.copyTexSubImage2D( glTarget, level, dstX, dstY, dstZ + i, minX, minY, width, height );
+						_gl.copyTexSubImage2D( glTarget, dstLevel, dstX, dstY, minX, minY, width, height );
 
 					}
 
 				}
 
+				// unbind read, draw buffers
 				state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
 				state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
 
@@ -31575,15 +31616,15 @@ class WebGLRenderer {
 					// copy data into the 3d texture
 					if ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {
 
-						_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );
+						_gl.texSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );
 
 					} else if ( dstTexture.isCompressedArrayTexture ) {
 
-						_gl.compressedTexSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );
+						_gl.compressedTexSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );
 
 					} else {
 
-						_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );
+						_gl.texSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );
 
 					}
 
@@ -31592,15 +31633,15 @@ class WebGLRenderer {
 					// copy data into the 2d texture
 					if ( srcTexture.isDataTexture ) {
 
-						_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data );
+						_gl.texSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );
 
 					} else if ( srcTexture.isCompressedTexture ) {
 
-						_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data );
+						_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );
 
 					} else {
 
-						_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image );
+						_gl.texSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image );
 
 					}
 
@@ -31616,7 +31657,7 @@ class WebGLRenderer {
 			_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
 
 			// Generate mipmaps only when copying level 0
-			if ( level === 0 && dstTexture.generateMipmaps ) {
+			if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
 
 				_gl.generateMipmap( glTarget );
 
@@ -32366,18 +32407,14 @@ class InterleavedBufferAttribute {
 
 class SpriteMaterial extends Material {
 
-	static get type() {
-
-		return 'SpriteMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isSpriteMaterial = true;
 
+		this.type = 'SpriteMaterial';
+
 		this.color = new Color( 0xffffff );
 
 		this.map = null;
@@ -35050,18 +35087,14 @@ class BatchedMesh extends Mesh {
 
 class LineBasicMaterial extends Material {
 
-	static get type() {
-
-		return 'LineBasicMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isLineBasicMaterial = true;
 
+		this.type = 'LineBasicMaterial';
+
 		this.color = new Color( 0xffffff );
 
 		this.map = null;
@@ -35399,18 +35432,14 @@ class LineLoop extends Line {
 
 class PointsMaterial extends Material {
 
-	static get type() {
-
-		return 'PointsMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isPointsMaterial = true;
 
+		this.type = 'PointsMaterial';
+
 		this.color = new Color( 0xffffff );
 
 		this.map = null;
@@ -41767,18 +41796,14 @@ var Geometries = /*#__PURE__*/Object.freeze({
 
 class ShadowMaterial extends Material {
 
-	static get type() {
-
-		return 'ShadowMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isShadowMaterial = true;
 
+		this.type = 'ShadowMaterial';
+
 		this.color = new Color( 0x000000 );
 		this.transparent = true;
 
@@ -41804,36 +41829,28 @@ class ShadowMaterial extends Material {
 
 class RawShaderMaterial extends ShaderMaterial {
 
-	static get type() {
-
-		return 'RawShaderMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super( parameters );
 
 		this.isRawShaderMaterial = true;
 
+		this.type = 'RawShaderMaterial';
+
 	}
 
 }
 
 class MeshStandardMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshStandardMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshStandardMaterial = true;
 
+		this.type = 'MeshStandardMaterial';
+
 		this.defines = { 'STANDARD': '' };
 
 		this.color = new Color( 0xffffff ); // diffuse
@@ -41946,12 +41963,6 @@ class MeshStandardMaterial extends Material {
 
 class MeshPhysicalMaterial extends MeshStandardMaterial {
 
-	static get type() {
-
-		return 'MeshPhysicalMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
@@ -41965,6 +41976,8 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
 
 		};
 
+		this.type = 'MeshPhysicalMaterial';
+
 		this.anisotropyRotation = 0;
 		this.anisotropyMap = null;
 
@@ -42188,18 +42201,14 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
 
 class MeshPhongMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshPhongMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshPhongMaterial = true;
 
+		this.type = 'MeshPhongMaterial';
+
 		this.color = new Color( 0xffffff ); // diffuse
 		this.specular = new Color( 0x111111 );
 		this.shininess = 30;
@@ -42233,6 +42242,7 @@ class MeshPhongMaterial extends Material {
 
 		this.envMap = null;
 		this.envMapRotation = new Euler();
+
 		this.combine = MultiplyOperation;
 		this.reflectivity = 1;
 		this.refractionRatio = 0.98;
@@ -42308,12 +42318,6 @@ class MeshPhongMaterial extends Material {
 
 class MeshToonMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshToonMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
@@ -42322,6 +42326,8 @@ class MeshToonMaterial extends Material {
 
 		this.defines = { 'TOON': '' };
 
+		this.type = 'MeshToonMaterial';
+
 		this.color = new Color( 0xffffff );
 
 		this.map = null;
@@ -42408,18 +42414,14 @@ class MeshToonMaterial extends Material {
 
 class MeshNormalMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshNormalMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshNormalMaterial = true;
 
+		this.type = 'MeshNormalMaterial';
+
 		this.bumpMap = null;
 		this.bumpScale = 1;
 
@@ -42468,18 +42470,14 @@ class MeshNormalMaterial extends Material {
 
 class MeshLambertMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshLambertMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshLambertMaterial = true;
 
+		this.type = 'MeshLambertMaterial';
+
 		this.color = new Color( 0xffffff ); // diffuse
 
 		this.map = null;
@@ -42584,12 +42582,6 @@ class MeshLambertMaterial extends Material {
 
 class MeshMatcapMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshMatcapMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
@@ -42598,6 +42590,8 @@ class MeshMatcapMaterial extends Material {
 
 		this.defines = { 'MATCAP': '' };
 
+		this.type = 'MeshMatcapMaterial';
+
 		this.color = new Color( 0xffffff ); // diffuse
 
 		this.matcap = null;
@@ -42663,17 +42657,12 @@ class MeshMatcapMaterial extends Material {
 
 class LineDashedMaterial extends LineBasicMaterial {
 
-	static get type() {
-
-		return 'LineDashedMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isLineDashedMaterial = true;
+		this.type = 'LineDashedMaterial';
 
 		this.scale = 1;
 		this.dashSize = 3;

+ 129 - 140
build/three.module.js

@@ -3,7 +3,7 @@
  * Copyright 2010-2024 Three.js Authors
  * SPDX-License-Identifier: MIT
  */
-const REVISION = '170';
+const REVISION = '171dev';
 
 const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };
 const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };
@@ -9199,20 +9199,6 @@ let _materialId = 0;
 
 class Material extends EventDispatcher {
 
-	static get type() {
-
-		return 'Material';
-
-	}
-
-	get type() {
-
-		return this.constructor.type;
-
-	}
-
-	set type( _value ) { /* */ }
-
 	constructor() {
 
 		super();
@@ -9224,6 +9210,7 @@ class Material extends EventDispatcher {
 		this.uuid = generateUUID();
 
 		this.name = '';
+		this.type = 'Material';
 
 		this.blending = NormalBlending;
 		this.side = FrontSide;
@@ -9735,18 +9722,14 @@ class Material extends EventDispatcher {
 
 class MeshBasicMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshBasicMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshBasicMaterial = true;
 
+		this.type = 'MeshBasicMaterial';
+
 		this.color = new Color( 0xffffff ); // emissive
 
 		this.map = null;
@@ -12383,18 +12366,14 @@ var default_fragment = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0
 
 class ShaderMaterial extends Material {
 
-	static get type() {
-
-		return 'ShaderMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isShaderMaterial = true;
 
+		this.type = 'ShaderMaterial';
+
 		this.defines = {};
 		this.uniforms = {};
 		this.uniformsGroups = [];
@@ -22221,18 +22200,14 @@ function WebGLRenderStates( extensions ) {
 
 class MeshDepthMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshDepthMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshDepthMaterial = true;
 
+		this.type = 'MeshDepthMaterial';
+
 		this.depthPacking = BasicDepthPacking;
 
 		this.map = null;
@@ -22275,18 +22250,14 @@ class MeshDepthMaterial extends Material {
 
 class MeshDistanceMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshDistanceMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshDistanceMaterial = true;
 
+		this.type = 'MeshDistanceMaterial';
+
 		this.map = null;
 
 		this.alphaMap = null;
@@ -31426,7 +31397,9 @@ class WebGLRenderer {
 
 		};
 
-		this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
+		const _srcFramebuffer = _gl.createFramebuffer();
+		const _dstFramebuffer = _gl.createFramebuffer();
+		this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
 
 			// support previous signature with dstPosition first
 			if ( srcTexture.isTexture !== true ) {
@@ -31437,15 +31410,33 @@ class WebGLRenderer {
 				dstPosition = arguments[ 0 ] || null;
 				srcTexture = arguments[ 1 ];
 				dstTexture = arguments[ 2 ];
-				level = arguments[ 3 ] || 0;
+				dstLevel = arguments[ 3 ] || 0;
 				srcRegion = null;
 
 			}
 
+			// support the previous signature with just a single dst mipmap level
+			if ( dstLevel === null ) {
+
+				if ( srcLevel !== 0 ) {
+
+					// @deprecated, r171
+					warnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels.' );
+					dstLevel = srcLevel;
+					srcLevel = 0;
+
+				} else {
+
+					dstLevel = 0;
+
+				}
+
+			}
+
 			// gather the necessary dimensions to copy
 			let width, height, depth, minX, minY, minZ;
 			let dstX, dstY, dstZ;
-			const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;
+			const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ dstLevel ] : srcTexture.image;
 			if ( srcRegion !== null ) {
 
 				width = srcRegion.max.x - srcRegion.min.x;
@@ -31457,9 +31448,23 @@ class WebGLRenderer {
 
 			} else {
 
-				width = image.width;
-				height = image.height;
-				depth = image.depth || 1;
+				const levelScale = Math.pow( 2, - srcLevel );
+				width = Math.floor( image.width * levelScale );
+				height = Math.floor( image.height * levelScale );
+				if ( srcTexture.isDataArrayTexture ) {
+
+					depth = image.depth;
+
+				} else if ( srcTexture.isData3DTexture ) {
+
+					depth = Math.floor( image.depth * levelScale );
+
+				} else {
+
+					depth = 1;
+
+				}
+
 				minX = 0;
 				minY = 0;
 				minZ = 0;
@@ -31522,13 +31527,12 @@ class WebGLRenderer {
 			// set up the src texture
 			const isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture;
 			const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture;
-			if ( srcTexture.isRenderTargetTexture || srcTexture.isDepthTexture ) {
+			if ( srcTexture.isDepthTexture ) {
 
 				const srcTextureProperties = properties.get( srcTexture );
 				const dstTextureProperties = properties.get( dstTexture );
 				const srcRenderTargetProperties = properties.get( srcTextureProperties.__renderTarget );
 				const dstRenderTargetProperties = properties.get( dstTextureProperties.__renderTarget );
-
 				state.bindFramebuffer( _gl.READ_FRAMEBUFFER, srcRenderTargetProperties.__webglFramebuffer );
 				state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, dstRenderTargetProperties.__webglFramebuffer );
 
@@ -31537,32 +31541,69 @@ class WebGLRenderer {
 					// if the source or destination are a 3d target then a layer needs to be bound
 					if ( isSrc3D ) {
 
-						_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( srcTexture ).__webglTexture, level, minZ + i );
+						_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( srcTexture ).__webglTexture, srcLevel, minZ + i );
+						_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( dstTexture ).__webglTexture, dstLevel, dstZ + i );
 
 					}
 
-					if ( srcTexture.isDepthTexture ) {
+					_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );
 
-						if ( isDst3D ) {
+				}
 
-							_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( dstTexture ).__webglTexture, level, dstZ + i );
+				state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
+				state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
 
-						}
+			} else if ( srcLevel !== 0 || srcTexture.isRenderTargetTexture || properties.has( srcTexture ) ) {
+
+				// get the appropriate frame buffers
+				const srcTextureProperties = properties.get( srcTexture );
+				const dstTextureProperties = properties.get( dstTexture );
+
+				// bind the frame buffer targets
+				state.bindFramebuffer( _gl.READ_FRAMEBUFFER, _srcFramebuffer );
+				state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, _dstFramebuffer );
+
+				for ( let i = 0; i < depth; i ++ ) {
+
+					// assign the correct layers and mip maps to the frame buffers
+					if ( isSrc3D ) {
+
+						_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, srcTextureProperties.__webglTexture, srcLevel, minZ + i );
+
+					} else {
+
+						_gl.framebufferTexture2D( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, srcTextureProperties.__webglTexture, srcLevel );
+
+					}
+
+					if ( isDst3D ) {
+
+						_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, dstTextureProperties.__webglTexture, dstLevel, dstZ + i );
+
+					} else {
+
+						_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, dstTextureProperties.__webglTexture, dstLevel );
+
+					}
+
+					// copy the data using the fastest function that can achieve the copy
+					if ( srcLevel !== 0 ) {
 
-						_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );
+						_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.COLOR_BUFFER_BIT, _gl.NEAREST );
 
 					} else if ( isDst3D ) {
 
-						_gl.copyTexSubImage3D( glTarget, level, dstX, dstY, dstZ + i, minX, minY, width, height );
+						_gl.copyTexSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ + i, minX, minY, width, height );
 
 					} else {
 
-						_gl.copyTexSubImage2D( glTarget, level, dstX, dstY, dstZ + i, minX, minY, width, height );
+						_gl.copyTexSubImage2D( glTarget, dstLevel, dstX, dstY, minX, minY, width, height );
 
 					}
 
 				}
 
+				// unbind read, draw buffers
 				state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
 				state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
 
@@ -31573,15 +31614,15 @@ class WebGLRenderer {
 					// copy data into the 3d texture
 					if ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {
 
-						_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );
+						_gl.texSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );
 
 					} else if ( dstTexture.isCompressedArrayTexture ) {
 
-						_gl.compressedTexSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );
+						_gl.compressedTexSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );
 
 					} else {
 
-						_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );
+						_gl.texSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );
 
 					}
 
@@ -31590,15 +31631,15 @@ class WebGLRenderer {
 					// copy data into the 2d texture
 					if ( srcTexture.isDataTexture ) {
 
-						_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data );
+						_gl.texSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );
 
 					} else if ( srcTexture.isCompressedTexture ) {
 
-						_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data );
+						_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );
 
 					} else {
 
-						_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image );
+						_gl.texSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image );
 
 					}
 
@@ -31614,7 +31655,7 @@ class WebGLRenderer {
 			_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
 
 			// Generate mipmaps only when copying level 0
-			if ( level === 0 && dstTexture.generateMipmaps ) {
+			if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
 
 				_gl.generateMipmap( glTarget );
 
@@ -32364,18 +32405,14 @@ class InterleavedBufferAttribute {
 
 class SpriteMaterial extends Material {
 
-	static get type() {
-
-		return 'SpriteMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isSpriteMaterial = true;
 
+		this.type = 'SpriteMaterial';
+
 		this.color = new Color( 0xffffff );
 
 		this.map = null;
@@ -35048,18 +35085,14 @@ class BatchedMesh extends Mesh {
 
 class LineBasicMaterial extends Material {
 
-	static get type() {
-
-		return 'LineBasicMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isLineBasicMaterial = true;
 
+		this.type = 'LineBasicMaterial';
+
 		this.color = new Color( 0xffffff );
 
 		this.map = null;
@@ -35397,18 +35430,14 @@ class LineLoop extends Line {
 
 class PointsMaterial extends Material {
 
-	static get type() {
-
-		return 'PointsMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isPointsMaterial = true;
 
+		this.type = 'PointsMaterial';
+
 		this.color = new Color( 0xffffff );
 
 		this.map = null;
@@ -41765,18 +41794,14 @@ var Geometries = /*#__PURE__*/Object.freeze({
 
 class ShadowMaterial extends Material {
 
-	static get type() {
-
-		return 'ShadowMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isShadowMaterial = true;
 
+		this.type = 'ShadowMaterial';
+
 		this.color = new Color( 0x000000 );
 		this.transparent = true;
 
@@ -41802,36 +41827,28 @@ class ShadowMaterial extends Material {
 
 class RawShaderMaterial extends ShaderMaterial {
 
-	static get type() {
-
-		return 'RawShaderMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super( parameters );
 
 		this.isRawShaderMaterial = true;
 
+		this.type = 'RawShaderMaterial';
+
 	}
 
 }
 
 class MeshStandardMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshStandardMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshStandardMaterial = true;
 
+		this.type = 'MeshStandardMaterial';
+
 		this.defines = { 'STANDARD': '' };
 
 		this.color = new Color( 0xffffff ); // diffuse
@@ -41944,12 +41961,6 @@ class MeshStandardMaterial extends Material {
 
 class MeshPhysicalMaterial extends MeshStandardMaterial {
 
-	static get type() {
-
-		return 'MeshPhysicalMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
@@ -41963,6 +41974,8 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
 
 		};
 
+		this.type = 'MeshPhysicalMaterial';
+
 		this.anisotropyRotation = 0;
 		this.anisotropyMap = null;
 
@@ -42186,18 +42199,14 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
 
 class MeshPhongMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshPhongMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshPhongMaterial = true;
 
+		this.type = 'MeshPhongMaterial';
+
 		this.color = new Color( 0xffffff ); // diffuse
 		this.specular = new Color( 0x111111 );
 		this.shininess = 30;
@@ -42231,6 +42240,7 @@ class MeshPhongMaterial extends Material {
 
 		this.envMap = null;
 		this.envMapRotation = new Euler();
+
 		this.combine = MultiplyOperation;
 		this.reflectivity = 1;
 		this.refractionRatio = 0.98;
@@ -42306,12 +42316,6 @@ class MeshPhongMaterial extends Material {
 
 class MeshToonMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshToonMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
@@ -42320,6 +42324,8 @@ class MeshToonMaterial extends Material {
 
 		this.defines = { 'TOON': '' };
 
+		this.type = 'MeshToonMaterial';
+
 		this.color = new Color( 0xffffff );
 
 		this.map = null;
@@ -42406,18 +42412,14 @@ class MeshToonMaterial extends Material {
 
 class MeshNormalMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshNormalMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshNormalMaterial = true;
 
+		this.type = 'MeshNormalMaterial';
+
 		this.bumpMap = null;
 		this.bumpScale = 1;
 
@@ -42466,18 +42468,14 @@ class MeshNormalMaterial extends Material {
 
 class MeshLambertMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshLambertMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isMeshLambertMaterial = true;
 
+		this.type = 'MeshLambertMaterial';
+
 		this.color = new Color( 0xffffff ); // diffuse
 
 		this.map = null;
@@ -42582,12 +42580,6 @@ class MeshLambertMaterial extends Material {
 
 class MeshMatcapMaterial extends Material {
 
-	static get type() {
-
-		return 'MeshMatcapMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
@@ -42596,6 +42588,8 @@ class MeshMatcapMaterial extends Material {
 
 		this.defines = { 'MATCAP': '' };
 
+		this.type = 'MeshMatcapMaterial';
+
 		this.color = new Color( 0xffffff ); // diffuse
 
 		this.matcap = null;
@@ -42661,17 +42655,12 @@ class MeshMatcapMaterial extends Material {
 
 class LineDashedMaterial extends LineBasicMaterial {
 
-	static get type() {
-
-		return 'LineDashedMaterial';
-
-	}
-
 	constructor( parameters ) {
 
 		super();
 
 		this.isLineDashedMaterial = true;
+		this.type = 'LineDashedMaterial';
 
 		this.scale = 1;
 		this.dashSize = 3;

File diff suppressed because it is too large
+ 0 - 0
build/three.module.min.js


File diff suppressed because it is too large
+ 146 - 374
build/three.webgpu.js


File diff suppressed because it is too large
+ 0 - 0
build/three.webgpu.min.js


File diff suppressed because it is too large
+ 146 - 374
build/three.webgpu.nodes.js


File diff suppressed because it is too large
+ 0 - 0
build/three.webgpu.nodes.min.js


Some files were not shown because too many files changed in this diff

粤ICP备19079148号