@deck.gl/extensions 8.8.0-alpha.4 → 8.8.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.
Files changed (129) hide show
  1. package/dist/dist.dev.js +480 -1335
  2. package/dist/es5/brushing/brushing.js +19 -15
  3. package/dist/es5/brushing/brushing.js.map +1 -1
  4. package/dist/es5/brushing/shader-module.js +1 -1
  5. package/dist/es5/brushing/shader-module.js.map +1 -1
  6. package/dist/es5/clip/clip.js +4 -2
  7. package/dist/es5/clip/clip.js.map +1 -1
  8. package/dist/es5/data-filter/aggregator.js +1 -1
  9. package/dist/es5/data-filter/aggregator.js.map +1 -1
  10. package/dist/es5/data-filter/data-filter.js +9 -9
  11. package/dist/es5/data-filter/data-filter.js.map +1 -1
  12. package/dist/es5/data-filter/shader-module.js +22 -13
  13. package/dist/es5/data-filter/shader-module.js.map +1 -1
  14. package/dist/es5/fill-style/fill-style.js +13 -11
  15. package/dist/es5/fill-style/fill-style.js.map +1 -1
  16. package/dist/es5/fill-style/shaders.glsl.js +8 -6
  17. package/dist/es5/fill-style/shaders.glsl.js.map +1 -1
  18. package/dist/es5/fp64/fp64.js +4 -2
  19. package/dist/es5/fp64/fp64.js.map +1 -1
  20. package/dist/es5/fp64/project64.glsl.js +1 -1
  21. package/dist/es5/fp64/project64.js +2 -5
  22. package/dist/es5/fp64/project64.js.map +1 -1
  23. package/dist/es5/index.js.map +1 -1
  24. package/dist/es5/mask/mask.js +7 -4
  25. package/dist/es5/mask/mask.js.map +1 -1
  26. package/dist/es5/mask/shader-module.js +6 -7
  27. package/dist/es5/mask/shader-module.js.map +1 -1
  28. package/dist/es5/path-style/path-style.js +5 -5
  29. package/dist/es5/path-style/path-style.js.map +1 -1
  30. package/dist/es5/path-style/shaders.glsl.js +1 -1
  31. package/dist/es5/path-style/shaders.glsl.js.map +1 -1
  32. package/dist/esm/brushing/brushing.js +20 -15
  33. package/dist/esm/brushing/brushing.js.map +1 -1
  34. package/dist/esm/brushing/shader-module.js +1 -1
  35. package/dist/esm/brushing/shader-module.js.map +1 -1
  36. package/dist/esm/clip/clip.js +5 -2
  37. package/dist/esm/clip/clip.js.map +1 -1
  38. package/dist/esm/data-filter/aggregator.js +1 -1
  39. package/dist/esm/data-filter/aggregator.js.map +1 -1
  40. package/dist/esm/data-filter/data-filter.js +6 -3
  41. package/dist/esm/data-filter/data-filter.js.map +1 -1
  42. package/dist/esm/data-filter/shader-module.js +21 -21
  43. package/dist/esm/data-filter/shader-module.js.map +1 -1
  44. package/dist/esm/fill-style/fill-style.js +18 -13
  45. package/dist/esm/fill-style/fill-style.js.map +1 -1
  46. package/dist/esm/fill-style/shaders.glsl.js +6 -2
  47. package/dist/esm/fill-style/shaders.glsl.js.map +1 -1
  48. package/dist/esm/fp64/fp64.js +4 -2
  49. package/dist/esm/fp64/fp64.js.map +1 -1
  50. package/dist/esm/fp64/project64.glsl.js +1 -1
  51. package/dist/esm/fp64/project64.glsl.js.map +1 -1
  52. package/dist/esm/fp64/project64.js +2 -3
  53. package/dist/esm/fp64/project64.js.map +1 -1
  54. package/dist/esm/index.js.map +1 -1
  55. package/dist/esm/mask/mask.js +7 -4
  56. package/dist/esm/mask/mask.js.map +1 -1
  57. package/dist/esm/mask/shader-module.js +6 -6
  58. package/dist/esm/mask/shader-module.js.map +1 -1
  59. package/dist/esm/path-style/path-style.js +6 -5
  60. package/dist/esm/path-style/path-style.js.map +1 -1
  61. package/dist/esm/path-style/shaders.glsl.js +1 -1
  62. package/dist/esm/path-style/shaders.glsl.js.map +1 -1
  63. package/dist.min.js +1 -1
  64. package/package.json +6 -3
  65. package/src/brushing/{brushing.js → brushing.ts} +45 -17
  66. package/src/brushing/{shader-module.js → shader-module.ts} +13 -3
  67. package/src/clip/{clip.js → clip.ts} +26 -9
  68. package/src/data-filter/{aggregator.js → aggregator.ts} +12 -8
  69. package/src/data-filter/{data-filter.js → data-filter.ts} +90 -13
  70. package/src/data-filter/{shader-module.js → shader-module.ts} +36 -27
  71. package/src/fill-style/{fill-style.js → fill-style.ts} +83 -19
  72. package/src/fill-style/{shaders.glsl.js → shaders.glsl.ts} +24 -4
  73. package/src/fp64/{fp64.js → fp64.ts} +6 -3
  74. package/src/fp64/{project64.glsl.js → project64.glsl.ts} +0 -0
  75. package/src/fp64/{project64.js → project64.ts} +16 -5
  76. package/src/index.ts +8 -0
  77. package/src/mask/{mask.js → mask.ts} +25 -8
  78. package/src/mask/shader-module.ts +86 -0
  79. package/src/path-style/{path-style.js → path-style.ts} +65 -14
  80. package/src/path-style/{shaders.glsl.js → shaders.glsl.ts} +0 -0
  81. package/typed/brushing/brushing.d.ts +40 -0
  82. package/typed/brushing/brushing.d.ts.map +1 -0
  83. package/typed/brushing/brushing.js +83 -0
  84. package/typed/brushing/shader-module.d.ts +12 -0
  85. package/typed/brushing/shader-module.d.ts.map +1 -0
  86. package/typed/brushing/shader-module.js +116 -0
  87. package/typed/clip/clip.d.ts +29 -0
  88. package/typed/clip/clip.d.ts.map +1 -0
  89. package/typed/clip/clip.js +114 -0
  90. package/typed/data-filter/aggregator.d.ts +11 -0
  91. package/typed/data-filter/aggregator.d.ts.map +1 -0
  92. package/typed/data-filter/aggregator.js +98 -0
  93. package/typed/data-filter/data-filter.d.ts +90 -0
  94. package/typed/data-filter/data-filter.d.ts.map +1 -0
  95. package/typed/data-filter/data-filter.js +159 -0
  96. package/typed/data-filter/shader-module.d.ts +9 -0
  97. package/typed/data-filter/shader-module.d.ts.map +1 -0
  98. package/typed/data-filter/shader-module.js +152 -0
  99. package/typed/fill-style/fill-style.d.ts +77 -0
  100. package/typed/fill-style/fill-style.d.ts.map +1 -0
  101. package/typed/fill-style/fill-style.js +152 -0
  102. package/typed/fill-style/shaders.glsl.d.ts +12 -0
  103. package/typed/fill-style/shaders.glsl.d.ts.map +1 -0
  104. package/typed/fill-style/shaders.glsl.js +95 -0
  105. package/typed/fp64/fp64.d.ts +8 -0
  106. package/typed/fp64/fp64.d.ts.map +1 -0
  107. package/typed/fp64/fp64.js +34 -0
  108. package/typed/fp64/project64.d.ts +7 -0
  109. package/typed/fp64/project64.d.ts.map +1 -0
  110. package/typed/fp64/project64.glsl.d.ts +3 -0
  111. package/typed/fp64/project64.glsl.d.ts.map +1 -0
  112. package/typed/fp64/project64.glsl.js +100 -0
  113. package/typed/fp64/project64.js +50 -0
  114. package/typed/index.d.ts +15 -0
  115. package/typed/index.d.ts.map +1 -0
  116. package/typed/index.js +9 -0
  117. package/typed/mask/mask.d.ts +24 -0
  118. package/typed/mask/mask.d.ts.map +1 -0
  119. package/typed/mask/mask.js +48 -0
  120. package/typed/mask/shader-module.d.ts +8 -0
  121. package/typed/mask/shader-module.d.ts.map +1 -0
  122. package/{src → typed}/mask/shader-module.js +16 -21
  123. package/typed/package.json +6 -0
  124. package/typed/path-style/path-style.d.ts +66 -0
  125. package/typed/path-style/path-style.d.ts.map +1 -0
  126. package/typed/path-style/path-style.js +107 -0
  127. package/typed/path-style/shaders.glsl.d.ts +17 -0
  128. package/typed/path-style/shaders.glsl.d.ts.map +1 -0
  129. package/typed/path-style/shaders.glsl.js +93 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/brushing/shader-module.js"],"names":["project","vs","fs","TARGET","source","target","custom","source_target","inject","name","dependencies","getUniforms","opts","viewport","brushingEnabled","brushingRadius","brushingTarget","mousePosition","brushing_enabled","Boolean","containsPixel","brushing_radius","brushing_target","brushing_mousePos","unproject","x","y"],"mappings":"AAmBA,SAAQA,OAAR,QAAsB,eAAtB;AAEA,MAAMC,EAAE,07BAAR;AAkCA,MAAMC,EAAE,8EAAR;AAKA,MAAMC,MAAM,GAAG;AACbC,EAAAA,MAAM,EAAE,CADK;AAEbC,EAAAA,MAAM,EAAE,CAFK;AAGbC,EAAAA,MAAM,EAAE,CAHK;AAIbC,EAAAA,aAAa,EAAE;AAJF,CAAf;AAOA,MAAMC,MAAM,GAAG;AACb,6zBADa;AA2Bb;AA3Ba,CAAf;AAkCA,eAAe;AACbC,EAAAA,IAAI,EAAE,UADO;AAEbC,EAAAA,YAAY,EAAE,CAACV,OAAD,CAFD;AAGbC,EAAAA,EAHa;AAIbC,EAAAA,EAJa;AAKbM,EAAAA,MALa;AAMbG,EAAAA,WAAW,EAAEC,IAAI,IAAI;AACnB,QAAI,CAACA,IAAD,IAAS,CAACA,IAAI,CAACC,QAAnB,EAA6B;AAC3B,aAAO,EAAP;AACD;;AACD,UAAM;AACJC,MAAAA,eAAe,GAAG,IADd;AAEJC,MAAAA,cAAc,GAAG,KAFb;AAGJC,MAAAA,cAAc,GAAG,QAHb;AAIJC,MAAAA,aAJI;AAKJJ,MAAAA;AALI,QAMFD,IANJ;AAOA,WAAO;AACLM,MAAAA,gBAAgB,EAAEC,OAAO,CACvBL,eAAe,IAAIG,aAAnB,IAAoCJ,QAAQ,CAACO,aAAT,CAAuBH,aAAvB,CADb,CADpB;AAILI,MAAAA,eAAe,EAAEN,cAJZ;AAKLO,MAAAA,eAAe,EAAEnB,MAAM,CAACa,cAAD,CAAN,IAA0B,CALtC;AAMLO,MAAAA,iBAAiB,EAAEN,aAAa,GAC5BJ,QAAQ,CAACW,SAAT,CAAmB,CAACP,aAAa,CAACQ,CAAd,GAAkBZ,QAAQ,CAACY,CAA5B,EAA+BR,aAAa,CAACS,CAAd,GAAkBb,QAAQ,CAACa,CAA1D,CAAnB,CAD4B,GAE5B,CAAC,CAAD,EAAI,CAAJ;AARC,KAAP;AAUD;AA3BY,CAAf","sourcesContent":["// Copyright (c) 2015-2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {project} from '@deck.gl/core';\n\nconst vs = `\n uniform bool brushing_enabled;\n uniform int brushing_target;\n uniform vec2 brushing_mousePos;\n uniform float brushing_radius;\n\n #ifdef NON_INSTANCED_MODEL\n attribute vec2 brushingTargets;\n #else\n attribute vec2 instanceBrushingTargets;\n #endif\n\n varying float brushing_isVisible;\n\n bool brushing_isPointInRange(vec2 position) {\n if (!brushing_enabled) {\n return true;\n }\n vec2 source_commonspace = project_position(position);\n vec2 target_commonspace = project_position(brushing_mousePos);\n float distance = length((target_commonspace - source_commonspace) / project_uCommonUnitsPerMeter.xy);\n\n return distance <= brushing_radius;\n }\n\n bool brushing_arePointsInRange(vec2 sourcePos, vec2 targetPos) {\n return brushing_isPointInRange(sourcePos) || brushing_isPointInRange(targetPos);\n }\n\n void brushing_setVisible(bool visible) {\n brushing_isVisible = float(visible);\n }\n`;\n\nconst fs = `\n uniform bool brushing_enabled;\n varying float brushing_isVisible;\n`;\n\nconst TARGET = {\n source: 0,\n target: 1,\n custom: 2,\n source_target: 3\n};\n\nconst inject = {\n 'vs:DECKGL_FILTER_GL_POSITION': `\n vec2 brushingTarget;\n vec2 brushingSource;\n if (brushing_target == 3) {\n brushingTarget = geometry.worldPositionAlt.xy;\n brushingSource = geometry.worldPosition.xy;\n } else if (brushing_target == 0) {\n brushingTarget = geometry.worldPosition.xy;\n } else if (brushing_target == 1) {\n brushingTarget = geometry.worldPositionAlt.xy;\n } else {\n #ifdef NON_INSTANCED_MODEL\n brushingTarget = brushingTargets;\n #else\n brushingTarget = instanceBrushingTargets;\n #endif\n }\n bool visible;\n if (brushing_target == 3) {\n visible = brushing_arePointsInRange(brushingSource, brushingTarget);\n } else {\n visible = brushing_isPointInRange(brushingTarget);\n }\n brushing_setVisible(visible);\n `,\n\n 'fs:DECKGL_FILTER_COLOR': `\n if (brushing_enabled && brushing_isVisible < 0.5) {\n discard;\n }\n `\n};\n\nexport default {\n name: 'brushing',\n dependencies: [project],\n vs,\n fs,\n inject,\n getUniforms: opts => {\n if (!opts || !opts.viewport) {\n return {};\n }\n const {\n brushingEnabled = true,\n brushingRadius = 10000,\n brushingTarget = 'source',\n mousePosition,\n viewport\n } = opts;\n return {\n brushing_enabled: Boolean(\n brushingEnabled && mousePosition && viewport.containsPixel(mousePosition)\n ),\n brushing_radius: brushingRadius,\n brushing_target: TARGET[brushingTarget] || 0,\n brushing_mousePos: mousePosition\n ? viewport.unproject([mousePosition.x - viewport.x, mousePosition.y - viewport.y])\n : [0, 0]\n };\n }\n};\n"],"file":"shader-module.js"}
