@luma.gl/webgl 8.5.10 → 8.6.0-alpha.1

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 (633) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +5 -0
  4. package/dist/bundle.js.map +1 -0
  5. package/dist/classes/accessor.d.ts +28 -0
  6. package/dist/classes/accessor.d.ts.map +1 -0
  7. package/dist/classes/accessor.js +112 -0
  8. package/dist/classes/accessor.js.map +1 -0
  9. package/dist/classes/accessor.ts.disabled +159 -0
  10. package/dist/classes/clear.d.ts +16 -0
  11. package/dist/classes/clear.d.ts.map +1 -0
  12. package/dist/classes/clear.js +102 -0
  13. package/dist/classes/clear.js.map +1 -0
  14. package/dist/classes/copy-and-blit.d.ts +69 -0
  15. package/dist/classes/copy-and-blit.d.ts.map +1 -0
  16. package/dist/classes/copy-and-blit.js +333 -0
  17. package/dist/classes/copy-and-blit.js.map +1 -0
  18. package/dist/classes/framebuffer.d.ts +130 -0
  19. package/dist/classes/framebuffer.d.ts.map +1 -0
  20. package/dist/classes/framebuffer.js +656 -0
  21. package/dist/classes/framebuffer.js.map +1 -0
  22. package/dist/classes/program-configuration.d.ts +27 -0
  23. package/dist/classes/program-configuration.d.ts.map +1 -0
  24. package/dist/classes/program-configuration.js +160 -0
  25. package/dist/classes/program-configuration.js.map +1 -0
  26. package/dist/classes/program.d.ts +61 -0
  27. package/dist/classes/program.d.ts.map +1 -0
  28. package/dist/classes/program.js +368 -0
  29. package/dist/classes/program.js.map +1 -0
  30. package/dist/classes/query.d.ts +27 -0
  31. package/dist/classes/query.d.ts.map +1 -0
  32. package/dist/classes/query.js +144 -0
  33. package/dist/classes/query.js.map +1 -0
  34. package/dist/classes/renderbuffer-formats.d.ts +16 -0
  35. package/dist/classes/renderbuffer-formats.d.ts.map +1 -0
  36. package/dist/classes/renderbuffer-formats.js +185 -0
  37. package/dist/classes/renderbuffer-formats.js.map +1 -0
  38. package/dist/classes/renderbuffer.d.ts +60 -0
  39. package/dist/classes/renderbuffer.d.ts.map +1 -0
  40. package/dist/classes/renderbuffer.js +127 -0
  41. package/dist/classes/renderbuffer.js.map +1 -0
  42. package/dist/classes/texture-2d.d.ts +8 -0
  43. package/dist/classes/texture-2d.d.ts.map +1 -0
  44. package/dist/classes/texture-2d.js +39 -0
  45. package/dist/classes/texture-2d.js.map +1 -0
  46. package/dist/classes/texture-3d.d.ts +28 -0
  47. package/dist/classes/texture-3d.d.ts.map +1 -0
  48. package/dist/classes/texture-3d.js +67 -0
  49. package/dist/classes/texture-3d.js.map +1 -0
  50. package/dist/classes/texture-cube.d.ts +27 -0
  51. package/dist/classes/texture-cube.d.ts.map +1 -0
  52. package/dist/classes/texture-cube.js +131 -0
  53. package/dist/classes/texture-cube.js.map +1 -0
  54. package/dist/classes/texture-formats.d.ts +37 -0
  55. package/dist/classes/texture-formats.d.ts.map +1 -0
  56. package/dist/classes/texture-formats.js +98 -0
  57. package/dist/classes/texture-formats.js.map +1 -0
  58. package/dist/classes/texture.d.ts +118 -0
  59. package/dist/classes/texture.d.ts.map +1 -0
  60. package/dist/classes/texture.js +785 -0
  61. package/dist/classes/texture.js.map +1 -0
  62. package/dist/classes/transform-feedback.d.ts +33 -0
  63. package/dist/classes/transform-feedback.d.ts.map +1 -0
  64. package/dist/classes/transform-feedback.js +197 -0
  65. package/dist/classes/transform-feedback.js.map +1 -0
  66. package/dist/classes/uniform-buffer-layout.d.ts +17 -0
  67. package/dist/classes/uniform-buffer-layout.d.ts.map +1 -0
  68. package/dist/classes/uniform-buffer-layout.js +104 -0
  69. package/dist/classes/uniform-buffer-layout.js.map +1 -0
  70. package/dist/classes/uniforms.d.ts +38 -0
  71. package/dist/classes/uniforms.d.ts.map +1 -0
  72. package/dist/classes/uniforms.js +251 -0
  73. package/dist/classes/uniforms.js.map +1 -0
  74. package/dist/classes/vertex-array-object.d.ts +75 -0
  75. package/dist/classes/vertex-array-object.d.ts.map +1 -0
  76. package/dist/classes/vertex-array-object.js +262 -0
  77. package/dist/classes/vertex-array-object.js.map +1 -0
  78. package/dist/classes/vertex-array.d.ts +75 -0
  79. package/dist/classes/vertex-array.d.ts.map +1 -0
  80. package/dist/classes/vertex-array.js +409 -0
  81. package/dist/classes/vertex-array.js.map +1 -0
  82. package/dist/classes/webgl-buffer.d.ts +98 -0
  83. package/dist/classes/webgl-buffer.d.ts.map +1 -0
  84. package/dist/{esm/classes/buffer.js → classes/webgl-buffer.js} +97 -73
  85. package/dist/classes/webgl-buffer.js.map +1 -0
  86. package/dist/classes/webgl-resource.d.ts +54 -0
  87. package/dist/classes/webgl-resource.d.ts.map +1 -0
  88. package/dist/{esm/classes/resource.js → classes/webgl-resource.js} +31 -52
  89. package/dist/classes/webgl-resource.js.map +1 -0
  90. package/dist/classes/webgl-shader.d.ts +51 -0
  91. package/dist/classes/webgl-shader.d.ts.map +1 -0
  92. package/dist/classes/webgl-shader.js +190 -0
  93. package/dist/classes/webgl-shader.js.map +1 -0
  94. package/dist/context/gl-context.d.ts +15 -0
  95. package/dist/context/gl-context.d.ts.map +1 -0
  96. package/dist/context/gl-context.js +32 -0
  97. package/dist/context/gl-context.js.map +1 -0
  98. package/dist/context/luma-context-data.d.ts +31 -0
  99. package/dist/context/luma-context-data.d.ts.map +1 -0
  100. package/dist/context/luma-context-data.js +5 -0
  101. package/dist/context/luma-context-data.js.map +1 -0
  102. package/dist/debug/debug-program-configuration.d.ts +2 -0
  103. package/dist/debug/debug-program-configuration.d.ts.map +1 -0
  104. package/dist/debug/debug-program-configuration.js +40 -0
  105. package/dist/debug/debug-program-configuration.js.map +1 -0
  106. package/dist/debug/debug-uniforms.d.ts +12 -0
  107. package/dist/debug/debug-uniforms.d.ts.map +1 -0
  108. package/dist/debug/debug-uniforms.js +108 -0
  109. package/dist/debug/debug-uniforms.js.map +1 -0
  110. package/dist/debug/debug-vertex-array.d.ts +5 -0
  111. package/dist/debug/debug-vertex-array.d.ts.map +1 -0
  112. package/dist/debug/debug-vertex-array.js +118 -0
  113. package/dist/debug/debug-vertex-array.js.map +1 -0
  114. package/dist/es5/bundle.js +3 -5
  115. package/dist/es5/bundle.js.map +1 -1
  116. package/dist/es5/classes/accessor.js +76 -108
  117. package/dist/es5/classes/accessor.js.map +1 -1
  118. package/dist/es5/classes/accessor.ts.disabled +159 -0
  119. package/dist/es5/classes/clear.js +33 -48
  120. package/dist/es5/classes/clear.js.map +1 -1
  121. package/dist/es5/classes/copy-and-blit.js +177 -192
  122. package/dist/es5/classes/copy-and-blit.js.map +1 -1
  123. package/dist/es5/classes/framebuffer.js +538 -655
  124. package/dist/es5/classes/framebuffer.js.map +1 -1
  125. package/dist/es5/classes/program-configuration.js +127 -141
  126. package/dist/es5/classes/program-configuration.js.map +1 -1
  127. package/dist/es5/classes/program.js +294 -358
  128. package/dist/es5/classes/program.js.map +1 -1
  129. package/dist/es5/classes/query.js +115 -181
  130. package/dist/es5/classes/query.js.map +1 -1
  131. package/dist/es5/classes/renderbuffer-formats.js +186 -121
  132. package/dist/es5/classes/renderbuffer-formats.js.map +1 -1
  133. package/dist/es5/classes/renderbuffer.js +104 -128
  134. package/dist/es5/classes/renderbuffer.js.map +1 -1
  135. package/dist/es5/classes/texture-2d.js +16 -39
  136. package/dist/es5/classes/texture-2d.js.map +1 -1
  137. package/dist/es5/classes/texture-3d.js +50 -89
  138. package/dist/es5/classes/texture-3d.js.map +1 -1
  139. package/dist/es5/classes/texture-cube.js +112 -162
  140. package/dist/es5/classes/texture-cube.js.map +1 -1
  141. package/dist/es5/classes/texture-formats.js +73 -42
  142. package/dist/es5/classes/texture-formats.js.map +1 -1
  143. package/dist/es5/classes/texture.js +670 -673
  144. package/dist/es5/classes/texture.js.map +1 -1
  145. package/dist/es5/classes/transform-feedback.js +150 -203
  146. package/dist/es5/classes/transform-feedback.js.map +1 -1
  147. package/dist/es5/classes/uniform-buffer-layout.js +89 -103
  148. package/dist/es5/classes/uniform-buffer-layout.js.map +1 -1
  149. package/dist/es5/classes/uniforms.js +134 -93
  150. package/dist/es5/classes/uniforms.js.map +1 -1
  151. package/dist/es5/classes/vertex-array-object.js +204 -306
  152. package/dist/es5/classes/vertex-array-object.js.map +1 -1
  153. package/dist/es5/classes/vertex-array.js +317 -353
  154. package/dist/es5/classes/vertex-array.js.map +1 -1
  155. package/dist/es5/classes/webgl-buffer.js +391 -0
  156. package/dist/es5/classes/webgl-buffer.js.map +1 -0
  157. package/dist/es5/classes/webgl-resource.js +217 -0
  158. package/dist/es5/classes/webgl-resource.js.map +1 -0
  159. package/dist/es5/classes/webgl-shader.js +213 -0
  160. package/dist/es5/classes/webgl-shader.js.map +1 -0
  161. package/dist/es5/context/gl-context.js +46 -0
  162. package/dist/es5/context/gl-context.js.map +1 -0
  163. package/dist/es5/context/luma-context-data.js +12 -0
  164. package/dist/es5/context/luma-context-data.js.map +1 -0
  165. package/dist/es5/debug/debug-program-configuration.js +20 -48
  166. package/dist/es5/debug/debug-program-configuration.js.map +1 -1
  167. package/dist/es5/debug/debug-uniforms.js +72 -114
  168. package/dist/es5/debug/debug-uniforms.js.map +1 -1
  169. package/dist/es5/debug/debug-vertex-array.js +56 -51
  170. package/dist/es5/debug/debug-vertex-array.js.map +1 -1
  171. package/dist/es5/features/check-glsl-extension.js +9 -10
  172. package/dist/es5/features/check-glsl-extension.js.map +1 -1
  173. package/dist/es5/features/check-old-ie.js +5 -6
  174. package/dist/es5/features/check-old-ie.js.map +1 -1
  175. package/dist/es5/features/features.js +23 -37
  176. package/dist/es5/features/features.js.map +1 -1
  177. package/dist/es5/features/index.js +8 -8
  178. package/dist/es5/features/index.js.map +1 -1
  179. package/dist/es5/features/limits.js +36 -28
  180. package/dist/es5/features/limits.js.map +1 -1
  181. package/dist/es5/features/webgl-features-table.js +35 -15
  182. package/dist/es5/features/webgl-features-table.js.map +1 -1
  183. package/dist/es5/features/webgl-limits-table.js +160 -120
  184. package/dist/es5/features/webgl-limits-table.js.map +1 -1
  185. package/dist/es5/index.js +144 -90
  186. package/dist/es5/index.js.map +1 -1
  187. package/dist/es5/init.js +12 -36
  188. package/dist/es5/init.js.map +1 -1
  189. package/dist/es5/types.js +2 -0
  190. package/dist/es5/types.js.map +1 -0
  191. package/dist/es5/utils/array-utils-flat.js +13 -14
  192. package/dist/es5/utils/array-utils-flat.js.map +1 -1
  193. package/dist/es5/utils/assert.js +1 -1
  194. package/dist/es5/utils/assert.js.map +1 -1
  195. package/dist/es5/utils/check-props.js +20 -21
  196. package/dist/es5/utils/check-props.js.map +1 -1
  197. package/dist/es5/utils/format-value.js +14 -14
  198. package/dist/es5/utils/format-value.js.map +1 -1
  199. package/dist/es5/utils/index.js +68 -0
  200. package/dist/es5/utils/index.js.map +1 -0
  201. package/dist/es5/utils/is-old-ie.js +2 -3
  202. package/dist/es5/utils/is-old-ie.js.map +1 -1
  203. package/dist/es5/utils/load-file.js +11 -18
  204. package/dist/es5/utils/load-file.js.map +1 -1
  205. package/dist/es5/utils/stub-methods.js +4 -4
  206. package/dist/es5/utils/stub-methods.js.map +1 -1
  207. package/dist/es5/utils/utils.js +5 -10
  208. package/dist/es5/utils/utils.js.map +1 -1
  209. package/dist/es5/webgl-utils/attribute-utils.js +87 -74
  210. package/dist/es5/webgl-utils/attribute-utils.js.map +1 -1
  211. package/dist/es5/webgl-utils/constants-to-keys.js +7 -7
  212. package/dist/es5/webgl-utils/constants-to-keys.js.map +1 -1
  213. package/dist/es5/webgl-utils/format-utils.js +21 -17
  214. package/dist/es5/webgl-utils/format-utils.js.map +1 -1
  215. package/dist/es5/webgl-utils/get-error.js +18 -18
  216. package/dist/es5/webgl-utils/get-error.js.map +1 -1
  217. package/dist/es5/webgl-utils/index.js +74 -0
  218. package/dist/es5/webgl-utils/index.js.map +1 -0
  219. package/dist/es5/webgl-utils/parse-shader-compiler-log.js +44 -0
  220. package/dist/es5/webgl-utils/parse-shader-compiler-log.js.map +1 -0
  221. package/dist/es5/webgl-utils/request-animation-frame.js.map +1 -1
  222. package/dist/es5/webgl-utils/texture-utils.js +35 -29
  223. package/dist/es5/webgl-utils/texture-utils.js.map +1 -1
  224. package/dist/es5/webgl-utils/typed-array-utils.js +51 -47
  225. package/dist/es5/webgl-utils/typed-array-utils.js.map +1 -1
  226. package/dist/esm/bundle.js +2 -4
  227. package/dist/esm/bundle.js.map +1 -1
  228. package/dist/esm/classes/accessor.js +7 -7
  229. package/dist/esm/classes/accessor.js.map +1 -1
  230. package/dist/esm/classes/accessor.ts.disabled +159 -0
  231. package/dist/esm/classes/clear.js +15 -13
  232. package/dist/esm/classes/clear.js.map +1 -1
  233. package/dist/esm/classes/copy-and-blit.js +41 -43
  234. package/dist/esm/classes/copy-and-blit.js.map +1 -1
  235. package/dist/esm/classes/framebuffer.js +336 -308
  236. package/dist/esm/classes/framebuffer.js.map +1 -1
  237. package/dist/esm/classes/program-configuration.js +17 -9
  238. package/dist/esm/classes/program-configuration.js.map +1 -1
  239. package/dist/esm/classes/program.js +69 -44
  240. package/dist/esm/classes/program.js.map +1 -1
  241. package/dist/esm/classes/query.js +17 -14
  242. package/dist/esm/classes/query.js.map +1 -1
  243. package/dist/esm/classes/renderbuffer-formats.js +72 -49
  244. package/dist/esm/classes/renderbuffer-formats.js.map +1 -1
  245. package/dist/esm/classes/renderbuffer.js +84 -72
  246. package/dist/esm/classes/renderbuffer.js.map +1 -1
  247. package/dist/esm/classes/texture-2d.js +10 -3
  248. package/dist/esm/classes/texture-2d.js.map +1 -1
  249. package/dist/esm/classes/texture-3d.js +14 -11
  250. package/dist/esm/classes/texture-3d.js.map +1 -1
  251. package/dist/esm/classes/texture-cube.js +43 -28
  252. package/dist/esm/classes/texture-cube.js.map +1 -1
  253. package/dist/esm/classes/texture-formats.js +51 -50
  254. package/dist/esm/classes/texture-formats.js.map +1 -1
  255. package/dist/esm/classes/texture.js +164 -49
  256. package/dist/esm/classes/texture.js.map +1 -1
  257. package/dist/esm/classes/transform-feedback.js +24 -13
  258. package/dist/esm/classes/transform-feedback.js.map +1 -1
  259. package/dist/esm/classes/uniform-buffer-layout.js +1 -1
  260. package/dist/esm/classes/uniform-buffer-layout.js.map +1 -1
  261. package/dist/esm/classes/uniforms.js +111 -112
  262. package/dist/esm/classes/uniforms.js.map +1 -1
  263. package/dist/esm/classes/vertex-array-object.js +52 -88
  264. package/dist/esm/classes/vertex-array-object.js.map +1 -1
  265. package/dist/esm/classes/vertex-array.js +50 -28
  266. package/dist/esm/classes/vertex-array.js.map +1 -1
  267. package/dist/esm/classes/webgl-buffer.js +379 -0
  268. package/dist/esm/classes/webgl-buffer.js.map +1 -0
  269. package/dist/esm/classes/webgl-resource.js +208 -0
  270. package/dist/esm/classes/webgl-resource.js.map +1 -0
  271. package/dist/esm/classes/webgl-shader.js +190 -0
  272. package/dist/esm/classes/webgl-shader.js.map +1 -0
  273. package/dist/esm/context/gl-context.js +32 -0
  274. package/dist/esm/context/gl-context.js.map +1 -0
  275. package/dist/esm/context/luma-context-data.js +5 -0
  276. package/dist/esm/context/luma-context-data.js.map +1 -0
  277. package/dist/esm/debug/debug-program-configuration.js +4 -4
  278. package/dist/esm/debug/debug-program-configuration.js.map +1 -1
  279. package/dist/esm/debug/debug-uniforms.js +9 -9
  280. package/dist/esm/debug/debug-uniforms.js.map +1 -1
  281. package/dist/esm/debug/debug-vertex-array.js +19 -17
  282. package/dist/esm/debug/debug-vertex-array.js.map +1 -1
  283. package/dist/esm/features/check-glsl-extension.js +4 -4
  284. package/dist/esm/features/check-glsl-extension.js.map +1 -1
  285. package/dist/esm/features/check-old-ie.js.map +1 -1
  286. package/dist/esm/features/features.js +14 -13
  287. package/dist/esm/features/features.js.map +1 -1
  288. package/dist/esm/features/index.js.map +1 -1
  289. package/dist/esm/features/limits.js +25 -22
  290. package/dist/esm/features/limits.js.map +1 -1
  291. package/dist/esm/features/webgl-features-table.js +6 -6
  292. package/dist/esm/features/webgl-features-table.js.map +1 -1
  293. package/dist/esm/features/webgl-limits-table.js +43 -42
  294. package/dist/esm/features/webgl-limits-table.js.map +1 -1
  295. package/dist/esm/index.js +13 -15
  296. package/dist/esm/index.js.map +1 -1
  297. package/dist/esm/init.js +4 -23
  298. package/dist/esm/init.js.map +1 -1
  299. package/dist/esm/types.js +2 -0
  300. package/dist/esm/types.js.map +1 -0
  301. package/dist/esm/utils/array-utils-flat.js.map +1 -1
  302. package/dist/esm/utils/assert.js +1 -1
  303. package/dist/esm/utils/assert.js.map +1 -1
  304. package/dist/esm/utils/check-props.js +4 -4
  305. package/dist/esm/utils/check-props.js.map +1 -1
  306. package/dist/esm/utils/format-value.js +4 -4
  307. package/dist/esm/utils/format-value.js.map +1 -1
  308. package/dist/esm/utils/index.js +7 -0
  309. package/dist/esm/utils/index.js.map +1 -0
  310. package/dist/esm/utils/is-old-ie.js +1 -1
  311. package/dist/esm/utils/is-old-ie.js.map +1 -1
  312. package/dist/esm/utils/load-file.js +2 -2
  313. package/dist/esm/utils/load-file.js.map +1 -1
  314. package/dist/esm/utils/stub-methods.js +2 -3
  315. package/dist/esm/utils/stub-methods.js.map +1 -1
  316. package/dist/esm/utils/utils.js +1 -3
  317. package/dist/esm/utils/utils.js.map +1 -1
  318. package/dist/esm/webgl-utils/attribute-utils.js +1 -1
  319. package/dist/esm/webgl-utils/attribute-utils.js.map +1 -1
  320. package/dist/esm/webgl-utils/constants-to-keys.js +4 -4
  321. package/dist/esm/webgl-utils/constants-to-keys.js.map +1 -1
  322. package/dist/esm/webgl-utils/format-utils.js +16 -15
  323. package/dist/esm/webgl-utils/format-utils.js.map +1 -1
  324. package/dist/esm/webgl-utils/get-error.js +1 -1
  325. package/dist/esm/webgl-utils/get-error.js.map +1 -1
  326. package/dist/esm/webgl-utils/index.js +5 -0
  327. package/dist/esm/webgl-utils/index.js.map +1 -0
  328. package/dist/esm/webgl-utils/parse-shader-compiler-log.js +37 -0
  329. package/dist/esm/webgl-utils/parse-shader-compiler-log.js.map +1 -0
  330. package/dist/esm/webgl-utils/request-animation-frame.js.map +1 -1
  331. package/dist/esm/webgl-utils/texture-utils.js +4 -3
  332. package/dist/esm/webgl-utils/texture-utils.js.map +1 -1
  333. package/dist/esm/webgl-utils/typed-array-utils.js +19 -18
  334. package/dist/esm/webgl-utils/typed-array-utils.js.map +1 -1
  335. package/dist/features/check-glsl-extension.d.ts +2 -0
  336. package/dist/features/check-glsl-extension.d.ts.map +1 -0
  337. package/dist/features/check-glsl-extension.js +27 -0
  338. package/dist/features/check-glsl-extension.js.map +1 -0
  339. package/dist/features/check-old-ie.d.ts +2 -0
  340. package/dist/features/check-old-ie.d.ts.map +1 -0
  341. package/dist/features/check-old-ie.js +8 -0
  342. package/dist/features/check-old-ie.js.map +1 -0
  343. package/dist/features/features.d.ts +6 -0
  344. package/dist/features/features.d.ts.map +1 -0
  345. package/dist/features/features.js +67 -0
  346. package/dist/features/features.js.map +1 -0
  347. package/dist/features/index.d.ts +5 -0
  348. package/dist/features/index.d.ts.map +1 -0
  349. package/dist/features/index.js +5 -0
  350. package/dist/features/index.js.map +1 -0
  351. package/dist/features/limits.d.ts +28 -0
  352. package/dist/features/limits.d.ts.map +1 -0
  353. package/dist/features/limits.js +55 -0
  354. package/dist/features/limits.js.map +1 -0
  355. package/dist/features/webgl-features-table.d.ts +30 -0
  356. package/dist/features/webgl-features-table.d.ts.map +1 -0
  357. package/dist/features/webgl-features-table.js +71 -0
  358. package/dist/features/webgl-features-table.js.map +1 -0
  359. package/dist/features/webgl-limits-table.d.ts +161 -0
  360. package/dist/features/webgl-limits-table.d.ts.map +1 -0
  361. package/dist/features/webgl-limits-table.js +161 -0
  362. package/dist/features/webgl-limits-table.js.map +1 -0
  363. package/dist/index.d.ts +33 -0
  364. package/dist/index.d.ts.map +1 -0
  365. package/dist/index.js +33 -0
  366. package/dist/index.js.map +1 -0
  367. package/dist/init.d.ts +5 -0
  368. package/dist/init.d.ts.map +1 -0
  369. package/dist/init.js +30 -0
  370. package/dist/init.js.map +1 -0
  371. package/dist/types.d.ts +9 -0
  372. package/dist/types.d.ts.map +1 -0
  373. package/dist/types.js +2 -0
  374. package/dist/types.js.map +1 -0
  375. package/dist/utils/array-utils-flat.d.ts +9 -0
  376. package/dist/utils/array-utils-flat.d.ts.map +1 -0
  377. package/dist/utils/array-utils-flat.js +39 -0
  378. package/dist/utils/array-utils-flat.js.map +1 -0
  379. package/dist/utils/assert.d.ts +2 -0
  380. package/dist/utils/assert.d.ts.map +1 -0
  381. package/dist/utils/assert.js +6 -0
  382. package/dist/utils/assert.js.map +1 -0
  383. package/dist/utils/check-props.d.ts +2 -0
  384. package/dist/utils/check-props.d.ts.map +1 -0
  385. package/dist/utils/check-props.js +38 -0
  386. package/dist/utils/check-props.js.map +1 -0
  387. package/dist/utils/format-value.d.ts +5 -0
  388. package/dist/utils/format-value.d.ts.map +1 -0
  389. package/dist/utils/format-value.js +50 -0
  390. package/dist/utils/format-value.js.map +1 -0
  391. package/dist/utils/index.d.ts +7 -0
  392. package/dist/utils/index.d.ts.map +1 -0
  393. package/dist/utils/index.js +7 -0
  394. package/dist/utils/index.js.map +1 -0
  395. package/dist/utils/is-old-ie.d.ts +4 -0
  396. package/dist/utils/is-old-ie.d.ts.map +1 -0
  397. package/dist/utils/is-old-ie.js +5 -0
  398. package/dist/utils/is-old-ie.js.map +1 -0
  399. package/dist/utils/load-file.d.ts +4 -0
  400. package/dist/utils/load-file.d.ts.map +1 -0
  401. package/dist/utils/load-file.js +30 -0
  402. package/dist/utils/load-file.js.map +1 -0
  403. package/dist/utils/stub-methods.d.ts +2 -0
  404. package/dist/utils/stub-methods.d.ts.map +1 -0
  405. package/dist/utils/stub-methods.js +16 -0
  406. package/dist/utils/stub-methods.js.map +1 -0
  407. package/dist/utils/utils.d.ts +15 -0
  408. package/dist/utils/utils.d.ts.map +1 -0
  409. package/dist/utils/utils.js +20 -0
  410. package/dist/utils/utils.js.map +1 -0
  411. package/dist/webgl-utils/attribute-utils.d.ts +18 -0
  412. package/dist/webgl-utils/attribute-utils.d.ts.map +1 -0
  413. package/dist/webgl-utils/attribute-utils.js +182 -0
  414. package/dist/webgl-utils/attribute-utils.js.map +1 -0
  415. package/dist/webgl-utils/constants-to-keys.d.ts +4 -0
  416. package/dist/webgl-utils/constants-to-keys.d.ts.map +1 -0
  417. package/dist/webgl-utils/constants-to-keys.js +41 -0
  418. package/dist/webgl-utils/constants-to-keys.js.map +1 -0
  419. package/dist/webgl-utils/format-utils.d.ts +3 -0
  420. package/dist/webgl-utils/format-utils.d.ts.map +1 -0
  421. package/dist/webgl-utils/format-utils.js +45 -0
  422. package/dist/webgl-utils/format-utils.js.map +1 -0
  423. package/dist/webgl-utils/get-error.d.ts +3 -0
  424. package/dist/webgl-utils/get-error.d.ts.map +1 -0
  425. package/dist/webgl-utils/get-error.js +41 -0
  426. package/dist/webgl-utils/get-error.js.map +1 -0
  427. package/dist/webgl-utils/index.d.ts +5 -0
  428. package/dist/webgl-utils/index.d.ts.map +1 -0
  429. package/dist/webgl-utils/index.js +5 -0
  430. package/dist/webgl-utils/index.js.map +1 -0
  431. package/dist/webgl-utils/parse-shader-compiler-log.d.ts +8 -0
  432. package/dist/webgl-utils/parse-shader-compiler-log.d.ts.map +1 -0
  433. package/dist/webgl-utils/parse-shader-compiler-log.js +37 -0
  434. package/dist/webgl-utils/parse-shader-compiler-log.js.map +1 -0
  435. package/dist/webgl-utils/request-animation-frame.d.ts +4 -0
  436. package/dist/webgl-utils/request-animation-frame.d.ts.map +1 -0
  437. package/dist/webgl-utils/request-animation-frame.js +7 -0
  438. package/dist/webgl-utils/request-animation-frame.js.map +1 -0
  439. package/dist/webgl-utils/texture-utils.d.ts +11 -0
  440. package/dist/webgl-utils/texture-utils.d.ts.map +1 -0
  441. package/dist/webgl-utils/texture-utils.js +48 -0
  442. package/dist/webgl-utils/texture-utils.js.map +1 -0
  443. package/dist/webgl-utils/typed-array-utils.d.ts +36 -0
  444. package/dist/webgl-utils/typed-array-utils.d.ts.map +1 -0
  445. package/dist/webgl-utils/typed-array-utils.js +108 -0
  446. package/dist/webgl-utils/typed-array-utils.js.map +1 -0
  447. package/package.json +9 -8
  448. package/src/bundle.ts +4 -0
  449. package/src/classes/accessor.js +3 -4
  450. package/src/classes/accessor.ts.disabled +159 -0
  451. package/src/classes/{clear.js → clear.ts} +13 -9
  452. package/src/classes/{copy-and-blit.js → copy-and-blit.ts} +113 -22
  453. package/src/classes/{framebuffer.js → framebuffer.ts} +355 -298
  454. package/src/classes/{program-configuration.js → program-configuration.ts} +18 -11
  455. package/src/classes/{program.js → program.ts} +56 -36
  456. package/src/classes/{query.js → query.ts} +28 -22
  457. package/src/classes/{renderbuffer-formats.js → renderbuffer-formats.ts} +42 -14
  458. package/src/classes/renderbuffer.ts +153 -0
  459. package/src/classes/{texture-2d.js → texture-2d.ts} +15 -5
  460. package/src/classes/{texture-3d.js → texture-3d.ts} +35 -10
  461. package/src/classes/{texture-cube.js → texture-cube.ts} +46 -28
  462. package/src/classes/{texture-formats.js → texture-formats.ts} +9 -1
  463. package/src/classes/{texture.js → texture.ts} +204 -37
  464. package/src/classes/{transform-feedback.js → transform-feedback.ts} +22 -14
  465. package/src/classes/{uniform-buffer-layout.js → uniform-buffer-layout.ts} +10 -6
  466. package/src/classes/{uniforms.js → uniforms.ts} +122 -70
  467. package/src/classes/{vertex-array-object.js → vertex-array-object.ts} +132 -107
  468. package/src/classes/{vertex-array.js → vertex-array.ts} +74 -54
  469. package/src/classes/{buffer.js → webgl-buffer.ts} +125 -51
  470. package/src/classes/{resource.js → webgl-resource.ts} +43 -36
  471. package/src/classes/webgl-shader.ts +200 -0
  472. package/src/context/gl-context.ts +31 -0
  473. package/src/context/luma-context-data.ts +27 -0
  474. package/src/debug/{debug-program-configuration.js → debug-program-configuration.ts} +0 -0
  475. package/src/debug/{debug-uniforms.js → debug-uniforms.ts} +18 -8
  476. package/src/debug/{debug-vertex-array.js → debug-vertex-array.ts} +7 -4
  477. package/src/features/{check-glsl-extension.js → check-glsl-extension.ts} +1 -1
  478. package/src/features/{check-old-ie.js → check-old-ie.ts} +0 -0
  479. package/src/features/{features.js → features.ts} +14 -13
  480. package/src/features/{index.js → index.ts} +0 -0
  481. package/src/features/{limits.js → limits.ts} +18 -17
  482. package/src/features/{webgl-features-table.js → webgl-features-table.ts} +0 -0
  483. package/src/features/{webgl-limits-table.js → webgl-limits-table.ts} +0 -0
  484. package/{dist/es5/index.d.ts → src/index.ts} +18 -16
  485. package/src/{init.js → init.ts} +1 -18
  486. package/{dist/es5/types.d.ts → src/types.ts} +0 -0
  487. package/src/utils/{array-utils-flat.js → array-utils-flat.ts} +0 -0
  488. package/src/utils/{assert.js → assert.ts} +1 -1
  489. package/src/utils/{check-props.js → check-props.ts} +0 -0
  490. package/src/utils/{format-value.js → format-value.ts} +2 -2
  491. package/src/utils/index.ts +6 -0
  492. package/src/utils/{is-old-ie.js → is-old-ie.ts} +1 -1
  493. package/src/utils/{load-file.js → load-file.ts} +3 -2
  494. package/src/utils/{stub-methods.js → stub-methods.ts} +1 -1
  495. package/src/utils/utils.ts +35 -0
  496. package/src/webgl-utils/{attribute-utils.js → attribute-utils.ts} +1 -2
  497. package/src/webgl-utils/{constants-to-keys.js → constants-to-keys.ts} +1 -1
  498. package/src/webgl-utils/{format-utils.js → format-utils.ts} +1 -1
  499. package/src/webgl-utils/{get-error.js → get-error.ts} +0 -0
  500. package/src/webgl-utils/index.ts +12 -0
  501. package/src/webgl-utils/parse-shader-compiler-log.ts +48 -0
  502. package/src/webgl-utils/{request-animation-frame.js → request-animation-frame.ts} +3 -2
  503. package/src/webgl-utils/texture-utils.js +2 -1
  504. package/dist/dist.js +0 -13555
  505. package/dist/dist.min.js +0 -1
  506. package/dist/es5/classes/buffer.d.ts +0 -84
  507. package/dist/es5/classes/buffer.js +0 -453
  508. package/dist/es5/classes/buffer.js.map +0 -1
  509. package/dist/es5/classes/clear.d.ts +0 -11
  510. package/dist/es5/classes/copy-and-blit.d.ts +0 -101
  511. package/dist/es5/classes/framebuffer.d.ts +0 -96
  512. package/dist/es5/classes/program-configuration.d.ts +0 -15
  513. package/dist/es5/classes/program.d.ts +0 -44
  514. package/dist/es5/classes/query.d.ts +0 -21
  515. package/dist/es5/classes/renderbuffer.d.ts +0 -34
  516. package/dist/es5/classes/resource.d.ts +0 -47
  517. package/dist/es5/classes/resource.js +0 -308
  518. package/dist/es5/classes/resource.js.map +0 -1
  519. package/dist/es5/classes/shader.d.ts +0 -29
  520. package/dist/es5/classes/shader.js +0 -221
  521. package/dist/es5/classes/shader.js.map +0 -1
  522. package/dist/es5/classes/texture-2d.d.ts +0 -11
  523. package/dist/es5/classes/texture-3d.d.ts +0 -29
  524. package/dist/es5/classes/texture-cube.d.ts +0 -23
  525. package/dist/es5/classes/texture.d.ts +0 -80
  526. package/dist/es5/classes/transform-feedback.d.ts +0 -16
  527. package/dist/es5/classes/uniform-buffer-layout.d.ts +0 -18
  528. package/dist/es5/classes/uniforms.d.ts +0 -63
  529. package/dist/es5/classes/vertex-array-object.d.ts +0 -25
  530. package/dist/es5/classes/vertex-array.d.ts +0 -37
  531. package/dist/es5/debug/debug-program-configuration.d.ts +0 -1
  532. package/dist/es5/debug/debug-uniforms.d.ts +0 -11
  533. package/dist/es5/debug/debug-vertex-array.d.ts +0 -1
  534. package/dist/es5/glsl-utils/format-glsl-error.d.ts +0 -16
  535. package/dist/es5/glsl-utils/format-glsl-error.js +0 -108
  536. package/dist/es5/glsl-utils/format-glsl-error.js.map +0 -1
  537. package/dist/es5/glsl-utils/get-shader-name.js +0 -14
  538. package/dist/es5/glsl-utils/get-shader-name.js.map +0 -1
  539. package/dist/es5/glsl-utils/get-shader-type-name.js +0 -22
  540. package/dist/es5/glsl-utils/get-shader-type-name.js.map +0 -1
  541. package/dist/es5/glsl-utils/get-shader-version.js +0 -22
  542. package/dist/es5/glsl-utils/get-shader-version.js.map +0 -1
  543. package/dist/es5/glsl-utils/index.js +0 -48
  544. package/dist/es5/glsl-utils/index.js.map +0 -1
  545. package/dist/es5/init.d.ts +0 -12
  546. package/dist/es5/utils/assert.d.ts +0 -1
  547. package/dist/es5/utils/is-old-ie.d.ts +0 -1
  548. package/dist/es5/utils/utils.d.ts +0 -13
  549. package/dist/es5/webgl-utils/request-animation-frame.d.ts +0 -3
  550. package/dist/esm/classes/buffer.d.ts +0 -84
  551. package/dist/esm/classes/buffer.js.map +0 -1
  552. package/dist/esm/classes/clear.d.ts +0 -11
  553. package/dist/esm/classes/copy-and-blit.d.ts +0 -101
  554. package/dist/esm/classes/framebuffer.d.ts +0 -96
  555. package/dist/esm/classes/program-configuration.d.ts +0 -15
  556. package/dist/esm/classes/program.d.ts +0 -44
  557. package/dist/esm/classes/query.d.ts +0 -21
  558. package/dist/esm/classes/renderbuffer.d.ts +0 -34
  559. package/dist/esm/classes/resource.d.ts +0 -47
  560. package/dist/esm/classes/resource.js.map +0 -1
  561. package/dist/esm/classes/shader.d.ts +0 -29
  562. package/dist/esm/classes/shader.js +0 -138
  563. package/dist/esm/classes/shader.js.map +0 -1
  564. package/dist/esm/classes/texture-2d.d.ts +0 -11
  565. package/dist/esm/classes/texture-3d.d.ts +0 -29
  566. package/dist/esm/classes/texture-cube.d.ts +0 -23
  567. package/dist/esm/classes/texture.d.ts +0 -80
  568. package/dist/esm/classes/transform-feedback.d.ts +0 -16
  569. package/dist/esm/classes/uniform-buffer-layout.d.ts +0 -18
  570. package/dist/esm/classes/uniforms.d.ts +0 -63
  571. package/dist/esm/classes/vertex-array-object.d.ts +0 -25
  572. package/dist/esm/classes/vertex-array.d.ts +0 -37
  573. package/dist/esm/debug/debug-program-configuration.d.ts +0 -1
  574. package/dist/esm/debug/debug-uniforms.d.ts +0 -11
  575. package/dist/esm/debug/debug-vertex-array.d.ts +0 -1
  576. package/dist/esm/glsl-utils/format-glsl-error.d.ts +0 -16
  577. package/dist/esm/glsl-utils/format-glsl-error.js +0 -93
  578. package/dist/esm/glsl-utils/format-glsl-error.js.map +0 -1
  579. package/dist/esm/glsl-utils/get-shader-name.js +0 -6
  580. package/dist/esm/glsl-utils/get-shader-name.js.map +0 -1
  581. package/dist/esm/glsl-utils/get-shader-type-name.js +0 -15
  582. package/dist/esm/glsl-utils/get-shader-type-name.js.map +0 -1
  583. package/dist/esm/glsl-utils/get-shader-version.js +0 -15
  584. package/dist/esm/glsl-utils/get-shader-version.js.map +0 -1
  585. package/dist/esm/glsl-utils/index.js +0 -5
  586. package/dist/esm/glsl-utils/index.js.map +0 -1
  587. package/dist/esm/index.d.ts +0 -71
  588. package/dist/esm/init.d.ts +0 -12
  589. package/dist/esm/types.d.ts +0 -8
  590. package/dist/esm/utils/assert.d.ts +0 -1
  591. package/dist/esm/utils/is-old-ie.d.ts +0 -1
  592. package/dist/esm/utils/utils.d.ts +0 -13
  593. package/dist/esm/webgl-utils/request-animation-frame.d.ts +0 -3
  594. package/src/bundle.js +0 -8
  595. package/src/classes/buffer.d.ts +0 -84
  596. package/src/classes/clear.d.ts +0 -11
  597. package/src/classes/copy-and-blit.d.ts +0 -101
  598. package/src/classes/framebuffer.d.ts +0 -96
  599. package/src/classes/program-configuration.d.ts +0 -15
  600. package/src/classes/program.d.ts +0 -44
  601. package/src/classes/query.d.ts +0 -21
  602. package/src/classes/renderbuffer.d.ts +0 -34
  603. package/src/classes/renderbuffer.js +0 -105
  604. package/src/classes/resource.d.ts +0 -47
  605. package/src/classes/shader.d.ts +0 -29
  606. package/src/classes/shader.js +0 -147
  607. package/src/classes/texture-2d.d.ts +0 -11
  608. package/src/classes/texture-3d.d.ts +0 -29
  609. package/src/classes/texture-cube.d.ts +0 -23
  610. package/src/classes/texture.d.ts +0 -80
  611. package/src/classes/transform-feedback.d.ts +0 -16
  612. package/src/classes/uniform-buffer-layout.d.ts +0 -18
  613. package/src/classes/uniforms.d.ts +0 -63
  614. package/src/classes/vertex-array-object.d.ts +0 -25
  615. package/src/classes/vertex-array.d.ts +0 -37
  616. package/src/debug/debug-program-configuration.d.ts +0 -1
  617. package/src/debug/debug-uniforms.d.ts +0 -11
  618. package/src/debug/debug-vertex-array.d.ts +0 -1
  619. package/src/glsl-utils/format-glsl-error.d.ts +0 -16
  620. package/src/glsl-utils/format-glsl-error.js +0 -107
  621. package/src/glsl-utils/get-shader-name.js +0 -7
  622. package/src/glsl-utils/get-shader-type-name.js +0 -13
  623. package/src/glsl-utils/get-shader-version.js +0 -12
  624. package/src/glsl-utils/index.js +0 -8
  625. package/src/index.d.ts +0 -71
  626. package/src/index.js +0 -70
  627. package/src/init.d.ts +0 -12
  628. package/src/types.d.ts +0 -8
  629. package/src/utils/assert.d.ts +0 -1
  630. package/src/utils/is-old-ie.d.ts +0 -1
  631. package/src/utils/utils.d.ts +0 -13
  632. package/src/utils/utils.js +0 -36
  633. package/src/webgl-utils/request-animation-frame.d.ts +0 -3
