فهرست منبع

Simplified a bit custom attributes for lines and particles.

No need for copy of attributes map here, attributes list has the same function.
alteredq 13 سال پیش
والد
کامیت
2e414a2dd2
3فایلهای تغییر یافته به همراه488 افزوده شده و 504 حذف شده
  1. 432 432
      build/Three.js
  2. 51 51
      build/custom/ThreeWebGL.js
  3. 5 21
      src/renderers/WebGLRenderer.js

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 432 - 432
build/Three.js


+ 51 - 51
build/custom/ThreeWebGL.js

@@ -177,56 +177,56 @@ THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.lights_phong_fragment,THR
 THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n#ifdef USE_SIZEATTENUATION\ngl_PointSize = size * ( scale / length( mvPosition.xyz ) );\n#else\ngl_PointSize = size;\n#endif\ngl_Position = projectionMatrix * mvPosition;",THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 psColor;\nuniform float opacity;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_particle_pars_fragment,
 THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,"void main() {\ngl_FragColor = vec4( psColor, opacity );",THREE.ShaderChunk.map_particle_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.morphtarget_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.morphtarget_vertex,
 THREE.ShaderChunk.default_vertex,"}"].join("\n"),fragmentShader:"vec4 pack_depth( const in float depth ) {\nconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\nconst vec4 bit_mask  = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\nvec4 res = fract( depth * bit_shift );\nres -= res.xxyz * bit_mask;\nreturn res;\n}\nvoid main() {\ngl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n}"}};
