Przeglądaj źródła

Updated builds.

Mr.doob 5 lat temu
rodzic
commit
9e072aa7f7
3 zmienionych plików z 30 dodań i 36 usunięć
  1. 7 10
      build/three.js
  2. 16 16
      build/three.min.js
  3. 7 10
      build/three.module.js

+ 7 - 10
build/three.js

@@ -1136,11 +1136,9 @@
 
 		extractBasis: function ( xAxis, yAxis, zAxis ) {
 
-			var te = this.elements;
-
-			xAxis.fromArray( te, 0 );
-			yAxis.fromArray( te, 3 );
-			zAxis.fromArray( te, 6 );
+			xAxis.setFromMatrix3Column( this, 0 );
+			yAxis.setFromMatrix3Column( this, 1 );
+			zAxis.setFromMatrix3Column( this, 2 );
 
 			return this;
 
@@ -18407,6 +18405,9 @@
 
 		// clean up
 
+		gl.detachShader( program, glVertexShader );
+		gl.detachShader( program, glFragmentShader );
+
 		gl.deleteShader( glVertexShader );
 		gl.deleteShader( glFragmentShader );
 
@@ -19250,11 +19251,7 @@
 			point: [],
 			pointShadowMap: [],
 			pointShadowMatrix: [],
-			hemi: [],
-
-			numDirectionalShadows: - 1,
-			numPointShadows: - 1,
-			numSpotShadows: - 1
+			hemi: []
 
 		};
 

+ 16 - 16
build/three.min.js