@@ -0,0 +1,368 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import GL from '@luma.gl/constants';
3
+ import WebGLResource from './webgl-resource';
4
+ import Texture from './texture';
5
+ import Framebuffer from './framebuffer';
6
+ import { parseUniformName, getUniformSetter } from './uniforms';
7
+ import { VertexShader, FragmentShader } from './webgl-shader';
8
+ import ProgramConfiguration from './program-configuration';
9
+ import { copyUniform, checkUniformValues } from './uniforms';
10
+ import { isWebGL2, assertWebGL2Context, withParameters, log } from '@luma.gl/gltools';
11
+ import { getKey } from '../webgl-utils';
12
+ import { getPrimitiveDrawMode } from '../webgl-utils/attribute-utils';
13
+ import { uid, assert } from '../utils';
14
+ const LOG_PROGRAM_PERF_PRIORITY = 4;
15
+ const GL_SEPARATE_ATTRIBS = 0x8c8d;
16
+ export default class Program extends WebGLResource {
17
+ constructor(gl, props = {}) {
18
+ super(gl, props, {});
19
+
20
+ _defineProperty(this, "configuration", void 0);
21
+
22
+ _defineProperty(this, "_isCached", false);
23
+
24
+ _defineProperty(this, "_textureIndexCounter", 0);
25
+
26
+ _defineProperty(this, "hash", void 0);
27
+
28
+ _defineProperty(this, "vs", void 0);
29
+
30
+ _defineProperty(this, "fs", void 0);
31
+
32
+ _defineProperty(this, "uniforms", void 0);
33
+
34
+ _defineProperty(this, "_textureUniforms", void 0);
35
+
36
+ _defineProperty(this, "varyings", void 0);
37
+
38
+ _defineProperty(this, "_uniformCount", 0);
39
+
40
+ _defineProperty(this, "_uniformSetters", void 0);
41
+
42
+ this.initialize(props);
43
+ Object.seal(this);
44
+
45
+ this._setId(props.id);
46
+ }
47
+
48
+ initialize(props = {}) {
49
+ const {
50
+ hash,
51
+ vs,
52
+ fs,
53
+ varyings,
54
+ bufferMode = GL_SEPARATE_ATTRIBS
55
+ } = props;
56
+ this.hash = hash || '';
57
+ this.vs = typeof vs === 'string' ? new VertexShader(this.gl, {
58
+ id: "".concat(props.id, "-vs"),
59
+ source: vs
60
+ }) : vs;
61
+ this.fs = typeof fs === 'string' ? new FragmentShader(this.gl, {
62
+ id: "".concat(props.id, "-fs"),
63
+ source: fs
64
+ }) : fs;
65
+ assert(this.vs instanceof VertexShader);
66
+ assert(this.fs instanceof FragmentShader);
67
+ this.uniforms = {};
68
+ this._textureUniforms = {};
69
+
70
+ if (varyings && varyings.length > 0) {
71
+ assertWebGL2Context(this.gl);
72
+ this.varyings = varyings;
73
+ this.gl2.transformFeedbackVaryings(this.handle, varyings, bufferMode);
74
+ }
75
+
76
+ this._compileAndLink();
77
+
78
+ this._readUniformLocationsFromLinkedProgram();
79
+
80
+ this.configuration = new ProgramConfiguration(this);
81
+ return this.setProps(props);
82
+ }
83
+
84
+ delete(options = {}) {
85
+ if (this._isCached) {
86
+ return this;
87
+ }
88
+
89
+ return super.delete(options);
90
+ }
91
+
92
+ setProps(props) {
93
+ if ('uniforms' in props) {
94
+ this.setUniforms(props.uniforms);
95
+ }
96
+
97
+ return this;
98
+ }
99
+
100
+ draw(options) {
101
+ const {
102
+ logPriority,
103
+ drawMode = GL.TRIANGLES,
104
+ vertexCount,
105
+ offset = 0,
106
+ start,
107
+ end,
108
+ isIndexed = false,
109
+ indexType = GL.UNSIGNED_SHORT,
110
+ instanceCount = 0,
111
+ isInstanced = instanceCount > 0,
112
+ vertexArray = null,
113
+ transformFeedback,
114
+ framebuffer,
115
+ uniforms,
116
+ samplers
117
+ } = options;
118
+ let {
119
+ parameters = {}
120
+ } = options;
121
+
122
+ if (uniforms || samplers) {
123
+ log.deprecated('Program.draw({uniforms})', 'Program.setUniforms(uniforms)')();
124
+ this.setUniforms(uniforms || {});
125
+ }
126
+
127
+ if (log.priority >= logPriority) {
128
+ const fb = framebuffer ? framebuffer.id : 'default';
129
+ 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);
130
+ log.log(logPriority, message)();
131
+ }
132
+
133
+ assert(vertexArray);
134
+ this.gl.useProgram(this.handle);
135
+
136
+ if (!this._areTexturesRenderable() || vertexCount === 0 || isInstanced && instanceCount === 0) {
137
+ return false;
138
+ }
139
+
140
+ vertexArray.bindForDraw(vertexCount, instanceCount, () => {
141
+ if (framebuffer !== undefined) {
142
+ parameters = Object.assign({}, parameters, {
143
+ framebuffer
144
+ });
145
+ }
146
+
147
+ if (transformFeedback) {
148
+ const primitiveMode = getPrimitiveDrawMode(drawMode);
149
+ transformFeedback.begin(primitiveMode);
150
+ }
151
+
152
+ this._bindTextures();
153
+
154
+ withParameters(this.gl, parameters, () => {
155
+ if (isIndexed && isInstanced) {
156
+ this.gl2.drawElementsInstanced(drawMode, vertexCount, indexType, offset, instanceCount);
157
+ } else if (isIndexed && isWebGL2(this.gl) && !isNaN(start) && !isNaN(end)) {
158
+ this.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
159
+ } else if (isIndexed) {
160
+ this.gl.drawElements(drawMode, vertexCount, indexType, offset);
161
+ } else if (isInstanced) {
162
+ this.gl2.drawArraysInstanced(drawMode, offset, vertexCount, instanceCount);
163
+ } else {
164
+ this.gl.drawArrays(drawMode, offset, vertexCount);
165
+ }
166
+ });
167
+
168
+ if (transformFeedback) {
169
+ transformFeedback.end();
170
+ }
171
+ });
172
+ return true;
173
+ }
174
+
175
+ setUniforms(uniforms = {}) {
176
+ if (log.priority >= 2) {
177
+ checkUniformValues(uniforms, this.id, this._uniformSetters);
178
+ }
179
+
180
+ this.gl.useProgram(this.handle);
181
+
182
+ for (const uniformName in uniforms) {
183
+ const uniform = uniforms[uniformName];
184
+ const uniformSetter = this._uniformSetters[uniformName];
185
+
186
+ if (uniformSetter) {
187
+ let value = uniform;
188
+ let textureUpdate = false;
189
+
190
+ if (value instanceof Framebuffer) {
191
+ value = value.texture;
192
+ }
193
+
194
+ if (value instanceof Texture) {
195
+ textureUpdate = this.uniforms[uniformName] !== uniform;
196
+
197
+ if (textureUpdate) {
198
+ if (uniformSetter.textureIndex === undefined) {
199
+ uniformSetter.textureIndex = this._textureIndexCounter++;
200
+ }
201
+
202
+ const texture = value;
203
+ const {
204
+ textureIndex
205
+ } = uniformSetter;
206
+ texture.bind(textureIndex);
207
+ value = textureIndex;
208
+ this._textureUniforms[uniformName] = texture;
209
+ } else {
210
+ value = uniformSetter.textureIndex;
211
+ }
212
+ } else if (this._textureUniforms[uniformName]) {
213
+ delete this._textureUniforms[uniformName];
214
+ }
215
+
216
+ if (uniformSetter(value) || textureUpdate) {
217
+ copyUniform(this.uniforms, uniformName, uniform);
218
+ }
219
+ }
220
+ }
221
+
222
+ return this;
223
+ }
224
+
225
+ _areTexturesRenderable() {
226
+ let texturesRenderable = true;
227
+
228
+ for (const uniformName in this._textureUniforms) {
229
+ const texture = this._textureUniforms[uniformName];
230
+ texture.update();
231
+ texturesRenderable = texturesRenderable && texture.loaded;
232
+ }
233
+
234
+ return texturesRenderable;
235
+ }
236
+
237
+ _bindTextures() {
238
+ for (const uniformName in this._textureUniforms) {
239
+ const textureIndex = this._uniformSetters[uniformName].textureIndex;
240
+
241
+ this._textureUniforms[uniformName].bind(textureIndex);
242
+ }
243
+ }
244
+
245
+ _createHandle() {
246
+ return this.gl.createProgram();
247
+ }
248
+
249
+ _deleteHandle() {
250
+ this.gl.deleteProgram(this.handle);
251
+ }
252
+
253
+ _getOptionsFromHandle(handle) {
254
+ const shaderHandles = this.gl.getAttachedShaders(handle);
255
+ const opts = {};
256
+
257
+ for (const shaderHandle of shaderHandles) {
258
+ const type = this.gl.getShaderParameter(this.handle, GL.SHADER_TYPE);
259
+
260
+ switch (type) {
261
+ case GL.VERTEX_SHADER:
262
+ opts.vs = new VertexShader({
263
+ handle: shaderHandle
264
+ });
265
+ break;
266
+
267
+ case GL.FRAGMENT_SHADER:
268
+ opts.fs = new FragmentShader({
269
+ handle: shaderHandle
270
+ });
271
+ break;
272
+
273
+ default:
274
+ }
275
+ }
276
+
277
+ return opts;
278
+ }
279
+
280
+ _getParameter(pname) {
281
+ return this.gl.getProgramParameter(this.handle, pname);
282
+ }
283
+
284
+ _setId(id) {
285
+ if (!id) {
286
+ const programName = this._getName();
287
+
288
+ this.id = uid(programName);
289
+ }
290
+ }
291
+
292
+ _getName() {
293
+ let programName = this.vs.getName() || this.fs.getName();
294
+ programName = programName.replace(/shader/i, '');
295
+ programName = programName ? "".concat(programName, "-program") : 'program';
296
+ return programName;
297
+ }
298
+
299
+ _compileAndLink() {
300
+ const {
301
+ gl
302
+ } = this;
303
+ gl.attachShader(this.handle, this.vs.handle);
304
+ gl.attachShader(this.handle, this.fs.handle);
305
+ log.time(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this._getName()))();
306
+ gl.linkProgram(this.handle);
307
+ log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this._getName()))();
308
+
309
+ if (gl.debug || log.level > 0) {
310
+ const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
311
+
312
+ if (!linked) {
313
+ throw new Error("Error linking: ".concat(gl.getProgramInfoLog(this.handle)));
314
+ }
315
+
316
+ gl.validateProgram(this.handle);
317
+ const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
318
+
319
+ if (!validated) {
320
+ throw new Error("Error validating: ".concat(gl.getProgramInfoLog(this.handle)));
321
+ }
322
+ }
323
+ }
324
+
325
+ _readUniformLocationsFromLinkedProgram() {
326
+ const {
327
+ gl
328
+ } = this;
329
+ this._uniformSetters = {};
330
+ this._uniformCount = this._getParameter(GL.ACTIVE_UNIFORMS);
331
+
332
+ for (let i = 0; i < this._uniformCount; i++) {
333
+ const info = this.gl.getActiveUniform(this.handle, i);
334
+ const {
335
+ name
336
+ } = parseUniformName(info.name);
337
+ let location = gl.getUniformLocation(this.handle, name);
338
+ this._uniformSetters[name] = getUniformSetter(gl, location, info);
339
+
340
+ if (info.size > 1) {
341
+ for (let l = 0; l < info.size; l++) {
342
+ location = gl.getUniformLocation(this.handle, "".concat(name, "[").concat(l, "]"));
343
+ this._uniformSetters["".concat(name, "[").concat(l, "]")] = getUniformSetter(gl, location, info);
344
+ }
345
+ }
346
+ }
347
+
348
+ this._textureIndexCounter = 0;
349
+ }
350
+
351
+ getActiveUniforms(uniformIndices, pname) {
352
+ return this.gl2.getActiveUniforms(this.handle, uniformIndices, pname);
353
+ }
354
+
355
+ getUniformBlockIndex(blockName) {
356
+ return this.gl2.getUniformBlockIndex(this.handle, blockName);
357
+ }
358
+
359
+ getActiveUniformBlockParameter(blockIndex, pname) {
360
+ return this.gl2.getActiveUniformBlockParameter(this.handle, blockIndex, pname);
361
+ }
362
+
363
+ uniformBlockBinding(blockIndex, blockBinding) {
364
+ this.gl2.uniformBlockBinding(this.handle, blockIndex, blockBinding);
365
+ }
366
+
367
+ }
368
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/classes/program.ts"],"names":["GL","WebGLResource","Texture","Framebuffer","parseUniformName","getUniformSetter","VertexShader","FragmentShader","ProgramConfiguration","copyUniform","checkUniformValues","isWebGL2","assertWebGL2Context","withParameters","log","getKey","getPrimitiveDrawMode","uid","assert","LOG_PROGRAM_PERF_PRIORITY","GL_SEPARATE_ATTRIBS","Program","constructor","gl","props","initialize","Object","seal","_setId","id","hash","vs","fs","varyings","bufferMode","source","uniforms","_textureUniforms","length","gl2","transformFeedbackVaryings","handle","_compileAndLink","_readUniformLocationsFromLinkedProgram","configuration","setProps","delete","options","_isCached","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","FRAGMENT_SHADER","_getParameter","pname","getProgramParameter","programName","_getName","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 GL from '@luma.gl/constants';\n\nimport WebGLResource, {ResourceProps} from './webgl-resource';\nimport Texture from './texture';\nimport Framebuffer from './framebuffer';\nimport {parseUniformName, getUniformSetter} from './uniforms';\nimport {VertexShader, FragmentShader} from './webgl-shader';\nimport ProgramConfiguration from './program-configuration';\nimport {copyUniform, checkUniformValues} from './uniforms';\n\nimport {isWebGL2, assertWebGL2Context, withParameters, log} from '@luma.gl/gltools';\nimport {getKey} from '../webgl-utils';\nimport {getPrimitiveDrawMode} from '../webgl-utils/attribute-utils';\nimport {uid, assert} from '../utils';\n\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n\nconst GL_SEPARATE_ATTRIBS = 0x8c8d;\n\nexport type ProgramProps = ResourceProps & {\n hash?;\n vs?; \n fs?;\n varyings?; \n bufferMode?: number;\n}\n\nexport type ProgramDrawOptions = {\n logPriority?: any;\n drawMode?: any;\n vertexCount: any;\n offset?: number;\n start?: any;\n end?: any;\n isIndexed?: boolean;\n indexType?: any;\n instanceCount?: number;\n isInstanced?: boolean;\n vertexArray?: any;\n transformFeedback?: any;\n framebuffer?: any;\n parameters?: {};\n uniforms?: 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 _isCached = false;\n _textureIndexCounter = 0;\n hash: string;; // Used by ProgramManager\n vs;\n fs;\n uniforms: {};\n _textureUniforms: {};\n varyings: {};\n _uniformCount = 0;\n _uniformSetters: {};\n \n constructor(gl: WebGLRenderingContext, props: ProgramProps = {}) {\n super(gl, props, {} as any);\n\n\n this.initialize(props);\n\n Object.seal(this);\n\n this._setId(props.id);\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' ? new VertexShader(this.gl, {id: `${props.id}-vs`, source: vs}) : vs;\n this.fs =\n typeof fs === 'string' ? new FragmentShader(this.gl, {id: `${props.id}-fs`, source: fs}) : fs;\n assert(this.vs instanceof VertexShader);\n assert(this.fs instanceof FragmentShader);\n\n // uniforms\n this.uniforms = {};\n\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 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 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 if (uniformSetter.textureIndex === undefined) {\n uniformSetter.textureIndex = this._textureIndexCounter++;\n }\n\n // Bind texture to index\n const texture = value;\n const {textureIndex} = uniformSetter;\n\n texture.bind(textureIndex);\n value = textureIndex;\n\n this._textureUniforms[uniformName] = texture;\n } else {\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 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-ignore\n opts.vs = new VertexShader({handle: shaderHandle});\n break;\n case GL.FRAGMENT_SHADER:\n // @ts-ignore\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 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-ignore\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"}
@@ -0,0 +1,27 @@
1
+ import WebGLResource, { ResourceProps } from './webgl-resource';
2
+ export declare type QueryProps = ResourceProps & {};
3
+ /**
4
+ * Asynchronous queries for different kinds of information
5
+ */
6
+ export default class Query extends WebGLResource<QueryProps> {
7
+ static isSupported(gl: WebGLRenderingContext, options?: string[]): boolean;
8
+ target: any;
9
+ _queryPending: boolean;
10
+ _pollingPromise: any;
11
+ constructor(gl: WebGLRenderingContext, opts?: QueryProps);
12
+ beginTimeElapsedQuery(): this;
13
+ beginOcclusionQuery(options?: {
14
+ conservative?: boolean;
15
+ }): this;
16
+ beginTransformFeedbackQuery(): this;
17
+ begin(target: number): this;
18
+ end(): this;
19
+ isResultAvailable(): boolean;
20
+ isTimerDisjoint(): boolean;
21
+ getResult(): any;
22
+ getTimerMilliseconds(): number;
23
+ createPoll(limit?: number): Promise<any>;
24
+ _createHandle(): WebGLQuery;
25
+ _deleteHandle(): void;
26
+ }
27
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/classes/query.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,EAAE,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAc9D,oBAAY,UAAU,GAAG,aAAa,GAAG,EACxC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,aAAa,CAAC,UAAU,CAAC;IAG1D,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,qBAAqB,EAAE,OAAO,GAAE,MAAM,EAAO,GAAG,OAAO;IAuB9E,MAAM,MAAQ;IACd,aAAa,UAAS;IACtB,eAAe,MAAQ;gBAGX,EAAE,EAAE,qBAAqB,EAAE,IAAI,GAAE,UAAe;IAS5D,qBAAqB,IAAI,IAAI;IAK7B,mBAAmB,CAAC,OAAO,CAAC,EAAE;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI;IAK7D,2BAA2B,IAAI,IAAI;IASnC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAa3B,GAAG,IAAI,IAAI;IAeX,iBAAiB,IAAI,OAAO;IAa5B,eAAe,IAAI,OAAO;IAK1B,SAAS,IAAI,GAAG;IAKhB,oBAAoB;IAKpB,UAAU,CAAC,KAAK,GAAE,MAAiC,GAAG,OAAO,CAAC,GAAG,CAAC;IA0BlE,aAAa;IAIb,aAAa;CAGd"}
@@ -0,0 +1,144 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import { isWebGL2 } from '@luma.gl/gltools';
3
+ import WebGLResource from './webgl-resource';
4
+ import { FEATURES, hasFeatures } from '../features';
5
+ import { assert } from '../utils';
6
+ const GL_QUERY_RESULT = 0x8866;
7
+ const GL_QUERY_RESULT_AVAILABLE = 0x8867;
8
+ const GL_TIME_ELAPSED_EXT = 0x88bf;
9
+ const GL_GPU_DISJOINT_EXT = 0x8fbb;
10
+ const GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8c88;
11
+ const GL_ANY_SAMPLES_PASSED = 0x8c2f;
12
+ const GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8d6a;
13
+ export default class Query extends WebGLResource {
14
+ static isSupported(gl, options = []) {
15
+ const webgl2 = isWebGL2(gl);
16
+ const hasTimerQuery = hasFeatures(gl, FEATURES.TIMER_QUERY);
17
+ let supported = webgl2 || hasTimerQuery;
18
+
19
+ for (const key of options) {
20
+ switch (key) {
21
+ case 'queries':
22
+ supported = supported && webgl2;
23
+ break;
24
+
25
+ case 'timers':
26
+ supported = supported && hasTimerQuery;
27
+ break;
28
+
29
+ default:
30
+ assert(false);
31
+ }
32
+ }
33
+
34
+ return supported;
35
+ }
36
+
37
+ constructor(gl, opts = {}) {
38
+ super(gl, opts, {});
39
+
40
+ _defineProperty(this, "target", null);
41
+
42
+ _defineProperty(this, "_queryPending", false);
43
+
44
+ _defineProperty(this, "_pollingPromise", null);
45
+
46
+ Object.seal(this);
47
+ }
48
+
49
+ beginTimeElapsedQuery() {
50
+ return this.begin(GL_TIME_ELAPSED_EXT);
51
+ }
52
+
53
+ beginOcclusionQuery(options) {
54
+ return this.begin(options !== null && options !== void 0 && options.conservative ? GL_ANY_SAMPLES_PASSED_CONSERVATIVE : GL_ANY_SAMPLES_PASSED);
55
+ }
56
+
57
+ beginTransformFeedbackQuery() {
58
+ return this.begin(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);
59
+ }
60
+
61
+ begin(target) {
62
+ if (this._queryPending) {
63
+ return this;
64
+ }
65
+
66
+ this.target = target;
67
+ this.gl2.beginQuery(this.target, this.handle);
68
+ return this;
69
+ }
70
+
71
+ end() {
72
+ if (this._queryPending) {
73
+ return this;
74
+ }
75
+
76
+ if (this.target) {
77
+ this.gl2.endQuery(this.target);
78
+ this.target = null;
79
+ this._queryPending = true;
80
+ }
81
+
82
+ return this;
83
+ }
84
+
85
+ isResultAvailable() {
86
+ if (!this._queryPending) {
87
+ return false;
88
+ }
89
+
90
+ const resultAvailable = this.gl2.getQueryParameter(this.handle, GL_QUERY_RESULT_AVAILABLE);
91
+
92
+ if (resultAvailable) {
93
+ this._queryPending = false;
94
+ }
95
+
96
+ return resultAvailable;
97
+ }
98
+
99
+ isTimerDisjoint() {
100
+ return this.gl2.getParameter(GL_GPU_DISJOINT_EXT);
101
+ }
102
+
103
+ getResult() {
104
+ return this.gl2.getQueryParameter(this.handle, GL_QUERY_RESULT);
105
+ }
106
+
107
+ getTimerMilliseconds() {
108
+ return this.getResult() / 1e6;
109
+ }
110
+
111
+ createPoll(limit = Number.POSITIVE_INFINITY) {
112
+ if (this._pollingPromise) {
113
+ return this._pollingPromise;
114
+ }
115
+
116
+ let counter = 0;
117
+ this._pollingPromise = new Promise((resolve, reject) => {
118
+ const poll = () => {
119
+ if (this.isResultAvailable()) {
120
+ resolve(this.getResult());
121
+ this._pollingPromise = null;
122
+ } else if (counter++ > limit) {
123
+ reject('Timed out');
124
+ this._pollingPromise = null;
125
+ } else {
126
+ requestAnimationFrame(poll);
127
+ }
128
+ };
129
+
130
+ requestAnimationFrame(poll);
131
+ });
132
+ return this._pollingPromise;
133
+ }
134
+
135
+ _createHandle() {
136
+ return Query.isSupported(this.gl) ? this.gl2.createQuery() : null;
137
+ }
138
+
139
+ _deleteHandle() {
140
+ this.gl2.deleteQuery(this.handle);
141
+ }
142
+
143
+ }
144
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/classes/query.ts"],"names":["isWebGL2","WebGLResource","FEATURES","hasFeatures","assert","GL_QUERY_RESULT","GL_QUERY_RESULT_AVAILABLE","GL_TIME_ELAPSED_EXT","GL_GPU_DISJOINT_EXT","GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN","GL_ANY_SAMPLES_PASSED","GL_ANY_SAMPLES_PASSED_CONSERVATIVE","Query","isSupported","gl","options","webgl2","hasTimerQuery","TIMER_QUERY","supported","key","constructor","opts","Object","seal","beginTimeElapsedQuery","begin","beginOcclusionQuery","conservative","beginTransformFeedbackQuery","target","_queryPending","gl2","beginQuery","handle","end","endQuery","isResultAvailable","resultAvailable","getQueryParameter","isTimerDisjoint","getParameter","getResult","getTimerMilliseconds","createPoll","limit","Number","POSITIVE_INFINITY","_pollingPromise","counter","Promise","resolve","reject","poll","requestAnimationFrame","_createHandle","createQuery","_deleteHandle","deleteQuery"],"mappings":"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","sourcesContent":["// WebGL2 Query (also handles disjoint timer extensions)\nimport {isWebGL2} from '@luma.gl/gltools';\nimport WebGLResource, {ResourceProps} from './webgl-resource';\nimport {FEATURES, hasFeatures} from '../features';\nimport {assert} from '../utils';\n\nconst GL_QUERY_RESULT = 0x8866; // Returns a GLuint containing the query result.\nconst GL_QUERY_RESULT_AVAILABLE = 0x8867; // whether query result is available.\n\nconst GL_TIME_ELAPSED_EXT = 0x88bf; // Elapsed time (in nanoseconds).\nconst GL_GPU_DISJOINT_EXT = 0x8fbb; // Whether GPU performed any disjoint operation.\n\nconst GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8c88; // #primitives written to feedback buffers\nconst GL_ANY_SAMPLES_PASSED = 0x8c2f; // Occlusion query (if drawing passed depth test)\nconst GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8d6a; // Occlusion query less accurate/faster version\n\nexport type QueryProps = ResourceProps & {\n};\n\n/**\n * Asynchronous queries for different kinds of information\n */\nexport default class Query extends WebGLResource<QueryProps> {\n // Returns true if Query is supported by the WebGL implementation\n // Can also check whether timestamp queries are available.\n static isSupported(gl: WebGLRenderingContext, options: string[] = []): boolean {\n const webgl2 = isWebGL2(gl);\n\n // Initial value\n const hasTimerQuery = hasFeatures(gl, FEATURES.TIMER_QUERY);\n let supported = webgl2 || hasTimerQuery;\n\n for (const key of options) {\n switch (key) {\n case 'queries':\n supported = supported && webgl2;\n break;\n case 'timers':\n supported = supported && hasTimerQuery;\n break;\n default:\n assert(false);\n }\n }\n\n return supported;\n }\n\n target = null;\n _queryPending = false;\n _pollingPromise = null;\n\n // Create a query class\n constructor(gl: WebGLRenderingContext, opts: QueryProps = {}) {\n super(gl, opts, {} as any);\n\n Object.seal(this);\n }\n\n // Shortcut for timer query (dependent on extension in both WebGL1 and 2)\n // Measures GPU time delta between this call and a matching `end` call in the\n // GPU instruction stream.\n beginTimeElapsedQuery(): this {\n return this.begin(GL_TIME_ELAPSED_EXT);\n }\n\n // Shortcut for occlusion queries\n beginOcclusionQuery(options?: {conservative?: boolean}): this {\n return this.begin(options?.conservative ? GL_ANY_SAMPLES_PASSED_CONSERVATIVE : GL_ANY_SAMPLES_PASSED);\n }\n\n // Shortcut for transformFeedbackQuery\n beginTransformFeedbackQuery(): this {\n return this.begin(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);\n }\n\n // Due to OpenGL API limitations, after calling `begin()` on one Query\n // instance, `end()` must be called on that same instance before\n // calling `begin()` on another query. While there can be multiple\n // outstanding queries representing disjoint `begin()`/`end()` intervals.\n // It is not possible to interleave or overlap `begin` and `end` calls.\n begin(target: number): this {\n // Don't start a new query if one is already active.\n if (this._queryPending) {\n return this;\n }\n\n this.target = target;\n this.gl2.beginQuery(this.target, this.handle);\n\n return this;\n }\n\n // ends the current query\n end(): this {\n // Can't end a new query if the last one hasn't been resolved.\n if (this._queryPending) {\n return this;\n }\n\n if (this.target) {\n this.gl2.endQuery(this.target);\n this.target = null;\n this._queryPending = true;\n }\n return this;\n }\n\n // Returns true if the query result is available\n isResultAvailable(): boolean {\n if (!this._queryPending) {\n return false;\n }\n\n const resultAvailable = this.gl2.getQueryParameter(this.handle, GL_QUERY_RESULT_AVAILABLE);\n if (resultAvailable) {\n this._queryPending = false;\n }\n return resultAvailable;\n }\n\n // Timing query is disjoint, i.e. results are invalid\n isTimerDisjoint(): boolean {\n return this.gl2.getParameter(GL_GPU_DISJOINT_EXT);\n }\n\n // Returns query result.\n getResult(): any {\n return this.gl2.getQueryParameter(this.handle, GL_QUERY_RESULT);\n }\n\n // Returns the query result, converted to milliseconds to match JavaScript conventions.\n getTimerMilliseconds() {\n return this.getResult() / 1e6;\n }\n\n // Polls the query\n createPoll(limit: number = Number.POSITIVE_INFINITY): Promise<any> {\n if (this._pollingPromise) {\n return this._pollingPromise;\n }\n\n let counter = 0;\n\n this._pollingPromise = new Promise((resolve, reject) => {\n const poll = () => {\n if (this.isResultAvailable()) {\n resolve(this.getResult());\n this._pollingPromise = null;\n } else if (counter++ > limit) {\n reject('Timed out');\n this._pollingPromise = null;\n } else {\n requestAnimationFrame(poll);\n }\n };\n\n requestAnimationFrame(poll);\n });\n\n return this._pollingPromise;\n }\n\n _createHandle() {\n return Query.isSupported(this.gl) ? this.gl2.createQuery() : null;\n }\n\n _deleteHandle() {\n this.gl2.deleteQuery(this.handle);\n }\n}\n"],"file":"query.js"}
@@ -0,0 +1,16 @@
1
+ import GL from '@luma.gl/constants';
2
+ export declare function isRenderbufferFormatSupported(gl: WebGLRenderingContext, format: GL): boolean;
3
+ export declare function getRenderbufferFormatBytesPerPixel(format: GL): number;
4
+ /**
5
+ * @param bpp "bytes per pixel", used for memory usage calculations.
6
+ * @param gl2 requires WebGL2
7
+ * @param ext requires extension
8
+ */
9
+ declare type RenderbufferFormat = {
10
+ bpp: number;
11
+ gl2?: boolean;
12
+ ext?: string;
13
+ };
14
+ declare const RENDERBUFFER_FORMATS: Record<string, RenderbufferFormat>;
15
+ export default RENDERBUFFER_FORMATS;
16
+ //# sourceMappingURL=renderbuffer-formats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderbuffer-formats.d.ts","sourceRoot":"","sources":["../../src/classes/renderbuffer-formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGpC,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,CAa5F;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAErE;AAKD;;;;GAIG;AACH,aAAK,kBAAkB,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,QAAA,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAqD5D,CAAC;AAEF,eAAe,oBAAoB,CAAC"}