@deck.gl/extensions 9.0.0-beta.1 → 9.0.0-beta.11

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 (273) hide show
  1. package/dist/brushing/brushing-extension.js +80 -0
  2. package/{typed → dist}/brushing/shader-module.d.ts +1 -1
  3. package/{typed → dist}/brushing/shader-module.d.ts.map +1 -1
  4. package/dist/brushing/shader-module.js +92 -0
  5. package/{typed → dist}/clip/clip-extension.d.ts.map +1 -1
  6. package/dist/clip/clip-extension.js +117 -0
  7. package/{typed → dist}/collision-filter/collision-filter-effect.d.ts +4 -2
  8. package/dist/collision-filter/collision-filter-effect.d.ts.map +1 -0
  9. package/dist/collision-filter/collision-filter-effect.js +194 -0
  10. package/dist/collision-filter/collision-filter-extension.js +49 -0
  11. package/{typed → dist}/collision-filter/collision-filter-pass.d.ts +3 -2
  12. package/dist/collision-filter/collision-filter-pass.d.ts.map +1 -0
  13. package/dist/collision-filter/collision-filter-pass.js +23 -0
  14. package/{typed → dist}/collision-filter/shader-module.d.ts.map +1 -1
  15. package/dist/collision-filter/shader-module.js +87 -0
  16. package/dist/data-filter/aggregator.d.ts.map +1 -0
  17. package/dist/{esm/data-filter → data-filter}/aggregator.js +40 -41
  18. package/{typed → dist}/data-filter/data-filter-extension.d.ts +39 -7
  19. package/dist/data-filter/data-filter-extension.d.ts.map +1 -0
  20. package/dist/data-filter/data-filter-extension.js +256 -0
  21. package/dist/data-filter/shader-module.d.ts +39 -0
  22. package/dist/data-filter/shader-module.d.ts.map +1 -0
  23. package/dist/data-filter/shader-module.js +199 -0
  24. package/dist/dist.dev.js +2667 -11058
  25. package/{typed → dist}/fill-style/fill-style-extension.d.ts +2 -30
  26. package/dist/fill-style/fill-style-extension.d.ts.map +1 -0
  27. package/dist/fill-style/fill-style-extension.js +116 -0
  28. package/{typed/fill-style/shaders.glsl.d.ts → dist/fill-style/shader-module.d.ts} +1 -1
  29. package/dist/fill-style/shader-module.d.ts.map +1 -0
  30. package/dist/fill-style/shader-module.js +96 -0
  31. package/dist/fp64/fp64-extension.js +35 -0
  32. package/dist/fp64/project64.glsl.js +81 -0
  33. package/dist/fp64/project64.js +50 -0
  34. package/dist/index.cjs +2795 -0
  35. package/dist/index.cjs.map +7 -0
  36. package/dist/index.d.ts +19 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +11 -0
  39. package/{typed → dist}/mask/mask-effect.d.ts +6 -5
  40. package/dist/mask/mask-effect.d.ts.map +1 -0
  41. package/dist/mask/mask-effect.js +192 -0
  42. package/dist/mask/mask-extension.js +57 -0
  43. package/dist/mask/mask-pass.d.ts +61 -0
  44. package/dist/mask/mask-pass.d.ts.map +1 -0
  45. package/dist/mask/mask-pass.js +52 -0
  46. package/{typed → dist}/mask/shader-module.d.ts.map +1 -1
  47. package/dist/mask/shader-module.js +77 -0
  48. package/{typed → dist}/path-style/path-style-extension.d.ts.map +1 -1
  49. package/dist/path-style/path-style-extension.js +112 -0
  50. package/dist/path-style/shaders.glsl.js +86 -0
  51. package/{typed → dist}/terrain/height-map-builder.d.ts +1 -1
  52. package/dist/terrain/height-map-builder.d.ts.map +1 -0
  53. package/dist/terrain/height-map-builder.js +104 -0
  54. package/{typed → dist}/terrain/shader-module.d.ts +2 -2
  55. package/dist/terrain/shader-module.d.ts.map +1 -0
  56. package/dist/terrain/shader-module.js +137 -0
  57. package/{typed → dist}/terrain/terrain-cover.d.ts +1 -1
  58. package/dist/terrain/terrain-cover.d.ts.map +1 -0
  59. package/dist/terrain/terrain-cover.js +188 -0
  60. package/{typed → dist}/terrain/terrain-effect.d.ts +6 -7
  61. package/dist/terrain/terrain-effect.d.ts.map +1 -0
  62. package/dist/terrain/terrain-effect.js +174 -0
  63. package/dist/terrain/terrain-extension.js +44 -0
  64. package/dist/terrain/terrain-pass.d.ts +53 -0
  65. package/dist/terrain/terrain-pass.d.ts.map +1 -0
  66. package/dist/terrain/terrain-pass.js +69 -0
  67. package/{typed → dist}/terrain/terrain-picking-pass.d.ts +1 -1
  68. package/dist/terrain/terrain-picking-pass.d.ts.map +1 -0
  69. package/dist/terrain/terrain-picking-pass.js +67 -0
  70. package/{typed → dist}/terrain/utils.d.ts +1 -0
  71. package/{typed → dist}/terrain/utils.d.ts.map +1 -1
  72. package/dist/terrain/utils.js +25 -0
  73. package/{typed → dist}/utils/debug.d.ts.map +1 -1
  74. package/dist/utils/debug.js +50 -0
  75. package/dist/utils/projection-utils.js +153 -0
  76. package/dist/utils/syntax-tags.d.ts +6 -0
  77. package/dist/utils/syntax-tags.d.ts.map +1 -0
  78. package/dist/utils/syntax-tags.js +5 -0
  79. package/dist.min.js +918 -1254
  80. package/package.json +19 -16
  81. package/src/brushing/shader-module.ts +4 -3
  82. package/src/clip/clip-extension.ts +10 -9
  83. package/src/collision-filter/collision-filter-effect.ts +35 -31
  84. package/src/collision-filter/collision-filter-pass.ts +7 -13
  85. package/src/collision-filter/shader-module.ts +6 -4
  86. package/src/data-filter/aggregator.ts +8 -13
  87. package/src/data-filter/data-filter-extension.ts +181 -56
  88. package/src/data-filter/shader-module.ts +132 -37
  89. package/src/fill-style/fill-style-extension.ts +4 -5
  90. package/src/fill-style/{shaders.glsl.ts → shader-module.ts} +6 -5
  91. package/src/mask/mask-effect.ts +30 -20
  92. package/src/mask/mask-pass.ts +22 -18
  93. package/src/mask/shader-module.ts +7 -6
  94. package/src/path-style/path-style-extension.ts +1 -0
  95. package/src/terrain/shader-module.ts +14 -13
  96. package/src/terrain/terrain-cover.ts +2 -1
  97. package/src/terrain/terrain-effect.ts +19 -23
  98. package/src/terrain/terrain-pass.ts +37 -37
  99. package/src/terrain/terrain-picking-pass.ts +19 -25
  100. package/src/terrain/utils.ts +13 -7
  101. package/src/utils/debug.ts +1 -2
  102. package/src/utils/syntax-tags.ts +5 -0
  103. package/dist/es5/brushing/brushing-extension.js +0 -108
  104. package/dist/es5/brushing/brushing-extension.js.map +0 -1
  105. package/dist/es5/brushing/shader-module.js +0 -50
  106. package/dist/es5/brushing/shader-module.js.map +0 -1
  107. package/dist/es5/clip/clip-extension.js +0 -98
  108. package/dist/es5/clip/clip-extension.js.map +0 -1
  109. package/dist/es5/collision-filter/collision-filter-effect.js +0 -294
  110. package/dist/es5/collision-filter/collision-filter-effect.js.map +0 -1
  111. package/dist/es5/collision-filter/collision-filter-extension.js +0 -109
  112. package/dist/es5/collision-filter/collision-filter-extension.js.map +0 -1
  113. package/dist/es5/collision-filter/collision-filter-pass.js +0 -79
  114. package/dist/es5/collision-filter/collision-filter-pass.js.map +0 -1
  115. package/dist/es5/collision-filter/shader-module.js +0 -39
  116. package/dist/es5/collision-filter/shader-module.js.map +0 -1
  117. package/dist/es5/data-filter/aggregator.js +0 -79
  118. package/dist/es5/data-filter/aggregator.js.map +0 -1
  119. package/dist/es5/data-filter/data-filter-extension.js +0 -236
  120. package/dist/es5/data-filter/data-filter-extension.js.map +0 -1
  121. package/dist/es5/data-filter/shader-module.js +0 -122
  122. package/dist/es5/data-filter/shader-module.js.map +0 -1
  123. package/dist/es5/fill-style/fill-style-extension.js +0 -190
  124. package/dist/es5/fill-style/fill-style-extension.js.map +0 -1
  125. package/dist/es5/fill-style/shaders.glsl.js +0 -59
  126. package/dist/es5/fill-style/shaders.glsl.js.map +0 -1
  127. package/dist/es5/fp64/fp64-extension.js +0 -55
  128. package/dist/es5/fp64/fp64-extension.js.map +0 -1
  129. package/dist/es5/fp64/project64.glsl.js +0 -9
  130. package/dist/es5/fp64/project64.glsl.js.map +0 -1
  131. package/dist/es5/fp64/project64.js +0 -52
  132. package/dist/es5/fp64/project64.js.map +0 -1
  133. package/dist/es5/index.js +0 -88
  134. package/dist/es5/index.js.map +0 -1
  135. package/dist/es5/mask/mask-effect.js +0 -279
  136. package/dist/es5/mask/mask-effect.js.map +0 -1
  137. package/dist/es5/mask/mask-extension.js +0 -113
  138. package/dist/es5/mask/mask-extension.js.map +0 -1
  139. package/dist/es5/mask/mask-pass.js +0 -106
  140. package/dist/es5/mask/mask-pass.js.map +0 -1
  141. package/dist/es5/mask/shader-module.js +0 -38
  142. package/dist/es5/mask/shader-module.js.map +0 -1
  143. package/dist/es5/path-style/path-style-extension.js +0 -169
  144. package/dist/es5/path-style/path-style-extension.js.map +0 -1
  145. package/dist/es5/path-style/shaders.glsl.js +0 -25
  146. package/dist/es5/path-style/shaders.glsl.js.map +0 -1
  147. package/dist/es5/terrain/height-map-builder.js +0 -111
  148. package/dist/es5/terrain/height-map-builder.js.map +0 -1
  149. package/dist/es5/terrain/shader-module.js +0 -86
  150. package/dist/es5/terrain/shader-module.js.map +0 -1
  151. package/dist/es5/terrain/terrain-cover.js +0 -256
  152. package/dist/es5/terrain/terrain-cover.js.map +0 -1
  153. package/dist/es5/terrain/terrain-effect.js +0 -326
  154. package/dist/es5/terrain/terrain-effect.js.map +0 -1
  155. package/dist/es5/terrain/terrain-extension.js +0 -94
  156. package/dist/es5/terrain/terrain-extension.js.map +0 -1
  157. package/dist/es5/terrain/terrain-pass.js +0 -121
  158. package/dist/es5/terrain/terrain-pass.js.map +0 -1
  159. package/dist/es5/terrain/terrain-picking-pass.js +0 -124
  160. package/dist/es5/terrain/terrain-picking-pass.js.map +0 -1
  161. package/dist/es5/terrain/utils.js +0 -35
  162. package/dist/es5/terrain/utils.js.map +0 -1
  163. package/dist/es5/utils/debug.js +0 -71
  164. package/dist/es5/utils/debug.js.map +0 -1
  165. package/dist/es5/utils/projection-utils.js +0 -168
  166. package/dist/es5/utils/projection-utils.js.map +0 -1
  167. package/dist/esm/brushing/brushing-extension.js +0 -68
  168. package/dist/esm/brushing/brushing-extension.js.map +0 -1
  169. package/dist/esm/brushing/shader-module.js +0 -103
  170. package/dist/esm/brushing/shader-module.js.map +0 -1
  171. package/dist/esm/clip/clip-extension.js +0 -86
  172. package/dist/esm/clip/clip-extension.js.map +0 -1
  173. package/dist/esm/collision-filter/collision-filter-effect.js +0 -246
  174. package/dist/esm/collision-filter/collision-filter-effect.js.map +0 -1
  175. package/dist/esm/collision-filter/collision-filter-extension.js +0 -75
  176. package/dist/esm/collision-filter/collision-filter-extension.js.map +0 -1
  177. package/dist/esm/collision-filter/collision-filter-pass.js +0 -32
  178. package/dist/esm/collision-filter/collision-filter-pass.js.map +0 -1
  179. package/dist/esm/collision-filter/shader-module.js +0 -104
  180. package/dist/esm/collision-filter/shader-module.js.map +0 -1
  181. package/dist/esm/data-filter/aggregator.js.map +0 -1
  182. package/dist/esm/data-filter/data-filter-extension.js +0 -189
  183. package/dist/esm/data-filter/data-filter-extension.js.map +0 -1
  184. package/dist/esm/data-filter/shader-module.js +0 -164
  185. package/dist/esm/data-filter/shader-module.js.map +0 -1
  186. package/dist/esm/fill-style/fill-style-extension.js +0 -156
  187. package/dist/esm/fill-style/fill-style-extension.js.map +0 -1
  188. package/dist/esm/fill-style/shaders.glsl.js +0 -108
  189. package/dist/esm/fill-style/shaders.glsl.js.map +0 -1
  190. package/dist/esm/fp64/fp64-extension.js +0 -20
  191. package/dist/esm/fp64/fp64-extension.js.map +0 -1
  192. package/dist/esm/fp64/project64.glsl.js +0 -82
  193. package/dist/esm/fp64/project64.glsl.js.map +0 -1
  194. package/dist/esm/fp64/project64.js +0 -43
  195. package/dist/esm/fp64/project64.js.map +0 -1
  196. package/dist/esm/index.js +0 -11
  197. package/dist/esm/index.js.map +0 -1
  198. package/dist/esm/mask/mask-effect.js +0 -228
  199. package/dist/esm/mask/mask-effect.js.map +0 -1
  200. package/dist/esm/mask/mask-extension.js +0 -83
  201. package/dist/esm/mask/mask-extension.js.map +0 -1
  202. package/dist/esm/mask/mask-pass.js +0 -58
  203. package/dist/esm/mask/mask-pass.js.map +0 -1
  204. package/dist/esm/mask/shader-module.js +0 -84
  205. package/dist/esm/mask/shader-module.js.map +0 -1
  206. package/dist/esm/path-style/path-style-extension.js +0 -130
  207. package/dist/esm/path-style/path-style-extension.js.map +0 -1
  208. package/dist/esm/path-style/shaders.glsl.js +0 -84
  209. package/dist/esm/path-style/shaders.glsl.js.map +0 -1
  210. package/dist/esm/terrain/height-map-builder.js +0 -86
  211. package/dist/esm/terrain/height-map-builder.js.map +0 -1
  212. package/dist/esm/terrain/shader-module.js +0 -127
  213. package/dist/esm/terrain/shader-module.js.map +0 -1
  214. package/dist/esm/terrain/terrain-cover.js +0 -212
  215. package/dist/esm/terrain/terrain-cover.js.map +0 -1
  216. package/dist/esm/terrain/terrain-effect.js +0 -219
  217. package/dist/esm/terrain/terrain-effect.js.map +0 -1
  218. package/dist/esm/terrain/terrain-extension.js +0 -59
  219. package/dist/esm/terrain/terrain-extension.js.map +0 -1
  220. package/dist/esm/terrain/terrain-pass.js +0 -71
  221. package/dist/esm/terrain/terrain-pass.js.map +0 -1
  222. package/dist/esm/terrain/terrain-picking-pass.js +0 -73
  223. package/dist/esm/terrain/terrain-picking-pass.js.map +0 -1
  224. package/dist/esm/terrain/utils.js +0 -19
  225. package/dist/esm/terrain/utils.js.map +0 -1
  226. package/dist/esm/utils/debug.js +0 -61
  227. package/dist/esm/utils/debug.js.map +0 -1
  228. package/dist/esm/utils/projection-utils.js +0 -134
  229. package/dist/esm/utils/projection-utils.js.map +0 -1
  230. package/typed/collision-filter/collision-filter-effect.d.ts.map +0 -1
  231. package/typed/collision-filter/collision-filter-pass.d.ts.map +0 -1
  232. package/typed/data-filter/aggregator.d.ts.map +0 -1
  233. package/typed/data-filter/data-filter-extension.d.ts.map +0 -1
  234. package/typed/data-filter/shader-module.d.ts +0 -9
  235. package/typed/data-filter/shader-module.d.ts.map +0 -1
  236. package/typed/fill-style/fill-style-extension.d.ts.map +0 -1
  237. package/typed/fill-style/shaders.glsl.d.ts.map +0 -1
  238. package/typed/index.d.ts +0 -19
  239. package/typed/index.d.ts.map +0 -1
  240. package/typed/mask/mask-effect.d.ts.map +0 -1
  241. package/typed/mask/mask-pass.d.ts +0 -19
  242. package/typed/mask/mask-pass.d.ts.map +0 -1
  243. package/typed/terrain/height-map-builder.d.ts.map +0 -1
  244. package/typed/terrain/shader-module.d.ts.map +0 -1
  245. package/typed/terrain/terrain-cover.d.ts.map +0 -1
  246. package/typed/terrain/terrain-effect.d.ts.map +0 -1
  247. package/typed/terrain/terrain-pass.d.ts +0 -11
  248. package/typed/terrain/terrain-pass.d.ts.map +0 -1
  249. package/typed/terrain/terrain-picking-pass.d.ts.map +0 -1
  250. /package/{typed → dist}/brushing/brushing-extension.d.ts +0 -0
  251. /package/{typed → dist}/brushing/brushing-extension.d.ts.map +0 -0
  252. /package/{typed → dist}/clip/clip-extension.d.ts +0 -0
  253. /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts +0 -0
  254. /package/{typed → dist}/collision-filter/collision-filter-extension.d.ts.map +0 -0
  255. /package/{typed → dist}/collision-filter/shader-module.d.ts +0 -0
  256. /package/{typed → dist}/data-filter/aggregator.d.ts +0 -0
  257. /package/{typed → dist}/fp64/fp64-extension.d.ts +0 -0
  258. /package/{typed → dist}/fp64/fp64-extension.d.ts.map +0 -0
  259. /package/{typed → dist}/fp64/project64.d.ts +0 -0
  260. /package/{typed → dist}/fp64/project64.d.ts.map +0 -0
  261. /package/{typed → dist}/fp64/project64.glsl.d.ts +0 -0
  262. /package/{typed → dist}/fp64/project64.glsl.d.ts.map +0 -0
  263. /package/{typed → dist}/mask/mask-extension.d.ts +0 -0
  264. /package/{typed → dist}/mask/mask-extension.d.ts.map +0 -0
  265. /package/{typed → dist}/mask/shader-module.d.ts +0 -0
  266. /package/{typed → dist}/path-style/path-style-extension.d.ts +0 -0
  267. /package/{typed → dist}/path-style/shaders.glsl.d.ts +0 -0
  268. /package/{typed → dist}/path-style/shaders.glsl.d.ts.map +0 -0
  269. /package/{typed → dist}/terrain/terrain-extension.d.ts +0 -0
  270. /package/{typed → dist}/terrain/terrain-extension.d.ts.map +0 -0
  271. /package/{typed → dist}/utils/debug.d.ts +0 -0
  272. /package/{typed → dist}/utils/projection-utils.d.ts +0 -0
  273. /package/{typed → dist}/utils/projection-utils.d.ts.map +0 -0
