Browse Source

Changed object sorting in WebGLRenderer to be stable.

Extra check doesn't seem to have much effect on performance. This may become a bigger concern if other bottlenecks would go away.

Fixes #2568
alteredq 12 years ago
parent
commit
68128af601
3 changed files with 32191 additions and 32159 deletions
  1. 32119 32103
      build/three.js
  2. 55 55
      build/three.min.js
  3. 17 1
      src/renderers/WebGLRenderer.js

File diff suppressed because it is too large
+ 32119 - 32103
build/three.js


+ 55 - 55
build/three.min.js

@@ -357,11 +357,11 @@ h.boundTo)if(f=0,e=h.value.length,1===h.size)for(d=0;d<e;d++)g=n[d][1],h.array[d
 h.array[f+2]=g.z,h.array[f+3]=g.w,f+=4}}else{if(o)for(d=0;d<g;d++)e=h[d],f=3*d,l[f]=e.x,l[f+1]=e.y,l[f+2]=e.z;if(p)for(d=0;d<j;d++)e=i[d],f=3*d,m[f]=e.r,m[f+1]=e.g,m[f+2]=e.b;if(q){i=0;for(j=q.length;i<j;i++)if(h=q[i],h.needsUpdate&&(void 0===h.boundTo||"vertices"===h.boundTo))if(e=h.value.length,f=0,1===h.size)for(d=0;d<e;d++)h.array[d]=h.value[d];else if(2===h.size)for(d=0;d<e;d++)g=h.value[d],h.array[f]=g.x,h.array[f+1]=g.y,f+=2;else if(3===h.size)if("c"===h.type)for(d=0;d<e;d++)g=h.value[d],h.array[f]=
 g.r,h.array[f+1]=g.g,h.array[f+2]=g.b,f+=3;else for(d=0;d<e;d++)g=h.value[d],h.array[f]=g.x,h.array[f+1]=g.y,h.array[f+2]=g.z,f+=3;else if(4===h.size)for(d=0;d<e;d++)g=h.value[d],h.array[f]=g.x,h.array[f+1]=g.y,h.array[f+2]=g.z,h.array[f+3]=g.w,f+=4}}if(o||c.sortParticles)k.bindBuffer(k.ARRAY_BUFFER,a.__webglVertexBuffer),k.bufferData(k.ARRAY_BUFFER,l,b);if(p||c.sortParticles)k.bindBuffer(k.ARRAY_BUFFER,a.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,m,b);if(q){i=0;for(j=q.length;i<j;i++)if(h=q[i],
 h.needsUpdate||c.sortParticles)k.bindBuffer(k.ARRAY_BUFFER,h.buffer),k.bufferData(k.ARRAY_BUFFER,h.array,b)}}function j(a,b,c){var d=a.attributes,e=d.index,f=d.position,g=d.normal,h=d.uv,i=d.color,d=d.tangent;a.elementsNeedUpdate&&void 0!==e&&(k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.buffer),k.bufferData(k.ELEMENT_ARRAY_BUFFER,e.array,b));a.verticesNeedUpdate&&void 0!==f&&(k.bindBuffer(k.ARRAY_BUFFER,f.buffer),k.bufferData(k.ARRAY_BUFFER,f.array,b));a.normalsNeedUpdate&&void 0!==g&&(k.bindBuffer(k.ARRAY_BUFFER,
-g.buffer),k.bufferData(k.ARRAY_BUFFER,g.array,b));a.uvsNeedUpdate&&void 0!==h&&(k.bindBuffer(k.ARRAY_BUFFER,h.buffer),k.bufferData(k.ARRAY_BUFFER,h.array,b));a.colorsNeedUpdate&&void 0!==i&&(k.bindBuffer(k.ARRAY_BUFFER,i.buffer),k.bufferData(k.ARRAY_BUFFER,i.array,b));a.tangentsNeedUpdate&&void 0!==d&&(k.bindBuffer(k.ARRAY_BUFFER,d.buffer),k.bufferData(k.ARRAY_BUFFER,d.array,b));if(c)for(var j in a.attributes)delete a.attributes[j].array}function m(a,b){return b.z-a.z}function n(a,b){return b[1]-
-a[1]}function l(a,b,c){if(a.length)for(var d=0,e=a.length;d<e;d++)fa=Y=null,ia=X=Ta=Ja=Wa=fb=ra=-1,Za=!0,a[d].render(b,c,lb,ua),fa=Y=null,ia=X=Ta=Ja=Wa=fb=ra=-1,Za=!0}function p(a,b,c,d,e,f,g,h){var k,i,j,l;b?(i=a.length-1,l=b=-1):(i=0,b=a.length,l=1);for(var m=i;m!==b;m+=l)if(k=a[m],k.render){i=k.object;j=k.buffer;if(h)k=h;else{k=k[c];if(!k)continue;g&&S.setBlending(k.blending,k.blendEquation,k.blendSrc,k.blendDst);S.setDepthTest(k.depthTest);S.setDepthWrite(k.depthWrite);C(k.polygonOffset,k.polygonOffsetFactor,
-k.polygonOffsetUnits)}S.setMaterialFaces(k);j instanceof THREE.BufferGeometry?S.renderBufferDirect(d,e,f,k,j,i):S.renderBuffer(d,e,f,k,j,i)}}function o(a,b,c,d,e,f,g){for(var h,k,i=0,j=a.length;i<j;i++)if(h=a[i],k=h.object,k.visible){if(g)h=g;else{h=h[b];if(!h)continue;f&&S.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);S.setDepthTest(h.depthTest);S.setDepthWrite(h.depthWrite);C(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}S.renderImmediateObject(c,d,e,h,k)}}function q(a,
-b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}function r(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function s(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function z(a,b){for(var c=a.length-1;0<=c;c--)a[c].object===b&&a.splice(c,1)}function u(a,b){for(var c=a.length-1;0<=c;c--)a[c]===b&&a.splice(c,1)}function t(a,b,c,d,e){Aa=0;d.needsUpdate&&(d.program&&S.deallocateMaterial(d),S.initMaterial(d,b,c,e),d.needsUpdate=!1);d.morphTargets&&
-!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(S.maxMorphTargets));var f=!1,g=d.program,h=g.uniforms,i=d.uniforms;g!==Y&&(k.useProgram(g),Y=g,f=!0);d.id!==ia&&(ia=d.id,f=!0);if(f||a!==fa)k.uniformMatrix4fv(h.projectionMatrix,!1,a._projectionMatrixArray),a!==fa&&(fa=a);if(d.skinning)if(fc&&e.useVertexTexture){if(null!==h.boneTexture){var j=F();k.uniform1i(h.boneTexture,j);S.setTexture(e.boneTexture,j)}}else null!==h.boneGlobalMatrices&&k.uniformMatrix4fv(h.boneGlobalMatrices,
+g.buffer),k.bufferData(k.ARRAY_BUFFER,g.array,b));a.uvsNeedUpdate&&void 0!==h&&(k.bindBuffer(k.ARRAY_BUFFER,h.buffer),k.bufferData(k.ARRAY_BUFFER,h.array,b));a.colorsNeedUpdate&&void 0!==i&&(k.bindBuffer(k.ARRAY_BUFFER,i.buffer),k.bufferData(k.ARRAY_BUFFER,i.array,b));a.tangentsNeedUpdate&&void 0!==d&&(k.bindBuffer(k.ARRAY_BUFFER,d.buffer),k.bufferData(k.ARRAY_BUFFER,d.array,b));if(c)for(var j in a.attributes)delete a.attributes[j].array}function m(a,b){return a.z!==b.z?b.z-a.z:b.id-a.id}function n(a,
+b){return b[1]-a[1]}function l(a,b,c){if(a.length)for(var d=0,e=a.length;d<e;d++)fa=Y=null,ia=X=Ta=Ja=Wa=fb=ra=-1,Za=!0,a[d].render(b,c,lb,ua),fa=Y=null,ia=X=Ta=Ja=Wa=fb=ra=-1,Za=!0}function p(a,b,c,d,e,f,g,h){var k,i,j,l;b?(i=a.length-1,l=b=-1):(i=0,b=a.length,l=1);for(var m=i;m!==b;m+=l)if(k=a[m],k.render){i=k.object;j=k.buffer;if(h)k=h;else{k=k[c];if(!k)continue;g&&S.setBlending(k.blending,k.blendEquation,k.blendSrc,k.blendDst);S.setDepthTest(k.depthTest);S.setDepthWrite(k.depthWrite);C(k.polygonOffset,
+k.polygonOffsetFactor,k.polygonOffsetUnits)}S.setMaterialFaces(k);j instanceof THREE.BufferGeometry?S.renderBufferDirect(d,e,f,k,j,i):S.renderBuffer(d,e,f,k,j,i)}}function o(a,b,c,d,e,f,g){for(var h,k,i=0,j=a.length;i<j;i++)if(h=a[i],k=h.object,k.visible){if(g)h=g;else{h=h[b];if(!h)continue;f&&S.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);S.setDepthTest(h.depthTest);S.setDepthWrite(h.depthWrite);C(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}S.renderImmediateObject(c,
+d,e,h,k)}}function q(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}function r(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function s(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function z(a,b){for(var c=a.length-1;0<=c;c--)a[c].object===b&&a.splice(c,1)}function u(a,b){for(var c=a.length-1;0<=c;c--)a[c]===b&&a.splice(c,1)}function t(a,b,c,d,e){Aa=0;d.needsUpdate&&(d.program&&S.deallocateMaterial(d),S.initMaterial(d,b,c,e),d.needsUpdate=
+!1);d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(S.maxMorphTargets));var f=!1,g=d.program,h=g.uniforms,i=d.uniforms;g!==Y&&(k.useProgram(g),Y=g,f=!0);d.id!==ia&&(ia=d.id,f=!0);if(f||a!==fa)k.uniformMatrix4fv(h.projectionMatrix,!1,a._projectionMatrixArray),a!==fa&&(fa=a);if(d.skinning)if(fc&&e.useVertexTexture){if(null!==h.boneTexture){var j=F();k.uniform1i(h.boneTexture,j);S.setTexture(e.boneTexture,j)}}else null!==h.boneGlobalMatrices&&k.uniformMatrix4fv(h.boneGlobalMatrices,
 !1,e.boneMatrices);if(f){c&&d.fog&&(i.fogColor.value=c.color,c instanceof THREE.Fog?(i.fogNear.value=c.near,i.fogFar.value=c.far):c instanceof THREE.FogExp2&&(i.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(Za){for(var l=0,m=0,n=0,o,p,q,s,r=uc,t=r.directional.colors,u=r.directional.positions,z=r.point.colors,A=r.point.positions,C=r.point.distances,D=r.spot.colors,B=r.spot.positions,I=r.spot.distances,O=r.spot.directions,
 J=r.spot.angles,M=r.spot.exponents,R=r.hemi.skyColors,L=r.hemi.groundColors,aa=r.hemi.positions,X=0,N=0,P=0,Q=0,c=o=q=q=p=0,f=b.length;c<f;c++)j=b[c],!j.onlyShadow&&j.visible&&(o=j.color,s=j.intensity,p=j.distance,j instanceof THREE.AmbientLight?S.gammaInput?(l+=o.r*o.r,m+=o.g*o.g,n+=o.b*o.b):(l+=o.r,m+=o.g,n+=o.b):j instanceof THREE.DirectionalLight?(p=3*X,S.gammaInput?w(t,p,o,s*s):v(t,p,o,s),Ya.copy(j.matrixWorld.getPosition()),Ya.subSelf(j.target.matrixWorld.getPosition()),Ya.normalize(),u[p]=
 Ya.x,u[p+1]=Ya.y,u[p+2]=Ya.z,X+=1):j instanceof THREE.PointLight?(q=3*N,S.gammaInput?w(z,q,o,s*s):v(z,q,o,s),s=j.matrixWorld.getPosition(),A[q]=s.x,A[q+1]=s.y,A[q+2]=s.z,C[N]=p,N+=1):j instanceof THREE.SpotLight?(q=3*P,S.gammaInput?w(D,q,o,s*s):v(D,q,o,s),s=j.matrixWorld.getPosition(),B[q]=s.x,B[q+1]=s.y,B[q+2]=s.z,I[P]=p,Ya.copy(s),Ya.subSelf(j.target.matrixWorld.getPosition()),Ya.normalize(),O[q]=Ya.x,O[q+1]=Ya.y,O[q+2]=Ya.z,J[P]=Math.cos(j.angle),M[P]=j.exponent,P+=1):j instanceof THREE.HemisphereLight&&
@@ -418,56 +418,56 @@ e.__webglFaceCount,k.UNSIGNED_SHORT,0)),S.info.render.calls++,S.info.render.vert
 (k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount),S.info.render.calls++)}};this.render=function(a,b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,g,h,i=a.__lights,j=a.fog;ia=-1;Za=!0;this.autoUpdateScene&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();b._viewMatrixArray||(b._viewMatrixArray=new Float32Array(16));b._projectionMatrixArray||(b._projectionMatrixArray=new Float32Array(16));
 b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);Xa.multiply(b.projectionMatrix,b.matrixWorldInverse);gb.setFromMatrix(Xa);this.autoUpdateObjects&&this.initWebGLObjects(a);l(this.renderPluginsPre,a,b);S.info.render.calls=0;S.info.render.vertices=0;S.info.render.faces=0;S.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,
 this.autoClearStencil);h=a.__webglObjects;d=0;for(e=h.length;d<e;d++)if(f=h[d],g=f.object,f.render=!1,g.visible&&(!(g instanceof THREE.Mesh||g instanceof THREE.ParticleSystem)||!g.frustumCulled||gb.contains(g))){A(g,b);var n=f,q=n.object,s=n.buffer,r=void 0,r=r=void 0,r=q.material;r instanceof THREE.MeshFaceMaterial?(r=s.materialIndex,0<=r&&(r=q.geometry.materials[r],r.transparent?(n.transparent=r,n.opaque=null):(n.opaque=r,n.transparent=null))):r&&(r.transparent?(n.transparent=r,n.opaque=null):(n.opaque=
-r,n.transparent=null));f.render=!0;!0===this.sortObjects&&(null!==g.renderDepth?f.z=g.renderDepth:(va.copy(g.matrixWorld.getPosition()),Xa.multiplyVector3(va),f.z=va.z))}this.sortObjects&&h.sort(m);h=a.__webglObjectsImmediate;d=0;for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(A(g,b),g=f.object.material,g.transparent?(f.transparent=g,f.opaque=null):(f.opaque=g,f.transparent=null));a.overrideMaterial?(d=a.overrideMaterial,this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst),this.setDepthTest(d.depthTest),
-this.setDepthWrite(d.depthWrite),C(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),p(a.__webglObjects,!1,"",b,i,j,!0,d),o(a.__webglObjectsImmediate,"",b,i,j,!1,d)):(this.setBlending(THREE.NormalBlending),p(a.__webglObjects,!0,"opaque",b,i,j,!1),o(a.__webglObjectsImmediate,"opaque",b,i,j,!1),p(a.__webglObjects,!1,"transparent",b,i,j,!0),o(a.__webglObjectsImmediate,"transparent",b,i,j,!0));l(this.renderPluginsPost,a,b);c&&(c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==
-THREE.LinearFilter)&&(c instanceof THREE.WebGLRenderTargetCube?(k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture),k.generateMipmap(k.TEXTURE_CUBE_MAP),k.bindTexture(k.TEXTURE_CUBE_MAP,null)):(k.bindTexture(k.TEXTURE_2D,c.__webglTexture),k.generateMipmap(k.TEXTURE_2D),k.bindTexture(k.TEXTURE_2D,null)));this.setDepthTest(!0);this.setDepthWrite(!0)}};this.renderImmediateObject=function(a,b,c,d,e){var f=t(a,b,c,d,e);X=-1;S.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,k,gb):
-e.render(function(a){S.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){a.__webglObjects||(a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[],a.__webglFlares=[]);for(;a.__objectsAdded.length;){var b=a.__objectsAdded[0],l=a,n=void 0,m=void 0,o=void 0;if(!b.__webglInit)if(b.__webglInit=!0,b._modelViewMatrix=new THREE.Matrix4,b._normalMatrix=new THREE.Matrix3,b instanceof THREE.Mesh)if(m=b.geometry,m instanceof THREE.Geometry){if(void 0===m.geometryGroups){var p=m,
-t=void 0,v=void 0,w=void 0,A=void 0,C=void 0,D=void 0,F=void 0,B={},H=p.morphTargets.length,I=p.morphNormals.length;p.geometryGroups={};t=0;for(v=p.faces.length;t<v;t++)w=p.faces[t],A=w.materialIndex,D=void 0!==A?A:-1,void 0===B[D]&&(B[D]={hash:D,counter:0}),F=B[D].hash+"_"+B[D].counter,void 0===p.geometryGroups[F]&&(p.geometryGroups[F]={faces3:[],faces4:[],materialIndex:A,vertices:0,numMorphTargets:H,numMorphNormals:I}),C=w instanceof THREE.Face3?3:4,65535<p.geometryGroups[F].vertices+C&&(B[D].counter+=
-1,F=B[D].hash+"_"+B[D].counter,void 0===p.geometryGroups[F]&&(p.geometryGroups[F]={faces3:[],faces4:[],materialIndex:A,vertices:0,numMorphTargets:H,numMorphNormals:I})),w instanceof THREE.Face3?p.geometryGroups[F].faces3.push(t):p.geometryGroups[F].faces4.push(t),p.geometryGroups[F].vertices+=C;p.geometryGroupsList=[];var O=void 0;for(O in p.geometryGroups)p.geometryGroups[O].id=eb++,p.geometryGroupsList.push(p.geometryGroups[O])}for(n in m.geometryGroups)if(o=m.geometryGroups[n],!o.__webglVertexBuffer){var G=
-o;G.__webglVertexBuffer=k.createBuffer();G.__webglNormalBuffer=k.createBuffer();G.__webglTangentBuffer=k.createBuffer();G.__webglColorBuffer=k.createBuffer();G.__webglUVBuffer=k.createBuffer();G.__webglUV2Buffer=k.createBuffer();G.__webglSkinIndicesBuffer=k.createBuffer();G.__webglSkinWeightsBuffer=k.createBuffer();G.__webglFaceBuffer=k.createBuffer();G.__webglLineBuffer=k.createBuffer();var J=void 0,M=void 0;if(G.numMorphTargets){G.__webglMorphTargetsBuffers=[];J=0;for(M=G.numMorphTargets;J<M;J++)G.__webglMorphTargetsBuffers.push(k.createBuffer())}if(G.numMorphNormals){G.__webglMorphNormalsBuffers=
-[];J=0;for(M=G.numMorphNormals;J<M;J++)G.__webglMorphNormalsBuffers.push(k.createBuffer())}S.info.memory.geometries++;d(o,b);m.verticesNeedUpdate=!0;m.morphTargetsNeedUpdate=!0;m.elementsNeedUpdate=!0;m.uvsNeedUpdate=!0;m.normalsNeedUpdate=!0;m.tangentsNeedUpdate=!0;m.colorsNeedUpdate=!0}}else m instanceof THREE.BufferGeometry&&h(m);else if(b instanceof THREE.Ribbon){if(m=b.geometry,!m.__webglVertexBuffer){var Y=m;Y.__webglVertexBuffer=k.createBuffer();Y.__webglColorBuffer=k.createBuffer();Y.__webglNormalBuffer=
-k.createBuffer();S.info.memory.geometries++;var K=m,R=b,$=K.vertices.length;K.__vertexArray=new Float32Array(3*$);K.__colorArray=new Float32Array(3*$);K.__normalArray=new Float32Array(3*$);K.__webglVertexCount=$;c(K,R);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0;m.normalsNeedUpdate=!0}}else if(b instanceof THREE.Line){if(m=b.geometry,!m.__webglVertexBuffer){var L=m;L.__webglVertexBuffer=k.createBuffer();L.__webglColorBuffer=k.createBuffer();S.info.memory.geometries++;var aa=m,X=b,N=aa.vertices.length;
-aa.__vertexArray=new Float32Array(3*N);aa.__colorArray=new Float32Array(3*N);aa.__webglLineCount=N;c(aa,X);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0}}else if(b instanceof THREE.ParticleSystem&&(m=b.geometry,!m.__webglVertexBuffer))if(m instanceof THREE.Geometry){var P=m;P.__webglVertexBuffer=k.createBuffer();P.__webglColorBuffer=k.createBuffer();S.info.memory.geometries++;var Q=m,fa=b,ba=Q.vertices.length;Q.__vertexArray=new Float32Array(3*ba);Q.__colorArray=new Float32Array(3*ba);Q.__sortArray=
-[];Q.__webglParticleCount=ba;c(Q,fa);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0}else m instanceof THREE.BufferGeometry&&h(m);if(!b.__webglActive){if(b instanceof THREE.Mesh)if(m=b.geometry,m instanceof THREE.BufferGeometry)q(l.__webglObjects,m,b);else for(n in m.geometryGroups)o=m.geometryGroups[n],q(l.__webglObjects,o,b);else b instanceof THREE.Ribbon||b instanceof THREE.Line||b instanceof THREE.ParticleSystem?(m=b.geometry,q(l.__webglObjects,m,b)):b instanceof THREE.ImmediateRenderObject||b.immediateRenderCallback?
-l.__webglObjectsImmediate.push({object:b,opaque:null,transparent:null}):b instanceof THREE.Sprite?l.__webglSprites.push(b):b instanceof THREE.LensFlare&&l.__webglFlares.push(b);b.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var ia=a.__objectsRemoved[0],ja=a;ia instanceof THREE.Mesh||ia instanceof THREE.ParticleSystem||ia instanceof THREE.Ribbon||ia instanceof THREE.Line?z(ja.__webglObjects,ia):ia instanceof THREE.Sprite?u(ja.__webglSprites,ia):ia instanceof THREE.LensFlare?
-u(ja.__webglFlares,ia):(ia instanceof THREE.ImmediateRenderObject||ia.immediateRenderCallback)&&z(ja.__webglObjectsImmediate,ia);ia.__webglActive=!1;a.__objectsRemoved.splice(0,1)}for(var ea=0,ra=a.__webglObjects.length;ea<ra;ea++){var Aa=a.__webglObjects[ea].object,ga=Aa.geometry,Ja=void 0,ua=void 0,la=void 0;if(Aa instanceof THREE.Mesh)if(ga instanceof THREE.BufferGeometry)(ga.verticesNeedUpdate||ga.elementsNeedUpdate||ga.uvsNeedUpdate||ga.normalsNeedUpdate||ga.colorsNeedUpdate||ga.tangentsNeedUpdate)&&
-j(ga,k.DYNAMIC_DRAW,!ga.dynamic),ga.verticesNeedUpdate=!1,ga.elementsNeedUpdate=!1,ga.uvsNeedUpdate=!1,ga.normalsNeedUpdate=!1,ga.colorsNeedUpdate=!1,ga.tangentsNeedUpdate=!1;else{for(var Ha=0,Ta=ga.geometryGroupsList.length;Ha<Ta;Ha++)if(Ja=ga.geometryGroupsList[Ha],la=e(Aa,Ja),ga.buffersNeedUpdate&&d(Ja,Aa),ua=la.attributes&&r(la),ga.verticesNeedUpdate||ga.morphTargetsNeedUpdate||ga.elementsNeedUpdate||ga.uvsNeedUpdate||ga.normalsNeedUpdate||ga.colorsNeedUpdate||ga.tangentsNeedUpdate||ua){var qa=
-Ja,Na=Aa,va=k.DYNAMIC_DRAW,Ya=!ga.dynamic,Ma=la;if(qa.__inittedArrays){var nb=f(Ma),qb=Ma.vertexColors?Ma.vertexColors:!1,ob=g(Ma),fb=nb===THREE.SmoothShading,E=void 0,Z=void 0,Wa=void 0,T=void 0,cb=void 0,Za=void 0,Bb=void 0,lb=void 0,Xa=void 0,gb=void 0,kb=void 0,U=void 0,V=void 0,W=void 0,pa=void 0,Db=void 0,Eb=void 0,Fb=void 0,pb=void 0,Gb=void 0,Hb=void 0,Ib=void 0,rb=void 0,Jb=void 0,Kb=void 0,Lb=void 0,xb=void 0,Mb=void 0,Nb=void 0,Ob=void 0,zb=void 0,Pb=void 0,Qb=void 0,Rb=void 0,Ab=void 0,
-wa=void 0,fc=void 0,Zb=void 0,ic=void 0,jc=void 0,Qa=void 0,gc=void 0,Oa=void 0,Pa=void 0,$b=void 0,Tb=void 0,Ia=0,La=0,Ub=0,Vb=0,ub=0,$a=0,za=0,db=0,Ka=0,ha=0,ka=0,y=0,xa=void 0,Ra=qa.__vertexArray,nc=qa.__uvArray,oc=qa.__uv2Array,vb=qa.__normalArray,Da=qa.__tangentArray,Sa=qa.__colorArray,Ea=qa.__skinIndexArray,Fa=qa.__skinWeightArray,Oc=qa.__morphTargetsArrays,Pc=qa.__morphNormalsArrays,Qc=qa.__webglCustomAttributesList,x=void 0,Sb=qa.__faceArray,mb=qa.__lineArray,hb=Na.geometry,uc=hb.elementsNeedUpdate,
-mc=hb.uvsNeedUpdate,vc=hb.normalsNeedUpdate,Lc=hb.tangentsNeedUpdate,Mc=hb.colorsNeedUpdate,cd=hb.morphTargetsNeedUpdate,dc=hb.vertices,sa=qa.faces3,ta=qa.faces4,ab=hb.faces,Rc=hb.faceVertexUvs[0],Sc=hb.faceVertexUvs[1],ec=hb.skinIndices,ac=hb.skinWeights,bc=hb.morphTargets,xc=hb.morphNormals;if(hb.verticesNeedUpdate){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],U=dc[T.a],V=dc[T.b],W=dc[T.c],Ra[La]=U.x,Ra[La+1]=U.y,Ra[La+2]=U.z,Ra[La+3]=V.x,Ra[La+4]=V.y,Ra[La+5]=V.z,Ra[La+6]=W.x,Ra[La+7]=W.y,Ra[La+8]=
-W.z,La+=9;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],U=dc[T.a],V=dc[T.b],W=dc[T.c],pa=dc[T.d],Ra[La]=U.x,Ra[La+1]=U.y,Ra[La+2]=U.z,Ra[La+3]=V.x,Ra[La+4]=V.y,Ra[La+5]=V.z,Ra[La+6]=W.x,Ra[La+7]=W.y,Ra[La+8]=W.z,Ra[La+9]=pa.x,Ra[La+10]=pa.y,Ra[La+11]=pa.z,La+=12;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Ra,va)}if(cd){Qa=0;for(gc=bc.length;Qa<gc;Qa++){E=ka=0;for(Z=sa.length;E<Z;E++)$b=sa[E],T=ab[$b],U=bc[Qa].vertices[T.a],V=bc[Qa].vertices[T.b],W=bc[Qa].vertices[T.c],
-Oa=Oc[Qa],Oa[ka]=U.x,Oa[ka+1]=U.y,Oa[ka+2]=U.z,Oa[ka+3]=V.x,Oa[ka+4]=V.y,Oa[ka+5]=V.z,Oa[ka+6]=W.x,Oa[ka+7]=W.y,Oa[ka+8]=W.z,Ma.morphNormals&&(fb?(Tb=xc[Qa].vertexNormals[$b],Gb=Tb.a,Hb=Tb.b,Ib=Tb.c):Ib=Hb=Gb=xc[Qa].faceNormals[$b],Pa=Pc[Qa],Pa[ka]=Gb.x,Pa[ka+1]=Gb.y,Pa[ka+2]=Gb.z,Pa[ka+3]=Hb.x,Pa[ka+4]=Hb.y,Pa[ka+5]=Hb.z,Pa[ka+6]=Ib.x,Pa[ka+7]=Ib.y,Pa[ka+8]=Ib.z),ka+=9;E=0;for(Z=ta.length;E<Z;E++)$b=ta[E],T=ab[$b],U=bc[Qa].vertices[T.a],V=bc[Qa].vertices[T.b],W=bc[Qa].vertices[T.c],pa=bc[Qa].vertices[T.d],
-Oa=Oc[Qa],Oa[ka]=U.x,Oa[ka+1]=U.y,Oa[ka+2]=U.z,Oa[ka+3]=V.x,Oa[ka+4]=V.y,Oa[ka+5]=V.z,Oa[ka+6]=W.x,Oa[ka+7]=W.y,Oa[ka+8]=W.z,Oa[ka+9]=pa.x,Oa[ka+10]=pa.y,Oa[ka+11]=pa.z,Ma.morphNormals&&(fb?(Tb=xc[Qa].vertexNormals[$b],Gb=Tb.a,Hb=Tb.b,Ib=Tb.c,rb=Tb.d):rb=Ib=Hb=Gb=xc[Qa].faceNormals[$b],Pa=Pc[Qa],Pa[ka]=Gb.x,Pa[ka+1]=Gb.y,Pa[ka+2]=Gb.z,Pa[ka+3]=Hb.x,Pa[ka+4]=Hb.y,Pa[ka+5]=Hb.z,Pa[ka+6]=Ib.x,Pa[ka+7]=Ib.y,Pa[ka+8]=Ib.z,Pa[ka+9]=rb.x,Pa[ka+10]=rb.y,Pa[ka+11]=rb.z),ka+=12;k.bindBuffer(k.ARRAY_BUFFER,
-qa.__webglMorphTargetsBuffers[Qa]);k.bufferData(k.ARRAY_BUFFER,Oc[Qa],va);Ma.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglMorphNormalsBuffers[Qa]),k.bufferData(k.ARRAY_BUFFER,Pc[Qa],va))}}if(ac.length){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],Mb=ac[T.a],Nb=ac[T.b],Ob=ac[T.c],Fa[ha]=Mb.x,Fa[ha+1]=Mb.y,Fa[ha+2]=Mb.z,Fa[ha+3]=Mb.w,Fa[ha+4]=Nb.x,Fa[ha+5]=Nb.y,Fa[ha+6]=Nb.z,Fa[ha+7]=Nb.w,Fa[ha+8]=Ob.x,Fa[ha+9]=Ob.y,Fa[ha+10]=Ob.z,Fa[ha+11]=Ob.w,Pb=ec[T.a],Qb=ec[T.b],Rb=ec[T.c],Ea[ha]=Pb.x,Ea[ha+
-1]=Pb.y,Ea[ha+2]=Pb.z,Ea[ha+3]=Pb.w,Ea[ha+4]=Qb.x,Ea[ha+5]=Qb.y,Ea[ha+6]=Qb.z,Ea[ha+7]=Qb.w,Ea[ha+8]=Rb.x,Ea[ha+9]=Rb.y,Ea[ha+10]=Rb.z,Ea[ha+11]=Rb.w,ha+=12;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],Mb=ac[T.a],Nb=ac[T.b],Ob=ac[T.c],zb=ac[T.d],Fa[ha]=Mb.x,Fa[ha+1]=Mb.y,Fa[ha+2]=Mb.z,Fa[ha+3]=Mb.w,Fa[ha+4]=Nb.x,Fa[ha+5]=Nb.y,Fa[ha+6]=Nb.z,Fa[ha+7]=Nb.w,Fa[ha+8]=Ob.x,Fa[ha+9]=Ob.y,Fa[ha+10]=Ob.z,Fa[ha+11]=Ob.w,Fa[ha+12]=zb.x,Fa[ha+13]=zb.y,Fa[ha+14]=zb.z,Fa[ha+15]=zb.w,Pb=ec[T.a],Qb=ec[T.b],Rb=ec[T.c],
-Ab=ec[T.d],Ea[ha]=Pb.x,Ea[ha+1]=Pb.y,Ea[ha+2]=Pb.z,Ea[ha+3]=Pb.w,Ea[ha+4]=Qb.x,Ea[ha+5]=Qb.y,Ea[ha+6]=Qb.z,Ea[ha+7]=Qb.w,Ea[ha+8]=Rb.x,Ea[ha+9]=Rb.y,Ea[ha+10]=Rb.z,Ea[ha+11]=Rb.w,Ea[ha+12]=Ab.x,Ea[ha+13]=Ab.y,Ea[ha+14]=Ab.z,Ea[ha+15]=Ab.w,ha+=16;0<ha&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglSkinIndicesBuffer),k.bufferData(k.ARRAY_BUFFER,Ea,va),k.bindBuffer(k.ARRAY_BUFFER,qa.__webglSkinWeightsBuffer),k.bufferData(k.ARRAY_BUFFER,Fa,va))}if(Mc&&qb){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],Bb=T.vertexColors,
-lb=T.color,3===Bb.length&&qb===THREE.VertexColors?(Jb=Bb[0],Kb=Bb[1],Lb=Bb[2]):Lb=Kb=Jb=lb,Sa[Ka]=Jb.r,Sa[Ka+1]=Jb.g,Sa[Ka+2]=Jb.b,Sa[Ka+3]=Kb.r,Sa[Ka+4]=Kb.g,Sa[Ka+5]=Kb.b,Sa[Ka+6]=Lb.r,Sa[Ka+7]=Lb.g,Sa[Ka+8]=Lb.b,Ka+=9;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],Bb=T.vertexColors,lb=T.color,4===Bb.length&&qb===THREE.VertexColors?(Jb=Bb[0],Kb=Bb[1],Lb=Bb[2],xb=Bb[3]):xb=Lb=Kb=Jb=lb,Sa[Ka]=Jb.r,Sa[Ka+1]=Jb.g,Sa[Ka+2]=Jb.b,Sa[Ka+3]=Kb.r,Sa[Ka+4]=Kb.g,Sa[Ka+5]=Kb.b,Sa[Ka+6]=Lb.r,Sa[Ka+7]=Lb.g,Sa[Ka+8]=
-Lb.b,Sa[Ka+9]=xb.r,Sa[Ka+10]=xb.g,Sa[Ka+11]=xb.b,Ka+=12;0<Ka&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,Sa,va))}if(Lc&&hb.hasTangents){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],Xa=T.vertexTangents,Db=Xa[0],Eb=Xa[1],Fb=Xa[2],Da[za]=Db.x,Da[za+1]=Db.y,Da[za+2]=Db.z,Da[za+3]=Db.w,Da[za+4]=Eb.x,Da[za+5]=Eb.y,Da[za+6]=Eb.z,Da[za+7]=Eb.w,Da[za+8]=Fb.x,Da[za+9]=Fb.y,Da[za+10]=Fb.z,Da[za+11]=Fb.w,za+=12;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],Xa=T.vertexTangents,Db=Xa[0],
-Eb=Xa[1],Fb=Xa[2],pb=Xa[3],Da[za]=Db.x,Da[za+1]=Db.y,Da[za+2]=Db.z,Da[za+3]=Db.w,Da[za+4]=Eb.x,Da[za+5]=Eb.y,Da[za+6]=Eb.z,Da[za+7]=Eb.w,Da[za+8]=Fb.x,Da[za+9]=Fb.y,Da[za+10]=Fb.z,Da[za+11]=Fb.w,Da[za+12]=pb.x,Da[za+13]=pb.y,Da[za+14]=pb.z,Da[za+15]=pb.w,za+=16;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglTangentBuffer);k.bufferData(k.ARRAY_BUFFER,Da,va)}if(vc&&nb){E=0;for(Z=sa.length;E<Z;E++)if(T=ab[sa[E]],cb=T.vertexNormals,Za=T.normal,3===cb.length&&fb)for(wa=0;3>wa;wa++)Zb=cb[wa],vb[$a]=Zb.x,vb[$a+1]=
-Zb.y,vb[$a+2]=Zb.z,$a+=3;else for(wa=0;3>wa;wa++)vb[$a]=Za.x,vb[$a+1]=Za.y,vb[$a+2]=Za.z,$a+=3;E=0;for(Z=ta.length;E<Z;E++)if(T=ab[ta[E]],cb=T.vertexNormals,Za=T.normal,4===cb.length&&fb)for(wa=0;4>wa;wa++)Zb=cb[wa],vb[$a]=Zb.x,vb[$a+1]=Zb.y,vb[$a+2]=Zb.z,$a+=3;else for(wa=0;4>wa;wa++)vb[$a]=Za.x,vb[$a+1]=Za.y,vb[$a+2]=Za.z,$a+=3;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,vb,va)}if(mc&&Rc&&ob){E=0;for(Z=sa.length;E<Z;E++)if(Wa=sa[E],gb=Rc[Wa],void 0!==gb)for(wa=
-0;3>wa;wa++)ic=gb[wa],nc[Ub]=ic.u,nc[Ub+1]=ic.v,Ub+=2;E=0;for(Z=ta.length;E<Z;E++)if(Wa=ta[E],gb=Rc[Wa],void 0!==gb)for(wa=0;4>wa;wa++)ic=gb[wa],nc[Ub]=ic.u,nc[Ub+1]=ic.v,Ub+=2;0<Ub&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglUVBuffer),k.bufferData(k.ARRAY_BUFFER,nc,va))}if(mc&&Sc&&ob){E=0;for(Z=sa.length;E<Z;E++)if(Wa=sa[E],kb=Sc[Wa],void 0!==kb)for(wa=0;3>wa;wa++)jc=kb[wa],oc[Vb]=jc.u,oc[Vb+1]=jc.v,Vb+=2;E=0;for(Z=ta.length;E<Z;E++)if(Wa=ta[E],kb=Sc[Wa],void 0!==kb)for(wa=0;4>wa;wa++)jc=kb[wa],oc[Vb]=
-jc.u,oc[Vb+1]=jc.v,Vb+=2;0<Vb&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglUV2Buffer),k.bufferData(k.ARRAY_BUFFER,oc,va))}if(uc){E=0;for(Z=sa.length;E<Z;E++)Sb[ub]=Ia,Sb[ub+1]=Ia+1,Sb[ub+2]=Ia+2,ub+=3,mb[db]=Ia,mb[db+1]=Ia+1,mb[db+2]=Ia,mb[db+3]=Ia+2,mb[db+4]=Ia+1,mb[db+5]=Ia+2,db+=6,Ia+=3;E=0;for(Z=ta.length;E<Z;E++)Sb[ub]=Ia,Sb[ub+1]=Ia+1,Sb[ub+2]=Ia+3,Sb[ub+3]=Ia+1,Sb[ub+4]=Ia+2,Sb[ub+5]=Ia+3,ub+=6,mb[db]=Ia,mb[db+1]=Ia+1,mb[db+2]=Ia,mb[db+3]=Ia+3,mb[db+4]=Ia+1,mb[db+5]=Ia+2,mb[db+6]=Ia+2,mb[db+7]=
-Ia+3,db+=8,Ia+=4;k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,qa.__webglFaceBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Sb,va);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,qa.__webglLineBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,mb,va)}if(Qc){wa=0;for(fc=Qc.length;wa<fc;wa++)if(x=Qc[wa],x.__original.needsUpdate){y=0;if(1===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],x.array[y]=x.value[T.a],x.array[y+1]=x.value[T.b],x.array[y+2]=x.value[T.c],y+=3;E=0;for(Z=ta.length;E<
-Z;E++)T=ab[ta[E]],x.array[y]=x.value[T.a],x.array[y+1]=x.value[T.b],x.array[y+2]=x.value[T.c],x.array[y+3]=x.value[T.d],y+=4}else{if("faces"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)xa=x.value[sa[E]],x.array[y]=xa,x.array[y+1]=xa,x.array[y+2]=xa,y+=3;E=0;for(Z=ta.length;E<Z;E++)xa=x.value[ta[E]],x.array[y]=xa,x.array[y+1]=xa,x.array[y+2]=xa,x.array[y+3]=xa,y+=4}}else if(2===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],U=x.value[T.a],V=x.value[T.b],
-W=x.value[T.c],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=V.x,x.array[y+3]=V.y,x.array[y+4]=W.x,x.array[y+5]=W.y,y+=6;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],U=x.value[T.a],V=x.value[T.b],W=x.value[T.c],pa=x.value[T.d],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=V.x,x.array[y+3]=V.y,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=pa.x,x.array[y+7]=pa.y,y+=8}else{if("faces"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)W=V=U=xa=x.value[sa[E]],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=V.x,x.array[y+
-3]=V.y,x.array[y+4]=W.x,x.array[y+5]=W.y,y+=6;E=0;for(Z=ta.length;E<Z;E++)pa=W=V=U=xa=x.value[ta[E]],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=V.x,x.array[y+3]=V.y,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=pa.x,x.array[y+7]=pa.y,y+=8}}else if(3===x.size){var da;da="c"===x.type?["r","g","b"]:["x","y","z"];if(void 0===x.boundTo||"vertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],U=x.value[T.a],V=x.value[T.b],W=x.value[T.c],x.array[y]=U[da[0]],x.array[y+1]=U[da[1]],x.array[y+2]=
-U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=V[da[2]],x.array[y+6]=W[da[0]],x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],y+=9;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],U=x.value[T.a],V=x.value[T.b],W=x.value[T.c],pa=x.value[T.d],x.array[y]=U[da[0]],x.array[y+1]=U[da[1]],x.array[y+2]=U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=V[da[2]],x.array[y+6]=W[da[0]],x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],x.array[y+9]=pa[da[0]],x.array[y+10]=pa[da[1]],x.array[y+11]=
-pa[da[2]],y+=12}else if("faces"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)W=V=U=xa=x.value[sa[E]],x.array[y]=U[da[0]],x.array[y+1]=U[da[1]],x.array[y+2]=U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=V[da[2]],x.array[y+6]=W[da[0]],x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],y+=9;E=0;for(Z=ta.length;E<Z;E++)pa=W=V=U=xa=x.value[ta[E]],x.array[y]=U[da[0]],x.array[y+1]=U[da[1]],x.array[y+2]=U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=V[da[2]],x.array[y+6]=W[da[0]],
-x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],x.array[y+9]=pa[da[0]],x.array[y+10]=pa[da[1]],x.array[y+11]=pa[da[2]],y+=12}else if("faceVertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)xa=x.value[sa[E]],U=xa[0],V=xa[1],W=xa[2],x.array[y]=U[da[0]],x.array[y+1]=U[da[1]],x.array[y+2]=U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=V[da[2]],x.array[y+6]=W[da[0]],x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],y+=9;E=0;for(Z=ta.length;E<Z;E++)xa=x.value[ta[E]],U=xa[0],V=xa[1],W=xa[2],pa=
-xa[3],x.array[y]=U[da[0]],x.array[y+1]=U[da[1]],x.array[y+2]=U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=V[da[2]],x.array[y+6]=W[da[0]],x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],x.array[y+9]=pa[da[0]],x.array[y+10]=pa[da[1]],x.array[y+11]=pa[da[2]],y+=12}}else if(4===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],U=x.value[T.a],V=x.value[T.b],W=x.value[T.c],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=U.z,x.array[y+3]=U.w,x.array[y+
-4]=V.x,x.array[y+5]=V.y,x.array[y+6]=V.z,x.array[y+7]=V.w,x.array[y+8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,y+=12;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],U=x.value[T.a],V=x.value[T.b],W=x.value[T.c],pa=x.value[T.d],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=U.z,x.array[y+3]=U.w,x.array[y+4]=V.x,x.array[y+5]=V.y,x.array[y+6]=V.z,x.array[y+7]=V.w,x.array[y+8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,x.array[y+12]=pa.x,x.array[y+13]=pa.y,x.array[y+14]=pa.z,x.array[y+
-15]=pa.w,y+=16}else if("faces"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)W=V=U=xa=x.value[sa[E]],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=U.z,x.array[y+3]=U.w,x.array[y+4]=V.x,x.array[y+5]=V.y,x.array[y+6]=V.z,x.array[y+7]=V.w,x.array[y+8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,y+=12;E=0;for(Z=ta.length;E<Z;E++)pa=W=V=U=xa=x.value[ta[E]],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=U.z,x.array[y+3]=U.w,x.array[y+4]=V.x,x.array[y+5]=V.y,x.array[y+6]=V.z,x.array[y+7]=V.w,x.array[y+
-8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,x.array[y+12]=pa.x,x.array[y+13]=pa.y,x.array[y+14]=pa.z,x.array[y+15]=pa.w,y+=16}else if("faceVertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)xa=x.value[sa[E]],U=xa[0],V=xa[1],W=xa[2],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=U.z,x.array[y+3]=U.w,x.array[y+4]=V.x,x.array[y+5]=V.y,x.array[y+6]=V.z,x.array[y+7]=V.w,x.array[y+8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,y+=12;E=0;for(Z=ta.length;E<Z;E++)xa=x.value[ta[E]],
-U=xa[0],V=xa[1],W=xa[2],pa=xa[3],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=U.z,x.array[y+3]=U.w,x.array[y+4]=V.x,x.array[y+5]=V.y,x.array[y+6]=V.z,x.array[y+7]=V.w,x.array[y+8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,x.array[y+12]=pa.x,x.array[y+13]=pa.y,x.array[y+14]=pa.z,x.array[y+15]=pa.w,y+=16}k.bindBuffer(k.ARRAY_BUFFER,x.buffer);k.bufferData(k.ARRAY_BUFFER,x.array,va)}}Ya&&(delete qa.__inittedArrays,delete qa.__colorArray,delete qa.__normalArray,delete qa.__tangentArray,
-delete qa.__uvArray,delete qa.__uv2Array,delete qa.__faceArray,delete qa.__vertexArray,delete qa.__lineArray,delete qa.__skinIndexArray,delete qa.__skinWeightArray)}}ga.verticesNeedUpdate=!1;ga.morphTargetsNeedUpdate=!1;ga.elementsNeedUpdate=!1;ga.uvsNeedUpdate=!1;ga.normalsNeedUpdate=!1;ga.colorsNeedUpdate=!1;ga.tangentsNeedUpdate=!1;ga.buffersNeedUpdate=!1;la.attributes&&s(la)}else if(Aa instanceof THREE.Ribbon){la=e(Aa,ga);ua=la.attributes&&r(la);if(ga.verticesNeedUpdate||ga.colorsNeedUpdate||
-ga.normalsNeedUpdate||ua){var wb=ga,yc=k.DYNAMIC_DRAW,pc=void 0,qc=void 0,rc=void 0,zc=void 0,ya=void 0,Ac=void 0,Bc=void 0,Cc=void 0,Wc=void 0,Ua=void 0,kc=void 0,Ba=void 0,ib=void 0,Xc=wb.vertices,Yc=wb.colors,Zc=wb.normals,dd=Xc.length,ed=Yc.length,fd=Zc.length,Dc=wb.__vertexArray,Ec=wb.__colorArray,Fc=wb.__normalArray,gd=wb.colorsNeedUpdate,hd=wb.normalsNeedUpdate,Tc=wb.__webglCustomAttributesList;if(wb.verticesNeedUpdate){for(pc=0;pc<dd;pc++)zc=Xc[pc],ya=3*pc,Dc[ya]=zc.x,Dc[ya+1]=zc.y,Dc[ya+
-2]=zc.z;k.bindBuffer(k.ARRAY_BUFFER,wb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Dc,yc)}if(gd){for(qc=0;qc<ed;qc++)Ac=Yc[qc],ya=3*qc,Ec[ya]=Ac.r,Ec[ya+1]=Ac.g,Ec[ya+2]=Ac.b;k.bindBuffer(k.ARRAY_BUFFER,wb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Ec,yc)}if(hd){for(rc=0;rc<fd;rc++)Bc=Zc[rc],ya=3*rc,Fc[ya]=Bc.x,Fc[ya+1]=Bc.y,Fc[ya+2]=Bc.z;k.bindBuffer(k.ARRAY_BUFFER,wb.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,Fc,yc)}if(Tc){Cc=0;for(Wc=Tc.length;Cc<Wc;Cc++)if(Ba=Tc[Cc],Ba.needsUpdate&&
-(void 0===Ba.boundTo||"vertices"===Ba.boundTo)){ya=0;kc=Ba.value.length;if(1===Ba.size)for(Ua=0;Ua<kc;Ua++)Ba.array[Ua]=Ba.value[Ua];else if(2===Ba.size)for(Ua=0;Ua<kc;Ua++)ib=Ba.value[Ua],Ba.array[ya]=ib.x,Ba.array[ya+1]=ib.y,ya+=2;else if(3===Ba.size)if("c"===Ba.type)for(Ua=0;Ua<kc;Ua++)ib=Ba.value[Ua],Ba.array[ya]=ib.r,Ba.array[ya+1]=ib.g,Ba.array[ya+2]=ib.b,ya+=3;else for(Ua=0;Ua<kc;Ua++)ib=Ba.value[Ua],Ba.array[ya]=ib.x,Ba.array[ya+1]=ib.y,Ba.array[ya+2]=ib.z,ya+=3;else if(4===Ba.size)for(Ua=
-0;Ua<kc;Ua++)ib=Ba.value[Ua],Ba.array[ya]=ib.x,Ba.array[ya+1]=ib.y,Ba.array[ya+2]=ib.z,Ba.array[ya+3]=ib.w,ya+=4;k.bindBuffer(k.ARRAY_BUFFER,Ba.buffer);k.bufferData(k.ARRAY_BUFFER,Ba.array,yc)}}}ga.verticesNeedUpdate=!1;ga.colorsNeedUpdate=!1;ga.normalsNeedUpdate=!1;la.attributes&&s(la)}else if(Aa instanceof THREE.Line){la=e(Aa,ga);ua=la.attributes&&r(la);if(ga.verticesNeedUpdate||ga.colorsNeedUpdate||ua){var Wb=ga,Uc=k.DYNAMIC_DRAW,sc=void 0,tc=void 0,Gc=void 0,Ga=void 0,Hc=void 0,$c=Wb.vertices,
-ad=Wb.colors,id=$c.length,jd=ad.length,Ic=Wb.__vertexArray,Jc=Wb.__colorArray,kd=Wb.colorsNeedUpdate,Vc=Wb.__webglCustomAttributesList,Kc=void 0,bd=void 0,Va=void 0,lc=void 0,jb=void 0,Ca=void 0;if(Wb.verticesNeedUpdate){for(sc=0;sc<id;sc++)Gc=$c[sc],Ga=3*sc,Ic[Ga]=Gc.x,Ic[Ga+1]=Gc.y,Ic[Ga+2]=Gc.z;k.bindBuffer(k.ARRAY_BUFFER,Wb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Ic,Uc)}if(kd){for(tc=0;tc<jd;tc++)Hc=ad[tc],Ga=3*tc,Jc[Ga]=Hc.r,Jc[Ga+1]=Hc.g,Jc[Ga+2]=Hc.b;k.bindBuffer(k.ARRAY_BUFFER,Wb.__webglColorBuffer);
-k.bufferData(k.ARRAY_BUFFER,Jc,Uc)}if(Vc){Kc=0;for(bd=Vc.length;Kc<bd;Kc++)if(Ca=Vc[Kc],Ca.needsUpdate&&(void 0===Ca.boundTo||"vertices"===Ca.boundTo)){Ga=0;lc=Ca.value.length;if(1===Ca.size)for(Va=0;Va<lc;Va++)Ca.array[Va]=Ca.value[Va];else if(2===Ca.size)for(Va=0;Va<lc;Va++)jb=Ca.value[Va],Ca.array[Ga]=jb.x,Ca.array[Ga+1]=jb.y,Ga+=2;else if(3===Ca.size)if("c"===Ca.type)for(Va=0;Va<lc;Va++)jb=Ca.value[Va],Ca.array[Ga]=jb.r,Ca.array[Ga+1]=jb.g,Ca.array[Ga+2]=jb.b,Ga+=3;else for(Va=0;Va<lc;Va++)jb=
-Ca.value[Va],Ca.array[Ga]=jb.x,Ca.array[Ga+1]=jb.y,Ca.array[Ga+2]=jb.z,Ga+=3;else if(4===Ca.size)for(Va=0;Va<lc;Va++)jb=Ca.value[Va],Ca.array[Ga]=jb.x,Ca.array[Ga+1]=jb.y,Ca.array[Ga+2]=jb.z,Ca.array[Ga+3]=jb.w,Ga+=4;k.bindBuffer(k.ARRAY_BUFFER,Ca.buffer);k.bufferData(k.ARRAY_BUFFER,Ca.array,Uc)}}}ga.verticesNeedUpdate=!1;ga.colorsNeedUpdate=!1;la.attributes&&s(la)}else Aa instanceof THREE.ParticleSystem&&(ga instanceof THREE.BufferGeometry?((ga.verticesNeedUpdate||ga.colorsNeedUpdate)&&j(ga,k.DYNAMIC_DRAW,
-!ga.dynamic),ga.verticesNeedUpdate=!1,ga.colorsNeedUpdate=!1):(la=e(Aa,ga),ua=la.attributes&&r(la),(ga.verticesNeedUpdate||ga.colorsNeedUpdate||Aa.sortParticles||ua)&&i(ga,k.DYNAMIC_DRAW,Aa),ga.verticesNeedUpdate=!1,ga.colorsNeedUpdate=!1,la.attributes&&s(la)))}};this.initMaterial=function(a,b,c,d){var e,f,g,h,i,j,l,m,n;a instanceof THREE.MeshDepthMaterial?n="depth":a instanceof THREE.MeshNormalMaterial?n="normal":a instanceof THREE.MeshBasicMaterial?n="basic":a instanceof THREE.MeshLambertMaterial?
+r,n.transparent=null));f.render=!0;!0===this.sortObjects&&(null!==g.renderDepth?f.z=g.renderDepth:(va.copy(g.matrixWorld.getPosition()),Xa.multiplyVector3(va),f.z=va.z),f.id=g.id)}this.sortObjects&&h.sort(m);h=a.__webglObjectsImmediate;d=0;for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(A(g,b),g=f.object.material,g.transparent?(f.transparent=g,f.opaque=null):(f.opaque=g,f.transparent=null));a.overrideMaterial?(d=a.overrideMaterial,this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst),
+this.setDepthTest(d.depthTest),this.setDepthWrite(d.depthWrite),C(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),p(a.__webglObjects,!1,"",b,i,j,!0,d),o(a.__webglObjectsImmediate,"",b,i,j,!1,d)):(this.setBlending(THREE.NormalBlending),p(a.__webglObjects,!0,"opaque",b,i,j,!1),o(a.__webglObjectsImmediate,"opaque",b,i,j,!1),p(a.__webglObjects,!1,"transparent",b,i,j,!0),o(a.__webglObjectsImmediate,"transparent",b,i,j,!0));l(this.renderPluginsPost,a,b);c&&(c.generateMipmaps&&c.minFilter!==
+THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter)&&(c instanceof THREE.WebGLRenderTargetCube?(k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture),k.generateMipmap(k.TEXTURE_CUBE_MAP),k.bindTexture(k.TEXTURE_CUBE_MAP,null)):(k.bindTexture(k.TEXTURE_2D,c.__webglTexture),k.generateMipmap(k.TEXTURE_2D),k.bindTexture(k.TEXTURE_2D,null)));this.setDepthTest(!0);this.setDepthWrite(!0)}};this.renderImmediateObject=function(a,b,c,d,e){var f=t(a,b,c,d,e);X=-1;S.setMaterialFaces(d);e.immediateRenderCallback?
+e.immediateRenderCallback(f,k,gb):e.render(function(a){S.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){a.__webglObjects||(a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[],a.__webglFlares=[]);for(;a.__objectsAdded.length;){var b=a.__objectsAdded[0],l=a,n=void 0,m=void 0,o=void 0;if(!b.__webglInit)if(b.__webglInit=!0,b._modelViewMatrix=new THREE.Matrix4,b._normalMatrix=new THREE.Matrix3,b instanceof THREE.Mesh)if(m=b.geometry,m instanceof THREE.Geometry){if(void 0===
+m.geometryGroups){var p=m,t=void 0,v=void 0,w=void 0,A=void 0,C=void 0,D=void 0,F=void 0,B={},H=p.morphTargets.length,I=p.morphNormals.length;p.geometryGroups={};t=0;for(v=p.faces.length;t<v;t++)w=p.faces[t],A=w.materialIndex,D=void 0!==A?A:-1,void 0===B[D]&&(B[D]={hash:D,counter:0}),F=B[D].hash+"_"+B[D].counter,void 0===p.geometryGroups[F]&&(p.geometryGroups[F]={faces3:[],faces4:[],materialIndex:A,vertices:0,numMorphTargets:H,numMorphNormals:I}),C=w instanceof THREE.Face3?3:4,65535<p.geometryGroups[F].vertices+
+C&&(B[D].counter+=1,F=B[D].hash+"_"+B[D].counter,void 0===p.geometryGroups[F]&&(p.geometryGroups[F]={faces3:[],faces4:[],materialIndex:A,vertices:0,numMorphTargets:H,numMorphNormals:I})),w instanceof THREE.Face3?p.geometryGroups[F].faces3.push(t):p.geometryGroups[F].faces4.push(t),p.geometryGroups[F].vertices+=C;p.geometryGroupsList=[];var O=void 0;for(O in p.geometryGroups)p.geometryGroups[O].id=eb++,p.geometryGroupsList.push(p.geometryGroups[O])}for(n in m.geometryGroups)if(o=m.geometryGroups[n],
+!o.__webglVertexBuffer){var G=o;G.__webglVertexBuffer=k.createBuffer();G.__webglNormalBuffer=k.createBuffer();G.__webglTangentBuffer=k.createBuffer();G.__webglColorBuffer=k.createBuffer();G.__webglUVBuffer=k.createBuffer();G.__webglUV2Buffer=k.createBuffer();G.__webglSkinIndicesBuffer=k.createBuffer();G.__webglSkinWeightsBuffer=k.createBuffer();G.__webglFaceBuffer=k.createBuffer();G.__webglLineBuffer=k.createBuffer();var J=void 0,M=void 0;if(G.numMorphTargets){G.__webglMorphTargetsBuffers=[];J=0;
+for(M=G.numMorphTargets;J<M;J++)G.__webglMorphTargetsBuffers.push(k.createBuffer())}if(G.numMorphNormals){G.__webglMorphNormalsBuffers=[];J=0;for(M=G.numMorphNormals;J<M;J++)G.__webglMorphNormalsBuffers.push(k.createBuffer())}S.info.memory.geometries++;d(o,b);m.verticesNeedUpdate=!0;m.morphTargetsNeedUpdate=!0;m.elementsNeedUpdate=!0;m.uvsNeedUpdate=!0;m.normalsNeedUpdate=!0;m.tangentsNeedUpdate=!0;m.colorsNeedUpdate=!0}}else m instanceof THREE.BufferGeometry&&h(m);else if(b instanceof THREE.Ribbon){if(m=
+b.geometry,!m.__webglVertexBuffer){var Y=m;Y.__webglVertexBuffer=k.createBuffer();Y.__webglColorBuffer=k.createBuffer();Y.__webglNormalBuffer=k.createBuffer();S.info.memory.geometries++;var K=m,R=b,$=K.vertices.length;K.__vertexArray=new Float32Array(3*$);K.__colorArray=new Float32Array(3*$);K.__normalArray=new Float32Array(3*$);K.__webglVertexCount=$;c(K,R);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0;m.normalsNeedUpdate=!0}}else if(b instanceof THREE.Line){if(m=b.geometry,!m.__webglVertexBuffer){var L=
+m;L.__webglVertexBuffer=k.createBuffer();L.__webglColorBuffer=k.createBuffer();S.info.memory.geometries++;var aa=m,X=b,N=aa.vertices.length;aa.__vertexArray=new Float32Array(3*N);aa.__colorArray=new Float32Array(3*N);aa.__webglLineCount=N;c(aa,X);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0}}else if(b instanceof THREE.ParticleSystem&&(m=b.geometry,!m.__webglVertexBuffer))if(m instanceof THREE.Geometry){var P=m;P.__webglVertexBuffer=k.createBuffer();P.__webglColorBuffer=k.createBuffer();S.info.memory.geometries++;
+var Q=m,fa=b,ba=Q.vertices.length;Q.__vertexArray=new Float32Array(3*ba);Q.__colorArray=new Float32Array(3*ba);Q.__sortArray=[];Q.__webglParticleCount=ba;c(Q,fa);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0}else m instanceof THREE.BufferGeometry&&h(m);if(!b.__webglActive){if(b instanceof THREE.Mesh)if(m=b.geometry,m instanceof THREE.BufferGeometry)q(l.__webglObjects,m,b);else for(n in m.geometryGroups)o=m.geometryGroups[n],q(l.__webglObjects,o,b);else b instanceof THREE.Ribbon||b instanceof THREE.Line||
+b instanceof THREE.ParticleSystem?(m=b.geometry,q(l.__webglObjects,m,b)):b instanceof THREE.ImmediateRenderObject||b.immediateRenderCallback?l.__webglObjectsImmediate.push({object:b,opaque:null,transparent:null}):b instanceof THREE.Sprite?l.__webglSprites.push(b):b instanceof THREE.LensFlare&&l.__webglFlares.push(b);b.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var ia=a.__objectsRemoved[0],ja=a;ia instanceof THREE.Mesh||ia instanceof THREE.ParticleSystem||ia instanceof
+THREE.Ribbon||ia instanceof THREE.Line?z(ja.__webglObjects,ia):ia instanceof THREE.Sprite?u(ja.__webglSprites,ia):ia instanceof THREE.LensFlare?u(ja.__webglFlares,ia):(ia instanceof THREE.ImmediateRenderObject||ia.immediateRenderCallback)&&z(ja.__webglObjectsImmediate,ia);ia.__webglActive=!1;a.__objectsRemoved.splice(0,1)}for(var ea=0,ra=a.__webglObjects.length;ea<ra;ea++){var Aa=a.__webglObjects[ea].object,ga=Aa.geometry,Ja=void 0,ua=void 0,la=void 0;if(Aa instanceof THREE.Mesh)if(ga instanceof THREE.BufferGeometry)(ga.verticesNeedUpdate||
+ga.elementsNeedUpdate||ga.uvsNeedUpdate||ga.normalsNeedUpdate||ga.colorsNeedUpdate||ga.tangentsNeedUpdate)&&j(ga,k.DYNAMIC_DRAW,!ga.dynamic),ga.verticesNeedUpdate=!1,ga.elementsNeedUpdate=!1,ga.uvsNeedUpdate=!1,ga.normalsNeedUpdate=!1,ga.colorsNeedUpdate=!1,ga.tangentsNeedUpdate=!1;else{for(var Ha=0,Ta=ga.geometryGroupsList.length;Ha<Ta;Ha++)if(Ja=ga.geometryGroupsList[Ha],la=e(Aa,Ja),ga.buffersNeedUpdate&&d(Ja,Aa),ua=la.attributes&&r(la),ga.verticesNeedUpdate||ga.morphTargetsNeedUpdate||ga.elementsNeedUpdate||
+ga.uvsNeedUpdate||ga.normalsNeedUpdate||ga.colorsNeedUpdate||ga.tangentsNeedUpdate||ua){var qa=Ja,Na=Aa,va=k.DYNAMIC_DRAW,Ya=!ga.dynamic,Ma=la;if(qa.__inittedArrays){var nb=f(Ma),qb=Ma.vertexColors?Ma.vertexColors:!1,ob=g(Ma),fb=nb===THREE.SmoothShading,E=void 0,Z=void 0,Wa=void 0,T=void 0,cb=void 0,Za=void 0,Bb=void 0,lb=void 0,Xa=void 0,gb=void 0,kb=void 0,U=void 0,V=void 0,W=void 0,pa=void 0,Db=void 0,Eb=void 0,Fb=void 0,pb=void 0,Gb=void 0,Hb=void 0,Ib=void 0,rb=void 0,Jb=void 0,Kb=void 0,Lb=
+void 0,xb=void 0,Mb=void 0,Nb=void 0,Ob=void 0,zb=void 0,Pb=void 0,Qb=void 0,Rb=void 0,Ab=void 0,wa=void 0,fc=void 0,Zb=void 0,ic=void 0,jc=void 0,Qa=void 0,gc=void 0,Oa=void 0,Pa=void 0,$b=void 0,Tb=void 0,Ia=0,La=0,Ub=0,Vb=0,ub=0,$a=0,za=0,db=0,Ka=0,ha=0,ka=0,y=0,xa=void 0,Ra=qa.__vertexArray,nc=qa.__uvArray,oc=qa.__uv2Array,vb=qa.__normalArray,Da=qa.__tangentArray,Sa=qa.__colorArray,Ea=qa.__skinIndexArray,Fa=qa.__skinWeightArray,Oc=qa.__morphTargetsArrays,Pc=qa.__morphNormalsArrays,Qc=qa.__webglCustomAttributesList,
+x=void 0,Sb=qa.__faceArray,mb=qa.__lineArray,hb=Na.geometry,uc=hb.elementsNeedUpdate,mc=hb.uvsNeedUpdate,vc=hb.normalsNeedUpdate,Lc=hb.tangentsNeedUpdate,Mc=hb.colorsNeedUpdate,cd=hb.morphTargetsNeedUpdate,dc=hb.vertices,sa=qa.faces3,ta=qa.faces4,ab=hb.faces,Rc=hb.faceVertexUvs[0],Sc=hb.faceVertexUvs[1],ec=hb.skinIndices,ac=hb.skinWeights,bc=hb.morphTargets,xc=hb.morphNormals;if(hb.verticesNeedUpdate){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],U=dc[T.a],V=dc[T.b],W=dc[T.c],Ra[La]=U.x,Ra[La+1]=U.y,Ra[La+
+2]=U.z,Ra[La+3]=V.x,Ra[La+4]=V.y,Ra[La+5]=V.z,Ra[La+6]=W.x,Ra[La+7]=W.y,Ra[La+8]=W.z,La+=9;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],U=dc[T.a],V=dc[T.b],W=dc[T.c],pa=dc[T.d],Ra[La]=U.x,Ra[La+1]=U.y,Ra[La+2]=U.z,Ra[La+3]=V.x,Ra[La+4]=V.y,Ra[La+5]=V.z,Ra[La+6]=W.x,Ra[La+7]=W.y,Ra[La+8]=W.z,Ra[La+9]=pa.x,Ra[La+10]=pa.y,Ra[La+11]=pa.z,La+=12;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Ra,va)}if(cd){Qa=0;for(gc=bc.length;Qa<gc;Qa++){E=ka=0;for(Z=sa.length;E<Z;E++)$b=sa[E],
+T=ab[$b],U=bc[Qa].vertices[T.a],V=bc[Qa].vertices[T.b],W=bc[Qa].vertices[T.c],Oa=Oc[Qa],Oa[ka]=U.x,Oa[ka+1]=U.y,Oa[ka+2]=U.z,Oa[ka+3]=V.x,Oa[ka+4]=V.y,Oa[ka+5]=V.z,Oa[ka+6]=W.x,Oa[ka+7]=W.y,Oa[ka+8]=W.z,Ma.morphNormals&&(fb?(Tb=xc[Qa].vertexNormals[$b],Gb=Tb.a,Hb=Tb.b,Ib=Tb.c):Ib=Hb=Gb=xc[Qa].faceNormals[$b],Pa=Pc[Qa],Pa[ka]=Gb.x,Pa[ka+1]=Gb.y,Pa[ka+2]=Gb.z,Pa[ka+3]=Hb.x,Pa[ka+4]=Hb.y,Pa[ka+5]=Hb.z,Pa[ka+6]=Ib.x,Pa[ka+7]=Ib.y,Pa[ka+8]=Ib.z),ka+=9;E=0;for(Z=ta.length;E<Z;E++)$b=ta[E],T=ab[$b],U=bc[Qa].vertices[T.a],
+V=bc[Qa].vertices[T.b],W=bc[Qa].vertices[T.c],pa=bc[Qa].vertices[T.d],Oa=Oc[Qa],Oa[ka]=U.x,Oa[ka+1]=U.y,Oa[ka+2]=U.z,Oa[ka+3]=V.x,Oa[ka+4]=V.y,Oa[ka+5]=V.z,Oa[ka+6]=W.x,Oa[ka+7]=W.y,Oa[ka+8]=W.z,Oa[ka+9]=pa.x,Oa[ka+10]=pa.y,Oa[ka+11]=pa.z,Ma.morphNormals&&(fb?(Tb=xc[Qa].vertexNormals[$b],Gb=Tb.a,Hb=Tb.b,Ib=Tb.c,rb=Tb.d):rb=Ib=Hb=Gb=xc[Qa].faceNormals[$b],Pa=Pc[Qa],Pa[ka]=Gb.x,Pa[ka+1]=Gb.y,Pa[ka+2]=Gb.z,Pa[ka+3]=Hb.x,Pa[ka+4]=Hb.y,Pa[ka+5]=Hb.z,Pa[ka+6]=Ib.x,Pa[ka+7]=Ib.y,Pa[ka+8]=Ib.z,Pa[ka+9]=rb.x,
+Pa[ka+10]=rb.y,Pa[ka+11]=rb.z),ka+=12;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglMorphTargetsBuffers[Qa]);k.bufferData(k.ARRAY_BUFFER,Oc[Qa],va);Ma.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglMorphNormalsBuffers[Qa]),k.bufferData(k.ARRAY_BUFFER,Pc[Qa],va))}}if(ac.length){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],Mb=ac[T.a],Nb=ac[T.b],Ob=ac[T.c],Fa[ha]=Mb.x,Fa[ha+1]=Mb.y,Fa[ha+2]=Mb.z,Fa[ha+3]=Mb.w,Fa[ha+4]=Nb.x,Fa[ha+5]=Nb.y,Fa[ha+6]=Nb.z,Fa[ha+7]=Nb.w,Fa[ha+8]=Ob.x,Fa[ha+9]=Ob.y,Fa[ha+10]=Ob.z,
+Fa[ha+11]=Ob.w,Pb=ec[T.a],Qb=ec[T.b],Rb=ec[T.c],Ea[ha]=Pb.x,Ea[ha+1]=Pb.y,Ea[ha+2]=Pb.z,Ea[ha+3]=Pb.w,Ea[ha+4]=Qb.x,Ea[ha+5]=Qb.y,Ea[ha+6]=Qb.z,Ea[ha+7]=Qb.w,Ea[ha+8]=Rb.x,Ea[ha+9]=Rb.y,Ea[ha+10]=Rb.z,Ea[ha+11]=Rb.w,ha+=12;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],Mb=ac[T.a],Nb=ac[T.b],Ob=ac[T.c],zb=ac[T.d],Fa[ha]=Mb.x,Fa[ha+1]=Mb.y,Fa[ha+2]=Mb.z,Fa[ha+3]=Mb.w,Fa[ha+4]=Nb.x,Fa[ha+5]=Nb.y,Fa[ha+6]=Nb.z,Fa[ha+7]=Nb.w,Fa[ha+8]=Ob.x,Fa[ha+9]=Ob.y,Fa[ha+10]=Ob.z,Fa[ha+11]=Ob.w,Fa[ha+12]=zb.x,Fa[ha+13]=zb.y,
+Fa[ha+14]=zb.z,Fa[ha+15]=zb.w,Pb=ec[T.a],Qb=ec[T.b],Rb=ec[T.c],Ab=ec[T.d],Ea[ha]=Pb.x,Ea[ha+1]=Pb.y,Ea[ha+2]=Pb.z,Ea[ha+3]=Pb.w,Ea[ha+4]=Qb.x,Ea[ha+5]=Qb.y,Ea[ha+6]=Qb.z,Ea[ha+7]=Qb.w,Ea[ha+8]=Rb.x,Ea[ha+9]=Rb.y,Ea[ha+10]=Rb.z,Ea[ha+11]=Rb.w,Ea[ha+12]=Ab.x,Ea[ha+13]=Ab.y,Ea[ha+14]=Ab.z,Ea[ha+15]=Ab.w,ha+=16;0<ha&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglSkinIndicesBuffer),k.bufferData(k.ARRAY_BUFFER,Ea,va),k.bindBuffer(k.ARRAY_BUFFER,qa.__webglSkinWeightsBuffer),k.bufferData(k.ARRAY_BUFFER,Fa,va))}if(Mc&&
+qb){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],Bb=T.vertexColors,lb=T.color,3===Bb.length&&qb===THREE.VertexColors?(Jb=Bb[0],Kb=Bb[1],Lb=Bb[2]):Lb=Kb=Jb=lb,Sa[Ka]=Jb.r,Sa[Ka+1]=Jb.g,Sa[Ka+2]=Jb.b,Sa[Ka+3]=Kb.r,Sa[Ka+4]=Kb.g,Sa[Ka+5]=Kb.b,Sa[Ka+6]=Lb.r,Sa[Ka+7]=Lb.g,Sa[Ka+8]=Lb.b,Ka+=9;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],Bb=T.vertexColors,lb=T.color,4===Bb.length&&qb===THREE.VertexColors?(Jb=Bb[0],Kb=Bb[1],Lb=Bb[2],xb=Bb[3]):xb=Lb=Kb=Jb=lb,Sa[Ka]=Jb.r,Sa[Ka+1]=Jb.g,Sa[Ka+2]=Jb.b,Sa[Ka+3]=Kb.r,Sa[Ka+
+4]=Kb.g,Sa[Ka+5]=Kb.b,Sa[Ka+6]=Lb.r,Sa[Ka+7]=Lb.g,Sa[Ka+8]=Lb.b,Sa[Ka+9]=xb.r,Sa[Ka+10]=xb.g,Sa[Ka+11]=xb.b,Ka+=12;0<Ka&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,Sa,va))}if(Lc&&hb.hasTangents){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],Xa=T.vertexTangents,Db=Xa[0],Eb=Xa[1],Fb=Xa[2],Da[za]=Db.x,Da[za+1]=Db.y,Da[za+2]=Db.z,Da[za+3]=Db.w,Da[za+4]=Eb.x,Da[za+5]=Eb.y,Da[za+6]=Eb.z,Da[za+7]=Eb.w,Da[za+8]=Fb.x,Da[za+9]=Fb.y,Da[za+10]=Fb.z,Da[za+11]=Fb.w,za+=12;E=0;for(Z=
+ta.length;E<Z;E++)T=ab[ta[E]],Xa=T.vertexTangents,Db=Xa[0],Eb=Xa[1],Fb=Xa[2],pb=Xa[3],Da[za]=Db.x,Da[za+1]=Db.y,Da[za+2]=Db.z,Da[za+3]=Db.w,Da[za+4]=Eb.x,Da[za+5]=Eb.y,Da[za+6]=Eb.z,Da[za+7]=Eb.w,Da[za+8]=Fb.x,Da[za+9]=Fb.y,Da[za+10]=Fb.z,Da[za+11]=Fb.w,Da[za+12]=pb.x,Da[za+13]=pb.y,Da[za+14]=pb.z,Da[za+15]=pb.w,za+=16;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglTangentBuffer);k.bufferData(k.ARRAY_BUFFER,Da,va)}if(vc&&nb){E=0;for(Z=sa.length;E<Z;E++)if(T=ab[sa[E]],cb=T.vertexNormals,Za=T.normal,3===cb.length&&
+fb)for(wa=0;3>wa;wa++)Zb=cb[wa],vb[$a]=Zb.x,vb[$a+1]=Zb.y,vb[$a+2]=Zb.z,$a+=3;else for(wa=0;3>wa;wa++)vb[$a]=Za.x,vb[$a+1]=Za.y,vb[$a+2]=Za.z,$a+=3;E=0;for(Z=ta.length;E<Z;E++)if(T=ab[ta[E]],cb=T.vertexNormals,Za=T.normal,4===cb.length&&fb)for(wa=0;4>wa;wa++)Zb=cb[wa],vb[$a]=Zb.x,vb[$a+1]=Zb.y,vb[$a+2]=Zb.z,$a+=3;else for(wa=0;4>wa;wa++)vb[$a]=Za.x,vb[$a+1]=Za.y,vb[$a+2]=Za.z,$a+=3;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,vb,va)}if(mc&&Rc&&ob){E=0;for(Z=sa.length;E<
+Z;E++)if(Wa=sa[E],gb=Rc[Wa],void 0!==gb)for(wa=0;3>wa;wa++)ic=gb[wa],nc[Ub]=ic.u,nc[Ub+1]=ic.v,Ub+=2;E=0;for(Z=ta.length;E<Z;E++)if(Wa=ta[E],gb=Rc[Wa],void 0!==gb)for(wa=0;4>wa;wa++)ic=gb[wa],nc[Ub]=ic.u,nc[Ub+1]=ic.v,Ub+=2;0<Ub&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglUVBuffer),k.bufferData(k.ARRAY_BUFFER,nc,va))}if(mc&&Sc&&ob){E=0;for(Z=sa.length;E<Z;E++)if(Wa=sa[E],kb=Sc[Wa],void 0!==kb)for(wa=0;3>wa;wa++)jc=kb[wa],oc[Vb]=jc.u,oc[Vb+1]=jc.v,Vb+=2;E=0;for(Z=ta.length;E<Z;E++)if(Wa=ta[E],kb=Sc[Wa],
+void 0!==kb)for(wa=0;4>wa;wa++)jc=kb[wa],oc[Vb]=jc.u,oc[Vb+1]=jc.v,Vb+=2;0<Vb&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglUV2Buffer),k.bufferData(k.ARRAY_BUFFER,oc,va))}if(uc){E=0;for(Z=sa.length;E<Z;E++)Sb[ub]=Ia,Sb[ub+1]=Ia+1,Sb[ub+2]=Ia+2,ub+=3,mb[db]=Ia,mb[db+1]=Ia+1,mb[db+2]=Ia,mb[db+3]=Ia+2,mb[db+4]=Ia+1,mb[db+5]=Ia+2,db+=6,Ia+=3;E=0;for(Z=ta.length;E<Z;E++)Sb[ub]=Ia,Sb[ub+1]=Ia+1,Sb[ub+2]=Ia+3,Sb[ub+3]=Ia+1,Sb[ub+4]=Ia+2,Sb[ub+5]=Ia+3,ub+=6,mb[db]=Ia,mb[db+1]=Ia+1,mb[db+2]=Ia,mb[db+3]=Ia+3,mb[db+
+4]=Ia+1,mb[db+5]=Ia+2,mb[db+6]=Ia+2,mb[db+7]=Ia+3,db+=8,Ia+=4;k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,qa.__webglFaceBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Sb,va);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,qa.__webglLineBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,mb,va)}if(Qc){wa=0;for(fc=Qc.length;wa<fc;wa++)if(x=Qc[wa],x.__original.needsUpdate){y=0;if(1===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],x.array[y]=x.value[T.a],x.array[y+1]=x.value[T.b],x.array[y+
+2]=x.value[T.c],y+=3;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],x.array[y]=x.value[T.a],x.array[y+1]=x.value[T.b],x.array[y+2]=x.value[T.c],x.array[y+3]=x.value[T.d],y+=4}else{if("faces"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)xa=x.value[sa[E]],x.array[y]=xa,x.array[y+1]=xa,x.array[y+2]=xa,y+=3;E=0;for(Z=ta.length;E<Z;E++)xa=x.value[ta[E]],x.array[y]=xa,x.array[y+1]=xa,x.array[y+2]=xa,x.array[y+3]=xa,y+=4}}else if(2===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)T=
+ab[sa[E]],U=x.value[T.a],V=x.value[T.b],W=x.value[T.c],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=V.x,x.array[y+3]=V.y,x.array[y+4]=W.x,x.array[y+5]=W.y,y+=6;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],U=x.value[T.a],V=x.value[T.b],W=x.value[T.c],pa=x.value[T.d],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=V.x,x.array[y+3]=V.y,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=pa.x,x.array[y+7]=pa.y,y+=8}else{if("faces"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)W=V=U=xa=x.value[sa[E]],x.array[y]=U.x,x.array[y+
+1]=U.y,x.array[y+2]=V.x,x.array[y+3]=V.y,x.array[y+4]=W.x,x.array[y+5]=W.y,y+=6;E=0;for(Z=ta.length;E<Z;E++)pa=W=V=U=xa=x.value[ta[E]],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=V.x,x.array[y+3]=V.y,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=pa.x,x.array[y+7]=pa.y,y+=8}}else if(3===x.size){var da;da="c"===x.type?["r","g","b"]:["x","y","z"];if(void 0===x.boundTo||"vertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],U=x.value[T.a],V=x.value[T.b],W=x.value[T.c],x.array[y]=U[da[0]],x.array[y+
+1]=U[da[1]],x.array[y+2]=U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=V[da[2]],x.array[y+6]=W[da[0]],x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],y+=9;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],U=x.value[T.a],V=x.value[T.b],W=x.value[T.c],pa=x.value[T.d],x.array[y]=U[da[0]],x.array[y+1]=U[da[1]],x.array[y+2]=U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=V[da[2]],x.array[y+6]=W[da[0]],x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],x.array[y+9]=pa[da[0]],x.array[y+
+10]=pa[da[1]],x.array[y+11]=pa[da[2]],y+=12}else if("faces"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)W=V=U=xa=x.value[sa[E]],x.array[y]=U[da[0]],x.array[y+1]=U[da[1]],x.array[y+2]=U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=V[da[2]],x.array[y+6]=W[da[0]],x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],y+=9;E=0;for(Z=ta.length;E<Z;E++)pa=W=V=U=xa=x.value[ta[E]],x.array[y]=U[da[0]],x.array[y+1]=U[da[1]],x.array[y+2]=U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=
+V[da[2]],x.array[y+6]=W[da[0]],x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],x.array[y+9]=pa[da[0]],x.array[y+10]=pa[da[1]],x.array[y+11]=pa[da[2]],y+=12}else if("faceVertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)xa=x.value[sa[E]],U=xa[0],V=xa[1],W=xa[2],x.array[y]=U[da[0]],x.array[y+1]=U[da[1]],x.array[y+2]=U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=V[da[2]],x.array[y+6]=W[da[0]],x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],y+=9;E=0;for(Z=ta.length;E<Z;E++)xa=x.value[ta[E]],
+U=xa[0],V=xa[1],W=xa[2],pa=xa[3],x.array[y]=U[da[0]],x.array[y+1]=U[da[1]],x.array[y+2]=U[da[2]],x.array[y+3]=V[da[0]],x.array[y+4]=V[da[1]],x.array[y+5]=V[da[2]],x.array[y+6]=W[da[0]],x.array[y+7]=W[da[1]],x.array[y+8]=W[da[2]],x.array[y+9]=pa[da[0]],x.array[y+10]=pa[da[1]],x.array[y+11]=pa[da[2]],y+=12}}else if(4===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)T=ab[sa[E]],U=x.value[T.a],V=x.value[T.b],W=x.value[T.c],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=
+U.z,x.array[y+3]=U.w,x.array[y+4]=V.x,x.array[y+5]=V.y,x.array[y+6]=V.z,x.array[y+7]=V.w,x.array[y+8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,y+=12;E=0;for(Z=ta.length;E<Z;E++)T=ab[ta[E]],U=x.value[T.a],V=x.value[T.b],W=x.value[T.c],pa=x.value[T.d],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=U.z,x.array[y+3]=U.w,x.array[y+4]=V.x,x.array[y+5]=V.y,x.array[y+6]=V.z,x.array[y+7]=V.w,x.array[y+8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,x.array[y+12]=pa.x,x.array[y+13]=
+pa.y,x.array[y+14]=pa.z,x.array[y+15]=pa.w,y+=16}else if("faces"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)W=V=U=xa=x.value[sa[E]],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=U.z,x.array[y+3]=U.w,x.array[y+4]=V.x,x.array[y+5]=V.y,x.array[y+6]=V.z,x.array[y+7]=V.w,x.array[y+8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,y+=12;E=0;for(Z=ta.length;E<Z;E++)pa=W=V=U=xa=x.value[ta[E]],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=U.z,x.array[y+3]=U.w,x.array[y+4]=V.x,x.array[y+5]=V.y,x.array[y+
+6]=V.z,x.array[y+7]=V.w,x.array[y+8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,x.array[y+12]=pa.x,x.array[y+13]=pa.y,x.array[y+14]=pa.z,x.array[y+15]=pa.w,y+=16}else if("faceVertices"===x.boundTo){E=0;for(Z=sa.length;E<Z;E++)xa=x.value[sa[E]],U=xa[0],V=xa[1],W=xa[2],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=U.z,x.array[y+3]=U.w,x.array[y+4]=V.x,x.array[y+5]=V.y,x.array[y+6]=V.z,x.array[y+7]=V.w,x.array[y+8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,y+=12;E=0;for(Z=
+ta.length;E<Z;E++)xa=x.value[ta[E]],U=xa[0],V=xa[1],W=xa[2],pa=xa[3],x.array[y]=U.x,x.array[y+1]=U.y,x.array[y+2]=U.z,x.array[y+3]=U.w,x.array[y+4]=V.x,x.array[y+5]=V.y,x.array[y+6]=V.z,x.array[y+7]=V.w,x.array[y+8]=W.x,x.array[y+9]=W.y,x.array[y+10]=W.z,x.array[y+11]=W.w,x.array[y+12]=pa.x,x.array[y+13]=pa.y,x.array[y+14]=pa.z,x.array[y+15]=pa.w,y+=16}k.bindBuffer(k.ARRAY_BUFFER,x.buffer);k.bufferData(k.ARRAY_BUFFER,x.array,va)}}Ya&&(delete qa.__inittedArrays,delete qa.__colorArray,delete qa.__normalArray,
+delete qa.__tangentArray,delete qa.__uvArray,delete qa.__uv2Array,delete qa.__faceArray,delete qa.__vertexArray,delete qa.__lineArray,delete qa.__skinIndexArray,delete qa.__skinWeightArray)}}ga.verticesNeedUpdate=!1;ga.morphTargetsNeedUpdate=!1;ga.elementsNeedUpdate=!1;ga.uvsNeedUpdate=!1;ga.normalsNeedUpdate=!1;ga.colorsNeedUpdate=!1;ga.tangentsNeedUpdate=!1;ga.buffersNeedUpdate=!1;la.attributes&&s(la)}else if(Aa instanceof THREE.Ribbon){la=e(Aa,ga);ua=la.attributes&&r(la);if(ga.verticesNeedUpdate||
+ga.colorsNeedUpdate||ga.normalsNeedUpdate||ua){var wb=ga,yc=k.DYNAMIC_DRAW,pc=void 0,qc=void 0,rc=void 0,zc=void 0,ya=void 0,Ac=void 0,Bc=void 0,Cc=void 0,Wc=void 0,Ua=void 0,kc=void 0,Ba=void 0,ib=void 0,Xc=wb.vertices,Yc=wb.colors,Zc=wb.normals,dd=Xc.length,ed=Yc.length,fd=Zc.length,Dc=wb.__vertexArray,Ec=wb.__colorArray,Fc=wb.__normalArray,gd=wb.colorsNeedUpdate,hd=wb.normalsNeedUpdate,Tc=wb.__webglCustomAttributesList;if(wb.verticesNeedUpdate){for(pc=0;pc<dd;pc++)zc=Xc[pc],ya=3*pc,Dc[ya]=zc.x,
+Dc[ya+1]=zc.y,Dc[ya+2]=zc.z;k.bindBuffer(k.ARRAY_BUFFER,wb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Dc,yc)}if(gd){for(qc=0;qc<ed;qc++)Ac=Yc[qc],ya=3*qc,Ec[ya]=Ac.r,Ec[ya+1]=Ac.g,Ec[ya+2]=Ac.b;k.bindBuffer(k.ARRAY_BUFFER,wb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Ec,yc)}if(hd){for(rc=0;rc<fd;rc++)Bc=Zc[rc],ya=3*rc,Fc[ya]=Bc.x,Fc[ya+1]=Bc.y,Fc[ya+2]=Bc.z;k.bindBuffer(k.ARRAY_BUFFER,wb.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,Fc,yc)}if(Tc){Cc=0;for(Wc=Tc.length;Cc<Wc;Cc++)if(Ba=
+Tc[Cc],Ba.needsUpdate&&(void 0===Ba.boundTo||"vertices"===Ba.boundTo)){ya=0;kc=Ba.value.length;if(1===Ba.size)for(Ua=0;Ua<kc;Ua++)Ba.array[Ua]=Ba.value[Ua];else if(2===Ba.size)for(Ua=0;Ua<kc;Ua++)ib=Ba.value[Ua],Ba.array[ya]=ib.x,Ba.array[ya+1]=ib.y,ya+=2;else if(3===Ba.size)if("c"===Ba.type)for(Ua=0;Ua<kc;Ua++)ib=Ba.value[Ua],Ba.array[ya]=ib.r,Ba.array[ya+1]=ib.g,Ba.array[ya+2]=ib.b,ya+=3;else for(Ua=0;Ua<kc;Ua++)ib=Ba.value[Ua],Ba.array[ya]=ib.x,Ba.array[ya+1]=ib.y,Ba.array[ya+2]=ib.z,ya+=3;else if(4===
+Ba.size)for(Ua=0;Ua<kc;Ua++)ib=Ba.value[Ua],Ba.array[ya]=ib.x,Ba.array[ya+1]=ib.y,Ba.array[ya+2]=ib.z,Ba.array[ya+3]=ib.w,ya+=4;k.bindBuffer(k.ARRAY_BUFFER,Ba.buffer);k.bufferData(k.ARRAY_BUFFER,Ba.array,yc)}}}ga.verticesNeedUpdate=!1;ga.colorsNeedUpdate=!1;ga.normalsNeedUpdate=!1;la.attributes&&s(la)}else if(Aa instanceof THREE.Line){la=e(Aa,ga);ua=la.attributes&&r(la);if(ga.verticesNeedUpdate||ga.colorsNeedUpdate||ua){var Wb=ga,Uc=k.DYNAMIC_DRAW,sc=void 0,tc=void 0,Gc=void 0,Ga=void 0,Hc=void 0,
+$c=Wb.vertices,ad=Wb.colors,id=$c.length,jd=ad.length,Ic=Wb.__vertexArray,Jc=Wb.__colorArray,kd=Wb.colorsNeedUpdate,Vc=Wb.__webglCustomAttributesList,Kc=void 0,bd=void 0,Va=void 0,lc=void 0,jb=void 0,Ca=void 0;if(Wb.verticesNeedUpdate){for(sc=0;sc<id;sc++)Gc=$c[sc],Ga=3*sc,Ic[Ga]=Gc.x,Ic[Ga+1]=Gc.y,Ic[Ga+2]=Gc.z;k.bindBuffer(k.ARRAY_BUFFER,Wb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Ic,Uc)}if(kd){for(tc=0;tc<jd;tc++)Hc=ad[tc],Ga=3*tc,Jc[Ga]=Hc.r,Jc[Ga+1]=Hc.g,Jc[Ga+2]=Hc.b;k.bindBuffer(k.ARRAY_BUFFER,
+Wb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Jc,Uc)}if(Vc){Kc=0;for(bd=Vc.length;Kc<bd;Kc++)if(Ca=Vc[Kc],Ca.needsUpdate&&(void 0===Ca.boundTo||"vertices"===Ca.boundTo)){Ga=0;lc=Ca.value.length;if(1===Ca.size)for(Va=0;Va<lc;Va++)Ca.array[Va]=Ca.value[Va];else if(2===Ca.size)for(Va=0;Va<lc;Va++)jb=Ca.value[Va],Ca.array[Ga]=jb.x,Ca.array[Ga+1]=jb.y,Ga+=2;else if(3===Ca.size)if("c"===Ca.type)for(Va=0;Va<lc;Va++)jb=Ca.value[Va],Ca.array[Ga]=jb.r,Ca.array[Ga+1]=jb.g,Ca.array[Ga+2]=jb.b,Ga+=3;else for(Va=
+0;Va<lc;Va++)jb=Ca.value[Va],Ca.array[Ga]=jb.x,Ca.array[Ga+1]=jb.y,Ca.array[Ga+2]=jb.z,Ga+=3;else if(4===Ca.size)for(Va=0;Va<lc;Va++)jb=Ca.value[Va],Ca.array[Ga]=jb.x,Ca.array[Ga+1]=jb.y,Ca.array[Ga+2]=jb.z,Ca.array[Ga+3]=jb.w,Ga+=4;k.bindBuffer(k.ARRAY_BUFFER,Ca.buffer);k.bufferData(k.ARRAY_BUFFER,Ca.array,Uc)}}}ga.verticesNeedUpdate=!1;ga.colorsNeedUpdate=!1;la.attributes&&s(la)}else Aa instanceof THREE.ParticleSystem&&(ga instanceof THREE.BufferGeometry?((ga.verticesNeedUpdate||ga.colorsNeedUpdate)&&
+j(ga,k.DYNAMIC_DRAW,!ga.dynamic),ga.verticesNeedUpdate=!1,ga.colorsNeedUpdate=!1):(la=e(Aa,ga),ua=la.attributes&&r(la),(ga.verticesNeedUpdate||ga.colorsNeedUpdate||Aa.sortParticles||ua)&&i(ga,k.DYNAMIC_DRAW,Aa),ga.verticesNeedUpdate=!1,ga.colorsNeedUpdate=!1,la.attributes&&s(la)))}};this.initMaterial=function(a,b,c,d){var e,f,g,h,i,j,l,m,n;a instanceof THREE.MeshDepthMaterial?n="depth":a instanceof THREE.MeshNormalMaterial?n="normal":a instanceof THREE.MeshBasicMaterial?n="basic":a instanceof THREE.MeshLambertMaterial?
 n="lambert":a instanceof THREE.MeshPhongMaterial?n="phong":a instanceof THREE.LineBasicMaterial?n="basic":a instanceof THREE.ParticleBasicMaterial&&(n="particle_basic");if(n){var o=THREE.ShaderLib[n];a.uniforms=THREE.UniformsUtils.clone(o.uniforms);a.vertexShader=o.vertexShader;a.fragmentShader=o.fragmentShader}var p,q,s;e=p=q=s=o=0;for(f=b.length;e<f;e++)g=b[e],g.onlyShadow||(g instanceof THREE.DirectionalLight&&p++,g instanceof THREE.PointLight&&q++,g instanceof THREE.SpotLight&&s++,g instanceof
 THREE.HemisphereLight&&o++);q+s+p+o<=ja?e=p:(e=Math.ceil(ja*p/(q+p)),s=q=ja-e,o=e);f=q;g=s;h=o;o=p=0;for(s=b.length;o<s;o++)q=b[o],q.castShadow&&(q instanceof THREE.SpotLight&&p++,q instanceof THREE.DirectionalLight&&!q.shadowCascade&&p++);m=p;fc&&d&&d.useVertexTexture?l=1024:(b=k.getParameter(k.MAX_VERTEX_UNIFORM_VECTORS),b=Math.floor((b-20)/4),void 0!==d&&d instanceof THREE.SkinnedMesh&&(b=Math.min(d.bones.length,b),b<d.bones.length&&console.warn("WebGLRenderer: too many bones - "+d.bones.length+
 ", this GPU supports just "+b+" (try OpenGL instead of ANGLE)")),l=b);var r;a:{q=a.fragmentShader;s=a.vertexShader;o=a.uniforms;b=a.attributes;p=a.defines;var c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,specularMap:!!a.specularMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,fogExp:c instanceof THREE.FogExp2,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,maxBones:l,useVertexTexture:fc&&d&&d.useVertexTexture,boneTextureWidth:d&&d.boneTextureWidth,

+ 17 - 1
src/renderers/WebGLRenderer.js

@@ -3720,6 +3720,20 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	// Sorting
 
+	function painterSortStable ( a, b ) {
+
+		if ( a.z !== b.z ) {
+
+			return b.z - a.z;
+
+		} else {
+
+			return b.id - a.id;
+
+		}
+
+	};
+
 	function painterSort ( a, b ) {
 
 		return b.z - a.z;
@@ -3837,6 +3851,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 						}
 
+						webglObject.id = object.id;
+
 					}
 
 				}
@@ -3847,7 +3863,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		if ( this.sortObjects ) {
 
-			renderList.sort( painterSort );
+			renderList.sort( painterSortStable );
 
 		}
 

Some files were not shown because too many files changed in this diff