{"version":3,"file":"ShadowMapShaderExtend.mjs","sources":["../../../../../../packages/shared/extends/scene/ShadowMapShaderExtend.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2022-04-16 19:29:57\n * @LastEditTime: 2022-05-13 09:49:41\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\shared\\extends\\scene\\ShadowMapShaderExtend.ts\n */\n\nlet isExtended = false\nlet createShadowReceiveFragmentShaderNative\n\nexport default class ShadowMapShaderExtend {\n  static extend(viewer?: Cesium.Viewer) {\n    if (isExtended) {\n      return\n    }\n\n    const ShadowMapShader = Cesium['ShadowMapShader']\n\n    createShadowReceiveFragmentShaderNative = ShadowMapShader.createShadowReceiveFragmentShader\n\n    ShadowMapShader.createShadowReceiveFragmentShader = function (fs, shadowMap, castShadows, isTerrain, hasTerrainNormal) {\n      fs = createShadowReceiveFragmentShaderNative.bind(this)(fs, shadowMap, castShadows, isTerrain, hasTerrainNormal)\n      const isSpotLight = shadowMap._isSpotLight\n\n      if (isSpotLight) {\n        fs.sources[0] = `\n          uniform vec4 shadowMap_viewshedVisibleColor;\n          uniform vec4 shadowMap_viewshedInvisibleColor;\n          ${fs.sources[0]}\n        `\n        fs.sources[fs.sources.length - 1] = fs.sources[fs.sources.length - 1].replace(\n          'gl_FragColor.rgb *= visibility;',\n          `\n          float _depth = shadowPosition.z - shadowParameters.depthBias;\n          float _visibility = czm_shadowDepthCompare(shadowMap_texture, shadowPosition.xy, _depth);\n          gl_FragColor.rgb *= (_visibility < 0.999 ? shadowMap_viewshedInvisibleColor.rgb :shadowMap_viewshedVisibleColor.rgb);\n          `\n        )\n        fs.sources[fs.sources.length - 1] = fs.sources[fs.sources.length - 1].replace(\n          'vec3 directionEC = normalize(positionEC.xyz - shadowMap_lightPositionEC.xyz);',\n          'vec3 directionEC = normalize(positionEC.xyz - shadowMap_lightPositionEC.xyz);if (distance(positionEC.xyz, shadowMap_lightPositionEC.xyz) > shadowMap_lightPositionEC.w) { return; }'\n        )\n      }\n\n      return fs\n    }\n\n    isExtended = true\n  }\n\n  static revoke(viewer?: Cesium.Viewer) {\n    if (!isExtended) {\n      return\n    }\n\n    const ShadowMapShader = Cesium['ShadowMapShader']\n    ShadowMapShader.createShadowReceiveFragmentShader = createShadowReceiveFragmentShaderNative\n\n    isExtended = false\n  }\n}\n"],"names":[],"mappings":"AAAA,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,IAAI,uCAAuC,CAAC;AAC7B,MAAM,qBAAqB,CAAC;AAC3C,EAAE,OAAO,MAAM,CAAC,MAAM,EAAE;AACxB,IAAI,IAAI,UAAU,EAAE;AACpB,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACtD,IAAI,uCAAuC,GAAG,eAAe,CAAC,iCAAiC,CAAC;AAChG,IAAI,eAAe,CAAC,iCAAiC,GAAG,SAAS,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE;AAC1H,MAAM,EAAE,GAAG,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;AACvH,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC;AACjD,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACzB;AACA;AACA,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAQ,CAAC,CAAC;AACV,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,iCAAiC,EAAE,CAAC;AAC1H;AACA;AACA;AACA,UAAU,CAAC,CAAC,CAAC;AACb,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,+EAA+E,EAAE,qLAAqL,CAAC,CAAC;AAC9V,OAAO;AACP,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK,CAAC;AACN,IAAI,UAAU,GAAG,IAAI,CAAC;AACtB,GAAG;AACH,EAAE,OAAO,MAAM,CAAC,MAAM,EAAE;AACxB,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACtD,IAAI,eAAe,CAAC,iCAAiC,GAAG,uCAAuC,CAAC;AAChG,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,GAAG;AACH;;;;"}