From 9ade9bbdc5bf78efed0d6a8fbd713165307668ba Mon Sep 17 00:00:00 2001 From: alteredq Date: Mon, 8 Aug 2011 16:34:26 +0200 Subject: [PATCH] Changed opaque pass to use front-to-back order. Impact on performance is not very big, you need a lot of triangles with complex fragment shaders to see the difference. --- build/Three.js | 2 +- build/custom/ThreeWebGL.js | 36 +++++++++++++++++----------------- src/renderers/WebGLRenderer.js | 32 ++++++++++++++++-------------- 3 files changed, 36 insertions(+), 34 deletions(-) diff --git a/build/Three.js b/build/Three.js index 876e117a..5a4a82a5 100644 --- a/build/Three.js +++ b/build/Three.js @@ -334,7 +334,7 @@ u[w],v.attributes[c]=k.getAttribLocation(v,c);K.push({program:v,code:h});u=v}b.p k.enableVertexAttribArray(u.skinWeight));if(b.attributes)for(g in b.attributes)u[g]!==void 0&&u[g]>=0&&k.enableVertexAttribArray(u[g]);if(b.morphTargets)for(g=b.numSupportedMorphTargets=0;g=0&&(k.enableVertexAttribArray(u[w]),b.numSupportedMorphTargets++)};this.render=function(b,c,o,B){var J,D,E,F,H,L,V,K,M=b.lights,ga=b.fog;this.shadowMapEnabled&&w(b,c);$.data.vertices=0;$.data.faces=0;$.data.drawCalls=0;c.matrixAutoUpdate&&c.update(void 0,!0);b.update(void 0, !1,c);c.matrixWorldInverse.flattenToArray(xa);c.projectionMatrix.flattenToArray(sa);ka.multiply(c.projectionMatrix,c.matrixWorldInverse);n(ka);this.initWebGLObjects(b);Q(o);(this.autoClear||B)&&this.clear();H=b.__webglObjects.length;for(B=0;B=0;B--)if(J=b.__webglObjects[B],J.render){V=J.object;K=J.buffer;E=J.opaque;j(V);for(J=0;J=0&&c.enableVertexAttribArray(o[g]);if(b.morphTargets)for(g=b.numSupportedMorphTargets=0;g=0&&(c.enableVertexAttribArray(o[s]),b.numSupportedMorphTargets++)};this.render=function(b,d,r,u){var w,x,y,v,H,C,q,I,E=b.lights,K=b.fog;this.shadowMapEnabled&&D(b,d);J.data.vertices=0;J.data.faces=0;J.data.drawCalls=0;d.matrixAutoUpdate&&d.update(void 0,!0);b.update(void 0, !1,d);d.matrixWorldInverse.flattenToArray(Ma);d.projectionMatrix.flattenToArray(La);wa.multiply(d.projectionMatrix,d.matrixWorldInverse);k(wa);this.initWebGLObjects(b);ka(r);(this.autoClear||u)&&this.clear();H=b.__webglObjects.length;for(u=0;u0||r.faceVertexUvs.length>0)i.__uvArray=new Float32Array(k*2);if(r.faceUvs.length>1||r.faceVertexUvs.length>1)i.__uv2Array=new Float32Array(k* -2)}if(j.geometry.skinWeights.length&&j.geometry.skinIndices.length)i.__skinVertexAArray=new Float32Array(k*4),i.__skinVertexBArray=new Float32Array(k*4),i.__skinIndexArray=new Float32Array(k*4),i.__skinWeightArray=new Float32Array(k*4);i.__faceArray=new Uint16Array(s*3+(j.geometry.edgeFaces?j.geometry.edgeFaces.length*6:0));i.__lineArray=new Uint16Array(w*2);if(i.numMorphTargets){i.__morphTargetsArrays=[];r=0;for(p=i.numMorphTargets;r=0;g--)d[g]==e&&d.splice(g,1)}else e instanceof THREE.LensFlare?u(d.__webglLensFlares,e):e instanceof -THREE.MarchingCubes&&u(d.__webglObjectsImmediate,e);b.__objectsRemoved.splice(0,1)}d=0;for(e=b.__webglObjects.length;d=0;u--)if(w=b.__webglObjects[u],w.render){q=w.object;I=w.buffer;y=w.opaque;i(q);for(w=0;w0||r.faceVertexUvs.length>0)i.__uvArray=new Float32Array(k*2);if(r.faceUvs.length>1||r.faceVertexUvs.length> +1)i.__uv2Array=new Float32Array(k*2)}if(j.geometry.skinWeights.length&&j.geometry.skinIndices.length)i.__skinVertexAArray=new Float32Array(k*4),i.__skinVertexBArray=new Float32Array(k*4),i.__skinIndexArray=new Float32Array(k*4),i.__skinWeightArray=new Float32Array(k*4);i.__faceArray=new Uint16Array(s*3+(j.geometry.edgeFaces?j.geometry.edgeFaces.length*6:0));i.__lineArray=new Uint16Array(w*2);if(i.numMorphTargets){i.__morphTargetsArrays=[];r=0;for(p=i.numMorphTargets;r=0;g--)d[g]==e&&d.splice(g,1)}else e instanceof THREE.LensFlare?u(d.__webglLensFlares, +e):e instanceof THREE.MarchingCubes&&u(d.__webglObjectsImmediate,e);b.__objectsRemoved.splice(0,1)}d=0;for(e=b.__webglObjects.length;d= 0; o -- ) { webglObject = scene.__webglObjects[ o ]; @@ -3855,6 +3856,7 @@ THREE.WebGLRenderer = function ( parameters ) { } // transparent pass + // (back-to-front order) for ( o = 0; o < ol; o ++ ) {