@luma.gl/webgl 8.6.0-alpha.4 → 9.0.0-alpha.10

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 (783) hide show
  1. package/README.md +3 -67
  2. package/dist/adapter/converters/device-parameters.d.ts +27 -0
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -0
  4. package/dist/adapter/converters/{set-device-parameters.js → device-parameters.js} +50 -6
  5. package/dist/adapter/converters/device-parameters.js.map +1 -0
  6. package/dist/{classes → adapter/converters}/renderbuffer-formats.d.ts +0 -0
  7. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +1 -0
  8. package/dist/{classes → adapter/converters}/renderbuffer-formats.js +1 -1
  9. package/dist/adapter/converters/renderbuffer-formats.js.map +1 -0
  10. package/dist/adapter/converters/sampler-parameters.d.ts +19 -0
  11. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -0
  12. package/dist/adapter/converters/sampler-parameters.js +227 -0
  13. package/dist/adapter/converters/sampler-parameters.js.map +1 -0
  14. package/dist/adapter/converters/texture-formats.d.ts +93 -0
  15. package/dist/adapter/converters/texture-formats.d.ts.map +1 -0
  16. package/dist/adapter/converters/texture-formats.js +954 -0
  17. package/dist/adapter/converters/texture-formats.js.map +1 -0
  18. package/dist/adapter/converters/vertex-formats.d.ts +4 -0
  19. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -0
  20. package/dist/adapter/converters/vertex-formats.js +35 -0
  21. package/dist/adapter/converters/vertex-formats.js.map +1 -0
  22. package/dist/adapter/device-helpers/device-features.d.ts +3 -6
  23. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-features.js +39 -50
  25. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  26. package/dist/adapter/device-helpers/device-limits.d.ts +1 -0
  27. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/device-limits.js +1 -0
  29. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  30. package/dist/adapter/device-helpers/get-device-info.js +7 -7
  31. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  32. package/dist/adapter/helpers/attribute-utils.d.ts +11 -0
  33. package/dist/adapter/helpers/attribute-utils.d.ts.map +1 -0
  34. package/dist/adapter/helpers/attribute-utils.js +81 -0
  35. package/dist/adapter/helpers/attribute-utils.js.map +1 -0
  36. package/dist/adapter/helpers/get-shader-layout.d.ts +55 -0
  37. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -0
  38. package/dist/adapter/helpers/get-shader-layout.js +330 -0
  39. package/dist/adapter/helpers/get-shader-layout.js.map +1 -0
  40. package/dist/{webgl-utils → adapter/helpers}/parse-shader-compiler-log.d.ts +0 -0
  41. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -0
  42. package/dist/{esm/webgl-utils → adapter/helpers}/parse-shader-compiler-log.js +0 -0
  43. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -0
  44. package/dist/adapter/helpers/set-uniform.d.ts +4 -0
  45. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -0
  46. package/dist/adapter/helpers/set-uniform.js +115 -0
  47. package/dist/adapter/helpers/set-uniform.js.map +1 -0
  48. package/dist/adapter/helpers/uniforms.d.ts +26 -0
  49. package/dist/adapter/helpers/uniforms.d.ts.map +1 -0
  50. package/dist/adapter/helpers/uniforms.js +99 -0
  51. package/dist/adapter/helpers/uniforms.js.map +1 -0
  52. package/dist/adapter/objects/constants-to-keys.d.ts +5 -0
  53. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -0
  54. package/dist/{esm/webgl-utils → adapter/objects}/constants-to-keys.js +1 -0
  55. package/dist/adapter/objects/constants-to-keys.js.map +1 -0
  56. package/dist/adapter/objects/webgl-renderbuffer.d.ts +40 -0
  57. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -0
  58. package/dist/{esm/classes/renderbuffer.js → adapter/objects/webgl-renderbuffer.js} +38 -72
  59. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -0
  60. package/dist/{classes → adapter/objects}/webgl-resource.d.ts +15 -14
  61. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -0
  62. package/dist/{classes → adapter/objects}/webgl-resource.js +7 -3
  63. package/dist/adapter/objects/webgl-resource.js.map +1 -0
  64. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +27 -0
  65. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -0
  66. package/dist/adapter/objects/webgl-vertex-array-object.js +84 -0
  67. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -0
  68. package/dist/adapter/resources/webgl-buffer.d.ts +27 -0
  69. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -0
  70. package/dist/adapter/resources/webgl-buffer.js +164 -0
  71. package/dist/adapter/resources/webgl-buffer.js.map +1 -0
  72. package/dist/adapter/resources/webgl-command-buffer.d.ts +25 -0
  73. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -0
  74. package/dist/adapter/resources/webgl-command-buffer.js +65 -0
  75. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -0
  76. package/dist/adapter/resources/webgl-command-encoder.d.ts +18 -0
  77. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -0
  78. package/dist/adapter/resources/webgl-command-encoder.js +53 -0
  79. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -0
  80. package/dist/adapter/resources/webgl-external-texture.d.ts +1 -0
  81. package/dist/adapter/resources/webgl-external-texture.d.ts.map +1 -0
  82. package/dist/adapter/resources/webgl-external-texture.js +2 -0
  83. package/dist/{es5/helpers/program-bindings.js.map → adapter/resources/webgl-external-texture.js.map} +1 -1
  84. package/dist/adapter/resources/webgl-framebuffer.d.ts +41 -0
  85. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -0
  86. package/dist/adapter/resources/webgl-framebuffer.js +267 -0
  87. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -0
  88. package/dist/adapter/resources/webgl-render-pass.d.ts +11 -0
  89. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -0
  90. package/dist/adapter/resources/webgl-render-pass.js +21 -0
  91. package/dist/adapter/resources/webgl-render-pass.js.map +1 -0
  92. package/dist/adapter/resources/webgl-render-pipeline.d.ts +55 -0
  93. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -0
  94. package/dist/adapter/resources/webgl-render-pipeline.js +428 -0
  95. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -0
  96. package/dist/adapter/resources/webgl-sampler.d.ts +20 -0
  97. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -0
  98. package/dist/adapter/resources/webgl-sampler.js +50 -0
  99. package/dist/adapter/resources/webgl-sampler.js.map +1 -0
  100. package/dist/adapter/{webgl-shader.d.ts → resources/webgl-shader.d.ts} +3 -6
  101. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -0
  102. package/dist/{esm/adapter → adapter/resources}/webgl-shader.js +17 -23
  103. package/dist/adapter/resources/webgl-shader.js.map +1 -0
  104. package/dist/adapter/resources/webgl-texture.d.ts +193 -0
  105. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -0
  106. package/dist/{classes/texture.js → adapter/resources/webgl-texture.js} +280 -232
  107. package/dist/adapter/resources/webgl-texture.js.map +1 -0
  108. package/dist/adapter/webgl-canvas-context.d.ts +36 -0
  109. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -0
  110. package/dist/adapter/webgl-canvas-context.js +54 -0
  111. package/dist/adapter/webgl-canvas-context.js.map +1 -0
  112. package/dist/adapter/webgl-device.d.ts +63 -76
  113. package/dist/adapter/webgl-device.d.ts.map +1 -1
  114. package/dist/adapter/webgl-device.js +244 -115
  115. package/dist/adapter/webgl-device.js.map +1 -1
  116. package/dist/classic/accessor.d.ts +32 -0
  117. package/dist/classic/accessor.d.ts.map +1 -0
  118. package/dist/{classes → classic}/accessor.js +33 -1
  119. package/dist/classic/accessor.js.map +1 -0
  120. package/dist/{classes/webgl-buffer.d.ts → classic/buffer.d.ts} +28 -33
  121. package/dist/classic/buffer.d.ts.map +1 -0
  122. package/dist/{esm/classes/webgl-buffer.js → classic/buffer.js} +67 -57
  123. package/dist/classic/buffer.js.map +1 -0
  124. package/dist/{webgl-utils → classic}/typed-array-utils.d.ts +3 -2
  125. package/dist/classic/typed-array-utils.d.ts.map +1 -0
  126. package/dist/{esm/webgl-utils → classic}/typed-array-utils.js +0 -0
  127. package/dist/classic/typed-array-utils.js.map +1 -0
  128. package/dist/context/context/context-state.d.ts.map +1 -1
  129. package/dist/context/context/context-state.js +1 -1
  130. package/dist/context/context/context-state.js.map +1 -1
  131. package/dist/context/context/{create-context.d.ts → create-browser-context.d.ts} +2 -1
  132. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  133. package/dist/{esm/context/context/create-context.js → context/context/create-browser-context.js} +27 -3
  134. package/dist/context/context/create-browser-context.js.map +1 -0
  135. package/dist/context/context/create-headless-context.d.ts +9 -0
  136. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  137. package/dist/context/context/create-headless-context.js +43 -0
  138. package/dist/context/context/create-headless-context.js.map +1 -0
  139. package/dist/context/context/device-pixels.d.ts +1 -1
  140. package/dist/context/context/device-pixels.d.ts.map +1 -1
  141. package/dist/context/context/device-pixels.js +13 -8
  142. package/dist/context/context/device-pixels.js.map +1 -1
  143. package/dist/context/debug/spector.d.ts +18 -0
  144. package/dist/context/debug/spector.d.ts.map +1 -0
  145. package/dist/context/debug/spector.js +76 -0
  146. package/dist/context/debug/spector.js.map +1 -0
  147. package/dist/context/debug/webgl-developer-tools.d.ts +19 -0
  148. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -0
  149. package/dist/context/debug/webgl-developer-tools.js +121 -0
  150. package/dist/context/debug/webgl-developer-tools.js.map +1 -0
  151. package/dist/context/parameters/unified-parameter-api.d.ts +9 -7
  152. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  153. package/dist/context/parameters/unified-parameter-api.js +9 -8
  154. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  155. package/dist/context/parameters/webgl-parameter-tables.d.ts +40 -36
  156. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  157. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  158. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  159. package/dist/context/polyfill/polyfill-context.js +3 -3
  160. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  161. package/dist/context/polyfill/polyfill-table.d.ts +1 -1
  162. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  163. package/dist/context/polyfill/polyfill-table.js +1 -1
  164. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  165. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  166. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  167. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  168. package/dist/context/state-tracker/track-context-state.js +26 -12
  169. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  170. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  171. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  172. package/dist/context/state-tracker/with-parameters.js +6 -2
  173. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  174. package/dist/es5/adapter/converters/{set-device-parameters.js → device-parameters.js} +53 -6
  175. package/dist/es5/adapter/converters/device-parameters.js.map +1 -0
  176. package/dist/es5/{classes → adapter/converters}/renderbuffer-formats.js +1 -1
  177. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +1 -0
  178. package/dist/es5/adapter/converters/sampler-parameters.js +245 -0
  179. package/dist/es5/adapter/converters/sampler-parameters.js.map +1 -0
  180. package/dist/es5/adapter/converters/texture-formats.js +1031 -0
  181. package/dist/es5/adapter/converters/texture-formats.js.map +1 -0
  182. package/dist/es5/adapter/converters/vertex-formats.js +45 -0
  183. package/dist/es5/adapter/converters/vertex-formats.js.map +1 -0
  184. package/dist/es5/adapter/device-helpers/device-features.js +61 -58
  185. package/dist/es5/adapter/device-helpers/device-features.js.map +1 -1
  186. package/dist/es5/adapter/device-helpers/device-limits.js +1 -1
  187. package/dist/es5/adapter/device-helpers/device-limits.js.map +1 -1
  188. package/dist/es5/adapter/device-helpers/get-device-info.js +7 -7
  189. package/dist/es5/adapter/device-helpers/get-device-info.js.map +1 -1
  190. package/dist/es5/adapter/helpers/attribute-utils.js +91 -0
  191. package/dist/es5/adapter/helpers/attribute-utils.js.map +1 -0
  192. package/dist/es5/{helpers/get-program-bindings.js → adapter/helpers/get-shader-layout.js} +211 -94
  193. package/dist/es5/adapter/helpers/get-shader-layout.js.map +1 -0
  194. package/dist/es5/{webgl-utils → adapter/helpers}/parse-shader-compiler-log.js +0 -0
  195. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +1 -0
  196. package/dist/es5/adapter/helpers/set-uniform.js +125 -0
  197. package/dist/es5/adapter/helpers/set-uniform.js.map +1 -0
  198. package/dist/es5/adapter/helpers/uniforms.js +112 -0
  199. package/dist/es5/adapter/helpers/uniforms.js.map +1 -0
  200. package/dist/es5/{webgl-utils → adapter/objects}/constants-to-keys.js +1 -0
  201. package/dist/es5/adapter/objects/constants-to-keys.js.map +1 -0
  202. package/dist/es5/{classes/renderbuffer.js → adapter/objects/webgl-renderbuffer.js} +48 -98
  203. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +1 -0
  204. package/dist/es5/{classes → adapter/objects}/webgl-resource.js +8 -3
  205. package/dist/es5/adapter/objects/webgl-resource.js.map +1 -0
  206. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +137 -0
  207. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +1 -0
  208. package/dist/es5/adapter/resources/webgl-buffer.js +243 -0
  209. package/dist/es5/adapter/resources/webgl-buffer.js.map +1 -0
  210. package/dist/es5/adapter/resources/webgl-command-buffer.js +96 -0
  211. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +1 -0
  212. package/dist/es5/adapter/resources/webgl-command-encoder.js +98 -0
  213. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +1 -0
  214. package/dist/es5/adapter/resources/webgl-external-texture.js +2 -0
  215. package/dist/{esm/helpers/program-bindings.js.map → es5/adapter/resources/webgl-external-texture.js.map} +1 -1
  216. package/dist/es5/adapter/resources/webgl-framebuffer.js +346 -0
  217. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +1 -0
  218. package/dist/es5/{classes/texture-2d.js → adapter/resources/webgl-render-pass.js} +26 -45
  219. package/dist/es5/adapter/resources/webgl-render-pass.js.map +1 -0
  220. package/dist/es5/adapter/resources/webgl-render-pipeline.js +530 -0
  221. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +1 -0
  222. package/dist/es5/adapter/resources/webgl-sampler.js +96 -0
  223. package/dist/es5/adapter/resources/webgl-sampler.js.map +1 -0
  224. package/dist/es5/adapter/{webgl-shader.js → resources/webgl-shader.js} +16 -21
  225. package/dist/es5/adapter/resources/webgl-shader.js.map +1 -0
  226. package/dist/es5/{classes/texture.js → adapter/resources/webgl-texture.js} +374 -298
  227. package/dist/es5/adapter/resources/webgl-texture.js.map +1 -0
  228. package/dist/es5/adapter/webgl-canvas-context.js +97 -0
  229. package/dist/es5/adapter/webgl-canvas-context.js.map +1 -0
  230. package/dist/es5/adapter/webgl-device.js +316 -132
  231. package/dist/es5/adapter/webgl-device.js.map +1 -1
  232. package/dist/es5/{classes → classic}/accessor.js +25 -1
  233. package/dist/es5/classic/accessor.js.map +1 -0
  234. package/dist/es5/{classes/webgl-buffer.js → classic/buffer.js} +88 -72
  235. package/dist/es5/classic/buffer.js.map +1 -0
  236. package/dist/es5/{webgl-utils → classic}/typed-array-utils.js +0 -0
  237. package/dist/es5/classic/typed-array-utils.js.map +1 -0
  238. package/dist/es5/context/context/context-state.js +1 -1
  239. package/dist/es5/context/context/context-state.js.map +1 -1
  240. package/dist/es5/context/context/{create-context.js → create-browser-context.js} +29 -3
  241. package/dist/es5/context/context/create-browser-context.js.map +1 -0
  242. package/dist/es5/context/context/create-headless-context.js +60 -0
  243. package/dist/es5/context/context/create-headless-context.js.map +1 -0
  244. package/dist/es5/context/context/device-pixels.js +14 -8
  245. package/dist/es5/context/context/device-pixels.js.map +1 -1
  246. package/dist/es5/context/debug/spector.js +133 -0
  247. package/dist/es5/context/debug/spector.js.map +1 -0
  248. package/dist/es5/context/debug/webgl-developer-tools.js +198 -0
  249. package/dist/es5/context/debug/webgl-developer-tools.js.map +1 -0
  250. package/dist/es5/context/parameters/unified-parameter-api.js +15 -9
  251. package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
  252. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +1 -1
  253. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +1 -1
  254. package/dist/es5/context/polyfill/polyfill-context.js +3 -3
  255. package/dist/es5/context/polyfill/polyfill-context.js.map +1 -1
  256. package/dist/es5/context/polyfill/polyfill-table.js +1 -1
  257. package/dist/es5/context/polyfill/polyfill-table.js.map +1 -1
  258. package/dist/es5/context/state-tracker/deep-array-equal.js.map +1 -1
  259. package/dist/es5/context/state-tracker/track-context-state.js +39 -24
  260. package/dist/es5/context/state-tracker/track-context-state.js.map +1 -1
  261. package/dist/es5/context/state-tracker/with-parameters.js +8 -2
  262. package/dist/es5/context/state-tracker/with-parameters.js.map +1 -1
  263. package/dist/es5/index.js +72 -300
  264. package/dist/es5/index.js.map +1 -1
  265. package/dist/es5/init.js +1 -41
  266. package/dist/es5/init.js.map +1 -1
  267. package/dist/es5/{context/parameters/webgl-parameters.js → types/webgl.js} +1 -1
  268. package/dist/es5/types/webgl.js.map +1 -0
  269. package/dist/esm/adapter/converters/{set-device-parameters.js → device-parameters.js} +50 -6
  270. package/dist/esm/adapter/converters/device-parameters.js.map +1 -0
  271. package/dist/esm/{classes → adapter/converters}/renderbuffer-formats.js +1 -1
  272. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +1 -0
  273. package/dist/esm/adapter/converters/sampler-parameters.js +227 -0
  274. package/dist/esm/adapter/converters/sampler-parameters.js.map +1 -0
  275. package/dist/esm/adapter/converters/texture-formats.js +954 -0
  276. package/dist/esm/adapter/converters/texture-formats.js.map +1 -0
  277. package/dist/esm/adapter/converters/vertex-formats.js +35 -0
  278. package/dist/esm/adapter/converters/vertex-formats.js.map +1 -0
  279. package/dist/esm/adapter/device-helpers/device-features.js +39 -50
  280. package/dist/esm/adapter/device-helpers/device-features.js.map +1 -1
  281. package/dist/esm/adapter/device-helpers/device-limits.js +1 -0
  282. package/dist/esm/adapter/device-helpers/device-limits.js.map +1 -1
  283. package/dist/esm/adapter/device-helpers/get-device-info.js +7 -7
  284. package/dist/esm/adapter/device-helpers/get-device-info.js.map +1 -1
  285. package/dist/esm/adapter/helpers/attribute-utils.js +81 -0
  286. package/dist/esm/adapter/helpers/attribute-utils.js.map +1 -0
  287. package/dist/esm/adapter/helpers/get-shader-layout.js +330 -0
  288. package/dist/esm/adapter/helpers/get-shader-layout.js.map +1 -0
  289. package/dist/{webgl-utils → esm/adapter/helpers}/parse-shader-compiler-log.js +0 -0
  290. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +1 -0
  291. package/dist/esm/adapter/helpers/set-uniform.js +115 -0
  292. package/dist/esm/adapter/helpers/set-uniform.js.map +1 -0
  293. package/dist/esm/adapter/helpers/uniforms.js +99 -0
  294. package/dist/esm/adapter/helpers/uniforms.js.map +1 -0
  295. package/dist/{webgl-utils → esm/adapter/objects}/constants-to-keys.js +1 -0
  296. package/dist/esm/adapter/objects/constants-to-keys.js.map +1 -0
  297. package/dist/{classes/renderbuffer.js → esm/adapter/objects/webgl-renderbuffer.js} +38 -72
  298. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +1 -0
  299. package/dist/esm/{classes → adapter/objects}/webgl-resource.js +7 -3
  300. package/dist/esm/adapter/objects/webgl-resource.js.map +1 -0
  301. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +84 -0
  302. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +1 -0
  303. package/dist/esm/adapter/resources/webgl-buffer.js +164 -0
  304. package/dist/esm/adapter/resources/webgl-buffer.js.map +1 -0
  305. package/dist/esm/adapter/resources/webgl-command-buffer.js +65 -0
  306. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +1 -0
  307. package/dist/esm/adapter/resources/webgl-command-encoder.js +53 -0
  308. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +1 -0
  309. package/dist/esm/adapter/resources/webgl-external-texture.js +2 -0
  310. package/dist/{helpers/program-bindings.js.map → esm/adapter/resources/webgl-external-texture.js.map} +1 -1
  311. package/dist/esm/adapter/resources/webgl-framebuffer.js +267 -0
  312. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +1 -0
  313. package/dist/esm/adapter/resources/webgl-render-pass.js +21 -0
  314. package/dist/esm/adapter/resources/webgl-render-pass.js.map +1 -0
  315. package/dist/esm/adapter/resources/webgl-render-pipeline.js +428 -0
  316. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +1 -0
  317. package/dist/esm/adapter/resources/webgl-sampler.js +50 -0
  318. package/dist/esm/adapter/resources/webgl-sampler.js.map +1 -0
  319. package/dist/{adapter → esm/adapter/resources}/webgl-shader.js +17 -23
  320. package/dist/esm/adapter/resources/webgl-shader.js.map +1 -0
  321. package/dist/esm/{classes/texture.js → adapter/resources/webgl-texture.js} +280 -232
  322. package/dist/esm/adapter/resources/webgl-texture.js.map +1 -0
  323. package/dist/esm/adapter/webgl-canvas-context.js +54 -0
  324. package/dist/esm/adapter/webgl-canvas-context.js.map +1 -0
  325. package/dist/esm/adapter/webgl-device.js +244 -115
  326. package/dist/esm/adapter/webgl-device.js.map +1 -1
  327. package/dist/esm/{classes → classic}/accessor.js +33 -1
  328. package/dist/esm/classic/accessor.js.map +1 -0
  329. package/dist/{classes/webgl-buffer.js → esm/classic/buffer.js} +67 -57
  330. package/dist/esm/classic/buffer.js.map +1 -0
  331. package/dist/{webgl-utils → esm/classic}/typed-array-utils.js +0 -0
  332. package/dist/esm/classic/typed-array-utils.js.map +1 -0
  333. package/dist/esm/context/context/context-state.js +1 -1
  334. package/dist/esm/context/context/context-state.js.map +1 -1
  335. package/dist/{context/context/create-context.js → esm/context/context/create-browser-context.js} +27 -3
  336. package/dist/esm/context/context/create-browser-context.js.map +1 -0
  337. package/dist/esm/context/context/create-headless-context.js +43 -0
  338. package/dist/esm/context/context/create-headless-context.js.map +1 -0
  339. package/dist/esm/context/context/device-pixels.js +13 -8
  340. package/dist/esm/context/context/device-pixels.js.map +1 -1
  341. package/dist/esm/context/debug/spector.js +76 -0
  342. package/dist/esm/context/debug/spector.js.map +1 -0
  343. package/dist/esm/context/debug/webgl-developer-tools.js +121 -0
  344. package/dist/esm/context/debug/webgl-developer-tools.js.map +1 -0
  345. package/dist/esm/context/parameters/unified-parameter-api.js +9 -8
  346. package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
  347. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +1 -1
  348. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +1 -1
  349. package/dist/esm/context/polyfill/polyfill-context.js +3 -3
  350. package/dist/esm/context/polyfill/polyfill-context.js.map +1 -1
  351. package/dist/esm/context/polyfill/polyfill-table.js +1 -1
  352. package/dist/esm/context/polyfill/polyfill-table.js.map +1 -1
  353. package/dist/esm/context/state-tracker/deep-array-equal.js.map +1 -1
  354. package/dist/esm/context/state-tracker/track-context-state.js +26 -12
  355. package/dist/esm/context/state-tracker/track-context-state.js.map +1 -1
  356. package/dist/esm/context/state-tracker/with-parameters.js +6 -2
  357. package/dist/esm/context/state-tracker/with-parameters.js.map +1 -1
  358. package/dist/esm/index.js +20 -31
  359. package/dist/esm/index.js.map +1 -1
  360. package/dist/esm/init.js +2 -31
  361. package/dist/esm/init.js.map +1 -1
  362. package/dist/esm/types/webgl.js +2 -0
  363. package/dist/esm/types/webgl.js.map +1 -0
  364. package/dist/index.d.ts +25 -46
  365. package/dist/index.d.ts.map +1 -1
  366. package/dist/index.js +20 -31
  367. package/dist/index.js.map +1 -1
  368. package/dist/init.d.ts +1 -4
  369. package/dist/init.d.ts.map +1 -1
  370. package/dist/init.js +2 -31
  371. package/dist/init.js.map +1 -1
  372. package/dist/types/webgl.d.ts +145 -0
  373. package/dist/types/webgl.d.ts.map +1 -0
  374. package/dist/types/webgl.js +2 -0
  375. package/dist/types/webgl.js.map +1 -0
  376. package/package.json +5 -5
  377. package/src/adapter/converters/{set-device-parameters.ts → device-parameters.ts} +81 -12
  378. package/src/{classes → adapter/converters}/renderbuffer-formats.ts +1 -1
  379. package/src/adapter/converters/sampler-parameters.ts +184 -0
  380. package/src/adapter/converters/texture-formats.ts +633 -0
  381. package/src/adapter/converters/vertex-formats.ts +22 -0
  382. package/src/adapter/device-helpers/device-features.ts +55 -124
  383. package/src/adapter/device-helpers/device-limits.ts +6 -3
  384. package/src/adapter/device-helpers/get-device-info.ts +8 -8
  385. package/src/adapter/helpers/attribute-utils.ts +61 -0
  386. package/src/adapter/helpers/get-shader-layout.ts +407 -0
  387. package/src/{webgl-utils → adapter/helpers}/parse-shader-compiler-log.ts +0 -0
  388. package/src/adapter/helpers/set-uniform.ts +87 -0
  389. package/src/adapter/helpers/uniforms.ts +121 -0
  390. package/src/{webgl-utils → adapter/objects}/constants-to-keys.ts +6 -3
  391. package/src/adapter/objects/webgl-renderbuffer.ts +104 -0
  392. package/src/{classes → adapter/objects}/webgl-resource.ts +23 -17
  393. package/src/adapter/objects/webgl-vertex-array-object.ts +111 -0
  394. package/src/adapter/resources/webgl-buffer.ts +219 -0
  395. package/src/adapter/resources/webgl-command-buffer.ts +94 -0
  396. package/src/adapter/resources/webgl-command-encoder.ts +58 -0
  397. package/src/adapter/resources/webgl-external-texture.ts +92 -0
  398. package/src/adapter/resources/webgl-framebuffer.ts +282 -0
  399. package/src/adapter/resources/webgl-render-pass.ts +24 -0
  400. package/src/adapter/resources/webgl-render-pipeline.ts +425 -0
  401. package/src/adapter/resources/webgl-sampler.ts +56 -0
  402. package/src/adapter/{webgl-shader.ts → resources/webgl-shader.ts} +19 -24
  403. package/src/adapter/resources/webgl-texture.ts +1036 -0
  404. package/src/adapter/webgl-canvas-context.ts +74 -0
  405. package/src/adapter/webgl-device.ts +297 -289
  406. package/{dist/esm/classes/accessor.ts.disabled → src/classic/accessor.ts} +38 -37
  407. package/src/{classes/webgl-buffer.ts → classic/buffer.ts} +76 -84
  408. package/src/{webgl-utils → classic}/typed-array-utils.ts +5 -1
  409. package/src/context/context/context-state.ts +4 -2
  410. package/src/context/context/{create-context.ts → create-browser-context.ts} +41 -6
  411. package/src/context/context/create-headless-context.ts +48 -0
  412. package/src/context/context/device-pixels.ts +24 -13
  413. package/src/context/debug/spector.ts +92 -0
  414. package/src/context/debug/webgl-developer-tools.ts +162 -0
  415. package/src/context/parameters/unified-parameter-api.ts +21 -13
  416. package/src/context/parameters/webgl-parameter-tables.ts +38 -36
  417. package/src/context/polyfill/get-parameter-polyfill.ts +1 -1
  418. package/src/context/polyfill/polyfill-context.ts +4 -5
  419. package/src/context/polyfill/polyfill-table.ts +1 -1
  420. package/src/context/state-tracker/deep-array-equal.ts +1 -1
  421. package/src/context/state-tracker/track-context-state.ts +34 -26
  422. package/src/context/state-tracker/with-parameters.ts +7 -2
  423. package/src/index.ts +42 -102
  424. package/src/init.ts +2 -46
  425. package/src/types/webgl.ts +284 -0
  426. package/dist/_deprecated/context-api.d.ts +0 -85
  427. package/dist/_deprecated/context-api.d.ts.map +0 -1
  428. package/dist/_deprecated/context-api.js +0 -70
  429. package/dist/_deprecated/context-api.js.map +0 -1
  430. package/dist/_deprecated/features.d.ts +0 -27
  431. package/dist/_deprecated/features.d.ts.map +0 -1
  432. package/dist/_deprecated/features.js +0 -111
  433. package/dist/_deprecated/features.js.map +0 -1
  434. package/dist/adapter/converters/set-device-parameters.d.ts +0 -5
  435. package/dist/adapter/converters/set-device-parameters.d.ts.map +0 -1
  436. package/dist/adapter/converters/set-device-parameters.js.map +0 -1
  437. package/dist/adapter/converters/webgpu-texture-formats.d.ts +0 -281
  438. package/dist/adapter/converters/webgpu-texture-formats.d.ts.map +0 -1
  439. package/dist/adapter/converters/webgpu-texture-formats.js +0 -285
  440. package/dist/adapter/converters/webgpu-texture-formats.js.map +0 -1
  441. package/dist/adapter/webgl-shader.d.ts.map +0 -1
  442. package/dist/adapter/webgl-shader.js.map +0 -1
  443. package/dist/classes/accessor.d.ts +0 -28
  444. package/dist/classes/accessor.d.ts.map +0 -1
  445. package/dist/classes/accessor.js.map +0 -1
  446. package/dist/classes/accessor.ts.disabled +0 -159
  447. package/dist/classes/clear.d.ts +0 -17
  448. package/dist/classes/clear.d.ts.map +0 -1
  449. package/dist/classes/clear.js +0 -105
  450. package/dist/classes/clear.js.map +0 -1
  451. package/dist/classes/copy-and-blit.d.ts +0 -86
  452. package/dist/classes/copy-and-blit.d.ts.map +0 -1
  453. package/dist/classes/copy-and-blit.js +0 -338
  454. package/dist/classes/copy-and-blit.js.map +0 -1
  455. package/dist/classes/framebuffer.d.ts +0 -139
  456. package/dist/classes/framebuffer.d.ts.map +0 -1
  457. package/dist/classes/framebuffer.js +0 -656
  458. package/dist/classes/framebuffer.js.map +0 -1
  459. package/dist/classes/program-configuration.d.ts +0 -24
  460. package/dist/classes/program-configuration.d.ts.map +0 -1
  461. package/dist/classes/program-configuration.js +0 -73
  462. package/dist/classes/program-configuration.js.map +0 -1
  463. package/dist/classes/program.d.ts +0 -66
  464. package/dist/classes/program.d.ts.map +0 -1
  465. package/dist/classes/program.js +0 -379
  466. package/dist/classes/program.js.map +0 -1
  467. package/dist/classes/query.d.ts +0 -27
  468. package/dist/classes/query.d.ts.map +0 -1
  469. package/dist/classes/query.js +0 -145
  470. package/dist/classes/query.js.map +0 -1
  471. package/dist/classes/renderbuffer-formats.d.ts.map +0 -1
  472. package/dist/classes/renderbuffer-formats.js.map +0 -1
  473. package/dist/classes/renderbuffer.d.ts +0 -60
  474. package/dist/classes/renderbuffer.d.ts.map +0 -1
  475. package/dist/classes/renderbuffer.js.map +0 -1
  476. package/dist/classes/shader.d.ts +0 -42
  477. package/dist/classes/shader.d.ts.map +0 -1
  478. package/dist/classes/shader.js +0 -118
  479. package/dist/classes/shader.js.map +0 -1
  480. package/dist/classes/texture-2d.d.ts +0 -9
  481. package/dist/classes/texture-2d.d.ts.map +0 -1
  482. package/dist/classes/texture-2d.js +0 -36
  483. package/dist/classes/texture-2d.js.map +0 -1
  484. package/dist/classes/texture-3d.d.ts +0 -29
  485. package/dist/classes/texture-3d.d.ts.map +0 -1
  486. package/dist/classes/texture-3d.js +0 -76
  487. package/dist/classes/texture-3d.js.map +0 -1
  488. package/dist/classes/texture-cube.d.ts +0 -28
  489. package/dist/classes/texture-cube.d.ts.map +0 -1
  490. package/dist/classes/texture-cube.js +0 -130
  491. package/dist/classes/texture-cube.js.map +0 -1
  492. package/dist/classes/texture-formats.d.ts +0 -37
  493. package/dist/classes/texture-formats.d.ts.map +0 -1
  494. package/dist/classes/texture-formats.js +0 -98
  495. package/dist/classes/texture-formats.js.map +0 -1
  496. package/dist/classes/texture.d.ts +0 -123
  497. package/dist/classes/texture.d.ts.map +0 -1
  498. package/dist/classes/texture.js.map +0 -1
  499. package/dist/classes/transform-feedback.d.ts +0 -33
  500. package/dist/classes/transform-feedback.d.ts.map +0 -1
  501. package/dist/classes/transform-feedback.js +0 -198
  502. package/dist/classes/transform-feedback.js.map +0 -1
  503. package/dist/classes/uniform-buffer-layout.d.ts +0 -17
  504. package/dist/classes/uniform-buffer-layout.d.ts.map +0 -1
  505. package/dist/classes/uniform-buffer-layout.js +0 -104
  506. package/dist/classes/uniform-buffer-layout.js.map +0 -1
  507. package/dist/classes/uniforms.d.ts +0 -37
  508. package/dist/classes/uniforms.d.ts.map +0 -1
  509. package/dist/classes/uniforms.js +0 -250
  510. package/dist/classes/uniforms.js.map +0 -1
  511. package/dist/classes/vertex-array-object.d.ts +0 -76
  512. package/dist/classes/vertex-array-object.d.ts.map +0 -1
  513. package/dist/classes/vertex-array-object.js +0 -261
  514. package/dist/classes/vertex-array-object.js.map +0 -1
  515. package/dist/classes/vertex-array.d.ts +0 -75
  516. package/dist/classes/vertex-array.d.ts.map +0 -1
  517. package/dist/classes/vertex-array.js +0 -408
  518. package/dist/classes/vertex-array.js.map +0 -1
  519. package/dist/classes/webgl-buffer.d.ts.map +0 -1
  520. package/dist/classes/webgl-buffer.js.map +0 -1
  521. package/dist/classes/webgl-resource.d.ts.map +0 -1
  522. package/dist/classes/webgl-resource.js.map +0 -1
  523. package/dist/context/context/create-context.d.ts.map +0 -1
  524. package/dist/context/context/create-context.js.map +0 -1
  525. package/dist/context/context/get-canvas.d.ts +0 -13
  526. package/dist/context/context/get-canvas.d.ts.map +0 -1
  527. package/dist/context/context/get-canvas.js +0 -31
  528. package/dist/context/context/get-canvas.js.map +0 -1
  529. package/dist/context/context/resize-context.d.ts +0 -20
  530. package/dist/context/context/resize-context.d.ts.map +0 -1
  531. package/dist/context/context/resize-context.js +0 -15
  532. package/dist/context/context/resize-context.js.map +0 -1
  533. package/dist/context/parameters/webgl-parameters.d.ts +0 -144
  534. package/dist/context/parameters/webgl-parameters.d.ts.map +0 -1
  535. package/dist/context/parameters/webgl-parameters.js +0 -2
  536. package/dist/context/parameters/webgl-parameters.js.map +0 -1
  537. package/dist/debug/debug-program-configuration.d.ts +0 -2
  538. package/dist/debug/debug-program-configuration.d.ts.map +0 -1
  539. package/dist/debug/debug-program-configuration.js +0 -40
  540. package/dist/debug/debug-program-configuration.js.map +0 -1
  541. package/dist/debug/debug-uniforms.d.ts +0 -12
  542. package/dist/debug/debug-uniforms.d.ts.map +0 -1
  543. package/dist/debug/debug-uniforms.js +0 -108
  544. package/dist/debug/debug-uniforms.js.map +0 -1
  545. package/dist/debug/debug-vertex-array.d.ts +0 -5
  546. package/dist/debug/debug-vertex-array.d.ts.map +0 -1
  547. package/dist/debug/debug-vertex-array.js +0 -118
  548. package/dist/debug/debug-vertex-array.js.map +0 -1
  549. package/dist/es5/_deprecated/context-api.js +0 -110
  550. package/dist/es5/_deprecated/context-api.js.map +0 -1
  551. package/dist/es5/_deprecated/features.js +0 -118
  552. package/dist/es5/_deprecated/features.js.map +0 -1
  553. package/dist/es5/adapter/converters/set-device-parameters.js.map +0 -1
  554. package/dist/es5/adapter/converters/webgpu-texture-formats.js +0 -296
  555. package/dist/es5/adapter/converters/webgpu-texture-formats.js.map +0 -1
  556. package/dist/es5/adapter/webgl-shader.js.map +0 -1
  557. package/dist/es5/classes/accessor.d.ts +0 -28
  558. package/dist/es5/classes/accessor.js.map +0 -1
  559. package/dist/es5/classes/accessor.ts.disabled +0 -159
  560. package/dist/es5/classes/clear.js +0 -135
  561. package/dist/es5/classes/clear.js.map +0 -1
  562. package/dist/es5/classes/copy-and-blit.js +0 -382
  563. package/dist/es5/classes/copy-and-blit.js.map +0 -1
  564. package/dist/es5/classes/framebuffer.js +0 -807
  565. package/dist/es5/classes/framebuffer.js.map +0 -1
  566. package/dist/es5/classes/program-configuration.js +0 -119
  567. package/dist/es5/classes/program-configuration.js.map +0 -1
  568. package/dist/es5/classes/program.js +0 -471
  569. package/dist/es5/classes/program.js.map +0 -1
  570. package/dist/es5/classes/query.js +0 -222
  571. package/dist/es5/classes/query.js.map +0 -1
  572. package/dist/es5/classes/renderbuffer-formats.js.map +0 -1
  573. package/dist/es5/classes/renderbuffer.js.map +0 -1
  574. package/dist/es5/classes/shader.js +0 -195
  575. package/dist/es5/classes/shader.js.map +0 -1
  576. package/dist/es5/classes/texture-2d.js.map +0 -1
  577. package/dist/es5/classes/texture-3d.js +0 -142
  578. package/dist/es5/classes/texture-3d.js.map +0 -1
  579. package/dist/es5/classes/texture-cube.js +0 -202
  580. package/dist/es5/classes/texture-cube.js.map +0 -1
  581. package/dist/es5/classes/texture-formats.js +0 -87
  582. package/dist/es5/classes/texture-formats.js.map +0 -1
  583. package/dist/es5/classes/texture.js.map +0 -1
  584. package/dist/es5/classes/transform-feedback.js +0 -267
  585. package/dist/es5/classes/transform-feedback.js.map +0 -1
  586. package/dist/es5/classes/uniform-buffer-layout.js +0 -130
  587. package/dist/es5/classes/uniform-buffer-layout.js.map +0 -1
  588. package/dist/es5/classes/uniforms.js +0 -232
  589. package/dist/es5/classes/uniforms.js.map +0 -1
  590. package/dist/es5/classes/vertex-array-object.js +0 -337
  591. package/dist/es5/classes/vertex-array-object.js.map +0 -1
  592. package/dist/es5/classes/vertex-array.js +0 -465
  593. package/dist/es5/classes/vertex-array.js.map +0 -1
  594. package/dist/es5/classes/webgl-buffer.js.map +0 -1
  595. package/dist/es5/classes/webgl-resource.js.map +0 -1
  596. package/dist/es5/context/context/create-context.js.map +0 -1
  597. package/dist/es5/context/context/get-canvas.js +0 -40
  598. package/dist/es5/context/context/get-canvas.js.map +0 -1
  599. package/dist/es5/context/context/resize-context.js +0 -23
  600. package/dist/es5/context/context/resize-context.js.map +0 -1
  601. package/dist/es5/context/parameters/webgl-parameters.js.map +0 -1
  602. package/dist/es5/debug/debug-program-configuration.js +0 -76
  603. package/dist/es5/debug/debug-program-configuration.js.map +0 -1
  604. package/dist/es5/debug/debug-uniforms.js +0 -156
  605. package/dist/es5/debug/debug-uniforms.js.map +0 -1
  606. package/dist/es5/debug/debug-vertex-array.js +0 -126
  607. package/dist/es5/debug/debug-vertex-array.js.map +0 -1
  608. package/dist/es5/helpers/get-program-bindings.js.map +0 -1
  609. package/dist/es5/helpers/program-bindings.js +0 -2
  610. package/dist/es5/types/accessor.d.ts +0 -29
  611. package/dist/es5/webgl-utils/attribute-utils.js +0 -186
  612. package/dist/es5/webgl-utils/attribute-utils.js.map +0 -1
  613. package/dist/es5/webgl-utils/constants-to-keys.js.map +0 -1
  614. package/dist/es5/webgl-utils/format-utils.js +0 -58
  615. package/dist/es5/webgl-utils/format-utils.js.map +0 -1
  616. package/dist/es5/webgl-utils/get-error.js +0 -49
  617. package/dist/es5/webgl-utils/get-error.js.map +0 -1
  618. package/dist/es5/webgl-utils/index.js +0 -74
  619. package/dist/es5/webgl-utils/index.js.map +0 -1
  620. package/dist/es5/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  621. package/dist/es5/webgl-utils/request-animation-frame.js +0 -16
  622. package/dist/es5/webgl-utils/request-animation-frame.js.map +0 -1
  623. package/dist/es5/webgl-utils/texture-utils.js +0 -61
  624. package/dist/es5/webgl-utils/texture-utils.js.map +0 -1
  625. package/dist/es5/webgl-utils/typed-array-utils.js.map +0 -1
  626. package/dist/esm/_deprecated/context-api.js +0 -70
  627. package/dist/esm/_deprecated/context-api.js.map +0 -1
  628. package/dist/esm/_deprecated/features.js +0 -111
  629. package/dist/esm/_deprecated/features.js.map +0 -1
  630. package/dist/esm/adapter/converters/set-device-parameters.js.map +0 -1
  631. package/dist/esm/adapter/converters/webgpu-texture-formats.js +0 -285
  632. package/dist/esm/adapter/converters/webgpu-texture-formats.js.map +0 -1
  633. package/dist/esm/adapter/webgl-shader.js.map +0 -1
  634. package/dist/esm/classes/accessor.d.ts +0 -28
  635. package/dist/esm/classes/accessor.js.map +0 -1
  636. package/dist/esm/classes/clear.js +0 -105
  637. package/dist/esm/classes/clear.js.map +0 -1
  638. package/dist/esm/classes/copy-and-blit.js +0 -338
  639. package/dist/esm/classes/copy-and-blit.js.map +0 -1
  640. package/dist/esm/classes/framebuffer.js +0 -656
  641. package/dist/esm/classes/framebuffer.js.map +0 -1
  642. package/dist/esm/classes/program-configuration.js +0 -73
  643. package/dist/esm/classes/program-configuration.js.map +0 -1
  644. package/dist/esm/classes/program.js +0 -379
  645. package/dist/esm/classes/program.js.map +0 -1
  646. package/dist/esm/classes/query.js +0 -145
  647. package/dist/esm/classes/query.js.map +0 -1
  648. package/dist/esm/classes/renderbuffer-formats.js.map +0 -1
  649. package/dist/esm/classes/renderbuffer.js.map +0 -1
  650. package/dist/esm/classes/shader.js +0 -118
  651. package/dist/esm/classes/shader.js.map +0 -1
  652. package/dist/esm/classes/texture-2d.js +0 -36
  653. package/dist/esm/classes/texture-2d.js.map +0 -1
  654. package/dist/esm/classes/texture-3d.js +0 -76
  655. package/dist/esm/classes/texture-3d.js.map +0 -1
  656. package/dist/esm/classes/texture-cube.js +0 -130
  657. package/dist/esm/classes/texture-cube.js.map +0 -1
  658. package/dist/esm/classes/texture-formats.js +0 -98
  659. package/dist/esm/classes/texture-formats.js.map +0 -1
  660. package/dist/esm/classes/texture.js.map +0 -1
  661. package/dist/esm/classes/transform-feedback.js +0 -198
  662. package/dist/esm/classes/transform-feedback.js.map +0 -1
  663. package/dist/esm/classes/uniform-buffer-layout.js +0 -104
  664. package/dist/esm/classes/uniform-buffer-layout.js.map +0 -1
  665. package/dist/esm/classes/uniforms.js +0 -250
  666. package/dist/esm/classes/uniforms.js.map +0 -1
  667. package/dist/esm/classes/vertex-array-object.js +0 -261
  668. package/dist/esm/classes/vertex-array-object.js.map +0 -1
  669. package/dist/esm/classes/vertex-array.js +0 -408
  670. package/dist/esm/classes/vertex-array.js.map +0 -1
  671. package/dist/esm/classes/webgl-buffer.js.map +0 -1
  672. package/dist/esm/classes/webgl-resource.js.map +0 -1
  673. package/dist/esm/context/context/create-context.js.map +0 -1
  674. package/dist/esm/context/context/get-canvas.js +0 -31
  675. package/dist/esm/context/context/get-canvas.js.map +0 -1
  676. package/dist/esm/context/context/resize-context.js +0 -15
  677. package/dist/esm/context/context/resize-context.js.map +0 -1
  678. package/dist/esm/context/parameters/webgl-parameters.js +0 -2
  679. package/dist/esm/context/parameters/webgl-parameters.js.map +0 -1
  680. package/dist/esm/debug/debug-program-configuration.js +0 -40
  681. package/dist/esm/debug/debug-program-configuration.js.map +0 -1
  682. package/dist/esm/debug/debug-uniforms.js +0 -108
  683. package/dist/esm/debug/debug-uniforms.js.map +0 -1
  684. package/dist/esm/debug/debug-vertex-array.js +0 -118
  685. package/dist/esm/debug/debug-vertex-array.js.map +0 -1
  686. package/dist/esm/helpers/get-program-bindings.js +0 -228
  687. package/dist/esm/helpers/get-program-bindings.js.map +0 -1
  688. package/dist/esm/helpers/program-bindings.js +0 -2
  689. package/dist/esm/types/accessor.d.ts +0 -29
  690. package/dist/esm/webgl-utils/attribute-utils.js +0 -182
  691. package/dist/esm/webgl-utils/attribute-utils.js.map +0 -1
  692. package/dist/esm/webgl-utils/constants-to-keys.js.map +0 -1
  693. package/dist/esm/webgl-utils/format-utils.js +0 -45
  694. package/dist/esm/webgl-utils/format-utils.js.map +0 -1
  695. package/dist/esm/webgl-utils/get-error.js +0 -41
  696. package/dist/esm/webgl-utils/get-error.js.map +0 -1
  697. package/dist/esm/webgl-utils/index.js +0 -5
  698. package/dist/esm/webgl-utils/index.js.map +0 -1
  699. package/dist/esm/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  700. package/dist/esm/webgl-utils/request-animation-frame.js +0 -7
  701. package/dist/esm/webgl-utils/request-animation-frame.js.map +0 -1
  702. package/dist/esm/webgl-utils/texture-utils.js +0 -48
  703. package/dist/esm/webgl-utils/texture-utils.js.map +0 -1
  704. package/dist/esm/webgl-utils/typed-array-utils.js.map +0 -1
  705. package/dist/helpers/get-program-bindings.d.ts +0 -8
  706. package/dist/helpers/get-program-bindings.d.ts.map +0 -1
  707. package/dist/helpers/get-program-bindings.js +0 -228
  708. package/dist/helpers/get-program-bindings.js.map +0 -1
  709. package/dist/helpers/program-bindings.d.ts +0 -41
  710. package/dist/helpers/program-bindings.d.ts.map +0 -1
  711. package/dist/helpers/program-bindings.js +0 -2
  712. package/dist/types/accessor.d.ts +0 -29
  713. package/dist/webgl-utils/attribute-utils.d.ts +0 -18
  714. package/dist/webgl-utils/attribute-utils.d.ts.map +0 -1
  715. package/dist/webgl-utils/attribute-utils.js +0 -182
  716. package/dist/webgl-utils/attribute-utils.js.map +0 -1
  717. package/dist/webgl-utils/constants-to-keys.d.ts +0 -4
  718. package/dist/webgl-utils/constants-to-keys.d.ts.map +0 -1
  719. package/dist/webgl-utils/constants-to-keys.js.map +0 -1
  720. package/dist/webgl-utils/format-utils.d.ts +0 -3
  721. package/dist/webgl-utils/format-utils.d.ts.map +0 -1
  722. package/dist/webgl-utils/format-utils.js +0 -45
  723. package/dist/webgl-utils/format-utils.js.map +0 -1
  724. package/dist/webgl-utils/get-error.d.ts +0 -3
  725. package/dist/webgl-utils/get-error.d.ts.map +0 -1
  726. package/dist/webgl-utils/get-error.js +0 -41
  727. package/dist/webgl-utils/get-error.js.map +0 -1
  728. package/dist/webgl-utils/index.d.ts +0 -5
  729. package/dist/webgl-utils/index.d.ts.map +0 -1
  730. package/dist/webgl-utils/index.js +0 -5
  731. package/dist/webgl-utils/index.js.map +0 -1
  732. package/dist/webgl-utils/parse-shader-compiler-log.d.ts.map +0 -1
  733. package/dist/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  734. package/dist/webgl-utils/request-animation-frame.d.ts +0 -4
  735. package/dist/webgl-utils/request-animation-frame.d.ts.map +0 -1
  736. package/dist/webgl-utils/request-animation-frame.js +0 -7
  737. package/dist/webgl-utils/request-animation-frame.js.map +0 -1
  738. package/dist/webgl-utils/texture-utils.d.ts +0 -15
  739. package/dist/webgl-utils/texture-utils.d.ts.map +0 -1
  740. package/dist/webgl-utils/texture-utils.js +0 -48
  741. package/dist/webgl-utils/texture-utils.js.map +0 -1
  742. package/dist/webgl-utils/typed-array-utils.d.ts.map +0 -1
  743. package/dist/webgl-utils/typed-array-utils.js.map +0 -1
  744. package/src/.DS_Store +0 -0
  745. package/src/_deprecated/context-api.ts +0 -140
  746. package/src/_deprecated/features.ts +0 -159
  747. package/src/adapter/converters/webgpu-texture-formats.ts +0 -167
  748. package/src/classes/accessor.d.ts +0 -28
  749. package/src/classes/accessor.js +0 -129
  750. package/src/classes/accessor.ts.disabled +0 -159
  751. package/src/classes/clear.ts +0 -108
  752. package/src/classes/copy-and-blit.ts +0 -460
  753. package/src/classes/framebuffer.ts +0 -763
  754. package/src/classes/program-configuration.ts +0 -77
  755. package/src/classes/program.ts +0 -431
  756. package/src/classes/query.ts +0 -171
  757. package/src/classes/renderbuffer.ts +0 -154
  758. package/src/classes/shader.ts +0 -129
  759. package/src/classes/texture-2d.ts +0 -35
  760. package/src/classes/texture-3d.ts +0 -123
  761. package/src/classes/texture-cube.ts +0 -162
  762. package/src/classes/texture-formats.ts +0 -171
  763. package/src/classes/texture.ts +0 -965
  764. package/src/classes/transform-feedback.ts +0 -191
  765. package/src/classes/uniform-buffer-layout.ts +0 -113
  766. package/src/classes/uniforms.ts +0 -394
  767. package/src/classes/vertex-array-object.ts +0 -339
  768. package/src/classes/vertex-array.ts +0 -484
  769. package/src/context/context/get-canvas.ts +0 -37
  770. package/src/context/context/resize-context.ts +0 -37
  771. package/src/context/parameters/webgl-parameters.ts +0 -197
  772. package/src/debug/debug-program-configuration.ts +0 -32
  773. package/src/debug/debug-uniforms.ts +0 -100
  774. package/src/debug/debug-vertex-array.ts +0 -123
  775. package/src/helpers/get-program-bindings.ts +0 -244
  776. package/src/helpers/program-bindings.ts +0 -46
  777. package/src/types/accessor.d.ts +0 -29
  778. package/src/webgl-utils/attribute-utils.ts +0 -171
  779. package/src/webgl-utils/format-utils.ts +0 -43
  780. package/src/webgl-utils/get-error.ts +0 -56
  781. package/src/webgl-utils/index.ts +0 -12
  782. package/src/webgl-utils/request-animation-frame.ts +0 -14
  783. package/src/webgl-utils/texture-utils.ts +0 -60
