@luma.gl/webgl 8.5.10 → 8.6.0-alpha.1

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 (633) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +5 -0
  4. package/dist/bundle.js.map +1 -0
  5. package/dist/classes/accessor.d.ts +28 -0
  6. package/dist/classes/accessor.d.ts.map +1 -0
  7. package/dist/classes/accessor.js +112 -0
  8. package/dist/classes/accessor.js.map +1 -0
  9. package/dist/classes/accessor.ts.disabled +159 -0
  10. package/dist/classes/clear.d.ts +16 -0
  11. package/dist/classes/clear.d.ts.map +1 -0
  12. package/dist/classes/clear.js +102 -0
  13. package/dist/classes/clear.js.map +1 -0
  14. package/dist/classes/copy-and-blit.d.ts +69 -0
  15. package/dist/classes/copy-and-blit.d.ts.map +1 -0
  16. package/dist/classes/copy-and-blit.js +333 -0
  17. package/dist/classes/copy-and-blit.js.map +1 -0
  18. package/dist/classes/framebuffer.d.ts +130 -0
  19. package/dist/classes/framebuffer.d.ts.map +1 -0
  20. package/dist/classes/framebuffer.js +656 -0
  21. package/dist/classes/framebuffer.js.map +1 -0
  22. package/dist/classes/program-configuration.d.ts +27 -0
  23. package/dist/classes/program-configuration.d.ts.map +1 -0
  24. package/dist/classes/program-configuration.js +160 -0
  25. package/dist/classes/program-configuration.js.map +1 -0
  26. package/dist/classes/program.d.ts +61 -0
  27. package/dist/classes/program.d.ts.map +1 -0
  28. package/dist/classes/program.js +368 -0
  29. package/dist/classes/program.js.map +1 -0
  30. package/dist/classes/query.d.ts +27 -0
  31. package/dist/classes/query.d.ts.map +1 -0
  32. package/dist/classes/query.js +144 -0
  33. package/dist/classes/query.js.map +1 -0
  34. package/dist/classes/renderbuffer-formats.d.ts +16 -0
  35. package/dist/classes/renderbuffer-formats.d.ts.map +1 -0
  36. package/dist/classes/renderbuffer-formats.js +185 -0
  37. package/dist/classes/renderbuffer-formats.js.map +1 -0
  38. package/dist/classes/renderbuffer.d.ts +60 -0
  39. package/dist/classes/renderbuffer.d.ts.map +1 -0
  40. package/dist/classes/renderbuffer.js +127 -0
  41. package/dist/classes/renderbuffer.js.map +1 -0
  42. package/dist/classes/texture-2d.d.ts +8 -0
  43. package/dist/classes/texture-2d.d.ts.map +1 -0
  44. package/dist/classes/texture-2d.js +39 -0
  45. package/dist/classes/texture-2d.js.map +1 -0
  46. package/dist/classes/texture-3d.d.ts +28 -0
  47. package/dist/classes/texture-3d.d.ts.map +1 -0
  48. package/dist/classes/texture-3d.js +67 -0
  49. package/dist/classes/texture-3d.js.map +1 -0
  50. package/dist/classes/texture-cube.d.ts +27 -0
  51. package/dist/classes/texture-cube.d.ts.map +1 -0
  52. package/dist/classes/texture-cube.js +131 -0
  53. package/dist/classes/texture-cube.js.map +1 -0
  54. package/dist/classes/texture-formats.d.ts +37 -0
  55. package/dist/classes/texture-formats.d.ts.map +1 -0
  56. package/dist/classes/texture-formats.js +98 -0
  57. package/dist/classes/texture-formats.js.map +1 -0
  58. package/dist/classes/texture.d.ts +118 -0
  59. package/dist/classes/texture.d.ts.map +1 -0
  60. package/dist/classes/texture.js +785 -0
  61. package/dist/classes/texture.js.map +1 -0
  62. package/dist/classes/transform-feedback.d.ts +33 -0
  63. package/dist/classes/transform-feedback.d.ts.map +1 -0
  64. package/dist/classes/transform-feedback.js +197 -0
  65. package/dist/classes/transform-feedback.js.map +1 -0
  66. package/dist/classes/uniform-buffer-layout.d.ts +17 -0
  67. package/dist/classes/uniform-buffer-layout.d.ts.map +1 -0
  68. package/dist/classes/uniform-buffer-layout.js +104 -0
  69. package/dist/classes/uniform-buffer-layout.js.map +1 -0
  70. package/dist/classes/uniforms.d.ts +38 -0
  71. package/dist/classes/uniforms.d.ts.map +1 -0
  72. package/dist/classes/uniforms.js +251 -0
  73. package/dist/classes/uniforms.js.map +1 -0
  74. package/dist/classes/vertex-array-object.d.ts +75 -0
  75. package/dist/classes/vertex-array-object.d.ts.map +1 -0
  76. package/dist/classes/vertex-array-object.js +262 -0
  77. package/dist/classes/vertex-array-object.js.map +1 -0
  78. package/dist/classes/vertex-array.d.ts +75 -0
  79. package/dist/classes/vertex-array.d.ts.map +1 -0
  80. package/dist/classes/vertex-array.js +409 -0
  81. package/dist/classes/vertex-array.js.map +1 -0
  82. package/dist/classes/webgl-buffer.d.ts +98 -0
  83. package/dist/classes/webgl-buffer.d.ts.map +1 -0
  84. package/dist/{esm/classes/buffer.js → classes/webgl-buffer.js} +97 -73
  85. package/dist/classes/webgl-buffer.js.map +1 -0
  86. package/dist/classes/webgl-resource.d.ts +54 -0
  87. package/dist/classes/webgl-resource.d.ts.map +1 -0
  88. package/dist/{esm/classes/resource.js → classes/webgl-resource.js} +31 -52
  89. package/dist/classes/webgl-resource.js.map +1 -0
  90. package/dist/classes/webgl-shader.d.ts +51 -0
  91. package/dist/classes/webgl-shader.d.ts.map +1 -0
  92. package/dist/classes/webgl-shader.js +190 -0
  93. package/dist/classes/webgl-shader.js.map +1 -0
  94. package/dist/context/gl-context.d.ts +15 -0
  95. package/dist/context/gl-context.d.ts.map +1 -0
  96. package/dist/context/gl-context.js +32 -0
  97. package/dist/context/gl-context.js.map +1 -0
  98. package/dist/context/luma-context-data.d.ts +31 -0
  99. package/dist/context/luma-context-data.d.ts.map +1 -0
  100. package/dist/context/luma-context-data.js +5 -0
  101. package/dist/context/luma-context-data.js.map +1 -0
  102. package/dist/debug/debug-program-configuration.d.ts +2 -0
  103. package/dist/debug/debug-program-configuration.d.ts.map +1 -0
  104. package/dist/debug/debug-program-configuration.js +40 -0
  105. package/dist/debug/debug-program-configuration.js.map +1 -0
  106. package/dist/debug/debug-uniforms.d.ts +12 -0
  107. package/dist/debug/debug-uniforms.d.ts.map +1 -0
  108. package/dist/debug/debug-uniforms.js +108 -0
  109. package/dist/debug/debug-uniforms.js.map +1 -0
  110. package/dist/debug/debug-vertex-array.d.ts +5 -0
  111. package/dist/debug/debug-vertex-array.d.ts.map +1 -0
  112. package/dist/debug/debug-vertex-array.js +118 -0
  113. package/dist/debug/debug-vertex-array.js.map +1 -0
  114. package/dist/es5/bundle.js +3 -5
  115. package/dist/es5/bundle.js.map +1 -1
  116. package/dist/es5/classes/accessor.js +76 -108
  117. package/dist/es5/classes/accessor.js.map +1 -1
  118. package/dist/es5/classes/accessor.ts.disabled +159 -0
  119. package/dist/es5/classes/clear.js +33 -48
  120. package/dist/es5/classes/clear.js.map +1 -1
  121. package/dist/es5/classes/copy-and-blit.js +177 -192
  122. package/dist/es5/classes/copy-and-blit.js.map +1 -1
  123. package/dist/es5/classes/framebuffer.js +538 -655
  124. package/dist/es5/classes/framebuffer.js.map +1 -1
  125. package/dist/es5/classes/program-configuration.js +127 -141
  126. package/dist/es5/classes/program-configuration.js.map +1 -1
  127. package/dist/es5/classes/program.js +294 -358
  128. package/dist/es5/classes/program.js.map +1 -1
  129. package/dist/es5/classes/query.js +115 -181
  130. package/dist/es5/classes/query.js.map +1 -1
  131. package/dist/es5/classes/renderbuffer-formats.js +186 -121
  132. package/dist/es5/classes/renderbuffer-formats.js.map +1 -1
  133. package/dist/es5/classes/renderbuffer.js +104 -128
  134. package/dist/es5/classes/renderbuffer.js.map +1 -1
  135. package/dist/es5/classes/texture-2d.js +16 -39
  136. package/dist/es5/classes/texture-2d.js.map +1 -1
  137. package/dist/es5/classes/texture-3d.js +50 -89
  138. package/dist/es5/classes/texture-3d.js.map +1 -1
  139. package/dist/es5/classes/texture-cube.js +112 -162
  140. package/dist/es5/classes/texture-cube.js.map +1 -1
  141. package/dist/es5/classes/texture-formats.js +73 -42
  142. package/dist/es5/classes/texture-formats.js.map +1 -1
  143. package/dist/es5/classes/texture.js +670 -673
  144. package/dist/es5/classes/texture.js.map +1 -1
  145. package/dist/es5/classes/transform-feedback.js +150 -203
  146. package/dist/es5/classes/transform-feedback.js.map +1 -1
  147. package/dist/es5/classes/uniform-buffer-layout.js +89 -103
  148. package/dist/es5/classes/uniform-buffer-layout.js.map +1 -1
  149. package/dist/es5/classes/uniforms.js +134 -93
  150. package/dist/es5/classes/uniforms.js.map +1 -1
  151. package/dist/es5/classes/vertex-array-object.js +204 -306
  152. package/dist/es5/classes/vertex-array-object.js.map +1 -1
  153. package/dist/es5/classes/vertex-array.js +317 -353
  154. package/dist/es5/classes/vertex-array.js.map +1 -1
  155. package/dist/es5/classes/webgl-buffer.js +391 -0
  156. package/dist/es5/classes/webgl-buffer.js.map +1 -0
  157. package/dist/es5/classes/webgl-resource.js +217 -0
  158. package/dist/es5/classes/webgl-resource.js.map +1 -0
  159. package/dist/es5/classes/webgl-shader.js +213 -0
  160. package/dist/es5/classes/webgl-shader.js.map +1 -0
  161. package/dist/es5/context/gl-context.js +46 -0
  162. package/dist/es5/context/gl-context.js.map +1 -0
  163. package/dist/es5/context/luma-context-data.js +12 -0
  164. package/dist/es5/context/luma-context-data.js.map +1 -0
  165. package/dist/es5/debug/debug-program-configuration.js +20 -48
  166. package/dist/es5/debug/debug-program-configuration.js.map +1 -1
  167. package/dist/es5/debug/debug-uniforms.js +72 -114
  168. package/dist/es5/debug/debug-uniforms.js.map +1 -1
  169. package/dist/es5/debug/debug-vertex-array.js +56 -51
  170. package/dist/es5/debug/debug-vertex-array.js.map +1 -1
  171. package/dist/es5/features/check-glsl-extension.js +9 -10
  172. package/dist/es5/features/check-glsl-extension.js.map +1 -1
  173. package/dist/es5/features/check-old-ie.js +5 -6
  174. package/dist/es5/features/check-old-ie.js.map +1 -1
  175. package/dist/es5/features/features.js +23 -37
  176. package/dist/es5/features/features.js.map +1 -1
  177. package/dist/es5/features/index.js +8 -8
  178. package/dist/es5/features/index.js.map +1 -1
  179. package/dist/es5/features/limits.js +36 -28
  180. package/dist/es5/features/limits.js.map +1 -1
  181. package/dist/es5/features/webgl-features-table.js +35 -15
  182. package/dist/es5/features/webgl-features-table.js.map +1 -1
  183. package/dist/es5/features/webgl-limits-table.js +160 -120
  184. package/dist/es5/features/webgl-limits-table.js.map +1 -1
  185. package/dist/es5/index.js +144 -90
  186. package/dist/es5/index.js.map +1 -1
  187. package/dist/es5/init.js +12 -36
  188. package/dist/es5/init.js.map +1 -1
  189. package/dist/es5/types.js +2 -0
  190. package/dist/es5/types.js.map +1 -0
  191. package/dist/es5/utils/array-utils-flat.js +13 -14
  192. package/dist/es5/utils/array-utils-flat.js.map +1 -1
  193. package/dist/es5/utils/assert.js +1 -1
  194. package/dist/es5/utils/assert.js.map +1 -1
  195. package/dist/es5/utils/check-props.js +20 -21
  196. package/dist/es5/utils/check-props.js.map +1 -1
  197. package/dist/es5/utils/format-value.js +14 -14
  198. package/dist/es5/utils/format-value.js.map +1 -1
  199. package/dist/es5/utils/index.js +68 -0
  200. package/dist/es5/utils/index.js.map +1 -0
  201. package/dist/es5/utils/is-old-ie.js +2 -3
  202. package/dist/es5/utils/is-old-ie.js.map +1 -1
  203. package/dist/es5/utils/load-file.js +11 -18
  204. package/dist/es5/utils/load-file.js.map +1 -1
  205. package/dist/es5/utils/stub-methods.js +4 -4
  206. package/dist/es5/utils/stub-methods.js.map +1 -1
  207. package/dist/es5/utils/utils.js +5 -10
  208. package/dist/es5/utils/utils.js.map +1 -1
  209. package/dist/es5/webgl-utils/attribute-utils.js +87 -74
  210. package/dist/es5/webgl-utils/attribute-utils.js.map +1 -1
  211. package/dist/es5/webgl-utils/constants-to-keys.js +7 -7
  212. package/dist/es5/webgl-utils/constants-to-keys.js.map +1 -1
  213. package/dist/es5/webgl-utils/format-utils.js +21 -17
  214. package/dist/es5/webgl-utils/format-utils.js.map +1 -1
  215. package/dist/es5/webgl-utils/get-error.js +18 -18
  216. package/dist/es5/webgl-utils/get-error.js.map +1 -1
  217. package/dist/es5/webgl-utils/index.js +74 -0
  218. package/dist/es5/webgl-utils/index.js.map +1 -0
  219. package/dist/es5/webgl-utils/parse-shader-compiler-log.js +44 -0
  220. package/dist/es5/webgl-utils/parse-shader-compiler-log.js.map +1 -0
  221. package/dist/es5/webgl-utils/request-animation-frame.js.map +1 -1
  222. package/dist/es5/webgl-utils/texture-utils.js +35 -29
  223. package/dist/es5/webgl-utils/texture-utils.js.map +1 -1
  224. package/dist/es5/webgl-utils/typed-array-utils.js +51 -47
  225. package/dist/es5/webgl-utils/typed-array-utils.js.map +1 -1
  226. package/dist/esm/bundle.js +2 -4
  227. package/dist/esm/bundle.js.map +1 -1
  228. package/dist/esm/classes/accessor.js +7 -7
  229. package/dist/esm/classes/accessor.js.map +1 -1
  230. package/dist/esm/classes/accessor.ts.disabled +159 -0
  231. package/dist/esm/classes/clear.js +15 -13
  232. package/dist/esm/classes/clear.js.map +1 -1
  233. package/dist/esm/classes/copy-and-blit.js +41 -43
  234. package/dist/esm/classes/copy-and-blit.js.map +1 -1
  235. package/dist/esm/classes/framebuffer.js +336 -308
  236. package/dist/esm/classes/framebuffer.js.map +1 -1
  237. package/dist/esm/classes/program-configuration.js +17 -9
  238. package/dist/esm/classes/program-configuration.js.map +1 -1
  239. package/dist/esm/classes/program.js +69 -44
  240. package/dist/esm/classes/program.js.map +1 -1
  241. package/dist/esm/classes/query.js +17 -14
  242. package/dist/esm/classes/query.js.map +1 -1
  243. package/dist/esm/classes/renderbuffer-formats.js +72 -49
  244. package/dist/esm/classes/renderbuffer-formats.js.map +1 -1
  245. package/dist/esm/classes/renderbuffer.js +84 -72
  246. package/dist/esm/classes/renderbuffer.js.map +1 -1
  247. package/dist/esm/classes/texture-2d.js +10 -3
  248. package/dist/esm/classes/texture-2d.js.map +1 -1
  249. package/dist/esm/classes/texture-3d.js +14 -11
  250. package/dist/esm/classes/texture-3d.js.map +1 -1
  251. package/dist/esm/classes/texture-cube.js +43 -28
  252. package/dist/esm/classes/texture-cube.js.map +1 -1
  253. package/dist/esm/classes/texture-formats.js +51 -50
  254. package/dist/esm/classes/texture-formats.js.map +1 -1
  255. package/dist/esm/classes/texture.js +164 -49
  256. package/dist/esm/classes/texture.js.map +1 -1
  257. package/dist/esm/classes/transform-feedback.js +24 -13
  258. package/dist/esm/classes/transform-feedback.js.map +1 -1
  259. package/dist/esm/classes/uniform-buffer-layout.js +1 -1
  260. package/dist/esm/classes/uniform-buffer-layout.js.map +1 -1
  261. package/dist/esm/classes/uniforms.js +111 -112
  262. package/dist/esm/classes/uniforms.js.map +1 -1
  263. package/dist/esm/classes/vertex-array-object.js +52 -88
  264. package/dist/esm/classes/vertex-array-object.js.map +1 -1
  265. package/dist/esm/classes/vertex-array.js +50 -28
  266. package/dist/esm/classes/vertex-array.js.map +1 -1
  267. package/dist/esm/classes/webgl-buffer.js +379 -0
  268. package/dist/esm/classes/webgl-buffer.js.map +1 -0
  269. package/dist/esm/classes/webgl-resource.js +208 -0
  270. package/dist/esm/classes/webgl-resource.js.map +1 -0
  271. package/dist/esm/classes/webgl-shader.js +190 -0
  272. package/dist/esm/classes/webgl-shader.js.map +1 -0
  273. package/dist/esm/context/gl-context.js +32 -0
  274. package/dist/esm/context/gl-context.js.map +1 -0
  275. package/dist/esm/context/luma-context-data.js +5 -0
  276. package/dist/esm/context/luma-context-data.js.map +1 -0
  277. package/dist/esm/debug/debug-program-configuration.js +4 -4
  278. package/dist/esm/debug/debug-program-configuration.js.map +1 -1
  279. package/dist/esm/debug/debug-uniforms.js +9 -9
  280. package/dist/esm/debug/debug-uniforms.js.map +1 -1
  281. package/dist/esm/debug/debug-vertex-array.js +19 -17
  282. package/dist/esm/debug/debug-vertex-array.js.map +1 -1
  283. package/dist/esm/features/check-glsl-extension.js +4 -4
  284. package/dist/esm/features/check-glsl-extension.js.map +1 -1
  285. package/dist/esm/features/check-old-ie.js.map +1 -1
  286. package/dist/esm/features/features.js +14 -13
  287. package/dist/esm/features/features.js.map +1 -1
  288. package/dist/esm/features/index.js.map +1 -1
  289. package/dist/esm/features/limits.js +25 -22
  290. package/dist/esm/features/limits.js.map +1 -1
  291. package/dist/esm/features/webgl-features-table.js +6 -6
  292. package/dist/esm/features/webgl-features-table.js.map +1 -1
  293. package/dist/esm/features/webgl-limits-table.js +43 -42
  294. package/dist/esm/features/webgl-limits-table.js.map +1 -1
  295. package/dist/esm/index.js +13 -15
  296. package/dist/esm/index.js.map +1 -1
  297. package/dist/esm/init.js +4 -23
  298. package/dist/esm/init.js.map +1 -1
  299. package/dist/esm/types.js +2 -0
  300. package/dist/esm/types.js.map +1 -0
  301. package/dist/esm/utils/array-utils-flat.js.map +1 -1
  302. package/dist/esm/utils/assert.js +1 -1
  303. package/dist/esm/utils/assert.js.map +1 -1
  304. package/dist/esm/utils/check-props.js +4 -4
  305. package/dist/esm/utils/check-props.js.map +1 -1
  306. package/dist/esm/utils/format-value.js +4 -4
  307. package/dist/esm/utils/format-value.js.map +1 -1
  308. package/dist/esm/utils/index.js +7 -0
  309. package/dist/esm/utils/index.js.map +1 -0
  310. package/dist/esm/utils/is-old-ie.js +1 -1
  311. package/dist/esm/utils/is-old-ie.js.map +1 -1
  312. package/dist/esm/utils/load-file.js +2 -2
  313. package/dist/esm/utils/load-file.js.map +1 -1
  314. package/dist/esm/utils/stub-methods.js +2 -3
  315. package/dist/esm/utils/stub-methods.js.map +1 -1
  316. package/dist/esm/utils/utils.js +1 -3
  317. package/dist/esm/utils/utils.js.map +1 -1
  318. package/dist/esm/webgl-utils/attribute-utils.js +1 -1
  319. package/dist/esm/webgl-utils/attribute-utils.js.map +1 -1
  320. package/dist/esm/webgl-utils/constants-to-keys.js +4 -4
  321. package/dist/esm/webgl-utils/constants-to-keys.js.map +1 -1
  322. package/dist/esm/webgl-utils/format-utils.js +16 -15
  323. package/dist/esm/webgl-utils/format-utils.js.map +1 -1
  324. package/dist/esm/webgl-utils/get-error.js +1 -1
  325. package/dist/esm/webgl-utils/get-error.js.map +1 -1
  326. package/dist/esm/webgl-utils/index.js +5 -0
  327. package/dist/esm/webgl-utils/index.js.map +1 -0
  328. package/dist/esm/webgl-utils/parse-shader-compiler-log.js +37 -0
  329. package/dist/esm/webgl-utils/parse-shader-compiler-log.js.map +1 -0
  330. package/dist/esm/webgl-utils/request-animation-frame.js.map +1 -1
  331. package/dist/esm/webgl-utils/texture-utils.js +4 -3
  332. package/dist/esm/webgl-utils/texture-utils.js.map +1 -1
  333. package/dist/esm/webgl-utils/typed-array-utils.js +19 -18
  334. package/dist/esm/webgl-utils/typed-array-utils.js.map +1 -1
  335. package/dist/features/check-glsl-extension.d.ts +2 -0
  336. package/dist/features/check-glsl-extension.d.ts.map +1 -0
  337. package/dist/features/check-glsl-extension.js +27 -0
  338. package/dist/features/check-glsl-extension.js.map +1 -0
  339. package/dist/features/check-old-ie.d.ts +2 -0
  340. package/dist/features/check-old-ie.d.ts.map +1 -0
  341. package/dist/features/check-old-ie.js +8 -0
  342. package/dist/features/check-old-ie.js.map +1 -0
  343. package/dist/features/features.d.ts +6 -0
  344. package/dist/features/features.d.ts.map +1 -0
  345. package/dist/features/features.js +67 -0
  346. package/dist/features/features.js.map +1 -0
  347. package/dist/features/index.d.ts +5 -0
  348. package/dist/features/index.d.ts.map +1 -0
  349. package/dist/features/index.js +5 -0
  350. package/dist/features/index.js.map +1 -0
  351. package/dist/features/limits.d.ts +28 -0
  352. package/dist/features/limits.d.ts.map +1 -0
  353. package/dist/features/limits.js +55 -0
  354. package/dist/features/limits.js.map +1 -0
  355. package/dist/features/webgl-features-table.d.ts +30 -0
  356. package/dist/features/webgl-features-table.d.ts.map +1 -0
  357. package/dist/features/webgl-features-table.js +71 -0
  358. package/dist/features/webgl-features-table.js.map +1 -0
  359. package/dist/features/webgl-limits-table.d.ts +161 -0
  360. package/dist/features/webgl-limits-table.d.ts.map +1 -0
  361. package/dist/features/webgl-limits-table.js +161 -0
  362. package/dist/features/webgl-limits-table.js.map +1 -0
  363. package/dist/index.d.ts +33 -0
  364. package/dist/index.d.ts.map +1 -0
  365. package/dist/index.js +33 -0
  366. package/dist/index.js.map +1 -0
  367. package/dist/init.d.ts +5 -0
  368. package/dist/init.d.ts.map +1 -0
  369. package/dist/init.js +30 -0
  370. package/dist/init.js.map +1 -0
  371. package/dist/types.d.ts +9 -0
  372. package/dist/types.d.ts.map +1 -0
  373. package/dist/types.js +2 -0
  374. package/dist/types.js.map +1 -0
  375. package/dist/utils/array-utils-flat.d.ts +9 -0
  376. package/dist/utils/array-utils-flat.d.ts.map +1 -0
  377. package/dist/utils/array-utils-flat.js +39 -0
  378. package/dist/utils/array-utils-flat.js.map +1 -0
  379. package/dist/utils/assert.d.ts +2 -0
  380. package/dist/utils/assert.d.ts.map +1 -0
  381. package/dist/utils/assert.js +6 -0
  382. package/dist/utils/assert.js.map +1 -0
  383. package/dist/utils/check-props.d.ts +2 -0
  384. package/dist/utils/check-props.d.ts.map +1 -0
  385. package/dist/utils/check-props.js +38 -0
  386. package/dist/utils/check-props.js.map +1 -0
  387. package/dist/utils/format-value.d.ts +5 -0
  388. package/dist/utils/format-value.d.ts.map +1 -0
  389. package/dist/utils/format-value.js +50 -0
  390. package/dist/utils/format-value.js.map +1 -0
  391. package/dist/utils/index.d.ts +7 -0
  392. package/dist/utils/index.d.ts.map +1 -0
  393. package/dist/utils/index.js +7 -0
  394. package/dist/utils/index.js.map +1 -0
  395. package/dist/utils/is-old-ie.d.ts +4 -0
  396. package/dist/utils/is-old-ie.d.ts.map +1 -0
  397. package/dist/utils/is-old-ie.js +5 -0
  398. package/dist/utils/is-old-ie.js.map +1 -0
  399. package/dist/utils/load-file.d.ts +4 -0
  400. package/dist/utils/load-file.d.ts.map +1 -0
  401. package/dist/utils/load-file.js +30 -0
  402. package/dist/utils/load-file.js.map +1 -0
  403. package/dist/utils/stub-methods.d.ts +2 -0
  404. package/dist/utils/stub-methods.d.ts.map +1 -0
  405. package/dist/utils/stub-methods.js +16 -0
  406. package/dist/utils/stub-methods.js.map +1 -0
  407. package/dist/utils/utils.d.ts +15 -0
  408. package/dist/utils/utils.d.ts.map +1 -0
  409. package/dist/utils/utils.js +20 -0
  410. package/dist/utils/utils.js.map +1 -0
  411. package/dist/webgl-utils/attribute-utils.d.ts +18 -0
  412. package/dist/webgl-utils/attribute-utils.d.ts.map +1 -0
  413. package/dist/webgl-utils/attribute-utils.js +182 -0
  414. package/dist/webgl-utils/attribute-utils.js.map +1 -0
  415. package/dist/webgl-utils/constants-to-keys.d.ts +4 -0
  416. package/dist/webgl-utils/constants-to-keys.d.ts.map +1 -0
  417. package/dist/webgl-utils/constants-to-keys.js +41 -0
  418. package/dist/webgl-utils/constants-to-keys.js.map +1 -0
  419. package/dist/webgl-utils/format-utils.d.ts +3 -0
  420. package/dist/webgl-utils/format-utils.d.ts.map +1 -0
  421. package/dist/webgl-utils/format-utils.js +45 -0
  422. package/dist/webgl-utils/format-utils.js.map +1 -0
  423. package/dist/webgl-utils/get-error.d.ts +3 -0
  424. package/dist/webgl-utils/get-error.d.ts.map +1 -0
  425. package/dist/webgl-utils/get-error.js +41 -0
  426. package/dist/webgl-utils/get-error.js.map +1 -0
  427. package/dist/webgl-utils/index.d.ts +5 -0
  428. package/dist/webgl-utils/index.d.ts.map +1 -0
  429. package/dist/webgl-utils/index.js +5 -0
  430. package/dist/webgl-utils/index.js.map +1 -0
  431. package/dist/webgl-utils/parse-shader-compiler-log.d.ts +8 -0
  432. package/dist/webgl-utils/parse-shader-compiler-log.d.ts.map +1 -0
  433. package/dist/webgl-utils/parse-shader-compiler-log.js +37 -0
  434. package/dist/webgl-utils/parse-shader-compiler-log.js.map +1 -0
  435. package/dist/webgl-utils/request-animation-frame.d.ts +4 -0
  436. package/dist/webgl-utils/request-animation-frame.d.ts.map +1 -0
  437. package/dist/webgl-utils/request-animation-frame.js +7 -0
  438. package/dist/webgl-utils/request-animation-frame.js.map +1 -0
  439. package/dist/webgl-utils/texture-utils.d.ts +11 -0
  440. package/dist/webgl-utils/texture-utils.d.ts.map +1 -0
  441. package/dist/webgl-utils/texture-utils.js +48 -0
  442. package/dist/webgl-utils/texture-utils.js.map +1 -0
  443. package/dist/webgl-utils/typed-array-utils.d.ts +36 -0
  444. package/dist/webgl-utils/typed-array-utils.d.ts.map +1 -0
  445. package/dist/webgl-utils/typed-array-utils.js +108 -0
  446. package/dist/webgl-utils/typed-array-utils.js.map +1 -0
  447. package/package.json +9 -8
  448. package/src/bundle.ts +4 -0
  449. package/src/classes/accessor.js +3 -4
  450. package/src/classes/accessor.ts.disabled +159 -0
  451. package/src/classes/{clear.js → clear.ts} +13 -9
  452. package/src/classes/{copy-and-blit.js → copy-and-blit.ts} +113 -22
  453. package/src/classes/{framebuffer.js → framebuffer.ts} +355 -298
  454. package/src/classes/{program-configuration.js → program-configuration.ts} +18 -11
  455. package/src/classes/{program.js → program.ts} +56 -36
  456. package/src/classes/{query.js → query.ts} +28 -22
  457. package/src/classes/{renderbuffer-formats.js → renderbuffer-formats.ts} +42 -14
  458. package/src/classes/renderbuffer.ts +153 -0
  459. package/src/classes/{texture-2d.js → texture-2d.ts} +15 -5
  460. package/src/classes/{texture-3d.js → texture-3d.ts} +35 -10
  461. package/src/classes/{texture-cube.js → texture-cube.ts} +46 -28
  462. package/src/classes/{texture-formats.js → texture-formats.ts} +9 -1
  463. package/src/classes/{texture.js → texture.ts} +204 -37
  464. package/src/classes/{transform-feedback.js → transform-feedback.ts} +22 -14
  465. package/src/classes/{uniform-buffer-layout.js → uniform-buffer-layout.ts} +10 -6
  466. package/src/classes/{uniforms.js → uniforms.ts} +122 -70
  467. package/src/classes/{vertex-array-object.js → vertex-array-object.ts} +132 -107
  468. package/src/classes/{vertex-array.js → vertex-array.ts} +74 -54
  469. package/src/classes/{buffer.js → webgl-buffer.ts} +125 -51
  470. package/src/classes/{resource.js → webgl-resource.ts} +43 -36
  471. package/src/classes/webgl-shader.ts +200 -0
  472. package/src/context/gl-context.ts +31 -0
  473. package/src/context/luma-context-data.ts +27 -0
  474. package/src/debug/{debug-program-configuration.js → debug-program-configuration.ts} +0 -0
  475. package/src/debug/{debug-uniforms.js → debug-uniforms.ts} +18 -8
  476. package/src/debug/{debug-vertex-array.js → debug-vertex-array.ts} +7 -4
  477. package/src/features/{check-glsl-extension.js → check-glsl-extension.ts} +1 -1
  478. package/src/features/{check-old-ie.js → check-old-ie.ts} +0 -0
  479. package/src/features/{features.js → features.ts} +14 -13
  480. package/src/features/{index.js → index.ts} +0 -0
  481. package/src/features/{limits.js → limits.ts} +18 -17
  482. package/src/features/{webgl-features-table.js → webgl-features-table.ts} +0 -0
  483. package/src/features/{webgl-limits-table.js → webgl-limits-table.ts} +0 -0
  484. package/{dist/es5/index.d.ts → src/index.ts} +18 -16
  485. package/src/{init.js → init.ts} +1 -18
  486. package/{dist/es5/types.d.ts → src/types.ts} +0 -0
  487. package/src/utils/{array-utils-flat.js → array-utils-flat.ts} +0 -0
  488. package/src/utils/{assert.js → assert.ts} +1 -1
  489. package/src/utils/{check-props.js → check-props.ts} +0 -0
  490. package/src/utils/{format-value.js → format-value.ts} +2 -2
  491. package/src/utils/index.ts +6 -0
  492. package/src/utils/{is-old-ie.js → is-old-ie.ts} +1 -1
  493. package/src/utils/{load-file.js → load-file.ts} +3 -2
  494. package/src/utils/{stub-methods.js → stub-methods.ts} +1 -1
  495. package/src/utils/utils.ts +35 -0
  496. package/src/webgl-utils/{attribute-utils.js → attribute-utils.ts} +1 -2
  497. package/src/webgl-utils/{constants-to-keys.js → constants-to-keys.ts} +1 -1
  498. package/src/webgl-utils/{format-utils.js → format-utils.ts} +1 -1
  499. package/src/webgl-utils/{get-error.js → get-error.ts} +0 -0
  500. package/src/webgl-utils/index.ts +12 -0
  501. package/src/webgl-utils/parse-shader-compiler-log.ts +48 -0
  502. package/src/webgl-utils/{request-animation-frame.js → request-animation-frame.ts} +3 -2
  503. package/src/webgl-utils/texture-utils.js +2 -1
  504. package/dist/dist.js +0 -13555
  505. package/dist/dist.min.js +0 -1
  506. package/dist/es5/classes/buffer.d.ts +0 -84
  507. package/dist/es5/classes/buffer.js +0 -453
  508. package/dist/es5/classes/buffer.js.map +0 -1
  509. package/dist/es5/classes/clear.d.ts +0 -11
  510. package/dist/es5/classes/copy-and-blit.d.ts +0 -101
  511. package/dist/es5/classes/framebuffer.d.ts +0 -96
  512. package/dist/es5/classes/program-configuration.d.ts +0 -15
  513. package/dist/es5/classes/program.d.ts +0 -44
  514. package/dist/es5/classes/query.d.ts +0 -21
  515. package/dist/es5/classes/renderbuffer.d.ts +0 -34
  516. package/dist/es5/classes/resource.d.ts +0 -47
  517. package/dist/es5/classes/resource.js +0 -308
  518. package/dist/es5/classes/resource.js.map +0 -1
  519. package/dist/es5/classes/shader.d.ts +0 -29
  520. package/dist/es5/classes/shader.js +0 -221
  521. package/dist/es5/classes/shader.js.map +0 -1
  522. package/dist/es5/classes/texture-2d.d.ts +0 -11
  523. package/dist/es5/classes/texture-3d.d.ts +0 -29
  524. package/dist/es5/classes/texture-cube.d.ts +0 -23
  525. package/dist/es5/classes/texture.d.ts +0 -80
  526. package/dist/es5/classes/transform-feedback.d.ts +0 -16
  527. package/dist/es5/classes/uniform-buffer-layout.d.ts +0 -18
  528. package/dist/es5/classes/uniforms.d.ts +0 -63
  529. package/dist/es5/classes/vertex-array-object.d.ts +0 -25
  530. package/dist/es5/classes/vertex-array.d.ts +0 -37
  531. package/dist/es5/debug/debug-program-configuration.d.ts +0 -1
  532. package/dist/es5/debug/debug-uniforms.d.ts +0 -11
  533. package/dist/es5/debug/debug-vertex-array.d.ts +0 -1
  534. package/dist/es5/glsl-utils/format-glsl-error.d.ts +0 -16
  535. package/dist/es5/glsl-utils/format-glsl-error.js +0 -108
  536. package/dist/es5/glsl-utils/format-glsl-error.js.map +0 -1
  537. package/dist/es5/glsl-utils/get-shader-name.js +0 -14
  538. package/dist/es5/glsl-utils/get-shader-name.js.map +0 -1
  539. package/dist/es5/glsl-utils/get-shader-type-name.js +0 -22
  540. package/dist/es5/glsl-utils/get-shader-type-name.js.map +0 -1
  541. package/dist/es5/glsl-utils/get-shader-version.js +0 -22
  542. package/dist/es5/glsl-utils/get-shader-version.js.map +0 -1
  543. package/dist/es5/glsl-utils/index.js +0 -48
  544. package/dist/es5/glsl-utils/index.js.map +0 -1
  545. package/dist/es5/init.d.ts +0 -12
  546. package/dist/es5/utils/assert.d.ts +0 -1
  547. package/dist/es5/utils/is-old-ie.d.ts +0 -1
  548. package/dist/es5/utils/utils.d.ts +0 -13
  549. package/dist/es5/webgl-utils/request-animation-frame.d.ts +0 -3
  550. package/dist/esm/classes/buffer.d.ts +0 -84
  551. package/dist/esm/classes/buffer.js.map +0 -1
  552. package/dist/esm/classes/clear.d.ts +0 -11
  553. package/dist/esm/classes/copy-and-blit.d.ts +0 -101
  554. package/dist/esm/classes/framebuffer.d.ts +0 -96
  555. package/dist/esm/classes/program-configuration.d.ts +0 -15
  556. package/dist/esm/classes/program.d.ts +0 -44
  557. package/dist/esm/classes/query.d.ts +0 -21
  558. package/dist/esm/classes/renderbuffer.d.ts +0 -34
  559. package/dist/esm/classes/resource.d.ts +0 -47
  560. package/dist/esm/classes/resource.js.map +0 -1
  561. package/dist/esm/classes/shader.d.ts +0 -29
  562. package/dist/esm/classes/shader.js +0 -138
  563. package/dist/esm/classes/shader.js.map +0 -1
  564. package/dist/esm/classes/texture-2d.d.ts +0 -11
  565. package/dist/esm/classes/texture-3d.d.ts +0 -29
  566. package/dist/esm/classes/texture-cube.d.ts +0 -23
  567. package/dist/esm/classes/texture.d.ts +0 -80
  568. package/dist/esm/classes/transform-feedback.d.ts +0 -16
  569. package/dist/esm/classes/uniform-buffer-layout.d.ts +0 -18
  570. package/dist/esm/classes/uniforms.d.ts +0 -63
  571. package/dist/esm/classes/vertex-array-object.d.ts +0 -25
  572. package/dist/esm/classes/vertex-array.d.ts +0 -37
  573. package/dist/esm/debug/debug-program-configuration.d.ts +0 -1
  574. package/dist/esm/debug/debug-uniforms.d.ts +0 -11
  575. package/dist/esm/debug/debug-vertex-array.d.ts +0 -1
  576. package/dist/esm/glsl-utils/format-glsl-error.d.ts +0 -16
  577. package/dist/esm/glsl-utils/format-glsl-error.js +0 -93
  578. package/dist/esm/glsl-utils/format-glsl-error.js.map +0 -1
  579. package/dist/esm/glsl-utils/get-shader-name.js +0 -6
  580. package/dist/esm/glsl-utils/get-shader-name.js.map +0 -1
  581. package/dist/esm/glsl-utils/get-shader-type-name.js +0 -15
  582. package/dist/esm/glsl-utils/get-shader-type-name.js.map +0 -1
  583. package/dist/esm/glsl-utils/get-shader-version.js +0 -15
  584. package/dist/esm/glsl-utils/get-shader-version.js.map +0 -1
  585. package/dist/esm/glsl-utils/index.js +0 -5
  586. package/dist/esm/glsl-utils/index.js.map +0 -1
  587. package/dist/esm/index.d.ts +0 -71
  588. package/dist/esm/init.d.ts +0 -12
  589. package/dist/esm/types.d.ts +0 -8
  590. package/dist/esm/utils/assert.d.ts +0 -1
  591. package/dist/esm/utils/is-old-ie.d.ts +0 -1
  592. package/dist/esm/utils/utils.d.ts +0 -13
  593. package/dist/esm/webgl-utils/request-animation-frame.d.ts +0 -3
  594. package/src/bundle.js +0 -8
  595. package/src/classes/buffer.d.ts +0 -84
  596. package/src/classes/clear.d.ts +0 -11
  597. package/src/classes/copy-and-blit.d.ts +0 -101
  598. package/src/classes/framebuffer.d.ts +0 -96
  599. package/src/classes/program-configuration.d.ts +0 -15
  600. package/src/classes/program.d.ts +0 -44
  601. package/src/classes/query.d.ts +0 -21
  602. package/src/classes/renderbuffer.d.ts +0 -34
  603. package/src/classes/renderbuffer.js +0 -105
  604. package/src/classes/resource.d.ts +0 -47
  605. package/src/classes/shader.d.ts +0 -29
  606. package/src/classes/shader.js +0 -147
  607. package/src/classes/texture-2d.d.ts +0 -11
  608. package/src/classes/texture-3d.d.ts +0 -29
  609. package/src/classes/texture-cube.d.ts +0 -23
  610. package/src/classes/texture.d.ts +0 -80
  611. package/src/classes/transform-feedback.d.ts +0 -16
  612. package/src/classes/uniform-buffer-layout.d.ts +0 -18
  613. package/src/classes/uniforms.d.ts +0 -63
  614. package/src/classes/vertex-array-object.d.ts +0 -25
  615. package/src/classes/vertex-array.d.ts +0 -37
  616. package/src/debug/debug-program-configuration.d.ts +0 -1
  617. package/src/debug/debug-uniforms.d.ts +0 -11
  618. package/src/debug/debug-vertex-array.d.ts +0 -1
  619. package/src/glsl-utils/format-glsl-error.d.ts +0 -16
  620. package/src/glsl-utils/format-glsl-error.js +0 -107
  621. package/src/glsl-utils/get-shader-name.js +0 -7
  622. package/src/glsl-utils/get-shader-type-name.js +0 -13
  623. package/src/glsl-utils/get-shader-version.js +0 -12
  624. package/src/glsl-utils/index.js +0 -8
  625. package/src/index.d.ts +0 -71
  626. package/src/index.js +0 -70
  627. package/src/init.d.ts +0 -12
  628. package/src/types.d.ts +0 -8
  629. package/src/utils/assert.d.ts +0 -1
  630. package/src/utils/is-old-ie.d.ts +0 -1
  631. package/src/utils/utils.d.ts +0 -13
  632. package/src/utils/utils.js +0 -36
  633. package/src/webgl-utils/request-animation-frame.d.ts +0 -3