@@ -82,9 +82,9 @@ l?"":"out highp vec4 pc_fragColor;",l?"":"#define gl_FragColor pc_fragColor","#d
 ["#version 300 es\n\n#extension GL_OVR_multiview2 : require","layout(num_views = "+u+") in;","#define VIEW_ID gl_ViewID_OVR"].join("\n")),e=e.replace("uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;",["uniform mat4 modelViewMatrices["+u+"];","uniform mat4 projectionMatrices["+u+"];","uniform mat4 viewMatrices["+u+"];","uniform mat3 normalMatrices["+u+"];","#define modelViewMatrix modelViewMatrices[VIEW_ID]\n#define projectionMatrix projectionMatrices[VIEW_ID]\n#define viewMatrix viewMatrices[VIEW_ID]\n#define normalMatrix normalMatrices[VIEW_ID]"].join("\n")),
 k=k.replace("#version 300 es\n","#version 300 es\n\n#extension GL_OVR_multiview2 : require\n#define VIEW_ID gl_ViewID_OVR"),k=k.replace("uniform mat4 viewMatrix;",["uniform mat4 viewMatrices["+u+"];","#define viewMatrix viewMatrices[VIEW_ID]"].join("\n"))));g=k+g;f=Lh(d,35633,e+f);g=Lh(d,35632,g);d.attachShader(r,f);d.attachShader(r,g);void 0!==c.index0AttributeName?d.bindAttribLocation(r,0,c.index0AttributeName):!0===c.morphTargets&&d.bindAttribLocation(r,0,"position");d.linkProgram(r);if(a.debug.checkShaderErrors){a=
 d.getProgramInfoLog(r).trim();l=d.getShaderInfoLog(f).trim();m=d.getShaderInfoLog(g).trim();p=x=!0;if(!1===d.getProgramParameter(r,35714))x=!1,h=Nh(d,f,"vertex"),t=Nh(d,g,"fragment"),console.error("THREE.WebGLProgram: shader error: ",d.getError(),"35715",d.getProgramParameter(r,35715),"gl.getProgramInfoLog",a,h,t);else if(""!==a)console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",a);else if(""===l||""===m)p=!1;p&&(this.diagnostics={runnable:x,programLog:a,vertexShader:{log:l,prefix:e},fragmentShader:{log:m,
-prefix:k}})}d.deleteShader(f);d.deleteShader(g);var n;this.getUniforms=function(){void 0===n&&(n=new Fb(d,r));return n};var v;this.getAttributes=function(){if(void 0===v){for(var a={},b=d.getProgramParameter(r,35721),c=0;c<b;c++){var e=d.getActiveAttrib(r,c).name;a[e]=d.getAttribLocation(r,e)}v=a}return v};this.destroy=function(){d.deleteProgram(r);this.program=void 0};this.name=c.shaderName;this.id=wk++;this.cacheKey=b;this.usedTimes=1;this.program=r;this.vertexShader=f;this.fragmentShader=g;this.numMultiviewViews=
-u;return this}function xk(a,b,c){function d(a){if(a)a.isTexture?b=a.encoding:a.isWebGLRenderTarget&&(console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),b=a.texture.encoding);else var b=3E3;return b}var e=[],f=c.isWebGL2,g=c.logarithmicDepthBuffer,k=c.floatVertexTextures,l=c.precision,m=c.maxVertexUniforms,x=c.vertexTextures,p={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",
-MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"},h="precision isWebGL2 supportsVertexTextures outputEncoding instancing numMultiviewViews map mapEncoding matcap matcapEncoding envMap envMapMode envMapEncoding envMapCubeUV lightMap lightMapEncoding aoMap emissiveMap emissiveMapEncoding bumpMap normalMap objectSpaceNormalMap tangentSpaceNormalMap clearcoatNormalMap displacementMap specularMap roughnessMap metalnessMap gradientMap alphaMap combine vertexColors vertexTangents vertexUvs uvsVertexOnly fog useFog fogExp2 flatShading sizeAttenuation logarithmicDepthBuffer skinning maxBones useVertexTexture morphTargets morphNormals maxMorphTargets maxMorphNormals premultipliedAlpha numDirLights numPointLights numSpotLights numHemiLights numRectAreaLights numDirLightShadows numPointLightShadows numSpotLightShadows shadowMapEnabled shadowMapType toneMapping physicallyCorrectLights alphaTest doubleSided flipSided numClippingPlanes numClipIntersection depthPacking dithering sheen".split(" ");
+prefix:k}})}d.detachShader(r,f);d.detachShader(r,g);d.deleteShader(f);d.deleteShader(g);var n;this.getUniforms=function(){void 0===n&&(n=new Fb(d,r));return n};var v;this.getAttributes=function(){if(void 0===v){for(var a={},b=d.getProgramParameter(r,35721),c=0;c<b;c++){var e=d.getActiveAttrib(r,c).name;a[e]=d.getAttribLocation(r,e)}v=a}return v};this.destroy=function(){d.deleteProgram(r);this.program=void 0};this.name=c.shaderName;this.id=wk++;this.cacheKey=b;this.usedTimes=1;this.program=r;this.vertexShader=
+f;this.fragmentShader=g;this.numMultiviewViews=u;return this}function xk(a,b,c){function d(a){if(a)a.isTexture?b=a.encoding:a.isWebGLRenderTarget&&(console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),b=a.texture.encoding);else var b=3E3;return b}var e=[],f=c.isWebGL2,g=c.logarithmicDepthBuffer,k=c.floatVertexTextures,l=c.precision,m=c.maxVertexUniforms,x=c.vertexTextures,p={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",
+MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"},h="precision isWebGL2 supportsVertexTextures outputEncoding instancing numMultiviewViews map mapEncoding matcap matcapEncoding envMap envMapMode envMapEncoding envMapCubeUV lightMap lightMapEncoding aoMap emissiveMap emissiveMapEncoding bumpMap normalMap objectSpaceNormalMap tangentSpaceNormalMap clearcoatNormalMap displacementMap specularMap roughnessMap metalnessMap gradientMap alphaMap combine vertexColors vertexTangents vertexUvs uvsVertexOnly fog useFog fogExp2 flatShading sizeAttenuation logarithmicDepthBuffer skinning maxBones useVertexTexture morphTargets morphNormals maxMorphTargets maxMorphNormals premultipliedAlpha numDirLights numPointLights numSpotLights numHemiLights numRectAreaLights numDirLightShadows numPointLightShadows numSpotLightShadows shadowMapEnabled shadowMapType toneMapping physicallyCorrectLights alphaTest doubleSided flipSided numClippingPlanes numClipIntersection depthPacking dithering sheen".split(" ");
 this.getParameters=function(e,h,q,n,v,C,W){var r=n.fog;n=e.isMeshStandardMaterial?n.environment:null;n=e.envMap||n;var t=p[e.type];if(W.isSkinnedMesh){var u=W.skeleton.bones;if(k)u=1024;else{var y=Math.min(Math.floor((m-20)/4),u.length);y<u.length?(console.warn("THREE.WebGLRenderer: Skeleton has "+u.length+" bones. This GPU supports "+y+"."),u=0):u=y}}else u=0;null!==e.precision&&(l=c.getMaxPrecision(e.precision),l!==e.precision&&console.warn("THREE.WebGLProgram.getParameters:",e.precision,"not supported, using",
 l,"instead."));t?(y=fb[t],y={name:e.type,uniforms:Th.clone(y.uniforms),vertexShader:y.vertexShader,fragmentShader:y.fragmentShader}):y={name:e.type,uniforms:e.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader};e.onBeforeCompile(y,a);var Ga=a.getRenderTarget();return{isWebGL2:f,shaderID:t,shaderName:y.name,uniforms:y.uniforms,vertexShader:y.vertexShader,fragmentShader:y.fragmentShader,defines:e.defines,isRawShaderMaterial:e.isRawShaderMaterial,isShaderMaterial:e.isShaderMaterial,
 precision:l,instancing:!0===W.isInstancedMesh,supportsVertexTextures:x,numMultiviewViews:Ga&&Ga.isWebGLMultiviewRenderTarget?Ga.numViews:0,outputEncoding:null!==Ga?d(Ga.texture):a.outputEncoding,map:!!e.map,mapEncoding:d(e.map),matcap:!!e.matcap,matcapEncoding:d(e.matcap),envMap:!!n,envMapMode:n&&n.mapping,envMapEncoding:d(n),envMapCubeUV:!!n&&(306===n.mapping||307===n.mapping),lightMap:!!e.lightMap,lightMapEncoding:d(e.lightMap),aoMap:!!e.aoMap,emissiveMap:!!e.emissiveMap,emissiveMapEncoding:d(e.emissiveMap),
@@ -99,16 +99,16 @@ b.renderOrder?a.renderOrder-b.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function U
 0},push:function(b,c,f,m,x,p){b=a(b,c,f,m,x,p);(!0===f.transparent?e:d).push(b)},unshift:function(b,c,f,m,x,p){b=a(b,c,f,m,x,p);(!0===f.transparent?e:d).unshift(b)},sort:function(a,b){1<d.length&&d.sort(a||zk);1<e.length&&e.sort(b||Ak)}}}function Bk(){function a(c){c=c.target;c.removeEventListener("dispose",a);b.delete(c)}var b=new WeakMap;return{get:function(c,d){var e=b.get(c);if(void 0===e){var f=new Uh;b.set(c,new WeakMap);b.get(c).set(d,f);c.addEventListener("dispose",a)}else f=e.get(d),void 0===
 f&&(f=new Uh,e.set(d,f));return f},dispose:function(){b=new WeakMap}}}function Ck(){var a={};return{get:function(b){if(void 0!==a[b.id])return a[b.id];switch(b.type){case "DirectionalLight":var c={direction:new n,color:new B,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new w};break;case "SpotLight":c={position:new n,direction:new n,color:new B,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new w};break;case "PointLight":c={position:new n,color:new B,
 distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new w,shadowCameraNear:1,shadowCameraFar:1E3};break;case "HemisphereLight":c={direction:new n,skyColor:new B,groundColor:new B};break;case "RectAreaLight":c={color:new B,position:new n,halfWidth:new n,halfHeight:new n}}return a[b.id]=c}}}function Dk(a,b){return(b.castShadow?1:0)-(a.castShadow?1:0)}function Ek(){for(var a=new Ck,b={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,
-numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},c=0;9>c;c++)b.probe.push(new n);var d=new n,e=new O,f=new O;return{setup:function(c,k,l){for(var g=0,x=0,p=0,h=0;9>h;h++)b.probe[h].set(0,0,0);var t=k=0,r=0,u=0,n=0,v=0,C=
-0,W=0;l=l.matrixWorldInverse;c.sort(Dk);h=0;for(var ja=c.length;h<ja;h++){var z=c[h],ra=z.color,fa=z.intensity,Ga=z.distance,w=z.shadow&&z.shadow.map?z.shadow.map.texture:null;if(z.isAmbientLight)g+=ra.r*fa,x+=ra.g*fa,p+=ra.b*fa;else if(z.isLightProbe)for(w=0;9>w;w++)b.probe[w].addScaledVector(z.sh.coefficients[w],fa);else if(z.isDirectionalLight){var G=a.get(z);G.color.copy(z.color).multiplyScalar(z.intensity);G.direction.setFromMatrixPosition(z.matrixWorld);d.setFromMatrixPosition(z.target.matrixWorld);
-G.direction.sub(d);G.direction.transformDirection(l);if(G.shadow=z.castShadow)fa=z.shadow,G.shadowBias=fa.bias,G.shadowRadius=fa.radius,G.shadowMapSize=fa.mapSize,b.directionalShadowMap[k]=w,b.directionalShadowMatrix[k]=z.shadow.matrix,v++;b.directional[k]=G;k++}else if(z.isSpotLight){G=a.get(z);G.position.setFromMatrixPosition(z.matrixWorld);G.position.applyMatrix4(l);G.color.copy(ra).multiplyScalar(fa);G.distance=Ga;G.direction.setFromMatrixPosition(z.matrixWorld);d.setFromMatrixPosition(z.target.matrixWorld);
-G.direction.sub(d);G.direction.transformDirection(l);G.coneCos=Math.cos(z.angle);G.penumbraCos=Math.cos(z.angle*(1-z.penumbra));G.decay=z.decay;if(G.shadow=z.castShadow)fa=z.shadow,G.shadowBias=fa.bias,G.shadowRadius=fa.radius,G.shadowMapSize=fa.mapSize,b.spotShadowMap[r]=w,b.spotShadowMatrix[r]=z.shadow.matrix,W++;b.spot[r]=G;r++}else if(z.isRectAreaLight)G=a.get(z),G.color.copy(ra).multiplyScalar(fa),G.position.setFromMatrixPosition(z.matrixWorld),G.position.applyMatrix4(l),f.identity(),e.copy(z.matrixWorld),
-e.premultiply(l),f.extractRotation(e),G.halfWidth.set(.5*z.width,0,0),G.halfHeight.set(0,.5*z.height,0),G.halfWidth.applyMatrix4(f),G.halfHeight.applyMatrix4(f),b.rectArea[u]=G,u++;else if(z.isPointLight){G=a.get(z);G.position.setFromMatrixPosition(z.matrixWorld);G.position.applyMatrix4(l);G.color.copy(z.color).multiplyScalar(z.intensity);G.distance=z.distance;G.decay=z.decay;if(G.shadow=z.castShadow)fa=z.shadow,G.shadowBias=fa.bias,G.shadowRadius=fa.radius,G.shadowMapSize=fa.mapSize,G.shadowCameraNear=
-fa.camera.near,G.shadowCameraFar=fa.camera.far,b.pointShadowMap[t]=w,b.pointShadowMatrix[t]=z.shadow.matrix,C++;b.point[t]=G;t++}else z.isHemisphereLight&&(G=a.get(z),G.direction.setFromMatrixPosition(z.matrixWorld),G.direction.transformDirection(l),G.direction.normalize(),G.skyColor.copy(z.color).multiplyScalar(fa),G.groundColor.copy(z.groundColor).multiplyScalar(fa),b.hemi[n]=G,n++)}b.ambient[0]=g;b.ambient[1]=x;b.ambient[2]=p;c=b.hash;if(c.directionalLength!==k||c.pointLength!==t||c.spotLength!==
-r||c.rectAreaLength!==u||c.hemiLength!==n||c.numDirectionalShadows!==v||c.numPointShadows!==C||c.numSpotShadows!==W)b.directional.length=k,b.spot.length=r,b.rectArea.length=u,b.point.length=t,b.hemi.length=n,b.directionalShadowMap.length=v,b.pointShadowMap.length=C,b.spotShadowMap.length=W,b.directionalShadowMatrix.length=v,b.pointShadowMatrix.length=C,b.spotShadowMatrix.length=W,c.directionalLength=k,c.pointLength=t,c.spotLength=r,c.rectAreaLength=u,c.hemiLength=n,c.numDirectionalShadows=v,c.numPointShadows=
-C,c.numSpotShadows=W,b.version=Fk++},state:b}}function Vh(){var a=new Ek,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},pushShadow:function(a){c.push(a)}}}function Gk(){function a(c){c=c.target;c.removeEventListener("dispose",a);b.delete(c)}var b=new WeakMap;return{get:function(c,d){if(!1===b.has(c)){var e=new Vh;b.set(c,new WeakMap);b.get(c).set(d,e);c.addEventListener("dispose",
-a)}else!1===b.get(c).has(d)?(e=new Vh,b.get(c).set(d,e)):e=b.get(c).get(d);return e},dispose:function(){b=new WeakMap}}}function Gb(a){K.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.fog=!1;this.setValues(a)}function Hb(a){K.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new n;this.nearDistance=
-1;this.farDistance=1E3;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.fog=!1;this.setValues(a)}function Wh(a,b,c){function d(a,b,c){c=a<<0|b<<1|c<<2;var d=p[c];void 0===d&&(d=new Gb({depthPacking:3201,morphTargets:a,skinning:b}),p[c]=d);return d}function e(a,b,c){c=a<<0|b<<1|c<<2;var d=h[c];void 0===d&&(d=new Hb({morphTargets:a,skinning:b}),h[c]=d);return d}function f(b,c,f,g,k,l){var m=b.geometry,p=d,x=b.customDepthMaterial;
+numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},c=0;9>c;c++)b.probe.push(new n);var d=new n,e=new O,f=new O;return{setup:function(c,k,l){for(var g=0,x=0,p=0,h=0;9>h;h++)b.probe[h].set(0,0,0);var t=k=0,r=0,u=0,n=0,v=0,C=0,W=0;l=l.matrixWorldInverse;c.sort(Dk);h=0;for(var ja=c.length;h<
+ja;h++){var z=c[h],ra=z.color,fa=z.intensity,Ga=z.distance,w=z.shadow&&z.shadow.map?z.shadow.map.texture:null;if(z.isAmbientLight)g+=ra.r*fa,x+=ra.g*fa,p+=ra.b*fa;else if(z.isLightProbe)for(w=0;9>w;w++)b.probe[w].addScaledVector(z.sh.coefficients[w],fa);else if(z.isDirectionalLight){var G=a.get(z);G.color.copy(z.color).multiplyScalar(z.intensity);G.direction.setFromMatrixPosition(z.matrixWorld);d.setFromMatrixPosition(z.target.matrixWorld);G.direction.sub(d);G.direction.transformDirection(l);if(G.shadow=
+z.castShadow)fa=z.shadow,G.shadowBias=fa.bias,G.shadowRadius=fa.radius,G.shadowMapSize=fa.mapSize,b.directionalShadowMap[k]=w,b.directionalShadowMatrix[k]=z.shadow.matrix,v++;b.directional[k]=G;k++}else if(z.isSpotLight){G=a.get(z);G.position.setFromMatrixPosition(z.matrixWorld);G.position.applyMatrix4(l);G.color.copy(ra).multiplyScalar(fa);G.distance=Ga;G.direction.setFromMatrixPosition(z.matrixWorld);d.setFromMatrixPosition(z.target.matrixWorld);G.direction.sub(d);G.direction.transformDirection(l);
+G.coneCos=Math.cos(z.angle);G.penumbraCos=Math.cos(z.angle*(1-z.penumbra));G.decay=z.decay;if(G.shadow=z.castShadow)fa=z.shadow,G.shadowBias=fa.bias,G.shadowRadius=fa.radius,G.shadowMapSize=fa.mapSize,b.spotShadowMap[r]=w,b.spotShadowMatrix[r]=z.shadow.matrix,W++;b.spot[r]=G;r++}else if(z.isRectAreaLight)G=a.get(z),G.color.copy(ra).multiplyScalar(fa),G.position.setFromMatrixPosition(z.matrixWorld),G.position.applyMatrix4(l),f.identity(),e.copy(z.matrixWorld),e.premultiply(l),f.extractRotation(e),
+G.halfWidth.set(.5*z.width,0,0),G.halfHeight.set(0,.5*z.height,0),G.halfWidth.applyMatrix4(f),G.halfHeight.applyMatrix4(f),b.rectArea[u]=G,u++;else if(z.isPointLight){G=a.get(z);G.position.setFromMatrixPosition(z.matrixWorld);G.position.applyMatrix4(l);G.color.copy(z.color).multiplyScalar(z.intensity);G.distance=z.distance;G.decay=z.decay;if(G.shadow=z.castShadow)fa=z.shadow,G.shadowBias=fa.bias,G.shadowRadius=fa.radius,G.shadowMapSize=fa.mapSize,G.shadowCameraNear=fa.camera.near,G.shadowCameraFar=
+fa.camera.far,b.pointShadowMap[t]=w,b.pointShadowMatrix[t]=z.shadow.matrix,C++;b.point[t]=G;t++}else z.isHemisphereLight&&(G=a.get(z),G.direction.setFromMatrixPosition(z.matrixWorld),G.direction.transformDirection(l),G.direction.normalize(),G.skyColor.copy(z.color).multiplyScalar(fa),G.groundColor.copy(z.groundColor).multiplyScalar(fa),b.hemi[n]=G,n++)}b.ambient[0]=g;b.ambient[1]=x;b.ambient[2]=p;c=b.hash;if(c.directionalLength!==k||c.pointLength!==t||c.spotLength!==r||c.rectAreaLength!==u||c.hemiLength!==
+n||c.numDirectionalShadows!==v||c.numPointShadows!==C||c.numSpotShadows!==W)b.directional.length=k,b.spot.length=r,b.rectArea.length=u,b.point.length=t,b.hemi.length=n,b.directionalShadowMap.length=v,b.pointShadowMap.length=C,b.spotShadowMap.length=W,b.directionalShadowMatrix.length=v,b.pointShadowMatrix.length=C,b.spotShadowMatrix.length=W,c.directionalLength=k,c.pointLength=t,c.spotLength=r,c.rectAreaLength=u,c.hemiLength=n,c.numDirectionalShadows=v,c.numPointShadows=C,c.numSpotShadows=W,b.version=
+Fk++},state:b}}function Vh(){var a=new Ek,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},pushShadow:function(a){c.push(a)}}}function Gk(){function a(c){c=c.target;c.removeEventListener("dispose",a);b.delete(c)}var b=new WeakMap;return{get:function(c,d){if(!1===b.has(c)){var e=new Vh;b.set(c,new WeakMap);b.get(c).set(d,e);c.addEventListener("dispose",a)}else!1===b.get(c).has(d)?
+(e=new Vh,b.get(c).set(d,e)):e=b.get(c).get(d);return e},dispose:function(){b=new WeakMap}}}function Gb(a){K.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.fog=!1;this.setValues(a)}function Hb(a){K.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new n;this.nearDistance=1;this.farDistance=
+1E3;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.fog=!1;this.setValues(a)}function Wh(a,b,c){function d(a,b,c){c=a<<0|b<<1|c<<2;var d=p[c];void 0===d&&(d=new Gb({depthPacking:3201,morphTargets:a,skinning:b}),p[c]=d);return d}function e(a,b,c){c=a<<0|b<<1|c<<2;var d=h[c];void 0===d&&(d=new Hb({morphTargets:a,skinning:b}),h[c]=d);return d}function f(b,c,f,g,k,l){var m=b.geometry,p=d,x=b.customDepthMaterial;
 !0===f.isPointLight&&(p=e,x=b.customDistanceMaterial);void 0===x?(x=!1,!0===c.morphTargets&&(!0===m.isBufferGeometry?x=m.morphAttributes&&m.morphAttributes.position&&0<m.morphAttributes.position.length:!0===m.isGeometry&&(x=m.morphTargets&&0<m.morphTargets.length)),m=!1,!0===b.isSkinnedMesh&&(!0===c.skinning?m=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",b)),b=p(x,m,!0===b.isInstancedMesh)):b=x;a.localClippingEnabled&&!0===c.clipShadows&&0!==c.clippingPlanes.length&&
 (x=b.uuid,p=c.uuid,m=t[x],void 0===m&&(m={},t[x]=m),x=m[p],void 0===x&&(x=b.clone(),m[p]=x),b=x);b.visible=c.visible;b.wireframe=c.wireframe;b.side=3===l?null!==c.shadowSide?c.shadowSide:c.side:null!==c.shadowSide?c.shadowSide:r[c.side];b.clipShadows=c.clipShadows;b.clippingPlanes=c.clippingPlanes;b.clipIntersection=c.clipIntersection;b.wireframeLinewidth=c.wireframeLinewidth;b.linewidth=c.linewidth;!0===f.isPointLight&&!0===b.isMeshDistanceMaterial&&(b.referencePosition.setFromMatrixPosition(f.matrixWorld),
 b.nearDistance=g,b.farDistance=k);return b}function g(c,d,e,l,m){if(!1!==c.visible){if(c.layers.test(d.layers)&&(c.isMesh||c.isLine||c.isPoints)&&(c.castShadow||c.receiveShadow&&3===m)&&(!c.frustumCulled||k.intersectsObject(c))){c.modelViewMatrix.multiplyMatrices(e.matrixWorldInverse,c.matrixWorld);var p=b.update(c),x=c.material;if(Array.isArray(x))for(var h=p.groups,r=0,q=h.length;r<q;r++){var t=h[r],u=x[t.materialIndex];u&&u.visible&&(u=f(c,u,l,e.near,e.far,m),a.renderBufferDirect(e,null,p,u,c,
@@ -359,9 +359,9 @@ Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function()
 Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=
 (a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);
 return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this}});Object.assign(za.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,k,l){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=k;m[6]=c;m[7]=f;m[8]=l;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;
-b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},extractBasis:function(a,b,c){var d=this.elements;a.fromArray(d,0);b.fromArray(d,3);c.fromArray(d,6);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},multiply:function(a){return this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;
-b=this.elements;a=c[0];var e=c[3],f=c[6],g=c[1],k=c[4],l=c[7],m=c[2],h=c[5];c=c[8];var p=d[0],q=d[3],n=d[6],r=d[1],u=d[4],y=d[7],v=d[2],w=d[5];d=d[8];b[0]=a*p+e*r+f*v;b[3]=a*q+e*u+f*w;b[6]=a*n+e*y+f*d;b[1]=g*p+k*r+l*v;b[4]=g*q+k*u+l*w;b[7]=g*n+k*y+l*d;b[2]=m*p+h*r+c*v;b[5]=m*q+h*u+c*w;b[8]=m*n+h*y+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],
-d=a[2],e=a[3],f=a[4],g=a[5],k=a[6],l=a[7];a=a[8];return b*f*a-b*g*l-c*e*a+c*g*k+d*e*l-d*f*k},getInverse:function(a,b){a&&a.isMatrix4&&console.error("THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.");var c=a.elements;a=this.elements;var d=c[0],e=c[1],f=c[2],g=c[3],k=c[4],l=c[5],m=c[6],h=c[7];c=c[8];var p=c*k-l*h,q=l*m-c*g,n=h*g-k*m,r=d*p+e*q+f*n;if(0===r){if(!0===b)throw Error("THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0");console.warn("THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0");
+b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},extractBasis:function(a,b,c){a.setFromMatrix3Column(this,0);b.setFromMatrix3Column(this,1);c.setFromMatrix3Column(this,2);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},multiply:function(a){return this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=
+a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[3],f=c[6],g=c[1],k=c[4],l=c[7],m=c[2],h=c[5];c=c[8];var p=d[0],q=d[3],n=d[6],r=d[1],u=d[4],y=d[7],v=d[2],w=d[5];d=d[8];b[0]=a*p+e*r+f*v;b[3]=a*q+e*u+f*w;b[6]=a*n+e*y+f*d;b[1]=g*p+k*r+l*v;b[4]=g*q+k*u+l*w;b[7]=g*n+k*y+l*d;b[2]=m*p+h*r+c*v;b[5]=m*q+h*u+c*w;b[8]=m*n+h*y+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=
+this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],k=a[6],l=a[7];a=a[8];return b*f*a-b*g*l-c*e*a+c*g*k+d*e*l-d*f*k},getInverse:function(a,b){a&&a.isMatrix4&&console.error("THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.");var c=a.elements;a=this.elements;var d=c[0],e=c[1],f=c[2],g=c[3],k=c[4],l=c[5],m=c[6],h=c[7];c=c[8];var p=c*k-l*h,q=l*m-c*g,n=h*g-k*m,r=d*p+e*q+f*n;if(0===r){if(!0===b)throw Error("THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0");console.warn("THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0");
 return this.identity()}b=1/r;a[0]=p*b;a[1]=(f*h-c*e)*b;a[2]=(l*e-f*k)*b;a[3]=q*b;a[4]=(c*d-f*m)*b;a[5]=(f*g-l*d)*b;a[6]=n*b;a[7]=(e*m-h*d)*b;a[8]=(k*d-e*g)*b;return this},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[3];a[3]=b;b=a[2];a[2]=a[6];a[6]=b;b=a[5];a[5]=a[7];a[7]=b;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()},transposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=
 b[2];a[7]=b[5];a[8]=b[8];return this},setUvTransform:function(a,b,c,d,e,f,g){var k=Math.cos(e);e=Math.sin(e);this.set(c*k,c*e,-c*(k*f+e*g)+f+a,-d*e,d*k,-d*(-e*f+k*g)+g+b,0,0,1)},scale:function(a,b){var c=this.elements;c[0]*=a;c[3]*=a;c[6]*=a;c[1]*=b;c[4]*=b;c[7]*=b;return this},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);var c=this.elements,d=c[0],e=c[3],f=c[6],g=c[1],k=c[4],l=c[7];c[0]=b*d+a*g;c[3]=b*e+a*k;c[6]=b*f+a*l;c[1]=-a*d+b*g;c[4]=-a*e+b*k;c[7]=-a*f+b*l;return this},translate:function(a,
 b){var c=this.elements;c[0]+=a*c[2];c[3]+=a*c[5];c[6]+=a*c[8];c[1]+=b*c[2];c[4]+=b*c[5];c[7]+=b*c[8];return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;9>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];

+ 7 - 10
build/three.module.js

@@ -1130,11 +1130,9 @@ Object.assign( Matrix3.prototype, {
 
 	extractBasis: function ( xAxis, yAxis, zAxis ) {
 
-		var te = this.elements;
-
-		xAxis.fromArray( te, 0 );
-		yAxis.fromArray( te, 3 );
-		zAxis.fromArray( te, 6 );
+		xAxis.setFromMatrix3Column( this, 0 );
+		yAxis.setFromMatrix3Column( this, 1 );
+		zAxis.setFromMatrix3Column( this, 2 );
 
 		return this;
 
@@ -18394,6 +18392,9 @@ function WebGLProgram( renderer, cacheKey, parameters ) {
 
 	// clean up
 
+	gl.detachShader( program, glVertexShader );
+	gl.detachShader( program, glFragmentShader );
+
 	gl.deleteShader( glVertexShader );
 	gl.deleteShader( glFragmentShader );
 
@@ -19237,11 +19238,7 @@ function WebGLLights() {
 		point: [],
 		pointShadowMap: [],
 		pointShadowMatrix: [],
-		hemi: [],
-
-		numDirectionalShadows: - 1,
-		numPointShadows: - 1,
-		numSpotShadows: - 1
+		hemi: []
 
 	};