@@ -1,122 +1,134 @@
1
1
  // luma.gl, MIT license
2
- import {Device, DeviceInfo, DeviceLimits, log} from '@luma.gl/api';
2
+ import type {
3
+ DeviceProps,
4
+ DeviceInfo,
5
+ DeviceLimits,
6
+ DeviceFeature,
7
+ CanvasContextProps,
8
+ TextureFormat
9
+ } from '@luma.gl/api';
10
+ import {Device, CanvasContext, log, assert} from '@luma.gl/api';
11
+ import {isBrowser} from '@probe.gl/env';
3
12
  import {polyfillContext} from '../context/polyfill/polyfill-context';
4
13
  import {trackContextState} from '../context/state-tracker/track-context-state';
5
- import { ContextState } from '../context/context/context-state';
6
- import {getDevicePixelRatio, setDevicePixelRatio} from '../context/context/device-pixels';
7
- import {createBrowserContext} from '../context/context/create-context';
8
- import {getCanvas} from '../context/context/get-canvas';
9
- import {isWebGL, isWebGL2} from '../context/context/webgl-checks';
14
+ import {ContextState} from '../context/context/context-state';
15
+ import {createBrowserContext} from '../context/context/create-browser-context';
16
+ import {
17
+ createHeadlessContext,
18
+ isHeadlessGLRegistered
19
+ } from '../context/context/create-headless-context';
10
20
  import {getDeviceInfo} from './device-helpers/get-device-info';