package/package.json CHANGED
@@ -2,7 +2,8 @@
2
2
  "name": "@deck.gl/extensions",
3
3
  "description": "Plug-and-play functionalities for deck.gl layers",
4
4
  "license": "MIT",
5
- "version": "9.0.0-beta.1",
5
+ "type": "module",
6
+ "version": "9.0.0-beta.11",
6
7
  "publishConfig": {
7
8
  "access": "public"
8
9
  },
@@ -16,13 +17,19 @@
16
17
  "type": "git",
17
18
  "url": "https://github.com/visgl/deck.gl.git"
18
19
  },
19
- "main": "dist/es5/index.js",
20
- "module": "dist/esm/index.js",
21
- "types": "typed/index.d.ts",
20
+ "types": "dist/index.d.ts",
21
+ "main": "dist/index.cjs",
22
+ "module": "dist/index.js",
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js",
27
+ "require": "./dist/index.cjs"
28
+ }
29
+ },
22
30
  "files": [
23
31
  "dist",
24
32
  "src",
25
- "typed",
26
33
  "dist.min.js"
27
34
  ],
28
35
  "sideEffects": false,
@@ -31,18 +38,14 @@
31
38
  "prepublishOnly": "npm run build-bundle && npm run build-bundle -- --env=dev"
32
39
  },
