@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.42 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{DefaultMaterial as a}from"../../webgl-engine/materials/DefaultMaterial.js";class r{constructor(){this._fastTransformOriginalMaterials=new Map,this._fastTransformClonedMaterials=new Map,this._graphicReferenceCount=0}enable(r,t,e){r.enableFastTransformUpdates((r=>{if(this._graphicReferenceCount<=1){if(this._fastTransformOriginalMaterials.has(r))return r;const a=t.byMaterial(r);return this._fastTransformOriginalMaterials.set(r,a),t.delete(r),r}const s=new a(r.parameters,e);return e.stage.add(s),this._fastTransformClonedMaterials.set(s,r),s}),e.localOriginFactory)}disable(a,r,t){const e=new Set,s=new Set;a.disableFastTransformUpdates((a=>{if(!this._fastTransformClonedMaterials.has(a)){const t=a,i=this._fastTransformOriginalMaterials.get(t);return r.has(i.uid)?(e.add(t),r.byUid(i.uid).material):(s.add(t),i.material)}const i=a,n=this._fastTransformClonedMaterials.get(i);return this._fastTransformClonedMaterials.delete(i),t.stage.remove(i),n}));for(const i of e)this._fastTransformOriginalMaterials.delete(i),t.stage.remove(i);for(const i of s){const a=this._fastTransformOriginalMaterials.get(i);this._fastTransformOriginalMaterials.delete(i),r.set(a.uid,a)}}onAddGraphic(){this._graphicReferenceCount++}onRemoveGraphic(a,r,t){this._graphicReferenceCount--,this.disable(a,r,t)}forEachMaterialInfo(a){this._fastTransformOriginalMaterials.forEach(a)}forEachClonedMaterial(a){this._fastTransformClonedMaterials.forEach(a)}destroy(a){a.removeMany(Array.from(this._fastTransformClonedMaterials.keys())),a.removeMany(Array.from(this._fastTransformOriginalMaterials.values(),(({material:a})=>a))),this._fastTransformClonedMaterials.clear(),this._fastTransformOriginalMaterials.clear()}}class t{constructor(){this._byUid=new Map,this._byMaterial=new Map}get materials(){return Array.from(this._byUid.values(),(a=>a.material))}byUid(a){return this._byUid.get(a)}byMaterial(a){return this._byMaterial.get(a)}set(a,r){this._byUid.set(a,r),this._byMaterial.set(r.material,r)}delete(a){const r=this._byMaterial.get(a)?.uid;r&&(this._byUid.delete(r),this._byMaterial.delete(a))}has(a){return this._byUid.has(a)}forEachMaterialInfo(a){this._byUid.forEach(a)}clear(){this._byUid.clear(),this._byMaterial.clear()}}export{t as MaterialInfoCache,r as MeshFastUpdateProcessor};