11
- import {getDeviceFeatures, Feature} from './device-helpers/device-features';
21
+ import {getDeviceFeatures} from './device-helpers/device-features';
12
22
  import {getDeviceLimits, getWebGLLimits, WebGLLimits} from './device-helpers/device-limits';
23
+ import WebGLCanvasContext from './webgl-canvas-context';
24
+ import {loadSpectorJS, initializeSpectorJS} from '../context/debug/spector';
25
+ import {loadWebGLDeveloperTools, makeDebugContext} from '../context/debug/webgl-developer-tools';
26
+ import {
27
+ isTextureFormatSupported,
28
+ isTextureFormatRenderable,
29
+ isTextureFormatFilterable
30
+ } from './converters/texture-formats';
13
31
 
14
32
  // WebGL classes
15
- import type {BufferProps, ShaderProps} from '@luma.gl/api';
16
- import WEBGLBuffer from '../classes/webgl-buffer';
17
- import {WEBGLShader} from '../adapter/webgl-shader';
18
- import Texture2D, {Texture2DProps} from '../classes/texture-2d';
19
- import type {default as Framebuffer} from '../classes/framebuffer';
20
- import type {default as VertexArrayObject} from '../classes/vertex-array-object';
21
-
22
- /** WebGLDevice options */
23
- export type WebGLDeviceProps = {
24
- canvas?: HTMLCanvasElement | OffscreenCanvas | string; // A canvas element or a canvas string id
25
- width?: number /** width is only used when creating a new canvas */;
26
- height?: number /** height is only used when creating a new canvas */;
27
- // Attach to existing context
28
- gl?: WebGLRenderingContext | WebGL2RenderingContext;
29
- // COMMON CONTEXT PARAMETERS
30
- webgl2?: boolean; // Set to false to not create a WebGL2 context (force webgl1)
31
- webgl1?: boolean; // set to false to not create a WebGL1 context (fails if webgl2 not available)
32
- manageState?: boolean; // Set to false to disable WebGL state management instrumentation
33
- debug?: boolean; // Instrument context (at the expense of performance)
34
- break?: Array<any>; // TODO: types
35
- onContextLost?: (event: Event) => void;
36
- onContextRestored?: (event: Event) => void;
37
- // BROWSER CONTEXT PARAMETERS
38
- alpha?: boolean; // Default render target has an alpha buffer.
39
- depth?: boolean; // Default render target has a depth buffer of at least 16 bits.
40
- stencil?: boolean; // Default render target has a stencil buffer of at least 8 bits.
41
- antialias?: boolean; // Boolean that indicates whether or not to perform anti-aliasing.
42
- premultipliedAlpha?: boolean; // Boolean that indicates that the page compositor will assume the drawing buffer contains colors with pre-multiplied alpha.
43
- preserveDrawingBuffer?: boolean; // Default render target buffers will not be automatically cleared and will preserve their values until cleared or overwritten
44
- failIfMajorPerformanceCaveat?: boolean; // Do not create if the system performance is low.
45
- };
46
-
47
- const DEFAULT_DEVICE_PROPS: Required<WebGLDeviceProps> = {
48
- canvas: undefined, // A canvas element or a canvas string id
49
- gl: undefined,
50
- webgl2: true, // Attempt to create a WebGL2 context
51
- webgl1: true, // Attempt to create a WebGL1 context (false to fail if webgl2 not available)
52
- manageState: true,
53
- width: 800, // width are height are only used by headless gl
54
- height: 600,
55
- debug: false, // Instrument context (at the expense of performance)
56
- break: undefined,
57
- onContextLost: () => console.error('WebGL context lost'),
58
- onContextRestored: () => console.info('WebGL context restored'),
59
-
60
- alpha: undefined,
61
- depth: undefined,
62
- stencil: undefined,
63
- antialias: undefined,
64
- premultipliedAlpha: undefined,
65
- preserveDrawingBuffer: undefined,
66
- failIfMajorPerformanceCaveat: undefined
67
- };
68
-
69
- // TODO use weakmap instead of modifying context
70
- const glToContextMap = new WeakMap<WebGLRenderingContext | WebGL2RenderingContext, WebGLDevice>();
71
-
72
- export function getWebGLDevice(gl: WebGLRenderingContext | WebGL2RenderingContext): WebGLDevice | undefined {
73
- return glToContextMap.get(gl);
74
- }
33
+ import type {
34
+ BufferProps,
35
+ ShaderProps,
36
+ Sampler,
37
+ SamplerProps,
38
+ TextureProps,
39
+ ExternalTexture,
40
+ ExternalTextureProps,
41
+ FramebufferProps,
42
+ RenderPipeline,
43
+ RenderPipelineProps,
44
+ ComputePipeline,
45
+ ComputePipelineProps,
46
+ RenderPass,
47
+ RenderPassProps,
48
+ ComputePass,
49
+ ComputePassProps
50
+ } from '@luma.gl/api';
51
+
52
+ import ClassicBuffer from '../classic/buffer';
53
+ import WEBGLBuffer from './resources/webgl-buffer';
54
+ import WEBGLShader from './resources/webgl-shader';
55
+ import WEBGLSampler from './resources/webgl-sampler';
56
+ import WEBGLTexture from './resources/webgl-texture';
57
+ import WEBGLFramebuffer from './resources/webgl-framebuffer';
58
+ import WEBGLRenderPass from './resources/webgl-render-pass';
59
+ import WEBGLRenderPipeline from './resources/webgl-render-pipeline';
60
+
61
+ const LOG_LEVEL = 1;
75
62
 