1
+ {"version":3,"sources":["../../../src/brushing/shader-module.ts"],"names":["project","vs","fs","TARGET","source","target","custom","source_target","inject","name","dependencies","getUniforms","opts","brushingEnabled","brushingRadius","brushingTarget","mousePosition","viewport","brushing_enabled","Boolean","containsPixel","brushing_radius","brushing_target","brushing_mousePos","unproject","x","y"],"mappings":"AAoBA,SAAQA,OAAR,QAAsB,eAAtB;AAWA,MAAMC,EAAE,07BAAR;AAkCA,MAAMC,EAAE,8EAAR;AAKA,MAAMC,MAAM,GAAG;AACbC,EAAAA,MAAM,EAAE,CADK;AAEbC,EAAAA,MAAM,EAAE,CAFK;AAGbC,EAAAA,MAAM,EAAE,CAHK;AAIbC,EAAAA,aAAa,EAAE;AAJF,CAAf;AAOA,MAAMC,MAAM,GAAG;AACb,6zBADa;AA2Bb;AA3Ba,CAAf;AAkCA,eAAe;AACbC,EAAAA,IAAI,EAAE,UADO;AAEbC,EAAAA,YAAY,EAAE,CAACV,OAAD,CAFD;AAGbC,EAAAA,EAHa;AAIbC,EAAAA,EAJa;AAKbM,EAAAA,MALa;AAMbG,EAAAA,WAAW,EAAGC,IAAD,IAA6D;AACxE,QAAI,CAACA,IAAD,IAAS,EAAE,cAAcA,IAAhB,CAAb,EAAoC;AAClC,aAAO,EAAP;AACD;;AACD,UAAM;AACJC,MAAAA,eAAe,GAAG,IADd;AAEJC,MAAAA,cAAc,GAAG,KAFb;AAGJC,MAAAA,cAAc,GAAG,QAHb;AAIJC,MAAAA,aAJI;AAKJC,MAAAA;AALI,QAMFL,IANJ;AAOA,WAAO;AACLM,MAAAA,gBAAgB,EAAEC,OAAO,CACvBN,eAAe,IAAIG,aAAnB,IAAoCC,QAAQ,CAACG,aAAT,CAAuBJ,aAAvB,CADb,CADpB;AAILK,MAAAA,eAAe,EAAEP,cAJZ;AAKLQ,MAAAA,eAAe,EAAEnB,MAAM,CAACY,cAAD,CAAN,IAA0B,CALtC;AAMLQ,MAAAA,iBAAiB,EAAEP,aAAa,GAC5BC,QAAQ,CAACO,SAAT,CAAmB,CAACR,aAAa,CAACS,CAAd,GAAkBR,QAAQ,CAACQ,CAA5B,EAA+BT,aAAa,CAACU,CAAd,GAAkBT,QAAQ,CAACS,CAA1D,CAAnB,CAD4B,GAE5B,CAAC,CAAD,EAAI,CAAJ;AARC,KAAP;AAUD;AA3BY,CAAf","sourcesContent":["// Copyright (c) 2015-2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable camelcase */\nimport {project} from '@deck.gl/core';\nimport type {Viewport, _ShaderModule as ShaderModule} from '@deck.gl/core';\n\nimport type {BrushingExtensionProps} from './brushing';\n\ntype BrushingModuleSettings = {\n // From layer context\n viewport: Viewport;\n mousePosition?: {x: number; y: number};\n} & BrushingExtensionProps;\n\nconst vs = `\n uniform bool brushing_enabled;\n uniform int brushing_target;\n uniform vec2 brushing_mousePos;\n uniform float brushing_radius;\n\n #ifdef NON_INSTANCED_MODEL\n attribute vec2 brushingTargets;\n #else\n attribute vec2 instanceBrushingTargets;\n #endif\n\n varying float brushing_isVisible;\n\n bool brushing_isPointInRange(vec2 position) {\n if (!brushing_enabled) {\n return true;\n }\n vec2 source_commonspace = project_position(position);\n vec2 target_commonspace = project_position(brushing_mousePos);\n float distance = length((target_commonspace - source_commonspace) / project_uCommonUnitsPerMeter.xy);\n\n return distance <= brushing_radius;\n }\n\n bool brushing_arePointsInRange(vec2 sourcePos, vec2 targetPos) {\n return brushing_isPointInRange(sourcePos) || brushing_isPointInRange(targetPos);\n }\n\n void brushing_setVisible(bool visible) {\n brushing_isVisible = float(visible);\n }\n`;\n\nconst fs = `\n uniform bool brushing_enabled;\n varying float brushing_isVisible;\n`;\n\nconst TARGET = {\n source: 0,\n target: 1,\n custom: 2,\n source_target: 3\n};\n\nconst inject = {\n 'vs:DECKGL_FILTER_GL_POSITION': `\n vec2 brushingTarget;\n vec2 brushingSource;\n if (brushing_target == 3) {\n brushingTarget = geometry.worldPositionAlt.xy;\n brushingSource = geometry.worldPosition.xy;\n } else if (brushing_target == 0) {\n brushingTarget = geometry.worldPosition.xy;\n } else if (brushing_target == 1) {\n brushingTarget = geometry.worldPositionAlt.xy;\n } else {\n #ifdef NON_INSTANCED_MODEL\n brushingTarget = brushingTargets;\n #else\n brushingTarget = instanceBrushingTargets;\n #endif\n }\n bool visible;\n if (brushing_target == 3) {\n visible = brushing_arePointsInRange(brushingSource, brushingTarget);\n } else {\n visible = brushing_isPointInRange(brushingTarget);\n }\n brushing_setVisible(visible);\n `,\n\n 'fs:DECKGL_FILTER_COLOR': `\n if (brushing_enabled && brushing_isVisible < 0.5) {\n discard;\n }\n `\n};\n\nexport default {\n name: 'brushing',\n dependencies: [project],\n vs,\n fs,\n inject,\n getUniforms: (opts?: BrushingModuleSettings | {}): Record<string, any> => {\n if (!opts || !('viewport' in opts)) {\n return {};\n }\n const {\n brushingEnabled = true,\n brushingRadius = 10000,\n brushingTarget = 'source',\n mousePosition,\n viewport\n } = opts;\n return {\n brushing_enabled: Boolean(\n brushingEnabled && mousePosition && viewport.containsPixel(mousePosition)\n ),\n brushing_radius: brushingRadius,\n brushing_target: TARGET[brushingTarget] || 0,\n brushing_mousePos: mousePosition\n ? viewport.unproject([mousePosition.x - viewport.x, mousePosition.y - viewport.y])\n : [0, 0]\n };\n }\n} as ShaderModule<BrushingModuleSettings>;\n"],"file":"shader-module.js"}
@@ -1,3 +1,4 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
1
2
  import { LayerExtension } from '@deck.gl/core';
2
3
  const defaultProps = {
3
4
  clipBounds: [0, 0, 1, 1]
@@ -58,6 +59,8 @@ export default class ClipExtension extends LayerExtension {
58
59
  }
59
60
 
60
61
  }
61
- ClipExtension.extensionName = 'ClipExtension';
62
- ClipExtension.defaultProps = defaultProps;
62
+
63
+ _defineProperty(ClipExtension, "defaultProps", defaultProps);
64
+
65
+ _defineProperty(ClipExtension, "extensionName", 'ClipExtension');
63
66
  //# sourceMappingURL=clip.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/clip/clip.js"],"names":["LayerExtension","defaultProps","clipBounds","shaderFunction","shaderModuleVs","name","vs","injectionVs","shaderModuleFs","fs","injectionFs","ClipExtension","getShaders","clipByInstance","getAttributeManager","attributes","props","state","modules","inject","draw","uniforms","clip_bounds","corner0","projectPosition","corner1","Math","min","max","extensionName"],"mappings":"AAoBA,SAAQA,cAAR,QAA6B,eAA7B;AAEA,MAAMC,YAAY,GAAG;AACnBC,EAAAA,UAAU,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV;AADO,CAArB;AAIA,MAAMC,cAAc,oNAApB;AAYA,MAAMC,cAAc,GAAG;AACrBC,EAAAA,IAAI,EAAE,SADe;AAErBC,EAAAA,EAAE,EAAEH;AAFiB,CAAvB;AAKA,MAAMI,WAAW,GAAG;AAClB,iDADkB;AAIlB,6GAJkB;AAOlB,iDAPkB;AAUlB;AAVkB,CAApB;AAmBA,MAAMC,cAAc,GAAG;AACrBH,EAAAA,IAAI,EAAE,SADe;AAErBI,EAAAA,EAAE,EAAEN;AAFiB,CAAvB;AAKA,MAAMO,WAAW,GAAG;AAClB,qDADkB;AAIlB,qFAJkB;AAOlB,qDAPkB;AAUlB;AAVkB,CAApB;AAeA,eAAe,MAAMC,aAAN,SAA4BX,cAA5B,CAA2C;AACxDY,EAAAA,UAAU,GAAG;AAKX,QAAIC,cAAc,IAAG,uBAAuB,KAAKC,mBAAL,GAA2BC,UAArD,CAAlB;;AAEA,QAAI,oBAAoB,KAAKC,KAA7B,EAAoC;AAClCH,MAAAA,cAAc,GAAG,KAAKG,KAAL,CAAWH,cAA5B;AACD;;AACD,SAAKI,KAAL,CAAWJ,cAAX,GAA4BA,cAA5B;AAEA,WAAOA,cAAc,GACjB;AACEK,MAAAA,OAAO,EAAE,CAACd,cAAD,CADX;AAEEe,MAAAA,MAAM,EAAEZ;AAFV,KADiB,GAKjB;AACEW,MAAAA,OAAO,EAAE,CAACV,cAAD,CADX;AAEEW,MAAAA,MAAM,EAAET;AAFV,KALJ;AASD;;AAEDU,EAAAA,IAAI,CAAC;AAACC,IAAAA;AAAD,GAAD,EAAa;AACf,UAAM;AAACnB,MAAAA,UAAU,GAAGD,YAAY,CAACC;AAA3B,QAAyC,KAAKc,KAApD;;AACA,QAAI,KAAKC,KAAL,CAAWJ,cAAf,EAA+B;AAC7BQ,MAAAA,QAAQ,CAACC,WAAT,GAAuBpB,UAAvB;AACD,KAFD,MAEO;AACL,YAAMqB,OAAO,GAAG,KAAKC,eAAL,CAAqB,CAACtB,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,EAA+B,CAA/B,CAArB,CAAhB;AACA,YAAMuB,OAAO,GAAG,KAAKD,eAAL,CAAqB,CAACtB,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,EAA+B,CAA/B,CAArB,CAAhB;AAEAmB,MAAAA,QAAQ,CAACC,WAAT,GAAuB,CACrBI,IAAI,CAACC,GAAL,CAASJ,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CADqB,EAErBC,IAAI,CAACC,GAAL,CAASJ,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAFqB,EAGrBC,IAAI,CAACE,GAAL,CAASL,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAHqB,EAIrBC,IAAI,CAACE,GAAL,CAASL,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAJqB,CAAvB;AAMD;AACF;;AAvCuD;AA0C1Dd,aAAa,CAACkB,aAAd,GAA8B,eAA9B;AACAlB,aAAa,CAACV,YAAd,GAA6BA,YAA7B","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension} from '@deck.gl/core';\n\nconst defaultProps = {\n clipBounds: [0, 0, 1, 1]\n};\n\nconst shaderFunction = `\nuniform vec4 clip_bounds;\n\nbool clip_isInBounds(vec2 position) {\n return position.x >= clip_bounds[0] && position.y >= clip_bounds[1] && position.x < clip_bounds[2] && position.y < clip_bounds[3];\n}\n`;\n\n/*\n * The vertex-shader version clips geometries by their anchor position\n * e.g. ScatterplotLayer - show if the center of a circle is within bounds\n */\nconst shaderModuleVs = {\n name: 'clip-vs',\n vs: shaderFunction\n};\n\nconst injectionVs = {\n 'vs:#decl': `\nvarying float clip_isVisible;\n`,\n 'vs:DECKGL_FILTER_GL_POSITION': `\n clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));\n`,\n 'fs:#decl': `\nvarying float clip_isVisible;\n`,\n 'fs:DECKGL_FILTER_COLOR': `\n if (clip_isVisible < 0.5) discard;\n`\n};\n\n/*\n * The fragment-shader version clips pixels at the bounds\n * e.g. PolygonLayer - show the part of the polygon that intersect with the bounds\n */\nconst shaderModuleFs = {\n name: 'clip-fs',\n fs: shaderFunction\n};\n\nconst injectionFs = {\n 'vs:#decl': `\nvarying vec2 clip_commonPosition;\n`,\n 'vs:DECKGL_FILTER_GL_POSITION': `\n clip_commonPosition = geometry.position.xy;\n`,\n 'fs:#decl': `\nvarying vec2 clip_commonPosition;\n`,\n 'fs:DECKGL_FILTER_COLOR': `\n if (!clip_isInBounds(clip_commonPosition)) discard;\n`\n};\n\nexport default class ClipExtension extends LayerExtension {\n getShaders() {\n // If `clipByInstance: true`, the entire object is shown/hidden based on its anchor position (done by vertex shader)\n // Otherwise, the object is trimmed by the clip bounds (done by fragment shader)\n\n // Default behavior: consider a layer instanced if it has attribute `instancePositions`\n let clipByInstance = 'instancePositions' in this.getAttributeManager().attributes;\n // Users can override by setting the `clipByInstance` prop\n if ('clipByInstance' in this.props) {\n clipByInstance = this.props.clipByInstance;\n }\n this.state.clipByInstance = clipByInstance;\n\n return clipByInstance\n ? {\n modules: [shaderModuleVs],\n inject: injectionVs\n }\n : {\n modules: [shaderModuleFs],\n inject: injectionFs\n };\n }\n\n draw({uniforms}) {\n const {clipBounds = defaultProps.clipBounds} = this.props;\n if (this.state.clipByInstance) {\n uniforms.clip_bounds = clipBounds;\n } else {\n const corner0 = this.projectPosition([clipBounds[0], clipBounds[1], 0]);\n const corner1 = this.projectPosition([clipBounds[2], clipBounds[3], 0]);\n\n uniforms.clip_bounds = [\n Math.min(corner0[0], corner1[0]),\n Math.min(corner0[1], corner1[1]),\n Math.max(corner0[0], corner1[0]),\n Math.max(corner0[1], corner1[1])\n ];\n }\n }\n}\n\nClipExtension.extensionName = 'ClipExtension';\nClipExtension.defaultProps = defaultProps;\n"],"file":"clip.js"}
1
+ {"version":3,"sources":["../../../src/clip/clip.ts"],"names":["LayerExtension","defaultProps","clipBounds","shaderFunction","shaderModuleVs","name","vs","injectionVs","shaderModuleFs","fs","injectionFs","ClipExtension","getShaders","clipByInstance","getAttributeManager","attributes","props","state","modules","inject","draw","uniforms","clip_bounds","corner0","projectPosition","corner1","Math","min","max"],"mappings":";AAoBA,SAAQA,cAAR,QAA4D,eAA5D;AAIA,MAAMC,YAAY,GAAG;AACnBC,EAAAA,UAAU,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV;AADO,CAArB;AAgBA,MAAMC,cAAc,oNAApB;AAYA,MAAMC,cAA4B,GAAG;AACnCC,EAAAA,IAAI,EAAE,SAD6B;AAEnCC,EAAAA,EAAE,EAAEH;AAF+B,CAArC;AAKA,MAAMI,WAAW,GAAG;AAClB,iDADkB;AAIlB,6GAJkB;AAOlB,iDAPkB;AAUlB;AAVkB,CAApB;AAmBA,MAAMC,cAA4B,GAAG;AACnCH,EAAAA,IAAI,EAAE,SAD6B;AAEnCI,EAAAA,EAAE,EAAEN;AAF+B,CAArC;AAKA,MAAMO,WAAW,GAAG;AAClB,qDADkB;AAIlB,qFAJkB;AAOlB,qDAPkB;AAUlB;AAVkB,CAApB;AAgBA,eAAe,MAAMC,aAAN,SAA4BX,cAA5B,CAA2C;AAIxDY,EAAAA,UAAU,GAAkC;AAM1C,QAAIC,cAAc,IAAG,uBAAuB,KAAKC,mBAAL,GAA2BC,UAArD,CAAlB;;AAEA,QAAI,oBAAoB,KAAKC,KAA7B,EAAoC;AAClCH,MAAAA,cAAc,GAAG,KAAKG,KAAL,CAAWH,cAA5B;AACD;;AACD,SAAKI,KAAL,CAAWJ,cAAX,GAA4BA,cAA5B;AAEA,WAAOA,cAAc,GACjB;AACEK,MAAAA,OAAO,EAAE,CAACd,cAAD,CADX;AAEEe,MAAAA,MAAM,EAAEZ;AAFV,KADiB,GAKjB;AACEW,MAAAA,OAAO,EAAE,CAACV,cAAD,CADX;AAEEW,MAAAA,MAAM,EAAET;AAFV,KALJ;AASD;;AAGDU,EAAAA,IAAI,CAAkC;AAACC,IAAAA;AAAD,GAAlC,EAAyD;AAC3D,UAAM;AAACnB,MAAAA,UAAU,GAAGD,YAAY,CAACC;AAA3B,QAAyC,KAAKc,KAApD;;AACA,QAAI,KAAKC,KAAL,CAAWJ,cAAf,EAA+B;AAC7BQ,MAAAA,QAAQ,CAACC,WAAT,GAAuBpB,UAAvB;AACD,KAFD,MAEO;AACL,YAAMqB,OAAO,GAAG,KAAKC,eAAL,CAAqB,CAACtB,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,EAA+B,CAA/B,CAArB,CAAhB;AACA,YAAMuB,OAAO,GAAG,KAAKD,eAAL,CAAqB,CAACtB,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,EAA+B,CAA/B,CAArB,CAAhB;AAEAmB,MAAAA,QAAQ,CAACC,WAAT,GAAuB,CACrBI,IAAI,CAACC,GAAL,CAASJ,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CADqB,EAErBC,IAAI,CAACC,GAAL,CAASJ,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAFqB,EAGrBC,IAAI,CAACE,GAAL,CAASL,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAHqB,EAIrBC,IAAI,CAACE,GAAL,CAASL,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAJqB,CAAvB;AAMD;AACF;;AA5CuD;;gBAArCd,a,kBACQV,Y;;gBADRU,a,mBAEI,e","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension, _ShaderModule as ShaderModule} from '@deck.gl/core';\n\nimport type {Layer} from '@deck.gl/core';\n\nconst defaultProps = {\n clipBounds: [0, 0, 1, 1]\n};\n\nexport type ClipExtensionProps = {\n /** Rectangular bounds to be used for clipping the rendered region, in `[left, bottom, right, top]`.\n * @default [0, 0, 1, 1]\n */\n clipBounds?: [number, number, number, number];\n /**\n * Controls whether an object is clipped by its anchor (e.g. icon, point) or by its geometry (e.g. path, polygon).\n * If not specified, it is automatically deduced from the layer.\n */\n clipByInstance?: boolean;\n};\n\nconst shaderFunction = `\nuniform vec4 clip_bounds;\n\nbool clip_isInBounds(vec2 position) {\n return position.x >= clip_bounds[0] && position.y >= clip_bounds[1] && position.x < clip_bounds[2] && position.y < clip_bounds[3];\n}\n`;\n\n/*\n * The vertex-shader version clips geometries by their anchor position\n * e.g. ScatterplotLayer - show if the center of a circle is within bounds\n */\nconst shaderModuleVs: ShaderModule = {\n name: 'clip-vs',\n vs: shaderFunction\n};\n\nconst injectionVs = {\n 'vs:#decl': `\nvarying float clip_isVisible;\n`,\n 'vs:DECKGL_FILTER_GL_POSITION': `\n clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));\n`,\n 'fs:#decl': `\nvarying float clip_isVisible;\n`,\n 'fs:DECKGL_FILTER_COLOR': `\n if (clip_isVisible < 0.5) discard;\n`\n};\n\n/*\n * The fragment-shader version clips pixels at the bounds\n * e.g. PolygonLayer - show the part of the polygon that intersect with the bounds\n */\nconst shaderModuleFs: ShaderModule = {\n name: 'clip-fs',\n fs: shaderFunction\n};\n\nconst injectionFs = {\n 'vs:#decl': `\nvarying vec2 clip_commonPosition;\n`,\n 'vs:DECKGL_FILTER_GL_POSITION': `\n clip_commonPosition = geometry.position.xy;\n`,\n 'fs:#decl': `\nvarying vec2 clip_commonPosition;\n`,\n 'fs:DECKGL_FILTER_COLOR': `\n if (!clip_isInBounds(clip_commonPosition)) discard;\n`\n};\n\n/** Adds support for clipping rendered layers by rectangular bounds. */\nexport default class ClipExtension extends LayerExtension {\n static defaultProps: any = defaultProps;\n static extensionName = 'ClipExtension';\n\n getShaders(this: Layer<ClipExtensionProps>) {\n // If `clipByInstance: true`, the entire object is shown/hidden based on its anchor position (done by vertex shader)\n // Otherwise, the object is trimmed by the clip bounds (done by fragment shader)\n\n // Default behavior: consider a layer instanced if it has attribute `instancePositions`\n // @ts-expect-error attributeManager is always defined for primitive layers\n let clipByInstance = 'instancePositions' in this.getAttributeManager().attributes;\n // Users can override by setting the `clipByInstance` prop\n if ('clipByInstance' in this.props) {\n clipByInstance = this.props.clipByInstance as boolean;\n }\n this.state.clipByInstance = clipByInstance;\n\n return clipByInstance\n ? {\n modules: [shaderModuleVs],\n inject: injectionVs\n }\n : {\n modules: [shaderModuleFs],\n inject: injectionFs\n };\n }\n\n /* eslint-disable camelcase */\n draw(this: Layer<ClipExtensionProps>, {uniforms}: any): void {\n const {clipBounds = defaultProps.clipBounds} = this.props;\n if (this.state.clipByInstance) {\n uniforms.clip_bounds = clipBounds;\n } else {\n const corner0 = this.projectPosition([clipBounds[0], clipBounds[1], 0]);\n const corner1 = this.projectPosition([clipBounds[2], clipBounds[3], 0]);\n\n uniforms.clip_bounds = [\n Math.min(corner0[0], corner1[0]),\n Math.min(corner0[1], corner1[1]),\n Math.max(corner0[0], corner1[0]),\n Math.max(corner0[1], corner1[1])\n ];\n }\n }\n}\n"],"file":"clip.js"}
@@ -2,7 +2,7 @@ import { Model, Texture2D, Framebuffer, isWebGL2 } from '@luma.gl/core';
2
2
  const AGGREGATE_VS = "#define SHADER_NAME data-filter-vertex-shader\n\n#ifdef FLOAT_TARGET\n attribute float filterIndices;\n attribute float filterPrevIndices;\n#else\n attribute vec2 filterIndices;\n attribute vec2 filterPrevIndices;\n#endif\n\nvarying vec4 vColor;\nconst float component = 1.0 / 255.0;\n\nvoid main() {\n #ifdef FLOAT_TARGET\n dataFilter_value *= float(filterIndices != filterPrevIndices);\n gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n vColor = vec4(0.0, 0.0, 0.0, 1.0);\n #else\n // Float texture is not supported: pack result into 4 channels x 256 px x 64px\n dataFilter_value *= float(filterIndices.x != filterPrevIndices.x);\n float col = filterIndices.x;\n float row = filterIndices.y * 4.0;\n float channel = floor(row);\n row = fract(row);\n vColor = component * vec4(bvec4(channel == 0.0, channel == 1.0, channel == 2.0, channel == 3.0));\n gl_Position = vec4(col * 2.0 - 1.0, row * 2.0 - 1.0, 0.0, 1.0);\n #endif\n gl_PointSize = 1.0;\n}\n";
