@luma.gl/webgl 9.0.0-alpha.8 → 9.0.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 (525) hide show
  1. package/LICENSE +3 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +12 -3
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +89 -74
  5. package/dist/adapter/converters/device-parameters.js.map +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts +4 -10
  7. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js +29 -180
  9. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  10. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  11. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  12. package/dist/adapter/converters/shader-formats.js +52 -0
  13. package/dist/adapter/converters/shader-formats.js.map +1 -0
  14. package/dist/adapter/converters/texture-formats.d.ts +32 -44
  15. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/texture-formats.js +306 -343
  17. package/dist/adapter/converters/texture-formats.js.map +1 -1
  18. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  19. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  20. package/dist/adapter/converters/vertex-formats.js +53 -22
  21. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-features.d.ts +1 -1
  23. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-features.js +9 -25
  25. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  26. package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
  27. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/device-limits.js +54 -58
  29. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  30. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  31. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  32. package/dist/adapter/device-helpers/get-device-info.js +49 -22
  33. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  34. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +1 -1
  35. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  36. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  37. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  38. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  39. package/dist/adapter/helpers/decode-webgl-types.js +89 -0
  40. package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
  41. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -48
  42. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  43. package/dist/adapter/helpers/get-shader-layout.js +58 -138
  44. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  45. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  46. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  47. package/dist/adapter/helpers/parse-shader-compiler-log.js +16 -11
  48. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  49. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  50. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  51. package/dist/adapter/helpers/set-uniform.js +51 -82
  52. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  53. package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
  54. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  55. package/dist/adapter/helpers/webgl-topology-utils.js +103 -0
  56. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
  57. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  58. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  59. package/dist/adapter/objects/constants-to-keys.js +2 -29
  60. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  61. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  62. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  63. package/dist/adapter/objects/webgl-renderbuffer.js +36 -44
  64. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  65. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  66. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  67. package/dist/adapter/objects/webgl-resource.js +26 -83
  68. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  69. package/dist/adapter/resources/webgl-buffer.d.ts +19 -14
  70. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  71. package/dist/adapter/resources/webgl-buffer.js +67 -101
  72. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  73. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  74. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  75. package/dist/adapter/resources/webgl-command-buffer.js +175 -48
  76. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  77. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  78. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-command-encoder.js +10 -20
  80. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  81. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  82. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -25
  83. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  84. package/dist/adapter/resources/webgl-framebuffer.js +63 -175
  85. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  86. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  87. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  88. package/dist/adapter/resources/webgl-render-pass.js +98 -12
  89. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  90. package/dist/adapter/resources/webgl-render-pipeline.d.ts +34 -20
  91. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  92. package/dist/adapter/resources/webgl-render-pipeline.js +110 -293
  93. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  94. package/dist/adapter/resources/webgl-sampler.d.ts +5 -4
  95. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  96. package/dist/adapter/resources/webgl-sampler.js +11 -21
  97. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  98. package/dist/adapter/resources/webgl-shader.d.ts +5 -5
  99. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  100. package/dist/adapter/resources/webgl-shader.js +18 -44
  101. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  102. package/dist/adapter/resources/webgl-texture.d.ts +51 -31
  103. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  104. package/dist/adapter/resources/webgl-texture.js +123 -244
  105. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  106. package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
  107. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
  108. package/dist/adapter/resources/webgl-transform-feedback.js +164 -0
  109. package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -0
  110. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  111. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  112. package/dist/adapter/resources/webgl-vertex-array.js +167 -0
  113. package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
  114. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  115. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  116. package/dist/adapter/webgl-canvas-context.js +12 -23
  117. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  118. package/dist/adapter/webgl-device.d.ts +92 -41
  119. package/dist/adapter/webgl-device.d.ts.map +1 -1
  120. package/dist/adapter/webgl-device.js +205 -158
  121. package/dist/adapter/webgl-device.js.map +1 -1
  122. package/dist/classic/accessor.d.ts +3 -3
  123. package/dist/classic/accessor.d.ts.map +1 -1
  124. package/dist/classic/accessor.js +26 -52
  125. package/dist/classic/accessor.js.map +1 -1
  126. package/dist/classic/clear.d.ts +22 -0
  127. package/dist/classic/clear.d.ts.map +1 -0
  128. package/dist/classic/clear.js +88 -0
  129. package/dist/classic/clear.js.map +1 -0
  130. package/dist/classic/copy-and-blit.d.ts +62 -0
  131. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  132. package/dist/classic/copy-and-blit.js +192 -0
  133. package/dist/classic/copy-and-blit.js.map +1 -0
  134. package/dist/classic/format-utils.d.ts +3 -0
  135. package/dist/classic/format-utils.d.ts.map +1 -0
  136. package/dist/classic/format-utils.js +37 -0
  137. package/dist/classic/format-utils.js.map +1 -0
  138. package/dist/classic/typed-array-utils.d.ts +17 -17
  139. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  140. package/dist/classic/typed-array-utils.js +18 -39
  141. package/dist/classic/typed-array-utils.js.map +1 -1
  142. package/dist/context/context/create-browser-context.d.ts +17 -18
  143. package/dist/context/context/create-browser-context.d.ts.map +1 -1
  144. package/dist/context/context/create-browser-context.js +11 -19
  145. package/dist/context/context/create-browser-context.js.map +1 -1
  146. package/dist/context/context/create-headless-context.d.ts +1 -1
  147. package/dist/context/context/create-headless-context.d.ts.map +1 -1
  148. package/dist/context/context/create-headless-context.js +6 -7
  149. package/dist/context/context/create-headless-context.js.map +1 -1
  150. package/dist/context/context/webgl-checks.d.ts.map +1 -1
  151. package/dist/context/context/webgl-checks.js +1 -4
  152. package/dist/context/context/webgl-checks.js.map +1 -1
  153. package/dist/context/debug/spector.d.ts +1 -2
  154. package/dist/context/debug/spector.d.ts.map +1 -1
  155. package/dist/context/debug/spector.js +7 -19
  156. package/dist/context/debug/spector.js.map +1 -1
  157. package/dist/context/debug/webgl-developer-tools.d.ts +1 -1
  158. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  159. package/dist/context/debug/webgl-developer-tools.js +18 -41
  160. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  161. package/dist/context/parameters/unified-parameter-api.d.ts +5 -5
  162. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  163. package/dist/context/parameters/unified-parameter-api.js +9 -17
  164. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  165. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  166. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  167. package/dist/context/parameters/webgl-parameter-tables.js +267 -286
  168. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  169. package/dist/context/polyfill/context-data.d.ts +13 -0
  170. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  171. package/dist/context/polyfill/context-data.js +12 -0
  172. package/dist/context/polyfill/context-data.js.map +1 -0
  173. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  174. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  175. package/dist/context/polyfill/get-parameter-polyfill.js +37 -43
  176. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  177. package/dist/context/polyfill/polyfill-context.d.ts.map +1 -1
  178. package/dist/context/polyfill/polyfill-context.js +27 -31
  179. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  180. package/dist/context/polyfill/polyfill-table.d.ts +7 -7
  181. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  182. package/dist/context/polyfill/polyfill-table.js +17 -40
  183. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  184. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  185. package/dist/context/polyfill/polyfill-vertex-array-object.js +17 -87
  186. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  187. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  188. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  189. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  190. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  191. package/dist/context/state-tracker/track-context-state.js +25 -61
  192. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  193. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  194. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  195. package/dist/context/state-tracker/with-parameters.js +8 -10
  196. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  197. package/dist/dist.dev.js +9344 -0
  198. package/dist/index.cjs +6556 -0
  199. package/dist/index.d.ts +23 -24
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +27 -27
  202. package/dist/index.js.map +1 -1
  203. package/dist/types.d.ts +3 -1
  204. package/dist/types.d.ts.map +1 -1
  205. package/dist/types.js.map +1 -1
  206. package/dist.min.js +52 -0
  207. package/package.json +21 -9
  208. package/src/adapter/converters/device-parameters.ts +120 -43
  209. package/src/adapter/converters/sampler-parameters.ts +54 -126
  210. package/src/adapter/converters/shader-formats.ts +44 -0
  211. package/src/adapter/converters/texture-formats.ts +265 -192
  212. package/src/adapter/converters/vertex-formats.ts +71 -10
  213. package/src/adapter/device-helpers/device-features.ts +5 -2
  214. package/src/adapter/device-helpers/device-limits.ts +4 -2
  215. package/src/adapter/device-helpers/get-device-info.ts +72 -18
  216. package/src/adapter/device-helpers/is-old-ie.ts +3 -0
  217. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +31 -24
  218. package/src/adapter/helpers/get-shader-layout.ts +87 -131
  219. package/src/adapter/helpers/parse-shader-compiler-log.ts +24 -8
  220. package/src/adapter/helpers/set-uniform.ts +39 -35
  221. package/src/adapter/helpers/webgl-topology-utils.ts +103 -0
  222. package/src/adapter/objects/constants-to-keys.ts +6 -25
  223. package/src/adapter/objects/webgl-renderbuffer.ts +43 -37
  224. package/src/adapter/objects/webgl-resource.ts +16 -23
  225. package/src/adapter/resources/webgl-buffer.ts +101 -106
  226. package/src/adapter/resources/webgl-command-buffer.ts +327 -25
  227. package/src/adapter/resources/webgl-command-encoder.ts +20 -12
  228. package/src/adapter/resources/webgl-external-texture.ts +5 -2
  229. package/src/adapter/resources/webgl-framebuffer.ts +86 -133
  230. package/src/adapter/resources/webgl-render-pass.ts +165 -4
  231. package/src/adapter/resources/webgl-render-pipeline.ts +209 -205
  232. package/src/adapter/resources/webgl-sampler.ts +12 -8
  233. package/src/adapter/resources/webgl-shader.ts +32 -27
  234. package/src/adapter/resources/webgl-texture.ts +117 -91
  235. package/src/adapter/resources/webgl-transform-feedback.ts +202 -0
  236. package/src/adapter/resources/webgl-vertex-array.ts +283 -0
  237. package/src/adapter/webgl-canvas-context.ts +18 -13
  238. package/src/adapter/webgl-device.ts +327 -92
  239. package/src/classic/accessor.ts +8 -5
  240. package/src/classic/clear.ts +113 -0
  241. package/src/classic/copy-and-blit.ts +312 -0
  242. package/src/classic/format-utils.ts +46 -0
  243. package/src/classic/typed-array-utils.ts +19 -27
  244. package/src/context/context/create-browser-context.ts +53 -31
  245. package/src/context/context/create-headless-context.ts +5 -2
  246. package/src/context/context/webgl-checks.ts +3 -1
  247. package/src/context/debug/spector.ts +8 -5
  248. package/src/context/debug/webgl-developer-tools.ts +26 -17
  249. package/src/context/parameters/unified-parameter-api.ts +15 -9
  250. package/src/context/parameters/webgl-parameter-tables.ts +120 -98
  251. package/src/context/polyfill/context-data.ts +30 -0
  252. package/src/context/polyfill/get-parameter-polyfill.ts +11 -7
  253. package/src/context/polyfill/polyfill-context.ts +15 -8
  254. package/src/context/polyfill/polyfill-table.ts +20 -15
  255. package/src/context/polyfill/polyfill-vertex-array-object.ts +5 -0
  256. package/src/context/state-tracker/deep-array-equal.ts +2 -0
  257. package/src/context/state-tracker/track-context-state.ts +13 -10
  258. package/src/context/state-tracker/with-parameters.ts +13 -4
  259. package/src/index.ts +65 -39
  260. package/src/types.ts +5 -0
  261. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  262. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  263. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  264. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  265. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  266. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  267. package/dist/adapter/helpers/attribute-utils.js +0 -81
  268. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  269. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  270. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  271. package/dist/adapter/helpers/uniforms.js +0 -99
  272. package/dist/adapter/helpers/uniforms.js.map +0 -1
  273. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  274. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  275. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  276. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  277. package/dist/bundle.d.ts +0 -2
  278. package/dist/bundle.d.ts.map +0 -1
  279. package/dist/bundle.js +0 -5
  280. package/dist/bundle.js.map +0 -1
  281. package/dist/classic/buffer.d.ts +0 -95
  282. package/dist/classic/buffer.d.ts.map +0 -1
  283. package/dist/classic/buffer.js +0 -392
  284. package/dist/classic/buffer.js.map +0 -1
  285. package/dist/context/context/context-state.d.ts +0 -18
  286. package/dist/context/context/context-state.d.ts.map +0 -1
  287. package/dist/context/context/context-state.js +0 -26
  288. package/dist/context/context/context-state.js.map +0 -1
  289. package/dist/context/context/device-pixels.d.ts +0 -25
  290. package/dist/context/context/device-pixels.d.ts.map +0 -1
  291. package/dist/context/context/device-pixels.js +0 -103
  292. package/dist/context/context/device-pixels.js.map +0 -1
  293. package/dist/es5/adapter/converters/device-parameters.js +0 -185
  294. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  295. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  296. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  297. package/dist/es5/adapter/converters/sampler-parameters.js +0 -245
  298. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  299. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  300. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  301. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  302. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  303. package/dist/es5/adapter/device-helpers/device-features.js +0 -155
  304. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  305. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  306. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  307. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  308. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  309. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  310. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  311. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  312. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  313. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -391
  314. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  315. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  316. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  317. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  318. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  319. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  320. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  321. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  322. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  323. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  324. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  325. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  326. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  327. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  328. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  329. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  330. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  331. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  332. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  333. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  334. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  335. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  336. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  337. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -346
  338. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  339. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -62
  340. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  341. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -530
  342. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  343. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  344. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  345. package/dist/es5/adapter/resources/webgl-shader.js +0 -150
  346. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  347. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  348. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  349. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  350. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  351. package/dist/es5/adapter/webgl-device.js +0 -463
  352. package/dist/es5/adapter/webgl-device.js.map +0 -1
  353. package/dist/es5/bundle.js +0 -7
  354. package/dist/es5/bundle.js.map +0 -1
  355. package/dist/es5/classic/accessor.js +0 -181
  356. package/dist/es5/classic/accessor.js.map +0 -1
  357. package/dist/es5/classic/buffer.js +0 -478
  358. package/dist/es5/classic/buffer.js.map +0 -1
  359. package/dist/es5/classic/typed-array-utils.js +0 -126
  360. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  361. package/dist/es5/context/context/context-state.js +0 -31
  362. package/dist/es5/context/context/context-state.js.map +0 -1
  363. package/dist/es5/context/context/create-browser-context.js +0 -83
  364. package/dist/es5/context/context/create-browser-context.js.map +0 -1
  365. package/dist/es5/context/context/create-headless-context.js +0 -60
  366. package/dist/es5/context/context/create-headless-context.js.map +0 -1
  367. package/dist/es5/context/context/device-pixels.js +0 -121
  368. package/dist/es5/context/context/device-pixels.js.map +0 -1
  369. package/dist/es5/context/context/webgl-checks.js +0 -54
  370. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  371. package/dist/es5/context/debug/spector.js +0 -133
  372. package/dist/es5/context/debug/spector.js.map +0 -1
  373. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  374. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  375. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  376. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  377. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  378. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  379. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  380. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  381. package/dist/es5/context/polyfill/polyfill-context.js +0 -134
  382. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  383. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  384. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  385. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  386. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  387. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  388. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  389. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  390. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  391. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  392. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  393. package/dist/es5/index.js +0 -290
  394. package/dist/es5/index.js.map +0 -1
  395. package/dist/es5/init.js +0 -10
  396. package/dist/es5/init.js.map +0 -1
  397. package/dist/es5/types/webgl.js +0 -6
  398. package/dist/es5/types/webgl.js.map +0 -1
  399. package/dist/es5/types.js +0 -2
  400. package/dist/es5/types.js.map +0 -1
  401. package/dist/esm/adapter/converters/device-parameters.js +0 -168
  402. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  403. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  404. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  405. package/dist/esm/adapter/converters/sampler-parameters.js +0 -227
  406. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  407. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  408. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  409. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  410. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  411. package/dist/esm/adapter/device-helpers/device-features.js +0 -112
  412. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  413. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  414. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  415. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  416. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  417. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  418. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  419. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  420. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  421. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -330
  422. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  423. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  424. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  425. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  426. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  427. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  428. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  429. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  430. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  431. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  432. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  433. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  434. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  435. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  436. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  437. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  438. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  439. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  440. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  441. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  442. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  443. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  444. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  445. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -267
  446. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  447. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -21
  448. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  449. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -428
  450. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  451. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  452. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  453. package/dist/esm/adapter/resources/webgl-shader.js +0 -76
  454. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  455. package/dist/esm/adapter/resources/webgl-texture.js +0 -834
  456. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  457. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  458. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  459. package/dist/esm/adapter/webgl-device.js +0 -337
  460. package/dist/esm/adapter/webgl-device.js.map +0 -1
  461. package/dist/esm/bundle.js +0 -5
  462. package/dist/esm/bundle.js.map +0 -1
  463. package/dist/esm/classic/accessor.js +0 -144
  464. package/dist/esm/classic/accessor.js.map +0 -1
  465. package/dist/esm/classic/buffer.js +0 -392
  466. package/dist/esm/classic/buffer.js.map +0 -1
  467. package/dist/esm/classic/typed-array-utils.js +0 -112
  468. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  469. package/dist/esm/context/context/context-state.js +0 -26
  470. package/dist/esm/context/context/context-state.js.map +0 -1
  471. package/dist/esm/context/context/create-browser-context.js +0 -61
  472. package/dist/esm/context/context/create-browser-context.js.map +0 -1
  473. package/dist/esm/context/context/create-headless-context.js +0 -43
  474. package/dist/esm/context/context/create-headless-context.js.map +0 -1
  475. package/dist/esm/context/context/device-pixels.js +0 -103
  476. package/dist/esm/context/context/device-pixels.js.map +0 -1
  477. package/dist/esm/context/context/webgl-checks.js +0 -34
  478. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  479. package/dist/esm/context/debug/spector.js +0 -76
  480. package/dist/esm/context/debug/spector.js.map +0 -1
  481. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  482. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  483. package/dist/esm/context/parameters/unified-parameter-api.js +0 -63
  484. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  485. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  486. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  487. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  488. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  489. package/dist/esm/context/polyfill/polyfill-context.js +0 -91
  490. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  491. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  492. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  493. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  494. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  495. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  496. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  497. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  498. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  499. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  500. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  501. package/dist/esm/index.js +0 -28
  502. package/dist/esm/index.js.map +0 -1
  503. package/dist/esm/init.js +0 -4
  504. package/dist/esm/init.js.map +0 -1
  505. package/dist/esm/types/webgl.js +0 -2
  506. package/dist/esm/types/webgl.js.map +0 -1
  507. package/dist/esm/types.js +0 -2
  508. package/dist/esm/types.js.map +0 -1
  509. package/dist/init.d.ts +0 -2
  510. package/dist/init.d.ts.map +0 -1
  511. package/dist/init.js +0 -4
  512. package/dist/init.js.map +0 -1
  513. package/dist/types/webgl.d.ts +0 -145
  514. package/dist/types/webgl.d.ts.map +0 -1
  515. package/dist/types/webgl.js +0 -2
  516. package/dist/types/webgl.js.map +0 -1
  517. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  518. package/src/adapter/helpers/attribute-utils.ts +0 -61
  519. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  520. package/src/bundle.ts +0 -4
  521. package/src/classic/buffer.ts +0 -474
  522. package/src/context/context/context-state.ts +0 -41
  523. package/src/context/context/device-pixels.ts +0 -158
  524. package/src/init.ts +0 -4
  525. package/src/types/webgl.ts +0 -284