33
40
  "dependencies": {
34
- "@babel/runtime": "^7.0.0",
35
- "@luma.gl/shadertools": "9.0.0-alpha.54"
41
+ "@luma.gl/constants": "^9.0.11",
42
+ "@luma.gl/shadertools": "^9.0.11",
43
+ "@math.gl/core": "^4.0.0"
36
44
  },
37
45
  "peerDependencies": {
38
- "@deck.gl/core": "^9.0.0-alpha",
39
- "@luma.gl/constants": "9.0.0-alpha.54",
40
- "@luma.gl/core": "9.0.0-alpha.54",
41
- "@luma.gl/engine": "9.0.0-alpha.54",
42
- "@luma.gl/shadertools": "9.0.0-alpha.54",
43
- "@luma.gl/webgl": "9.0.0-alpha.54",
44
- "@math.gl/core": "^4.0.0",
45
- "@math.gl/web-mercator": "^4.0.0"
46
+ "@deck.gl/core": "^9.0.0-beta",
47
+ "@luma.gl/core": "^9.0.0",
48
+ "@luma.gl/engine": "^9.0.0"
46
49
  },
47
- "gitHead": "9628417918bec5cc73c1345bfcd2f2be575741f1"
50
+ "gitHead": "d8a3f5bdb644f85caba9d5c1e74baff8f8a3d439"
48
51
  }
