{"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: 2023-03-03 17:49:19\n * @LastEditors: zouyaoji 370681295@qq.com\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        const webgl2 = viewer.scene.context?.webgl2\n        fs.sources[fs.sources.length - 1] = fs.sources[fs.sources.length - 1].replace(\n          `${webgl2 ? 'out_FragColor' : 'gl_FragColor'}.rgb *= visibility;`,\n          `\n          float _depth = shadowPosition.z - shadowParameters.depthBias;\n          float _visibility = czm_shadowDepthCompare(shadowMap_texture, shadowPosition.xy, _depth);\n          ${\n            webgl2 ? 'out_FragColor' : 'gl_FragColor'\n          }.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":";AASA,IAAI,UAAa,GAAA,KAAA,CAAA;AACjB,IAAI,uCAAA,CAAA;AAEJ,MAAqB,qBAAsB,CAAA;AAAA,EACzC,OAAO,OAAO,MAAwB,EAAA;AACpC,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,OAAA;AAAA,KACF;AAEA,IAAM,MAAA,eAAA,GAAkB,OAAO,iBAAiB,CAAA,CAAA;AAEhD,IAAA,uCAAA,GAA0C,eAAgB,CAAA,iCAAA,CAAA;AAE1D,IAAA,eAAA,CAAgB,oCAAoC,SAAU,EAAA,EAAI,SAAW,EAAA,WAAA,EAAa,WAAW,gBAAkB,EAAA;AAtB3H,MAAA,IAAA,EAAA,CAAA;AAuBM,MAAK,EAAA,GAAA,uCAAA,CAAwC,KAAK,IAAI,CAAA,CAAE,IAAI,SAAW,EAAA,WAAA,EAAa,WAAW,gBAAgB,CAAA,CAAA;AAC/G,MAAA,MAAM,cAAc,SAAU,CAAA,YAAA,CAAA;AAE9B,MAAA,IAAI,WAAa,EAAA;AACf,QAAG,EAAA,CAAA,OAAA,CAAQ,CAAC,CAAI,GAAA,CAAA;AAAA;AAAA;AAAA,UAGZ,EAAA,EAAA,CAAG,OAAQ,CAAA,CAAC,CAAC,CAAA;AAAA,QAAA,CAAA,CAAA;AAEjB,QAAA,MAAM,MAAS,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,KAAM,CAAA,OAAA,KAAb,IAAsB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA;AACrC,QAAA,EAAA,CAAG,OAAQ,CAAA,EAAA,CAAG,OAAQ,CAAA,MAAA,GAAS,CAAC,CAAA,GAAI,EAAG,CAAA,OAAA,CAAQ,EAAG,CAAA,OAAA,CAAQ,MAAS,GAAA,CAAC,CAAE,CAAA,OAAA;AAAA,UACpE,CAAA,EAAG,MAAS,GAAA,eAAA,GAAkB,cAAc,CAAA,mBAAA,CAAA;AAAA,UAC5C,CAAA;AAAA;AAAA;AAAA,UAIE,EAAA,MAAA,GAAS,kBAAkB,cAC7B,CAAA;AAAA,UAAA,CAAA;AAAA,SAEF,CAAA;AACA,QAAA,EAAA,CAAG,OAAQ,CAAA,EAAA,CAAG,OAAQ,CAAA,MAAA,GAAS,CAAC,CAAA,GAAI,EAAG,CAAA,OAAA,CAAQ,EAAG,CAAA,OAAA,CAAQ,MAAS,GAAA,CAAC,CAAE,CAAA,OAAA;AAAA,UACpE,+EAAA;AAAA,UACA,qLAAA;AAAA,SACF,CAAA;AAAA,OACF;AAEA,MAAO,OAAA,EAAA,CAAA;AAAA,KACT,CAAA;AAEA,IAAa,UAAA,GAAA,IAAA,CAAA;AAAA,GACf;AAAA,EAEA,OAAO,OAAO,MAAwB,EAAA;AACpC,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAA,OAAA;AAAA,KACF;AAEA,IAAM,MAAA,eAAA,GAAkB,OAAO,iBAAiB,CAAA,CAAA;AAChD,IAAA,eAAA,CAAgB,iCAAoC,GAAA,uCAAA,CAAA;AAEpD,IAAa,UAAA,GAAA,KAAA,CAAA;AAAA,GACf;AACF;;;;"}