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

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 (512) 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/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 +48 -16
  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 +13 -20
  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.js +2 -1
  35. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  36. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  37. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  38. package/dist/adapter/helpers/{uniforms.js → decode-webgl-types.js} +20 -29
  39. package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
  40. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  41. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  42. package/dist/adapter/helpers/get-shader-info.js +25 -0
  43. package/dist/adapter/helpers/get-shader-info.js.map +1 -0
  44. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -48
  45. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  46. package/dist/adapter/helpers/get-shader-layout.js +58 -113
  47. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  48. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  49. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  50. package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
  51. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  52. package/dist/adapter/helpers/set-uniform.d.ts +2 -2
  53. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  54. package/dist/adapter/helpers/set-uniform.js +3 -33
  55. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  56. package/dist/adapter/helpers/webgl-topology-utils.d.ts +11 -0
  57. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  58. package/dist/adapter/helpers/{attribute-utils.js → webgl-topology-utils.js} +2 -19
  59. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
  60. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  61. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  62. package/dist/adapter/objects/constants-to-keys.js +1 -28
  63. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  64. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  65. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  66. package/dist/adapter/objects/webgl-renderbuffer.js +35 -41
  67. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  68. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  69. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  70. package/dist/adapter/objects/webgl-resource.js +19 -75
  71. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  72. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +39 -11
  73. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  74. package/dist/adapter/objects/webgl-vertex-array-object.js +122 -32
  75. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  76. package/dist/adapter/resources/webgl-buffer.d.ts +18 -10
  77. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  78. package/dist/adapter/resources/webgl-buffer.js +43 -71
  79. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  80. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  81. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  82. package/dist/adapter/resources/webgl-command-buffer.js +169 -41
  83. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  84. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  85. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  86. package/dist/adapter/resources/webgl-command-encoder.js +9 -18
  87. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  88. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  89. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -24
  90. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  91. package/dist/adapter/resources/webgl-framebuffer.js +41 -149
  92. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  93. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  94. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  95. package/dist/adapter/resources/webgl-render-pass.js +88 -9
  96. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  97. package/dist/adapter/resources/webgl-render-pipeline.d.ts +52 -14
  98. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  99. package/dist/adapter/resources/webgl-render-pipeline.js +119 -182
  100. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  101. package/dist/adapter/resources/webgl-sampler.d.ts +6 -5
  102. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  103. package/dist/adapter/resources/webgl-sampler.js +7 -15
  104. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  105. package/dist/adapter/resources/webgl-shader.d.ts +3 -4
  106. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  107. package/dist/adapter/resources/webgl-shader.js +9 -22
  108. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  109. package/dist/adapter/resources/webgl-texture.d.ts +64 -44
  110. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  111. package/dist/adapter/resources/webgl-texture.js +98 -213
  112. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  113. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  114. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  115. package/dist/adapter/webgl-canvas-context.js +8 -20
  116. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  117. package/dist/adapter/webgl-device.d.ts +64 -41
  118. package/dist/adapter/webgl-device.d.ts.map +1 -1
  119. package/dist/adapter/webgl-device.js +133 -113
  120. package/dist/adapter/webgl-device.js.map +1 -1
  121. package/dist/classic/accessor.d.ts +3 -3
  122. package/dist/classic/accessor.d.ts.map +1 -1
  123. package/dist/classic/accessor.js +14 -38
  124. package/dist/classic/accessor.js.map +1 -1
  125. package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -28
  126. package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
  127. package/dist/classic/{buffer.js → buffer-with-accessor.js} +54 -122
  128. package/dist/classic/buffer-with-accessor.js.map +1 -0
  129. package/dist/classic/clear.d.ts +22 -0
  130. package/dist/classic/clear.d.ts.map +1 -0
  131. package/dist/classic/clear.js +88 -0
  132. package/dist/classic/clear.js.map +1 -0
  133. package/dist/classic/copy-and-blit.d.ts +62 -0
  134. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  135. package/dist/classic/copy-and-blit.js +202 -0
  136. package/dist/classic/copy-and-blit.js.map +1 -0
  137. package/dist/classic/format-utils.d.ts +3 -0
  138. package/dist/classic/format-utils.d.ts.map +1 -0
  139. package/dist/classic/format-utils.js +38 -0
  140. package/dist/classic/format-utils.js.map +1 -0
  141. package/dist/classic/typed-array-utils.d.ts +15 -17
  142. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  143. package/dist/classic/typed-array-utils.js +1 -21
  144. package/dist/classic/typed-array-utils.js.map +1 -1
  145. package/dist/context/context/create-browser-context.d.ts +40 -0
  146. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  147. package/dist/{esm/context/context/create-context.js → context/context/create-browser-context.js} +23 -19
  148. package/dist/context/context/create-browser-context.js.map +1 -0
  149. package/dist/context/context/create-headless-context.d.ts +9 -0
  150. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  151. package/dist/context/context/create-headless-context.js +42 -0
  152. package/dist/context/context/create-headless-context.js.map +1 -0
  153. package/dist/context/context/webgl-checks.js +1 -4
  154. package/dist/context/context/webgl-checks.js.map +1 -1
  155. package/dist/context/debug/spector.d.ts +1 -2
  156. package/dist/context/debug/spector.d.ts.map +1 -1
  157. package/dist/context/debug/spector.js +8 -20
  158. package/dist/context/debug/spector.js.map +1 -1
  159. package/dist/context/debug/webgl-developer-tools.d.ts +2 -2
  160. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  161. package/dist/context/debug/webgl-developer-tools.js +11 -34
  162. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  163. package/dist/context/parameters/unified-parameter-api.d.ts +8 -7
  164. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  165. package/dist/context/parameters/unified-parameter-api.js +8 -18
  166. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  167. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  168. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  169. package/dist/context/parameters/webgl-parameter-tables.js +18 -36
  170. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  171. package/dist/context/polyfill/context-data.d.ts +13 -0
  172. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  173. package/dist/context/polyfill/context-data.js +12 -0
  174. package/dist/context/polyfill/context-data.js.map +1 -0
  175. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  176. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  177. package/dist/context/polyfill/get-parameter-polyfill.js +4 -9
  178. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  179. package/dist/context/polyfill/polyfill-context.js +21 -29
  180. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  181. package/dist/context/polyfill/polyfill-table.d.ts +8 -8
  182. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  183. package/dist/context/polyfill/polyfill-table.js +10 -32
  184. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  185. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  186. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
  187. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  188. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  189. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  190. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  191. package/dist/context/state-tracker/track-context-state.js +16 -51
  192. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  193. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  194. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  195. package/dist/context/state-tracker/with-parameters.js +7 -9
  196. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  197. package/dist/dist.dev.js +10245 -0
  198. package/dist/index.cjs +6550 -0
  199. package/dist/index.d.ts +25 -22
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +27 -26
  202. package/dist/index.js.map +1 -1
  203. package/dist/types.d.ts +3 -1
  204. package/dist/types.d.ts.map +1 -1
  205. package/dist/types.js.map +1 -1
  206. package/dist.min.js +37 -0
  207. package/package.json +21 -9
  208. package/src/adapter/converters/device-parameters.ts +88 -35
  209. package/src/adapter/converters/sampler-parameters.ts +19 -9
  210. package/src/adapter/converters/shader-formats.ts +41 -0
  211. package/src/adapter/converters/texture-formats.ts +264 -194
  212. package/src/adapter/converters/vertex-formats.ts +68 -10
  213. package/src/adapter/device-helpers/device-features.ts +10 -3
  214. package/src/adapter/device-helpers/device-limits.ts +3 -3
  215. package/src/adapter/device-helpers/get-device-info.ts +14 -10
  216. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +36 -21
  217. package/src/adapter/helpers/get-shader-info.ts +40 -0
  218. package/src/adapter/helpers/get-shader-layout.ts +120 -146
  219. package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
  220. package/src/adapter/helpers/set-uniform.ts +7 -6
  221. package/src/adapter/helpers/{attribute-utils.ts → webgl-topology-utils.ts} +4 -5
  222. package/src/adapter/objects/constants-to-keys.ts +3 -25
  223. package/src/adapter/objects/webgl-renderbuffer.ts +40 -37
  224. package/src/adapter/objects/webgl-resource.ts +14 -23
  225. package/src/adapter/objects/webgl-vertex-array-object.ts +202 -37
  226. package/src/adapter/resources/webgl-buffer.ts +56 -58
  227. package/src/adapter/resources/webgl-command-buffer.ts +332 -25
  228. package/src/adapter/resources/webgl-command-encoder.ts +17 -12
  229. package/src/adapter/resources/webgl-external-texture.ts +2 -2
  230. package/src/adapter/resources/webgl-framebuffer.ts +88 -133
  231. package/src/adapter/resources/webgl-render-pass.ts +155 -4
  232. package/src/adapter/resources/webgl-render-pipeline.ts +232 -131
  233. package/src/adapter/resources/webgl-sampler.ts +13 -8
  234. package/src/adapter/resources/webgl-shader.ts +11 -10
  235. package/src/adapter/resources/webgl-texture.ts +113 -85
  236. package/src/adapter/webgl-canvas-context.ts +14 -14
  237. package/src/adapter/webgl-device.ts +192 -77
  238. package/src/classic/accessor.ts +4 -17
  239. package/src/classic/{buffer.ts → buffer-with-accessor.ts} +67 -75
  240. package/src/classic/clear.ts +110 -0
  241. package/src/classic/copy-and-blit.ts +308 -0
  242. package/src/classic/format-utils.ts +43 -0
  243. package/src/classic/typed-array-utils.ts +18 -27
  244. package/src/context/context/{create-context.ts → create-browser-context.ts} +48 -31
  245. package/src/context/context/create-headless-context.ts +48 -0
  246. package/src/context/context/webgl-checks.ts +1 -1
  247. package/src/context/debug/spector.ts +7 -6
  248. package/src/context/debug/webgl-developer-tools.ts +21 -15
  249. package/src/context/parameters/unified-parameter-api.ts +20 -14
  250. package/src/context/parameters/webgl-parameter-tables.ts +117 -98
  251. package/src/context/polyfill/context-data.ts +27 -0
  252. package/src/context/polyfill/get-parameter-polyfill.ts +8 -7
  253. package/src/context/polyfill/polyfill-context.ts +7 -9
  254. package/src/context/polyfill/polyfill-table.ts +18 -16
  255. package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
  256. package/src/context/state-tracker/track-context-state.ts +14 -13
  257. package/src/context/state-tracker/with-parameters.ts +8 -2
  258. package/src/index.ts +42 -33
  259. package/src/types.ts +2 -0
  260. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  261. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  262. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  263. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  264. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  265. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  266. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  267. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  268. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  269. package/dist/adapter/helpers/uniforms.js.map +0 -1
  270. package/dist/bundle.d.ts +0 -2
  271. package/dist/bundle.d.ts.map +0 -1
  272. package/dist/bundle.js +0 -5
  273. package/dist/bundle.js.map +0 -1
  274. package/dist/classic/buffer.d.ts.map +0 -1
  275. package/dist/classic/buffer.js.map +0 -1
  276. package/dist/context/context/context-state.d.ts +0 -18
  277. package/dist/context/context/context-state.d.ts.map +0 -1
  278. package/dist/context/context/context-state.js +0 -26
  279. package/dist/context/context/context-state.js.map +0 -1
  280. package/dist/context/context/create-context.d.ts +0 -41
  281. package/dist/context/context/create-context.d.ts.map +0 -1
  282. package/dist/context/context/create-context.js +0 -49
  283. package/dist/context/context/create-context.js.map +0 -1
  284. package/dist/context/context/device-pixels.d.ts +0 -25
  285. package/dist/context/context/device-pixels.d.ts.map +0 -1
  286. package/dist/context/context/device-pixels.js +0 -98
  287. package/dist/context/context/device-pixels.js.map +0 -1
  288. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  289. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  290. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  291. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  292. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  293. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  294. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  295. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  296. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  297. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  298. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  299. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  300. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  301. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  302. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  303. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  304. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  305. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  306. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  307. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  308. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  309. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  310. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  311. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  312. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  313. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  314. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  315. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  316. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  317. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  318. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  319. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  320. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  321. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  322. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  323. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  324. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  325. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  326. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  327. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  328. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  329. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  330. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  331. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  332. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  333. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  334. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  335. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  336. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  337. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  338. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  339. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  340. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  341. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  342. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  343. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  344. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  345. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  346. package/dist/es5/adapter/webgl-device.js +0 -399
  347. package/dist/es5/adapter/webgl-device.js.map +0 -1
  348. package/dist/es5/bundle.js +0 -7
  349. package/dist/es5/bundle.js.map +0 -1
  350. package/dist/es5/classic/accessor.js +0 -181
  351. package/dist/es5/classic/accessor.js.map +0 -1
  352. package/dist/es5/classic/buffer.js +0 -470
  353. package/dist/es5/classic/buffer.js.map +0 -1
  354. package/dist/es5/classic/typed-array-utils.js +0 -126
  355. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  356. package/dist/es5/context/context/context-state.js +0 -31
  357. package/dist/es5/context/context/context-state.js.map +0 -1
  358. package/dist/es5/context/context/create-context.js +0 -69
  359. package/dist/es5/context/context/create-context.js.map +0 -1
  360. package/dist/es5/context/context/device-pixels.js +0 -115
  361. package/dist/es5/context/context/device-pixels.js.map +0 -1
  362. package/dist/es5/context/context/webgl-checks.js +0 -54
  363. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  364. package/dist/es5/context/debug/spector.js +0 -133
  365. package/dist/es5/context/debug/spector.js.map +0 -1
  366. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  367. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  368. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  369. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  370. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  371. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  372. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  373. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  374. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  375. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  376. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  377. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  378. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  379. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  380. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  381. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  382. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  383. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  384. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  385. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  386. package/dist/es5/index.js +0 -276
  387. package/dist/es5/index.js.map +0 -1
  388. package/dist/es5/init.js +0 -10
  389. package/dist/es5/init.js.map +0 -1
  390. package/dist/es5/types/webgl.js +0 -6
  391. package/dist/es5/types/webgl.js.map +0 -1
  392. package/dist/es5/types.js +0 -2
  393. package/dist/es5/types.js.map +0 -1
  394. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  395. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  396. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  397. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  398. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  399. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  400. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  401. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  402. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  403. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  404. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  405. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  406. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  407. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  408. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  409. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  410. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  411. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  412. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  413. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  414. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  415. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  416. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  417. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  418. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  419. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  420. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  421. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  422. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  423. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  424. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  425. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  426. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  427. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  428. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  429. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  430. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  431. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  432. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  433. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  434. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  435. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  436. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  437. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  438. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  439. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  440. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  441. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  442. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  443. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  444. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  445. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  446. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  447. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  448. package/dist/esm/adapter/resources/webgl-texture.js +0 -831
  449. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  450. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  451. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  452. package/dist/esm/adapter/webgl-device.js +0 -280
  453. package/dist/esm/adapter/webgl-device.js.map +0 -1
  454. package/dist/esm/bundle.js +0 -5
  455. package/dist/esm/bundle.js.map +0 -1
  456. package/dist/esm/classic/accessor.js +0 -144
  457. package/dist/esm/classic/accessor.js.map +0 -1
  458. package/dist/esm/classic/buffer.js +0 -384
  459. package/dist/esm/classic/buffer.js.map +0 -1
  460. package/dist/esm/classic/typed-array-utils.js +0 -112
  461. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  462. package/dist/esm/context/context/context-state.js +0 -26
  463. package/dist/esm/context/context/context-state.js.map +0 -1
  464. package/dist/esm/context/context/create-context.js.map +0 -1
  465. package/dist/esm/context/context/device-pixels.js +0 -98
  466. package/dist/esm/context/context/device-pixels.js.map +0 -1
  467. package/dist/esm/context/context/webgl-checks.js +0 -34
  468. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  469. package/dist/esm/context/debug/spector.js +0 -76
  470. package/dist/esm/context/debug/spector.js.map +0 -1
  471. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  472. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  473. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  474. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  475. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  476. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  477. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  478. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  479. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  480. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  481. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  482. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  483. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  484. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  485. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  486. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  487. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  488. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  489. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  490. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  491. package/dist/esm/index.js +0 -27
  492. package/dist/esm/index.js.map +0 -1
  493. package/dist/esm/init.js +0 -4
  494. package/dist/esm/init.js.map +0 -1
  495. package/dist/esm/types/webgl.js +0 -2
  496. package/dist/esm/types/webgl.js.map +0 -1
  497. package/dist/esm/types.js +0 -2
  498. package/dist/esm/types.js.map +0 -1
  499. package/dist/init.d.ts +0 -2
  500. package/dist/init.d.ts.map +0 -1
  501. package/dist/init.js +0 -4
  502. package/dist/init.js.map +0 -1
  503. package/dist/types/webgl.d.ts +0 -144
  504. package/dist/types/webgl.d.ts.map +0 -1
  505. package/dist/types/webgl.js +0 -2
  506. package/dist/types/webgl.js.map +0 -1
  507. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  508. package/src/bundle.ts +0 -4
  509. package/src/context/context/context-state.ts +0 -41
  510. package/src/context/context/device-pixels.ts +0 -152
  511. package/src/init.ts +0 -4
  512. 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
+