@luma.gl/webgl 8.6.0-alpha.5 → 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 -75
  113. package/dist/adapter/webgl-device.d.ts.map +1 -1
  114. package/dist/adapter/webgl-device.js +242 -112
  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/{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 +314 -130
  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 +242 -112
  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/esm/{classes/webgl-buffer.js → 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 +293 -278
  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 -76
  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 -116
  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 -76
  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 -146
  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,123 +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
- const LOG_LEVEL = 1;
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';
70
51
 
71
- // TODO use weakmap instead of modifying context
72
- const glToContextMap = new WeakMap<WebGLRenderingContext | WebGL2RenderingContext, WebGLDevice>();
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';
73
60
 
74
- export function getWebGLDevice(gl: WebGLRenderingContext | WebGL2RenderingContext): WebGLDevice | undefined {
75
- return glToContextMap.get(gl);
76
- }
61
+ const LOG_LEVEL = 1;
77
62
 
78
63
  let counter = 0;
79
64
 
80
65
  /** WebGPU style Device API for a WebGL context */
81
66
  export default class WebGLDevice extends Device implements ContextState {
82
- // 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
+ }
83
76
 
84
- /** A set like interface to test features */
85
- readonly features: Set<Feature>;
86
- readonly limits: DeviceLimits;
87
77
  readonly info: DeviceInfo;
78
+ readonly canvasContext: WebGLCanvasContext;
88
79
 
89
- /** Promise that rejects when context is lost */
90
- readonly lost: Promise<string>;
80
+ readonly handle: WebGLRenderingContext;
91
81
 
92
- // Common API
93
- props: Required<WebGLDeviceProps>;
94
- userData: {[key: string]: any};
82
+ get features(): Set<DeviceFeature> {
83
+ this._features = this._features || getDeviceFeatures(this.gl);
84
+ return this._features;
85
+ }
95
86
 
96
- // WebGL specific API
97
- 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. */
98
103
  readonly gl: WebGLRenderingContext;
99
- readonly gl2: WebGL2RenderingContext;
100
- /** Is this device attached to an offscreen context */
101
- 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;
102
107
 
103
- 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;
104
112
 
105
- defaultFramebuffer?: Framebuffer;
106
- defaultVertexArray?: VertexArrayObject;
113
+ get webglLimits(): WebGLLimits {
114
+ this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
115
+ return this._webglLimits;
116
+ }
107
117
 
108
- // State used by luma.gl classes
109
- _state: 'uninitialized' | 'initializing' | 'initialized' = 'uninitialized';
118
+ private _webglLimits?: WebGLLimits;
119
+
120
+ /** State used by luma.gl classes: TODO - move to canvasContext*/
110
121
  readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
122
+ /** State used by luma.gl classes */
111
123
  readonly _extensions: Record<string, any> = {};
112
124
  _polyfilled: boolean = false;
113
125
 
114
- /**
115
- *
116
- */
117
- static fromContext(gl: WebGLRenderingContext): WebGLDevice {
118
- // @ts-expect-error
119
- return gl.device as WebGLDevice;
120
- }
126
+ /** Instance of Spector.js (if initialized) */
127
+ spector;
128
+
129
+ //
130
+ // Static methods, expected to be present by `luma.createDevice()`
131
+ //
121
132
 
122
133
  /**
123
134
  * Get a device instance from a GL context
@@ -125,105 +136,134 @@ export default class WebGLDevice extends Device implements ContextState {
125
136
  * @param gl
126
137
  * @returns
127
138
  */
128
- static attach(
129
- gl: Device | WebGLRenderingContext | WebGL2RenderingContext,
130
- props?: WebGLDeviceProps
131
- ): WebGLDevice {
139
+ static attach(gl: Device | WebGLRenderingContext | WebGL2RenderingContext): WebGLDevice {
132
140
  if (gl instanceof WebGLDevice) {
133
141
  return gl;
134
142
  }
143
+ // @ts-expect-error
144
+ if (gl?.device instanceof Device) {
145
+ // @ts-expect-error
146
+ return gl.device as WebGLDevice;
147
+ }
135
148
  if (!isWebGL(gl)) {
136
149
  throw new Error('Invalid WebGLRenderingContext');
137
150
  }
138
- return new WebGLDevice({...props, gl: gl as WebGLRenderingContext});
151
+ return new WebGLDevice({gl: gl as WebGLRenderingContext});
139
152
  }
140
153
 
154
+ static async create(props: DeviceProps = {}): Promise<WebGLDevice> {
155
+ log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created');
156
+
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')();
141
173
 
142
- constructor(props: WebGLDeviceProps) {
143
- super();
174
+ // @ts-expect-error
175
+ if (props.gl && props.gl.device) {
176
+ return WebGLDevice.attach(props.gl);
177
+ }
144
178
 
145
- this.props = {...DEFAULT_DEVICE_PROPS, ...props};
179
+ return new WebGLDevice(props);
180
+ }
181
+
182
+ //
183
+ // Public API
184
+ //
185
+
186
+ constructor(props: DeviceProps) {
187
+ super(props);
146
188
 
147
189
  // If attaching to an already attached context, return the attached device
148
190
  // @ts-expect-error device is attached to context
149
- const device: WebGLDevice | undefined = this.props.gl?.device;
191
+ const device: WebGLDevice | undefined = props.gl?.device;
150
192
  if (device) {
151
- if (device._state !== 'initialized') {
152
- log.error('recursive context');
153
- throw new Error('recursive context');
154
- }
155
- return device;
193
+ throw new Error(`WebGL context already attached to device ${device.id}`);
156
194
  }
157
195
 
158
- this.offScreen =
159
- typeof OffscreenCanvas !== 'undefined' &&
160
- props.canvas instanceof OffscreenCanvas;
196
+ // Create and instrument context
197
+ this.canvasContext = new WebGLCanvasContext(this, props);
161
198
 
162
- // Create an instrument context
163
- this.gl = (this.props.gl || this._createContext(props)) as WebGLRenderingContext;
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
+ });
208
+
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;
164
221
  this.gl2 = this.gl as WebGL2RenderingContext;
165
222
  this.isWebGL2 = isWebGL2(this.gl);
166
- this._state = 'initializing';
167
- // Avoid multiple instrumentations
168
- // @ts-expect-error
169
- if (this.gl.device) {
170
- log.error('device already created');
171
- throw new Error('device already created'); // ASSERT this device;
172
- }
173
- // @ts-expect-error
174
- this.gl.device = this;
175
- // @ts-ignore
176
- this.gl._version = typeof WebGL2RenderingContext !== 'undefined' && this.gl instanceof WebGL2RenderingContext ? 2 : 1;
177
- // TODO - move to weak map indexing
178
- glToContextMap.set(this.gl, this);
223
+ this.isWebGL1 = !this.isWebGL2;
179
224
 
180
- // Luma Device fields
225
+ // luma Device fields
181
226
  this.info = getDeviceInfo(this.gl);
182
- // Log some debug info about the newly created context
183
- // @ts-expect-error device is attached to context
184
- const debug = this.gl.debug ? ' debug' : '';
185
- const webGL = isWebGL2(this.gl) ? 'WebGL2' : 'WebGL1';
186
- log.groupCollapsed(LOG_LEVEL, `${webGL}${debug} context: ${this.info.vendor}, ${this.info.renderer}`)();
187
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
188
234
  polyfillContext(this.gl);
189
- log.probe(LOG_LEVEL, 'polyfilled context')();
190
235
 
191
236
  // Install context state tracking
237
+ // @ts-expect-error - hidden parameters
238
+ const {enable = true, copyState = false} = props;
192
239
  trackContextState(this.gl, {
193
- copyState: false,
194
- log: (...args) => log.log(1, ...args)()
240
+ enable,
241
+ copyState,
242
+ log: (...args: any[]) => log.log(1, ...args)()
195
243
  });
196
- log.probe(LOG_LEVEL, 'instrumented context')();
197
-
198
- // WebGPU Device fields
199
- this.features = getDeviceFeatures(this.gl);
200
- log.probe(LOG_LEVEL, `queried device features ${counter}`)();
201
- this.limits = getDeviceLimits(this.gl);
202
- log.probe(LOG_LEVEL, 'queried device limits')();
203
-
204
- // Add seer integration - TODO - currently removed
205
-
206
- // WEBGL specific fields
207
- this.webglLimits = getWebGLLimits(this.gl);
208
- log.probe(LOG_LEVEL, 'queried webgl limits')();
209
-
210
- // Add debug instrumentation to the context
211
- // if (isBrowser() && props.debug) {
212
- // // @ts-ignore
213
- // const {makeDebugContext} = global;
214
- // if (!makeDebugContext) {
215
- // log.warn('WebGL debug mode not activated. import "@luma.gl/debug" to enable.')();
216
- // } else {
217
- // // @ts-ignore
218
- // this.gl = global.makeDebugContext(this.gl, props);
219
- // this.gl2 = this.gl as WebGL2RenderingContext;
220
- // // Debug forces log level to at least 1
221
- // log.level = Math.max(log.level, 1);
222
- // }
223
- // }
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)();
224
265
 
225
266
  log.groupEnd(LOG_LEVEL)();
226
- this._state = 'initialized';
227
267
  }
228
268
 
229
269
  /**
@@ -231,169 +271,144 @@ export default class WebGLDevice extends Device implements ContextState {
231
271
  * @note Has no effect for browser contexts, there is no browser API for destroying contexts
232
272
  */
233
273
  destroy() {
234
- let ext = this.gl.getExtension('STACKGL_destroy_context');
274
+ const ext = this.gl.getExtension('STACKGL_destroy_context');
235
275
  if (ext) {
236
276
  ext.destroy();
237
277
  }
238
- // ext = this.gl.getExtension('WEBGL_lose_context');
239
- // if (ext) {
240
- // // TODO - disconnect context lost callbacks?
241
- // ext.loseContext();
242
- // }
243
278
  }
244
279
 
245
- // WEBGL SPECIFIC METHODS
246
-
247
280
  /**
248
- * Resize the canvas' drawing buffer.
249
- *
250
- * Can match the canvas CSS size, and optionally also consider devicePixelRatio
251
- * Can be called every frame
252
- *
253
- * Regardless of size, the drawing buffer will always be scaled to the viewport, but
254
- * for best visual results, usually set to either:
255
- * canvas CSS width x canvas CSS height
256
- * canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio
257
- * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html
281
+ * Loses the context
282
+ * @note Triggers context loss, mainly for testing
258
283
  */
259
- resize(options?: {width?: number; height?: number; useDevicePixels?: boolean | number}): void {
260
- // Resize browser context .
261
- if (this.gl.canvas) {
262
- const devicePixelRatio = getDevicePixelRatio(options?.useDevicePixels);
263
- setDevicePixelRatio(this.gl, devicePixelRatio, options);
264
- return;
265
- }
266
-
267
- // Resize headless gl context
268
- const ext = this.gl.getExtension('STACKGL_resize_drawingbuffer');
269
- if (ext && options && `width` in options && `height` in options) {
270
- ext.resize(options.width, options.height);
284
+ loseDevice() {
285
+ const ext = this.gl.getExtension('WEBGL_lose_context');
286
+ if (ext) {
287
+ ext.loseContext();
271
288
  }
289
+ // loseContext should trigger context loss callback but
290
+ this._resolveContextLost?.({
291
+ reason: 'destroyed',
292
+ message: 'Application triggered context loss'
293
+ });
272
294
  }
273
295
 
274
- _createBuffer(props: BufferProps): WEBGLBuffer {
275
- return new WEBGLBuffer(this.gl, props);
296
+ get isLost(): boolean {
297
+ return this.gl.isContextLost();
276
298
  }
277
299
 
278
- createTexture(props: Texture2DProps): Texture2D {
279
- return new Texture2D(this, props);
300
+ getSize(): [number, number] {
301
+ return [this.gl.drawingBufferWidth, this.gl.drawingBufferHeight];
280
302
  }
281
303
 
282
- createShader(props: ShaderProps): WEBGLShader {
283
- return new WEBGLShader(this, props);
304
+ isTextureFormatSupported(format: TextureFormat): boolean {
305
+ return isTextureFormatSupported(this.gl, format);
284
306
  }
285
307
 
286
- /**
287
- * Offscreen Canvas Support: Commit the frame
288
- * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit
289
- * Chrome's offscreen canvas does not require gl.commit
290
- */
291
- commit(): void {
292
- // @ts-expect-error gl.commit is not officially part of WebGLRenderingContext
293
- if (this.offScreen && this.gl.commit) {
294
- // @ts-expect-error gl.commit is not officially part of WebGLRenderingContext
295
- this.gl.commit();
296
- }
308
+ isTextureFormatFilterable(format: TextureFormat): boolean {
309
+ return isTextureFormatFilterable(this.gl, format);
297
310
  }
298
311
 
299
- // PRIVATE METHODS
300
-
301
- /**
302
- * Creates a context giving access to the WebGL API
303
- */
304
- _createContext(options?: WebGLDeviceProps): WebGLRenderingContext {
305
- const {width, height, canvas} = this.props;
306
- // Get or create a canvas
307
- const targetCanvas = getCanvas({canvas, width, height});
308
- // Create a WebGL context in the canvas
309
- return createBrowserContext(targetCanvas, options);
312
+ isTextureFormatRenderable(format: TextureFormat): boolean {
313
+ return isTextureFormatRenderable(this.gl, format);
310
314
  }
311
- }
312
-
313
- /*
314
- // prettier-ignore
315
- import {
316
- Device, DeviceInfo, DeviceLimits,
317
- Buffer, BufferProps
318
- } from '@luma.gl/api';
319
315
 
320
- import {getWebGLDeviceInfo} from '../converters/webgl-device-info';
321
- import {getWebGLLimits} from '../converters/webgl-limits';
322
- import {getWebGLFeatures} from '../converters/webgl-features';
316
+ // WEBGL SPECIFIC METHODS
323
317
 
324
- export default class WEBGLDevice implements Device {
325
- readonly handle: WebGLRenderingContext;
326
- readonly gl: WebGLRenderingContext;
327
- readonly gl2: WebGL2RenderingContext | null;
328
- readonly canvas: HTMLCanvasElement;
329
-
330
- static isSupported(options: {canvas?: HTMLCanvasElement}): boolean {
331
- const {canvas} = options;
332
- let gl;
333
- try {
334
- gl = canvas && canvas.getContext("webgl");
335
- gl = gl && canvas && canvas.getContext("experimental-webgl");
336
- } catch (x) {
337
- gl = null;
318
+ /** Returns a WebGL2RenderingContext or throws an error */
319
+ assertWebGL2(): WebGL2RenderingContext {
320
+ if (!this.gl2) {
321
+ throw new Error('Requires WebGL2');
338
322
  }
339
- return Boolean(gl);
323
+ return this.gl2;
340
324
  }
341
325
 
342
- constructor(props = {}) {
343
- const {canvas, swapChainFormat = "bgra8unorm"} = props;
326
+ // IMPLEMENTATION OF ABSTRACT DEVICE
344
327
 
345
- const gl = createGLContext(props);
346
- this.handle =
347
- this.gl = gl;
348
- this.gl2 = gl instanceof WebGL2RenderingContext ? gl : null;
349
- this.canvas = canvas;
328
+ createCanvasContext(props?: CanvasContextProps): CanvasContext {
329
+ throw new Error('WebGL only supports a single canvas');
350
330
  }
351
331
 
352
- resize(width, height) {
353
- resizeGLContext(this.gl);
332
+ _createBuffer(props: BufferProps): WEBGLBuffer {
333
+ return new ClassicBuffer(this, props);
354
334
  }
355
335
 
356
- getInfo(): DeviceInfo {
357
- return getWebGLDeviceInfo(this.gl);
336
+ _createTexture(props: TextureProps): WEBGLTexture {
337
+ return new WEBGLTexture(this, props);
358
338
  }
359
339
 
360
- getLimits(): DeviceLimits {
361
- return getWebGLLimits(this.gl, this.gl2);
340
+ createExternalTexture(props: ExternalTextureProps): ExternalTexture {
341
+ throw new Error('createExternalTexture() not implemented'); // return new Program(props);
362
342
  }
363
343
 
364
- getFeatures(): string[] {
365
- return getWebGLFeatures(this.gl);
344
+ createSampler(props: SamplerProps): WEBGLSampler {
345
+ return new WEBGLSampler(this, props);
366
346
  }
367
347
 
368
- createBuffer(props: WebGPUBufferProps): WEBGLBuffer {
369
- return new WEBGLBuffer(this.gl2 || this.gl, props);
348
+ createShader(props: ShaderProps): WEBGLShader {
349
+ return new WEBGLShader(this, props);
370
350
  }
371
351
 
372
- createTexture(props: WebGPUTextureProps): WEBGLTexture {
373
- return new WEBGLTexture(this, props);
352
+ createFramebuffer(props: FramebufferProps): WEBGLFramebuffer {
353
+ return new WEBGLFramebuffer(this, props);
374
354
  }
375
355
 
376
- createSampler(props: WebGPUSamplerProps): WEBGLSampler {
377
- return new WEBGLSampler(this, props);
356
+ createRenderPipeline(props: RenderPipelineProps): WEBGLRenderPipeline {
357
+ return new WEBGLRenderPipeline(this, props);
378
358
  }
379
359
 
380
- createShader(props: WebGPUShaderProps): WEBGLShader {
381
- return new WEBGLShader(this, props);
360
+ beginRenderPass(props: RenderPassProps): WEBGLRenderPass {
361
+ return new WEBGLRenderPass(this, props);
382
362
  }
383
363
 
384
- createRenderPipeline(props: WebGPURenderPipelineProps): WEBGLPipeline {
385
- return new WEBGLRenderPipeline(this, props);
364
+ createComputePipeline(props?: ComputePipelineProps): ComputePipeline {
365
+ throw new Error('ComputePipeline not supported in WebGL');
386
366
  }
387
367
 
388
- createComputePipeline(props: WebGPUComputePipelineProps): WebGPUPipeline {
389
- return new WebGPUComputePipeline(this, props);
368
+ beginComputePass(props: ComputePassProps): ComputePass {
369
+ throw new Error('compute shaders not supported in WebGL');
390
370
  }
391
371
 
372
+ private renderPass: WEBGLRenderPass | null = null;
392
373
 
393
- // PRIVATE
374
+ getDefaultRenderPass(): WEBGLRenderPass {
375
+ this.renderPass =
376
+ this.renderPass ||
377
+ this.beginRenderPass({
378
+ framebuffer: this.canvasContext.getCurrentFramebuffer()
379
+ });
380
+ return this.renderPass;
381
+ }
394
382
 
395
- _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
+ }
396
406
 
397
- _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);
398
414
  }
399
- */