|
@@ -284,35 +284,35 @@ La=n.__vertexArray;J=n.__colorArray;bb=n.__dirtyColors;if(n.__dirtyVertices){for
|
|
|
(z.__dirtyVertices||z.__dirtyColors||n.sortParticles)&&d(z,e.DYNAMIC_DRAW,n);z.__dirtyVertices=!1;z.__dirtyColors=!1}}function S(n){function D(W){var ia=[];z=0;for(v=W.length;z<v;z++)W[z]==undefined?ia.push("undefined"):ia.push(W[z].id);return ia.join("_")}var z,v,A,M,J,G,U,Y,B={},K=n.morphTargets!==undefined?n.morphTargets.length:0;n.geometryGroups={};A=0;for(M=n.faces.length;A<M;A++){J=n.faces[A];G=J.materials;U=D(G);B[U]==undefined&&(B[U]={hash:U,counter:0});Y=B[U].hash+"_"+B[U].counter;n.geometryGroups[Y]==
|
|
|
undefined&&(n.geometryGroups[Y]={faces:[],materials:G,vertices:0,numMorphTargets:K});J=J instanceof THREE.Face3?3:4;if(n.geometryGroups[Y].vertices+J>65535){B[U].counter+=1;Y=B[U].hash+"_"+B[U].counter;n.geometryGroups[Y]==undefined&&(n.geometryGroups[Y]={faces:[],materials:G,vertices:0,numMorphTargets:K})}n.geometryGroups[Y].faces.push(A);n.geometryGroups[Y].vertices+=J}}function E(n,D,z){n.push({buffer:D,object:z,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function T(n){if(n!=sa){switch(n){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)}sa=n}}function O(n,D,z){if((z.width&z.width-1)==0&&(z.height&z.height-1)==0){e.texParameteri(n,e.TEXTURE_WRAP_S,X(D.wrapS));e.texParameteri(n,
|
|
|
-e.TEXTURE_WRAP_T,X(D.wrapT));e.texParameteri(n,e.TEXTURE_MAG_FILTER,X(D.magFilter));e.texParameteri(n,e.TEXTURE_MIN_FILTER,X(D.minFilter));e.generateMipmap(n)}else{e.texParameteri(n,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE);e.texParameteri(n,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);e.texParameteri(n,e.TEXTURE_MAG_FILTER,ga(D.magFilter));e.texParameteri(n,e.TEXTURE_MIN_FILTER,ga(D.minFilter))}}function Q(n,D){if(n.needsUpdate){if(n.__webglInit){e.bindTexture(e.TEXTURE_2D,n.__webglTexture);e.texSubImage2D(e.TEXTURE_2D,
|
|
|
-0,0,0,e.RGBA,e.UNSIGNED_BYTE,n.image)}else{n.__webglTexture=e.createTexture();e.bindTexture(e.TEXTURE_2D,n.__webglTexture);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n.image);n.__webglInit=!0}O(e.TEXTURE_2D,n,n.image);e.bindTexture(e.TEXTURE_2D,null);n.needsUpdate=!1}e.activeTexture(e.TEXTURE0+D);e.bindTexture(e.TEXTURE_2D,n.__webglTexture)}function ya(n){if(n&&!n.__webglFramebuffer){if(n.depthBuffer===undefined)n.depthBuffer=!0;if(n.stencilBuffer===undefined)n.stencilBuffer=!0;n.__webglFramebuffer=
|
|
|
-e.createFramebuffer();n.__webglRenderbuffer=e.createRenderbuffer();n.__webglTexture=e.createTexture();e.bindTexture(e.TEXTURE_2D,n.__webglTexture);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,X(n.wrapS));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,X(n.wrapT));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,X(n.magFilter));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,X(n.minFilter));e.texImage2D(e.TEXTURE_2D,0,X(n.format),n.width,n.height,0,X(n.format),X(n.type),null);e.bindRenderbuffer(e.RENDERBUFFER,
|
|
|
-n.__webglRenderbuffer);e.bindFramebuffer(e.FRAMEBUFFER,n.__webglFramebuffer);e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n.__webglTexture,0);if(n.depthBuffer&&!n.stencilBuffer){e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_COMPONENT16,n.width,n.height);e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,n.__webglRenderbuffer)}else if(n.depthBuffer&&n.stencilBuffer){e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_STENCIL,n.width,n.height);e.framebufferRenderbuffer(e.FRAMEBUFFER,
|
|
|
-e.DEPTH_STENCIL_ATTACHMENT,e.RENDERBUFFER,n.__webglRenderbuffer)}else e.renderbufferStorage(e.RENDERBUFFER,e.RGBA4,n.width,n.height);e.bindTexture(e.TEXTURE_2D,null);e.bindRenderbuffer(e.RENDERBUFFER,null);e.bindFramebuffer(e.FRAMEBUFFER,null)}var D,z;if(n){D=n.__webglFramebuffer;z=n.width;n=n.height}else{D=null;z=ea;n=Aa}if(D!=Da){e.bindFramebuffer(e.FRAMEBUFFER,D);e.viewport(ra,oa,z,n);Da=D}}function aa(n,D){var z;if(n=="fragment")z=e.createShader(e.FRAGMENT_SHADER);else n=="vertex"&&(z=e.createShader(e.VERTEX_SHADER));
|
|
|
-e.shaderSource(z,D);e.compileShader(z);if(!e.getShaderParameter(z,e.COMPILE_STATUS)){console.error(e.getShaderInfoLog(z));console.error(D);return null}return z}function ga(n){switch(n){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return e.NEAREST;default:return e.LINEAR}}function X(n){switch(n){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 ha=this,e,Ja=[],ta=null,Da=null,ca=!0,ua=null,da=null,sa=null,na=null,ra=0,oa=0,ea=0,Aa=0,Oa=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,
|
|
|
-new THREE.Vector4,new THREE.Vector4],fa=new THREE.Matrix4,xa=new Float32Array(16),Ma=new Float32Array(16),Qa=new THREE.Vector4,Ua={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}};b=b||{};var L=b.canvas!==undefined?b.canvas:document.createElement("canvas"),Z=b.stencil!==undefined?b.stencil:!0,ja=b.antialias!==undefined?b.antialias:!1,la=b.clearColor!==undefined?new THREE.Color(b.clearColor):new THREE.Color(0),Na=b.clearAlpha!==undefined?
|
|
|
-b.clearAlpha:0;this.data={vertices:0,faces:0,drawCalls:0};this.maxMorphTargets=8;this.domElement=L;this.autoClear=!0;this.sortObjects=!0;try{if(!(e=L.getContext("experimental-webgl",{antialias:ja,stencil:Z})))throw"Error creating WebGL context.";}catch(fb){console.error(fb)}console.log(navigator.userAgent+" | "+e.getParameter(e.VERSION)+" | "+e.getParameter(e.VENDOR)+" | "+e.getParameter(e.RENDERER)+" | "+e.getParameter(e.SHADING_LANGUAGE_VERSION));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(la.r,la.g,la.b,Na);this.context=e;var hb=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0;if(Z){var Ga={};Ga.vertices=new Float32Array(12);Ga.faces=new Uint16Array(6);Ga.darkness=0.5;Ga.vertices[0]=-20;Ga.vertices[1]=-20;Ga.vertices[2]=-1;Ga.vertices[3]=20;Ga.vertices[4]=-20;Ga.vertices[5]=-1;Ga.vertices[6]=20;
|
|
|
-Ga.vertices[7]=20;Ga.vertices[8]=-1;Ga.vertices[9]=-20;Ga.vertices[10]=20;Ga.vertices[11]=-1;Ga.faces[0]=0;Ga.faces[1]=1;Ga.faces[2]=2;Ga.faces[3]=0;Ga.faces[4]=2;Ga.faces[5]=3;Ga.vertexBuffer=e.createBuffer();Ga.elementBuffer=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,Ga.vertexBuffer);e.bufferData(e.ARRAY_BUFFER,Ga.vertices,e.STATIC_DRAW);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,Ga.elementBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,Ga.faces,e.STATIC_DRAW);Ga.program=e.createProgram();e.attachShader(Ga.program,
|
|
|
-aa("fragment",THREE.ShaderLib.shadowPost.fragmentShader));e.attachShader(Ga.program,aa("vertex",THREE.ShaderLib.shadowPost.vertexShader));e.linkProgram(Ga.program);Ga.vertexLocation=e.getAttribLocation(Ga.program,"position");Ga.projectionLocation=e.getUniformLocation(Ga.program,"projectionMatrix");Ga.darknessLocation=e.getUniformLocation(Ga.program,"darkness")}var ka={};ka.vertices=new Float32Array(16);ka.faces=new Uint16Array(6);b=0;ka.vertices[b++]=-1;ka.vertices[b++]=-1;ka.vertices[b++]=0;ka.vertices[b++]=
|
|
|
-0;ka.vertices[b++]=1;ka.vertices[b++]=-1;ka.vertices[b++]=1;ka.vertices[b++]=0;ka.vertices[b++]=1;ka.vertices[b++]=1;ka.vertices[b++]=1;ka.vertices[b++]=1;ka.vertices[b++]=-1;ka.vertices[b++]=1;ka.vertices[b++]=0;ka.vertices[b++]=1;b=0;ka.faces[b++]=0;ka.faces[b++]=1;ka.faces[b++]=2;ka.faces[b++]=0;ka.faces[b++]=2;ka.faces[b++]=3;ka.vertexBuffer=e.createBuffer();ka.elementBuffer=e.createBuffer();ka.tempTexture=e.createTexture();ka.occlusionTexture=e.createTexture();e.bindBuffer(e.ARRAY_BUFFER,ka.vertexBuffer);
|
|
|
-e.bufferData(e.ARRAY_BUFFER,ka.vertices,e.STATIC_DRAW);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,ka.elementBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,ka.faces,e.STATIC_DRAW);e.bindTexture(e.TEXTURE_2D,ka.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);e.bindTexture(e.TEXTURE_2D,ka.occlusionTexture);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,16,16,0,e.RGBA,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);if(e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS)<=0){ka.hasVertexTexture=!1;ka.program=e.createProgram();e.attachShader(ka.program,
|
|
|
-aa("fragment",THREE.ShaderLib.lensFlare.fragmentShader));e.attachShader(ka.program,aa("vertex",THREE.ShaderLib.lensFlare.vertexShader))}else{ka.hasVertexTexture=!0;ka.program=e.createProgram();e.attachShader(ka.program,aa("fragment",THREE.ShaderLib.lensFlareVertexTexture.fragmentShader));e.attachShader(ka.program,aa("vertex",THREE.ShaderLib.lensFlareVertexTexture.vertexShader))}e.linkProgram(ka.program);ka.attributes={};ka.uniforms={};ka.attributes.vertex=e.getAttribLocation(ka.program,"position");
|
|
|
-ka.attributes.uv=e.getAttribLocation(ka.program,"UV");ka.uniforms.renderType=e.getUniformLocation(ka.program,"renderType");ka.uniforms.map=e.getUniformLocation(ka.program,"map");ka.uniforms.occlusionMap=e.getUniformLocation(ka.program,"occlusionMap");ka.uniforms.opacity=e.getUniformLocation(ka.program,"opacity");ka.uniforms.scale=e.getUniformLocation(ka.program,"scale");ka.uniforms.rotation=e.getUniformLocation(ka.program,"rotation");ka.uniforms.screenPosition=e.getUniformLocation(ka.program,"screenPosition");
|
|
|
-var ub=!1;_sprite={};_sprite.vertices=new Float32Array(16);_sprite.faces=new Uint16Array(6);b=0;_sprite.vertices[b++]=-1;_sprite.vertices[b++]=-1;_sprite.vertices[b++]=0;_sprite.vertices[b++]=0;_sprite.vertices[b++]=1;_sprite.vertices[b++]=-1;_sprite.vertices[b++]=1;_sprite.vertices[b++]=0;_sprite.vertices[b++]=1;_sprite.vertices[b++]=1;_sprite.vertices[b++]=1;_sprite.vertices[b++]=1;_sprite.vertices[b++]=-1;_sprite.vertices[b++]=1;_sprite.vertices[b++]=0;_sprite.vertices[b++]=1;b=0;_sprite.faces[b++]=
|
|
|
-0;_sprite.faces[b++]=1;_sprite.faces[b++]=2;_sprite.faces[b++]=0;_sprite.faces[b++]=2;_sprite.faces[b++]=3;_sprite.vertexBuffer=e.createBuffer();_sprite.elementBuffer=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,_sprite.vertexBuffer);e.bufferData(e.ARRAY_BUFFER,_sprite.vertices,e.STATIC_DRAW);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,_sprite.elementBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,_sprite.faces,e.STATIC_DRAW);_sprite.program=e.createProgram();e.attachShader(_sprite.program,aa("fragment",THREE.ShaderLib.sprite.fragmentShader));
|
|
|
-e.attachShader(_sprite.program,aa("vertex",THREE.ShaderLib.sprite.vertexShader));e.linkProgram(_sprite.program);_sprite.attributes={};_sprite.uniforms={};_sprite.attributes.position=e.getAttribLocation(_sprite.program,"position");_sprite.attributes.uv=e.getAttribLocation(_sprite.program,"uv");_sprite.uniforms.uvOffset=e.getUniformLocation(_sprite.program,"uvOffset");_sprite.uniforms.uvScale=e.getUniformLocation(_sprite.program,"uvScale");_sprite.uniforms.rotation=e.getUniformLocation(_sprite.program,
|
|
|
-"rotation");_sprite.uniforms.scale=e.getUniformLocation(_sprite.program,"scale");_sprite.uniforms.alignment=e.getUniformLocation(_sprite.program,"alignment");_sprite.uniforms.map=e.getUniformLocation(_sprite.program,"map");_sprite.uniforms.opacity=e.getUniformLocation(_sprite.program,"opacity");_sprite.uniforms.useScreenCoordinates=e.getUniformLocation(_sprite.program,"useScreenCoordinates");_sprite.uniforms.affectedByDistance=e.getUniformLocation(_sprite.program,"affectedByDistance");_sprite.uniforms.screenPosition=
|
|
|
-e.getUniformLocation(_sprite.program,"screenPosition");_sprite.uniforms.modelViewMatrix=e.getUniformLocation(_sprite.program,"modelViewMatrix");_sprite.uniforms.projectionMatrix=e.getUniformLocation(_sprite.program,"projectionMatrix");var lb=!1;this.setSize=function(n,D){L.width=n;L.height=D;this.setViewport(0,0,L.width,L.height)};this.setViewport=function(n,D,z,v){ra=n;oa=D;ea=z;Aa=v;e.viewport(ra,oa,ea,Aa)};this.setScissor=function(n,D,z,v){e.scissor(n,D,z,v)};this.enableScissorTest=function(n){n?
|
|
|
-e.enable(e.SCISSOR_TEST):e.disable(e.SCISSOR_TEST)};this.enableDepthBufferWrite=function(n){ca=n;e.depthMask(n)};this.setClearColorHex=function(n,D){la.setHex(n);Na=D;e.clearColor(la.r,la.g,la.b,Na)};this.setClearColor=function(n,D){la.copy(n);Na=D;e.clearColor(la.r,la.g,la.b,Na)};this.clear=function(){e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT|e.STENCIL_BUFFER_BIT)};this.setStencilShadowDarkness=function(n){Ga.darkness=n};this.getContext=function(){return e};this.initMaterial=function(n,D,z,v){var A,
|
|
|
-M,J;if(n instanceof THREE.MeshDepthMaterial)J="depth";else if(n instanceof THREE.ShadowVolumeDynamicMaterial)J="shadowVolumeDynamic";else if(n instanceof THREE.MeshNormalMaterial)J="normal";else if(n instanceof THREE.MeshBasicMaterial)J="basic";else if(n instanceof THREE.MeshLambertMaterial)J="lambert";else if(n instanceof THREE.MeshPhongMaterial)J="phong";else if(n instanceof THREE.LineBasicMaterial)J="basic";else n instanceof THREE.ParticleBasicMaterial&&(J="particle_basic");if(J){var G=THREE.ShaderLib[J];
|
|
|
-n.uniforms=THREE.UniformsUtils.clone(G.uniforms);n.vertexShader=G.vertexShader;n.fragmentShader=G.fragmentShader}var U,Y,B;U=B=G=0;for(Y=D.length;U<Y;U++){M=D[U];M instanceof THREE.DirectionalLight&&B++;M instanceof THREE.PointLight&&G++}if(G+B<=4)D=B;else{D=Math.ceil(4*B/(G+B));G=4-D}M={directional:D,point:G};B=50;if(v!==undefined&&v instanceof THREE.SkinnedMesh)B=v.bones.length;var K;a:{U=n.fragmentShader;Y=n.vertexShader;G=n.uniforms;D=n.attributes;z={map:!!n.map,envMap:!!n.envMap,lightMap:!!n.lightMap,
|
|
|
-vertexColors:n.vertexColors,fog:z,sizeAttenuation:n.sizeAttenuation,skinning:n.skinning,morphTargets:n.morphTargets,maxMorphTargets:this.maxMorphTargets,maxDirLights:M.directional,maxPointLights:M.point,maxBones:B};var W;M=[];if(J)M.push(J);else{M.push(U);M.push(Y)}for(W in z){M.push(W);M.push(z[W])}J=M.join();W=0;for(M=Ja.length;W<M;W++)if(Ja[W].code==J){K=Ja[W].program;break a}W=e.createProgram();prefix_fragment=["#ifdef GL_ES\nprecision highp float;\n#endif","#define MAX_DIR_LIGHTS "+z.maxDirLights,
|
|
|
-"#define MAX_POINT_LIGHTS "+z.maxPointLights,z.fog?"#define USE_FOG":"",z.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",z.map?"#define USE_MAP":"",z.envMap?"#define USE_ENVMAP":"",z.lightMap?"#define USE_LIGHTMAP":"",z.vertexColors?"#define USE_COLOR":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");prefix_vertex=[hb?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+z.maxDirLights,"#define MAX_POINT_LIGHTS "+z.maxPointLights,"#define MAX_BONES "+z.maxBones,z.map?
|
|
|
-"#define USE_MAP":"",z.envMap?"#define USE_ENVMAP":"",z.lightMap?"#define USE_LIGHTMAP":"",z.vertexColors?"#define USE_COLOR":"",z.skinning?"#define USE_SKINNING":"",z.morphTargets?"#define USE_MORPHTARGETS":"",z.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.TEXTURE_WRAP_T,X(D.wrapT));e.texParameteri(n,e.TEXTURE_MAG_FILTER,X(D.magFilter));e.texParameteri(n,e.TEXTURE_MIN_FILTER,X(D.minFilter));e.generateMipmap(n)}else{e.texParameteri(n,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE);e.texParameteri(n,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);e.texParameteri(n,e.TEXTURE_MAG_FILTER,ga(D.magFilter));e.texParameteri(n,e.TEXTURE_MIN_FILTER,ga(D.minFilter))}}function Q(n,D){if(n.needsUpdate){if(n.__webglTexture)n.__webglTexture=e.deleteTexture(n.__webglTexture);n.__webglTexture=
|
|
|
+e.createTexture();e.bindTexture(e.TEXTURE_2D,n.__webglTexture);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n.image);O(e.TEXTURE_2D,n,n.image);e.bindTexture(e.TEXTURE_2D,null);n.needsUpdate=!1}e.activeTexture(e.TEXTURE0+D);e.bindTexture(e.TEXTURE_2D,n.__webglTexture)}function ya(n){if(n&&!n.__webglFramebuffer){if(n.depthBuffer===undefined)n.depthBuffer=!0;if(n.stencilBuffer===undefined)n.stencilBuffer=!0;n.__webglFramebuffer=e.createFramebuffer();n.__webglRenderbuffer=e.createRenderbuffer();
|
|
|
+n.__webglTexture=e.createTexture();e.bindTexture(e.TEXTURE_2D,n.__webglTexture);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,X(n.wrapS));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,X(n.wrapT));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,X(n.magFilter));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,X(n.minFilter));e.texImage2D(e.TEXTURE_2D,0,X(n.format),n.width,n.height,0,X(n.format),X(n.type),null);e.bindRenderbuffer(e.RENDERBUFFER,n.__webglRenderbuffer);e.bindFramebuffer(e.FRAMEBUFFER,
|
|
|
+n.__webglFramebuffer);e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n.__webglTexture,0);if(n.depthBuffer&&!n.stencilBuffer){e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_COMPONENT16,n.width,n.height);e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,n.__webglRenderbuffer)}else if(n.depthBuffer&&n.stencilBuffer){e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_STENCIL,n.width,n.height);e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_STENCIL_ATTACHMENT,e.RENDERBUFFER,
|
|
|
+n.__webglRenderbuffer)}else e.renderbufferStorage(e.RENDERBUFFER,e.RGBA4,n.width,n.height);e.bindTexture(e.TEXTURE_2D,null);e.bindRenderbuffer(e.RENDERBUFFER,null);e.bindFramebuffer(e.FRAMEBUFFER,null)}var D,z;if(n){D=n.__webglFramebuffer;z=n.width;n=n.height}else{D=null;z=ea;n=Aa}if(D!=Da){e.bindFramebuffer(e.FRAMEBUFFER,D);e.viewport(ra,oa,z,n);Da=D}}function aa(n,D){var z;if(n=="fragment")z=e.createShader(e.FRAGMENT_SHADER);else n=="vertex"&&(z=e.createShader(e.VERTEX_SHADER));e.shaderSource(z,
|
|
|
+D);e.compileShader(z);if(!e.getShaderParameter(z,e.COMPILE_STATUS)){console.error(e.getShaderInfoLog(z));console.error(D);return null}return z}function ga(n){switch(n){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return e.NEAREST;default:return e.LINEAR}}function X(n){switch(n){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 ha=this,e,Ja=[],ta=null,Da=null,ca=!0,ua=null,da=null,sa=null,na=null,ra=0,oa=0,ea=0,Aa=0,Oa=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],
|
|
|
+fa=new THREE.Matrix4,xa=new Float32Array(16),Ma=new Float32Array(16),Qa=new THREE.Vector4,Ua={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}};b=b||{};var L=b.canvas!==undefined?b.canvas:document.createElement("canvas"),Z=b.stencil!==undefined?b.stencil:!0,ja=b.antialias!==undefined?b.antialias:!1,la=b.clearColor!==undefined?new THREE.Color(b.clearColor):new THREE.Color(0),Na=b.clearAlpha!==undefined?b.clearAlpha:0;this.data={vertices:0,
|
|
|
+faces:0,drawCalls:0};this.maxMorphTargets=8;this.domElement=L;this.autoClear=!0;this.sortObjects=!0;try{if(!(e=L.getContext("experimental-webgl",{antialias:ja,stencil:Z})))throw"Error creating WebGL context.";}catch(fb){console.error(fb)}console.log(navigator.userAgent+" | "+e.getParameter(e.VERSION)+" | "+e.getParameter(e.VENDOR)+" | "+e.getParameter(e.RENDERER)+" | "+e.getParameter(e.SHADING_LANGUAGE_VERSION));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(la.r,la.g,la.b,Na);this.context=e;var hb=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0;if(Z){var Ga={};Ga.vertices=new Float32Array(12);Ga.faces=new Uint16Array(6);Ga.darkness=0.5;Ga.vertices[0]=-20;Ga.vertices[1]=-20;Ga.vertices[2]=-1;Ga.vertices[3]=20;Ga.vertices[4]=-20;Ga.vertices[5]=-1;Ga.vertices[6]=20;Ga.vertices[7]=20;Ga.vertices[8]=-1;Ga.vertices[9]=
|
|
|
+-20;Ga.vertices[10]=20;Ga.vertices[11]=-1;Ga.faces[0]=0;Ga.faces[1]=1;Ga.faces[2]=2;Ga.faces[3]=0;Ga.faces[4]=2;Ga.faces[5]=3;Ga.vertexBuffer=e.createBuffer();Ga.elementBuffer=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,Ga.vertexBuffer);e.bufferData(e.ARRAY_BUFFER,Ga.vertices,e.STATIC_DRAW);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,Ga.elementBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,Ga.faces,e.STATIC_DRAW);Ga.program=e.createProgram();e.attachShader(Ga.program,aa("fragment",THREE.ShaderLib.shadowPost.fragmentShader));
|
|
|
+e.attachShader(Ga.program,aa("vertex",THREE.ShaderLib.shadowPost.vertexShader));e.linkProgram(Ga.program);Ga.vertexLocation=e.getAttribLocation(Ga.program,"position");Ga.projectionLocation=e.getUniformLocation(Ga.program,"projectionMatrix");Ga.darknessLocation=e.getUniformLocation(Ga.program,"darkness")}var ka={};ka.vertices=new Float32Array(16);ka.faces=new Uint16Array(6);b=0;ka.vertices[b++]=-1;ka.vertices[b++]=-1;ka.vertices[b++]=0;ka.vertices[b++]=0;ka.vertices[b++]=1;ka.vertices[b++]=-1;ka.vertices[b++]=
|
|
|
+1;ka.vertices[b++]=0;ka.vertices[b++]=1;ka.vertices[b++]=1;ka.vertices[b++]=1;ka.vertices[b++]=1;ka.vertices[b++]=-1;ka.vertices[b++]=1;ka.vertices[b++]=0;ka.vertices[b++]=1;b=0;ka.faces[b++]=0;ka.faces[b++]=1;ka.faces[b++]=2;ka.faces[b++]=0;ka.faces[b++]=2;ka.faces[b++]=3;ka.vertexBuffer=e.createBuffer();ka.elementBuffer=e.createBuffer();ka.tempTexture=e.createTexture();ka.occlusionTexture=e.createTexture();e.bindBuffer(e.ARRAY_BUFFER,ka.vertexBuffer);e.bufferData(e.ARRAY_BUFFER,ka.vertices,e.STATIC_DRAW);
|
|
|
+e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,ka.elementBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,ka.faces,e.STATIC_DRAW);e.bindTexture(e.TEXTURE_2D,ka.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);e.bindTexture(e.TEXTURE_2D,
|
|
|
+ka.occlusionTexture);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,16,16,0,e.RGBA,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);if(e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS)<=0){ka.hasVertexTexture=!1;ka.program=e.createProgram();e.attachShader(ka.program,aa("fragment",THREE.ShaderLib.lensFlare.fragmentShader));
|
|
|
+e.attachShader(ka.program,aa("vertex",THREE.ShaderLib.lensFlare.vertexShader))}else{ka.hasVertexTexture=!0;ka.program=e.createProgram();e.attachShader(ka.program,aa("fragment",THREE.ShaderLib.lensFlareVertexTexture.fragmentShader));e.attachShader(ka.program,aa("vertex",THREE.ShaderLib.lensFlareVertexTexture.vertexShader))}e.linkProgram(ka.program);ka.attributes={};ka.uniforms={};ka.attributes.vertex=e.getAttribLocation(ka.program,"position");ka.attributes.uv=e.getAttribLocation(ka.program,"UV");ka.uniforms.renderType=
|
|
|
+e.getUniformLocation(ka.program,"renderType");ka.uniforms.map=e.getUniformLocation(ka.program,"map");ka.uniforms.occlusionMap=e.getUniformLocation(ka.program,"occlusionMap");ka.uniforms.opacity=e.getUniformLocation(ka.program,"opacity");ka.uniforms.scale=e.getUniformLocation(ka.program,"scale");ka.uniforms.rotation=e.getUniformLocation(ka.program,"rotation");ka.uniforms.screenPosition=e.getUniformLocation(ka.program,"screenPosition");var ub=!1;_sprite={};_sprite.vertices=new Float32Array(16);_sprite.faces=
|
|
|
+new Uint16Array(6);b=0;_sprite.vertices[b++]=-1;_sprite.vertices[b++]=-1;_sprite.vertices[b++]=0;_sprite.vertices[b++]=0;_sprite.vertices[b++]=1;_sprite.vertices[b++]=-1;_sprite.vertices[b++]=1;_sprite.vertices[b++]=0;_sprite.vertices[b++]=1;_sprite.vertices[b++]=1;_sprite.vertices[b++]=1;_sprite.vertices[b++]=1;_sprite.vertices[b++]=-1;_sprite.vertices[b++]=1;_sprite.vertices[b++]=0;_sprite.vertices[b++]=1;b=0;_sprite.faces[b++]=0;_sprite.faces[b++]=1;_sprite.faces[b++]=2;_sprite.faces[b++]=0;_sprite.faces[b++]=
|
|
|
+2;_sprite.faces[b++]=3;_sprite.vertexBuffer=e.createBuffer();_sprite.elementBuffer=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,_sprite.vertexBuffer);e.bufferData(e.ARRAY_BUFFER,_sprite.vertices,e.STATIC_DRAW);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,_sprite.elementBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,_sprite.faces,e.STATIC_DRAW);_sprite.program=e.createProgram();e.attachShader(_sprite.program,aa("fragment",THREE.ShaderLib.sprite.fragmentShader));e.attachShader(_sprite.program,aa("vertex",THREE.ShaderLib.sprite.vertexShader));
|
|
|
+e.linkProgram(_sprite.program);_sprite.attributes={};_sprite.uniforms={};_sprite.attributes.position=e.getAttribLocation(_sprite.program,"position");_sprite.attributes.uv=e.getAttribLocation(_sprite.program,"uv");_sprite.uniforms.uvOffset=e.getUniformLocation(_sprite.program,"uvOffset");_sprite.uniforms.uvScale=e.getUniformLocation(_sprite.program,"uvScale");_sprite.uniforms.rotation=e.getUniformLocation(_sprite.program,"rotation");_sprite.uniforms.scale=e.getUniformLocation(_sprite.program,"scale");
|
|
|
+_sprite.uniforms.alignment=e.getUniformLocation(_sprite.program,"alignment");_sprite.uniforms.map=e.getUniformLocation(_sprite.program,"map");_sprite.uniforms.opacity=e.getUniformLocation(_sprite.program,"opacity");_sprite.uniforms.useScreenCoordinates=e.getUniformLocation(_sprite.program,"useScreenCoordinates");_sprite.uniforms.affectedByDistance=e.getUniformLocation(_sprite.program,"affectedByDistance");_sprite.uniforms.screenPosition=e.getUniformLocation(_sprite.program,"screenPosition");_sprite.uniforms.modelViewMatrix=
|
|
|
+e.getUniformLocation(_sprite.program,"modelViewMatrix");_sprite.uniforms.projectionMatrix=e.getUniformLocation(_sprite.program,"projectionMatrix");var lb=!1;this.setSize=function(n,D){L.width=n;L.height=D;this.setViewport(0,0,L.width,L.height)};this.setViewport=function(n,D,z,v){ra=n;oa=D;ea=z;Aa=v;e.viewport(ra,oa,ea,Aa)};this.setScissor=function(n,D,z,v){e.scissor(n,D,z,v)};this.enableScissorTest=function(n){n?e.enable(e.SCISSOR_TEST):e.disable(e.SCISSOR_TEST)};this.enableDepthBufferWrite=function(n){ca=
|
|
|
+n;e.depthMask(n)};this.setClearColorHex=function(n,D){la.setHex(n);Na=D;e.clearColor(la.r,la.g,la.b,Na)};this.setClearColor=function(n,D){la.copy(n);Na=D;e.clearColor(la.r,la.g,la.b,Na)};this.clear=function(){e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT|e.STENCIL_BUFFER_BIT)};this.setStencilShadowDarkness=function(n){Ga.darkness=n};this.getContext=function(){return e};this.initMaterial=function(n,D,z,v){var A,M,J;if(n instanceof THREE.MeshDepthMaterial)J="depth";else if(n instanceof THREE.ShadowVolumeDynamicMaterial)J=
|
|
|
+"shadowVolumeDynamic";else if(n instanceof THREE.MeshNormalMaterial)J="normal";else if(n instanceof THREE.MeshBasicMaterial)J="basic";else if(n instanceof THREE.MeshLambertMaterial)J="lambert";else if(n instanceof THREE.MeshPhongMaterial)J="phong";else if(n instanceof THREE.LineBasicMaterial)J="basic";else n instanceof THREE.ParticleBasicMaterial&&(J="particle_basic");if(J){var G=THREE.ShaderLib[J];n.uniforms=THREE.UniformsUtils.clone(G.uniforms);n.vertexShader=G.vertexShader;n.fragmentShader=G.fragmentShader}var U,
|
|
|
+Y,B;U=B=G=0;for(Y=D.length;U<Y;U++){M=D[U];M instanceof THREE.DirectionalLight&&B++;M instanceof THREE.PointLight&&G++}if(G+B<=4)D=B;else{D=Math.ceil(4*B/(G+B));G=4-D}M={directional:D,point:G};B=50;if(v!==undefined&&v instanceof THREE.SkinnedMesh)B=v.bones.length;var K;a:{U=n.fragmentShader;Y=n.vertexShader;G=n.uniforms;D=n.attributes;z={map:!!n.map,envMap:!!n.envMap,lightMap:!!n.lightMap,vertexColors:n.vertexColors,fog:z,sizeAttenuation:n.sizeAttenuation,skinning:n.skinning,morphTargets:n.morphTargets,
|
|
|
+maxMorphTargets:this.maxMorphTargets,maxDirLights:M.directional,maxPointLights:M.point,maxBones:B};var W;M=[];if(J)M.push(J);else{M.push(U);M.push(Y)}for(W in z){M.push(W);M.push(z[W])}J=M.join();W=0;for(M=Ja.length;W<M;W++)if(Ja[W].code==J){K=Ja[W].program;break a}W=e.createProgram();prefix_fragment=["#ifdef GL_ES\nprecision highp float;\n#endif","#define MAX_DIR_LIGHTS "+z.maxDirLights,"#define MAX_POINT_LIGHTS "+z.maxPointLights,z.fog?"#define USE_FOG":"",z.fog instanceof THREE.FogExp2?"#define FOG_EXP2":
|
|
|
+"",z.map?"#define USE_MAP":"",z.envMap?"#define USE_ENVMAP":"",z.lightMap?"#define USE_LIGHTMAP":"",z.vertexColors?"#define USE_COLOR":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");prefix_vertex=[hb?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+z.maxDirLights,"#define MAX_POINT_LIGHTS "+z.maxPointLights,"#define MAX_BONES "+z.maxBones,z.map?"#define USE_MAP":"",z.envMap?"#define USE_ENVMAP":"",z.lightMap?"#define USE_LIGHTMAP":"",z.vertexColors?"#define USE_COLOR":
|
|
|
+"",z.skinning?"#define USE_SKINNING":"",z.morphTargets?"#define USE_MORPHTARGETS":"",z.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(W,aa("fragment",prefix_fragment+U));e.attachShader(W,aa("vertex",prefix_vertex+Y));e.linkProgram(W);e.getProgramParameter(W,e.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+e.getProgramParameter(W,e.VALIDATE_STATUS)+", gl error ["+e.getError()+"]");W.uniforms={};W.attributes={};var ia;U=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(ia in G)U.push(ia);
|
|
|
ia=U;G=0;for(U=ia.length;G<U;G++){Y=ia[G];W.uniforms[Y]=e.getUniformLocation(W,Y)}U=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];for(ia=0;ia<z.maxMorphTargets;ia++)U.push("morphTarget"+ia);for(K in D)U.push(K);K=U;ia=0;for(D=K.length;ia<D;ia++){z=K[ia];W.attributes[z]=e.getAttribLocation(W,z)}Ja.push({program:W,code:J});K=W}n.program=K;K=n.program.attributes;K.position>=0&&e.enableVertexAttribArray(K.position);K.color>=0&&e.enableVertexAttribArray(K.color);
|
|
|
K.normal>=0&&e.enableVertexAttribArray(K.normal);K.tangent>=0&&e.enableVertexAttribArray(K.tangent);if(n.skinning&&K.skinVertexA>=0&&K.skinVertexB>=0&&K.skinIndex>=0&&K.skinWeight>=0){e.enableVertexAttribArray(K.skinVertexA);e.enableVertexAttribArray(K.skinVertexB);e.enableVertexAttribArray(K.skinIndex);e.enableVertexAttribArray(K.skinWeight)}if(n.attributes)for(A in n.attributes)K[A]!==undefined&&K[A]>=0&&e.enableVertexAttribArray(K[A]);if(n.morphTargets){n.numSupportedMorphTargets=0;if(K.morphTarget0>=
|