提交 72b8b8d7 编写于 作者: A alteredq

Changed defines generation to skip false values.

See discussion #2412
上级 1afdbe3c
......@@ -456,17 +456,17 @@ Nc.x;Pc[Ca+1]=Nc.y;Pc[Ca+2]=Nc.z}k.bindBuffer(k.ARRAY_BUFFER,Vb.__webglVertexBuf
2)for(Wa=0;Wa<qc;Wa++){gb=xa.value[Wa];xa.array[Ca]=gb.x;xa.array[Ca+1]=gb.y;Ca=Ca+2}else if(xa.size===3)if(xa.type==="c")for(Wa=0;Wa<qc;Wa++){gb=xa.value[Wa];xa.array[Ca]=gb.r;xa.array[Ca+1]=gb.g;xa.array[Ca+2]=gb.b;Ca=Ca+3}else for(Wa=0;Wa<qc;Wa++){gb=xa.value[Wa];xa.array[Ca]=gb.x;xa.array[Ca+1]=gb.y;xa.array[Ca+2]=gb.z;Ca=Ca+3}else if(xa.size===4)for(Wa=0;Wa<qc;Wa++){gb=xa.value[Wa];xa.array[Ca]=gb.x;xa.array[Ca+1]=gb.y;xa.array[Ca+2]=gb.z;xa.array[Ca+3]=gb.w;Ca=Ca+4}k.bindBuffer(k.ARRAY_BUFFER,
xa.buffer);k.bufferData(k.ARRAY_BUFFER,xa.array,$c)}}}}fa.verticesNeedUpdate=false;fa.colorsNeedUpdate=false;eb.attributes&&o(eb)}else if(vb instanceof THREE.ParticleSystem)if(fa instanceof THREE.BufferGeometry){(fa.verticesNeedUpdate||fa.colorsNeedUpdate)&&h(fa,k.DYNAMIC_DRAW,!fa.dynamic);fa.verticesNeedUpdate=false;fa.colorsNeedUpdate=false}else{eb=c(vb,db);cb=eb.attributes&&p(eb);(fa.verticesNeedUpdate||fa.colorsNeedUpdate||vb.sortParticles||cb)&&g(fa,k.DYNAMIC_DRAW,vb);fa.verticesNeedUpdate=false;
fa.colorsNeedUpdate=false;eb.attributes&&o(eb)}}};this.initMaterial=function(a,b,c,d){var f,e,g,h,i,j,l,m,n;a instanceof THREE.MeshDepthMaterial?n="depth":a instanceof THREE.MeshNormalMaterial?n="normal":a instanceof THREE.MeshBasicMaterial?n="basic":a instanceof THREE.MeshLambertMaterial?n="lambert":a instanceof THREE.MeshPhongMaterial?n="phong":a instanceof THREE.LineBasicMaterial?n="basic":a instanceof THREE.ParticleBasicMaterial&&(n="particle_basic");if(n){var o=THREE.ShaderLib[n];a.uniforms=
THREE.UniformsUtils.clone(o.uniforms);a.vertexShader=o.vertexShader;a.fragmentShader=o.fragmentShader}var p,q;f=h=p=q=o=0;for(e=b.length;f<e;f++){g=b[f];if(!g.onlyShadow){g instanceof THREE.DirectionalLight&&h++;g instanceof THREE.PointLight&&p++;g instanceof THREE.SpotLight&&q++;g instanceof THREE.HemisphereLight&&o++}}if(p+q+h+o<=$)f=h;else{f=Math.ceil($*h/(p+h));q=p=$-f;o=f}e=p;g=q;h=o;var r=0,o=0;for(q=b.length;o<q;o++){p=b[o];if(p.castShadow){p instanceof THREE.SpotLight&&r++;p instanceof THREE.DirectionalLight&&
!p.shadowCascade&&r++}}m=r;if(fc&&d&&d.useVertexTexture)l=1024;else{b=k.getParameter(k.MAX_VERTEX_UNIFORM_VECTORS);b=Math.floor((b-20)/4);if(d!==void 0&&d instanceof THREE.SkinnedMesh){b=Math.min(d.bones.length,b);b<d.bones.length&&console.warn("WebGLRenderer: too many bones - "+d.bones.length+", this GPU supports just "+b+" (try OpenGL instead of ANGLE)")}l=b}var s;a:{p=a.fragmentShader;q=a.vertexShader;var o=a.uniforms,b=a.attributes,r=a.defines,c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,
THREE.UniformsUtils.clone(o.uniforms);a.vertexShader=o.vertexShader;a.fragmentShader=o.fragmentShader}var p,q,r;f=p=q=r=o=0;for(e=b.length;f<e;f++){g=b[f];if(!g.onlyShadow){g instanceof THREE.DirectionalLight&&p++;g instanceof THREE.PointLight&&q++;g instanceof THREE.SpotLight&&r++;g instanceof THREE.HemisphereLight&&o++}}if(q+r+p+o<=$)f=p;else{f=Math.ceil($*p/(q+p));r=q=$-f;o=f}e=q;g=r;h=o;o=p=0;for(r=b.length;o<r;o++){q=b[o];if(q.castShadow){q instanceof THREE.SpotLight&&p++;q instanceof THREE.DirectionalLight&&
!q.shadowCascade&&p++}}m=p;if(fc&&d&&d.useVertexTexture)l=1024;else{b=k.getParameter(k.MAX_VERTEX_UNIFORM_VECTORS);b=Math.floor((b-20)/4);if(d!==void 0&&d instanceof THREE.SkinnedMesh){b=Math.min(d.bones.length,b);b<d.bones.length&&console.warn("WebGLRenderer: too many bones - "+d.bones.length+", this GPU supports just "+b+" (try OpenGL instead of ANGLE)")}l=b}var s;a:{q=a.fragmentShader;r=a.vertexShader;o=a.uniforms;b=a.attributes;p=a.defines;var c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,
bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,specularMap:!!a.specularMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,maxBones:l,useVertexTexture:fc&&d&&d.useVertexTexture,boneTextureWidth:d&&d.boneTextureWidth,boneTextureHeight:d&&d.boneTextureHeight,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:f,maxPointLights:e,maxSpotLights:g,maxHemiLights:h,
maxShadows:m,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel,wrapAround:a.wrapAround,doubleSided:a.side===THREE.DoubleSide,flipSided:a.side===THREE.BackSide},t,u,v,d=[];if(n)d.push(n);else{d.push(p);d.push(q)}for(u in r){d.push(u);d.push(r[u])}for(t in c){d.push(t);d.push(c[t])}n=d.join();t=0;for(u=ga.length;t<u;t++){d=ga[t];if(d.code===
n){d.usedTimes++;s=d.program;break a}}u=[];for(v in r){t="#define "+v+" "+r[v];u.push(t)}u=u.join("\n");v=k.createProgram();t=["precision "+F+" float;",u,jc?"#define VERTEX_TEXTURES":"",Q.gammaInput?"#define GAMMA_INPUT":"",Q.gammaOutput?"#define GAMMA_OUTPUT":"",Q.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_HEMI_LIGHTS "+c.maxHemiLights,"#define MAX_SHADOWS "+
c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP":"",c.specularMap?"#define USE_SPECULARMAP":"",c.vertexColors?"#define USE_COLOR":"",c.skinning?"#define USE_SKINNING":"",c.useVertexTexture?"#define BONE_TEXTURE":"",c.boneTextureWidth?"#define N_BONE_PIXEL_X "+c.boneTextureWidth.toFixed(1):"",c.boneTextureHeight?"#define N_BONE_PIXEL_Y "+
c.boneTextureHeight.toFixed(1):"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.morphNormals?"#define USE_MORPHNORMALS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.flipSided?"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":
"","uniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\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;\n#ifdef USE_MORPHNORMALS\nattribute vec3 morphNormal0;\nattribute vec3 morphNormal1;\nattribute vec3 morphNormal2;\nattribute vec3 morphNormal3;\n#else\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
maxShadows:m,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel,wrapAround:a.wrapAround,doubleSided:a.side===THREE.DoubleSide,flipSided:a.side===THREE.BackSide},t,u,v,d=[];if(n)d.push(n);else{d.push(q);d.push(r)}for(u in p){d.push(u);d.push(p[u])}for(t in c){d.push(t);d.push(c[t])}n=d.join();t=0;for(u=ga.length;t<u;t++){d=ga[t];if(d.code===
n){d.usedTimes++;s=d.program;break a}}t=[];for(v in p){u=p[v];if(u!==false){u="#define "+v+" "+u;t.push(u)}}u=t.join("\n");v=k.createProgram();t=["precision "+F+" float;",u,jc?"#define VERTEX_TEXTURES":"",Q.gammaInput?"#define GAMMA_INPUT":"",Q.gammaOutput?"#define GAMMA_OUTPUT":"",Q.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_HEMI_LIGHTS "+
c.maxHemiLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP":"",c.specularMap?"#define USE_SPECULARMAP":"",c.vertexColors?"#define USE_COLOR":"",c.skinning?"#define USE_SKINNING":"",c.useVertexTexture?"#define BONE_TEXTURE":"",c.boneTextureWidth?"#define N_BONE_PIXEL_X "+c.boneTextureWidth.toFixed(1):"",c.boneTextureHeight?
"#define N_BONE_PIXEL_Y "+c.boneTextureHeight.toFixed(1):"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.morphNormals?"#define USE_MORPHNORMALS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.flipSided?"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",c.sizeAttenuation?
"#define USE_SIZEATTENUATION":"","uniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\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;\n#ifdef USE_MORPHNORMALS\nattribute vec3 morphNormal0;\nattribute vec3 morphNormal1;\nattribute vec3 morphNormal2;\nattribute vec3 morphNormal3;\n#else\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
u=["precision "+F+" float;",c.bumpMap||c.normalMap?"#extension GL_OES_standard_derivatives : enable":"",u,"#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_HEMI_LIGHTS "+c.maxHemiLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",Q.gammaInput?"#define GAMMA_INPUT":"",Q.gammaOutput?"#define GAMMA_OUTPUT":"",Q.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"",
c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP":"",c.specularMap?"#define USE_SPECULARMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.flipSided?
"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");u=D("fragment",u+p);t=D("vertex",t+q);k.attachShader(v,t);k.attachShader(v,u);k.linkProgram(v);k.getProgramParameter(v,k.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+k.getProgramParameter(v,
"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");u=D("fragment",u+q);t=D("vertex",t+r);k.attachShader(v,t);k.attachShader(v,u);k.linkProgram(v);k.getProgramParameter(v,k.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+k.getProgramParameter(v,
k.VALIDATE_STATUS)+", gl error ["+k.getError()+"]");k.deleteShader(u);k.deleteShader(t);v.uniforms={};v.attributes={};var w;t=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","modelMatrix","cameraPosition","morphTargetInfluences"];c.useVertexTexture?t.push("boneTexture"):t.push("boneGlobalMatrices");for(w in o)t.push(w);w=t;t=0;for(u=w.length;t<u;t++){d=w[t];v.uniforms[d]=k.getUniformLocation(v,d)}t=["position","normal","uv","uv2","tangent","color","skinIndex","skinWeight"];for(w=
0;w<c.maxMorphTargets;w++)t.push("morphTarget"+w);for(w=0;w<c.maxMorphNormals;w++)t.push("morphNormal"+w);for(s in b)t.push(s);s=t;w=0;for(t=s.length;w<t;w++){u=s[w];v.attributes[u]=k.getAttribLocation(v,u)}v.id=ua++;ga.push({program:v,code:n,usedTimes:1});Q.info.memory.programs=ga.length;s=v}a.program=s;s=a.program.attributes;s.position>=0&&k.enableVertexAttribArray(s.position);s.color>=0&&k.enableVertexAttribArray(s.color);s.normal>=0&&k.enableVertexAttribArray(s.normal);s.tangent>=0&&k.enableVertexAttribArray(s.tangent);
if(a.skinning&&s.skinIndex>=0&&s.skinWeight>=0){k.enableVertexAttribArray(s.skinIndex);k.enableVertexAttribArray(s.skinWeight)}if(a.attributes)for(j in a.attributes)s[j]!==void 0&&s[j]>=0&&k.enableVertexAttribArray(s[j]);if(a.morphTargets){a.numSupportedMorphTargets=0;v="morphTarget";for(j=0;j<this.maxMorphTargets;j++){w=v+j;if(s[w]>=0){k.enableVertexAttribArray(s[w]);a.numSupportedMorphTargets++}}}if(a.morphNormals){a.numSupportedMorphNormals=0;v="morphNormal";for(j=0;j<this.maxMorphNormals;j++){w=
......
......@@ -5830,11 +5830,14 @@ THREE.WebGLRenderer = function ( parameters ) {
function generateDefines ( defines ) {
var chunk, chunks = [];
var value, chunk, chunks = [];
for ( var d in defines ) {
chunk = "#define " + d + " " + defines[ d ];
value = defines[ d ];
if ( value === false ) continue;
chunk = "#define " + d + " " + value;
chunks.push( chunk );
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册