From 55c5baf63ff29c6c3cd24e8bdbe34d01d10c952a Mon Sep 17 00:00:00 2001 From: dubejf Date: Sun, 12 Jul 2015 12:56:22 -0400 Subject: [PATCH] Extract createBuffer and updateBuffer --- src/renderers/webgl/WebGLObjects.js | 65 ++++++++++++++++------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/src/renderers/webgl/WebGLObjects.js b/src/renderers/webgl/WebGLObjects.js index 602b19fc51..1b9258795c 100644 --- a/src/renderers/webgl/WebGLObjects.js +++ b/src/renderers/webgl/WebGLObjects.js @@ -167,8 +167,7 @@ THREE.WebGLObjects = function ( gl, properties, info ) { for ( var name in attributes ) { - var attribute = attributes[ name ]; - updateAttribute( attribute, name ); + updateAttribute( attributes[ name ], name ); } @@ -184,64 +183,74 @@ THREE.WebGLObjects = function ( gl, properties, info ) { if ( attributeProperties.__webglBuffer === undefined ) { - attributeProperties.__webglBuffer = gl.createBuffer(); - gl.bindBuffer( bufferType, attributeProperties.__webglBuffer ); + createBuffer( attributeProperties, data, bufferType ); - var usage = gl.STATIC_DRAW; + } else if ( data.needsUpdate === true ) { - if ( data instanceof THREE.DynamicBufferAttribute - || ( data instanceof THREE.InstancedBufferAttribute && data.dynamic === true ) - || ( data instanceof THREE.InterleavedBuffer && data.dynamic === true ) ) { + updateBuffer( attributeProperties, data, bufferType ); - usage = gl.DYNAMIC_DRAW; + } - } + } - gl.bufferData( bufferType, data.array, usage ); + function createBuffer ( attributeProperties, data, bufferType ) { - data.needsUpdate = false; + attributeProperties.__webglBuffer = gl.createBuffer(); + gl.bindBuffer( bufferType, attributeProperties.__webglBuffer ); - } else if ( data.needsUpdate === true ) { + var usage = gl.STATIC_DRAW; - gl.bindBuffer( bufferType, attributeProperties.__webglBuffer ); + if ( data instanceof THREE.DynamicBufferAttribute + || ( data instanceof THREE.InstancedBufferAttribute && data.dynamic === true ) + || ( data instanceof THREE.InterleavedBuffer && data.dynamic === true ) ) { - if ( data.updateRange === undefined || data.updateRange.count === -1 ) { // Not using update ranges + usage = gl.DYNAMIC_DRAW; - gl.bufferSubData( bufferType, 0, data.array ); + } - } else if ( data.updateRange.count === 0 ) { + gl.bufferData( bufferType, data.array, usage ); - console.error( 'THREE.WebGLRenderer.updateObject: using updateRange for THREE.DynamicBufferAttribute and marked as needsUpdate but count is 0, ensure you are using set methods or updating manually.' ); + data.needsUpdate = false; - } else { + } - gl.bufferSubData( bufferType, data.updateRange.offset * data.array.BYTES_PER_ELEMENT, - data.array.subarray( data.updateRange.offset, data.updateRange.offset + data.updateRange.count ) ); + function updateBuffer( attributeProperties, data, bufferType ) { - data.updateRange.count = 0; // reset range + gl.bindBuffer( bufferType, attributeProperties.__webglBuffer ); - } + if ( data.updateRange === undefined || data.updateRange.count === -1 ) { // Not using update ranges - data.needsUpdate = false; + gl.bufferSubData( bufferType, 0, data.array ); - } + } else if ( data.updateRange.count === 0 ) { - } + console.error( 'THREE.WebGLRenderer.updateObject: using updateRange for THREE.DynamicBufferAttribute and marked as needsUpdate but count is 0, ensure you are using set methods or updating manually.' ); + + } else { + + gl.bufferSubData( bufferType, data.updateRange.offset * data.array.BYTES_PER_ELEMENT, + data.array.subarray( data.updateRange.offset, data.updateRange.offset + data.updateRange.count ) ); + data.updateRange.count = 0; // reset range + + } + data.needsUpdate = false; + + } // returns the webgl buffer for a specified attribute this.getAttributeBuffer = function ( attribute ) { if ( attribute instanceof THREE.InterleavedBufferAttribute ) { - return properties.get( attribute.data ).__webglBuffer + return properties.get( attribute.data ).__webglBuffer; } return properties.get( attribute ).__webglBuffer; - } + }; this.update = function ( renderList ) { -- GitLab