Browse Source

Merged with mrdoob.
Fixed so lens flares uses AdditiveBlending in example.

Mikael Emtinger 14 years ago
parent
commit
e88b1b4783
4 changed files with 48 additions and 56 deletions
  1. 22 23
      build/Three.js
  2. 22 22
      build/custom/ThreeWebGL.js
  3. 4 4
      examples/webgl_stencilLensFlare.html
  4. 0 7
      src/renderers/WebGLRenderer.js

+ 22 - 23
build/Three.js

@@ -278,29 +278,28 @@ P=w.length;za=m.__vertexArray;G=m.__colorArray;db=m.__dirtyColors;if(m.__dirtyVe
 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.AdditiveAlphaBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.SRC_ALPHA,e.ONE);break;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));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,da(m.magFilter));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,da(m.minFilter));e.texImage2D(e.TEXTURE_2D,0,da(m.format),m.width,m.height,0,da(m.format),da(m.type),null);e.bindFramebuffer(e.FRAMEBUFFER,m.__webglFramebuffer);e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,m.__webglTexture,0);e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,
-e.RENDERBUFFER,m.__webglRenderbuffer);e.bindTexture(e.TEXTURE_2D,null);e.bindRenderbuffer(e.RENDERBUFFER,null);e.bindFramebuffer(e.FRAMEBUFFER,null)}var C,z;if(m){C=m.__webglFramebuffer;z=m.width;m=m.height}else{C=null;z=Ga;m=la}if(C!=Ja){e.bindFramebuffer(e.FRAMEBUFFER,C);e.viewport(aa,ra,z,m);Ja=C}}function ua(m,C){var z;if(m=="fragment")z=e.createShader(e.FRAGMENT_SHADER);else m=="vertex"&&(z=e.createShader(e.VERTEX_SHADER));e.shaderSource(z,C);e.compileShader(z);if(!e.getShaderParameter(z,e.COMPILE_STATUS)){console.error(e.getShaderInfoLog(z));
-console.error(C);return null}return z}function Aa(m){switch(m){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return e.NEAREST;default:return e.LINEAR}}function da(m){switch(m){case THREE.RepeatWrapping:return e.REPEAT;case THREE.ClampToEdgeWrapping:return e.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return e.MIRRORED_REPEAT;case THREE.NearestFilter:return e.NEAREST;case THREE.NearestMipMapNearestFilter:return e.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return e.NEAREST_MIPMAP_LINEAR;
-case THREE.LinearFilter:return e.LINEAR;case THREE.LinearMipMapNearestFilter:return e.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return e.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return e.BYTE;case THREE.UnsignedByteType:return e.UNSIGNED_BYTE;case THREE.ShortType:return e.SHORT;case THREE.UnsignedShortType:return e.UNSIGNED_SHORT;case THREE.IntType:return e.INT;case THREE.UnsignedShortType:return e.UNSIGNED_INT;case THREE.FloatType:return e.FLOAT;case THREE.AlphaFormat:return e.ALPHA;
-case THREE.RGBFormat:return e.RGB;case THREE.RGBAFormat:return e.RGBA;case THREE.LuminanceFormat:return e.LUMINANCE;case THREE.LuminanceAlphaFormat:return e.LUMINANCE_ALPHA}return 0}var e,ga=document.createElement("canvas"),Ba=null,Ja=null,Ka=!0,wa=this,ea=null,va=null,Ca=null,ka=null,aa=0,ra=0,Ga=0,la=0,pa=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Ha=new THREE.Matrix4,Ta=new Float32Array(16),ab=new Float32Array(16),Xa=new THREE.Vector4,
-Ua={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},N=!0,ca=!0,sa=new THREE.Color(0),Ea=0;if(b){if(b.stencil!=undefined)N=b.stencil;if(b.antialias!==undefined)ca=b.antialias;b.clearColor!==undefined&&sa.setHex(b.clearColor);if(b.clearAlpha!==undefined)Ea=b.clearAlpha}this.maxMorphTargets=8;this.domElement=ga;this.autoClear=!0;this.sortObjects=!0;(function(m,C,z,w){try{if(!(e=ga.getContext("experimental-webgl",{antialias:m,stencil:w})))throw"Error creating WebGL context.";
-}catch(x){console.error(x)}e.clearColor(0,0,0,1);e.clearDepth(1);e.enable(e.DEPTH_TEST);e.depthFunc(e.LEQUAL);e.frontFace(e.CCW);e.cullFace(e.BACK);e.enable(e.CULL_FACE);e.enable(e.BLEND);e.blendEquation(e.FUNC_ADD);e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA);e.clearColor(C.r,C.g,C.b,z)})(ca,sa,Ea,N);this.context=e;if(N){var ia={};ia.vertices=new Float32Array(12);ia.faces=new Uint16Array(6);ia.darkness=0.5;ia.vertices[0]=-2;ia.vertices[1]=-1;ia.vertices[2]=-1;ia.vertices[3]=2;ia.vertices[4]=-1;
-ia.vertices[5]=-1;ia.vertices[6]=2;ia.vertices[7]=1;ia.vertices[8]=-1;ia.vertices[9]=-2;ia.vertices[10]=1;ia.vertices[11]=-1;ia.faces[0]=0;ia.faces[1]=1;ia.faces[2]=2;ia.faces[3]=0;ia.faces[4]=2;ia.faces[5]=3;ia.vertexBuffer=e.createBuffer();ia.elementBuffer=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,ia.vertexBuffer);e.bufferData(e.ARRAY_BUFFER,ia.vertices,e.STATIC_DRAW);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,ia.elementBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,ia.faces,e.STATIC_DRAW);ia.program=
-e.createProgram();e.attachShader(ia.program,ua("fragment",THREE.ShaderLib.shadowPost.fragmentShader));e.attachShader(ia.program,ua("vertex",THREE.ShaderLib.shadowPost.vertexShader));e.linkProgram(ia.program);ia.vertexLocation=e.getAttribLocation(ia.program,"position");ia.projectionLocation=e.getUniformLocation(ia.program,"projectionMatrix");ia.darknessLocation=e.getUniformLocation(ia.program,"darkness")}var ma={};ma.vertices=new Float32Array(16);ma.faces=new Uint16Array(6);ma.transparency=0.5;b=0;
-ma.vertices[b++]=-1;ma.vertices[b++]=-1;ma.vertices[b++]=0;ma.vertices[b++]=0;ma.vertices[b++]=1;ma.vertices[b++]=-1;ma.vertices[b++]=1;ma.vertices[b++]=0;ma.vertices[b++]=1;ma.vertices[b++]=1;ma.vertices[b++]=1;ma.vertices[b++]=1;ma.vertices[b++]=-1;ma.vertices[b++]=1;ma.vertices[b++]=0;ma.vertices[b++]=1;b=0;ma.faces[b++]=0;ma.faces[b++]=1;ma.faces[b++]=2;ma.faces[b++]=0;ma.faces[b++]=2;ma.faces[b++]=3;ma.vertexBuffer=e.createBuffer();ma.elementBuffer=e.createBuffer();ma.tempTexture=e.createTexture();
-ma.readBackPixels=new Uint8Array(1024);e.bindBuffer(e.ARRAY_BUFFER,ma.vertexBuffer);e.bufferData(e.ARRAY_BUFFER,ma.vertices,e.STATIC_DRAW);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,ma.elementBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,ma.faces,e.STATIC_DRAW);e.bindTexture(e.TEXTURE_2D,ma.tempTexture);e.texImage2D(e.TEXTURE_2D,0,e.RGB,16,16,0,e.RGB,e.UNSIGNED_BYTE,null);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);e.texParameteri(e.TEXTURE_2D,
-e.TEXTURE_MAG_FILTER,e.NEAREST);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST);ma.program=e.createProgram();e.attachShader(ma.program,ua("fragment",THREE.ShaderLib.lensFlare.fragmentShader));e.attachShader(ma.program,ua("vertex",THREE.ShaderLib.lensFlare.vertexShader));e.linkProgram(ma.program);ma.attributes={};ma.uniforms={};ma.attributes.vertex=e.getAttribLocation(ma.program,"position");ma.attributes.uv=e.getAttribLocation(ma.program,"UV");ma.uniforms.map=e.getUniformLocation(ma.program,
-"map");ma.uniforms.opacity=e.getUniformLocation(ma.program,"opacity");ma.uniforms.scale=e.getUniformLocation(ma.program,"scale");ma.uniforms.rotation=e.getUniformLocation(ma.program,"rotation");ma.uniforms.screenPosition=e.getUniformLocation(ma.program,"screenPosition");ma.uniforms.renderPink=e.getUniformLocation(ma.program,"renderPink");this.setSize=function(m,C){ga.width=m;ga.height=C;this.setViewport(0,0,ga.width,ga.height)};this.setViewport=function(m,C,z,w){aa=m;ra=C;Ga=z;la=w;e.viewport(aa,
-ra,Ga,la)};this.setScissor=function(m,C,z,w){e.scissor(m,C,z,w)};this.enableScissorTest=function(m){m?e.enable(e.SCISSOR_TEST):e.disable(e.SCISSOR_TEST)};this.enableDepthBufferWrite=function(m){Ka=m;e.depthMask(m)};this.setClearColorHex=function(m,C){var z=new THREE.Color(m);e.clearColor(z.r,z.g,z.b,C)};this.setClearColor=function(m,C){e.clearColor(m.r,m.g,m.b,C)};this.clear=function(){e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT|e.STENCIL_BUFFER_BIT)};this.setStencilShadowDarkness=function(m){ia.darkness=
-m};this.initMaterial=function(m,C,z,w){var x,P,G,I;if(m instanceof THREE.MeshDepthMaterial)c(m,THREE.ShaderLib.depth);else if(m instanceof THREE.ShadowVolumeDynamicMaterial)c(m,THREE.ShaderLib.shadowVolumeDynamic);else if(m instanceof THREE.MeshNormalMaterial)c(m,THREE.ShaderLib.normal);else if(m instanceof THREE.MeshBasicMaterial)c(m,THREE.ShaderLib.basic);else if(m instanceof THREE.MeshLambertMaterial)c(m,THREE.ShaderLib.lambert);else if(m instanceof THREE.MeshPhongMaterial)c(m,THREE.ShaderLib.phong);
-else if(m instanceof THREE.LineBasicMaterial)c(m,THREE.ShaderLib.basic);else m instanceof THREE.ParticleBasicMaterial&&c(m,THREE.ShaderLib.particle_basic);if(!m.program){var J,E,K;J=K=I=0;for(G=C.length;J<G;J++){E=C[J];E instanceof THREE.DirectionalLight&&K++;E instanceof THREE.PointLight&&I++}if(I+K<=4)C=K;else{C=Math.ceil(4*K/(I+K));I=4-C}I={directional:C,point:I};C=50;if(w!==undefined&&w instanceof THREE.SkinnedMesh)C=w.bones.length;G={map:m.map,envMap:m.envMap,lightMap:m.lightMap,vertexColors:m.vertexColors,
-fog:z,sizeAttenuation:m.sizeAttenuation,skinning:m.skinning,morphTargets:m.morphTargets,maxDirLights:I.directional,maxPointLights:I.point,maxBones:C};z=m.fragmentShader;I=m.vertexShader;C=e.createProgram();J=["#ifdef GL_ES\nprecision highp float;\n#endif","#define MAX_DIR_LIGHTS "+G.maxDirLights,"#define MAX_POINT_LIGHTS "+G.maxPointLights,G.fog?"#define USE_FOG":"",G.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",G.map?"#define USE_MAP":"",G.envMap?"#define USE_ENVMAP":"",G.lightMap?"#define USE_LIGHTMAP":
-"",G.vertexColors?"#define USE_COLOR":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");G=[e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+G.maxDirLights,"#define MAX_POINT_LIGHTS "+G.maxPointLights,"#define MAX_BONES "+G.maxBones,G.map?"#define USE_MAP":"",G.envMap?"#define USE_ENVMAP":"",G.lightMap?"#define USE_LIGHTMAP":"",G.vertexColors?"#define USE_COLOR":"",G.skinning?"#define USE_SKINNING":"",G.morphTargets?"#define USE_MORPHTARGETS":
-"",G.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
+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));
+e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,da(m.magFilter));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,da(m.minFilter));e.texImage2D(e.TEXTURE_2D,0,da(m.format),m.width,m.height,0,da(m.format),da(m.type),null);e.bindFramebuffer(e.FRAMEBUFFER,m.__webglFramebuffer);e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,m.__webglTexture,0);e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,m.__webglRenderbuffer);e.bindTexture(e.TEXTURE_2D,null);e.bindRenderbuffer(e.RENDERBUFFER,
+null);e.bindFramebuffer(e.FRAMEBUFFER,null)}var C,z;if(m){C=m.__webglFramebuffer;z=m.width;m=m.height}else{C=null;z=Ga;m=la}if(C!=Ja){e.bindFramebuffer(e.FRAMEBUFFER,C);e.viewport(aa,ra,z,m);Ja=C}}function ua(m,C){var z;if(m=="fragment")z=e.createShader(e.FRAGMENT_SHADER);else m=="vertex"&&(z=e.createShader(e.VERTEX_SHADER));e.shaderSource(z,C);e.compileShader(z);if(!e.getShaderParameter(z,e.COMPILE_STATUS)){console.error(e.getShaderInfoLog(z));console.error(C);return null}return z}function Aa(m){switch(m){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return e.NEAREST;
+default:return e.LINEAR}}function da(m){switch(m){case THREE.RepeatWrapping:return e.REPEAT;case THREE.ClampToEdgeWrapping:return e.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return e.MIRRORED_REPEAT;case THREE.NearestFilter:return e.NEAREST;case THREE.NearestMipMapNearestFilter:return e.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return e.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return e.LINEAR;case THREE.LinearMipMapNearestFilter:return e.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return e.LINEAR_MIPMAP_LINEAR;
+case THREE.ByteType:return e.BYTE;case THREE.UnsignedByteType:return e.UNSIGNED_BYTE;case THREE.ShortType:return e.SHORT;case THREE.UnsignedShortType:return e.UNSIGNED_SHORT;case THREE.IntType:return e.INT;case THREE.UnsignedShortType:return e.UNSIGNED_INT;case THREE.FloatType:return e.FLOAT;case THREE.AlphaFormat:return e.ALPHA;case THREE.RGBFormat:return e.RGB;case THREE.RGBAFormat:return e.RGBA;case THREE.LuminanceFormat:return e.LUMINANCE;case THREE.LuminanceAlphaFormat:return e.LUMINANCE_ALPHA}return 0}
+var e,ga=document.createElement("canvas"),Ba=null,Ja=null,Ka=!0,wa=this,ea=null,va=null,Ca=null,ka=null,aa=0,ra=0,Ga=0,la=0,pa=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Ha=new THREE.Matrix4,Ta=new Float32Array(16),ab=new Float32Array(16),Xa=new THREE.Vector4,Ua={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},N=!0,ca=!0,sa=new THREE.Color(0),Ea=0;if(b){if(b.stencil!=
+undefined)N=b.stencil;if(b.antialias!==undefined)ca=b.antialias;b.clearColor!==undefined&&sa.setHex(b.clearColor);if(b.clearAlpha!==undefined)Ea=b.clearAlpha}this.maxMorphTargets=8;this.domElement=ga;this.autoClear=!0;this.sortObjects=!0;(function(m,C,z,w){try{if(!(e=ga.getContext("experimental-webgl",{antialias:m,stencil:w})))throw"Error creating WebGL context.";}catch(x){console.error(x)}e.clearColor(0,0,0,1);e.clearDepth(1);e.enable(e.DEPTH_TEST);e.depthFunc(e.LEQUAL);e.frontFace(e.CCW);e.cullFace(e.BACK);
+e.enable(e.CULL_FACE);e.enable(e.BLEND);e.blendEquation(e.FUNC_ADD);e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA);e.clearColor(C.r,C.g,C.b,z)})(ca,sa,Ea,N);this.context=e;if(N){var ia={};ia.vertices=new Float32Array(12);ia.faces=new Uint16Array(6);ia.darkness=0.5;ia.vertices[0]=-2;ia.vertices[1]=-1;ia.vertices[2]=-1;ia.vertices[3]=2;ia.vertices[4]=-1;ia.vertices[5]=-1;ia.vertices[6]=2;ia.vertices[7]=1;ia.vertices[8]=-1;ia.vertices[9]=-2;ia.vertices[10]=1;ia.vertices[11]=-1;ia.faces[0]=0;ia.faces[1]=
+1;ia.faces[2]=2;ia.faces[3]=0;ia.faces[4]=2;ia.faces[5]=3;ia.vertexBuffer=e.createBuffer();ia.elementBuffer=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,ia.vertexBuffer);e.bufferData(e.ARRAY_BUFFER,ia.vertices,e.STATIC_DRAW);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,ia.elementBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,ia.faces,e.STATIC_DRAW);ia.program=e.createProgram();e.attachShader(ia.program,ua("fragment",THREE.ShaderLib.shadowPost.fragmentShader));e.attachShader(ia.program,ua("vertex",THREE.ShaderLib.shadowPost.vertexShader));
+e.linkProgram(ia.program);ia.vertexLocation=e.getAttribLocation(ia.program,"position");ia.projectionLocation=e.getUniformLocation(ia.program,"projectionMatrix");ia.darknessLocation=e.getUniformLocation(ia.program,"darkness")}var ma={};ma.vertices=new Float32Array(16);ma.faces=new Uint16Array(6);ma.transparency=0.5;b=0;ma.vertices[b++]=-1;ma.vertices[b++]=-1;ma.vertices[b++]=0;ma.vertices[b++]=0;ma.vertices[b++]=1;ma.vertices[b++]=-1;ma.vertices[b++]=1;ma.vertices[b++]=0;ma.vertices[b++]=1;ma.vertices[b++]=
+1;ma.vertices[b++]=1;ma.vertices[b++]=1;ma.vertices[b++]=-1;ma.vertices[b++]=1;ma.vertices[b++]=0;ma.vertices[b++]=1;b=0;ma.faces[b++]=0;ma.faces[b++]=1;ma.faces[b++]=2;ma.faces[b++]=0;ma.faces[b++]=2;ma.faces[b++]=3;ma.vertexBuffer=e.createBuffer();ma.elementBuffer=e.createBuffer();ma.tempTexture=e.createTexture();ma.readBackPixels=new Uint8Array(1024);e.bindBuffer(e.ARRAY_BUFFER,ma.vertexBuffer);e.bufferData(e.ARRAY_BUFFER,ma.vertices,e.STATIC_DRAW);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,ma.elementBuffer);
+e.bufferData(e.ELEMENT_ARRAY_BUFFER,ma.faces,e.STATIC_DRAW);e.bindTexture(e.TEXTURE_2D,ma.tempTexture);e.texImage2D(e.TEXTURE_2D,0,e.RGB,16,16,0,e.RGB,e.UNSIGNED_BYTE,null);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST);ma.program=e.createProgram();e.attachShader(ma.program,ua("fragment",THREE.ShaderLib.lensFlare.fragmentShader));
+e.attachShader(ma.program,ua("vertex",THREE.ShaderLib.lensFlare.vertexShader));e.linkProgram(ma.program);ma.attributes={};ma.uniforms={};ma.attributes.vertex=e.getAttribLocation(ma.program,"position");ma.attributes.uv=e.getAttribLocation(ma.program,"UV");ma.uniforms.map=e.getUniformLocation(ma.program,"map");ma.uniforms.opacity=e.getUniformLocation(ma.program,"opacity");ma.uniforms.scale=e.getUniformLocation(ma.program,"scale");ma.uniforms.rotation=e.getUniformLocation(ma.program,"rotation");ma.uniforms.screenPosition=
+e.getUniformLocation(ma.program,"screenPosition");ma.uniforms.renderPink=e.getUniformLocation(ma.program,"renderPink");this.setSize=function(m,C){ga.width=m;ga.height=C;this.setViewport(0,0,ga.width,ga.height)};this.setViewport=function(m,C,z,w){aa=m;ra=C;Ga=z;la=w;e.viewport(aa,ra,Ga,la)};this.setScissor=function(m,C,z,w){e.scissor(m,C,z,w)};this.enableScissorTest=function(m){m?e.enable(e.SCISSOR_TEST):e.disable(e.SCISSOR_TEST)};this.enableDepthBufferWrite=function(m){Ka=m;e.depthMask(m)};this.setClearColorHex=
+function(m,C){var z=new THREE.Color(m);e.clearColor(z.r,z.g,z.b,C)};this.setClearColor=function(m,C){e.clearColor(m.r,m.g,m.b,C)};this.clear=function(){e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT|e.STENCIL_BUFFER_BIT)};this.setStencilShadowDarkness=function(m){ia.darkness=m};this.initMaterial=function(m,C,z,w){var x,P,G,I;if(m instanceof THREE.MeshDepthMaterial)c(m,THREE.ShaderLib.depth);else if(m instanceof THREE.ShadowVolumeDynamicMaterial)c(m,THREE.ShaderLib.shadowVolumeDynamic);else if(m instanceof
+THREE.MeshNormalMaterial)c(m,THREE.ShaderLib.normal);else if(m instanceof THREE.MeshBasicMaterial)c(m,THREE.ShaderLib.basic);else if(m instanceof THREE.MeshLambertMaterial)c(m,THREE.ShaderLib.lambert);else if(m instanceof THREE.MeshPhongMaterial)c(m,THREE.ShaderLib.phong);else if(m instanceof THREE.LineBasicMaterial)c(m,THREE.ShaderLib.basic);else m instanceof THREE.ParticleBasicMaterial&&c(m,THREE.ShaderLib.particle_basic);if(!m.program){var J,E,K;J=K=I=0;for(G=C.length;J<G;J++){E=C[J];E instanceof
+THREE.DirectionalLight&&K++;E instanceof THREE.PointLight&&I++}if(I+K<=4)C=K;else{C=Math.ceil(4*K/(I+K));I=4-C}I={directional:C,point:I};C=50;if(w!==undefined&&w instanceof THREE.SkinnedMesh)C=w.bones.length;G={map:m.map,envMap:m.envMap,lightMap:m.lightMap,vertexColors:m.vertexColors,fog:z,sizeAttenuation:m.sizeAttenuation,skinning:m.skinning,morphTargets:m.morphTargets,maxDirLights:I.directional,maxPointLights:I.point,maxBones:C};z=m.fragmentShader;I=m.vertexShader;C=e.createProgram();J=["#ifdef GL_ES\nprecision highp float;\n#endif",
+"#define MAX_DIR_LIGHTS "+G.maxDirLights,"#define MAX_POINT_LIGHTS "+G.maxPointLights,G.fog?"#define USE_FOG":"",G.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",G.map?"#define USE_MAP":"",G.envMap?"#define USE_ENVMAP":"",G.lightMap?"#define USE_LIGHTMAP":"",G.vertexColors?"#define USE_COLOR":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");G=[e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+G.maxDirLights,"#define MAX_POINT_LIGHTS "+
+G.maxPointLights,"#define MAX_BONES "+G.maxBones,G.map?"#define USE_MAP":"",G.envMap?"#define USE_ENVMAP":"",G.lightMap?"#define USE_LIGHTMAP":"",G.vertexColors?"#define USE_COLOR":"",G.skinning?"#define USE_SKINNING":"",G.morphTargets?"#define USE_MORPHTARGETS":"",G.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
 e.attachShader(C,ua("fragment",J+z));e.attachShader(C,ua("vertex",G+I));e.linkProgram(C);e.getProgramParameter(C,e.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+e.getProgramParameter(C,e.VALIDATE_STATUS)+", gl error ["+e.getError()+"]");C.uniforms={};C.attributes={};m.program=C;z=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(x in m.uniforms)z.push(x);
 x=m.program;I=0;for(C=z.length;I<C;I++){J=z[I];x.uniforms[J]=e.getUniformLocation(x,J)}z=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];for(x=0;x<this.maxMorphTargets;x++)z.push("morphTarget"+x);for(P in m.attributes)z.push(P);x=m.program;I=0;for(C=z.length;I<C;I++){J=z[I];x.attributes[J]=e.getAttribLocation(x,J)}x=m.program.attributes;e.enableVertexAttribArray(x.position);x.color>=0&&e.enableVertexAttribArray(x.color);x.normal>=0&&e.enableVertexAttribArray(x.normal);
 x.tangent>=0&&e.enableVertexAttribArray(x.tangent);if(m.skinning&&x.skinVertexA>=0&&x.skinVertexB>=0&&x.skinIndex>=0&&x.skinWeight>=0){e.enableVertexAttribArray(x.skinVertexA);e.enableVertexAttribArray(x.skinVertexB);e.enableVertexAttribArray(x.skinIndex);e.enableVertexAttribArray(x.skinWeight)}for(P in m.attributes)x[P]>=0&&e.enableVertexAttribArray(x[P]);if(m.morphTargets){m.numSupportedMorphTargets=0;if(x.morphTarget0>=0){e.enableVertexAttribArray(x.morphTarget0);m.numSupportedMorphTargets++}if(x.morphTarget1>=

+ 22 - 22
build/custom/ThreeWebGL.js

@@ -226,28 +226,28 @@ u=n.length;R=e.__vertexArray;r=e.__colorArray;X=e.__dirtyColors;if(e.__dirtyVert
 k.__dirtyColors){e=k;m=b.DYNAMIC_DRAW;P=e.vertices;n=e.colors;N=P.length;u=n.length;R=e.__vertexArray;r=e.__colorArray;X=e.__dirtyColors;if(e.__dirtyVertices){for(L=0;L<N;L++){I=P[L].position;h=L*3;R[h]=I.x;R[h+1]=I.y;R[h+2]=I.z}b.bindBuffer(b.ARRAY_BUFFER,e.__webglVertexBuffer);b.bufferData(b.ARRAY_BUFFER,R,m)}if(X){for(L=0;L<u;L++){color=n[L];h=L*3;r[h]=color.r;r[h+1]=color.g;r[h+2]=color.b}b.bindBuffer(b.ARRAY_BUFFER,e.__webglColorBuffer);b.bufferData(b.ARRAY_BUFFER,r,m)}}k.__dirtyVertices=!1;
 k.__dirtyColors=!1}else if(e instanceof THREE.ParticleSystem){k=e.geometry;(k.__dirtyVertices||k.__dirtyColors||e.sortParticles)&&c(k,b.DYNAMIC_DRAW,e);k.__dirtyVertices=!1;k.__dirtyColors=!1}}function pa(e){function m(B){var L=[];k=0;for(h=B.length;k<h;k++)B[k]==undefined?L.push("undefined"):L.push(B[k].id);return L.join("_")}var k,h,n,u,r,t,q,A,s={},G=e.morphTargets!==undefined?e.morphTargets.length:0;e.geometryGroups={};n=0;for(u=e.faces.length;n<u;n++){r=e.faces[n];t=r.materials;q=m(t);s[q]==
 undefined&&(s[q]={hash:q,counter:0});A=s[q].hash+"_"+s[q].counter;e.geometryGroups[A]==undefined&&(e.geometryGroups[A]={faces:[],materials:t,vertices:0,numMorphTargets:G});r=r instanceof THREE.Face3?3:4;if(e.geometryGroups[A].vertices+r>65535){s[q].counter+=1;A=s[q].hash+"_"+s[q].counter;e.geometryGroups[A]==undefined&&(e.geometryGroups[A]={faces:[],materials:t,vertices:0,numMorphTargets:G})}e.geometryGroups[A].faces.push(n);e.geometryGroups[A].vertices+=r}}function Y(e,m,k){e.push({buffer:m,object:k,
-opaque:{list:[],count:0},transparent:{list:[],count:0}})}function qa(e){if(e!=aa){switch(e){case THREE.AdditiveAlphaBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.SRC_ALPHA,b.ONE);break;case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.SRC_ALPHA,b.ONE);break;case THREE.SubtractiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ZERO,b.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ZERO,b.SRC_COLOR);break;default:b.blendEquationSeparate(b.FUNC_ADD,
-b.FUNC_ADD);b.blendFuncSeparate(b.SRC_ALPHA,b.ONE_MINUS_SRC_ALPHA,b.ONE,b.ONE_MINUS_SRC_ALPHA)}aa=e}}function V(e,m,k){if((k.width&k.width-1)==0&&(k.height&k.height-1)==0){b.texParameteri(e,b.TEXTURE_WRAP_S,$(m.wrapS));b.texParameteri(e,b.TEXTURE_WRAP_T,$(m.wrapT));b.texParameteri(e,b.TEXTURE_MAG_FILTER,$(m.magFilter));b.texParameteri(e,b.TEXTURE_MIN_FILTER,$(m.minFilter));b.generateMipmap(e)}else{b.texParameteri(e,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(e,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);
-b.texParameteri(e,b.TEXTURE_MAG_FILTER,Da(m.magFilter));b.texParameteri(e,b.TEXTURE_MIN_FILTER,Da(m.minFilter))}}function E(e,m){if(e.needsUpdate){if(e.__webglInit){b.bindTexture(b.TEXTURE_2D,e.__webglTexture);b.texSubImage2D(b.TEXTURE_2D,0,0,0,b.RGBA,b.UNSIGNED_BYTE,e.image)}else{e.__webglTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,e.__webglTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.image);e.__webglInit=!0}V(b.TEXTURE_2D,e,e.image);b.bindTexture(b.TEXTURE_2D,null);
-e.needsUpdate=!1}b.activeTexture(b.TEXTURE0+m);b.bindTexture(b.TEXTURE_2D,e.__webglTexture)}function Fa(e){if(e&&!e.__webglFramebuffer){e.__webglFramebuffer=b.createFramebuffer();e.__webglRenderbuffer=b.createRenderbuffer();e.__webglTexture=b.createTexture();b.bindRenderbuffer(b.RENDERBUFFER,e.__webglRenderbuffer);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,e.width,e.height);b.bindTexture(b.TEXTURE_2D,e.__webglTexture);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,$(e.wrapS));b.texParameteri(b.TEXTURE_2D,
-b.TEXTURE_WRAP_T,$(e.wrapT));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,$(e.magFilter));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,$(e.minFilter));b.texImage2D(b.TEXTURE_2D,0,$(e.format),e.width,e.height,0,$(e.format),$(e.type),null);b.bindFramebuffer(b.FRAMEBUFFER,e.__webglFramebuffer);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,e.__webglTexture,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e.__webglRenderbuffer);b.bindTexture(b.TEXTURE_2D,
-null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null)}var m,k;if(e){m=e.__webglFramebuffer;k=e.width;e=e.height}else{m=null;k=ma;e=xa}if(m!=Ba){b.bindFramebuffer(b.FRAMEBUFFER,m);b.viewport(U,ra,k,e);Ba=m}}function ka(e,m){var k;if(e=="fragment")k=b.createShader(b.FRAGMENT_SHADER);else e=="vertex"&&(k=b.createShader(b.VERTEX_SHADER));b.shaderSource(k,m);b.compileShader(k);if(!b.getShaderParameter(k,b.COMPILE_STATUS)){console.error(b.getShaderInfoLog(k));console.error(m);
-return null}return k}function Da(e){switch(e){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return b.NEAREST;default:return b.LINEAR}}function $(e){switch(e){case THREE.RepeatWrapping:return b.REPEAT;case THREE.ClampToEdgeWrapping:return b.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return b.MIRRORED_REPEAT;case THREE.NearestFilter:return b.NEAREST;case THREE.NearestMipMapNearestFilter:return b.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return b.NEAREST_MIPMAP_LINEAR;
-case THREE.LinearFilter:return b.LINEAR;case THREE.LinearMipMapNearestFilter:return b.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return b.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return b.BYTE;case THREE.UnsignedByteType:return b.UNSIGNED_BYTE;case THREE.ShortType:return b.SHORT;case THREE.UnsignedShortType:return b.UNSIGNED_SHORT;case THREE.IntType:return b.INT;case THREE.UnsignedShortType:return b.UNSIGNED_INT;case THREE.FloatType:return b.FLOAT;case THREE.AlphaFormat:return b.ALPHA;
-case THREE.RGBFormat:return b.RGB;case THREE.RGBAFormat:return b.RGBA;case THREE.LuminanceFormat:return b.LUMINANCE;case THREE.LuminanceAlphaFormat:return b.LUMINANCE_ALPHA}return 0}var b,Q=document.createElement("canvas"),la=null,Ba=null,Ca=!0,ta=this,W=null,na=null,aa=null,oa=null,U=0,ra=0,ma=0,xa=0,ua=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],ca=new THREE.Matrix4,La=new Float32Array(16),Qa=new Float32Array(16),Ra=new THREE.Vector4,
-cb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},Na=!0,ab=!0,Ta=new THREE.Color(0),qb=0;if(a){if(a.stencil!=undefined)Na=a.stencil;if(a.antialias!==undefined)ab=a.antialias;a.clearColor!==undefined&&Ta.setHex(a.clearColor);if(a.clearAlpha!==undefined)qb=a.clearAlpha}this.maxMorphTargets=8;this.domElement=Q;this.autoClear=!0;this.sortObjects=!0;(function(e,m,k,h){try{if(!(b=Q.getContext("experimental-webgl",{antialias:e,stencil:h})))throw"Error creating WebGL context.";
-}catch(n){console.error(n)}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendEquation(b.FUNC_ADD);b.blendFunc(b.SRC_ALPHA,b.ONE_MINUS_SRC_ALPHA);b.clearColor(m.r,m.g,m.b,k)})(ab,Ta,qb,Na);this.context=b;if(Na){var S={};S.vertices=new Float32Array(12);S.faces=new Uint16Array(6);S.darkness=0.5;S.vertices[0]=-2;S.vertices[1]=-1;S.vertices[2]=-1;S.vertices[3]=2;S.vertices[4]=-1;S.vertices[5]=
--1;S.vertices[6]=2;S.vertices[7]=1;S.vertices[8]=-1;S.vertices[9]=-2;S.vertices[10]=1;S.vertices[11]=-1;S.faces[0]=0;S.faces[1]=1;S.faces[2]=2;S.faces[3]=0;S.faces[4]=2;S.faces[5]=3;S.vertexBuffer=b.createBuffer();S.elementBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,S.vertexBuffer);b.bufferData(b.ARRAY_BUFFER,S.vertices,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,S.elementBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,S.faces,b.STATIC_DRAW);S.program=b.createProgram();b.attachShader(S.program,
-ka("fragment",THREE.ShaderLib.shadowPost.fragmentShader));b.attachShader(S.program,ka("vertex",THREE.ShaderLib.shadowPost.vertexShader));b.linkProgram(S.program);S.vertexLocation=b.getAttribLocation(S.program,"position");S.projectionLocation=b.getUniformLocation(S.program,"projectionMatrix");S.darknessLocation=b.getUniformLocation(S.program,"darkness")}var H={};H.vertices=new Float32Array(16);H.faces=new Uint16Array(6);H.transparency=0.5;a=0;H.vertices[a++]=-1;H.vertices[a++]=-1;H.vertices[a++]=0;
-H.vertices[a++]=0;H.vertices[a++]=1;H.vertices[a++]=-1;H.vertices[a++]=1;H.vertices[a++]=0;H.vertices[a++]=1;H.vertices[a++]=1;H.vertices[a++]=1;H.vertices[a++]=1;H.vertices[a++]=-1;H.vertices[a++]=1;H.vertices[a++]=0;H.vertices[a++]=1;a=0;H.faces[a++]=0;H.faces[a++]=1;H.faces[a++]=2;H.faces[a++]=0;H.faces[a++]=2;H.faces[a++]=3;H.vertexBuffer=b.createBuffer();H.elementBuffer=b.createBuffer();H.tempTexture=b.createTexture();H.readBackPixels=new Uint8Array(1024);b.bindBuffer(b.ARRAY_BUFFER,H.vertexBuffer);
-b.bufferData(b.ARRAY_BUFFER,H.vertices,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,H.elementBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,H.faces,b.STATIC_DRAW);b.bindTexture(b.TEXTURE_2D,H.tempTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGB,16,16,0,b.RGB,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,
-b.NEAREST);H.program=b.createProgram();b.attachShader(H.program,ka("fragment",THREE.ShaderLib.lensFlare.fragmentShader));b.attachShader(H.program,ka("vertex",THREE.ShaderLib.lensFlare.vertexShader));b.linkProgram(H.program);H.attributes={};H.uniforms={};H.attributes.vertex=b.getAttribLocation(H.program,"position");H.attributes.uv=b.getAttribLocation(H.program,"UV");H.uniforms.map=b.getUniformLocation(H.program,"map");H.uniforms.opacity=b.getUniformLocation(H.program,"opacity");H.uniforms.scale=b.getUniformLocation(H.program,
-"scale");H.uniforms.rotation=b.getUniformLocation(H.program,"rotation");H.uniforms.screenPosition=b.getUniformLocation(H.program,"screenPosition");H.uniforms.renderPink=b.getUniformLocation(H.program,"renderPink");this.setSize=function(e,m){Q.width=e;Q.height=m;this.setViewport(0,0,Q.width,Q.height)};this.setViewport=function(e,m,k,h){U=e;ra=m;ma=k;xa=h;b.viewport(U,ra,ma,xa)};this.setScissor=function(e,m,k,h){b.scissor(e,m,k,h)};this.enableScissorTest=function(e){e?b.enable(b.SCISSOR_TEST):b.disable(b.SCISSOR_TEST)};
-this.enableDepthBufferWrite=function(e){Ca=e;b.depthMask(e)};this.setClearColorHex=function(e,m){var k=new THREE.Color(e);b.clearColor(k.r,k.g,k.b,m)};this.setClearColor=function(e,m){b.clearColor(e.r,e.g,e.b,m)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT|b.STENCIL_BUFFER_BIT)};this.setStencilShadowDarkness=function(e){S.darkness=e};this.initMaterial=function(e,m,k,h){var n,u,r,t;if(e instanceof THREE.MeshDepthMaterial)d(e,THREE.ShaderLib.depth);else if(e instanceof THREE.ShadowVolumeDynamicMaterial)d(e,
-THREE.ShaderLib.shadowVolumeDynamic);else if(e instanceof THREE.MeshNormalMaterial)d(e,THREE.ShaderLib.normal);else if(e instanceof THREE.MeshBasicMaterial)d(e,THREE.ShaderLib.basic);else if(e instanceof THREE.MeshLambertMaterial)d(e,THREE.ShaderLib.lambert);else if(e instanceof THREE.MeshPhongMaterial)d(e,THREE.ShaderLib.phong);else if(e instanceof THREE.LineBasicMaterial)d(e,THREE.ShaderLib.basic);else e instanceof THREE.ParticleBasicMaterial&&d(e,THREE.ShaderLib.particle_basic);if(!e.program){var q,
-A,s;q=s=t=0;for(r=m.length;q<r;q++){A=m[q];A instanceof THREE.DirectionalLight&&s++;A instanceof THREE.PointLight&&t++}if(t+s<=4)m=s;else{m=Math.ceil(4*s/(t+s));t=4-m}t={directional:m,point:t};m=50;if(h!==undefined&&h instanceof THREE.SkinnedMesh)m=h.bones.length;r={map:e.map,envMap:e.envMap,lightMap:e.lightMap,vertexColors:e.vertexColors,fog:k,sizeAttenuation:e.sizeAttenuation,skinning:e.skinning,morphTargets:e.morphTargets,maxDirLights:t.directional,maxPointLights:t.point,maxBones:m};k=e.fragmentShader;
-t=e.vertexShader;m=b.createProgram();q=["#ifdef GL_ES\nprecision highp float;\n#endif","#define MAX_DIR_LIGHTS "+r.maxDirLights,"#define MAX_POINT_LIGHTS "+r.maxPointLights,r.fog?"#define USE_FOG":"",r.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",r.map?"#define USE_MAP":"",r.envMap?"#define USE_ENVMAP":"",r.lightMap?"#define USE_LIGHTMAP":"",r.vertexColors?"#define USE_COLOR":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");r=[b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>
-0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+r.maxDirLights,"#define MAX_POINT_LIGHTS "+r.maxPointLights,"#define MAX_BONES "+r.maxBones,r.map?"#define USE_MAP":"",r.envMap?"#define USE_ENVMAP":"",r.lightMap?"#define USE_LIGHTMAP":"",r.vertexColors?"#define USE_COLOR":"",r.skinning?"#define USE_SKINNING":"",r.morphTargets?"#define USE_MORPHTARGETS":"",r.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
+opaque:{list:[],count:0},transparent:{list:[],count:0}})}function qa(e){if(e!=aa){switch(e){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.SRC_ALPHA,b.ONE);break;case THREE.SubtractiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ZERO,b.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ZERO,b.SRC_COLOR);break;default:b.blendEquationSeparate(b.FUNC_ADD,b.FUNC_ADD);b.blendFuncSeparate(b.SRC_ALPHA,b.ONE_MINUS_SRC_ALPHA,b.ONE,
+b.ONE_MINUS_SRC_ALPHA)}aa=e}}function V(e,m,k){if((k.width&k.width-1)==0&&(k.height&k.height-1)==0){b.texParameteri(e,b.TEXTURE_WRAP_S,$(m.wrapS));b.texParameteri(e,b.TEXTURE_WRAP_T,$(m.wrapT));b.texParameteri(e,b.TEXTURE_MAG_FILTER,$(m.magFilter));b.texParameteri(e,b.TEXTURE_MIN_FILTER,$(m.minFilter));b.generateMipmap(e)}else{b.texParameteri(e,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(e,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(e,b.TEXTURE_MAG_FILTER,Da(m.magFilter));b.texParameteri(e,
+b.TEXTURE_MIN_FILTER,Da(m.minFilter))}}function E(e,m){if(e.needsUpdate){if(e.__webglInit){b.bindTexture(b.TEXTURE_2D,e.__webglTexture);b.texSubImage2D(b.TEXTURE_2D,0,0,0,b.RGBA,b.UNSIGNED_BYTE,e.image)}else{e.__webglTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,e.__webglTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.image);e.__webglInit=!0}V(b.TEXTURE_2D,e,e.image);b.bindTexture(b.TEXTURE_2D,null);e.needsUpdate=!1}b.activeTexture(b.TEXTURE0+m);b.bindTexture(b.TEXTURE_2D,
+e.__webglTexture)}function Fa(e){if(e&&!e.__webglFramebuffer){e.__webglFramebuffer=b.createFramebuffer();e.__webglRenderbuffer=b.createRenderbuffer();e.__webglTexture=b.createTexture();b.bindRenderbuffer(b.RENDERBUFFER,e.__webglRenderbuffer);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,e.width,e.height);b.bindTexture(b.TEXTURE_2D,e.__webglTexture);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,$(e.wrapS));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,$(e.wrapT));b.texParameteri(b.TEXTURE_2D,
+b.TEXTURE_MAG_FILTER,$(e.magFilter));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,$(e.minFilter));b.texImage2D(b.TEXTURE_2D,0,$(e.format),e.width,e.height,0,$(e.format),$(e.type),null);b.bindFramebuffer(b.FRAMEBUFFER,e.__webglFramebuffer);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,e.__webglTexture,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e.__webglRenderbuffer);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);
+b.bindFramebuffer(b.FRAMEBUFFER,null)}var m,k;if(e){m=e.__webglFramebuffer;k=e.width;e=e.height}else{m=null;k=ma;e=xa}if(m!=Ba){b.bindFramebuffer(b.FRAMEBUFFER,m);b.viewport(U,ra,k,e);Ba=m}}function ka(e,m){var k;if(e=="fragment")k=b.createShader(b.FRAGMENT_SHADER);else e=="vertex"&&(k=b.createShader(b.VERTEX_SHADER));b.shaderSource(k,m);b.compileShader(k);if(!b.getShaderParameter(k,b.COMPILE_STATUS)){console.error(b.getShaderInfoLog(k));console.error(m);return null}return k}function Da(e){switch(e){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return b.NEAREST;
+default:return b.LINEAR}}function $(e){switch(e){case THREE.RepeatWrapping:return b.REPEAT;case THREE.ClampToEdgeWrapping:return b.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return b.MIRRORED_REPEAT;case THREE.NearestFilter:return b.NEAREST;case THREE.NearestMipMapNearestFilter:return b.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return b.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return b.LINEAR;case THREE.LinearMipMapNearestFilter:return b.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return b.LINEAR_MIPMAP_LINEAR;
+case THREE.ByteType:return b.BYTE;case THREE.UnsignedByteType:return b.UNSIGNED_BYTE;case THREE.ShortType:return b.SHORT;case THREE.UnsignedShortType:return b.UNSIGNED_SHORT;case THREE.IntType:return b.INT;case THREE.UnsignedShortType:return b.UNSIGNED_INT;case THREE.FloatType:return b.FLOAT;case THREE.AlphaFormat:return b.ALPHA;case THREE.RGBFormat:return b.RGB;case THREE.RGBAFormat:return b.RGBA;case THREE.LuminanceFormat:return b.LUMINANCE;case THREE.LuminanceAlphaFormat:return b.LUMINANCE_ALPHA}return 0}
+var b,Q=document.createElement("canvas"),la=null,Ba=null,Ca=!0,ta=this,W=null,na=null,aa=null,oa=null,U=0,ra=0,ma=0,xa=0,ua=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],ca=new THREE.Matrix4,La=new Float32Array(16),Qa=new Float32Array(16),Ra=new THREE.Vector4,cb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},Na=!0,ab=!0,Ta=new THREE.Color(0),qb=0;if(a){if(a.stencil!=
+undefined)Na=a.stencil;if(a.antialias!==undefined)ab=a.antialias;a.clearColor!==undefined&&Ta.setHex(a.clearColor);if(a.clearAlpha!==undefined)qb=a.clearAlpha}this.maxMorphTargets=8;this.domElement=Q;this.autoClear=!0;this.sortObjects=!0;(function(e,m,k,h){try{if(!(b=Q.getContext("experimental-webgl",{antialias:e,stencil:h})))throw"Error creating WebGL context.";}catch(n){console.error(n)}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);
+b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendEquation(b.FUNC_ADD);b.blendFunc(b.SRC_ALPHA,b.ONE_MINUS_SRC_ALPHA);b.clearColor(m.r,m.g,m.b,k)})(ab,Ta,qb,Na);this.context=b;if(Na){var S={};S.vertices=new Float32Array(12);S.faces=new Uint16Array(6);S.darkness=0.5;S.vertices[0]=-2;S.vertices[1]=-1;S.vertices[2]=-1;S.vertices[3]=2;S.vertices[4]=-1;S.vertices[5]=-1;S.vertices[6]=2;S.vertices[7]=1;S.vertices[8]=-1;S.vertices[9]=-2;S.vertices[10]=1;S.vertices[11]=-1;S.faces[0]=0;S.faces[1]=1;S.faces[2]=
+2;S.faces[3]=0;S.faces[4]=2;S.faces[5]=3;S.vertexBuffer=b.createBuffer();S.elementBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,S.vertexBuffer);b.bufferData(b.ARRAY_BUFFER,S.vertices,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,S.elementBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,S.faces,b.STATIC_DRAW);S.program=b.createProgram();b.attachShader(S.program,ka("fragment",THREE.ShaderLib.shadowPost.fragmentShader));b.attachShader(S.program,ka("vertex",THREE.ShaderLib.shadowPost.vertexShader));
+b.linkProgram(S.program);S.vertexLocation=b.getAttribLocation(S.program,"position");S.projectionLocation=b.getUniformLocation(S.program,"projectionMatrix");S.darknessLocation=b.getUniformLocation(S.program,"darkness")}var H={};H.vertices=new Float32Array(16);H.faces=new Uint16Array(6);H.transparency=0.5;a=0;H.vertices[a++]=-1;H.vertices[a++]=-1;H.vertices[a++]=0;H.vertices[a++]=0;H.vertices[a++]=1;H.vertices[a++]=-1;H.vertices[a++]=1;H.vertices[a++]=0;H.vertices[a++]=1;H.vertices[a++]=1;H.vertices[a++]=
+1;H.vertices[a++]=1;H.vertices[a++]=-1;H.vertices[a++]=1;H.vertices[a++]=0;H.vertices[a++]=1;a=0;H.faces[a++]=0;H.faces[a++]=1;H.faces[a++]=2;H.faces[a++]=0;H.faces[a++]=2;H.faces[a++]=3;H.vertexBuffer=b.createBuffer();H.elementBuffer=b.createBuffer();H.tempTexture=b.createTexture();H.readBackPixels=new Uint8Array(1024);b.bindBuffer(b.ARRAY_BUFFER,H.vertexBuffer);b.bufferData(b.ARRAY_BUFFER,H.vertices,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,H.elementBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,
+H.faces,b.STATIC_DRAW);b.bindTexture(b.TEXTURE_2D,H.tempTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGB,16,16,0,b.RGB,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);H.program=b.createProgram();b.attachShader(H.program,ka("fragment",THREE.ShaderLib.lensFlare.fragmentShader));b.attachShader(H.program,
+ka("vertex",THREE.ShaderLib.lensFlare.vertexShader));b.linkProgram(H.program);H.attributes={};H.uniforms={};H.attributes.vertex=b.getAttribLocation(H.program,"position");H.attributes.uv=b.getAttribLocation(H.program,"UV");H.uniforms.map=b.getUniformLocation(H.program,"map");H.uniforms.opacity=b.getUniformLocation(H.program,"opacity");H.uniforms.scale=b.getUniformLocation(H.program,"scale");H.uniforms.rotation=b.getUniformLocation(H.program,"rotation");H.uniforms.screenPosition=b.getUniformLocation(H.program,
+"screenPosition");H.uniforms.renderPink=b.getUniformLocation(H.program,"renderPink");this.setSize=function(e,m){Q.width=e;Q.height=m;this.setViewport(0,0,Q.width,Q.height)};this.setViewport=function(e,m,k,h){U=e;ra=m;ma=k;xa=h;b.viewport(U,ra,ma,xa)};this.setScissor=function(e,m,k,h){b.scissor(e,m,k,h)};this.enableScissorTest=function(e){e?b.enable(b.SCISSOR_TEST):b.disable(b.SCISSOR_TEST)};this.enableDepthBufferWrite=function(e){Ca=e;b.depthMask(e)};this.setClearColorHex=function(e,m){var k=new THREE.Color(e);
+b.clearColor(k.r,k.g,k.b,m)};this.setClearColor=function(e,m){b.clearColor(e.r,e.g,e.b,m)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT|b.STENCIL_BUFFER_BIT)};this.setStencilShadowDarkness=function(e){S.darkness=e};this.initMaterial=function(e,m,k,h){var n,u,r,t;if(e instanceof THREE.MeshDepthMaterial)d(e,THREE.ShaderLib.depth);else if(e instanceof THREE.ShadowVolumeDynamicMaterial)d(e,THREE.ShaderLib.shadowVolumeDynamic);else if(e instanceof THREE.MeshNormalMaterial)d(e,THREE.ShaderLib.normal);
+else if(e instanceof THREE.MeshBasicMaterial)d(e,THREE.ShaderLib.basic);else if(e instanceof THREE.MeshLambertMaterial)d(e,THREE.ShaderLib.lambert);else if(e instanceof THREE.MeshPhongMaterial)d(e,THREE.ShaderLib.phong);else if(e instanceof THREE.LineBasicMaterial)d(e,THREE.ShaderLib.basic);else e instanceof THREE.ParticleBasicMaterial&&d(e,THREE.ShaderLib.particle_basic);if(!e.program){var q,A,s;q=s=t=0;for(r=m.length;q<r;q++){A=m[q];A instanceof THREE.DirectionalLight&&s++;A instanceof THREE.PointLight&&
+t++}if(t+s<=4)m=s;else{m=Math.ceil(4*s/(t+s));t=4-m}t={directional:m,point:t};m=50;if(h!==undefined&&h instanceof THREE.SkinnedMesh)m=h.bones.length;r={map:e.map,envMap:e.envMap,lightMap:e.lightMap,vertexColors:e.vertexColors,fog:k,sizeAttenuation:e.sizeAttenuation,skinning:e.skinning,morphTargets:e.morphTargets,maxDirLights:t.directional,maxPointLights:t.point,maxBones:m};k=e.fragmentShader;t=e.vertexShader;m=b.createProgram();q=["#ifdef GL_ES\nprecision highp float;\n#endif","#define MAX_DIR_LIGHTS "+
+r.maxDirLights,"#define MAX_POINT_LIGHTS "+r.maxPointLights,r.fog?"#define USE_FOG":"",r.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",r.map?"#define USE_MAP":"",r.envMap?"#define USE_ENVMAP":"",r.lightMap?"#define USE_LIGHTMAP":"",r.vertexColors?"#define USE_COLOR":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");r=[b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+r.maxDirLights,"#define MAX_POINT_LIGHTS "+r.maxPointLights,
+"#define MAX_BONES "+r.maxBones,r.map?"#define USE_MAP":"",r.envMap?"#define USE_ENVMAP":"",r.lightMap?"#define USE_LIGHTMAP":"",r.vertexColors?"#define USE_COLOR":"",r.skinning?"#define USE_SKINNING":"",r.morphTargets?"#define USE_MORPHTARGETS":"",r.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
 b.attachShader(m,ka("fragment",q+k));b.attachShader(m,ka("vertex",r+t));b.linkProgram(m);b.getProgramParameter(m,b.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+b.getProgramParameter(m,b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");m.uniforms={};m.attributes={};e.program=m;k=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(n in e.uniforms)k.push(n);
 n=e.program;t=0;for(m=k.length;t<m;t++){q=k[t];n.uniforms[q]=b.getUniformLocation(n,q)}k=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];for(n=0;n<this.maxMorphTargets;n++)k.push("morphTarget"+n);for(u in e.attributes)k.push(u);u=e.program;n=k;k=0;for(t=n.length;k<t;k++){m=n[k];u.attributes[m]=b.getAttribLocation(u,m)}u=e.program.attributes;b.enableVertexAttribArray(u.position);u.color>=0&&b.enableVertexAttribArray(u.color);u.normal>=0&&b.enableVertexAttribArray(u.normal);
 u.tangent>=0&&b.enableVertexAttribArray(u.tangent);if(e.skinning&&u.skinVertexA>=0&&u.skinVertexB>=0&&u.skinIndex>=0&&u.skinWeight>=0){b.enableVertexAttribArray(u.skinVertexA);b.enableVertexAttribArray(u.skinVertexB);b.enableVertexAttribArray(u.skinIndex);b.enableVertexAttribArray(u.skinWeight)}if(e.morphTargets){e.numSupportedMorphTargets=0;if(u.morphTarget0>=0){b.enableVertexAttribArray(u.morphTarget0);e.numSupportedMorphTargets++}if(u.morphTarget1>=0){b.enableVertexAttribArray(u.morphTarget1);

+ 4 - 4
examples/webgl_stencilLensFlare.html

@@ -105,10 +105,10 @@
 				lightCube.visible = false;
 				scene.addChild( lightCube );
 
-				var lensFlare = new THREE.LensFlare( ImageUtils.loadTexture( "textures/lensflare0.png" ), 128, 0.0, THREE.AdditiveAlphaBlending );
-				lensFlare.add( ImageUtils.loadTexture( "textures/lensflare1.png" ), 256, 0.33, THREE.AdditiveAlphaBlending );
-				lensFlare.add( lensFlare.lensFlares[ 1 ].texture, 300, 0.66, THREE.AdditiveAlphaBlending );
-				lensFlare.add( lensFlare.lensFlares[ 1 ].texture, 400, 1.0, THREE.AdditiveAlphaBlending );
+				var lensFlare = new THREE.LensFlare( ImageUtils.loadTexture( "textures/lensflare0.png" ), 128, 0.0, THREE.AdditiveBlending );
+				lensFlare.add( ImageUtils.loadTexture( "textures/lensflare1.png" ), 256, 0.33, THREE.AdditiveBlending );
+				lensFlare.add( lensFlare.lensFlares[ 1 ].texture, 300, 0.66, THREE.AdditiveBlending );
+				lensFlare.add( lensFlare.lensFlares[ 1 ].texture, 400, 1.0, THREE.AdditiveBlending );
 				
 				lightCube.addChild( lensFlare );
 

+ 0 - 7
src/renderers/WebGLRenderer.js

@@ -3957,13 +3957,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			switch ( blending ) {
 
-				case THREE.AdditiveAlphaBlending:
-
-					_gl.blendEquation( _gl.FUNC_ADD );
-					_gl.blendFunc( _gl.SRC_ALPHA, _gl.ONE );
-
-					break;
-
 				case THREE.AdditiveBlending:
 
 					_gl.blendEquation( _gl.FUNC_ADD );