@luma.gl/webgl 9.0.0-alpha.4 → 9.0.0-alpha.41

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 +23 -4
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +42 -47
  5. package/dist/adapter/converters/device-parameters.js.map +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts +5 -5
  7. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js +20 -56
  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 +53 -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 +165 -201
  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 +51 -19
  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 +14 -21
  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 +2 -5
  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 +9 -11
  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/{uniforms.js → decode-webgl-types.js} +20 -29
  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 +60 -115
  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 +0 -7
  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 +27 -57
  56. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  57. package/dist/adapter/helpers/webgl-topology-utils.d.ts +11 -0
  58. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  59. package/dist/adapter/helpers/{attribute-utils.js → webgl-topology-utils.js} +2 -19
  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 +34 -41
  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 +18 -10
  74. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  75. package/dist/adapter/resources/webgl-buffer.js +49 -78
  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 +169 -43
  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 +46 -155
  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 +91 -11
  93. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  94. package/dist/adapter/resources/webgl-render-pipeline.d.ts +53 -19
  95. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  96. package/dist/adapter/resources/webgl-render-pipeline.js +108 -230
  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 +10 -19
  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 +19 -31
  105. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  106. package/dist/adapter/resources/webgl-texture.d.ts +64 -44
  107. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  108. package/dist/adapter/resources/webgl-texture.js +119 -235
  109. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  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 +166 -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 +10 -23
  117. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  118. package/dist/adapter/webgl-device.d.ts +74 -41
  119. package/dist/adapter/webgl-device.d.ts.map +1 -1
  120. package/dist/adapter/webgl-device.js +214 -128
  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 +23 -48
  125. package/dist/classic/accessor.js.map +1 -1
  126. package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -29
  127. package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
  128. package/dist/classic/{buffer.js → buffer-with-accessor.js} +55 -125
  129. package/dist/classic/buffer-with-accessor.js.map +1 -0
  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 +200 -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 +38 -0
  141. package/dist/classic/format-utils.js.map +1 -0
  142. package/dist/classic/typed-array-utils.d.ts +15 -17
  143. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  144. package/dist/classic/typed-array-utils.js +1 -21
  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 +16 -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 +18 -36
  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 +4 -9
  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 +10 -32
  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 +0 -70
  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 +10391 -0
  202. package/dist/index.cjs +6625 -0
  203. package/dist/index.d.ts +27 -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 +37 -0
  211. package/package.json +21 -9
  212. package/src/adapter/converters/device-parameters.ts +124 -36
  213. package/src/adapter/converters/sampler-parameters.ts +22 -9
  214. package/src/adapter/converters/shader-formats.ts +44 -0
  215. package/src/adapter/converters/texture-formats.ts +267 -194
  216. package/src/adapter/converters/vertex-formats.ts +71 -10
  217. package/src/adapter/device-helpers/device-features.ts +13 -3
  218. package/src/adapter/device-helpers/device-limits.ts +5 -3
  219. package/src/adapter/device-helpers/get-device-info.ts +17 -10
  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 +4 -2
  225. package/src/adapter/helpers/set-uniform.ts +39 -35
  226. package/src/adapter/helpers/{attribute-utils.ts → webgl-topology-utils.ts} +7 -5
  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 +59 -58
  231. package/src/adapter/resources/webgl-command-buffer.ts +333 -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 +89 -133
  235. package/src/adapter/resources/webgl-render-pass.ts +160 -4
  236. package/src/adapter/resources/webgl-render-pipeline.ts +265 -170
  237. package/src/adapter/resources/webgl-sampler.ts +15 -9
  238. package/src/adapter/resources/webgl-shader.ts +14 -11
  239. package/src/adapter/resources/webgl-texture.ts +120 -90
  240. package/src/adapter/resources/webgl-vertex-array.ts +279 -0
  241. package/src/adapter/webgl-canvas-context.ts +16 -14
  242. package/src/adapter/webgl-device.ts +321 -78
  243. package/src/classic/accessor.ts +7 -17
  244. package/src/classic/{buffer.ts → buffer-with-accessor.ts} +68 -76
  245. package/src/classic/clear.ts +113 -0
  246. package/src/classic/copy-and-blit.ts +314 -0
  247. package/src/classic/format-utils.ts +46 -0
  248. package/src/classic/typed-array-utils.ts +19 -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 +20 -16
  263. package/src/context/state-tracker/with-parameters.ts +13 -4
  264. package/src/index.ts +69 -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.map +0 -1
  273. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  274. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  275. package/dist/adapter/helpers/uniforms.js.map +0 -1
  276. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  277. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  278. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  279. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  280. package/dist/bundle.d.ts +0 -2
  281. package/dist/bundle.d.ts.map +0 -1
  282. package/dist/bundle.js +0 -5
  283. package/dist/bundle.js.map +0 -1
  284. package/dist/classic/buffer.d.ts.map +0 -1
  285. package/dist/classic/buffer.js.map +0 -1
  286. package/dist/context/context/context-state.d.ts +0 -18
  287. package/dist/context/context/context-state.d.ts.map +0 -1
  288. package/dist/context/context/context-state.js +0 -26
  289. package/dist/context/context/context-state.js.map +0 -1
  290. package/dist/context/context/create-context.d.ts +0 -41
  291. package/dist/context/context/create-context.d.ts.map +0 -1
  292. package/dist/context/context/create-context.js +0 -49
  293. package/dist/context/context/create-context.js.map +0 -1
  294. package/dist/context/context/device-pixels.d.ts +0 -25
  295. package/dist/context/context/device-pixels.d.ts.map +0 -1
  296. package/dist/context/context/device-pixels.js +0 -98
  297. package/dist/context/context/device-pixels.js.map +0 -1
  298. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  299. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  300. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  301. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  302. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  303. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  304. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  305. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  306. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  307. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  308. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  309. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  310. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  311. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  312. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  313. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  314. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  315. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  316. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  317. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  318. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  319. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  320. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  321. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  322. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  323. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  324. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  325. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  326. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  327. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  328. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  329. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  330. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  331. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  332. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  333. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  334. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  335. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  336. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  337. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  338. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  339. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  340. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  341. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  342. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  343. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  344. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  345. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  346. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  347. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  348. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  349. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  350. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  351. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  352. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  353. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  354. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  355. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  356. package/dist/es5/adapter/webgl-device.js +0 -399
  357. package/dist/es5/adapter/webgl-device.js.map +0 -1
  358. package/dist/es5/bundle.js +0 -7
  359. package/dist/es5/bundle.js.map +0 -1
  360. package/dist/es5/classic/accessor.js +0 -181
  361. package/dist/es5/classic/accessor.js.map +0 -1
  362. package/dist/es5/classic/buffer.js +0 -470
  363. package/dist/es5/classic/buffer.js.map +0 -1
  364. package/dist/es5/classic/typed-array-utils.js +0 -126
  365. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  366. package/dist/es5/context/context/context-state.js +0 -31
  367. package/dist/es5/context/context/context-state.js.map +0 -1
  368. package/dist/es5/context/context/create-context.js +0 -69
  369. package/dist/es5/context/context/create-context.js.map +0 -1
  370. package/dist/es5/context/context/device-pixels.js +0 -115
  371. package/dist/es5/context/context/device-pixels.js.map +0 -1
  372. package/dist/es5/context/context/webgl-checks.js +0 -54
  373. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  374. package/dist/es5/context/debug/spector.js +0 -133
  375. package/dist/es5/context/debug/spector.js.map +0 -1
  376. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  377. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  378. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  379. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  380. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  381. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  382. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  383. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  384. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  385. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  386. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  387. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  388. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  389. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  390. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  391. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  392. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  393. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  394. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  395. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  396. package/dist/es5/index.js +0 -276
  397. package/dist/es5/index.js.map +0 -1
  398. package/dist/es5/init.js +0 -10
  399. package/dist/es5/init.js.map +0 -1
  400. package/dist/es5/types/webgl.js +0 -6
  401. package/dist/es5/types/webgl.js.map +0 -1
  402. package/dist/es5/types.js +0 -2
  403. package/dist/es5/types.js.map +0 -1
  404. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  405. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  406. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  407. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  408. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  409. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  410. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  411. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  412. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  413. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  414. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  415. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  416. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  417. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  418. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  419. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  420. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  421. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  422. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  423. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  424. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  425. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  426. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  427. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  428. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  429. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  430. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  431. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  432. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  433. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  434. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  435. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  436. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  437. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  438. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  439. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  440. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  441. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  442. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  443. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  444. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  445. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  446. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  447. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  448. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  449. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  450. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  451. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  452. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  453. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  454. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  455. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  456. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  457. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  458. package/dist/esm/adapter/resources/webgl-texture.js +0 -831
  459. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  460. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  461. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  462. package/dist/esm/adapter/webgl-device.js +0 -280
  463. package/dist/esm/adapter/webgl-device.js.map +0 -1
  464. package/dist/esm/bundle.js +0 -5
  465. package/dist/esm/bundle.js.map +0 -1
  466. package/dist/esm/classic/accessor.js +0 -144
  467. package/dist/esm/classic/accessor.js.map +0 -1
  468. package/dist/esm/classic/buffer.js +0 -384
  469. package/dist/esm/classic/buffer.js.map +0 -1
  470. package/dist/esm/classic/typed-array-utils.js +0 -112
  471. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  472. package/dist/esm/context/context/context-state.js +0 -26
  473. package/dist/esm/context/context/context-state.js.map +0 -1
  474. package/dist/esm/context/context/create-context.js +0 -49
  475. package/dist/esm/context/context/create-context.js.map +0 -1
  476. package/dist/esm/context/context/device-pixels.js +0 -98
  477. package/dist/esm/context/context/device-pixels.js.map +0 -1
  478. package/dist/esm/context/context/webgl-checks.js +0 -34
  479. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  480. package/dist/esm/context/debug/spector.js +0 -76
  481. package/dist/esm/context/debug/spector.js.map +0 -1
  482. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  483. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  484. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  485. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  486. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  487. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  488. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  489. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  490. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  491. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  492. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  493. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  494. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  495. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  496. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  497. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  498. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  499. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  500. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  501. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  502. package/dist/esm/index.js +0 -27
  503. package/dist/esm/index.js.map +0 -1
  504. package/dist/esm/init.js +0 -4
  505. package/dist/esm/init.js.map +0 -1
  506. package/dist/esm/types/webgl.js +0 -2
  507. package/dist/esm/types/webgl.js.map +0 -1
  508. package/dist/esm/types.js +0 -2
  509. package/dist/esm/types.js.map +0 -1
  510. package/dist/init.d.ts +0 -2
  511. package/dist/init.d.ts.map +0 -1
  512. package/dist/init.js +0 -4
  513. package/dist/init.js.map +0 -1
  514. package/dist/types/webgl.d.ts +0 -144
  515. package/dist/types/webgl.d.ts.map +0 -1
  516. package/dist/types/webgl.js +0 -2
  517. package/dist/types/webgl.js.map +0 -1
  518. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  519. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  520. package/src/bundle.ts +0 -4
  521. package/src/context/context/context-state.ts +0 -41
  522. package/src/context/context/create-context.ts +0 -110
  523. package/src/context/context/device-pixels.ts +0 -152
  524. package/src/init.ts +0 -4
  525. package/src/types/webgl.ts +0 -283