@@ -23,6 +23,7 @@ import {project} from '@deck.gl/core';
23
23
  import type {Viewport} from '@deck.gl/core';
24
24
 
25
25
  import type {BrushingExtensionProps} from './brushing-extension';
26
+ import {glsl} from '../utils/syntax-tags';
26
27
 
27
28
  type BrushingModuleSettings = {
28
29
  // From layer context
@@ -30,7 +31,7 @@ type BrushingModuleSettings = {
30
31
  mousePosition?: {x: number; y: number};
31
32
  } & BrushingExtensionProps;
32
33
 
33
- const vs = `
34
+ const vs = glsl`
34
35
  uniform bool brushing_enabled;
35
36
  uniform int brushing_target;
36
37
  uniform vec2 brushing_mousePos;
@@ -64,7 +65,7 @@ const vs = `
64
65
  }
65
66
  `;
66
67
 
67
- const fs = `
68
+ const fs = glsl`
68
69
  uniform bool brushing_enabled;
69
70
  in float brushing_isVisible;
70
71
  `;
@@ -77,7 +78,7 @@ const TARGET = {
77
78
  };
78
79
 
79
80
  const inject = {
80
- 'vs:DECKGL_FILTER_GL_POSITION': `
81
+ 'vs:DECKGL_FILTER_GL_POSITION': glsl`
81
82
  vec2 brushingTarget;
82
83
  vec2 brushingSource;
83
84
  if (brushing_target == 3) {
@@ -22,6 +22,7 @@ import type {ShaderModule} from '@luma.gl/shadertools';
22
22
  import {LayerExtension} from '@deck.gl/core';
23
23
 
24
24
  import type {Layer} from '@deck.gl/core';
25
+ import {glsl} from '../utils/syntax-tags';
25
26
 
26
27
  const defaultProps = {
27
28
  clipBounds: [0, 0, 1, 1],
@@ -40,7 +41,7 @@ export type ClipExtensionProps = {
40
41
  clipByInstance?: boolean;
41
42
  };
42
43
 
43
- const shaderFunction = `
44
+ const shaderFunction = glsl`
44
45
  uniform vec4 clip_bounds;
45
46
 
46
47
  bool clip_isInBounds(vec2 position) {
@@ -58,16 +59,16 @@ const shaderModuleVs: ShaderModule = {
58
59
  };
59
60
 
60
61
  const injectionVs = {
61
- 'vs:#decl': `
62
+ 'vs:#decl': glsl`
62
63
  out float clip_isVisible;
63
64
  `,
64
- 'vs:DECKGL_FILTER_GL_POSITION': `
65
+ 'vs:DECKGL_FILTER_GL_POSITION': glsl`
65
66
  clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));
