|
@@ -205,17 +205,17 @@ break;case THREE.ReverseSubtractiveBlending:c.blendEquation(c.FUNC_REVERSE_SUBTR
|
|
c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(g,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(g,c.TEXTURE_MAG_FILTER,fa(l.magFilter));c.texParameteri(g,c.TEXTURE_MIN_FILTER,fa(l.minFilter))}}function U(g){if(g&&!g.__webGLFramebuffer){g.__webGLFramebuffer=c.createFramebuffer();g.__webGLRenderbuffer=c.createRenderbuffer();g.__webGLTexture=c.createTexture();c.bindRenderbuffer(c.RENDERBUFFER,g.__webGLRenderbuffer);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,g.width,g.height);c.bindTexture(c.TEXTURE_2D,
|
|
c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(g,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(g,c.TEXTURE_MAG_FILTER,fa(l.magFilter));c.texParameteri(g,c.TEXTURE_MIN_FILTER,fa(l.minFilter))}}function U(g){if(g&&!g.__webGLFramebuffer){g.__webGLFramebuffer=c.createFramebuffer();g.__webGLRenderbuffer=c.createRenderbuffer();g.__webGLTexture=c.createTexture();c.bindRenderbuffer(c.RENDERBUFFER,g.__webGLRenderbuffer);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,g.width,g.height);c.bindTexture(c.TEXTURE_2D,
|
|
g.__webGLTexture);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,ia(g.wrapS));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,ia(g.wrapT));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,ia(g.magFilter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,ia(g.minFilter));c.texImage2D(c.TEXTURE_2D,0,ia(g.format),g.width,g.height,0,ia(g.format),ia(g.type),null);c.bindFramebuffer(c.FRAMEBUFFER,g.__webGLFramebuffer);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,g.__webGLTexture,
|
|
g.__webGLTexture);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,ia(g.wrapS));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,ia(g.wrapT));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,ia(g.magFilter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,ia(g.minFilter));c.texImage2D(c.TEXTURE_2D,0,ia(g.format),g.width,g.height,0,ia(g.format),ia(g.type),null);c.bindFramebuffer(c.FRAMEBUFFER,g.__webGLFramebuffer);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,g.__webGLTexture,
|
|
0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,g.__webGLRenderbuffer);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null)}var l,n;if(g){l=g.__webGLFramebuffer;n=g.width;g=g.height}else{l=null;n=wa;g=P}if(l!=W){c.bindFramebuffer(c.FRAMEBUFFER,l);c.viewport(L,ka,n,g);W=l}}function ha(g,l){var n;if(g=="fragment")n=c.createShader(c.FRAGMENT_SHADER);else g=="vertex"&&(n=c.createShader(c.VERTEX_SHADER));c.shaderSource(n,
|
|
0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,g.__webGLRenderbuffer);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null)}var l,n;if(g){l=g.__webGLFramebuffer;n=g.width;g=g.height}else{l=null;n=wa;g=P}if(l!=W){c.bindFramebuffer(c.FRAMEBUFFER,l);c.viewport(L,ka,n,g);W=l}}function ha(g,l){var n;if(g=="fragment")n=c.createShader(c.FRAGMENT_SHADER);else g=="vertex"&&(n=c.createShader(c.VERTEX_SHADER));c.shaderSource(n,
|
|
-l);c.compileShader(n);if(!c.getShaderParameter(n,c.COMPILE_STATUS)){alert(c.getShaderInfoLog(n));return null}return n}function fa(g){switch(g){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return c.NEAREST;case THREE.LinearFilter:case THREE.LinearMipMapNearestFilter:case THREE.LinearMipMapLinearFilter:return c.LINEAR}}function ia(g){switch(g){case THREE.RepeatWrapping:return c.REPEAT;case THREE.ClampToEdgeWrapping:return c.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return c.MIRRORED_REPEAT;
|
|
|
|
-case THREE.NearestFilter:return c.NEAREST;case THREE.NearestMipMapNearestFilter:return c.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return c.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return c.LINEAR;case THREE.LinearMipMapNearestFilter:return c.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return c.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return c.BYTE;case THREE.UnsignedByteType:return c.UNSIGNED_BYTE;case THREE.ShortType:return c.SHORT;case THREE.UnsignedShortType:return c.UNSIGNED_SHORT;
|
|
|
|
-case THREE.IntType:return c.INT;case THREE.UnsignedShortType:return c.UNSIGNED_INT;case THREE.FloatType:return c.FLOAT;case THREE.AlphaFormat:return c.ALPHA;case THREE.RGBFormat:return c.RGB;case THREE.RGBAFormat:return c.RGBA;case THREE.LuminanceFormat:return c.LUMINANCE;case THREE.LuminanceAlphaFormat:return c.LUMINANCE_ALPHA}return 0}var M=document.createElement("canvas"),c,ja=null,W=null,la=this,Z=null,R=null,N=null,Ba=null,L=0,ka=0,wa=0,P=0,xa=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,
|
|
|
|
-new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Ha=new THREE.Matrix4,Na=new Float32Array(16),Ma=new Float32Array(16),Fa=new THREE.Vector4,va={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[]}},V=!0,sa=new THREE.Color(0),za=0;if(a){if(a.antialias!==undefined)V=a.antialias;a.clearColor!==undefined&&sa.setHex(a.clearColor);if(a.clearAlpha!==undefined)za=a.clearAlpha}this.maxMorphTargets=8;this.domElement=M;this.autoClear=!0;this.sortObjects=
|
|
|
|
-!0;(function(g,l,n){try{if(!(c=M.getContext("experimental-webgl",{antialias:g})))throw"Error creating WebGL context.";}catch(i){console.error(i)}c.clearColor(0,0,0,1);c.clearDepth(1);c.enable(c.DEPTH_TEST);c.depthFunc(c.LEQUAL);c.frontFace(c.CCW);c.cullFace(c.BACK);c.enable(c.CULL_FACE);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.clearColor(l.r,l.g,l.b,n);_cullEnabled=!0})(V,sa,za);this.context=c;this.setSize=function(g,l){M.width=g;M.height=l;this.setViewport(0,0,M.width,M.height)};
|
|
|
|
-this.setViewport=function(g,l,n,i){L=g;ka=l;wa=n;P=i;c.viewport(L,ka,wa,P)};this.setScissor=function(g,l,n,i){c.scissor(g,l,n,i)};this.enableScissorTest=function(g){g?c.enable(c.SCISSOR_TEST):c.disable(c.SCISSOR_TEST)};this.enableDepthBufferWrite=function(g){c.depthMask(g)};this.setClearColorHex=function(g,l){var n=new THREE.Color(g);c.clearColor(n.r,n.g,n.b,l)};this.setClearColor=function(g,l){c.clearColor(g.r,g.g,g.b,l)};this.clear=function(){c.clear(c.COLOR_BUFFER_BIT|c.DEPTH_BUFFER_BIT)};this.initMaterial=
|
|
|
|
-function(g,l,n,i){var k,s,p;if(g instanceof THREE.MeshDepthMaterial)d(g,THREE.ShaderLib.depth);else if(g instanceof THREE.MeshNormalMaterial)d(g,THREE.ShaderLib.normal);else if(g instanceof THREE.MeshBasicMaterial)d(g,THREE.ShaderLib.basic);else if(g instanceof THREE.MeshLambertMaterial)d(g,THREE.ShaderLib.lambert);else if(g instanceof THREE.MeshPhongMaterial)d(g,THREE.ShaderLib.phong);else if(g instanceof THREE.LineBasicMaterial)d(g,THREE.ShaderLib.basic);else g instanceof THREE.ParticleBasicMaterial&&
|
|
|
|
-d(g,THREE.ShaderLib.particle_basic);var r,E,F,q;p=F=q=0;for(r=l.length;p<r;p++){E=l[p];E instanceof THREE.DirectionalLight&&F++;E instanceof THREE.PointLight&&q++}if(q+F<=4)l=F;else{l=Math.ceil(4*F/(q+F));q=4-l}p={directional:l,point:q};r=50;if(i!==undefined&&i instanceof THREE.SkinnedMesh)r=i.bones.length;q=g.fragmentShader;l=g.vertexShader;r={fog:n,map:g.map,envMap:g.envMap,lightMap:g.lightMap,vertexColors:g.vertexColors,sizeAttenuation:g.sizeAttenuation,skinning:g.skinning,morphTargets:g.morphTargets,
|
|
|
|
-maxDirLights:p.directional,maxPointLights:p.point,maxBones:r};n=c.createProgram();p=["#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");
|
|
|
|
|
|
+l);c.compileShader(n);if(!c.getShaderParameter(n,c.COMPILE_STATUS)){console.error(c.getShaderInfoLog(n));return null}return n}function fa(g){switch(g){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return c.NEAREST;case THREE.LinearFilter:case THREE.LinearMipMapNearestFilter:case THREE.LinearMipMapLinearFilter:return c.LINEAR}}function ia(g){switch(g){case THREE.RepeatWrapping:return c.REPEAT;case THREE.ClampToEdgeWrapping:return c.CLAMP_TO_EDGE;
|
|
|
|
+case THREE.MirroredRepeatWrapping:return c.MIRRORED_REPEAT;case THREE.NearestFilter:return c.NEAREST;case THREE.NearestMipMapNearestFilter:return c.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return c.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return c.LINEAR;case THREE.LinearMipMapNearestFilter:return c.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return c.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return c.BYTE;case THREE.UnsignedByteType:return c.UNSIGNED_BYTE;case THREE.ShortType:return c.SHORT;
|
|
|
|
+case THREE.UnsignedShortType:return c.UNSIGNED_SHORT;case THREE.IntType:return c.INT;case THREE.UnsignedShortType:return c.UNSIGNED_INT;case THREE.FloatType:return c.FLOAT;case THREE.AlphaFormat:return c.ALPHA;case THREE.RGBFormat:return c.RGB;case THREE.RGBAFormat:return c.RGBA;case THREE.LuminanceFormat:return c.LUMINANCE;case THREE.LuminanceAlphaFormat:return c.LUMINANCE_ALPHA}return 0}var M=document.createElement("canvas"),c,ja=null,W=null,la=this,Z=null,R=null,N=null,Ba=null,L=0,ka=0,wa=0,P=
|
|
|
|
+0,xa=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Ha=new THREE.Matrix4,Na=new Float32Array(16),Ma=new Float32Array(16),Fa=new THREE.Vector4,va={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[]}},V=!0,sa=new THREE.Color(0),za=0;if(a){if(a.antialias!==undefined)V=a.antialias;a.clearColor!==undefined&&sa.setHex(a.clearColor);if(a.clearAlpha!==undefined)za=a.clearAlpha}this.maxMorphTargets=
|
|
|
|
+8;this.domElement=M;this.autoClear=!0;this.sortObjects=!0;(function(g,l,n){try{if(!(c=M.getContext("experimental-webgl",{antialias:g})))throw"Error creating WebGL context.";}catch(i){console.error(i)}c.clearColor(0,0,0,1);c.clearDepth(1);c.enable(c.DEPTH_TEST);c.depthFunc(c.LEQUAL);c.frontFace(c.CCW);c.cullFace(c.BACK);c.enable(c.CULL_FACE);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.clearColor(l.r,l.g,l.b,n);_cullEnabled=!0})(V,sa,za);this.context=c;this.setSize=function(g,l){M.width=
|
|
|
|
+g;M.height=l;this.setViewport(0,0,M.width,M.height)};this.setViewport=function(g,l,n,i){L=g;ka=l;wa=n;P=i;c.viewport(L,ka,wa,P)};this.setScissor=function(g,l,n,i){c.scissor(g,l,n,i)};this.enableScissorTest=function(g){g?c.enable(c.SCISSOR_TEST):c.disable(c.SCISSOR_TEST)};this.enableDepthBufferWrite=function(g){c.depthMask(g)};this.setClearColorHex=function(g,l){var n=new THREE.Color(g);c.clearColor(n.r,n.g,n.b,l)};this.setClearColor=function(g,l){c.clearColor(g.r,g.g,g.b,l)};this.clear=function(){c.clear(c.COLOR_BUFFER_BIT|
|
|
|
|
+c.DEPTH_BUFFER_BIT)};this.initMaterial=function(g,l,n,i){var k,s,p;if(g instanceof THREE.MeshDepthMaterial)d(g,THREE.ShaderLib.depth);else if(g instanceof THREE.MeshNormalMaterial)d(g,THREE.ShaderLib.normal);else if(g instanceof THREE.MeshBasicMaterial)d(g,THREE.ShaderLib.basic);else if(g instanceof THREE.MeshLambertMaterial)d(g,THREE.ShaderLib.lambert);else if(g instanceof THREE.MeshPhongMaterial)d(g,THREE.ShaderLib.phong);else if(g instanceof THREE.LineBasicMaterial)d(g,THREE.ShaderLib.basic);else g instanceof
|
|
|
|
+THREE.ParticleBasicMaterial&&d(g,THREE.ShaderLib.particle_basic);var r,E,F,q;p=F=q=0;for(r=l.length;p<r;p++){E=l[p];E instanceof THREE.DirectionalLight&&F++;E instanceof THREE.PointLight&&q++}if(q+F<=4)l=F;else{l=Math.ceil(4*F/(q+F));q=4-l}p={directional:l,point:q};r=50;if(i!==undefined&&i instanceof THREE.SkinnedMesh)r=i.bones.length;q=g.fragmentShader;l=g.vertexShader;r={fog:n,map:g.map,envMap:g.envMap,lightMap:g.lightMap,vertexColors:g.vertexColors,sizeAttenuation:g.sizeAttenuation,skinning:g.skinning,
|
|
|
|
+morphTargets:g.morphTargets,maxDirLights:p.directional,maxPointLights:p.point,maxBones:r};n=c.createProgram();p=["#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=[c.getParameter(c.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 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n"].join("\n");
|
|
r=[c.getParameter(c.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 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n"].join("\n");
|
|
-c.attachShader(n,ha("fragment",p+q));c.attachShader(n,ha("vertex",r+l));c.linkProgram(n);c.getProgramParameter(n,c.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+c.getProgramParameter(n,c.VALIDATE_STATUS)+", gl error ["+c.getError()+"]");n.uniforms={};n.attributes={};g.program=n;n=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(k in g.uniforms)n.push(k);
|
|
|
|
|
|
+c.attachShader(n,ha("fragment",p+q));c.attachShader(n,ha("vertex",r+l));c.linkProgram(n);c.getProgramParameter(n,c.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+c.getProgramParameter(n,c.VALIDATE_STATUS)+", gl error ["+c.getError()+"]");n.uniforms={};n.attributes={};g.program=n;n=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(k in g.uniforms)n.push(k);
|
|
k=g.program;q=0;for(l=n.length;q<l;q++){p=n[q];k.uniforms[p]=c.getUniformLocation(k,p)}n=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];for(k=0;k<this.maxMorphTargets;k++)n.push("morphTarget"+k);for(s in g.attributes)n.push(s);s=g.program;k=n;n=0;for(q=k.length;n<q;n++){l=k[n];s.attributes[l]=c.getAttribLocation(s,l)}s=g.program.attributes;c.enableVertexAttribArray(s.position);s.color>=0&&c.enableVertexAttribArray(s.color);s.normal>=0&&c.enableVertexAttribArray(s.normal);
|
|
k=g.program;q=0;for(l=n.length;q<l;q++){p=n[q];k.uniforms[p]=c.getUniformLocation(k,p)}n=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];for(k=0;k<this.maxMorphTargets;k++)n.push("morphTarget"+k);for(s in g.attributes)n.push(s);s=g.program;k=n;n=0;for(q=k.length;n<q;n++){l=k[n];s.attributes[l]=c.getAttribLocation(s,l)}s=g.program.attributes;c.enableVertexAttribArray(s.position);s.color>=0&&c.enableVertexAttribArray(s.color);s.normal>=0&&c.enableVertexAttribArray(s.normal);
|
|
s.tangent>=0&&c.enableVertexAttribArray(s.tangent);if(g.skinning&&s.skinVertexA>=0&&s.skinVertexB>=0&&s.skinIndex>=0&&s.skinWeight>=0){c.enableVertexAttribArray(s.skinVertexA);c.enableVertexAttribArray(s.skinVertexB);c.enableVertexAttribArray(s.skinIndex);c.enableVertexAttribArray(s.skinWeight)}if(g.morphTargets){g.numSupportedMorphTargets=0;if(s.morphTarget0>=0){c.enableVertexAttribArray(s.morphTarget0);g.numSupportedMorphTargets++}if(s.morphTarget1>=0){c.enableVertexAttribArray(s.morphTarget1);
|
|
s.tangent>=0&&c.enableVertexAttribArray(s.tangent);if(g.skinning&&s.skinVertexA>=0&&s.skinVertexB>=0&&s.skinIndex>=0&&s.skinWeight>=0){c.enableVertexAttribArray(s.skinVertexA);c.enableVertexAttribArray(s.skinVertexB);c.enableVertexAttribArray(s.skinIndex);c.enableVertexAttribArray(s.skinWeight)}if(g.morphTargets){g.numSupportedMorphTargets=0;if(s.morphTarget0>=0){c.enableVertexAttribArray(s.morphTarget0);g.numSupportedMorphTargets++}if(s.morphTarget1>=0){c.enableVertexAttribArray(s.morphTarget1);
|
|
g.numSupportedMorphTargets++}if(s.morphTarget2>=0){c.enableVertexAttribArray(s.morphTarget2);g.numSupportedMorphTargets++}if(s.morphTarget3>=0){c.enableVertexAttribArray(s.morphTarget3);g.numSupportedMorphTargets++}if(s.morphTarget4>=0){c.enableVertexAttribArray(s.morphTarget4);g.numSupportedMorphTargets++}if(s.morphTarget5>=0){c.enableVertexAttribArray(s.morphTarget5);g.numSupportedMorphTargets++}if(s.morphTarget6>=0){c.enableVertexAttribArray(s.morphTarget6);g.numSupportedMorphTargets++}if(s.morphTarget7>=
|
|
g.numSupportedMorphTargets++}if(s.morphTarget2>=0){c.enableVertexAttribArray(s.morphTarget2);g.numSupportedMorphTargets++}if(s.morphTarget3>=0){c.enableVertexAttribArray(s.morphTarget3);g.numSupportedMorphTargets++}if(s.morphTarget4>=0){c.enableVertexAttribArray(s.morphTarget4);g.numSupportedMorphTargets++}if(s.morphTarget5>=0){c.enableVertexAttribArray(s.morphTarget5);g.numSupportedMorphTargets++}if(s.morphTarget6>=0){c.enableVertexAttribArray(s.morphTarget6);g.numSupportedMorphTargets++}if(s.morphTarget7>=
|