瀏覽代碼

WebGLRenderer: Limited WebGL1 backwards compatibility for transmission. (#23452)

* WebGLRenderer: Limited WebGL1 backwards compatibility for transmission.

* Update WebGLRenderer.js

* Updated docs.
mrdoob 3 年之前
父節點
當前提交
12ad8a3cdb

+ 1 - 3
docs/api/en/materials/MeshPhysicalMaterial.html

@@ -188,9 +188,7 @@
 
 		The transmission property can be used to model these materials.<br />
 
-		When transmission is non-zero, [page:Material.opacity opacity] should be set to *1*.<br />
-
-		This feature can only be used with a WebGL 2 rendering context.
+		When transmission is non-zero, [page:Material.opacity opacity] should be set to *1*.
 		</p>
 
 		<h3>[property:Texture transmissionMap]</h3>

+ 1 - 3
docs/api/zh/materials/MeshPhysicalMaterial.html

@@ -184,9 +184,7 @@
 
 		The transmission property can be used to model these materials.<br />
 
-		When transmission is non-zero, [page:Material.opacity opacity] should be set to *1*.<br />
-
-		This feature can only be used with a WebGL 2 rendering context.
+		When transmission is non-zero, [page:Material.opacity opacity] should be set to *1*.
 		</p>
 
 		<h3>[property:Texture transmissionMap]</h3>

+ 5 - 11
src/renderers/WebGLRenderer.js

@@ -9,6 +9,7 @@ import {
 	UnsignedByteType,
 	LinearEncoding,
 	NoToneMapping,
+	LinearFilter,
 	LinearMipmapLinearFilter
 } from '../constants.js';
 import { Frustum } from '../math/Frustum.js';
@@ -1184,29 +1185,22 @@ function WebGLRenderer( parameters = {} ) {
 
 	function renderTransmissionPass( opaqueObjects, scene, camera ) {
 
-		if ( capabilities.isWebGL2 === false ) {
-
-			console.error( 'THREE.WebGLRenderer: Transmission can only be used with WebGL 2.' );
-			return;
-
-		}
+		const isWebGL2 = capabilities.isWebGL2;
 
 		if ( _transmissionRenderTarget === null ) {
 
-			const renderTargetType = ( _antialias === true ) ? WebGLMultisampleRenderTarget : WebGLRenderTarget;
+			const renderTargetType = ( isWebGL2 && _antialias === true ) ? WebGLMultisampleRenderTarget : WebGLRenderTarget;
 
 			_transmissionRenderTarget = new renderTargetType( 1, 1, {
 				generateMipmaps: true,
 				type: HalfFloatType,
-				minFilter: LinearMipmapLinearFilter,
+				minFilter: isWebGL2 ? LinearMipmapLinearFilter : LinearFilter,
 				useRenderToTexture: extensions.has( 'WEBGL_multisampled_render_to_texture' )
 			} );
 
 		}
 
-		// set size of transmission render target to half size of drawing buffer
-
-		_this.getDrawingBufferSize( _vector2 ).multiplyScalar( 0.5 ).floor();
+		_this.getDrawingBufferSize( _vector2 );
 		_transmissionRenderTarget.setSize( _vector2.x, _vector2.y );
 
 		//