66
67
  `,
67
- 'fs:#decl': `
68
+ 'fs:#decl': glsl`
68
69
  in float clip_isVisible;
69
70
  `,
70
- 'fs:DECKGL_FILTER_COLOR': `
71
+ 'fs:DECKGL_FILTER_COLOR': glsl`
71
72
  if (clip_isVisible < 0.5) discard;
72
73
  `
73
74
  };
@@ -82,16 +83,16 @@ const shaderModuleFs: ShaderModule = {
82
83
  };
83
84
 
84
85
  const injectionFs = {
85
- 'vs:#decl': `
86
+ 'vs:#decl': glsl`
86
87
  out vec2 clip_commonPosition;
87
88
  `,
88
- 'vs:DECKGL_FILTER_GL_POSITION': `
89
+ 'vs:DECKGL_FILTER_GL_POSITION': glsl`
89
90
  clip_commonPosition = geometry.position.xy;
90
91
  `,
91
- 'fs:#decl': `
92
+ 'fs:#decl': glsl`
92
93
  in vec2 clip_commonPosition;
93
94
  `,
94
- 'fs:DECKGL_FILTER_COLOR': `
95
+ 'fs:DECKGL_FILTER_COLOR': glsl`
95
96
  if (!clip_isInBounds(clip_commonPosition)) discard;
