Browse Source

Updated builds.

Mugen87 2 years ago
parent
commit
83e47f44e8
5 changed files with 348 additions and 42 deletions
  1. 116 14
      build/three.cjs
  2. 116 14
      build/three.js
  3. 0 0
      build/three.min.js
  4. 116 14
      build/three.module.js
  5. 0 0
      build/three.module.min.js

+ 116 - 14
build/three.cjs

@@ -23646,6 +23646,17 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		}
 		}
 
 
+		if ( glFormat === _gl.RED_INTEGER ) {
+
+			if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8UI;
+			if ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.R16UI;
+			if ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.R32UI;
+			if ( glType === _gl.BYTE ) internalFormat = _gl.R8I;
+			if ( glType === _gl.SHORT ) internalFormat = _gl.R16I;
+			if ( glType === _gl.INT ) internalFormat = _gl.R32I;
+
+		}
+
 		if ( glFormat === _gl.RG ) {
 		if ( glFormat === _gl.RG ) {
 
 
 			if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;
 			if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;
@@ -23822,14 +23833,32 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			for ( let i = 0; i < 6; i ++ ) {
 			for ( let i = 0; i < 6; i ++ ) {
 
 
-				_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );
+				if ( Array.isArray( renderTargetProperties.__webglFramebuffer[ i ] ) ) {
+
+					for ( let level = 0; level < renderTargetProperties.__webglFramebuffer[ i ].length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ][ level ] );
+
+				} else {
+
+					_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );
+
+				}
+
 				if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );
 				if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );
 
 
 			}
 			}
 
 
 		} else {
 		} else {
 
 
-			_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
+			if ( Array.isArray( renderTargetProperties.__webglFramebuffer ) ) {
+
+				for ( let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ level ] );
+
+			} else {
+
+				_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
+
+			}
+
 			if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
 			if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
 			if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );
 			if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );
 
 
@@ -24804,7 +24833,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 	// Render targets
 	// Render targets
 
 
 	// Setup storage for target texture and bind it to correct framebuffer
 	// Setup storage for target texture and bind it to correct framebuffer
-	function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {
+	function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget, level ) {
 
 
 		const glFormat = utils.convert( texture.format, texture.colorSpace );
 		const glFormat = utils.convert( texture.format, texture.colorSpace );
 		const glType = utils.convert( texture.type );
 		const glType = utils.convert( texture.type );
@@ -24813,13 +24842,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		if ( ! renderTargetProperties.__hasExternalTextures ) {
 		if ( ! renderTargetProperties.__hasExternalTextures ) {
 
 
+			const width = Math.max( 1, renderTarget.width >> level );
+			const height = Math.max( 1, renderTarget.height >> level );
+
 			if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
 			if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
 
 
-				state.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );
+				state.texImage3D( textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null );
 
 
 			} else {
 			} else {
 
 
-				state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );
+				state.texImage2D( textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null );
 
 
 			}
 			}
 
 
@@ -24833,7 +24865,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753
 		} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753
 
 
-			_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );
+			_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, level );
 
 
 		}
 		}
 
 
@@ -25054,7 +25086,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		if ( colorTexture !== undefined ) {
 		if ( colorTexture !== undefined ) {
 
 
-			setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );
+			setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0 );
 
 
 		}
 		}
 
 
@@ -25101,13 +25133,41 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			for ( let i = 0; i < 6; i ++ ) {
 			for ( let i = 0; i < 6; i ++ ) {
 
 
-				renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();
+				if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+					renderTargetProperties.__webglFramebuffer[ i ] = [];
+
+					for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+						renderTargetProperties.__webglFramebuffer[ i ][ level ] = _gl.createFramebuffer();
+
+					}
+
+				} else {
+
+					renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();
+
+				}
 
 
 			}
 			}
 
 
 		} else {
 		} else {
 
 
-			renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();
+			if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+				renderTargetProperties.__webglFramebuffer = [];
+
+				for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+					renderTargetProperties.__webglFramebuffer[ level ] = _gl.createFramebuffer();
+
+				}
+
+			} else {
+
+				renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();
+
+			}
 
 
 			if ( isMultipleRenderTargets ) {
 			if ( isMultipleRenderTargets ) {
 
 
@@ -25187,7 +25247,19 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			for ( let i = 0; i < 6; i ++ ) {
 			for ( let i = 0; i < 6; i ++ ) {
 
 
-				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );
+				if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+					for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+						setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ][ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level );
+
+					}
+
+				} else {
+
+					setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0 );
+
+				}
 
 
 			}
 			}
 
 
@@ -25210,7 +25282,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 				state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );
 				state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );
 				setTextureParameters( _gl.TEXTURE_2D, attachment, supportsMips );
 				setTextureParameters( _gl.TEXTURE_2D, attachment, supportsMips );