3
3
  const AGGREGATE_FS = "#define SHADER_NAME data-filter-fragment-shader\nprecision highp float;\n\nvarying vec4 vColor;\n\nvoid main() {\n if (dataFilter_value < 0.5) {\n discard;\n }\n gl_FragColor = vColor;\n}\n";
4
4
  export function supportsFloatTarget(gl) {
5
- return gl.getExtension('EXT_float_blend') && (gl.getExtension('EXT_color_buffer_float') || gl.getExtension('WEBGL_color_buffer_float'));
5
+ return Boolean(gl.getExtension('EXT_float_blend') && (gl.getExtension('EXT_color_buffer_float') || gl.getExtension('WEBGL_color_buffer_float')));
6
6
  }
7
7
  export function getFramebuffer(gl, useFloatTarget) {
8
8
  if (useFloatTarget) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/data-filter/aggregator.js"],"names":["Model","Texture2D","Framebuffer","isWebGL2","AGGREGATE_VS","AGGREGATE_FS","supportsFloatTarget","gl","getExtension","getFramebuffer","useFloatTarget","width","height","attachments","format","type","mipmaps","depth","getModel","shaderOptions","defines","NON_INSTANCED_MODEL","FLOAT_TARGET","id","vertexCount","isInstanced","drawMode","vs","fs","parameters","blend","blendFunc","blendEquation","depthTest"],"mappings":"AAAA,SAAQA,KAAR,EAAeC,SAAf,EAA0BC,WAA1B,EAAuCC,QAAvC,QAAsD,eAAtD;AAGA,MAAMC,YAAY,89BAAlB;AAiCA,MAAMC,YAAY,wMAAlB;AAcA,OAAO,SAASC,mBAAT,CAA6BC,EAA7B,EAAiC;AAEtC,SACEA,EAAE,CAACC,YAAH,CAAgB,iBAAhB,MAECD,EAAE,CAACC,YAAH,CAAgB,wBAAhB,KAECD,EAAE,CAACC,YAAH,CAAgB,0BAAhB,CAJF,CADF;AAOD;AAGD,OAAO,SAASC,cAAT,CAAwBF,EAAxB,EAA4BG,cAA5B,EAA4C;AACjD,MAAIA,cAAJ,EAAoB;AAClB,WAAO,IAAIR,WAAJ,CAAgBK,EAAhB,EAAoB;AACzBI,MAAAA,KAAK,EAAE,CADkB;AAEzBC,MAAAA,MAAM,EAAE,CAFiB;AAGzBC,MAAAA,WAAW,EAAE;AACX,iBAAwB,IAAIZ,SAAJ,CAAcM,EAAd,EAAkB;AACxCO,UAAAA,MAAM,EAAEX,QAAQ,CAACI,EAAD,CAAR,eADgC;AAExCQ,UAAAA,IAAI,MAFoC;AAGxCC,UAAAA,OAAO,EAAE;AAH+B,SAAlB;AADb;AAHY,KAApB,CAAP;AAWD;;AACD,SAAO,IAAId,WAAJ,CAAgBK,EAAhB,EAAoB;AACzBI,IAAAA,KAAK,EAAE,GADkB;AAEzBC,IAAAA,MAAM,EAAE,EAFiB;AAGzBK,IAAAA,KAAK,EAAE;AAHkB,GAApB,CAAP;AAKD;AAGD,OAAO,SAASC,QAAT,CAAkBX,EAAlB,EAAsBY,aAAtB,EAAqCT,cAArC,EAAqD;AAC1DS,EAAAA,aAAa,CAACC,OAAd,CAAsBC,mBAAtB,GAA4C,CAA5C;;AACA,MAAIX,cAAJ,EAAoB;AAClBS,IAAAA,aAAa,CAACC,OAAd,CAAsBE,YAAtB,GAAqC,CAArC;AACD;;AAED,SAAO,IAAItB,KAAJ,CAAUO,EAAV,EAAc;AACnBgB,IAAAA,EAAE,EAAE,+BADe;AAEnBC,IAAAA,WAAW,EAAE,CAFM;AAGnBC,IAAAA,WAAW,EAAE,KAHM;AAInBC,IAAAA,QAAQ,GAJW;AAKnBC,IAAAA,EAAE,EAAEvB,YALe;AAMnBwB,IAAAA,EAAE,EAAEvB,YANe;AAOnB,OAAGc;AAPgB,GAAd,CAAP;AASD;AAED,OAAO,MAAMU,UAAU,GAAG;AACxBC,EAAAA,KAAK,EAAE,IADiB;AAExBC,EAAAA,SAAS,EAAE,YAFa;AAGxBC,EAAAA,aAAa,EAAE,cAHS;AAIxBC,EAAAA,SAAS,EAAE;AAJa,CAAnB","sourcesContent":["import {Model, Texture2D, Framebuffer, isWebGL2} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nconst AGGREGATE_VS = `\\\n#define SHADER_NAME data-filter-vertex-shader\n\n#ifdef FLOAT_TARGET\n attribute float filterIndices;\n attribute float filterPrevIndices;\n#else\n attribute vec2 filterIndices;\n attribute vec2 filterPrevIndices;\n#endif\n\nvarying vec4 vColor;\nconst float component = 1.0 / 255.0;\n\nvoid main() {\n #ifdef FLOAT_TARGET\n dataFilter_value *= float(filterIndices != filterPrevIndices);\n gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n vColor = vec4(0.0, 0.0, 0.0, 1.0);\n #else\n // Float texture is not supported: pack result into 4 channels x 256 px x 64px\n dataFilter_value *= float(filterIndices.x != filterPrevIndices.x);\n float col = filterIndices.x;\n float row = filterIndices.y * 4.0;\n float channel = floor(row);\n row = fract(row);\n vColor = component * vec4(bvec4(channel == 0.0, channel == 1.0, channel == 2.0, channel == 3.0));\n gl_Position = vec4(col * 2.0 - 1.0, row * 2.0 - 1.0, 0.0, 1.0);\n #endif\n gl_PointSize = 1.0;\n}\n`;\n\nconst AGGREGATE_FS = `\\\n#define SHADER_NAME data-filter-fragment-shader\nprecision highp float;\n\nvarying vec4 vColor;\n\nvoid main() {\n if (dataFilter_value < 0.5) {\n discard;\n }\n gl_FragColor = vColor;\n}\n`;\n\nexport function supportsFloatTarget(gl) {\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#Support_for_float_textures_doesnt_mean_you_can_render_into_them!\n return (\n gl.getExtension('EXT_float_blend') &&\n // WebGL 2\n (gl.getExtension('EXT_color_buffer_float') ||\n // WebGL 1\n gl.getExtension('WEBGL_color_buffer_float'))\n );\n}\n\n// A 1x1 framebuffer object that encodes the total count of filtered items\nexport function getFramebuffer(gl, useFloatTarget) {\n if (useFloatTarget) {\n return new Framebuffer(gl, {\n width: 1,\n height: 1,\n attachments: {\n [GL.COLOR_ATTACHMENT0]: new Texture2D(gl, {\n format: isWebGL2(gl) ? GL.RGBA32F : GL.RGBA,\n type: GL.FLOAT,\n mipmaps: false\n })\n }\n });\n }\n return new Framebuffer(gl, {\n width: 256,\n height: 64,\n depth: false\n });\n}\n\n// Increments the counter based on dataFilter_value\nexport function getModel(gl, shaderOptions, useFloatTarget) {\n shaderOptions.defines.NON_INSTANCED_MODEL = 1;\n if (useFloatTarget) {\n shaderOptions.defines.FLOAT_TARGET = 1;\n }\n\n return new Model(gl, {\n id: 'data-filter-aggregation-model',\n vertexCount: 1,\n isInstanced: false,\n drawMode: GL.POINTS,\n vs: AGGREGATE_VS,\n fs: AGGREGATE_FS,\n ...shaderOptions\n });\n}\n\nexport const parameters = {\n blend: true,\n blendFunc: [GL.ONE, GL.ONE, GL.ONE, GL.ONE],\n blendEquation: [GL.FUNC_ADD, GL.FUNC_ADD],\n depthTest: false\n};\n"],"file":"aggregator.js"}
1
+ {"version":3,"sources":["../../../src/data-filter/aggregator.ts"],"names":["Model","Texture2D","Framebuffer","isWebGL2","AGGREGATE_VS","AGGREGATE_FS","supportsFloatTarget","gl","Boolean","getExtension","getFramebuffer","useFloatTarget","width","height","attachments","format","type","mipmaps","depth","getModel","shaderOptions","defines","NON_INSTANCED_MODEL","FLOAT_TARGET","id","vertexCount","isInstanced","drawMode","vs","fs","parameters","blend","blendFunc","blendEquation","depthTest"],"mappings":"AAAA,SAAQA,KAAR,EAAeC,SAAf,EAA0BC,WAA1B,EAAuCC,QAAvC,QAAsD,eAAtD;AAGA,MAAMC,YAAY,89BAAlB;AAiCA,MAAMC,YAAY,wMAAlB;AAcA,OAAO,SAASC,mBAAT,CAA6BC,EAA7B,EAAiE;AAEtE,SAAOC,OAAO,CACZD,EAAE,CAACE,YAAH,CAAgB,iBAAhB,MAEGF,EAAE,CAACE,YAAH,CAAgB,wBAAhB,KAECF,EAAE,CAACE,YAAH,CAAgB,0BAAhB,CAJJ,CADY,CAAd;AAOD;AAGD,OAAO,SAASC,cAAT,CAAwBH,EAAxB,EAAmDI,cAAnD,EAAyF;AAC9F,MAAIA,cAAJ,EAAoB;AAClB,WAAO,IAAIT,WAAJ,CAAgBK,EAAhB,EAAoB;AACzBK,MAAAA,KAAK,EAAE,CADkB;AAEzBC,MAAAA,MAAM,EAAE,CAFiB;AAGzBC,MAAAA,WAAW,EAAE;AACX,iBAAwB,IAAIb,SAAJ,CAAcM,EAAd,EAAkB;AACxCQ,UAAAA,MAAM,EAAEZ,QAAQ,CAACI,EAAD,CAAR,eADgC;AAExCS,UAAAA,IAAI,MAFoC;AAGxCC,UAAAA,OAAO,EAAE;AAH+B,SAAlB;AADb;AAHY,KAApB,CAAP;AAWD;;AACD,SAAO,IAAIf,WAAJ,CAAgBK,EAAhB,EAAoB;AACzBK,IAAAA,KAAK,EAAE,GADkB;AAEzBC,IAAAA,MAAM,EAAE,EAFiB;AAGzBK,IAAAA,KAAK,EAAE;AAHkB,GAApB,CAAP;AAKD;AAGD,OAAO,SAASC,QAAT,CACLZ,EADK,EAELa,aAFK,EAGLT,cAHK,EAIE;AACPS,EAAAA,aAAa,CAACC,OAAd,CAAsBC,mBAAtB,GAA4C,CAA5C;;AACA,MAAIX,cAAJ,EAAoB;AAClBS,IAAAA,aAAa,CAACC,OAAd,CAAsBE,YAAtB,GAAqC,CAArC;AACD;;AAED,SAAO,IAAIvB,KAAJ,CAAUO,EAAV,EAAc;AACnBiB,IAAAA,EAAE,EAAE,+BADe;AAEnBC,IAAAA,WAAW,EAAE,CAFM;AAGnBC,IAAAA,WAAW,EAAE,KAHM;AAInBC,IAAAA,QAAQ,GAJW;AAKnBC,IAAAA,EAAE,EAAExB,YALe;AAMnByB,IAAAA,EAAE,EAAExB,YANe;AAOnB,OAAGe;AAPgB,GAAd,CAAP;AASD;AAED,OAAO,MAAMU,UAAU,GAAG;AACxBC,EAAAA,KAAK,EAAE,IADiB;AAExBC,EAAAA,SAAS,EAAE,YAFa;AAGxBC,EAAAA,aAAa,EAAE,cAHS;AAIxBC,EAAAA,SAAS,EAAE;AAJa,CAAnB","sourcesContent":["import {Model, Texture2D, Framebuffer, isWebGL2} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nconst AGGREGATE_VS = `\\\n#define SHADER_NAME data-filter-vertex-shader\n\n#ifdef FLOAT_TARGET\n attribute float filterIndices;\n attribute float filterPrevIndices;\n#else\n attribute vec2 filterIndices;\n attribute vec2 filterPrevIndices;\n#endif\n\nvarying vec4 vColor;\nconst float component = 1.0 / 255.0;\n\nvoid main() {\n #ifdef FLOAT_TARGET\n dataFilter_value *= float(filterIndices != filterPrevIndices);\n gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n vColor = vec4(0.0, 0.0, 0.0, 1.0);\n #else\n // Float texture is not supported: pack result into 4 channels x 256 px x 64px\n dataFilter_value *= float(filterIndices.x != filterPrevIndices.x);\n float col = filterIndices.x;\n float row = filterIndices.y * 4.0;\n float channel = floor(row);\n row = fract(row);\n vColor = component * vec4(bvec4(channel == 0.0, channel == 1.0, channel == 2.0, channel == 3.0));\n gl_Position = vec4(col * 2.0 - 1.0, row * 2.0 - 1.0, 0.0, 1.0);\n #endif\n gl_PointSize = 1.0;\n}\n`;\n\nconst AGGREGATE_FS = `\\\n#define SHADER_NAME data-filter-fragment-shader\nprecision highp float;\n\nvarying vec4 vColor;\n\nvoid main() {\n if (dataFilter_value < 0.5) {\n discard;\n }\n gl_FragColor = vColor;\n}\n`;\n\nexport function supportsFloatTarget(gl: WebGLRenderingContext): boolean {\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#Support_for_float_textures_doesnt_mean_you_can_render_into_them!\n return Boolean(\n gl.getExtension('EXT_float_blend') &&\n // WebGL 2\n (gl.getExtension('EXT_color_buffer_float') ||\n // WebGL 1\n gl.getExtension('WEBGL_color_buffer_float'))\n );\n}\n\n// A 1x1 framebuffer object that encodes the total count of filtered items\nexport function getFramebuffer(gl: WebGLRenderingContext, useFloatTarget: boolean): Framebuffer {\n if (useFloatTarget) {\n return new Framebuffer(gl, {\n width: 1,\n height: 1,\n attachments: {\n [GL.COLOR_ATTACHMENT0]: new Texture2D(gl, {\n format: isWebGL2(gl) ? GL.RGBA32F : GL.RGBA,\n type: GL.FLOAT,\n mipmaps: false\n })\n }\n });\n }\n return new Framebuffer(gl, {\n width: 256,\n height: 64,\n depth: false\n });\n}\n\n// Increments the counter based on dataFilter_value\nexport function getModel(\n gl: WebGLRenderingContext,\n shaderOptions: any,\n useFloatTarget: boolean\n): Model {\n shaderOptions.defines.NON_INSTANCED_MODEL = 1;\n if (useFloatTarget) {\n shaderOptions.defines.FLOAT_TARGET = 1;\n }\n\n return new Model(gl, {\n id: 'data-filter-aggregation-model',\n vertexCount: 1,\n isInstanced: false,\n drawMode: GL.POINTS,\n vs: AGGREGATE_VS,\n fs: AGGREGATE_FS,\n ...shaderOptions\n });\n}\n\nexport const parameters = {\n blend: true,\n blendFunc: [GL.ONE, GL.ONE, GL.ONE, GL.ONE],\n blendEquation: [GL.FUNC_ADD, GL.FUNC_ADD],\n depthTest: false\n};\n"],"file":"aggregator.js"}
@@ -1,3 +1,4 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
1
2
  import { LayerExtension } from '@deck.gl/core';
2
3
  import { shaderModule, shaderModule64 } from './shader-module';
3
4
  import * as aggregator from './aggregator';
@@ -105,7 +106,7 @@ export default class DataFilterExtension extends LayerExtension {
105
106
  }
106
107
  });
