<!-- SOLID-PLAYTIME · part 136 -->
{this.shaderCache=new Map,this.materialCache=new Map}update(t){let{vertexShader:e,fragmentShader:n}=t,i=this._getShaderStage(e),s=this._getShaderStage(n),a=this._getShaderCacheForMaterial(t);if(a.has(i)===!1)a.add(i),i.usedTimes++;if(a.has(s)===!1)a.add(s),s.usedTimes++;return this}remove(t){let e=this.materialCache.get(t);for(let n of e)if(n.usedTimes--,n.usedTimes===0)this.shaderCache.delete(n.code);return this.materialCache.delete(t),this}getVertexShaderID(t){return this._getShaderStage(t.vertexShader).id}getFragmentShaderID(t){return this._getShaderStage(t.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(t){let e=this.materialCache,n=e.get(t);if(n===void 0)n=new Set,e.set(t,n);return n}_getShaderStage(t){let e=this.shaderCache,n=e.get(t);if(n===void 0)n=new EM(t),e.set(t,n);return n}}class EM{constructor(t){this.id=e3++,this.code=t,this.usedTimes=0}}function n3(t,e,n,i,s,a,r){let o=new Ic,l=new bM,c=new Set,u=[],{logarithmicDepthBuffer:f,vertexTextures:h,precision:p}=s,v={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function y(b){if(c.add(b),b===0)return"uv";return`uv${b}`}function U(b,M,R,O,V){let k=O.fog,et=V.geometry,Z=b.isMeshStandardMaterial?O.environment:null,at=(b.isMeshStandardMaterial?n:e).get(b.envMap||Z),W=!!at&&at.mapping===Lc?at.image.height:null,ht=v[b.type];if(b.precision!==null){if(p=s.getMaxPrecision(b.precision),p!==b.precision)console.warn("THREE.WebGLProgram.getParameters:",b.precision,"not supported, using",p,"instead.")}let mt=et.morphAttributes.position||et.morphAttributes.normal||et.morphAttributes.color,q=mt!==void 0?mt.length:0,dt=0;if(et.morphAttributes.position!==void 0)dt=1;if(et.morphAttributes.normal!==void 0)dt=2;if(et.morphAttributes.color!==void 0)dt=3;let Ft,Et,X,ot;if(ht){let fe=is[ht];Ft=fe.vertexShader,Et=fe.fragmentShader}else Ft=b.vertexShader,Et=b.fragmentShader,l.update(b),X=l.getVertexShaderID(b),ot=l.getFragmentShaderID(b);let Y=t.getRenderTarget(),yt=t.state.buffers.depth.getReversed(),Ht=V.isInstancedMesh===!0,vt=V.isBatchedMesh===!0,ye=!!b.map,D=!!b.matcap,ce=!!at,kt=!!b.aoMap,Bt=!!b.lightMap,St=!!b.bumpMap,Ue=!!b.normalMap,Dt=!!b.displacementMap,It=!!b.emissiveMap,xe=!!b.metalnessMap,be=!!b.roughnessMap,Ee=b.anisotropy>0,L=b.clearcoat>0,E=b.dispersion>0,B=b.iridescence>0,tt=b.sheen>0,st=b.transmission>0,Q=Ee&&!!b.anisotropyMap,Tt=L&&!!b.clearcoatMap,z=L&&!!b.clearcoatNormalMap,j=L&&!!b.clearcoatRoughnessMap,ft=B&&!!b.iridescenceMap,K=B&&!!b.iridescenceThicknessMap,rt=tt&&!!b.sheenColorMap,_t=tt&&!!b.sheenRoughnessMap,Lt=!!b.specularMap,gt=!!b.specularColorMap,Wt=!!b.specularIntensityMap,P=st&&!!b.transmissionMap,xt=st&&!!b.thicknessMap,Ut=!!b.gradientMap,Rt=!!b.alphaMap,ct=b.alphaTest>0,it=!!b.alphaHash,Ct=!!b.extensions,Jt=Ps;if(b.toneMapped){if(Y===null||Y.isXRRenderTarget===!0)Jt=t.toneMapping}let Me={shaderID:ht,shaderType:b.type,shaderName:b.name,vertexShader:Ft,fragmentShader:Et,defines:b.defines,customVertexShaderID:X,customFragmentShaderID:ot,isRawShaderMaterial:b.isRawShaderMaterial===!0,glslVersion:b.glslVersion,precision:p,batching:vt,batchingColor:vt&&V._colorsTexture!==null,instancing:Ht,instancingColor:Ht&&V.instanceColor!==null,instancingMorph:Ht&&V.morphTexture!==null,supportsVertexTextures:h,outputColorSpace:Y===null?t.outputColorSpace:Y.isXRRenderTarget===!0?Y.texture.colorSpace:Pc,alphaToCoverage:!!b.alphaToCoverage,map:ye,matcap:D,envMap:ce,envMapMode:ce&&at.mapping,envMapCubeUVHeight:W,aoMap:kt,lightMap:Bt,bumpMap:St,normalMap:Ue,displacementMap:h&&Dt,emissiveMap:It,normalMapObjectSpace:Ue&&b.normalMapType===SE,normalMapTangentSpace:Ue&&b.normalMapType===AE,metalnessMap:xe,roughnessMap:be,anisotropy:Ee,anisotropyMap:Q,clearcoat:L,clearcoatMap:Tt,clearcoatNormalMap:z,clearcoatRoughnessMap:j,dispersion:E,iridescence:B,iridescenceMap:ft,iridescenceThicknessMap:K,sheen:tt,sheenColorMap:rt,sheenRoughnessMap:_t,specularMap:Lt,specularColorMap:gt,specularIntensityMap:Wt,transmission:st,transmissionMap:P,thicknessMap:xt,gradientMap:Ut,opaque:b.transparent===!1&&b.blending===Ac&&b.alphaToCoverage===!1,alphaMap:Rt,alphaTest:ct,alphaHash:it,combine:b.combine,mapUv:ye&&y(b.map.channel),aoMapUv:kt&&y(b.aoMap.channel),lightMapUv:Bt&&y(b.lightMap.channel),bumpMapUv:St&&y(b.bumpMap.channel),normalMapUv:Ue&&y(b.normalMap.channel),displacementMapUv:Dt&&y(b.displacementMap.channel),emissiveMapUv:It&&y(b.emissiveMap.channel),metalnessMapUv:xe&&y(b.metalnessMap.channel),roughnessMapUv:be&&y(b.roughnessMap.channel),anisotropyMapUv:Q&&y(b.anisotropyMap.channel),clearcoatMapUv:Tt&&y(b.clearcoatMap.chan