Buckets:
ktongue/docker_container / simsite /frontend /node_modules /three /src /renderers /webgl /WebGLShaderCache.js
| let _id = 0; | |
| class WebGLShaderCache { | |
| constructor() { | |
| this.shaderCache = new Map(); | |
| this.materialCache = new Map(); | |
| } | |
| update( material ) { | |
| const vertexShader = material.vertexShader; | |
| const fragmentShader = material.fragmentShader; | |
| const vertexShaderStage = this._getShaderStage( vertexShader ); | |
| const fragmentShaderStage = this._getShaderStage( fragmentShader ); | |
| const materialShaders = this._getShaderCacheForMaterial( material ); | |
| if ( materialShaders.has( vertexShaderStage ) === false ) { | |
| materialShaders.add( vertexShaderStage ); | |
| vertexShaderStage.usedTimes ++; | |
| } | |
| if ( materialShaders.has( fragmentShaderStage ) === false ) { | |
| materialShaders.add( fragmentShaderStage ); | |
| fragmentShaderStage.usedTimes ++; | |
| } | |
| return this; | |
| } | |
| remove( material ) { | |
| const materialShaders = this.materialCache.get( material ); | |
| for ( const shaderStage of materialShaders ) { | |
| shaderStage.usedTimes --; | |
| if ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code ); | |
| } | |
| this.materialCache.delete( material ); | |
| return this; | |
| } | |
| getVertexShaderID( material ) { | |
| return this._getShaderStage( material.vertexShader ).id; | |
| } | |
| getFragmentShaderID( material ) { | |
| return this._getShaderStage( material.fragmentShader ).id; | |
| } | |
| dispose() { | |
| this.shaderCache.clear(); | |
| this.materialCache.clear(); | |
| } | |
| _getShaderCacheForMaterial( material ) { | |
| const cache = this.materialCache; | |
| let set = cache.get( material ); | |
| if ( set === undefined ) { | |
| set = new Set(); | |
| cache.set( material, set ); | |
| } | |
| return set; | |
| } | |
| _getShaderStage( code ) { | |
| const cache = this.shaderCache; | |
| let stage = cache.get( code ); | |
| if ( stage === undefined ) { | |
| stage = new WebGLShaderStage( code ); | |
| cache.set( code, stage ); | |
| } | |
| return stage; | |
| } | |
| } | |
| class WebGLShaderStage { | |
| constructor( code ) { | |
| this.id = _id ++; | |
| this.code = code; | |
| this.usedTimes = 0; | |
| } | |
| } | |
| export { WebGLShaderCache }; | |
Xet Storage Details
- Size:
- 1.98 kB
- Xet hash:
- 2ec36875ee3996e681f7e99723ae221faae8f75613449ed949e8eb40c81e1fe4
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.