@@ -1,75 +1,79 @@
1
1
  // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
2
3
 
3
- import type {FramebufferProps, DepthStencilTextureFormat, ColorTextureFormat} from '@luma.gl/api';
4
- import {Framebuffer, Texture, log, assert} from '@luma.gl/api';
5
- import GL from '@luma.gl/constants';
6
- import WebGLDevice from '../webgl-device';
7
- import WebGLTexture from './webgl-texture';
8
- import Renderbuffer from '../objects/webgl-renderbuffer';
9
- import {getWebGLTextureFormat, getWebGLDepthStencilAttachment} from '../converters/texture-formats';
4
+ import type {FramebufferProps, TextureFormat} from '@luma.gl/core';
5
+ import {Framebuffer, Texture, assert} from '@luma.gl/core';
6
+ import {GL} from '@luma.gl/constants';
7
+ import {WebGLDevice} from '../webgl-device';
8
+ import {WEBGLTexture} from './webgl-texture';
9
+ import {WEBGLRenderbuffer} from '../objects/webgl-renderbuffer';
10
+ import {getDepthStencilAttachmentWebGL} from '../converters/texture-formats';
10
11
 
11
12
  export type TextureAttachment = [Texture, number?, number?];
12
- export type Attachment = WebGLTexture | Renderbuffer | TextureAttachment;
13
+ export type Attachment = WEBGLTexture | WEBGLRenderbuffer | TextureAttachment;
13
14
 