-THREE.WebGLRenderer=function(a){function b(a,b){var c=a.vertices.length,e=b.material;if(e.attributes){if(a.__webglCustomAttributesList===void 0)a.__webglCustomAttributesList=[];for(var f in e.attributes){var h=e.attributes[f],i={},o;for(o in h)i[o]=h[o];if(!i.__webglInitialized||i.createUniqueBuffers){i.__webglInitialized=!0;var s=1;i.type==="v2"?s=2:i.type==="v3"?s=3:i.type==="v4"?s=4:i.type==="c"&&(s=3);i.size=s;i.array=new Float32Array(c*s);i.buffer=d.createBuffer();i.buffer.belongsToAttribute=
-f;h.needsUpdate=!0;i.__original=h}a.__webglCustomAttributesList.push(i)}}}function c(a,b){if(a.material&&!(a.material instanceof THREE.MeshFaceMaterial))return a.material;else if(b.materialIndex>=0)return a.geometry.materials[b.materialIndex]}function e(a,b,c){var e,f,h,i=a.vertices,o=i.length,s=a.colors,k=s.length,m=a.__vertexArray,q=a.__colorArray,l=a.__sortArray,x=a.__dirtyVertices,r=a.__dirtyColors,n=a.__webglCustomAttributesList;if(c.sortParticles){Ba.multiplySelf(c.matrixWorld);for(e=0;e<o;e++)f=
-i[e].position,Ha.copy(f),Ba.multiplyVector3(Ha),l[e]=[Ha.z,e];l.sort(function(a,b){return b[0]-a[0]});for(e=0;e<o;e++)f=i[l[e][1]].position,h=e*3,m[h]=f.x,m[h+1]=f.y,m[h+2]=f.z;for(e=0;e<k;e++)h=e*3,color=s[l[e][1]],q[h]=color.r,q[h+1]=color.g,q[h+2]=color.b;if(n){s=0;for(k=n.length;s<k;s++)if(o=n[s],o.boundTo===void 0||o.boundTo==="vertices"){h=0;f=o.value.length;for(e=0;e<f;e++)index=l[e][1],o.size===1?o.array[h]=o.value[index]:(i=o.value[index],o.size===2?(o.array[h]=i.x,o.array[h+1]=i.y):o.size===
-3?o.type==="c"?(o.array[h]=i.r,o.array[h+1]=i.g,o.array[h+2]=i.b):(o.array[h]=i.x,o.array[h+1]=i.y,o.array[h+2]=i.z):(o.array[h]=i.x,o.array[h+1]=i.y,o.array[h+2]=i.z,o.array[h+3]=i.w)),h+=o.size}}}else{if(x)for(e=0;e<o;e++)f=i[e].position,h=e*3,m[h]=f.x,m[h+1]=f.y,m[h+2]=f.z;if(r)for(e=0;e<k;e++)color=s[e],h=e*3,q[h]=color.r,q[h+1]=color.g,q[h+2]=color.b;if(n){s=0;for(k=n.length;s<k;s++)if(o=n[s],o.__original.needsUpdate&&(o.boundTo===void 0||o.boundTo==="vertices")){f=o.value.length;for(e=h=0;e<
-f;e++)offset_custom=o.offset,o.size===1?o.array[h]=o.value[e]:(i=o.value[e],o.size===2?(o.array[h]=i.x,o.array[h+1]=i.y):o.size===3?o.type==="c"?(o.array[h]=i.r,o.array[h+1]=i.g,o.array[h+2]=i.b):(o.array[h]=i.x,o.array[h+1]=i.y,o.array[h+2]=i.z):(o.array[h]=i.x,o.array[h+1]=i.y,o.array[h+2]=i.z,o.array[h+3]=i.w)),h+=o.size}}}if(x||c.sortParticles)d.bindBuffer(d.ARRAY_BUFFER,a.__webglVertexBuffer),d.bufferData(d.ARRAY_BUFFER,m,b);if(r||c.sortParticles)d.bindBuffer(d.ARRAY_BUFFER,a.__webglColorBuffer),
-d.bufferData(d.ARRAY_BUFFER,q,b);if(n){s=0;for(k=n.length;s<k;s++)if(o=n[s],o.__original.needsUpdate||c.sortParticles)d.bindBuffer(d.ARRAY_BUFFER,o.buffer),d.bufferData(d.ARRAY_BUFFER,o.array,b)}}function h(a,b,c,e,h){e.program||N.initMaterial(e,b,c,h);if(e.morphTargets&&!h.__webglMorphTargetInfluences){h.__webglMorphTargetInfluences=new Float32Array(N.maxMorphTargets);for(var f=0,i=N.maxMorphTargets;f<i;f++)h.__webglMorphTargetInfluences[f]=0}var o=!1,f=e.program,i=f.uniforms,s=e.uniforms;f!==Qa&&
-(d.useProgram(f),Qa=f,o=!0);if(e.id!==sa)sa=e.id,o=!0;if(o){d.uniformMatrix4fv(i.projectionMatrix,!1,Na);if(c&&e.fog)if(s.fogColor.value=c.color,c instanceof THREE.Fog)s.fogNear.value=c.near,s.fogFar.value=c.far;else if(c instanceof THREE.FogExp2)s.fogDensity.value=c.density;if(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e.lights){for(var k,m,q=0,l=0,x=0,r,n,t,u=Sa,B=u.directional.colors,w=u.directional.positions,v=u.point.colors,C=u.point.positions,D=u.point.distances,
-F=0,E=0,c=k=t=0,o=b.length;c<o;c++)if(k=b[c],m=k.color,r=k.position,n=k.intensity,t=k.distance,k instanceof THREE.AmbientLight)N.gammaInput?(q+=m.r*m.r,l+=m.g*m.g,x+=m.b*m.b):(q+=m.r,l+=m.g,x+=m.b);else if(k instanceof THREE.DirectionalLight)t=F*3,N.gammaInput?(B[t]=m.r*m.r*n*n,B[t+1]=m.g*m.g*n*n,B[t+2]=m.b*m.b*n*n):(B[t]=m.r*n,B[t+1]=m.g*n,B[t+2]=m.b*n),w[t]=r.x,w[t+1]=r.y,w[t+2]=r.z,F+=1;else if(k instanceof THREE.SpotLight)t=F*3,N.gammaInput?(B[t]=m.r*m.r*n*n,B[t+1]=m.g*m.g*n*n,B[t+2]=m.b*m.b*
-n*n):(B[t]=m.r*n,B[t+1]=m.g*n,B[t+2]=m.b*n),m=1/r.length(),w[t]=r.x*m,w[t+1]=r.y*m,w[t+2]=r.z*m,F+=1;else if(k instanceof THREE.PointLight)k=E*3,N.gammaInput?(v[k]=m.r*m.r*n*n,v[k+1]=m.g*m.g*n*n,v[k+2]=m.b*m.b*n*n):(v[k]=m.r*n,v[k+1]=m.g*n,v[k+2]=m.b*n),C[k]=r.x,C[k+1]=r.y,C[k+2]=r.z,D[E]=t,E+=1;c=F*3;for(o=B.length;c<o;c++)B[c]=0;c=E*3;for(o=v.length;c<o;c++)v[c]=0;u.point.length=E;u.directional.length=F;u.ambient[0]=q;u.ambient[1]=l;u.ambient[2]=x;b=Sa;s.enableLighting.value=b.directional.length+
-b.point.length;s.ambientLightColor.value=b.ambient;s.directionalLightColor.value=b.directional.colors;s.directionalLightDirection.value=b.directional.positions;s.pointLightColor.value=b.point.colors;s.pointLightPosition.value=b.point.positions;s.pointLightDistance.value=b.point.distances}if(e instanceof THREE.MeshBasicMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.MeshPhongMaterial)s.opacity.value=e.opacity,N.gammaInput?s.diffuse.value.copyGammaToLinear(e.color):s.diffuse.value=
-e.color,(s.map.texture=e.map)&&s.offsetRepeat.value.set(e.map.offset.x,e.map.offset.y,e.map.repeat.x,e.map.repeat.y),s.lightMap.texture=e.lightMap,s.envMap.texture=e.envMap,s.flipEnvMap.value=e.envMap instanceof THREE.WebGLRenderTargetCube?1:-1,s.reflectivity.value=e.reflectivity,s.refractionRatio.value=e.refractionRatio,s.combine.value=e.combine,s.useRefract.value=e.envMap&&e.envMap.mapping instanceof THREE.CubeRefractionMapping;if(e instanceof THREE.LineBasicMaterial)s.diffuse.value=e.color,s.opacity.value=
-e.opacity;else if(e instanceof THREE.ParticleBasicMaterial)s.psColor.value=e.color,s.opacity.value=e.opacity,s.size.value=e.size,s.scale.value=Ca.height/2,s.map.texture=e.map;else if(e instanceof THREE.MeshPhongMaterial)s.shininess.value=e.shininess,N.gammaInput?(s.ambient.value.copyGammaToLinear(e.ambient),s.specular.value.copyGammaToLinear(e.specular)):(s.ambient.value=e.ambient,s.specular.value=e.specular);else if(e instanceof THREE.MeshLambertMaterial)N.gammaInput?s.ambient.value.copyGammaToLinear(e.ambient):
-s.ambient.value=e.ambient;else if(e instanceof THREE.MeshDepthMaterial)s.mNear.value=a.near,s.mFar.value=a.far,s.opacity.value=e.opacity;else if(e instanceof THREE.MeshNormalMaterial)s.opacity.value=e.opacity;if(h.receiveShadow&&!e._shadowPass&&s.shadowMatrix){for(b=0;b<La.length;b++)s.shadowMatrix.value[b]=La[b],s.shadowMap.texture[b]=N.shadowMap[b];s.shadowDarkness.value=N.shadowMapDarkness;s.shadowBias.value=N.shadowMapBias}b=e.uniformsList;s=0;for(c=b.length;s<c;s++)if(l=f.uniforms[b[s][1]])if(q=
-b[s][0],x=q.type,o=q.value,x==="i")d.uniform1i(l,o);else if(x==="f")d.uniform1f(l,o);else if(x==="v2")d.uniform2f(l,o.x,o.y);else if(x==="v3")d.uniform3f(l,o.x,o.y,o.z);else if(x==="v4")d.uniform4f(l,o.x,o.y,o.z,o.w);else if(x==="c")d.uniform3f(l,o.r,o.g,o.b);else if(x==="fv1")d.uniform1fv(l,o);else if(x==="fv")d.uniform3fv(l,o);else if(x==="v3v"){if(!q._array)q._array=new Float32Array(3*o.length);x=0;for(r=o.length;x<r;x++)u=x*3,q._array[u]=o[x].x,q._array[u+1]=o[x].y,q._array[u+2]=o[x].z;d.uniform3fv(l,
-q._array)}else if(x==="m4"){if(!q._array)q._array=new Float32Array(16);o.flattenToArray(q._array);d.uniformMatrix4fv(l,!1,q._array)}else if(x==="m4v"){if(!q._array)q._array=new Float32Array(16*o.length);x=0;for(r=o.length;x<r;x++)o[x].flattenToArrayOffset(q._array,x*16);d.uniformMatrix4fv(l,!1,q._array)}else if(x==="t"){if(d.uniform1i(l,o),l=q.texture)if(l.image instanceof Array&&l.image.length===6){if(q=l,q.image.length===6)if(q.needsUpdate){if(!q.image.__webglTextureCube)q.image.__webglTextureCube=
-d.createTexture();d.activeTexture(d.TEXTURE0+o);d.bindTexture(d.TEXTURE_CUBE_MAP,q.image.__webglTextureCube);for(o=0;o<6;o++)d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+o,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,q.image[o]);U(d.TEXTURE_CUBE_MAP,q,q.image[0]);q.needsUpdate=!1}else d.activeTexture(d.TEXTURE0+o),d.bindTexture(d.TEXTURE_CUBE_MAP,q.image.__webglTextureCube)}else l instanceof THREE.WebGLRenderTargetCube?(q=l,d.activeTexture(d.TEXTURE0+o),d.bindTexture(d.TEXTURE_CUBE_MAP,q.__webglTexture)):X(l,o)}else if(x===
-"tv"){if(!q._array){q._array=[];x=0;for(r=q.texture.length;x<r;x++)q._array[x]=o+x}d.uniform1iv(l,q._array);x=0;for(r=q.texture.length;x<r;x++)(l=q.texture[x])&&X(l,q._array[x])}(e instanceof THREE.ShaderMaterial||e instanceof THREE.MeshPhongMaterial||e.envMap)&&i.cameraPosition!==null&&d.uniform3f(i.cameraPosition,a.position.x,a.position.y,a.position.z);(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.ShaderMaterial||e.skinning)&&i.viewMatrix!==null&&
-d.uniformMatrix4fv(i.viewMatrix,!1,Oa);e.skinning&&(d.uniformMatrix4fv(i.cameraInverseMatrix,!1,Oa),d.uniformMatrix4fv(i.boneGlobalMatrices,!1,h.boneMatrices))}d.uniformMatrix4fv(i.modelViewMatrix,!1,h._modelViewMatrixArray);i.normalMatrix&&d.uniformMatrix3fv(i.normalMatrix,!1,h._normalMatrixArray);(e instanceof THREE.ShaderMaterial||e.envMap||e.skinning||h.receiveShadow)&&i.objectMatrix!==null&&d.uniformMatrix4fv(i.objectMatrix,!1,h._objectMatrixArray);return f}function f(a,b,c,e,f,i){if(e.opacity!==
-0){var k,o,c=h(a,b,c,e,i),a=c.attributes,b=!1,c=f.id*16777215+c.id*2+(e.wireframe?1:0);c!==H&&(H=c,b=!0);if(!e.morphTargets&&a.position>=0)b&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglVertexBuffer),d.vertexAttribPointer(a.position,3,d.FLOAT,!1,0,0));else if(i.morphTargetBase){c=e.program.attributes;i.morphTargetBase!==-1?(d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[i.morphTargetBase]),d.vertexAttribPointer(c.position,3,d.FLOAT,!1,0,0)):c.position>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglVertexBuffer),
-d.vertexAttribPointer(c.position,3,d.FLOAT,!1,0,0));if(i.morphTargetForcedOrder.length){k=0;var s=i.morphTargetForcedOrder;for(o=i.morphTargetInfluences;k<e.numSupportedMorphTargets&&k<s.length;)d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[s[k]]),d.vertexAttribPointer(c["morphTarget"+k],3,d.FLOAT,!1,0,0),i.__webglMorphTargetInfluences[k]=o[s[k]],k++}else{var s=[],l=-1,m=0;o=i.morphTargetInfluences;var q,n=o.length;k=0;for(i.morphTargetBase!==-1&&(s[i.morphTargetBase]=!0);k<e.numSupportedMorphTargets;){for(q=
-0;q<n;q++)!s[q]&&o[q]>l&&(m=q,l=o[m]);d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[m]);d.vertexAttribPointer(c["morphTarget"+k],3,d.FLOAT,!1,0,0);i.__webglMorphTargetInfluences[k]=l;s[m]=1;l=-1;k++}}e.program.uniforms.morphTargetInfluences!==null&&d.uniform1fv(e.program.uniforms.morphTargetInfluences,i.__webglMorphTargetInfluences)}if(b){if(f.__webglCustomAttributesList){k=0;for(o=f.__webglCustomAttributesList.length;k<o;k++)c=f.__webglCustomAttributesList[k],a[c.buffer.belongsToAttribute]>=
-0&&(d.bindBuffer(d.ARRAY_BUFFER,c.buffer),d.vertexAttribPointer(a[c.buffer.belongsToAttribute],c.size,d.FLOAT,!1,0,0))}a.color>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglColorBuffer),d.vertexAttribPointer(a.color,3,d.FLOAT,!1,0,0));a.normal>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglNormalBuffer),d.vertexAttribPointer(a.normal,3,d.FLOAT,!1,0,0));a.tangent>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglTangentBuffer),d.vertexAttribPointer(a.tangent,4,d.FLOAT,!1,0,0));a.uv>=0&&(f.__webglUVBuffer?(d.bindBuffer(d.ARRAY_BUFFER,
-f.__webglUVBuffer),d.vertexAttribPointer(a.uv,2,d.FLOAT,!1,0,0),d.enableVertexAttribArray(a.uv)):d.disableVertexAttribArray(a.uv));a.uv2>=0&&(f.__webglUV2Buffer?(d.bindBuffer(d.ARRAY_BUFFER,f.__webglUV2Buffer),d.vertexAttribPointer(a.uv2,2,d.FLOAT,!1,0,0),d.enableVertexAttribArray(a.uv2)):d.disableVertexAttribArray(a.uv2));e.skinning&&a.skinVertexA>=0&&a.skinVertexB>=0&&a.skinIndex>=0&&a.skinWeight>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinVertexABuffer),d.vertexAttribPointer(a.skinVertexA,4,
-d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinVertexBBuffer),d.vertexAttribPointer(a.skinVertexB,4,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinIndicesBuffer),d.vertexAttribPointer(a.skinIndex,4,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinWeightsBuffer),d.vertexAttribPointer(a.skinWeight,4,d.FLOAT,!1,0,0))}i instanceof THREE.Mesh?(e.wireframe?(d.lineWidth(e.wireframeLinewidth),b&&d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,f.__webglLineBuffer),d.drawElements(d.LINES,f.__webglLineCount,
-d.UNSIGNED_SHORT,0)):(b&&d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),d.drawElements(d.TRIANGLES,f.__webglFaceCount,d.UNSIGNED_SHORT,0)),N.info.render.calls++,N.info.render.vertices+=f.__webglFaceCount,N.info.render.faces+=f.__webglFaceCount/3):i instanceof THREE.Line?(i=i.type===THREE.LineStrip?d.LINE_STRIP:d.LINES,d.lineWidth(e.linewidth),d.drawArrays(i,0,f.__webglLineCount),N.info.render.calls++):i instanceof THREE.ParticleSystem?(d.drawArrays(d.POINTS,0,f.__webglParticleCount),N.info.render.calls++):
-i instanceof THREE.Ribbon&&(d.drawArrays(d.TRIANGLE_STRIP,0,f.__webglVertexCount),N.info.render.calls++)}}function i(a,b,c){if(!a.__webglVertexBuffer)a.__webglVertexBuffer=d.createBuffer();if(!a.__webglNormalBuffer)a.__webglNormalBuffer=d.createBuffer();a.hasPos&&(d.bindBuffer(d.ARRAY_BUFFER,a.__webglVertexBuffer),d.bufferData(d.ARRAY_BUFFER,a.positionArray,d.DYNAMIC_DRAW),d.enableVertexAttribArray(b.attributes.position),d.vertexAttribPointer(b.attributes.position,3,d.FLOAT,!1,0,0));if(a.hasNormal){d.bindBuffer(d.ARRAY_BUFFER,
-a.__webglNormalBuffer);if(c===THREE.FlatShading){var e,f,h,i,o,k,l,m,q,n,x=a.count*3;for(n=0;n<x;n+=9)c=a.normalArray,e=c[n],f=c[n+1],h=c[n+2],i=c[n+3],k=c[n+4],m=c[n+5],o=c[n+6],l=c[n+7],q=c[n+8],e=(e+i+o)/3,f=(f+k+l)/3,h=(h+m+q)/3,c[n]=e,c[n+1]=f,c[n+2]=h,c[n+3]=e,c[n+4]=f,c[n+5]=h,c[n+6]=e,c[n+7]=f,c[n+8]=h}d.bufferData(d.ARRAY_BUFFER,a.normalArray,d.DYNAMIC_DRAW);d.enableVertexAttribArray(b.attributes.normal);d.vertexAttribPointer(b.attributes.normal,3,d.FLOAT,!1,0,0)}d.drawArrays(d.TRIANGLES,
-0,a.count);a.count=0}function k(a){if(ga!==a.doubleSided)a.doubleSided?d.disable(d.CULL_FACE):d.enable(d.CULL_FACE),ga=a.doubleSided;if(ta!==a.flipSided)a.flipSided?d.frontFace(d.CW):d.frontFace(d.CCW),ta=a.flipSided}function r(a){oa!==a&&(a?d.enable(d.DEPTH_TEST):d.disable(d.DEPTH_TEST),oa=a)}function n(a){ua!==a&&(d.depthMask(a),ua=a)}function l(a,b,c){Fa!==a&&(a?d.enable(d.POLYGON_OFFSET_FILL):d.disable(d.POLYGON_OFFSET_FILL),Fa=a);if(a&&(Ja!==b||Ga!==c))d.polygonOffset(b,c),Ja=b,Ga=c}function t(a){va[0].set(a.n41-
-a.n11,a.n42-a.n12,a.n43-a.n13,a.n44-a.n14);va[1].set(a.n41+a.n11,a.n42+a.n12,a.n43+a.n13,a.n44+a.n14);va[2].set(a.n41+a.n21,a.n42+a.n22,a.n43+a.n23,a.n44+a.n24);va[3].set(a.n41-a.n21,a.n42-a.n22,a.n43-a.n23,a.n44-a.n24);va[4].set(a.n41-a.n31,a.n42-a.n32,a.n43-a.n33,a.n44-a.n34);va[5].set(a.n41+a.n31,a.n42+a.n32,a.n43+a.n33,a.n44+a.n34);for(var b,a=0;a<6;a++)b=va[a],b.divideScalar(Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z))}function B(a){for(var b=a.matrixWorld,d=-a.geometry.boundingSphere.radius*Math.max(a.scale.x,
-Math.max(a.scale.y,a.scale.z)),c=0;c<6;c++)if(a=va[c].x*b.n14+va[c].y*b.n24+va[c].z*b.n34+va[c].w,a<=d)return!1;return!0}function C(a){var b=a.object.material;b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}function D(a){var b=a.object,d=a.buffer,c;c=b.material;if(c instanceof THREE.MeshFaceMaterial){if(d=d.materialIndex,d>=0)b=b.geometry.materials[d],b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}else if(b=c)b.transparent?(a.transparent=
-b,a.opaque=null):(a.opaque=b,a.transparent=null)}function F(a,b){return b.z-a.z}function E(a){var b,c,e,l=0,T,n,o,s,Q=a.lights;pa||(pa=new THREE.PerspectiveCamera(N.shadowCameraFov,N.shadowMapWidth/N.shadowMapHeight,N.shadowCameraNear,N.shadowCameraFar));b=0;for(c=Q.length;b<c;b++)if(e=Q[b],e instanceof THREE.SpotLight&&e.castShadow){sa=-1;N.shadowMap[l]||(N.shadowMap[l]=new THREE.WebGLRenderTarget(N.shadowMapWidth,N.shadowMapHeight,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}));
-La[l]||(La[l]=new THREE.Matrix4);T=N.shadowMap[l];n=La[l];pa.position.copy(e.position);pa.lookAt(e.target.position);pa.parent==null&&(console.warn("Camera is not on the Scene. Adding it..."),a.add(pa));this.autoUpdateScene&&a.updateMatrixWorld();pa.matrixWorldInverse.getInverse(pa.matrixWorld);n.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);n.multiplySelf(pa.projectionMatrix);n.multiplySelf(pa.matrixWorldInverse);pa.matrixWorldInverse.flattenToArray(Oa);pa.projectionMatrix.flattenToArray(Na);Ba.multiply(pa.projectionMatrix,
-pa.matrixWorldInverse);t(Ba);Y(T);d.clearColor(1,1,1,1);N.clear();d.clearColor(wa.r,wa.g,wa.b,Da);n=a.__webglObjects.length;e=a.__webglObjectsImmediate.length;for(T=0;T<n;T++)o=a.__webglObjects[T],s=o.object,s.visible&&s.castShadow?!(s instanceof THREE.Mesh)||!s.frustumCulled||B(s)?(s.matrixWorld.flattenToArray(s._objectMatrixArray),O(s,pa,!1),o.render=!0):o.render=!1:o.render=!1;r(!0);K(THREE.NormalBlending);for(T=0;T<n;T++)if(o=a.__webglObjects[T],o.render)s=o.object,buffer=o.buffer,k(s),o=s.customDepthMaterial?
-s.customDepthMaterial:s.geometry.morphTargets.length?Ta:Pa,f(pa,Q,null,o,buffer,s);for(T=0;T<e;T++)o=a.__webglObjectsImmediate[T],s=o.object,s.visible&&s.castShadow&&(s.matrixAutoUpdate&&s.matrixWorld.flattenToArray(s._objectMatrixArray),H=-1,O(s,pa,!1),k(s),program=h(pa,Q,null,Pa,s),s.immediateRenderCallback?s.immediateRenderCallback(program,d,va):s.render(function(a){i(a,program,Pa.shading)}));l++}}function ra(a,b){var c,e,f;c=w.attributes;var h=w.uniforms,i=Ia/Ma,o,k=[],l=Ma*0.5,m=Ia*0.5,q=!0;
-d.useProgram(w.program);Qa=w.program;H=oa=P=-1;Ua||(d.enableVertexAttribArray(w.attributes.position),d.enableVertexAttribArray(w.attributes.uv),Ua=!0);d.disable(d.CULL_FACE);d.enable(d.BLEND);d.depthMask(!0);d.bindBuffer(d.ARRAY_BUFFER,w.vertexBuffer);d.vertexAttribPointer(c.position,2,d.FLOAT,!1,16,0);d.vertexAttribPointer(c.uv,2,d.FLOAT,!1,16,8);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,w.elementBuffer);d.uniformMatrix4fv(h.projectionMatrix,!1,Na);d.activeTexture(d.TEXTURE0);d.uniform1i(h.map,0);c=0;
-for(e=a.__webglSprites.length;c<e;c++)if(f=a.__webglSprites[c],f.visible&&f.opacity!==0)f.useScreenCoordinates?f.z=-f.position.z:(f._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,f.matrixWorld,f._modelViewMatrixArray),f.z=-f._modelViewMatrix.n34);a.__webglSprites.sort(F);c=0;for(e=a.__webglSprites.length;c<e;c++)f=a.__webglSprites[c],f.visible&&f.opacity!==0&&f.map&&f.map.image&&f.map.image.width&&(f.useScreenCoordinates?(d.uniform1i(h.useScreenCoordinates,1),d.uniform3f(h.screenPosition,(f.position.x-
-l)/l,(m-f.position.y)/m,Math.max(0,Math.min(1,f.position.z)))):(d.uniform1i(h.useScreenCoordinates,0),d.uniform1i(h.affectedByDistance,f.affectedByDistance?1:0),d.uniformMatrix4fv(h.modelViewMatrix,!1,f._modelViewMatrixArray)),o=f.map.image.width/(f.scaleByViewport?Ia:1),k[0]=o*i*f.scale.x,k[1]=o*f.scale.y,d.uniform2f(h.uvScale,f.uvScale.x,f.uvScale.y),d.uniform2f(h.uvOffset,f.uvOffset.x,f.uvOffset.y),d.uniform2f(h.alignment,f.alignment.x,f.alignment.y),d.uniform1f(h.opacity,f.opacity),d.uniform3f(h.color,
-f.color.r,f.color.g,f.color.b),d.uniform1f(h.rotation,f.rotation),d.uniform2fv(h.scale,k),f.mergeWith3D&&!q?(d.enable(d.DEPTH_TEST),q=!0):!f.mergeWith3D&&q&&(d.disable(d.DEPTH_TEST),q=!1),K(f.blending),X(f.map,0),d.drawElements(d.TRIANGLES,6,d.UNSIGNED_SHORT,0));d.enable(d.CULL_FACE);d.enable(d.DEPTH_TEST);d.depthMask(ua)}function O(a,b,d){a._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,a.matrixWorld,a._modelViewMatrixArray);d&&THREE.Matrix4.makeInvert3x3(a._modelViewMatrix).transposeIntoArray(a._normalMatrixArray)}
-function la(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function na(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function R(a,b){for(var d=a.length-1;d>=0;d--)a[d].object===b&&a.splice(d,1)}function da(a,b,d){a.push({buffer:b,object:d,opaque:null,transparent:null})}function K(a){if(a!==P){switch(a){case THREE.AdditiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE);break;case THREE.SubtractiveBlending:d.blendEquation(d.FUNC_ADD);
-d.blendFunc(d.ZERO,d.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.SRC_COLOR);break;default:d.blendEquationSeparate(d.FUNC_ADD,d.FUNC_ADD),d.blendFuncSeparate(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA,d.ONE,d.ONE_MINUS_SRC_ALPHA)}P=a}}function U(a,b,c){(c.width&c.width-1)===0&&(c.height&c.height-1)===0?(d.texParameteri(a,d.TEXTURE_WRAP_S,ka(b.wrapS)),d.texParameteri(a,d.TEXTURE_WRAP_T,ka(b.wrapT)),d.texParameteri(a,d.TEXTURE_MAG_FILTER,ka(b.magFilter)),
-d.texParameteri(a,d.TEXTURE_MIN_FILTER,ka(b.minFilter)),d.generateMipmap(a)):(d.texParameteri(a,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_MAG_FILTER,xa(b.magFilter)),d.texParameteri(a,d.TEXTURE_MIN_FILTER,xa(b.minFilter)))}function X(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=d.createTexture(),N.info.memory.textures++;d.activeTexture(d.TEXTURE0+b);d.bindTexture(d.TEXTURE_2D,a.__webglTexture);a instanceof
-THREE.DataTexture?d.texImage2D(d.TEXTURE_2D,0,ka(a.format),a.image.width,a.image.height,0,ka(a.format),d.UNSIGNED_BYTE,a.image.data):d.texImage2D(d.TEXTURE_2D,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,a.image);U(d.TEXTURE_2D,a,a.image);a.needsUpdate=!1}else d.activeTexture(d.TEXTURE0+b),d.bindTexture(d.TEXTURE_2D,a.__webglTexture)}function J(a,b){d.bindRenderbuffer(d.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_COMPONENT16,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER,
-d.DEPTH_ATTACHMENT,d.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_STENCIL,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER,d.DEPTH_STENCIL_ATTACHMENT,d.RENDERBUFFER,a)):d.renderbufferStorage(d.RENDERBUFFER,d.RGBA4,b.width,b.height)}function Y(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=d.createTexture();
-if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture);U(d.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=d.createFramebuffer();a.__webglRenderbuffer[c]=d.createRenderbuffer();d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,ka(a.format),a.width,a.height,0,ka(a.format),ka(a.type),null);var e=a,f=d.TEXTURE_CUBE_MAP_POSITIVE_X+c;d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer[c]);d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,
-f,e.__webglTexture,0);J(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=d.createFramebuffer(),a.__webglRenderbuffer=d.createRenderbuffer(),d.bindTexture(d.TEXTURE_2D,a.__webglTexture),U(d.TEXTURE_2D,a,a),d.texImage2D(d.TEXTURE_2D,0,ka(a.format),a.width,a.height,0,ka(a.format),ka(a.type),null),c=d.TEXTURE_2D,d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer),d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,c,a.__webglTexture,0),d.bindRenderbuffer(d.RENDERBUFFER,a.__webglRenderbuffer),
-J(a.__webglRenderbuffer,a);b?d.bindTexture(d.TEXTURE_CUBE_MAP,null):d.bindTexture(d.TEXTURE_2D,null);d.bindRenderbuffer(d.RENDERBUFFER,null);d.bindFramebuffer(d.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,f=e=0):(b=null,c=Ma,a=Ia,e=Aa,f=ya);b!==ja&&(d.bindFramebuffer(d.FRAMEBUFFER,b),d.viewport(e,f,c,a),ja=b)}function aa(a){a instanceof THREE.WebGLRenderTargetCube?(d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture),d.generateMipmap(d.TEXTURE_CUBE_MAP),
-d.bindTexture(d.TEXTURE_CUBE_MAP,null)):(d.bindTexture(d.TEXTURE_2D,a.__webglTexture),d.generateMipmap(d.TEXTURE_2D),d.bindTexture(d.TEXTURE_2D,null))}function ma(a,b){var c;a==="fragment"?c=d.createShader(d.FRAGMENT_SHADER):a==="vertex"&&(c=d.createShader(d.VERTEX_SHADER));d.shaderSource(c,b);d.compileShader(c);if(!d.getShaderParameter(c,d.COMPILE_STATUS))return console.error(d.getShaderInfoLog(c)),console.error(b),null;return c}function xa(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return d.NEAREST;
-default:return d.LINEAR}}function ka(a){switch(a){case THREE.RepeatWrapping:return d.REPEAT;case THREE.ClampToEdgeWrapping:return d.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return d.MIRRORED_REPEAT;case THREE.NearestFilter:return d.NEAREST;case THREE.NearestMipMapNearestFilter:return d.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return d.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return d.LINEAR;case THREE.LinearMipMapNearestFilter:return d.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return d.LINEAR_MIPMAP_LINEAR;
-case THREE.ByteType:return d.BYTE;case THREE.UnsignedByteType:return d.UNSIGNED_BYTE;case THREE.ShortType:return d.SHORT;case THREE.UnsignedShortType:return d.UNSIGNED_SHORT;case THREE.IntType:return d.INT;case THREE.UnsignedShortType:return d.UNSIGNED_INT;case THREE.FloatType:return d.FLOAT;case THREE.AlphaFormat:return d.ALPHA;case THREE.RGBFormat:return d.RGB;case THREE.RGBAFormat:return d.RGBA;case THREE.LuminanceFormat:return d.LUMINANCE;case THREE.LuminanceAlphaFormat:return d.LUMINANCE_ALPHA}return 0}
-var N=this,d,Ea=[],Qa=null,ja=null,sa=-1,H=null,qa=0,ga=null,ta=null,P=null,oa=null,ua=null,Fa=null,Ja=null,Ga=null,Aa=0,ya=0,Ma=0,Ia=0,va=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Ba=new THREE.Matrix4,Na=new Float32Array(16),Oa=new Float32Array(16),Ha=new THREE.Vector4,Sa={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},a=a||{},Ca=a.canvas!==void 0?a.canvas:document.createElement("canvas"),
+THREE.WebGLRenderer=function(a){function b(a,b){var c=a.vertices.length,e=b.material;if(e.attributes){if(a.__webglCustomAttributesList===void 0)a.__webglCustomAttributesList=[];for(var f in e.attributes){var h=e.attributes[f];if(!h.__webglInitialized||h.createUniqueBuffers){h.__webglInitialized=!0;var i=1;h.type==="v2"?i=2:h.type==="v3"?i=3:h.type==="v4"?i=4:h.type==="c"&&(i=3);h.size=i;h.array=new Float32Array(c*i);h.buffer=d.createBuffer();h.buffer.belongsToAttribute=f;h.needsUpdate=!0}a.__webglCustomAttributesList.push(h)}}}
+function c(a,b){if(a.material&&!(a.material instanceof THREE.MeshFaceMaterial))return a.material;else if(b.materialIndex>=0)return a.geometry.materials[b.materialIndex]}function e(a,b,c){var e,f,h,i=a.vertices,o=i.length,s=a.colors,k=s.length,m=a.__vertexArray,q=a.__colorArray,l=a.__sortArray,x=a.__dirtyVertices,r=a.__dirtyColors,n=a.__webglCustomAttributesList;if(c.sortParticles){Ba.multiplySelf(c.matrixWorld);for(e=0;e<o;e++)f=i[e].position,Ha.copy(f),Ba.multiplyVector3(Ha),l[e]=[Ha.z,e];l.sort(function(a,
+b){return b[0]-a[0]});for(e=0;e<o;e++)f=i[l[e][1]].position,h=e*3,m[h]=f.x,m[h+1]=f.y,m[h+2]=f.z;for(e=0;e<k;e++)h=e*3,color=s[l[e][1]],q[h]=color.r,q[h+1]=color.g,q[h+2]=color.b;if(n){s=0;for(k=n.length;s<k;s++)if(o=n[s],o.boundTo===void 0||o.boundTo==="vertices"){h=0;f=o.value.length;for(e=0;e<f;e++)index=l[e][1],o.size===1?o.array[h]=o.value[index]:(i=o.value[index],o.size===2?(o.array[h]=i.x,o.array[h+1]=i.y):o.size===3?o.type==="c"?(o.array[h]=i.r,o.array[h+1]=i.g,o.array[h+2]=i.b):(o.array[h]=
+i.x,o.array[h+1]=i.y,o.array[h+2]=i.z):(o.array[h]=i.x,o.array[h+1]=i.y,o.array[h+2]=i.z,o.array[h+3]=i.w)),h+=o.size}}}else{if(x)for(e=0;e<o;e++)f=i[e].position,h=e*3,m[h]=f.x,m[h+1]=f.y,m[h+2]=f.z;if(r)for(e=0;e<k;e++)color=s[e],h=e*3,q[h]=color.r,q[h+1]=color.g,q[h+2]=color.b;if(n){s=0;for(k=n.length;s<k;s++)if(o=n[s],o.needsUpdate&&(o.boundTo===void 0||o.boundTo==="vertices")){f=o.value.length;for(e=h=0;e<f;e++)offset_custom=o.offset,o.size===1?o.array[h]=o.value[e]:(i=o.value[e],o.size===2?(o.array[h]=
+i.x,o.array[h+1]=i.y):o.size===3?o.type==="c"?(o.array[h]=i.r,o.array[h+1]=i.g,o.array[h+2]=i.b):(o.array[h]=i.x,o.array[h+1]=i.y,o.array[h+2]=i.z):(o.array[h]=i.x,o.array[h+1]=i.y,o.array[h+2]=i.z,o.array[h+3]=i.w)),h+=o.size}}}if(x||c.sortParticles)d.bindBuffer(d.ARRAY_BUFFER,a.__webglVertexBuffer),d.bufferData(d.ARRAY_BUFFER,m,b);if(r||c.sortParticles)d.bindBuffer(d.ARRAY_BUFFER,a.__webglColorBuffer),d.bufferData(d.ARRAY_BUFFER,q,b);if(n){s=0;for(k=n.length;s<k;s++)if(o=n[s],o.needsUpdate||c.sortParticles)d.bindBuffer(d.ARRAY_BUFFER,
+o.buffer),d.bufferData(d.ARRAY_BUFFER,o.array,b)}}function h(a,b,c,e,h){e.program||N.initMaterial(e,b,c,h);if(e.morphTargets&&!h.__webglMorphTargetInfluences){h.__webglMorphTargetInfluences=new Float32Array(N.maxMorphTargets);for(var f=0,i=N.maxMorphTargets;f<i;f++)h.__webglMorphTargetInfluences[f]=0}var o=!1,f=e.program,i=f.uniforms,s=e.uniforms;f!==Qa&&(d.useProgram(f),Qa=f,o=!0);if(e.id!==sa)sa=e.id,o=!0;if(o){d.uniformMatrix4fv(i.projectionMatrix,!1,Na);if(c&&e.fog)if(s.fogColor.value=c.color,
+c instanceof THREE.Fog)s.fogNear.value=c.near,s.fogFar.value=c.far;else if(c instanceof THREE.FogExp2)s.fogDensity.value=c.density;if(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e.lights){for(var k,m,q=0,l=0,x=0,r,n,t,u=Sa,B=u.directional.colors,w=u.directional.positions,v=u.point.colors,C=u.point.positions,D=u.point.distances,F=0,E=0,c=k=t=0,o=b.length;c<o;c++)if(k=b[c],m=k.color,r=k.position,n=k.intensity,t=k.distance,k instanceof THREE.AmbientLight)N.gammaInput?
+(q+=m.r*m.r,l+=m.g*m.g,x+=m.b*m.b):(q+=m.r,l+=m.g,x+=m.b);else if(k instanceof THREE.DirectionalLight)t=F*3,N.gammaInput?(B[t]=m.r*m.r*n*n,B[t+1]=m.g*m.g*n*n,B[t+2]=m.b*m.b*n*n):(B[t]=m.r*n,B[t+1]=m.g*n,B[t+2]=m.b*n),w[t]=r.x,w[t+1]=r.y,w[t+2]=r.z,F+=1;else if(k instanceof THREE.SpotLight)t=F*3,N.gammaInput?(B[t]=m.r*m.r*n*n,B[t+1]=m.g*m.g*n*n,B[t+2]=m.b*m.b*n*n):(B[t]=m.r*n,B[t+1]=m.g*n,B[t+2]=m.b*n),m=1/r.length(),w[t]=r.x*m,w[t+1]=r.y*m,w[t+2]=r.z*m,F+=1;else if(k instanceof THREE.PointLight)k=
+E*3,N.gammaInput?(v[k]=m.r*m.r*n*n,v[k+1]=m.g*m.g*n*n,v[k+2]=m.b*m.b*n*n):(v[k]=m.r*n,v[k+1]=m.g*n,v[k+2]=m.b*n),C[k]=r.x,C[k+1]=r.y,C[k+2]=r.z,D[E]=t,E+=1;c=F*3;for(o=B.length;c<o;c++)B[c]=0;c=E*3;for(o=v.length;c<o;c++)v[c]=0;u.point.length=E;u.directional.length=F;u.ambient[0]=q;u.ambient[1]=l;u.ambient[2]=x;b=Sa;s.enableLighting.value=b.directional.length+b.point.length;s.ambientLightColor.value=b.ambient;s.directionalLightColor.value=b.directional.colors;s.directionalLightDirection.value=b.directional.positions;
+s.pointLightColor.value=b.point.colors;s.pointLightPosition.value=b.point.positions;s.pointLightDistance.value=b.point.distances}if(e instanceof THREE.MeshBasicMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.MeshPhongMaterial)s.opacity.value=e.opacity,N.gammaInput?s.diffuse.value.copyGammaToLinear(e.color):s.diffuse.value=e.color,(s.map.texture=e.map)&&s.offsetRepeat.value.set(e.map.offset.x,e.map.offset.y,e.map.repeat.x,e.map.repeat.y),s.lightMap.texture=e.lightMap,s.envMap.texture=
+e.envMap,s.flipEnvMap.value=e.envMap instanceof THREE.WebGLRenderTargetCube?1:-1,s.reflectivity.value=e.reflectivity,s.refractionRatio.value=e.refractionRatio,s.combine.value=e.combine,s.useRefract.value=e.envMap&&e.envMap.mapping instanceof THREE.CubeRefractionMapping;if(e instanceof THREE.LineBasicMaterial)s.diffuse.value=e.color,s.opacity.value=e.opacity;else if(e instanceof THREE.ParticleBasicMaterial)s.psColor.value=e.color,s.opacity.value=e.opacity,s.size.value=e.size,s.scale.value=Ca.height/
+2,s.map.texture=e.map;else if(e instanceof THREE.MeshPhongMaterial)s.shininess.value=e.shininess,N.gammaInput?(s.ambient.value.copyGammaToLinear(e.ambient),s.specular.value.copyGammaToLinear(e.specular)):(s.ambient.value=e.ambient,s.specular.value=e.specular);else if(e instanceof THREE.MeshLambertMaterial)N.gammaInput?s.ambient.value.copyGammaToLinear(e.ambient):s.ambient.value=e.ambient;else if(e instanceof THREE.MeshDepthMaterial)s.mNear.value=a.near,s.mFar.value=a.far,s.opacity.value=e.opacity;
+else if(e instanceof THREE.MeshNormalMaterial)s.opacity.value=e.opacity;if(h.receiveShadow&&!e._shadowPass&&s.shadowMatrix){for(b=0;b<La.length;b++)s.shadowMatrix.value[b]=La[b],s.shadowMap.texture[b]=N.shadowMap[b];s.shadowDarkness.value=N.shadowMapDarkness;s.shadowBias.value=N.shadowMapBias}b=e.uniformsList;s=0;for(c=b.length;s<c;s++)if(l=f.uniforms[b[s][1]])if(q=b[s][0],x=q.type,o=q.value,x==="i")d.uniform1i(l,o);else if(x==="f")d.uniform1f(l,o);else if(x==="v2")d.uniform2f(l,o.x,o.y);else if(x===
+"v3")d.uniform3f(l,o.x,o.y,o.z);else if(x==="v4")d.uniform4f(l,o.x,o.y,o.z,o.w);else if(x==="c")d.uniform3f(l,o.r,o.g,o.b);else if(x==="fv1")d.uniform1fv(l,o);else if(x==="fv")d.uniform3fv(l,o);else if(x==="v3v"){if(!q._array)q._array=new Float32Array(3*o.length);x=0;for(r=o.length;x<r;x++)u=x*3,q._array[u]=o[x].x,q._array[u+1]=o[x].y,q._array[u+2]=o[x].z;d.uniform3fv(l,q._array)}else if(x==="m4"){if(!q._array)q._array=new Float32Array(16);o.flattenToArray(q._array);d.uniformMatrix4fv(l,!1,q._array)}else if(x===
+"m4v"){if(!q._array)q._array=new Float32Array(16*o.length);x=0;for(r=o.length;x<r;x++)o[x].flattenToArrayOffset(q._array,x*16);d.uniformMatrix4fv(l,!1,q._array)}else if(x==="t"){if(d.uniform1i(l,o),l=q.texture)if(l.image instanceof Array&&l.image.length===6){if(q=l,q.image.length===6)if(q.needsUpdate){if(!q.image.__webglTextureCube)q.image.__webglTextureCube=d.createTexture();d.activeTexture(d.TEXTURE0+o);d.bindTexture(d.TEXTURE_CUBE_MAP,q.image.__webglTextureCube);for(o=0;o<6;o++)d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+
+o,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,q.image[o]);U(d.TEXTURE_CUBE_MAP,q,q.image[0]);q.needsUpdate=!1}else d.activeTexture(d.TEXTURE0+o),d.bindTexture(d.TEXTURE_CUBE_MAP,q.image.__webglTextureCube)}else l instanceof THREE.WebGLRenderTargetCube?(q=l,d.activeTexture(d.TEXTURE0+o),d.bindTexture(d.TEXTURE_CUBE_MAP,q.__webglTexture)):X(l,o)}else if(x==="tv"){if(!q._array){q._array=[];x=0;for(r=q.texture.length;x<r;x++)q._array[x]=o+x}d.uniform1iv(l,q._array);x=0;for(r=q.texture.length;x<r;x++)(l=q.texture[x])&&
+X(l,q._array[x])}(e instanceof THREE.ShaderMaterial||e instanceof THREE.MeshPhongMaterial||e.envMap)&&i.cameraPosition!==null&&d.uniform3f(i.cameraPosition,a.position.x,a.position.y,a.position.z);(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.ShaderMaterial||e.skinning)&&i.viewMatrix!==null&&d.uniformMatrix4fv(i.viewMatrix,!1,Oa);e.skinning&&(d.uniformMatrix4fv(i.cameraInverseMatrix,!1,Oa),d.uniformMatrix4fv(i.boneGlobalMatrices,!1,h.boneMatrices))}d.uniformMatrix4fv(i.modelViewMatrix,
+!1,h._modelViewMatrixArray);i.normalMatrix&&d.uniformMatrix3fv(i.normalMatrix,!1,h._normalMatrixArray);(e instanceof THREE.ShaderMaterial||e.envMap||e.skinning||h.receiveShadow)&&i.objectMatrix!==null&&d.uniformMatrix4fv(i.objectMatrix,!1,h._objectMatrixArray);return f}function f(a,b,c,e,f,i){if(e.opacity!==0){var k,o,c=h(a,b,c,e,i),a=c.attributes,b=!1,c=f.id*16777215+c.id*2+(e.wireframe?1:0);c!==H&&(H=c,b=!0);if(!e.morphTargets&&a.position>=0)b&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglVertexBuffer),
+d.vertexAttribPointer(a.position,3,d.FLOAT,!1,0,0));else if(i.morphTargetBase){c=e.program.attributes;i.morphTargetBase!==-1?(d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[i.morphTargetBase]),d.vertexAttribPointer(c.position,3,d.FLOAT,!1,0,0)):c.position>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglVertexBuffer),d.vertexAttribPointer(c.position,3,d.FLOAT,!1,0,0));if(i.morphTargetForcedOrder.length){k=0;var s=i.morphTargetForcedOrder;for(o=i.morphTargetInfluences;k<e.numSupportedMorphTargets&&
+k<s.length;)d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[s[k]]),d.vertexAttribPointer(c["morphTarget"+k],3,d.FLOAT,!1,0,0),i.__webglMorphTargetInfluences[k]=o[s[k]],k++}else{var s=[],l=-1,m=0;o=i.morphTargetInfluences;var q,n=o.length;k=0;for(i.morphTargetBase!==-1&&(s[i.morphTargetBase]=!0);k<e.numSupportedMorphTargets;){for(q=0;q<n;q++)!s[q]&&o[q]>l&&(m=q,l=o[m]);d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[m]);d.vertexAttribPointer(c["morphTarget"+k],3,d.FLOAT,!1,0,0);i.__webglMorphTargetInfluences[k]=
+l;s[m]=1;l=-1;k++}}e.program.uniforms.morphTargetInfluences!==null&&d.uniform1fv(e.program.uniforms.morphTargetInfluences,i.__webglMorphTargetInfluences)}if(b){if(f.__webglCustomAttributesList){k=0;for(o=f.__webglCustomAttributesList.length;k<o;k++)c=f.__webglCustomAttributesList[k],a[c.buffer.belongsToAttribute]>=0&&(d.bindBuffer(d.ARRAY_BUFFER,c.buffer),d.vertexAttribPointer(a[c.buffer.belongsToAttribute],c.size,d.FLOAT,!1,0,0))}a.color>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglColorBuffer),d.vertexAttribPointer(a.color,
+3,d.FLOAT,!1,0,0));a.normal>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglNormalBuffer),d.vertexAttribPointer(a.normal,3,d.FLOAT,!1,0,0));a.tangent>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglTangentBuffer),d.vertexAttribPointer(a.tangent,4,d.FLOAT,!1,0,0));a.uv>=0&&(f.__webglUVBuffer?(d.bindBuffer(d.ARRAY_BUFFER,f.__webglUVBuffer),d.vertexAttribPointer(a.uv,2,d.FLOAT,!1,0,0),d.enableVertexAttribArray(a.uv)):d.disableVertexAttribArray(a.uv));a.uv2>=0&&(f.__webglUV2Buffer?(d.bindBuffer(d.ARRAY_BUFFER,f.__webglUV2Buffer),
+d.vertexAttribPointer(a.uv2,2,d.FLOAT,!1,0,0),d.enableVertexAttribArray(a.uv2)):d.disableVertexAttribArray(a.uv2));e.skinning&&a.skinVertexA>=0&&a.skinVertexB>=0&&a.skinIndex>=0&&a.skinWeight>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinVertexABuffer),d.vertexAttribPointer(a.skinVertexA,4,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinVertexBBuffer),d.vertexAttribPointer(a.skinVertexB,4,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinIndicesBuffer),d.vertexAttribPointer(a.skinIndex,
+4,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinWeightsBuffer),d.vertexAttribPointer(a.skinWeight,4,d.FLOAT,!1,0,0))}i instanceof THREE.Mesh?(e.wireframe?(d.lineWidth(e.wireframeLinewidth),b&&d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,f.__webglLineBuffer),d.drawElements(d.LINES,f.__webglLineCount,d.UNSIGNED_SHORT,0)):(b&&d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),d.drawElements(d.TRIANGLES,f.__webglFaceCount,d.UNSIGNED_SHORT,0)),N.info.render.calls++,N.info.render.vertices+=f.__webglFaceCount,
+N.info.render.faces+=f.__webglFaceCount/3):i instanceof THREE.Line?(i=i.type===THREE.LineStrip?d.LINE_STRIP:d.LINES,d.lineWidth(e.linewidth),d.drawArrays(i,0,f.__webglLineCount),N.info.render.calls++):i instanceof THREE.ParticleSystem?(d.drawArrays(d.POINTS,0,f.__webglParticleCount),N.info.render.calls++):i instanceof THREE.Ribbon&&(d.drawArrays(d.TRIANGLE_STRIP,0,f.__webglVertexCount),N.info.render.calls++)}}function i(a,b,c){if(!a.__webglVertexBuffer)a.__webglVertexBuffer=d.createBuffer();if(!a.__webglNormalBuffer)a.__webglNormalBuffer=
+d.createBuffer();a.hasPos&&(d.bindBuffer(d.ARRAY_BUFFER,a.__webglVertexBuffer),d.bufferData(d.ARRAY_BUFFER,a.positionArray,d.DYNAMIC_DRAW),d.enableVertexAttribArray(b.attributes.position),d.vertexAttribPointer(b.attributes.position,3,d.FLOAT,!1,0,0));if(a.hasNormal){d.bindBuffer(d.ARRAY_BUFFER,a.__webglNormalBuffer);if(c===THREE.FlatShading){var e,f,h,i,o,k,l,m,q,n,x=a.count*3;for(n=0;n<x;n+=9)c=a.normalArray,e=c[n],f=c[n+1],h=c[n+2],i=c[n+3],k=c[n+4],m=c[n+5],o=c[n+6],l=c[n+7],q=c[n+8],e=(e+i+o)/
+3,f=(f+k+l)/3,h=(h+m+q)/3,c[n]=e,c[n+1]=f,c[n+2]=h,c[n+3]=e,c[n+4]=f,c[n+5]=h,c[n+6]=e,c[n+7]=f,c[n+8]=h}d.bufferData(d.ARRAY_BUFFER,a.normalArray,d.DYNAMIC_DRAW);d.enableVertexAttribArray(b.attributes.normal);d.vertexAttribPointer(b.attributes.normal,3,d.FLOAT,!1,0,0)}d.drawArrays(d.TRIANGLES,0,a.count);a.count=0}function k(a){if(ga!==a.doubleSided)a.doubleSided?d.disable(d.CULL_FACE):d.enable(d.CULL_FACE),ga=a.doubleSided;if(ta!==a.flipSided)a.flipSided?d.frontFace(d.CW):d.frontFace(d.CCW),ta=a.flipSided}
+function r(a){oa!==a&&(a?d.enable(d.DEPTH_TEST):d.disable(d.DEPTH_TEST),oa=a)}function n(a){ua!==a&&(d.depthMask(a),ua=a)}function l(a,b,c){Fa!==a&&(a?d.enable(d.POLYGON_OFFSET_FILL):d.disable(d.POLYGON_OFFSET_FILL),Fa=a);if(a&&(Ja!==b||Ga!==c))d.polygonOffset(b,c),Ja=b,Ga=c}function t(a){va[0].set(a.n41-a.n11,a.n42-a.n12,a.n43-a.n13,a.n44-a.n14);va[1].set(a.n41+a.n11,a.n42+a.n12,a.n43+a.n13,a.n44+a.n14);va[2].set(a.n41+a.n21,a.n42+a.n22,a.n43+a.n23,a.n44+a.n24);va[3].set(a.n41-a.n21,a.n42-a.n22,
+a.n43-a.n23,a.n44-a.n24);va[4].set(a.n41-a.n31,a.n42-a.n32,a.n43-a.n33,a.n44-a.n34);va[5].set(a.n41+a.n31,a.n42+a.n32,a.n43+a.n33,a.n44+a.n34);for(var b,a=0;a<6;a++)b=va[a],b.divideScalar(Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z))}function B(a){for(var b=a.matrixWorld,d=-a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)),c=0;c<6;c++)if(a=va[c].x*b.n14+va[c].y*b.n24+va[c].z*b.n34+va[c].w,a<=d)return!1;return!0}function C(a){var b=a.object.material;b.transparent?(a.transparent=
+b,a.opaque=null):(a.opaque=b,a.transparent=null)}function D(a){var b=a.object,d=a.buffer,c;c=b.material;if(c instanceof THREE.MeshFaceMaterial){if(d=d.materialIndex,d>=0)b=b.geometry.materials[d],b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}else if(b=c)b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}function F(a,b){return b.z-a.z}function E(a){var b,c,e,l=0,T,n,o,s,Q=a.lights;pa||(pa=new THREE.PerspectiveCamera(N.shadowCameraFov,N.shadowMapWidth/
+N.shadowMapHeight,N.shadowCameraNear,N.shadowCameraFar));b=0;for(c=Q.length;b<c;b++)if(e=Q[b],e instanceof THREE.SpotLight&&e.castShadow){sa=-1;N.shadowMap[l]||(N.shadowMap[l]=new THREE.WebGLRenderTarget(N.shadowMapWidth,N.shadowMapHeight,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}));La[l]||(La[l]=new THREE.Matrix4);T=N.shadowMap[l];n=La[l];pa.position.copy(e.position);pa.lookAt(e.target.position);pa.parent==null&&(console.warn("Camera is not on the Scene. Adding it..."),
+a.add(pa));this.autoUpdateScene&&a.updateMatrixWorld();pa.matrixWorldInverse.getInverse(pa.matrixWorld);n.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);n.multiplySelf(pa.projectionMatrix);n.multiplySelf(pa.matrixWorldInverse);pa.matrixWorldInverse.flattenToArray(Oa);pa.projectionMatrix.flattenToArray(Na);Ba.multiply(pa.projectionMatrix,pa.matrixWorldInverse);t(Ba);Y(T);d.clearColor(1,1,1,1);N.clear();d.clearColor(wa.r,wa.g,wa.b,Da);n=a.__webglObjects.length;e=a.__webglObjectsImmediate.length;for(T=
+0;T<n;T++)o=a.__webglObjects[T],s=o.object,s.visible&&s.castShadow?!(s instanceof THREE.Mesh)||!s.frustumCulled||B(s)?(s.matrixWorld.flattenToArray(s._objectMatrixArray),O(s,pa,!1),o.render=!0):o.render=!1:o.render=!1;r(!0);K(THREE.NormalBlending);for(T=0;T<n;T++)if(o=a.__webglObjects[T],o.render)s=o.object,buffer=o.buffer,k(s),o=s.customDepthMaterial?s.customDepthMaterial:s.geometry.morphTargets.length?Ta:Pa,f(pa,Q,null,o,buffer,s);for(T=0;T<e;T++)o=a.__webglObjectsImmediate[T],s=o.object,s.visible&&
+s.castShadow&&(s.matrixAutoUpdate&&s.matrixWorld.flattenToArray(s._objectMatrixArray),H=-1,O(s,pa,!1),k(s),program=h(pa,Q,null,Pa,s),s.immediateRenderCallback?s.immediateRenderCallback(program,d,va):s.render(function(a){i(a,program,Pa.shading)}));l++}}function ra(a,b){var c,e,f;c=w.attributes;var h=w.uniforms,i=Ia/Ma,o,k=[],l=Ma*0.5,m=Ia*0.5,q=!0;d.useProgram(w.program);Qa=w.program;H=oa=P=-1;Ua||(d.enableVertexAttribArray(w.attributes.position),d.enableVertexAttribArray(w.attributes.uv),Ua=!0);d.disable(d.CULL_FACE);
+d.enable(d.BLEND);d.depthMask(!0);d.bindBuffer(d.ARRAY_BUFFER,w.vertexBuffer);d.vertexAttribPointer(c.position,2,d.FLOAT,!1,16,0);d.vertexAttribPointer(c.uv,2,d.FLOAT,!1,16,8);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,w.elementBuffer);d.uniformMatrix4fv(h.projectionMatrix,!1,Na);d.activeTexture(d.TEXTURE0);d.uniform1i(h.map,0);c=0;for(e=a.__webglSprites.length;c<e;c++)if(f=a.__webglSprites[c],f.visible&&f.opacity!==0)f.useScreenCoordinates?f.z=-f.position.z:(f._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,
+f.matrixWorld,f._modelViewMatrixArray),f.z=-f._modelViewMatrix.n34);a.__webglSprites.sort(F);c=0;for(e=a.__webglSprites.length;c<e;c++)f=a.__webglSprites[c],f.visible&&f.opacity!==0&&f.map&&f.map.image&&f.map.image.width&&(f.useScreenCoordinates?(d.uniform1i(h.useScreenCoordinates,1),d.uniform3f(h.screenPosition,(f.position.x-l)/l,(m-f.position.y)/m,Math.max(0,Math.min(1,f.position.z)))):(d.uniform1i(h.useScreenCoordinates,0),d.uniform1i(h.affectedByDistance,f.affectedByDistance?1:0),d.uniformMatrix4fv(h.modelViewMatrix,
+!1,f._modelViewMatrixArray)),o=f.map.image.width/(f.scaleByViewport?Ia:1),k[0]=o*i*f.scale.x,k[1]=o*f.scale.y,d.uniform2f(h.uvScale,f.uvScale.x,f.uvScale.y),d.uniform2f(h.uvOffset,f.uvOffset.x,f.uvOffset.y),d.uniform2f(h.alignment,f.alignment.x,f.alignment.y),d.uniform1f(h.opacity,f.opacity),d.uniform3f(h.color,f.color.r,f.color.g,f.color.b),d.uniform1f(h.rotation,f.rotation),d.uniform2fv(h.scale,k),f.mergeWith3D&&!q?(d.enable(d.DEPTH_TEST),q=!0):!f.mergeWith3D&&q&&(d.disable(d.DEPTH_TEST),q=!1),
+K(f.blending),X(f.map,0),d.drawElements(d.TRIANGLES,6,d.UNSIGNED_SHORT,0));d.enable(d.CULL_FACE);d.enable(d.DEPTH_TEST);d.depthMask(ua)}function O(a,b,d){a._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,a.matrixWorld,a._modelViewMatrixArray);d&&THREE.Matrix4.makeInvert3x3(a._modelViewMatrix).transposeIntoArray(a._normalMatrixArray)}function la(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function na(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}
+function R(a,b){for(var d=a.length-1;d>=0;d--)a[d].object===b&&a.splice(d,1)}function da(a,b,d){a.push({buffer:b,object:d,opaque:null,transparent:null})}function K(a){if(a!==P){switch(a){case THREE.AdditiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE);break;case THREE.SubtractiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.SRC_COLOR);break;default:d.blendEquationSeparate(d.FUNC_ADD,
+d.FUNC_ADD),d.blendFuncSeparate(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA,d.ONE,d.ONE_MINUS_SRC_ALPHA)}P=a}}function U(a,b,c){(c.width&c.width-1)===0&&(c.height&c.height-1)===0?(d.texParameteri(a,d.TEXTURE_WRAP_S,ka(b.wrapS)),d.texParameteri(a,d.TEXTURE_WRAP_T,ka(b.wrapT)),d.texParameteri(a,d.TEXTURE_MAG_FILTER,ka(b.magFilter)),d.texParameteri(a,d.TEXTURE_MIN_FILTER,ka(b.minFilter)),d.generateMipmap(a)):(d.texParameteri(a,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE),
+d.texParameteri(a,d.TEXTURE_MAG_FILTER,xa(b.magFilter)),d.texParameteri(a,d.TEXTURE_MIN_FILTER,xa(b.minFilter)))}function X(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=d.createTexture(),N.info.memory.textures++;d.activeTexture(d.TEXTURE0+b);d.bindTexture(d.TEXTURE_2D,a.__webglTexture);a instanceof THREE.DataTexture?d.texImage2D(d.TEXTURE_2D,0,ka(a.format),a.image.width,a.image.height,0,ka(a.format),d.UNSIGNED_BYTE,a.image.data):d.texImage2D(d.TEXTURE_2D,0,d.RGBA,d.RGBA,
+d.UNSIGNED_BYTE,a.image);U(d.TEXTURE_2D,a,a.image);a.needsUpdate=!1}else d.activeTexture(d.TEXTURE0+b),d.bindTexture(d.TEXTURE_2D,a.__webglTexture)}function J(a,b){d.bindRenderbuffer(d.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_COMPONENT16,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER,d.DEPTH_ATTACHMENT,d.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_STENCIL,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER,
+d.DEPTH_STENCIL_ATTACHMENT,d.RENDERBUFFER,a)):d.renderbufferStorage(d.RENDERBUFFER,d.RGBA4,b.width,b.height)}function Y(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=d.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture);U(d.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=
+d.createFramebuffer();a.__webglRenderbuffer[c]=d.createRenderbuffer();d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,ka(a.format),a.width,a.height,0,ka(a.format),ka(a.type),null);var e=a,f=d.TEXTURE_CUBE_MAP_POSITIVE_X+c;d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer[c]);d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,f,e.__webglTexture,0);J(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=d.createFramebuffer(),a.__webglRenderbuffer=d.createRenderbuffer(),d.bindTexture(d.TEXTURE_2D,
+a.__webglTexture),U(d.TEXTURE_2D,a,a),d.texImage2D(d.TEXTURE_2D,0,ka(a.format),a.width,a.height,0,ka(a.format),ka(a.type),null),c=d.TEXTURE_2D,d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer),d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,c,a.__webglTexture,0),d.bindRenderbuffer(d.RENDERBUFFER,a.__webglRenderbuffer),J(a.__webglRenderbuffer,a);b?d.bindTexture(d.TEXTURE_CUBE_MAP,null):d.bindTexture(d.TEXTURE_2D,null);d.bindRenderbuffer(d.RENDERBUFFER,null);d.bindFramebuffer(d.FRAMEBUFFER,
+null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,f=e=0):(b=null,c=Ma,a=Ia,e=Aa,f=ya);b!==ja&&(d.bindFramebuffer(d.FRAMEBUFFER,b),d.viewport(e,f,c,a),ja=b)}function aa(a){a instanceof THREE.WebGLRenderTargetCube?(d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture),d.generateMipmap(d.TEXTURE_CUBE_MAP),d.bindTexture(d.TEXTURE_CUBE_MAP,null)):(d.bindTexture(d.TEXTURE_2D,a.__webglTexture),d.generateMipmap(d.TEXTURE_2D),d.bindTexture(d.TEXTURE_2D,null))}function ma(a,
+b){var c;a==="fragment"?c=d.createShader(d.FRAGMENT_SHADER):a==="vertex"&&(c=d.createShader(d.VERTEX_SHADER));d.shaderSource(c,b);d.compileShader(c);if(!d.getShaderParameter(c,d.COMPILE_STATUS))return console.error(d.getShaderInfoLog(c)),console.error(b),null;return c}function xa(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return d.NEAREST;default:return d.LINEAR}}function ka(a){switch(a){case THREE.RepeatWrapping:return d.REPEAT;
+case THREE.ClampToEdgeWrapping:return d.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return d.MIRRORED_REPEAT;case THREE.NearestFilter:return d.NEAREST;case THREE.NearestMipMapNearestFilter:return d.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return d.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return d.LINEAR;case THREE.LinearMipMapNearestFilter:return d.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return d.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return d.BYTE;
+case THREE.UnsignedByteType:return d.UNSIGNED_BYTE;case THREE.ShortType:return d.SHORT;case THREE.UnsignedShortType:return d.UNSIGNED_SHORT;case THREE.IntType:return d.INT;case THREE.UnsignedShortType:return d.UNSIGNED_INT;case THREE.FloatType:return d.FLOAT;case THREE.AlphaFormat:return d.ALPHA;case THREE.RGBFormat:return d.RGB;case THREE.RGBAFormat:return d.RGBA;case THREE.LuminanceFormat:return d.LUMINANCE;case THREE.LuminanceAlphaFormat:return d.LUMINANCE_ALPHA}return 0}var N=this,d,Ea=[],Qa=
+null,ja=null,sa=-1,H=null,qa=0,ga=null,ta=null,P=null,oa=null,ua=null,Fa=null,Ja=null,Ga=null,Aa=0,ya=0,Ma=0,Ia=0,va=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Ba=new THREE.Matrix4,Na=new Float32Array(16),Oa=new Float32Array(16),Ha=new THREE.Vector4,Sa={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},a=a||{},Ca=a.canvas!==void 0?a.canvas:document.createElement("canvas"),
 S=a.stencil!==void 0?a.stencil:!0,Xa=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,Ya=a.antialias!==void 0?a.antialias:!1,wa=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),Da=a.clearAlpha!==void 0?a.clearAlpha:0,Ra=a.maxLights!==void 0?a.maxLights:4;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};this.maxMorphTargets=8;this.domElement=Ca;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=
 this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;var pa,La=[],a=THREE.ShaderLib.depthRGBA,Va=THREE.UniformsUtils.clone(a.uniforms),Pa=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,
 vertexShader:a.vertexShader,uniforms:Va}),Ta=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:Va,morphTargets:!0});Pa._shadowPass=!0;Ta._shadowPass=!0;try{if(!(d=Ca.getContext("experimental-webgl",{antialias:Ya,stencil:S,preserveDrawingBuffer:Xa})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+d.getParameter(d.VERSION)+" | "+d.getParameter(d.VENDOR)+" | "+d.getParameter(d.RENDERER)+" | "+d.getParameter(d.SHADING_LANGUAGE_VERSION))}catch(Za){console.error(Za)}d.clearColor(0,
@@ -298,7 +298,7 @@ A.z,j.array[p+11]=A.w,p+=12;m=0;for(q=w.length;m<q;m++)u=ea[w[m]],y=j.value[u.a]
 delete o.__skinVertexBArray,delete o.__skinIndexArray,delete o.__skinWeightArray)}i.__dirtyVertices=!1;i.__dirtyMorphTargets=!1;i.__dirtyElements=!1;i.__dirtyUvs=!1;i.__dirtyNormals=!1;i.__dirtyColors=!1;i.__dirtyTangents=!1;k.attributes&&na(k)}else if(B instanceof THREE.Ribbon){if(i.__dirtyVertices||i.__dirtyColors){k=i;B=d.DYNAMIC_DRAW;l=m=r=r=void 0;q=k.vertices;n=k.colors;t=q.length;o=n.length;x=k.__vertexArray;s=k.__colorArray;w=k.__dirtyColors;if(k.__dirtyVertices){for(r=0;r<t;r++)m=q[r].position,
 l=r*3,x[l]=m.x,x[l+1]=m.y,x[l+2]=m.z;d.bindBuffer(d.ARRAY_BUFFER,k.__webglVertexBuffer);d.bufferData(d.ARRAY_BUFFER,x,B)}if(w){for(r=0;r<o;r++)color=n[r],l=r*3,s[l]=color.r,s[l+1]=color.g,s[l+2]=color.b;d.bindBuffer(d.ARRAY_BUFFER,k.__webglColorBuffer);d.bufferData(d.ARRAY_BUFFER,s,B)}}i.__dirtyVertices=!1;i.__dirtyColors=!1}else if(B instanceof THREE.Line){k=c(B,o);s=k.attributes&&la(k);if(i.__dirtyVertices||i.__dirtyColors||s){B=i;l=d.DYNAMIC_DRAW;n=ca=q=ea=void 0;q=B.vertices;o=B.colors;t=q.length;
 s=o.length;x=B.__vertexArray;r=B.__colorArray;w=B.__dirtyColors;m=B.__webglCustomAttributesList;W=fa=Y=G=ca=ea=void 0;if(B.__dirtyVertices){for(ea=0;ea<t;ea++)ca=q[ea].position,n=ea*3,x[n]=ca.x,x[n+1]=ca.y,x[n+2]=ca.z;d.bindBuffer(d.ARRAY_BUFFER,B.__webglVertexBuffer);d.bufferData(d.ARRAY_BUFFER,x,l)}if(w){for(q=0;q<s;q++)color=o[q],n=q*3,r[n]=color.r,r[n+1]=color.g,r[n+2]=color.b;d.bindBuffer(d.ARRAY_BUFFER,B.__webglColorBuffer);d.bufferData(d.ARRAY_BUFFER,r,l)}if(m){ea=0;for(ca=m.length;ea<ca;ea++)if(W=
-m[ea],W.__original.needsUpdate&&(W.boundTo===void 0||W.boundTo==="vertices")){n=0;Y=W.value.length;for(G=0;G<Y;G++)W.size===1?W.array[n]=W.value[G]:(fa=W.value[G],W.size===2?(W.array[n]=fa.x,W.array[n+1]=fa.y):W.size===3?W.type==="c"?(W.array[n]=fa.r,W.array[n+1]=fa.g,W.array[n+2]=fa.b):(W.array[n]=fa.x,W.array[n+1]=fa.y,W.array[n+2]=fa.z):(W.array[n]=fa.x,W.array[n+1]=fa.y,W.array[n+2]=fa.z,W.array[n+3]=fa.w)),n+=W.size;d.bindBuffer(d.ARRAY_BUFFER,W.buffer);d.bufferData(d.ARRAY_BUFFER,W.array,l)}}}i.__dirtyVertices=
+m[ea],W.needsUpdate&&(W.boundTo===void 0||W.boundTo==="vertices")){n=0;Y=W.value.length;for(G=0;G<Y;G++)W.size===1?W.array[n]=W.value[G]:(fa=W.value[G],W.size===2?(W.array[n]=fa.x,W.array[n+1]=fa.y):W.size===3?W.type==="c"?(W.array[n]=fa.r,W.array[n+1]=fa.g,W.array[n+2]=fa.b):(W.array[n]=fa.x,W.array[n+1]=fa.y,W.array[n+2]=fa.z):(W.array[n]=fa.x,W.array[n+1]=fa.y,W.array[n+2]=fa.z,W.array[n+3]=fa.w)),n+=W.size;d.bindBuffer(d.ARRAY_BUFFER,W.buffer);d.bufferData(d.ARRAY_BUFFER,W.array,l)}}}i.__dirtyVertices=
 !1;i.__dirtyColors=!1;k.attributes&&na(k)}else if(B instanceof THREE.ParticleSystem)k=c(B,o),s=k.attributes&&la(k),(i.__dirtyVertices||i.__dirtyColors||B.sortParticles||s)&&e(i,d.DYNAMIC_DRAW,B),i.__dirtyVertices=!1,i.__dirtyColors=!1,k.attributes&&na(k)};this.setFaceCulling=function(a,b){a?(!b||b==="ccw"?d.frontFace(d.CCW):d.frontFace(d.CW),a==="back"?d.cullFace(d.BACK):a==="front"?d.cullFace(d.FRONT):d.cullFace(d.FRONT_AND_BACK),d.enable(d.CULL_FACE)):d.disable(d.CULL_FACE)};this.supportsVertexTextures=
 function(){return Wa}};
 THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=c.wrapS!==void 0?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=c.wrapT!==void 0?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=c.magFilter!==void 0?c.magFilter:THREE.LinearFilter;this.minFilter=c.minFilter!==void 0?c.minFilter:THREE.LinearMipMapLinearFilter;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=c.format!==void 0?c.format:THREE.RGBAFormat;this.type=c.type!==void 0?c.type:

+ 5 - 21
src/renderers/WebGLRenderer.js

@@ -674,22 +674,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			for ( var a in material.attributes ) {
 
-				// Do a shallow copy of the attribute object so different geometryGroup chunks use different
-				// attribute buffers which are correctly indexed in the setMeshBuffers function
-
-				// Not sure how to best translate this into non-indexed arrays
-				// used for particles, as there are no geometry chunks here
-				// Probably could be simplified
-
-				var originalAttribute = material.attributes[ a ];
-
-				var attribute = {};
-
-				for ( var property in originalAttribute ) {
-
-					attribute[ property ] = originalAttribute[ property ];
-
-				}
+				var attribute = material.attributes[ a ];
 
 				if( !attribute.__webglInitialized || attribute.createUniqueBuffers ) {
 
@@ -709,8 +694,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 					attribute.buffer = _gl.createBuffer();
 					attribute.buffer.belongsToAttribute = a;
 
-					originalAttribute.needsUpdate = true;
-					attribute.__original = originalAttribute;
+					attribute.needsUpdate = true;
 
 				}
 
@@ -2512,7 +2496,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 				customAttribute = customAttributes[ i ];
 
-				if ( customAttribute.__original.needsUpdate &&
+				if ( customAttribute.needsUpdate &&
 					 ( customAttribute.boundTo === undefined ||
 					   customAttribute.boundTo === "vertices" ) ) {
 
@@ -2800,7 +2784,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 					customAttribute = customAttributes[ i ];
 
-					if ( customAttribute.__original.needsUpdate &&
+					if ( customAttribute.needsUpdate &&
 					     ( customAttribute.boundTo === undefined ||
 						   customAttribute.boundTo === "vertices") ) {
 
@@ -2885,7 +2869,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 				customAttribute = customAttributes[ i ];
 
-				if ( customAttribute.__original.needsUpdate || object.sortParticles ) {
+				if ( customAttribute.needsUpdate || object.sortParticles ) {
 
 					_gl.bindBuffer( _gl.ARRAY_BUFFER, customAttribute.buffer );
 					_gl.bufferData( _gl.ARRAY_BUFFER, customAttribute.array, hint );

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است