76
63
  let counter = 0;
77
64
 
78
65
  /** WebGPU style Device API for a WebGL context */
79
66
  export default class WebGLDevice extends Device implements ContextState {
80
- // WebGPU style API
67
+ //
68
+ // Public `Device` API
69
+ //
70
+
71
+ static type: string = 'webgl';
72
+
73
+ static isSupported(): boolean {
74
+ return typeof WebGLRenderingContext !== 'undefined' || isHeadlessGLRegistered();
75
+ }
81
76
 
82
- /** A set like interface to test features */
83
- readonly features: Set<Feature>;
84
- readonly limits: DeviceLimits;
85
77
  readonly info: DeviceInfo;
78
+ readonly canvasContext: WebGLCanvasContext;
86
79
 
87
- /** Promise that rejects when context is lost */
88
- readonly lost: Promise<string>;
80
+ readonly handle: WebGLRenderingContext;
89
81
 
90
- // Common API
91
- props: Required<WebGLDeviceProps>;
92
- userData: {[key: string]: any};
82
+ get features(): Set<DeviceFeature> {
83
+ this._features = this._features || getDeviceFeatures(this.gl);
84
+ return this._features;
85
+ }
93
86
 
94
- // WebGL specific API
95
- readonly isWebGL2: boolean;
87
+ get limits(): DeviceLimits {
88
+ this._limits = this._limits || getDeviceLimits(this.gl);
89
+ return this._limits;
90
+ }
91
+
92
+ readonly lost: Promise<{reason: 'destroyed'; message: string}>;
93
+
94
+ private _resolveContextLost?: (value: {reason: 'destroyed'; message: string}) => void;
95
+ private _features?: Set<DeviceFeature>;
96
+ private _limits?: DeviceLimits;
97
+
98
+ //
99
+ // WebGL-only API (not part of `Device` API)
100
+ //
101
+
102
+ /** WebGL1 typed context. Can always be used. */
96
103
  readonly gl: WebGLRenderingContext;
97
- readonly gl2: WebGL2RenderingContext;
98
- /** Is this device attached to an offscreen context */
99
- readonly offScreen: boolean = false;
104
+ /** WebGL2 typed context. Need to check isWebGL2 or isWebGL1 before using. */
105
+ readonly gl2: WebGL2RenderingContext | null = null;
106
+ readonly debug: boolean = false;
100
107
 
101
- readonly webglFeatures: Set<string>;
102
- readonly webglLimits: WebGLLimits;
108
+ /** `true` if this is a WebGL1 context. @note `false` if WebGL2 */
109
+ readonly isWebGL1: boolean;
110
+ /** `true` if this is a WebGL2 context. @note `false` if WebGL1 */
111
+ readonly isWebGL2: boolean;
112
+
113
+ get webglLimits(): WebGLLimits {
114
+ this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
115
+ return this._webglLimits;
116
+ }
103
117
 
104
- defaultFramebuffer?: Framebuffer;
105
- defaultVertexArray?: VertexArrayObject;
118
+ private _webglLimits?: WebGLLimits;
106
119
 
107
- // State used by luma.gl classes
108
- _state: 'uninitialized' | 'initializing' | 'initialized' = 'uninitialized';
120
+ /** State used by luma.gl classes: TODO - move to canvasContext*/
109
121
  readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
122
+ /** State used by luma.gl classes */
110
123
  readonly _extensions: Record<string, any> = {};
111
124
  _polyfilled: boolean = false;
112
125
 
113
- /**
114
- *
115
- */
116
- static fromContext(gl: WebGLRenderingContext): WebGLDevice {
117
- // @ts-expect-error
118
- return gl.device as WebGLDevice;
119
- }
126
+ /** Instance of Spector.js (if initialized) */
127
+ spector;
128
+
129
+ //
130
+ // Static methods, expected to be present by `luma.createDevice()`
131
+ //
120
132
 
121
133
  /**
122
134
  * Get a device instance from a GL context
@@ -124,105 +136,134 @@ export default class WebGLDevice extends Device implements ContextState {
124
136
  * @param gl
125
137
  * @returns
126
138
  */
127
- static attach(
128
- gl: Device | WebGLRenderingContext | WebGL2RenderingContext,
129
- props?: WebGLDeviceProps
130
- ): WebGLDevice {
139
+ static attach(gl: Device | WebGLRenderingContext | WebGL2RenderingContext): WebGLDevice {
131
140
  if (gl instanceof WebGLDevice) {
132
141
  return gl;
133
142
  }
143
+ // @ts-expect-error
144
+ if (gl?.device instanceof Device) {
145
+ // @ts-expect-error
146
+ return gl.device as WebGLDevice;
147
+ }
134
148
  if (!isWebGL(gl)) {
135
149
  throw new Error('Invalid WebGLRenderingContext');
136
150
  }
137
- return new WebGLDevice({...props, gl: gl as WebGLRenderingContext});
151
+ return new WebGLDevice({gl: gl as WebGLRenderingContext});
138
152
  }
139
153
 
154
+ static async create(props: DeviceProps = {}): Promise<WebGLDevice> {
155
+ log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created');
140
156
 
141
- constructor(props: WebGLDeviceProps) {
142
- super();
157
+ // Wait for page to load. Only wait when props. canvas is string
158
+ // to avoid setting page onload callback unless necessary
159
+ if (typeof props.canvas === 'string') {
160
+ await CanvasContext.pageLoaded;
161
+ }
162
+
163
+ // Load webgl and spector debug scripts from CDN if requested
164
+ if (props.debug) {
165
+ await loadWebGLDeveloperTools();
166
+ }
167
+ // @ts-expect-error spector not on props
168
+ if (props.spector) {
169
+ await loadSpectorJS();
170
+ }
171
+
172
+ log.probe(LOG_LEVEL + 1, 'DOM is loaded')();
173
+
174
+ // @ts-expect-error
175
+ if (props.gl && props.gl.device) {
176
+ return WebGLDevice.attach(props.gl);
177
+ }
178
+
179
+ return new WebGLDevice(props);
180
+ }
181
+
182
+ //
183
+ // Public API
184
+ //
143
185
 
144
- this.props = {...DEFAULT_DEVICE_PROPS, ...props};
186
+ constructor(props: DeviceProps) {
187
+ super(props);
145
188
 
146
189
  // If attaching to an already attached context, return the attached device
147
190
  // @ts-expect-error device is attached to context
148
- const device: WebGLDevice | undefined = this.props.gl?.device;
191
+ const device: WebGLDevice | undefined = props.gl?.device;
149
192
  if (device) {
150
- if (device._state !== 'initialized') {
151
- log.error('recursive context');
152
- throw new Error('recursive context');
153
- }
154
- return device;
193
+ throw new Error(`WebGL context already attached to device ${device.id}`);
155
194
  }
156
195
 
157
- this.offScreen =
158
- typeof OffscreenCanvas !== 'undefined' &&
159
- props.canvas instanceof OffscreenCanvas;
196
+ // Create and instrument context
197
+ this.canvasContext = new WebGLCanvasContext(this, props);
198
+
199
+ this.lost = new Promise<{reason: 'destroyed'; message: string}>((resolve) => {
200
+ this._resolveContextLost = resolve;
201
+ });
202
+
203
+ const onContextLost = (event: Event) =>
204
+ this._resolveContextLost?.({
205
+ reason: 'destroyed',
206
+ message: 'Computer entered sleep mode, or too many apps or browser tabs are using the GPU.'
207
+ });
160
208
 
161
- // Create an instrument context
162
- this.gl = (this.props.gl || this._createContext(props)) as WebGLRenderingContext;
209
+ let gl: WebGLRenderingContext | WebGL2RenderingContext | null = props.gl;
210
+ gl =
211
+ gl ||
212
+ (isBrowser() ? createBrowserContext(this.canvasContext.canvas, {...props, onContextLost}) : null);
213
+ gl = gl || (!isBrowser() ? createHeadlessContext({...props, onContextLost}) : null);
214
+
215
+ if (!gl) {
216
+ throw new Error('WebGL context creation failed');
217
+ }
218
+
219
+ this.handle = gl;
220
+ this.gl = this.handle;
163
221
  this.gl2 = this.gl as WebGL2RenderingContext;
164
222
  this.isWebGL2 = isWebGL2(this.gl);
165
- this._state = 'initializing';
166
- // Avoid multiple instrumentations
167
- // @ts-expect-error
168
- if (this.gl.device) {
169
- log.error('device already created');
170
- throw new Error('device already created'); // ASSERT this device;
171
- }
172
- // @ts-expect-error
173
- this.gl.device = this;
174
- // @ts-ignore
175
- this.gl._version = typeof WebGL2RenderingContext !== 'undefined' && this.gl instanceof WebGL2RenderingContext ? 2 : 1;
176
- // TODO - move to weak map indexing
177
- glToContextMap.set(this.gl, this);
223
+ this.isWebGL1 = !this.isWebGL2;
178
224
 
179
- // Luma Device fields
225
+ // luma Device fields
180
226
  this.info = getDeviceInfo(this.gl);
181
- // Log some debug info about the newly created context
182
- // @ts-expect-error device is attached to context
183
- const debug = this.gl.debug ? ' debug' : '';
184
- const webGL = isWebGL2(this.gl) ? 'WebGL2' : 'WebGL1';
185
- log.group(0, `${webGL}${debug} context: ${this.info.vendor}, ${this.info.renderer}`)();
186
227
 
228
+ // @ts-expect-error Link webgl context back to device
229
+ this.gl.device = this;
230
+ // @ts-expect-error Annotate webgl context to handle
231
+ this.gl._version = this.isWebGL2 ? 2 : 1;
232
+
233
+ // Add subset of WebGL2 methods to WebGL1 context
187
234
  polyfillContext(this.gl);
188
- log.probe(0, 'polyfilled context')();
189
235
 
190
236
  // Install context state tracking
237
+ // @ts-expect-error - hidden parameters
238
+ const {enable = true, copyState = false} = props;
191
239
  trackContextState(this.gl, {
192
- copyState: false,
193
- log: (...args) => log.log(1, ...args)()
240
+ enable,
241
+ copyState,
242
+ log: (...args: any[]) => log.log(1, ...args)()
194
243
  });
195
- log.probe(0, 'instrumented context')();
196
-
197
- // WebGPU Device fields
198
- this.features = getDeviceFeatures(this.gl);
199
- log.probe(0, `queried device features ${counter}`)();
200
- this.limits = getDeviceLimits(this.gl);
201
- log.probe(0, 'queried device limits')();
202
-
203
- // Add seer integration - TODO - currently removed
204
-
205
- // WEBGL specific fields
206
- this.webglLimits = getWebGLLimits(this.gl);
207
- log.probe(0, 'queried webgl limits')();
208
-
209
- // Add debug instrumentation to the context
210
- // if (isBrowser() && props.debug) {
211
- // // @ts-ignore
212
- // const {makeDebugContext} = global;
213
- // if (!makeDebugContext) {
214
- // log.warn('WebGL debug mode not activated. import "@luma.gl/debug" to enable.')();
215
- // } else {
216
- // // @ts-ignore
217
- // this.gl = global.makeDebugContext(this.gl, props);
218
- // this.gl2 = this.gl as WebGL2RenderingContext;
219
- // // Debug forces log level to at least 1
220
- // log.level = Math.max(log.level, 1);
221
- // }
222
- // }
223
-
224
- log.groupEnd(0)();
225
- this._state = 'initialized';
244
+
245
+ // DEBUG contexts: Add debug instrumentation to the context, force log level to at least 1
246
+ if (isBrowser() && props.debug) {
247
+ this.gl = makeDebugContext(this.gl, {...props, webgl2: this.isWebGL2, throwOnError: true});
248
+ this.gl2 = this.gl as WebGL2RenderingContext;
249
+ this.debug = true;
250
+ log.level = Math.max(log.level, 1);
251
+ log.warn('WebGL debug mode activated. Performance reduced.')();
252
+ }
253
+
254
+ // @ts-expect-error spector not on props
255
+ if (isBrowser() && props.spector) {
256
+ const canvas = this.handle.canvas || (props.canvas as HTMLCanvasElement);
257
+ this.spector = initializeSpectorJS({...this.props, canvas});
258
+ }
259
+
260
+ // Log some debug info about the newly created context
261
+ const message = `\
262
+ Created ${this.info.type}${this.debug ? ' debug' : ''} context: \
263
+ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`;
264
+ log.probe(LOG_LEVEL, message)();
265
+
266
+ log.groupEnd(LOG_LEVEL)();
226
267
  }
227
268
 
228
269
  /**
@@ -230,177 +271,144 @@ export default class WebGLDevice extends Device implements ContextState {
230
271
  * @note Has no effect for browser contexts, there is no browser API for destroying contexts
231
272
  */
232
273
  destroy() {
233
- let ext = this.gl.getExtension('STACKGL_destroy_context');
274
+ const ext = this.gl.getExtension('STACKGL_destroy_context');
234
275
  if (ext) {
235
276
  ext.destroy();
236
277
  }
237
- // ext = this.gl.getExtension('WEBGL_lose_context');
238
- // if (ext) {
239
- // // TODO - disconnect context lost callbacks?
240
- // ext.loseContext();
241
- // }
242
278
  }
243
279
 
244
- // WEBGL SPECIFIC METHODS
245
-
246
280
  /**
247
- * Resize the canvas' drawing buffer.
248
- *
249
- * Can match the canvas CSS size, and optionally also consider devicePixelRatio
250
- * Can be called every frame
251
- *
252
- * Regardless of size, the drawing buffer will always be scaled to the viewport, but
253
- * for best visual results, usually set to either:
254
- * canvas CSS width x canvas CSS height
255
- * canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio
256
- * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html
281
+ * Loses the context
282
+ * @note Triggers context loss, mainly for testing
257
283
  */
258
- resize(options?: {width?: number; height?: number; useDevicePixels?: boolean | number}): void {
259
- // Resize browser context .
260
- if (this.gl.canvas) {
261
- const devicePixelRatio = getDevicePixelRatio(options?.useDevicePixels);
262
- setDevicePixelRatio(this.gl, devicePixelRatio, options);
263
- return;
264
- }
265
-
266
- // Resize headless gl context
267
- const ext = this.gl.getExtension('STACKGL_resize_drawingbuffer');
268
- if (ext && options && `width` in options && `height` in options) {
269
- ext.resize(options.width, options.height);
284
+ loseDevice() {
285
+ const ext = this.gl.getExtension('WEBGL_lose_context');
286
+ if (ext) {
287
+ ext.loseContext();
270
288
  }
289
+ // loseContext should trigger context loss callback but
290
+ this._resolveContextLost?.({
291
+ reason: 'destroyed',
292
+ message: 'Application triggered context loss'
293
+ });
271
294
  }
272
295
 
273
- _createBuffer(props: BufferProps): WEBGLBuffer {
274
- return new WEBGLBuffer(this.gl, props);
296
+ get isLost(): boolean {
297
+ return this.gl.isContextLost();
275
298
  }
276
299
 
277
- createTexture(props: Texture2DProps): Texture2D {
278
- return new Texture2D(this, props);
300
+ getSize(): [number, number] {
301
+ return [this.gl.drawingBufferWidth, this.gl.drawingBufferHeight];
279
302
  }
280
303
 
281
- createShader(props: ShaderProps): WEBGLShader {
282
- return new WEBGLShader(this, props);
304
+ isTextureFormatSupported(format: TextureFormat): boolean {
305
+ return isTextureFormatSupported(this.gl, format);
283
306
  }
284
307
 
285
- /**
286
- * Offscreen Canvas Support: Commit the frame
287
- * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit
288
- * Chrome's offscreen canvas does not require gl.commit
289
- */
290
- commit(): void {
291
- // @ts-expect-error gl.commit is not officially part of WebGLRenderingContext
292
- if (this.offScreen && this.gl.commit) {
293
- // @ts-expect-error gl.commit is not officially part of WebGLRenderingContext
294
- this.gl.commit();
295
- }
308
+ isTextureFormatFilterable(format: TextureFormat): boolean {
309
+ return isTextureFormatFilterable(this.gl, format);
296
310
  }
297
311
 
298
- // PRIVATE METHODS
299
-
300
- /**
301
- * Creates a context giving access to the WebGL API
302
- */
303
- _createContext(options?: WebGLDeviceProps): WebGLRenderingContext {
304
- const {width, height, canvas} = this.props;
305
- // Get or create a canvas
306
- const targetCanvas = getCanvas({canvas, width, height});
307
- // Create a WebGL context in the canvas
308
- return createBrowserContext(targetCanvas, options);
312
+ isTextureFormatRenderable(format: TextureFormat): boolean {
313
+ return isTextureFormatRenderable(this.gl, format);
309
314
  }
310
- }
311
-
312
- /*
313
- import {
314
- isWebGL, isWebGL2,
315
- createGLContext,
316
- instrumentGLContext,
317
- getContextDebugInfo,
318
- resizeGLContext
319
- } from '@luma.gl/gltools';
320
-
321
- // prettier-ignore
322
- import {
323
- Device, DeviceInfo, DeviceLimits,
324
- Buffer, BufferProps
325
- } from '@luma.gl/api';
326
315
 
327
- import {getWebGLDeviceInfo} from '../converters/webgl-device-info';
328
- import {getWebGLLimits} from '../converters/webgl-limits';
329
- import {getWebGLFeatures} from '../converters/webgl-features';
316
+ // WEBGL SPECIFIC METHODS
330
317
 
331
- export default class WEBGLDevice implements Device {
332
- readonly handle: WebGLRenderingContext;
333
- readonly gl: WebGLRenderingContext;
334
- readonly gl2: WebGL2RenderingContext | null;
335
- readonly canvas: HTMLCanvasElement;
336
-
337
- static isSupported(options: {canvas?: HTMLCanvasElement}): boolean {
338
- const {canvas} = options;
339
- let gl;
340
- try {
341
- gl = canvas && canvas.getContext("webgl");
342
- gl = gl && canvas && canvas.getContext("experimental-webgl");
343
- } catch (x) {
344
- gl = null;
318
+ /** Returns a WebGL2RenderingContext or throws an error */
319
+ assertWebGL2(): WebGL2RenderingContext {
320
+ if (!this.gl2) {
321
+ throw new Error('Requires WebGL2');
345
322
  }
346
- return Boolean(gl);
323
+ return this.gl2;
347
324
  }
348
325
 
349
- constructor(props = {}) {
350
- const {canvas, swapChainFormat = "bgra8unorm"} = props;
326
+ // IMPLEMENTATION OF ABSTRACT DEVICE
351
327
 
352
- const gl = createGLContext(props);
353
- this.handle =
354
- this.gl = gl;
355
- this.gl2 = gl instanceof WebGL2RenderingContext ? gl : null;
356
- this.canvas = canvas;
328
+ createCanvasContext(props?: CanvasContextProps): CanvasContext {
329
+ throw new Error('WebGL only supports a single canvas');
357
330
  }
358
331
 
359
- resize(width, height) {
360
- resizeGLContext(this.gl);
332
+ _createBuffer(props: BufferProps): WEBGLBuffer {
333
+ return new ClassicBuffer(this, props);
361
334
  }
362
335
 
363
- getInfo(): DeviceInfo {
364
- return getWebGLDeviceInfo(this.gl);
336
+ _createTexture(props: TextureProps): WEBGLTexture {
337
+ return new WEBGLTexture(this, props);
365
338
  }
366
339
 
367
- getLimits(): DeviceLimits {
368
- return getWebGLLimits(this.gl, this.gl2);
340
+ createExternalTexture(props: ExternalTextureProps): ExternalTexture {
341
+ throw new Error('createExternalTexture() not implemented'); // return new Program(props);
369
342
  }
370
343
 
371
- getFeatures(): string[] {
372
- return getWebGLFeatures(this.gl);
344
+ createSampler(props: SamplerProps): WEBGLSampler {
345
+ return new WEBGLSampler(this, props);
373
346
  }
374
347
 
375
- createBuffer(props: WebGPUBufferProps): WEBGLBuffer {
376
- return new WEBGLBuffer(this.gl2 || this.gl, props);
348
+ createShader(props: ShaderProps): WEBGLShader {
349
+ return new WEBGLShader(this, props);
377
350
  }
378
351
 
379
- createTexture(props: WebGPUTextureProps): WEBGLTexture {
380
- return new WEBGLTexture(this, props);
352
+ createFramebuffer(props: FramebufferProps): WEBGLFramebuffer {
353
+ return new WEBGLFramebuffer(this, props);
381
354
  }
382
355
 
383
- createSampler(props: WebGPUSamplerProps): WEBGLSampler {
384
- return new WEBGLSampler(this, props);
356
+ createRenderPipeline(props: RenderPipelineProps): WEBGLRenderPipeline {
357
+ return new WEBGLRenderPipeline(this, props);
385
358
  }
386
359
 
387
- createShader(props: WebGPUShaderProps): WEBGLShader {
388
- return new WEBGLShader(this, props);
360
+ beginRenderPass(props: RenderPassProps): WEBGLRenderPass {
361
+ return new WEBGLRenderPass(this, props);
389
362
  }
390
363
 
391
- createRenderPipeline(props: WebGPURenderPipelineProps): WEBGLPipeline {
392
- return new WEBGLRenderPipeline(this, props);
364
+ createComputePipeline(props?: ComputePipelineProps): ComputePipeline {
365
+ throw new Error('ComputePipeline not supported in WebGL');
393
366
  }
394
367
 
395
- createComputePipeline(props: WebGPUComputePipelineProps): WebGPUPipeline {
396
- return new WebGPUComputePipeline(this, props);
368
+ beginComputePass(props: ComputePassProps): ComputePass {
369
+ throw new Error('compute shaders not supported in WebGL');
397
370
  }
398
371
 
372
+ private renderPass: WEBGLRenderPass | null = null;
399
373
 
400
- // PRIVATE
374
+ getDefaultRenderPass(): WEBGLRenderPass {
375
+ this.renderPass =
376
+ this.renderPass ||
377
+ this.beginRenderPass({
378
+ framebuffer: this.canvasContext.getCurrentFramebuffer()
379
+ });
380
+ return this.renderPass;
381
+ }
401
382
 
402
- _startFrame() {}
383
+ /**
384
+ * Offscreen Canvas Support: Commit the frame
385
+ * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit
386
+ * Chrome's offscreen canvas does not require gl.commit
387
+ */
388
+ submit(): void {
389
+ this.renderPass?.endPass();
390
+ this.renderPass = null;
391
+ // this.canvasContext.commit();
392
+ }
393
+ }
394
+
395
+ /** Check if supplied parameter is a WebGLRenderingContext */
396
+ function isWebGL(gl: any): boolean {
397
+ if (typeof WebGLRenderingContext !== 'undefined' && gl instanceof WebGLRenderingContext) {
398
+ return true;
399
+ }
400
+ if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {
401
+ return true;
402
+ }
403
+ // Look for debug contexts, headless gl etc
404
+ return Boolean(gl && Number.isFinite(gl._version));
405
+ }
403
406
 
404
- _endFrame() {}
407
+ /** Check if supplied parameter is a WebGL2RenderingContext */
408
+ function isWebGL2(gl: any): boolean {
409
+ if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {
410
+ return true;
411
+ }
412
+ // Look for debug contexts, headless gl etc
413
+ return Boolean(gl && gl._version === 2);
405
414
  }
406
- */