@@ -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,7 +204,7 @@ 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
210
  return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;
@@ -256,7 +212,7 @@ function mapIndexToCubeMapFace(layer) {
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,39 @@
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
+
10
+ // Should collapse during minification
11
+ const GL_DEPTH_BUFFER_BIT = 0x00000100;
12
+ const GL_STENCIL_BUFFER_BIT = 0x00000400;
13
+ const GL_COLOR_BUFFER_BIT = 0x00004000;
14
+
15
+ const GL_COLOR = 0x1800;
16
+
17
+ export class WEBGLRenderPass extends RenderPass {
5
18
  readonly device: WebGLDevice;
6
19
 
20
+ /** Parameters that should be applied before each draw call */
21
+ glParameters: GLParameters;
22
+
7
23
  constructor(device: WebGLDevice, props: RenderPassProps) {
8
24
  super(device, props);
25
+ this.device = device;
26
+
27
+ // TODO - do parameters (scissorRect) affect the clear operation?
28
+ this.setParameters(this.props.parameters);
29
+
30
+ // Hack - for now WebGL draws in "immediate mode" (instead of queueing the operations)...
31
+ this.clear();
9
32
  }
10
33
 
11
- endPass(): void {}
34
+ end(): void {
35
+ // should add commands to CommandEncoder.
36
+ }
12
37
 
13
38
  pushDebugGroup(groupLabel: string): void {}
14
39
  popDebugGroup(): void {}
@@ -20,4 +45,135 @@ export default class WEBGLRenderPass extends RenderPass {
20
45
  // endOcclusionQuery(): void;
21
46
 
22
47
  // executeBundles(bundles: Iterable<GPURenderBundle>): void;
48
+
49
+ /**
50
+ * Maps RenderPass parameters to GL parameters
51
+ */
52
+ setParameters(parameters: RenderPassParameters = {}): void {
53
+ const glParameters: GLParameters = {};
54
+
55
+ // Framebuffers are specified using parameters in WebGL
56
+ if (this.props.framebuffer) {
57
+ glParameters.framebuffer = this.props.framebuffer;
58
+ }
59
+
60
+ if (this.props.depthReadOnly) {
61
+ glParameters.depthMask = !this.props.depthReadOnly;
62
+ }
63
+
64
+ glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;
65
+
66
+ glParameters[GL.RASTERIZER_DISCARD] = this.props.discard;
67
+
68
+ // Map the four renderpass parameters to WebGL parameters
69
+ if (parameters.viewport) {
70
+ // WebGPU viewports are 6 coordinates (X, Y, Z)
71
+ if (parameters.viewport.length >= 6) {
72
+ glParameters.viewport = parameters.viewport.slice(0, 4);
73
+ glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];
74
+ } else {
75
+ // WebGL viewports are 4 coordinates (X, Y)
76
+ glParameters.viewport = parameters.viewport;
77
+ }
78
+ }
79
+ glParameters.scissorTest = Boolean(parameters.scissorRect);
80
+ if (parameters.scissorRect) {
81
+ glParameters.scissor = parameters.scissorRect;
82
+ }
83
+ if (parameters.blendConstant) {
84
+ glParameters.blendColor = parameters.blendConstant;
85
+ }
86
+ if (parameters.stencilReference) {
87
+ // eslint-disable-next-line no-console
88
+ console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');
89
+ // parameters.stencilFunc = [func, ref, mask];
90
+ // Does this work?
91
+ parameters[GL.STENCIL_REF] = parameters.stencilReference;
92
+ }
93
+
94
+ this.glParameters = glParameters;
95
+
96
+ setGLParameters(this.device, glParameters);
97
+ }
98
+
99
+ // Internal
100
+
101
+ /**
102
+ * Optionally clears depth, color and stencil buffers based on parameters
103
+ */
104
+ protected clear(): void {
105
+ const glParameters: GLParameters = {...this.glParameters};
106
+
107
+ let clearMask = 0;
108
+
109
+ if (this.props.clearColor !== false) {
110
+ clearMask |= GL_COLOR_BUFFER_BIT;
111
+ glParameters.clearColor = this.props.clearColor;
112
+ }
113
+ if (this.props.clearDepth !== false) {
114
+ clearMask |= GL_DEPTH_BUFFER_BIT;
115
+ glParameters.clearDepth = this.props.clearDepth;
116
+ }
117
+ if (this.props.clearStencil !== false) {
118
+ clearMask |= GL_STENCIL_BUFFER_BIT;
119
+ glParameters.clearStencil = this.props.clearStencil;
120
+ }
121
+
122
+ if (clearMask !== 0) {
123
+ // Temporarily set any clear "colors" and call clear
124
+ withGLParameters(this.device, glParameters, () => {
125
+ this.device.gl.clear(clearMask);
126
+ });
127
+
128
+ // TODO - clear multiple color attachments
129
+ // for (attachment of this.framebuffer.colorAttachments) {
130
+ // this.clearColorBuffer
131
+ // }
132
+ }
133
+ }
134
+
135
+ /**
136
+ * WebGL2 - clear a specific color buffer
137
+ */
138
+ protected clearColorBuffer(drawBuffer: number = 0, value: NumberArray = [0, 0, 0, 0]) {
139
+ withGLParameters(this.device.gl2, {framebuffer: this.props.framebuffer}, () => {
140
+ // Method selection per OpenGL ES 3 docs
141
+ switch (value.constructor) {
142
+ case Int32Array:
143
+ this.device.gl2.clearBufferiv(GL_COLOR, drawBuffer, value);
144
+ break;
145
+ case Uint32Array:
146
+ this.device.gl2.clearBufferuiv(GL_COLOR, drawBuffer, value);
147
+ break;
148
+ case Float32Array:
149
+ default:
150
+ this.device.gl2.clearBufferfv(GL_COLOR, drawBuffer, value);
151
+ break;
152
+ }
153
+ });
154
+ }
155
+
156
+ // clearDepthStencil() {
157
+ // const GL_DEPTH = 0x1801;
158
+ // const GL_STENCIL = 0x1802;
159
+ // const GL_DEPTH_STENCIL = 0x84f9;
160
+
161
+ // case GL_DEPTH:
162
+ // this.device.gl2.clearBufferfv(GL_DEPTH, 0, [value]);
163
+ // break;
164
+
165
+ // case GL_STENCIL:
166
+ // this.device.gl2.clearBufferiv(GL_STENCIL, 0, [value]);
167
+ // break;
168
+
169
+ // case GL_DEPTH_STENCIL:
170
+ // const [depth, stencil] = value;
171
+ // this.device.gl2.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);
172
+ // break;
173
+
174
+ // default:
175
+ // assert(false, ERR_ARGUMENTS);
176
+ // }
177
+ // });
23
178
  }
179
+