提交 2386f308 编写于 作者: A alteredq

Trying simpler material update check.

See discussion here: https://github.com/alteredq/three.js/commit/2fd0b1b14deef40825d6a853ae0522f78d4b57d8
上级 afd5a743
......@@ -290,7 +290,7 @@ g=h.value[g];h.array[f]=g.x;h.array[f+1]=g.y;h.array[f+2]=g.z;h.array[f+3]=g.w;f
m,b)}if(q){k=0;for(j=q.length;k<j;k++){h=q[k];if(h.needsUpdate||c.sortParticles){i.bindBuffer(i.ARRAY_BUFFER,h.buffer);i.bufferData(i.ARRAY_BUFFER,h.array,b)}}}}function g(a,b){return b.z-a.z}function h(a,b){return b[1]-a[1]}function k(a,b,c){if(a.length)for(var d=0,e=a.length;d<e;d++){fa=T=null;M=ca=$=S=oa=Oa=Z=-1;la=true;a[d].render(b,c,ab,Ba);fa=T=null;M=ca=$=S=oa=Oa=Z=-1;la=true}}function j(a,b,c,d,e,f,g,h){var i,k,j,l;if(b){k=a.length-1;l=b=-1}else{k=0;b=a.length;l=1}for(var m=k;m!==b;m=m+l){i=
a[m];if(i.render){k=i.object;j=i.buffer;if(h)i=h;else{i=i[c];if(!i)continue;g&&C.setBlending(i.blending,i.blendEquation,i.blendSrc,i.blendDst);C.setDepthTest(i.depthTest);C.setDepthWrite(i.depthWrite);t(i.polygonOffset,i.polygonOffsetFactor,i.polygonOffsetUnits)}C.setObjectFaces(k);j instanceof THREE.BufferGeometry?C.renderBufferDirect(d,e,f,i,j,k):C.renderBuffer(d,e,f,i,j,k)}}}function l(a,b,c,d,e,f,g){for(var h,i,k=0,j=a.length;k<j;k++){h=a[k];i=h.object;if(i.visible){if(g)h=g;else{h=h[b];if(!h)continue;
f&&C.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);C.setDepthTest(h.depthTest);C.setDepthWrite(h.depthWrite);t(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}C.renderImmediateObject(c,d,e,h,i)}}}function o(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}function m(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return true;return false}function p(a){for(var b in a.attributes)a.attributes[b].needsUpdate=false}function q(a,b){for(var c=a.length-
1;c>=0;c--)a[c].object===b&&a.splice(c,1)}function n(a,b){for(var c=a.length-1;c>=0;c--)a[c]===b&&a.splice(c,1)}function r(a,b,c,d,e){if(!d.program||d.needsUpdate){d.program&&C.deallocateMaterial(d);C.initMaterial(d,b,c,e);d.needsUpdate=false}if(d.morphTargets&&!e.__webglMorphTargetInfluences){e.__webglMorphTargetInfluences=new Float32Array(C.maxMorphTargets);for(var f=0,g=C.maxMorphTargets;f<g;f++)e.__webglMorphTargetInfluences[f]=0}var h=false,f=d.program,g=f.uniforms,k=d.uniforms;if(f!==T){i.useProgram(f);
1;c>=0;c--)a[c].object===b&&a.splice(c,1)}function n(a,b){for(var c=a.length-1;c>=0;c--)a[c]===b&&a.splice(c,1)}function r(a,b,c,d,e){if(d.needsUpdate){d.program&&C.deallocateMaterial(d);C.initMaterial(d,b,c,e);d.needsUpdate=false}if(d.morphTargets&&!e.__webglMorphTargetInfluences){e.__webglMorphTargetInfluences=new Float32Array(C.maxMorphTargets);for(var f=0,g=C.maxMorphTargets;f<g;f++)e.__webglMorphTargetInfluences[f]=0}var h=false,f=d.program,g=f.uniforms,k=d.uniforms;if(f!==T){i.useProgram(f);
T=f;h=true}if(d.id!==M){M=d.id;h=true}if(h||a!==fa){i.uniformMatrix4fv(g.projectionMatrix,false,a._projectionMatrixArray);a!==fa&&(fa=a)}if(h){if(c&&d.fog){k.fogColor.value=c.color;if(c instanceof THREE.Fog){k.fogNear.value=c.near;k.fogFar.value=c.far}else if(c instanceof THREE.FogExp2)k.fogDensity.value=c.density}if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(la){for(var j,l=0,m=0,n=0,o,p,q,r=ob,u=r.directional.colors,v=r.directional.positions,t=r.point.colors,
x=r.point.positions,y=r.point.distances,B=r.spot.colors,G=r.spot.positions,H=r.spot.distances,S=r.spot.directions,I=r.spot.angles,F=r.spot.exponents,L=0,Z=0,N=0,O=q=0,c=O=0,h=b.length;c<h;c++){j=b[c];if(!j.onlyShadow){o=j.color;p=j.intensity;q=j.distance;if(j instanceof THREE.AmbientLight)if(C.gammaInput){l=l+o.r*o.r;m=m+o.g*o.g;n=n+o.b*o.b}else{l=l+o.r;m=m+o.g;n=n+o.b}else if(j instanceof THREE.DirectionalLight){q=L*3;if(C.gammaInput){u[q]=o.r*o.r*p*p;u[q+1]=o.g*o.g*p*p;u[q+2]=o.b*o.b*p*p}else{u[q]=
o.r*p;u[q+1]=o.g*p;u[q+2]=o.b*p}Da.copy(j.matrixWorld.getPosition());Da.subSelf(j.target.matrixWorld.getPosition());Da.normalize();v[q]=Da.x;v[q+1]=Da.y;v[q+2]=Da.z;L=L+1}else if(j instanceof THREE.PointLight){O=Z*3;if(C.gammaInput){t[O]=o.r*o.r*p*p;t[O+1]=o.g*o.g*p*p;t[O+2]=o.b*o.b*p*p}else{t[O]=o.r*p;t[O+1]=o.g*p;t[O+2]=o.b*p}o=j.matrixWorld.getPosition();x[O]=o.x;x[O+1]=o.y;x[O+2]=o.z;y[Z]=q;Z=Z+1}else if(j instanceof THREE.SpotLight){O=N*3;if(C.gammaInput){B[O]=o.r*o.r*p*p;B[O+1]=o.g*o.g*p*p;
......
此差异已折叠。
......@@ -4489,7 +4489,7 @@ THREE.WebGLRenderer = function ( parameters ) {
function setProgram( camera, lights, fog, material, object ) {
if ( ! material.program || material.needsUpdate ) {
if ( material.needsUpdate ) {
if ( material.program ) _this.deallocateMaterial( material );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册