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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (783) hide show
  1. package/README.md +3 -67
  2. package/dist/adapter/converters/device-parameters.d.ts +27 -0
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -0
  4. package/dist/adapter/converters/{set-device-parameters.js → device-parameters.js} +50 -6
  5. package/dist/adapter/converters/device-parameters.js.map +1 -0
  6. package/dist/{classes → adapter/converters}/renderbuffer-formats.d.ts +0 -0
  7. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +1 -0
  8. package/dist/{classes → adapter/converters}/renderbuffer-formats.js +1 -1
  9. package/dist/adapter/converters/renderbuffer-formats.js.map +1 -0
  10. package/dist/adapter/converters/sampler-parameters.d.ts +19 -0
  11. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -0
  12. package/dist/adapter/converters/sampler-parameters.js +227 -0
  13. package/dist/adapter/converters/sampler-parameters.js.map +1 -0
  14. package/dist/adapter/converters/texture-formats.d.ts +93 -0
  15. package/dist/adapter/converters/texture-formats.d.ts.map +1 -0
  16. package/dist/adapter/converters/texture-formats.js +954 -0
  17. package/dist/adapter/converters/texture-formats.js.map +1 -0
  18. package/dist/adapter/converters/vertex-formats.d.ts +4 -0
  19. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -0
  20. package/dist/adapter/converters/vertex-formats.js +35 -0
  21. package/dist/adapter/converters/vertex-formats.js.map +1 -0
  22. package/dist/adapter/device-helpers/device-features.d.ts +3 -6
  23. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-features.js +39 -50
  25. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  26. package/dist/adapter/device-helpers/device-limits.d.ts +1 -0
  27. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/device-limits.js +1 -0
  29. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  30. package/dist/adapter/device-helpers/get-device-info.js +7 -7
  31. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  32. package/dist/adapter/helpers/attribute-utils.d.ts +11 -0
  33. package/dist/adapter/helpers/attribute-utils.d.ts.map +1 -0
  34. package/dist/adapter/helpers/attribute-utils.js +81 -0
  35. package/dist/adapter/helpers/attribute-utils.js.map +1 -0
  36. package/dist/adapter/helpers/get-shader-layout.d.ts +55 -0
  37. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -0
  38. package/dist/adapter/helpers/get-shader-layout.js +330 -0
  39. package/dist/adapter/helpers/get-shader-layout.js.map +1 -0
  40. package/dist/{webgl-utils → adapter/helpers}/parse-shader-compiler-log.d.ts +0 -0
  41. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -0
  42. package/dist/{esm/webgl-utils → adapter/helpers}/parse-shader-compiler-log.js +0 -0
  43. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -0
  44. package/dist/adapter/helpers/set-uniform.d.ts +4 -0
  45. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -0
  46. package/dist/adapter/helpers/set-uniform.js +115 -0
  47. package/dist/adapter/helpers/set-uniform.js.map +1 -0
  48. package/dist/adapter/helpers/uniforms.d.ts +26 -0
  49. package/dist/adapter/helpers/uniforms.d.ts.map +1 -0
  50. package/dist/adapter/helpers/uniforms.js +99 -0
  51. package/dist/adapter/helpers/uniforms.js.map +1 -0
  52. package/dist/adapter/objects/constants-to-keys.d.ts +5 -0
  53. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -0
  54. package/dist/{esm/webgl-utils → adapter/objects}/constants-to-keys.js +1 -0
  55. package/dist/adapter/objects/constants-to-keys.js.map +1 -0
  56. package/dist/adapter/objects/webgl-renderbuffer.d.ts +40 -0
  57. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -0
  58. package/dist/{esm/classes/renderbuffer.js → adapter/objects/webgl-renderbuffer.js} +38 -72
  59. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -0
  60. package/dist/{classes → adapter/objects}/webgl-resource.d.ts +15 -14
  61. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -0
  62. package/dist/{classes → adapter/objects}/webgl-resource.js +7 -3
  63. package/dist/adapter/objects/webgl-resource.js.map +1 -0
  64. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +27 -0
  65. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -0
  66. package/dist/adapter/objects/webgl-vertex-array-object.js +84 -0
  67. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -0
  68. package/dist/adapter/resources/webgl-buffer.d.ts +27 -0
  69. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -0
  70. package/dist/adapter/resources/webgl-buffer.js +164 -0
  71. package/dist/adapter/resources/webgl-buffer.js.map +1 -0
  72. package/dist/adapter/resources/webgl-command-buffer.d.ts +25 -0
  73. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -0
  74. package/dist/adapter/resources/webgl-command-buffer.js +65 -0
  75. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -0
  76. package/dist/adapter/resources/webgl-command-encoder.d.ts +18 -0
  77. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -0
  78. package/dist/adapter/resources/webgl-command-encoder.js +53 -0
  79. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -0
  80. package/dist/adapter/resources/webgl-external-texture.d.ts +1 -0
  81. package/dist/adapter/resources/webgl-external-texture.d.ts.map +1 -0
  82. package/dist/adapter/resources/webgl-external-texture.js +2 -0
  83. package/dist/{es5/helpers/program-bindings.js.map → adapter/resources/webgl-external-texture.js.map} +1 -1
  84. package/dist/adapter/resources/webgl-framebuffer.d.ts +41 -0
  85. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -0
  86. package/dist/adapter/resources/webgl-framebuffer.js +267 -0
  87. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -0
  88. package/dist/adapter/resources/webgl-render-pass.d.ts +11 -0
  89. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -0
  90. package/dist/adapter/resources/webgl-render-pass.js +21 -0
  91. package/dist/adapter/resources/webgl-render-pass.js.map +1 -0
  92. package/dist/adapter/resources/webgl-render-pipeline.d.ts +55 -0
  93. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -0
  94. package/dist/adapter/resources/webgl-render-pipeline.js +428 -0
  95. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -0
  96. package/dist/adapter/resources/webgl-sampler.d.ts +20 -0
  97. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -0
  98. package/dist/adapter/resources/webgl-sampler.js +50 -0
  99. package/dist/adapter/resources/webgl-sampler.js.map +1 -0
  100. package/dist/adapter/{webgl-shader.d.ts → resources/webgl-shader.d.ts} +3 -6
  101. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -0
  102. package/dist/{esm/adapter → adapter/resources}/webgl-shader.js +17 -23
  103. package/dist/adapter/resources/webgl-shader.js.map +1 -0
  104. package/dist/adapter/resources/webgl-texture.d.ts +193 -0
  105. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -0
  106. package/dist/{classes/texture.js → adapter/resources/webgl-texture.js} +280 -232
  107. package/dist/adapter/resources/webgl-texture.js.map +1 -0
  108. package/dist/adapter/webgl-canvas-context.d.ts +36 -0
  109. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -0
  110. package/dist/adapter/webgl-canvas-context.js +54 -0
  111. package/dist/adapter/webgl-canvas-context.js.map +1 -0
  112. package/dist/adapter/webgl-device.d.ts +63 -76
  113. package/dist/adapter/webgl-device.d.ts.map +1 -1
  114. package/dist/adapter/webgl-device.js +244 -115
  115. package/dist/adapter/webgl-device.js.map +1 -1
  116. package/dist/classic/accessor.d.ts +32 -0
  117. package/dist/classic/accessor.d.ts.map +1 -0
  118. package/dist/{classes → classic}/accessor.js +33 -1
  119. package/dist/classic/accessor.js.map +1 -0
  120. package/dist/{classes/webgl-buffer.d.ts → classic/buffer.d.ts} +28 -33
  121. package/dist/classic/buffer.d.ts.map +1 -0
  122. package/dist/{esm/classes/webgl-buffer.js → classic/buffer.js} +67 -57
  123. package/dist/classic/buffer.js.map +1 -0
  124. package/dist/{webgl-utils → classic}/typed-array-utils.d.ts +3 -2
  125. package/dist/classic/typed-array-utils.d.ts.map +1 -0
  126. package/dist/{esm/webgl-utils → classic}/typed-array-utils.js +0 -0
  127. package/dist/classic/typed-array-utils.js.map +1 -0
  128. package/dist/context/context/context-state.d.ts.map +1 -1
  129. package/dist/context/context/context-state.js +1 -1
  130. package/dist/context/context/context-state.js.map +1 -1
  131. package/dist/context/context/{create-context.d.ts → create-browser-context.d.ts} +2 -1
  132. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  133. package/dist/{esm/context/context/create-context.js → context/context/create-browser-context.js} +27 -3
  134. package/dist/context/context/create-browser-context.js.map +1 -0
  135. package/dist/context/context/create-headless-context.d.ts +9 -0
  136. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  137. package/dist/context/context/create-headless-context.js +43 -0
  138. package/dist/context/context/create-headless-context.js.map +1 -0
  139. package/dist/context/context/device-pixels.d.ts +1 -1
  140. package/dist/context/context/device-pixels.d.ts.map +1 -1
  141. package/dist/context/context/device-pixels.js +13 -8
  142. package/dist/context/context/device-pixels.js.map +1 -1
  143. package/dist/context/debug/spector.d.ts +18 -0
  144. package/dist/context/debug/spector.d.ts.map +1 -0
  145. package/dist/context/debug/spector.js +76 -0
  146. package/dist/context/debug/spector.js.map +1 -0
  147. package/dist/context/debug/webgl-developer-tools.d.ts +19 -0
  148. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -0
  149. package/dist/context/debug/webgl-developer-tools.js +121 -0
  150. package/dist/context/debug/webgl-developer-tools.js.map +1 -0
  151. package/dist/context/parameters/unified-parameter-api.d.ts +9 -7
  152. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  153. package/dist/context/parameters/unified-parameter-api.js +9 -8
  154. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  155. package/dist/context/parameters/webgl-parameter-tables.d.ts +40 -36
  156. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  157. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  158. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  159. package/dist/context/polyfill/polyfill-context.js +3 -3
  160. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  161. package/dist/context/polyfill/polyfill-table.d.ts +1 -1
  162. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  163. package/dist/context/polyfill/polyfill-table.js +1 -1
  164. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  165. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  166. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  167. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  168. package/dist/context/state-tracker/track-context-state.js +26 -12
  169. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  170. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  171. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  172. package/dist/context/state-tracker/with-parameters.js +6 -2
  173. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  174. package/dist/es5/adapter/converters/{set-device-parameters.js → device-parameters.js} +53 -6
  175. package/dist/es5/adapter/converters/device-parameters.js.map +1 -0
  176. package/dist/es5/{classes → adapter/converters}/renderbuffer-formats.js +1 -1
  177. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +1 -0
  178. package/dist/es5/adapter/converters/sampler-parameters.js +245 -0
  179. package/dist/es5/adapter/converters/sampler-parameters.js.map +1 -0
  180. package/dist/es5/adapter/converters/texture-formats.js +1031 -0
  181. package/dist/es5/adapter/converters/texture-formats.js.map +1 -0
  182. package/dist/es5/adapter/converters/vertex-formats.js +45 -0
  183. package/dist/es5/adapter/converters/vertex-formats.js.map +1 -0
  184. package/dist/es5/adapter/device-helpers/device-features.js +61 -58
  185. package/dist/es5/adapter/device-helpers/device-features.js.map +1 -1
  186. package/dist/es5/adapter/device-helpers/device-limits.js +1 -1
  187. package/dist/es5/adapter/device-helpers/device-limits.js.map +1 -1
  188. package/dist/es5/adapter/device-helpers/get-device-info.js +7 -7
  189. package/dist/es5/adapter/device-helpers/get-device-info.js.map +1 -1
  190. package/dist/es5/adapter/helpers/attribute-utils.js +91 -0
  191. package/dist/es5/adapter/helpers/attribute-utils.js.map +1 -0
  192. package/dist/es5/{helpers/get-program-bindings.js → adapter/helpers/get-shader-layout.js} +211 -94
  193. package/dist/es5/adapter/helpers/get-shader-layout.js.map +1 -0
  194. package/dist/es5/{webgl-utils → adapter/helpers}/parse-shader-compiler-log.js +0 -0
  195. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +1 -0
  196. package/dist/es5/adapter/helpers/set-uniform.js +125 -0
  197. package/dist/es5/adapter/helpers/set-uniform.js.map +1 -0
  198. package/dist/es5/adapter/helpers/uniforms.js +112 -0
  199. package/dist/es5/adapter/helpers/uniforms.js.map +1 -0
  200. package/dist/es5/{webgl-utils → adapter/objects}/constants-to-keys.js +1 -0
  201. package/dist/es5/adapter/objects/constants-to-keys.js.map +1 -0
  202. package/dist/es5/{classes/renderbuffer.js → adapter/objects/webgl-renderbuffer.js} +48 -98
  203. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +1 -0
  204. package/dist/es5/{classes → adapter/objects}/webgl-resource.js +8 -3
  205. package/dist/es5/adapter/objects/webgl-resource.js.map +1 -0
  206. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +137 -0
  207. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +1 -0
  208. package/dist/es5/adapter/resources/webgl-buffer.js +243 -0
  209. package/dist/es5/adapter/resources/webgl-buffer.js.map +1 -0
  210. package/dist/es5/adapter/resources/webgl-command-buffer.js +96 -0
  211. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +1 -0
  212. package/dist/es5/adapter/resources/webgl-command-encoder.js +98 -0
  213. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +1 -0
  214. package/dist/es5/adapter/resources/webgl-external-texture.js +2 -0
  215. package/dist/{esm/helpers/program-bindings.js.map → es5/adapter/resources/webgl-external-texture.js.map} +1 -1
  216. package/dist/es5/adapter/resources/webgl-framebuffer.js +346 -0
  217. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +1 -0
  218. package/dist/es5/{classes/texture-2d.js → adapter/resources/webgl-render-pass.js} +26 -45
  219. package/dist/es5/adapter/resources/webgl-render-pass.js.map +1 -0
  220. package/dist/es5/adapter/resources/webgl-render-pipeline.js +530 -0
  221. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +1 -0
  222. package/dist/es5/adapter/resources/webgl-sampler.js +96 -0
  223. package/dist/es5/adapter/resources/webgl-sampler.js.map +1 -0
  224. package/dist/es5/adapter/{webgl-shader.js → resources/webgl-shader.js} +16 -21
  225. package/dist/es5/adapter/resources/webgl-shader.js.map +1 -0
  226. package/dist/es5/{classes/texture.js → adapter/resources/webgl-texture.js} +374 -298
  227. package/dist/es5/adapter/resources/webgl-texture.js.map +1 -0
  228. package/dist/es5/adapter/webgl-canvas-context.js +97 -0
  229. package/dist/es5/adapter/webgl-canvas-context.js.map +1 -0
  230. package/dist/es5/adapter/webgl-device.js +316 -132
  231. package/dist/es5/adapter/webgl-device.js.map +1 -1
  232. package/dist/es5/{classes → classic}/accessor.js +25 -1
  233. package/dist/es5/classic/accessor.js.map +1 -0
  234. package/dist/es5/{classes/webgl-buffer.js → classic/buffer.js} +88 -72
  235. package/dist/es5/classic/buffer.js.map +1 -0
  236. package/dist/es5/{webgl-utils → classic}/typed-array-utils.js +0 -0
  237. package/dist/es5/classic/typed-array-utils.js.map +1 -0
  238. package/dist/es5/context/context/context-state.js +1 -1
  239. package/dist/es5/context/context/context-state.js.map +1 -1
  240. package/dist/es5/context/context/{create-context.js → create-browser-context.js} +29 -3
  241. package/dist/es5/context/context/create-browser-context.js.map +1 -0
  242. package/dist/es5/context/context/create-headless-context.js +60 -0
  243. package/dist/es5/context/context/create-headless-context.js.map +1 -0
  244. package/dist/es5/context/context/device-pixels.js +14 -8
  245. package/dist/es5/context/context/device-pixels.js.map +1 -1
  246. package/dist/es5/context/debug/spector.js +133 -0
  247. package/dist/es5/context/debug/spector.js.map +1 -0
  248. package/dist/es5/context/debug/webgl-developer-tools.js +198 -0
  249. package/dist/es5/context/debug/webgl-developer-tools.js.map +1 -0
  250. package/dist/es5/context/parameters/unified-parameter-api.js +15 -9
  251. package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
  252. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +1 -1
  253. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +1 -1
  254. package/dist/es5/context/polyfill/polyfill-context.js +3 -3
  255. package/dist/es5/context/polyfill/polyfill-context.js.map +1 -1
  256. package/dist/es5/context/polyfill/polyfill-table.js +1 -1
  257. package/dist/es5/context/polyfill/polyfill-table.js.map +1 -1
  258. package/dist/es5/context/state-tracker/deep-array-equal.js.map +1 -1
  259. package/dist/es5/context/state-tracker/track-context-state.js +39 -24
  260. package/dist/es5/context/state-tracker/track-context-state.js.map +1 -1
  261. package/dist/es5/context/state-tracker/with-parameters.js +8 -2
  262. package/dist/es5/context/state-tracker/with-parameters.js.map +1 -1
  263. package/dist/es5/index.js +72 -300
  264. package/dist/es5/index.js.map +1 -1
  265. package/dist/es5/init.js +1 -41
  266. package/dist/es5/init.js.map +1 -1
  267. package/dist/es5/{context/parameters/webgl-parameters.js → types/webgl.js} +1 -1
  268. package/dist/es5/types/webgl.js.map +1 -0
  269. package/dist/esm/adapter/converters/{set-device-parameters.js → device-parameters.js} +50 -6
  270. package/dist/esm/adapter/converters/device-parameters.js.map +1 -0
  271. package/dist/esm/{classes → adapter/converters}/renderbuffer-formats.js +1 -1
  272. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +1 -0
  273. package/dist/esm/adapter/converters/sampler-parameters.js +227 -0
  274. package/dist/esm/adapter/converters/sampler-parameters.js.map +1 -0
  275. package/dist/esm/adapter/converters/texture-formats.js +954 -0
  276. package/dist/esm/adapter/converters/texture-formats.js.map +1 -0
  277. package/dist/esm/adapter/converters/vertex-formats.js +35 -0
  278. package/dist/esm/adapter/converters/vertex-formats.js.map +1 -0
  279. package/dist/esm/adapter/device-helpers/device-features.js +39 -50
  280. package/dist/esm/adapter/device-helpers/device-features.js.map +1 -1
  281. package/dist/esm/adapter/device-helpers/device-limits.js +1 -0
  282. package/dist/esm/adapter/device-helpers/device-limits.js.map +1 -1
  283. package/dist/esm/adapter/device-helpers/get-device-info.js +7 -7
  284. package/dist/esm/adapter/device-helpers/get-device-info.js.map +1 -1
  285. package/dist/esm/adapter/helpers/attribute-utils.js +81 -0
  286. package/dist/esm/adapter/helpers/attribute-utils.js.map +1 -0
  287. package/dist/esm/adapter/helpers/get-shader-layout.js +330 -0
  288. package/dist/esm/adapter/helpers/get-shader-layout.js.map +1 -0
  289. package/dist/{webgl-utils → esm/adapter/helpers}/parse-shader-compiler-log.js +0 -0
  290. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +1 -0
  291. package/dist/esm/adapter/helpers/set-uniform.js +115 -0
  292. package/dist/esm/adapter/helpers/set-uniform.js.map +1 -0
  293. package/dist/esm/adapter/helpers/uniforms.js +99 -0
  294. package/dist/esm/adapter/helpers/uniforms.js.map +1 -0
  295. package/dist/{webgl-utils → esm/adapter/objects}/constants-to-keys.js +1 -0
  296. package/dist/esm/adapter/objects/constants-to-keys.js.map +1 -0
  297. package/dist/{classes/renderbuffer.js → esm/adapter/objects/webgl-renderbuffer.js} +38 -72
  298. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +1 -0
  299. package/dist/esm/{classes → adapter/objects}/webgl-resource.js +7 -3
  300. package/dist/esm/adapter/objects/webgl-resource.js.map +1 -0
  301. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +84 -0
  302. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +1 -0
  303. package/dist/esm/adapter/resources/webgl-buffer.js +164 -0
  304. package/dist/esm/adapter/resources/webgl-buffer.js.map +1 -0
  305. package/dist/esm/adapter/resources/webgl-command-buffer.js +65 -0
  306. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +1 -0
  307. package/dist/esm/adapter/resources/webgl-command-encoder.js +53 -0
  308. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +1 -0
  309. package/dist/esm/adapter/resources/webgl-external-texture.js +2 -0
  310. package/dist/{helpers/program-bindings.js.map → esm/adapter/resources/webgl-external-texture.js.map} +1 -1
  311. package/dist/esm/adapter/resources/webgl-framebuffer.js +267 -0
  312. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +1 -0
  313. package/dist/esm/adapter/resources/webgl-render-pass.js +21 -0
  314. package/dist/esm/adapter/resources/webgl-render-pass.js.map +1 -0
  315. package/dist/esm/adapter/resources/webgl-render-pipeline.js +428 -0
  316. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +1 -0
  317. package/dist/esm/adapter/resources/webgl-sampler.js +50 -0
  318. package/dist/esm/adapter/resources/webgl-sampler.js.map +1 -0
  319. package/dist/{adapter → esm/adapter/resources}/webgl-shader.js +17 -23
  320. package/dist/esm/adapter/resources/webgl-shader.js.map +1 -0
  321. package/dist/esm/{classes/texture.js → adapter/resources/webgl-texture.js} +280 -232
  322. package/dist/esm/adapter/resources/webgl-texture.js.map +1 -0
  323. package/dist/esm/adapter/webgl-canvas-context.js +54 -0
  324. package/dist/esm/adapter/webgl-canvas-context.js.map +1 -0
  325. package/dist/esm/adapter/webgl-device.js +244 -115
  326. package/dist/esm/adapter/webgl-device.js.map +1 -1
  327. package/dist/esm/{classes → classic}/accessor.js +33 -1
  328. package/dist/esm/classic/accessor.js.map +1 -0
  329. package/dist/{classes/webgl-buffer.js → esm/classic/buffer.js} +67 -57
  330. package/dist/esm/classic/buffer.js.map +1 -0
  331. package/dist/{webgl-utils → esm/classic}/typed-array-utils.js +0 -0
  332. package/dist/esm/classic/typed-array-utils.js.map +1 -0
  333. package/dist/esm/context/context/context-state.js +1 -1
  334. package/dist/esm/context/context/context-state.js.map +1 -1
  335. package/dist/{context/context/create-context.js → esm/context/context/create-browser-context.js} +27 -3
  336. package/dist/esm/context/context/create-browser-context.js.map +1 -0
  337. package/dist/esm/context/context/create-headless-context.js +43 -0
  338. package/dist/esm/context/context/create-headless-context.js.map +1 -0
  339. package/dist/esm/context/context/device-pixels.js +13 -8
  340. package/dist/esm/context/context/device-pixels.js.map +1 -1
  341. package/dist/esm/context/debug/spector.js +76 -0
  342. package/dist/esm/context/debug/spector.js.map +1 -0
  343. package/dist/esm/context/debug/webgl-developer-tools.js +121 -0
  344. package/dist/esm/context/debug/webgl-developer-tools.js.map +1 -0
  345. package/dist/esm/context/parameters/unified-parameter-api.js +9 -8
  346. package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
  347. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +1 -1
  348. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +1 -1
  349. package/dist/esm/context/polyfill/polyfill-context.js +3 -3
  350. package/dist/esm/context/polyfill/polyfill-context.js.map +1 -1
  351. package/dist/esm/context/polyfill/polyfill-table.js +1 -1
  352. package/dist/esm/context/polyfill/polyfill-table.js.map +1 -1
  353. package/dist/esm/context/state-tracker/deep-array-equal.js.map +1 -1
  354. package/dist/esm/context/state-tracker/track-context-state.js +26 -12
  355. package/dist/esm/context/state-tracker/track-context-state.js.map +1 -1
  356. package/dist/esm/context/state-tracker/with-parameters.js +6 -2
  357. package/dist/esm/context/state-tracker/with-parameters.js.map +1 -1
  358. package/dist/esm/index.js +20 -31
  359. package/dist/esm/index.js.map +1 -1
  360. package/dist/esm/init.js +2 -31
  361. package/dist/esm/init.js.map +1 -1
  362. package/dist/esm/types/webgl.js +2 -0
  363. package/dist/esm/types/webgl.js.map +1 -0
  364. package/dist/index.d.ts +25 -46
  365. package/dist/index.d.ts.map +1 -1
  366. package/dist/index.js +20 -31
  367. package/dist/index.js.map +1 -1
  368. package/dist/init.d.ts +1 -4
  369. package/dist/init.d.ts.map +1 -1
  370. package/dist/init.js +2 -31
  371. package/dist/init.js.map +1 -1
  372. package/dist/types/webgl.d.ts +145 -0
  373. package/dist/types/webgl.d.ts.map +1 -0
  374. package/dist/types/webgl.js +2 -0
  375. package/dist/types/webgl.js.map +1 -0
  376. package/package.json +5 -5
  377. package/src/adapter/converters/{set-device-parameters.ts → device-parameters.ts} +81 -12
  378. package/src/{classes → adapter/converters}/renderbuffer-formats.ts +1 -1
  379. package/src/adapter/converters/sampler-parameters.ts +184 -0
  380. package/src/adapter/converters/texture-formats.ts +633 -0
  381. package/src/adapter/converters/vertex-formats.ts +22 -0
  382. package/src/adapter/device-helpers/device-features.ts +55 -124
  383. package/src/adapter/device-helpers/device-limits.ts +6 -3
  384. package/src/adapter/device-helpers/get-device-info.ts +8 -8
  385. package/src/adapter/helpers/attribute-utils.ts +61 -0
  386. package/src/adapter/helpers/get-shader-layout.ts +407 -0
  387. package/src/{webgl-utils → adapter/helpers}/parse-shader-compiler-log.ts +0 -0
  388. package/src/adapter/helpers/set-uniform.ts +87 -0
  389. package/src/adapter/helpers/uniforms.ts +121 -0
  390. package/src/{webgl-utils → adapter/objects}/constants-to-keys.ts +6 -3
  391. package/src/adapter/objects/webgl-renderbuffer.ts +104 -0
  392. package/src/{classes → adapter/objects}/webgl-resource.ts +23 -17
  393. package/src/adapter/objects/webgl-vertex-array-object.ts +111 -0
  394. package/src/adapter/resources/webgl-buffer.ts +219 -0
  395. package/src/adapter/resources/webgl-command-buffer.ts +94 -0
  396. package/src/adapter/resources/webgl-command-encoder.ts +58 -0
  397. package/src/adapter/resources/webgl-external-texture.ts +92 -0
  398. package/src/adapter/resources/webgl-framebuffer.ts +282 -0
  399. package/src/adapter/resources/webgl-render-pass.ts +24 -0
  400. package/src/adapter/resources/webgl-render-pipeline.ts +425 -0
  401. package/src/adapter/resources/webgl-sampler.ts +56 -0
  402. package/src/adapter/{webgl-shader.ts → resources/webgl-shader.ts} +19 -24
  403. package/src/adapter/resources/webgl-texture.ts +1036 -0
  404. package/src/adapter/webgl-canvas-context.ts +74 -0
  405. package/src/adapter/webgl-device.ts +297 -289
  406. package/{dist/esm/classes/accessor.ts.disabled → src/classic/accessor.ts} +38 -37
  407. package/src/{classes/webgl-buffer.ts → classic/buffer.ts} +76 -84
  408. package/src/{webgl-utils → classic}/typed-array-utils.ts +5 -1
  409. package/src/context/context/context-state.ts +4 -2
  410. package/src/context/context/{create-context.ts → create-browser-context.ts} +41 -6
  411. package/src/context/context/create-headless-context.ts +48 -0
  412. package/src/context/context/device-pixels.ts +24 -13
  413. package/src/context/debug/spector.ts +92 -0
  414. package/src/context/debug/webgl-developer-tools.ts +162 -0
  415. package/src/context/parameters/unified-parameter-api.ts +21 -13
  416. package/src/context/parameters/webgl-parameter-tables.ts +38 -36
  417. package/src/context/polyfill/get-parameter-polyfill.ts +1 -1
  418. package/src/context/polyfill/polyfill-context.ts +4 -5
  419. package/src/context/polyfill/polyfill-table.ts +1 -1
  420. package/src/context/state-tracker/deep-array-equal.ts +1 -1
  421. package/src/context/state-tracker/track-context-state.ts +34 -26
  422. package/src/context/state-tracker/with-parameters.ts +7 -2
  423. package/src/index.ts +42 -102
  424. package/src/init.ts +2 -46
  425. package/src/types/webgl.ts +284 -0
  426. package/dist/_deprecated/context-api.d.ts +0 -85
  427. package/dist/_deprecated/context-api.d.ts.map +0 -1
  428. package/dist/_deprecated/context-api.js +0 -70
  429. package/dist/_deprecated/context-api.js.map +0 -1
  430. package/dist/_deprecated/features.d.ts +0 -27
  431. package/dist/_deprecated/features.d.ts.map +0 -1
  432. package/dist/_deprecated/features.js +0 -111
  433. package/dist/_deprecated/features.js.map +0 -1
  434. package/dist/adapter/converters/set-device-parameters.d.ts +0 -5
  435. package/dist/adapter/converters/set-device-parameters.d.ts.map +0 -1
  436. package/dist/adapter/converters/set-device-parameters.js.map +0 -1
  437. package/dist/adapter/converters/webgpu-texture-formats.d.ts +0 -281
  438. package/dist/adapter/converters/webgpu-texture-formats.d.ts.map +0 -1
  439. package/dist/adapter/converters/webgpu-texture-formats.js +0 -285
  440. package/dist/adapter/converters/webgpu-texture-formats.js.map +0 -1
  441. package/dist/adapter/webgl-shader.d.ts.map +0 -1
  442. package/dist/adapter/webgl-shader.js.map +0 -1
  443. package/dist/classes/accessor.d.ts +0 -28
  444. package/dist/classes/accessor.d.ts.map +0 -1
  445. package/dist/classes/accessor.js.map +0 -1
  446. package/dist/classes/accessor.ts.disabled +0 -159
  447. package/dist/classes/clear.d.ts +0 -17
  448. package/dist/classes/clear.d.ts.map +0 -1
  449. package/dist/classes/clear.js +0 -105
  450. package/dist/classes/clear.js.map +0 -1
  451. package/dist/classes/copy-and-blit.d.ts +0 -86
  452. package/dist/classes/copy-and-blit.d.ts.map +0 -1
  453. package/dist/classes/copy-and-blit.js +0 -338
  454. package/dist/classes/copy-and-blit.js.map +0 -1
  455. package/dist/classes/framebuffer.d.ts +0 -139
  456. package/dist/classes/framebuffer.d.ts.map +0 -1
  457. package/dist/classes/framebuffer.js +0 -656
  458. package/dist/classes/framebuffer.js.map +0 -1
  459. package/dist/classes/program-configuration.d.ts +0 -24
  460. package/dist/classes/program-configuration.d.ts.map +0 -1
  461. package/dist/classes/program-configuration.js +0 -73
  462. package/dist/classes/program-configuration.js.map +0 -1
  463. package/dist/classes/program.d.ts +0 -66
  464. package/dist/classes/program.d.ts.map +0 -1
  465. package/dist/classes/program.js +0 -379
  466. package/dist/classes/program.js.map +0 -1
  467. package/dist/classes/query.d.ts +0 -27
  468. package/dist/classes/query.d.ts.map +0 -1
  469. package/dist/classes/query.js +0 -145
  470. package/dist/classes/query.js.map +0 -1
  471. package/dist/classes/renderbuffer-formats.d.ts.map +0 -1
  472. package/dist/classes/renderbuffer-formats.js.map +0 -1
  473. package/dist/classes/renderbuffer.d.ts +0 -60
  474. package/dist/classes/renderbuffer.d.ts.map +0 -1
  475. package/dist/classes/renderbuffer.js.map +0 -1
  476. package/dist/classes/shader.d.ts +0 -42
  477. package/dist/classes/shader.d.ts.map +0 -1
  478. package/dist/classes/shader.js +0 -118
  479. package/dist/classes/shader.js.map +0 -1
  480. package/dist/classes/texture-2d.d.ts +0 -9
  481. package/dist/classes/texture-2d.d.ts.map +0 -1
  482. package/dist/classes/texture-2d.js +0 -36
  483. package/dist/classes/texture-2d.js.map +0 -1
  484. package/dist/classes/texture-3d.d.ts +0 -29
  485. package/dist/classes/texture-3d.d.ts.map +0 -1
  486. package/dist/classes/texture-3d.js +0 -76
  487. package/dist/classes/texture-3d.js.map +0 -1
  488. package/dist/classes/texture-cube.d.ts +0 -28
  489. package/dist/classes/texture-cube.d.ts.map +0 -1
  490. package/dist/classes/texture-cube.js +0 -130
  491. package/dist/classes/texture-cube.js.map +0 -1
  492. package/dist/classes/texture-formats.d.ts +0 -37
  493. package/dist/classes/texture-formats.d.ts.map +0 -1
  494. package/dist/classes/texture-formats.js +0 -98
  495. package/dist/classes/texture-formats.js.map +0 -1
  496. package/dist/classes/texture.d.ts +0 -123
  497. package/dist/classes/texture.d.ts.map +0 -1
  498. package/dist/classes/texture.js.map +0 -1
  499. package/dist/classes/transform-feedback.d.ts +0 -33
  500. package/dist/classes/transform-feedback.d.ts.map +0 -1
  501. package/dist/classes/transform-feedback.js +0 -198
  502. package/dist/classes/transform-feedback.js.map +0 -1
  503. package/dist/classes/uniform-buffer-layout.d.ts +0 -17
  504. package/dist/classes/uniform-buffer-layout.d.ts.map +0 -1
  505. package/dist/classes/uniform-buffer-layout.js +0 -104
  506. package/dist/classes/uniform-buffer-layout.js.map +0 -1
  507. package/dist/classes/uniforms.d.ts +0 -37
  508. package/dist/classes/uniforms.d.ts.map +0 -1
  509. package/dist/classes/uniforms.js +0 -250
  510. package/dist/classes/uniforms.js.map +0 -1
  511. package/dist/classes/vertex-array-object.d.ts +0 -76
  512. package/dist/classes/vertex-array-object.d.ts.map +0 -1
  513. package/dist/classes/vertex-array-object.js +0 -261
  514. package/dist/classes/vertex-array-object.js.map +0 -1
  515. package/dist/classes/vertex-array.d.ts +0 -75
  516. package/dist/classes/vertex-array.d.ts.map +0 -1
  517. package/dist/classes/vertex-array.js +0 -408
  518. package/dist/classes/vertex-array.js.map +0 -1
  519. package/dist/classes/webgl-buffer.d.ts.map +0 -1
  520. package/dist/classes/webgl-buffer.js.map +0 -1
  521. package/dist/classes/webgl-resource.d.ts.map +0 -1
  522. package/dist/classes/webgl-resource.js.map +0 -1
  523. package/dist/context/context/create-context.d.ts.map +0 -1
  524. package/dist/context/context/create-context.js.map +0 -1
  525. package/dist/context/context/get-canvas.d.ts +0 -13
  526. package/dist/context/context/get-canvas.d.ts.map +0 -1
  527. package/dist/context/context/get-canvas.js +0 -31
  528. package/dist/context/context/get-canvas.js.map +0 -1
  529. package/dist/context/context/resize-context.d.ts +0 -20
  530. package/dist/context/context/resize-context.d.ts.map +0 -1
  531. package/dist/context/context/resize-context.js +0 -15
  532. package/dist/context/context/resize-context.js.map +0 -1
  533. package/dist/context/parameters/webgl-parameters.d.ts +0 -144
  534. package/dist/context/parameters/webgl-parameters.d.ts.map +0 -1
  535. package/dist/context/parameters/webgl-parameters.js +0 -2
  536. package/dist/context/parameters/webgl-parameters.js.map +0 -1
  537. package/dist/debug/debug-program-configuration.d.ts +0 -2
  538. package/dist/debug/debug-program-configuration.d.ts.map +0 -1
  539. package/dist/debug/debug-program-configuration.js +0 -40
  540. package/dist/debug/debug-program-configuration.js.map +0 -1
  541. package/dist/debug/debug-uniforms.d.ts +0 -12
  542. package/dist/debug/debug-uniforms.d.ts.map +0 -1
  543. package/dist/debug/debug-uniforms.js +0 -108
  544. package/dist/debug/debug-uniforms.js.map +0 -1
  545. package/dist/debug/debug-vertex-array.d.ts +0 -5
  546. package/dist/debug/debug-vertex-array.d.ts.map +0 -1
  547. package/dist/debug/debug-vertex-array.js +0 -118
  548. package/dist/debug/debug-vertex-array.js.map +0 -1
  549. package/dist/es5/_deprecated/context-api.js +0 -110
  550. package/dist/es5/_deprecated/context-api.js.map +0 -1
  551. package/dist/es5/_deprecated/features.js +0 -118
  552. package/dist/es5/_deprecated/features.js.map +0 -1
  553. package/dist/es5/adapter/converters/set-device-parameters.js.map +0 -1
  554. package/dist/es5/adapter/converters/webgpu-texture-formats.js +0 -296
  555. package/dist/es5/adapter/converters/webgpu-texture-formats.js.map +0 -1
  556. package/dist/es5/adapter/webgl-shader.js.map +0 -1
  557. package/dist/es5/classes/accessor.d.ts +0 -28
  558. package/dist/es5/classes/accessor.js.map +0 -1
  559. package/dist/es5/classes/accessor.ts.disabled +0 -159
  560. package/dist/es5/classes/clear.js +0 -135
  561. package/dist/es5/classes/clear.js.map +0 -1
  562. package/dist/es5/classes/copy-and-blit.js +0 -382
  563. package/dist/es5/classes/copy-and-blit.js.map +0 -1
  564. package/dist/es5/classes/framebuffer.js +0 -807
  565. package/dist/es5/classes/framebuffer.js.map +0 -1
  566. package/dist/es5/classes/program-configuration.js +0 -119
  567. package/dist/es5/classes/program-configuration.js.map +0 -1
  568. package/dist/es5/classes/program.js +0 -471
  569. package/dist/es5/classes/program.js.map +0 -1
  570. package/dist/es5/classes/query.js +0 -222
  571. package/dist/es5/classes/query.js.map +0 -1
  572. package/dist/es5/classes/renderbuffer-formats.js.map +0 -1
  573. package/dist/es5/classes/renderbuffer.js.map +0 -1
  574. package/dist/es5/classes/shader.js +0 -195
  575. package/dist/es5/classes/shader.js.map +0 -1
  576. package/dist/es5/classes/texture-2d.js.map +0 -1
  577. package/dist/es5/classes/texture-3d.js +0 -142
  578. package/dist/es5/classes/texture-3d.js.map +0 -1
  579. package/dist/es5/classes/texture-cube.js +0 -202
  580. package/dist/es5/classes/texture-cube.js.map +0 -1
  581. package/dist/es5/classes/texture-formats.js +0 -87
  582. package/dist/es5/classes/texture-formats.js.map +0 -1
  583. package/dist/es5/classes/texture.js.map +0 -1
  584. package/dist/es5/classes/transform-feedback.js +0 -267
  585. package/dist/es5/classes/transform-feedback.js.map +0 -1
  586. package/dist/es5/classes/uniform-buffer-layout.js +0 -130
  587. package/dist/es5/classes/uniform-buffer-layout.js.map +0 -1
  588. package/dist/es5/classes/uniforms.js +0 -232
  589. package/dist/es5/classes/uniforms.js.map +0 -1
  590. package/dist/es5/classes/vertex-array-object.js +0 -337
  591. package/dist/es5/classes/vertex-array-object.js.map +0 -1
  592. package/dist/es5/classes/vertex-array.js +0 -465
  593. package/dist/es5/classes/vertex-array.js.map +0 -1
  594. package/dist/es5/classes/webgl-buffer.js.map +0 -1
  595. package/dist/es5/classes/webgl-resource.js.map +0 -1
  596. package/dist/es5/context/context/create-context.js.map +0 -1
  597. package/dist/es5/context/context/get-canvas.js +0 -40
  598. package/dist/es5/context/context/get-canvas.js.map +0 -1
  599. package/dist/es5/context/context/resize-context.js +0 -23
  600. package/dist/es5/context/context/resize-context.js.map +0 -1
  601. package/dist/es5/context/parameters/webgl-parameters.js.map +0 -1
  602. package/dist/es5/debug/debug-program-configuration.js +0 -76
  603. package/dist/es5/debug/debug-program-configuration.js.map +0 -1
  604. package/dist/es5/debug/debug-uniforms.js +0 -156
  605. package/dist/es5/debug/debug-uniforms.js.map +0 -1
  606. package/dist/es5/debug/debug-vertex-array.js +0 -126
  607. package/dist/es5/debug/debug-vertex-array.js.map +0 -1
  608. package/dist/es5/helpers/get-program-bindings.js.map +0 -1
  609. package/dist/es5/helpers/program-bindings.js +0 -2
  610. package/dist/es5/types/accessor.d.ts +0 -29
  611. package/dist/es5/webgl-utils/attribute-utils.js +0 -186
  612. package/dist/es5/webgl-utils/attribute-utils.js.map +0 -1
  613. package/dist/es5/webgl-utils/constants-to-keys.js.map +0 -1
  614. package/dist/es5/webgl-utils/format-utils.js +0 -58
  615. package/dist/es5/webgl-utils/format-utils.js.map +0 -1
  616. package/dist/es5/webgl-utils/get-error.js +0 -49
  617. package/dist/es5/webgl-utils/get-error.js.map +0 -1
  618. package/dist/es5/webgl-utils/index.js +0 -74
  619. package/dist/es5/webgl-utils/index.js.map +0 -1
  620. package/dist/es5/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  621. package/dist/es5/webgl-utils/request-animation-frame.js +0 -16
  622. package/dist/es5/webgl-utils/request-animation-frame.js.map +0 -1
  623. package/dist/es5/webgl-utils/texture-utils.js +0 -61
  624. package/dist/es5/webgl-utils/texture-utils.js.map +0 -1
  625. package/dist/es5/webgl-utils/typed-array-utils.js.map +0 -1
  626. package/dist/esm/_deprecated/context-api.js +0 -70
  627. package/dist/esm/_deprecated/context-api.js.map +0 -1
  628. package/dist/esm/_deprecated/features.js +0 -111
  629. package/dist/esm/_deprecated/features.js.map +0 -1
  630. package/dist/esm/adapter/converters/set-device-parameters.js.map +0 -1
  631. package/dist/esm/adapter/converters/webgpu-texture-formats.js +0 -285
  632. package/dist/esm/adapter/converters/webgpu-texture-formats.js.map +0 -1
  633. package/dist/esm/adapter/webgl-shader.js.map +0 -1
  634. package/dist/esm/classes/accessor.d.ts +0 -28
  635. package/dist/esm/classes/accessor.js.map +0 -1
  636. package/dist/esm/classes/clear.js +0 -105
  637. package/dist/esm/classes/clear.js.map +0 -1
  638. package/dist/esm/classes/copy-and-blit.js +0 -338
  639. package/dist/esm/classes/copy-and-blit.js.map +0 -1
  640. package/dist/esm/classes/framebuffer.js +0 -656
  641. package/dist/esm/classes/framebuffer.js.map +0 -1
  642. package/dist/esm/classes/program-configuration.js +0 -73
  643. package/dist/esm/classes/program-configuration.js.map +0 -1
  644. package/dist/esm/classes/program.js +0 -379
  645. package/dist/esm/classes/program.js.map +0 -1
  646. package/dist/esm/classes/query.js +0 -145
  647. package/dist/esm/classes/query.js.map +0 -1
  648. package/dist/esm/classes/renderbuffer-formats.js.map +0 -1
  649. package/dist/esm/classes/renderbuffer.js.map +0 -1
  650. package/dist/esm/classes/shader.js +0 -118
  651. package/dist/esm/classes/shader.js.map +0 -1
  652. package/dist/esm/classes/texture-2d.js +0 -36
  653. package/dist/esm/classes/texture-2d.js.map +0 -1
  654. package/dist/esm/classes/texture-3d.js +0 -76
  655. package/dist/esm/classes/texture-3d.js.map +0 -1
  656. package/dist/esm/classes/texture-cube.js +0 -130
  657. package/dist/esm/classes/texture-cube.js.map +0 -1
  658. package/dist/esm/classes/texture-formats.js +0 -98
  659. package/dist/esm/classes/texture-formats.js.map +0 -1
  660. package/dist/esm/classes/texture.js.map +0 -1
  661. package/dist/esm/classes/transform-feedback.js +0 -198
  662. package/dist/esm/classes/transform-feedback.js.map +0 -1
  663. package/dist/esm/classes/uniform-buffer-layout.js +0 -104
  664. package/dist/esm/classes/uniform-buffer-layout.js.map +0 -1
  665. package/dist/esm/classes/uniforms.js +0 -250
  666. package/dist/esm/classes/uniforms.js.map +0 -1
  667. package/dist/esm/classes/vertex-array-object.js +0 -261
  668. package/dist/esm/classes/vertex-array-object.js.map +0 -1
  669. package/dist/esm/classes/vertex-array.js +0 -408
  670. package/dist/esm/classes/vertex-array.js.map +0 -1
  671. package/dist/esm/classes/webgl-buffer.js.map +0 -1
  672. package/dist/esm/classes/webgl-resource.js.map +0 -1
  673. package/dist/esm/context/context/create-context.js.map +0 -1
  674. package/dist/esm/context/context/get-canvas.js +0 -31
  675. package/dist/esm/context/context/get-canvas.js.map +0 -1
  676. package/dist/esm/context/context/resize-context.js +0 -15
  677. package/dist/esm/context/context/resize-context.js.map +0 -1
  678. package/dist/esm/context/parameters/webgl-parameters.js +0 -2
  679. package/dist/esm/context/parameters/webgl-parameters.js.map +0 -1
  680. package/dist/esm/debug/debug-program-configuration.js +0 -40
  681. package/dist/esm/debug/debug-program-configuration.js.map +0 -1
  682. package/dist/esm/debug/debug-uniforms.js +0 -108
  683. package/dist/esm/debug/debug-uniforms.js.map +0 -1
  684. package/dist/esm/debug/debug-vertex-array.js +0 -118
  685. package/dist/esm/debug/debug-vertex-array.js.map +0 -1
  686. package/dist/esm/helpers/get-program-bindings.js +0 -228
  687. package/dist/esm/helpers/get-program-bindings.js.map +0 -1
  688. package/dist/esm/helpers/program-bindings.js +0 -2
  689. package/dist/esm/types/accessor.d.ts +0 -29
  690. package/dist/esm/webgl-utils/attribute-utils.js +0 -182
  691. package/dist/esm/webgl-utils/attribute-utils.js.map +0 -1
  692. package/dist/esm/webgl-utils/constants-to-keys.js.map +0 -1
  693. package/dist/esm/webgl-utils/format-utils.js +0 -45
  694. package/dist/esm/webgl-utils/format-utils.js.map +0 -1
  695. package/dist/esm/webgl-utils/get-error.js +0 -41
  696. package/dist/esm/webgl-utils/get-error.js.map +0 -1
  697. package/dist/esm/webgl-utils/index.js +0 -5
  698. package/dist/esm/webgl-utils/index.js.map +0 -1
  699. package/dist/esm/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  700. package/dist/esm/webgl-utils/request-animation-frame.js +0 -7
  701. package/dist/esm/webgl-utils/request-animation-frame.js.map +0 -1
  702. package/dist/esm/webgl-utils/texture-utils.js +0 -48
  703. package/dist/esm/webgl-utils/texture-utils.js.map +0 -1
  704. package/dist/esm/webgl-utils/typed-array-utils.js.map +0 -1
  705. package/dist/helpers/get-program-bindings.d.ts +0 -8
  706. package/dist/helpers/get-program-bindings.d.ts.map +0 -1
  707. package/dist/helpers/get-program-bindings.js +0 -228
  708. package/dist/helpers/get-program-bindings.js.map +0 -1
  709. package/dist/helpers/program-bindings.d.ts +0 -41
  710. package/dist/helpers/program-bindings.d.ts.map +0 -1
  711. package/dist/helpers/program-bindings.js +0 -2
  712. package/dist/types/accessor.d.ts +0 -29
  713. package/dist/webgl-utils/attribute-utils.d.ts +0 -18
  714. package/dist/webgl-utils/attribute-utils.d.ts.map +0 -1
  715. package/dist/webgl-utils/attribute-utils.js +0 -182
  716. package/dist/webgl-utils/attribute-utils.js.map +0 -1
  717. package/dist/webgl-utils/constants-to-keys.d.ts +0 -4
  718. package/dist/webgl-utils/constants-to-keys.d.ts.map +0 -1
  719. package/dist/webgl-utils/constants-to-keys.js.map +0 -1
  720. package/dist/webgl-utils/format-utils.d.ts +0 -3
  721. package/dist/webgl-utils/format-utils.d.ts.map +0 -1
  722. package/dist/webgl-utils/format-utils.js +0 -45
  723. package/dist/webgl-utils/format-utils.js.map +0 -1
  724. package/dist/webgl-utils/get-error.d.ts +0 -3
  725. package/dist/webgl-utils/get-error.d.ts.map +0 -1
  726. package/dist/webgl-utils/get-error.js +0 -41
  727. package/dist/webgl-utils/get-error.js.map +0 -1
  728. package/dist/webgl-utils/index.d.ts +0 -5
  729. package/dist/webgl-utils/index.d.ts.map +0 -1
  730. package/dist/webgl-utils/index.js +0 -5
  731. package/dist/webgl-utils/index.js.map +0 -1
  732. package/dist/webgl-utils/parse-shader-compiler-log.d.ts.map +0 -1
  733. package/dist/webgl-utils/parse-shader-compiler-log.js.map +0 -1
  734. package/dist/webgl-utils/request-animation-frame.d.ts +0 -4
  735. package/dist/webgl-utils/request-animation-frame.d.ts.map +0 -1
  736. package/dist/webgl-utils/request-animation-frame.js +0 -7
  737. package/dist/webgl-utils/request-animation-frame.js.map +0 -1
  738. package/dist/webgl-utils/texture-utils.d.ts +0 -15
  739. package/dist/webgl-utils/texture-utils.d.ts.map +0 -1
  740. package/dist/webgl-utils/texture-utils.js +0 -48
  741. package/dist/webgl-utils/texture-utils.js.map +0 -1
  742. package/dist/webgl-utils/typed-array-utils.d.ts.map +0 -1
  743. package/dist/webgl-utils/typed-array-utils.js.map +0 -1
  744. package/src/.DS_Store +0 -0
  745. package/src/_deprecated/context-api.ts +0 -140
  746. package/src/_deprecated/features.ts +0 -159
  747. package/src/adapter/converters/webgpu-texture-formats.ts +0 -167
  748. package/src/classes/accessor.d.ts +0 -28
  749. package/src/classes/accessor.js +0 -129
  750. package/src/classes/accessor.ts.disabled +0 -159
  751. package/src/classes/clear.ts +0 -108
  752. package/src/classes/copy-and-blit.ts +0 -460
  753. package/src/classes/framebuffer.ts +0 -763
  754. package/src/classes/program-configuration.ts +0 -77
  755. package/src/classes/program.ts +0 -431
  756. package/src/classes/query.ts +0 -171
  757. package/src/classes/renderbuffer.ts +0 -154
  758. package/src/classes/shader.ts +0 -129
  759. package/src/classes/texture-2d.ts +0 -35
  760. package/src/classes/texture-3d.ts +0 -123
  761. package/src/classes/texture-cube.ts +0 -162
  762. package/src/classes/texture-formats.ts +0 -171
  763. package/src/classes/texture.ts +0 -965
  764. package/src/classes/transform-feedback.ts +0 -191
  765. package/src/classes/uniform-buffer-layout.ts +0 -113
  766. package/src/classes/uniforms.ts +0 -394
  767. package/src/classes/vertex-array-object.ts +0 -339
  768. package/src/classes/vertex-array.ts +0 -484
  769. package/src/context/context/get-canvas.ts +0 -37
  770. package/src/context/context/resize-context.ts +0 -37
  771. package/src/context/parameters/webgl-parameters.ts +0 -197
  772. package/src/debug/debug-program-configuration.ts +0 -32
  773. package/src/debug/debug-uniforms.ts +0 -100
  774. package/src/debug/debug-vertex-array.ts +0 -123
  775. package/src/helpers/get-program-bindings.ts +0 -244
  776. package/src/helpers/program-bindings.ts +0 -46
  777. package/src/types/accessor.d.ts +0 -29
  778. package/src/webgl-utils/attribute-utils.ts +0 -171
  779. package/src/webgl-utils/format-utils.ts +0 -43
  780. package/src/webgl-utils/get-error.ts +0 -56
  781. package/src/webgl-utils/index.ts +0 -12
  782. package/src/webgl-utils/request-animation-frame.ts +0 -14
  783. package/src/webgl-utils/texture-utils.ts +0 -60
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/classes/framebuffer.ts"],"names":["log","assert","GL","WebGLDevice","getWebGL2Context","assertWebGL2Context","getKey","Resource","Texture2D","Renderbuffer","clear","clearBuffer","copyToDataUrl","ERR_MULTIPLE_RENDERTARGETS","ImmutableFramebuffer","constructor","gl","props","attach","_initialize","attachments","readBuffer","drawBuffers","checkStatus","status","getStatus","FRAMEBUFFER_COMPLETE","Error","_getFrameBufferStatus","prevHandle","bindFramebuffer","FRAMEBUFFER","handle","checkFramebufferStatus","show","window","open","logLevel","message","level","id","image","targetMaxHeight","bind","target","unbind","options","_attach","_setReadBuffer","_setDrawBuffers","key","undefined","attachmentPoint","Number","attachment","_attachOne","_attachRenderbuffer","Array","isArray","texture","layer","_attachTexture","renderbuffer","framebufferRenderbuffer","RENDERBUFFER","bindTexture","TEXTURE_2D_ARRAY","TEXTURE_3D","gl2","framebufferTextureLayer","TEXTURE_CUBE_MAP","face","mapIndexToCubeMapFace","framebufferTexture2D","TEXTURE_2D","COLOR_ATTACHMENT0","BACK","ext","getExtension","drawBuffersWEBGL","length","_createHandle","createFramebuffer","_deleteHandle","deleteFramebuffer","_bindHandle","Framebuffer","isSupported","isFloatColorBufferSupported","getDefaultFramebuffer","webglDevice","fromContext","defaultFramebuffer","MAX_COLOR_ATTACHMENTS","getParameter","MAX_DRAW_BUFFERS","initialize","Object","seal","color","depth","DEPTH_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","stencil","STENCIL_ATTACHMENT","width","height","check","object","resize","_createDefaultAttachments","update","clearAttachments","delete","resource","ownResources","resizeAttachments","size","drawingBufferWidth","drawingBufferHeight","newAttachments","keys","forEach","assign","descriptor","_unattach","filter","value","drawBuffer","blit","opts","error","invalidate","x","y","READ_FRAMEBUFFER","invalidateAll","invalidateFramebuffer","getAttachmentParameter","pname","_getAttachmentParameterFallback","getFramebufferAttachmentParameter","getAttachmentParameters","parameters","ATTACHMENT_PARAMETERS","values","getParameters","attachmentName","defaultAttachments","pixels","format","RGBA","type","UNSIGNED_BYTE","mipmaps","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_MAG_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","push","DEPTH24_STENCIL8","DEPTH_COMPONENT16","oldAttachment","features","FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER","has","FRAMEBUFFER_ATTACHMENT_RED_SIZE","FRAMEBUFFER_ATTACHMENT_GREEN_SIZE","FRAMEBUFFER_ATTACHMENT_BLUE_SIZE","FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE","FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE","FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE","FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE","UNSIGNED_INT","FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING","FRAMEBUFFER_ATTACHMENT_OBJECT_NAME","FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE","TEXTURE_CUBE_MAP_POSITIVE_X","STATUS","colorBufferFloat","colorBufferHalfFloat","supported","Boolean"],"mappings":"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","sourcesContent":["import {log, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../adapter/webgl-device';\nimport {getWebGL2Context, assertWebGL2Context} from '../context/context/webgl-checks';\nimport {getKey} from '../webgl-utils/constants-to-keys';\nimport Resource, {ResourceProps} from './webgl-resource';\nimport Texture2D from './texture-2d';\nimport Renderbuffer from './renderbuffer';\nimport {clear, clearBuffer} from './clear';\nimport {copyToDataUrl} from './copy-and-blit';\n\nconst ERR_MULTIPLE_RENDERTARGETS = 'Multiple render targets not supported';\n\ntype TextureAttachment = {\n texture: Texture2D;\n layer?: number; // = 0\n level?: number; // = 0\n};\n\ntype Attachment = Renderbuffer | Texture2D | TextureAttachment;\n\nexport type ImmutableFramebufferProps = ResourceProps & {\n attachments?: Record<string, Attachment>;\n readBuffer?: number;\n drawBuffers?: number[];\n check?: boolean;\n};\n\nexport type FramebufferProps = ImmutableFramebufferProps & {\n width?: number;\n height?: number;\n color?: boolean;\n depth?: boolean;\n stencil?: boolean;\n};\n\ntype colorBufferFloatOptions = {colorBufferFloat?: boolean; colorBufferHalfFloat?: boolean};\n\nexport class ImmutableFramebuffer extends Resource<FramebufferProps> {\n constructor(gl: WebGLRenderingContext, props?: FramebufferProps) {\n super(WebGLDevice.attach(gl), props, {} as any);\n this._initialize({\n attachments: props?.attachments || {},\n readBuffer: props?.readBuffer,\n drawBuffers: props?.drawBuffers\n });\n }\n\n checkStatus(): this {\n const {gl} = this;\n const status = this.getStatus();\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(_getFrameBufferStatus(status));\n }\n return this;\n }\n\n getStatus(): number {\n const {gl} = this;\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);\n // @ts-expect-error\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n return status;\n }\n\n // DEBUG\n\n // Note: Will only work when called in an event handler\n show() {\n if (typeof window !== 'undefined') {\n window.open(copyToDataUrl(this), 'luma-debug-texture');\n }\n return this;\n }\n\n log(logLevel = 0, message = '') {\n if (logLevel > log.level || typeof window === 'undefined') {\n return this;\n }\n message = message || `Framebuffer ${this.id}`;\n const image = copyToDataUrl(this, {targetMaxHeight: 100});\n // @ts-expect-error probe.gl typings incorrectly require priority...\n log.image({logLevel, message, image})();\n return this;\n }\n\n // WEBGL INTERFACE\n bind({target = GL.FRAMEBUFFER} = {}) {\n this.gl.bindFramebuffer(target, this.handle);\n return this;\n }\n\n unbind({target = GL.FRAMEBUFFER} = {}) {\n this.gl.bindFramebuffer(target, null);\n return this;\n }\n\n // PRIVATE\n\n _initialize(options: {attachments: Record<string, Attachment>; readBuffer?: number; drawBuffers?: number[]}): this {\n const {attachments = {}, readBuffer, drawBuffers} = options;\n\n this._attach(attachments);\n\n // Multiple render target support, set read buffer and draw buffers\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n if (readBuffer) {\n this._setReadBuffer(readBuffer);\n }\n if (drawBuffers) {\n this._setDrawBuffers(drawBuffers);\n }\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n return this;\n }\n\n /** Attach from a map of attachments */\n _attach(attachments: Record<string, Attachment>) {\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (const key in attachments) {\n // Ensure key is not undefined\n assert(key !== undefined, 'Misspelled framebuffer binding point?');\n const attachmentPoint = Number(key) as GL;\n const attachment = attachments[attachmentPoint];\n this._attachOne(attachmentPoint, attachment);\n }\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n }\n\n /** Attach one attachment */\n _attachOne(attachmentPoint: GL, attachment: Attachment): Renderbuffer | Texture2D {\n if (attachment instanceof Renderbuffer) {\n this._attachRenderbuffer(attachmentPoint, attachment);\n return attachment;\n } else if (Array.isArray(attachment)) {\n const [texture, layer = 0, level = 0] = attachment;\n this._attachTexture(attachmentPoint, texture, layer, level);\n return texture;\n } else if (attachment instanceof Texture2D) {\n this._attachTexture(attachmentPoint, attachment, 0, 0);\n return attachment;\n }\n }\n\n _attachRenderbuffer(attachment: GL, renderbuffer: Renderbuffer): void {\n this.gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, renderbuffer.handle);\n }\n\n /**\n * @param attachment \n * @param texture \n * @param layer = 0 - index into Texture2DArray and Texture3D or face for `TextureCubeMap`\n * @param level = 0 - mipmapLevel (must be 0 in WebGL1)\n */\n _attachTexture(attachment: GL, texture: Texture2D, layer: number, level: number): void {\n const {gl} = this;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n const gl2 = assertWebGL2Context(gl);\n gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);\n break;\n\n case GL.TEXTURE_CUBE_MAP:\n // layer must be a cubemap face (or if index, converted to cube map face)\n const face = mapIndexToCubeMapFace(layer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);\n break;\n\n case GL.TEXTURE_2D:\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);\n break;\n\n default:\n assert(false, 'Illegal texture type');\n }\n\n gl.bindTexture(texture.target, null);\n }\n\n /** @note Expects framebuffer to be bound */\n _setReadBuffer(readBuffer: number): void {\n const gl2 = getWebGL2Context(this.gl);\n if (gl2) {\n gl2.readBuffer(readBuffer);\n } else {\n // Setting to color attachment 0 is a noop, so allow it in WebGL1\n assert(\n readBuffer === GL.COLOR_ATTACHMENT0 || readBuffer === GL.BACK,\n ERR_MULTIPLE_RENDERTARGETS\n );\n }\n }\n\n /** @note Expects framebuffer to be bound */\n _setDrawBuffers(drawBuffers: number[]) {\n const {gl} = this;\n const gl2 = assertWebGL2Context(gl);\n if (gl2) {\n gl2.drawBuffers(drawBuffers);\n } else {\n // TODO - is this not handled by polyfills?\n const ext = gl.getExtension('WEBGL_draw_buffers');\n if (ext) {\n ext.drawBuffersWEBGL(drawBuffers);\n } else {\n // Setting a single draw buffer to color attachment 0 is a noop, allow in WebGL1\n assert(\n drawBuffers.length === 1 &&\n (drawBuffers[0] === GL.COLOR_ATTACHMENT0 || drawBuffers[0] === GL.BACK),\n ERR_MULTIPLE_RENDERTARGETS\n );\n }\n }\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createFramebuffer();\n }\n\n _deleteHandle() {\n this.gl.deleteFramebuffer(this.handle);\n }\n\n _bindHandle(handle) {\n return this.gl.bindFramebuffer(GL.FRAMEBUFFER, handle);\n }\n}\n\nexport default class Framebuffer extends ImmutableFramebuffer {\n width = null;\n height = null;\n attachments = {};\n readBuffer = GL.COLOR_ATTACHMENT0;\n drawBuffers = [GL.COLOR_ATTACHMENT0];\n ownResources = [];\n\n static readonly FRAMEBUFFER_ATTACHMENT_PARAMETERS = [\n GL.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, // WebGLRenderbuffer or WebGLTexture\n GL.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, // GL.RENDERBUFFER, GL.TEXTURE, GL.NONE\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, // GL.TEXTURE_CUBE_MAP_POSITIVE_X, etc.\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, // GLint\n // EXT_sRGB or WebGL2\n GL.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, // GL.LINEAR, GL.SRBG\n // WebGL2\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_RED_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE // GLint\n // GL.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\n // GL.FLOAT, GL.INT, GL.UNSIGNED_INT, GL.SIGNED_NORMALIZED, OR GL.UNSIGNED_NORMALIZED.\n ];\n\n /**\n * Check color buffer float support\n * @param options.colorBufferFloat Whether floating point textures can be rendered and read\n * @param options.colorBufferHalfFloat Whether half float textures can be rendered and read\n */\n static isSupported(gl: WebGLRenderingContext, options: colorBufferFloatOptions): boolean {\n return isFloatColorBufferSupported(gl, options);\n }\n\n /**\n * returns the default Framebuffer\n * Creates a Framebuffer object wrapper for the default WebGL framebuffer (target === null)\n */\n static getDefaultFramebuffer(gl: WebGLRenderingContext): Framebuffer {\n const webglDevice = WebGLDevice.fromContext(gl);\n webglDevice.defaultFramebuffer =\n webglDevice.defaultFramebuffer ||\n new Framebuffer(gl, {\n id: 'default-framebuffer',\n handle: null,\n attachments: {}\n });\n // TODO - can we query for and get a handle to the GL.FRONT renderbuffer?\n return webglDevice.defaultFramebuffer;\n }\n\n get MAX_COLOR_ATTACHMENTS(): number {\n const gl2 = assertWebGL2Context(this.gl);\n return gl2.getParameter(gl2.MAX_COLOR_ATTACHMENTS);\n }\n\n get MAX_DRAW_BUFFERS(): number {\n const gl2 = assertWebGL2Context(this.gl);\n return gl2.getParameter(gl2.MAX_DRAW_BUFFERS);\n }\n\n constructor(gl: WebGLRenderingContext, props?: FramebufferProps) {\n super(gl, props);\n this.initialize(props);\n Object.seal(this);\n }\n\n get color() {\n return this.attachments[GL.COLOR_ATTACHMENT0] || null;\n }\n\n get texture() {\n return this.attachments[GL.COLOR_ATTACHMENT0] || null;\n }\n\n get depth() {\n return (\n this.attachments[GL.DEPTH_ATTACHMENT] || this.attachments[GL.DEPTH_STENCIL_ATTACHMENT] || null\n );\n }\n\n get stencil() {\n return (\n this.attachments[GL.STENCIL_ATTACHMENT] ||\n this.attachments[GL.DEPTH_STENCIL_ATTACHMENT] ||\n null\n );\n }\n\n // initialize(props?: FramebufferProps): this;\n initialize(props: FramebufferProps) {\n let {attachments = null} = props || {};\n const {\n width = 1,\n height = 1,\n color = true,\n depth = true,\n stencil = false,\n check = true,\n readBuffer = undefined,\n drawBuffers = undefined\n } = props || {};\n assert(width >= 0 && height >= 0, 'Width and height need to be integers');\n\n // Store actual width and height for diffing\n this.width = width;\n this.height = height;\n\n // Resize any provided attachments - note that resize only resizes if needed\n // Note: A framebuffer has no separate size, it is defined by its attachments (which must agree)\n if (attachments) {\n for (const attachment in attachments) {\n const target = attachments[attachment];\n const object = Array.isArray(target) ? target[0] : target;\n object.resize({width, height});\n }\n } else {\n // Create any requested default attachments\n attachments = this._createDefaultAttachments(color, depth, stencil, width, height);\n }\n\n this.update({clearAttachments: true, attachments, readBuffer, drawBuffers});\n\n // Checks that framebuffer was properly set up, if not, throws an explanatory error\n if (attachments && check) {\n this.checkStatus();\n }\n }\n\n delete(): this {\n for (const resource of this.ownResources) {\n resource.delete();\n }\n super.delete();\n return this;\n }\n\n update(options: {\n attachments: Record<string, Attachment>,\n readBuffer?: number,\n drawBuffers?,\n clearAttachments?: boolean,\n resizeAttachments?: boolean\n }): this {\n\n const {\n attachments = {},\n readBuffer,\n drawBuffers,\n clearAttachments = false,\n resizeAttachments = true\n } = options;\n\n this.attach(attachments, {clearAttachments, resizeAttachments});\n\n const {gl} = this;\n // Multiple render target support, set read buffer and draw buffers\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n if (readBuffer) {\n this._setReadBuffer(readBuffer);\n this.readBuffer = readBuffer;\n }\n if (drawBuffers) {\n this._setDrawBuffers(drawBuffers);\n this.drawBuffers = drawBuffers;\n }\n // @ts-expect-error\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n return this;\n }\n\n /** Attachment resize is expected to be a noop if size is same */\n resize(size?: {width?: number; height?: number}): this {\n let {width, height} = size || {};\n // for default framebuffer, just update the stored size\n if (this.handle === null) {\n assert(width === undefined && height === undefined);\n this.width = this.gl.drawingBufferWidth;\n this.height = this.gl.drawingBufferHeight;\n return this;\n }\n\n if (width === undefined) {\n width = this.gl.drawingBufferWidth;\n }\n if (height === undefined) {\n height = this.gl.drawingBufferHeight;\n }\n\n if (width !== this.width && height !== this.height) {\n log.log(2, `Resizing framebuffer ${this.id} to ${width}x${height}`)();\n }\n for (const attachmentPoint in this.attachments) {\n this.attachments[attachmentPoint].resize({width, height});\n }\n this.width = width;\n this.height = height;\n return this;\n }\n\n /** Attach from a map of attachments */\n attach(attachments, {clearAttachments = false, resizeAttachments = true} = {}) {\n const newAttachments = {};\n\n // Any current attachments need to be removed, add null values to map\n if (clearAttachments) {\n Object.keys(this.attachments).forEach((key) => {\n newAttachments[key] = null;\n });\n }\n\n // Overlay the new attachments\n Object.assign(newAttachments, attachments);\n\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (const key in newAttachments) {\n // Ensure key is not undefined\n assert(key !== undefined, 'Misspelled framebuffer binding point?');\n\n const attachment = Number(key);\n\n const descriptor = newAttachments[attachment];\n let object = descriptor;\n if (!object) {\n this._unattach(attachment);\n } else {\n object = this._attachOne(attachment, object);\n this.attachments[attachment] = object;\n }\n\n // Resize objects\n if (resizeAttachments && object) {\n object.resize({width: this.width, height: this.height});\n }\n }\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n // Assign to attachments and remove any nulls to get a clean attachment map\n Object.assign(this.attachments, attachments);\n Object.keys(this.attachments)\n .filter((key) => !this.attachments[key])\n .forEach((key) => {\n delete this.attachments[key];\n });\n }\n\n clear(options?: {color?: any; depth?: any; stencil?: any; drawBuffers?: any[]}): this {\n const {color, depth, stencil, drawBuffers = []} = options;\n\n // Bind framebuffer and delegate to global clear functions\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n if (color || depth || stencil) {\n clear(this.gl, {color, depth, stencil});\n }\n\n drawBuffers.forEach((value, drawBuffer) => {\n clearBuffer(this.gl, {drawBuffer, value});\n });\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n return this;\n }\n\n // WEBGL2 INTERFACE\n\n // Copies a rectangle of pixels between framebuffers\n // eslint-disable-next-line complexity\n blit(opts = {}) {\n log.error('Framebuffer.blit({...}) is no logner supported, use blit(source, target, opts)')();\n return null;\n }\n\n // signals to the GL that it need not preserve all pixels of a specified region of the framebuffer\n invalidate(options: {attachments: []; x?: number; y?: number; width: number; height: number}) {\n const {attachments = [], x = 0, y = 0, width, height} = options;\n const gl2 = assertWebGL2Context(this.gl);\n const prevHandle = gl2.bindFramebuffer(GL.READ_FRAMEBUFFER, this.handle);\n const invalidateAll = x === 0 && y === 0 && width === undefined && height === undefined;\n if (invalidateAll) {\n gl2.invalidateFramebuffer(GL.READ_FRAMEBUFFER, attachments);\n } else {\n // TODO - why does type checking fail on this line\n // @ts-expect-error\n gl2.invalidateFramebuffer(GL.READ_FRAMEBUFFER, attachments, x, y, width, height);\n }\n // @ts-expect-error\n gl2.bindFramebuffer(GL.READ_FRAMEBUFFER, prevHandle);\n return this;\n }\n\n // Return the value for `pname` of the specified attachment.\n // The type returned is the type of the requested pname\n getAttachmentParameter(attachment, pname, keys) {\n let value = this._getAttachmentParameterFallback(pname);\n if (value === null) {\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n value = this.gl.getFramebufferAttachmentParameter(GL.FRAMEBUFFER, attachment, pname);\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);\n }\n if (keys && value > 1000) {\n // @ts-expect-error\n value = getKey(this.gl, value);\n }\n return value;\n }\n\n getAttachmentParameters(\n attachment = GL.COLOR_ATTACHMENT0,\n keys,\n // @ts-expect-error\n parameters = this.constructor.ATTACHMENT_PARAMETERS || []\n ) {\n const values = {};\n for (const pname of parameters) {\n const key = keys ? getKey(this.gl, pname) : pname;\n values[key] = this.getAttachmentParameter(attachment, pname, keys);\n }\n return values;\n }\n\n // @ts-expect-error\n getParameters(keys = true) {\n const attachments = Object.keys(this.attachments);\n // if (this === this.gl.luma.defaultFramebuffer) {\n // attachments = [GL.COLOR_ATTACHMENT0, GL.DEPTH_STENCIL_ATTACHMENT];\n // }\n const parameters = {};\n for (const attachmentName of attachments) {\n const attachment = Number(attachmentName);\n const key = keys ? getKey(this.gl, attachment) : attachment;\n parameters[key] = this.getAttachmentParameters(attachment, keys);\n }\n return parameters;\n }\n\n // PRIVATE METHODS\n\n _createDefaultAttachments(color, depth, stencil, width, height) {\n let defaultAttachments = null;\n\n // Add a color buffer if requested and not supplied\n if (color) {\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.COLOR_ATTACHMENT0] = new Texture2D(this.gl, {\n id: `${this.id}-color0`,\n pixels: null, // reserves texture memory, but texels are undefined\n format: GL.RGBA,\n type: GL.UNSIGNED_BYTE,\n width,\n height,\n // Note: Mipmapping can be disabled by texture resource when we resize the texture\n // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant\n // behavior we always disable mipmaps.\n mipmaps: false,\n // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.\n // Use LINEAR so subpixel algos like fxaa work.\n // Set WRAP modes that support NPOT textures too.\n parameters: {\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n }\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.COLOR_ATTACHMENT0]);\n }\n\n if (depth && stencil) {\n // TODO - handle separate stencil\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.DEPTH_STENCIL_ATTACHMENT] = new Renderbuffer(this.gl, {\n id: `${this.id}-depth-stencil`,\n format: GL.DEPTH24_STENCIL8,\n width,\n height: 111\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.DEPTH_STENCIL_ATTACHMENT]);\n // TODO - optional texture\n // new Texture2D(this.gl, {\n // id: `${this.id}-depth-stencil`,\n // format: GL.DEPTH24_STENCIL8,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n // width,\n // height,\n // mipmaps: false\n // });\n } else if (depth) {\n // Add a depth buffer if requested and not supplied\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.DEPTH_ATTACHMENT] = new Renderbuffer(this.gl, {\n id: `${this.id}-depth`,\n format: GL.DEPTH_COMPONENT16,\n width,\n height\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.DEPTH_ATTACHMENT]);\n } else if (stencil) {\n // TODO - handle separate stencil\n assert(false);\n }\n\n return defaultAttachments;\n }\n\n _unattach(attachment) {\n const oldAttachment = this.attachments[attachment];\n if (!oldAttachment) {\n return;\n }\n if (oldAttachment instanceof Renderbuffer) {\n // render buffer\n this.gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, null);\n } else {\n // Must be a texture attachment\n this.gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, null, 0);\n }\n delete this.attachments[attachment];\n }\n\n /**\n * Attempt to provide workable defaults for WebGL2 symbols under WebGL1\n * null means OK to query\n * TODO - move to webgl1 polyfills\n * @param pname \n * @returns \n */\n // eslint-disable-next-line complexity\n _getAttachmentParameterFallback(pname) {\n const webglDevice = WebGLDevice.fromContext(this.gl);\n const features = webglDevice.features;\n\n switch (pname) {\n case GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: // GLint\n return !features.has('webgl2') ? 0 : null;\n case GL.FRAMEBUFFER_ATTACHMENT_RED_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: // GLint\n return !features.has('webgl2') ? 8 : null;\n case GL.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: // GLenum\n return !features.has('webgl2') ? GL.UNSIGNED_INT : null;\n case GL.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:\n return !features.has('webgl2') && !features.has('webgl-color-encoding-srgb') ? GL.LINEAR : null;\n default:\n return null;\n }\n }\n}\n\n// PUBLIC METHODS\n\n// Map an index to a cube map face constant\nfunction mapIndexToCubeMapFace(layer) {\n // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)\n // if smaller assume layer is index, otherwise assume it is already a cube map face constant\n return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;\n}\n\n// Helper METHODS\n// Get a string describing the framebuffer error if installed\nfunction _getFrameBufferStatus(status) {\n // Use error mapping if installed\n // @ts-expect-error\n const STATUS = Framebuffer.STATUS || {};\n return STATUS[status] || `Framebuffer error ${status}`;\n}\n\n/**\n * Support\n * @param gl\n * @param options.colorBufferFloat Whether floating point textures can be rendered and read\n * @param options.colorBufferHalfFloat Whether half float textures can be rendered and read\n */\nfunction isFloatColorBufferSupported(\n gl: WebGLRenderingContext,\n options: {colorBufferFloat?: boolean; colorBufferHalfFloat?: boolean}\n): boolean {\n const {\n colorBufferFloat, // Whether floating point textures can be rendered and read\n colorBufferHalfFloat // Whether half float textures can be rendered and read\n } = options;\n let supported = true;\n\n if (colorBufferFloat) {\n supported = Boolean(\n // WebGL 2\n gl.getExtension('EXT_color_buffer_float') ||\n // WebGL 1, not exposed on all platforms\n gl.getExtension('WEBGL_color_buffer_float') ||\n // WebGL 1, implicitly enables float render targets https://www.khronos.org/registry/webgl/extensions/OES_texture_float/\n gl.getExtension('OES_texture_float')\n );\n }\n\n if (colorBufferHalfFloat) {\n supported =\n supported &&\n Boolean(\n // WebGL 2\n gl.getExtension('EXT_color_buffer_float') ||\n // WebGL 1\n gl.getExtension('EXT_color_buffer_half_float')\n );\n }\n\n return supported;\n}\n"],"file":"framebuffer.js"}
@@ -1,73 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { getProgramBindings } from '../helpers/get-program-bindings';
3
- export default class ProgramConfiguration {
4
- constructor(program) {
5
- _defineProperty(this, "id", void 0);
6
-
7
- _defineProperty(this, "attributeInfos", []);
8
-
9
- _defineProperty(this, "attributeInfosByName", {});
10
-
11
- _defineProperty(this, "attributeInfosByLocation", []);
12
-
13
- _defineProperty(this, "varyingInfos", []);
14
-
15
- _defineProperty(this, "varyingInfosByName", {});
16
-
17
- this.id = program.id;
18
- Object.seal(this);
19
- const bindings = getProgramBindings(program.gl2, program.handle);
20
- this.attributeInfos = bindings.attributes;
21
-
22
- for (const attributeInfo of bindings.attributes) {
23
- this.attributeInfosByName[attributeInfo.name] = attributeInfo;
24
- this.attributeInfosByLocation[attributeInfo.location] = attributeInfo;
25
- }
26
-
27
- for (const varyingInfo of bindings.varyings) {
28
- this.varyingInfosByName[varyingInfo.name] = varyingInfo;
29
- }
30
- }
31
-
32
- getAttributeInfo(locationOrName) {
33
- const location = Number(locationOrName);
34
-
35
- if (Number.isFinite(location)) {
36
- return this.attributeInfosByLocation[location];
37
- }
38
-
39
- return this.attributeInfosByName[locationOrName] || null;
40
- }
41
-
42
- getAttributeLocation(locationOrName) {
43
- const attributeInfo = this.getAttributeInfo(locationOrName);
44
- return attributeInfo ? attributeInfo.location : -1;
45
- }
46
-
47
- getAttributeAccessor(locationOrName) {
48
- const attributeInfo = this.getAttributeInfo(locationOrName);
49
- return attributeInfo ? attributeInfo.accessor : null;
50
- }
51
-
52
- getVaryingInfo(locationOrName) {
53
- const location = Number(locationOrName);
54
-
55
- if (Number.isFinite(location)) {
56
- return this.varyingInfos[location];
57
- }
58
-
59
- return this.varyingInfosByName[locationOrName] || null;
60
- }
61
-
62
- getVaryingIndex(locationOrName) {
63
- const varying = this.getVaryingInfo(locationOrName);
64
- return varying ? varying.location : -1;
65
- }
66
-
67
- getVaryingAccessor(locationOrName) {
68
- const varying = this.getVaryingInfo(locationOrName);
69
- return varying ? varying.accessor : null;
70
- }
71
-
72
- }
73
- //# sourceMappingURL=program-configuration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/classes/program-configuration.ts"],"names":["getProgramBindings","ProgramConfiguration","constructor","program","id","Object","seal","bindings","gl2","handle","attributeInfos","attributes","attributeInfo","attributeInfosByName","name","attributeInfosByLocation","location","varyingInfo","varyings","varyingInfosByName","getAttributeInfo","locationOrName","Number","isFinite","getAttributeLocation","getAttributeAccessor","accessor","getVaryingInfo","varyingInfos","getVaryingIndex","varying","getVaryingAccessor"],"mappings":";AAKA,SAAQA,kBAAR,QAAiC,iCAAjC;AAQC,eAAe,MAAMC,oBAAN,CAA2B;AAUzCC,EAAAA,WAAW,CAACC,OAAD,EAAmB;AAAA;;AAAA,4CARO,EAQP;;AAAA,kDAP2B,EAO3B;;AAAA,sDAJiB,EAIjB;;AAAA,0CAHG,EAGH;;AAAA,gDAFuB,EAEvB;;AAC5B,SAAKC,EAAL,GAAUD,OAAO,CAACC,EAAlB;AACAC,IAAAA,MAAM,CAACC,IAAP,CAAY,IAAZ;AAEA,UAAMC,QAAQ,GAAGP,kBAAkB,CAACG,OAAO,CAACK,GAAT,EAAcL,OAAO,CAACM,MAAtB,CAAnC;AAEA,SAAKC,cAAL,GAAsBH,QAAQ,CAACI,UAA/B;;AACA,SAAK,MAAMC,aAAX,IAA4BL,QAAQ,CAACI,UAArC,EAAiD;AAC/C,WAAKE,oBAAL,CAA0BD,aAAa,CAACE,IAAxC,IAAgDF,aAAhD;AACA,WAAKG,wBAAL,CAA8BH,aAAa,CAACI,QAA5C,IAAwDJ,aAAxD;AACD;;AAED,SAAK,MAAMK,WAAX,IAA0BV,QAAQ,CAACW,QAAnC,EAA6C;AAC3C,WAAKC,kBAAL,CAAwBF,WAAW,CAACH,IAApC,IAA4CG,WAA5C;AACD;AACF;;AAEDG,EAAAA,gBAAgB,CAACC,cAAD,EAAoD;AAClE,UAAML,QAAQ,GAAGM,MAAM,CAACD,cAAD,CAAvB;;AACA,QAAIC,MAAM,CAACC,QAAP,CAAgBP,QAAhB,CAAJ,EAA+B;AAC7B,aAAO,KAAKD,wBAAL,CAA8BC,QAA9B,CAAP;AACD;;AACD,WAAO,KAAKH,oBAAL,CAA0BQ,cAA1B,KAA6C,IAApD;AACD;;AAGDG,EAAAA,oBAAoB,CAACH,cAAD,EAA0C;AAC5D,UAAMT,aAAa,GAAG,KAAKQ,gBAAL,CAAsBC,cAAtB,CAAtB;AACA,WAAOT,aAAa,GAAGA,aAAa,CAACI,QAAjB,GAA4B,CAAC,CAAjD;AACD;;AAEDS,EAAAA,oBAAoB,CAACJ,cAAD,EAAkC;AACpD,UAAMT,aAAa,GAAG,KAAKQ,gBAAL,CAAsBC,cAAtB,CAAtB;AACA,WAAOT,aAAa,GAAGA,aAAa,CAACc,QAAjB,GAA4B,IAAhD;AACD;;AAEDC,EAAAA,cAAc,CAACN,cAAD,EAAkD;AAC9D,UAAML,QAAQ,GAAGM,MAAM,CAACD,cAAD,CAAvB;;AACA,QAAIC,MAAM,CAACC,QAAP,CAAgBP,QAAhB,CAAJ,EAA+B;AAC7B,aAAO,KAAKY,YAAL,CAAkBZ,QAAlB,CAAP;AACD;;AACD,WAAO,KAAKG,kBAAL,CAAwBE,cAAxB,KAA2C,IAAlD;AACD;;AAEDQ,EAAAA,eAAe,CAACR,cAAD,EAA0C;AACvD,UAAMS,OAAO,GAAG,KAAKH,cAAL,CAAoBN,cAApB,CAAhB;AACA,WAAOS,OAAO,GAAGA,OAAO,CAACd,QAAX,GAAsB,CAAC,CAArC;AACD;;AAEDe,EAAAA,kBAAkB,CAACV,cAAD,EAAkC;AAClD,UAAMS,OAAO,GAAG,KAAKH,cAAL,CAAoBN,cAApB,CAAhB;AACA,WAAOS,OAAO,GAAGA,OAAO,CAACJ,QAAX,GAAsB,IAApC;AACD;;AA9DwC","sourcesContent":["// Contains metadata describing attribute configurations for a program's shaders\n// Much of this is automatically extracted from shaders after program linking\n// import Accessor from './accessor';\nimport type Program from './program';\nimport type {AttributeBinding, VaryingBinding} from '../helpers/program-bindings';\nimport {getProgramBindings} from '../helpers/get-program-bindings';\n\n/**\n * is a mechanism for taking a program object and querying information\n * about it, so as to be able to interface and interact with it.\n * For example, if there is a uniform, you may need to query its\n * location so that you can set its value.\n */\n export default class ProgramConfiguration {\n id: string;\n attributeInfos: AttributeBinding[] = [];\n attributeInfosByName: Record<string, AttributeBinding> = {};\n // Locations may not be contiguous the case of matrix attributes\n // so keep a separate location->attribute map.\n attributeInfosByLocation: AttributeBinding[] = [];\n varyingInfos: VaryingBinding[] = [];\n varyingInfosByName: Record<string, VaryingBinding> = {};\n\n constructor(program: Program) {\n this.id = program.id;\n Object.seal(this);\n\n const bindings = getProgramBindings(program.gl2, program.handle);\n\n this.attributeInfos = bindings.attributes;\n for (const attributeInfo of bindings.attributes) {\n this.attributeInfosByName[attributeInfo.name] = attributeInfo;\n this.attributeInfosByLocation[attributeInfo.location] = attributeInfo;\n }\n\n for (const varyingInfo of bindings.varyings) {\n this.varyingInfosByName[varyingInfo.name] = varyingInfo;\n }\n }\n\n getAttributeInfo(locationOrName: number | string): AttributeBinding {\n const location = Number(locationOrName);\n if (Number.isFinite(location)) {\n return this.attributeInfosByLocation[location];\n }\n return this.attributeInfosByName[locationOrName] || null;\n }\n\n // Resolves an attribute name or index to an index\n getAttributeLocation(locationOrName: number | string): number {\n const attributeInfo = this.getAttributeInfo(locationOrName);\n return attributeInfo ? attributeInfo.location : -1;\n }\n\n getAttributeAccessor(locationOrName: number | string) {\n const attributeInfo = this.getAttributeInfo(locationOrName);\n return attributeInfo ? attributeInfo.accessor : null;\n }\n\n getVaryingInfo(locationOrName: number | string): VaryingBinding {\n const location = Number(locationOrName);\n if (Number.isFinite(location)) {\n return this.varyingInfos[location];\n }\n return this.varyingInfosByName[locationOrName] || null;\n }\n\n getVaryingIndex(locationOrName: number | string): number {\n const varying = this.getVaryingInfo(locationOrName);\n return varying ? varying.location : -1;\n }\n\n getVaryingAccessor(locationOrName: number | string) {\n const varying = this.getVaryingInfo(locationOrName);\n return varying ? varying.accessor : null;\n }\n}\n"],"file":"program-configuration.js"}
@@ -1,379 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { log, assert, uid, cast } from '@luma.gl/api';
3
- import GL from '@luma.gl/constants';
4
- import WebGLDevice from '../adapter/webgl-device';
5
- import WebGLResource from './webgl-resource';
6
- import Texture from './texture';
7
- import Framebuffer from './framebuffer';
8
- import { parseUniformName, getUniformSetter } from './uniforms';
9
- import ProgramConfiguration from './program-configuration';
10
- import { copyUniform, checkUniformValues } from './uniforms';
11
- import { isWebGL2, assertWebGL2Context } from '../context/context/webgl-checks';
12
- import { withParameters } from '../context/state-tracker/with-parameters';
13
- import { getKey } from '../webgl-utils/constants-to-keys';
14
- import { getPrimitiveDrawMode } from '../webgl-utils/attribute-utils';
15
- const LOG_PROGRAM_PERF_PRIORITY = 4;
16
- const GL_SEPARATE_ATTRIBS = 0x8c8d;
17
- export default class Program extends WebGLResource {
18
- constructor(device, props = {}) {
19
- super(WebGLDevice.attach(device), props, {});
20
-
21
- _defineProperty(this, "configuration", void 0);
22
-
23
- _defineProperty(this, "hash", void 0);
24
-
25
- _defineProperty(this, "vs", void 0);
26
-
27
- _defineProperty(this, "fs", void 0);
28
-
29
- _defineProperty(this, "uniforms", void 0);
30
-
31
- _defineProperty(this, "varyings", void 0);
32
-
33
- _defineProperty(this, "_textureUniforms", void 0);
34
-
35
- _defineProperty(this, "_isCached", false);
36
-
37
- _defineProperty(this, "_textureIndexCounter", 0);
38
-
39
- _defineProperty(this, "_uniformCount", 0);
40
-
41
- _defineProperty(this, "_uniformSetters", void 0);
42
-
43
- this.initialize(props);
44
- Object.seal(this);
45
-
46
- this._setId(props.id);
47
- }
48
-
49
- destroy(options = {}) {
50
- if (this._isCached) {
51
- return this;
52
- }
53
-
54
- return super.delete(options);
55
- }
56
-
57
- delete(options = {}) {
58
- if (this._isCached) {
59
- return this;
60
- }
61
-
62
- return super.delete(options);
63
- }
64
-
65
- initialize(props = {}) {
66
- const {
67
- hash,
68
- vs,
69
- fs,
70
- varyings,
71
- bufferMode = GL_SEPARATE_ATTRIBS
72
- } = props;
73
- this.hash = hash || '';
74
- this.vs = typeof vs === 'string' ? this.device.createShader({
75
- id: "".concat(props.id, "-vs"),
76
- source: vs,
77
- stage: 'vertex'
78
- }) : cast(vs);
79
- this.fs = typeof fs === 'string' ? this.device.createShader({
80
- id: "".concat(props.id, "-fs"),
81
- source: fs,
82
- stage: 'fragment'
83
- }) : cast(fs);
84
- assert(this.vs.stage === 'vertex');
85
- assert(this.fs.stage === 'fragment');
86
- this.uniforms = {};
87
- this._textureUniforms = {};
88
-
89
- if (varyings && varyings.length > 0) {
90
- assertWebGL2Context(this.gl);
91
- this.varyings = varyings;
92
- this.gl2.transformFeedbackVaryings(this.handle, varyings, bufferMode);
93
- }
94
-
95
- this._compileAndLink();
96
-
97
- this._readUniformLocationsFromLinkedProgram();
98
-
99
- this.configuration = new ProgramConfiguration(this);
100
- return this.setProps(props);
101
- }
102
-
103
- setProps(props) {
104
- if ('uniforms' in props) {
105
- this.setUniforms(props.uniforms);
106
- }
107
-
108
- return this;
109
- }
110
-
111
- draw(options) {
112
- const {
113
- logPriority,
114
- drawMode = GL.TRIANGLES,
115
- vertexCount,
116
- offset = 0,
117
- start,
118
- end,
119
- isIndexed = false,
120
- indexType = GL.UNSIGNED_SHORT,
121
- instanceCount = 0,
122
- isInstanced = instanceCount > 0,
123
- vertexArray = null,
124
- transformFeedback,
125
- framebuffer,
126
- uniforms,
127
- samplers
128
- } = options;
129
- let {
130
- parameters = {}
131
- } = options;
132
-
133
- if (uniforms || samplers) {
134
- log.deprecated('Program.draw({uniforms})', 'Program.setUniforms(uniforms)')();
135
- this.setUniforms(uniforms || {});
136
- }
137
-
138
- if (log.priority >= logPriority) {
139
- const fb = framebuffer ? framebuffer.id : 'default';
140
- const message = "mode=".concat(getKey(this.gl, drawMode), " verts=").concat(vertexCount, " ") + "instances=".concat(instanceCount, " indexType=").concat(getKey(this.gl, indexType), " ") + "isInstanced=".concat(isInstanced, " isIndexed=").concat(isIndexed, " ") + "Framebuffer=".concat(fb);
141
- log.log(logPriority, message)();
142
- }
143
-
144
- assert(vertexArray);
145
- this.gl.useProgram(this.handle);
146
-
147
- if (!this._areTexturesRenderable() || vertexCount === 0 || isInstanced && instanceCount === 0) {
148
- return false;
149
- }
150
-
151
- vertexArray.bindForDraw(vertexCount, instanceCount, () => {
152
- if (framebuffer !== undefined) {
153
- parameters = Object.assign({}, parameters, {
154
- framebuffer
155
- });
156
- }
157
-
158
- if (transformFeedback) {
159
- const primitiveMode = getPrimitiveDrawMode(drawMode);
160
- transformFeedback.begin(primitiveMode);
161
- }
162
-
163
- this._bindTextures();
164
-
165
- withParameters(this.gl, parameters, () => {
166
- if (isIndexed && isInstanced) {
167
- this.gl2.drawElementsInstanced(drawMode, vertexCount, indexType, offset, instanceCount);
168
- } else if (isIndexed && isWebGL2(this.gl) && !isNaN(start) && !isNaN(end)) {
169
- this.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
170
- } else if (isIndexed) {
171
- this.gl.drawElements(drawMode, vertexCount, indexType, offset);
172
- } else if (isInstanced) {
173
- this.gl2.drawArraysInstanced(drawMode, offset, vertexCount, instanceCount);
174
- } else {
175
- this.gl.drawArrays(drawMode, offset, vertexCount);
176
- }
177
- });
178
-
179
- if (transformFeedback) {
180
- transformFeedback.end();
181
- }
182
- });
183
- return true;
184
- }
185
-
186
- setUniforms(uniforms = {}) {
187
- if (log.priority >= 2) {
188
- checkUniformValues(uniforms, this.id, this._uniformSetters);
189
- }
190
-
191
- this.gl.useProgram(this.handle);
192
-
193
- for (const uniformName in uniforms) {
194
- const uniform = uniforms[uniformName];
195
- const uniformSetter = this._uniformSetters[uniformName];
196
-
197
- if (uniformSetter) {
198
- let value = uniform;
199
- let textureUpdate = false;
200
-
201
- if (value instanceof Framebuffer) {
202
- value = value.texture;
203
- }
204
-
205
- if (value instanceof Texture) {
206
- textureUpdate = this.uniforms[uniformName] !== uniform;
207
-
208
- if (textureUpdate) {
209
- if (uniformSetter.textureIndex === undefined) {
210
- uniformSetter.textureIndex = this._textureIndexCounter++;
211
- }
212
-
213
- const texture = value;
214
- const {
215
- textureIndex
216
- } = uniformSetter;
217
- texture.bind(textureIndex);
218
- value = textureIndex;
219
- this._textureUniforms[uniformName] = texture;
220
- } else {
221
- value = uniformSetter.textureIndex;
222
- }
223
- } else if (this._textureUniforms[uniformName]) {
224
- delete this._textureUniforms[uniformName];
225
- }
226
-
227
- if (uniformSetter(value) || textureUpdate) {
228
- copyUniform(this.uniforms, uniformName, uniform);
229
- }
230
- }
231
- }
232
-
233
- return this;
234
- }
235
-
236
- _areTexturesRenderable() {
237
- let texturesRenderable = true;
238
-
239
- for (const uniformName in this._textureUniforms) {
240
- const texture = this._textureUniforms[uniformName];
241
- texture.update();
242
- texturesRenderable = texturesRenderable && texture.loaded;
243
- }
244
-
245
- return texturesRenderable;
246
- }
247
-
248
- _bindTextures() {
249
- for (const uniformName in this._textureUniforms) {
250
- const textureIndex = this._uniformSetters[uniformName].textureIndex;
251
-
252
- this._textureUniforms[uniformName].bind(textureIndex);
253
- }
254
- }
255
-
256
- _createHandle() {
257
- return this.gl.createProgram();
258
- }
259
-
260
- _deleteHandle() {
261
- this.gl.deleteProgram(this.handle);
262
- }
263
-
264
- _getOptionsFromHandle(handle) {
265
- const shaderHandles = this.gl.getAttachedShaders(handle);
266
- const opts = {};
267
-
268
- for (const shaderHandle of shaderHandles) {
269
- const type = this.gl.getShaderParameter(this.handle, GL.SHADER_TYPE);
270
-
271
- switch (type) {
272
- case GL.VERTEX_SHADER:
273
- opts.vs = new VertexShader({
274
- handle: shaderHandle
275
- });
276
- break;
277
-
278
- case GL.FRAGMENT_SHADER:
279
- opts.fs = new FragmentShader({
280
- handle: shaderHandle
281
- });
282
- break;
283
-
284
- default:
285
- }
286
- }
287
-
288
- return opts;
289
- }
290
-
291
- _getParameter(pname) {
292
- return this.gl.getProgramParameter(this.handle, pname);
293
- }
294
-
295
- _setId(id) {
296
- if (!id) {
297
- const programName = this._getName();
298
-
299
- this.id = uid(programName);
300
- }
301
- }
302
-
303
- _getName() {
304
- let programName = this.vs.id || this.fs.id;
305
- programName = programName.replace(/shader/i, '');
306
- programName = programName ? "".concat(programName, "-program") : 'program';
307
- return programName;
308
- }
309
-
310
- _compileAndLink() {
311
- const {
312
- gl
313
- } = this;
314
- gl.attachShader(this.handle, this.vs.handle);
315
- gl.attachShader(this.handle, this.fs.handle);
316
- log.time(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this._getName()))();
317
- gl.linkProgram(this.handle);
318
- log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this._getName()))();
319
-
320
- if (gl.debug || log.level > 0) {
321
- const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
322
-
323
- if (!linked) {
324
- throw new Error("Error linking: ".concat(gl.getProgramInfoLog(this.handle)));
325
- }
326
-
327
- gl.validateProgram(this.handle);
328
- const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
329
-
330
- if (!validated) {
331
- throw new Error("Error validating: ".concat(gl.getProgramInfoLog(this.handle)));
332
- }
333
- }
334
- }
335
-
336
- _readUniformLocationsFromLinkedProgram() {
337
- const {
338
- gl
339
- } = this;
340
- this._uniformSetters = {};
341
- this._uniformCount = this._getParameter(GL.ACTIVE_UNIFORMS);
342
-
343
- for (let i = 0; i < this._uniformCount; i++) {
344
- const info = this.gl.getActiveUniform(this.handle, i);
345
- const {
346
- name
347
- } = parseUniformName(info.name);
348
- let location = gl.getUniformLocation(this.handle, name);
349
- this._uniformSetters[name] = getUniformSetter(gl, location, info);
350
-
351
- if (info.size > 1) {
352
- for (let l = 0; l < info.size; l++) {
353
- location = gl.getUniformLocation(this.handle, "".concat(name, "[").concat(l, "]"));
354
- this._uniformSetters["".concat(name, "[").concat(l, "]")] = getUniformSetter(gl, location, info);
355
- }
356
- }
357
- }
358
-
359
- this._textureIndexCounter = 0;
360
- }
361
-
362
- getActiveUniforms(uniformIndices, pname) {
363
- return this.gl2.getActiveUniforms(this.handle, uniformIndices, pname);
364
- }
365
-
366
- getUniformBlockIndex(blockName) {
367
- return this.gl2.getUniformBlockIndex(this.handle, blockName);
368
- }
369
-
370
- getActiveUniformBlockParameter(blockIndex, pname) {
371
- return this.gl2.getActiveUniformBlockParameter(this.handle, blockIndex, pname);
372
- }
373
-
374
- uniformBlockBinding(blockIndex, blockBinding) {
375
- this.gl2.uniformBlockBinding(this.handle, blockIndex, blockBinding);
376
- }
377
-
378
- }
379
- //# sourceMappingURL=program.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/classes/program.ts"],"names":["log","assert","uid","cast","GL","WebGLDevice","WebGLResource","Texture","Framebuffer","parseUniformName","getUniformSetter","ProgramConfiguration","copyUniform","checkUniformValues","isWebGL2","assertWebGL2Context","withParameters","getKey","getPrimitiveDrawMode","LOG_PROGRAM_PERF_PRIORITY","GL_SEPARATE_ATTRIBS","Program","constructor","device","props","attach","initialize","Object","seal","_setId","id","destroy","options","_isCached","delete","hash","vs","fs","varyings","bufferMode","createShader","source","stage","uniforms","_textureUniforms","length","gl","gl2","transformFeedbackVaryings","handle","_compileAndLink","_readUniformLocationsFromLinkedProgram","configuration","setProps","setUniforms","draw","logPriority","drawMode","TRIANGLES","vertexCount","offset","start","end","isIndexed","indexType","UNSIGNED_SHORT","instanceCount","isInstanced","vertexArray","transformFeedback","framebuffer","samplers","parameters","deprecated","priority","fb","message","useProgram","_areTexturesRenderable","bindForDraw","undefined","assign","primitiveMode","begin","_bindTextures","drawElementsInstanced","isNaN","drawRangeElements","drawElements","drawArraysInstanced","drawArrays","_uniformSetters","uniformName","uniform","uniformSetter","value","textureUpdate","texture","textureIndex","_textureIndexCounter","bind","texturesRenderable","update","loaded","_createHandle","createProgram","_deleteHandle","deleteProgram","_getOptionsFromHandle","shaderHandles","getAttachedShaders","opts","shaderHandle","type","getShaderParameter","SHADER_TYPE","VERTEX_SHADER","VertexShader","FRAGMENT_SHADER","FragmentShader","_getParameter","pname","getProgramParameter","programName","_getName","replace","attachShader","time","linkProgram","timeEnd","debug","level","linked","LINK_STATUS","Error","getProgramInfoLog","validateProgram","validated","VALIDATE_STATUS","_uniformCount","ACTIVE_UNIFORMS","i","info","getActiveUniform","name","location","getUniformLocation","size","l","getActiveUniforms","uniformIndices","getUniformBlockIndex","blockName","getActiveUniformBlockParameter","blockIndex","uniformBlockBinding","blockBinding"],"mappings":"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","sourcesContent":["import {log, assert, uid, cast, Shader} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../adapter/webgl-device';\nimport WebGLResource, {ResourceProps} from './webgl-resource';\nimport Texture from './texture';\nimport Framebuffer from './framebuffer';\nimport {parseUniformName, getUniformSetter} from './uniforms';\nimport {WEBGLShader} from '../adapter/webgl-shader';\nimport ProgramConfiguration from './program-configuration';\nimport {copyUniform, checkUniformValues} from './uniforms';\n\nimport {isWebGL2, assertWebGL2Context} from '../context/context/webgl-checks';\nimport {withParameters} from '../context/state-tracker/with-parameters';\nimport {getKey} from '../webgl-utils/constants-to-keys';\nimport {getPrimitiveDrawMode} from '../webgl-utils/attribute-utils';\n\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n\nconst GL_SEPARATE_ATTRIBS = 0x8c8d;\n\nexport type ProgramProps = ResourceProps & {\n hash?: string;\n vs?: string | Shader;\n fs?: string | Shader;\n varyings?: string[];\n bufferMode?: number;\n};\n\nexport type ProgramDrawOptions = {\n logPriority?: number;\n drawMode?: number;\n vertexCount: any;\n offset?: number;\n start?: number;\n end?: number;\n isIndexed?: boolean;\n indexType?: any;\n instanceCount?: number;\n isInstanced?: boolean;\n vertexArray?: any;\n transformFeedback?: any; // TransformFeedback;\n framebuffer?: Framebuffer;\n parameters?: {};\n uniforms?: Record<string, any>;\n samplers?: any;\n};\n\nexport default class Program extends WebGLResource<ProgramProps> {\n configuration: ProgramConfiguration;\n // Experimental flag to avoid deleting Program object while it is cached\n hash: string; // Used by ProgramManager\n vs: WEBGLShader;\n fs: WEBGLShader;\n uniforms: Record<string, any>;\n varyings: Record<string, any>;\n _textureUniforms: Record<string, any>;\n _isCached: boolean = false;\n _textureIndexCounter: number = 0;\n _uniformCount: number = 0;\n _uniformSetters: Record<string, Function>;\n\n constructor(device: WebGLDevice | WebGLRenderingContext, props: ProgramProps = {}) {\n super(WebGLDevice.attach(device), props, {} as any);\n this.initialize(props);\n Object.seal(this);\n this._setId(props.id);\n }\n\n destroy(options = {}) {\n if (this._isCached) {\n // This object is cached, do not delete\n return this;\n }\n return super.delete(options);\n }\n\n delete(options = {}) {\n if (this._isCached) {\n // This object is cached, do not delete\n return this;\n }\n return super.delete(options);\n }\n\n initialize(props: ProgramProps = {}) {\n const {hash, vs, fs, varyings, bufferMode = GL_SEPARATE_ATTRIBS} = props;\n\n this.hash = hash || ''; // Used by ProgramManager\n\n // Create shaders if needed\n this.vs =\n typeof vs === 'string'\n ? this.device.createShader({id: `${props.id}-vs`, source: vs, stage: 'vertex'})\n : cast<WEBGLShader>(vs);\n this.fs =\n typeof fs === 'string'\n ? this.device.createShader({id: `${props.id}-fs`, source: fs, stage: 'fragment'})\n : cast<WEBGLShader>(fs);\n assert(this.vs.stage === 'vertex');\n assert(this.fs.stage === 'fragment');\n\n // uniforms\n this.uniforms = {};\n this._textureUniforms = {};\n\n // Setup varyings if supplied\n if (varyings && varyings.length > 0) {\n assertWebGL2Context(this.gl);\n this.varyings = varyings;\n this.gl2.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n\n this._compileAndLink();\n this._readUniformLocationsFromLinkedProgram();\n this.configuration = new ProgramConfiguration(this);\n\n return this.setProps(props);\n }\n\n setProps(props) {\n if ('uniforms' in props) {\n this.setUniforms(props.uniforms);\n }\n return this;\n }\n\n // A good thing about the WebGL API is that there are so many ways to draw things ;)\n // This function unifies those ways into a single call using common parameters with sane defaults\n draw(options: ProgramDrawOptions): boolean {\n const {\n logPriority, // Probe log priority, enables Model to do more integrated logging\n\n drawMode = GL.TRIANGLES,\n vertexCount,\n offset = 0,\n start,\n end,\n isIndexed = false,\n indexType = GL.UNSIGNED_SHORT,\n instanceCount = 0,\n isInstanced = instanceCount > 0,\n\n vertexArray = null,\n transformFeedback,\n framebuffer,\n\n // Deprecated\n uniforms,\n samplers\n } = options;\n\n let {parameters = {}} = options;\n\n if (uniforms || samplers) {\n // DEPRECATED: v7.0 (deprecated earlier but warning not properly implemented)\n log.deprecated('Program.draw({uniforms})', 'Program.setUniforms(uniforms)')();\n this.setUniforms(uniforms || {});\n }\n\n if (log.priority >= logPriority) {\n const fb = framebuffer ? framebuffer.id : 'default';\n const message =\n `mode=${getKey(this.gl, drawMode)} verts=${vertexCount} ` +\n `instances=${instanceCount} indexType=${getKey(this.gl, indexType)} ` +\n `isInstanced=${isInstanced} isIndexed=${isIndexed} ` +\n `Framebuffer=${fb}`;\n log.log(logPriority, message)();\n }\n\n // TODO - move vertex array binding and transform feedback binding to withParameters?\n assert(vertexArray);\n\n this.gl.useProgram(this.handle);\n\n if (\n // Note: async textures set as uniforms might still be loading.\n // Now that all uniforms have been updated, check if any texture\n // in the uniforms is not yet initialized, then we don't draw\n !this._areTexturesRenderable() ||\n // Avoid WebGL draw call when not rendering any data\n vertexCount === 0 ||\n (isInstanced && instanceCount === 0)\n ) {\n return false;\n }\n\n vertexArray.bindForDraw(vertexCount, instanceCount, () => {\n if (framebuffer !== undefined) {\n parameters = Object.assign({}, parameters, {framebuffer});\n }\n\n if (transformFeedback) {\n const primitiveMode = getPrimitiveDrawMode(drawMode);\n transformFeedback.begin(primitiveMode);\n }\n\n this._bindTextures();\n\n withParameters(this.gl, parameters, () => {\n // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension\n if (isIndexed && isInstanced) {\n this.gl2.drawElementsInstanced(drawMode, vertexCount, indexType, offset, instanceCount);\n } else if (isIndexed && isWebGL2(this.gl) && !isNaN(start) && !isNaN(end)) {\n this.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);\n } else if (isIndexed) {\n this.gl.drawElements(drawMode, vertexCount, indexType, offset);\n } else if (isInstanced) {\n this.gl2.drawArraysInstanced(drawMode, offset, vertexCount, instanceCount);\n } else {\n this.gl.drawArrays(drawMode, offset, vertexCount);\n }\n });\n\n if (transformFeedback) {\n transformFeedback.end();\n }\n });\n\n return true;\n }\n\n setUniforms(uniforms = {}) {\n if (log.priority >= 2) {\n checkUniformValues(uniforms, this.id, this._uniformSetters);\n }\n\n this.gl.useProgram(this.handle);\n\n for (const uniformName in uniforms) {\n const uniform = uniforms[uniformName];\n const uniformSetter = this._uniformSetters[uniformName];\n\n if (uniformSetter) {\n let value = uniform;\n let textureUpdate = false;\n\n if (value instanceof Framebuffer) {\n value = value.texture;\n }\n if (value instanceof Texture) {\n textureUpdate = this.uniforms[uniformName] !== uniform;\n\n if (textureUpdate) {\n // eslint-disable-next-line max-depth\n // @ts-expect-error\n if (uniformSetter.textureIndex === undefined) {\n // @ts-expect-error\n uniformSetter.textureIndex = this._textureIndexCounter++;\n }\n\n // Bind texture to index\n const texture = value;\n // @ts-expect-error\n const {textureIndex} = uniformSetter;\n\n texture.bind(textureIndex);\n value = textureIndex;\n\n this._textureUniforms[uniformName] = texture;\n } else {\n // @ts-expect-error\n value = uniformSetter.textureIndex;\n }\n } else if (this._textureUniforms[uniformName]) {\n delete this._textureUniforms[uniformName];\n }\n\n // NOTE(Tarek): uniformSetter returns whether\n // value had to be updated or not.\n if (uniformSetter(value) || textureUpdate) {\n copyUniform(this.uniforms, uniformName, uniform);\n }\n }\n }\n\n return this;\n }\n\n // PRIVATE METHODS\n\n // Checks if all texture-values uniforms are renderable (i.e. loaded)\n // Update a texture if needed (e.g. from video)\n // Note: This is currently done before every draw call\n _areTexturesRenderable() {\n let texturesRenderable = true;\n\n for (const uniformName in this._textureUniforms) {\n const texture = this._textureUniforms[uniformName];\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n\n return texturesRenderable;\n }\n\n // Binds textures\n // Note: This is currently done before every draw call\n _bindTextures() {\n for (const uniformName in this._textureUniforms) {\n // @ts-expect-error\n const textureIndex = this._uniformSetters[uniformName].textureIndex;\n this._textureUniforms[uniformName].bind(textureIndex);\n }\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createProgram();\n }\n\n _deleteHandle() {\n this.gl.deleteProgram(this.handle);\n }\n\n // Extract opts needed to initialize a `Program` from an independently created WebGLProgram handle\n _getOptionsFromHandle(handle) {\n const shaderHandles = this.gl.getAttachedShaders(handle);\n const opts = {};\n for (const shaderHandle of shaderHandles) {\n const type = this.gl.getShaderParameter(this.handle, GL.SHADER_TYPE);\n switch (type) {\n case GL.VERTEX_SHADER:\n // @ts-expect-error\n opts.vs = new VertexShader({handle: shaderHandle});\n break;\n case GL.FRAGMENT_SHADER:\n // @ts-expect-error\n opts.fs = new FragmentShader({handle: shaderHandle});\n break;\n default:\n }\n }\n return opts;\n }\n\n _getParameter(pname) {\n return this.gl.getProgramParameter(this.handle, pname);\n }\n\n // If program is not named, name it after shader names\n // TODO - this.id will already have been initialized\n _setId(id) {\n if (!id) {\n const programName = this._getName();\n this.id = uid(programName);\n }\n }\n\n // Generate a default name for the program based on names of the shaders\n _getName() {\n // let programName = this.vs.getName() || this.fs.getName();\n let programName = this.vs.id || this.fs.id;\n programName = programName.replace(/shader/i, '');\n programName = programName ? `${programName}-program` : 'program';\n return programName;\n }\n\n _compileAndLink() {\n const {gl} = this;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this._getName()}`)();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this._getName()}`)();\n\n // Avoid checking program linking error in production\n // @ts-expect-error\n if (gl.debug || log.level > 0) {\n const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);\n if (!linked) {\n throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);\n }\n\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);\n if (!validated) {\n throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);\n }\n }\n }\n\n // query uniform locations and build name to setter map.\n // TODO - This overlaps with ProgramConfiguration?\n _readUniformLocationsFromLinkedProgram() {\n const {gl} = this;\n this._uniformSetters = {};\n this._uniformCount = this._getParameter(GL.ACTIVE_UNIFORMS);\n for (let i = 0; i < this._uniformCount; i++) {\n const info = this.gl.getActiveUniform(this.handle, i);\n const {name} = parseUniformName(info.name);\n let location = gl.getUniformLocation(this.handle, name);\n // @ts-expect-error\n this._uniformSetters[name] = getUniformSetter(gl, location, info);\n if (info.size > 1) {\n for (let l = 0; l < info.size; l++) {\n location = gl.getUniformLocation(this.handle, `${name}[${l}]`);\n // @ts-expect-error\n this._uniformSetters[`${name}[${l}]`] = getUniformSetter(gl, location, info);\n }\n }\n }\n this._textureIndexCounter = 0;\n }\n\n // TO BE REMOVED in v7?\n\n // Rretrieves information about active uniforms identifed by their indices (`uniformIndices`)\n // https://\n // developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/getActiveUniforms\n getActiveUniforms(uniformIndices, pname) {\n return this.gl2.getActiveUniforms(this.handle, uniformIndices, pname);\n }\n\n // Retrieves the index of a uniform block\n getUniformBlockIndex(blockName) {\n return this.gl2.getUniformBlockIndex(this.handle, blockName);\n }\n\n // Retrieves information about an active uniform block (`blockIndex`)\n // https://\n // developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/getActiveUniformBlockParameter\n getActiveUniformBlockParameter(blockIndex, pname) {\n return this.gl2.getActiveUniformBlockParameter(this.handle, blockIndex, pname);\n }\n\n // Binds a uniform block (`blockIndex`) to a specific binding point (`blockBinding`)\n uniformBlockBinding(blockIndex, blockBinding) {\n this.gl2.uniformBlockBinding(this.handle, blockIndex, blockBinding);\n }\n}\n"],"file":"program.js"}