<!-- SOLUV · part 652 -->
void 0){let _e=V.uniformsGroups;for(let ri=0,ts=_e.length;ri<ts;ri++){let xd=_e[ri];it.update(xd,dn),it.bind(xd,dn)}}return dn}function hm(M,N){M.ambientLightColor.needsUpdate=N,M.lightProbe.needsUpdate=N,M.sunLights.needsUpdate=N,M.sunLightShadows.needsUpdate=N,M.directionalLights.needsUpdate=N,M.directionalLightShadows.needsUpdate=N,M.pointLights.needsUpdate=N,M.pointLightShadows.needsUpdate=N,M.spotLights.needsUpdate=N,M.spotLightShadows.needsUpdate=N,M.rectAreaLights.needsUpdate=N,M.hemisphereLights.needsUpdate=N}function um(M){return M.isMeshLambertMaterial||M.isMeshToonMaterial||M.isMeshPhongMaterial||M.isMeshStandardMaterial||M.isShadowMaterial||M.isShaderMaterial&&M.lights===!0}this.getActiveCubeFace=function(){return X},this.getActiveMipmapLevel=function(){return W},this.getRenderTarget=function(){return st},this.setRenderTargetTextures=function(M,N,H){let V=G.get(M);V.__autoAllocateDepthBuffer=M.resolveDepthBuffer===!1,V.__autoAllocateDepthBuffer===!1&&(V.__useRenderToTexture=!1),G.get(M.texture).__webglTexture=N,G.get(M.depthTexture).__webglTexture=V.__autoAllocateDepthBuffer?void 0:H,V.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(M,N){let H=G.get(M);H.__webglFramebuffer=N,H.__useDefaultFramebuffer=N===void 0},this.setRenderTarget=function(M,N=0,H=0){st=M,X=N,W=H;let V=null,k=!1,yt=!1;if(M){let vt=G.get(M);if(vt.__useDefaultFramebuffer!==void 0){y.bindFramebuffer(P.FRAMEBUFFER,vt.__webglFramebuffer),et.copy(M.viewport),Dt.copy(M.scissor),wt=M.scissorTest,y.viewport(et),y.scissor(Dt),y.setScissorTest(wt),q=-1;return}else if(vt.__webglFramebuffer===void 0)Y.setupRenderTarget(M);else if(vt.__hasExternalTextures)Y.rebindTextures(M,G.get(M.texture).__webglTexture,G.get(M.depthTexture).__webglTexture);else if(M.depthBuffer){let $t=M.depthTexture;if(vt.__boundDepthTexture!==$t){if($t!==null&&G.has($t)&&(M.width!==$t.image.width||M.height!==$t.image.height))throw new Error("THREE.WebGLRenderer: Attached DepthTexture is initialized to the incorrect size.");Y.setupDepthRenderbuffer(M)}}let Ct=M.texture;(Ct.isData3DTexture||Ct.isDataArrayTexture||Ct.isCompressedArrayTexture)&&(yt=!0);let Pt=G.get(M).__webglFramebuffer;M.isWebGLCubeRenderTarget?(Array.isArray(Pt[N])?V=Pt[N][H]:V=Pt[N],k=!0):M.samples>0&&Y.useMultisampledRTT(M)===!1?V=G.get(M).__webglMultisampledFramebuffer:Array.isArray(Pt)?V=Pt[H]:V=Pt,et.copy(M.viewport),Dt.copy(M.scissor),wt=M.scissorTest}else et.copy(bt).multiplyScalar(j).floor(),Dt.copy(Gt).multiplyScalar(j).floor(),wt=he;if(H!==0&&(V=z),y.bindFramebuffer(P.FRAMEBUFFER,V)&&y.drawBuffers(M,V),y.viewport(et),y.scissor(Dt),y.setScissorTest(wt),k){let vt=G.get(M.texture);P.framebufferTexture2D(P.FRAMEBUFFER,P.COLOR_ATTACHMENT0,P.TEXTURE_CUBE_MAP_POSITIVE_X+N,vt.__webglTexture,H)}else if(yt){let vt=N;for(let Ct=0;Ct<M.textures.length;Ct++){let Pt=G.get(M.textures[Ct]);P.framebufferTextureLayer(P.FRAMEBUFFER,P.COLOR_ATTACHMENT0+Ct,Pt.__webglTexture,H,vt)}}else if(M!==null&&H!==0){let vt=G.get(M.texture);P.framebufferTexture2D(P.FRAMEBUFFER,P.COLOR_ATTACHMENT0,P.TEXTURE_2D,vt.__webglTexture,H)}q=-1};function _d(M){let N=G.get(M);return(N.__readFormat!==M.format||N.__readType!==M.type)&&(N.__readFormat=M.format,N.__readType=M.type,N.__formatReadable=w.textureFormatReadable(M.format),N.__typeReadable=w.textureTypeReadable(M.type)),N}this.readRenderTargetPixels=function(M,N,H,V,k,yt,At,vt=0){if(!(M&&M.isWebGLRenderTarget)){Lt("WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let Ct=G.get(M).__webglFramebuffer;if(M.isWebGLCubeRenderTarget&&At!==void 0&&(Ct=Ct[At]),Ct){y.bindFramebuffer(P.FRAMEBUFFER,Ct);try{let Pt=M.textures[vt],$t=Pt.format,te=Pt.type;M.textures.length>1&&P.readBuffer(P.COLOR_ATTACHMENT0+vt);let Rt=_d(Pt);if(Rt.__formatReadable===!1){Lt("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(Rt.__typeReadable===!1){Lt("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}N>=0&&N<=M.width-V&&H>=0&&H<=M.height-k&&P.readPixels(N,H,V,k,mt.convert($t),mt.convert(te),yt)}finally{let Pt=st!==null?G.get(st).__webglFramebuffer:null;y.bindFramebuffer(P.FRAMEBUFFER,Pt)}}},this.readRenderTargetPixelsAsync=async function(M,N,H,V,k,yt,At,vt=0){if(!(M&&M.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Ct=G.get(M).__webglFramebuffer;if(M.isWebGLCubeRenderTarget&&At!==void 0&&(Ct=Ct[At]),Ct)if(N>=0&&N<=M.width-V&&H>=0&&H<=M.height-k){y.bindFramebuffer(P.FRAMEBUFFER,Ct);let Pt=M.textures[vt],$t=Pt.format,te=Pt.type;M.textures.length>1&&P.readBuffer(P.COLOR_ATTACHMENT0+vt);let Rt=_d(Pt);if(Rt.__formatReadable===!1)throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(Rt.__typeReadable===!1)throw new Error("THREE.WebGLRenderer