<!-- SOLID CITY · part 3384 -->
Update=U,S.sunLightShadows.needsUpdate=U,S.directionalLights.needsUpdate=U,S.directionalLightShadows.needsUpdate=U,S.pointLights.needsUpdate=U,S.pointLightShadows.needsUpdate=U,S.spotLights.needsUpdate=U,S.spotLightShadows.needsUpdate=U,S.rectAreaLights.needsUpdate=U,S.hemisphereLights.needsUpdate=U}function Sp(S){return S.isMeshLambertMaterial||S.isMeshToonMaterial||S.isMeshPhongMaterial||S.isMeshStandardMaterial||S.isShadowMaterial||S.isShaderMaterial&&S.lights===!0}this.getActiveCubeFace=function(){return q},this.getActiveMipmapLevel=function(){return X},this.getRenderTarget=function(){return ie},this.setRenderTargetTextures=function(S,U,W){let H=G.get(S);H.__autoAllocateDepthBuffer=S.resolveDepthBuffer===!1,H.__autoAllocateDepthBuffer===!1&&(H.__useRenderToTexture=!1),G.get(S.texture).__webglTexture=U,G.get(S.depthTexture).__webglTexture=H.__autoAllocateDepthBuffer?void 0:W,H.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(S,U){let W=G.get(S);W.__webglFramebuffer=U,W.__useDefaultFramebuffer=U===void 0},this.setRenderTarget=function(S,U=0,W=0){ie=S,q=U,X=W;let H=null,k=!1,Me=!1;if(S){let ye=G.get(S);if(ye.__useDefaultFramebuffer!==void 0){_.bindFramebuffer(L.FRAMEBUFFER,ye.__webglFramebuffer),ne.copy(S.viewport),Pe.copy(S.scissor),we=S.scissorTest,_.viewport(ne),_.scissor(Pe),_.setScissorTest(we),Y=-1;return}else if(ye.__webglFramebuffer===void 0)Z.setupRenderTarget(S);else if(ye.__hasExternalTextures)Z.rebindTextures(S,G.get(S.texture).__webglTexture,G.get(S.depthTexture).__webglTexture);else if(S.depthBuffer){let Ke=S.depthTexture;if(ye.__boundDepthTexture!==Ke){if(Ke!==null&&G.has(Ke)&&(S.width!==Ke.image.width||S.height!==Ke.image.height))throw new Error("THREE.WebGLRenderer: Attached DepthTexture is initialized to the incorrect size.");Z.setupDepthRenderbuffer(S)}}let Ae=S.texture;(Ae.isData3DTexture||Ae.isDataArrayTexture||Ae.isCompressedArrayTexture)&&(Me=!0);let Ie=G.get(S).__webglFramebuffer;S.isWebGLCubeRenderTarget?(Array.isArray(Ie[U])?H=Ie[U][W]:H=Ie[U],k=!0):S.samples>0&&Z.useMultisampledRTT(S)===!1?H=G.get(S).__webglMultisampledFramebuffer:Array.isArray(Ie)?H=Ie[W]:H=Ie,ne.copy(S.viewport),Pe.copy(S.scissor),we=S.scissorTest}else ne.copy(be).multiplyScalar(ee).floor(),Pe.copy(Ge).multiplyScalar(ee).floor(),we=xt;if(W!==0&&(H=V),_.bindFramebuffer(L.FRAMEBUFFER,H)&&_.drawBuffers(S,H),_.viewport(ne),_.scissor(Pe),_.setScissorTest(we),k){let ye=G.get(S.texture);L.framebufferTexture2D(L.FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_CUBE_MAP_POSITIVE_X+U,ye.__webglTexture,W)}else if(Me){let ye=U;for(let Ae=0;Ae<S.textures.length;Ae++){let Ie=G.get(S.textures[Ae]);L.framebufferTextureLayer(L.FRAMEBUFFER,L.COLOR_ATTACHMENT0+Ae,Ie.__webglTexture,W,ye)}}else if(S!==null&&W!==0){let ye=G.get(S.texture);L.framebufferTexture2D(L.FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_2D,ye.__webglTexture,W)}Y=-1};function wu(S){let U=G.get(S);return(U.__readFormat!==S.format||U.__readType!==S.type)&&(U.__readFormat=S.format,U.__readType=S.type,U.__formatReadable=R.textureFormatReadable(S.format),U.__typeReadable=R.textureTypeReadable(S.type)),U}this.readRenderTargetPixels=function(S,U,W,H,k,Me,Te,ye=0){if(!(S&&S.isWebGLRenderTarget)){ke("WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let Ae=G.get(S).__webglFramebuffer;if(S.isWebGLCubeRenderTarget&&Te!==void 0&&(Ae=Ae[Te]),Ae){_.bindFramebuffer(L.FRAMEBUFFER,Ae);try{let Ie=S.textures[ye],Ke=Ie.format,it=Ie.type;S.textures.length>1&&L.readBuffer(L.COLOR_ATTACHMENT0+ye);let Re=wu(Ie);if(Re.__formatReadable===!1){ke("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(Re.__typeReadable===!1){ke("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}U>=0&&U<=S.width-H&&W>=0&&W<=S.height-k&&L.readPixels(U,W,H,k,me.convert(Ke),me.convert(it),Me)}finally{let Ie=ie!==null?G.get(ie).__webglFramebuffer:null;_.bindFramebuffer(L.FRAMEBUFFER,Ie)}}},this.readRenderTargetPixelsAsync=async function(S,U,W,H,k,Me,Te,ye=0){if(!(S&&S.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Ae=G.get(S).__webglFramebuffer;if(S.isWebGLCubeRenderTarget&&Te!==void 0&&(Ae=Ae[Te]),Ae)if(U>=0&&U<=S.width-H&&W>=0&&W<=S.height-k){_.bindFramebuffer(L.FRAMEBUFFER,Ae);let Ie=S.textures[ye],Ke=Ie.format,it=Ie.type;S.textures.length>1&&L.readBuffer(L.COLOR_ATTACHMENT0+ye);let Re=wu(Ie);if(Re.__formatReadable===!1)throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(Re.__typeReadable===!1)throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");let gt=L.createBuffer();L.bindBuffer(L.PIXEL_PACK_BUFFER,gt),L.bufferData(L.PIXEL_PACK_BUFFER,Me.byteLength,L.S