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

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 (749) 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/adapter/converters/{set-device-parameters.js → 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/{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/{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/{esm/adapter → adapter/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/{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/{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 +65 -307
  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/esm/adapter/converters/{set-device-parameters.js → device-parameters.js} +36 -5
  250. package/dist/esm/adapter/converters/device-parameters.js.map +1 -0
  251. package/dist/esm/{classes → 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/esm/{classes → 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/{adapter → esm/adapter/resources}/webgl-shader.js +13 -20
  300. package/dist/esm/adapter/resources/webgl-shader.js.map +1 -0
  301. package/dist/esm/{classes/texture.js → 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/esm/{classes/webgl-buffer.js → 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 -31
  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 -46
  338. package/dist/index.d.ts.map +1 -1
  339. package/dist/index.js +19 -31
  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 -102
  394. package/src/init.ts +2 -46
  395. package/src/types/webgl.ts +283 -0
  396. package/dist/_deprecated/context-api.d.ts +0 -85
  397. package/dist/_deprecated/context-api.d.ts.map +0 -1
  398. package/dist/_deprecated/context-api.js +0 -70
  399. package/dist/_deprecated/context-api.js.map +0 -1
  400. package/dist/_deprecated/features.d.ts +0 -27
  401. package/dist/_deprecated/features.d.ts.map +0 -1
  402. package/dist/_deprecated/features.js +0 -111
  403. package/dist/_deprecated/features.js.map +0 -1
  404. package/dist/adapter/converters/set-device-parameters.d.ts +0 -5
  405. package/dist/adapter/converters/set-device-parameters.d.ts.map +0 -1
  406. package/dist/adapter/converters/set-device-parameters.js.map +0 -1
  407. package/dist/adapter/converters/webgpu-texture-formats.d.ts +0 -281
  408. package/dist/adapter/converters/webgpu-texture-formats.d.ts.map +0 -1
  409. package/dist/adapter/converters/webgpu-texture-formats.js +0 -285
  410. package/dist/adapter/converters/webgpu-texture-formats.js.map +0 -1
  411. package/dist/adapter/webgl-shader.d.ts.map +0 -1
  412. package/dist/adapter/webgl-shader.js.map +0 -1
  413. package/dist/classes/accessor.d.ts +0 -28
  414. package/dist/classes/accessor.d.ts.map +0 -1
  415. package/dist/classes/accessor.js.map +0 -1
  416. package/dist/classes/accessor.ts.disabled +0 -159
  417. package/dist/classes/clear.d.ts +0 -17
  418. package/dist/classes/clear.d.ts.map +0 -1
  419. package/dist/classes/clear.js +0 -105
  420. package/dist/classes/clear.js.map +0 -1
  421. package/dist/classes/copy-and-blit.d.ts +0 -86
  422. package/dist/classes/copy-and-blit.d.ts.map +0 -1
  423. package/dist/classes/copy-and-blit.js +0 -338
  424. package/dist/classes/copy-and-blit.js.map +0 -1
  425. package/dist/classes/framebuffer.d.ts +0 -139
  426. package/dist/classes/framebuffer.d.ts.map +0 -1
  427. package/dist/classes/framebuffer.js +0 -656
  428. package/dist/classes/framebuffer.js.map +0 -1
  429. package/dist/classes/program-configuration.d.ts +0 -24
  430. package/dist/classes/program-configuration.d.ts.map +0 -1
  431. package/dist/classes/program-configuration.js +0 -73
  432. package/dist/classes/program-configuration.js.map +0 -1
  433. package/dist/classes/program.d.ts +0 -66
  434. package/dist/classes/program.d.ts.map +0 -1
  435. package/dist/classes/program.js +0 -379
  436. package/dist/classes/program.js.map +0 -1
  437. package/dist/classes/query.d.ts +0 -27
  438. package/dist/classes/query.d.ts.map +0 -1
  439. package/dist/classes/query.js +0 -145
  440. package/dist/classes/query.js.map +0 -1
  441. package/dist/classes/renderbuffer-formats.d.ts.map +0 -1
  442. package/dist/classes/renderbuffer-formats.js.map +0 -1
  443. package/dist/classes/renderbuffer.d.ts +0 -60
  444. package/dist/classes/renderbuffer.d.ts.map +0 -1
  445. package/dist/classes/renderbuffer.js.map +0 -1
  446. package/dist/classes/shader.d.ts +0 -42
  447. package/dist/classes/shader.d.ts.map +0 -1
  448. package/dist/classes/shader.js +0 -118
  449. package/dist/classes/shader.js.map +0 -1
  450. package/dist/classes/texture-2d.d.ts +0 -9
  451. package/dist/classes/texture-2d.d.ts.map +0 -1
  452. package/dist/classes/texture-2d.js +0 -36
  453. package/dist/classes/texture-2d.js.map +0 -1
  454. package/dist/classes/texture-3d.d.ts +0 -29
  455. package/dist/classes/texture-3d.d.ts.map +0 -1
  456. package/dist/classes/texture-3d.js +0 -76
  457. package/dist/classes/texture-3d.js.map +0 -1
  458. package/dist/classes/texture-cube.d.ts +0 -28
  459. package/dist/classes/texture-cube.d.ts.map +0 -1
  460. package/dist/classes/texture-cube.js +0 -130
  461. package/dist/classes/texture-cube.js.map +0 -1
  462. package/dist/classes/texture-formats.d.ts +0 -37
  463. package/dist/classes/texture-formats.d.ts.map +0 -1
  464. package/dist/classes/texture-formats.js +0 -98
  465. package/dist/classes/texture-formats.js.map +0 -1
  466. package/dist/classes/texture.d.ts +0 -123
  467. package/dist/classes/texture.d.ts.map +0 -1
  468. package/dist/classes/texture.js.map +0 -1
  469. package/dist/classes/transform-feedback.d.ts +0 -33
  470. package/dist/classes/transform-feedback.d.ts.map +0 -1
  471. package/dist/classes/transform-feedback.js +0 -198
  472. package/dist/classes/transform-feedback.js.map +0 -1
  473. package/dist/classes/uniform-buffer-layout.d.ts +0 -17
  474. package/dist/classes/uniform-buffer-layout.d.ts.map +0 -1
  475. package/dist/classes/uniform-buffer-layout.js +0 -104
  476. package/dist/classes/uniform-buffer-layout.js.map +0 -1
  477. package/dist/classes/uniforms.d.ts +0 -37
  478. package/dist/classes/uniforms.d.ts.map +0 -1
  479. package/dist/classes/uniforms.js +0 -250
  480. package/dist/classes/uniforms.js.map +0 -1
  481. package/dist/classes/vertex-array-object.d.ts +0 -76
  482. package/dist/classes/vertex-array-object.d.ts.map +0 -1
  483. package/dist/classes/vertex-array-object.js +0 -261
  484. package/dist/classes/vertex-array-object.js.map +0 -1
  485. package/dist/classes/vertex-array.d.ts +0 -75
  486. package/dist/classes/vertex-array.d.ts.map +0 -1
  487. package/dist/classes/vertex-array.js +0 -408
  488. package/dist/classes/vertex-array.js.map +0 -1
  489. package/dist/classes/webgl-buffer.d.ts.map +0 -1
  490. package/dist/classes/webgl-buffer.js.map +0 -1
  491. package/dist/classes/webgl-resource.d.ts.map +0 -1
  492. package/dist/classes/webgl-resource.js.map +0 -1
  493. package/dist/context/context/get-canvas.d.ts +0 -13
  494. package/dist/context/context/get-canvas.d.ts.map +0 -1
  495. package/dist/context/context/get-canvas.js +0 -31
  496. package/dist/context/context/get-canvas.js.map +0 -1
  497. package/dist/context/context/resize-context.d.ts +0 -20
  498. package/dist/context/context/resize-context.d.ts.map +0 -1
  499. package/dist/context/context/resize-context.js +0 -15
  500. package/dist/context/context/resize-context.js.map +0 -1
  501. package/dist/context/parameters/webgl-parameters.d.ts +0 -144
  502. package/dist/context/parameters/webgl-parameters.d.ts.map +0 -1
  503. package/dist/context/parameters/webgl-parameters.js +0 -2
  504. package/dist/context/parameters/webgl-parameters.js.map +0 -1
  505. package/dist/debug/debug-program-configuration.d.ts +0 -2
  506. package/dist/debug/debug-program-configuration.d.ts.map +0 -1
  507. package/dist/debug/debug-program-configuration.js +0 -40
  508. package/dist/debug/debug-program-configuration.js.map +0 -1
  509. package/dist/debug/debug-uniforms.d.ts +0 -12
  510. package/dist/debug/debug-uniforms.d.ts.map +0 -1
  511. package/dist/debug/debug-uniforms.js +0 -108
  512. package/dist/debug/debug-uniforms.js.map +0 -1
  513. package/dist/debug/debug-vertex-array.d.ts +0 -5
  514. package/dist/debug/debug-vertex-array.d.ts.map +0 -1
  515. package/dist/debug/debug-vertex-array.js +0 -118
  516. package/dist/debug/debug-vertex-array.js.map +0 -1
  517. package/dist/es5/_deprecated/context-api.js +0 -110
  518. package/dist/es5/_deprecated/context-api.js.map +0 -1
  519. package/dist/es5/_deprecated/features.js +0 -118
  520. package/dist/es5/_deprecated/features.js.map +0 -1
  521. package/dist/es5/adapter/converters/set-device-parameters.js.map +0 -1
  522. package/dist/es5/adapter/converters/webgpu-texture-formats.js +0 -296
  523. package/dist/es5/adapter/converters/webgpu-texture-formats.js.map +0 -1
  524. package/dist/es5/adapter/webgl-shader.js.map +0 -1
  525. package/dist/es5/classes/accessor.d.ts +0 -28
  526. package/dist/es5/classes/accessor.js.map +0 -1
  527. package/dist/es5/classes/accessor.ts.disabled +0 -159
  528. package/dist/es5/classes/clear.js +0 -135
  529. package/dist/es5/classes/clear.js.map +0 -1
  530. package/dist/es5/classes/copy-and-blit.js +0 -382
  531. package/dist/es5/classes/copy-and-blit.js.map +0 -1
  532. package/dist/es5/classes/framebuffer.js +0 -807
  533. package/dist/es5/classes/framebuffer.js.map +0 -1
  534. package/dist/es5/classes/program-configuration.js +0 -119
  535. package/dist/es5/classes/program-configuration.js.map +0 -1
  536. package/dist/es5/classes/program.js +0 -471
  537. package/dist/es5/classes/program.js.map +0 -1
  538. package/dist/es5/classes/query.js +0 -222
  539. package/dist/es5/classes/query.js.map +0 -1
  540. package/dist/es5/classes/renderbuffer-formats.js.map +0 -1
  541. package/dist/es5/classes/renderbuffer.js.map +0 -1
  542. package/dist/es5/classes/shader.js +0 -195
  543. package/dist/es5/classes/shader.js.map +0 -1
  544. package/dist/es5/classes/texture-2d.js.map +0 -1
  545. package/dist/es5/classes/texture-3d.js +0 -142
  546. package/dist/es5/classes/texture-3d.js.map +0 -1
  547. package/dist/es5/classes/texture-cube.js +0 -202
  548. package/dist/es5/classes/texture-cube.js.map +0 -1
  549. package/dist/es5/classes/texture-formats.js +0 -87
  550. package/dist/es5/classes/texture-formats.js.map +0 -1
  551. package/dist/es5/classes/texture.js.map +0 -1
  552. package/dist/es5/classes/transform-feedback.js +0 -267
  553. package/dist/es5/classes/transform-feedback.js.map +0 -1
  554. package/dist/es5/classes/uniform-buffer-layout.js +0 -130
  555. package/dist/es5/classes/uniform-buffer-layout.js.map +0 -1
  556. package/dist/es5/classes/uniforms.js +0 -232
  557. package/dist/es5/classes/uniforms.js.map +0 -1
  558. package/dist/es5/classes/vertex-array-object.js +0 -337
  559. package/dist/es5/classes/vertex-array-object.js.map +0 -1
  560. package/dist/es5/classes/vertex-array.js +0 -465
  561. package/dist/es5/classes/vertex-array.js.map +0 -1
  562. package/dist/es5/classes/webgl-buffer.js.map +0 -1
  563. package/dist/es5/classes/webgl-resource.js.map +0 -1
  564. package/dist/es5/context/context/get-canvas.js +0 -40
  565. package/dist/es5/context/context/get-canvas.js.map +0 -1
  566. package/dist/es5/context/context/resize-context.js +0 -23
  567. package/dist/es5/context/context/resize-context.js.map +0 -1
  568. package/dist/es5/context/parameters/webgl-parameters.js.map +0 -1
  569. package/dist/es5/debug/debug-program-configuration.js +0 -76
  570. package/dist/es5/debug/debug-program-configuration.js.map +0 -1
  571. package/dist/es5/debug/debug-uniforms.js +0 -156
  572. package/dist/es5/debug/debug-uniforms.js.map +0 -1
  573. package/dist/es5/debug/debug-vertex-array.js +0 -126
  574. package/dist/es5/debug/debug-vertex-array.js.map +0 -1
  575. package/dist/es5/helpers/get-program-bindings.js.map +0 -1
  576. package/dist/es5/helpers/program-bindings.js +0 -2
  577. package/dist/es5/types/accessor.d.ts +0 -29
  578. package/dist/es5/webgl-utils/attribute-utils.js +0 -186
  579. package/dist/es5/webgl-utils/attribute-utils.js.map +0 -1
  580. package/dist/es5/webgl-utils/constants-to-keys.js.map +0 -1
  581. package/dist/es5/webgl-utils/format-utils.js +0 -58
  582. package/dist/es5/webgl-utils/format-utils.js.map +0 -1
  583. package/dist/es5/webgl-utils/get-error.js +0 -49
  584. package/dist/es5/webgl-utils/get-error.js.map +0 -1
  585. package/dist/es5/webgl-utils/index.js +0 -74
  586. package/dist/es5/webgl-utils/index.js.map +0 -1
  587. package/dist/es5/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  588. package/dist/es5/webgl-utils/request-animation-frame.js +0 -16
  589. package/dist/es5/webgl-utils/request-animation-frame.js.map +0 -1
  590. package/dist/es5/webgl-utils/texture-utils.js +0 -61
  591. package/dist/es5/webgl-utils/texture-utils.js.map +0 -1
  592. package/dist/es5/webgl-utils/typed-array-utils.js.map +0 -1
  593. package/dist/esm/_deprecated/context-api.js +0 -70
  594. package/dist/esm/_deprecated/context-api.js.map +0 -1
  595. package/dist/esm/_deprecated/features.js +0 -111
  596. package/dist/esm/_deprecated/features.js.map +0 -1
  597. package/dist/esm/adapter/converters/set-device-parameters.js.map +0 -1
  598. package/dist/esm/adapter/converters/webgpu-texture-formats.js +0 -285
  599. package/dist/esm/adapter/converters/webgpu-texture-formats.js.map +0 -1
  600. package/dist/esm/adapter/webgl-shader.js.map +0 -1
  601. package/dist/esm/classes/accessor.d.ts +0 -28
  602. package/dist/esm/classes/accessor.js.map +0 -1
  603. package/dist/esm/classes/clear.js +0 -105
  604. package/dist/esm/classes/clear.js.map +0 -1
  605. package/dist/esm/classes/copy-and-blit.js +0 -338
  606. package/dist/esm/classes/copy-and-blit.js.map +0 -1
  607. package/dist/esm/classes/framebuffer.js +0 -656
  608. package/dist/esm/classes/framebuffer.js.map +0 -1
  609. package/dist/esm/classes/program-configuration.js +0 -73
  610. package/dist/esm/classes/program-configuration.js.map +0 -1
  611. package/dist/esm/classes/program.js +0 -379
  612. package/dist/esm/classes/program.js.map +0 -1
  613. package/dist/esm/classes/query.js +0 -145
  614. package/dist/esm/classes/query.js.map +0 -1
  615. package/dist/esm/classes/renderbuffer-formats.js.map +0 -1
  616. package/dist/esm/classes/renderbuffer.js.map +0 -1
  617. package/dist/esm/classes/shader.js +0 -118
  618. package/dist/esm/classes/shader.js.map +0 -1
  619. package/dist/esm/classes/texture-2d.js +0 -36
  620. package/dist/esm/classes/texture-2d.js.map +0 -1
  621. package/dist/esm/classes/texture-3d.js +0 -76
  622. package/dist/esm/classes/texture-3d.js.map +0 -1
  623. package/dist/esm/classes/texture-cube.js +0 -130
  624. package/dist/esm/classes/texture-cube.js.map +0 -1
  625. package/dist/esm/classes/texture-formats.js +0 -98
  626. package/dist/esm/classes/texture-formats.js.map +0 -1
  627. package/dist/esm/classes/texture.js.map +0 -1
  628. package/dist/esm/classes/transform-feedback.js +0 -198
  629. package/dist/esm/classes/transform-feedback.js.map +0 -1
  630. package/dist/esm/classes/uniform-buffer-layout.js +0 -104
  631. package/dist/esm/classes/uniform-buffer-layout.js.map +0 -1
  632. package/dist/esm/classes/uniforms.js +0 -250
  633. package/dist/esm/classes/uniforms.js.map +0 -1
  634. package/dist/esm/classes/vertex-array-object.js +0 -261
  635. package/dist/esm/classes/vertex-array-object.js.map +0 -1
  636. package/dist/esm/classes/vertex-array.js +0 -408
  637. package/dist/esm/classes/vertex-array.js.map +0 -1
  638. package/dist/esm/classes/webgl-buffer.js.map +0 -1
  639. package/dist/esm/classes/webgl-resource.js.map +0 -1
  640. package/dist/esm/context/context/get-canvas.js +0 -31
  641. package/dist/esm/context/context/get-canvas.js.map +0 -1
  642. package/dist/esm/context/context/resize-context.js +0 -15
  643. package/dist/esm/context/context/resize-context.js.map +0 -1
  644. package/dist/esm/context/parameters/webgl-parameters.js +0 -2
  645. package/dist/esm/context/parameters/webgl-parameters.js.map +0 -1
  646. package/dist/esm/debug/debug-program-configuration.js +0 -40
  647. package/dist/esm/debug/debug-program-configuration.js.map +0 -1
  648. package/dist/esm/debug/debug-uniforms.js +0 -108
  649. package/dist/esm/debug/debug-uniforms.js.map +0 -1
  650. package/dist/esm/debug/debug-vertex-array.js +0 -118
  651. package/dist/esm/debug/debug-vertex-array.js.map +0 -1
  652. package/dist/esm/helpers/get-program-bindings.js +0 -228
  653. package/dist/esm/helpers/get-program-bindings.js.map +0 -1
  654. package/dist/esm/helpers/program-bindings.js +0 -2
  655. package/dist/esm/types/accessor.d.ts +0 -29
  656. package/dist/esm/webgl-utils/attribute-utils.js +0 -182
  657. package/dist/esm/webgl-utils/attribute-utils.js.map +0 -1
  658. package/dist/esm/webgl-utils/constants-to-keys.js.map +0 -1
  659. package/dist/esm/webgl-utils/format-utils.js +0 -45
  660. package/dist/esm/webgl-utils/format-utils.js.map +0 -1
  661. package/dist/esm/webgl-utils/get-error.js +0 -41
  662. package/dist/esm/webgl-utils/get-error.js.map +0 -1
  663. package/dist/esm/webgl-utils/index.js +0 -5
  664. package/dist/esm/webgl-utils/index.js.map +0 -1
  665. package/dist/esm/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  666. package/dist/esm/webgl-utils/request-animation-frame.js +0 -7
  667. package/dist/esm/webgl-utils/request-animation-frame.js.map +0 -1
  668. package/dist/esm/webgl-utils/texture-utils.js +0 -48
  669. package/dist/esm/webgl-utils/texture-utils.js.map +0 -1
  670. package/dist/esm/webgl-utils/typed-array-utils.js.map +0 -1
  671. package/dist/helpers/get-program-bindings.d.ts +0 -8
  672. package/dist/helpers/get-program-bindings.d.ts.map +0 -1
  673. package/dist/helpers/get-program-bindings.js +0 -228
  674. package/dist/helpers/get-program-bindings.js.map +0 -1
  675. package/dist/helpers/program-bindings.d.ts +0 -41
  676. package/dist/helpers/program-bindings.d.ts.map +0 -1
  677. package/dist/helpers/program-bindings.js +0 -2
  678. package/dist/types/accessor.d.ts +0 -29
  679. package/dist/webgl-utils/attribute-utils.d.ts +0 -18
  680. package/dist/webgl-utils/attribute-utils.d.ts.map +0 -1
  681. package/dist/webgl-utils/attribute-utils.js +0 -182
  682. package/dist/webgl-utils/attribute-utils.js.map +0 -1
  683. package/dist/webgl-utils/constants-to-keys.d.ts +0 -4
  684. package/dist/webgl-utils/constants-to-keys.d.ts.map +0 -1
  685. package/dist/webgl-utils/constants-to-keys.js.map +0 -1
  686. package/dist/webgl-utils/format-utils.d.ts +0 -3
  687. package/dist/webgl-utils/format-utils.d.ts.map +0 -1
  688. package/dist/webgl-utils/format-utils.js +0 -45
  689. package/dist/webgl-utils/format-utils.js.map +0 -1
  690. package/dist/webgl-utils/get-error.d.ts +0 -3
  691. package/dist/webgl-utils/get-error.d.ts.map +0 -1
  692. package/dist/webgl-utils/get-error.js +0 -41
  693. package/dist/webgl-utils/get-error.js.map +0 -1
  694. package/dist/webgl-utils/index.d.ts +0 -5
  695. package/dist/webgl-utils/index.d.ts.map +0 -1
  696. package/dist/webgl-utils/index.js +0 -5
  697. package/dist/webgl-utils/index.js.map +0 -1
  698. package/dist/webgl-utils/parse-shader-compiler-log.d.ts.map +0 -1
  699. package/dist/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  700. package/dist/webgl-utils/request-animation-frame.d.ts +0 -4
  701. package/dist/webgl-utils/request-animation-frame.d.ts.map +0 -1
  702. package/dist/webgl-utils/request-animation-frame.js +0 -7
  703. package/dist/webgl-utils/request-animation-frame.js.map +0 -1
  704. package/dist/webgl-utils/texture-utils.d.ts +0 -15
  705. package/dist/webgl-utils/texture-utils.d.ts.map +0 -1
  706. package/dist/webgl-utils/texture-utils.js +0 -48
  707. package/dist/webgl-utils/texture-utils.js.map +0 -1
  708. package/dist/webgl-utils/typed-array-utils.d.ts.map +0 -1
  709. package/dist/webgl-utils/typed-array-utils.js.map +0 -1
  710. package/src/.DS_Store +0 -0
  711. package/src/_deprecated/context-api.ts +0 -140
  712. package/src/_deprecated/features.ts +0 -159
  713. package/src/adapter/converters/webgpu-texture-formats.ts +0 -167
  714. package/src/classes/accessor.d.ts +0 -28
  715. package/src/classes/accessor.js +0 -129
  716. package/src/classes/accessor.ts.disabled +0 -159
  717. package/src/classes/clear.ts +0 -108
  718. package/src/classes/copy-and-blit.ts +0 -460
  719. package/src/classes/framebuffer.ts +0 -763
  720. package/src/classes/program-configuration.ts +0 -77
  721. package/src/classes/program.ts +0 -431
  722. package/src/classes/query.ts +0 -171
  723. package/src/classes/renderbuffer.ts +0 -154
  724. package/src/classes/shader.ts +0 -129
  725. package/src/classes/texture-2d.ts +0 -35
  726. package/src/classes/texture-3d.ts +0 -123
  727. package/src/classes/texture-cube.ts +0 -162
  728. package/src/classes/texture-formats.ts +0 -171
  729. package/src/classes/texture.ts +0 -965
  730. package/src/classes/transform-feedback.ts +0 -191
  731. package/src/classes/uniform-buffer-layout.ts +0 -113
  732. package/src/classes/uniforms.ts +0 -394
  733. package/src/classes/vertex-array-object.ts +0 -339
  734. package/src/classes/vertex-array.ts +0 -484
  735. package/src/context/context/get-canvas.ts +0 -37
  736. package/src/context/context/resize-context.ts +0 -37
  737. package/src/context/parameters/webgl-parameters.ts +0 -197
  738. package/src/debug/debug-program-configuration.ts +0 -32
  739. package/src/debug/debug-uniforms.ts +0 -100
  740. package/src/debug/debug-vertex-array.ts +0 -123
  741. package/src/helpers/get-program-bindings.ts +0 -244
  742. package/src/helpers/program-bindings.ts +0 -46
  743. package/src/types/accessor.d.ts +0 -29
  744. package/src/webgl-utils/attribute-utils.ts +0 -171
  745. package/src/webgl-utils/format-utils.ts +0 -43
  746. package/src/webgl-utils/get-error.ts +0 -56
  747. package/src/webgl-utils/index.ts +0 -12
  748. package/src/webgl-utils/request-animation-frame.ts +0 -14
  749. package/src/webgl-utils/texture-utils.ts +0 -60
@@ -0,0 +1,1023 @@
1
+ // luma.gl, MIT license
2
+ // Texture class.
3
+ // @todo
4
+ // - [ ] cube texture init params
5
+ // - [ ] video (external) textures
6
+
7
+ import {
8
+ Device,
9
+ TextureProps,
10
+ Sampler,
11
+ SamplerProps,
12
+ SamplerParameters,
13
+ isObjectEmpty
14
+ } from '@luma.gl/api';
15
+ import {Texture, cast, log, assert, isPowerOfTwo, loadImage} from '@luma.gl/api';
16
+ import GL from '@luma.gl/constants';
17
+ import type {WebGLSamplerParameters} from '../../types/webgl';
18
+ import {withParameters} from '../../context/state-tracker/with-parameters';
19
+ import {
20
+ getWebGLTextureFormat,
21
+ getWebGLTextureParameters,
22
+ getTextureFormatBytesPerPixel
23
+ } from '../converters/texture-formats';
24
+ import {
25
+ convertSamplerParametersToWebGL,
26
+ updateSamplerParametersForNPOT
27
+ } from '../converters/sampler-parameters';
28
+ import WebGLDevice from '../webgl-device';
29
+ import WEBGLBuffer from './webgl-buffer';
30
+ import WEBGLSampler from './webgl-sampler';
31
+
32
+ export type {TextureProps};
33
+
34
+ type SetImageDataOptions = {
35
+ target?: number;
36
+ level?: number;
37
+ dataFormat?: any;
38
+ width: number;
39
+ height: number;
40
+ depth?: number;
41
+ format: any;
42
+ type?: any;
43
+ offset?: number;
44
+ data: any;
45
+ compressed?: boolean;
46
+ parameters?: Record<GL, any>;
47
+ /** @deprecated */
48
+ pixels?: any;
49
+ };
50
+
51
+ /**
52
+ * @param {*} pixels, data -
53
+ * null - create empty texture of specified format
54
+ * Typed array - init from image data in typed array
55
+ * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer
56
+ * HTMLImageElement|Image - Inits with content of image. Auto width/height
57
+ * HTMLCanvasElement - Inits with contents of canvas. Auto width/height
58
+ * HTMLVideoElement - Creates video texture. Auto width/height
59
+ *
60
+ * @param x - xOffset from where texture to be updated
61
+ * @param y - yOffset from where texture to be updated
62
+ * @param width - width of the sub image to be updated
63
+ * @param height - height of the sub image to be updated
64
+ * @param level - mip level to be updated
65
+ * @param {GLenum} format - internal format of image data.
66
+ * @param {GLenum} type
67
+ * - format of array (autodetect from type) or
68
+ * - (WEBGL2) format of buffer or ArrayBufferView
69
+ * @param {GLenum} dataFormat - format of image data.
70
+ * @param {Number} offset - (WEBGL2) offset from start of buffer
71
+ * @parameters - temporary settings to be applied, can be used to supply pixel store settings.
72
+ */
73
+ type SetSubImageDataOptions = {
74
+ target?: number;
75
+ level?: number;
76
+ dataFormat?: any;
77
+ width?: number;
78
+ height?: number;
79
+ depth?: number;
80
+ format?: any;
81
+ type?: any;
82
+ offset?: number;
83
+ data: any;
84
+ parameters?: Record<GL, any>;
85
+ compressed?: boolean;
86
+ x?: number;
87
+ y?: number;
88
+ /** @deprecated */
89
+ pixels?: any;
90
+ };
91
+
92
+ type SetImageData3DOptions = {
93
+ level?: number;
94
+ dataFormat?: any;
95
+ width: number;
96
+ height: number;
97
+ depth?: number;
98
+ format: any;
99
+ type?: any;
100
+ offset?: number;
101
+ data: any;
102
+ parameters?: Record<GL, any>;
103
+ };
104
+
105
+
106
+ // Polyfill
107
+ export default class WEBGLTexture extends Texture {
108
+ // TODO - remove?
109
+ static FACES: number[] = [
110
+ GL.TEXTURE_CUBE_MAP_POSITIVE_X,
111
+ GL.TEXTURE_CUBE_MAP_NEGATIVE_X,
112
+ GL.TEXTURE_CUBE_MAP_POSITIVE_Y,
113
+ GL.TEXTURE_CUBE_MAP_NEGATIVE_Y,
114
+ GL.TEXTURE_CUBE_MAP_POSITIVE_Z,
115
+ GL.TEXTURE_CUBE_MAP_NEGATIVE_Z
116
+ ];
117
+
118
+ readonly MAX_ATTRIBUTES: number;
119
+ readonly device: WebGLDevice;
120
+ readonly gl: WebGLRenderingContext;
121
+ readonly gl2: WebGL2RenderingContext | null;
122
+ readonly handle: WebGLTexture;
123
+
124
+ data;
125
+
126
+ width: number = undefined;
127
+ height: number = undefined;
128
+ depth: number = undefined;
129
+
130
+ format: GL = undefined;
131
+ type: GL = undefined;
132
+ dataFormat: GL = undefined;
133
+ mipmaps: boolean = undefined;
134
+
135
+ /**
136
+ * @note `target` cannot be modified by bind:
137
+ * textures are special because when you first bind them to a target,
138
+ * they get special information. When you first bind a texture as a
139
+ * GL_TEXTURE_2D, you are saying that this texture is a 2D texture.
140
+ * And it will always be a 2D texture; this state cannot be changed ever.
141
+ * A texture that was first bound as a GL_TEXTURE_2D, must always be bound as a GL_TEXTURE_2D;
142
+ * attempting to bind it as GL_TEXTURE_3D will give rise to a run-time error
143
+ * */
144
+ target: GL;
145
+ textureUnit: number = undefined;
146
+
147
+ /** Sampler object (currently unused) */
148
+ sampler: WEBGLSampler = undefined;
149
+
150
+ /**
151
+ * Program.draw() checks the loaded flag of all textures to avoid
152
+ * Textures that are still loading from promises
153
+ * Set to true as soon as texture has been initialized with valid data
154
+ */
155
+ loaded: boolean = false;
156
+ _video: {
157
+ video: HTMLVideoElement;
158
+ parameters: any;
159
+ lastTime: number;
160
+ };
161
+
162
+ constructor(device: Device, props: TextureProps) {
163
+ super(device, {format: GL.RGBA, ...props});
164
+
165
+ this.device = cast<WebGLDevice>(device);
166
+ this.gl = this.device.gl;
167
+ this.gl2 = this.device.gl2;
168
+ this.handle = this.props.handle || this.gl.createTexture();
169
+ // @ts-expect-error Per SPECTOR docs
170
+ this.handle.__SPECTOR_Metadata = {...this.props, data: typeof this.props.data}; // {name: this.props.id};
171
+
172
+ this.target = getWebGLTextureTarget(this.props);
173
+
174
+ // Program.draw() checks the loaded flag of all textures
175
+ this.loaded = false;
176
+
177
+ // Signature: new Texture2D(gl, {data: url})
178
+ if (typeof this.props?.data === 'string') {
179
+ Object.assign(this.props, {data: loadImage(this.props.data)});
180
+ }
181
+
182
+ this.initialize(this.props);
183
+
184
+ Object.seal(this);
185
+ }
186
+
187
+ destroy(): void {
188
+ if (this.handle) {
189
+ this.gl.deleteTexture(this.handle);
190
+ this.removeStats();
191
+ this.trackDeallocatedMemory('Texture');
192
+ // @ts-expect-error
193
+ this.handle = null;
194
+ }
195
+ }
196
+
197
+ toString(): string {
198
+ return `Texture(${this.id},${this.width}x${this.height})`;
199
+ }
200
+
201
+ // eslint-disable-next-line max-statements
202
+ initialize(props: TextureProps = {}): this {
203
+ // Cube textures
204
+ if (this.props.dimension === 'cube') {
205
+ return this.initializeCube(props);
206
+ }
207
+
208
+ let data = props.data;
209
+
210
+ if (data instanceof Promise) {
211
+ data.then((resolvedImageData) =>
212
+ this.initialize(
213
+ Object.assign({}, props, {
214
+ pixels: resolvedImageData,
215
+ data: resolvedImageData
216
+ })
217
+ )
218
+ );
219
+ return this;
220
+ }
221
+
222
+ const isVideo = typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement;
223
+ // @ts-expect-error
224
+ if (isVideo && data.readyState < HTMLVideoElement.HAVE_METADATA) {
225
+ this._video = null; // Declare member before the object is sealed
226
+ // @ts-expect-error
227
+ data.addEventListener('loadeddata', () => this.initialize(props));
228
+ return this;
229
+ }
230
+
231
+ let {parameters = {} as Record<GL, any>} = props;
232
+
233
+ const {
234
+ pixels = null, recreate = false, pixelStore = {}, textureUnit = undefined} = props;
235
+
236
+ // pixels variable is for API compatibility purpose
237
+ if (!data) {
238
+ // TODO - This looks backwards? Commenting out for now until we decide
239
+ // which prop to use
240
+ // log.deprecated('data', 'pixels')();
241
+ data = pixels;
242
+ }
243
+
244
+ let {width, height, dataFormat, type, compressed = false, mipmaps = true} = props;
245
+ const {depth = 0} = props;
246
+
247
+ // Deduce width and height
248
+ ({width, height, compressed, dataFormat, type} = this._deduceParameters({
249
+ format: props.format,
250
+ type,
251
+ dataFormat,
252
+ compressed,
253
+ data,
254
+ width,
255
+ height
256
+ }));
257
+
258
+ const format = getWebGLTextureFormat(this.gl, props.format);
259
+
260
+ // Store opts for accessors
261
+ this.width = width;
262
+ this.height = height;
263
+ this.depth = depth;
264
+ this.format = format;
265
+ this.type = type;
266
+ this.dataFormat = dataFormat;
267
+ this.textureUnit = textureUnit;
268
+
269
+ if (Number.isFinite(this.textureUnit)) {
270
+ this.gl.activeTexture(GL.TEXTURE0 + this.textureUnit);
271
+ this.gl.bindTexture(this.target, this.handle);
272
+ }
273
+
274
+ if (mipmaps && this.device.isWebGL1 && isNPOT(this.width, this.height)) {
275
+ log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaps`)();
276
+ mipmaps = false;
277
+ }
278
+
279
+ this.mipmaps = mipmaps;
280
+
281
+ this.setImageData({
282
+ data,
283
+ width,
284
+ height,
285
+ depth,
286
+ format,
287
+ type,
288
+ dataFormat,
289
+ // @ts-expect-error
290
+ parameters: pixelStore,
291
+ compressed
292
+ });
293
+
294
+ // Set texture sampler parameters
295
+ this.setSampler(props.sampler);
296
+ this._setSamplerParameters(parameters);
297
+
298
+ if (mipmaps) {
299
+ this.generateMipmap();
300
+ }
301
+
302
+ // TODO - Store data to enable auto recreate on context loss
303
+ if (recreate) {
304
+ this.data = data;
305
+ }
306
+ if (isVideo) {
307
+ this._video = {
308
+ video: data as HTMLVideoElement,
309
+ parameters,
310
+ // @ts-expect-error
311
+ lastTime: data.readyState >= HTMLVideoElement.HAVE_CURRENT_DATA ? data.currentTime : -1
312
+ };
313
+ }
314
+
315
+ return this;
316
+ }
317
+
318
+ initializeCube(props?: TextureProps): this {
319
+ const {mipmaps = true, parameters = {} as Record<GL, any>} = props;
320
+
321
+ // Store props for accessors
322
+ // this.props = props;
323
+
324
+ // @ts-expect-error
325
+ this.setCubeMapImageData(props).then(() => {
326
+ this.loaded = true;
327
+
328
+ // TODO - should genMipmap() be called on the cubemap or on the faces?
329
+ // TODO - without generateMipmap() cube textures do not work at all!!! Why?
330
+ if (mipmaps) {
331
+ this.generateMipmap(props);
332
+ }
333
+
334
+ this.setSampler(props.sampler);
335
+ this._setSamplerParameters(parameters);
336
+ });
337
+ return this;
338
+ }
339
+
340
+ setSampler(sampler: Sampler | SamplerProps = {}): this {
341
+ let samplerProps: SamplerParameters;
342
+ if (sampler instanceof WEBGLSampler) {
343
+ this.sampler = sampler;
344
+ samplerProps = sampler.props;
345
+ } else {
346
+ this.sampler = new WEBGLSampler(this.device, sampler);
347
+ samplerProps = sampler as SamplerProps;
348
+ }
349
+
350
+ // TODO - technically, this is only needed in WebGL1. In WebGL2 we could always use the sampler.
351
+ const parameters = convertSamplerParametersToWebGL(samplerProps);
352
+ this._setSamplerParameters(parameters);
353
+ return this;
354
+ }
355
+
356
+ /**
357
+ * If size has changed, reinitializes with current format
358
+ * @note note clears image and mipmaps
359
+ */
360
+ resize({height, width, mipmaps = false}): this {
361
+ if (width !== this.width || height !== this.height) {
362
+ return this.initialize({
363
+ width,
364
+ height,
365
+ format: this.format,
366
+ type: this.type,
367
+ dataFormat: this.dataFormat,
368
+ mipmaps
369
+ });
370
+ }
371
+ return this;
372
+ }
373
+
374
+ /** Update external texture (video frame) */
375
+ update(): this {
376
+ if (this._video) {
377
+ const {video, parameters, lastTime} = this._video;
378
+ // @ts-expect-error
379
+ if (lastTime === video.currentTime || video.readyState < HTMLVideoElement.HAVE_CURRENT_DATA) {
380
+ return;
381
+ }
382
+ this.setSubImageData({
383
+ data: video,
384
+ parameters
385
+ });
386
+ if (this.mipmaps) {
387
+ this.generateMipmap();
388
+ }
389
+ this._video.lastTime = video.currentTime;
390
+ }
391
+ }
392
+
393
+ // Call to regenerate mipmaps after modifying texture(s)
394
+ generateMipmap(params = {}): this {
395
+ if (this.device.isWebGL1 && isNPOT(this.width, this.height)) {
396
+ log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();
397
+ return this;
398
+ }
399
+
400
+ this.mipmaps = true;
401
+
402
+ this.gl.bindTexture(this.target, this.handle);
403
+ withParameters(this.gl, params, () => {
404
+ this.gl.generateMipmap(this.target);
405
+ });
406
+ this.gl.bindTexture(this.target, null);
407
+ return this;
408
+ }
409
+
410
+ /*
411
+ * Allocates storage
412
+ * @param {*} pixels -
413
+ * null - create empty texture of specified format
414
+ * Typed array - init from image data in typed array
415
+ * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer
416
+ * HTMLImageElement|Image - Inits with content of image. Auto width/height
417
+ * HTMLCanvasElement - Inits with contents of canvas. Auto width/height
418
+ * HTMLVideoElement - Creates video texture. Auto width/height
419
+ *
420
+ * @param width -
421
+ * @param height -
422
+ * @param mipMapLevel -
423
+ * @param {GLenum} format - format of image data.
424
+ * @param {GLenum} type
425
+ * - format of array (autodetect from type) or
426
+ * - (WEBGL2) format of buffer
427
+ * @param {Number} offset - (WEBGL2) offset from start of buffer
428
+ * @parameters - temporary settings to be applied, can be used to supply pixel store settings.
429
+ */
430
+ // eslint-disable-next-line max-statements, complexity
431
+ setImageData(options: SetImageDataOptions) {
432
+ if (this.props.dimension === '3d') {
433
+ return this.setImageData3D(options);
434
+ }
435
+
436
+ this.trackDeallocatedMemory('Texture');
437
+
438
+ const {
439
+ target = this.target,
440
+ pixels = null,
441
+ level = 0,
442
+ format = this.format,
443
+ offset = 0,
444
+ parameters = {} as Record<GL, any>
445
+ } = options;
446
+
447
+ let {
448
+ data = null,
449
+ type = this.type,
450
+ width = this.width,
451
+ height = this.height,
452
+ dataFormat = this.dataFormat,
453
+ compressed = false
454
+ } = options;
455
+
456
+ // pixels variable is for API compatibility purpose
457
+ if (!data) {
458
+ data = pixels;
459
+ }
460
+
461
+ ({type, dataFormat, compressed, width, height} = this._deduceParameters({
462
+ format: this.props.format,
463
+ type,
464
+ dataFormat,
465
+ compressed,
466
+ data,
467
+ width,
468
+ height
469
+ }));
470
+
471
+ const {gl} = this;
472
+ gl.bindTexture(this.target, this.handle);
473
+
474
+ let dataType = null;
475
+ ({data, dataType} = this._getDataType({data, compressed}));
476
+
477
+ let gl2;
478
+
479
+ withParameters(this.gl, parameters, () => {
480
+ switch (dataType) {
481
+ case 'null':
482
+ gl.texImage2D(target, level, format, width, height, 0 /*border*/, dataFormat, type, data);
483
+ break;
484
+ case 'typed-array':
485
+ // Looks like this assert is not necessary, as offset is ignored under WebGL1
486
+ // assert((offset === 0 || this.device.isWebGL2), 'offset supported in WebGL2 only');
487
+ gl.texImage2D(
488
+ target,
489
+ level,
490
+ format,
491
+ width,
492
+ height,
493
+ 0, // border (must be 0)
494
+ dataFormat,
495
+ type,
496
+ data,
497
+ // @ts-expect-error
498
+ offset
499
+ );
500
+ break;
501
+ case 'buffer':
502
+ // WebGL2 enables creating textures directly from a WebGL buffer
503
+ gl2 = this.device.assertWebGL2();
504
+ gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);
505
+ gl2.texImage2D(
506
+ target,
507
+ level,
508
+ format,
509
+ width,
510
+ height,
511
+ 0 /*border*/,
512
+ dataFormat,
513
+ type,
514
+ offset
515
+ );
516
+ gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
517
+ break;
518
+ case 'browser-object':
519
+ if (this.device.isWebGL2) {
520
+ gl.texImage2D(
521
+ target,
522
+ level,
523
+ format,
524
+ width,
525
+ height,
526
+ 0 /*border*/,
527
+ dataFormat,
528
+ type,
529
+ data
530
+ );
531
+ } else {
532
+ gl.texImage2D(target, level, format, dataFormat, type, data);
533
+ }
534
+ break;
535
+ case 'compressed':
536
+ for (const [levelIndex, levelData] of data.entries()) {
537
+ gl.compressedTexImage2D(
538
+ target,
539
+ levelIndex,
540
+ levelData.format,
541
+ levelData.width,
542
+ levelData.height,
543
+ 0 /* border, must be 0 */,
544
+ levelData.data
545
+ );
546
+ }
547
+
548
+ break;
549
+ default:
550
+ assert(false, 'Unknown image data type');
551
+ }
552
+ });
553
+
554
+ if (data && data.byteLength) {
555
+ this.trackAllocatedMemory(data.byteLength, 'Texture');
556
+ } else {
557
+ const bytesPerPixel = getTextureFormatBytesPerPixel(this.gl, this.props.format);
558
+ this.trackAllocatedMemory(this.width * this.height * bytesPerPixel, 'Texture');
559
+ }
560
+
561
+ this.loaded = true;
562
+
563
+ return this;
564
+ }
565
+
566
+ /**
567
+ * Redefines an area of an existing texture
568
+ * Note: does not allocate storage
569
+ * Redefines an area of an existing texture
570
+ */
571
+ setSubImageData({
572
+ target = this.target,
573
+ pixels = null,
574
+ data = null,
575
+ x = 0,
576
+ y = 0,
577
+ width = this.width,
578
+ height = this.height,
579
+ level = 0,
580
+ format = this.format,
581
+ type = this.type,
582
+ dataFormat = this.dataFormat,
583
+ compressed = false,
584
+ offset = 0,
585
+ parameters = {} as Record<GL, any>
586
+ }: SetSubImageDataOptions) {
587
+ ({type, dataFormat, compressed, width, height} = this._deduceParameters({
588
+ format: this.props.format,
589
+ type,
590
+ dataFormat,
591
+ compressed,
592
+ data,
593
+ width,
594
+ height
595
+ }));
596
+
597
+ assert(this.depth === 1, 'texSubImage not supported for 3D textures');
598
+
599
+ // pixels variable is for API compatibility purpose
600
+ if (!data) {
601
+ data = pixels;
602
+ }
603
+
604
+ // Support ndarrays
605
+ if (data && data.data) {
606
+ const ndarray = data;
607
+ data = ndarray.data;
608
+ width = ndarray.shape[0];
609
+ height = ndarray.shape[1];
610
+ }
611
+
612
+ // Support buffers
613
+ if (data instanceof WEBGLBuffer) {
614
+ data = data.handle;
615
+ }
616
+
617
+ this.gl.bindTexture(this.target, this.handle);
618
+
619
+ withParameters(this.gl, parameters, () => {
620
+ // TODO - x,y parameters
621
+ if (compressed) {
622
+ this.gl.compressedTexSubImage2D(target, level, x, y, width, height, format, data);
623
+ } else if (data === null) {
624
+ this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);
625
+ } else if (ArrayBuffer.isView(data)) {
626
+ // const gl2 = this.device.assertWebGL2();
627
+ // @ts-expect-error last offset parameter is ignored under WebGL1
628
+ this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);
629
+ } else if (typeof WebGLBuffer !== 'undefined' && data instanceof WebGLBuffer) {
630
+ // WebGL2 allows us to create texture directly from a WebGL buffer
631
+ const gl2 = this.device.assertWebGL2();
632
+ // This texImage2D signature uses currently bound GL.PIXEL_UNPACK_BUFFER
633
+ gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);
634
+ gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);
635
+ gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
636
+ } else if (this.device.isWebGL2) {
637
+ // Assume data is a browser supported object (ImageData, Canvas, ...)
638
+ const gl2 = this.device.assertWebGL2();
639
+ gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);
640
+ } else {
641
+ this.gl.texSubImage2D(target, level, x, y, dataFormat, type, data);
642
+ }
643
+ });
644
+
645
+ this.gl.bindTexture(this.target, null);
646
+ }
647
+
648
+ /**
649
+ * Defines a two-dimensional texture image or cube-map texture image with
650
+ * pixels from the current framebuffer (rather than from client memory).
651
+ * (gl.copyTexImage2D wrapper)
652
+ *
653
+ * Note that binding a texture into a Framebuffer's color buffer and
654
+ * rendering can be faster.
655
+ */
656
+ copyFramebuffer(opts = {}) {
657
+ log.error(
658
+ 'Texture.copyFramebuffer({...}) is no logner supported, use copyToTexture(source, target, opts})'
659
+ )();
660
+ return null;
661
+ }
662
+
663
+ getActiveUnit(): number {
664
+ return this.gl.getParameter(GL.ACTIVE_TEXTURE) - GL.TEXTURE0;
665
+ }
666
+
667
+ bind(textureUnit = this.textureUnit) {
668
+ const {gl} = this;
669
+
670
+ if (textureUnit !== undefined) {
671
+ this.textureUnit = textureUnit;
672
+ gl.activeTexture(gl.TEXTURE0 + textureUnit);
673
+ }
674
+
675
+ gl.bindTexture(this.target, this.handle);
676
+ return textureUnit;
677
+ }
678
+
679
+ unbind(textureUnit = this.textureUnit) {
680
+ const {gl} = this;
681
+
682
+ if (textureUnit !== undefined) {
683
+ this.textureUnit = textureUnit;
684
+ gl.activeTexture(gl.TEXTURE0 + textureUnit);
685
+ }
686
+
687
+ gl.bindTexture(this.target, null);
688
+ return textureUnit;
689
+ }
690
+
691
+ // PRIVATE METHODS
692
+
693
+ _getDataType({data, compressed = false}) {
694
+ if (compressed) {
695
+ return {data, dataType: 'compressed'};
696
+ }
697
+ if (data === null) {
698
+ return {data, dataType: 'null'};
699
+ }
700
+ if (ArrayBuffer.isView(data)) {
701
+ return {data, dataType: 'typed-array'};
702
+ }
703
+ if (data instanceof WEBGLBuffer) {
704
+ return {data: data.handle, dataType: 'buffer'};
705
+ }
706
+ // Raw WebGL handle (not a luma wrapper)
707
+ if (typeof WebGLBuffer !== 'undefined' && data instanceof WebGLBuffer) {
708
+ return {data, dataType: 'buffer'};
709
+ }
710
+ // Assume data is a browser supported object (ImageData, Canvas, ...)
711
+ return {data, dataType: 'browser-object'};
712
+ }
713
+
714
+ // HELPER METHODS
715
+
716
+ _deduceParameters(opts) {
717
+ const {format, data} = opts;
718
+ let {width, height, dataFormat, type, compressed} = opts;
719
+
720
+ // Deduce format and type from format
721
+ const parameters = getWebGLTextureParameters(this.gl, format);
722
+ dataFormat = dataFormat || parameters.dataFormat;
723
+ type = type || parameters.type;
724
+ compressed = compressed || parameters.compressed;
725
+
726
+ ({width, height} = this._deduceImageSize(data, width, height));
727
+
728
+ return {dataFormat, type, compressed, width, height, format, data};
729
+ }
730
+
731
+ // eslint-disable-next-line complexity
732
+ _deduceImageSize(data, width, height): {width: number; height: number} {
733
+ let size;
734
+
735
+ if (typeof ImageData !== 'undefined' && data instanceof ImageData) {
736
+ size = {width: data.width, height: data.height};
737
+ } else if (typeof HTMLImageElement !== 'undefined' && data instanceof HTMLImageElement) {
738
+ size = {width: data.naturalWidth, height: data.naturalHeight};
739
+ } else if (typeof HTMLCanvasElement !== 'undefined' && data instanceof HTMLCanvasElement) {
740
+ size = {width: data.width, height: data.height};
741
+ } else if (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) {
742
+ size = {width: data.width, height: data.height};
743
+ } else if (typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement) {
744
+ size = {width: data.videoWidth, height: data.videoHeight};
745
+ } else if (!data) {
746
+ size = {width: width >= 0 ? width : 1, height: height >= 0 ? height : 1};
747
+ } else {
748
+ size = {width, height};
749
+ }
750
+
751
+ assert(size, 'Could not deduced texture size');
752
+ assert(
753
+ width === undefined || size.width === width,
754
+ 'Deduced texture width does not match supplied width'
755
+ );
756
+ assert(
757
+ height === undefined || size.height === height,
758
+ 'Deduced texture height does not match supplied height'
759
+ );
760
+
761
+ return size;
762
+ }
763
+
764
+ // CUBE MAP METHODS
765
+
766
+ /* eslint-disable max-statements, max-len */
767
+ async setCubeMapImageData(options: {
768
+ width: any;
769
+ height: any;
770
+ pixels: any;
771
+ data: any;
772
+ format?: any;
773
+ type?: any;
774
+ }): Promise<void> {
775
+ const {gl} = this;
776
+
777
+ const {width, height, pixels, data, format = GL.RGBA, type = GL.UNSIGNED_BYTE} = options;
778
+ const imageDataMap = pixels || data;
779
+
780
+ // pixel data (imageDataMap) is an Object from Face to Image or Promise.
781
+ // For example:
782
+ // {
783
+ // GL.TEXTURE_CUBE_MAP_POSITIVE_X : Image-or-Promise,
784
+ // GL.TEXTURE_CUBE_MAP_NEGATIVE_X : Image-or-Promise,
785
+ // ... }
786
+ // To provide multiple level-of-details (LODs) this can be Face to Array
787
+ // of Image or Promise, like this
788
+ // {
789
+ // GL.TEXTURE_CUBE_MAP_POSITIVE_X : [Image-or-Promise-LOD-0, Image-or-Promise-LOD-1],
790
+ // GL.TEXTURE_CUBE_MAP_NEGATIVE_X : [Image-or-Promise-LOD-0, Image-or-Promise-LOD-1],
791
+ // ... }
792
+
793
+ const resolvedFaces = await Promise.all(
794
+ WEBGLTexture.FACES.map((face) => {
795
+ const facePixels = imageDataMap[face];
796
+ return Promise.all(Array.isArray(facePixels) ? facePixels : [facePixels]);
797
+ })
798
+ );
799
+
800
+ this.bind();
801
+
802
+ WEBGLTexture.FACES.forEach((face, index) => {
803
+ if (resolvedFaces[index].length > 1 && this.props.mipmaps !== false) {
804
+ // If the user provides multiple LODs, then automatic mipmap
805
+ // generation generateMipmap() should be disabled to avoid overwritting them.
806
+ log.warn(`${this.id} has mipmap and multiple LODs.`)();
807
+ }
808
+ resolvedFaces[index].forEach((image, lodLevel) => {
809
+ // TODO: adjust width & height for LOD!
810
+ if (width && height) {
811
+ gl.texImage2D(face, lodLevel, format, width, height, 0 /*border*/, format, type, image);
812
+ } else {
813
+ gl.texImage2D(face, lodLevel, format, format, type, image);
814
+ }
815
+ });
816
+ });
817
+
818
+ this.unbind();
819
+ }
820
+
821
+ /** @todo update this method to accept LODs */
822
+ setImageDataForFace(options) {
823
+ const {
824
+ face,
825
+ width,
826
+ height,
827
+ pixels,
828
+ data,
829
+ format = GL.RGBA,
830
+ type = GL.UNSIGNED_BYTE
831
+ // generateMipmap = false // TODO
832
+ } = options;
833
+
834
+ const {gl} = this;
835
+
836
+ const imageData = pixels || data;
837
+
838
+ this.bind();
839
+ if (imageData instanceof Promise) {
840
+ imageData.then((resolvedImageData) =>
841
+ this.setImageDataForFace(
842
+ Object.assign({}, options, {
843
+ face,
844
+ data: resolvedImageData,
845
+ pixels: resolvedImageData
846
+ })
847
+ )
848
+ );
849
+ } else if (this.width || this.height) {
850
+ gl.texImage2D(face, 0, format, width, height, 0 /*border*/, format, type, imageData);
851
+ } else {
852
+ gl.texImage2D(face, 0, format, format, type, imageData);
853
+ }
854
+
855
+ return this;
856
+ }
857
+
858
+ /** Image 3D copies from Typed Array or WebGLBuffer */
859
+ setImageData3D({
860
+ level = 0,
861
+ dataFormat,
862
+ format,
863
+ type, // = GL.UNSIGNED_BYTE,
864
+ width,
865
+ height,
866
+ depth = 1,
867
+ offset = 0,
868
+ data,
869
+ parameters = {} as Record<GL, any> as Record<GL, any>
870
+ }: SetImageData3DOptions) {
871
+ this.trackDeallocatedMemory('Texture');
872
+
873
+ this.gl.bindTexture(this.target, this.handle);
874
+
875
+ const webglTextureFormat = getWebGLTextureParameters(this.gl, format);
876
+
877
+ withParameters(this.gl, parameters, () => {
878
+ if (ArrayBuffer.isView(data)) {
879
+ // @ts-expect-error
880
+ this.gl.texImage3D(
881
+ this.target,
882
+ level,
883
+ webglTextureFormat.format,
884
+ width,
885
+ height,
886
+ depth,
887
+ 0 /* border, must be 0 */,
888
+ webglTextureFormat.dataFormat,
889
+ webglTextureFormat.type, // dataType: getWebGL,
890
+ data
891
+ );
892
+ }
893
+
894
+ if (data instanceof WEBGLBuffer) {
895
+ this.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle);
896
+ // @ts-expect-error
897
+ this.gl.texImage3D(
898
+ this.target,
899
+ level,
900
+ dataFormat,
901
+ width,
902
+ height,
903
+ depth,
904
+ 0 /* border, must be 0 */,
905
+ format,
906
+ type,
907
+ offset
908
+ );
909
+ }
910
+ });
911
+
912
+ if (data && data.byteLength) {
913
+ this.trackAllocatedMemory(data.byteLength, 'Texture');
914
+ } else {
915
+ const bytesPerPixel = getTextureFormatBytesPerPixel(this.gl, this.props.format);
916
+ this.trackAllocatedMemory(this.width * this.height * this.depth * bytesPerPixel, 'Texture');
917
+ }
918
+
919
+ this.loaded = true;
920
+
921
+ return this;
922
+ }
923
+
924
+ // RESOURCE METHODS
925
+
926
+ /**
927
+ * Sets sampler parameters on texture
928
+ * @note: Applies NPOT workaround if appropriate
929
+ */
930
+ _setSamplerParameters(parameters: WebGLSamplerParameters) {
931
+ // Work around WebGL1 sampling restrictions on NPOT textures
932
+ if (this.device.isWebGL1 && isNPOT(this.width, this.height)) {
933
+ parameters = updateSamplerParametersForNPOT(parameters);
934
+ }
935
+
936
+ // NPOT parameters may populate an empty object
937
+ if (isObjectEmpty(parameters)) {
938
+ return;
939
+ }
940
+
941
+ logParameters(parameters);
942
+
943
+ this.gl.bindTexture(this.target, this.handle);
944
+ for (const [pname, pvalue] of Object.entries(parameters)) {
945
+ const param = Number(pname);
946
+ let value = pvalue;
947
+
948
+ // Apparently there are integer/float conversion issues requires two parameter setting functions in JavaScript.
949
+ // For now, pick the float version for parameters specified as GLfloat.
950
+ switch (param) {
951
+ case GL.TEXTURE_MIN_LOD:
952
+ case GL.TEXTURE_MAX_LOD:
953
+ this.gl.texParameterf(this.target, param, value);
954
+ break;
955
+
956
+ default:
957
+ this.gl.texParameteri(this.target, param, value);
958
+ break;
959
+ }
960
+ }
961
+ this.gl.bindTexture(this.target, null);
962
+ return this;
963
+ }
964
+
965
+ /** @deprecated For LegacyTexture subclass */
966
+ protected _getWebGL1NPOTParameterOverride(pname: number, value: number): number {
967
+ // NOTE: Apply NPOT workaround
968
+ const npot = this.device.isWebGL1 && isNPOT(this.width, this.height);
969
+ if (npot) {
970
+ switch (pname) {
971
+ case GL.TEXTURE_MIN_FILTER:
972
+ if (value !== GL.LINEAR && value !== GL.NEAREST) {
973
+ // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();
974
+ return GL.LINEAR;
975
+ }
976
+ break;
977
+ case GL.TEXTURE_WRAP_S:
978
+ case GL.TEXTURE_WRAP_T:
979
+ // if (value !== GL.CLAMP_TO_EDGE) { log.warn(`texture: ${this} is Non-Power-Of-Two, ${getKey(this.gl, pname)} to CLAMP_TO_EDGE`)(); }
980
+ return GL.CLAMP_TO_EDGE;
981
+ default:
982
+ break;
983
+ }
984
+ }
985
+ return value;
986
+ }
987
+ }
988
+
989
+ // HELPERS
990
+
991
+ function getWebGLTextureTarget(props: TextureProps) {
992
+ switch (props.dimension) {
993
+ // supported in WebGL
994
+ case '2d':
995
+ return GL.TEXTURE_2D;
996
+ case 'cube':
997
+ return GL.TEXTURE_CUBE_MAP;
998
+ // supported in WebGL2
999
+ case '2d-array':
1000
+ return GL.TEXTURE_2D_ARRAY;
1001
+ case '3d':
1002
+ return GL.TEXTURE_3D;
1003
+ // not supported in any WebGL version
1004
+ case '1d':
1005
+ case 'cube-array':
1006
+ default:
1007
+ throw new Error(props.dimension);
1008
+ }
1009
+ }
1010
+
1011
+ function isNPOT(width: number, height: number): boolean {
1012
+ // Width and height not available, avoid classifying as NPOT texture
1013
+ if (!width || !height) {
1014
+ return false;
1015
+ }
1016
+ return !isPowerOfTwo(width) || !isPowerOfTwo(height);
1017
+ }
1018
+
1019
+ function logParameters(parameters: Record<number, GL | number>) {
1020
+ log.log(1, 'texture sampler parameters', parameters)();
1021
+ for (const [pname, pvalue] of Object.entries(parameters)) {
1022
+ }
1023
+ }