@luma.gl/webgl 9.0.0-alpha.3 → 9.0.0-alpha.30

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