Browse Source

Fixed so dirty=false after uploading custom attribute

Mikael Emtinger 14 years ago
parent
commit
70594cc9ce
2 changed files with 36 additions and 34 deletions
  1. 34 34
      build/Three.js
  2. 2 0
      src/renderers/WebGLRenderer.js

+ 34 - 34
build/Three.js

@@ -164,25 +164,25 @@ A=za};this.clear=function(){o.setTransform(1,0,0,-1,n,p);if(!C.isEmpty()){C.infl
 ya.length;T<ja;T++){na=ya[T];Y=na.color;if(na instanceof THREE.AmbientLight){P.r+=Y.r;P.g+=Y.g;P.b+=Y.b}else if(na instanceof THREE.DirectionalLight){G.r+=Y.r;G.g+=Y.g;G.b+=Y.b}else if(na instanceof THREE.PointLight){I.r+=Y.r;I.g+=Y.g;I.b+=Y.b}}}function Z(T,ja,na,Y){var ya,xa,ha,U,Ma=T.lights;T=0;for(ya=Ma.length;T<ya;T++){xa=Ma[T];ha=xa.color;if(xa instanceof THREE.DirectionalLight){U=na.dot(xa.position);if(!(U<=0)){U*=xa.intensity;Y.r+=ha.r*U;Y.g+=ha.g*U;Y.b+=ha.b*U}}else if(xa instanceof THREE.PointLight){U=
 na.dot(J.sub(xa.position,ja).normalize());if(!(U<=0)){U*=xa.distance==0?1:1-Math.min(ja.distanceTo(xa.position)/xa.distance,1);if(U!=0){U*=xa.intensity;Y.r+=ha.r*U;Y.g+=ha.g*U;Y.b+=ha.b*U}}}}}function fa(T,ja,na){b(na.opacity);d(na.blending);var Y,ya,xa,ha,U,Ma;if(na instanceof THREE.ParticleBasicMaterial){if(na.map){ha=na.map.image;U=ha.width>>1;Ma=ha.height>>1;na=ja.scale.x*n;xa=ja.scale.y*p;Y=na*U;ya=xa*Ma;z.set(T.x-Y,T.y-ya,T.x+Y,T.y+ya);if(m.instersects(z)){o.save();o.translate(T.x,T.y);o.rotate(-ja.rotation);
 o.scale(na,-xa);o.translate(-U,-Ma);o.drawImage(ha,0,0);o.restore()}}}else if(na instanceof THREE.ParticleCanvasMaterial){Y=ja.scale.x*n;ya=ja.scale.y*p;z.set(T.x-Y,T.y-ya,T.x+Y,T.y+ya);if(m.instersects(z)){c(na.color.__styleString);xa=na.color.__styleString;if(H!=xa)o.fillStyle=H=xa;o.save();o.translate(T.x,T.y);o.rotate(-ja.rotation);o.scale(Y,ya);na.program(o);o.restore()}}}function oa(T,ja,na,Y){b(Y.opacity);d(Y.blending);o.beginPath();o.moveTo(T.positionScreen.x,T.positionScreen.y);o.lineTo(ja.positionScreen.x,
-ja.positionScreen.y);o.closePath();if(Y instanceof THREE.LineBasicMaterial){ra.__styleString=Y.color.__styleString;T=Y.linewidth;if(L!=T)o.lineWidth=L=T;T=Y.linecap;if(V!=T)o.lineCap=V=T;T=Y.linejoin;if(D!=T)o.lineJoin=D=T;c(ra.__styleString);o.stroke();z.inflate(Y.linewidth*2)}}function Na(T,ja,na,Y,ya,xa,ha,U,Ma){b(U.opacity);d(U.blending);da=T.positionScreen.x;e=T.positionScreen.y;ga=ja.positionScreen.x;Ba=ja.positionScreen.y;Ja=na.positionScreen.x;Ka=na.positionScreen.y;S(da,e,ga,Ba,Ja,Ka);if(U instanceof
+ja.positionScreen.y);o.closePath();if(Y instanceof THREE.LineBasicMaterial){ra.__styleString=Y.color.__styleString;T=Y.linewidth;if(L!=T)o.lineWidth=L=T;T=Y.linecap;if(V!=T)o.lineCap=V=T;T=Y.linejoin;if(D!=T)o.lineJoin=D=T;c(ra.__styleString);o.stroke();z.inflate(Y.linewidth*2)}}function Na(T,ja,na,Y,ya,xa,ha,U,Ma){b(U.opacity);d(U.blending);da=T.positionScreen.x;e=T.positionScreen.y;ga=ja.positionScreen.x;Ba=ja.positionScreen.y;Ja=na.positionScreen.x;Ka=na.positionScreen.y;R(da,e,ga,Ba,Ja,Ka);if(U instanceof
 THREE.MeshBasicMaterial)if(U.map){if(U.map.mapping instanceof THREE.UVMapping){Ua=ha.uvs[0];Qa(da,e,ga,Ba,Ja,Ka,U.map.image,Ua[Y].u,Ua[Y].v,Ua[ya].u,Ua[ya].v,Ua[xa].u,Ua[xa].v)}}else if(U.envMap){if(U.envMap.mapping instanceof THREE.SphericalReflectionMapping){T=za.matrixWorldInverse;J.copy(ha.vertexNormalsWorld[0]);N=(J.x*T.n11+J.y*T.n12+J.z*T.n13)*0.5+0.5;ca=-(J.x*T.n21+J.y*T.n22+J.z*T.n23)*0.5+0.5;J.copy(ha.vertexNormalsWorld[1]);sa=(J.x*T.n11+J.y*T.n12+J.z*T.n13)*0.5+0.5;Ea=-(J.x*T.n21+J.y*T.n22+
 J.z*T.n23)*0.5+0.5;J.copy(ha.vertexNormalsWorld[2]);ia=(J.x*T.n11+J.y*T.n12+J.z*T.n13)*0.5+0.5;ma=-(J.x*T.n21+J.y*T.n22+J.z*T.n23)*0.5+0.5;Qa(da,e,ga,Ba,Ja,Ka,U.envMap.image,N,ca,sa,Ea,ia,ma)}}else U.wireframe?fb(U.color.__styleString,U.wireframeLinewidth,U.wireframeLinecap,U.wireframeLinejoin):Pa(U.color.__styleString);else if(U instanceof THREE.MeshLambertMaterial){if(U.map&&!U.wireframe){if(U.map.mapping instanceof THREE.UVMapping){Ua=ha.uvs[0];Qa(da,e,ga,Ba,Ja,Ka,U.map.image,Ua[Y].u,Ua[Y].v,Ua[ya].u,
 Ua[ya].v,Ua[xa].u,Ua[xa].v)}d(THREE.SubtractiveBlending)}if(w)if(!U.wireframe&&U.shading==THREE.SmoothShading&&ha.vertexNormalsWorld.length==3){Ga.r=la.r=pa.r=P.r;Ga.g=la.g=pa.g=P.g;Ga.b=la.b=pa.b=P.b;Z(Ma,ha.v1.positionWorld,ha.vertexNormalsWorld[0],Ga);Z(Ma,ha.v2.positionWorld,ha.vertexNormalsWorld[1],la);Z(Ma,ha.v3.positionWorld,ha.vertexNormalsWorld[2],pa);Ha.r=(la.r+pa.r)*0.5;Ha.g=(la.g+pa.g)*0.5;Ha.b=(la.b+pa.b)*0.5;Xa=jb(Ga,la,pa,Ha);Qa(da,e,ga,Ba,Ja,Ka,Xa,0,0,1,0,0,1)}else{x.r=P.r;x.g=P.g;
 x.b=P.b;Z(Ma,ha.centroidWorld,ha.normalWorld,x);ra.r=U.color.r*x.r;ra.g=U.color.g*x.g;ra.b=U.color.b*x.b;ra.updateStyleString();U.wireframe?fb(ra.__styleString,U.wireframeLinewidth,U.wireframeLinecap,U.wireframeLinejoin):Pa(ra.__styleString)}else U.wireframe?fb(U.color.__styleString,U.wireframeLinewidth,U.wireframeLinecap,U.wireframeLinejoin):Pa(U.color.__styleString)}else if(U instanceof THREE.MeshDepthMaterial){Ta=za.near;ab=za.far;Ga.r=Ga.g=Ga.b=1-gb(T.positionScreen.z,Ta,ab);la.r=la.g=la.b=1-
 gb(ja.positionScreen.z,Ta,ab);pa.r=pa.g=pa.b=1-gb(na.positionScreen.z,Ta,ab);Ha.r=(la.r+pa.r)*0.5;Ha.g=(la.g+pa.g)*0.5;Ha.b=(la.b+pa.b)*0.5;Xa=jb(Ga,la,pa,Ha);Qa(da,e,ga,Ba,Ja,Ka,Xa,0,0,1,0,0,1)}else if(U instanceof THREE.MeshNormalMaterial){ra.r=bb(ha.normalWorld.x);ra.g=bb(ha.normalWorld.y);ra.b=bb(ha.normalWorld.z);ra.updateStyleString();U.wireframe?fb(ra.__styleString,U.wireframeLinewidth,U.wireframeLinecap,U.wireframeLinejoin):Pa(ra.__styleString)}}function $(T,ja,na,Y,ya,xa,ha,U,Ma){b(U.opacity);
 d(U.blending);if(U.map||U.envMap){Na(T,ja,Y,0,1,3,ha,U,Ma);Na(ya,na,xa,1,2,3,ha,U,Ma)}else{da=T.positionScreen.x;e=T.positionScreen.y;ga=ja.positionScreen.x;Ba=ja.positionScreen.y;Ja=na.positionScreen.x;Ka=na.positionScreen.y;wa=Y.positionScreen.x;ea=Y.positionScreen.y;va=ya.positionScreen.x;Ca=ya.positionScreen.y;ka=xa.positionScreen.x;aa=xa.positionScreen.y;if(U instanceof THREE.MeshBasicMaterial){Sa(da,e,ga,Ba,Ja,Ka,wa,ea);U.wireframe?fb(U.color.__styleString,U.wireframeLinewidth,U.wireframeLinecap,
-U.wireframeLinejoin):Pa(U.color.__styleString)}else if(U instanceof THREE.MeshLambertMaterial)if(w)if(!U.wireframe&&U.shading==THREE.SmoothShading&&ha.vertexNormalsWorld.length==4){Ga.r=la.r=pa.r=Ha.r=P.r;Ga.g=la.g=pa.g=Ha.g=P.g;Ga.b=la.b=pa.b=Ha.b=P.b;Z(Ma,ha.v1.positionWorld,ha.vertexNormalsWorld[0],Ga);Z(Ma,ha.v2.positionWorld,ha.vertexNormalsWorld[1],la);Z(Ma,ha.v4.positionWorld,ha.vertexNormalsWorld[3],pa);Z(Ma,ha.v3.positionWorld,ha.vertexNormalsWorld[2],Ha);Xa=jb(Ga,la,pa,Ha);S(da,e,ga,Ba,
-wa,ea);Qa(da,e,ga,Ba,wa,ea,Xa,0,0,1,0,0,1);S(va,Ca,Ja,Ka,ka,aa);Qa(va,Ca,Ja,Ka,ka,aa,Xa,1,0,1,1,0,1)}else{x.r=P.r;x.g=P.g;x.b=P.b;Z(Ma,ha.centroidWorld,ha.normalWorld,x);ra.r=U.color.r*x.r;ra.g=U.color.g*x.g;ra.b=U.color.b*x.b;ra.updateStyleString();Sa(da,e,ga,Ba,Ja,Ka,wa,ea);U.wireframe?fb(ra.__styleString,U.wireframeLinewidth,U.wireframeLinecap,U.wireframeLinejoin):Pa(ra.__styleString)}else{Sa(da,e,ga,Ba,Ja,Ka,wa,ea);U.wireframe?fb(U.color.__styleString,U.wireframeLinewidth,U.wireframeLinecap,U.wireframeLinejoin):
+U.wireframeLinejoin):Pa(U.color.__styleString)}else if(U instanceof THREE.MeshLambertMaterial)if(w)if(!U.wireframe&&U.shading==THREE.SmoothShading&&ha.vertexNormalsWorld.length==4){Ga.r=la.r=pa.r=Ha.r=P.r;Ga.g=la.g=pa.g=Ha.g=P.g;Ga.b=la.b=pa.b=Ha.b=P.b;Z(Ma,ha.v1.positionWorld,ha.vertexNormalsWorld[0],Ga);Z(Ma,ha.v2.positionWorld,ha.vertexNormalsWorld[1],la);Z(Ma,ha.v4.positionWorld,ha.vertexNormalsWorld[3],pa);Z(Ma,ha.v3.positionWorld,ha.vertexNormalsWorld[2],Ha);Xa=jb(Ga,la,pa,Ha);R(da,e,ga,Ba,
+wa,ea);Qa(da,e,ga,Ba,wa,ea,Xa,0,0,1,0,0,1);R(va,Ca,Ja,Ka,ka,aa);Qa(va,Ca,Ja,Ka,ka,aa,Xa,1,0,1,1,0,1)}else{x.r=P.r;x.g=P.g;x.b=P.b;Z(Ma,ha.centroidWorld,ha.normalWorld,x);ra.r=U.color.r*x.r;ra.g=U.color.g*x.g;ra.b=U.color.b*x.b;ra.updateStyleString();Sa(da,e,ga,Ba,Ja,Ka,wa,ea);U.wireframe?fb(ra.__styleString,U.wireframeLinewidth,U.wireframeLinecap,U.wireframeLinejoin):Pa(ra.__styleString)}else{Sa(da,e,ga,Ba,Ja,Ka,wa,ea);U.wireframe?fb(U.color.__styleString,U.wireframeLinewidth,U.wireframeLinecap,U.wireframeLinejoin):
 Pa(U.color.__styleString)}else if(U instanceof THREE.MeshNormalMaterial){ra.r=bb(ha.normalWorld.x);ra.g=bb(ha.normalWorld.y);ra.b=bb(ha.normalWorld.z);ra.updateStyleString();Sa(da,e,ga,Ba,Ja,Ka,wa,ea);U.wireframe?fb(ra.__styleString,U.wireframeLinewidth,U.wireframeLinecap,U.wireframeLinejoin):Pa(ra.__styleString)}else if(U instanceof THREE.MeshDepthMaterial){Ta=za.near;ab=za.far;Ga.r=Ga.g=Ga.b=1-gb(T.positionScreen.z,Ta,ab);la.r=la.g=la.b=1-gb(ja.positionScreen.z,Ta,ab);pa.r=pa.g=pa.b=1-gb(Y.positionScreen.z,
-Ta,ab);Ha.r=Ha.g=Ha.b=1-gb(na.positionScreen.z,Ta,ab);Xa=jb(Ga,la,pa,Ha);S(da,e,ga,Ba,wa,ea);Qa(da,e,ga,Ba,wa,ea,Xa,0,0,1,0,0,1);S(va,Ca,Ja,Ka,ka,aa);Qa(va,Ca,Ja,Ka,ka,aa,Xa,1,0,1,1,0,1)}}}function S(T,ja,na,Y,ya,xa){o.beginPath();o.moveTo(T,ja);o.lineTo(na,Y);o.lineTo(ya,xa);o.lineTo(T,ja);o.closePath()}function Sa(T,ja,na,Y,ya,xa,ha,U){o.beginPath();o.moveTo(T,ja);o.lineTo(na,Y);o.lineTo(ya,xa);o.lineTo(ha,U);o.lineTo(T,ja);o.closePath()}function fb(T,ja,na,Y){if(L!=ja)o.lineWidth=L=ja;if(V!=na)o.lineCap=
+Ta,ab);Ha.r=Ha.g=Ha.b=1-gb(na.positionScreen.z,Ta,ab);Xa=jb(Ga,la,pa,Ha);R(da,e,ga,Ba,wa,ea);Qa(da,e,ga,Ba,wa,ea,Xa,0,0,1,0,0,1);R(va,Ca,Ja,Ka,ka,aa);Qa(va,Ca,Ja,Ka,ka,aa,Xa,1,0,1,1,0,1)}}}function R(T,ja,na,Y,ya,xa){o.beginPath();o.moveTo(T,ja);o.lineTo(na,Y);o.lineTo(ya,xa);o.lineTo(T,ja);o.closePath()}function Sa(T,ja,na,Y,ya,xa,ha,U){o.beginPath();o.moveTo(T,ja);o.lineTo(na,Y);o.lineTo(ya,xa);o.lineTo(ha,U);o.lineTo(T,ja);o.closePath()}function fb(T,ja,na,Y){if(L!=ja)o.lineWidth=L=ja;if(V!=na)o.lineCap=
 V=na;if(D!=Y)o.lineJoin=D=Y;c(T);o.stroke();z.inflate(ja*2)}function Pa(T){if(H!=T)o.fillStyle=H=T;o.fill()}function Qa(T,ja,na,Y,ya,xa,ha,U,Ma,Ya,Wa,kb,Za){var hb,ib;hb=ha.width-1;ib=ha.height-1;U*=hb;Ma*=ib;Ya*=hb;Wa*=ib;kb*=hb;Za*=ib;na-=T;Y-=ja;ya-=T;xa-=ja;Ya-=U;Wa-=Ma;kb-=U;Za-=Ma;hb=Ya*Za-kb*Wa;if(hb!=0){ib=1/hb;hb=(Za*na-Wa*ya)*ib;Wa=(Za*Y-Wa*xa)*ib;na=(Ya*ya-kb*na)*ib;Y=(Ya*xa-kb*Y)*ib;T=T-hb*U-na*Ma;ja=ja-Wa*U-Y*Ma;o.save();o.transform(hb,Wa,na,Y,T,ja);o.clip();o.drawImage(ha,0,0);o.restore()}}
 function jb(T,ja,na,Y){var ya=~~(T.r*255),xa=~~(T.g*255);T=~~(T.b*255);var ha=~~(ja.r*255),U=~~(ja.g*255);ja=~~(ja.b*255);var Ma=~~(na.r*255),Ya=~~(na.g*255);na=~~(na.b*255);var Wa=~~(Y.r*255),kb=~~(Y.g*255);Y=~~(Y.b*255);qa[0]=ya<0?0:ya>255?255:ya;qa[1]=xa<0?0:xa>255?255:xa;qa[2]=T<0?0:T>255?255:T;qa[4]=ha<0?0:ha>255?255:ha;qa[5]=U<0?0:U>255?255:U;qa[6]=ja<0?0:ja>255?255:ja;qa[8]=Ma<0?0:Ma>255?255:Ma;qa[9]=Ya<0?0:Ya>255?255:Ya;qa[10]=na<0?0:na>255?255:na;qa[12]=Wa<0?0:Wa>255?255:Wa;qa[13]=kb<0?0:
-kb>255?255:kb;qa[14]=Y<0?0:Y>255?255:Y;K.putImageData(X,0,0);Fa.drawImage(E,0,0);return W}function gb(T,ja,na){T=(T-ja)/(na-ja);return T*T*(3-2*T)}function bb(T){T=(T+1)*0.5;return T<0?0:T>1?1:T}function cb(T,ja){var na=ja.x-T.x,Y=ja.y-T.y,ya=1/Math.sqrt(na*na+Y*Y);na*=ya;Y*=ya;ja.x+=na;ja.y+=Y;T.x-=na;T.y-=Y}var Oa,eb,Da,R,Ra,Va,lb,$a;this.autoClear?this.clear():o.setTransform(1,0,0,-1,n,p);f=g.projectScene(ta,za,this.sortElements);(w=ta.lights.length>0)&&db(ta);Oa=0;for(eb=f.length;Oa<eb;Oa++){Da=
-f[Oa];z.empty();if(Da instanceof THREE.RenderableParticle){M=Da;M.x*=n;M.y*=p;R=0;for(Ra=Da.materials.length;R<Ra;){$a=Da.materials[R++];$a.opacity!=0&&fa(M,Da,$a,ta)}}else if(Da instanceof THREE.RenderableLine){M=Da.v1;O=Da.v2;M.positionScreen.x*=n;M.positionScreen.y*=p;O.positionScreen.x*=n;O.positionScreen.y*=p;z.addPoint(M.positionScreen.x,M.positionScreen.y);z.addPoint(O.positionScreen.x,O.positionScreen.y);if(m.instersects(z)){R=0;for(Ra=Da.materials.length;R<Ra;){$a=Da.materials[R++];$a.opacity!=
-0&&oa(M,O,Da,$a,ta)}}}else if(Da instanceof THREE.RenderableFace3){M=Da.v1;O=Da.v2;Q=Da.v3;M.positionScreen.x*=n;M.positionScreen.y*=p;O.positionScreen.x*=n;O.positionScreen.y*=p;Q.positionScreen.x*=n;Q.positionScreen.y*=p;if(Da.overdraw){cb(M.positionScreen,O.positionScreen);cb(O.positionScreen,Q.positionScreen);cb(Q.positionScreen,M.positionScreen)}z.add3Points(M.positionScreen.x,M.positionScreen.y,O.positionScreen.x,O.positionScreen.y,Q.positionScreen.x,Q.positionScreen.y);if(m.instersects(z)){R=
-0;for(Ra=Da.meshMaterials.length;R<Ra;){$a=Da.meshMaterials[R++];if($a instanceof THREE.MeshFaceMaterial){Va=0;for(lb=Da.faceMaterials.length;Va<lb;)($a=Da.faceMaterials[Va++])&&$a.opacity!=0&&Na(M,O,Q,0,1,2,Da,$a,ta)}else $a.opacity!=0&&Na(M,O,Q,0,1,2,Da,$a,ta)}}}else if(Da instanceof THREE.RenderableFace4){M=Da.v1;O=Da.v2;Q=Da.v3;Ia=Da.v4;M.positionScreen.x*=n;M.positionScreen.y*=p;O.positionScreen.x*=n;O.positionScreen.y*=p;Q.positionScreen.x*=n;Q.positionScreen.y*=p;Ia.positionScreen.x*=n;Ia.positionScreen.y*=
-p;ua.positionScreen.copy(O.positionScreen);Aa.positionScreen.copy(Ia.positionScreen);if(Da.overdraw){cb(M.positionScreen,O.positionScreen);cb(O.positionScreen,Ia.positionScreen);cb(Ia.positionScreen,M.positionScreen);cb(Q.positionScreen,ua.positionScreen);cb(Q.positionScreen,Aa.positionScreen)}z.addPoint(M.positionScreen.x,M.positionScreen.y);z.addPoint(O.positionScreen.x,O.positionScreen.y);z.addPoint(Q.positionScreen.x,Q.positionScreen.y);z.addPoint(Ia.positionScreen.x,Ia.positionScreen.y);if(m.instersects(z)){R=
-0;for(Ra=Da.meshMaterials.length;R<Ra;){$a=Da.meshMaterials[R++];if($a instanceof THREE.MeshFaceMaterial){Va=0;for(lb=Da.faceMaterials.length;Va<lb;)($a=Da.faceMaterials[Va++])&&$a.opacity!=0&&$(M,O,Q,Ia,ua,Aa,Da,$a,ta)}else $a.opacity!=0&&$(M,O,Q,Ia,ua,Aa,Da,$a,ta)}}}C.addRectangle(z)}o.setTransform(1,0,0,1,0,0)}};
+kb>255?255:kb;qa[14]=Y<0?0:Y>255?255:Y;K.putImageData(X,0,0);Fa.drawImage(E,0,0);return W}function gb(T,ja,na){T=(T-ja)/(na-ja);return T*T*(3-2*T)}function bb(T){T=(T+1)*0.5;return T<0?0:T>1?1:T}function cb(T,ja){var na=ja.x-T.x,Y=ja.y-T.y,ya=1/Math.sqrt(na*na+Y*Y);na*=ya;Y*=ya;ja.x+=na;ja.y+=Y;T.x-=na;T.y-=Y}var Oa,eb,Da,S,Ra,Va,lb,$a;this.autoClear?this.clear():o.setTransform(1,0,0,-1,n,p);f=g.projectScene(ta,za,this.sortElements);(w=ta.lights.length>0)&&db(ta);Oa=0;for(eb=f.length;Oa<eb;Oa++){Da=
+f[Oa];z.empty();if(Da instanceof THREE.RenderableParticle){M=Da;M.x*=n;M.y*=p;S=0;for(Ra=Da.materials.length;S<Ra;){$a=Da.materials[S++];$a.opacity!=0&&fa(M,Da,$a,ta)}}else if(Da instanceof THREE.RenderableLine){M=Da.v1;O=Da.v2;M.positionScreen.x*=n;M.positionScreen.y*=p;O.positionScreen.x*=n;O.positionScreen.y*=p;z.addPoint(M.positionScreen.x,M.positionScreen.y);z.addPoint(O.positionScreen.x,O.positionScreen.y);if(m.instersects(z)){S=0;for(Ra=Da.materials.length;S<Ra;){$a=Da.materials[S++];$a.opacity!=
+0&&oa(M,O,Da,$a,ta)}}}else if(Da instanceof THREE.RenderableFace3){M=Da.v1;O=Da.v2;Q=Da.v3;M.positionScreen.x*=n;M.positionScreen.y*=p;O.positionScreen.x*=n;O.positionScreen.y*=p;Q.positionScreen.x*=n;Q.positionScreen.y*=p;if(Da.overdraw){cb(M.positionScreen,O.positionScreen);cb(O.positionScreen,Q.positionScreen);cb(Q.positionScreen,M.positionScreen)}z.add3Points(M.positionScreen.x,M.positionScreen.y,O.positionScreen.x,O.positionScreen.y,Q.positionScreen.x,Q.positionScreen.y);if(m.instersects(z)){S=
+0;for(Ra=Da.meshMaterials.length;S<Ra;){$a=Da.meshMaterials[S++];if($a instanceof THREE.MeshFaceMaterial){Va=0;for(lb=Da.faceMaterials.length;Va<lb;)($a=Da.faceMaterials[Va++])&&$a.opacity!=0&&Na(M,O,Q,0,1,2,Da,$a,ta)}else $a.opacity!=0&&Na(M,O,Q,0,1,2,Da,$a,ta)}}}else if(Da instanceof THREE.RenderableFace4){M=Da.v1;O=Da.v2;Q=Da.v3;Ia=Da.v4;M.positionScreen.x*=n;M.positionScreen.y*=p;O.positionScreen.x*=n;O.positionScreen.y*=p;Q.positionScreen.x*=n;Q.positionScreen.y*=p;Ia.positionScreen.x*=n;Ia.positionScreen.y*=
+p;ua.positionScreen.copy(O.positionScreen);Aa.positionScreen.copy(Ia.positionScreen);if(Da.overdraw){cb(M.positionScreen,O.positionScreen);cb(O.positionScreen,Ia.positionScreen);cb(Ia.positionScreen,M.positionScreen);cb(Q.positionScreen,ua.positionScreen);cb(Q.positionScreen,Aa.positionScreen)}z.addPoint(M.positionScreen.x,M.positionScreen.y);z.addPoint(O.positionScreen.x,O.positionScreen.y);z.addPoint(Q.positionScreen.x,Q.positionScreen.y);z.addPoint(Ia.positionScreen.x,Ia.positionScreen.y);if(m.instersects(z)){S=
+0;for(Ra=Da.meshMaterials.length;S<Ra;){$a=Da.meshMaterials[S++];if($a instanceof THREE.MeshFaceMaterial){Va=0;for(lb=Da.faceMaterials.length;Va<lb;)($a=Da.faceMaterials[Va++])&&$a.opacity!=0&&$(M,O,Q,Ia,ua,Aa,Da,$a,ta)}else $a.opacity!=0&&$(M,O,Q,Ia,ua,Aa,Da,$a,ta)}}}C.addRectangle(z)}o.setTransform(1,0,0,1,0,0)}};
 THREE.SVGRenderer=function(){function b(wa,ea,va){var Ca,ka,aa,ra;Ca=0;for(ka=wa.lights.length;Ca<ka;Ca++){aa=wa.lights[Ca];if(aa instanceof THREE.DirectionalLight){ra=ea.normalWorld.dot(aa.position)*aa.intensity;if(ra>0){va.r+=aa.color.r*ra;va.g+=aa.color.g*ra;va.b+=aa.color.b*ra}}else if(aa instanceof THREE.PointLight){Aa.sub(aa.position,ea.centroidWorld);Aa.normalize();ra=ea.normalWorld.dot(Aa)*aa.intensity;if(ra>0){va.r+=aa.color.r*ra;va.g+=aa.color.g*ra;va.b+=aa.color.b*ra}}}}function d(wa,ea,
 va,Ca,ka,aa){ga=f(Ba++);ga.setAttribute("d","M "+wa.positionScreen.x+" "+wa.positionScreen.y+" L "+ea.positionScreen.x+" "+ea.positionScreen.y+" L "+va.positionScreen.x+","+va.positionScreen.y+"z");if(ka instanceof THREE.MeshBasicMaterial)D.__styleString=ka.color.__styleString;else if(ka instanceof THREE.MeshLambertMaterial)if(V){M.r=O.r;M.g=O.g;M.b=O.b;b(aa,Ca,M);D.r=ka.color.r*M.r;D.g=ka.color.g*M.g;D.b=ka.color.b*M.b;D.updateStyleString()}else D.__styleString=ka.color.__styleString;else if(ka instanceof
 THREE.MeshDepthMaterial){ua=1-ka.__2near/(ka.__farPlusNear-Ca.z*ka.__farMinusNear);D.setRGB(ua,ua,ua)}else ka instanceof THREE.MeshNormalMaterial&&D.setRGB(g(Ca.normalWorld.x),g(Ca.normalWorld.y),g(Ca.normalWorld.z));ka.wireframe?ga.setAttribute("style","fill: none; stroke: "+D.__styleString+"; stroke-width: "+ka.wireframeLinewidth+"; stroke-opacity: "+ka.opacity+"; stroke-linecap: "+ka.wireframeLinecap+"; stroke-linejoin: "+ka.wireframeLinejoin):ga.setAttribute("style","fill: "+D.__styleString+"; fill-opacity: "+
@@ -225,8 +225,8 @@ THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_particle_pars_fragme
 THREE.WebGLRenderer=function(b){function d(m,C,z){var w,x,P,G=m.vertices,I=G.length,J=m.colors,E=J.length,K=m.__vertexArray,X=m.__colorArray,qa=m.__sortArray,W=m.__dirtyVertices,Fa=m.__dirtyColors;if(z.sortParticles){Ha.multiplySelf(z.matrixWorld);for(w=0;w<I;w++){x=G[w].position;Xa.copy(x);Ha.multiplyVector3(Xa);qa[w]=[Xa.z,w]}qa.sort(function(La,ta){return ta[0]-La[0]});for(w=0;w<I;w++){x=G[qa[w][1]].position;P=w*3;K[P]=x.x;K[P+1]=x.y;K[P+2]=x.z}for(w=0;w<E;w++){P=w*3;color=J[qa[w][1]];X[P]=color.r;
 X[P+1]=color.g;X[P+2]=color.b}}else{if(W)for(w=0;w<I;w++){x=G[w].position;P=w*3;K[P]=x.x;K[P+1]=x.y;K[P+2]=x.z}if(Fa)for(w=0;w<E;w++){color=J[w];P=w*3;X[P]=color.r;X[P+1]=color.g;X[P+2]=color.b}}if(W||z.sortParticles){e.bindBuffer(e.ARRAY_BUFFER,m.__webglVertexBuffer);e.bufferData(e.ARRAY_BUFFER,K,C)}if(Fa||z.sortParticles){e.bindBuffer(e.ARRAY_BUFFER,m.__webglColorBuffer);e.bufferData(e.ARRAY_BUFFER,X,C)}}function c(m,C){m.uniforms=Uniforms.clone(C.uniforms);m.vertexShader=C.vertexShader;m.fragmentShader=
 C.fragmentShader}function f(m,C,z,w,x){w.__webglProgram||wa.initMaterial(w,C,z,x);var P=w.program,G=P.uniforms,I=w.uniforms;if(P!=Ba){e.useProgram(P);Ba=P}e.uniformMatrix4fv(G.projectionMatrix,!1,Ta);if(z&&(w instanceof THREE.MeshBasicMaterial||w instanceof THREE.MeshLambertMaterial||w instanceof THREE.MeshPhongMaterial||w instanceof THREE.LineBasicMaterial||w instanceof THREE.ParticleBasicMaterial||w.fog)){I.fogColor.value.setHex(z.color.hex);if(z instanceof THREE.Fog){I.fogNear.value=z.near;I.fogFar.value=
-z.far}else if(z instanceof THREE.FogExp2)I.fogDensity.value=z.density}if(w instanceof THREE.MeshPhongMaterial||w instanceof THREE.MeshLambertMaterial||w.lights){var J,E,K=0,X=0,qa=0,W,Fa,La,ta,za=Ua,db=za.directional.colors,Z=za.directional.positions,fa=za.point.colors,oa=za.point.positions,Na=za.point.distances,$=0,S=0;z=E=ta=0;for(J=C.length;z<J;z++){E=C[z];W=E.color;Fa=E.position;La=E.intensity;ta=E.distance;if(E instanceof THREE.AmbientLight){K+=W.r;X+=W.g;qa+=W.b}else if(E instanceof THREE.DirectionalLight){ta=
-$*3;db[ta]=W.r*La;db[ta+1]=W.g*La;db[ta+2]=W.b*La;Z[ta]=Fa.x;Z[ta+1]=Fa.y;Z[ta+2]=Fa.z;$+=1}else if(E instanceof THREE.PointLight){E=S*3;fa[E]=W.r*La;fa[E+1]=W.g*La;fa[E+2]=W.b*La;oa[E]=Fa.x;oa[E+1]=Fa.y;oa[E+2]=Fa.z;Na[S]=ta;S+=1}}for(z=$*3;z<db.length;z++)db[z]=0;for(z=S*3;z<fa.length;z++)fa[z]=0;za.point.length=S;za.directional.length=$;za.ambient[0]=K;za.ambient[1]=X;za.ambient[2]=qa;z=Ua;I.enableLighting.value=z.directional.length+z.point.length;I.ambientLightColor.value=z.ambient;I.directionalLightColor.value=
+z.far}else if(z instanceof THREE.FogExp2)I.fogDensity.value=z.density}if(w instanceof THREE.MeshPhongMaterial||w instanceof THREE.MeshLambertMaterial||w.lights){var J,E,K=0,X=0,qa=0,W,Fa,La,ta,za=Ua,db=za.directional.colors,Z=za.directional.positions,fa=za.point.colors,oa=za.point.positions,Na=za.point.distances,$=0,R=0;z=E=ta=0;for(J=C.length;z<J;z++){E=C[z];W=E.color;Fa=E.position;La=E.intensity;ta=E.distance;if(E instanceof THREE.AmbientLight){K+=W.r;X+=W.g;qa+=W.b}else if(E instanceof THREE.DirectionalLight){ta=
+$*3;db[ta]=W.r*La;db[ta+1]=W.g*La;db[ta+2]=W.b*La;Z[ta]=Fa.x;Z[ta+1]=Fa.y;Z[ta+2]=Fa.z;$+=1}else if(E instanceof THREE.PointLight){E=R*3;fa[E]=W.r*La;fa[E+1]=W.g*La;fa[E+2]=W.b*La;oa[E]=Fa.x;oa[E+1]=Fa.y;oa[E+2]=Fa.z;Na[R]=ta;R+=1}}for(z=$*3;z<db.length;z++)db[z]=0;for(z=R*3;z<fa.length;z++)fa[z]=0;za.point.length=R;za.directional.length=$;za.ambient[0]=K;za.ambient[1]=X;za.ambient[2]=qa;z=Ua;I.enableLighting.value=z.directional.length+z.point.length;I.ambientLightColor.value=z.ambient;I.directionalLightColor.value=
 z.directional.colors;I.directionalLightDirection.value=z.directional.positions;I.pointLightColor.value=z.point.colors;I.pointLightPosition.value=z.point.positions;I.pointLightDistance.value=z.point.distances}if(w instanceof THREE.MeshBasicMaterial||w instanceof THREE.MeshLambertMaterial||w instanceof THREE.MeshPhongMaterial){I.diffuse.value.setRGB(w.color.r,w.color.g,w.color.b);I.opacity.value=w.opacity;I.map.texture=w.map;I.lightMap.texture=w.lightMap;I.envMap.texture=w.envMap;I.reflectivity.value=
 w.reflectivity;I.refractionRatio.value=w.refractionRatio;I.combine.value=w.combine;I.useRefract.value=w.envMap&&w.envMap.mapping instanceof THREE.CubeRefractionMapping}if(w instanceof THREE.LineBasicMaterial){I.diffuse.value.setRGB(w.color.r,w.color.g,w.color.b);I.opacity.value=w.opacity}else if(w instanceof THREE.ParticleBasicMaterial){I.psColor.value.setRGB(w.color.r,w.color.g,w.color.b);I.opacity.value=w.opacity;I.size.value=w.size;I.scale.value=ga.height/2;I.map.texture=w.map}else if(w instanceof
 THREE.MeshPhongMaterial){I.ambient.value.setRGB(w.ambient.r,w.ambient.g,w.ambient.b);I.specular.value.setRGB(w.specular.r,w.specular.g,w.specular.b);I.shininess.value=w.shininess}else if(w instanceof THREE.MeshDepthMaterial){I.mNear.value=m.near;I.mFar.value=m.far;I.opacity.value=w.opacity}else if(w instanceof THREE.MeshNormalMaterial)I.opacity.value=w.opacity;for(var Sa in I)if(X=P.uniforms[Sa]){J=I[Sa];K=J.type;z=J.value;if(K=="i")e.uniform1i(X,z);else if(K=="f")e.uniform1f(X,z);else if(K=="fv1")e.uniform1fv(X,
@@ -255,30 +255,30 @@ sampleDistance=parseInt(5*(1-Math.max(0,Math.min(-w,C.far))/C.far),10)+2;w=sampl
 (ta+=0.2);z.positionScreen.x=qa[0];z.positionScreen.y=qa[1];z.positionScreen.z=qa[2];z.customUpdateCallback?z.customUpdateCallback(ta,z):z.updateLensFlares(ta);e.uniform1i(za.renderPink,0);e.disable(e.DEPTH_TEST);e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0)}for(x=0;x<P;x++){z=m.__webglLensFlares[x].object;G=0;for(I=z.lensFlares.length;G<I;G++){J=z.lensFlares[G];if(J.opacity>0.0010&&J.scale>0.0010){qa[0]=J.x;qa[1]=J.y;qa[2]=J.z;K=J.size*J.scale/la;X[0]=K*E;X[1]=K;e.uniform3fv(za.screenPosition,
 qa);e.uniform1f(za.rotation,J.rotation);e.uniform2fv(za.scale,X);e.uniform1f(za.opacity,J.opacity);M(J.blending);Q(J.texture,0);e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0)}}}e.enable(e.CULL_FACE);e.enable(e.DEPTH_TEST);e.depthMask(Ka)}function H(m,C){m._modelViewMatrix.multiplyToArray(C.matrixWorldInverse,m.matrixWorld,m._modelViewMatrixArray);THREE.Matrix4.makeInvert3x3(m._modelViewMatrix).transposeIntoArray(m._normalMatrixArray)}function L(m){var C,z,w,x,P;if(m instanceof THREE.Mesh){z=m.geometry;
 for(C in z.geometryGroups){w=z.geometryGroups[C];P=!1;for(x in w.__webglCustomAttributes)if(w.__webglCustomAttributes[x].dirty){P=!0;break}if(z.__dirtyVertices||z.__dirtyMorphTargets||z.__dirtyElements||z.__dirtyUvs||z.__dirtyNormals||z.__dirtyColors||z.__dirtyTangents||P){P=e.DYNAMIC_DRAW;var G=void 0,I=void 0,J=void 0,E=void 0;J=void 0;var K=void 0,X=void 0,qa=void 0,W=void 0,Fa=void 0,La=void 0,ta=void 0,za=void 0,db=void 0,Z=void 0,fa=void 0,oa=void 0,Na=void 0;X=void 0;qa=void 0;E=void 0;W=void 0;
-E=void 0;Z=void 0;fa=void 0;X=void 0;Z=void 0;fa=void 0;oa=void 0;Na=void 0;Z=void 0;fa=void 0;oa=void 0;Na=void 0;Z=void 0;fa=void 0;oa=void 0;Na=void 0;Z=void 0;fa=void 0;oa=void 0;E=void 0;W=void 0;K=void 0;J=void 0;J=void 0;var $=void 0,S=void 0,Sa=void 0,fb=void 0,Pa=0,Qa=0,jb=0,gb=0,bb=0,cb=0,Oa=0,eb=0,Da=0,R=0,Ra=0;$=0;var Va=w.__vertexArray,lb=w.__uvArray,$a=w.__uv2Array,T=w.__normalArray,ja=w.__tangentArray,na=w.__colorArray,Y=w.__skinVertexAArray,ya=w.__skinVertexBArray,xa=w.__skinIndexArray,
-ha=w.__skinWeightArray,U=w.__morphTargetsArrays,Ma=w.__webglCustomAttributes;S=void 0;var Ya=w.__faceArray,Wa=w.__lineArray,kb=w.__needsSmoothNormals;La=w.__vertexColorType;Fa=w.__uvType;ta=w.__normalType;var Za=m.geometry,hb=Za.__dirtyVertices,ib=Za.__dirtyElements,tb=Za.__dirtyUvs,ub=Za.__dirtyNormals,vb=Za.__dirtyTangents,wb=Za.__dirtyColors,xb=Za.__dirtyMorphTargets,pb=Za.vertices,yb=w.faces,Bb=Za.faces,zb=Za.faceVertexUvs[0],Ab=Za.faceVertexUvs[1],qb=Za.skinVerticesA,rb=Za.skinVerticesB,sb=Za.skinIndices,
-nb=Za.skinWeights,ob=Za.edgeFaces,mb=Za.morphTargets;if(Ma)for(fb in Ma)Ma[fb].offset=0;G=0;for(I=yb.length;G<I;G++){J=yb[G];E=Bb[J];zb&&(za=zb[J]);Ab&&(db=Ab[J]);J=E.vertexNormals;K=E.normal;X=E.vertexColors;qa=E.color;W=E.vertexTangents;if(E instanceof THREE.Face3){if(hb){Z=pb[E.a].position;fa=pb[E.b].position;oa=pb[E.c].position;Va[Qa]=Z.x;Va[Qa+1]=Z.y;Va[Qa+2]=Z.z;Va[Qa+3]=fa.x;Va[Qa+4]=fa.y;Va[Qa+5]=fa.z;Va[Qa+6]=oa.x;Va[Qa+7]=oa.y;Va[Qa+8]=oa.z;Qa+=9}if(Ma)for(fb in Ma){S=Ma[fb];if(S.dirty){$=
-S.offset;if(S.size===1){S.array[$+0]=S.value[E.a];S.array[$+1]=S.value[E.b];S.array[$+2]=S.value[E.c];S.offset+=3}else{Z=S.value[E.a];fa=S.value[E.b];oa=S.value[E.c];if(S.size===2){S.array[$+0]=Z.x;S.array[$+1]=Z.y;S.array[$+2]=fa.x;S.array[$+3]=fa.y;S.array[$+4]=oa.x;S.array[$+5]=oa.y;S.offset+=6}else if(S.size===3){S.array[$+0]=Z.x;S.array[$+1]=Z.y;S.array[$+2]=Z.z;S.array[$+3]=fa.x;S.array[$+4]=fa.y;S.array[$+5]=fa.z;S.array[$+6]=oa.x;S.array[$+7]=oa.y;S.array[$+8]=oa.z;S.offset+=9}else{S.array[$+
-0]=Z.x;S.array[$+1]=Z.y;S.array[$+2]=Z.z;S.array[$+3]=Z.w;S.array[$+4]=fa.x;S.array[$+5]=fa.y;S.array[$+6]=fa.z;S.array[$+7]=fa.w;S.array[$+8]=oa.x;S.array[$+9]=oa.y;S.array[$+10]=oa.z;S.array[$+11]=oa.w;S.offset+=12}}}}if(xb){$=0;for(S=mb.length;$<S;$++){Z=mb[$].vertices[E.a].position;fa=mb[$].vertices[E.b].position;oa=mb[$].vertices[E.c].position;Sa=U[$];Sa[Ra+0]=Z.x;Sa[Ra+1]=Z.y;Sa[Ra+2]=Z.z;Sa[Ra+3]=fa.x;Sa[Ra+4]=fa.y;Sa[Ra+5]=fa.z;Sa[Ra+6]=oa.x;Sa[Ra+7]=oa.y;Sa[Ra+8]=oa.z}Ra+=9}if(nb.length){Z=
-nb[E.a];fa=nb[E.b];oa=nb[E.c];ha[R]=Z.x;ha[R+1]=Z.y;ha[R+2]=Z.z;ha[R+3]=Z.w;ha[R+4]=fa.x;ha[R+5]=fa.y;ha[R+6]=fa.z;ha[R+7]=fa.w;ha[R+8]=oa.x;ha[R+9]=oa.y;ha[R+10]=oa.z;ha[R+11]=oa.w;Z=sb[E.a];fa=sb[E.b];oa=sb[E.c];xa[R]=Z.x;xa[R+1]=Z.y;xa[R+2]=Z.z;xa[R+3]=Z.w;xa[R+4]=fa.x;xa[R+5]=fa.y;xa[R+6]=fa.z;xa[R+7]=fa.w;xa[R+8]=oa.x;xa[R+9]=oa.y;xa[R+10]=oa.z;xa[R+11]=oa.w;Z=qb[E.a];fa=qb[E.b];oa=qb[E.c];Y[R]=Z.x;Y[R+1]=Z.y;Y[R+2]=Z.z;Y[R+3]=1;Y[R+4]=fa.x;Y[R+5]=fa.y;Y[R+6]=fa.z;Y[R+7]=1;Y[R+8]=oa.x;Y[R+9]=
-oa.y;Y[R+10]=oa.z;Y[R+11]=1;Z=rb[E.a];fa=rb[E.b];oa=rb[E.c];ya[R]=Z.x;ya[R+1]=Z.y;ya[R+2]=Z.z;ya[R+3]=1;ya[R+4]=fa.x;ya[R+5]=fa.y;ya[R+6]=fa.z;ya[R+7]=1;ya[R+8]=oa.x;ya[R+9]=oa.y;ya[R+10]=oa.z;ya[R+11]=1;R+=12}if(wb&&La){if(X.length==3&&La==THREE.VertexColors){E=X[0];Z=X[1];fa=X[2]}else fa=Z=E=qa;na[Da]=E.r;na[Da+1]=E.g;na[Da+2]=E.b;na[Da+3]=Z.r;na[Da+4]=Z.g;na[Da+5]=Z.b;na[Da+6]=fa.r;na[Da+7]=fa.g;na[Da+8]=fa.b;Da+=9}if(vb&&Za.hasTangents){X=W[0];qa=W[1];E=W[2];ja[Oa]=X.x;ja[Oa+1]=X.y;ja[Oa+2]=X.z;
+E=void 0;Z=void 0;fa=void 0;X=void 0;Z=void 0;fa=void 0;oa=void 0;Na=void 0;Z=void 0;fa=void 0;oa=void 0;Na=void 0;Z=void 0;fa=void 0;oa=void 0;Na=void 0;Z=void 0;fa=void 0;oa=void 0;E=void 0;W=void 0;K=void 0;J=void 0;J=void 0;var $=void 0,R=void 0,Sa=void 0,fb=void 0,Pa=0,Qa=0,jb=0,gb=0,bb=0,cb=0,Oa=0,eb=0,Da=0,S=0,Ra=0;$=0;var Va=w.__vertexArray,lb=w.__uvArray,$a=w.__uv2Array,T=w.__normalArray,ja=w.__tangentArray,na=w.__colorArray,Y=w.__skinVertexAArray,ya=w.__skinVertexBArray,xa=w.__skinIndexArray,
+ha=w.__skinWeightArray,U=w.__morphTargetsArrays,Ma=w.__webglCustomAttributes;R=void 0;var Ya=w.__faceArray,Wa=w.__lineArray,kb=w.__needsSmoothNormals;La=w.__vertexColorType;Fa=w.__uvType;ta=w.__normalType;var Za=m.geometry,hb=Za.__dirtyVertices,ib=Za.__dirtyElements,tb=Za.__dirtyUvs,ub=Za.__dirtyNormals,vb=Za.__dirtyTangents,wb=Za.__dirtyColors,xb=Za.__dirtyMorphTargets,pb=Za.vertices,yb=w.faces,Bb=Za.faces,zb=Za.faceVertexUvs[0],Ab=Za.faceVertexUvs[1],qb=Za.skinVerticesA,rb=Za.skinVerticesB,sb=Za.skinIndices,
+nb=Za.skinWeights,ob=Za.edgeFaces,mb=Za.morphTargets;if(Ma)for(fb in Ma)Ma[fb].offset=0;G=0;for(I=yb.length;G<I;G++){J=yb[G];E=Bb[J];zb&&(za=zb[J]);Ab&&(db=Ab[J]);J=E.vertexNormals;K=E.normal;X=E.vertexColors;qa=E.color;W=E.vertexTangents;if(E instanceof THREE.Face3){if(hb){Z=pb[E.a].position;fa=pb[E.b].position;oa=pb[E.c].position;Va[Qa]=Z.x;Va[Qa+1]=Z.y;Va[Qa+2]=Z.z;Va[Qa+3]=fa.x;Va[Qa+4]=fa.y;Va[Qa+5]=fa.z;Va[Qa+6]=oa.x;Va[Qa+7]=oa.y;Va[Qa+8]=oa.z;Qa+=9}if(Ma)for(fb in Ma){R=Ma[fb];if(R.dirty){$=
+R.offset;if(R.size===1){R.array[$+0]=R.value[E.a];R.array[$+1]=R.value[E.b];R.array[$+2]=R.value[E.c];R.offset+=3}else{Z=R.value[E.a];fa=R.value[E.b];oa=R.value[E.c];if(R.size===2){R.array[$+0]=Z.x;R.array[$+1]=Z.y;R.array[$+2]=fa.x;R.array[$+3]=fa.y;R.array[$+4]=oa.x;R.array[$+5]=oa.y;R.offset+=6}else if(R.size===3){R.array[$+0]=Z.x;R.array[$+1]=Z.y;R.array[$+2]=Z.z;R.array[$+3]=fa.x;R.array[$+4]=fa.y;R.array[$+5]=fa.z;R.array[$+6]=oa.x;R.array[$+7]=oa.y;R.array[$+8]=oa.z;R.offset+=9}else{R.array[$+
+0]=Z.x;R.array[$+1]=Z.y;R.array[$+2]=Z.z;R.array[$+3]=Z.w;R.array[$+4]=fa.x;R.array[$+5]=fa.y;R.array[$+6]=fa.z;R.array[$+7]=fa.w;R.array[$+8]=oa.x;R.array[$+9]=oa.y;R.array[$+10]=oa.z;R.array[$+11]=oa.w;R.offset+=12}}}}if(xb){$=0;for(R=mb.length;$<R;$++){Z=mb[$].vertices[E.a].position;fa=mb[$].vertices[E.b].position;oa=mb[$].vertices[E.c].position;Sa=U[$];Sa[Ra+0]=Z.x;Sa[Ra+1]=Z.y;Sa[Ra+2]=Z.z;Sa[Ra+3]=fa.x;Sa[Ra+4]=fa.y;Sa[Ra+5]=fa.z;Sa[Ra+6]=oa.x;Sa[Ra+7]=oa.y;Sa[Ra+8]=oa.z}Ra+=9}if(nb.length){Z=
+nb[E.a];fa=nb[E.b];oa=nb[E.c];ha[S]=Z.x;ha[S+1]=Z.y;ha[S+2]=Z.z;ha[S+3]=Z.w;ha[S+4]=fa.x;ha[S+5]=fa.y;ha[S+6]=fa.z;ha[S+7]=fa.w;ha[S+8]=oa.x;ha[S+9]=oa.y;ha[S+10]=oa.z;ha[S+11]=oa.w;Z=sb[E.a];fa=sb[E.b];oa=sb[E.c];xa[S]=Z.x;xa[S+1]=Z.y;xa[S+2]=Z.z;xa[S+3]=Z.w;xa[S+4]=fa.x;xa[S+5]=fa.y;xa[S+6]=fa.z;xa[S+7]=fa.w;xa[S+8]=oa.x;xa[S+9]=oa.y;xa[S+10]=oa.z;xa[S+11]=oa.w;Z=qb[E.a];fa=qb[E.b];oa=qb[E.c];Y[S]=Z.x;Y[S+1]=Z.y;Y[S+2]=Z.z;Y[S+3]=1;Y[S+4]=fa.x;Y[S+5]=fa.y;Y[S+6]=fa.z;Y[S+7]=1;Y[S+8]=oa.x;Y[S+9]=
+oa.y;Y[S+10]=oa.z;Y[S+11]=1;Z=rb[E.a];fa=rb[E.b];oa=rb[E.c];ya[S]=Z.x;ya[S+1]=Z.y;ya[S+2]=Z.z;ya[S+3]=1;ya[S+4]=fa.x;ya[S+5]=fa.y;ya[S+6]=fa.z;ya[S+7]=1;ya[S+8]=oa.x;ya[S+9]=oa.y;ya[S+10]=oa.z;ya[S+11]=1;S+=12}if(wb&&La){if(X.length==3&&La==THREE.VertexColors){E=X[0];Z=X[1];fa=X[2]}else fa=Z=E=qa;na[Da]=E.r;na[Da+1]=E.g;na[Da+2]=E.b;na[Da+3]=Z.r;na[Da+4]=Z.g;na[Da+5]=Z.b;na[Da+6]=fa.r;na[Da+7]=fa.g;na[Da+8]=fa.b;Da+=9}if(vb&&Za.hasTangents){X=W[0];qa=W[1];E=W[2];ja[Oa]=X.x;ja[Oa+1]=X.y;ja[Oa+2]=X.z;
 ja[Oa+3]=X.w;ja[Oa+4]=qa.x;ja[Oa+5]=qa.y;ja[Oa+6]=qa.z;ja[Oa+7]=qa.w;ja[Oa+8]=E.x;ja[Oa+9]=E.y;ja[Oa+10]=E.z;ja[Oa+11]=E.w;Oa+=12}if(ub&&ta)if(J.length==3&&kb)for(W=0;W<3;W++){K=J[W];T[cb]=K.x;T[cb+1]=K.y;T[cb+2]=K.z;cb+=3}else for(W=0;W<3;W++){T[cb]=K.x;T[cb+1]=K.y;T[cb+2]=K.z;cb+=3}if(tb&&za!==undefined&&Fa)for(W=0;W<3;W++){J=za[W];lb[jb]=J.u;lb[jb+1]=J.v;jb+=2}if(tb&&db!==undefined&&Fa)for(W=0;W<3;W++){J=db[W];$a[gb]=J.u;$a[gb+1]=J.v;gb+=2}if(ib){Ya[bb]=Pa;Ya[bb+1]=Pa+1;Ya[bb+2]=Pa+2;bb+=3;Wa[eb]=
-Pa;Wa[eb+1]=Pa+1;Wa[eb+2]=Pa;Wa[eb+3]=Pa+2;Wa[eb+4]=Pa+1;Wa[eb+5]=Pa+2;eb+=6;Pa+=3}}else if(E instanceof THREE.Face4){if(hb){Z=pb[E.a].position;fa=pb[E.b].position;oa=pb[E.c].position;Na=pb[E.d].position;Va[Qa]=Z.x;Va[Qa+1]=Z.y;Va[Qa+2]=Z.z;Va[Qa+3]=fa.x;Va[Qa+4]=fa.y;Va[Qa+5]=fa.z;Va[Qa+6]=oa.x;Va[Qa+7]=oa.y;Va[Qa+8]=oa.z;Va[Qa+9]=Na.x;Va[Qa+10]=Na.y;Va[Qa+11]=Na.z;Qa+=12}if(Ma)for(fb in Ma){S=Ma[fb];if(S.dirty){$=S.offset;if(S.size===1){S.array[$+0]=S.value[E.a];S.array[$+1]=S.value[E.b];S.array[$+
-2]=S.value[E.c];S.array[$+2]=S.value[E.d];S.offset+=4}else{Z=S.value[E.a];fa=S.value[E.b];oa=S.value[E.c];Na=S.value[E.d];if(S.size===2){S.array[$+0]=Z.x;S.array[$+1]=Z.y;S.array[$+2]=fa.x;S.array[$+3]=fa.y;S.array[$+4]=oa.x;S.array[$+5]=oa.y;S.array[$+6]=Na.x;S.array[$+7]=Na.y;S.offset+=8}else if(S.size===3){S.array[$+0]=Z.x;S.array[$+1]=Z.y;S.array[$+2]=Z.z;S.array[$+3]=fa.x;S.array[$+4]=fa.y;S.array[$+5]=fa.z;S.array[$+6]=oa.x;S.array[$+7]=oa.y;S.array[$+8]=oa.z;S.array[$+9]=Na.x;S.array[$+10]=
-Na.y;S.array[$+11]=Na.z;S.offset+=12}else{S.array[$+0]=Z.x;S.array[$+1]=Z.y;S.array[$+2]=Z.z;S.array[$+3]=Z.w;S.array[$+4]=fa.x;S.array[$+5]=fa.y;S.array[$+6]=fa.z;S.array[$+7]=fa.w;S.array[$+8]=oa.x;S.array[$+9]=oa.y;S.array[$+10]=oa.z;S.array[$+11]=oa.w;S.array[$+12]=Na.x;S.array[$+13]=Na.y;S.array[$+14]=Na.z;S.array[$+15]=Na.w;S.offset+=16}}}}if(xb){$=0;for(S=mb.length;$<S;$++){Z=mb[$].vertices[E.a].position;fa=mb[$].vertices[E.b].position;oa=mb[$].vertices[E.c].position;Na=mb[$].vertices[E.d].position;
-Sa=U[$];Sa[Ra+0]=Z.x;Sa[Ra+1]=Z.y;Sa[Ra+2]=Z.z;Sa[Ra+3]=fa.x;Sa[Ra+4]=fa.y;Sa[Ra+5]=fa.z;Sa[Ra+6]=oa.x;Sa[Ra+7]=oa.y;Sa[Ra+8]=oa.z;Sa[Ra+9]=Na.x;Sa[Ra+10]=Na.y;Sa[Ra+11]=Na.z}Ra+=12}if(nb.length){Z=nb[E.a];fa=nb[E.b];oa=nb[E.c];Na=nb[E.d];ha[R]=Z.x;ha[R+1]=Z.y;ha[R+2]=Z.z;ha[R+3]=Z.w;ha[R+4]=fa.x;ha[R+5]=fa.y;ha[R+6]=fa.z;ha[R+7]=fa.w;ha[R+8]=oa.x;ha[R+9]=oa.y;ha[R+10]=oa.z;ha[R+11]=oa.w;ha[R+12]=Na.x;ha[R+13]=Na.y;ha[R+14]=Na.z;ha[R+15]=Na.w;Z=sb[E.a];fa=sb[E.b];oa=sb[E.c];Na=sb[E.d];xa[R]=Z.x;xa[R+
-1]=Z.y;xa[R+2]=Z.z;xa[R+3]=Z.w;xa[R+4]=fa.x;xa[R+5]=fa.y;xa[R+6]=fa.z;xa[R+7]=fa.w;xa[R+8]=oa.x;xa[R+9]=oa.y;xa[R+10]=oa.z;xa[R+11]=oa.w;xa[R+12]=Na.x;xa[R+13]=Na.y;xa[R+14]=Na.z;xa[R+15]=Na.w;Z=qb[E.a];fa=qb[E.b];oa=qb[E.c];Na=qb[E.d];Y[R]=Z.x;Y[R+1]=Z.y;Y[R+2]=Z.z;Y[R+3]=1;Y[R+4]=fa.x;Y[R+5]=fa.y;Y[R+6]=fa.z;Y[R+7]=1;Y[R+8]=oa.x;Y[R+9]=oa.y;Y[R+10]=oa.z;Y[R+11]=1;Y[R+12]=Na.x;Y[R+13]=Na.y;Y[R+14]=Na.z;Y[R+15]=1;Z=rb[E.a];fa=rb[E.b];oa=rb[E.c];E=rb[E.d];ya[R]=Z.x;ya[R+1]=Z.y;ya[R+2]=Z.z;ya[R+3]=
-1;ya[R+4]=fa.x;ya[R+5]=fa.y;ya[R+6]=fa.z;ya[R+7]=1;ya[R+8]=oa.x;ya[R+9]=oa.y;ya[R+10]=oa.z;ya[R+11]=1;ya[R+12]=E.x;ya[R+13]=E.y;ya[R+14]=E.z;ya[R+15]=1;R+=16}if(wb&&La){if(X.length==4&&La==THREE.VertexColors){E=X[0];Z=X[1];fa=X[2];X=X[3]}else X=fa=Z=E=qa;na[Da]=E.r;na[Da+1]=E.g;na[Da+2]=E.b;na[Da+3]=Z.r;na[Da+4]=Z.g;na[Da+5]=Z.b;na[Da+6]=fa.r;na[Da+7]=fa.g;na[Da+8]=fa.b;na[Da+9]=X.r;na[Da+10]=X.g;na[Da+11]=X.b;Da+=12}if(vb&&Za.hasTangents){X=W[0];qa=W[1];E=W[2];W=W[3];ja[Oa]=X.x;ja[Oa+1]=X.y;ja[Oa+
+Pa;Wa[eb+1]=Pa+1;Wa[eb+2]=Pa;Wa[eb+3]=Pa+2;Wa[eb+4]=Pa+1;Wa[eb+5]=Pa+2;eb+=6;Pa+=3}}else if(E instanceof THREE.Face4){if(hb){Z=pb[E.a].position;fa=pb[E.b].position;oa=pb[E.c].position;Na=pb[E.d].position;Va[Qa]=Z.x;Va[Qa+1]=Z.y;Va[Qa+2]=Z.z;Va[Qa+3]=fa.x;Va[Qa+4]=fa.y;Va[Qa+5]=fa.z;Va[Qa+6]=oa.x;Va[Qa+7]=oa.y;Va[Qa+8]=oa.z;Va[Qa+9]=Na.x;Va[Qa+10]=Na.y;Va[Qa+11]=Na.z;Qa+=12}if(Ma)for(fb in Ma){R=Ma[fb];if(R.dirty){$=R.offset;if(R.size===1){R.array[$+0]=R.value[E.a];R.array[$+1]=R.value[E.b];R.array[$+
+2]=R.value[E.c];R.array[$+2]=R.value[E.d];R.offset+=4}else{Z=R.value[E.a];fa=R.value[E.b];oa=R.value[E.c];Na=R.value[E.d];if(R.size===2){R.array[$+0]=Z.x;R.array[$+1]=Z.y;R.array[$+2]=fa.x;R.array[$+3]=fa.y;R.array[$+4]=oa.x;R.array[$+5]=oa.y;R.array[$+6]=Na.x;R.array[$+7]=Na.y;R.offset+=8}else if(R.size===3){R.array[$+0]=Z.x;R.array[$+1]=Z.y;R.array[$+2]=Z.z;R.array[$+3]=fa.x;R.array[$+4]=fa.y;R.array[$+5]=fa.z;R.array[$+6]=oa.x;R.array[$+7]=oa.y;R.array[$+8]=oa.z;R.array[$+9]=Na.x;R.array[$+10]=
+Na.y;R.array[$+11]=Na.z;R.offset+=12}else{R.array[$+0]=Z.x;R.array[$+1]=Z.y;R.array[$+2]=Z.z;R.array[$+3]=Z.w;R.array[$+4]=fa.x;R.array[$+5]=fa.y;R.array[$+6]=fa.z;R.array[$+7]=fa.w;R.array[$+8]=oa.x;R.array[$+9]=oa.y;R.array[$+10]=oa.z;R.array[$+11]=oa.w;R.array[$+12]=Na.x;R.array[$+13]=Na.y;R.array[$+14]=Na.z;R.array[$+15]=Na.w;R.offset+=16}}}}if(xb){$=0;for(R=mb.length;$<R;$++){Z=mb[$].vertices[E.a].position;fa=mb[$].vertices[E.b].position;oa=mb[$].vertices[E.c].position;Na=mb[$].vertices[E.d].position;
+Sa=U[$];Sa[Ra+0]=Z.x;Sa[Ra+1]=Z.y;Sa[Ra+2]=Z.z;Sa[Ra+3]=fa.x;Sa[Ra+4]=fa.y;Sa[Ra+5]=fa.z;Sa[Ra+6]=oa.x;Sa[Ra+7]=oa.y;Sa[Ra+8]=oa.z;Sa[Ra+9]=Na.x;Sa[Ra+10]=Na.y;Sa[Ra+11]=Na.z}Ra+=12}if(nb.length){Z=nb[E.a];fa=nb[E.b];oa=nb[E.c];Na=nb[E.d];ha[S]=Z.x;ha[S+1]=Z.y;ha[S+2]=Z.z;ha[S+3]=Z.w;ha[S+4]=fa.x;ha[S+5]=fa.y;ha[S+6]=fa.z;ha[S+7]=fa.w;ha[S+8]=oa.x;ha[S+9]=oa.y;ha[S+10]=oa.z;ha[S+11]=oa.w;ha[S+12]=Na.x;ha[S+13]=Na.y;ha[S+14]=Na.z;ha[S+15]=Na.w;Z=sb[E.a];fa=sb[E.b];oa=sb[E.c];Na=sb[E.d];xa[S]=Z.x;xa[S+
+1]=Z.y;xa[S+2]=Z.z;xa[S+3]=Z.w;xa[S+4]=fa.x;xa[S+5]=fa.y;xa[S+6]=fa.z;xa[S+7]=fa.w;xa[S+8]=oa.x;xa[S+9]=oa.y;xa[S+10]=oa.z;xa[S+11]=oa.w;xa[S+12]=Na.x;xa[S+13]=Na.y;xa[S+14]=Na.z;xa[S+15]=Na.w;Z=qb[E.a];fa=qb[E.b];oa=qb[E.c];Na=qb[E.d];Y[S]=Z.x;Y[S+1]=Z.y;Y[S+2]=Z.z;Y[S+3]=1;Y[S+4]=fa.x;Y[S+5]=fa.y;Y[S+6]=fa.z;Y[S+7]=1;Y[S+8]=oa.x;Y[S+9]=oa.y;Y[S+10]=oa.z;Y[S+11]=1;Y[S+12]=Na.x;Y[S+13]=Na.y;Y[S+14]=Na.z;Y[S+15]=1;Z=rb[E.a];fa=rb[E.b];oa=rb[E.c];E=rb[E.d];ya[S]=Z.x;ya[S+1]=Z.y;ya[S+2]=Z.z;ya[S+3]=
+1;ya[S+4]=fa.x;ya[S+5]=fa.y;ya[S+6]=fa.z;ya[S+7]=1;ya[S+8]=oa.x;ya[S+9]=oa.y;ya[S+10]=oa.z;ya[S+11]=1;ya[S+12]=E.x;ya[S+13]=E.y;ya[S+14]=E.z;ya[S+15]=1;S+=16}if(wb&&La){if(X.length==4&&La==THREE.VertexColors){E=X[0];Z=X[1];fa=X[2];X=X[3]}else X=fa=Z=E=qa;na[Da]=E.r;na[Da+1]=E.g;na[Da+2]=E.b;na[Da+3]=Z.r;na[Da+4]=Z.g;na[Da+5]=Z.b;na[Da+6]=fa.r;na[Da+7]=fa.g;na[Da+8]=fa.b;na[Da+9]=X.r;na[Da+10]=X.g;na[Da+11]=X.b;Da+=12}if(vb&&Za.hasTangents){X=W[0];qa=W[1];E=W[2];W=W[3];ja[Oa]=X.x;ja[Oa+1]=X.y;ja[Oa+
 2]=X.z;ja[Oa+3]=X.w;ja[Oa+4]=qa.x;ja[Oa+5]=qa.y;ja[Oa+6]=qa.z;ja[Oa+7]=qa.w;ja[Oa+8]=E.x;ja[Oa+9]=E.y;ja[Oa+10]=E.z;ja[Oa+11]=E.w;ja[Oa+12]=W.x;ja[Oa+13]=W.y;ja[Oa+14]=W.z;ja[Oa+15]=W.w;Oa+=16}if(ub&&ta)if(J.length==4&&kb)for(W=0;W<4;W++){K=J[W];T[cb]=K.x;T[cb+1]=K.y;T[cb+2]=K.z;cb+=3}else for(W=0;W<4;W++){T[cb]=K.x;T[cb+1]=K.y;T[cb+2]=K.z;cb+=3}if(tb&&za!==undefined&&Fa)for(W=0;W<4;W++){J=za[W];lb[jb]=J.u;lb[jb+1]=J.v;jb+=2}if(tb&&db!==undefined&&Fa)for(W=0;W<4;W++){J=db[W];$a[gb]=J.u;$a[gb+1]=J.v;
-gb+=2}if(ib){Ya[bb]=Pa;Ya[bb+1]=Pa+1;Ya[bb+2]=Pa+3;Ya[bb+3]=Pa+1;Ya[bb+4]=Pa+2;Ya[bb+5]=Pa+3;bb+=6;Wa[eb]=Pa;Wa[eb+1]=Pa+1;Wa[eb+2]=Pa;Wa[eb+3]=Pa+3;Wa[eb+4]=Pa+1;Wa[eb+5]=Pa+2;Wa[eb+6]=Pa+2;Wa[eb+7]=Pa+3;eb+=8;Pa+=4}}}if(ob){G=0;for(I=ob.length;G<I;G++){Ya[bb]=ob[G].a;Ya[bb+1]=ob[G].b;Ya[bb+2]=ob[G].c;Ya[bb+3]=ob[G].a;Ya[bb+4]=ob[G].c;Ya[bb+5]=ob[G].d;bb+=6}}if(hb){e.bindBuffer(e.ARRAY_BUFFER,w.__webglVertexBuffer);e.bufferData(e.ARRAY_BUFFER,Va,P)}if(Ma)for(fb in Ma){S=Ma[fb];if(S.dirty){e.bindBuffer(e.ARRAY_BUFFER,
-S.buffer);e.bufferData(e.ARRAY_BUFFER,S.array,P)}}if(xb){$=0;for(S=mb.length;$<S;$++){e.bindBuffer(e.ARRAY_BUFFER,w.__webglMorphTargetsBuffers[$]);e.bufferData(e.ARRAY_BUFFER,U[$],P)}}if(wb&&Da>0){e.bindBuffer(e.ARRAY_BUFFER,w.__webglColorBuffer);e.bufferData(e.ARRAY_BUFFER,na,P)}if(ub){e.bindBuffer(e.ARRAY_BUFFER,w.__webglNormalBuffer);e.bufferData(e.ARRAY_BUFFER,T,P)}if(vb&&Za.hasTangents){e.bindBuffer(e.ARRAY_BUFFER,w.__webglTangentBuffer);e.bufferData(e.ARRAY_BUFFER,ja,P)}if(tb&&jb>0){e.bindBuffer(e.ARRAY_BUFFER,
-w.__webglUVBuffer);e.bufferData(e.ARRAY_BUFFER,lb,P)}if(tb&&gb>0){e.bindBuffer(e.ARRAY_BUFFER,w.__webglUV2Buffer);e.bufferData(e.ARRAY_BUFFER,$a,P)}if(ib){e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,w.__webglFaceBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,Ya,P);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,w.__webglLineBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,Wa,P)}if(R>0){e.bindBuffer(e.ARRAY_BUFFER,w.__webglSkinVertexABuffer);e.bufferData(e.ARRAY_BUFFER,Y,P);e.bindBuffer(e.ARRAY_BUFFER,w.__webglSkinVertexBBuffer);
-e.bufferData(e.ARRAY_BUFFER,ya,P);e.bindBuffer(e.ARRAY_BUFFER,w.__webglSkinIndicesBuffer);e.bufferData(e.ARRAY_BUFFER,xa,P);e.bindBuffer(e.ARRAY_BUFFER,w.__webglSkinWeightsBuffer);e.bufferData(e.ARRAY_BUFFER,ha,P)}}}z.__dirtyVertices=!1;z.__dirtyMorphTargets=!1;z.__dirtyElements=!1;z.__dirtyUvs=!1;z.__dirtyNormals=!1;z.__dirtyTangents=!1;z.__dirtyColors=!1}else if(m instanceof THREE.Ribbon){z=m.geometry;if(z.__dirtyVertices||z.__dirtyColors){m=z;C=e.DYNAMIC_DRAW;La=m.vertices;w=m.colors;ta=La.length;
-P=w.length;za=m.__vertexArray;G=m.__colorArray;db=m.__dirtyColors;if(m.__dirtyVertices){for(I=0;I<ta;I++){Fa=La[I].position;x=I*3;za[x]=Fa.x;za[x+1]=Fa.y;za[x+2]=Fa.z}e.bindBuffer(e.ARRAY_BUFFER,m.__webglVertexBuffer);e.bufferData(e.ARRAY_BUFFER,za,C)}if(db){for(I=0;I<P;I++){color=w[I];x=I*3;G[x]=color.r;G[x+1]=color.g;G[x+2]=color.b}e.bindBuffer(e.ARRAY_BUFFER,m.__webglColorBuffer);e.bufferData(e.ARRAY_BUFFER,G,C)}}z.__dirtyVertices=!1;z.__dirtyColors=!1}else if(m instanceof THREE.Line){z=m.geometry;
-if(z.__dirtyVertices||z.__dirtyColors){m=z;C=e.DYNAMIC_DRAW;La=m.vertices;w=m.colors;ta=La.length;P=w.length;za=m.__vertexArray;G=m.__colorArray;db=m.__dirtyColors;if(m.__dirtyVertices){for(I=0;I<ta;I++){Fa=La[I].position;x=I*3;za[x]=Fa.x;za[x+1]=Fa.y;za[x+2]=Fa.z}e.bindBuffer(e.ARRAY_BUFFER,m.__webglVertexBuffer);e.bufferData(e.ARRAY_BUFFER,za,C)}if(db){for(I=0;I<P;I++){color=w[I];x=I*3;G[x]=color.r;G[x+1]=color.g;G[x+2]=color.b}e.bindBuffer(e.ARRAY_BUFFER,m.__webglColorBuffer);e.bufferData(e.ARRAY_BUFFER,
-G,C)}}z.__dirtyVertices=!1;z.__dirtyColors=!1}else if(m instanceof THREE.ParticleSystem){z=m.geometry;(z.__dirtyVertices||z.__dirtyColors||m.sortParticles)&&d(z,e.DYNAMIC_DRAW,m);z.__dirtyVertices=!1;z.__dirtyColors=!1}}function V(m){function C(qa){var W=[];z=0;for(w=qa.length;z<w;z++)qa[z]==undefined?W.push("undefined"):W.push(qa[z].id);return W.join("_")}var z,w,x,P,G,I,J,E,K={},X=m.morphTargets!==undefined?m.morphTargets.length:0;m.geometryGroups={};x=0;for(P=m.faces.length;x<P;x++){G=m.faces[x];
-I=G.materials;J=C(I);K[J]==undefined&&(K[J]={hash:J,counter:0});E=K[J].hash+"_"+K[J].counter;m.geometryGroups[E]==undefined&&(m.geometryGroups[E]={faces:[],materials:I,vertices:0,numMorphTargets:X});G=G instanceof THREE.Face3?3:4;if(m.geometryGroups[E].vertices+G>65535){K[J].counter+=1;E=K[J].hash+"_"+K[J].counter;m.geometryGroups[E]==undefined&&(m.geometryGroups[E]={faces:[],materials:I,vertices:0,numMorphTargets:X})}m.geometryGroups[E].faces.push(x);m.geometryGroups[E].vertices+=G}}function D(m,
-C,z){m.push({buffer:C,object:z,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function M(m){if(m!=Ca){switch(m){case THREE.AdditiveBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.SRC_ALPHA,e.ONE);break;case THREE.SubtractiveBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.ZERO,e.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.ZERO,e.SRC_COLOR);break;default:e.blendEquationSeparate(e.FUNC_ADD,e.FUNC_ADD);e.blendFuncSeparate(e.SRC_ALPHA,
+gb+=2}if(ib){Ya[bb]=Pa;Ya[bb+1]=Pa+1;Ya[bb+2]=Pa+3;Ya[bb+3]=Pa+1;Ya[bb+4]=Pa+2;Ya[bb+5]=Pa+3;bb+=6;Wa[eb]=Pa;Wa[eb+1]=Pa+1;Wa[eb+2]=Pa;Wa[eb+3]=Pa+3;Wa[eb+4]=Pa+1;Wa[eb+5]=Pa+2;Wa[eb+6]=Pa+2;Wa[eb+7]=Pa+3;eb+=8;Pa+=4}}}if(ob){G=0;for(I=ob.length;G<I;G++){Ya[bb]=ob[G].a;Ya[bb+1]=ob[G].b;Ya[bb+2]=ob[G].c;Ya[bb+3]=ob[G].a;Ya[bb+4]=ob[G].c;Ya[bb+5]=ob[G].d;bb+=6}}if(hb){e.bindBuffer(e.ARRAY_BUFFER,w.__webglVertexBuffer);e.bufferData(e.ARRAY_BUFFER,Va,P)}if(Ma)for(fb in Ma){R=Ma[fb];if(R.dirty){e.bindBuffer(e.ARRAY_BUFFER,
+R.buffer);e.bufferData(e.ARRAY_BUFFER,R.array,P);R.dirty=!1}}if(xb){$=0;for(R=mb.length;$<R;$++){e.bindBuffer(e.ARRAY_BUFFER,w.__webglMorphTargetsBuffers[$]);e.bufferData(e.ARRAY_BUFFER,U[$],P)}}if(wb&&Da>0){e.bindBuffer(e.ARRAY_BUFFER,w.__webglColorBuffer);e.bufferData(e.ARRAY_BUFFER,na,P)}if(ub){e.bindBuffer(e.ARRAY_BUFFER,w.__webglNormalBuffer);e.bufferData(e.ARRAY_BUFFER,T,P)}if(vb&&Za.hasTangents){e.bindBuffer(e.ARRAY_BUFFER,w.__webglTangentBuffer);e.bufferData(e.ARRAY_BUFFER,ja,P)}if(tb&&jb>
+0){e.bindBuffer(e.ARRAY_BUFFER,w.__webglUVBuffer);e.bufferData(e.ARRAY_BUFFER,lb,P)}if(tb&&gb>0){e.bindBuffer(e.ARRAY_BUFFER,w.__webglUV2Buffer);e.bufferData(e.ARRAY_BUFFER,$a,P)}if(ib){e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,w.__webglFaceBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,Ya,P);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,w.__webglLineBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,Wa,P)}if(S>0){e.bindBuffer(e.ARRAY_BUFFER,w.__webglSkinVertexABuffer);e.bufferData(e.ARRAY_BUFFER,Y,P);e.bindBuffer(e.ARRAY_BUFFER,
+w.__webglSkinVertexBBuffer);e.bufferData(e.ARRAY_BUFFER,ya,P);e.bindBuffer(e.ARRAY_BUFFER,w.__webglSkinIndicesBuffer);e.bufferData(e.ARRAY_BUFFER,xa,P);e.bindBuffer(e.ARRAY_BUFFER,w.__webglSkinWeightsBuffer);e.bufferData(e.ARRAY_BUFFER,ha,P)}}}z.__dirtyVertices=!1;z.__dirtyMorphTargets=!1;z.__dirtyElements=!1;z.__dirtyUvs=!1;z.__dirtyNormals=!1;z.__dirtyTangents=!1;z.__dirtyColors=!1}else if(m instanceof THREE.Ribbon){z=m.geometry;if(z.__dirtyVertices||z.__dirtyColors){m=z;C=e.DYNAMIC_DRAW;La=m.vertices;
+w=m.colors;ta=La.length;P=w.length;za=m.__vertexArray;G=m.__colorArray;db=m.__dirtyColors;if(m.__dirtyVertices){for(I=0;I<ta;I++){Fa=La[I].position;x=I*3;za[x]=Fa.x;za[x+1]=Fa.y;za[x+2]=Fa.z}e.bindBuffer(e.ARRAY_BUFFER,m.__webglVertexBuffer);e.bufferData(e.ARRAY_BUFFER,za,C)}if(db){for(I=0;I<P;I++){color=w[I];x=I*3;G[x]=color.r;G[x+1]=color.g;G[x+2]=color.b}e.bindBuffer(e.ARRAY_BUFFER,m.__webglColorBuffer);e.bufferData(e.ARRAY_BUFFER,G,C)}}z.__dirtyVertices=!1;z.__dirtyColors=!1}else if(m instanceof
+THREE.Line){z=m.geometry;if(z.__dirtyVertices||z.__dirtyColors){m=z;C=e.DYNAMIC_DRAW;La=m.vertices;w=m.colors;ta=La.length;P=w.length;za=m.__vertexArray;G=m.__colorArray;db=m.__dirtyColors;if(m.__dirtyVertices){for(I=0;I<ta;I++){Fa=La[I].position;x=I*3;za[x]=Fa.x;za[x+1]=Fa.y;za[x+2]=Fa.z}e.bindBuffer(e.ARRAY_BUFFER,m.__webglVertexBuffer);e.bufferData(e.ARRAY_BUFFER,za,C)}if(db){for(I=0;I<P;I++){color=w[I];x=I*3;G[x]=color.r;G[x+1]=color.g;G[x+2]=color.b}e.bindBuffer(e.ARRAY_BUFFER,m.__webglColorBuffer);
+e.bufferData(e.ARRAY_BUFFER,G,C)}}z.__dirtyVertices=!1;z.__dirtyColors=!1}else if(m instanceof THREE.ParticleSystem){z=m.geometry;(z.__dirtyVertices||z.__dirtyColors||m.sortParticles)&&d(z,e.DYNAMIC_DRAW,m);z.__dirtyVertices=!1;z.__dirtyColors=!1}}function V(m){function C(qa){var W=[];z=0;for(w=qa.length;z<w;z++)qa[z]==undefined?W.push("undefined"):W.push(qa[z].id);return W.join("_")}var z,w,x,P,G,I,J,E,K={},X=m.morphTargets!==undefined?m.morphTargets.length:0;m.geometryGroups={};x=0;for(P=m.faces.length;x<
+P;x++){G=m.faces[x];I=G.materials;J=C(I);K[J]==undefined&&(K[J]={hash:J,counter:0});E=K[J].hash+"_"+K[J].counter;m.geometryGroups[E]==undefined&&(m.geometryGroups[E]={faces:[],materials:I,vertices:0,numMorphTargets:X});G=G instanceof THREE.Face3?3:4;if(m.geometryGroups[E].vertices+G>65535){K[J].counter+=1;E=K[J].hash+"_"+K[J].counter;m.geometryGroups[E]==undefined&&(m.geometryGroups[E]={faces:[],materials:I,vertices:0,numMorphTargets:X})}m.geometryGroups[E].faces.push(x);m.geometryGroups[E].vertices+=
+G}}function D(m,C,z){m.push({buffer:C,object:z,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function M(m){if(m!=Ca){switch(m){case THREE.AdditiveBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.SRC_ALPHA,e.ONE);break;case THREE.SubtractiveBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.ZERO,e.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.ZERO,e.SRC_COLOR);break;default:e.blendEquationSeparate(e.FUNC_ADD,e.FUNC_ADD);e.blendFuncSeparate(e.SRC_ALPHA,
 e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA)}Ca=m}}function O(m,C,z){if((z.width&z.width-1)==0&&(z.height&z.height-1)==0){e.texParameteri(m,e.TEXTURE_WRAP_S,da(C.wrapS));e.texParameteri(m,e.TEXTURE_WRAP_T,da(C.wrapT));e.texParameteri(m,e.TEXTURE_MAG_FILTER,da(C.magFilter));e.texParameteri(m,e.TEXTURE_MIN_FILTER,da(C.minFilter));e.generateMipmap(m)}else{e.texParameteri(m,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE);e.texParameteri(m,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);e.texParameteri(m,e.TEXTURE_MAG_FILTER,
 Aa(C.magFilter));e.texParameteri(m,e.TEXTURE_MIN_FILTER,Aa(C.minFilter))}}function Q(m,C){if(m.needsUpdate){if(m.__webglInit){e.bindTexture(e.TEXTURE_2D,m.__webglTexture);e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,m.image)}else{m.__webglTexture=e.createTexture();e.bindTexture(e.TEXTURE_2D,m.__webglTexture);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,m.image);m.__webglInit=!0}O(e.TEXTURE_2D,m,m.image);e.bindTexture(e.TEXTURE_2D,null);m.needsUpdate=!1}e.activeTexture(e.TEXTURE0+
 C);e.bindTexture(e.TEXTURE_2D,m.__webglTexture)}function Ia(m){if(m&&!m.__webglFramebuffer){m.__webglFramebuffer=e.createFramebuffer();m.__webglRenderbuffer=e.createRenderbuffer();m.__webglTexture=e.createTexture();e.bindRenderbuffer(e.RENDERBUFFER,m.__webglRenderbuffer);e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_COMPONENT16,m.width,m.height);e.bindTexture(e.TEXTURE_2D,m.__webglTexture);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,da(m.wrapS));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,da(m.wrapT));

+ 2 - 0
src/renderers/WebGLRenderer.js

@@ -1530,6 +1530,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 					_gl.bindBuffer( _gl.ARRAY_BUFFER, customAttribute.buffer );
 					_gl.bufferData( _gl.ARRAY_BUFFER, customAttribute.array, hint );
 
+					customAttribute.dirty = false;
+
 				}
 
 			}