@deck.gl/extensions 8.9.0-alpha.4 → 8.9.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +3688 -14538
- package/dist/es5/brushing/brushing.js +0 -8
- package/dist/es5/brushing/brushing.js.map +1 -1
- package/dist/es5/clip/clip.js +5 -5
- package/dist/es5/clip/clip.js.map +1 -1
- package/dist/es5/collide/collide-effect.js +285 -0
- package/dist/es5/collide/collide-effect.js.map +1 -0
- package/dist/es5/collide/collide-pass.js +80 -0
- package/dist/es5/collide/collide-pass.js.map +1 -0
- package/dist/es5/collide/collide.js +116 -0
- package/dist/es5/collide/collide.js.map +1 -0
- package/dist/es5/collide/shader-module.js +39 -0
- package/dist/es5/collide/shader-module.js.map +1 -0
- package/dist/es5/common/projection-utils.js +164 -0
- package/dist/es5/common/projection-utils.js.map +1 -0
- package/dist/es5/data-filter/shader-module.js +1 -0
- package/dist/es5/data-filter/shader-module.js.map +1 -1
- package/dist/es5/fill-style/fill-style.js +16 -125
- package/dist/es5/fill-style/fill-style.js.map +1 -1
- package/dist/es5/fill-style/shaders.glsl.js +6 -8
- package/dist/es5/fill-style/shaders.glsl.js.map +1 -1
- package/dist/es5/fp64/project64.glsl.js +1 -1
- package/dist/es5/index.js +16 -0
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/mask/mask-effect.js +280 -0
- package/dist/es5/mask/mask-effect.js.map +1 -0
- package/dist/es5/mask/mask-pass.js +106 -0
- package/dist/es5/mask/mask-pass.js.map +1 -0
- package/dist/es5/mask/mask.js +17 -4
- package/dist/es5/mask/mask.js.map +1 -1
- package/dist/es5/mask/shader-module.js +1 -1
- package/dist/es5/mask/shader-module.js.map +1 -1
- package/dist/es5/mask/utils.js +136 -0
- package/dist/es5/mask/utils.js.map +1 -0
- package/dist/es5/path-style/shaders.glsl.js +1 -1
- package/dist/es5/terrain/height-map-builder.js +116 -0
- package/dist/es5/terrain/height-map-builder.js.map +1 -0
- package/dist/es5/terrain/shader-module.js +84 -0
- package/dist/es5/terrain/shader-module.js.map +1 -0
- package/dist/es5/terrain/terrain-cover.js +259 -0
- package/dist/es5/terrain/terrain-cover.js.map +1 -0
- package/dist/es5/terrain/terrain-effect.js +337 -0
- package/dist/es5/terrain/terrain-effect.js.map +1 -0
- package/dist/es5/terrain/terrain-pass.js +122 -0
- package/dist/es5/terrain/terrain-pass.js.map +1 -0
- package/dist/es5/terrain/terrain-picking-pass.js +130 -0
- package/dist/es5/terrain/terrain-picking-pass.js.map +1 -0
- package/dist/es5/terrain/terrain.js +101 -0
- package/dist/es5/terrain/terrain.js.map +1 -0
- package/dist/es5/terrain/utils.js +32 -0
- package/dist/es5/terrain/utils.js.map +1 -0
- package/dist/es5/utils/debug.js +71 -0
- package/dist/es5/utils/debug.js.map +1 -0
- package/dist/esm/brushing/brushing.js +0 -7
- package/dist/esm/brushing/brushing.js.map +1 -1
- package/dist/esm/clip/clip.js +5 -4
- package/dist/esm/clip/clip.js.map +1 -1
- package/dist/esm/collide/collide-effect.js +250 -0
- package/dist/esm/collide/collide-effect.js.map +1 -0
- package/dist/esm/collide/collide-pass.js +30 -0
- package/dist/esm/collide/collide-pass.js.map +1 -0
- package/dist/esm/collide/collide.js +78 -0
- package/dist/esm/collide/collide.js.map +1 -0
- package/dist/esm/collide/shader-module.js +32 -0
- package/dist/esm/collide/shader-module.js.map +1 -0
- package/dist/esm/common/projection-utils.js +130 -0
- package/dist/esm/common/projection-utils.js.map +1 -0
- package/dist/esm/data-filter/shader-module.js +1 -0
- package/dist/esm/data-filter/shader-module.js.map +1 -1
- package/dist/esm/fill-style/fill-style.js +20 -72
- package/dist/esm/fill-style/fill-style.js.map +1 -1
- package/dist/esm/fill-style/shaders.glsl.js +5 -7
- package/dist/esm/fill-style/shaders.glsl.js.map +1 -1
- package/dist/esm/fp64/project64.glsl.js +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mask/mask-effect.js +233 -0
- package/dist/esm/mask/mask-effect.js.map +1 -0
- package/dist/esm/mask/mask-pass.js +62 -0
- package/dist/esm/mask/mask-pass.js.map +1 -0
- package/dist/esm/mask/mask.js +14 -3
- package/dist/esm/mask/mask.js.map +1 -1
- package/dist/esm/mask/shader-module.js +1 -1
- package/dist/esm/mask/shader-module.js.map +1 -1
- package/dist/esm/mask/utils.js +109 -0
- package/dist/esm/mask/utils.js.map +1 -0
- package/dist/esm/path-style/shaders.glsl.js +1 -1
- package/dist/esm/terrain/height-map-builder.js +92 -0
- package/dist/esm/terrain/height-map-builder.js.map +1 -0
- package/dist/esm/terrain/shader-module.js +73 -0
- package/dist/esm/terrain/shader-module.js.map +1 -0
- package/dist/esm/terrain/terrain-cover.js +219 -0
- package/dist/esm/terrain/terrain-cover.js.map +1 -0
- package/dist/esm/terrain/terrain-effect.js +231 -0
- package/dist/esm/terrain/terrain-effect.js.map +1 -0
- package/dist/esm/terrain/terrain-pass.js +69 -0
- package/dist/esm/terrain/terrain-pass.js.map +1 -0
- package/dist/esm/terrain/terrain-picking-pass.js +75 -0
- package/dist/esm/terrain/terrain-picking-pass.js.map +1 -0
- package/dist/esm/terrain/terrain.js +62 -0
- package/dist/esm/terrain/terrain.js.map +1 -0
- package/dist/esm/terrain/utils.js +21 -0
- package/dist/esm/terrain/utils.js.map +1 -0
- package/dist/esm/utils/debug.js +61 -0
- package/dist/esm/utils/debug.js.map +1 -0
- package/dist.min.js +1359 -1
- package/package.json +6 -4
- package/src/brushing/brushing.ts +0 -11
- package/src/clip/clip.ts +6 -5
- package/src/collide/collide-effect.ts +257 -0
- package/src/collide/collide-pass.ts +35 -0
- package/src/collide/collide.ts +79 -0
- package/src/collide/shader-module.ts +113 -0
- package/src/common/projection-utils.ts +187 -0
- package/src/data-filter/shader-module.ts +6 -0
- package/src/fill-style/fill-style.ts +15 -53
- package/src/fill-style/shaders.glsl.ts +6 -7
- package/src/index.ts +4 -0
- package/src/mask/mask-effect.ts +255 -0
- package/src/mask/mask-pass.ts +67 -0
- package/src/mask/mask.ts +17 -7
- package/src/mask/shader-module.ts +7 -1
- package/src/mask/utils.ts +148 -0
- package/src/terrain/height-map-builder.ts +120 -0
- package/src/terrain/shader-module.ts +161 -0
- package/src/terrain/terrain-cover.ts +225 -0
- package/src/terrain/terrain-effect.ts +223 -0
- package/src/terrain/terrain-pass.ts +86 -0
- package/src/terrain/terrain-picking-pass.ts +87 -0
- package/src/terrain/terrain.ts +74 -0
- package/src/terrain/utils.ts +29 -0
- package/src/utils/debug.ts +59 -0
- package/typed/brushing/brushing.d.ts +0 -1
- package/typed/brushing/brushing.d.ts.map +1 -1
- package/typed/brushing/brushing.js +83 -0
- package/typed/brushing/shader-module.js +116 -0
- package/typed/clip/clip.d.ts +1 -1
- package/typed/clip/clip.d.ts.map +1 -1
- package/typed/clip/clip.js +114 -0
- package/typed/collide/collide-effect.d.ts +28 -0
- package/typed/collide/collide-effect.d.ts.map +1 -0
- package/typed/collide/collide-pass.d.ts +14 -0
- package/typed/collide/collide-pass.d.ts.map +1 -0
- package/typed/collide/collide.d.ts +41 -0
- package/typed/collide/collide.d.ts.map +1 -0
- package/typed/collide/shader-module.d.ts +4 -0
- package/typed/collide/shader-module.d.ts.map +1 -0
- package/typed/common/projection-utils.d.ts +27 -0
- package/typed/common/projection-utils.d.ts.map +1 -0
- package/typed/data-filter/aggregator.js +98 -0
- package/typed/data-filter/data-filter.js +159 -0
- package/typed/data-filter/shader-module.d.ts.map +1 -1
- package/typed/data-filter/shader-module.js +152 -0
- package/typed/fill-style/fill-style.d.ts +14 -5
- package/typed/fill-style/fill-style.d.ts.map +1 -1
- package/typed/fill-style/fill-style.js +152 -0
- package/typed/fill-style/shaders.glsl.d.ts.map +1 -1
- package/typed/fill-style/shaders.glsl.js +95 -0
- package/typed/fp64/fp64.js +34 -0
- package/typed/fp64/project64.glsl.js +100 -0
- package/typed/fp64/project64.js +50 -0
- package/typed/index.d.ts +4 -0
- package/typed/index.d.ts.map +1 -1
- package/typed/index.js +9 -0
- package/typed/mask/mask-effect.d.ts +42 -0
- package/typed/mask/mask-effect.d.ts.map +1 -0
- package/typed/mask/mask-pass.d.ts +19 -0
- package/typed/mask/mask-pass.d.ts.map +1 -0
- package/typed/mask/mask.d.ts +9 -3
- package/typed/mask/mask.d.ts.map +1 -1
- package/typed/mask/mask.js +48 -0
- package/typed/mask/shader-module.d.ts.map +1 -1
- package/typed/mask/shader-module.js +73 -0
- package/typed/mask/utils.d.ts +13 -0
- package/typed/mask/utils.d.ts.map +1 -0
- package/typed/path-style/path-style.js +107 -0
- package/typed/path-style/shaders.glsl.js +93 -0
- package/typed/terrain/height-map-builder.d.ts +38 -0
- package/typed/terrain/height-map-builder.d.ts.map +1 -0
- package/typed/terrain/height-map.d.ts +27 -0
- package/typed/terrain/height-map.d.ts.map +1 -0
- package/typed/terrain/shader-module-offset.d.ts +4 -0
- package/typed/terrain/shader-module-offset.d.ts.map +1 -0
- package/typed/terrain/shader-module-source.d.ts +4 -0
- package/typed/terrain/shader-module-source.d.ts.map +1 -0
- package/typed/terrain/shader-module.d.ts +31 -0
- package/typed/terrain/shader-module.d.ts.map +1 -0
- package/typed/terrain/terrain-cover.d.ts +46 -0
- package/typed/terrain/terrain-cover.d.ts.map +1 -0
- package/typed/terrain/terrain-effect.d.ts +29 -0
- package/typed/terrain/terrain-effect.d.ts.map +1 -0
- package/typed/terrain/terrain-pass.d.ts +11 -0
- package/typed/terrain/terrain-pass.d.ts.map +1 -0
- package/typed/terrain/terrain-picking-pass.d.ts +19 -0
- package/typed/terrain/terrain-picking-pass.d.ts.map +1 -0
- package/typed/terrain/terrain.d.ts +21 -0
- package/typed/terrain/terrain.d.ts.map +1 -0
- package/typed/terrain/utils.d.ts +5 -0
- package/typed/terrain/utils.d.ts.map +1 -0
- package/typed/utils/debug.d.ts +6 -0
- package/typed/utils/debug.d.ts.map +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fill-style/shaders.glsl.ts"],"names":["patternVs","patternFs","inject","getPatternUniforms","opts","uniforms","fillPatternTexture","fill_patternTexture","fill_patternTextureSize","width","height","
|
|
1
|
+
{"version":3,"sources":["../../../src/fill-style/shaders.glsl.ts"],"names":["patternVs","patternFs","inject","getPatternUniforms","opts","uniforms","fillPatternTexture","fill_patternTexture","fill_patternTextureSize","width","height","fillPatternMask","fillPatternEnabled","coordinateOriginCommon","project_uCommonOrigin","coordinateOriginCommon64Low","fill_uvCoordinateOrigin","slice","fill_uvCoordinateOrigin64Low","fill_patternMask","fill_patternEnabled","patternShaders","name","vs","fs","dependencies","project","getUniforms"],"mappings":";;;;;;;AAAA;;AAQA,IAAMA,SAAS,ysBAAf;AAuBA,IAAMC,SAAS,wVAAf;AAcA,IAAMC,MAAM,GAAG;AACb,6EADa;AAKb,mVALa;AAab;AAba,CAAf;;AAyCA,SAASC,kBAAT,CACEC,IADF,EAEEC,QAFF,EAGuB;AACrB,MAAI,CAACD,IAAL,EAAW;AACT,WAAO,EAAP;AACD;;AACD,MAAI,wBAAwBA,IAA5B,EAAkC;AAChC,QAAOE,kBAAP,GAA6BF,IAA7B,CAAOE,kBAAP;AACA,WAAO;AACLC,MAAAA,mBAAmB,EAAED,kBADhB;AAELE,MAAAA,uBAAuB,EAAE,CAACF,kBAAkB,CAACG,KAApB,EAA2BH,kBAAkB,CAACI,MAA9C;AAFpB,KAAP;AAID;;AACD,MAAI,cAAcN,IAAlB,EAAwB;AACtB,gCAA4DA,IAA5D,CAAOO,eAAP;AAAA,QAAOA,eAAP,sCAAyB,IAAzB;AAAA,gCAA4DP,IAA5D,CAA+BQ,kBAA/B;AAAA,QAA+BA,kBAA/B,sCAAoD,IAApD;AACA,eAAwDP,QAAxD;AAAA,QAA8BQ,sBAA9B,QAAOC,qBAAP;AAEA,QAAMC,2BAA2B,GAAG,CAClC,uBAAYF,sBAAsB,CAAC,CAAD,CAAlC,CADkC,EAElC,uBAAYA,sBAAsB,CAAC,CAAD,CAAlC,CAFkC,CAApC;AAKA,WAAO;AACLG,MAAAA,uBAAuB,EAAEH,sBAAsB,CAACI,KAAvB,CAA6B,CAA7B,EAAgC,CAAhC,CADpB;AAELC,MAAAA,4BAA4B,EAAEH,2BAFzB;AAGLI,MAAAA,gBAAgB,EAAER,eAHb;AAILS,MAAAA,mBAAmB,EAAER;AAJhB,KAAP;AAMD;;AACD,SAAO,EAAP;AACD;;AAEM,IAAMS,cAAqD,GAAG;AACnEC,EAAAA,IAAI,EAAE,cAD6D;AAEnEC,EAAAA,EAAE,EAAEvB,SAF+D;AAGnEwB,EAAAA,EAAE,EAAEvB,SAH+D;AAInEC,EAAAA,MAAM,EAANA,MAJmE;AAKnEuB,EAAAA,YAAY,EAAE,CAACC,aAAD,CALqD;AAMnEC,EAAAA,WAAW,EAAExB;AANsD,CAA9D","sourcesContent":["import {project, fp64LowPart} from '@deck.gl/core';\nimport type {Viewport, _ShaderModule as ShaderModule, ProjectUniforms} from '@deck.gl/core';\n\nimport type {Texture2D} from '@luma.gl/webgl';\n\n/*\n * fill pattern shader module\n */\nconst patternVs = `\n#ifdef NON_INSTANCED_MODEL\n #define FILL_PATTERN_FRAME_ATTRIB fillPatternFrames\n #define FILL_PATTERN_SCALE_ATTRIB fillPatternScales\n #define FILL_PATTERN_OFFSET_ATTRIB fillPatternOffsets\n#else\n #define FILL_PATTERN_FRAME_ATTRIB instanceFillPatternFrames\n #define FILL_PATTERN_SCALE_ATTRIB instanceFillPatternScales\n #define FILL_PATTERN_OFFSET_ATTRIB instanceFillPatternOffsets\n#endif\n\nattribute vec4 FILL_PATTERN_FRAME_ATTRIB;\nattribute float FILL_PATTERN_SCALE_ATTRIB;\nattribute vec2 FILL_PATTERN_OFFSET_ATTRIB;\n\nuniform bool fill_patternEnabled;\nuniform vec2 fill_patternTextureSize;\n\nvarying vec2 fill_uv;\nvarying vec4 fill_patternBounds;\nvarying vec4 fill_patternPlacement;\n`;\n\nconst patternFs = `\nuniform bool fill_patternEnabled;\nuniform bool fill_patternMask;\nuniform sampler2D fill_patternTexture;\nuniform vec2 fill_uvCoordinateOrigin;\nuniform vec2 fill_uvCoordinateOrigin64Low;\n\nvarying vec4 fill_patternBounds;\nvarying vec4 fill_patternPlacement;\nvarying vec2 fill_uv;\n\nconst float FILL_UV_SCALE = 512.0 / 40000000.0;\n`;\n\nconst inject = {\n 'vs:DECKGL_FILTER_GL_POSITION': `\n fill_uv = geometry.position.xy;\n `,\n\n 'vs:DECKGL_FILTER_COLOR': `\n if (fill_patternEnabled) {\n fill_patternBounds = FILL_PATTERN_FRAME_ATTRIB / vec4(fill_patternTextureSize, fill_patternTextureSize);\n fill_patternPlacement.xy = FILL_PATTERN_OFFSET_ATTRIB;\n fill_patternPlacement.zw = FILL_PATTERN_SCALE_ATTRIB * FILL_PATTERN_FRAME_ATTRIB.zw;\n }\n `,\n\n 'fs:DECKGL_FILTER_COLOR': `\n if (fill_patternEnabled) {\n vec2 scale = FILL_UV_SCALE * fill_patternPlacement.zw;\n vec2 patternUV = mod(mod(fill_uvCoordinateOrigin, scale) + fill_uvCoordinateOrigin64Low + fill_uv, scale) / scale;\n patternUV = mod(fill_patternPlacement.xy + patternUV, 1.0);\n\n vec2 texCoords = fill_patternBounds.xy + fill_patternBounds.zw * patternUV;\n\n vec4 patternColor = texture2D(fill_patternTexture, texCoords);\n color.a *= patternColor.a;\n if (!fill_patternMask) {\n color.rgb = patternColor.rgb;\n }\n }\n `\n};\n\ntype FillStyleModuleSettings =\n | {\n viewport: Viewport;\n fillPatternEnabled?: boolean;\n fillPatternMask?: boolean;\n }\n | {\n fillPatternTexture: Texture2D;\n };\n\n/* eslint-disable camelcase */\nfunction getPatternUniforms(\n opts: FillStyleModuleSettings | {},\n uniforms: Record<string, any>\n): Record<string, any> {\n if (!opts) {\n return {};\n }\n if ('fillPatternTexture' in opts) {\n const {fillPatternTexture} = opts;\n return {\n fill_patternTexture: fillPatternTexture,\n fill_patternTextureSize: [fillPatternTexture.width, fillPatternTexture.height]\n };\n }\n if ('viewport' in opts) {\n const {fillPatternMask = true, fillPatternEnabled = true} = opts;\n const {project_uCommonOrigin: coordinateOriginCommon} = uniforms as ProjectUniforms;\n\n const coordinateOriginCommon64Low = [\n fp64LowPart(coordinateOriginCommon[0]),\n fp64LowPart(coordinateOriginCommon[1])\n ];\n\n return {\n fill_uvCoordinateOrigin: coordinateOriginCommon.slice(0, 2),\n fill_uvCoordinateOrigin64Low: coordinateOriginCommon64Low,\n fill_patternMask: fillPatternMask,\n fill_patternEnabled: fillPatternEnabled\n };\n }\n return {};\n}\n\nexport const patternShaders: ShaderModule<FillStyleModuleSettings> = {\n name: 'fill-pattern',\n vs: patternVs,\n fs: patternFs,\n inject,\n dependencies: [project],\n getUniforms: getPatternUniforms\n};\n"],"file":"shaders.glsl.js"}
|
|
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var _default = "\nconst vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);\n\nuniform vec2 project_uViewProjectionMatrixFP64[16];\
|
|
7
|
+
var _default = "\nconst vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);\n\nuniform vec2 project_uViewProjectionMatrixFP64[16];\nvoid mercatorProject_fp64(vec4 lnglat_fp64, out vec2 out_val[2]) {\n\n#if defined(NVIDIA_FP64_WORKAROUND)\n out_val[0] = sum_fp64(radians_fp64(lnglat_fp64.xy), PI_FP64 * ONE);\n#else\n out_val[0] = sum_fp64(radians_fp64(lnglat_fp64.xy), PI_FP64);\n#endif\n out_val[1] = sum_fp64(PI_FP64,\n log_fp64(tan_fp64(sum_fp64(PI_4_FP64, radians_fp64(lnglat_fp64.zw) / 2.0))));\n return;\n}\n\nvoid project_position_fp64(vec4 position_fp64, out vec2 out_val[2]) {\n vec2 pos_fp64[2];\n mercatorProject_fp64(position_fp64, pos_fp64);\n out_val[0] = mul_fp64(pos_fp64[0], WORLD_SCALE_FP64);\n out_val[1] = mul_fp64(pos_fp64[1], WORLD_SCALE_FP64);\n\n return;\n}\n\nvoid project_position_fp64(vec2 position, vec2 position64xyLow, out vec2 out_val[2]) {\n vec4 position64xy = vec4(\n position.x, position64xyLow.x,\n position.y, position64xyLow.y);\n\n project_position_fp64(position64xy, out_val);\n}\n\nvec4 project_common_position_to_clipspace_fp64(vec2 vertex_pos_modelspace[4]) {\n vec2 vertex_pos_clipspace[4];\n mat4_vec4_mul_fp64(project_uViewProjectionMatrixFP64, vertex_pos_modelspace,\n vertex_pos_clipspace);\n return vec4(\n vertex_pos_clipspace[0].x,\n vertex_pos_clipspace[1].x,\n vertex_pos_clipspace[2].x,\n vertex_pos_clipspace[3].x\n );\n}\n\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64xyLow, vec3 offset, out vec4 commonPosition\n) {\n vec2 offset64[4];\n vec4_fp64(vec4(offset, 0.0), offset64);\n\n float z = project_size(position.z);\n vec2 projectedPosition64xy[2];\n project_position_fp64(position.xy, position64xyLow.xy, projectedPosition64xy);\n\n vec2 commonPosition64[4];\n commonPosition64[0] = sum_fp64(offset64[0], projectedPosition64xy[0]);\n commonPosition64[1] = sum_fp64(offset64[1], projectedPosition64xy[1]);\n commonPosition64[2] = sum_fp64(offset64[2], vec2(z, 0.0));\n commonPosition64[3] = vec2(1.0, 0.0);\n\n commonPosition = vec4(projectedPosition64xy[0].x, projectedPosition64xy[1].x, z, 1.0);\n\n return project_common_position_to_clipspace_fp64(commonPosition64);\n}\n\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64xyLow, vec3 offset\n) {\n vec4 commonPosition;\n return project_position_to_clipspace(\n position, position64xyLow, offset, commonPosition\n );\n}\n";
|
|
8
8
|
exports.default = _default;
|
|
9
9
|
//# sourceMappingURL=project64.glsl.js.map
|
package/dist/es5/index.js
CHANGED
|
@@ -41,12 +41,24 @@ Object.defineProperty(exports, "ClipExtension", {
|
|
|
41
41
|
return _clip.default;
|
|
42
42
|
}
|
|
43
43
|
});
|
|
44
|
+
Object.defineProperty(exports, "CollideExtension", {
|
|
45
|
+
enumerable: true,
|
|
46
|
+
get: function get() {
|
|
47
|
+
return _collide.default;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
44
50
|
Object.defineProperty(exports, "MaskExtension", {
|
|
45
51
|
enumerable: true,
|
|
46
52
|
get: function get() {
|
|
47
53
|
return _mask.default;
|
|
48
54
|
}
|
|
49
55
|
});
|
|
56
|
+
Object.defineProperty(exports, "TerrainExtension", {
|
|
57
|
+
enumerable: true,
|
|
58
|
+
get: function get() {
|
|
59
|
+
return _terrain.default;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
50
62
|
Object.defineProperty(exports, "project64", {
|
|
51
63
|
enumerable: true,
|
|
52
64
|
get: function get() {
|
|
@@ -66,7 +78,11 @@ var _fillStyle = _interopRequireDefault(require("./fill-style/fill-style"));
|
|
|
66
78
|
|
|
67
79
|
var _clip = _interopRequireDefault(require("./clip/clip"));
|
|
68
80
|
|
|
81
|
+
var _collide = _interopRequireDefault(require("./collide/collide"));
|
|
82
|
+
|
|
69
83
|
var _mask = _interopRequireDefault(require("./mask/mask"));
|
|
70
84
|
|
|
85
|
+
var _terrain = _interopRequireDefault(require("./terrain/terrain"));
|
|
86
|
+
|
|
71
87
|
var _project = _interopRequireDefault(require("./fp64/project64"));
|
|
72
88
|
//# sourceMappingURL=index.js.map
|
package/dist/es5/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA","sourcesContent":["export {default as BrushingExtension} from './brushing/brushing';\nexport {default as DataFilterExtension} from './data-filter/data-filter';\nexport {default as Fp64Extension} from './fp64/fp64';\nexport {default as PathStyleExtension} from './path-style/path-style';\nexport {default as FillStyleExtension} from './fill-style/fill-style';\nexport {default as ClipExtension} from './clip/clip';\nexport {default as CollideExtension} from './collide/collide';\nexport {default as MaskExtension} from './mask/mask';\nexport {default as TerrainExtension} from './terrain/terrain';\n\n// Shader module\nexport {default as project64} from './fp64/project64';\n\n// Types\nexport type {BrushingExtensionProps} from './brushing/brushing';\nexport type {DataFilterExtensionProps} from './data-filter/data-filter';\nexport type {PathStyleExtensionProps} from './path-style/path-style';\nexport type {FillStyleExtensionProps} from './fill-style/fill-style';\nexport type {ClipExtensionProps} from './clip/clip';\nexport type {CollideExtensionProps} from './collide/collide';\nexport type {MaskExtensionProps} from './mask/mask';\nexport type {TerrainExtensionProps} from './terrain/terrain';\n"],"file":"index.js"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
|
|
16
|
+
var _core = require("@deck.gl/core");
|
|
17
|
+
|
|
18
|
+
var _core2 = require("@luma.gl/core");
|
|
19
|
+
|
|
20
|
+
var _core3 = require("@math.gl/core");
|
|
21
|
+
|
|
22
|
+
var _maskPass = _interopRequireDefault(require("./mask-pass"));
|
|
23
|
+
|
|
24
|
+
var _utils = require("./utils");
|
|
25
|
+
|
|
26
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
27
|
+
|
|
28
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
29
|
+
|
|
30
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
31
|
+
|
|
32
|
+
var MaskEffect = function () {
|
|
33
|
+
function MaskEffect() {
|
|
34
|
+
(0, _classCallCheck2.default)(this, MaskEffect);
|
|
35
|
+
(0, _defineProperty2.default)(this, "id", 'mask-effect');
|
|
36
|
+
(0, _defineProperty2.default)(this, "props", null);
|
|
37
|
+
(0, _defineProperty2.default)(this, "useInPicking", true);
|
|
38
|
+
(0, _defineProperty2.default)(this, "order", 0);
|
|
39
|
+
(0, _defineProperty2.default)(this, "dummyMaskMap", void 0);
|
|
40
|
+
(0, _defineProperty2.default)(this, "channels", []);
|
|
41
|
+
(0, _defineProperty2.default)(this, "masks", null);
|
|
42
|
+
(0, _defineProperty2.default)(this, "maskPass", void 0);
|
|
43
|
+
(0, _defineProperty2.default)(this, "maskMap", void 0);
|
|
44
|
+
(0, _defineProperty2.default)(this, "lastViewport", void 0);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
(0, _createClass2.default)(MaskEffect, [{
|
|
48
|
+
key: "preRender",
|
|
49
|
+
value: function preRender(gl, _ref) {
|
|
50
|
+
var layers = _ref.layers,
|
|
51
|
+
layerFilter = _ref.layerFilter,
|
|
52
|
+
viewports = _ref.viewports,
|
|
53
|
+
onViewportActive = _ref.onViewportActive,
|
|
54
|
+
views = _ref.views,
|
|
55
|
+
pass = _ref.pass;
|
|
56
|
+
var didRender = false;
|
|
57
|
+
|
|
58
|
+
if (!this.dummyMaskMap) {
|
|
59
|
+
this.dummyMaskMap = new _core2.Texture2D(gl, {
|
|
60
|
+
width: 1,
|
|
61
|
+
height: 1
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (pass.startsWith('picking')) {
|
|
66
|
+
return {
|
|
67
|
+
didRender: didRender
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
var maskLayers = layers.filter(function (l) {
|
|
72
|
+
return l.props.visible && l.props.operation.includes('mask');
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
if (maskLayers.length === 0) {
|
|
76
|
+
this.masks = null;
|
|
77
|
+
this.channels.length = 0;
|
|
78
|
+
return {
|
|
79
|
+
didRender: didRender
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
this.masks = {};
|
|
84
|
+
|
|
85
|
+
if (!this.maskPass) {
|
|
86
|
+
this.maskPass = new _maskPass.default(gl, {
|
|
87
|
+
id: 'default-mask'
|
|
88
|
+
});
|
|
89
|
+
this.maskMap = this.maskPass.maskMap;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
var channelMap = this._sortMaskChannels(maskLayers);
|
|
93
|
+
|
|
94
|
+
var viewport = viewports[0];
|
|
95
|
+
var viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);
|
|
96
|
+
|
|
97
|
+
for (var maskId in channelMap) {
|
|
98
|
+
var result = this._renderChannel(channelMap[maskId], {
|
|
99
|
+
layerFilter: layerFilter,
|
|
100
|
+
onViewportActive: onViewportActive,
|
|
101
|
+
views: views,
|
|
102
|
+
viewport: viewport,
|
|
103
|
+
viewportChanged: viewportChanged
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
didRender || (didRender = result);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return {
|
|
110
|
+
didRender: didRender
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}, {
|
|
114
|
+
key: "_renderChannel",
|
|
115
|
+
value: function _renderChannel(channelInfo, _ref2) {
|
|
116
|
+
var layerFilter = _ref2.layerFilter,
|
|
117
|
+
onViewportActive = _ref2.onViewportActive,
|
|
118
|
+
views = _ref2.views,
|
|
119
|
+
viewport = _ref2.viewport,
|
|
120
|
+
viewportChanged = _ref2.viewportChanged;
|
|
121
|
+
var didRender = false;
|
|
122
|
+
var oldChannelInfo = this.channels[channelInfo.index];
|
|
123
|
+
|
|
124
|
+
if (!oldChannelInfo) {
|
|
125
|
+
return didRender;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
var maskChanged = channelInfo === oldChannelInfo || oldChannelInfo.layers.length !== channelInfo.layers.length || channelInfo.layerBounds.some(function (b, i) {
|
|
129
|
+
return b !== oldChannelInfo.layerBounds[i];
|
|
130
|
+
});
|
|
131
|
+
channelInfo.bounds = oldChannelInfo.bounds;
|
|
132
|
+
channelInfo.maskBounds = oldChannelInfo.maskBounds;
|
|
133
|
+
this.channels[channelInfo.index] = channelInfo;
|
|
134
|
+
|
|
135
|
+
if (maskChanged || viewportChanged) {
|
|
136
|
+
this.lastViewport = viewport;
|
|
137
|
+
channelInfo.bounds = (0, _utils.getMaskBounds)({
|
|
138
|
+
layers: channelInfo.layers,
|
|
139
|
+
viewport: viewport
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
if (maskChanged || !(0, _core3.equals)(channelInfo.bounds, oldChannelInfo.bounds)) {
|
|
143
|
+
var maskPass = this.maskPass,
|
|
144
|
+
maskMap = this.maskMap;
|
|
145
|
+
var maskViewport = (0, _utils.getMaskViewport)({
|
|
146
|
+
bounds: channelInfo.bounds,
|
|
147
|
+
viewport: viewport,
|
|
148
|
+
width: maskMap.width,
|
|
149
|
+
height: maskMap.height
|
|
150
|
+
});
|
|
151
|
+
channelInfo.maskBounds = maskViewport ? maskViewport.getBounds() : [0, 0, 1, 1];
|
|
152
|
+
maskPass.render({
|
|
153
|
+
pass: 'mask',
|
|
154
|
+
channel: channelInfo.index,
|
|
155
|
+
layers: channelInfo.layers,
|
|
156
|
+
layerFilter: layerFilter,
|
|
157
|
+
viewports: maskViewport ? [maskViewport] : [],
|
|
158
|
+
onViewportActive: onViewportActive,
|
|
159
|
+
views: views,
|
|
160
|
+
moduleParameters: {
|
|
161
|
+
devicePixelRatio: 1
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
didRender = true;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
this.masks[channelInfo.id] = {
|
|
169
|
+
index: channelInfo.index,
|
|
170
|
+
bounds: channelInfo.maskBounds,
|
|
171
|
+
coordinateOrigin: channelInfo.coordinateOrigin,
|
|
172
|
+
coordinateSystem: channelInfo.coordinateSystem
|
|
173
|
+
};
|
|
174
|
+
return didRender;
|
|
175
|
+
}
|
|
176
|
+
}, {
|
|
177
|
+
key: "_sortMaskChannels",
|
|
178
|
+
value: function _sortMaskChannels(maskLayers) {
|
|
179
|
+
var _this = this;
|
|
180
|
+
|
|
181
|
+
var channelMap = {};
|
|
182
|
+
var channelCount = 0;
|
|
183
|
+
|
|
184
|
+
var _iterator = _createForOfIteratorHelper(maskLayers),
|
|
185
|
+
_step;
|
|
186
|
+
|
|
187
|
+
try {
|
|
188
|
+
var _loop = function _loop() {
|
|
189
|
+
var layer = _step.value;
|
|
190
|
+
var id = layer.root.id;
|
|
191
|
+
var channelInfo = channelMap[id];
|
|
192
|
+
|
|
193
|
+
if (!channelInfo) {
|
|
194
|
+
if (++channelCount > 4) {
|
|
195
|
+
_core.log.warn('Too many mask layers. The max supported is 4')();
|
|
196
|
+
|
|
197
|
+
return "continue";
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
channelInfo = {
|
|
201
|
+
id: id,
|
|
202
|
+
index: _this.channels.findIndex(function (c) {
|
|
203
|
+
return (c === null || c === void 0 ? void 0 : c.id) === id;
|
|
204
|
+
}),
|
|
205
|
+
layers: [],
|
|
206
|
+
layerBounds: [],
|
|
207
|
+
coordinateOrigin: layer.root.props.coordinateOrigin,
|
|
208
|
+
coordinateSystem: layer.root.props.coordinateSystem
|
|
209
|
+
};
|
|
210
|
+
channelMap[id] = channelInfo;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
channelInfo.layers.push(layer);
|
|
214
|
+
channelInfo.layerBounds.push(layer.getBounds());
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
218
|
+
var _ret = _loop();
|
|
219
|
+
|
|
220
|
+
if (_ret === "continue") continue;
|
|
221
|
+
}
|
|
222
|
+
} catch (err) {
|
|
223
|
+
_iterator.e(err);
|
|
224
|
+
} finally {
|
|
225
|
+
_iterator.f();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
for (var i = 0; i < 4; i++) {
|
|
229
|
+
var channelInfo = this.channels[i];
|
|
230
|
+
|
|
231
|
+
if (!channelInfo || !(channelInfo.id in channelMap)) {
|
|
232
|
+
this.channels[i] = null;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
for (var maskId in channelMap) {
|
|
237
|
+
var _channelInfo = channelMap[maskId];
|
|
238
|
+
|
|
239
|
+
if (_channelInfo.index < 0) {
|
|
240
|
+
_channelInfo.index = this.channels.findIndex(function (c) {
|
|
241
|
+
return !c;
|
|
242
|
+
});
|
|
243
|
+
this.channels[_channelInfo.index] = _channelInfo;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return channelMap;
|
|
248
|
+
}
|
|
249
|
+
}, {
|
|
250
|
+
key: "getModuleParameters",
|
|
251
|
+
value: function getModuleParameters() {
|
|
252
|
+
return {
|
|
253
|
+
maskMap: this.masks ? this.maskMap : this.dummyMaskMap,
|
|
254
|
+
maskChannels: this.masks
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
}, {
|
|
258
|
+
key: "cleanup",
|
|
259
|
+
value: function cleanup() {
|
|
260
|
+
if (this.dummyMaskMap) {
|
|
261
|
+
this.dummyMaskMap.delete();
|
|
262
|
+
this.dummyMaskMap = undefined;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
if (this.maskPass) {
|
|
266
|
+
this.maskPass.delete();
|
|
267
|
+
this.maskPass = undefined;
|
|
268
|
+
this.maskMap = undefined;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
this.lastViewport = undefined;
|
|
272
|
+
this.masks = null;
|
|
273
|
+
this.channels.length = 0;
|
|
274
|
+
}
|
|
275
|
+
}]);
|
|
276
|
+
return MaskEffect;
|
|
277
|
+
}();
|
|
278
|
+
|
|
279
|
+
exports.default = MaskEffect;
|
|
280
|
+
//# sourceMappingURL=mask-effect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/mask/mask-effect.ts"],"names":["MaskEffect","gl","layers","layerFilter","viewports","onViewportActive","views","pass","didRender","dummyMaskMap","Texture2D","width","height","startsWith","maskLayers","filter","l","props","visible","operation","includes","length","masks","channels","maskPass","MaskPass","id","maskMap","channelMap","_sortMaskChannels","viewport","viewportChanged","lastViewport","equals","maskId","result","_renderChannel","channelInfo","oldChannelInfo","index","maskChanged","layerBounds","some","b","i","bounds","maskBounds","maskViewport","getBounds","render","channel","moduleParameters","devicePixelRatio","coordinateOrigin","coordinateSystem","channelCount","layer","root","log","warn","findIndex","c","push","maskChannels","delete","undefined"],"mappings":"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","sourcesContent":["import {Layer, Viewport, Effect, PreRenderOptions, CoordinateSystem, log} from '@deck.gl/core';\nimport {Texture2D} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport MaskPass from './mask-pass';\nimport {getMaskBounds, getMaskViewport, MaskBounds} from './utils';\n// import {debugFBO} from '../utils/debug';\n\ntype Mask = {\n /** The channel index */\n index: number;\n bounds: MaskBounds;\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\ntype Channel = {\n id: string;\n index: number;\n layers: Layer[];\n bounds: MaskBounds;\n maskBounds: MaskBounds;\n layerBounds: MaskBounds[];\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\nexport type MaskPreRenderStats = {\n didRender: boolean;\n};\n\n// Class to manage mask effect\nexport default class MaskEffect implements Effect {\n id = 'mask-effect';\n props = null;\n useInPicking = true;\n order = 0;\n\n private dummyMaskMap?: Texture2D;\n private channels: (Channel | null)[] = [];\n private masks: Record<string, Mask> | null = null;\n private maskPass?: MaskPass;\n private maskMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {layers, layerFilter, viewports, onViewportActive, views, pass}: PreRenderOptions\n ): MaskPreRenderStats {\n let didRender = false;\n if (!this.dummyMaskMap) {\n this.dummyMaskMap = new Texture2D(gl, {\n width: 1,\n height: 1\n });\n }\n\n if (pass.startsWith('picking')) {\n // Do not update on picking pass\n return {didRender};\n }\n\n const maskLayers = layers.filter(l => l.props.visible && l.props.operation.includes('mask'));\n if (maskLayers.length === 0) {\n this.masks = null;\n this.channels.length = 0;\n return {didRender};\n }\n this.masks = {};\n\n if (!this.maskPass) {\n this.maskPass = new MaskPass(gl, {id: 'default-mask'});\n this.maskMap = this.maskPass.maskMap;\n }\n\n // Map layers to channels\n const channelMap = this._sortMaskChannels(maskLayers);\n // TODO - support multiple views\n const viewport = viewports[0];\n const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);\n\n for (const maskId in channelMap) {\n const result = this._renderChannel(channelMap[maskId], {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n didRender ||= result;\n }\n\n // debugFBO(this.maskMap, {opaque: true});\n return {didRender};\n }\n\n private _renderChannel(\n channelInfo: Channel,\n {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ): boolean {\n let didRender = false;\n const oldChannelInfo = this.channels[channelInfo.index];\n if (!oldChannelInfo) {\n return didRender;\n }\n\n const maskChanged =\n // If a channel is new\n channelInfo === oldChannelInfo ||\n // If sublayers have changed\n oldChannelInfo.layers.length !== channelInfo.layers.length ||\n // If a sublayer's positions have been updated, the cached bounds will change shallowly\n channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);\n\n channelInfo.bounds = oldChannelInfo.bounds;\n channelInfo.maskBounds = oldChannelInfo.maskBounds;\n this.channels[channelInfo.index] = channelInfo;\n\n if (maskChanged || viewportChanged) {\n // Recalculate mask bounds\n this.lastViewport = viewport;\n\n channelInfo.bounds = getMaskBounds({layers: channelInfo.layers, viewport});\n\n if (maskChanged || !equals(channelInfo.bounds, oldChannelInfo.bounds)) {\n // Rerender mask FBO\n const {maskPass, maskMap} = this;\n\n const maskViewport = getMaskViewport({\n bounds: channelInfo.bounds,\n viewport,\n width: maskMap.width,\n height: maskMap.height\n });\n\n channelInfo.maskBounds = maskViewport ? maskViewport.getBounds() : [0, 0, 1, 1];\n\n // @ts-ignore (2532) This method is only called from preRender where maskPass is defined\n maskPass.render({\n pass: 'mask',\n channel: channelInfo.index,\n layers: channelInfo.layers,\n layerFilter,\n viewports: maskViewport ? [maskViewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n devicePixelRatio: 1\n }\n });\n\n didRender = true;\n }\n }\n\n // @ts-ignore (2532) This method is only called from preRender where masks is defined\n this.masks[channelInfo.id] = {\n index: channelInfo.index,\n bounds: channelInfo.maskBounds,\n coordinateOrigin: channelInfo.coordinateOrigin,\n coordinateSystem: channelInfo.coordinateSystem\n };\n\n return didRender;\n }\n\n /**\n * Find a channel to render each mask into\n * If a maskId already exists, diff and update the existing channel\n * Otherwise replace a removed mask\n * Otherwise create a new channel\n * Returns a map from mask layer id to channel info\n */\n private _sortMaskChannels(maskLayers: Layer[]): Record<string, Channel> {\n const channelMap = {};\n let channelCount = 0;\n for (const layer of maskLayers) {\n const {id} = layer.root;\n let channelInfo = channelMap[id];\n if (!channelInfo) {\n if (++channelCount > 4) {\n log.warn('Too many mask layers. The max supported is 4')();\n continue; // eslint-disable-line no-continue\n }\n channelInfo = {\n id,\n index: this.channels.findIndex(c => c?.id === id),\n layers: [],\n layerBounds: [],\n coordinateOrigin: layer.root.props.coordinateOrigin,\n coordinateSystem: layer.root.props.coordinateSystem\n };\n channelMap[id] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n }\n\n for (let i = 0; i < 4; i++) {\n const channelInfo = this.channels[i];\n if (!channelInfo || !(channelInfo.id in channelMap)) {\n // The mask id at this channel no longer exists\n this.channels[i] = null;\n }\n }\n\n for (const maskId in channelMap) {\n const channelInfo = channelMap[maskId];\n\n if (channelInfo.index < 0) {\n channelInfo.index = this.channels.findIndex(c => !c);\n this.channels[channelInfo.index] = channelInfo;\n }\n }\n return channelMap;\n }\n\n getModuleParameters(): {\n maskMap: Texture2D;\n maskChannels: Record<string, Mask> | null;\n } {\n return {\n maskMap: this.masks ? this.maskMap : this.dummyMaskMap,\n maskChannels: this.masks\n };\n }\n\n cleanup(): void {\n if (this.dummyMaskMap) {\n this.dummyMaskMap.delete();\n this.dummyMaskMap = undefined;\n }\n\n if (this.maskPass) {\n this.maskPass.delete();\n this.maskPass = undefined;\n this.maskMap = undefined;\n }\n\n this.lastViewport = undefined;\n this.masks = null;\n this.channels.length = 0;\n }\n}\n"],"file":"mask-effect.js"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
15
|
+
|
|
16
|
+
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
|
17
|
+
|
|
18
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
19
|
+
|
|
20
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
21
|
+
|
|
22
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
23
|
+
|
|
24
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
25
|
+
|
|
26
|
+
var _core = require("@luma.gl/core");
|
|
27
|
+
|
|
28
|
+
var _core2 = require("@deck.gl/core");
|
|
29
|
+
|
|
30
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
31
|
+
|
|
32
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
33
|
+
|
|
34
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
35
|
+
|
|
36
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
37
|
+
|
|
38
|
+
var MaskPass = function (_LayersPass) {
|
|
39
|
+
(0, _inherits2.default)(MaskPass, _LayersPass);
|
|
40
|
+
|
|
41
|
+
var _super = _createSuper(MaskPass);
|
|
42
|
+
|
|
43
|
+
function MaskPass(gl, props) {
|
|
44
|
+
var _parameters;
|
|
45
|
+
|
|
46
|
+
var _this;
|
|
47
|
+
|
|
48
|
+
(0, _classCallCheck2.default)(this, MaskPass);
|
|
49
|
+
_this = _super.call(this, gl, props);
|
|
50
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "maskMap", void 0);
|
|
51
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fbo", void 0);
|
|
52
|
+
var _props$mapSize = props.mapSize,
|
|
53
|
+
mapSize = _props$mapSize === void 0 ? 2048 : _props$mapSize;
|
|
54
|
+
_this.maskMap = new _core.Texture2D(gl, {
|
|
55
|
+
width: mapSize,
|
|
56
|
+
height: mapSize,
|
|
57
|
+
parameters: (_parameters = {}, (0, _defineProperty2.default)(_parameters, 10241, 9729), (0, _defineProperty2.default)(_parameters, 10240, 9729), (0, _defineProperty2.default)(_parameters, 10242, 33071), (0, _defineProperty2.default)(_parameters, 10243, 33071), _parameters)
|
|
58
|
+
});
|
|
59
|
+
_this.fbo = new _core.Framebuffer(gl, {
|
|
60
|
+
id: 'maskmap',
|
|
61
|
+
width: mapSize,
|
|
62
|
+
height: mapSize,
|
|
63
|
+
attachments: (0, _defineProperty2.default)({}, 36064, _this.maskMap)
|
|
64
|
+
});
|
|
65
|
+
return _this;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
(0, _createClass2.default)(MaskPass, [{
|
|
69
|
+
key: "render",
|
|
70
|
+
value: function render(options) {
|
|
71
|
+
var _this2 = this;
|
|
72
|
+
|
|
73
|
+
var gl = this.gl;
|
|
74
|
+
var colorMask = [false, false, false, false];
|
|
75
|
+
colorMask[options.channel] = true;
|
|
76
|
+
return (0, _core.withParameters)(gl, {
|
|
77
|
+
clearColor: [255, 255, 255, 255],
|
|
78
|
+
blend: true,
|
|
79
|
+
blendFunc: [0, 1],
|
|
80
|
+
blendEquation: 32778,
|
|
81
|
+
colorMask: colorMask,
|
|
82
|
+
depthTest: false
|
|
83
|
+
}, function () {
|
|
84
|
+
return (0, _get2.default)((0, _getPrototypeOf2.default)(MaskPass.prototype), "render", _this2).call(_this2, _objectSpread(_objectSpread({}, options), {}, {
|
|
85
|
+
target: _this2.fbo,
|
|
86
|
+
pass: 'mask'
|
|
87
|
+
}));
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}, {
|
|
91
|
+
key: "shouldDrawLayer",
|
|
92
|
+
value: function shouldDrawLayer(layer) {
|
|
93
|
+
return layer.props.operation.includes('mask');
|
|
94
|
+
}
|
|
95
|
+
}, {
|
|
96
|
+
key: "delete",
|
|
97
|
+
value: function _delete() {
|
|
98
|
+
this.fbo.delete();
|
|
99
|
+
this.maskMap.delete();
|
|
100
|
+
}
|
|
101
|
+
}]);
|
|
102
|
+
return MaskPass;
|
|
103
|
+
}(_core2._LayersPass);
|
|
104
|
+
|
|
105
|
+
exports.default = MaskPass;
|
|
106
|
+
//# sourceMappingURL=mask-pass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/mask/mask-pass.ts"],"names":["MaskPass","gl","props","mapSize","maskMap","Texture2D","width","height","parameters","fbo","Framebuffer","id","attachments","options","colorMask","channel","clearColor","blend","blendFunc","blendEquation","depthTest","target","pass","layer","operation","includes","delete","LayersPass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;;;;;IAOqBA,Q;;;;;AAInB,oBAAYC,EAAZ,EAAgBC,KAAhB,EAAuD;AAAA;;AAAA;;AAAA;AACrD,8BAAMD,EAAN,EAAUC,KAAV;AADqD;AAAA;AAGrD,yBAAyBA,KAAzB,CAAOC,OAAP;AAAA,QAAOA,OAAP,+BAAiB,IAAjB;AAEA,UAAKC,OAAL,GAAe,IAAIC,eAAJ,CAAcJ,EAAd,EAAkB;AAC/BK,MAAAA,KAAK,EAAEH,OADwB;AAE/BI,MAAAA,MAAM,EAAEJ,OAFuB;AAG/BK,MAAAA,UAAU;AAHqB,KAAlB,CAAf;AAWA,UAAKC,GAAL,GAAW,IAAIC,iBAAJ,CAAgBT,EAAhB,EAAoB;AAC7BU,MAAAA,EAAE,EAAE,SADyB;AAE7BL,MAAAA,KAAK,EAAEH,OAFsB;AAG7BI,MAAAA,MAAM,EAAEJ,OAHqB;AAI7BS,MAAAA,WAAW,2CACe,MAAKR,OADpB;AAJkB,KAApB,CAAX;AAhBqD;AAwBtD;;;;WAED,gBAAOS,OAAP,EAAuC;AAAA;;AACrC,UAAMZ,EAAE,GAAG,KAAKA,EAAhB;AAEA,UAAMa,SAAS,GAAG,CAAC,KAAD,EAAQ,KAAR,EAAe,KAAf,EAAsB,KAAtB,CAAlB;AACAA,MAAAA,SAAS,CAACD,OAAO,CAACE,OAAT,CAAT,GAA6B,IAA7B;AAEA,aAAO,0BACLd,EADK,EAEL;AACEe,QAAAA,UAAU,EAAE,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,CADd;AAEEC,QAAAA,KAAK,EAAE,IAFT;AAGEC,QAAAA,SAAS,EAAE,MAHb;AAIEC,QAAAA,aAAa,OAJf;AAKEL,QAAAA,SAAS,EAATA,SALF;AAMEM,QAAAA,SAAS,EAAE;AANb,OAFK,EAUL;AAAA,oJAAuBP,OAAvB;AAAgCQ,UAAAA,MAAM,EAAE,MAAI,CAACZ,GAA7C;AAAkDa,UAAAA,IAAI,EAAE;AAAxD;AAAA,OAVK,CAAP;AAYD;;;WAED,yBAAgBC,KAAhB,EAAuB;AACrB,aAAOA,KAAK,CAACrB,KAAN,CAAYsB,SAAZ,CAAsBC,QAAtB,CAA+B,MAA/B,CAAP;AACD;;;WAED,mBAAS;AACP,WAAKhB,GAAL,CAASiB,MAAT;AACA,WAAKtB,OAAL,CAAasB,MAAb;AACD;;;EAzDmCC,kB","sourcesContent":["import {Framebuffer, Texture2D, withParameters} from '@luma.gl/core';\nimport {_LayersPass as LayersPass, LayersPassRenderOptions} from '@deck.gl/core';\n\ntype MaskPassRenderOptions = LayersPassRenderOptions & {\n /** The channel to render into, 0:red, 1:green, 2:blue, 3:alpha */\n channel: number;\n};\n\nexport default class MaskPass extends LayersPass {\n maskMap: Texture2D;\n fbo: Framebuffer;\n\n constructor(gl, props: {id: string; mapSize?: number}) {\n super(gl, props);\n\n const {mapSize = 2048} = props;\n\n this.maskMap = new Texture2D(gl, {\n width: mapSize,\n height: mapSize,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.LINEAR,\n [gl.TEXTURE_MAG_FILTER]: gl.LINEAR,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n });\n\n this.fbo = new Framebuffer(gl, {\n id: 'maskmap',\n width: mapSize,\n height: mapSize,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: this.maskMap\n }\n });\n }\n\n render(options: MaskPassRenderOptions) {\n const gl = this.gl;\n\n const colorMask = [false, false, false, false];\n colorMask[options.channel] = true;\n\n return withParameters(\n gl,\n {\n clearColor: [255, 255, 255, 255],\n blend: true,\n blendFunc: [gl.ZERO, gl.ONE],\n blendEquation: gl.FUNC_SUBTRACT,\n colorMask,\n depthTest: false\n },\n () => super.render({...options, target: this.fbo, pass: 'mask'})\n );\n }\n\n shouldDrawLayer(layer) {\n return layer.props.operation.includes('mask');\n }\n\n delete() {\n this.fbo.delete();\n this.maskMap.delete();\n }\n}\n"],"file":"mask-pass.js"}
|
package/dist/es5/mask/mask.js
CHANGED
|
@@ -23,12 +23,16 @@ var _core = require("@deck.gl/core");
|
|
|
23
23
|
|
|
24
24
|
var _shaderModule = _interopRequireDefault(require("./shader-module"));
|
|
25
25
|
|
|
26
|
+
var _maskEffect = _interopRequireDefault(require("./mask-effect"));
|
|
27
|
+
|
|
26
28
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
27
29
|
|
|
28
30
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
29
31
|
|
|
30
32
|
var defaultProps = {
|
|
31
|
-
maskId: ''
|
|
33
|
+
maskId: '',
|
|
34
|
+
maskByInstance: undefined,
|
|
35
|
+
maskInverted: false
|
|
32
36
|
};
|
|
33
37
|
|
|
34
38
|
var MaskExtension = function (_LayerExtension) {
|
|
@@ -42,11 +46,18 @@ var MaskExtension = function (_LayerExtension) {
|
|
|
42
46
|
}
|
|
43
47
|
|
|
44
48
|
(0, _createClass2.default)(MaskExtension, [{
|
|
49
|
+
key: "initializeState",
|
|
50
|
+
value: function initializeState() {
|
|
51
|
+
var _this$context$deck;
|
|
52
|
+
|
|
53
|
+
(_this$context$deck = this.context.deck) === null || _this$context$deck === void 0 ? void 0 : _this$context$deck._addDefaultEffect(new _maskEffect.default());
|
|
54
|
+
}
|
|
55
|
+
}, {
|
|
45
56
|
key: "getShaders",
|
|
46
57
|
value: function getShaders() {
|
|
47
58
|
var maskByInstance = ('instancePositions' in this.getAttributeManager().attributes);
|
|
48
59
|
|
|
49
|
-
if (
|
|
60
|
+
if (this.props.maskByInstance !== undefined) {
|
|
50
61
|
maskByInstance = Boolean(this.props.maskByInstance);
|
|
51
62
|
}
|
|
52
63
|
|
|
@@ -62,8 +73,9 @@ var MaskExtension = function (_LayerExtension) {
|
|
|
62
73
|
context = _ref.context,
|
|
63
74
|
moduleParameters = _ref.moduleParameters;
|
|
64
75
|
uniforms.mask_maskByInstance = this.state.maskByInstance;
|
|
65
|
-
var _this$props
|
|
66
|
-
maskId = _this$props
|
|
76
|
+
var _this$props = this.props,
|
|
77
|
+
maskId = _this$props.maskId,
|
|
78
|
+
maskInverted = _this$props.maskInverted;
|
|
67
79
|
var maskChannels = moduleParameters.maskChannels;
|
|
68
80
|
var viewport = context.viewport;
|
|
69
81
|
|
|
@@ -75,6 +87,7 @@ var MaskExtension = function (_LayerExtension) {
|
|
|
75
87
|
var fromCoordinateSystem = maskChannels[maskId].coordinateSystem;
|
|
76
88
|
uniforms.mask_enabled = true;
|
|
77
89
|
uniforms.mask_channel = index;
|
|
90
|
+
uniforms.mask_inverted = maskInverted;
|
|
78
91
|
|
|
79
92
|
if (fromCoordinateSystem === _core.COORDINATE_SYSTEM.DEFAULT) {
|
|
80
93
|
fromCoordinateSystem = viewport.isGeospatial ? _core.COORDINATE_SYSTEM.LNGLAT : _core.COORDINATE_SYSTEM.CARTESIAN;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mask/mask.ts"],"names":["defaultProps","maskId","MaskExtension","
|
|
1
|
+
{"version":3,"sources":["../../../src/mask/mask.ts"],"names":["defaultProps","maskId","maskByInstance","undefined","maskInverted","MaskExtension","context","deck","_addDefaultEffect","MaskEffect","getAttributeManager","attributes","props","Boolean","state","modules","mask","uniforms","moduleParameters","mask_maskByInstance","maskChannels","viewport","index","bounds","fromCoordinateOrigin","coordinateOrigin","fromCoordinateSystem","coordinateSystem","mask_enabled","mask_channel","mask_inverted","COORDINATE_SYSTEM","DEFAULT","isGeospatial","LNGLAT","CARTESIAN","opts","modelMatrix","bl","projectPosition","tr","mask_bounds","log","warn","LayerExtension"],"mappings":"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","sourcesContent":["import {COORDINATE_SYSTEM, Layer, LayerExtension, log} from '@deck.gl/core';\nimport mask from './shader-module';\nimport MaskEffect from './mask-effect';\n\nconst defaultProps = {\n maskId: '',\n maskByInstance: undefined,\n maskInverted: false\n};\n\nexport type MaskExtensionProps = {\n /**\n * Id of the layer that defines the mask. The mask layer must use the prop `operation: 'mask'`.\n * Masking is disabled if `maskId` is empty or no valid mask layer with the specified id is found.\n */\n maskId?: string;\n /**\n * controls whether an object is clipped by its anchor (usually defined by an accessor called `getPosition`, e.g. icon, scatterplot) or by its geometry (e.g. path, polygon).\n * If not specified, it is automatically deduced from the layer.\n */\n maskByInstance?: boolean;\n /**\n * Inverts the masking operation\n */\n maskInverted?: boolean;\n};\n\n/** Allows layers to show/hide objects by a geofence. */\nexport default class MaskExtension extends LayerExtension {\n static defaultProps = defaultProps;\n static extensionName = 'MaskExtension';\n\n initializeState(this: Layer<MaskExtensionProps>) {\n this.context.deck?._addDefaultEffect(new MaskEffect());\n }\n\n getShaders(this: Layer<MaskExtensionProps>): any {\n // Infer by geometry if 'maskByInstance' prop isn't explictly set\n let maskByInstance = 'instancePositions' in this.getAttributeManager()!.attributes;\n // Users can override by setting the `maskByInstance` prop\n if (this.props.maskByInstance !== undefined) {\n maskByInstance = Boolean(this.props.maskByInstance);\n }\n this.state.maskByInstance = maskByInstance;\n\n return {\n modules: [mask]\n };\n }\n\n /* eslint-disable camelcase */\n draw(this: Layer<Required<MaskExtensionProps>>, {uniforms, context, moduleParameters}: any) {\n uniforms.mask_maskByInstance = this.state.maskByInstance;\n const {maskId, maskInverted} = this.props;\n const {maskChannels} = moduleParameters;\n const {viewport} = context;\n if (maskChannels && maskChannels[maskId]) {\n const {index, bounds, coordinateOrigin: fromCoordinateOrigin} = maskChannels[maskId];\n let {coordinateSystem: fromCoordinateSystem} = maskChannels[maskId];\n uniforms.mask_enabled = true;\n uniforms.mask_channel = index;\n uniforms.mask_inverted = maskInverted;\n\n if (fromCoordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n fromCoordinateSystem = viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN;\n }\n const opts = {modelMatrix: null, fromCoordinateOrigin, fromCoordinateSystem};\n const bl = this.projectPosition([bounds[0], bounds[1], 0], opts);\n const tr = this.projectPosition([bounds[2], bounds[3], 0], opts);\n uniforms.mask_bounds = [bl[0], bl[1], tr[0], tr[1]];\n } else {\n if (maskId) {\n log.warn(`Could not find a mask layer with id: ${maskId}`)();\n }\n uniforms.mask_enabled = false;\n }\n }\n}\n"],"file":"mask.js"}
|
|
@@ -8,7 +8,7 @@ exports.default = void 0;
|
|
|
8
8
|
var _core = require("@deck.gl/core");
|
|
9
9
|
|
|
10
10
|
var vs = "\nuniform vec4 mask_bounds;\nuniform bool mask_maskByInstance;\nvec2 mask_getCoords(vec4 position) {\n return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);\n}\n";
|
|
11
|
-
var fs = "\nuniform sampler2D mask_texture;\nuniform int mask_channel;\nuniform bool mask_enabled;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n float maskValue = 1.0;\n if (mask_channel == 0) {\n maskValue = maskColor.r;\n } else if (mask_channel == 1) {\n maskValue = maskColor.g;\n } else if (mask_channel == 2) {\n maskValue = maskColor.b;\n } else if (mask_channel == 3) {\n maskValue = maskColor.a;\n }\n return maskValue < 0.5;\n}\n";
|
|
11
|
+
var fs = "\nuniform sampler2D mask_texture;\nuniform int mask_channel;\nuniform bool mask_enabled;\nuniform bool mask_inverted;\nbool mask_isInBounds(vec2 texCoords) {\n if (!mask_enabled) {\n return true;\n }\n vec4 maskColor = texture2D(mask_texture, texCoords);\n float maskValue = 1.0;\n if (mask_channel == 0) {\n maskValue = maskColor.r;\n } else if (mask_channel == 1) {\n maskValue = maskColor.g;\n } else if (mask_channel == 2) {\n maskValue = maskColor.b;\n } else if (mask_channel == 3) {\n maskValue = maskColor.a;\n }\n\n if (mask_inverted) {\n return maskValue >= 0.5;\n } else {\n return maskValue < 0.5;\n }\n}\n";
|
|
12
12
|
var inject = {
|
|
13
13
|
'vs:#decl': "\nvarying vec2 mask_texCoords;\n",
|
|
14
14
|
'vs:#main-end': "\n vec4 mask_common_position;\n if (mask_maskByInstance) {\n mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));\n } else {\n mask_common_position = geometry.position;\n }\n mask_texCoords = mask_getCoords(mask_common_position);\n",
|