|
@@ -114,22 +114,18 @@ function WebGLGeometries( gl, attributes, info ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- function getWireframeAttribute( geometry ) {
|
|
|
-
|
|
|
- var attribute = wireframeAttributes[ geometry.id ];
|
|
|
-
|
|
|
- if ( attribute ) return attribute;
|
|
|
+ function updateWireframeAttribute( geometry ) {
|
|
|
|
|
|
var indices = [];
|
|
|
|
|
|
var geometryIndex = geometry.index;
|
|
|
- var geometryAttributes = geometry.attributes;
|
|
|
-
|
|
|
- // console.time( 'wireframe' );
|
|
|
+ var geometryPosition = geometry.attributes.position;
|
|
|
+ var version = 0;
|
|
|
|
|
|
if ( geometryIndex !== null ) {
|
|
|
|
|
|
var array = geometryIndex.array;
|
|
|
+ version = geometryIndex.version;
|
|
|
|
|
|
for ( var i = 0, l = array.length; i < l; i += 3 ) {
|
|
|
|
|
@@ -143,7 +139,8 @@ function WebGLGeometries( gl, attributes, info ) {
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- var array = geometryAttributes.position.array;
|
|
|
+ var array = geometryPosition.array;
|
|
|
+ version = geometryPosition.version;
|
|
|
|
|
|
for ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {
|
|
|
|
|
@@ -157,15 +154,50 @@ function WebGLGeometries( gl, attributes, info ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- // console.timeEnd( 'wireframe' );
|
|
|
-
|
|
|
- attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
|
|
|
+ var attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
|
|
|
+ attribute.version = version;
|
|
|
|
|
|
attributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER );
|
|
|
|
|
|
+ //
|
|
|
+
|
|
|
+ var previousAttribute = wireframeAttributes[ geometry.id ];
|
|
|
+
|
|
|
+ if ( previousAttribute ) attributes.remove( previousAttribute );
|
|
|
+
|
|
|
+ //
|
|
|
+
|
|
|
wireframeAttributes[ geometry.id ] = attribute;
|
|
|
|
|
|
- return attribute;
|
|
|
+ }
|
|
|
+
|
|
|
+ function getWireframeAttribute( geometry ) {
|
|
|
+
|
|
|
+ var currentAttribute = wireframeAttributes[ geometry.id ];
|
|
|
+
|
|
|
+ if ( currentAttribute ) {
|
|
|
+
|
|
|
+ var geometryIndex = geometry.index;
|
|
|
+
|
|
|
+ if ( geometryIndex !== null ) {
|
|
|
+
|
|
|
+ // if the attribute is obsolete, create a new one
|
|
|
+
|
|
|
+ if ( currentAttribute.version < geometryIndex.version ) {
|
|
|
+
|
|
|
+ updateWireframeAttribute( geometry );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ updateWireframeAttribute( geometry );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return wireframeAttributes[ geometry.id ];
|
|
|
|
|
|
}
|
|
|
|