@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,75 +1,51 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { Framebuffer, Texture, log, assert } from '@luma.gl/api';
3
- import GL from '@luma.gl/constants';
4
- import WebGLTexture from './webgl-texture';
5
- import Renderbuffer from '../objects/webgl-renderbuffer';
6
- import { getWebGLTextureFormat, getWebGLDepthStencilAttachment } from '../converters/texture-formats';
7
- export default class WEBGLFramebuffer extends Framebuffer {
2
+ import { Framebuffer, assert } from '@luma.gl/core';
3
+ import { GL } from '@luma.gl/constants';
4
+ import { WEBGLTexture } from "./webgl-texture.js";
5
+ import { WEBGLRenderbuffer } from "../objects/webgl-renderbuffer.js";
6
+ import { getDepthStencilAttachmentWebGL } from "../converters/texture-formats.js";
7
+ export class WEBGLFramebuffer extends Framebuffer {
8
8
  get texture() {
9
9
  return this.colorAttachments[0];
10
10
  }
11
-
12
11
  constructor(device, props) {
13
12
  super(device, props);
14
-
15
13
  _defineProperty(this, "device", void 0);
16
-
17
14
  _defineProperty(this, "gl", void 0);
18
-
19
15
  _defineProperty(this, "handle", void 0);
20
-
21
- _defineProperty(this, "colorAttachments", []);
22
-
23
- _defineProperty(this, "depthStencilAttachment", undefined);
24
-
25
- _defineProperty(this, "_ownResources", []);
26
-
16
+ const isDefaultFramebuffer = props.handle === null;
27
17
  this.device = device;
28
18
  this.gl = device.gl;
29
- this.handle = this.props.handle !== undefined ? this.props.handle : this.gl.createFramebuffer();
30
-
31
- if (this.handle) {
32
- this.handle.__SPECTOR_Metadata = {
19
+ this.handle = this.props.handle || isDefaultFramebuffer ? this.props.handle : this.gl.createFramebuffer();
20
+ if (!isDefaultFramebuffer) {
21
+ device.setSpectorMetadata(this.handle, {
33
22
  id: this.props.id,
34
23
  props: this.props
35
- };
36
- }
37
-
38
- this.colorAttachments = this._createColorAttachments();
39
- this.depthStencilAttachment = this._createDepthStencilAttachment();
40
- const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
41
-
42
- for (let i = 0; i < this.colorAttachments.length; ++i) {
43
- const attachment = this.colorAttachments[i];
44
- const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;
45
-
46
- if (attachment) {
47
- this._attachOne(attachmentPoint, attachment);
24
+ });
25
+ this.autoCreateAttachmentTextures();
26
+ this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
27
+ for (let i = 0; i < this.colorAttachments.length; ++i) {
28
+ const attachment = this.colorAttachments[i];
29
+ const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;
30
+ if (attachment) {
31
+ this._attachOne(attachmentPoint, attachment);
32
+ }
48
33
  }
34
+ if (this.depthStencilAttachment) {
35
+ this._attachOne(getDepthStencilAttachmentWebGL(this.depthStencilAttachment.format), this.depthStencilAttachment);
36
+ }
37
+ this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);
49
38
  }
50
-
51
- if (this.props.depthStencilAttachment) {
52
- this._attachOne(getWebGLDepthStencilAttachment(this.depthStencilAttachment.format), this.depthStencilAttachment);
53
- }
54
-
55
- this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
56
-
57
39
  if (props.check !== false) {
58
40
  this._checkStatus();
59
41
  }
60
42
  }
61
-
62
43
  destroy() {
63
- if (this.handle !== null) {
64
- for (const resource of this._ownResources) {
65
- resource.destroy();
66
- }
67
-
44
+ super.destroy();
45
+ if (!this.destroyed && this.handle !== null) {
68
46
  this.gl.deleteFramebuffer(this.handle);
69
- this.handle = null;
70
47
  }
71
48
  }
72
-
73
49
  _checkStatus() {
74
50
  const {
75
51
  gl
@@ -77,187 +53,103 @@ export default class WEBGLFramebuffer extends Framebuffer {
77
53
  const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
78
54
  const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);
79
55
  gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
80
-
81
56
  if (status !== gl.FRAMEBUFFER_COMPLETE) {
82
57
  throw new Error("Framebuffer ".concat(_getFrameBufferStatus(status)));
83
58
  }
84
59
  }
85
-
86
- _createColorAttachments() {
87
- return this.props.colorAttachments.map(colorAttachment => {
88
- if (!colorAttachment) {
89
- return undefined;
90
- }
91
-
92
- if (colorAttachment instanceof WebGLTexture) {
93
- return colorAttachment;
94
- }
95
-
96
- return this._createColorAttachment(colorAttachment, this.width, this.height);
97
- });
98
- }
99
-
100
- _createColorAttachment(format, width, height) {
101
- const texture = this.device._createTexture({
102
- id: "".concat(this.id, "-color"),
103
- data: null,
104
- format,
105
- width,
106
- height,
107
- mipmaps: false,
108
- sampler: {
109
- minFilter: 'linear',
110
- magFilter: 'linear',
111
- addressModeU: 'clamp-to-edge',
112
- addressModeV: 'clamp-to-edge'
113
- }
114
- });
115
-
116
- this._ownResources.push(texture);
117
-
118
- return texture;
119
- }
120
-
121
- _createDepthStencilAttachment() {
122
- if (!this.props.depthStencilAttachment) {
123
- return undefined;
124
- }
125
-
126
- if (this.props.depthStencilAttachment instanceof Renderbuffer) {
127
- return this.props.depthStencilAttachment;
128
- }
129
-
130
- if (this.props.depthStencilAttachment instanceof Texture) {
131
- return this.props.depthStencilAttachment;
132
- }
133
-
134
- const format = this.props.depthStencilAttachment;
135
- const webglFormat = getWebGLTextureFormat(this.gl, format);
136
- const texture = new Renderbuffer(this.device, {
60
+ createDepthStencilTexture(format) {
61
+ return new WEBGLRenderbuffer(this.device, {
137
62
  id: "".concat(this.id, "-depth-stencil"),
138
- format: webglFormat,
63
+ format,
139
64
  width: this.width,
140
65
  height: this.height
141
66
  });
142
-
143
- this._ownResources.push(texture);
144
-
145
- return texture;
146
67
  }
147
-
148
- _resizeAttachments(width, height) {
149
- var _this$depthStencilAtt;
150
-
68
+ resizeAttachments(width, height) {
151
69
  if (this.handle === null) {
152
70
  this.width = this.gl.drawingBufferWidth;
153
71
  this.height = this.gl.drawingBufferHeight;
154
72
  return this;
155
73
  }
156
-
157
74
  if (width === undefined) {
158
75
  width = this.gl.drawingBufferWidth;
159
76
  }
160
-
161
77
  if (height === undefined) {
162
78
  height = this.gl.drawingBufferHeight;
163
79
  }
164
-
165
- if (width !== this.width && height !== this.height) {
166
- log.log(2, "Resizing framebuffer ".concat(this.id, " to ").concat(width, "x").concat(height))();
167
- }
168
-
169
80
  for (const colorAttachment of this.colorAttachments) {
170
81
  colorAttachment.resize({
171
82
  width,
172
83
  height
173
84
  });
174
85
  }
175
-
176
- (_this$depthStencilAtt = this.depthStencilAttachment) === null || _this$depthStencilAtt === void 0 ? void 0 : _this$depthStencilAtt.resize({
177
- width,
178
- height
179
- });
86
+ if (this.depthStencilAttachment) {
87
+ this.depthStencilAttachment.resize({
88
+ width,
89
+ height
90
+ });
91
+ }
180
92
  return this;
181
93
  }
182
-
183
94
  _attachOne(attachmentPoint, attachment) {
184
- if (attachment instanceof Renderbuffer) {
185
- this._attachRenderbuffer(attachmentPoint, attachment);
186
-
95
+ if (attachment instanceof WEBGLRenderbuffer) {
96
+ this._attachWEBGLRenderbuffer(attachmentPoint, attachment);
187
97
  return attachment;
188
98
  } else if (Array.isArray(attachment)) {
189
99
  const [texture, layer = 0, level = 0] = attachment;
190
-
191
100
  this._attachTexture(attachmentPoint, texture, layer, level);
192
-
193
101
  return texture;
194
- } else if (attachment instanceof WebGLTexture) {
102
+ } else if (attachment instanceof WEBGLTexture) {
195
103
  this._attachTexture(attachmentPoint, attachment, 0, 0);
196
-
197
104
  return attachment;
198
105
  }
106
+ throw new Error('attach');
199
107
  }
200
-
201
- _attachRenderbuffer(attachment, renderbuffer) {
108
+ _attachWEBGLRenderbuffer(attachment, renderbuffer) {
202
109
  this.gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, renderbuffer.handle);
203
110
  }
204
-
205
111
  _attachTexture(attachment, texture, layer, level) {
206
112
  const {
207
113
  gl,
208
114
  gl2
209
115
  } = this.device;
210
116
  gl.bindTexture(texture.target, texture.handle);
211
-
212
117
  switch (texture.target) {
213
118
  case GL.TEXTURE_2D_ARRAY:
214
119
  case GL.TEXTURE_3D:
215
120
  this.device.assertWebGL2();
216
- gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
121
+ gl2 === null || gl2 === void 0 ? void 0 : gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
217
122
  break;
218
-
219
123
  case GL.TEXTURE_CUBE_MAP:
220
124
  const face = mapIndexToCubeMapFace(layer);
221
125
  gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);
222
126
  break;
223
-
224
127
  case GL.TEXTURE_2D:
225
128
  gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);
226
129
  break;
227
-
228
130
  default:
229
131
  assert(false, 'Illegal texture type');
230
132
  }
231
-
232
133
  gl.bindTexture(texture.target, null);
233
134
  }
234
-
235
135
  }
236
-
237
136
  function mapIndexToCubeMapFace(layer) {
238
137
  return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;
239
138
  }
240
-
241
139
  function _getFrameBufferStatus(status) {
242
140
  switch (status) {
243
141
  case GL.FRAMEBUFFER_COMPLETE:
244
142
  return 'success';
245
-
246
143
  case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
247
144
  return 'Mismatched attachments';
248
-
249
145
  case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
250
146
  return 'No attachments';
251
-
252
147
  case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
253
148
  return 'Height/width mismatch';
254
-
255
149
  case GL.FRAMEBUFFER_UNSUPPORTED:
256
150
  return 'Unsupported or split attachments';
257
-
258
151
  case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:
259
152
  return 'Samples mismatch';
260
-
261
153
  default:
262
154
  return "".concat(status);
263
155
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/adapter/resources/webgl-framebuffer.ts"],"names":["Framebuffer","Texture","log","assert","GL","WebGLTexture","Renderbuffer","getWebGLTextureFormat","getWebGLDepthStencilAttachment","WEBGLFramebuffer","texture","colorAttachments","constructor","device","props","undefined","gl","handle","createFramebuffer","__SPECTOR_Metadata","id","_createColorAttachments","depthStencilAttachment","_createDepthStencilAttachment","prevHandle","bindFramebuffer","FRAMEBUFFER","i","length","attachment","attachmentPoint","COLOR_ATTACHMENT0","_attachOne","format","check","_checkStatus","destroy","resource","_ownResources","deleteFramebuffer","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","Error","_getFrameBufferStatus","map","colorAttachment","_createColorAttachment","width","height","_createTexture","data","mipmaps","sampler","minFilter","magFilter","addressModeU","addressModeV","push","webglFormat","_resizeAttachments","drawingBufferWidth","drawingBufferHeight","resize","_attachRenderbuffer","Array","isArray","layer","level","_attachTexture","renderbuffer","framebufferRenderbuffer","RENDERBUFFER","gl2","bindTexture","target","TEXTURE_2D_ARRAY","TEXTURE_3D","assertWebGL2","framebufferTextureLayer","TEXTURE_CUBE_MAP","face","mapIndexToCubeMapFace","framebufferTexture2D","TEXTURE_2D","TEXTURE_CUBE_MAP_POSITIVE_X","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"],"mappings":"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","sourcesContent":["import type {FramebufferProps, DepthStencilTextureFormat, ColorTextureFormat} from '@luma.gl/api';\nimport {Framebuffer, Texture, log, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../webgl-device';\nimport WebGLTexture from './webgl-texture';\nimport Renderbuffer from '../objects/webgl-renderbuffer';\nimport {getWebGLTextureFormat, getWebGLDepthStencilAttachment} from '../converters/texture-formats';\n\nexport type TextureAttachment = [Texture, number?, number?];\nexport type Attachment = WebGLTexture | Renderbuffer | TextureAttachment;\n\n/** luma.gl Framebuffer, WebGL implementation */\nexport default class WEBGLFramebuffer extends Framebuffer {\n device: WebGLDevice;\n gl: WebGLRenderingContext;\n handle: WebGLFramebuffer;\n\n get texture() { return this.colorAttachments[0]; }\n readonly colorAttachments: WebGLTexture[] = [];\n readonly depthStencilAttachment: WebGLTexture | undefined = undefined;\n protected _ownResources: (WebGLTexture | Renderbuffer)[] = [];\n\n constructor(device: WebGLDevice, props: FramebufferProps) {\n super(device, props);\n this.device = device;\n this.gl = device.gl;\n this.handle = this.props.handle !== undefined ? this.props.handle : this.gl.createFramebuffer();\n\n if (this.handle) { // default framebuffer is null...\n // @ts-expect-error Per SPECTOR docs\n this.handle.__SPECTOR_Metadata = {id: this.props.id, props: this.props};\n }\n\n this.colorAttachments = this._createColorAttachments();\n // @ts-expect-error\n this.depthStencilAttachment = this._createDepthStencilAttachment();\n\n /** Attach from a map of attachments */\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (let i = 0; i < this.colorAttachments.length; ++i) {\n const attachment = this.colorAttachments[i];\n const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;\n if (attachment) {\n this._attachOne(attachmentPoint, attachment);\n }\n }\n\n if (this.props.depthStencilAttachment) {\n this._attachOne(getWebGLDepthStencilAttachment(this.depthStencilAttachment.format), this.depthStencilAttachment);\n }\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n // @ts-expect-error\n if (props.check !== false) {\n this._checkStatus();\n }\n }\n\n destroy() {\n if (this.handle !== null) {\n for (const resource of this._ownResources) {\n resource.destroy();\n }\n this.gl.deleteFramebuffer(this.handle);\n this.handle = null;\n }\n }\n\n // PRIVATE\n\n /** Check the status */\n protected _checkStatus(): void {\n const {gl} = this;\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);\n // @ts-expect-error\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);\n }\n }\n\n _createColorAttachments(): WebGLTexture[] {\n return this.props.colorAttachments.map(colorAttachment => {\n if (!colorAttachment) {\n return undefined;\n }\n if (colorAttachment instanceof WebGLTexture) {\n return colorAttachment;\n }\n // if (typeof colorAttachment === 'default') {\n // return this._createColorAttachment('rgba8unorm', this.width, this.height);\n // }\n // @ts-expect-error\n return this._createColorAttachment(colorAttachment, this.width, this.height);\n });\n }\n\n /** Create a color attachment */\n protected _createColorAttachment(format: ColorTextureFormat, width: number, height: number): WebGLTexture {\n const texture = this.device._createTexture({\n id: `${this.id}-color`,\n data: null, // reserves texture memory, but texels are undefined\n format,\n // type: GL.UNSIGNED_BYTE,\n width,\n height,\n // Note: Mipmapping can be disabled by texture resource when we resize the texture\n // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant\n // behavior we always disable mipmaps.\n mipmaps: false,\n // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.\n // Use LINEAR so subpixel algos like fxaa work.\n // Set WRAP modes that support NPOT textures too.\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n },\n // parameters: {\n // [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n // [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n // [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n // [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n // }\n }) as WebGLTexture;\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Create a depth stencil attachment GL.DEPTH24_STENCIL8 */\n protected _createDepthStencilAttachment(): Renderbuffer | WebGLTexture {\n if (!this.props.depthStencilAttachment) {\n return undefined;\n }\n if (this.props.depthStencilAttachment instanceof Renderbuffer) {\n return this.props.depthStencilAttachment;\n }\n if (this.props.depthStencilAttachment instanceof Texture) {\n return this.props.depthStencilAttachment as unknown as WebGLTexture;\n }\n const format = this.props.depthStencilAttachment;\n const webglFormat = getWebGLTextureFormat(this.gl, format);\n\n const texture = new Renderbuffer(this.device, {\n id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?\n format: webglFormat,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n width: this.width,\n height: this.height\n });\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Attachment resize is expected to be a noop if size is same */\n protected _resizeAttachments(width: number, height: number): this {\n // for default framebuffer, just update the stored size\n if (this.handle === null) {\n // assert(width === undefined && height === undefined);\n this.width = this.gl.drawingBufferWidth;\n this.height = this.gl.drawingBufferHeight;\n return this;\n }\n if (width === undefined) {\n width = this.gl.drawingBufferWidth;\n }\n if (height === undefined) {\n height = this.gl.drawingBufferHeight;\n }\n\n if (width !== this.width && height !== this.height) {\n log.log(2, `Resizing framebuffer ${this.id} to ${width}x${height}`)();\n }\n\n for (const colorAttachment of this.colorAttachments) {\n colorAttachment.resize({width, height});\n }\n this.depthStencilAttachment?.resize({width, height});\n return this;\n }\n\n /** Attach one attachment */\n protected _attachOne(attachmentPoint: GL, attachment: Attachment): WebGLTexture | Renderbuffer {\n if (attachment instanceof Renderbuffer) {\n this._attachRenderbuffer(attachmentPoint, attachment);\n return attachment;\n } else if (Array.isArray(attachment)) {\n const [texture, layer = 0, level = 0] = attachment;\n this._attachTexture(attachmentPoint, texture as unknown as WebGLTexture, layer, level);\n return texture as unknown as WebGLTexture;\n } else if (attachment instanceof WebGLTexture) {\n this._attachTexture(attachmentPoint, attachment, 0, 0);\n return attachment;\n }\n }\n\n protected _attachRenderbuffer(attachment: GL, renderbuffer: Renderbuffer): void {\n this.gl.framebufferRenderbuffer(\n GL.FRAMEBUFFER,\n attachment,\n GL.RENDERBUFFER,\n renderbuffer.handle\n );\n }\n\n /**\n * @param attachment\n * @param texture\n * @param layer = 0 - index into WebGLTextureArray and Texture3D or face for `TextureCubeMap`\n * @param level = 0 - mipmapLevel (must be 0 in WebGL1)\n */\n protected _attachTexture(attachment: GL, texture: WebGLTexture, layer: number, level: number): void {\n const {gl, gl2} = this.device;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n this.device.assertWebGL2();\n gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);\n break;\n\n case GL.TEXTURE_CUBE_MAP:\n // layer must be a cubemap face (or if index, converted to cube map face)\n const face = mapIndexToCubeMapFace(layer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);\n break;\n\n case GL.TEXTURE_2D:\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);\n break;\n\n default:\n assert(false, 'Illegal texture type');\n }\n\n gl.bindTexture(texture.target, null);\n }\n}\n\n// Helper functions\n\n// Map an index to a cube map face constant\nfunction mapIndexToCubeMapFace(layer) {\n // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)\n // if smaller assume layer is index, otherwise assume it is already a cube map face constant\n return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;\n}\n\n// Helper METHODS\n// Get a string describing the framebuffer error if installed\nfunction _getFrameBufferStatus(status) {\n switch (status) {\n case GL.FRAMEBUFFER_COMPLETE:\n return 'success';\n case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n return 'Mismatched attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n return 'No attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n return 'Height/width mismatch';\n case GL.FRAMEBUFFER_UNSUPPORTED:\n return 'Unsupported or split attachments';\n // WebGL2\n case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:\n return 'Samples mismatch';\n // OVR_multiview2 extension\n // case GL.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: return 'baseViewIndex mismatch';\n default:\n return `${status}`;\n }\n}\n"],"file":"webgl-framebuffer.js"}
1
+ {"version":3,"file":"webgl-framebuffer.js","names":["Framebuffer","assert","GL","WEBGLTexture","WEBGLRenderbuffer","getDepthStencilAttachmentWebGL","WEBGLFramebuffer","texture","colorAttachments","constructor","device","props","_defineProperty","isDefaultFramebuffer","handle","gl","createFramebuffer","setSpectorMetadata","id","autoCreateAttachmentTextures","bindFramebuffer","FRAMEBUFFER","i","length","attachment","attachmentPoint","COLOR_ATTACHMENT0","_attachOne","depthStencilAttachment","format","check","_checkStatus","destroy","destroyed","deleteFramebuffer","prevHandle","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","Error","concat","_getFrameBufferStatus","createDepthStencilTexture","width","height","resizeAttachments","drawingBufferWidth","drawingBufferHeight","undefined","colorAttachment","resize","_attachWEBGLRenderbuffer","Array","isArray","layer","level","_attachTexture","renderbuffer","framebufferRenderbuffer","RENDERBUFFER","gl2","bindTexture","target","TEXTURE_2D_ARRAY","TEXTURE_3D","assertWebGL2","framebufferTextureLayer","TEXTURE_CUBE_MAP","face","mapIndexToCubeMapFace","framebufferTexture2D","TEXTURE_2D","TEXTURE_CUBE_MAP_POSITIVE_X","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"],"sources":["../../../src/adapter/resources/webgl-framebuffer.ts"],"sourcesContent":["// luma.gl, MIT license\n\nimport type {FramebufferProps, TextureFormat} from '@luma.gl/core';\nimport {Framebuffer, Texture, assert} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {WebGLDevice} from '../webgl-device';\nimport {WEBGLTexture} from './webgl-texture';\nimport {WEBGLRenderbuffer} from '../objects/webgl-renderbuffer';\nimport {getDepthStencilAttachmentWebGL} from '../converters/texture-formats';\n\nexport type TextureAttachment = [Texture, number?, number?];\nexport type Attachment = WEBGLTexture | WEBGLRenderbuffer | TextureAttachment;\n\n/** luma.gl Framebuffer, WebGL implementation */\nexport class WEBGLFramebuffer extends Framebuffer {\n device: WebGLDevice;\n gl: WebGLRenderingContext;\n handle: WebGLFramebuffer;\n\n get texture() {\n return this.colorAttachments[0];\n }\n\n constructor(device: WebGLDevice, props: FramebufferProps) {\n super(device, props);\n\n // WebGL default framebuffer handle is null\n const isDefaultFramebuffer = props.handle === null;\n\n this.device = device;\n this.gl = device.gl;\n this.handle =\n this.props.handle || isDefaultFramebuffer ? this.props.handle : this.gl.createFramebuffer();\n\n if (!isDefaultFramebuffer) {\n // default framebuffer handle is null, so we can't set spector metadata...\n device.setSpectorMetadata(this.handle, {id: this.props.id, props: this.props});\n\n // Auto create textures for attachments if needed\n this.autoCreateAttachmentTextures();\n\n /** Attach from a map of attachments */\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (let i = 0; i < this.colorAttachments.length; ++i) {\n const attachment = this.colorAttachments[i];\n const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;\n if (attachment) {\n this._attachOne(attachmentPoint, attachment as WEBGLTexture);\n }\n }\n\n if (this.depthStencilAttachment) {\n this._attachOne(\n getDepthStencilAttachmentWebGL(this.depthStencilAttachment.format),\n this.depthStencilAttachment as WEBGLTexture\n );\n }\n\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);\n }\n\n // @ts-expect-error\n if (props.check !== false) {\n this._checkStatus();\n }\n }\n\n /** destroys any auto created resources etc. */\n override destroy(): void {\n super.destroy(); // destroys owned resources etc.\n if (!this.destroyed && this.handle !== null) {\n this.gl.deleteFramebuffer(this.handle);\n // this.handle = null;\n }\n }\n\n // PRIVATE\n\n /** Check the status */\n protected _checkStatus(): void {\n const {gl} = this;\n // TODO - should we really rely on this trick? \n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle) as unknown as WebGLFramebuffer;\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);\n }\n }\n\n /** In WebGL we must use renderbuffers for depth/stencil attachments (unless we have extensions) */\n protected override createDepthStencilTexture(format: TextureFormat): Texture {\n return new WEBGLRenderbuffer(this.device, {\n id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?\n format,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n width: this.width,\n height: this.height\n }) as unknown as WEBGLTexture;\n }\n\n /** \n * Attachment resize is expected to be a noop if size is same \n */\n protected override resizeAttachments(width: number, height: number): this {\n // for default framebuffer, just update the stored size\n if (this.handle === null) {\n // assert(width === undefined && height === undefined);\n this.width = this.gl.drawingBufferWidth;\n this.height = this.gl.drawingBufferHeight;\n return this;\n }\n\n if (width === undefined) {\n width = this.gl.drawingBufferWidth;\n }\n if (height === undefined) {\n height = this.gl.drawingBufferHeight;\n }\n\n // TODO Not clear that this is better than default destroy/create implementation\n\n for (const colorAttachment of this.colorAttachments) {\n (colorAttachment as WEBGLTexture).resize({width, height});\n }\n if (this.depthStencilAttachment) {\n (this.depthStencilAttachment as WEBGLTexture).resize({width, height});\n }\n return this;\n }\n\n /** Attach one attachment */\n protected _attachOne(\n attachmentPoint: GL,\n attachment: Attachment\n ): WEBGLTexture | WEBGLRenderbuffer {\n if (attachment instanceof WEBGLRenderbuffer) {\n this._attachWEBGLRenderbuffer(attachmentPoint, attachment);\n return attachment;\n } else if (Array.isArray(attachment)) {\n const [texture, layer = 0, level = 0] = attachment;\n this._attachTexture(attachmentPoint, texture as unknown as WEBGLTexture, layer, level);\n return texture as unknown as WEBGLTexture;\n } else if (attachment instanceof WEBGLTexture) {\n this._attachTexture(attachmentPoint, attachment, 0, 0);\n return attachment;\n }\n throw new Error('attach');\n }\n\n protected _attachWEBGLRenderbuffer(attachment: GL, renderbuffer: WEBGLRenderbuffer): void {\n this.gl.framebufferRenderbuffer(\n GL.FRAMEBUFFER,\n attachment,\n GL.RENDERBUFFER,\n renderbuffer.handle\n );\n }\n\n /**\n * @param attachment\n * @param texture\n * @param layer = 0 - index into WEBGLTextureArray and Texture3D or face for `TextureCubeMap`\n * @param level = 0 - mipmapLevel (must be 0 in WebGL1)\n */\n protected _attachTexture(\n attachment: GL,\n texture: WEBGLTexture,\n layer: number,\n level: number\n ): void {\n const {gl, gl2} = this.device;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n this.device.assertWebGL2();\n gl2?.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);\n break;\n\n case GL.TEXTURE_CUBE_MAP:\n // layer must be a cubemap face (or if index, converted to cube map face)\n const face = mapIndexToCubeMapFace(layer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);\n break;\n\n case GL.TEXTURE_2D:\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);\n break;\n\n default:\n assert(false, 'Illegal texture type');\n }\n\n gl.bindTexture(texture.target, null);\n }\n}\n\n// Helper functions\n\n// Map an index to a cube map face constant\nfunction mapIndexToCubeMapFace(layer: number | GL): GL {\n // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)\n // if smaller assume layer is index, otherwise assume it is already a cube map face constant\n return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;\n}\n\n// Helper METHODS\n// Get a string describing the framebuffer error if installed\nfunction _getFrameBufferStatus(status: GL) {\n switch (status) {\n case GL.FRAMEBUFFER_COMPLETE:\n return 'success';\n case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n return 'Mismatched attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n return 'No attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n return 'Height/width mismatch';\n case GL.FRAMEBUFFER_UNSUPPORTED:\n return 'Unsupported or split attachments';\n // WebGL2\n case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:\n return 'Samples mismatch';\n // OVR_multiview2 extension\n // case GL.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: return 'baseViewIndex mismatch';\n default:\n return `${status}`;\n }\n}\n"],"mappings":"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"}
@@ -1,11 +1,26 @@
1
- import { RenderPass, RenderPassProps } from '@luma.gl/api';
2
- import WebGLDevice from '../webgl-device';
3
- export default class WEBGLRenderPass extends RenderPass {
1
+ import { RenderPass, RenderPassProps, NumericArray, RenderPassParameters } from '@luma.gl/core';
2
+ import { WebGLDevice } from '../webgl-device';
3
+ import { GLParameters } from '@luma.gl/constants';
4
+ export declare class WEBGLRenderPass extends RenderPass {
4
5
  readonly device: WebGLDevice;
6
+ /** Parameters that should be applied before each draw call */
7
+ glParameters: GLParameters;
5
8
  constructor(device: WebGLDevice, props: RenderPassProps);
6
- endPass(): void;
9
+ end(): void;
7
10
  pushDebugGroup(groupLabel: string): void;
8
11
  popDebugGroup(): void;
9
12
  insertDebugMarker(markerLabel: string): void;
13
+ /**
14
+ * Maps RenderPass parameters to GL parameters
15
+ */
16
+ setParameters(parameters?: RenderPassParameters): void;
17
+ /**
18
+ * Optionally clears depth, color and stencil buffers based on parameters
19
+ */
20
+ protected clear(): void;
21
+ /**
22
+ * WebGL2 - clear a specific color buffer
23
+ */
24
+ protected clearColorBuffer(drawBuffer?: number, value?: NumericArray): void;
10
25
  }
11
26
  //# sourceMappingURL=webgl-render-pass.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,eAAe,EAAC,MAAM,cAAc,CAAC;AACzD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU;IACrD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;gBAEjB,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe;IAIvD,OAAO,IAAI,IAAI;IAEf,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IACxC,aAAa,IAAI,IAAI;IACrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAQ7C"}
1
+ {"version":3,"file":"webgl-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAK,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAWpD,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,8DAA8D;IAC9D,YAAY,EAAE,YAAY,CAAC;gBAEf,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe;IAWvD,GAAG,IAAI,IAAI;IAIX,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IACxC,aAAa,IAAI,IAAI;IACrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAS5C;;OAEG;IACH,aAAa,CAAC,UAAU,GAAE,oBAAyB,GAAG,IAAI;IA+C1D;;OAEG;IACH,SAAS,CAAC,KAAK,IAAI,IAAI;IA+BvB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,UAAU,GAAE,MAAU,EAAE,KAAK,GAAE,YAA2B;CAwCtF"}
@@ -1,19 +1,98 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { RenderPass } from '@luma.gl/api';
3
- export default class WEBGLRenderPass extends RenderPass {
2
+ import { RenderPass } from '@luma.gl/core';
3
+ import { GL } from '@luma.gl/constants';
4
+ import { withParameters } from "../../context/state-tracker/with-parameters.js";
5
+ const GL_DEPTH_BUFFER_BIT = 0x00000100;
6
+ const GL_STENCIL_BUFFER_BIT = 0x00000400;
7
+ const GL_COLOR_BUFFER_BIT = 0x00004000;
8
+ const GL_COLOR = 0x1800;
9
+ export class WEBGLRenderPass extends RenderPass {
4
10
  constructor(device, props) {
5
11
  super(device, props);
6
-
7
12
  _defineProperty(this, "device", void 0);
13
+ _defineProperty(this, "glParameters", void 0);
14
+ this.device = device;
15
+ this.setParameters(this.props.parameters);
16
+ this.clear();
8
17
  }
9
-
10
- endPass() {}
11
-
18
+ end() {}
12
19
  pushDebugGroup(groupLabel) {}
13
-
14
20
  popDebugGroup() {}
15
-
16
21
  insertDebugMarker(markerLabel) {}
17
-
22
+ setParameters() {
23
+ let parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
24
+ const glParameters = {};
25
+ if (this.props.framebuffer) {
26
+ glParameters.framebuffer = this.props.framebuffer;
27
+ }
28
+ if (this.props.depthReadOnly) {
29
+ glParameters.depthMask = !this.props.depthReadOnly;
30
+ }
31
+ glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;
32
+ glParameters[GL.RASTERIZER_DISCARD] = this.props.discard;
33
+ if (parameters.viewport) {
34
+ if (parameters.viewport.length >= 6) {
35
+ glParameters.viewport = parameters.viewport.slice(0, 4);
36
+ glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];
37
+ } else {
38
+ glParameters.viewport = parameters.viewport;
39
+ }
40
+ }
41
+ glParameters.scissorTest = Boolean(parameters.scissorRect);
42
+ if (parameters.scissorRect) {
43
+ glParameters.scissor = parameters.scissorRect;
44
+ }
45
+ if (parameters.blendConstant) {
46
+ glParameters.blendColor = parameters.blendConstant;
47
+ }
48
+ if (parameters.stencilReference) {
49
+ console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');
50
+ parameters[GL.STENCIL_REF] = parameters.stencilReference;
51
+ }
52
+ this.glParameters = glParameters;
53
+ }
54
+ clear() {
55
+ const glParameters = {
56
+ ...this.glParameters
57
+ };
58
+ let clearMask = 0;
59
+ if (this.props.clearColor !== false) {
60
+ clearMask |= GL_COLOR_BUFFER_BIT;
61
+ glParameters.clearColor = this.props.clearColor;
62
+ }
63
+ if (this.props.clearDepth !== false) {
64
+ clearMask |= GL_DEPTH_BUFFER_BIT;
65
+ glParameters.clearDepth = this.props.clearDepth;
66
+ }
67
+ if (this.props.clearStencil !== false) {
68
+ clearMask |= GL_STENCIL_BUFFER_BIT;
69
+ glParameters.clearStencil = this.props.clearStencil;
70
+ }
71
+ if (clearMask !== 0) {
72
+ withParameters(this.device, glParameters, () => {
73
+ this.device.gl.clear(clearMask);
74
+ });
75
+ }
76
+ }
77
+ clearColorBuffer() {
78
+ let drawBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
79
+ let value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0, 0];
80
+ withParameters(this.device.gl2, {
81
+ framebuffer: this.props.framebuffer
82
+ }, () => {
83
+ switch (value.constructor) {
84
+ case Int32Array:
85
+ this.device.gl2.clearBufferiv(GL_COLOR, drawBuffer, value);
86
+ break;
87
+ case Uint32Array:
88
+ this.device.gl2.clearBufferuiv(GL_COLOR, drawBuffer, value);
89
+ break;
90
+ case Float32Array:
91
+ default:
92
+ this.device.gl2.clearBufferfv(GL_COLOR, drawBuffer, value);
93
+ break;
94
+ }
95
+ });
96
+ }
18
97
  }
19
98
  //# sourceMappingURL=webgl-render-pass.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":["RenderPass","WEBGLRenderPass","constructor","device","props","endPass","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"mappings":";AAAA,SAAQA,UAAR,QAA0C,cAA1C;AAGA,eAAe,MAAMC,eAAN,SAA8BD,UAA9B,CAAyC;AAGtDE,EAAAA,WAAW,CAACC,MAAD,EAAsBC,KAAtB,EAA8C;AACvD,UAAMD,MAAN,EAAcC,KAAd;;AADuD;AAExD;;AAEDC,EAAAA,OAAO,GAAS,CAAE;;AAElBC,EAAAA,cAAc,CAACC,UAAD,EAA2B,CAAE;;AAC3CC,EAAAA,aAAa,GAAS,CAAE;;AACxBC,EAAAA,iBAAiB,CAACC,WAAD,EAA4B,CAAE;;AAXO","sourcesContent":["import {RenderPass, RenderPassProps} from '@luma.gl/api';\nimport WebGLDevice from '../webgl-device';\n\nexport default class WEBGLRenderPass extends RenderPass {\n readonly device: WebGLDevice;\n\n constructor(device: WebGLDevice, props: RenderPassProps) {\n super(device, props);\n }\n\n endPass(): void {}\n\n pushDebugGroup(groupLabel: string): void {}\n popDebugGroup(): void {}\n insertDebugMarker(markerLabel: string): void {}\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n}\n"],"file":"webgl-render-pass.js"}
1
+ {"version":3,"file":"webgl-render-pass.js","names":["RenderPass","GL","withParameters","GL_DEPTH_BUFFER_BIT","GL_STENCIL_BUFFER_BIT","GL_COLOR_BUFFER_BIT","GL_COLOR","WEBGLRenderPass","constructor","device","props","_defineProperty","setParameters","parameters","clear","end","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel","arguments","length","undefined","glParameters","framebuffer","depthReadOnly","depthMask","stencilMask","stencilReadOnly","RASTERIZER_DISCARD","discard","viewport","slice","depthRange","scissorTest","Boolean","scissorRect","scissor","blendConstant","blendColor","stencilReference","console","warn","STENCIL_REF","clearMask","clearColor","clearDepth","clearStencil","gl","clearColorBuffer","drawBuffer","value","gl2","Int32Array","clearBufferiv","Uint32Array","clearBufferuiv","Float32Array","clearBufferfv"],"sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"sourcesContent":["import {RenderPass, RenderPassProps, NumericArray, RenderPassParameters} from '@luma.gl/core';\nimport {WebGLDevice} from '../webgl-device';\nimport {GL, GLParameters} from '@luma.gl/constants';\nimport {withParameters} from '../../context/state-tracker/with-parameters';\n\n// Should collapse during minification\n\nconst GL_DEPTH_BUFFER_BIT = 0x00000100;\nconst GL_STENCIL_BUFFER_BIT = 0x00000400;\nconst GL_COLOR_BUFFER_BIT = 0x00004000;\n\nconst GL_COLOR = 0x1800;\n\nexport class WEBGLRenderPass extends RenderPass {\n readonly device: WebGLDevice;\n\n /** Parameters that should be applied before each draw call */\n glParameters: GLParameters;\n\n constructor(device: WebGLDevice, props: RenderPassProps) {\n super(device, props);\n this.device = device;\n\n // TODO - do parameters (scissorRect) affect the clear operation?\n this.setParameters(this.props.parameters);\n\n // Hack - for now WebGL draws in \"immediate mode\" (instead of queueing the operations)...\n this.clear();\n }\n\n end(): void {\n // should add commands to CommandEncoder.\n }\n\n pushDebugGroup(groupLabel: string): void {}\n popDebugGroup(): void {}\n insertDebugMarker(markerLabel: string): void {}\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n\n /**\n * Maps RenderPass parameters to GL parameters\n */\n setParameters(parameters: RenderPassParameters = {}): void {\n const glParameters: GLParameters = {};\n\n // Framebuffers are specified using parameters in WebGL\n if (this.props.framebuffer) {\n glParameters.framebuffer = this.props.framebuffer;\n }\n\n if (this.props.depthReadOnly) {\n glParameters.depthMask = !this.props.depthReadOnly;\n }\n\n glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;\n\n glParameters[GL.RASTERIZER_DISCARD] = this.props.discard;\n\n // Map the four renderpass parameters to WebGL parameters\n if (parameters.viewport) {\n // WebGPU viewports are 6 coordinates (X, Y, Z)\n if (parameters.viewport.length >= 6) {\n glParameters.viewport = parameters.viewport.slice(0, 4);\n glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];\n } else {\n // WebGL viewports are 4 coordinates (X, Y)\n glParameters.viewport = parameters.viewport;\n }\n }\n glParameters.scissorTest = Boolean(parameters.scissorRect);\n if (parameters.scissorRect) {\n glParameters.scissor = parameters.scissorRect;\n }\n if (parameters.blendConstant) {\n glParameters.blendColor = parameters.blendConstant;\n }\n if (parameters.stencilReference) {\n // eslint-disable-next-line no-console\n console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');\n // parameters.stencilFunc = [func, ref, mask];\n // Does this work?\n parameters[GL.STENCIL_REF] = parameters.stencilReference;\n }\n\n this.glParameters = glParameters;\n }\n\n // Internal\n\n /**\n * Optionally clears depth, color and stencil buffers based on parameters\n */\n protected clear(): void {\n const glParameters: GLParameters = {...this.glParameters};\n\n let clearMask = 0;\n\n if (this.props.clearColor !== false) {\n clearMask |= GL_COLOR_BUFFER_BIT;\n glParameters.clearColor = this.props.clearColor;\n }\n if (this.props.clearDepth !== false) {\n clearMask |= GL_DEPTH_BUFFER_BIT;\n glParameters.clearDepth = this.props.clearDepth;\n }\n if (this.props.clearStencil !== false) {\n clearMask |= GL_STENCIL_BUFFER_BIT;\n glParameters.clearStencil = this.props.clearStencil;\n }\n\n if (clearMask !== 0) {\n // Temporarily set any clear \"colors\" and call clear\n withParameters(this.device, glParameters, () => {\n this.device.gl.clear(clearMask);\n });\n\n // TODO - clear multiple color attachments\n // for (attachment of this.framebuffer.colorAttachments) {\n // this.clearColorBuffer \n // }\n }\n }\n\n /** \n * WebGL2 - clear a specific color buffer \n */\n protected clearColorBuffer(drawBuffer: number = 0, value: NumericArray = [0, 0, 0, 0]) {\n withParameters(this.device.gl2, {framebuffer: this.props.framebuffer}, () => {\n // Method selection per OpenGL ES 3 docs\n switch (value.constructor) {\n case Int32Array:\n this.device.gl2.clearBufferiv(GL_COLOR, drawBuffer, value);\n break;\n case Uint32Array:\n this.device.gl2.clearBufferuiv(GL_COLOR, drawBuffer, value);\n break;\n case Float32Array:\n default:\n this.device.gl2.clearBufferfv(GL_COLOR, drawBuffer, value);\n break;\n }\n });\n }\n\n // clearDepthStencil() {\n // const GL_DEPTH = 0x1801;\n // const GL_STENCIL = 0x1802;\n // const GL_DEPTH_STENCIL = 0x84f9;\n\n // case GL_DEPTH:\n // this.device.gl2.clearBufferfv(GL_DEPTH, 0, [value]);\n // break;\n\n // case GL_STENCIL:\n // this.device.gl2.clearBufferiv(GL_STENCIL, 0, [value]);\n // break;\n\n // case GL_DEPTH_STENCIL:\n // const [depth, stencil] = value;\n // this.device.gl2.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);\n // break;\n\n // default:\n // assert(false, ERR_ARGUMENTS);\n // }\n // });\n}\n\n"],"mappings":"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"}
@@ -1,20 +1,37 @@
1
- import type { RenderPipelineProps, RenderPass, Buffer, Binding, ShaderLayout } from '@luma.gl/api';
2
- import { RenderPipeline } from '@luma.gl/api';
3
- import WebGLDevice from '../webgl-device';
4
- import WEBGLShader from './webgl-shader';
5
- import WEBGLVertexArrayObject from '../objects/webgl-vertex-array-object';
1
+ import type { RenderPipelineProps, RenderPass, Buffer, Binding, ShaderLayout, TypedArray, BufferMapping } from '@luma.gl/core';
2
+ import { RenderPipeline } from '@luma.gl/core';
3
+ import { WebGLDevice } from '../webgl-device';
4
+ import { WEBGLBuffer } from './webgl-buffer';
5
+ import { WEBGLShader } from './webgl-shader';
6
+ import { WEBGLVertexArrayObject } from '../objects/webgl-vertex-array-object';
6
7
  /** Creates a new render pipeline */
7
- export default class WEBGLRenderPipeline extends RenderPipeline {
8
+ export declare class WEBGLRenderPipeline extends RenderPipeline {
9
+ /** The WebGL device that created this render pipeline */
8
10
  device: WebGLDevice;
11
+ /** Handle to underlying WebGL program */
9
12
  handle: WebGLProgram;
13
+ /** vertex shader */
10
14
  vs: WEBGLShader;
15
+ /** fragment shader */
11
16
  fs: WEBGLShader;
17
+ /** The merged layout */
12
18
  layout: ShaderLayout;
13
- varyings: string[];
14
- vertexArrayObject: WEBGLVertexArrayObject;
15
- _indexBuffer?: Buffer;
19
+ /** The layout extracted from shader by WebGL introspection APIs */
20
+ introspectedLayout: ShaderLayout;
21
+ /** Buffer map describing buffer interleaving etc */
22
+ bufferMap: BufferMapping[];
23
+ /** Uniforms set on this model */
16
24
  uniforms: Record<string, any>;
25
+ /** Bindings set on this model */
17
26
  bindings: Record<string, any>;
27
+ /** Any constant attributes */
28
+ constantAttributes: Record<string, TypedArray>;
29
+ /** Index buffer is stored separately */
30
+ _indexBuffer?: WEBGLBuffer;
31
+ /** WebGL varyings */
32
+ varyings: string[] | null;
33
+ /** Stores attribute bindings */
34
+ vertexArrayObject: WEBGLVertexArrayObject;
18
35
  _textureUniforms: Record<string, any>;
19
36
  _textureIndexCounter: number;
20
37
  _uniformCount: number;
@@ -24,7 +41,17 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
24
41
  setIndexBuffer(indexBuffer: Buffer): void;
25
42
  /** @todo needed for portable model */
26
43
  setAttributes(attributes: Record<string, Buffer>): void;
27
- /** @todo needed for portable model */
44
+ /**
45
+ * Constant attributes are only supported in WebGL, not in WebGPU
46
+ * Any attribute that is disabled in the current vertex array object
47
+ * is read from the context's global constant value for that attribute location.
48
+ * @param attributes
49
+ */
50
+ setConstantAttributes(attributes: Record<string, TypedArray>): void;
51
+ /**
52
+ * Bindings include: textures, samplers and uniform buffers
53
+ * @todo needed for portable model
54
+ */
28
55
  setBindings(bindings: Record<string, Binding>): void;
29
56
  setUniforms(uniforms: Record<string, any>): void;
30
57
  /** @todo needed for portable model
@@ -32,7 +59,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
32
59
  * This function unifies those ways into a single call using common parameters with sane defaults
33
60
  */
34
61
  draw(options: {
35
- renderPass?: RenderPass;
62
+ renderPass: RenderPass;
36
63
  vertexCount?: number;
37
64
  indexCount?: number;
38
65
  instanceCount?: number;
@@ -51,5 +78,11 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
51
78
  /** Apply any bindings */
52
79
  _applyBindings(): void;
53
80
  _applyUniforms(): void;
81
+ /**
82
+ * Constant attributes are only supported in WebGL, not in WebGPU
83
+ * Any attribute that is disabled in the current vertex array object
84
+ * is read from the context's global constant value for that attribute location.
85
+ */
86
+ _applyConstantAttributes(): void;
54
87
  }
55
88
  //# sourceMappingURL=webgl-render-pipeline.d.ts.map