@@ -1,86 +1,310 @@
1
1
  import GL from '@luma.gl/constants';
2
2
  import {getWebGL2Context, assertWebGL2Context, log} from '@luma.gl/gltools';
3
- import Resource from './resource';
3
+ import Resource, {ResourceProps} from './webgl-resource';
4
4
  import Texture2D from './texture-2d';
5
5
  import Renderbuffer from './renderbuffer';
6
6
  import {clear, clearBuffer} from './clear';
7
- import {copyToDataUrl} from './copy-and-blit.js';
7
+ import {copyToDataUrl} from './copy-and-blit';
8
8
 
9
+ import {getLumaContextData} from '../context/luma-context-data';
9
10
  import {getFeatures} from '../features';
10
- import {getKey} from '../webgl-utils/constants-to-keys';
11
- import {assert} from '../utils/assert';
11
+ import {getKey} from '../webgl-utils';
12
+ import {assert} from '../utils';
12
13
 
13
14
  const ERR_MULTIPLE_RENDERTARGETS = 'Multiple render targets not supported';
14
15
 
15
- export default class Framebuffer extends Resource {
16
- static isSupported(gl, options = {}) {
17
- const {
18
- colorBufferFloat, // Whether floating point textures can be rendered and read
19
- colorBufferHalfFloat // Whether half float textures can be rendered and read
20
- } = options;
21
- let supported = true;
16
+ type TextureAttachment = {
17
+ texture: Texture2D;
18
+ layer?: number; // = 0
19
+ level?: number; // = 0
20
+ };
21
+
22
+ type Attachment = Renderbuffer | Texture2D | TextureAttachment;
23
+
24
+ export type ImmutableFramebufferProps = ResourceProps & {
25
+ attachments?: Record<string, Attachment>;
26
+ readBuffer?: number;
27
+ drawBuffers?: number[];
28
+ check?: boolean;
29
+ };
30
+
31
+ export type FramebufferProps = ImmutableFramebufferProps & {
32
+ width?: number;
33
+ height?: number;
34
+ color?: boolean;
35
+ depth?: boolean;
36
+ stencil?: boolean;
37
+ };
38
+
39
+ type colorBufferFloatOptions = {colorBufferFloat?: boolean; colorBufferHalfFloat?: boolean};
40
+
41
+ export class ImmutableFramebuffer extends Resource<FramebufferProps> {
42
+ constructor(gl: WebGLRenderingContext, props?: FramebufferProps) {
43
+ super(gl, props, {} as any);
44
+ this._initialize({
45
+ attachments: props?.attachments || {},
46
+ readBuffer: props?.readBuffer,
47
+ drawBuffers: props?.drawBuffers
48
+ });
49
+ }
22
50
 
23
- if (colorBufferFloat) {
24
- supported = Boolean(
25
- // WebGL 2
26
- gl.getExtension('EXT_color_buffer_float') ||
27
- // WebGL 1, not exposed on all platforms
28
- gl.getExtension('WEBGL_color_buffer_float') ||
29
- // WebGL 1, implicitly enables float render targets https://www.khronos.org/registry/webgl/extensions/OES_texture_float/
30
- gl.getExtension('OES_texture_float')
51
+ checkStatus(): this {
52
+ const {gl} = this;
53
+ const status = this.getStatus();
54
+ if (status !== gl.FRAMEBUFFER_COMPLETE) {
55
+ throw new Error(_getFrameBufferStatus(status));
56
+ }
57
+ return this;
58
+ }
59
+
60
+ getStatus(): number {
61
+ const {gl} = this;
62
+ const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
63
+ const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);
64
+ // @ts-ignore
65
+ gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
66
+ return status;
67
+ }
68
+
69
+ // DEBUG
70
+
71
+ // Note: Will only work when called in an event handler
72
+ show() {
73
+ if (typeof window !== 'undefined') {
74
+ window.open(copyToDataUrl(this), 'luma-debug-texture');
75
+ }
76
+ return this;
77
+ }
78
+
79
+ log(logLevel = 0, message = '') {
80
+ if (logLevel > log.level || typeof window === 'undefined') {
81
+ return this;
82
+ }
83
+ message = message || `Framebuffer ${this.id}`;
84
+ const image = copyToDataUrl(this, {targetMaxHeight: 100});
85
+ log.image({logLevel, message, image}, message)();
86
+ return this;
87
+ }
88
+
89
+ // WEBGL INTERFACE
90
+ bind({target = GL.FRAMEBUFFER} = {}) {
91
+ this.gl.bindFramebuffer(target, this.handle);
92
+ return this;
93
+ }
94
+
95
+ unbind({target = GL.FRAMEBUFFER} = {}) {
96
+ this.gl.bindFramebuffer(target, null);
97
+ return this;
98
+ }
99
+
100
+ // PRIVATE
101
+
102
+ _initialize(options: {attachments: Record<string, Attachment>; readBuffer?: number; drawBuffers?: number[]}): this {
103
+ const {attachments = {}, readBuffer, drawBuffers} = options;
104
+
105
+ this._attach(attachments);
106
+
107
+ // Multiple render target support, set read buffer and draw buffers
108
+ const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
109
+ if (readBuffer) {
110
+ this._setReadBuffer(readBuffer);
111
+ }
112
+ if (drawBuffers) {
113
+ this._setDrawBuffers(drawBuffers);
114
+ }
115
+ // @ts-ignore
116
+ this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
117
+
118
+ return this;
119
+ }
120
+
121
+ /** Attach from a map of attachments */
122
+ _attach(attachments: Record<string, Attachment>) {
123
+ const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
124
+
125
+ // Walk the attachments
126
+ for (const key in attachments) {
127
+ // Ensure key is not undefined
128
+ assert(key !== undefined, 'Misspelled framebuffer binding point?');
129
+ const attachmentPoint = Number(key) as GL;
130
+ const attachment = attachments[attachmentPoint];
131
+ this._attachOne(attachmentPoint, attachment);
132
+ }
133
+
134
+ // @ts-ignore
135
+ this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
136
+ }
137
+
138
+ /** Attach one attachment */
139
+ _attachOne(attachmentPoint: GL, attachment: Attachment): Renderbuffer | Texture2D {
140
+ if (attachment instanceof Renderbuffer) {
141
+ this._attachRenderbuffer(attachmentPoint, attachment);
142
+ return attachment;
143
+ } else if (Array.isArray(attachment)) {
144
+ const [texture, layer = 0, level = 0] = attachment;
145
+ this._attachTexture(attachmentPoint, texture, layer, level);
146
+ return texture;
147
+ } else if (attachment instanceof Texture2D) {
148
+ this._attachTexture(attachmentPoint, attachment, 0, 0);
149
+ return attachment;
150
+ }
151
+ }
152
+
153
+ _attachRenderbuffer(attachment: GL, renderbuffer: Renderbuffer): void {
154
+ this.gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, renderbuffer.handle);
155
+ }
156
+
157
+ /**
158
+ * @param attachment
159
+ * @param texture
160
+ * @param layer = 0 - index into Texture2DArray and Texture3D or face for `TextureCubeMap`
161
+ * @param level = 0 - mipmapLevel (must be 0 in WebGL1)
162
+ */
163
+ _attachTexture(attachment: GL, texture: Texture2D, layer: number, level: number): void {
164
+ const {gl} = this;
165
+ gl.bindTexture(texture.target, texture.handle);
166
+
167
+ switch (texture.target) {
168
+ case GL.TEXTURE_2D_ARRAY:
169
+ case GL.TEXTURE_3D:
170
+ const gl2 = assertWebGL2Context(gl);
171
+ gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
172
+ break;
173
+
174
+ case GL.TEXTURE_CUBE_MAP:
175
+ // layer must be a cubemap face (or if index, converted to cube map face)
176
+ const face = mapIndexToCubeMapFace(layer);
177
+ gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);
178
+ break;
179
+
180
+ case GL.TEXTURE_2D:
181
+ gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);
182
+ break;
183
+
184
+ default:
185
+ assert(false, 'Illegal texture type');
186
+ }
187
+
188
+ gl.bindTexture(texture.target, null);
189
+ }
190
+
191
+ /** @note Expects framebuffer to be bound */
192
+ _setReadBuffer(readBuffer: number): void {
193
+ const gl2 = getWebGL2Context(this.gl);
194
+ if (gl2) {
195
+ gl2.readBuffer(readBuffer);
196
+ } else {
197
+ // Setting to color attachment 0 is a noop, so allow it in WebGL1
198
+ assert(
199
+ readBuffer === GL.COLOR_ATTACHMENT0 || readBuffer === GL.BACK,
200
+ ERR_MULTIPLE_RENDERTARGETS
31
201
  );
32
202
  }
203
+ }
33
204
 
34
- if (colorBufferHalfFloat) {
35
- supported =
36
- supported &&
37
- Boolean(
38
- // WebGL 2
39
- gl.getExtension('EXT_color_buffer_float') ||
40
- // WebGL 1
41
- gl.getExtension('EXT_color_buffer_half_float')
205
+ /** @note Expects framebuffer to be bound */
206
+ _setDrawBuffers(drawBuffers: number[]) {
207
+ const {gl} = this;
208
+ const gl2 = assertWebGL2Context(gl);
209
+ if (gl2) {
210
+ gl2.drawBuffers(drawBuffers);
211
+ } else {
212
+ // TODO - is this not handled by polyfills?
213
+ const ext = gl.getExtension('WEBGL_draw_buffers');
214
+ if (ext) {
215
+ ext.drawBuffersWEBGL(drawBuffers);
216
+ } else {
217
+ // Setting a single draw buffer to color attachment 0 is a noop, allow in WebGL1
218
+ assert(
219
+ drawBuffers.length === 1 &&
220
+ (drawBuffers[0] === GL.COLOR_ATTACHMENT0 || drawBuffers[0] === GL.BACK),
221
+ ERR_MULTIPLE_RENDERTARGETS
42
222
  );
223
+ }
43
224
  }
225
+ }
226
+
227
+ // RESOURCE METHODS
44
228
 
45
- return supported;
229
+ _createHandle() {
230
+ return this.gl.createFramebuffer();
46
231
  }
47
232
 
48
- // Create a Framebuffer wrapper for the default framebuffer (target === null)
49
- static getDefaultFramebuffer(gl) {
50
- gl.luma = gl.luma || {};
51
- gl.luma.defaultFramebuffer =
52
- gl.luma.defaultFramebuffer ||
233
+ _deleteHandle() {
234
+ this.gl.deleteFramebuffer(this.handle);
235
+ }
236
+
237
+ _bindHandle(handle) {
238
+ return this.gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
239
+ }
240
+ }
241
+
242
+ export default class Framebuffer extends ImmutableFramebuffer {
243
+ width = null;
244
+ height = null;
245
+ attachments = {};
246
+ readBuffer = GL.COLOR_ATTACHMENT0;
247
+ drawBuffers = [GL.COLOR_ATTACHMENT0];
248
+ ownResources = [];
249
+
250
+ static readonly FRAMEBUFFER_ATTACHMENT_PARAMETERS = [
251
+ GL.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, // WebGLRenderbuffer or WebGLTexture
252
+ GL.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, // GL.RENDERBUFFER, GL.TEXTURE, GL.NONE
253
+ // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, // GL.TEXTURE_CUBE_MAP_POSITIVE_X, etc.
254
+ // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, // GLint
255
+ // EXT_sRGB or WebGL2
256
+ GL.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, // GL.LINEAR, GL.SRBG
257
+ // WebGL2
258
+ // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER, // GLint
259
+ GL.FRAMEBUFFER_ATTACHMENT_RED_SIZE, // GLint
260
+ GL.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, // GLint
261
+ GL.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, // GLint
262
+ GL.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, // GLint
263
+ GL.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, // GLint
264
+ GL.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE // GLint
265
+ // GL.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE
266
+ // GL.FLOAT, GL.INT, GL.UNSIGNED_INT, GL.SIGNED_NORMALIZED, OR GL.UNSIGNED_NORMALIZED.
267
+ ];
268
+
269
+ /**
270
+ * Check color buffer float support
271
+ * @param options.colorBufferFloat Whether floating point textures can be rendered and read
272
+ * @param options.colorBufferHalfFloat Whether half float textures can be rendered and read
273
+ */
274
+ static isSupported(gl: WebGLRenderingContext, options: colorBufferFloatOptions): boolean {
275
+ return isFloatColorBufferSupported(gl, options);
276
+ }
277
+
278
+ /**
279
+ * returns the default Framebuffer
280
+ * Creates a Framebuffer object wrapper for the default WebGL framebuffer (target === null)
281
+ */
282
+ static getDefaultFramebuffer(gl: WebGLRenderingContext): Framebuffer {
283
+ const lumaContextData = getLumaContextData(gl);
284
+ lumaContextData.defaultFramebuffer =
285
+ lumaContextData.defaultFramebuffer ||
53
286
  new Framebuffer(gl, {
54
287
  id: 'default-framebuffer',
55
288
  handle: null,
56
289
  attachments: {}
57
290
  });
58
291
  // TODO - can we query for and get a handle to the GL.FRONT renderbuffer?
59
- return gl.luma.defaultFramebuffer;
292
+ return lumaContextData.defaultFramebuffer;
60
293
  }
61
294
 
62
- get MAX_COLOR_ATTACHMENTS() {
295
+ get MAX_COLOR_ATTACHMENTS(): number {
63
296
  const gl2 = assertWebGL2Context(this.gl);
64
297
  return gl2.getParameter(gl2.MAX_COLOR_ATTACHMENTS);
65
298
  }
66
299
 
67
- get MAX_DRAW_BUFFERS() {
300
+ get MAX_DRAW_BUFFERS(): number {
68
301
  const gl2 = assertWebGL2Context(this.gl);
69
302
  return gl2.getParameter(gl2.MAX_DRAW_BUFFERS);
70
303
  }
71
304
 
72
- constructor(gl, opts = {}) {
73
- super(gl, opts);
74
-
75
- // Public members
76
- this.width = null;
77
- this.height = null;
78
- this.attachments = {};
79
- this.readBuffer = GL.COLOR_ATTACHMENT0;
80
- this.drawBuffers = [GL.COLOR_ATTACHMENT0];
81
- this.ownResources = [];
82
- this.initialize(opts);
83
-
305
+ constructor(gl: WebGLRenderingContext, props?: FramebufferProps) {
306
+ super(gl, props);
307
+ this.initialize(props);
84
308
  Object.seal(this);
85
309
  }
86
310
 
@@ -106,17 +330,19 @@ export default class Framebuffer extends Resource {
106
330
  );
107
331
  }
108
332
 
109
- initialize({
110
- width = 1,
111
- height = 1,
112
- attachments = null,
113
- color = true,
114
- depth = true,
115
- stencil = false,
116
- check = true,
117
- readBuffer = undefined,
118
- drawBuffers = undefined
119
- }) {
333
+ // initialize(props?: FramebufferProps): this;
334
+ initialize(props: FramebufferProps) {
335
+ let {attachments = null} = props || {};
336
+ const {
337
+ width = 1,
338
+ height = 1,
339
+ color = true,
340
+ depth = true,
341
+ stencil = false,
342
+ check = true,
343
+ readBuffer = undefined,
344
+ drawBuffers = undefined
345
+ } = props || {};
120
346
  assert(width >= 0 && height >= 0, 'Width and height need to be integers');
121
347
 
122
348
  // Store actual width and height for diffing
@@ -144,7 +370,7 @@ export default class Framebuffer extends Resource {
144
370
  }
145
371
  }
146
372
 
147
- delete() {
373
+ delete(): this {
148
374
  for (const resource of this.ownResources) {
149
375
  resource.delete();
150
376
  }
@@ -152,13 +378,22 @@ export default class Framebuffer extends Resource {
152
378
  return this;
153
379
  }
154
380
 
155
- update({
156
- attachments = {},
157
- readBuffer,
158
- drawBuffers,
159
- clearAttachments = false,
160
- resizeAttachments = true
161
- }) {
381
+ update(options: {
382
+ attachments: Record<string, Attachment>,
383
+ readBuffer?: number,
384
+ drawBuffers?,
385
+ clearAttachments?: boolean,
386
+ resizeAttachments?: boolean
387
+ }): this {
388
+
389
+ const {
390
+ attachments = {},
391
+ readBuffer,
392
+ drawBuffers,
393
+ clearAttachments = false,
394
+ resizeAttachments = true
395
+ } = options;
396
+
162
397
  this.attach(attachments, {clearAttachments, resizeAttachments});
163
398
 
164
399
  const {gl} = this;
@@ -166,9 +401,11 @@ export default class Framebuffer extends Resource {
166
401
  const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
167
402
  if (readBuffer) {
168
403
  this._setReadBuffer(readBuffer);
404
+ this.readBuffer = readBuffer;
169
405
  }
170
406
  if (drawBuffers) {
171
407
  this._setDrawBuffers(drawBuffers);
408
+ this.drawBuffers = drawBuffers;
172
409
  }
173
410
  // @ts-ignore
174
411
  gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
@@ -177,8 +414,8 @@ export default class Framebuffer extends Resource {
177
414
  }
178
415
 
179
416
  // Attachment resize is expected to be a noop if size is same
180
- resize(options = {}) {
181
- let {width, height} = options;
417
+ resize(size?: {width?: number; height?: number}): this {
418
+ let {width, height} = size || {};
182
419
  // for default framebuffer, just update the stored size
183
420
  if (this.handle === null) {
184
421
  assert(width === undefined && height === undefined);
@@ -211,7 +448,7 @@ export default class Framebuffer extends Resource {
211
448
 
212
449
  // Any current attachments need to be removed, add null values to map
213
450
  if (clearAttachments) {
214
- Object.keys(this.attachments).forEach(key => {
451
+ Object.keys(this.attachments).forEach((key) => {
215
452
  newAttachments[key] = null;
216
453
  });
217
454
  }
@@ -232,14 +469,9 @@ export default class Framebuffer extends Resource {
232
469
  let object = descriptor;
233
470
  if (!object) {
234
471
  this._unattach(attachment);
235
- } else if (object instanceof Renderbuffer) {
236
- this._attachRenderbuffer({attachment, renderbuffer: object});
237
- } else if (Array.isArray(descriptor)) {
238
- const [texture, layer = 0, level = 0] = descriptor;
239
- object = texture;
240
- this._attachTexture({attachment, texture, layer, level});
241
472
  } else {
242
- this._attachTexture({attachment, texture: object, layer: 0, level: 0});
473
+ object = this._attachOne(attachment, object);
474
+ this.attachments[attachment] = object;
243
475
  }
244
476
 
245
477
  // Resize objects
@@ -254,31 +486,13 @@ export default class Framebuffer extends Resource {
254
486
  // Assign to attachments and remove any nulls to get a clean attachment map
255
487
  Object.assign(this.attachments, attachments);
256
488
  Object.keys(this.attachments)
257
- .filter(key => !this.attachments[key])
258
- .forEach(key => {
489
+ .filter((key) => !this.attachments[key])
490
+ .forEach((key) => {
259
491
  delete this.attachments[key];
260
492
  });
261
493
  }
262
494
 
263
- checkStatus() {
264
- const {gl} = this;
265
- const status = this.getStatus();
266
- if (status !== gl.FRAMEBUFFER_COMPLETE) {
267
- throw new Error(_getFrameBufferStatus(status));
268
- }
269
- return this;
270
- }
271
-
272
- getStatus() {
273
- const {gl} = this;
274
- const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
275
- const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);
276
- // @ts-ignore
277
- gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
278
- return status;
279
- }
280
-
281
- clear(options = {}) {
495
+ clear(options?: {color?: any; depth?: any; stencil?: any; drawBuffers?: any[]}): this {
282
496
  const {color, depth, stencil, drawBuffers = []} = options;
283
497
 
284
498
  // Bind framebuffer and delegate to global clear functions
@@ -298,60 +512,6 @@ export default class Framebuffer extends Resource {
298
512
  return this;
299
513
  }
300
514
 
301
- // NOTE: Slow requires roundtrip to GPU
302
- // App can provide pixelArray or have it auto allocated by this method
303
- // @returns {Uint8Array|Uint16Array|FloatArray} - pixel array,
304
- // newly allocated by this method unless provided by app.
305
- readPixels(opts = {}) {
306
- log.error(
307
- 'Framebuffer.readPixels() is no logner supported, use readPixelsToArray(framebuffer)'
308
- )();
309
- return null;
310
- }
311
-
312
- // Reads data into provided buffer object asynchronously
313
- // This function doesn't wait for copy to be complete, it programs GPU to perform a DMA transffer.
314
- readPixelsToBuffer(opts = {}) {
315
- log.error(
316
- 'Framebuffer.readPixelsToBuffer()is no logner supported, use readPixelsToBuffer(framebuffer)'
317
- )();
318
- return null;
319
- }
320
-
321
- // Reads pixels as a dataUrl
322
- copyToDataUrl(opts = {}) {
323
- log.error(
324
- 'Framebuffer.copyToDataUrl() is no logner supported, use copyToDataUrl(framebuffer)'
325
- )();
326
- return null;
327
- }
328
-
329
- // Reads pixels into an HTML Image
330
- copyToImage(opts = {}) {
331
- log.error('Framebuffer.copyToImage() is no logner supported, use copyToImage(framebuffer)')();
332
- return null;
333
- }
334
-
335
- // copyToFramebuffer({width, height}) {
336
- // const scaleX = width / this.width;
337
- // const scaleY = height / this.height;
338
- // const scale = Math.min(scaleX, scaleY);
339
- // width = width * scale;
340
- // height = height * scale;
341
- // const scaledFramebuffer = new Framebuffer(this.gl, {width, height});
342
- // this.blit();
343
- // }
344
-
345
- // Copy a rectangle from a framebuffer attachment into a texture (at an offset)
346
- // NOTE: assumes texture has enough storage allocated
347
- // eslint-disable-next-line complexity
348
- copyToTexture(opts = {}) {
349
- log.error(
350
- 'Framebuffer.copyToTexture({...}) is no logner supported, use copyToTexture(source, target, opts})'
351
- )();
352
- return null;
353
- }
354
-
355
515
  // WEBGL2 INTERFACE
356
516
 
357
517
  // Copies a rectangle of pixels between framebuffers
@@ -362,7 +522,8 @@ export default class Framebuffer extends Resource {
362
522
  }
363
523
 
364
524
  // signals to the GL that it need not preserve all pixels of a specified region of the framebuffer
365
- invalidate({attachments = [], x = 0, y = 0, width, height}) {
525
+ invalidate(options: {attachments: []; x?: number; y?: number; width: number; height: number}) {
526
+ const {attachments = [], x = 0, y = 0, width, height} = options;
366
527
  const gl2 = assertWebGL2Context(this.gl);
367
528
  const prevHandle = gl2.bindFramebuffer(GL.READ_FRAMEBUFFER, this.handle);
368
529
  const invalidateAll = x === 0 && y === 0 && width === undefined && height === undefined;
@@ -408,6 +569,7 @@ export default class Framebuffer extends Resource {
408
569
  return values;
409
570
  }
410
571
 
572
+ // @ts-expect-error
411
573
  getParameters(keys = true) {
412
574
  const attachments = Object.keys(this.attachments);
413
575
  // if (this === this.gl.luma.defaultFramebuffer) {
@@ -422,37 +584,6 @@ export default class Framebuffer extends Resource {
422
584
  return parameters;
423
585
  }
424
586
 
425
- // DEBUG
426
-
427
- // Note: Will only work when called in an event handler
428
- show() {
429
- if (typeof window !== 'undefined') {
430
- window.open(copyToDataUrl(this), 'luma-debug-texture');
431
- }
432
- return this;
433
- }
434
-
435
- log(logLevel = 0, message = '') {
436
- if (logLevel > log.level || typeof window === 'undefined') {
437
- return this;
438
- }
439
- message = message || `Framebuffer ${this.id}`;
440
- const image = copyToDataUrl(this, {targetMaxHeight: 100});
441
- log.image({logLevel, message, image}, message)();
442
- return this;
443
- }
444
-
445
- // WEBGL INTERFACE
446
- bind({target = GL.FRAMEBUFFER} = {}) {
447
- this.gl.bindFramebuffer(target, this.handle);
448
- return this;
449
- }
450
-
451
- unbind({target = GL.FRAMEBUFFER} = {}) {
452
- this.gl.bindFramebuffer(target, null);
453
- return this;
454
- }
455
-
456
587
  // PRIVATE METHODS
457
588
 
458
589
  _createDefaultAttachments(color, depth, stencil, width, height) {
@@ -541,86 +672,6 @@ export default class Framebuffer extends Resource {
541
672
  delete this.attachments[attachment];
542
673
  }
543
674
 
544
- _attachRenderbuffer({attachment = GL.COLOR_ATTACHMENT0, renderbuffer}) {
545
- const {gl} = this;
546
- // TODO - is the bind needed?
547
- // gl.bindRenderbuffer(GL.RENDERBUFFER, renderbuffer.handle);
548
- gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, renderbuffer.handle);
549
- // TODO - is the unbind needed?
550
- // gl.bindRenderbuffer(GL.RENDERBUFFER, null);
551
-
552
- this.attachments[attachment] = renderbuffer;
553
- }
554
-
555
- // layer = 0 - index into Texture2DArray and Texture3D or face for `TextureCubeMap`
556
- // level = 0 - mipmapLevel (must be 0 in WebGL1)
557
- _attachTexture({attachment = GL.COLOR_ATTACHMENT0, texture, layer, level}) {
558
- const {gl} = this;
559
- gl.bindTexture(texture.target, texture.handle);
560
-
561
- switch (texture.target) {
562
- case GL.TEXTURE_2D_ARRAY:
563
- case GL.TEXTURE_3D:
564
- const gl2 = assertWebGL2Context(gl);
565
- gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
566
- break;
567
-
568
- case GL.TEXTURE_CUBE_MAP:
569
- // layer must be a cubemap face (or if index, converted to cube map face)
570
- const face = mapIndexToCubeMapFace(layer);
571
- gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);
572
- break;
573
-
574
- case GL.TEXTURE_2D:
575
- gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);
576
- break;
577
-
578
- default:
579
- assert(false, 'Illegal texture type');
580
- }
581
-
582
- gl.bindTexture(texture.target, null);
583
- this.attachments[attachment] = texture;
584
- }
585
-
586
- // Expects framebuffer to be bound
587
- _setReadBuffer(readBuffer) {
588
- const gl2 = getWebGL2Context(this.gl);
589
- if (gl2) {
590
- gl2.readBuffer(readBuffer);
591
- } else {
592
- // Setting to color attachment 0 is a noop, so allow it in WebGL1
593
- assert(
594
- readBuffer === GL.COLOR_ATTACHMENT0 || readBuffer === GL.BACK,
595
- ERR_MULTIPLE_RENDERTARGETS
596
- );
597
- }
598
- this.readBuffer = readBuffer;
599
- }
600
-
601
- // Expects framebuffer to be bound
602
- _setDrawBuffers(drawBuffers) {
603
- const {gl} = this;
604
- const gl2 = assertWebGL2Context(gl);
605
- if (gl2) {
606
- gl2.drawBuffers(drawBuffers);
607
- } else {
608
- // TODO - is this not handled by polyfills?
609
- const ext = gl.getExtension('WEBGL_draw_buffers');
610
- if (ext) {
611
- ext.drawBuffersWEBGL(drawBuffers);
612
- } else {
613
- // Setting a single draw buffer to color attachment 0 is a noop, allow in WebGL1
614
- assert(
615
- drawBuffers.length === 1 &&
616
- (drawBuffers[0] === GL.COLOR_ATTACHMENT0 || drawBuffers[0] === GL.BACK),
617
- ERR_MULTIPLE_RENDERTARGETS
618
- );
619
- }
620
- }
621
- this.drawBuffers = drawBuffers;
622
- }
623
-
624
675
  // Attempt to provide workable defaults for WebGL2 symbols under WebGL1
625
676
  // null means OK to query
626
677
  // TODO - move to webgl1 polyfills
@@ -647,20 +698,6 @@ export default class Framebuffer extends Resource {
647
698
  }
648
699
  }
649
700
  /* eslint-enable complexity */
650
-
651
- // RESOURCE METHODS
652
-
653
- _createHandle() {
654
- return this.gl.createFramebuffer();
655
- }
656
-
657
- _deleteHandle() {
658
- this.gl.deleteFramebuffer(this.handle);
659
- }
660
-
661
- _bindHandle(handle) {
662
- return this.gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
663
- }
664
701
  }
665
702
 
666
703
  // PUBLIC METHODS
@@ -681,23 +718,43 @@ function _getFrameBufferStatus(status) {
681
718
  return STATUS[status] || `Framebuffer error ${status}`;
682
719
  }
683
720
 
684
- export const FRAMEBUFFER_ATTACHMENT_PARAMETERS = [
685
- GL.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, // WebGLRenderbuffer or WebGLTexture
686
- GL.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, // GL.RENDERBUFFER, GL.TEXTURE, GL.NONE
687
- // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, // GL.TEXTURE_CUBE_MAP_POSITIVE_X, etc.
688
- // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, // GLint
689
- // EXT_sRGB or WebGL2
690
- GL.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, // GL.LINEAR, GL.SRBG
691
- // WebGL2
692
- // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER, // GLint
693
- GL.FRAMEBUFFER_ATTACHMENT_RED_SIZE, // GLint
694
- GL.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, // GLint
695
- GL.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, // GLint
696
- GL.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, // GLint
697
- GL.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, // GLint
698
- GL.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE // GLint
699
- // GL.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE
700
- // GL.FLOAT, GL.INT, GL.UNSIGNED_INT, GL.SIGNED_NORMALIZED, OR GL.UNSIGNED_NORMALIZED.
701
- ];
702
-
703
- Framebuffer.ATTACHMENT_PARAMETERS = FRAMEBUFFER_ATTACHMENT_PARAMETERS;
721
+ /**
722
+ * Support
723
+ * @param gl
724
+ * @param options.colorBufferFloat Whether floating point textures can be rendered and read
725
+ * @param options.colorBufferHalfFloat Whether half float textures can be rendered and read
726
+ */
727
+ function isFloatColorBufferSupported(
728
+ gl: WebGLRenderingContext,
729
+ options: {colorBufferFloat?: boolean; colorBufferHalfFloat?: boolean}
730
+ ): boolean {
731
+ const {
732
+ colorBufferFloat, // Whether floating point textures can be rendered and read
733
+ colorBufferHalfFloat // Whether half float textures can be rendered and read
734
+ } = options;
735
+ let supported = true;
736
+
737
+ if (colorBufferFloat) {
738
+ supported = Boolean(
739
+ // WebGL 2
740
+ gl.getExtension('EXT_color_buffer_float') ||
741
+ // WebGL 1, not exposed on all platforms
742
+ gl.getExtension('WEBGL_color_buffer_float') ||
743
+ // WebGL 1, implicitly enables float render targets https://www.khronos.org/registry/webgl/extensions/OES_texture_float/
744
+ gl.getExtension('OES_texture_float')
745
+ );
746
+ }
747
+
748
+ if (colorBufferHalfFloat) {
749
+ supported =
750
+ supported &&
751
+ Boolean(
752
+ // WebGL 2
753
+ gl.getExtension('EXT_color_buffer_float') ||
754
+ // WebGL 1
755
+ gl.getExtension('EXT_color_buffer_half_float')
756
+ );
757
+ }
758
+
759
+ return supported;
760
+ }