107
108
  const filterFBO = aggregator.getFramebuffer(gl, useFloatTarget);
108
- const filterModel = aggregator.getModel(gl, extension.getShaders(extension), useFloatTarget);
109
+ const filterModel = aggregator.getModel(gl, extension.getShaders.call(this, extension), useFloatTarget);
109
110
  this.setState({
110
111
  filterFBO,
111
112
  filterModel
@@ -191,6 +192,8 @@ export default class DataFilterExtension extends LayerExtension {
191
192
  }
192
193
 
193
194
  }
194
- DataFilterExtension.extensionName = 'DataFilterExtension';
195
- DataFilterExtension.defaultProps = defaultProps;
195
+
196
+ _defineProperty(DataFilterExtension, "defaultProps", defaultProps);
197
+
198
+ _defineProperty(DataFilterExtension, "extensionName", 'DataFilterExtension');
196
199
  //# sourceMappingURL=data-filter.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/data-filter/data-filter.js"],"names":["LayerExtension","shaderModule","shaderModule64","aggregator","readPixelsToArray","clear","defaultProps","getFilterValue","type","value","onFilteredItemsChange","compare","filterEnabled","filterRange","filterSoftRange","filterTransformSize","filterTransformColor","DATA_TYPE_FROM_SIZE","DataFilterExtension","constructor","filterSize","fp64","countItems","Error","getShaders","extension","opts","modules","defines","DATAFILTER_TYPE","DATAFILTER_DOUBLE","Boolean","initializeState","context","attributeManager","getAttributeManager","add","filterValues","size","accessor","shaderAttributes","divisor","instanceFilterValues","gl","useFloatTarget","supportsFloatTarget","filterIndices","vertexOffset","normalized","object","index","i","__source","Math","floor","filterPrevIndices","filterFBO","getFramebuffer","filterModel","getModel","setState","updateState","props","oldProps","state","filterNeedsUpdate","attributes","needsUpdate","draw","params","setVertexCount","getNumInstances","framebuffer","color","updateModuleSettings","moduleParameters","setAttributes","getShaderAttributes","parameters","viewport","width","height","count","length","id","finalizeState","delete","extensionName"],"mappings":"AAoBA,SAAQA,cAAR,QAA6B,eAA7B;AACA,SAAQC,YAAR,EAAsBC,cAAtB,QAA2C,iBAA3C;AACA,OAAO,KAAKC,UAAZ,MAA4B,cAA5B;AACA,SAAQC,iBAAR,EAA2BC,KAA3B,QAAuC,eAAvC;AAGA,MAAMC,YAAY,GAAG;AACnBC,EAAAA,cAAc,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAE;AAA1B,GADG;AAEnBC,EAAAA,qBAAqB,EAAE;AAACF,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAE,IAA1B;AAAgCE,IAAAA,OAAO,EAAE;AAAzC,GAFJ;AAInBC,EAAAA,aAAa,EAAE,IAJI;AAKnBC,EAAAA,WAAW,EAAE,CAAC,CAAC,CAAF,EAAK,CAAL,CALM;AAMnBC,EAAAA,eAAe,EAAE,IANE;AAOnBC,EAAAA,mBAAmB,EAAE,IAPF;AAQnBC,EAAAA,oBAAoB,EAAE;AARH,CAArB;AAWA,MAAMC,mBAAmB,GAAG;AAC1B,KAAG,OADuB;AAE1B,KAAG,MAFuB;AAG1B,KAAG,MAHuB;AAI1B,KAAG;AAJuB,CAA5B;AAOA,eAAe,MAAMC,mBAAN,SAAkClB,cAAlC,CAAiD;AAC9DmB,EAAAA,WAAW,CAAC;AAACC,IAAAA,UAAU,GAAG,CAAd;AAAiBC,IAAAA,IAAI,GAAG,KAAxB;AAA+BC,IAAAA,UAAU,GAAG;AAA5C,MAAqD,EAAtD,EAA0D;AACnE,QAAI,CAACL,mBAAmB,CAACG,UAAD,CAAxB,EAAsC;AACpC,YAAM,IAAIG,KAAJ,CAAU,yBAAV,CAAN;AACD;;AAED,UAAM;AAACH,MAAAA,UAAD;AAAaC,MAAAA,IAAb;AAAmBC,MAAAA;AAAnB,KAAN;AACD;;AAEDE,EAAAA,UAAU,CAACC,SAAD,EAAY;AACpB,UAAM;AAACL,MAAAA,UAAD;AAAaC,MAAAA;AAAb,QAAqBI,SAAS,CAACC,IAArC;AAEA,WAAO;AACLC,MAAAA,OAAO,EAAE,CAACN,IAAI,GAAGnB,cAAH,GAAoBD,YAAzB,CADJ;AAEL2B,MAAAA,OAAO,EAAE;AACPC,QAAAA,eAAe,EAAEZ,mBAAmB,CAACG,UAAD,CAD7B;AAEPU,QAAAA,iBAAiB,EAAEC,OAAO,CAACV,IAAD;AAFnB;AAFJ,KAAP;AAOD;;AAEDW,EAAAA,eAAe,CAACC,OAAD,EAAUR,SAAV,EAAqB;AAClC,UAAMS,gBAAgB,GAAG,KAAKC,mBAAL,EAAzB;;AACA,QAAID,gBAAJ,EAAsB;AACpBA,MAAAA,gBAAgB,CAACE,GAAjB,CAAqB;AACnBC,QAAAA,YAAY,EAAE;AACZC,UAAAA,IAAI,EAAEb,SAAS,CAACC,IAAV,CAAeN,UADT;AAEZZ,UAAAA,IAAI,EAAEiB,SAAS,CAACC,IAAV,CAAeL,IAAf,cAFM;AAGZkB,UAAAA,QAAQ,EAAE,gBAHE;AAIZC,UAAAA,gBAAgB,EAAE;AAChBH,YAAAA,YAAY,EAAE;AACZI,cAAAA,OAAO,EAAE;AADG,aADE;AAIhBC,YAAAA,oBAAoB,EAAE;AACpBD,cAAAA,OAAO,EAAE;AADW;AAJN;AAJN;AADK,OAArB;AAeD;;AAED,UAAM;AAACE,MAAAA;AAAD,QAAO,KAAKV,OAAlB;;AACA,QAAIC,gBAAgB,IAAIT,SAAS,CAACC,IAAV,CAAeJ,UAAvC,EAAmD;AACjD,YAAMsB,cAAc,GAAGzC,UAAU,CAAC0C,mBAAX,CAA+BF,EAA/B,CAAvB;AAIAT,MAAAA,gBAAgB,CAACE,GAAjB,CAAqB;AACnBU,QAAAA,aAAa,EAAE;AACbR,UAAAA,IAAI,EAAEM,cAAc,GAAG,CAAH,GAAO,CADd;AAEbG,UAAAA,YAAY,EAAE,CAFD;AAGbvC,UAAAA,IAAI,MAHS;AAIbwC,UAAAA,UAAU,EAAE,IAJC;AAKbT,UAAAA,QAAQ,EAAE,CAACU,MAAD,EAAS;AAACC,YAAAA;AAAD,WAAT,KAAqB;AAC7B,kBAAMC,CAAC,GAAGF,MAAM,IAAIA,MAAM,CAACG,QAAjB,GAA4BH,MAAM,CAACG,QAAP,CAAgBF,KAA5C,GAAoDA,KAA9D;AACA,mBAAON,cAAc,GAAG,CAACO,CAAC,GAAG,CAAL,IAAU,GAAb,GAAmB,CAAC,CAACA,CAAC,GAAG,CAAL,IAAU,GAAX,EAAgBE,IAAI,CAACC,KAAL,CAAWH,CAAC,GAAG,GAAf,IAAsB,GAAtC,CAAxC;AACD,WARY;AASbX,UAAAA,gBAAgB,EAAE;AAChBe,YAAAA,iBAAiB,EAAE;AACjBR,cAAAA,YAAY,EAAE;AADG,aADH;AAIhBD,YAAAA,aAAa,EAAE;AACbC,cAAAA,YAAY,EAAE;AADD;AAJC;AATL;AADI,OAArB;AAqBA,YAAMS,SAAS,GAAGrD,UAAU,CAACsD,cAAX,CAA0Bd,EAA1B,EAA8BC,cAA9B,CAAlB;AACA,YAAMc,WAAW,GAAGvD,UAAU,CAACwD,QAAX,CAAoBhB,EAApB,EAAwBlB,SAAS,CAACD,UAAV,CAAqBC,SAArB,CAAxB,EAAyDmB,cAAzD,CAApB;AACA,WAAKgB,QAAL,CAAc;AAACJ,QAAAA,SAAD;AAAYE,QAAAA;AAAZ,OAAd;AACD;AACF;;AAEDG,EAAAA,WAAW,CAAC;AAACC,IAAAA,KAAD;AAAQC,IAAAA;AAAR,GAAD,EAAoB;AAC7B,QAAI,KAAKC,KAAL,CAAWN,WAAf,EAA4B;AAC1B,YAAMxB,gBAAgB,GAAG,KAAKC,mBAAL,EAAzB;AACA,YAAM8B,iBAAiB,GACrB/B,gBAAgB,CAACgC,UAAjB,CAA4B7B,YAA5B,CAAyC8B,WAAzC,MACAL,KAAK,CAAClD,aAAN,KAAwBmD,QAAQ,CAACnD,aADjC,IAEAkD,KAAK,CAACjD,WAAN,KAAsBkD,QAAQ,CAAClD,WAF/B,IAGAiD,KAAK,CAAChD,eAAN,KAA0BiD,QAAQ,CAACjD,eAJrC;;AAKA,UAAImD,iBAAJ,EAAuB;AACrB,aAAKL,QAAL,CAAc;AAACK,UAAAA;AAAD,SAAd;AACD;AACF;AACF;;AAEDG,EAAAA,IAAI,CAACC,MAAD,EAAS5C,SAAT,EAAoB;AACtB,UAAM;AAAC+B,MAAAA,SAAD;AAAYE,MAAAA,WAAZ;AAAyBO,MAAAA;AAAzB,QAA8C,KAAKD,KAAzD;AACA,UAAM;AAACtD,MAAAA;AAAD,QAA0B,KAAKoD,KAArC;;AACA,QAAIG,iBAAiB,IAAIvD,qBAArB,IAA8CgD,WAAlD,EAA+D;AAC7D,YAAM;AACJQ,QAAAA,UAAU,EAAE;AAAC7B,UAAAA,YAAD;AAAeS,UAAAA;AAAf;AADR,UAEF,KAAKX,mBAAL,EAFJ;AAGAuB,MAAAA,WAAW,CAACY,cAAZ,CAA2B,KAAKC,eAAL,EAA3B;AAEA,YAAM;AAAC5B,QAAAA;AAAD,UAAO,KAAKV,OAAlB;AACA5B,MAAAA,KAAK,CAACsC,EAAD,EAAK;AAAC6B,QAAAA,WAAW,EAAEhB,SAAd;AAAyBiB,QAAAA,KAAK,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV;AAAhC,OAAL,CAAL;AAEAf,MAAAA,WAAW,CACRgB,oBADH,CACwBL,MAAM,CAACM,gBAD/B,EAEGC,aAFH,CAEiB,EACb,GAAGvC,YAAY,CAACwC,mBAAb,EADU;AAEb,YAAI/B,aAAa,IAAIA,aAAa,CAAC+B,mBAAd,EAArB;AAFa,OAFjB,EAMGT,IANH,CAMQ;AACJI,QAAAA,WAAW,EAAEhB,SADT;AAEJsB,QAAAA,UAAU,EAAE,EACV,GAAG3E,UAAU,CAAC2E,UADJ;AAEVC,UAAAA,QAAQ,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAOvB,SAAS,CAACwB,KAAjB,EAAwBxB,SAAS,CAACyB,MAAlC;AAFA;AAFR,OANR;AAaA,YAAMR,KAAK,GAAGrE,iBAAiB,CAACoD,SAAD,CAA/B;AACA,UAAI0B,KAAK,GAAG,CAAZ;;AACA,WAAK,IAAI/B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsB,KAAK,CAACU,MAA1B,EAAkChC,CAAC,EAAnC,EAAuC;AACrC+B,QAAAA,KAAK,IAAIT,KAAK,CAACtB,CAAD,CAAd;AACD;;AACDzC,MAAAA,qBAAqB,CAAC;AAAC0E,QAAAA,EAAE,EAAE,KAAKA,EAAV;AAAcF,QAAAA;AAAd,OAAD,CAArB;AAEA,WAAKlB,KAAL,CAAWC,iBAAX,GAA+B,KAA/B;AACD;AACF;;AAEDoB,EAAAA,aAAa,GAAG;AACd,UAAM;AAAC7B,MAAAA,SAAD;AAAYE,MAAAA;AAAZ,QAA2B,KAAKM,KAAtC;;AACA,QAAIR,SAAJ,EAAe;AACbA,MAAAA,SAAS,CAACiB,KAAV,CAAgBa,MAAhB;AACA9B,MAAAA,SAAS,CAAC8B,MAAV;AACA5B,MAAAA,WAAW,CAAC4B,MAAZ;AACD;AACF;;AAnI6D;AAsIhEpE,mBAAmB,CAACqE,aAApB,GAAoC,qBAApC;AACArE,mBAAmB,CAACZ,YAApB,GAAmCA,YAAnC","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension} from '@deck.gl/core';\nimport {shaderModule, shaderModule64} from './shader-module';\nimport * as aggregator from './aggregator';\nimport {readPixelsToArray, clear} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nconst defaultProps = {\n getFilterValue: {type: 'accessor', value: 0},\n onFilteredItemsChange: {type: 'function', value: null, compare: false},\n\n filterEnabled: true,\n filterRange: [-1, 1],\n filterSoftRange: null,\n filterTransformSize: true,\n filterTransformColor: true\n};\n\nconst DATA_TYPE_FROM_SIZE = {\n 1: 'float',\n 2: 'vec2',\n 3: 'vec3',\n 4: 'vec4'\n};\n\nexport default class DataFilterExtension extends LayerExtension {\n constructor({filterSize = 1, fp64 = false, countItems = false} = {}) {\n if (!DATA_TYPE_FROM_SIZE[filterSize]) {\n throw new Error('filterSize out of range');\n }\n\n super({filterSize, fp64, countItems});\n }\n\n getShaders(extension) {\n const {filterSize, fp64} = extension.opts;\n\n return {\n modules: [fp64 ? shaderModule64 : shaderModule],\n defines: {\n DATAFILTER_TYPE: DATA_TYPE_FROM_SIZE[filterSize],\n DATAFILTER_DOUBLE: Boolean(fp64)\n }\n };\n }\n\n initializeState(context, extension) {\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.add({\n filterValues: {\n size: extension.opts.filterSize,\n type: extension.opts.fp64 ? GL.DOUBLE : GL.FLOAT,\n accessor: 'getFilterValue',\n shaderAttributes: {\n filterValues: {\n divisor: 0\n },\n instanceFilterValues: {\n divisor: 1\n }\n }\n }\n });\n }\n\n const {gl} = this.context;\n if (attributeManager && extension.opts.countItems) {\n const useFloatTarget = aggregator.supportsFloatTarget(gl);\n // This attribute is needed for variable-width data, e.g. Path, SolidPolygon, Text\n // The vertex shader checks if a vertex has the same \"index\" as the previous vertex\n // so that we only write one count cross multiple vertices of the same object\n attributeManager.add({\n filterIndices: {\n size: useFloatTarget ? 1 : 2,\n vertexOffset: 1,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n accessor: (object, {index}) => {\n const i = object && object.__source ? object.__source.index : index;\n return useFloatTarget ? (i + 1) % 255 : [(i + 1) % 255, Math.floor(i / 255) % 255];\n },\n shaderAttributes: {\n filterPrevIndices: {\n vertexOffset: 0\n },\n filterIndices: {\n vertexOffset: 1\n }\n }\n }\n });\n\n const filterFBO = aggregator.getFramebuffer(gl, useFloatTarget);\n const filterModel = aggregator.getModel(gl, extension.getShaders(extension), useFloatTarget);\n this.setState({filterFBO, filterModel});\n }\n }\n\n updateState({props, oldProps}) {\n if (this.state.filterModel) {\n const attributeManager = this.getAttributeManager();\n const filterNeedsUpdate =\n attributeManager.attributes.filterValues.needsUpdate() ||\n props.filterEnabled !== oldProps.filterEnabled ||\n props.filterRange !== oldProps.filterRange ||\n props.filterSoftRange !== oldProps.filterSoftRange;\n if (filterNeedsUpdate) {\n this.setState({filterNeedsUpdate});\n }\n }\n }\n\n draw(params, extension) {\n const {filterFBO, filterModel, filterNeedsUpdate} = this.state;\n const {onFilteredItemsChange} = this.props;\n if (filterNeedsUpdate && onFilteredItemsChange && filterModel) {\n const {\n attributes: {filterValues, filterIndices}\n } = this.getAttributeManager();\n filterModel.setVertexCount(this.getNumInstances());\n\n const {gl} = this.context;\n clear(gl, {framebuffer: filterFBO, color: [0, 0, 0, 0]});\n\n filterModel\n .updateModuleSettings(params.moduleParameters)\n .setAttributes({\n ...filterValues.getShaderAttributes(),\n ...(filterIndices && filterIndices.getShaderAttributes())\n })\n .draw({\n framebuffer: filterFBO,\n parameters: {\n ...aggregator.parameters,\n viewport: [0, 0, filterFBO.width, filterFBO.height]\n }\n });\n const color = readPixelsToArray(filterFBO);\n let count = 0;\n for (let i = 0; i < color.length; i++) {\n count += color[i];\n }\n onFilteredItemsChange({id: this.id, count});\n\n this.state.filterNeedsUpdate = false;\n }\n }\n\n finalizeState() {\n const {filterFBO, filterModel} = this.state;\n if (filterFBO) {\n filterFBO.color.delete();\n filterFBO.delete();\n filterModel.delete();\n }\n }\n}\n\nDataFilterExtension.extensionName = 'DataFilterExtension';\nDataFilterExtension.defaultProps = defaultProps;\n"],"file":"data-filter.js"}
1
+ {"version":3,"sources":["../../../src/data-filter/data-filter.ts"],"names":["LayerExtension","shaderModule","shaderModule64","aggregator","readPixelsToArray","clear","defaultProps","getFilterValue","type","value","onFilteredItemsChange","compare","filterEnabled","filterRange","filterSoftRange","filterTransformSize","filterTransformColor","DATA_TYPE_FROM_SIZE","DataFilterExtension","constructor","filterSize","fp64","countItems","Error","getShaders","extension","opts","modules","defines","DATAFILTER_TYPE","DATAFILTER_DOUBLE","Boolean","initializeState","context","attributeManager","getAttributeManager","add","filterValues","size","accessor","shaderAttributes","divisor","instanceFilterValues","gl","useFloatTarget","supportsFloatTarget","filterIndices","vertexOffset","normalized","object","index","i","__source","Math","floor","filterPrevIndices","filterFBO","getFramebuffer","filterModel","getModel","call","setState","updateState","props","oldProps","state","filterNeedsUpdate","attributes","needsUpdate","draw","params","setVertexCount","getNumInstances","framebuffer","color","updateModuleSettings","moduleParameters","setAttributes","getShaderAttributes","parameters","viewport","width","height","count","length","id","finalizeState","delete"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension} from '@deck.gl/core';\nimport {shaderModule, shaderModule64} from './shader-module';\nimport * as aggregator from './aggregator';\nimport {readPixelsToArray, clear} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nimport type {Layer, LayerContext, Accessor, UpdateParameters} from '@deck.gl/core';\n\nconst defaultProps = {\n getFilterValue: {type: 'accessor', value: 0},\n onFilteredItemsChange: {type: 'function', value: null, compare: false},\n\n filterEnabled: true,\n filterRange: [-1, 1],\n filterSoftRange: null,\n filterTransformSize: true,\n filterTransformColor: true\n};\n\nexport type DataFilterExtensionProps<DataT = any> = {\n /**\n * Accessor to retrieve the value for each object that it will be filtered by.\n * Returns either a number (if `filterSize: 1`) or an array of numbers.\n */\n getFilterValue?: Accessor<DataT, number | number[]>;\n /**\n * Enable/disable the data filter. If the data filter is disabled, all objects are rendered.\n * @default true\n */\n filterEnabled?: boolean;\n /**\n * The [min, max] bounds which defines whether an object should be rendered.\n * If an object's filtered value is within the bounds, the object will be rendered; otherwise it will be hidden.\n * @default [-1, 1]\n */\n filterRange?: [number, number] | [number, number][];\n /**\n * If specified, objects will be faded in/out instead of abruptly shown/hidden.\n * When the filtered value is outside of the bounds defined by `filterSoftRange` but still within the bounds defined by `filterRange`, the object will be rendered as \"faded.\"\n * @default null\n */\n filterSoftRange?: [number, number] | [number, number][] | null;\n /**\n * When an object is \"faded\", manipulate its size so that it appears smaller or thinner. Only works if `filterSoftRange` is specified.\n * @default true\n */\n filterTransformSize?: boolean;\n /**\n * When an object is \"faded\", manipulate its opacity so that it appears more translucent. Only works if `filterSoftRange` is specified.\n * @default true\n */\n filterTransformColor?: boolean;\n /**\n * Only called if the `countItems` option is enabled.\n */\n onFilteredItemsChange?: (evt: {\n /** The id of the source layer. */\n id: string;\n /** The number of data objects that pass the filter. */\n count: number;\n }) => void;\n};\n\ntype DataFilterExtensionOptions = {\n /**\n * The size of the filter (number of columns to filter by). The data filter can show/hide data based on 1-4 numeric properties of each object.\n * @default 1\n */\n filterSize: number;\n /**\n * Use 64-bit precision instead of 32-bit.\n * @default false\n */\n fp64: boolean;\n /**\n * If `true`, reports the number of filtered objects with the `onFilteredItemsChange` callback.\n * @default `false`.\n */\n countItems: boolean;\n};\n\nconst DATA_TYPE_FROM_SIZE = {\n 1: 'float',\n 2: 'vec2',\n 3: 'vec3',\n 4: 'vec4'\n};\n\n/** Adds GPU-based data filtering functionalities to layers. It allows the layer to show/hide objects based on user-defined properties. */\nexport default class DataFilterExtension extends LayerExtension<DataFilterExtensionOptions> {\n static defaultProps = defaultProps;\n static extensionName = 'DataFilterExtension';\n\n constructor({\n filterSize = 1,\n fp64 = false,\n countItems = false\n }: Partial<DataFilterExtensionOptions> = {}) {\n if (!DATA_TYPE_FROM_SIZE[filterSize]) {\n throw new Error('filterSize out of range');\n }\n\n super({filterSize, fp64, countItems});\n }\n\n getShaders(this: Layer<DataFilterExtensionProps>, extension: this): any {\n const {filterSize, fp64} = extension.opts;\n\n return {\n modules: [fp64 ? shaderModule64 : shaderModule],\n defines: {\n DATAFILTER_TYPE: DATA_TYPE_FROM_SIZE[filterSize],\n DATAFILTER_DOUBLE: Boolean(fp64)\n }\n };\n }\n\n initializeState(this: Layer<DataFilterExtensionProps>, context: LayerContext, extension: this) {\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.add({\n filterValues: {\n size: extension.opts.filterSize,\n type: extension.opts.fp64 ? GL.DOUBLE : GL.FLOAT,\n accessor: 'getFilterValue',\n shaderAttributes: {\n filterValues: {\n divisor: 0\n },\n instanceFilterValues: {\n divisor: 1\n }\n }\n }\n });\n }\n\n const {gl} = this.context;\n if (attributeManager && extension.opts.countItems) {\n const useFloatTarget = aggregator.supportsFloatTarget(gl);\n // This attribute is needed for variable-width data, e.g. Path, SolidPolygon, Text\n // The vertex shader checks if a vertex has the same \"index\" as the previous vertex\n // so that we only write one count cross multiple vertices of the same object\n attributeManager.add({\n filterIndices: {\n size: useFloatTarget ? 1 : 2,\n vertexOffset: 1,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n accessor: (object, {index}) => {\n const i = object && object.__source ? object.__source.index : index;\n return useFloatTarget ? (i + 1) % 255 : [(i + 1) % 255, Math.floor(i / 255) % 255];\n },\n shaderAttributes: {\n filterPrevIndices: {\n vertexOffset: 0\n },\n filterIndices: {\n vertexOffset: 1\n }\n }\n }\n });\n\n const filterFBO = aggregator.getFramebuffer(gl, useFloatTarget);\n const filterModel = aggregator.getModel(\n gl,\n extension.getShaders.call(this, extension),\n useFloatTarget\n );\n this.setState({filterFBO, filterModel});\n }\n }\n\n updateState(\n this: Layer<DataFilterExtensionProps>,\n {props, oldProps}: UpdateParameters<Layer<DataFilterExtensionProps>>\n ) {\n if (this.state.filterModel) {\n const attributeManager = this.getAttributeManager();\n const filterNeedsUpdate =\n // attributeManager must be defined for filterModel to be set\n attributeManager!.attributes.filterValues.needsUpdate() ||\n props.filterEnabled !== oldProps.filterEnabled ||\n props.filterRange !== oldProps.filterRange ||\n props.filterSoftRange !== oldProps.filterSoftRange;\n if (filterNeedsUpdate) {\n this.setState({filterNeedsUpdate});\n }\n }\n }\n\n draw(this: Layer<DataFilterExtensionProps>, params: any, extension: this) {\n const {filterFBO, filterModel, filterNeedsUpdate} = this.state;\n const {onFilteredItemsChange} = this.props;\n if (filterNeedsUpdate && onFilteredItemsChange && filterModel) {\n const {\n attributes: {filterValues, filterIndices}\n } = this.getAttributeManager()!;\n filterModel.setVertexCount(this.getNumInstances());\n\n const {gl} = this.context;\n clear(gl, {framebuffer: filterFBO, color: [0, 0, 0, 0]});\n\n filterModel\n .updateModuleSettings(params.moduleParameters)\n .setAttributes({\n ...filterValues.getShaderAttributes(),\n ...(filterIndices && filterIndices.getShaderAttributes())\n })\n .draw({\n framebuffer: filterFBO,\n parameters: {\n ...aggregator.parameters,\n viewport: [0, 0, filterFBO.width, filterFBO.height]\n }\n });\n const color = readPixelsToArray(filterFBO);\n let count = 0;\n for (let i = 0; i < color.length; i++) {\n count += color[i];\n }\n onFilteredItemsChange({id: this.id, count});\n\n this.state.filterNeedsUpdate = false;\n }\n }\n\n finalizeState(this: Layer<DataFilterExtensionProps>) {\n const {filterFBO, filterModel} = this.state;\n if (filterFBO) {\n filterFBO.color.delete();\n filterFBO.delete();\n filterModel.delete();\n }\n }\n}\n"],"file":"data-filter.js"}
@@ -1,8 +1,8 @@
1
1
  const vs = "\nuniform DATAFILTER_TYPE filter_min;\nuniform DATAFILTER_TYPE filter_softMin;\nuniform DATAFILTER_TYPE filter_softMax;\nuniform DATAFILTER_TYPE filter_max;\nuniform bool filter_useSoftMargin;\nuniform bool filter_enabled;\nuniform bool filter_transformSize;\n\n#ifdef NON_INSTANCED_MODEL\n #define DATAFILTER_ATTRIB filterValues\n #define DATAFILTER_ATTRIB_64LOW filterValues64Low\n#else\n #define DATAFILTER_ATTRIB instanceFilterValues\n #define DATAFILTER_ATTRIB_64LOW instanceFilterValues64Low\n#endif\n\nattribute DATAFILTER_TYPE DATAFILTER_ATTRIB;\n#ifdef DATAFILTER_DOUBLE\n attribute DATAFILTER_TYPE DATAFILTER_ATTRIB_64LOW;\n\n uniform DATAFILTER_TYPE filter_min64High;\n uniform DATAFILTER_TYPE filter_max64High;\n#endif\n\nvarying float dataFilter_value;\n\nfloat dataFilter_reduceValue(float value) {\n return value;\n}\nfloat dataFilter_reduceValue(vec2 value) {\n return min(value.x, value.y);\n}\nfloat dataFilter_reduceValue(vec3 value) {\n return min(min(value.x, value.y), value.z);\n}\nfloat dataFilter_reduceValue(vec4 value) {\n return min(min(value.x, value.y), min(value.z, value.w));\n}\nvoid dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax) {\n if (filter_enabled) {\n if (filter_useSoftMargin) {\n dataFilter_value = dataFilter_reduceValue(\n smoothstep(filter_min, filter_softMin, valueFromMin) *\n (1.0 - smoothstep(filter_softMax, filter_max, valueFromMax))\n );\n } else {\n dataFilter_value = dataFilter_reduceValue(\n step(filter_min, valueFromMin) * step(valueFromMax, filter_max)\n );\n }\n } else {\n dataFilter_value = 1.0;\n }\n}\n";
2
2
  const fs = "\nuniform bool filter_transformColor;\nvarying float dataFilter_value;\n";
3
3
 
4
- const getUniforms = opts => {
5
- if (!opts || !opts.extensions) {
4
+ function getUniforms(opts) {
5
+ if (!opts || !('extensions' in opts)) {
6
6
  return {};
7
7
  }
8
8
 
@@ -13,26 +13,26 @@ const getUniforms = opts => {
13
13
  filterTransformColor = true
14
14
  } = opts;
15
15
  const filterSoftRange = opts.filterSoftRange || filterRange;
16
- const uniforms = Number.isFinite(filterRange[0]) ? {
17
- filter_min: filterRange[0],
18
- filter_softMin: filterSoftRange[0],
19
- filter_softMax: filterSoftRange[1],
20
- filter_max: filterRange[1]
21
- } : {
22
- filter_min: filterRange.map(r => r[0]),
23
- filter_softMin: filterSoftRange.map(r => r[0]),
24
- filter_softMax: filterSoftRange.map(r => r[1]),
25
- filter_max: filterRange.map(r => r[1])
16
+ return { ...(Number.isFinite(filterRange[0]) ? {
17
+ filter_min: filterRange[0],
18
+ filter_softMin: filterSoftRange[0],
19
+ filter_softMax: filterSoftRange[1],
20
+ filter_max: filterRange[1]
21
+ } : {
22
+ filter_min: filterRange.map(r => r[0]),
23
+ filter_softMin: filterSoftRange.map(r => r[0]),
24
+ filter_softMax: filterSoftRange.map(r => r[1]),
25
+ filter_max: filterRange.map(r => r[1])
26
+ }),
27
+ filter_enabled: filterEnabled,
28
+ filter_useSoftMargin: Boolean(opts.filterSoftRange),
29
+ filter_transformSize: filterEnabled && filterTransformSize,
30
+ filter_transformColor: filterEnabled && filterTransformColor
26
31
  };
27
- uniforms.filter_enabled = filterEnabled;
28
- uniforms.filter_useSoftMargin = Boolean(opts.filterSoftRange);
29
- uniforms.filter_transformSize = filterEnabled && filterTransformSize;
30
- uniforms.filter_transformColor = filterEnabled && filterTransformColor;
31
- return uniforms;
32
- };
32
+ }
33
33
 
34
- const getUniforms64 = opts => {
35
- if (!opts || !opts.extensions) {
34
+ function getUniforms64(opts) {
35
+ if (!opts || !('extensions' in opts)) {
36
36
  return {};
37
37
  }
38
38
 
@@ -59,7 +59,7 @@ const getUniforms64 = opts => {
59
59
  }
60
60
 
61
61
  return uniforms;
62
- };
62
+ }
63
63
 
64
64
  const inject = {
65
65
  'vs:#main-start': "\n #ifdef DATAFILTER_DOUBLE\n dataFilter_setValue(\n DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,\n DATAFILTER_ATTRIB - filter_max64High + DATAFILTER_ATTRIB_64LOW\n );\n #else\n dataFilter_setValue(DATAFILTER_ATTRIB, DATAFILTER_ATTRIB);\n #endif\n ",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/data-filter/shader-module.js"],"names":["vs","fs","getUniforms","opts","extensions","filterRange","filterEnabled","filterTransformSize","filterTransformColor","filterSoftRange","uniforms","Number","isFinite","filter_min","filter_softMin","filter_softMax","filter_max","map","r","filter_enabled","filter_useSoftMargin","Boolean","filter_transformSize","filter_transformColor","getUniforms64","min64High","Math","fround","filter_min64High","max64High","filter_max64High","x","i","inject","shaderModule","name","shaderModule64"],"mappings":"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","sourcesContent":["/*\n * data filter shader module\n */\nconst vs = `\nuniform DATAFILTER_TYPE filter_min;\nuniform DATAFILTER_TYPE filter_softMin;\nuniform DATAFILTER_TYPE filter_softMax;\nuniform DATAFILTER_TYPE filter_max;\nuniform bool filter_useSoftMargin;\nuniform bool filter_enabled;\nuniform bool filter_transformSize;\n\n#ifdef NON_INSTANCED_MODEL\n #define DATAFILTER_ATTRIB filterValues\n #define DATAFILTER_ATTRIB_64LOW filterValues64Low\n#else\n #define DATAFILTER_ATTRIB instanceFilterValues\n #define DATAFILTER_ATTRIB_64LOW instanceFilterValues64Low\n#endif\n\nattribute DATAFILTER_TYPE DATAFILTER_ATTRIB;\n#ifdef DATAFILTER_DOUBLE\n attribute DATAFILTER_TYPE DATAFILTER_ATTRIB_64LOW;\n\n uniform DATAFILTER_TYPE filter_min64High;\n uniform DATAFILTER_TYPE filter_max64High;\n#endif\n\nvarying float dataFilter_value;\n\nfloat dataFilter_reduceValue(float value) {\n return value;\n}\nfloat dataFilter_reduceValue(vec2 value) {\n return min(value.x, value.y);\n}\nfloat dataFilter_reduceValue(vec3 value) {\n return min(min(value.x, value.y), value.z);\n}\nfloat dataFilter_reduceValue(vec4 value) {\n return min(min(value.x, value.y), min(value.z, value.w));\n}\nvoid dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax) {\n if (filter_enabled) {\n if (filter_useSoftMargin) {\n dataFilter_value = dataFilter_reduceValue(\n smoothstep(filter_min, filter_softMin, valueFromMin) *\n (1.0 - smoothstep(filter_softMax, filter_max, valueFromMax))\n );\n } else {\n dataFilter_value = dataFilter_reduceValue(\n step(filter_min, valueFromMin) * step(valueFromMax, filter_max)\n );\n }\n } else {\n dataFilter_value = 1.0;\n }\n}\n`;\n\nconst fs = `\nuniform bool filter_transformColor;\nvarying float dataFilter_value;\n`;\n\nconst getUniforms = opts => {\n if (!opts || !opts.extensions) {\n return {};\n }\n const {\n filterRange = [-1, 1],\n filterEnabled = true,\n filterTransformSize = true,\n filterTransformColor = true\n } = opts;\n const filterSoftRange = opts.filterSoftRange || filterRange;\n\n const uniforms = Number.isFinite(filterRange[0])\n ? {\n filter_min: filterRange[0],\n filter_softMin: filterSoftRange[0],\n filter_softMax: filterSoftRange[1],\n filter_max: filterRange[1]\n }\n : {\n filter_min: filterRange.map(r => r[0]),\n filter_softMin: filterSoftRange.map(r => r[0]),\n filter_softMax: filterSoftRange.map(r => r[1]),\n filter_max: filterRange.map(r => r[1])\n };\n uniforms.filter_enabled = filterEnabled;\n uniforms.filter_useSoftMargin = Boolean(opts.filterSoftRange);\n uniforms.filter_transformSize = filterEnabled && filterTransformSize;\n uniforms.filter_transformColor = filterEnabled && filterTransformColor;\n\n return uniforms;\n};\n\nconst getUniforms64 = opts => {\n if (!opts || !opts.extensions) {\n return {};\n }\n const uniforms = getUniforms(opts);\n if (Number.isFinite(uniforms.filter_min)) {\n const min64High = Math.fround(uniforms.filter_min);\n uniforms.filter_min -= min64High;\n uniforms.filter_softMin -= min64High;\n uniforms.filter_min64High = min64High;\n\n const max64High = Math.fround(uniforms.filter_max);\n uniforms.filter_max -= max64High;\n uniforms.filter_softMax -= max64High;\n uniforms.filter_max64High = max64High;\n } else {\n const min64High = uniforms.filter_min.map(Math.fround);\n uniforms.filter_min = uniforms.filter_min.map((x, i) => x - min64High[i]);\n uniforms.filter_softMin = uniforms.filter_softMin.map((x, i) => x - min64High[i]);\n uniforms.filter_min64High = min64High;\n\n const max64High = uniforms.filter_max.map(Math.fround);\n uniforms.filter_max = uniforms.filter_max.map((x, i) => x - max64High[i]);\n uniforms.filter_softMax = uniforms.filter_softMax.map((x, i) => x - max64High[i]);\n uniforms.filter_max64High = max64High;\n }\n return uniforms;\n};\n\nconst inject = {\n 'vs:#main-start': `\n #ifdef DATAFILTER_DOUBLE\n dataFilter_setValue(\n DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,\n DATAFILTER_ATTRIB - filter_max64High + DATAFILTER_ATTRIB_64LOW\n );\n #else\n dataFilter_setValue(DATAFILTER_ATTRIB, DATAFILTER_ATTRIB);\n #endif\n `,\n\n 'vs:DECKGL_FILTER_SIZE': `\n if (filter_transformSize) {\n size = size * dataFilter_value;\n }\n `,\n\n 'fs:DECKGL_FILTER_COLOR': `\n if (dataFilter_value == 0.0) discard;\n if (filter_transformColor) {\n color.a *= dataFilter_value;\n }\n `\n};\n\nexport const shaderModule = {\n name: 'data-filter',\n vs,\n fs,\n inject,\n getUniforms\n};\n\nexport const shaderModule64 = {\n name: 'data-filter-fp64',\n vs,\n fs,\n inject,\n getUniforms: getUniforms64\n};\n"],"file":"shader-module.js"}
1
+ {"version":3,"sources":["../../../src/data-filter/shader-module.ts"],"names":["vs","fs","getUniforms","opts","filterRange","filterEnabled","filterTransformSize","filterTransformColor","filterSoftRange","Number","isFinite","filter_min","filter_softMin","filter_softMax","filter_max","map","r","filter_enabled","filter_useSoftMargin","Boolean","filter_transformSize","filter_transformColor","getUniforms64","uniforms","min64High","Math","fround","filter_min64High","max64High","filter_max64High","x","i","inject","shaderModule","name","shaderModule64"],"mappings":"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","sourcesContent":["import {_ShaderModule as ShaderModule} from '@deck.gl/core/typed';\n\nimport type {DataFilterExtensionProps} from './data-filter';\n\n/*\n * data filter shader module\n */\nconst vs = `\nuniform DATAFILTER_TYPE filter_min;\nuniform DATAFILTER_TYPE filter_softMin;\nuniform DATAFILTER_TYPE filter_softMax;\nuniform DATAFILTER_TYPE filter_max;\nuniform bool filter_useSoftMargin;\nuniform bool filter_enabled;\nuniform bool filter_transformSize;\n\n#ifdef NON_INSTANCED_MODEL\n #define DATAFILTER_ATTRIB filterValues\n #define DATAFILTER_ATTRIB_64LOW filterValues64Low\n#else\n #define DATAFILTER_ATTRIB instanceFilterValues\n #define DATAFILTER_ATTRIB_64LOW instanceFilterValues64Low\n#endif\n\nattribute DATAFILTER_TYPE DATAFILTER_ATTRIB;\n#ifdef DATAFILTER_DOUBLE\n attribute DATAFILTER_TYPE DATAFILTER_ATTRIB_64LOW;\n\n uniform DATAFILTER_TYPE filter_min64High;\n uniform DATAFILTER_TYPE filter_max64High;\n#endif\n\nvarying float dataFilter_value;\n\nfloat dataFilter_reduceValue(float value) {\n return value;\n}\nfloat dataFilter_reduceValue(vec2 value) {\n return min(value.x, value.y);\n}\nfloat dataFilter_reduceValue(vec3 value) {\n return min(min(value.x, value.y), value.z);\n}\nfloat dataFilter_reduceValue(vec4 value) {\n return min(min(value.x, value.y), min(value.z, value.w));\n}\nvoid dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax) {\n if (filter_enabled) {\n if (filter_useSoftMargin) {\n dataFilter_value = dataFilter_reduceValue(\n smoothstep(filter_min, filter_softMin, valueFromMin) *\n (1.0 - smoothstep(filter_softMax, filter_max, valueFromMax))\n );\n } else {\n dataFilter_value = dataFilter_reduceValue(\n step(filter_min, valueFromMin) * step(valueFromMax, filter_max)\n );\n }\n } else {\n dataFilter_value = 1.0;\n }\n}\n`;\n\nconst fs = `\nuniform bool filter_transformColor;\nvarying float dataFilter_value;\n`;\n\ntype DataFilterModuleSettings = {\n extensions: any[]; // used to detect if layer props are present\n} & DataFilterExtensionProps;\n\n/* eslint-disable camelcase */\nfunction getUniforms(opts?: DataFilterModuleSettings | {}): Record<string, any> {\n if (!opts || !('extensions' in opts)) {\n return {};\n }\n const {\n filterRange = [-1, 1],\n filterEnabled = true,\n filterTransformSize = true,\n filterTransformColor = true\n } = opts;\n const filterSoftRange = opts.filterSoftRange || filterRange;\n\n return {\n ...(Number.isFinite(filterRange[0])\n ? {\n filter_min: filterRange[0],\n filter_softMin: filterSoftRange[0],\n filter_softMax: filterSoftRange[1],\n filter_max: filterRange[1]\n }\n : {\n filter_min: filterRange.map(r => r[0]),\n filter_softMin: filterSoftRange.map(r => r[0]),\n filter_softMax: filterSoftRange.map(r => r[1]),\n filter_max: filterRange.map(r => r[1])\n }),\n filter_enabled: filterEnabled,\n filter_useSoftMargin: Boolean(opts.filterSoftRange),\n filter_transformSize: filterEnabled && filterTransformSize,\n filter_transformColor: filterEnabled && filterTransformColor\n };\n}\n\nfunction getUniforms64(opts?: DataFilterModuleSettings | {}): Record<string, any> {\n if (!opts || !('extensions' in opts)) {\n return {};\n }\n const uniforms = getUniforms(opts);\n if (Number.isFinite(uniforms.filter_min)) {\n const min64High = Math.fround(uniforms.filter_min);\n uniforms.filter_min -= min64High;\n uniforms.filter_softMin -= min64High;\n uniforms.filter_min64High = min64High;\n\n const max64High = Math.fround(uniforms.filter_max);\n uniforms.filter_max -= max64High;\n uniforms.filter_softMax -= max64High;\n uniforms.filter_max64High = max64High;\n } else {\n const min64High = uniforms.filter_min.map(Math.fround);\n uniforms.filter_min = uniforms.filter_min.map((x, i) => x - min64High[i]);\n uniforms.filter_softMin = uniforms.filter_softMin.map((x, i) => x - min64High[i]);\n uniforms.filter_min64High = min64High;\n\n const max64High = uniforms.filter_max.map(Math.fround);\n uniforms.filter_max = uniforms.filter_max.map((x, i) => x - max64High[i]);\n uniforms.filter_softMax = uniforms.filter_softMax.map((x, i) => x - max64High[i]);\n uniforms.filter_max64High = max64High;\n }\n return uniforms;\n}\n\nconst inject = {\n 'vs:#main-start': `\n #ifdef DATAFILTER_DOUBLE\n dataFilter_setValue(\n DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,\n DATAFILTER_ATTRIB - filter_max64High + DATAFILTER_ATTRIB_64LOW\n );\n #else\n dataFilter_setValue(DATAFILTER_ATTRIB, DATAFILTER_ATTRIB);\n #endif\n `,\n\n 'vs:DECKGL_FILTER_SIZE': `\n if (filter_transformSize) {\n size = size * dataFilter_value;\n }\n `,\n\n 'fs:DECKGL_FILTER_COLOR': `\n if (dataFilter_value == 0.0) discard;\n if (filter_transformColor) {\n color.a *= dataFilter_value;\n }\n `\n};\n\nexport const shaderModule: ShaderModule<DataFilterModuleSettings> = {\n name: 'data-filter',\n vs,\n fs,\n inject,\n getUniforms\n};\n\nexport const shaderModule64: ShaderModule<DataFilterModuleSettings> = {\n name: 'data-filter-fp64',\n vs,\n fs,\n inject,\n getUniforms: getUniforms64\n};\n"],"file":"shader-module.js"}
@@ -1,3 +1,4 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
1
2
  import { LayerExtension } from '@deck.gl/core';
2
3
  import { Texture2D } from '@luma.gl/core';
3
4
  import { patternShaders } from './shaders.glsl';
@@ -35,7 +36,7 @@ export default class FillStyleExtension extends LayerExtension {
35
36
  }
36
37
 
37
38
  isEnabled(layer) {
38
- return layer.getAttributeManager() && !layer.state.pathTesselator;
39
+ return layer.getAttributeManager() !== null && !('pathTesselator' in layer.state);
39
40
  }
40
41
 
41
42
  getShaders(extension) {
@@ -116,11 +117,11 @@ export default class FillStyleExtension extends LayerExtension {
116
117
  }
117
118
 
118
119
  if (props.fillPatternAtlas && props.fillPatternAtlas !== oldProps.fillPatternAtlas) {
119
- extension.loadPatternAtlas.call(this, props);
120
+ extension.loadPatternAtlas.call(this);
120
121
  }
121
122
 
122
123
  if (props.fillPatternMapping && props.fillPatternMapping !== oldProps.fillPatternMapping) {
123
- extension.loadPatternMapping.call(this, props);
124
+ extension.loadPatternMapping.call(this);
124
125
  }
125
126
  }
126
127
 
@@ -146,12 +147,13 @@ export default class FillStyleExtension extends LayerExtension {
146
147
  emptyTexture === null || emptyTexture === void 0 ? void 0 : emptyTexture.delete();
147
148
  }
148
149
 
149
- async loadPatternAtlas({
150
- fillPatternAtlas,
151
- fetch
152
- }) {
150
+ async loadPatternAtlas() {
153
151
  var _this$state$patternTe;
154
152
 
153
+ const {
154
+ fillPatternAtlas,
155
+ fetch
156
+ } = this.props;
155
157
  (_this$state$patternTe = this.state.patternTexture) === null || _this$state$patternTe === void 0 ? void 0 : _this$state$patternTe.delete();
156
158
  this.setState({
157
159
  patternTexture: null
@@ -174,10 +176,11 @@ export default class FillStyleExtension extends LayerExtension {
174
176
  });
175
177
  }
176
178
 
177
- async loadPatternMapping({
178
- fillPatternMapping,
179
- fetch
180
- }) {
179
+ async loadPatternMapping() {
180
+ const {
181
+ fillPatternMapping,
182
+ fetch
183
+ } = this.props;
181
184
  this.setState({
182
185
  patternMapping: null
183
186
  });
@@ -206,6 +209,8 @@ export default class FillStyleExtension extends LayerExtension {
206
209
  }
207
210
 
208
211
  }
209
- FillStyleExtension.extensionName = 'FillStyleExtension';
210
- FillStyleExtension.defaultProps = defaultProps;
212
+
213
+ _defineProperty(FillStyleExtension, "defaultProps", defaultProps);
214
+
215
+ _defineProperty(FillStyleExtension, "extensionName", 'FillStyleExtension');
211
216
  //# sourceMappingURL=fill-style.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fill-style/fill-style.js"],"names":["LayerExtension","Texture2D","patternShaders","defaultProps","fillPatternEnabled","fillPatternAtlas","fillPatternMapping","fillPatternMask","getFillPattern","type","value","d","pattern","getFillPatternScale","getFillPatternOffset","DEFAULT_TEXTURE_PARAMETERS","FillStyleExtension","constructor","isEnabled","layer","getAttributeManager","state","pathTesselator","getShaders","extension","modules","opts","filter","Boolean","initializeState","context","attributeManager","add","fillPatternFrames","size","accessor","transform","getPatternFrame","bind","shaderAttributes","divisor","instanceFillPatternFrames","fillPatternScales","defaultValue","instanceFillPatternScales","fillPatternOffsets","instanceFillPatternOffsets","setState","emptyTexture","gl","data","Uint8Array","width","height","updateState","props","oldProps","loadPatternAtlas","call","loadPatternMapping","draw","params","patternTexture","setModuleParameters","fillPatternTexture","finalizeState","delete","fetch","image","propName","parameters","patternMapping","invalidate","setNeedsUpdate","name","def","x","y","extensionName"],"mappings":"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","sourcesContent":["import {LayerExtension} from '@deck.gl/core';\nimport {Texture2D} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nimport {patternShaders} from './shaders.glsl';\n\nconst defaultProps = {\n fillPatternEnabled: true,\n fillPatternAtlas: null,\n fillPatternMapping: null,\n fillPatternMask: true,\n getFillPattern: {type: 'accessor', value: d => d.pattern},\n getFillPatternScale: {type: 'accessor', value: 1},\n getFillPatternOffset: {type: 'accessor', value: [0, 0]}\n};\n\nconst DEFAULT_TEXTURE_PARAMETERS = {\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n // GL.LINEAR is the default value but explicitly set it here\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n // for texture boundary artifact\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n};\n\nexport default class FillStyleExtension extends LayerExtension {\n constructor({pattern = false} = {}) {\n super({pattern});\n }\n\n isEnabled(layer) {\n return layer.getAttributeManager() && !layer.state.pathTesselator;\n }\n\n getShaders(extension) {\n if (!extension.isEnabled(this)) {\n return null;\n }\n\n return {\n modules: [extension.opts.pattern && patternShaders].filter(Boolean)\n };\n }\n\n initializeState(context, extension) {\n if (!extension.isEnabled(this)) {\n return;\n }\n\n const attributeManager = this.getAttributeManager();\n\n if (extension.opts.pattern) {\n attributeManager.add({\n fillPatternFrames: {\n size: 4,\n accessor: 'getFillPattern',\n transform: extension.getPatternFrame.bind(this),\n shaderAttributes: {\n fillPatternFrames: {\n divisor: 0\n },\n instanceFillPatternFrames: {\n divisor: 1\n }\n }\n },\n fillPatternScales: {\n size: 1,\n accessor: 'getFillPatternScale',\n defaultValue: 1,\n shaderAttributes: {\n fillPatternScales: {\n divisor: 0\n },\n instanceFillPatternScales: {\n divisor: 1\n }\n }\n },\n fillPatternOffsets: {\n size: 2,\n accessor: 'getFillPatternOffset',\n shaderAttributes: {\n fillPatternOffsets: {\n divisor: 0\n },\n instanceFillPatternOffsets: {\n divisor: 1\n }\n }\n }\n });\n }\n this.setState({\n emptyTexture: new Texture2D(this.context.gl, {\n data: new Uint8Array(4),\n width: 1,\n height: 1\n })\n });\n }\n\n updateState({props, oldProps}, extension) {\n if (!extension.isEnabled(this)) {\n return;\n }\n\n if (props.fillPatternAtlas && props.fillPatternAtlas !== oldProps.fillPatternAtlas) {\n extension.loadPatternAtlas.call(this, props);\n }\n if (props.fillPatternMapping && props.fillPatternMapping !== oldProps.fillPatternMapping) {\n extension.loadPatternMapping.call(this, props);\n }\n }\n\n draw(params, extension) {\n if (!extension.isEnabled(this)) {\n return;\n }\n\n const {patternTexture} = this.state;\n this.setModuleParameters({\n fillPatternTexture: patternTexture || this.state.emptyTexture\n });\n }\n\n finalizeState() {\n const {patternTexture, emptyTexture} = this.state;\n patternTexture?.delete();\n emptyTexture?.delete();\n }\n\n async loadPatternAtlas({fillPatternAtlas, fetch}) {\n this.state.patternTexture?.delete();\n this.setState({patternTexture: null});\n let image = fillPatternAtlas;\n if (typeof image === 'string') {\n image = await fetch(image, {propName: 'fillPatternAtlas', layer: this});\n }\n const patternTexture =\n image instanceof Texture2D\n ? image\n : new Texture2D(this.context.gl, {\n data: image,\n parameters: DEFAULT_TEXTURE_PARAMETERS\n });\n this.setState({patternTexture});\n }\n\n async loadPatternMapping({fillPatternMapping, fetch}) {\n this.setState({patternMapping: null});\n let patternMapping = fillPatternMapping;\n if (typeof patternMapping === 'string') {\n patternMapping = await fetch(patternMapping, {\n propName: 'fillPatternMapping',\n layer: this\n });\n }\n this.setState({patternMapping});\n this.getAttributeManager().invalidate('getFillPattern');\n this.setNeedsUpdate();\n }\n\n getPatternFrame(name) {\n const {patternMapping} = this.state;\n const def = patternMapping && patternMapping[name];\n return def ? [def.x, def.y, def.width, def.height] : [0, 0, 0, 0];\n }\n}\n\nFillStyleExtension.extensionName = 'FillStyleExtension';\nFillStyleExtension.defaultProps = defaultProps;\n"],"file":"fill-style.js"}
1
+ {"version":3,"sources":["../../../src/fill-style/fill-style.ts"],"names":["LayerExtension","Texture2D","patternShaders","defaultProps","fillPatternEnabled","fillPatternAtlas","fillPatternMapping","fillPatternMask","getFillPattern","type","value","d","pattern","getFillPatternScale","getFillPatternOffset","DEFAULT_TEXTURE_PARAMETERS","FillStyleExtension","constructor","isEnabled","layer","getAttributeManager","state","getShaders","extension","modules","opts","filter","Boolean","initializeState","context","attributeManager","add","fillPatternFrames","size","accessor","transform","getPatternFrame","bind","shaderAttributes","divisor","instanceFillPatternFrames","fillPatternScales","defaultValue","instanceFillPatternScales","fillPatternOffsets","instanceFillPatternOffsets","setState","emptyTexture","gl","data","Uint8Array","width","height","updateState","props","oldProps","loadPatternAtlas","call","loadPatternMapping","draw","params","patternTexture","setModuleParameters","fillPatternTexture","finalizeState","delete","fetch","image","propName","parameters","patternMapping","invalidate","setNeedsUpdate","name","def","x","y"],"mappings":";AAAA,SAAQA,cAAR,QAA6B,eAA7B;AACA,SAAQC,SAAR,QAAwB,eAAxB;AAGA,SAAQC,cAAR,QAA6B,gBAA7B;AAWA,MAAMC,YAAY,GAAG;AACnBC,EAAAA,kBAAkB,EAAE,IADD;AAEnBC,EAAAA,gBAAgB,EAAE,IAFC;AAGnBC,EAAAA,kBAAkB,EAAE,IAHD;AAInBC,EAAAA,eAAe,EAAE,IAJE;AAKnBC,EAAAA,cAAc,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAEC,CAAC,IAAIA,CAAC,CAACC;AAAjC,GALG;AAMnBC,EAAAA,mBAAmB,EAAE;AAACJ,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAE;AAA1B,GANF;AAOnBI,EAAAA,oBAAoB,EAAE;AAACL,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAE,CAAC,CAAD,EAAI,CAAJ;AAA1B;AAPH,CAArB;AA0DA,MAAMK,0BAA0B,GAAG;AACjC,eADiC;AAGjC,eAHiC;AAKjC,gBALiC;AAMjC;AANiC,CAAnC;AAUA,eAAe,MAAMC,kBAAN,SAAiChB,cAAjC,CAA2E;AAIxFiB,EAAAA,WAAW,CAAC;AAACL,IAAAA,OAAO,GAAG;AAAX,MAAwD,EAAzD,EAA6D;AACtE,UAAM;AAACA,MAAAA;AAAD,KAAN;AACD;;AAEDM,EAAAA,SAAS,CAACC,KAAD,EAAiD;AACxD,WAAOA,KAAK,CAACC,mBAAN,OAAgC,IAAhC,IAAwC,EAAE,oBAAoBD,KAAK,CAACE,KAA5B,CAA/C;AACD;;AAEDC,EAAAA,UAAU,CAAuCC,SAAvC,EAA6D;AACrE,QAAI,CAACA,SAAS,CAACL,SAAV,CAAoB,IAApB,CAAL,EAAgC;AAC9B,aAAO,IAAP;AACD;;AAED,WAAO;AACLM,MAAAA,OAAO,EAAE,CAACD,SAAS,CAACE,IAAV,CAAeb,OAAf,IAA0BV,cAA3B,EAA2CwB,MAA3C,CAAkDC,OAAlD;AADJ,KAAP;AAGD;;AAEDC,EAAAA,eAAe,CAAuCC,OAAvC,EAA8DN,SAA9D,EAA+E;AAC5F,QAAI,CAACA,SAAS,CAACL,SAAV,CAAoB,IAApB,CAAL,EAAgC;AAC9B;AACD;;AAED,UAAMY,gBAAgB,GAAG,KAAKV,mBAAL,EAAzB;;AAEA,QAAIG,SAAS,CAACE,IAAV,CAAeb,OAAnB,EAA4B;AAC1BkB,MAAAA,gBAAgB,CAAEC,GAAlB,CAAsB;AACpBC,QAAAA,iBAAiB,EAAE;AACjBC,UAAAA,IAAI,EAAE,CADW;AAEjBC,UAAAA,QAAQ,EAAE,gBAFO;AAGjBC,UAAAA,SAAS,EAAEZ,SAAS,CAACa,eAAV,CAA0BC,IAA1B,CAA+B,IAA/B,CAHM;AAIjBC,UAAAA,gBAAgB,EAAE;AAChBN,YAAAA,iBAAiB,EAAE;AACjBO,cAAAA,OAAO,EAAE;AADQ,aADH;AAIhBC,YAAAA,yBAAyB,EAAE;AACzBD,cAAAA,OAAO,EAAE;AADgB;AAJX;AAJD,SADC;AAcpBE,QAAAA,iBAAiB,EAAE;AACjBR,UAAAA,IAAI,EAAE,CADW;AAEjBC,UAAAA,QAAQ,EAAE,qBAFO;AAGjBQ,UAAAA,YAAY,EAAE,CAHG;AAIjBJ,UAAAA,gBAAgB,EAAE;AAChBG,YAAAA,iBAAiB,EAAE;AACjBF,cAAAA,OAAO,EAAE;AADQ,aADH;AAIhBI,YAAAA,yBAAyB,EAAE;AACzBJ,cAAAA,OAAO,EAAE;AADgB;AAJX;AAJD,SAdC;AA2BpBK,QAAAA,kBAAkB,EAAE;AAClBX,UAAAA,IAAI,EAAE,CADY;AAElBC,UAAAA,QAAQ,EAAE,sBAFQ;AAGlBI,UAAAA,gBAAgB,EAAE;AAChBM,YAAAA,kBAAkB,EAAE;AAClBL,cAAAA,OAAO,EAAE;AADS,aADJ;AAIhBM,YAAAA,0BAA0B,EAAE;AAC1BN,cAAAA,OAAO,EAAE;AADiB;AAJZ;AAHA;AA3BA,OAAtB;AAwCD;;AACD,SAAKO,QAAL,CAAc;AACZC,MAAAA,YAAY,EAAE,IAAI9C,SAAJ,CAAc,KAAK4B,OAAL,CAAamB,EAA3B,EAA+B;AAC3CC,QAAAA,IAAI,EAAE,IAAIC,UAAJ,CAAe,CAAf,CADqC;AAE3CC,QAAAA,KAAK,EAAE,CAFoC;AAG3CC,QAAAA,MAAM,EAAE;AAHmC,OAA/B;AADF,KAAd;AAOD;;AAEDC,EAAAA,WAAW,CAET;AAACC,IAAAA,KAAD;AAAQC,IAAAA;AAAR,GAFS,EAGThC,SAHS,EAIT;AACA,QAAI,CAACA,SAAS,CAACL,SAAV,CAAoB,IAApB,CAAL,EAAgC;AAC9B;AACD;;AAED,QAAIoC,KAAK,CAACjD,gBAAN,IAA0BiD,KAAK,CAACjD,gBAAN,KAA2BkD,QAAQ,CAAClD,gBAAlE,EAAoF;AAClFkB,MAAAA,SAAS,CAACiC,gBAAV,CAA2BC,IAA3B,CAAgC,IAAhC;AACD;;AACD,QAAIH,KAAK,CAAChD,kBAAN,IAA4BgD,KAAK,CAAChD,kBAAN,KAA6BiD,QAAQ,CAACjD,kBAAtE,EAA0F;AACxFiB,MAAAA,SAAS,CAACmC,kBAAV,CAA6BD,IAA7B,CAAkC,IAAlC;AACD;AACF;;AAEDE,EAAAA,IAAI,CAAuCC,MAAvC,EAAoDrC,SAApD,EAAqE;AACvE,QAAI,CAACA,SAAS,CAACL,SAAV,CAAoB,IAApB,CAAL,EAAgC;AAC9B;AACD;;AAED,UAAM;AAAC2C,MAAAA;AAAD,QAAmB,KAAKxC,KAA9B;AACA,SAAKyC,mBAAL,CAAyB;AACvBC,MAAAA,kBAAkB,EAAEF,cAAc,IAAI,KAAKxC,KAAL,CAAW0B;AAD1B,KAAzB;AAGD;;AAEDiB,EAAAA,aAAa,GAAuC;AAClD,UAAM;AAACH,MAAAA,cAAD;AAAiBd,MAAAA;AAAjB,QAAiC,KAAK1B,KAA5C;AACAwC,IAAAA,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAEI,MAAhB;AACAlB,IAAAA,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEkB,MAAd;AACD;;AAEqB,QAAhBT,gBAAgB,GAAuC;AAAA;;AAC3D,UAAM;AAACnD,MAAAA,gBAAD;AAAmB6D,MAAAA;AAAnB,QAA4B,KAAKZ,KAAvC;AACA,kCAAKjC,KAAL,CAAWwC,cAAX,gFAA2BI,MAA3B;AACA,SAAKnB,QAAL,CAAc;AAACe,MAAAA,cAAc,EAAE;AAAjB,KAAd;AACA,QAAIM,KAAK,GAAG9D,gBAAZ;;AACA,QAAI,OAAO8D,KAAP,KAAiB,QAArB,EAA+B;AAC7BA,MAAAA,KAAK,GAAG,MAAMD,KAAK,CAACC,KAAD,EAAQ;AAACC,QAAAA,QAAQ,EAAE,kBAAX;AAA+BjD,QAAAA,KAAK,EAAE;AAAtC,OAAR,CAAnB;AACD;;AACD,UAAM0C,cAAc,GAClBM,KAAK,YAAYlE,SAAjB,GACIkE,KADJ,GAEI,IAAIlE,SAAJ,CAAc,KAAK4B,OAAL,CAAamB,EAA3B,EAA+B;AAC7BC,MAAAA,IAAI,EAAEkB,KADuB;AAE7BE,MAAAA,UAAU,EAAEtD;AAFiB,KAA/B,CAHN;AAOA,SAAK+B,QAAL,CAAc;AAACe,MAAAA;AAAD,KAAd;AACD;;AAEuB,QAAlBH,kBAAkB,GAAuC;AAC7D,UAAM;AAACpD,MAAAA,kBAAD;AAAqB4D,MAAAA;AAArB,QAA8B,KAAKZ,KAAzC;AACA,SAAKR,QAAL,CAAc;AAACwB,MAAAA,cAAc,EAAE;AAAjB,KAAd;AACA,QAAIA,cAAc,GAAGhE,kBAArB;;AACA,QAAI,OAAOgE,cAAP,KAA0B,QAA9B,EAAwC;AACtCA,MAAAA,cAAc,GAAG,MAAMJ,KAAK,CAACI,cAAD,EAAiB;AAC3CF,QAAAA,QAAQ,EAAE,oBADiC;AAE3CjD,QAAAA,KAAK,EAAE;AAFoC,OAAjB,CAA5B;AAID;;AACD,SAAK2B,QAAL,CAAc;AAACwB,MAAAA;AAAD,KAAd;AACA,SAAKlD,mBAAL,GAA4BmD,UAA5B,CAAuC,gBAAvC;AACA,SAAKC,cAAL;AACD;;AAEDpC,EAAAA,eAAe,CAAuCqC,IAAvC,EAAqD;AAClE,UAAM;AAACH,MAAAA;AAAD,QAAmB,KAAKjD,KAA9B;AACA,UAAMqD,GAAG,GAAGJ,cAAc,IAAIA,cAAc,CAACG,IAAD,CAA5C;AACA,WAAOC,GAAG,GAAG,CAACA,GAAG,CAACC,CAAL,EAAQD,GAAG,CAACE,CAAZ,EAAeF,GAAG,CAACvB,KAAnB,EAA0BuB,GAAG,CAACtB,MAA9B,CAAH,GAA2C,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAArD;AACD;;AAvJuF;;gBAArEpC,kB,kBACGb,Y;;gBADHa,kB,mBAEI,oB","sourcesContent":["import {LayerExtension} from '@deck.gl/core';\nimport {Texture2D} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nimport {patternShaders} from './shaders.glsl';\n\nimport type {\n Layer,\n LayerContext,\n Accessor,\n AccessorFunction,\n Texture,\n UpdateParameters\n} from '@deck.gl/core';\n\nconst defaultProps = {\n fillPatternEnabled: true,\n fillPatternAtlas: null,\n fillPatternMapping: null,\n fillPatternMask: true,\n getFillPattern: {type: 'accessor', value: d => d.pattern},\n getFillPatternScale: {type: 'accessor', value: 1},\n getFillPatternOffset: {type: 'accessor', value: [0, 0]}\n};\n\nexport type FillStyleExtensionProps<DataT = any> = {\n /** Cheap toggle to enable/disable pattern fill. Requires the `pattern` option to be on.\n * @default true\n */\n fillPatternEnabled?: boolean;\n /** Sprite image url or texture that packs all your patterns into one layout. */\n fillPatternAtlas?: Texture;\n /** Pattern names mapped to pattern definitions, or a url that points to a JSON file. */\n fillPatternMapping?:\n | string\n | Record<\n string,\n {\n /** Left position of the pattern on the atlas */\n x: number;\n /** Top position of the pattern on the atlas */\n y: number;\n /** Width of the pattern */\n width: number;\n /** Height of the pattern */\n height: number;\n }\n >;\n /**\n * Whether to treat the patterns as transparency masks.\n * @default true\n */\n fillPatternMask?: boolean;\n /** Accessor for the name of the pattern. */\n getFillPattern?: AccessorFunction<DataT, string>;\n /** Accessor for the scale of the pattern, relative to the original size. If the pattern is 24 x 24 pixels, scale `1` roughly yields 24 meters.\n * @default 1\n */\n getFillPatternScale?: Accessor<DataT, number>;\n /**\n * Accessor for the offset of the pattern, relative to the original size. Offset `[0.5, 0.5]` shifts the pattern alignment by half.\n * @default [0, 0]\n */\n getFillPatternOffset?: Accessor<DataT, [number, number]>;\n};\n\ntype FillStyleExtensionOptions = {\n /** If `true`, adds the ability to tile the filled area with a pattern.\n * @default false\n */\n pattern: boolean;\n};\n\nconst DEFAULT_TEXTURE_PARAMETERS = {\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n // GL.LINEAR is the default value but explicitly set it here\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n // for texture boundary artifact\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n};\n\n/** Adds selected features to layers that render a \"fill\", such as the `PolygonLayer` and `ScatterplotLayer`. */\nexport default class FillStyleExtension extends LayerExtension<FillStyleExtensionOptions> {\n static defaultProps = defaultProps;\n static extensionName = 'FillStyleExtension';\n\n constructor({pattern = false}: Partial<FillStyleExtensionOptions> = {}) {\n super({pattern});\n }\n\n isEnabled(layer: Layer<FillStyleExtensionProps>): boolean {\n return layer.getAttributeManager() !== null && !('pathTesselator' in layer.state);\n }\n\n getShaders(this: Layer<FillStyleExtensionProps>, extension: this): any {\n if (!extension.isEnabled(this)) {\n return null;\n }\n\n return {\n modules: [extension.opts.pattern && patternShaders].filter(Boolean)\n };\n }\n\n initializeState(this: Layer<FillStyleExtensionProps>, context: LayerContext, extension: this) {\n if (!extension.isEnabled(this)) {\n return;\n }\n\n const attributeManager = this.getAttributeManager();\n\n if (extension.opts.pattern) {\n attributeManager!.add({\n fillPatternFrames: {\n size: 4,\n accessor: 'getFillPattern',\n transform: extension.getPatternFrame.bind(this),\n shaderAttributes: {\n fillPatternFrames: {\n divisor: 0\n },\n instanceFillPatternFrames: {\n divisor: 1\n }\n }\n },\n fillPatternScales: {\n size: 1,\n accessor: 'getFillPatternScale',\n defaultValue: 1,\n shaderAttributes: {\n fillPatternScales: {\n divisor: 0\n },\n instanceFillPatternScales: {\n divisor: 1\n }\n }\n },\n fillPatternOffsets: {\n size: 2,\n accessor: 'getFillPatternOffset',\n shaderAttributes: {\n fillPatternOffsets: {\n divisor: 0\n },\n instanceFillPatternOffsets: {\n divisor: 1\n }\n }\n }\n });\n }\n this.setState({\n emptyTexture: new Texture2D(this.context.gl, {\n data: new Uint8Array(4),\n width: 1,\n height: 1\n })\n });\n }\n\n updateState(\n this: Layer<FillStyleExtensionProps>,\n {props, oldProps}: UpdateParameters<Layer<FillStyleExtensionProps>>,\n extension: this\n ) {\n if (!extension.isEnabled(this)) {\n return;\n }\n\n if (props.fillPatternAtlas && props.fillPatternAtlas !== oldProps.fillPatternAtlas) {\n extension.loadPatternAtlas.call(this);\n }\n if (props.fillPatternMapping && props.fillPatternMapping !== oldProps.fillPatternMapping) {\n extension.loadPatternMapping.call(this);\n }\n }\n\n draw(this: Layer<FillStyleExtensionProps>, params: any, extension: this) {\n if (!extension.isEnabled(this)) {\n return;\n }\n\n const {patternTexture} = this.state;\n this.setModuleParameters({\n fillPatternTexture: patternTexture || this.state.emptyTexture\n });\n }\n\n finalizeState(this: Layer<FillStyleExtensionProps>) {\n const {patternTexture, emptyTexture} = this.state;\n patternTexture?.delete();\n emptyTexture?.delete();\n }\n\n async loadPatternAtlas(this: Layer<FillStyleExtensionProps>) {\n const {fillPatternAtlas, fetch} = this.props;\n this.state.patternTexture?.delete();\n this.setState({patternTexture: null});\n let image = fillPatternAtlas;\n if (typeof image === 'string') {\n image = await fetch(image, {propName: 'fillPatternAtlas', layer: this});\n }\n const patternTexture =\n image instanceof Texture2D\n ? image\n : new Texture2D(this.context.gl, {\n data: image,\n parameters: DEFAULT_TEXTURE_PARAMETERS\n });\n this.setState({patternTexture});\n }\n\n async loadPatternMapping(this: Layer<FillStyleExtensionProps>) {\n const {fillPatternMapping, fetch} = this.props;\n this.setState({patternMapping: null});\n let patternMapping = fillPatternMapping;\n if (typeof patternMapping === 'string') {\n patternMapping = await fetch(patternMapping, {\n propName: 'fillPatternMapping',\n layer: this\n });\n }\n this.setState({patternMapping});\n this.getAttributeManager()!.invalidate('getFillPattern');\n this.setNeedsUpdate();\n }\n\n getPatternFrame(this: Layer<FillStyleExtensionProps>, name: string) {\n const {patternMapping} = this.state;\n const def = patternMapping && patternMapping[name];\n return def ? [def.x, def.y, def.width, def.height] : [0, 0, 0, 0];\n }\n}\n"],"file":"fill-style.js"}
@@ -7,7 +7,11 @@ const inject = {
7
7
  'fs:DECKGL_FILTER_COLOR': "\n if (fill_patternEnabled) {\n float scale = FILL_UV_SCALE * fill_patternPlacement.z;\n vec2 patternUV = mod(mod(fill_uvCoordinateOrigin, scale) + 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 "
8
8
  };
9
9
 
10
- function getPatternUniforms(opts = {}, uniforms) {
10
+ function getPatternUniforms(opts, uniforms) {
11
+ if (!opts) {
12
+ return {};
13
+ }
14
+
11
15
  if ('fillPatternTexture' in opts) {
12
16
  const {
13
17
  fillPatternTexture
@@ -18,7 +22,7 @@ function getPatternUniforms(opts = {}, uniforms) {
18
22
  };
19
23
  }
20
24
 
21
- if (opts.viewport) {
25
+ if ('viewport' in opts) {
22
26
  const {
23
27
  viewport,
24
28
  fillPatternMask = true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fill-style/shaders.glsl.js"],"names":["project","COORDINATE_SYSTEM","patternVs","patternFs","inject","getPatternUniforms","opts","uniforms","fillPatternTexture","fill_patternTexture","fill_patternTextureSize","width","height","viewport","fillPatternMask","fillPatternEnabled","project_uCoordinateOrigin","project_uCoordinateSystem","coordinateOriginCommon","CARTESIAN","projectPosition","fill_uvCoordinateOrigin","slice","fill_patternMask","fill_patternEnabled","patternShaders","name","vs","fs","dependencies","getUniforms"],"mappings":"AAAA,SAAQA,OAAR,EAAiBC,iBAAjB,QAAyC,eAAzC;AAKA,MAAMC,SAAS,ysBAAf;AAuBA,MAAMC,SAAS,4SAAf;AAaA,MAAMC,MAAM,GAAG;AACb,6EADa;AAKb,iVALa;AAab;AAba,CAAf;;AA8BA,SAASC,kBAAT,CAA4BC,IAAI,GAAG,EAAnC,EAAuCC,QAAvC,EAAiD;AAC/C,MAAI,wBAAwBD,IAA5B,EAAkC;AAChC,UAAM;AAACE,MAAAA;AAAD,QAAuBF,IAA7B;AACA,WAAO;AACLG,MAAAA,mBAAmB,EAAED,kBADhB;AAELE,MAAAA,uBAAuB,EAAE,CAACF,kBAAkB,CAACG,KAApB,EAA2BH,kBAAkB,CAACI,MAA9C;AAFpB,KAAP;AAID;;AACD,MAAIN,IAAI,CAACO,QAAT,EAAmB;AACjB,UAAM;AAACA,MAAAA,QAAD;AAAWC,MAAAA,eAAe,GAAG,IAA7B;AAAmCC,MAAAA,kBAAkB,GAAG;AAAxD,QAAgET,IAAtE;AACA,UAAM;AAACU,MAAAA,yBAAD;AAA4BC,MAAAA;AAA5B,QAAyDV,QAA/D;AAEA,UAAMW,sBAAsB,GAC1BD,yBAAyB,KAAKhB,iBAAiB,CAACkB,SAAhD,GACIH,yBADJ,GAEIH,QAAQ,CAACO,eAAT,CAAyBJ,yBAAzB,CAHN;AAKA,WAAO;AACLK,MAAAA,uBAAuB,EAAEH,sBAAsB,CAACI,KAAvB,CAA6B,CAA7B,EAAgC,CAAhC,CADpB;AAELC,MAAAA,gBAAgB,EAAET,eAFb;AAGLU,MAAAA,mBAAmB,EAAET;AAHhB,KAAP;AAKD;;AACD,SAAO,EAAP;AACD;;AAED,OAAO,MAAMU,cAAc,GAAG;AAC5BC,EAAAA,IAAI,EAAE,cADsB;AAE5BC,EAAAA,EAAE,EAAEzB,SAFwB;AAG5B0B,EAAAA,EAAE,EAAEzB,SAHwB;AAI5BC,EAAAA,MAJ4B;AAK5ByB,EAAAA,YAAY,EAAE,CAAC7B,OAAD,CALc;AAM5B8B,EAAAA,WAAW,EAAEzB;AANe,CAAvB","sourcesContent":["import {project, COORDINATE_SYSTEM} from '@deck.gl/core';\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 vec3 fill_patternPlacement;\n`;\n\nconst patternFs = `\nuniform bool fill_patternEnabled;\nuniform bool fill_patternMask;\nuniform sampler2D fill_patternTexture;\nuniform vec2 fill_uvCoordinateOrigin;\n\nvarying vec4 fill_patternBounds;\nvarying vec3 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.z = FILL_PATTERN_SCALE_ATTRIB * FILL_PATTERN_FRAME_ATTRIB.w;\n }\n `,\n\n 'fs:DECKGL_FILTER_COLOR': `\n if (fill_patternEnabled) {\n float scale = FILL_UV_SCALE * fill_patternPlacement.z;\n vec2 patternUV = mod(mod(fill_uvCoordinateOrigin, scale) + 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\nfunction getPatternUniforms(opts = {}, uniforms) {\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 (opts.viewport) {\n const {viewport, fillPatternMask = true, fillPatternEnabled = true} = opts;\n const {project_uCoordinateOrigin, project_uCoordinateSystem} = uniforms;\n\n const coordinateOriginCommon =\n project_uCoordinateSystem === COORDINATE_SYSTEM.CARTESIAN\n ? project_uCoordinateOrigin\n : viewport.projectPosition(project_uCoordinateOrigin);\n\n return {\n fill_uvCoordinateOrigin: coordinateOriginCommon.slice(0, 2),\n fill_patternMask: fillPatternMask,\n fill_patternEnabled: fillPatternEnabled\n };\n }\n return {};\n}\n\nexport const patternShaders = {\n name: 'fill-pattern',\n vs: patternVs,\n fs: patternFs,\n inject,\n dependencies: [project],\n getUniforms: getPatternUniforms\n};\n"],"file":"shaders.glsl.js"}
1
+ {"version":3,"sources":["../../../src/fill-style/shaders.glsl.ts"],"names":["project","COORDINATE_SYSTEM","patternVs","patternFs","inject","getPatternUniforms","opts","uniforms","fillPatternTexture","fill_patternTexture","fill_patternTextureSize","width","height","viewport","fillPatternMask","fillPatternEnabled","project_uCoordinateOrigin","project_uCoordinateSystem","coordinateOriginCommon","CARTESIAN","projectPosition","fill_uvCoordinateOrigin","slice","fill_patternMask","fill_patternEnabled","patternShaders","name","vs","fs","dependencies","getUniforms"],"mappings":"AAAA,SAAQA,OAAR,EAAiBC,iBAAjB,QAAyC,eAAzC;AAQA,MAAMC,SAAS,ysBAAf;AAuBA,MAAMC,SAAS,4SAAf;AAaA,MAAMC,MAAM,GAAG;AACb,6EADa;AAKb,iVALa;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,UAAM;AAACE,MAAAA;AAAD,QAAuBF,IAA7B;AACA,WAAO;AACLG,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,UAAM;AAACO,MAAAA,QAAD;AAAWC,MAAAA,eAAe,GAAG,IAA7B;AAAmCC,MAAAA,kBAAkB,GAAG;AAAxD,QAAgET,IAAtE;AACA,UAAM;AAACU,MAAAA,yBAAD;AAA4BC,MAAAA;AAA5B,QAAyDV,QAA/D;AAEA,UAAMW,sBAAsB,GAC1BD,yBAAyB,KAAKhB,iBAAiB,CAACkB,SAAhD,GACIH,yBADJ,GAEIH,QAAQ,CAACO,eAAT,CAAyBJ,yBAAzB,CAHN;AAKA,WAAO;AACLK,MAAAA,uBAAuB,EAAEH,sBAAsB,CAACI,KAAvB,CAA6B,CAA7B,EAAgC,CAAhC,CADpB;AAELC,MAAAA,gBAAgB,EAAET,eAFb;AAGLU,MAAAA,mBAAmB,EAAET;AAHhB,KAAP;AAKD;;AACD,SAAO,EAAP;AACD;;AAED,OAAO,MAAMU,cAAqD,GAAG;AACnEC,EAAAA,IAAI,EAAE,cAD6D;AAEnEC,EAAAA,EAAE,EAAEzB,SAF+D;AAGnE0B,EAAAA,EAAE,EAAEzB,SAH+D;AAInEC,EAAAA,MAJmE;AAKnEyB,EAAAA,YAAY,EAAE,CAAC7B,OAAD,CALqD;AAMnE8B,EAAAA,WAAW,EAAEzB;AANsD,CAA9D","sourcesContent":["import {project, COORDINATE_SYSTEM} 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 vec3 fill_patternPlacement;\n`;\n\nconst patternFs = `\nuniform bool fill_patternEnabled;\nuniform bool fill_patternMask;\nuniform sampler2D fill_patternTexture;\nuniform vec2 fill_uvCoordinateOrigin;\n\nvarying vec4 fill_patternBounds;\nvarying vec3 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.z = FILL_PATTERN_SCALE_ATTRIB * FILL_PATTERN_FRAME_ATTRIB.w;\n }\n `,\n\n 'fs:DECKGL_FILTER_COLOR': `\n if (fill_patternEnabled) {\n float scale = FILL_UV_SCALE * fill_patternPlacement.z;\n vec2 patternUV = mod(mod(fill_uvCoordinateOrigin, scale) + 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 {viewport, fillPatternMask = true, fillPatternEnabled = true} = opts;\n const {project_uCoordinateOrigin, project_uCoordinateSystem} = uniforms as ProjectUniforms;\n\n const coordinateOriginCommon =\n project_uCoordinateSystem === COORDINATE_SYSTEM.CARTESIAN\n ? project_uCoordinateOrigin\n : viewport.projectPosition(project_uCoordinateOrigin);\n\n return {\n fill_uvCoordinateOrigin: coordinateOriginCommon.slice(0, 2),\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"}
@@ -1,7 +1,8 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
1
2
  import { LayerExtension, COORDINATE_SYSTEM } from '@deck.gl/core';
2
3
  import project64 from './project64';
3
4
  export default class Fp64Extension extends LayerExtension {
4
- getShaders(opts) {
5
+ getShaders() {
5
6
  const {
6
7
  coordinateSystem
7
8
  } = this.props;
@@ -16,5 +17,6 @@ export default class Fp64Extension extends LayerExtension {
16
17
  }
17
18
 
18
19
  }
19
- Fp64Extension.extensionName = 'Fp64Extension';
20
+
21
+ _defineProperty(Fp64Extension, "extensionName", 'Fp64Extension');
20
22
  //# sourceMappingURL=fp64.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fp64/fp64.js"],"names":["LayerExtension","COORDINATE_SYSTEM","project64","Fp64Extension","getShaders","opts","coordinateSystem","props","LNGLAT","DEFAULT","Error","modules","extensionName"],"mappings":"AAoBA,SAAQA,cAAR,EAAwBC,iBAAxB,QAAgD,eAAhD;AACA,OAAOC,SAAP,MAAsB,aAAtB;AAEA,eAAe,MAAMC,aAAN,SAA4BH,cAA5B,CAA2C;AACxDI,EAAAA,UAAU,CAACC,IAAD,EAAO;AACf,UAAM;AAACC,MAAAA;AAAD,QAAqB,KAAKC,KAAhC;;AACA,QACED,gBAAgB,KAAKL,iBAAiB,CAACO,MAAvC,IACAF,gBAAgB,KAAKL,iBAAiB,CAACQ,OAFzC,EAGE;AACA,YAAM,IAAIC,KAAJ,CAAU,uCAAV,CAAN;AACD;;AAED,WAAO;AACLC,MAAAA,OAAO,EAAE,CAACT,SAAD;AADJ,KAAP;AAGD;;AAbuD;AAgB1DC,aAAa,CAACS,aAAd,GAA8B,eAA9B","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension, COORDINATE_SYSTEM} from '@deck.gl/core';\nimport project64 from './project64';\n\nexport default class Fp64Extension extends LayerExtension {\n getShaders(opts) {\n const {coordinateSystem} = this.props;\n if (\n coordinateSystem !== COORDINATE_SYSTEM.LNGLAT &&\n coordinateSystem !== COORDINATE_SYSTEM.DEFAULT\n ) {\n throw new Error('fp64: coordinateSystem must be LNGLAT');\n }\n\n return {\n modules: [project64]\n };\n }\n}\n\nFp64Extension.extensionName = 'Fp64Extension';\n"],"file":"fp64.js"}
1
+ {"version":3,"sources":["../../../src/fp64/fp64.ts"],"names":["LayerExtension","COORDINATE_SYSTEM","project64","Fp64Extension","getShaders","coordinateSystem","props","LNGLAT","DEFAULT","Error","modules"],"mappings":";AAoBA,SAAQA,cAAR,EAAwBC,iBAAxB,QAAgD,eAAhD;AACA,OAAOC,SAAP,MAAsB,aAAtB;AAKA,eAAe,MAAMC,aAAN,SAA4BH,cAA5B,CAA2C;AAGxDI,EAAAA,UAAU,GAAmB;AAC3B,UAAM;AAACC,MAAAA;AAAD,QAAqB,KAAKC,KAAhC;;AACA,QACED,gBAAgB,KAAKJ,iBAAiB,CAACM,MAAvC,IACAF,gBAAgB,KAAKJ,iBAAiB,CAACO,OAFzC,EAGE;AACA,YAAM,IAAIC,KAAJ,CAAU,uCAAV,CAAN;AACD;;AAED,WAAO;AACLC,MAAAA,OAAO,EAAE,CAACR,SAAD;AADJ,KAAP;AAGD;;AAfuD;;gBAArCC,a,mBACI,e","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension, COORDINATE_SYSTEM} from '@deck.gl/core';\nimport project64 from './project64';\n\nimport type {Layer} from '@deck.gl/core';\n\n/** @deprecated Adds the legacy 64-bit precision to geospatial layers. */\nexport default class Fp64Extension extends LayerExtension {\n static extensionName = 'Fp64Extension';\n\n getShaders(this: Layer): any {\n const {coordinateSystem} = this.props;\n if (\n coordinateSystem !== COORDINATE_SYSTEM.LNGLAT &&\n coordinateSystem !== COORDINATE_SYSTEM.DEFAULT\n ) {\n throw new Error('fp64: coordinateSystem must be LNGLAT');\n }\n\n return {\n modules: [project64]\n };\n }\n}\n"],"file":"fp64.js"}
@@ -1,2 +1,2 @@
1
- export 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";
1
+ export default "\nconst vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);\n\nuniform vec2 project_uViewProjectionMatrixFP64[16];\n\n// longitude: lnglat_fp64.xy; latitude: lnglat_fp64.zw\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 // This is the local offset to the instance position\n vec2 offset64[4];\n vec4_fp64(vec4(offset, 0.0), offset64);\n\n float z = project_size(position.z);\n\n // Apply web mercator projection (depends on coordinate system imn use)\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";
2
2
  //# sourceMappingURL=project64.glsl.js.map