Buckets:
ktongue/docker_container / simsite /frontend /node_modules /three /src /renderers /webgl /WebGLGeometries.js
| import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js'; | |
| import { arrayNeedsUint32 } from '../../utils.js'; | |
| function WebGLGeometries( gl, attributes, info, bindingStates ) { | |
| const geometries = {}; | |
| const wireframeAttributes = new WeakMap(); | |
| function onGeometryDispose( event ) { | |
| const geometry = event.target; | |
| if ( geometry.index !== null ) { | |
| attributes.remove( geometry.index ); | |
| } | |
| for ( const name in geometry.attributes ) { | |
| attributes.remove( geometry.attributes[ name ] ); | |
| } | |
| for ( const name in geometry.morphAttributes ) { | |
| const array = geometry.morphAttributes[ name ]; | |
| for ( let i = 0, l = array.length; i < l; i ++ ) { | |
| attributes.remove( array[ i ] ); | |
| } | |
| } | |
| geometry.removeEventListener( 'dispose', onGeometryDispose ); | |
| delete geometries[ geometry.id ]; | |
| const attribute = wireframeAttributes.get( geometry ); | |
| if ( attribute ) { | |
| attributes.remove( attribute ); | |
| wireframeAttributes.delete( geometry ); | |
| } | |
| bindingStates.releaseStatesOfGeometry( geometry ); | |
| if ( geometry.isInstancedBufferGeometry === true ) { | |
| delete geometry._maxInstanceCount; | |
| } | |
| // | |
| info.memory.geometries --; | |
| } | |
| function get( object, geometry ) { | |
| if ( geometries[ geometry.id ] === true ) return geometry; | |
| geometry.addEventListener( 'dispose', onGeometryDispose ); | |
| geometries[ geometry.id ] = true; | |
| info.memory.geometries ++; | |
| return geometry; | |
| } | |
| function update( geometry ) { | |
| const geometryAttributes = geometry.attributes; | |
| // Updating index buffer in VAO now. See WebGLBindingStates. | |
| for ( const name in geometryAttributes ) { | |
| attributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER ); | |
| } | |
| // morph targets | |
| const morphAttributes = geometry.morphAttributes; | |
| for ( const name in morphAttributes ) { | |
| const array = morphAttributes[ name ]; | |
| for ( let i = 0, l = array.length; i < l; i ++ ) { | |
| attributes.update( array[ i ], gl.ARRAY_BUFFER ); | |
| } | |
| } | |
| } | |
| function updateWireframeAttribute( geometry ) { | |
| const indices = []; | |
| const geometryIndex = geometry.index; | |
| const geometryPosition = geometry.attributes.position; | |
| let version = 0; | |
| if ( geometryIndex !== null ) { | |
| const array = geometryIndex.array; | |
| version = geometryIndex.version; | |
| for ( let i = 0, l = array.length; i < l; i += 3 ) { | |
| const a = array[ i + 0 ]; | |
| const b = array[ i + 1 ]; | |
| const c = array[ i + 2 ]; | |
| indices.push( a, b, b, c, c, a ); | |
| } | |
| } else if ( geometryPosition !== undefined ) { | |
| const array = geometryPosition.array; | |
| version = geometryPosition.version; | |
| for ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) { | |
| const a = i + 0; | |
| const b = i + 1; | |
| const c = i + 2; | |
| indices.push( a, b, b, c, c, a ); | |
| } | |
| } else { | |
| return; | |
| } | |
| const attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 ); | |
| attribute.version = version; | |
| // Updating index buffer in VAO now. See WebGLBindingStates | |
| // | |
| const previousAttribute = wireframeAttributes.get( geometry ); | |
| if ( previousAttribute ) attributes.remove( previousAttribute ); | |
| // | |
| wireframeAttributes.set( geometry, attribute ); | |
| } | |
| function getWireframeAttribute( geometry ) { | |
| const currentAttribute = wireframeAttributes.get( geometry ); | |
| if ( currentAttribute ) { | |
| const 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.get( geometry ); | |
| } | |
| return { | |
| get: get, | |
| update: update, | |
| getWireframeAttribute: getWireframeAttribute | |
| }; | |
| } | |
| export { WebGLGeometries }; | |
Xet Storage Details
- Size:
- 3.89 kB
- Xet hash:
- 6b0f61b2ef2102259a712c347efdd642c3ead90917659542705bd6b218c4198b
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.