96
97
  `
97
98
  };
@@ -1,10 +1,9 @@
1
1
  import {Device, Framebuffer, Texture} from '@luma.gl/core';
2
- import {WEBGLRenderbuffer} from '@luma.gl/webgl';
3
2
  import {equals} from '@math.gl/core';
4
3
  import {_deepEqual as deepEqual} from '@deck.gl/core';
5
- import type {Effect, Layer, PreRenderOptions, Viewport} from '@deck.gl/core';
4
+ import type {Effect, EffectContext, Layer, PreRenderOptions, Viewport} from '@deck.gl/core';
6
5
  import CollisionFilterPass from './collision-filter-pass';
7
- import MaskEffect, {MaskPreRenderStats} from '../mask/mask-effect';
6
+ import {MaskPreRenderStats} from '../mask/mask-effect';
8
7
  // import {debugFBO} from '../utils/debug';
9
8
 
10
9
  type CollisionFilterExtensionProps = {
@@ -28,28 +27,32 @@ export default class CollisionFilterEffect implements Effect {
28
27
  useInPicking = true;
29
28
  order = 1;
30
29
 
30
+ private context?: EffectContext;
31
31
  private channels: Record<string, RenderInfo> = {};
32
32
  private collisionFilterPass?: CollisionFilterPass;
33
33
  private collisionFBOs: Record<string, Framebuffer> = {};
34
34
  private dummyCollisionMap?: Texture;
35
35
  private lastViewport?: Viewport;
36
36
 
37
- preRender(
38
- device: Device,
39
- {
40
- effects: allEffects,
41
- layers,
42
- layerFilter,
43
- viewports,
44
- onViewportActive,
45
- views,
46
- isPicking,
47
- preRenderStats = {}
48
- }: PreRenderOptions
49
- ): void {
50
- if (!this.dummyCollisionMap) {
51
- this.dummyCollisionMap = device.createTexture({width: 1, height: 1});
52
- }
37
+ setup(context: EffectContext) {
38
+ this.context = context;
39
+ const {device} = context;
40
+ this.dummyCollisionMap = device.createTexture({width: 1, height: 1});
41
+ this.collisionFilterPass = new CollisionFilterPass(device, {id: 'default-collision-filter'});
42
+ }
43
+
44
+ preRender({
45
+ effects: allEffects,
46
+ layers,
47
+ layerFilter,
48
+ viewports,
49
+ onViewportActive,
50
+ views,
51
+ isPicking,
52
+ preRenderStats = {}
53
+ }: PreRenderOptions): void {
54
+ // This can only be called in preRender() after setup() where context is populated
55
+ const {device} = this.context!;
53
56
 
54
57
  if (isPicking) {
55
58
  // Do not update on picking pass
@@ -65,12 +68,8 @@ export default class CollisionFilterEffect implements Effect {
65
68
  return;
66
69
  }
67
70
 
68
- if (!this.collisionFilterPass) {
69
- this.collisionFilterPass = new CollisionFilterPass(device, {id: 'default-collision-filter'});
70
- }
71
-
72
71
  // Detect if mask has rendered. TODO: better dependency system for Effects
73
- const effects = allEffects?.filter(e => e.constructor === MaskEffect);
72
+ const effects = allEffects?.filter(e => e.useInPicking && preRenderStats[e.id]);
74
73
  const maskEffectRendered = (preRenderStats['mask-effect'] as MaskPreRenderStats)?.didRender;
75
74
 
76
75
  // Collect layers to render
@@ -244,18 +243,23 @@ export default class CollisionFilterEffect implements Effect {
244
243
  }
245
244
  });
246
245
 
247
- const depthBuffer = new WEBGLRenderbuffer(
248
- // @ts-expect-error TODO v9 needs to be WebGLDevice
249
- device,
250
- {format: 'depth16unorm', width, height}
251
- );
246
+ // @ts-ignore
247
+ const depthStencilAttachment = device.createTexture({
248
+ format: 'depth16unorm',
249
+ width,
250
+ height,
251
+ mipmaps: false,
252
+
253
+ // TODO fix getWebGLTextureParameters() in luma to avoid passing deprecated parameters
254
+ dataFormat: 6402, // gl.DEPTH_COMPONENT
255
+ type: 5125 // gl.UNSIGNED_INT
256
+ });
252
257
  this.collisionFBOs[collisionGroup] = device.createFramebuffer({
253
258
  id: `collision-${collisionGroup}`,
254
259
  width,
255
260
  height,
256
261
  colorAttachments: [collisionMap],
257
- // @ts-expect-error TODO v9 doesn't handle renderbuffers well
258
- depthStencilAttachment: depthBuffer
262
+ depthStencilAttachment
259
263
  });
260
264
  }
261
265
 
@@ -1,6 +1,5 @@
1
1
  import {Framebuffer} from '@luma.gl/core';
2
- import {withGLParameters} from '@luma.gl/webgl';
3
- import {_LayersPass as LayersPass, LayersPassRenderOptions} from '@deck.gl/core';
2
+ import {Layer, _LayersPass as LayersPass, LayersPassRenderOptions, Viewport} from '@deck.gl/core';
4
3
 
5
4
  type CollisionFilterPassRenderOptions = LayersPassRenderOptions & {};
6
5
 
@@ -8,18 +7,13 @@ export default class CollisionFilterPass extends LayersPass {
8
7
  renderCollisionMap(target: Framebuffer, options: CollisionFilterPassRenderOptions) {
9
8
  const padding = 1;
10
9
  const clearColor = [0, 0, 0, 0];
10
+ const scissorRect = [padding, padding, target.width - 2 * padding, target.height - 2 * padding];
11
11
 
12
- return withGLParameters(
13
- this.device,
14
- {
15
- scissorTest: true,
16
- scissor: [padding, padding, target.width - 2 * padding, target.height - 2 * padding],
17
- blend: false,
18
- depthTest: true,
19
- depthRange: [0, 1]
20
- },
21
- () => this.render({...options, clearColor, target, pass: 'collision'})
22
- );
12
+ this.render({...options, clearColor, scissorRect, target, pass: 'collision'});
13
+ }
14
+
15
+ protected getLayerParameters(layer: Layer, layerIndex: number, viewport: Viewport): any {
16
+ return {...layer.props.parameters, blend: false, depthRange: [0, 1], depthTest: true};
23
17
  }
24
18
 
25
19
  getModuleParameters() {
@@ -1,8 +1,9 @@
1
1
  import {Framebuffer, Texture} from '@luma.gl/core';
2
2
  import type {ShaderModule} from '@luma.gl/shadertools';
3
3
  import {project} from '@deck.gl/core';
4
+ import {glsl} from '../utils/syntax-tags';
4
5
 
5
- const vs = `
6
+ const vs = glsl`
6
7
  #ifdef NON_INSTANCED_MODEL
7
8
  in float collisionPriorities;
8
9
  #else
@@ -54,10 +55,10 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
54
55
  `;
