@luma.gl/webgl 8.6.0-alpha.3 → 9.0.0-alpha.2

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 (731) hide show
  1. package/README.md +3 -67
  2. package/dist/adapter/converters/device-parameters.d.ts +17 -0
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -0
  4. package/dist/{esm/adapter/converters/set-device-parameters.js → adapter/converters/device-parameters.js} +36 -5
  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/{esm/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 +208 -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 +27 -48
  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 +306 -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/{esm/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 +40 -0
  85. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -0
  86. package/dist/adapter/resources/webgl-framebuffer.js +265 -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 +19 -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 +400 -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/adapter/{webgl-shader.js → resources/webgl-shader.js} +13 -20
  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/{esm/classes/texture.js → adapter/resources/webgl-texture.js} +274 -229
  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 +58 -77
  113. package/dist/adapter/webgl-device.d.ts.map +1 -1
  114. package/dist/adapter/webgl-device.js +185 -113
  115. package/dist/adapter/webgl-device.js.map +1 -1
  116. package/dist/classic/accessor.d.ts +32 -0
  117. package/dist/classic/accessor.d.ts.map +1 -0
  118. package/dist/{classes → classic}/accessor.js +33 -1
  119. package/dist/classic/accessor.js.map +1 -0
  120. package/dist/{classes/webgl-buffer.d.ts → classic/buffer.d.ts} +28 -33
  121. package/dist/classic/buffer.d.ts.map +1 -0
  122. package/dist/{esm/classes/webgl-buffer.js → classic/buffer.js} +53 -51
  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 +1 -0
  132. package/dist/context/context/create-context.d.ts.map +1 -1
  133. package/dist/context/context/create-context.js +12 -0
  134. package/dist/context/context/create-context.js.map +1 -1
  135. package/dist/context/context/device-pixels.d.ts +1 -1
  136. package/dist/context/context/device-pixels.d.ts.map +1 -1
  137. package/dist/context/context/device-pixels.js.map +1 -1
  138. package/dist/context/debug/spector.d.ts +18 -0
  139. package/dist/context/debug/spector.d.ts.map +1 -0
  140. package/dist/context/debug/spector.js +76 -0
  141. package/dist/context/debug/spector.js.map +1 -0
  142. package/dist/context/debug/webgl-developer-tools.d.ts +19 -0
  143. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -0
  144. package/dist/context/debug/webgl-developer-tools.js +121 -0
  145. package/dist/context/debug/webgl-developer-tools.js.map +1 -0
  146. package/dist/context/parameters/unified-parameter-api.d.ts +3 -2
  147. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  148. package/dist/context/parameters/unified-parameter-api.js +4 -4
  149. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  150. package/dist/context/parameters/webgl-parameter-tables.d.ts +40 -36
  151. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  152. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  153. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  154. package/dist/context/polyfill/polyfill-context.js +4 -3
  155. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  156. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  157. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  158. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  159. package/dist/context/state-tracker/track-context-state.js +25 -11
  160. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  161. package/dist/es5/adapter/converters/{set-device-parameters.js → device-parameters.js} +37 -5
  162. package/dist/es5/adapter/converters/device-parameters.js.map +1 -0
  163. package/dist/es5/{classes → adapter/converters}/renderbuffer-formats.js +1 -1
  164. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +1 -0
  165. package/dist/es5/adapter/converters/sampler-parameters.js +226 -0
  166. package/dist/es5/adapter/converters/sampler-parameters.js.map +1 -0
  167. package/dist/es5/adapter/converters/texture-formats.js +1031 -0
  168. package/dist/es5/adapter/converters/texture-formats.js.map +1 -0
  169. package/dist/es5/adapter/converters/vertex-formats.js +45 -0
  170. package/dist/es5/adapter/converters/vertex-formats.js.map +1 -0
  171. package/dist/es5/adapter/device-helpers/device-features.js +46 -54
  172. package/dist/es5/adapter/device-helpers/device-features.js.map +1 -1
  173. package/dist/es5/adapter/device-helpers/device-limits.js +1 -1
  174. package/dist/es5/adapter/device-helpers/device-limits.js.map +1 -1
  175. package/dist/es5/adapter/device-helpers/get-device-info.js +7 -7
  176. package/dist/es5/adapter/device-helpers/get-device-info.js.map +1 -1
  177. package/dist/es5/adapter/helpers/attribute-utils.js +91 -0
  178. package/dist/es5/adapter/helpers/attribute-utils.js.map +1 -0
  179. package/dist/es5/{helpers/get-program-bindings.js → adapter/helpers/get-shader-layout.js} +184 -87
  180. package/dist/es5/adapter/helpers/get-shader-layout.js.map +1 -0
  181. package/dist/es5/{webgl-utils → adapter/helpers}/parse-shader-compiler-log.js +0 -0
  182. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +1 -0
  183. package/dist/es5/adapter/helpers/set-uniform.js +125 -0
  184. package/dist/es5/adapter/helpers/set-uniform.js.map +1 -0
  185. package/dist/es5/adapter/helpers/uniforms.js +112 -0
  186. package/dist/es5/adapter/helpers/uniforms.js.map +1 -0
  187. package/dist/es5/{webgl-utils → adapter/objects}/constants-to-keys.js +1 -0
  188. package/dist/es5/adapter/objects/constants-to-keys.js.map +1 -0
  189. package/dist/es5/{classes/renderbuffer.js → adapter/objects/webgl-renderbuffer.js} +48 -98
  190. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +1 -0
  191. package/dist/es5/{classes → adapter/objects}/webgl-resource.js +8 -3
  192. package/dist/es5/adapter/objects/webgl-resource.js.map +1 -0
  193. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +137 -0
  194. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +1 -0
  195. package/dist/es5/adapter/resources/webgl-buffer.js +243 -0
  196. package/dist/es5/adapter/resources/webgl-buffer.js.map +1 -0
  197. package/dist/es5/adapter/resources/webgl-command-buffer.js +96 -0
  198. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +1 -0
  199. package/dist/es5/adapter/resources/webgl-command-encoder.js +98 -0
  200. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +1 -0
  201. package/dist/es5/adapter/resources/webgl-external-texture.js +2 -0
  202. package/dist/{esm/helpers/program-bindings.js.map → es5/adapter/resources/webgl-external-texture.js.map} +1 -1
  203. package/dist/es5/adapter/resources/webgl-framebuffer.js +345 -0
  204. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +1 -0
  205. package/dist/es5/{classes/texture-2d.js → adapter/resources/webgl-render-pass.js} +25 -45
  206. package/dist/es5/adapter/resources/webgl-render-pass.js.map +1 -0
  207. package/dist/es5/adapter/resources/webgl-render-pipeline.js +505 -0
  208. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +1 -0
  209. package/dist/es5/adapter/resources/webgl-sampler.js +96 -0
  210. package/dist/es5/adapter/resources/webgl-sampler.js.map +1 -0
  211. package/dist/es5/adapter/{webgl-shader.js → resources/webgl-shader.js} +12 -18
  212. package/dist/es5/adapter/resources/webgl-shader.js.map +1 -0
  213. package/dist/es5/{classes/texture.js → adapter/resources/webgl-texture.js} +336 -260
  214. package/dist/es5/adapter/resources/webgl-texture.js.map +1 -0
  215. package/dist/es5/adapter/webgl-canvas-context.js +97 -0
  216. package/dist/es5/adapter/webgl-canvas-context.js.map +1 -0
  217. package/dist/es5/adapter/webgl-device.js +255 -135
  218. package/dist/es5/adapter/webgl-device.js.map +1 -1
  219. package/dist/es5/{classes → classic}/accessor.js +25 -1
  220. package/dist/es5/classic/accessor.js.map +1 -0
  221. package/dist/es5/{classes/webgl-buffer.js → classic/buffer.js} +74 -66
  222. package/dist/es5/classic/buffer.js.map +1 -0
  223. package/dist/es5/{webgl-utils → classic}/typed-array-utils.js +0 -0
  224. package/dist/es5/classic/typed-array-utils.js.map +1 -0
  225. package/dist/es5/context/context/context-state.js +1 -1
  226. package/dist/es5/context/context/context-state.js.map +1 -1
  227. package/dist/es5/context/context/create-context.js +12 -0
  228. package/dist/es5/context/context/create-context.js.map +1 -1
  229. package/dist/es5/context/context/device-pixels.js.map +1 -1
  230. package/dist/es5/context/debug/spector.js +133 -0
  231. package/dist/es5/context/debug/spector.js.map +1 -0
  232. package/dist/es5/context/debug/webgl-developer-tools.js +198 -0
  233. package/dist/es5/context/debug/webgl-developer-tools.js.map +1 -0
  234. package/dist/es5/context/parameters/unified-parameter-api.js +7 -5
  235. package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
  236. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +1 -1
  237. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +1 -1
  238. package/dist/es5/context/polyfill/polyfill-context.js +4 -3
  239. package/dist/es5/context/polyfill/polyfill-context.js.map +1 -1
  240. package/dist/es5/context/state-tracker/deep-array-equal.js.map +1 -1
  241. package/dist/es5/context/state-tracker/track-context-state.js +26 -11
  242. package/dist/es5/context/state-tracker/track-context-state.js.map +1 -1
  243. package/dist/es5/index.js +66 -238
  244. package/dist/es5/index.js.map +1 -1
  245. package/dist/es5/init.js +1 -41
  246. package/dist/es5/init.js.map +1 -1
  247. package/dist/es5/{context/parameters/webgl-parameters.js → types/webgl.js} +1 -1
  248. package/dist/es5/types/webgl.js.map +1 -0
  249. package/dist/{adapter/converters/set-device-parameters.js → esm/adapter/converters/device-parameters.js} +36 -5
  250. package/dist/esm/adapter/converters/device-parameters.js.map +1 -0
  251. package/dist/{classes → esm/adapter/converters}/renderbuffer-formats.js +1 -1
  252. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +1 -0
  253. package/dist/esm/adapter/converters/sampler-parameters.js +208 -0
  254. package/dist/esm/adapter/converters/sampler-parameters.js.map +1 -0
  255. package/dist/esm/adapter/converters/texture-formats.js +954 -0
  256. package/dist/esm/adapter/converters/texture-formats.js.map +1 -0
  257. package/dist/esm/adapter/converters/vertex-formats.js +35 -0
  258. package/dist/esm/adapter/converters/vertex-formats.js.map +1 -0
  259. package/dist/esm/adapter/device-helpers/device-features.js +27 -48
  260. package/dist/esm/adapter/device-helpers/device-features.js.map +1 -1
  261. package/dist/esm/adapter/device-helpers/device-limits.js +1 -0
  262. package/dist/esm/adapter/device-helpers/device-limits.js.map +1 -1
  263. package/dist/esm/adapter/device-helpers/get-device-info.js +7 -7
  264. package/dist/esm/adapter/device-helpers/get-device-info.js.map +1 -1
  265. package/dist/esm/adapter/helpers/attribute-utils.js +81 -0
  266. package/dist/esm/adapter/helpers/attribute-utils.js.map +1 -0
  267. package/dist/esm/adapter/helpers/get-shader-layout.js +306 -0
  268. package/dist/esm/adapter/helpers/get-shader-layout.js.map +1 -0
  269. package/dist/{webgl-utils → esm/adapter/helpers}/parse-shader-compiler-log.js +0 -0
  270. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +1 -0
  271. package/dist/esm/adapter/helpers/set-uniform.js +115 -0
  272. package/dist/esm/adapter/helpers/set-uniform.js.map +1 -0
  273. package/dist/esm/adapter/helpers/uniforms.js +99 -0
  274. package/dist/esm/adapter/helpers/uniforms.js.map +1 -0
  275. package/dist/{webgl-utils → esm/adapter/objects}/constants-to-keys.js +1 -0
  276. package/dist/esm/adapter/objects/constants-to-keys.js.map +1 -0
  277. package/dist/{classes/renderbuffer.js → esm/adapter/objects/webgl-renderbuffer.js} +38 -72
  278. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +1 -0
  279. package/dist/{classes → esm/adapter/objects}/webgl-resource.js +7 -3
  280. package/dist/esm/adapter/objects/webgl-resource.js.map +1 -0
  281. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +84 -0
  282. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +1 -0
  283. package/dist/esm/adapter/resources/webgl-buffer.js +164 -0
  284. package/dist/esm/adapter/resources/webgl-buffer.js.map +1 -0
  285. package/dist/esm/adapter/resources/webgl-command-buffer.js +65 -0
  286. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +1 -0
  287. package/dist/esm/adapter/resources/webgl-command-encoder.js +53 -0
  288. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +1 -0
  289. package/dist/esm/adapter/resources/webgl-external-texture.js +2 -0
  290. package/dist/{helpers/program-bindings.js.map → esm/adapter/resources/webgl-external-texture.js.map} +1 -1
  291. package/dist/esm/adapter/resources/webgl-framebuffer.js +265 -0
  292. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +1 -0
  293. package/dist/esm/adapter/resources/webgl-render-pass.js +19 -0
  294. package/dist/esm/adapter/resources/webgl-render-pass.js.map +1 -0
  295. package/dist/esm/adapter/resources/webgl-render-pipeline.js +400 -0
  296. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +1 -0
  297. package/dist/esm/adapter/resources/webgl-sampler.js +50 -0
  298. package/dist/esm/adapter/resources/webgl-sampler.js.map +1 -0
  299. package/dist/esm/adapter/{webgl-shader.js → resources/webgl-shader.js} +13 -20
  300. package/dist/esm/adapter/resources/webgl-shader.js.map +1 -0
  301. package/dist/{classes/texture.js → esm/adapter/resources/webgl-texture.js} +274 -229
  302. package/dist/esm/adapter/resources/webgl-texture.js.map +1 -0
  303. package/dist/esm/adapter/webgl-canvas-context.js +54 -0
  304. package/dist/esm/adapter/webgl-canvas-context.js.map +1 -0
  305. package/dist/esm/adapter/webgl-device.js +185 -113
  306. package/dist/esm/adapter/webgl-device.js.map +1 -1
  307. package/dist/esm/{classes → classic}/accessor.js +33 -1
  308. package/dist/esm/classic/accessor.js.map +1 -0
  309. package/dist/{classes/webgl-buffer.js → esm/classic/buffer.js} +53 -51
  310. package/dist/esm/classic/buffer.js.map +1 -0
  311. package/dist/{webgl-utils → esm/classic}/typed-array-utils.js +0 -0
  312. package/dist/esm/classic/typed-array-utils.js.map +1 -0
  313. package/dist/esm/context/context/context-state.js +1 -1
  314. package/dist/esm/context/context/context-state.js.map +1 -1
  315. package/dist/esm/context/context/create-context.js +12 -0
  316. package/dist/esm/context/context/create-context.js.map +1 -1
  317. package/dist/esm/context/context/device-pixels.js.map +1 -1
  318. package/dist/esm/context/debug/spector.js +76 -0
  319. package/dist/esm/context/debug/spector.js.map +1 -0
  320. package/dist/esm/context/debug/webgl-developer-tools.js +121 -0
  321. package/dist/esm/context/debug/webgl-developer-tools.js.map +1 -0
  322. package/dist/esm/context/parameters/unified-parameter-api.js +4 -4
  323. package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
  324. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +1 -1
  325. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +1 -1
  326. package/dist/esm/context/polyfill/polyfill-context.js +4 -3
  327. package/dist/esm/context/polyfill/polyfill-context.js.map +1 -1
  328. package/dist/esm/context/state-tracker/deep-array-equal.js.map +1 -1
  329. package/dist/esm/context/state-tracker/track-context-state.js +25 -11
  330. package/dist/esm/context/state-tracker/track-context-state.js.map +1 -1
  331. package/dist/esm/index.js +19 -29
  332. package/dist/esm/index.js.map +1 -1
  333. package/dist/esm/init.js +2 -31
  334. package/dist/esm/init.js.map +1 -1
  335. package/dist/esm/types/webgl.js +2 -0
  336. package/dist/esm/types/webgl.js.map +1 -0
  337. package/dist/index.d.ts +22 -43
  338. package/dist/index.d.ts.map +1 -1
  339. package/dist/index.js +19 -29
  340. package/dist/index.js.map +1 -1
  341. package/dist/init.d.ts +1 -4
  342. package/dist/init.d.ts.map +1 -1
  343. package/dist/init.js +2 -31
  344. package/dist/init.js.map +1 -1
  345. package/dist/types/webgl.d.ts +144 -0
  346. package/dist/types/webgl.d.ts.map +1 -0
  347. package/dist/types/webgl.js +2 -0
  348. package/dist/types/webgl.js.map +1 -0
  349. package/package.json +5 -5
  350. package/src/adapter/converters/{set-device-parameters.ts → device-parameters.ts} +52 -9
  351. package/src/{classes → adapter/converters}/renderbuffer-formats.ts +1 -1
  352. package/src/adapter/converters/sampler-parameters.ts +175 -0
  353. package/src/adapter/converters/texture-formats.ts +633 -0
  354. package/src/adapter/converters/vertex-formats.ts +22 -0
  355. package/src/adapter/device-helpers/device-features.ts +46 -123
  356. package/src/adapter/device-helpers/device-limits.ts +5 -2
  357. package/src/adapter/device-helpers/get-device-info.ts +8 -8
  358. package/src/adapter/helpers/attribute-utils.ts +61 -0
  359. package/src/adapter/helpers/get-shader-layout.ts +388 -0
  360. package/src/{webgl-utils → adapter/helpers}/parse-shader-compiler-log.ts +0 -0
  361. package/src/adapter/helpers/set-uniform.ts +87 -0
  362. package/src/adapter/helpers/uniforms.ts +110 -0
  363. package/src/{webgl-utils → adapter/objects}/constants-to-keys.ts +6 -3
  364. package/src/adapter/objects/webgl-renderbuffer.ts +104 -0
  365. package/src/{classes → adapter/objects}/webgl-resource.ts +23 -17
  366. package/src/adapter/objects/webgl-vertex-array-object.ts +111 -0
  367. package/src/adapter/resources/webgl-buffer.ts +219 -0
  368. package/src/adapter/resources/webgl-command-buffer.ts +94 -0
  369. package/src/adapter/resources/webgl-command-encoder.ts +58 -0
  370. package/src/adapter/resources/webgl-external-texture.ts +92 -0
  371. package/src/adapter/resources/webgl-framebuffer.ts +279 -0
  372. package/src/adapter/resources/webgl-render-pass.ts +23 -0
  373. package/src/adapter/resources/webgl-render-pipeline.ts +413 -0
  374. package/src/adapter/resources/webgl-sampler.ts +54 -0
  375. package/src/adapter/{webgl-shader.ts → resources/webgl-shader.ts} +14 -20
  376. package/src/adapter/resources/webgl-texture.ts +1023 -0
  377. package/src/adapter/webgl-canvas-context.ts +74 -0
  378. package/src/adapter/webgl-device.ts +229 -285
  379. package/{dist/esm/classes/accessor.ts.disabled → src/classic/accessor.ts} +50 -36
  380. package/src/{classes/webgl-buffer.ts → classic/buffer.ts} +69 -77
  381. package/src/{webgl-utils → classic}/typed-array-utils.ts +3 -1
  382. package/src/context/context/context-state.ts +4 -2
  383. package/src/context/context/create-context.ts +28 -1
  384. package/src/context/context/device-pixels.ts +9 -4
  385. package/src/context/debug/spector.ts +92 -0
  386. package/src/context/debug/webgl-developer-tools.ts +162 -0
  387. package/src/context/parameters/unified-parameter-api.ts +6 -4
  388. package/src/context/parameters/webgl-parameter-tables.ts +38 -36
  389. package/src/context/polyfill/get-parameter-polyfill.ts +1 -1
  390. package/src/context/polyfill/polyfill-context.ts +4 -3
  391. package/src/context/state-tracker/deep-array-equal.ts +1 -1
  392. package/src/context/state-tracker/track-context-state.ts +27 -20
  393. package/src/index.ts +33 -91
  394. package/src/init.ts +2 -46
  395. package/src/types/webgl.ts +283 -0
  396. package/dist/adapter/converters/set-device-parameters.d.ts +0 -5
  397. package/dist/adapter/converters/set-device-parameters.d.ts.map +0 -1
  398. package/dist/adapter/converters/set-device-parameters.js.map +0 -1
  399. package/dist/adapter/converters/webgpu-texture-formats.d.ts +0 -281
  400. package/dist/adapter/converters/webgpu-texture-formats.d.ts.map +0 -1
  401. package/dist/adapter/converters/webgpu-texture-formats.js +0 -285
  402. package/dist/adapter/converters/webgpu-texture-formats.js.map +0 -1
  403. package/dist/adapter/webgl-shader.d.ts.map +0 -1
  404. package/dist/adapter/webgl-shader.js.map +0 -1
  405. package/dist/classes/accessor.d.ts +0 -28
  406. package/dist/classes/accessor.d.ts.map +0 -1
  407. package/dist/classes/accessor.js.map +0 -1
  408. package/dist/classes/accessor.ts.disabled +0 -159
  409. package/dist/classes/clear.d.ts +0 -17
  410. package/dist/classes/clear.d.ts.map +0 -1
  411. package/dist/classes/clear.js +0 -105
  412. package/dist/classes/clear.js.map +0 -1
  413. package/dist/classes/copy-and-blit.d.ts +0 -86
  414. package/dist/classes/copy-and-blit.d.ts.map +0 -1
  415. package/dist/classes/copy-and-blit.js +0 -338
  416. package/dist/classes/copy-and-blit.js.map +0 -1
  417. package/dist/classes/framebuffer.d.ts +0 -139
  418. package/dist/classes/framebuffer.d.ts.map +0 -1
  419. package/dist/classes/framebuffer.js +0 -656
  420. package/dist/classes/framebuffer.js.map +0 -1
  421. package/dist/classes/program-configuration.d.ts +0 -24
  422. package/dist/classes/program-configuration.d.ts.map +0 -1
  423. package/dist/classes/program-configuration.js +0 -73
  424. package/dist/classes/program-configuration.js.map +0 -1
  425. package/dist/classes/program.d.ts +0 -66
  426. package/dist/classes/program.d.ts.map +0 -1
  427. package/dist/classes/program.js +0 -379
  428. package/dist/classes/program.js.map +0 -1
  429. package/dist/classes/query.d.ts +0 -27
  430. package/dist/classes/query.d.ts.map +0 -1
  431. package/dist/classes/query.js +0 -145
  432. package/dist/classes/query.js.map +0 -1
  433. package/dist/classes/renderbuffer-formats.d.ts.map +0 -1
  434. package/dist/classes/renderbuffer-formats.js.map +0 -1
  435. package/dist/classes/renderbuffer.d.ts +0 -60
  436. package/dist/classes/renderbuffer.d.ts.map +0 -1
  437. package/dist/classes/renderbuffer.js.map +0 -1
  438. package/dist/classes/shader.d.ts +0 -42
  439. package/dist/classes/shader.d.ts.map +0 -1
  440. package/dist/classes/shader.js +0 -118
  441. package/dist/classes/shader.js.map +0 -1
  442. package/dist/classes/texture-2d.d.ts +0 -9
  443. package/dist/classes/texture-2d.d.ts.map +0 -1
  444. package/dist/classes/texture-2d.js +0 -36
  445. package/dist/classes/texture-2d.js.map +0 -1
  446. package/dist/classes/texture-3d.d.ts +0 -29
  447. package/dist/classes/texture-3d.d.ts.map +0 -1
  448. package/dist/classes/texture-3d.js +0 -76
  449. package/dist/classes/texture-3d.js.map +0 -1
  450. package/dist/classes/texture-cube.d.ts +0 -28
  451. package/dist/classes/texture-cube.d.ts.map +0 -1
  452. package/dist/classes/texture-cube.js +0 -130
  453. package/dist/classes/texture-cube.js.map +0 -1
  454. package/dist/classes/texture-formats.d.ts +0 -37
  455. package/dist/classes/texture-formats.d.ts.map +0 -1
  456. package/dist/classes/texture-formats.js +0 -98
  457. package/dist/classes/texture-formats.js.map +0 -1
  458. package/dist/classes/texture.d.ts +0 -123
  459. package/dist/classes/texture.d.ts.map +0 -1
  460. package/dist/classes/texture.js.map +0 -1
  461. package/dist/classes/transform-feedback.d.ts +0 -33
  462. package/dist/classes/transform-feedback.d.ts.map +0 -1
  463. package/dist/classes/transform-feedback.js +0 -198
  464. package/dist/classes/transform-feedback.js.map +0 -1
  465. package/dist/classes/uniform-buffer-layout.d.ts +0 -17
  466. package/dist/classes/uniform-buffer-layout.d.ts.map +0 -1
  467. package/dist/classes/uniform-buffer-layout.js +0 -104
  468. package/dist/classes/uniform-buffer-layout.js.map +0 -1
  469. package/dist/classes/uniforms.d.ts +0 -37
  470. package/dist/classes/uniforms.d.ts.map +0 -1
  471. package/dist/classes/uniforms.js +0 -250
  472. package/dist/classes/uniforms.js.map +0 -1
  473. package/dist/classes/vertex-array-object.d.ts +0 -76
  474. package/dist/classes/vertex-array-object.d.ts.map +0 -1
  475. package/dist/classes/vertex-array-object.js +0 -261
  476. package/dist/classes/vertex-array-object.js.map +0 -1
  477. package/dist/classes/vertex-array.d.ts +0 -75
  478. package/dist/classes/vertex-array.d.ts.map +0 -1
  479. package/dist/classes/vertex-array.js +0 -408
  480. package/dist/classes/vertex-array.js.map +0 -1
  481. package/dist/classes/webgl-buffer.d.ts.map +0 -1
  482. package/dist/classes/webgl-buffer.js.map +0 -1
  483. package/dist/classes/webgl-resource.d.ts.map +0 -1
  484. package/dist/classes/webgl-resource.js.map +0 -1
  485. package/dist/context/context/get-canvas.d.ts +0 -13
  486. package/dist/context/context/get-canvas.d.ts.map +0 -1
  487. package/dist/context/context/get-canvas.js +0 -31
  488. package/dist/context/context/get-canvas.js.map +0 -1
  489. package/dist/context/context/resize-context.d.ts +0 -20
  490. package/dist/context/context/resize-context.d.ts.map +0 -1
  491. package/dist/context/context/resize-context.js +0 -15
  492. package/dist/context/context/resize-context.js.map +0 -1
  493. package/dist/context/parameters/webgl-parameters.d.ts +0 -144
  494. package/dist/context/parameters/webgl-parameters.d.ts.map +0 -1
  495. package/dist/context/parameters/webgl-parameters.js +0 -2
  496. package/dist/context/parameters/webgl-parameters.js.map +0 -1
  497. package/dist/debug/debug-program-configuration.d.ts +0 -2
  498. package/dist/debug/debug-program-configuration.d.ts.map +0 -1
  499. package/dist/debug/debug-program-configuration.js +0 -40
  500. package/dist/debug/debug-program-configuration.js.map +0 -1
  501. package/dist/debug/debug-uniforms.d.ts +0 -12
  502. package/dist/debug/debug-uniforms.d.ts.map +0 -1
  503. package/dist/debug/debug-uniforms.js +0 -108
  504. package/dist/debug/debug-uniforms.js.map +0 -1
  505. package/dist/debug/debug-vertex-array.d.ts +0 -5
  506. package/dist/debug/debug-vertex-array.d.ts.map +0 -1
  507. package/dist/debug/debug-vertex-array.js +0 -118
  508. package/dist/debug/debug-vertex-array.js.map +0 -1
  509. package/dist/es5/adapter/converters/set-device-parameters.js.map +0 -1
  510. package/dist/es5/adapter/converters/webgpu-texture-formats.js +0 -296
  511. package/dist/es5/adapter/converters/webgpu-texture-formats.js.map +0 -1
  512. package/dist/es5/adapter/webgl-shader.js.map +0 -1
  513. package/dist/es5/classes/accessor.d.ts +0 -28
  514. package/dist/es5/classes/accessor.js.map +0 -1
  515. package/dist/es5/classes/accessor.ts.disabled +0 -159
  516. package/dist/es5/classes/clear.js +0 -135
  517. package/dist/es5/classes/clear.js.map +0 -1
  518. package/dist/es5/classes/copy-and-blit.js +0 -382
  519. package/dist/es5/classes/copy-and-blit.js.map +0 -1
  520. package/dist/es5/classes/framebuffer.js +0 -807
  521. package/dist/es5/classes/framebuffer.js.map +0 -1
  522. package/dist/es5/classes/program-configuration.js +0 -119
  523. package/dist/es5/classes/program-configuration.js.map +0 -1
  524. package/dist/es5/classes/program.js +0 -471
  525. package/dist/es5/classes/program.js.map +0 -1
  526. package/dist/es5/classes/query.js +0 -222
  527. package/dist/es5/classes/query.js.map +0 -1
  528. package/dist/es5/classes/renderbuffer-formats.js.map +0 -1
  529. package/dist/es5/classes/renderbuffer.js.map +0 -1
  530. package/dist/es5/classes/shader.js +0 -195
  531. package/dist/es5/classes/shader.js.map +0 -1
  532. package/dist/es5/classes/texture-2d.js.map +0 -1
  533. package/dist/es5/classes/texture-3d.js +0 -142
  534. package/dist/es5/classes/texture-3d.js.map +0 -1
  535. package/dist/es5/classes/texture-cube.js +0 -202
  536. package/dist/es5/classes/texture-cube.js.map +0 -1
  537. package/dist/es5/classes/texture-formats.js +0 -87
  538. package/dist/es5/classes/texture-formats.js.map +0 -1
  539. package/dist/es5/classes/texture.js.map +0 -1
  540. package/dist/es5/classes/transform-feedback.js +0 -267
  541. package/dist/es5/classes/transform-feedback.js.map +0 -1
  542. package/dist/es5/classes/uniform-buffer-layout.js +0 -130
  543. package/dist/es5/classes/uniform-buffer-layout.js.map +0 -1
  544. package/dist/es5/classes/uniforms.js +0 -232
  545. package/dist/es5/classes/uniforms.js.map +0 -1
  546. package/dist/es5/classes/vertex-array-object.js +0 -337
  547. package/dist/es5/classes/vertex-array-object.js.map +0 -1
  548. package/dist/es5/classes/vertex-array.js +0 -465
  549. package/dist/es5/classes/vertex-array.js.map +0 -1
  550. package/dist/es5/classes/webgl-buffer.js.map +0 -1
  551. package/dist/es5/classes/webgl-resource.js.map +0 -1
  552. package/dist/es5/context/context/get-canvas.js +0 -40
  553. package/dist/es5/context/context/get-canvas.js.map +0 -1
  554. package/dist/es5/context/context/resize-context.js +0 -23
  555. package/dist/es5/context/context/resize-context.js.map +0 -1
  556. package/dist/es5/context/parameters/webgl-parameters.js.map +0 -1
  557. package/dist/es5/debug/debug-program-configuration.js +0 -76
  558. package/dist/es5/debug/debug-program-configuration.js.map +0 -1
  559. package/dist/es5/debug/debug-uniforms.js +0 -156
  560. package/dist/es5/debug/debug-uniforms.js.map +0 -1
  561. package/dist/es5/debug/debug-vertex-array.js +0 -126
  562. package/dist/es5/debug/debug-vertex-array.js.map +0 -1
  563. package/dist/es5/helpers/get-program-bindings.js.map +0 -1
  564. package/dist/es5/helpers/program-bindings.js +0 -2
  565. package/dist/es5/types/accessor.d.ts +0 -29
  566. package/dist/es5/webgl-utils/attribute-utils.js +0 -186
  567. package/dist/es5/webgl-utils/attribute-utils.js.map +0 -1
  568. package/dist/es5/webgl-utils/constants-to-keys.js.map +0 -1
  569. package/dist/es5/webgl-utils/format-utils.js +0 -58
  570. package/dist/es5/webgl-utils/format-utils.js.map +0 -1
  571. package/dist/es5/webgl-utils/get-error.js +0 -49
  572. package/dist/es5/webgl-utils/get-error.js.map +0 -1
  573. package/dist/es5/webgl-utils/index.js +0 -74
  574. package/dist/es5/webgl-utils/index.js.map +0 -1
  575. package/dist/es5/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  576. package/dist/es5/webgl-utils/request-animation-frame.js +0 -16
  577. package/dist/es5/webgl-utils/request-animation-frame.js.map +0 -1
  578. package/dist/es5/webgl-utils/texture-utils.js +0 -61
  579. package/dist/es5/webgl-utils/texture-utils.js.map +0 -1
  580. package/dist/es5/webgl-utils/typed-array-utils.js.map +0 -1
  581. package/dist/esm/adapter/converters/set-device-parameters.js.map +0 -1
  582. package/dist/esm/adapter/converters/webgpu-texture-formats.js +0 -285
  583. package/dist/esm/adapter/converters/webgpu-texture-formats.js.map +0 -1
  584. package/dist/esm/adapter/webgl-shader.js.map +0 -1
  585. package/dist/esm/classes/accessor.d.ts +0 -28
  586. package/dist/esm/classes/accessor.js.map +0 -1
  587. package/dist/esm/classes/clear.js +0 -105
  588. package/dist/esm/classes/clear.js.map +0 -1
  589. package/dist/esm/classes/copy-and-blit.js +0 -338
  590. package/dist/esm/classes/copy-and-blit.js.map +0 -1
  591. package/dist/esm/classes/framebuffer.js +0 -656
  592. package/dist/esm/classes/framebuffer.js.map +0 -1
  593. package/dist/esm/classes/program-configuration.js +0 -73
  594. package/dist/esm/classes/program-configuration.js.map +0 -1
  595. package/dist/esm/classes/program.js +0 -379
  596. package/dist/esm/classes/program.js.map +0 -1
  597. package/dist/esm/classes/query.js +0 -145
  598. package/dist/esm/classes/query.js.map +0 -1
  599. package/dist/esm/classes/renderbuffer-formats.js.map +0 -1
  600. package/dist/esm/classes/renderbuffer.js.map +0 -1
  601. package/dist/esm/classes/shader.js +0 -118
  602. package/dist/esm/classes/shader.js.map +0 -1
  603. package/dist/esm/classes/texture-2d.js +0 -36
  604. package/dist/esm/classes/texture-2d.js.map +0 -1
  605. package/dist/esm/classes/texture-3d.js +0 -76
  606. package/dist/esm/classes/texture-3d.js.map +0 -1
  607. package/dist/esm/classes/texture-cube.js +0 -130
  608. package/dist/esm/classes/texture-cube.js.map +0 -1
  609. package/dist/esm/classes/texture-formats.js +0 -98
  610. package/dist/esm/classes/texture-formats.js.map +0 -1
  611. package/dist/esm/classes/texture.js.map +0 -1
  612. package/dist/esm/classes/transform-feedback.js +0 -198
  613. package/dist/esm/classes/transform-feedback.js.map +0 -1
  614. package/dist/esm/classes/uniform-buffer-layout.js +0 -104
  615. package/dist/esm/classes/uniform-buffer-layout.js.map +0 -1
  616. package/dist/esm/classes/uniforms.js +0 -250
  617. package/dist/esm/classes/uniforms.js.map +0 -1
  618. package/dist/esm/classes/vertex-array-object.js +0 -261
  619. package/dist/esm/classes/vertex-array-object.js.map +0 -1
  620. package/dist/esm/classes/vertex-array.js +0 -408
  621. package/dist/esm/classes/vertex-array.js.map +0 -1
  622. package/dist/esm/classes/webgl-buffer.js.map +0 -1
  623. package/dist/esm/classes/webgl-resource.js.map +0 -1
  624. package/dist/esm/context/context/get-canvas.js +0 -31
  625. package/dist/esm/context/context/get-canvas.js.map +0 -1
  626. package/dist/esm/context/context/resize-context.js +0 -15
  627. package/dist/esm/context/context/resize-context.js.map +0 -1
  628. package/dist/esm/context/parameters/webgl-parameters.js +0 -2
  629. package/dist/esm/context/parameters/webgl-parameters.js.map +0 -1
  630. package/dist/esm/debug/debug-program-configuration.js +0 -40
  631. package/dist/esm/debug/debug-program-configuration.js.map +0 -1
  632. package/dist/esm/debug/debug-uniforms.js +0 -108
  633. package/dist/esm/debug/debug-uniforms.js.map +0 -1
  634. package/dist/esm/debug/debug-vertex-array.js +0 -118
  635. package/dist/esm/debug/debug-vertex-array.js.map +0 -1
  636. package/dist/esm/helpers/get-program-bindings.js +0 -228
  637. package/dist/esm/helpers/get-program-bindings.js.map +0 -1
  638. package/dist/esm/helpers/program-bindings.js +0 -2
  639. package/dist/esm/types/accessor.d.ts +0 -29
  640. package/dist/esm/webgl-utils/attribute-utils.js +0 -182
  641. package/dist/esm/webgl-utils/attribute-utils.js.map +0 -1
  642. package/dist/esm/webgl-utils/constants-to-keys.js.map +0 -1
  643. package/dist/esm/webgl-utils/format-utils.js +0 -45
  644. package/dist/esm/webgl-utils/format-utils.js.map +0 -1
  645. package/dist/esm/webgl-utils/get-error.js +0 -41
  646. package/dist/esm/webgl-utils/get-error.js.map +0 -1
  647. package/dist/esm/webgl-utils/index.js +0 -5
  648. package/dist/esm/webgl-utils/index.js.map +0 -1
  649. package/dist/esm/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  650. package/dist/esm/webgl-utils/request-animation-frame.js +0 -7
  651. package/dist/esm/webgl-utils/request-animation-frame.js.map +0 -1
  652. package/dist/esm/webgl-utils/texture-utils.js +0 -48
  653. package/dist/esm/webgl-utils/texture-utils.js.map +0 -1
  654. package/dist/esm/webgl-utils/typed-array-utils.js.map +0 -1
  655. package/dist/helpers/get-program-bindings.d.ts +0 -8
  656. package/dist/helpers/get-program-bindings.d.ts.map +0 -1
  657. package/dist/helpers/get-program-bindings.js +0 -228
  658. package/dist/helpers/get-program-bindings.js.map +0 -1
  659. package/dist/helpers/program-bindings.d.ts +0 -41
  660. package/dist/helpers/program-bindings.d.ts.map +0 -1
  661. package/dist/helpers/program-bindings.js +0 -2
  662. package/dist/types/accessor.d.ts +0 -29
  663. package/dist/webgl-utils/attribute-utils.d.ts +0 -18
  664. package/dist/webgl-utils/attribute-utils.d.ts.map +0 -1
  665. package/dist/webgl-utils/attribute-utils.js +0 -182
  666. package/dist/webgl-utils/attribute-utils.js.map +0 -1
  667. package/dist/webgl-utils/constants-to-keys.d.ts +0 -4
  668. package/dist/webgl-utils/constants-to-keys.d.ts.map +0 -1
  669. package/dist/webgl-utils/constants-to-keys.js.map +0 -1
  670. package/dist/webgl-utils/format-utils.d.ts +0 -3
  671. package/dist/webgl-utils/format-utils.d.ts.map +0 -1
  672. package/dist/webgl-utils/format-utils.js +0 -45
  673. package/dist/webgl-utils/format-utils.js.map +0 -1
  674. package/dist/webgl-utils/get-error.d.ts +0 -3
  675. package/dist/webgl-utils/get-error.d.ts.map +0 -1
  676. package/dist/webgl-utils/get-error.js +0 -41
  677. package/dist/webgl-utils/get-error.js.map +0 -1
  678. package/dist/webgl-utils/index.d.ts +0 -5
  679. package/dist/webgl-utils/index.d.ts.map +0 -1
  680. package/dist/webgl-utils/index.js +0 -5
  681. package/dist/webgl-utils/index.js.map +0 -1
  682. package/dist/webgl-utils/parse-shader-compiler-log.d.ts.map +0 -1
  683. package/dist/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  684. package/dist/webgl-utils/request-animation-frame.d.ts +0 -4
  685. package/dist/webgl-utils/request-animation-frame.d.ts.map +0 -1
  686. package/dist/webgl-utils/request-animation-frame.js +0 -7
  687. package/dist/webgl-utils/request-animation-frame.js.map +0 -1
  688. package/dist/webgl-utils/texture-utils.d.ts +0 -15
  689. package/dist/webgl-utils/texture-utils.d.ts.map +0 -1
  690. package/dist/webgl-utils/texture-utils.js +0 -48
  691. package/dist/webgl-utils/texture-utils.js.map +0 -1
  692. package/dist/webgl-utils/typed-array-utils.d.ts.map +0 -1
  693. package/dist/webgl-utils/typed-array-utils.js.map +0 -1
  694. package/src/.DS_Store +0 -0
  695. package/src/adapter/converters/webgpu-texture-formats.ts +0 -167
  696. package/src/classes/accessor.d.ts +0 -28
  697. package/src/classes/accessor.js +0 -129
  698. package/src/classes/accessor.ts.disabled +0 -159
  699. package/src/classes/clear.ts +0 -108
  700. package/src/classes/copy-and-blit.ts +0 -460
  701. package/src/classes/framebuffer.ts +0 -763
  702. package/src/classes/program-configuration.ts +0 -77
  703. package/src/classes/program.ts +0 -431
  704. package/src/classes/query.ts +0 -171
  705. package/src/classes/renderbuffer.ts +0 -154
  706. package/src/classes/shader.ts +0 -129
  707. package/src/classes/texture-2d.ts +0 -35
  708. package/src/classes/texture-3d.ts +0 -123
  709. package/src/classes/texture-cube.ts +0 -162
  710. package/src/classes/texture-formats.ts +0 -171
  711. package/src/classes/texture.ts +0 -965
  712. package/src/classes/transform-feedback.ts +0 -191
  713. package/src/classes/uniform-buffer-layout.ts +0 -113
  714. package/src/classes/uniforms.ts +0 -394
  715. package/src/classes/vertex-array-object.ts +0 -339
  716. package/src/classes/vertex-array.ts +0 -484
  717. package/src/context/context/get-canvas.ts +0 -37
  718. package/src/context/context/resize-context.ts +0 -37
  719. package/src/context/parameters/webgl-parameters.ts +0 -197
  720. package/src/debug/debug-program-configuration.ts +0 -32
  721. package/src/debug/debug-uniforms.ts +0 -100
  722. package/src/debug/debug-vertex-array.ts +0 -123
  723. package/src/helpers/get-program-bindings.ts +0 -244
  724. package/src/helpers/program-bindings.ts +0 -46
  725. package/src/types/accessor.d.ts +0 -29
  726. package/src/webgl-utils/attribute-utils.ts +0 -171
  727. package/src/webgl-utils/format-utils.ts +0 -43
  728. package/src/webgl-utils/get-error.ts +0 -56
  729. package/src/webgl-utils/index.ts +0 -12
  730. package/src/webgl-utils/request-animation-frame.ts +0 -14
  731. package/src/webgl-utils/texture-utils.ts +0 -60
@@ -1,77 +0,0 @@
1
- // Contains metadata describing attribute configurations for a program's shaders
2
- // Much of this is automatically extracted from shaders after program linking
3
- // import Accessor from './accessor';
4
- import type Program from './program';
5
- import type {AttributeBinding, VaryingBinding} from '../helpers/program-bindings';
6
- import {getProgramBindings} from '../helpers/get-program-bindings';
7
-
8
- /**
9
- * is a mechanism for taking a program object and querying information
10
- * about it, so as to be able to interface and interact with it.
11
- * For example, if there is a uniform, you may need to query its
12
- * location so that you can set its value.
13
- */
14
- export default class ProgramConfiguration {
15
- id: string;
16
- attributeInfos: AttributeBinding[] = [];
17
- attributeInfosByName: Record<string, AttributeBinding> = {};
18
- // Locations may not be contiguous the case of matrix attributes
19
- // so keep a separate location->attribute map.
20
- attributeInfosByLocation: AttributeBinding[] = [];
21
- varyingInfos: VaryingBinding[] = [];
22
- varyingInfosByName: Record<string, VaryingBinding> = {};
23
-
24
- constructor(program: Program) {
25
- this.id = program.id;
26
- Object.seal(this);
27
-
28
- const bindings = getProgramBindings(program.gl2, program.handle);
29
-
30
- this.attributeInfos = bindings.attributes;
31
- for (const attributeInfo of bindings.attributes) {
32
- this.attributeInfosByName[attributeInfo.name] = attributeInfo;
33
- this.attributeInfosByLocation[attributeInfo.location] = attributeInfo;
34
- }
35
-
36
- for (const varyingInfo of bindings.varyings) {
37
- this.varyingInfosByName[varyingInfo.name] = varyingInfo;
38
- }
39
- }
40
-
41
- getAttributeInfo(locationOrName: number | string): AttributeBinding {
42
- const location = Number(locationOrName);
43
- if (Number.isFinite(location)) {
44
- return this.attributeInfosByLocation[location];
45
- }
46
- return this.attributeInfosByName[locationOrName] || null;
47
- }
48
-
49
- // Resolves an attribute name or index to an index
50
- getAttributeLocation(locationOrName: number | string): number {
51
- const attributeInfo = this.getAttributeInfo(locationOrName);
52
- return attributeInfo ? attributeInfo.location : -1;
53
- }
54
-
55
- getAttributeAccessor(locationOrName: number | string) {
56
- const attributeInfo = this.getAttributeInfo(locationOrName);
57
- return attributeInfo ? attributeInfo.accessor : null;
58
- }
59
-
60
- getVaryingInfo(locationOrName: number | string): VaryingBinding {
61
- const location = Number(locationOrName);
62
- if (Number.isFinite(location)) {
63
- return this.varyingInfos[location];
64
- }
65
- return this.varyingInfosByName[locationOrName] || null;
66
- }
67
-
68
- getVaryingIndex(locationOrName: number | string): number {
69
- const varying = this.getVaryingInfo(locationOrName);
70
- return varying ? varying.location : -1;
71
- }
72
-
73
- getVaryingAccessor(locationOrName: number | string) {
74
- const varying = this.getVaryingInfo(locationOrName);
75
- return varying ? varying.accessor : null;
76
- }
77
- }
@@ -1,431 +0,0 @@
1
- import {log, assert, uid, cast, Shader} from '@luma.gl/api';
2
- import GL from '@luma.gl/constants';
3
- import WebGLDevice from '../adapter/webgl-device';
4
- import WebGLResource, {ResourceProps} from './webgl-resource';
5
- import Texture from './texture';
6
- import Framebuffer from './framebuffer';
7
- import {parseUniformName, getUniformSetter} from './uniforms';
8
- import {WEBGLShader} from '../adapter/webgl-shader';
9
- import ProgramConfiguration from './program-configuration';
10
- import {copyUniform, checkUniformValues} from './uniforms';
11
-
12
- import {isWebGL2, assertWebGL2Context} from '../context/context/webgl-checks';
13
- import {withParameters} from '../context/state-tracker/with-parameters';
14
- import {getKey} from '../webgl-utils/constants-to-keys';
15
- import {getPrimitiveDrawMode} from '../webgl-utils/attribute-utils';
16
-
17
- const LOG_PROGRAM_PERF_PRIORITY = 4;
18
-
19
- const GL_SEPARATE_ATTRIBS = 0x8c8d;
20
-
21
- export type ProgramProps = ResourceProps & {
22
- hash?: string;
23
- vs?: string | Shader;
24
- fs?: string | Shader;
25
- varyings?: string[];
26
- bufferMode?: number;
27
- };
28
-
29
- export type ProgramDrawOptions = {
30
- logPriority?: number;
31
- drawMode?: number;
32
- vertexCount: any;
33
- offset?: number;
34
- start?: number;
35
- end?: number;
36
- isIndexed?: boolean;
37
- indexType?: any;
38
- instanceCount?: number;
39
- isInstanced?: boolean;
40
- vertexArray?: any;
41
- transformFeedback?: any; // TransformFeedback;
42
- framebuffer?: Framebuffer;
43
- parameters?: {};
44
- uniforms?: Record<string, any>;
45
- samplers?: any;
46
- };
47
-
48
- export default class Program extends WebGLResource<ProgramProps> {
49
- configuration: ProgramConfiguration;
50
- // Experimental flag to avoid deleting Program object while it is cached
51
- hash: string; // Used by ProgramManager
52
- vs: WEBGLShader;
53
- fs: WEBGLShader;
54
- uniforms: Record<string, any>;
55
- varyings: Record<string, any>;
56
- _textureUniforms: Record<string, any>;
57
- _isCached: boolean = false;
58
- _textureIndexCounter: number = 0;
59
- _uniformCount: number = 0;
60
- _uniformSetters: Record<string, Function>;
61
-
62
- constructor(device: WebGLDevice | WebGLRenderingContext, props: ProgramProps = {}) {
63
- super(WebGLDevice.attach(device), props, {} as any);
64
- this.initialize(props);
65
- Object.seal(this);
66
- this._setId(props.id);
67
- }
68
-
69
- destroy(options = {}) {
70
- if (this._isCached) {
71
- // This object is cached, do not delete
72
- return this;
73
- }
74
- return super.delete(options);
75
- }
76
-
77
- delete(options = {}) {
78
- if (this._isCached) {
79
- // This object is cached, do not delete
80
- return this;
81
- }
82
- return super.delete(options);
83
- }
84
-
85
- initialize(props: ProgramProps = {}) {
86
- const {hash, vs, fs, varyings, bufferMode = GL_SEPARATE_ATTRIBS} = props;
87
-
88
- this.hash = hash || ''; // Used by ProgramManager
89
-
90
- // Create shaders if needed
91
- this.vs =
92
- typeof vs === 'string'
93
- ? this.device.createShader({id: `${props.id}-vs`, source: vs, stage: 'vertex'})
94
- : cast<WEBGLShader>(vs);
95
- this.fs =
96
- typeof fs === 'string'
97
- ? this.device.createShader({id: `${props.id}-fs`, source: fs, stage: 'fragment'})
98
- : cast<WEBGLShader>(fs);
99
- assert(this.vs.stage === 'vertex');
100
- assert(this.fs.stage === 'fragment');
101
-
102
- // uniforms
103
- this.uniforms = {};
104
- this._textureUniforms = {};
105
-
106
- // Setup varyings if supplied
107
- if (varyings && varyings.length > 0) {
108
- assertWebGL2Context(this.gl);
109
- this.varyings = varyings;
110
- this.gl2.transformFeedbackVaryings(this.handle, varyings, bufferMode);
111
- }
112
-
113
- this._compileAndLink();
114
- this._readUniformLocationsFromLinkedProgram();
115
- this.configuration = new ProgramConfiguration(this);
116
-
117
- return this.setProps(props);
118
- }
119
-
120
- setProps(props) {
121
- if ('uniforms' in props) {
122
- this.setUniforms(props.uniforms);
123
- }
124
- return this;
125
- }
126
-
127
- // A good thing about the WebGL API is that there are so many ways to draw things ;)
128
- // This function unifies those ways into a single call using common parameters with sane defaults
129
- draw(options: ProgramDrawOptions): boolean {
130
- const {
131
- logPriority, // Probe log priority, enables Model to do more integrated logging
132
-
133
- drawMode = GL.TRIANGLES,
134
- vertexCount,
135
- offset = 0,
136
- start,
137
- end,
138
- isIndexed = false,
139
- indexType = GL.UNSIGNED_SHORT,
140
- instanceCount = 0,
141
- isInstanced = instanceCount > 0,
142
-
143
- vertexArray = null,
144
- transformFeedback,
145
- framebuffer,
146
-
147
- // Deprecated
148
- uniforms,
149
- samplers
150
- } = options;
151
-
152
- let {parameters = {}} = options;
153
-
154
- if (uniforms || samplers) {
155
- // DEPRECATED: v7.0 (deprecated earlier but warning not properly implemented)
156
- log.deprecated('Program.draw({uniforms})', 'Program.setUniforms(uniforms)')();
157
- this.setUniforms(uniforms || {});
158
- }
159
-
160
- if (log.priority >= logPriority) {
161
- const fb = framebuffer ? framebuffer.id : 'default';
162
- const message =
163
- `mode=${getKey(this.gl, drawMode)} verts=${vertexCount} ` +
164
- `instances=${instanceCount} indexType=${getKey(this.gl, indexType)} ` +
165
- `isInstanced=${isInstanced} isIndexed=${isIndexed} ` +
166
- `Framebuffer=${fb}`;
167
- log.log(logPriority, message)();
168
- }
169
-
170
- // TODO - move vertex array binding and transform feedback binding to withParameters?
171
- assert(vertexArray);
172
-
173
- this.gl.useProgram(this.handle);
174
-
175
- if (
176
- // Note: async textures set as uniforms might still be loading.
177
- // Now that all uniforms have been updated, check if any texture
178
- // in the uniforms is not yet initialized, then we don't draw
179
- !this._areTexturesRenderable() ||
180
- // Avoid WebGL draw call when not rendering any data
181
- vertexCount === 0 ||
182
- (isInstanced && instanceCount === 0)
183
- ) {
184
- return false;
185
- }
186
-
187
- vertexArray.bindForDraw(vertexCount, instanceCount, () => {
188
- if (framebuffer !== undefined) {
189
- parameters = Object.assign({}, parameters, {framebuffer});
190
- }
191
-
192
- if (transformFeedback) {
193
- const primitiveMode = getPrimitiveDrawMode(drawMode);
194
- transformFeedback.begin(primitiveMode);
195
- }
196
-
197
- this._bindTextures();
198
-
199
- withParameters(this.gl, parameters, () => {
200
- // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
201
- if (isIndexed && isInstanced) {
202
- this.gl2.drawElementsInstanced(drawMode, vertexCount, indexType, offset, instanceCount);
203
- } else if (isIndexed && isWebGL2(this.gl) && !isNaN(start) && !isNaN(end)) {
204
- this.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
205
- } else if (isIndexed) {
206
- this.gl.drawElements(drawMode, vertexCount, indexType, offset);
207
- } else if (isInstanced) {
208
- this.gl2.drawArraysInstanced(drawMode, offset, vertexCount, instanceCount);
209
- } else {
210
- this.gl.drawArrays(drawMode, offset, vertexCount);
211
- }
212
- });
213
-
214
- if (transformFeedback) {
215
- transformFeedback.end();
216
- }
217
- });
218
-
219
- return true;
220
- }
221
-
222
- setUniforms(uniforms = {}) {
223
- if (log.priority >= 2) {
224
- checkUniformValues(uniforms, this.id, this._uniformSetters);
225
- }
226
-
227
- this.gl.useProgram(this.handle);
228
-
229
- for (const uniformName in uniforms) {
230
- const uniform = uniforms[uniformName];
231
- const uniformSetter = this._uniformSetters[uniformName];
232
-
233
- if (uniformSetter) {
234
- let value = uniform;
235
- let textureUpdate = false;
236
-
237
- if (value instanceof Framebuffer) {
238
- value = value.texture;
239
- }
240
- if (value instanceof Texture) {
241
- textureUpdate = this.uniforms[uniformName] !== uniform;
242
-
243
- if (textureUpdate) {
244
- // eslint-disable-next-line max-depth
245
- // @ts-expect-error
246
- if (uniformSetter.textureIndex === undefined) {
247
- // @ts-expect-error
248
- uniformSetter.textureIndex = this._textureIndexCounter++;
249
- }
250
-
251
- // Bind texture to index
252
- const texture = value;
253
- // @ts-expect-error
254
- const {textureIndex} = uniformSetter;
255
-
256
- texture.bind(textureIndex);
257
- value = textureIndex;
258
-
259
- this._textureUniforms[uniformName] = texture;
260
- } else {
261
- // @ts-expect-error
262
- value = uniformSetter.textureIndex;
263
- }
264
- } else if (this._textureUniforms[uniformName]) {
265
- delete this._textureUniforms[uniformName];
266
- }
267
-
268
- // NOTE(Tarek): uniformSetter returns whether
269
- // value had to be updated or not.
270
- if (uniformSetter(value) || textureUpdate) {
271
- copyUniform(this.uniforms, uniformName, uniform);
272
- }
273
- }
274
- }
275
-
276
- return this;
277
- }
278
-
279
- // PRIVATE METHODS
280
-
281
- // Checks if all texture-values uniforms are renderable (i.e. loaded)
282
- // Update a texture if needed (e.g. from video)
283
- // Note: This is currently done before every draw call
284
- _areTexturesRenderable() {
285
- let texturesRenderable = true;
286
-
287
- for (const uniformName in this._textureUniforms) {
288
- const texture = this._textureUniforms[uniformName];
289
- texture.update();
290
- texturesRenderable = texturesRenderable && texture.loaded;
291
- }
292
-
293
- return texturesRenderable;
294
- }
295
-
296
- // Binds textures
297
- // Note: This is currently done before every draw call
298
- _bindTextures() {
299
- for (const uniformName in this._textureUniforms) {
300
- // @ts-expect-error
301
- const textureIndex = this._uniformSetters[uniformName].textureIndex;
302
- this._textureUniforms[uniformName].bind(textureIndex);
303
- }
304
- }
305
-
306
- // RESOURCE METHODS
307
-
308
- _createHandle() {
309
- return this.gl.createProgram();
310
- }
311
-
312
- _deleteHandle() {
313
- this.gl.deleteProgram(this.handle);
314
- }
315
-
316
- // Extract opts needed to initialize a `Program` from an independently created WebGLProgram handle
317
- _getOptionsFromHandle(handle) {
318
- const shaderHandles = this.gl.getAttachedShaders(handle);
319
- const opts = {};
320
- for (const shaderHandle of shaderHandles) {
321
- const type = this.gl.getShaderParameter(this.handle, GL.SHADER_TYPE);
322
- switch (type) {
323
- case GL.VERTEX_SHADER:
324
- // @ts-expect-error
325
- opts.vs = new VertexShader({handle: shaderHandle});
326
- break;
327
- case GL.FRAGMENT_SHADER:
328
- // @ts-expect-error
329
- opts.fs = new FragmentShader({handle: shaderHandle});
330
- break;
331
- default:
332
- }
333
- }
334
- return opts;
335
- }
336
-
337
- _getParameter(pname) {
338
- return this.gl.getProgramParameter(this.handle, pname);
339
- }
340
-
341
- // If program is not named, name it after shader names
342
- // TODO - this.id will already have been initialized
343
- _setId(id) {
344
- if (!id) {
345
- const programName = this._getName();
346
- this.id = uid(programName);
347
- }
348
- }
349
-
350
- // Generate a default name for the program based on names of the shaders
351
- _getName() {
352
- // let programName = this.vs.getName() || this.fs.getName();
353
- let programName = this.vs.id || this.fs.id;
354
- programName = programName.replace(/shader/i, '');
355
- programName = programName ? `${programName}-program` : 'program';
356
- return programName;
357
- }
358
-
359
- _compileAndLink() {
360
- const {gl} = this;
361
- gl.attachShader(this.handle, this.vs.handle);
362
- gl.attachShader(this.handle, this.fs.handle);
363
- log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this._getName()}`)();
364
- gl.linkProgram(this.handle);
365
- log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this._getName()}`)();
366
-
367
- // Avoid checking program linking error in production
368
- // @ts-expect-error
369
- if (gl.debug || log.level > 0) {
370
- const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
371
- if (!linked) {
372
- throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
373
- }
374
-
375
- gl.validateProgram(this.handle);
376
- const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
377
- if (!validated) {
378
- throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);
379
- }
380
- }
381
- }
382
-
383
- // query uniform locations and build name to setter map.
384
- // TODO - This overlaps with ProgramConfiguration?
385
- _readUniformLocationsFromLinkedProgram() {
386
- const {gl} = this;
387
- this._uniformSetters = {};
388
- this._uniformCount = this._getParameter(GL.ACTIVE_UNIFORMS);
389
- for (let i = 0; i < this._uniformCount; i++) {
390
- const info = this.gl.getActiveUniform(this.handle, i);
391
- const {name} = parseUniformName(info.name);
392
- let location = gl.getUniformLocation(this.handle, name);
393
- // @ts-expect-error
394
- this._uniformSetters[name] = getUniformSetter(gl, location, info);
395
- if (info.size > 1) {
396
- for (let l = 0; l < info.size; l++) {
397
- location = gl.getUniformLocation(this.handle, `${name}[${l}]`);
398
- // @ts-expect-error
399
- this._uniformSetters[`${name}[${l}]`] = getUniformSetter(gl, location, info);
400
- }
401
- }
402
- }
403
- this._textureIndexCounter = 0;
404
- }
405
-
406
- // TO BE REMOVED in v7?
407
-
408
- // Rretrieves information about active uniforms identifed by their indices (`uniformIndices`)
409
- // https://
410
- // developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/getActiveUniforms
411
- getActiveUniforms(uniformIndices, pname) {
412
- return this.gl2.getActiveUniforms(this.handle, uniformIndices, pname);
413
- }
414
-
415
- // Retrieves the index of a uniform block
416
- getUniformBlockIndex(blockName) {
417
- return this.gl2.getUniformBlockIndex(this.handle, blockName);
418
- }
419
-
420
- // Retrieves information about an active uniform block (`blockIndex`)
421
- // https://
422
- // developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/getActiveUniformBlockParameter
423
- getActiveUniformBlockParameter(blockIndex, pname) {
424
- return this.gl2.getActiveUniformBlockParameter(this.handle, blockIndex, pname);
425
- }
426
-
427
- // Binds a uniform block (`blockIndex`) to a specific binding point (`blockBinding`)
428
- uniformBlockBinding(blockIndex, blockBinding) {
429
- this.gl2.uniformBlockBinding(this.handle, blockIndex, blockBinding);
430
- }
431
- }
@@ -1,171 +0,0 @@
1
- // WebGL2 Query (also handles disjoint timer extensions)
2
- import {assert} from '@luma.gl/api';
3
- import WebGLDevice from '../adapter/webgl-device';
4
- import {isWebGL2} from '../context/context/webgl-checks';
5
- import WebGLResource, {ResourceProps} from './webgl-resource';
6
-
7
- const GL_QUERY_RESULT = 0x8866; // Returns a GLuint containing the query result.
8
- const GL_QUERY_RESULT_AVAILABLE = 0x8867; // whether query result is available.
9
-
10
- const GL_TIME_ELAPSED_EXT = 0x88bf; // Elapsed time (in nanoseconds).
11
- const GL_GPU_DISJOINT_EXT = 0x8fbb; // Whether GPU performed any disjoint operation.
12
-
13
- const GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8c88; // #primitives written to feedback buffers
14
- const GL_ANY_SAMPLES_PASSED = 0x8c2f; // Occlusion query (if drawing passed depth test)
15
- const GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8d6a; // Occlusion query less accurate/faster version
16
-
17
- export type QueryProps = ResourceProps & {
18
- };
19
-
20
- /**
21
- * Asynchronous queries for different kinds of information
22
- */
23
- export default class Query extends WebGLResource<QueryProps> {
24
- // Returns true if Query is supported by the WebGL implementation
25
- // Can also check whether timestamp queries are available.
26
- static isSupported(gl: WebGLRenderingContext, options: string[] = []): boolean {
27
- const webgl2 = isWebGL2(gl);
28
-
29
- // Initial value
30
- const webglDevice = WebGLDevice.fromContext(gl);
31
- const hasTimerQuery = webglDevice.features.has('webgl-timer-query');
32
- let supported = webgl2 || hasTimerQuery;
33
-
34
- for (const key of options) {
35
- switch (key) {
36
- case 'queries':
37
- supported = supported && webgl2;
38
- break;
39
- case 'timers':
40
- supported = supported && hasTimerQuery;
41
- break;
42
- default:
43
- assert(false);
44
- }
45
- }
46
-
47
- return supported;
48
- }
49
-
50
- target = null;
51
- _queryPending = false;
52
- _pollingPromise = null;
53
-
54
- // Create a query class
55
- constructor(gl: WebGLRenderingContext, opts: QueryProps = {}) {
56
- super(WebGLDevice.attach(gl), opts, {} as any);
57
- Object.seal(this);
58
- }
59
-
60
- // Shortcut for timer query (dependent on extension in both WebGL1 and 2)
61
- // Measures GPU time delta between this call and a matching `end` call in the
62
- // GPU instruction stream.
63
- beginTimeElapsedQuery(): this {
64
- return this.begin(GL_TIME_ELAPSED_EXT);
65
- }
66
-
67
- // Shortcut for occlusion queries
68
- beginOcclusionQuery(options?: {conservative?: boolean}): this {
69
- return this.begin(options?.conservative ? GL_ANY_SAMPLES_PASSED_CONSERVATIVE : GL_ANY_SAMPLES_PASSED);
70
- }
71
-
72
- // Shortcut for transformFeedbackQuery
73
- beginTransformFeedbackQuery(): this {
74
- return this.begin(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);
75
- }
76
-
77
- // Due to OpenGL API limitations, after calling `begin()` on one Query
78
- // instance, `end()` must be called on that same instance before
79
- // calling `begin()` on another query. While there can be multiple
80
- // outstanding queries representing disjoint `begin()`/`end()` intervals.
81
- // It is not possible to interleave or overlap `begin` and `end` calls.
82
- begin(target: number): this {
83
- // Don't start a new query if one is already active.
84
- if (this._queryPending) {
85
- return this;
86
- }
87
-
88
- this.target = target;
89
- this.gl2.beginQuery(this.target, this.handle);
90
-
91
- return this;
92
- }
93
-
94
- // ends the current query
95
- end(): this {
96
- // Can't end a new query if the last one hasn't been resolved.
97
- if (this._queryPending) {
98
- return this;
99
- }
100
-
101
- if (this.target) {
102
- this.gl2.endQuery(this.target);
103
- this.target = null;
104
- this._queryPending = true;
105
- }
106
- return this;
107
- }
108
-
109
- // Returns true if the query result is available
110
- isResultAvailable(): boolean {
111
- if (!this._queryPending) {
112
- return false;
113
- }
114
-
115
- const resultAvailable = this.gl2.getQueryParameter(this.handle, GL_QUERY_RESULT_AVAILABLE);
116
- if (resultAvailable) {
117
- this._queryPending = false;
118
- }
119
- return resultAvailable;
120
- }
121
-
122
- // Timing query is disjoint, i.e. results are invalid
123
- isTimerDisjoint(): boolean {
124
- return this.gl2.getParameter(GL_GPU_DISJOINT_EXT);
125
- }
126
-
127
- // Returns query result.
128
- getResult(): any {
129
- return this.gl2.getQueryParameter(this.handle, GL_QUERY_RESULT);
130
- }
131
-
132
- // Returns the query result, converted to milliseconds to match JavaScript conventions.
133
- getTimerMilliseconds() {
134
- return this.getResult() / 1e6;
135
- }
136
-
137
- // Polls the query
138
- createPoll(limit: number = Number.POSITIVE_INFINITY): Promise<any> {
139
- if (this._pollingPromise) {
140
- return this._pollingPromise;
141
- }
142
-
143
- let counter = 0;
144
-
145
- this._pollingPromise = new Promise((resolve, reject) => {
146
- const poll = () => {
147
- if (this.isResultAvailable()) {
148
- resolve(this.getResult());
149
- this._pollingPromise = null;
150
- } else if (counter++ > limit) {
151
- reject('Timed out');
152
- this._pollingPromise = null;
153
- } else {
154
- requestAnimationFrame(poll);
155
- }
156
- };
157
-
158
- requestAnimationFrame(poll);
159
- });
160
-
161
- return this._pollingPromise;
162
- }
163
-
164
- _createHandle() {
165
- return Query.isSupported(this.gl) ? this.gl2.createQuery() : null;
166
- }
167
-
168
- _deleteHandle() {
169
- this.gl2.deleteQuery(this.handle);
170
- }
171
- }