|
@@ -452,16 +452,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
- function createRibbonBuffers ( geometry ) {
|
|
|
-
|
|
|
- geometry.__webglVertexBuffer = _gl.createBuffer();
|
|
|
- geometry.__webglColorBuffer = _gl.createBuffer();
|
|
|
- geometry.__webglNormalBuffer = _gl.createBuffer();
|
|
|
-
|
|
|
- _this.info.memory.geometries ++;
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
function createMeshBuffers ( geometryGroup ) {
|
|
|
|
|
|
geometryGroup.__webglVertexBuffer = _gl.createBuffer();
|
|
@@ -837,20 +827,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
- function initRibbonBuffers ( geometry, object ) {
|
|
|
-
|
|
|
- var nvertices = geometry.vertices.length;
|
|
|
-
|
|
|
- geometry.__vertexArray = new Float32Array( nvertices * 3 );
|
|
|
- geometry.__colorArray = new Float32Array( nvertices * 3 );
|
|
|
- geometry.__normalArray = new Float32Array( nvertices * 3 );
|
|
|
-
|
|
|
- geometry.__webglVertexCount = nvertices;
|
|
|
-
|
|
|
- initCustomAttributes ( geometry, object );
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
function initMeshBuffers ( geometryGroup, object ) {
|
|
|
|
|
|
var geometry = object.geometry,
|
|
@@ -1600,182 +1576,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
- function setRibbonBuffers ( geometry, hint ) {
|
|
|
-
|
|
|
- var v, c, n, vertex, offset, color, normal,
|
|
|
-
|
|
|
- i, il, ca, cal, customAttribute, value,
|
|
|
-
|
|
|
- vertices = geometry.vertices,
|
|
|
- colors = geometry.colors,
|
|
|
- normals = geometry.normals,
|
|
|
-
|
|
|
- vl = vertices.length,
|
|
|
- cl = colors.length,
|
|
|
- nl = normals.length,
|
|
|
-
|
|
|
- vertexArray = geometry.__vertexArray,
|
|
|
- colorArray = geometry.__colorArray,
|
|
|
- normalArray = geometry.__normalArray,
|
|
|
-
|
|
|
- dirtyVertices = geometry.verticesNeedUpdate,
|
|
|
- dirtyColors = geometry.colorsNeedUpdate,
|
|
|
- dirtyNormals = geometry.normalsNeedUpdate,
|
|
|
-
|
|
|
- customAttributes = geometry.__webglCustomAttributesList;
|
|
|
-
|
|
|
- if ( dirtyVertices ) {
|
|
|
-
|
|
|
- for ( v = 0; v < vl; v ++ ) {
|
|
|
-
|
|
|
- vertex = vertices[ v ];
|
|
|
-
|
|
|
- offset = v * 3;
|
|
|
-
|
|
|
- vertexArray[ offset ] = vertex.x;
|
|
|
- vertexArray[ offset + 1 ] = vertex.y;
|
|
|
- vertexArray[ offset + 2 ] = vertex.z;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, geometry.__webglVertexBuffer );
|
|
|
- _gl.bufferData( _gl.ARRAY_BUFFER, vertexArray, hint );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- if ( dirtyColors ) {
|
|
|
-
|
|
|
- for ( c = 0; c < cl; c ++ ) {
|
|
|
-
|
|
|
- color = colors[ c ];
|
|
|
-
|
|
|
- offset = c * 3;
|
|
|
-
|
|
|
- colorArray[ offset ] = color.r;
|
|
|
- colorArray[ offset + 1 ] = color.g;
|
|
|
- colorArray[ offset + 2 ] = color.b;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, geometry.__webglColorBuffer );
|
|
|
- _gl.bufferData( _gl.ARRAY_BUFFER, colorArray, hint );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- if ( dirtyNormals ) {
|
|
|
-
|
|
|
- for ( n = 0; n < nl; n ++ ) {
|
|
|
-
|
|
|
- normal = normals[ n ];
|
|
|
-
|
|
|
- offset = n * 3;
|
|
|
-
|
|
|
- normalArray[ offset ] = normal.x;
|
|
|
- normalArray[ offset + 1 ] = normal.y;
|
|
|
- normalArray[ offset + 2 ] = normal.z;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, geometry.__webglNormalBuffer );
|
|
|
- _gl.bufferData( _gl.ARRAY_BUFFER, normalArray, hint );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- if ( customAttributes ) {
|
|
|
-
|
|
|
- for ( i = 0, il = customAttributes.length; i < il; i ++ ) {
|
|
|
-
|
|
|
- customAttribute = customAttributes[ i ];
|
|
|
-
|
|
|
- if ( customAttribute.needsUpdate &&
|
|
|
- ( customAttribute.boundTo === undefined ||
|
|
|
- customAttribute.boundTo === "vertices" ) ) {
|
|
|
-
|
|
|
- offset = 0;
|
|
|
-
|
|
|
- cal = customAttribute.value.length;
|
|
|
-
|
|
|
- if ( customAttribute.size === 1 ) {
|
|
|
-
|
|
|
- for ( ca = 0; ca < cal; ca ++ ) {
|
|
|
-
|
|
|
- customAttribute.array[ ca ] = customAttribute.value[ ca ];
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- } else if ( customAttribute.size === 2 ) {
|
|
|
-
|
|
|
- for ( ca = 0; ca < cal; ca ++ ) {
|
|
|
-
|
|
|
- value = customAttribute.value[ ca ];
|
|
|
-
|
|
|
- customAttribute.array[ offset ] = value.x;
|
|
|
- customAttribute.array[ offset + 1 ] = value.y;
|
|
|
-
|
|
|
- offset += 2;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- } else if ( customAttribute.size === 3 ) {
|
|
|
-
|
|
|
- if ( customAttribute.type === "c" ) {
|
|
|
-
|
|
|
- for ( ca = 0; ca < cal; ca ++ ) {
|
|
|
-
|
|
|
- value = customAttribute.value[ ca ];
|
|
|
-
|
|
|
- customAttribute.array[ offset ] = value.r;
|
|
|
- customAttribute.array[ offset + 1 ] = value.g;
|
|
|
- customAttribute.array[ offset + 2 ] = value.b;
|
|
|
-
|
|
|
- offset += 3;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- for ( ca = 0; ca < cal; ca ++ ) {
|
|
|
-
|
|
|
- value = customAttribute.value[ ca ];
|
|
|
-
|
|
|
- customAttribute.array[ offset ] = value.x;
|
|
|
- customAttribute.array[ offset + 1 ] = value.y;
|
|
|
- customAttribute.array[ offset + 2 ] = value.z;
|
|
|
-
|
|
|
- offset += 3;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- } else if ( customAttribute.size === 4 ) {
|
|
|
-
|
|
|
- for ( ca = 0; ca < cal; ca ++ ) {
|
|
|
-
|
|
|
- value = customAttribute.value[ ca ];
|
|
|
-
|
|
|
- customAttribute.array[ offset ] = value.x;
|
|
|
- customAttribute.array[ offset + 1 ] = value.y;
|
|
|
- customAttribute.array[ offset + 2 ] = value.z;
|
|
|
- customAttribute.array[ offset + 3 ] = value.w;
|
|
|
-
|
|
|
- offset += 4;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- _gl.bindBuffer( _gl.ARRAY_BUFFER, customAttribute.buffer );
|
|
|
- _gl.bufferData( _gl.ARRAY_BUFFER, customAttribute.array, hint );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
function setMeshBuffers( geometryGroup, object, hint, dispose, material ) {
|
|
|
|
|
|
if ( ! geometryGroup.__inittedArrays ) {
|
|
@@ -3193,14 +2993,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
_this.info.render.calls ++;
|
|
|
_this.info.render.points += geometryGroup.__webglParticleCount;
|
|
|
|
|
|
- // render ribbon
|
|
|
-
|
|
|
- } else if ( object instanceof THREE.Ribbon ) {
|
|
|
-
|
|
|
- _gl.drawArrays( _gl.TRIANGLE_STRIP, 0, geometryGroup.__webglVertexCount );
|
|
|
-
|
|
|
- _this.info.render.calls ++;
|
|
|
-
|
|
|
}
|
|
|
|
|
|
};
|
|
@@ -3994,19 +3786,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- } else if ( object instanceof THREE.Ribbon ) {
|
|
|
-
|
|
|
- if ( ! geometry.__webglVertexBuffer ) {
|
|
|
-
|
|
|
- createRibbonBuffers( geometry );
|
|
|
- initRibbonBuffers( geometry, object );
|
|
|
-
|
|
|
- geometry.verticesNeedUpdate = true;
|
|
|
- geometry.colorsNeedUpdate = true;
|
|
|
- geometry.normalsNeedUpdate = true;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
} else if ( object instanceof THREE.Line ) {
|
|
|
|
|
|
if ( ! geometry.__webglVertexBuffer ) {
|
|
@@ -4058,8 +3837,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- } else if ( object instanceof THREE.Ribbon ||
|
|
|
- object instanceof THREE.Line ||
|
|
|
+ } else if ( object instanceof THREE.Line ||
|
|
|
object instanceof THREE.ParticleSystem ) {
|
|
|
|
|
|
geometry = object.geometry;
|
|
@@ -4165,24 +3943,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
material.attributes && clearCustomAttributes( material );
|
|
|
|
|
|
- } else if ( object instanceof THREE.Ribbon ) {
|
|
|
-
|
|
|
- material = getBufferMaterial( object, geometry );
|
|
|
-
|
|
|
- customAttributesDirty = material.attributes && areCustomAttributesDirty( material );
|
|
|
-
|
|
|
- if ( geometry.verticesNeedUpdate || geometry.colorsNeedUpdate || geometry.normalsNeedUpdate || customAttributesDirty ) {
|
|
|
-
|
|
|
- setRibbonBuffers( geometry, _gl.DYNAMIC_DRAW );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- geometry.verticesNeedUpdate = false;
|
|
|
- geometry.colorsNeedUpdate = false;
|
|
|
- geometry.normalsNeedUpdate = false;
|
|
|
-
|
|
|
- material.attributes && clearCustomAttributes( material );
|
|
|
-
|
|
|
} else if ( object instanceof THREE.Line ) {
|
|
|
|
|
|
material = getBufferMaterial( object, geometry );
|
|
@@ -4253,7 +4013,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( object instanceof THREE.Mesh ||
|
|
|
object instanceof THREE.ParticleSystem ||
|
|
|
- object instanceof THREE.Ribbon ||
|
|
|
object instanceof THREE.Line ) {
|
|
|
|
|
|
removeInstances( scene.__webglObjects, object );
|