-				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D );
+				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );
 
 
 				if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
 				if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
 
 
@@ -25242,7 +25314,20 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			state.bindTexture( glTextureType, textureProperties.__webglTexture );
 			state.bindTexture( glTextureType, textureProperties.__webglTexture );
 			setTextureParameters( glTextureType, texture, supportsMips );
 			setTextureParameters( glTextureType, texture, supportsMips );
-			setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType );
+
+			if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+				for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+					setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level );
+
+				}
+
+			} else {
+
+				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0 );
+
+			}
 
 
 			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
 			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
 
 
@@ -29987,7 +30072,16 @@ class WebGLRenderer {
 
 
 				if ( renderTarget.isWebGLCubeRenderTarget ) {
 				if ( renderTarget.isWebGLCubeRenderTarget ) {
 
 
-					framebuffer = __webglFramebuffer[ activeCubeFace ];
+					if ( Array.isArray( __webglFramebuffer[ activeCubeFace ] ) ) {
+
+						framebuffer = __webglFramebuffer[ activeCubeFace ][ activeMipmapLevel ];
+
+					} else {
+
+						framebuffer = __webglFramebuffer[ activeCubeFace ];
+
+					}
+
 					isCube = true;
 					isCube = true;
 
 
 				} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
 				} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
@@ -29996,7 +30090,15 @@ class WebGLRenderer {
 
 
 				} else {
 				} else {
 
 
-					framebuffer = __webglFramebuffer;
+					if ( Array.isArray( __webglFramebuffer ) ) {
+
+						framebuffer = __webglFramebuffer[ activeMipmapLevel ];
+
+					} else {
+
+						framebuffer = __webglFramebuffer;
+
+					}
 
 
 				}
 				}
 
 

+ 116 - 14
build/three.js

@@ -23651,6 +23651,17 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 
 
 			}
 			}
 
 
+			if ( glFormat === _gl.RED_INTEGER ) {
+
+				if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8UI;
+				if ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.R16UI;
+				if ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.R32UI;
+				if ( glType === _gl.BYTE ) internalFormat = _gl.R8I;
+				if ( glType === _gl.SHORT ) internalFormat = _gl.R16I;
+				if ( glType === _gl.INT ) internalFormat = _gl.R32I;
+
+			}
+
 			if ( glFormat === _gl.RG ) {
 			if ( glFormat === _gl.RG ) {
 
 
 				if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;
 				if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;
@@ -23827,14 +23838,32 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 
 
 				for ( let i = 0; i < 6; i ++ ) {
 				for ( let i = 0; i < 6; i ++ ) {
 
 
-					_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );
+					if ( Array.isArray( renderTargetProperties.__webglFramebuffer[ i ] ) ) {
+
+						for ( let level = 0; level < renderTargetProperties.__webglFramebuffer[ i ].length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ][ level ] );
+
+					} else {
+
+						_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );
+
+					}
+
 					if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );
 					if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );
 
 
 				}
 				}
 
 
 			} else {
 			} else {
 
 
-				_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
+				if ( Array.isArray( renderTargetProperties.__webglFramebuffer ) ) {
+
+					for ( let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ level ] );
+
+				} else {
+
+					_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
+
+				}
+
 				if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
 				if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
 				if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );
 				if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );
 
 
@@ -24809,7 +24838,7 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 		// Render targets
 		// Render targets
 
 
 		// Setup storage for target texture and bind it to correct framebuffer
 		// Setup storage for target texture and bind it to correct framebuffer
-		function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {
+		function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget, level ) {
 
 
 			const glFormat = utils.convert( texture.format, texture.colorSpace );
 			const glFormat = utils.convert( texture.format, texture.colorSpace );
 			const glType = utils.convert( texture.type );
 			const glType = utils.convert( texture.type );
@@ -24818,13 +24847,16 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 
 
 			if ( ! renderTargetProperties.__hasExternalTextures ) {
 			if ( ! renderTargetProperties.__hasExternalTextures ) {
 
 
+				const width = Math.max( 1, renderTarget.width >> level );
+				const height = Math.max( 1, renderTarget.height >> level );
+
 				if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
 				if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
 
 
-					state.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );
+					state.texImage3D( textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null );
 
 
 				} else {
 				} else {
 
 
-					state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );
+					state.texImage2D( textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null );
 
 
 				}
 				}
 
 
@@ -24838,7 +24870,7 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 
 
 			} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753
 			} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753
 
 
-				_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );
+				_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, level );
 
 
 			}
 			}
 
 
@@ -25059,7 +25091,7 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 
 
 			if ( colorTexture !== undefined ) {
 			if ( colorTexture !== undefined ) {
 
 
-				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );
+				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0 );
 
 
 			}
 			}
 
 
