@luma.gl/webgl 8.6.0-alpha.5 → 9.0.0-alpha.11

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