@luma.gl/webgl 9.0.0-alpha.5 → 9.0.0-alpha.50

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