@@ -25106,13 +25138,41 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 
 
 				for ( let i = 0; i < 6; i ++ ) {
 				for ( let i = 0; i < 6; i ++ ) {
 
 
-					renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();
+					if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+						renderTargetProperties.__webglFramebuffer[ i ] = [];
+
+						for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+							renderTargetProperties.__webglFramebuffer[ i ][ level ] = _gl.createFramebuffer();
+
+						}
+
+					} else {
+
+						renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();
+
+					}
 
 
 				}
 				}
 
 
 			} else {
 			} else {
 
 
-				renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();
+				if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+					renderTargetProperties.__webglFramebuffer = [];
+
+					for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+						renderTargetProperties.__webglFramebuffer[ level ] = _gl.createFramebuffer();
+
+					}
+
+				} else {
+
+					renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();
+
+				}
 
 
 				if ( isMultipleRenderTargets ) {
 				if ( isMultipleRenderTargets ) {
 
 
@@ -25192,7 +25252,19 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 
 
 				for ( let i = 0; i < 6; i ++ ) {
 				for ( let i = 0; i < 6; i ++ ) {
 
 
-					setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );
+					if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+						for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+							setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ][ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level );
+
+						}
+
+					} else {
+
+						setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0 );
+
+					}
 
 
 				}
 				}
 
 
@@ -25215,7 +25287,7 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 
 
 					state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );
 					state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );
 					setTextureParameters( _gl.TEXTURE_2D, attachment, supportsMips );
 					setTextureParameters( _gl.TEXTURE_2D, attachment, supportsMips );
-					setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D );
+					setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );
 
 
 					if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
 					if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
 
 
@@ -25247,7 +25319,20 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 
 
 				state.bindTexture( glTextureType, textureProperties.__webglTexture );
 				state.bindTexture( glTextureType, textureProperties.__webglTexture );
 				setTextureParameters( glTextureType, texture, supportsMips );
 				setTextureParameters( glTextureType, texture, supportsMips );
-				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType );
+
+				if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+					for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+						setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level );
+
+					}
+
+				} else {
+
+					setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0 );
+
+				}
 
 
 				if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
 				if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
 
 
@@ -29992,7 +30077,16 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 
 
 					if ( renderTarget.isWebGLCubeRenderTarget ) {
 					if ( renderTarget.isWebGLCubeRenderTarget ) {
 
 
-						framebuffer = __webglFramebuffer[ activeCubeFace ];
+						if ( Array.isArray( __webglFramebuffer[ activeCubeFace ] ) ) {
+
+							framebuffer = __webglFramebuffer[ activeCubeFace ][ activeMipmapLevel ];
+
+						} else {
+
+							framebuffer = __webglFramebuffer[ activeCubeFace ];
+
+						}
+
 						isCube = true;
 						isCube = true;
 
 
 					} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
 					} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
@@ -30001,7 +30095,15 @@ console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated
 
 
 					} else {
 					} else {
 
 
-						framebuffer = __webglFramebuffer;
+						if ( Array.isArray( __webglFramebuffer ) ) {
+
+							framebuffer = __webglFramebuffer[ activeMipmapLevel ];
+
+						} else {
+
+							framebuffer = __webglFramebuffer;
+
+						}
 
 
 					}
 					}
 
 

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


+ 116 - 14
build/three.module.js

@@ -23644,6 +23644,17 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		}
 		}
 
 
+		if ( glFormat === _gl.RED_INTEGER ) {
+
+			if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8UI;
+			if ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.R16UI;
+			if ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.R32UI;
+			if ( glType === _gl.BYTE ) internalFormat = _gl.R8I;
+			if ( glType === _gl.SHORT ) internalFormat = _gl.R16I;
+			if ( glType === _gl.INT ) internalFormat = _gl.R32I;
+
+		}
+
 		if ( glFormat === _gl.RG ) {
 		if ( glFormat === _gl.RG ) {
 
 
 			if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;
 			if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;
@@ -23820,14 +23831,32 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			for ( let i = 0; i < 6; i ++ ) {
 			for ( let i = 0; i < 6; i ++ ) {
 
 
-				_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );
+				if ( Array.isArray( renderTargetProperties.__webglFramebuffer[ i ] ) ) {
+
+					for ( let level = 0; level < renderTargetProperties.__webglFramebuffer[ i ].length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ][ level ] );
+
+				} else {
+
+					_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );
+
+				}
+
 				if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );
 				if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );
 
 
 			}
 			}
 
 
 		} else {
 		} else {
 
 
-			_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
+			if ( Array.isArray( renderTargetProperties.__webglFramebuffer ) ) {
+
+				for ( let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ level ] );
+
+			} else {
+
+				_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
+
+			}
+
 			if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
 			if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
 			if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );
 			if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );
 
 
