|
@@ -17879,7 +17879,15 @@ function WebGLLights() {
|
|
|
|
|
|
id: count ++,
|
|
|
|
|
|
- hash: '',
|
|
|
+ hash: {
|
|
|
+ stateID: - 1,
|
|
|
+ directionalLength: - 1,
|
|
|
+ pointLength: - 1,
|
|
|
+ spotLength: - 1,
|
|
|
+ rectAreaLength: - 1,
|
|
|
+ hemiLength: - 1,
|
|
|
+ shadowsLength: - 1
|
|
|
+ },
|
|
|
|
|
|
ambient: [ 0, 0, 0 ],
|
|
|
directional: [],
|
|
@@ -18085,7 +18093,13 @@ function WebGLLights() {
|
|
|
state.point.length = pointLength;
|
|
|
state.hemi.length = hemiLength;
|
|
|
|
|
|
- state.hash = state.id + ',' + directionalLength + ',' + pointLength + ',' + spotLength + ',' + rectAreaLength + ',' + hemiLength + ',' + shadows.length;
|
|
|
+ state.hash.stateID = state.id;
|
|
|
+ state.hash.directionalLength = directionalLength;
|
|
|
+ state.hash.pointLength = pointLength;
|
|
|
+ state.hash.spotLength = spotLength;
|
|
|
+ state.hash.rectAreaLength = rectAreaLength;
|
|
|
+ state.hash.hemiLength = hemiLength;
|
|
|
+ state.hash.shadowsLength = shadows.length;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -22320,7 +22334,7 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
_currentGeometryProgram.geometry = geometry.id;
|
|
|
_currentGeometryProgram.program = program.id;
|
|
|
- _currentGeometryProgram.wireframe = material.wireframe;
|
|
|
+ _currentGeometryProgram.wireframe = material.wireframe === true;
|
|
|
updateBuffers = true;
|
|
|
|
|
|
}
|
|
@@ -23077,6 +23091,9 @@ function WebGLRenderer( parameters ) {
|
|
|
var lights = currentRenderState.state.lights;
|
|
|
var shadowsArray = currentRenderState.state.shadowsArray;
|
|
|
|
|
|
+ var lightsHash = materialProperties.lightsHash;
|
|
|
+ var lightsStateHash = lights.state.hash;
|
|
|
+
|
|
|
var parameters = programCache.getParameters(
|
|
|
material, lights.state, shadowsArray, fog, _clipping.numPlanes, _clipping.numIntersection, object );
|
|
|
|
|
@@ -23095,9 +23112,22 @@ function WebGLRenderer( parameters ) {
|
|
|
// changed glsl or parameters
|
|
|
releaseMaterialProgramReference( material );
|
|
|
|
|
|
- } else if ( materialProperties.lightsHash !== lights.state.hash ) {
|
|
|
+ } else if ( lightsHash.stateID !== lightsStateHash.stateID ||
|
|
|
+ lightsHash.directionalLength !== lightsStateHash.directionalLength ||
|
|
|
+ lightsHash.pointLength !== lightsStateHash.pointLength ||
|
|
|
+ lightsHash.spotLength !== lightsStateHash.spotLength ||
|
|
|
+ lightsHash.rectAreaLength !== lightsStateHash.rectAreaLength ||
|
|
|
+ lightsHash.hemiLength !== lightsStateHash.hemiLength ||
|
|
|
+ lightsHash.shadowsLength !== lightsStateHash.shadowsLength ) {
|
|
|
+
|
|
|
+ lightsHash.stateID = lightsStateHash.stateID;
|
|
|
+ lightsHash.directionalLength = lightsStateHash.directionalLength;
|
|
|
+ lightsHash.pointLength = lightsStateHash.pointLength;
|
|
|
+ lightsHash.spotLength = lightsStateHash.spotLength;
|
|
|
+ lightsHash.rectAreaLength = lightsStateHash.rectAreaLength;
|
|
|
+ lightsHash.hemiLength = lightsStateHash.hemiLength;
|
|
|
+ lightsHash.shadowsLength = lightsStateHash.shadowsLength;
|
|
|
|
|
|
- properties.update( material, 'lightsHash', lights.state.hash );
|
|
|
programChange = false;
|
|
|
|
|
|
} else if ( parameters.shaderID !== undefined ) {
|
|
@@ -23197,8 +23227,19 @@ function WebGLRenderer( parameters ) {
|
|
|
materialProperties.fog = fog;
|
|
|
|
|
|
// store the light setup it was created for
|
|
|
+ if ( lightsHash === undefined ) {
|
|
|
+
|
|
|
+ materialProperties.lightsHash = lightsHash = {};
|
|
|
|
|
|
- materialProperties.lightsHash = lights.state.hash;
|
|
|
+ }
|
|
|
+
|
|
|
+ lightsHash.stateID = lightsStateHash.stateID;
|
|
|
+ lightsHash.directionalLength = lightsStateHash.directionalLength;
|
|
|
+ lightsHash.pointLength = lightsStateHash.pointLength;
|
|
|
+ lightsHash.spotLength = lightsStateHash.spotLength;
|
|
|
+ lightsHash.rectAreaLength = lightsStateHash.rectAreaLength;
|
|
|
+ lightsHash.hemiLength = lightsStateHash.hemiLength;
|
|
|
+ lightsHash.shadowsLength = lightsStateHash.shadowsLength;
|
|
|
|
|
|
if ( material.lights ) {
|
|
|
|
|
@@ -23236,6 +23277,9 @@ function WebGLRenderer( parameters ) {
|
|
|
var materialProperties = properties.get( material );
|
|
|
var lights = currentRenderState.state.lights;
|
|
|
|
|
|
+ var lightsHash = materialProperties.lightsHash;
|
|
|
+ var lightsStateHash = lights.state.hash;
|
|
|
+
|
|
|
if ( _clippingEnabled ) {
|
|
|
|
|
|
if ( _localClippingEnabled || camera !== _currentCamera ) {
|
|
@@ -23265,7 +23309,13 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
material.needsUpdate = true;
|
|
|
|
|
|
- } else if ( material.lights && materialProperties.lightsHash !== lights.state.hash ) {
|
|
|
+ } else if ( material.lights && ( lightsHash.stateID !== lightsStateHash.stateID ||
|
|
|
+ lightsHash.directionalLength !== lightsStateHash.directionalLength ||
|
|
|
+ lightsHash.pointLength !== lightsStateHash.pointLength ||
|
|
|
+ lightsHash.spotLength !== lightsStateHash.spotLength ||
|
|
|
+ lightsHash.rectAreaLength !== lightsStateHash.rectAreaLength ||
|
|
|
+ lightsHash.hemiLength !== lightsStateHash.hemiLength ||
|
|
|
+ lightsHash.shadowsLength !== lightsStateHash.shadowsLength ) ) {
|
|
|
|
|
|
material.needsUpdate = true;
|
|
|
|
|
@@ -39659,6 +39709,7 @@ Audio.prototype = Object.assign( Object.create( Object3D.prototype ), {
|
|
|
if ( this.isPlaying === true ) {
|
|
|
|
|
|
this.source.stop();
|
|
|
+ this.source.onended = null;
|
|
|
this.offset += ( this.context.currentTime - this.startTime ) * this.playbackRate;
|
|
|
this.isPlaying = false;
|
|
|
|
|
@@ -39678,6 +39729,7 @@ Audio.prototype = Object.assign( Object.create( Object3D.prototype ), {
|
|
|
}
|
|
|
|
|
|
this.source.stop();
|
|
|
+ this.source.onended = null;
|
|
|
this.offset = 0;
|
|
|
this.isPlaying = false;
|
|
|
|