From 79ad4be3cb4e427488692cf8b082edbecdb86dd6 Mon Sep 17 00:00:00 2001 From: tschw Date: Wed, 4 May 2016 21:11:31 +0200 Subject: [PATCH] Maintenance (#8802) * Legacy: Moved EventDispatcher.prototype.apply. * WebGLShadowMap: Renamed face selection parameters. * WebGLShadowMap: Clarified code. * WebGLShadowMap: Renamed face selection parameters. --- docs/api/renderers/WebGLRenderer.html | 8 ++--- examples/webgl_clipping_advanced.html | 2 +- examples/webgl_lights_hemisphere.html | 2 +- examples/webgl_loader_ply.html | 2 +- examples/webgl_loader_stl.html | 2 +- examples/webgl_materials_bumpmap.html | 2 +- examples/webgl_materials_bumpmap_skin.html | 2 +- examples/webgl_materials_cubemap_dynamic.html | 2 +- src/Three.Legacy.js | 28 ++++++++++++--- src/core/EventDispatcher.js | 35 ++----------------- src/renderers/webgl/WebGLShadowMap.js | 20 ++++++++--- 11 files changed, 53 insertions(+), 52 deletions(-) diff --git a/docs/api/renderers/WebGLRenderer.html b/docs/api/renderers/WebGLRenderer.html index b8b07391c9aab..3d4ffa37f6006 100644 --- a/docs/api/renderers/WebGLRenderer.html +++ b/docs/api/renderers/WebGLRenderer.html @@ -105,13 +105,13 @@

[property:Integer shadowMap.type]

Defines shadow map type (unfiltered, percentage close filtering, percentage close filtering with bilinear filtering in shader)
Options are THREE.BasicShadowMap, THREE.PCFShadowMap, THREE.PCFSoftShadowMap. Default is THREE.PCFShadowMap.
-

[property:Boolean shadowMap.flipSidedFaces]

+

[property:Boolean shadowMap.renderReverseSided]

-
Whether to flip front and back sides of surfaces when rendering the shadow map. The default is true.
+
Default is true. Whether to render the opposite side as specified by the material into the shadow map. When disabled, an appropriate shadow.bias must be set on the light source for surfaces that can both cast and receive shadows at the same time to render correctly.
-

[property:Boolean shadowMap.allowDoubleSided]

+

[property:Boolean shadowMap.renderSingleSided]

-
Whether to allow double sided shadow rendering, off by default. When enabled, an appropriate shadow.bias must be set on the light source to keep surfaces from casting a shadow on themselves that will not render properly. When disabled, double sided faces are treated like front-facing ones.
+
Default is true. Whether to treat materials specified as double-sided as if they were specified as front-sided when rendering the shadow map. When disabled, an appropriate shadow.bias must be set on the light source for surfaces that can both cast and receive shadows at the same time to render correctly.

[property:Integer maxMorphTargets]

diff --git a/examples/webgl_clipping_advanced.html b/examples/webgl_clipping_advanced.html index d27965840a8dd..369df9d3e697f 100644 --- a/examples/webgl_clipping_advanced.html +++ b/examples/webgl_clipping_advanced.html @@ -267,7 +267,7 @@ renderer = new THREE.WebGLRenderer(); renderer.shadowMap.enabled = true; - renderer.shadowMap.allowDoubleSided = true; + renderer.shadowMap.renderSingleSided = false; renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); window.addEventListener( 'resize', onWindowResize, false ); diff --git a/examples/webgl_lights_hemisphere.html b/examples/webgl_lights_hemisphere.html index 2134f8e2ac4d5..7afee77a1b16f 100644 --- a/examples/webgl_lights_hemisphere.html +++ b/examples/webgl_lights_hemisphere.html @@ -226,7 +226,7 @@ renderer.gammaOutput = true; renderer.shadowMap.enabled = true; - renderer.shadowMap.flipSidedFaces = false; + renderer.shadowMap.renderReverseSided = false; // STATS diff --git a/examples/webgl_loader_ply.html b/examples/webgl_loader_ply.html index 84a9dfd94b2df..3bc4f0d1218d6 100644 --- a/examples/webgl_loader_ply.html +++ b/examples/webgl_loader_ply.html @@ -126,7 +126,7 @@ renderer.gammaOutput = true; renderer.shadowMap.enabled = true; - renderer.shadowMap.flipSidedFaces = false; + renderer.shadowMap.renderReverseSided = false; container.appendChild( renderer.domElement ); diff --git a/examples/webgl_loader_stl.html b/examples/webgl_loader_stl.html index 27b4905bf35db..db628c8535e91 100644 --- a/examples/webgl_loader_stl.html +++ b/examples/webgl_loader_stl.html @@ -180,7 +180,7 @@ renderer.gammaOutput = true; renderer.shadowMap.enabled = true; - renderer.shadowMap.flipSidedFaces = false; + renderer.shadowMap.renderReverseSided = false; container.appendChild( renderer.domElement ); diff --git a/examples/webgl_materials_bumpmap.html b/examples/webgl_materials_bumpmap.html index 9953aa7aeb54a..cdf2aeb73764a 100644 --- a/examples/webgl_materials_bumpmap.html +++ b/examples/webgl_materials_bumpmap.html @@ -135,7 +135,7 @@ container.appendChild( renderer.domElement ); renderer.shadowMap.enabled = true; - renderer.shadowMap.flipSidedFaces = false; + renderer.shadowMap.renderReverseSided = false; // diff --git a/examples/webgl_materials_bumpmap_skin.html b/examples/webgl_materials_bumpmap_skin.html index 03472a2b24084..af8f9fc8d9cbb 100644 --- a/examples/webgl_materials_bumpmap_skin.html +++ b/examples/webgl_materials_bumpmap_skin.html @@ -140,7 +140,7 @@ container.appendChild( renderer.domElement ); renderer.shadowMap.enabled = true; - renderer.shadowMap.flipSidedFaces = false; + renderer.shadowMap.renderReverseSided = false; renderer.autoClear = false; diff --git a/examples/webgl_materials_cubemap_dynamic.html b/examples/webgl_materials_cubemap_dynamic.html index 2686b81a0464b..970632091cd7d 100644 --- a/examples/webgl_materials_cubemap_dynamic.html +++ b/examples/webgl_materials_cubemap_dynamic.html @@ -184,7 +184,7 @@ // SHADOW - renderer.shadowMap.flipSidedFaces = false; + renderer.shadowMap.renderReverseSided = false; renderer.shadowMap.enabled = true; // STATS diff --git a/src/Three.Legacy.js b/src/Three.Legacy.js index a011d4c633c0e..dd1291babe017 100644 --- a/src/Three.Legacy.js +++ b/src/Three.Legacy.js @@ -472,6 +472,25 @@ Object.defineProperties( THREE.ShaderMaterial.prototype, { // +THREE.EventDispatcher.prototype = Object.assign( Object.create( { + + // Note: Extra base ensures these properties are not 'assign'ed. + + constructor: THREE.EventDispatcher, + + apply: function( target ) { + + console.warn( "THREE.EventDispatcher: .apply is deprecated, " + + "just inherit or Object.assign the prototype to mix-in." ); + + Object.assign( target, this ); + + } + +} ), THREE.EventDispatcher.prototype ); + +// + Object.defineProperties( THREE.WebGLRenderer.prototype, { supportsFloatTextures: { value: function () { @@ -577,13 +596,12 @@ Object.defineProperties( THREE.WebGLRenderer.prototype, { Object.defineProperty( THREE.WebGLShadowMap.prototype, 'cullFace', { set: function( cullFace ) { - var flipSided = ( cullFace !== THREE.CullFaceBack ); - console.warn( "WebGLRenderer: .shadowMap.cullFace is deprecated. " + - " Set .shadowMap.flipSidedFaces to " + flipSided + "." ); - this.flipSidedFaces = flipSided; + var value = ( cullFace !== THREE.CullFaceBack ); + console.warn( "WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to " + value + "." ); + this.renderReverseSided = value; }, get: function() { - return this.flipSidedFaces ? THREE.CullFaceFront : THREE.CullFaceBack; + return this.renderReverseSided ? THREE.CullFaceFront : THREE.CullFaceBack; } } ); diff --git a/src/core/EventDispatcher.js b/src/core/EventDispatcher.js index 2246456075187..2941438d7eeb0 100644 --- a/src/core/EventDispatcher.js +++ b/src/core/EventDispatcher.js @@ -4,39 +4,10 @@ THREE.EventDispatcher = function () {}; -// -// [Deprecation] -// +Object.assign( THREE.EventDispatcher.prototype, { -THREE.EventDispatcher.prototype = Object.assign( Object.create( { - - constructor: THREE.EventDispatcher, - - apply: function ( object ) { - - console.warn( "THREE.EventDispatcher: .apply is deprecated, " + - "just inherit or Object.assign the prototype to mix-in." ); - - object.addEventListener = THREE.EventDispatcher.prototype.addEventListener; - object.hasEventListener = THREE.EventDispatcher.prototype.hasEventListener; - object.removeEventListener = THREE.EventDispatcher.prototype.removeEventListener; - object.dispatchEvent = THREE.EventDispatcher.prototype.dispatchEvent; - - } - - // Notes: - // - The prototype chain ensures that Object.assign will not copy the - // properties within this block. - // - When .constructor is not explicitly set, it is not copied either, - // so use the disabled code below so doesn't need to be clobbered. - -} ), { - -// -// [/Deprecation] -// - -//Object.assign( THREE.EventDispatcher.prototype, { + // Note: *No* constructor here, this would clobber that property + // of the target class when used as a mixin. addEventListener: function ( type, listener ) { diff --git a/src/renderers/webgl/WebGLShadowMap.js b/src/renderers/webgl/WebGLShadowMap.js index 6602ca926e605..b778b53b50e6e 100644 --- a/src/renderers/webgl/WebGLShadowMap.js +++ b/src/renderers/webgl/WebGLShadowMap.js @@ -91,8 +91,8 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) { this.type = THREE.PCFShadowMap; - this.flipSidedFaces = true; - this.allowDoubleSided = false; + this.renderReverseSided = true; + this.renderSingleSided = true; this.render = function ( scene, camera ) { @@ -358,8 +358,20 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) { result.wireframe = material.wireframe; var side = material.side; - if ( ! scope.allowDoubleSided ) side &= 1; - if ( scope.flipSidedFaces && side < 2 ) side ^= 1; + + if ( scope.renderSingleSided && side == THREE.DoubleSide ) { + + side = THREE.FrontSide; + + } + + if ( scope.renderReverseSided ) { + + if ( side === THREE.FrontSide ) side = THREE.BackSide; + else if ( side === THREE.BackSide ) side = THREE.FrontSide; + + } + result.side = side; result.clipShadows = material.clipShadows;