@@ -24802,7 +24831,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 	// Render targets
 	// Render targets
 
 
 	// Setup storage for target texture and bind it to correct framebuffer
 	// Setup storage for target texture and bind it to correct framebuffer
-	function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {
+	function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget, level ) {
 
 
 		const glFormat = utils.convert( texture.format, texture.colorSpace );
 		const glFormat = utils.convert( texture.format, texture.colorSpace );
 		const glType = utils.convert( texture.type );
 		const glType = utils.convert( texture.type );
@@ -24811,13 +24840,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		if ( ! renderTargetProperties.__hasExternalTextures ) {
 		if ( ! renderTargetProperties.__hasExternalTextures ) {
 
 
+			const width = Math.max( 1, renderTarget.width >> level );
+			const height = Math.max( 1, renderTarget.height >> level );
+
 			if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
 			if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
 
 
-				state.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );
+				state.texImage3D( textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null );
 
 
 			} else {
 			} else {
 
 
-				state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );
+				state.texImage2D( textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null );
 
 
 			}
 			}
 
 
@@ -24831,7 +24863,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753
 		} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753
 
 
-			_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );
+			_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, level );
 
 
 		}
 		}
 
 
@@ -25052,7 +25084,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		if ( colorTexture !== undefined ) {
 		if ( colorTexture !== undefined ) {
 
 
-			setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );
+			setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0 );
 
 
 		}
 		}
 
 
@@ -25099,13 +25131,41 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			for ( let i = 0; i < 6; i ++ ) {
 			for ( let i = 0; i < 6; i ++ ) {
 
 
-				renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();
+				if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+					renderTargetProperties.__webglFramebuffer[ i ] = [];
+
+					for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+						renderTargetProperties.__webglFramebuffer[ i ][ level ] = _gl.createFramebuffer();
+
+					}
+
+				} else {
+
+					renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();
+
+				}
 
 
 			}
 			}
 
 
 		} else {
 		} else {
 
 
-			renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();
+			if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+				renderTargetProperties.__webglFramebuffer = [];
+
+				for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+					renderTargetProperties.__webglFramebuffer[ level ] = _gl.createFramebuffer();
+
+				}
+
+			} else {
+
+				renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();
+
+			}
 
 
 			if ( isMultipleRenderTargets ) {
 			if ( isMultipleRenderTargets ) {
 
 
@@ -25185,7 +25245,19 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			for ( let i = 0; i < 6; i ++ ) {
 			for ( let i = 0; i < 6; i ++ ) {
 
 
-				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );
+				if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+					for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+						setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ][ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level );
+
+					}
+
+				} else {
+
+					setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0 );
+
+				}
 
 
 			}
 			}
 
 
@@ -25208,7 +25280,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 				state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );
 				state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );
 				setTextureParameters( _gl.TEXTURE_2D, attachment, supportsMips );
 				setTextureParameters( _gl.TEXTURE_2D, attachment, supportsMips );
-				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D );
+				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );
 
 
 				if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
 				if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
 
 
@@ -25240,7 +25312,20 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			state.bindTexture( glTextureType, textureProperties.__webglTexture );
 			state.bindTexture( glTextureType, textureProperties.__webglTexture );
 			setTextureParameters( glTextureType, texture, supportsMips );
 			setTextureParameters( glTextureType, texture, supportsMips );
-			setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType );
+
+			if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+
+				for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
+
+					setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level );
+
+				}
+
+			} else {
+
+				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0 );
+
+			}
 
 
 			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
 			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
 
 
@@ -29985,7 +30070,16 @@ class WebGLRenderer {
 
 
 				if ( renderTarget.isWebGLCubeRenderTarget ) {
 				if ( renderTarget.isWebGLCubeRenderTarget ) {
 
 
-					framebuffer = __webglFramebuffer[ activeCubeFace ];
+					if ( Array.isArray( __webglFramebuffer[ activeCubeFace ] ) ) {
+
+						framebuffer = __webglFramebuffer[ activeCubeFace ][ activeMipmapLevel ];
+
+					} else {
+
+						framebuffer = __webglFramebuffer[ activeCubeFace ];
+
+					}
+
 					isCube = true;
 					isCube = true;
 
 
 				} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
 				} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
@@ -29994,7 +30088,15 @@ class WebGLRenderer {
 
 
 				} else {
 				} else {
 
 
-					framebuffer = __webglFramebuffer;
+					if ( Array.isArray( __webglFramebuffer ) ) {
+
+						framebuffer = __webglFramebuffer[ activeMipmapLevel ];
+
+					} else {
+
+						framebuffer = __webglFramebuffer;
+
+					}
 
 
 				}
 				}
 
 

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


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