|
@@ -8598,7 +8598,7 @@ function Material() {
|
|
|
|
|
|
this.userData = {};
|
|
|
|
|
|
- this.needsUpdate = true;
|
|
|
+ this.version = 0;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -8946,6 +8946,16 @@ Material.prototype = Object.assign( Object.create( EventDispatcher.prototype ),
|
|
|
|
|
|
} );
|
|
|
|
|
|
+Object.defineProperty( Material.prototype, 'needsUpdate', {
|
|
|
+
|
|
|
+ set: function ( value ) {
|
|
|
+
|
|
|
+ if ( value === true ) this.version ++;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+} );
|
|
|
+
|
|
|
/**
|
|
|
* @author mrdoob / http://mrdoob.com/
|
|
|
* @author alteredq / http://alteredqualia.com/
|
|
@@ -22835,6 +22845,7 @@ function WebVRManager( renderer ) {
|
|
|
//
|
|
|
|
|
|
var triggers = [];
|
|
|
+ var grips = [];
|
|
|
|
|
|
function findGamepad( id ) {
|
|
|
|
|
@@ -22910,6 +22921,33 @@ function WebVRManager( renderer ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ // Grip
|
|
|
+ buttonId = 2;
|
|
|
+
|
|
|
+ if ( grips[ i ] === undefined ) grips[ i ] = false;
|
|
|
+
|
|
|
+ // Skip if the grip button doesn't exist on this controller
|
|
|
+ if ( gamepad.buttons[ buttonId ] !== undefined ) {
|
|
|
+
|
|
|
+ if ( grips[ i ] !== gamepad.buttons[ buttonId ].pressed ) {
|
|
|
+
|
|
|
+ grips[ i ] = gamepad.buttons[ buttonId ].pressed;
|
|
|
+
|
|
|
+ if ( grips[ i ] === true ) {
|
|
|
+
|
|
|
+ controller.dispatchEvent( { type: 'squeezestart' } );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ controller.dispatchEvent( { type: 'squeezeend' } );
|
|
|
+ controller.dispatchEvent( { type: 'squeeze' } );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
} else {
|
|
|
|
|
|
controller.visible = false;
|
|
@@ -23282,6 +23320,9 @@ function WebXRManager( renderer, gl ) {
|
|
|
session.addEventListener( 'select', onSessionEvent );
|
|
|
session.addEventListener( 'selectstart', onSessionEvent );
|
|
|
session.addEventListener( 'selectend', onSessionEvent );
|
|
|
+ session.addEventListener( 'squeeze', onSessionEvent );
|
|
|
+ session.addEventListener( 'squeezestart', onSessionEvent );
|
|
|
+ session.addEventListener( 'squeezeend', onSessionEvent );
|
|
|
session.addEventListener( 'end', onSessionEnd );
|
|
|
|
|
|
// eslint-disable-next-line no-undef
|
|
@@ -25125,7 +25166,7 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( material.needsUpdate === false ) {
|
|
|
+ if ( material.version === materialProperties.__version ) {
|
|
|
|
|
|
if ( materialProperties.program === undefined ) {
|
|
|
|
|
@@ -25149,10 +25190,10 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( material.needsUpdate ) {
|
|
|
+ if ( material.version !== materialProperties.__version ) {
|
|
|
|
|
|
initMaterial( material, fog, object );
|
|
|
- material.needsUpdate = false;
|
|
|
+ materialProperties.__version = material.version;
|
|
|
|
|
|
}
|
|
|
|