55
56
 
56
57
  const inject = {
57
- 'vs:#decl': `
58
+ 'vs:#decl': glsl`
58
59
  float collision_fade = 1.0;
59
60
  `,
60
- 'vs:DECKGL_FILTER_GL_POSITION': `
61
+ 'vs:DECKGL_FILTER_GL_POSITION': glsl`
61
62
  if (collision_sort) {
62
63
  #ifdef NON_INSTANCED_MODEL
63
64
  float collisionPriority = collisionPriorities;
@@ -77,7 +78,7 @@ const inject = {
77
78
  }
78
79
  }
79
80
  `,
80
- 'vs:DECKGL_FILTER_COLOR': `
81
+ 'vs:DECKGL_FILTER_COLOR': glsl`
81
82
  color.a *= collision_fade;
82
83
  `
83
84
  };
@@ -101,6 +102,7 @@ const getCollisionUniforms = (
101
102
  const {collisionFBO, drawToCollisionMap, dummyCollisionMap} = opts;
102
103
  return {
103
104
  collision_sort: Boolean(drawToCollisionMap),
105
+ // @ts-ignore (v9 not sure why this isn't allowed now)
104
106
  collision_texture:
105
107
  !drawToCollisionMap && collisionFBO ? collisionFBO.colorAttachments[0] : dummyCollisionMap
106
108
  };
@@ -1,4 +1,4 @@
1
- import {Device, Framebuffer} from '@luma.gl/core';
1
+ import {Device, DeviceFeature, Framebuffer} from '@luma.gl/core';
2
2
  import {Model} from '@luma.gl/engine';
3
3
  import {GL} from '@luma.gl/constants';
4
4
 
@@ -53,18 +53,13 @@ void main() {
53
53
  }
54
54
  `;
55
55
 
56
- export function supportsFloatTarget(device: Device): boolean {
57
- // @ts-expect-error
58
- const gl = device.gl;
56
+ const FLOAT_TARGET_FEATURES: DeviceFeature[] = [
57
+ 'float32-renderable-webgl', // ability to render to float texture
58
+ 'texture-blend-float-webgl' // ability to blend when rendering to float texture
59
+ ];
59
60
 
60
- // 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!
61
- return Boolean(
62
- gl.getExtension('EXT_float_blend') &&
63
- // WebGL 2
64
- (gl.getExtension('EXT_color_buffer_float') ||
65
- // WebGL 1
66
- gl.getExtension('WEBGL_color_buffer_float'))
67
- );
61
+ export function supportsFloatTarget(device: Device): boolean {
62
+ return FLOAT_TARGET_FEATURES.every(feature => device.features.has(feature));
68
63
  }
69
64
 
70
65
  // A 1x1 framebuffer object that encodes the total count of filtered items
@@ -75,7 +70,7 @@ export function getFramebuffer(device: Device, useFloatTarget: boolean): Framebu
75
70
  height: 1,
76
71
  colorAttachments: [
77
72
  device.createTexture({
78
- format: device.info.type === 'webgl2' ? 'rgba32float' : 'rgba8unorm',
73
+ format: 'rgba32float',
79
74
  type: GL.FLOAT,
80
75
  mipmaps: false
81
76
  })