Browse Source

WebGLRenderer: Testing gl.finish() and gl.texImage2D instead of gl.texSubImage2D.

Mr.doob 14 years ago
parent
commit
967696257d

+ 2 - 2
build/Three.js

@@ -285,7 +285,7 @@ y;E=e.DYNAMIC_DRAW;Ha=n.vertices;v=n.colors;Ba=Ha.length;K=v.length;La=n.__verte
 {hash:P,counter:0});Y=B[P].hash+"_"+B[P].counter;n.geometryGroups[Y]==undefined&&(n.geometryGroups[Y]={faces:[],materials:G,vertices:0,numMorphTargets:J});L=L instanceof THREE.Face3?3:4;if(n.geometryGroups[Y].vertices+L>65535){B[P].counter+=1;Y=B[P].hash+"_"+B[P].counter;n.geometryGroups[Y]==undefined&&(n.geometryGroups[Y]={faces:[],materials:G,vertices:0,numMorphTargets:J})}n.geometryGroups[Y].faces.push(A);n.geometryGroups[Y].vertices+=L}}function D(n,E,y){n.push({buffer:E,object:y,opaque:{list:[],
 count:0},transparent:{list:[],count:0}})}function V(n){if(n!=ma){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)}ma=
 n}}function O(n,E,y){if((y.width&y.width-1)==0&&(y.height&y.height-1)==0){e.texParameteri(n,e.TEXTURE_WRAP_S,$(E.wrapS));e.texParameteri(n,e.TEXTURE_WRAP_T,$(E.wrapT));e.texParameteri(n,e.TEXTURE_MAG_FILTER,$(E.magFilter));e.texParameteri(n,e.TEXTURE_MIN_FILTER,$(E.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,oa(E.magFilter));e.texParameteri(n,e.TEXTURE_MIN_FILTER,
-oa(E.minFilter))}}function R(n,E){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+E);e.bindTexture(e.TEXTURE_2D,n.__webglTexture)}
+oa(E.minFilter))}}function R(n,E){if(n.needsUpdate){if(n.__webglInit){e.bindTexture(e.TEXTURE_2D,n.__webglTexture);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,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+E);e.bindTexture(e.TEXTURE_2D,n.__webglTexture)}
 function la(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,$(n.wrapS));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,$(n.wrapT));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,$(n.magFilter));e.texParameteri(e.TEXTURE_2D,
 e.TEXTURE_MIN_FILTER,$(n.minFilter));e.texImage2D(e.TEXTURE_2D,0,$(n.format),n.width,n.height,0,$(n.format),$(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 E,y;if(n){E=n.__webglFramebuffer;y=n.width;n=n.height}else{E=null;y=Fa;n=Aa}if(E!=
@@ -321,7 +321,7 @@ n.numSupportedMorphTargets++}if(J.morphTarget6>=0){e.enableVertexAttribArray(J.m
 E.update(undefined,!0);n.update(undefined,!1,E);E.matrixWorldInverse.flattenToArray(Ra);E.projectionMatrix.flattenToArray(Ja);ua.multiply(E.projectionMatrix,E.matrixWorldInverse);k(ua);this.initWebGLObjects(n);la(y);(this.autoClear||v)&&this.clear();P=n.__webglObjects.length;for(v=0;v<P;v++){A=n.__webglObjects[v];B=A.object;if(B.visible)if(!(B instanceof THREE.Mesh)||m(B)){B.matrixWorld.flattenToArray(B._objectMatrixArray);H(B,E);u(A);A.render=!0;if(this.sortObjects){Wa.copy(B.position);ua.multiplyVector3(Wa);
 A.z=Wa.z}}else A.render=!1;else A.render=!1}this.sortObjects&&n.__webglObjects.sort(w);Y=n.__webglObjectsImmediate.length;for(v=0;v<Y;v++){A=n.__webglObjectsImmediate[v];B=A.object;if(B.visible){B.matrixAutoUpdate&&B.matrixWorld.flattenToArray(B._objectMatrixArray);H(B,E);t(A)}}V(THREE.NormalBlending);for(v=0;v<P;v++){A=n.__webglObjects[v];if(A.render){B=A.object;J=A.buffer;L=A.opaque;h(B);for(A=0;A<L.count;A++){G=L.list[A];j(G.depthTest);f(E,X,ka,G,J,B)}}}for(v=0;v<Y;v++){A=n.__webglObjectsImmediate[v];
 B=A.object;if(B.visible){L=A.opaque;h(B);for(A=0;A<L.count;A++){G=L.list[A];j(G.depthTest);K=c(E,X,ka,G,B);B.render(function(ha){g(ha,K,G.shading)})}}}for(v=0;v<P;v++){A=n.__webglObjects[v];if(A.render){B=A.object;J=A.buffer;L=A.transparent;h(B);for(A=0;A<L.count;A++){G=L.list[A];V(G.blending);j(G.depthTest);f(E,X,ka,G,J,B)}}}for(v=0;v<Y;v++){A=n.__webglObjectsImmediate[v];B=A.object;if(B.visible){L=A.transparent;h(B);for(A=0;A<L.count;A++){G=L.list[A];V(G.blending);j(G.depthTest);K=c(E,X,ka,G,B);
-B.render(function(ha){g(ha,K,G.shading)})}}}n.__webglSprites.length&&z(n,E);stencil&&n.__webglShadowVolumes.length&&n.lights.length&&p(n);n.__webglLensFlares.length&&I(n,E);if(y&&y.minFilter!==THREE.NearestFilter&&y.minFilter!==THREE.LinearFilter){e.bindTexture(e.TEXTURE_2D,y.__webglTexture);e.generateMipmap(e.TEXTURE_2D);e.bindTexture(e.TEXTURE_2D,null)}};this.initWebGLObjects=function(n){if(!n.__webglObjects){n.__webglObjects=[];n.__webglObjectsImmediate=[];n.__webglShadowVolumes=[];n.__webglLensFlares=
+B.render(function(ha){g(ha,K,G.shading)})}}}n.__webglSprites.length&&z(n,E);stencil&&n.__webglShadowVolumes.length&&n.lights.length&&p(n);n.__webglLensFlares.length&&I(n,E);if(y&&y.minFilter!==THREE.NearestFilter&&y.minFilter!==THREE.LinearFilter){e.bindTexture(e.TEXTURE_2D,y.__webglTexture);e.generateMipmap(e.TEXTURE_2D);e.bindTexture(e.TEXTURE_2D,null)}e.finish()};this.initWebGLObjects=function(n){if(!n.__webglObjects){n.__webglObjects=[];n.__webglObjectsImmediate=[];n.__webglShadowVolumes=[];n.__webglLensFlares=
 [];n.__webglSprites=[]}for(;n.__objectsAdded.length;){var E=n.__objectsAdded[0],y=n,v=void 0,A=void 0,K=void 0;if(E._modelViewMatrix==undefined){E._modelViewMatrix=new THREE.Matrix4;E._normalMatrixArray=new Float32Array(9);E._modelViewMatrixArray=new Float32Array(16);E._objectMatrixArray=new Float32Array(16);E.matrixWorld.flattenToArray(E._objectMatrixArray)}if(E instanceof THREE.Mesh){A=E.geometry;A.geometryGroups==undefined&&U(A);for(v in A.geometryGroups){K=A.geometryGroups[v];if(!K.__webglVertexBuffer){var L=
 K;L.__webglVertexBuffer=e.createBuffer();L.__webglNormalBuffer=e.createBuffer();L.__webglTangentBuffer=e.createBuffer();L.__webglColorBuffer=e.createBuffer();L.__webglUVBuffer=e.createBuffer();L.__webglUV2Buffer=e.createBuffer();L.__webglSkinVertexABuffer=e.createBuffer();L.__webglSkinVertexBBuffer=e.createBuffer();L.__webglSkinIndicesBuffer=e.createBuffer();L.__webglSkinWeightsBuffer=e.createBuffer();L.__webglFaceBuffer=e.createBuffer();L.__webglLineBuffer=e.createBuffer();if(L.numMorphTargets){var G=
 void 0,P=void 0;L.__webglMorphTargetsBuffers=[];G=0;for(P=L.numMorphTargets;G<P;G++)L.__webglMorphTargetsBuffers.push(e.createBuffer())}L=K;G=E;var Y=void 0,B=void 0,J=void 0;J=void 0;var X=void 0,ka=void 0,ha=void 0,Ha=ha=P=0;B=void 0;J=void 0;var Ba=void 0;Y=void 0;B=void 0;X=G.geometry;Ba=X.faces;ka=L.faces;Y=0;for(B=ka.length;Y<B;Y++){J=ka[Y];J=Ba[J];if(J instanceof THREE.Face3){P+=3;ha+=1;Ha+=3}else if(J instanceof THREE.Face4){P+=4;ha+=2;Ha+=4}}Y=L;B=G;Ba=void 0;ka=void 0;var La=void 0,Xa=void 0;

+ 2 - 2
build/custom/ThreeWebGL.js

@@ -243,7 +243,7 @@ i[u];m=u*3;w[m]=color.r;w[m+1]=color.g;w[m+2]=color.b}c.bindBuffer(c.ARRAY_BUFFE
 u,z,D,n={},y=f.morphTargets!==undefined?f.morphTargets.length:0;f.geometryGroups={};m=0;for(x=f.faces.length;m<x;m++){w=f.faces[m];u=w.materials;z=s(u);n[z]==undefined&&(n[z]={hash:z,counter:0});D=n[z].hash+"_"+n[z].counter;f.geometryGroups[D]==undefined&&(f.geometryGroups[D]={faces:[],materials:u,vertices:0,numMorphTargets:y});w=w instanceof THREE.Face3?3:4;if(f.geometryGroups[D].vertices+w>65535){n[z].counter+=1;D=n[z].hash+"_"+n[z].counter;f.geometryGroups[D]==undefined&&(f.geometryGroups[D]={faces:[],
 materials:u,vertices:0,numMorphTargets:y})}f.geometryGroups[D].faces.push(m);f.geometryGroups[D].vertices+=w}}function W(f,s,k){f.push({buffer:s,object:k,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function Z(f){if(f!=ja){switch(f){case THREE.AdditiveBlending:c.blendEquation(c.FUNC_ADD);c.blendFunc(c.SRC_ALPHA,c.ONE);break;case THREE.SubtractiveBlending:c.blendEquation(c.FUNC_ADD);c.blendFunc(c.ZERO,c.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:c.blendEquation(c.FUNC_ADD);
 c.blendFunc(c.ZERO,c.SRC_COLOR);break;default:c.blendEquationSeparate(c.FUNC_ADD,c.FUNC_ADD);c.blendFuncSeparate(c.SRC_ALPHA,c.ONE_MINUS_SRC_ALPHA,c.ONE,c.ONE_MINUS_SRC_ALPHA)}ja=f}}function X(f,s,k){if((k.width&k.width-1)==0&&(k.height&k.height-1)==0){c.texParameteri(f,c.TEXTURE_WRAP_S,ha(s.wrapS));c.texParameteri(f,c.TEXTURE_WRAP_T,ha(s.wrapT));c.texParameteri(f,c.TEXTURE_MAG_FILTER,ha(s.magFilter));c.texParameteri(f,c.TEXTURE_MIN_FILTER,ha(s.minFilter));c.generateMipmap(f)}else{c.texParameteri(f,
-c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(f,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(f,c.TEXTURE_MAG_FILTER,Fa(s.magFilter));c.texParameteri(f,c.TEXTURE_MIN_FILTER,Fa(s.minFilter))}}function M(f,s){if(f.needsUpdate){if(f.__webglInit){c.bindTexture(c.TEXTURE_2D,f.__webglTexture);c.texSubImage2D(c.TEXTURE_2D,0,0,0,c.RGBA,c.UNSIGNED_BYTE,f.image)}else{f.__webglTexture=c.createTexture();c.bindTexture(c.TEXTURE_2D,f.__webglTexture);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,
+c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(f,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(f,c.TEXTURE_MAG_FILTER,Fa(s.magFilter));c.texParameteri(f,c.TEXTURE_MIN_FILTER,Fa(s.minFilter))}}function M(f,s){if(f.needsUpdate){if(f.__webglInit){c.bindTexture(c.TEXTURE_2D,f.__webglTexture);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,f.image)}else{f.__webglTexture=c.createTexture();c.bindTexture(c.TEXTURE_2D,f.__webglTexture);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,
 f.image);f.__webglInit=!0}X(c.TEXTURE_2D,f,f.image);c.bindTexture(c.TEXTURE_2D,null);f.needsUpdate=!1}c.activeTexture(c.TEXTURE0+s);c.bindTexture(c.TEXTURE_2D,f.__webglTexture)}function Ia(f){if(f&&!f.__webglFramebuffer){if(f.depthBuffer===undefined)f.depthBuffer=!0;if(f.stencilBuffer===undefined)f.stencilBuffer=!0;f.__webglFramebuffer=c.createFramebuffer();f.__webglRenderbuffer=c.createRenderbuffer();f.__webglTexture=c.createTexture();c.bindTexture(c.TEXTURE_2D,f.__webglTexture);c.texParameteri(c.TEXTURE_2D,
 c.TEXTURE_WRAP_S,ha(f.wrapS));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,ha(f.wrapT));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,ha(f.magFilter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,ha(f.minFilter));c.texImage2D(c.TEXTURE_2D,0,ha(f.format),f.width,f.height,0,ha(f.format),ha(f.type),null);c.bindRenderbuffer(c.RENDERBUFFER,f.__webglRenderbuffer);c.bindFramebuffer(c.FRAMEBUFFER,f.__webglFramebuffer);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,f.__webglTexture,
 0);if(f.depthBuffer&&!f.stencilBuffer){c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,f.width,f.height);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f.__webglRenderbuffer)}else if(f.depthBuffer&&f.stencilBuffer){c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_STENCIL,f.width,f.height);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_STENCIL_ATTACHMENT,c.RENDERBUFFER,f.__webglRenderbuffer)}else c.renderbufferStorage(c.RENDERBUFFER,c.RGBA4,f.width,f.height);c.bindTexture(c.TEXTURE_2D,
@@ -280,7 +280,7 @@ f.numSupportedMorphTargets++}if(y.morphTarget6>=0){c.enableVertexAttribArray(y.m
 s.update(undefined,!0);f.update(undefined,!1,s);s.matrixWorldInverse.flattenToArray(Ya);s.projectionMatrix.flattenToArray(Ta);Pa.multiply(s.projectionMatrix,s.matrixWorldInverse);q(Pa);this.initWebGLObjects(f);Ia(k);(this.autoClear||i)&&this.clear();z=f.__webglObjects.length;for(i=0;i<z;i++){m=f.__webglObjects[i];n=m.object;if(n.visible)if(!(n instanceof THREE.Mesh)||r(n)){n.matrixWorld.flattenToArray(n._objectMatrixArray);P(n,s);G(m);m.render=!0;if(this.sortObjects){Ua.copy(n.position);Pa.multiplyVector3(Ua);
 m.z=Ua.z}}else m.render=!1;else m.render=!1}this.sortObjects&&f.__webglObjects.sort(H);D=f.__webglObjectsImmediate.length;for(i=0;i<D;i++){m=f.__webglObjectsImmediate[i];n=m.object;if(n.visible){n.matrixAutoUpdate&&n.matrixWorld.flattenToArray(n._objectMatrixArray);P(n,s);E(m)}}Z(THREE.NormalBlending);for(i=0;i<z;i++){m=f.__webglObjects[i];if(m.render){n=m.object;y=m.buffer;w=m.opaque;p(n);for(m=0;m<w.count;m++){u=w.list[m];o(u.depthTest);g(s,B,K,u,y,n)}}}for(i=0;i<D;i++){m=f.__webglObjectsImmediate[i];
 n=m.object;if(n.visible){w=m.opaque;p(n);for(m=0;m<w.count;m++){u=w.list[m];o(u.depthTest);x=e(s,B,K,u,n);n.render(function(J){h(J,x,u.shading)})}}}for(i=0;i<z;i++){m=f.__webglObjects[i];if(m.render){n=m.object;y=m.buffer;w=m.transparent;p(n);for(m=0;m<w.count;m++){u=w.list[m];Z(u.blending);o(u.depthTest);g(s,B,K,u,y,n)}}}for(i=0;i<D;i++){m=f.__webglObjectsImmediate[i];n=m.object;if(n.visible){w=m.transparent;p(n);for(m=0;m<w.count;m++){u=w.list[m];Z(u.blending);o(u.depthTest);x=e(s,B,K,u,n);n.render(function(J){h(J,
-x,u.shading)})}}}f.__webglSprites.length&&F(f,s);stencil&&f.__webglShadowVolumes.length&&f.lights.length&&C(f);f.__webglLensFlares.length&&O(f,s);if(k&&k.minFilter!==THREE.NearestFilter&&k.minFilter!==THREE.LinearFilter){c.bindTexture(c.TEXTURE_2D,k.__webglTexture);c.generateMipmap(c.TEXTURE_2D);c.bindTexture(c.TEXTURE_2D,null)}};this.initWebGLObjects=function(f){if(!f.__webglObjects){f.__webglObjects=[];f.__webglObjectsImmediate=[];f.__webglShadowVolumes=[];f.__webglLensFlares=[];f.__webglSprites=
+x,u.shading)})}}}f.__webglSprites.length&&F(f,s);stencil&&f.__webglShadowVolumes.length&&f.lights.length&&C(f);f.__webglLensFlares.length&&O(f,s);if(k&&k.minFilter!==THREE.NearestFilter&&k.minFilter!==THREE.LinearFilter){c.bindTexture(c.TEXTURE_2D,k.__webglTexture);c.generateMipmap(c.TEXTURE_2D);c.bindTexture(c.TEXTURE_2D,null)}c.finish()};this.initWebGLObjects=function(f){if(!f.__webglObjects){f.__webglObjects=[];f.__webglObjectsImmediate=[];f.__webglShadowVolumes=[];f.__webglLensFlares=[];f.__webglSprites=
 []}for(;f.__objectsAdded.length;){var s=f.__objectsAdded[0],k=f,i=void 0,m=void 0,x=void 0;if(s._modelViewMatrix==undefined){s._modelViewMatrix=new THREE.Matrix4;s._normalMatrixArray=new Float32Array(9);s._modelViewMatrixArray=new Float32Array(16);s._objectMatrixArray=new Float32Array(16);s.matrixWorld.flattenToArray(s._objectMatrixArray)}if(s instanceof THREE.Mesh){m=s.geometry;m.geometryGroups==undefined&&ea(m);for(i in m.geometryGroups){x=m.geometryGroups[i];if(!x.__webglVertexBuffer){var w=x;
 w.__webglVertexBuffer=c.createBuffer();w.__webglNormalBuffer=c.createBuffer();w.__webglTangentBuffer=c.createBuffer();w.__webglColorBuffer=c.createBuffer();w.__webglUVBuffer=c.createBuffer();w.__webglUV2Buffer=c.createBuffer();w.__webglSkinVertexABuffer=c.createBuffer();w.__webglSkinVertexBBuffer=c.createBuffer();w.__webglSkinIndicesBuffer=c.createBuffer();w.__webglSkinWeightsBuffer=c.createBuffer();w.__webglFaceBuffer=c.createBuffer();w.__webglLineBuffer=c.createBuffer();if(w.numMorphTargets){var u=
 void 0,z=void 0;w.__webglMorphTargetsBuffers=[];u=0;for(z=w.numMorphTargets;u<z;u++)w.__webglMorphTargetsBuffers.push(c.createBuffer())}w=x;u=s;var D=void 0,n=void 0,y=void 0;y=void 0;var B=void 0,K=void 0,J=void 0,Y=J=z=0;n=void 0;y=void 0;var Q=void 0;D=void 0;n=void 0;B=u.geometry;Q=B.faces;K=w.faces;D=0;for(n=K.length;D<n;D++){y=K[D];y=Q[y];if(y instanceof THREE.Face3){z+=3;J+=1;Y+=3}else if(y instanceof THREE.Face4){z+=4;J+=2;Y+=4}}D=w;n=u;Q=void 0;K=void 0;var da=void 0,Ga=void 0;da=void 0;

+ 1 - 0
examples/webgl_geometry_dynamic.html

@@ -122,6 +122,7 @@
 				material = new THREE.MeshBasicMaterial( { color:0x0044ff, opacity:1, map: texture } );
 
 				mesh = new THREE.Mesh( geometry, material );
+				mesh.dynamic = true;
 				mesh.rotation.x = - 90 * Math.PI / 180;
 				scene.addObject( mesh );
 

+ 4 - 2
src/renderers/WebGLRenderer.js

@@ -3270,6 +3270,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		}
 
+		_gl.finish();
+
 	};
 
 
@@ -4651,8 +4653,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 			} else {
 
 				_gl.bindTexture( _gl.TEXTURE_2D, texture.__webglTexture );
-				// _gl.texImage2D( _gl.TEXTURE_2D, 0, _gl.RGBA, _gl.RGBA, _gl.UNSIGNED_BYTE, texture.image );
-				_gl.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, _gl.RGBA, _gl.UNSIGNED_BYTE, texture.image );
+				_gl.texImage2D( _gl.TEXTURE_2D, 0, _gl.RGBA, _gl.RGBA, _gl.UNSIGNED_BYTE, texture.image );
+				// _gl.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, _gl.RGBA, _gl.UNSIGNED_BYTE, texture.image );
 
 			}