14
15
  /** luma.gl Framebuffer, WebGL implementation */
15
- export default class WEBGLFramebuffer extends Framebuffer {
16
+ export class WEBGLFramebuffer extends Framebuffer {
16
17
  device: WebGLDevice;
17
18
  gl: WebGLRenderingContext;
18
19
  handle: WebGLFramebuffer;
19
20
 
20
- get texture() { return this.colorAttachments[0]; }
21
- readonly colorAttachments: WebGLTexture[] = [];
22
- readonly depthStencilAttachment: WebGLTexture | null = null; d
23
- protected _ownResources: (WebGLTexture | Renderbuffer)[] = [];
21
+ get texture() {
22
+ return this.colorAttachments[0];
23
+ }
24
24
 
25
25
  constructor(device: WebGLDevice, props: FramebufferProps) {
26
26
  super(device, props);
27
- this.device = device;
28
- this.gl = device.gl;
29
- this.handle = this.props.handle !== undefined ? this.props.handle : this.gl.createFramebuffer();
30
-
31
- if (this.handle) { // default framebuffer is null...
32
- // @ts-expect-error Per SPECTOR docs
33
- this.handle.__SPECTOR_Metadata = {id: this.props.id, props: this.props};
34
- }
35
27
 
36
- this.colorAttachments = this._createColorAttachments();
37
- // @ts-expect-error
38
- this.depthStencilAttachment = this._createDepthStencilAttachment();
28
+ // WebGL default framebuffer handle is null
29
+ const isDefaultFramebuffer = props.handle === null;
39
30
 
40
- /** Attach from a map of attachments */
41
- const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
31
+ this.device = device;
32
+ this.gl = device.gl;
33
+ this.handle =
34
+ this.props.handle || isDefaultFramebuffer ? this.props.handle : this.gl.createFramebuffer();
35
+
36
+ if (!isDefaultFramebuffer) {
37
+ // default framebuffer handle is null, so we can't set spector metadata...
38
+ device.setSpectorMetadata(this.handle, {id: this.props.id, props: this.props});
39
+
40
+ // Auto create textures for attachments if needed
41
+ this.autoCreateAttachmentTextures();
42
+
43
+ /** Attach from a map of attachments */
44
+ this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
45
+
46
+ // Walk the attachments
47
+ for (let i = 0; i < this.colorAttachments.length; ++i) {
48
+ const attachment = this.colorAttachments[i];
49
+ const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;
50
+ if (attachment) {
51
+ this._attachOne(attachmentPoint, attachment as WEBGLTexture);
52
+ }
53
+ }
42
54
 
43
- // Walk the attachments
44
- for (let i = 0; i < this.colorAttachments.length; ++i) {
45
- const attachment = this.colorAttachments[i];
46
- const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;
47
- if (attachment) {
48
- this._attachOne(attachmentPoint, attachment);
55
+ if (this.depthStencilAttachment) {
56
+ this._attachOne(
57
+ getDepthStencilAttachmentWebGL(this.depthStencilAttachment.format),
58
+ this.depthStencilAttachment as WEBGLTexture
59
+ );
49
60
  }
50
- }
51
61
 
52
- if (this.props.depthStencilAttachment) {
53
- this._attachOne(getWebGLDepthStencilAttachment(this.depthStencilAttachment.format), this.depthStencilAttachment);
62
+ this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);
54
63
  }
55
64
 
56
- // @ts-expect-error
57
- this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
58
-
59
65
  // @ts-expect-error
60
66
  if (props.check !== false) {
61
67
  this._checkStatus();
62
68
  }
63
69
  }
64
70
 
65
- destroy() {
66
- if (this.handle !== null) {
67
- for (const resource of this._ownResources) {
68
- resource.destroy();
69
- }
71
+ /** destroys any auto created resources etc. */
72
+ override destroy(): void {
73
+ super.destroy(); // destroys owned resources etc.
74
+ if (!this.destroyed && this.handle !== null) {
70
75
  this.gl.deleteFramebuffer(this.handle);
71
76
  // this.handle = null;
72
- this.destroyed = true;
73
77
  }
74
78
  }
75
79
 
@@ -78,92 +82,31 @@ export default class WEBGLFramebuffer extends Framebuffer {
78
82
  /** Check the status */
79
83
  protected _checkStatus(): void {
80
84
  const {gl} = this;
81
- const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
85
+ // TODO - should we really rely on this trick?
86
+ const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle) as unknown as WebGLFramebuffer;
82
87
  const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);
83
- // @ts-expect-error
84
88
  gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
85
89
  if (status !== gl.FRAMEBUFFER_COMPLETE) {
86
90
  throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);
87
91
  }
88
92
  }
89
93
 
90
- _createColorAttachments(): WebGLTexture[] {
91
- return this.props.colorAttachments.map(colorAttachment => {
92
- if (!colorAttachment) {
93
- return undefined;
94
- }
95
- if (colorAttachment instanceof WebGLTexture) {
96
- return colorAttachment;
97
- }
98
- // if (typeof colorAttachment === 'default') {
99
- // return this._createColorAttachment('rgba8unorm', this.width, this.height);
100
- // }
101
- // @ts-expect-error
102
- return this._createColorAttachment(colorAttachment, this.width, this.height);
103
- });
104
- }
105
-
106
- /** Create a color attachment */
107
- protected _createColorAttachment(format: ColorTextureFormat, width: number, height: number): WebGLTexture {
108
- const texture = this.device._createTexture({
109
- id: `${this.id}-color`,
110
- data: null, // reserves texture memory, but texels are undefined
111
- format,
112
- // type: GL.UNSIGNED_BYTE,
113
- width,
114
- height,
115
- // Note: Mipmapping can be disabled by texture resource when we resize the texture
116
- // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant
117
- // behavior we always disable mipmaps.
118
- mipmaps: false,
119
- // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.
120
- // Use LINEAR so subpixel algos like fxaa work.
121
- // Set WRAP modes that support NPOT textures too.
122
- sampler: {
123
- minFilter: 'linear',
124
- magFilter: 'linear',
125
- addressModeU: 'clamp-to-edge',
126
- addressModeV: 'clamp-to-edge'
127
- },
128
- // parameters: {
129
- // [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,
130
- // [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,
131
- // [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,
132
- // [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE
133
- // }
134
- }) as WebGLTexture;
135
- this._ownResources.push(texture);
136
- return texture;
137
- }
138
-
139
- /** Create a depth stencil attachment GL.DEPTH24_STENCIL8 */
140
- protected _createDepthStencilAttachment(): Renderbuffer | WebGLTexture {
141
- if (!this.props.depthStencilAttachment) {
142
- return undefined;
143
- }
144
- if (this.props.depthStencilAttachment instanceof Renderbuffer) {
145
- return this.props.depthStencilAttachment;
146
- }
147
- if (this.props.depthStencilAttachment instanceof Texture) {
148
- return this.props.depthStencilAttachment as unknown as WebGLTexture;
149
- }
150
- const format = this.props.depthStencilAttachment;
151
- const webglFormat = getWebGLTextureFormat(this.gl, format);
152
-
153
- const texture = new Renderbuffer(this.device, {
94
+ /** In WebGL we must use renderbuffers for depth/stencil attachments (unless we have extensions) */
95
+ protected override createDepthStencilTexture(format: TextureFormat): Texture {
96
+ return new WEBGLRenderbuffer(this.device, {
154
97
  id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?
155
- format: webglFormat,
98
+ format,
156
99
  // dataFormat: GL.DEPTH_STENCIL,
157
100
  // type: GL.UNSIGNED_INT_24_8,
158
101
  width: this.width,
159
102
  height: this.height
160
- });
161
- this._ownResources.push(texture);
162
- return texture;
103
+ }) as unknown as WEBGLTexture;
163
104
  }
164
105
 
165
- /** Attachment resize is expected to be a noop if size is same */
166
- protected _resizeAttachments(width: number, height: number): this {
106
+ /**
107
+ * Attachment resize is expected to be a noop if size is same
108
+ */
109
+ protected override resizeAttachments(width: number, height: number): this {
167
110
  // for default framebuffer, just update the stored size
168
111
  if (this.handle === null) {
169
112
  // assert(width === undefined && height === undefined);
@@ -171,6 +114,7 @@ export default class WEBGLFramebuffer extends Framebuffer {
171
114
  this.height = this.gl.drawingBufferHeight;
172
115
  return this;
173
116
  }
117
+
174
118
  if (width === undefined) {
175
119
  width = this.gl.drawingBufferWidth;
176
120
  }
@@ -178,33 +122,37 @@ export default class WEBGLFramebuffer extends Framebuffer {
178
122
  height = this.gl.drawingBufferHeight;
179
123
  }
180
124
 
181
- if (width !== this.width && height !== this.height) {
182
- log.log(2, `Resizing framebuffer ${this.id} to ${width}x${height}`)();
183
- }
125
+ // TODO Not clear that this is better than default destroy/create implementation
184
126
 
185
127
  for (const colorAttachment of this.colorAttachments) {
186
- colorAttachment.resize({width, height});
128
+ (colorAttachment as WEBGLTexture).resize({width, height});
129
+ }
130
+ if (this.depthStencilAttachment) {
131
+ (this.depthStencilAttachment as WEBGLTexture).resize({width, height});
187
132
  }
188
- this.depthStencilAttachment?.resize({width, height});
189
133
  return this;
190
134
  }
191
135
 
192
136
  /** Attach one attachment */
193
- protected _attachOne(attachmentPoint: GL, attachment: Attachment): WebGLTexture | Renderbuffer {
194
- if (attachment instanceof Renderbuffer) {
195
- this._attachRenderbuffer(attachmentPoint, attachment);
137
+ protected _attachOne(
138
+ attachmentPoint: GL,
139
+ attachment: Attachment
140
+ ): WEBGLTexture | WEBGLRenderbuffer {
141
+ if (attachment instanceof WEBGLRenderbuffer) {
142
+ this._attachWEBGLRenderbuffer(attachmentPoint, attachment);
196
143
  return attachment;
197
144
  } else if (Array.isArray(attachment)) {
198
145
  const [texture, layer = 0, level = 0] = attachment;
199
- this._attachTexture(attachmentPoint, texture as unknown as WebGLTexture, layer, level);
200
- return texture as unknown as WebGLTexture;
201
- } else if (attachment instanceof WebGLTexture) {
146
+ this._attachTexture(attachmentPoint, texture as unknown as WEBGLTexture, layer, level);
147
+ return texture as unknown as WEBGLTexture;
148
+ } else if (attachment instanceof WEBGLTexture) {
202
149
  this._attachTexture(attachmentPoint, attachment, 0, 0);
203
150
  return attachment;
204
151
  }
152
+ throw new Error('attach');
205
153
  }
206
154
 
207
- protected _attachRenderbuffer(attachment: GL, renderbuffer: Renderbuffer): void {
155
+ protected _attachWEBGLRenderbuffer(attachment: GL, renderbuffer: WEBGLRenderbuffer): void {
208
156
  this.gl.framebufferRenderbuffer(
209
157
  GL.FRAMEBUFFER,
210
158
  attachment,
@@ -216,10 +164,15 @@ export default class WEBGLFramebuffer extends Framebuffer {
216
164
  /**
217
165
  * @param attachment
218
166
  * @param texture
219
- * @param layer = 0 - index into WebGLTextureArray and Texture3D or face for `TextureCubeMap`
167
+ * @param layer = 0 - index into WEBGLTextureArray and Texture3D or face for `TextureCubeMap`
220
168
  * @param level = 0 - mipmapLevel (must be 0 in WebGL1)
221
169
  */
222
- protected _attachTexture(attachment: GL, texture: WebGLTexture, layer: number, level: number): void {
170
+ protected _attachTexture(
171
+ attachment: GL,
172
+ texture: WEBGLTexture,
173
+ layer: number,
174
+ level: number
175
+ ): void {
223
176
  const {gl, gl2} = this.device;
224
177
  gl.bindTexture(texture.target, texture.handle);
225
178
 
@@ -251,15 +204,15 @@ export default class WEBGLFramebuffer extends Framebuffer {
251
204
  // Helper functions
252
205
 
253
206
  // Map an index to a cube map face constant
254
- function mapIndexToCubeMapFace(layer) {
207
+ function mapIndexToCubeMapFace(layer: number | GL): GL {
255
208
  // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)
256
209
  // if smaller assume layer is index, otherwise assume it is already a cube map face constant
257
- return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;
210
+ return layer < (GL.TEXTURE_CUBE_MAP_POSITIVE_X as number) ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;
258
211
  }
259
212
 
260
213
  // Helper METHODS
261
214
  // Get a string describing the framebuffer error if installed
262
- function _getFrameBufferStatus(status) {
215
+ function _getFrameBufferStatus(status: GL) {
263
216
  switch (status) {
264
217
  case GL.FRAMEBUFFER_COMPLETE:
265
218
  return 'success';
@@ -1,15 +1,45 @@
1
- import {RenderPass, RenderPassProps} from '@luma.gl/api';
2
- import WebGLDevice from '../webgl-device';
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
3
 
4
- export default class WEBGLRenderPass extends RenderPass {
4
+ import {RenderPass, RenderPassProps, NumberArray, RenderPassParameters} from '@luma.gl/core';
5
+ import {WebGLDevice} from '../webgl-device';
6
+ import {GL, GLParameters} from '@luma.gl/constants';
7
+ import {withGLParameters} from '../../context/state-tracker/with-parameters';
8
+ import {setGLParameters} from '../../context/parameters/unified-parameter-api';
9
+ import {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';
10
+
11
+ // Should collapse during minification
12
+ const GL_DEPTH_BUFFER_BIT = 0x00000100;
13
+ const GL_STENCIL_BUFFER_BIT = 0x00000400;
14
+ const GL_COLOR_BUFFER_BIT = 0x00004000;
15
+
16
+ const GL_COLOR = 0x1800;
17
+
18
+ export class WEBGLRenderPass extends RenderPass {
5
19
  readonly device: WebGLDevice;
6
20
 
21
+ /** Parameters that should be applied before each draw call */
22
+ glParameters: GLParameters;
23
+
7
24
  constructor(device: WebGLDevice, props: RenderPassProps) {
8
25
  super(device, props);
9
26
  this.device = device;
27
+
28
+ // TODO - do parameters (scissorRect) affect the clear operation?
29
+ pushContextState(this.device.gl);
30
+ this.setParameters(this.props.parameters);
31
+
32
+ // Hack - for now WebGL draws in "immediate mode" (instead of queueing the operations)...
33
+ this.clear();
10
34
  }
11
35
 
12
- endPass(): void {}
36
+ end(): void {
37
+ popContextState(this.device.gl);
38
+ if (this.props.framebuffer) {
39
+ setGLParameters(this.device, {framebuffer: null});
40
+ }
41
+ // should add commands to CommandEncoder.
42
+ }
13
43
 
14
44
  pushDebugGroup(groupLabel: string): void {}
15
45
  popDebugGroup(): void {}
@@ -21,4 +51,135 @@ export default class WEBGLRenderPass extends RenderPass {
21
51
  // endOcclusionQuery(): void;
22
52
 
23
53
  // executeBundles(bundles: Iterable<GPURenderBundle>): void;
54
+
55
+ /**
56
+ * Maps RenderPass parameters to GL parameters
57
+ */
58
+ setParameters(parameters: RenderPassParameters = {}): void {
59
+ const glParameters: GLParameters = {};
60
+
61
+ // Framebuffers are specified using parameters in WebGL
62
+ if (this.props.framebuffer) {
63
+ glParameters.framebuffer = this.props.framebuffer;
64
+ }
65
+
66
+ if (this.props.depthReadOnly) {
67
+ glParameters.depthMask = !this.props.depthReadOnly;
68
+ }
69
+
70
+ glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;
71
+
72
+ glParameters[GL.RASTERIZER_DISCARD] = this.props.discard;
73
+
74
+ // Map the four renderpass parameters to WebGL parameters
75
+ if (parameters.viewport) {
76
+ // WebGPU viewports are 6 coordinates (X, Y, Z)
77
+ if (parameters.viewport.length >= 6) {
78
+ glParameters.viewport = parameters.viewport.slice(0, 4);
79
+ glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];
80
+ } else {
81
+ // WebGL viewports are 4 coordinates (X, Y)
82
+ glParameters.viewport = parameters.viewport;
83
+ }
84
+ }
85
+ glParameters.scissorTest = Boolean(parameters.scissorRect);
86
+ if (parameters.scissorRect) {
87
+ glParameters.scissor = parameters.scissorRect;
88
+ }
89
+ if (parameters.blendConstant) {
90
+ glParameters.blendColor = parameters.blendConstant;
91
+ }
92
+ if (parameters.stencilReference) {
93
+ // eslint-disable-next-line no-console
94
+ console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');
95
+ // parameters.stencilFunc = [func, ref, mask];
96
+ // Does this work?
97
+ parameters[GL.STENCIL_REF] = parameters.stencilReference;
98
+ }
99
+
100
+ this.glParameters = glParameters;
101
+
102
+ setGLParameters(this.device, glParameters);
103
+ }
104
+
105
+ // Internal
106
+
107
+ /**
108
+ * Optionally clears depth, color and stencil buffers based on parameters
109
+ */
110
+ protected clear(): void {
111
+ const glParameters: GLParameters = {...this.glParameters};
112
+
113
+ let clearMask = 0;
114
+
115
+ if (this.props.clearColor !== false) {
116
+ clearMask |= GL_COLOR_BUFFER_BIT;
117
+ glParameters.clearColor = this.props.clearColor;
118
+ }
119
+ if (this.props.clearDepth !== false) {
120
+ clearMask |= GL_DEPTH_BUFFER_BIT;
121
+ glParameters.clearDepth = this.props.clearDepth;
122
+ }
123
+ if (this.props.clearStencil !== false) {
124
+ clearMask |= GL_STENCIL_BUFFER_BIT;
125
+ glParameters.clearStencil = this.props.clearStencil;
126
+ }
127
+
128
+ if (clearMask !== 0) {
129
+ // Temporarily set any clear "colors" and call clear
130
+ withGLParameters(this.device, glParameters, () => {
131
+ this.device.gl.clear(clearMask);
132
+ });
133
+
134
+ // TODO - clear multiple color attachments
135
+ // for (attachment of this.framebuffer.colorAttachments) {
136
+ // this.clearColorBuffer
137
+ // }
138
+ }
139
+ }
140
+
141
+ /**
142
+ * WebGL2 - clear a specific color buffer
143
+ */
144
+ protected clearColorBuffer(drawBuffer: number = 0, value: NumberArray = [0, 0, 0, 0]) {
145
+ withGLParameters(this.device.gl2, {framebuffer: this.props.framebuffer}, () => {
146
+ // Method selection per OpenGL ES 3 docs
147
+ switch (value.constructor) {
148
+ case Int32Array:
149
+ this.device.gl2.clearBufferiv(GL_COLOR, drawBuffer, value);
150
+ break;
151
+ case Uint32Array:
152
+ this.device.gl2.clearBufferuiv(GL_COLOR, drawBuffer, value);
153
+ break;
154
+ case Float32Array:
155
+ default:
156
+ this.device.gl2.clearBufferfv(GL_COLOR, drawBuffer, value);
157
+ break;
158
+ }
159
+ });
160
+ }
161
+
162
+ // clearDepthStencil() {
163
+ // const GL_DEPTH = 0x1801;
164
+ // const GL_STENCIL = 0x1802;
165
+ // const GL_DEPTH_STENCIL = 0x84f9;
166
+
167
+ // case GL_DEPTH:
168
+ // this.device.gl2.clearBufferfv(GL_DEPTH, 0, [value]);
169
+ // break;
170
+
171
+ // case GL_STENCIL:
172
+ // this.device.gl2.clearBufferiv(GL_STENCIL, 0, [value]);
173
+ // break;
174
+
175
+ // case GL_DEPTH_STENCIL:
176
+ // const [depth, stencil] = value;
177
+ // this.device.gl2.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);
178
+ // break;
179
+
180
+ // default:
181
+ // assert(false, ERR_ARGUMENTS);
182
+ // }
183
+ // });
24
184
  }
185
+