@luma.gl/webgl 9.0.0-alpha.5 → 9.0.0-alpha.7

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 (236) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts +11 -1
  2. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  3. package/dist/adapter/converters/device-parameters.js +15 -2
  4. package/dist/adapter/converters/device-parameters.js.map +1 -1
  5. package/dist/adapter/converters/sampler-parameters.d.ts +4 -4
  6. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  7. package/dist/adapter/converters/sampler-parameters.js +21 -2
  8. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  9. package/dist/adapter/converters/texture-formats.js +3 -3
  10. package/dist/adapter/converters/texture-formats.js.map +1 -1
  11. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  12. package/dist/adapter/device-helpers/device-features.js +12 -2
  13. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  14. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  15. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  16. package/dist/adapter/helpers/get-shader-layout.js +40 -16
  17. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  18. package/dist/adapter/helpers/uniforms.d.ts +1 -1
  19. package/dist/adapter/helpers/uniforms.d.ts.map +1 -1
  20. package/dist/adapter/helpers/uniforms.js +4 -4
  21. package/dist/adapter/helpers/uniforms.js.map +1 -1
  22. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +1 -1
  23. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  24. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  25. package/dist/adapter/resources/webgl-buffer.d.ts +1 -1
  26. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  27. package/dist/adapter/resources/webgl-buffer.js +2 -2
  28. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  29. package/dist/adapter/resources/webgl-framebuffer.d.ts +2 -1
  30. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  31. package/dist/adapter/resources/webgl-framebuffer.js +5 -3
  32. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  33. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  34. package/dist/adapter/resources/webgl-render-pass.js +2 -0
  35. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  36. package/dist/adapter/resources/webgl-render-pipeline.d.ts +1 -1
  37. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  38. package/dist/adapter/resources/webgl-render-pipeline.js +40 -24
  39. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  40. package/dist/adapter/resources/webgl-sampler.d.ts +2 -2
  41. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  42. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  43. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  44. package/dist/adapter/resources/webgl-shader.js +4 -3
  45. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  46. package/dist/adapter/resources/webgl-texture.d.ts +19 -19
  47. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  48. package/dist/adapter/resources/webgl-texture.js +14 -13
  49. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  50. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  51. package/dist/adapter/webgl-canvas-context.js +1 -1
  52. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  53. package/dist/adapter/webgl-device.d.ts.map +1 -1
  54. package/dist/adapter/webgl-device.js +13 -4
  55. package/dist/adapter/webgl-device.js.map +1 -1
  56. package/dist/classic/buffer.js +14 -6
  57. package/dist/classic/buffer.js.map +1 -1
  58. package/dist/classic/typed-array-utils.d.ts +1 -1
  59. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  60. package/dist/classic/typed-array-utils.js.map +1 -1
  61. package/dist/context/context/{create-context.d.ts → create-browser-context.d.ts} +1 -1
  62. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  63. package/dist/context/context/{create-context.js → create-browser-context.js} +9 -3
  64. package/dist/context/context/create-browser-context.js.map +1 -0
  65. package/dist/context/context/create-headless-context.d.ts +9 -0
  66. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  67. package/dist/context/context/create-headless-context.js +43 -0
  68. package/dist/context/context/create-headless-context.js.map +1 -0
  69. package/dist/context/context/device-pixels.d.ts.map +1 -1
  70. package/dist/context/context/device-pixels.js +13 -8
  71. package/dist/context/context/device-pixels.js.map +1 -1
  72. package/dist/context/debug/spector.js +1 -1
  73. package/dist/context/debug/spector.js.map +1 -1
  74. package/dist/context/debug/webgl-developer-tools.js +1 -1
  75. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  76. package/dist/context/parameters/unified-parameter-api.d.ts +5 -4
  77. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  78. package/dist/context/parameters/unified-parameter-api.js +1 -3
  79. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  80. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  81. package/dist/context/polyfill/polyfill-table.d.ts +1 -1
  82. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  83. package/dist/context/polyfill/polyfill-table.js +1 -1
  84. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  85. package/dist/context/state-tracker/track-context-state.js +1 -1
  86. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  87. package/dist/es5/adapter/converters/device-parameters.js +17 -2
  88. package/dist/es5/adapter/converters/device-parameters.js.map +1 -1
  89. package/dist/es5/adapter/converters/sampler-parameters.js +21 -2
  90. package/dist/es5/adapter/converters/sampler-parameters.js.map +1 -1
  91. package/dist/es5/adapter/converters/texture-formats.js +3 -3
  92. package/dist/es5/adapter/converters/texture-formats.js.map +1 -1
  93. package/dist/es5/adapter/device-helpers/device-features.js +15 -4
  94. package/dist/es5/adapter/device-helpers/device-features.js.map +1 -1
  95. package/dist/es5/adapter/device-helpers/device-limits.js.map +1 -1
  96. package/dist/es5/adapter/helpers/get-shader-layout.js +48 -28
  97. package/dist/es5/adapter/helpers/get-shader-layout.js.map +1 -1
  98. package/dist/es5/adapter/helpers/uniforms.js +4 -4
  99. package/dist/es5/adapter/helpers/uniforms.js.map +1 -1
  100. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  101. package/dist/es5/adapter/resources/webgl-buffer.js +2 -2
  102. package/dist/es5/adapter/resources/webgl-buffer.js.map +1 -1
  103. package/dist/es5/adapter/resources/webgl-framebuffer.js +4 -3
  104. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +1 -1
  105. package/dist/es5/adapter/resources/webgl-render-pass.js +1 -0
  106. package/dist/es5/adapter/resources/webgl-render-pass.js.map +1 -1
  107. package/dist/es5/adapter/resources/webgl-render-pipeline.js +43 -30
  108. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +1 -1
  109. package/dist/es5/adapter/resources/webgl-sampler.js.map +1 -1
  110. package/dist/es5/adapter/resources/webgl-shader.js +4 -3
  111. package/dist/es5/adapter/resources/webgl-shader.js.map +1 -1
  112. package/dist/es5/adapter/resources/webgl-texture.js +16 -16
  113. package/dist/es5/adapter/resources/webgl-texture.js.map +1 -1
  114. package/dist/es5/adapter/webgl-canvas-context.js +1 -1
  115. package/dist/es5/adapter/webgl-canvas-context.js.map +1 -1
  116. package/dist/es5/adapter/webgl-device.js +14 -4
  117. package/dist/es5/adapter/webgl-device.js.map +1 -1
  118. package/dist/es5/classic/buffer.js +14 -6
  119. package/dist/es5/classic/buffer.js.map +1 -1
  120. package/dist/es5/classic/typed-array-utils.js.map +1 -1
  121. package/dist/es5/context/context/{create-context.js → create-browser-context.js} +9 -3
  122. package/dist/es5/context/context/create-browser-context.js.map +1 -0
  123. package/dist/es5/context/context/create-headless-context.js +60 -0
  124. package/dist/es5/context/context/create-headless-context.js.map +1 -0
  125. package/dist/es5/context/context/device-pixels.js +14 -8
  126. package/dist/es5/context/context/device-pixels.js.map +1 -1
  127. package/dist/es5/context/debug/spector.js +1 -1
  128. package/dist/es5/context/debug/spector.js.map +1 -1
  129. package/dist/es5/context/debug/webgl-developer-tools.js +1 -1
  130. package/dist/es5/context/debug/webgl-developer-tools.js.map +1 -1
  131. package/dist/es5/context/parameters/unified-parameter-api.js +2 -2
  132. package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
  133. package/dist/es5/context/polyfill/polyfill-context.js.map +1 -1
  134. package/dist/es5/context/polyfill/polyfill-table.js +1 -1
  135. package/dist/es5/context/polyfill/polyfill-table.js.map +1 -1
  136. package/dist/es5/context/state-tracker/track-context-state.js +1 -1
  137. package/dist/es5/context/state-tracker/track-context-state.js.map +1 -1
  138. package/dist/es5/index.js +30 -16
  139. package/dist/es5/index.js.map +1 -1
  140. package/dist/es5/types/webgl.js.map +1 -1
  141. package/dist/esm/adapter/converters/device-parameters.js +15 -2
  142. package/dist/esm/adapter/converters/device-parameters.js.map +1 -1
  143. package/dist/esm/adapter/converters/sampler-parameters.js +21 -2
  144. package/dist/esm/adapter/converters/sampler-parameters.js.map +1 -1
  145. package/dist/esm/adapter/converters/texture-formats.js +3 -3
  146. package/dist/esm/adapter/converters/texture-formats.js.map +1 -1
  147. package/dist/esm/adapter/device-helpers/device-features.js +12 -2
  148. package/dist/esm/adapter/device-helpers/device-features.js.map +1 -1
  149. package/dist/esm/adapter/device-helpers/device-limits.js.map +1 -1
  150. package/dist/esm/adapter/helpers/get-shader-layout.js +40 -16
  151. package/dist/esm/adapter/helpers/get-shader-layout.js.map +1 -1
  152. package/dist/esm/adapter/helpers/uniforms.js +4 -4
  153. package/dist/esm/adapter/helpers/uniforms.js.map +1 -1
  154. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  155. package/dist/esm/adapter/resources/webgl-buffer.js +2 -2
  156. package/dist/esm/adapter/resources/webgl-buffer.js.map +1 -1
  157. package/dist/esm/adapter/resources/webgl-framebuffer.js +5 -3
  158. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +1 -1
  159. package/dist/esm/adapter/resources/webgl-render-pass.js +2 -0
  160. package/dist/esm/adapter/resources/webgl-render-pass.js.map +1 -1
  161. package/dist/esm/adapter/resources/webgl-render-pipeline.js +40 -24
  162. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +1 -1
  163. package/dist/esm/adapter/resources/webgl-sampler.js.map +1 -1
  164. package/dist/esm/adapter/resources/webgl-shader.js +4 -3
  165. package/dist/esm/adapter/resources/webgl-shader.js.map +1 -1
  166. package/dist/esm/adapter/resources/webgl-texture.js +14 -13
  167. package/dist/esm/adapter/resources/webgl-texture.js.map +1 -1
  168. package/dist/esm/adapter/webgl-canvas-context.js +1 -1
  169. package/dist/esm/adapter/webgl-canvas-context.js.map +1 -1
  170. package/dist/esm/adapter/webgl-device.js +13 -4
  171. package/dist/esm/adapter/webgl-device.js.map +1 -1
  172. package/dist/esm/classic/buffer.js +14 -6
  173. package/dist/esm/classic/buffer.js.map +1 -1
  174. package/dist/esm/classic/typed-array-utils.js.map +1 -1
  175. package/dist/esm/context/context/{create-context.js → create-browser-context.js} +9 -3
  176. package/dist/esm/context/context/create-browser-context.js.map +1 -0
  177. package/dist/esm/context/context/create-headless-context.js +43 -0
  178. package/dist/esm/context/context/create-headless-context.js.map +1 -0
  179. package/dist/esm/context/context/device-pixels.js +13 -8
  180. package/dist/esm/context/context/device-pixels.js.map +1 -1
  181. package/dist/esm/context/debug/spector.js +1 -1
  182. package/dist/esm/context/debug/spector.js.map +1 -1
  183. package/dist/esm/context/debug/webgl-developer-tools.js +1 -1
  184. package/dist/esm/context/debug/webgl-developer-tools.js.map +1 -1
  185. package/dist/esm/context/parameters/unified-parameter-api.js +1 -3
  186. package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
  187. package/dist/esm/context/polyfill/polyfill-context.js.map +1 -1
  188. package/dist/esm/context/polyfill/polyfill-table.js +1 -1
  189. package/dist/esm/context/polyfill/polyfill-table.js.map +1 -1
  190. package/dist/esm/context/state-tracker/track-context-state.js +1 -1
  191. package/dist/esm/context/state-tracker/track-context-state.js.map +1 -1
  192. package/dist/esm/index.js +3 -2
  193. package/dist/esm/index.js.map +1 -1
  194. package/dist/esm/types/webgl.js.map +1 -1
  195. package/dist/index.d.ts +5 -3
  196. package/dist/index.d.ts.map +1 -1
  197. package/dist/index.js +3 -2
  198. package/dist/index.js.map +1 -1
  199. package/dist/types/webgl.d.ts +3 -3
  200. package/dist/types/webgl.d.ts.map +1 -1
  201. package/dist/types/webgl.js.map +1 -1
  202. package/package.json +4 -4
  203. package/src/adapter/converters/device-parameters.ts +28 -2
  204. package/src/adapter/converters/sampler-parameters.ts +16 -7
  205. package/src/adapter/converters/texture-formats.ts +3 -3
  206. package/src/adapter/device-helpers/device-features.ts +9 -1
  207. package/src/adapter/device-helpers/device-limits.ts +1 -1
  208. package/src/adapter/helpers/get-shader-layout.ts +40 -21
  209. package/src/adapter/helpers/uniforms.ts +21 -10
  210. package/src/adapter/objects/webgl-vertex-array-object.ts +1 -1
  211. package/src/adapter/resources/webgl-buffer.ts +3 -3
  212. package/src/adapter/resources/webgl-framebuffer.ts +6 -3
  213. package/src/adapter/resources/webgl-render-pass.ts +1 -0
  214. package/src/adapter/resources/webgl-render-pipeline.ts +43 -35
  215. package/src/adapter/resources/webgl-sampler.ts +5 -3
  216. package/src/adapter/resources/webgl-shader.ts +5 -4
  217. package/src/adapter/resources/webgl-texture.ts +37 -25
  218. package/src/adapter/webgl-canvas-context.ts +1 -1
  219. package/src/adapter/webgl-device.ts +16 -4
  220. package/src/classic/buffer.ts +7 -7
  221. package/src/classic/typed-array-utils.ts +3 -1
  222. package/src/context/context/{create-context.ts → create-browser-context.ts} +9 -5
  223. package/src/context/context/create-headless-context.ts +48 -0
  224. package/src/context/context/device-pixels.ts +15 -9
  225. package/src/context/debug/spector.ts +1 -1
  226. package/src/context/debug/webgl-developer-tools.ts +1 -1
  227. package/src/context/parameters/unified-parameter-api.ts +12 -9
  228. package/src/context/polyfill/polyfill-context.ts +1 -1
  229. package/src/context/polyfill/polyfill-table.ts +1 -1
  230. package/src/context/state-tracker/track-context-state.ts +1 -1
  231. package/src/index.ts +13 -5
  232. package/src/types/webgl.ts +3 -3
  233. package/dist/context/context/create-context.d.ts.map +0 -1
  234. package/dist/context/context/create-context.js.map +0 -1
  235. package/dist/es5/context/context/create-context.js.map +0 -1
  236. package/dist/esm/context/context/create-context.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/helpers/get-shader-layout.ts"],"names":["GL","isWebGL2","Accessor","decodeUniformType","decodeAttributeType","getVertexFormat","isSamplerUniform","getShaderLayout","gl","program","programBindings","getProgramBindings","shaderLayout","attributes","bindings","attribute","format","accessor","type","FLOAT","size","push","name","location","stepMode","divisor","uniformBlock","uniformBlocks","uniforms","map","uniform","byteOffset","byteStride","arrayLength","visibility","vertex","fragment","minBindingSize","byteLength","textureUnit","viewDimension","sampleType","getSamplerInfo","filter","length","varyings","config","readAttributeBindings","readUniformBindings","readUniformBlocks","readVaryings","Object","seal","count","getProgramParameter","ACTIVE_ATTRIBUTES","index","compositeType","getActiveAttrib","getAttribLocation","glType","components","test","attributeInfo","sort","a","b","gl2","TRANSFORM_FEEDBACK_VARYINGS","getTransformFeedbackVarying","varying","uniformCount","ACTIVE_UNIFORMS","i","rawName","getActiveUniform","isArray","parseUniformName","webglLocation","getUniformLocation","uniformInfo","j","elementName","arrayElementUniformInfo","getBlockParameter","blockIndex","pname","getActiveUniformBlockParameter","blockCount","ACTIVE_UNIFORM_BLOCKS","blockInfo","getActiveUniformBlockName","UNIFORM_BLOCK_BINDING","UNIFORM_BLOCK_DATA_SIZE","UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER","UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER","UNIFORM_BLOCK_ACTIVE_UNIFORMS","uniformIndices","UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES","uniformType","getActiveUniforms","UNIFORM_TYPE","uniformArrayLength","UNIFORM_SIZE","uniformBlockIndex","UNIFORM_BLOCK_INDEX","uniformOffset","UNIFORM_OFFSET","uniformStride","UNIFORM_ARRAY_STRIDE","uniformMatrixStride","UNIFORM_MATRIX_STRIDE","uniformRowMajor","UNIFORM_IS_ROW_MAJOR","matrixStride","rowMajor","SAMPLER_UNIFORMS_GL_TO_GPU","SAMPLER_2D","SAMPLER_CUBE","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","sampler","UNIFORM_NAME_REGEXP","matches","match","Error","Boolean"],"mappings":"AAWA,OAAOA,EAAP,MAAe,oBAAf;AACA,SAAQC,QAAR,QAAuB,oCAAvB;AACA,OAAOC,QAAP,MAAqB,wBAArB;AACA,SAAQC,iBAAR,EAA2BC,mBAA3B,QAAqD,YAArD;AACA,SAAQC,eAAR,QAA8B,8BAA9B;AACA,SAAQC,gBAAR,QAA+B,YAA/B;AAMA,OAAO,SAASC,eAAT,CAAyBC,EAAzB,EAAoDC,OAApD,EAAyF;AAAA;;AAC9F,QAAMC,eAAe,GAAGC,kBAAkB,CAACH,EAAD,EAAKC,OAAL,CAA1C;AAEA,QAAMG,YAA0B,GAAG;AACjCC,IAAAA,UAAU,EAAE,EADqB;AAEjCC,IAAAA,QAAQ,EAAE;AAFuB,GAAnC;;AAKA,OAAK,MAAMC,SAAX,IAAwBL,eAAe,CAACG,UAAxC,EAAoD;AAClD,UAAMG,MAAM,GAEVX,eAAe,CAACU,SAAS,CAACE,QAAV,CAAmBC,IAAnB,IAA2BlB,EAAE,CAACmB,KAA/B,EAAsCJ,SAAS,CAACE,QAAV,CAAmBG,IAAzD,CAFjB;AAGAR,IAAAA,YAAY,CAACC,UAAb,CAAwBQ,IAAxB,CAA6B;AAC3BC,MAAAA,IAAI,EAAEP,SAAS,CAACO,IADW;AAE3BC,MAAAA,QAAQ,EAAER,SAAS,CAACQ,QAFO;AAG3BP,MAAAA,MAH2B;AAI3BQ,MAAAA,QAAQ,EAAET,SAAS,CAACE,QAAV,CAAmBQ,OAAnB,KAA+B,CAA/B,GAAmC,UAAnC,GAAgD;AAJ/B,KAA7B;AAMD;;AAGD,OAAK,MAAMC,YAAX,IAA2BhB,eAAe,CAACiB,aAA3C,EAA0D;AACxD,UAAMC,QAAQ,GAAGF,YAAY,CAACE,QAAb,CAAsBC,GAAtB,CAA2BC,OAAD,KAAc;AACvDR,MAAAA,IAAI,EAAEQ,OAAO,CAACR,IADyC;AAEvDN,MAAAA,MAAM,EAAEc,OAAO,CAACd,MAFuC;AAGvDe,MAAAA,UAAU,EAAED,OAAO,CAACC,UAHmC;AAIvDC,MAAAA,UAAU,EAAEF,OAAO,CAACE,UAJmC;AAKvDC,MAAAA,WAAW,EAAEH,OAAO,CAACG;AALkC,KAAd,CAA1B,CAAjB;AAOArB,IAAAA,YAAY,CAACE,QAAb,CAAsBO,IAAtB,CAA2B;AACzBH,MAAAA,IAAI,EAAE,SADmB;AAEzBI,MAAAA,IAAI,EAAEI,YAAY,CAACJ,IAFM;AAGzBC,MAAAA,QAAQ,EAAEG,YAAY,CAACH,QAHE;AAIzBW,MAAAA,UAAU,EAAE,CAACR,YAAY,CAACS,MAAb,GAAsB,GAAtB,GAA4B,CAA7B,KAAmCT,YAAY,CAACU,QAAb,GAAwB,GAAxB,GAA8B,CAAjE,CAJa;AAKzBC,MAAAA,cAAc,EAAEX,YAAY,CAACY,UALJ;AAMzBV,MAAAA;AANyB,KAA3B;AAQD;;AAED,MAAIW,WAAW,GAAG,CAAlB;;AACA,OAAK,MAAMT,OAAX,IAAsBpB,eAAe,CAACkB,QAAtC,EAAgD;AAC9C,QAAItB,gBAAgB,CAACwB,OAAO,CAACZ,IAAT,CAApB,EAAoC;AAClC,YAAM;AAACsB,QAAAA,aAAD;AAAgBC,QAAAA;AAAhB,UAA8BC,cAAc,CAACZ,OAAO,CAACZ,IAAT,CAAlD;AACAN,MAAAA,YAAY,CAACE,QAAb,CAAsBO,IAAtB,CAA2B;AACzBH,QAAAA,IAAI,EAAE,SADmB;AAEzBI,QAAAA,IAAI,EAAEQ,OAAO,CAACR,IAFW;AAGzBC,QAAAA,QAAQ,EAAEgB,WAHe;AAIzBC,QAAAA,aAJyB;AAKzBC,QAAAA;AALyB,OAA3B;AASAX,MAAAA,OAAO,CAACS,WAAR,GAAsBA,WAAtB;AACAA,MAAAA,WAAW,IAAI,CAAf;AACD;AACF;;AAED,QAAMX,QAAQ,GAAG,0BAAAlB,eAAe,CAACkB,QAAhB,gFAA0Be,MAA1B,CAAkCb,OAAD,IAAaA,OAAO,CAACP,QAAR,KAAqB,IAAnE,MAA4E,EAA7F;;AACA,MAAIK,QAAQ,CAACgB,MAAb,EAAqB;AACnBhC,IAAAA,YAAY,CAACgB,QAAb,GAAwBA,QAAxB;AACD;;AACD,+BAAIlB,eAAe,CAACmC,QAApB,kDAAI,sBAA0BD,MAA9B,EAAsC;AACpChC,IAAAA,YAAY,CAACiC,QAAb,GAAwBnC,eAAe,CAACmC,QAAxC;AACD;;AAED,SAAOjC,YAAP;AACD;AAOD,OAAO,SAASD,kBAAT,CACLH,EADK,EAELC,OAFK,EAGY;AACjB,QAAMqC,MAAuB,GAAG;AAC9BjC,IAAAA,UAAU,EAAEkC,qBAAqB,CAACvC,EAAD,EAAKC,OAAL,CADH;AAE9BmB,IAAAA,QAAQ,EAAEoB,mBAAmB,CAACxC,EAAD,EAAKC,OAAL,CAFC;AAG9BkB,IAAAA,aAAa,EAAEsB,iBAAiB,CAACzC,EAAD,EAAKC,OAAL,CAHF;AAI9BoC,IAAAA,QAAQ,EAAEK,YAAY,CAAC1C,EAAD,EAAKC,OAAL;AAJQ,GAAhC;AAOA0C,EAAAA,MAAM,CAACC,IAAP,CAAYN,MAAZ;AACA,SAAOA,MAAP;AAED;;AAOD,SAASC,qBAAT,CACEvC,EADF,EAEEC,OAFF,EAGsB;AACpB,QAAMI,UAA8B,GAAG,EAAvC;AAEA,QAAMwC,KAAK,GAAG7C,EAAE,CAAC8C,mBAAH,CAAuB7C,OAAvB,EAAgCD,EAAE,CAAC+C,iBAAnC,CAAd;;AAEA,OAAK,IAAIC,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGH,KAA5B,EAAmCG,KAAK,EAAxC,EAA4C;AAC1C,UAAM;AAAClC,MAAAA,IAAD;AAAOJ,MAAAA,IAAI,EAAEuC,aAAb;AAA4BrC,MAAAA;AAA5B,QAAoCZ,EAAE,CAACkD,eAAH,CAAmBjD,OAAnB,EAA4B+C,KAA5B,CAA1C;AACA,UAAMjC,QAAQ,GAAGf,EAAE,CAACmD,iBAAH,CAAqBlD,OAArB,EAA8Ba,IAA9B,CAAjB;;AAGA,QAAIC,QAAQ,IAAI,CAAhB,EAAmB;AACjB,YAAM;AAACqC,QAAAA,MAAD;AAASC,QAAAA;AAAT,UAAuBzD,mBAAmB,CAACqD,aAAD,CAAhD;AACA,YAAMxC,QAAwB,GAAG;AAACC,QAAAA,IAAI,EAAE0C,MAAP;AAAexC,QAAAA,IAAI,EAAEA,IAAI,GAAGyC;AAA5B,OAAjC;;AAEA,UAAI,YAAYC,IAAZ,CAAiBxC,IAAjB,CAAJ,EAA4B;AAC1BL,QAAAA,QAAQ,CAACQ,OAAT,GAAmB,CAAnB;AACD;;AACD,YAAMsC,aAAa,GAAG;AAACxC,QAAAA,QAAD;AAAWD,QAAAA,IAAX;AAAiBL,QAAAA,QAAQ,EAAE,IAAIf,QAAJ,CAAae,QAAb;AAA3B,OAAtB;AACAJ,MAAAA,UAAU,CAACQ,IAAX,CAAgB0C,aAAhB;AACD;AACF;;AAEDlD,EAAAA,UAAU,CAACmD,IAAX,CAAgB,CAACC,CAAD,EAAsBC,CAAtB,KAA8CD,CAAC,CAAC1C,QAAF,GAAa2C,CAAC,CAAC3C,QAA7E;AACA,SAAOV,UAAP;AACD;;AAOD,SAASqC,YAAT,CAAsB1C,EAAtB,EAAiDC,OAAjD,EAA0F;AACxF,MAAI,CAACR,QAAQ,CAACO,EAAD,CAAb,EAAmB;AACjB,WAAO,EAAP;AACD;;AACD,QAAM2D,GAAG,GAAG3D,EAAZ;AAEA,QAAMqC,QAA0B,GAAG,EAAnC;AAEA,QAAMQ,KAAK,GAAG7C,EAAE,CAAC8C,mBAAH,CAAuB7C,OAAvB,EAAgCT,EAAE,CAACoE,2BAAnC,CAAd;;AACA,OAAK,IAAI7C,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAG8B,KAAlC,EAAyC9B,QAAQ,EAAjD,EAAqD;AACnD,UAAM;AAACD,MAAAA,IAAD;AAAOJ,MAAAA,IAAI,EAAEuC,aAAb;AAA4BrC,MAAAA;AAA5B,QAAoC+C,GAAG,CAACE,2BAAJ,CAAgC5D,OAAhC,EAAyCc,QAAzC,CAA1C;AACA,UAAM;AAACqC,MAAAA,MAAD;AAASC,MAAAA;AAAT,QAAuB1D,iBAAiB,CAACsD,aAAD,CAA9C;AACA,UAAMxC,QAAQ,GAAG,IAAIf,QAAJ,CAAa;AAACgB,MAAAA,IAAI,EAAE0C,MAAP;AAAexC,MAAAA,IAAI,EAAEA,IAAI,GAAGyC;AAA5B,KAAb,CAAjB;AACA,UAAMS,OAAO,GAAG;AAAC/C,MAAAA,QAAD;AAAWD,MAAAA,IAAX;AAAiBL,MAAAA;AAAjB,KAAhB;AACA4B,IAAAA,QAAQ,CAACxB,IAAT,CAAciD,OAAd;AACD;;AAEDzB,EAAAA,QAAQ,CAACmB,IAAT,CAAc,CAACC,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAAC1C,QAAF,GAAa2C,CAAC,CAAC3C,QAAvC;AACA,SAAOsB,QAAP;AACD;;AAOD,SAASG,mBAAT,CAA6BxC,EAA7B,EAAwDC,OAAxD,EAAiG;AAC/F,QAAMmB,QAA0B,GAAG,EAAnC;AAEA,QAAM2C,YAAY,GAAG/D,EAAE,CAAC8C,mBAAH,CAAuB7C,OAAvB,EAAgCT,EAAE,CAACwE,eAAnC,CAArB;;AACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,YAApB,EAAkCE,CAAC,EAAnC,EAAuC;AACrC,UAAM;AAACnD,MAAAA,IAAI,EAAEoD,OAAP;AAAgBtD,MAAAA,IAAhB;AAAsBF,MAAAA;AAAtB,QAA8BV,EAAE,CAACmE,gBAAH,CAAoBlE,OAApB,EAA6BgE,CAA7B,CAApC;AACA,UAAM;AAACnD,MAAAA,IAAD;AAAOsD,MAAAA;AAAP,QAAkBC,gBAAgB,CAACH,OAAD,CAAxC;AACA,QAAII,aAAa,GAAGtE,EAAE,CAACuE,kBAAH,CAAsBtE,OAAtB,EAA+Ba,IAA/B,CAApB;AACA,UAAM0D,WAAW,GAAG;AAElBzD,MAAAA,QAAQ,EAAEuD,aAFQ;AAGlBxD,MAAAA,IAHkB;AAIlBF,MAAAA,IAJkB;AAKlBF,MAAAA,IALkB;AAMlB0D,MAAAA;AANkB,KAApB;AAQAhD,IAAAA,QAAQ,CAACP,IAAT,CAAc2D,WAAd;;AAGA,QAAIA,WAAW,CAAC5D,IAAZ,GAAmB,CAAvB,EAA0B;AACxB,WAAK,IAAI6D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,WAAW,CAAC5D,IAAhC,EAAsC6D,CAAC,EAAvC,EAA2C;AACzC,cAAMC,WAAW,aAAM5D,IAAN,cAAc2D,CAAd,MAAjB;AAEAH,QAAAA,aAAa,GAAGtE,EAAE,CAACuE,kBAAH,CAAsBtE,OAAtB,EAA+ByE,WAA/B,CAAhB;AAEA,cAAMC,uBAAuB,GAAG,EAC9B,GAAGH,WAD2B;AAE9B1D,UAAAA,IAAI,EAAE4D,WAFwB;AAG9B3D,UAAAA,QAAQ,EAAEuD;AAHoB,SAAhC;AAMAlD,QAAAA,QAAQ,CAACP,IAAT,CAAc8D,uBAAd;AACD;AACF;AACF;;AACD,SAAOvD,QAAP;AACD;;AAQD,SAASqB,iBAAT,CACEzC,EADF,EAEEC,OAFF,EAGyB;AACvB,MAAI,CAACR,QAAQ,CAACO,EAAD,CAAb,EAAmB;AACjB,WAAO,EAAP;AACD;;AACD,QAAM2D,GAAG,GAAG3D,EAAZ;;AAEA,QAAM4E,iBAAiB,GAAG,CAACC,UAAD,EAAqBC,KAArB,KACxBnB,GAAG,CAACoB,8BAAJ,CAAmC9E,OAAnC,EAA4C4E,UAA5C,EAAwDC,KAAxD,CADF;;AAGA,QAAM3D,aAAoC,GAAG,EAA7C;AAEA,QAAM6D,UAAU,GAAGrB,GAAG,CAACb,mBAAJ,CAAwB7C,OAAxB,EAAiCT,EAAE,CAACyF,qBAApC,CAAnB;;AACA,OAAK,IAAIJ,UAAU,GAAG,CAAtB,EAAyBA,UAAU,GAAGG,UAAtC,EAAkDH,UAAU,EAA5D,EAAgE;AAC9D,UAAMK,SAAS,GAAG;AAChBpE,MAAAA,IAAI,EAAE6C,GAAG,CAACwB,yBAAJ,CAA8BlF,OAA9B,EAAuC4E,UAAvC,CADU;AAEhB9D,MAAAA,QAAQ,EAAE6D,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAAC4F,qBAAhB,CAFX;AAGhBtD,MAAAA,UAAU,EAAE8C,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAAC6F,uBAAhB,CAHb;AAIhB1D,MAAAA,MAAM,EAAEiD,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAAC8F,yCAAhB,CAJT;AAKhB1D,MAAAA,QAAQ,EAAEgD,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAAC+F,2CAAhB,CALX;AAMhBxB,MAAAA,YAAY,EAAEa,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAACgG,6BAAhB,CANf;AAOhBpE,MAAAA,QAAQ,EAAE;AAPM,KAAlB;AAUA,UAAMqE,cAAc,GAAGb,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAACkG,oCAAhB,CAAxC;AAEA,UAAMC,WAAW,GAAGhC,GAAG,CAACiC,iBAAJ,CAAsB3F,OAAtB,EAA+BwF,cAA/B,EAA+CjG,EAAE,CAACqG,YAAlD,CAApB;AACA,UAAMC,kBAAkB,GAAGnC,GAAG,CAACiC,iBAAJ,CAAsB3F,OAAtB,EAA+BwF,cAA/B,EAA+CjG,EAAE,CAACuG,YAAlD,CAA3B;AACA,UAAMC,iBAAiB,GAAGrC,GAAG,CAACiC,iBAAJ,CACxB3F,OADwB,EAExBwF,cAFwB,EAGxBjG,EAAE,CAACyG,mBAHqB,CAA1B;AAKA,UAAMC,aAAa,GAAGvC,GAAG,CAACiC,iBAAJ,CAAsB3F,OAAtB,EAA+BwF,cAA/B,EAA+CjG,EAAE,CAAC2G,cAAlD,CAAtB;AACA,UAAMC,aAAa,GAAGzC,GAAG,CAACiC,iBAAJ,CAAsB3F,OAAtB,EAA+BwF,cAA/B,EAA+CjG,EAAE,CAAC6G,oBAAlD,CAAtB;AACA,UAAMC,mBAAmB,GAAG3C,GAAG,CAACiC,iBAAJ,CAC1B3F,OAD0B,EAE1BwF,cAF0B,EAG1BjG,EAAE,CAAC+G,qBAHuB,CAA5B;AAKA,UAAMC,eAAe,GAAG7C,GAAG,CAACiC,iBAAJ,CAAsB3F,OAAtB,EAA+BwF,cAA/B,EAA+CjG,EAAE,CAACiH,oBAAlD,CAAxB;;AACA,SAAK,IAAIxC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiB,SAAS,CAACnB,YAA9B,EAA4C,EAAEE,CAA9C,EAAiD;AAC/CiB,MAAAA,SAAS,CAAC9D,QAAV,CAAmBP,IAAnB,CAAwB;AACtBC,QAAAA,IAAI,EAAE6C,GAAG,CAACQ,gBAAJ,CAAqBlE,OAArB,EAA8BwF,cAAc,CAACxB,CAAD,CAA5C,EAAiDnD,IADjC;AAEtBN,QAAAA,MAAM,EAAEb,iBAAiB,CAACgG,WAAW,CAAC1B,CAAD,CAAZ,CAAjB,CAAkCzD,MAFpB;AAGtBE,QAAAA,IAAI,EAAEiF,WAAW,CAAC1B,CAAD,CAHK;AAItBxC,QAAAA,WAAW,EAAEqE,kBAAkB,CAAC7B,CAAD,CAJT;AAKtB1C,QAAAA,UAAU,EAAE2E,aAAa,CAACjC,CAAD,CALH;AAMtBzC,QAAAA,UAAU,EAAE4E,aAAa,CAACnC,CAAD,CANH;AAOtByC,QAAAA,YAAY,EAAEN,aAAa,CAACnC,CAAD,CAPL;AAQtB0C,QAAAA,QAAQ,EAAEH,eAAe,CAACvC,CAAD;AARH,OAAxB;AAUD;;AAED9C,IAAAA,aAAa,CAACN,IAAd,CAAmBqE,SAAnB;AACD;;AAED/D,EAAAA,aAAa,CAACqC,IAAd,CAAmB,CAACC,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAAC1C,QAAF,GAAa2C,CAAC,CAAC3C,QAA5C;AACA,SAAOI,aAAP;AACD;;AAED,MAAMyF,0BAML,GAAG;AACF,GAACpH,EAAE,CAACqH,UAAJ,GAAiB,CAAC,IAAD,EAAO,OAAP,CADf;AAEF,GAACrH,EAAE,CAACsH,YAAJ,GAAmB,CAAC,MAAD,EAAS,OAAT,CAFjB;AAGF,GAACtH,EAAE,CAACuH,UAAJ,GAAiB,CAAC,IAAD,EAAO,OAAP,CAHf;AAIF,GAACvH,EAAE,CAACwH,iBAAJ,GAAwB,CAAC,IAAD,EAAO,OAAP,CAJtB;AAKF,GAACxH,EAAE,CAACyH,gBAAJ,GAAuB,CAAC,UAAD,EAAa,OAAb,CALrB;AAMF,GAACzH,EAAE,CAAC0H,uBAAJ,GAA8B,CAAC,UAAD,EAAa,OAAb,CAN5B;AAOF,GAAC1H,EAAE,CAAC2H,mBAAJ,GAA0B,CAAC,MAAD,EAAS,OAAT,CAPxB;AAQF,GAAC3H,EAAE,CAAC4H,cAAJ,GAAqB,CAAC,IAAD,EAAO,MAAP,CARnB;AASF,GAAC5H,EAAE,CAAC6H,cAAJ,GAAqB,CAAC,IAAD,EAAO,MAAP,CATnB;AAUF,GAAC7H,EAAE,CAAC8H,gBAAJ,GAAuB,CAAC,MAAD,EAAS,MAAT,CAVrB;AAWF,GAAC9H,EAAE,CAAC+H,oBAAJ,GAA2B,CAAC,UAAD,EAAa,MAAb,CAXzB;AAYF,GAAC/H,EAAE,CAACgI,uBAAJ,GAA8B,CAAC,IAAD,EAAO,MAAP,CAZ5B;AAaF,GAAChI,EAAE,CAACiI,uBAAJ,GAA8B,CAAC,IAAD,EAAO,MAAP,CAb5B;AAcF,GAACjI,EAAE,CAACkI,yBAAJ,GAAgC,CAAC,MAAD,EAAS,MAAT,CAd9B;AAeF,GAAClI,EAAE,CAACmI,6BAAJ,GAAoC,CAAC,UAAD,EAAa,MAAb;AAflC,CANJ;;AAwBA,SAASzF,cAAT,CAAwBxB,IAAxB,EAKc;AACZ,MAAIkH,OAAO,GAAGhB,0BAA0B,CAAClG,IAAD,CAAxC;;AACA,MAAIkH,OAAJ,EAAa;AACX,UAAM,CAAC5F,aAAD,EAAgBC,UAAhB,IAA8B2F,OAApC;AACA,WAAO;AAAC5F,MAAAA,aAAD;AAAgBC,MAAAA;AAAhB,KAAP;AACD;;AACD,SAAO,IAAP;AACD;;AAID,SAASoC,gBAAT,CAA0BvD,IAA1B,EAA0F;AAExF,MAAIA,IAAI,CAACA,IAAI,CAACsB,MAAL,GAAc,CAAf,CAAJ,KAA0B,GAA9B,EAAmC;AACjC,WAAO;AACLtB,MAAAA,IADK;AAELsB,MAAAA,MAAM,EAAE,CAFH;AAGLgC,MAAAA,OAAO,EAAE;AAHJ,KAAP;AAKD;;AAGD,QAAMyD,mBAAmB,GAAG,sBAA5B;AACA,QAAMC,OAAO,GAAGhH,IAAI,CAACiH,KAAL,CAAWF,mBAAX,CAAhB;;AACA,MAAI,CAACC,OAAD,IAAYA,OAAO,CAAC1F,MAAR,GAAiB,CAAjC,EAAoC;AAClC,UAAM,IAAI4F,KAAJ,6CAA+ClH,IAA/C,EAAN;AACD;;AAED,SAAO;AACLA,IAAAA,IAAI,EAAEgH,OAAO,CAAC,CAAD,CADR;AAEL1F,IAAAA,MAAM,EAAE0F,OAAO,CAAC,CAAD,CAAP,GAAa,CAAb,GAAiB,CAFpB;AAGL1D,IAAAA,OAAO,EAAE6D,OAAO,CAACH,OAAO,CAAC,CAAD,CAAR;AAHX,GAAP;AAKD","sourcesContent":["import {\n ShaderLayout,\n BindingLayout,\n UniformBinding,\n UniformBlockBinding,\n ProgramBindings,\n AttributeBinding,\n VaryingBinding,\n AttributeLayout,\n AccessorObject\n} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\nimport Accessor from '../../classic/accessor'; // TODO - should NOT depend on classic API\nimport {decodeUniformType, decodeAttributeType} from './uniforms';\nimport {getVertexFormat} from '../converters/vertex-formats';\nimport {isSamplerUniform} from './uniforms';\n/**\n * Extract metadata describing binding information for a program's shaders\n * Note: `linkProgram()` needs to have been called\n * (although linking does not need to have been successful).\n */\nexport function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram): ShaderLayout {\n const programBindings = getProgramBindings(gl, program);\n\n const shaderLayout: ShaderLayout = {\n attributes: [],\n bindings: []\n };\n\n for (const attribute of programBindings.attributes) {\n const format =\n // attribute.accessor.format ||\n getVertexFormat(attribute.accessor.type || GL.FLOAT, attribute.accessor.size);\n shaderLayout.attributes.push({\n name: attribute.name,\n location: attribute.location,\n format,\n stepMode: attribute.accessor.divisor === 1 ? 'instance' : 'vertex'\n });\n }\n\n // Uniform blocks\n for (const uniformBlock of programBindings.uniformBlocks) {\n const uniforms = uniformBlock.uniforms.map((uniform) => ({\n name: uniform.name,\n format: uniform.format,\n byteOffset: uniform.byteOffset,\n byteStride: uniform.byteStride,\n arrayLength: uniform.arrayLength\n }));\n shaderLayout.bindings.push({\n type: 'uniform',\n name: uniformBlock.name,\n location: uniformBlock.location,\n visibility: (uniformBlock.vertex ? 0x1 : 0) & (uniformBlock.fragment ? 0x2 : 0),\n minBindingSize: uniformBlock.byteLength,\n uniforms\n });\n }\n\n let textureUnit = 0;\n for (const uniform of programBindings.uniforms) {\n if (isSamplerUniform(uniform.type)) {\n const {viewDimension, sampleType} = getSamplerInfo(uniform.type);\n shaderLayout.bindings.push({\n type: 'texture',\n name: uniform.name,\n location: textureUnit,\n viewDimension,\n sampleType\n });\n\n // @ts-expect-error\n uniform.textureUnit = textureUnit;\n textureUnit += 1;\n }\n }\n\n const uniforms = programBindings.uniforms?.filter((uniform) => uniform.location !== null) || [];\n if (uniforms.length) {\n shaderLayout.uniforms = uniforms;\n }\n if (programBindings.varyings?.length) {\n shaderLayout.varyings = programBindings.varyings;\n }\n\n return shaderLayout;\n}\n\n/**\n * Extract metadata describing binding information for a program's shaders\n * Note: `linkProgram()` needs to have been called\n * (although linking does not need to have been successful).\n */\nexport function getProgramBindings(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): ProgramBindings {\n const config: ProgramBindings = {\n attributes: readAttributeBindings(gl, program),\n uniforms: readUniformBindings(gl, program),\n uniformBlocks: readUniformBlocks(gl, program),\n varyings: readVaryings(gl, program)\n };\n\n Object.seal(config);\n return config;\n // generateWebGPUStyleBindings(bindings);\n}\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readAttributeBindings(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): AttributeBinding[] {\n const attributes: AttributeBinding[] = [];\n\n const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n\n for (let index = 0; index < count; index++) {\n const {name, type: compositeType, size} = gl.getActiveAttrib(program, index);\n const location = gl.getAttribLocation(program, name);\n // Add only user provided attributes, for built-in attributes like\n // `gl_InstanceID` locaiton will be < 0\n if (location >= 0) {\n const {glType, components} = decodeAttributeType(compositeType);\n const accessor: AccessorObject = {type: glType, size: size * components};\n // Any attribute name containing the word \"instance\" will be assumed to be instanced\n if (/instance/i.test(name)) {\n accessor.divisor = 1;\n }\n const attributeInfo = {location, name, accessor: new Accessor(accessor)}; // Base values\n attributes.push(attributeInfo);\n }\n }\n\n attributes.sort((a: AttributeBinding, b: AttributeBinding) => a.location - b.location);\n return attributes;\n}\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readVaryings(gl: WebGLRenderingContext, program: WebGLProgram): VaryingBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const varyings: VaryingBinding[] = [];\n\n const count = gl.getProgramParameter(program, GL.TRANSFORM_FEEDBACK_VARYINGS);\n for (let location = 0; location < count; location++) {\n const {name, type: compositeType, size} = gl2.getTransformFeedbackVarying(program, location);\n const {glType, components} = decodeUniformType(compositeType);\n const accessor = new Accessor({type: glType, size: size * components});\n const varying = {location, name, accessor}; // Base values\n varyings.push(varying);\n }\n\n varyings.sort((a, b) => a.location - b.location);\n return varyings;\n}\n\n/**\n * Extract info about all uniforms\n *\n * Query uniform locations and build name to setter map.\n */\nfunction readUniformBindings(gl: WebGLRenderingContext, program: WebGLProgram): UniformBinding[] {\n const uniforms: UniformBinding[] = [];\n\n const uniformCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORMS);\n for (let i = 0; i < uniformCount; i++) {\n const {name: rawName, size, type} = gl.getActiveUniform(program, i);\n const {name, isArray} = parseUniformName(rawName);\n let webglLocation = gl.getUniformLocation(program, name);\n const uniformInfo = {\n // WebGL locations are uniquely typed but just numbers\n location: webglLocation as number,\n name,\n size,\n type,\n isArray\n };\n uniforms.push(uniformInfo);\n\n // Array (e.g. matrix) uniforms can occupy several 4x4 byte banks\n if (uniformInfo.size > 1) {\n for (let j = 0; j < uniformInfo.size; j++) {\n const elementName = `${name}[${j}]`;\n\n webglLocation = gl.getUniformLocation(program, elementName);\n\n const arrayElementUniformInfo = {\n ...uniformInfo,\n name: elementName,\n location: webglLocation as number\n };\n\n uniforms.push(arrayElementUniformInfo);\n }\n }\n }\n return uniforms;\n}\n\n/**\n * Extract info about all \"active\" uniform blocks\n *\n * (\"Active\" just means that unused (aka inactive) blocks may have been\n * optimized away during linking)\n */\nfunction readUniformBlocks(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): UniformBlockBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const getBlockParameter = (blockIndex: number, pname: GL): any =>\n gl2.getActiveUniformBlockParameter(program, blockIndex, pname);\n\n const uniformBlocks: UniformBlockBinding[] = [];\n\n const blockCount = gl2.getProgramParameter(program, GL.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {\n const blockInfo = {\n name: gl2.getActiveUniformBlockName(program, blockIndex),\n location: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_BINDING),\n byteLength: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_DATA_SIZE),\n vertex: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n fragment: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n uniformCount: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n uniforms: [] as any[]\n };\n\n const uniformIndices = getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES);\n\n const uniformType = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_TYPE); // Array of GLenum indicating the types of the uniforms.\n const uniformArrayLength = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_SIZE); // Array of GLuint indicating the sizes of the uniforms.\n const uniformBlockIndex = gl2.getActiveUniforms(\n program,\n uniformIndices,\n GL.UNIFORM_BLOCK_INDEX\n ); // Array of GLint indicating the block indices of the uniforms.\n const uniformOffset = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_OFFSET); // Array of GLint indicating the uniform buffer offsets.\n const uniformStride = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_ARRAY_STRIDE); // Array of GLint indicating the strides between the elements.\n const uniformMatrixStride = gl2.getActiveUniforms(\n program,\n uniformIndices,\n GL.UNIFORM_MATRIX_STRIDE\n ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.\n const uniformRowMajor = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);\n for (let i = 0; i < blockInfo.uniformCount; ++i) {\n blockInfo.uniforms.push({\n name: gl2.getActiveUniform(program, uniformIndices[i]).name,\n format: decodeUniformType(uniformType[i]).format,\n type: uniformType[i],\n arrayLength: uniformArrayLength[i],\n byteOffset: uniformOffset[i],\n byteStride: uniformStride[i],\n matrixStride: uniformStride[i],\n rowMajor: uniformRowMajor[i]\n });\n }\n\n uniformBlocks.push(blockInfo);\n }\n\n uniformBlocks.sort((a, b) => a.location - b.location);\n return uniformBlocks;\n}\n\nconst SAMPLER_UNIFORMS_GL_TO_GPU: Record<\n number,\n [\n '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d',\n 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint'\n ]\n> = {\n [GL.SAMPLER_2D]: ['2d', 'float'],\n [GL.SAMPLER_CUBE]: ['cube', 'float'],\n [GL.SAMPLER_3D]: ['3d', 'float'],\n [GL.SAMPLER_2D_SHADOW]: ['3d', 'depth'],\n [GL.SAMPLER_2D_ARRAY]: ['2d-array', 'float'],\n [GL.SAMPLER_2D_ARRAY_SHADOW]: ['2d-array', 'depth'],\n [GL.SAMPLER_CUBE_SHADOW]: ['cube', 'float'],\n [GL.INT_SAMPLER_2D]: ['2d', 'sint'],\n [GL.INT_SAMPLER_3D]: ['3d', 'sint'],\n [GL.INT_SAMPLER_CUBE]: ['cube', 'sint'],\n [GL.INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D]: ['2d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_3D]: ['3d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: ['cube', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint']\n};\n\nfunction getSamplerInfo(type: GL):\n | {\n viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';\n sampleType: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';\n }\n | undefined {\n let sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];\n if (sampler) {\n const [viewDimension, sampleType] = sampler;\n return {viewDimension, sampleType};\n }\n return null;\n}\n\n// HELPERS\n\nfunction parseUniformName(name: string): {name: string; length: number; isArray: boolean} {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: matches[2] ? 1 : 0,\n isArray: Boolean(matches[2])\n };\n}\n\n/**\n * TODO - verify this is a copy of above and delete\n * import type {TextureFormat} from '@luma.gl/api';\n* Extract info about all \"active\" uniform blocks\n * (\"Active\" just means that unused (inactive) blocks may have been optimized away during linking)\n *\n function getUniformBlockBindings(gl, program): Binding[] {\n if (!isWebGL2(gl)) {\n return;\n }\n const bindings: Binding[] = [];\n const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < count; blockIndex++) {\n const vertex = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n const fragment = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n const visibility = (vertex) + (fragment);\n const binding: BufferBinding = {\n location: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_BINDING),\n // name: gl.getActiveUniformBlockName(program, blockIndex),\n type: 'uniform',\n visibility,\n minBindingSize: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE),\n // uniformCount: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n // uniformIndices: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),\n }\n bindings.push(binding);\n }\n return bindings;\n}\n\nfunction setBindings(gl2: WebGL2RenderingContext, program: WebGLProgram, bindings: Binding[][]): void {\n for (const bindGroup of bindings) {\n for (const binding of bindGroup) {\n\n }\n }\n\n // Set up indirection table\n // this.gl2.uniformBlockBinding(this.handle, blockIndex, blockBinding);\n}\n */\n"],"file":"get-shader-layout.js"}
1
+ {"version":3,"sources":["../../../../src/adapter/helpers/get-shader-layout.ts"],"names":["GL","isWebGL2","Accessor","decodeUniformType","decodeAttributeType","getVertexFormat","isSamplerUniform","getShaderLayout","gl","program","programBindings","getProgramBindings","shaderLayout","attributes","bindings","attribute","format","accessor","type","FLOAT","size","push","name","location","stepMode","divisor","uniformBlock","uniformBlocks","uniforms","map","uniform","byteOffset","byteStride","arrayLength","visibility","vertex","fragment","minBindingSize","byteLength","textureUnit","viewDimension","sampleType","getSamplerInfo","filter","length","varyings","config","readAttributeBindings","readUniformBindings","readUniformBlocks","readVaryings","Object","seal","count","getProgramParameter","ACTIVE_ATTRIBUTES","index","activeInfo","getActiveAttrib","Error","compositeType","getAttribLocation","glType","components","test","attributeInfo","sort","a","b","gl2","TRANSFORM_FEEDBACK_VARYINGS","getTransformFeedbackVarying","varying","uniformCount","ACTIVE_UNIFORMS","i","getActiveUniform","rawName","isArray","parseUniformName","webglLocation","getUniformLocation","uniformInfo","j","elementName","arrayElementUniformInfo","getBlockParameter","blockIndex","pname","getActiveUniformBlockParameter","blockCount","ACTIVE_UNIFORM_BLOCKS","blockInfo","getActiveUniformBlockName","UNIFORM_BLOCK_BINDING","UNIFORM_BLOCK_DATA_SIZE","UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER","UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER","UNIFORM_BLOCK_ACTIVE_UNIFORMS","uniformIndices","UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES","uniformType","getActiveUniforms","UNIFORM_TYPE","uniformArrayLength","UNIFORM_SIZE","uniformBlockIndex","UNIFORM_BLOCK_INDEX","uniformOffset","UNIFORM_OFFSET","uniformStride","UNIFORM_ARRAY_STRIDE","uniformMatrixStride","UNIFORM_MATRIX_STRIDE","uniformRowMajor","UNIFORM_IS_ROW_MAJOR","SAMPLER_UNIFORMS_GL_TO_GPU","SAMPLER_2D","SAMPLER_CUBE","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","sampler","UNIFORM_NAME_REGEXP","matches","match","Boolean"],"mappings":"AAaA,OAAOA,EAAP,MAAe,oBAAf;AACA,SAAQC,QAAR,QAAuB,oCAAvB;AACA,OAAOC,QAAP,MAAqB,wBAArB;AACA,SAAQC,iBAAR,EAA2BC,mBAA3B,QAAqD,YAArD;AACA,SAAQC,eAAR,QAA8B,8BAA9B;AACA,SAAQC,gBAAR,QAA+B,YAA/B;AAMA,OAAO,SAASC,eAAT,CAAyBC,EAAzB,EAAoDC,OAApD,EAAyF;AAAA;;AAC9F,QAAMC,eAAe,GAAGC,kBAAkB,CAACH,EAAD,EAAKC,OAAL,CAA1C;AAEA,QAAMG,YAA0B,GAAG;AACjCC,IAAAA,UAAU,EAAE,EADqB;AAEjCC,IAAAA,QAAQ,EAAE;AAFuB,GAAnC;;AAKA,OAAK,MAAMC,SAAX,IAAwBL,eAAe,CAACG,UAAxC,EAAoD;AAClD,UAAMG,MAAM,GAEVX,eAAe,CAACU,SAAS,CAACE,QAAV,CAAmBC,IAAnB,IAA2BlB,EAAE,CAACmB,KAA/B,EAAsCJ,SAAS,CAACE,QAAV,CAAmBG,IAAzD,CAFjB;AAGAR,IAAAA,YAAY,CAACC,UAAb,CAAwBQ,IAAxB,CAA6B;AAC3BC,MAAAA,IAAI,EAAEP,SAAS,CAACO,IADW;AAE3BC,MAAAA,QAAQ,EAAER,SAAS,CAACQ,QAFO;AAG3BP,MAAAA,MAH2B;AAI3BQ,MAAAA,QAAQ,EAAET,SAAS,CAACE,QAAV,CAAmBQ,OAAnB,KAA+B,CAA/B,GAAmC,UAAnC,GAAgD;AAJ/B,KAA7B;AAMD;;AAGD,OAAK,MAAMC,YAAX,IAA2BhB,eAAe,CAACiB,aAA3C,EAA0D;AACxD,UAAMC,QAAQ,GAAGF,YAAY,CAACE,QAAb,CAAsBC,GAAtB,CAA2BC,OAAD,KAAc;AACvDR,MAAAA,IAAI,EAAEQ,OAAO,CAACR,IADyC;AAEvDN,MAAAA,MAAM,EAAEc,OAAO,CAACd,MAFuC;AAGvDe,MAAAA,UAAU,EAAED,OAAO,CAACC,UAHmC;AAIvDC,MAAAA,UAAU,EAAEF,OAAO,CAACE,UAJmC;AAKvDC,MAAAA,WAAW,EAAEH,OAAO,CAACG;AALkC,KAAd,CAA1B,CAAjB;AAOArB,IAAAA,YAAY,CAACE,QAAb,CAAsBO,IAAtB,CAA2B;AACzBH,MAAAA,IAAI,EAAE,SADmB;AAEzBI,MAAAA,IAAI,EAAEI,YAAY,CAACJ,IAFM;AAGzBC,MAAAA,QAAQ,EAAEG,YAAY,CAACH,QAHE;AAIzBW,MAAAA,UAAU,EAAE,CAACR,YAAY,CAACS,MAAb,GAAsB,GAAtB,GAA4B,CAA7B,KAAmCT,YAAY,CAACU,QAAb,GAAwB,GAAxB,GAA8B,CAAjE,CAJa;AAKzBC,MAAAA,cAAc,EAAEX,YAAY,CAACY,UALJ;AAMzBV,MAAAA;AANyB,KAA3B;AAQD;;AAED,MAAIW,WAAW,GAAG,CAAlB;;AACA,OAAK,MAAMT,OAAX,IAAsBpB,eAAe,CAACkB,QAAtC,EAAgD;AAC9C,QAAItB,gBAAgB,CAACwB,OAAO,CAACZ,IAAT,CAApB,EAAoC;AAClC,YAAM;AAACsB,QAAAA,aAAD;AAAgBC,QAAAA;AAAhB,UAA8BC,cAAc,CAACZ,OAAO,CAACZ,IAAT,CAAlD;AACAN,MAAAA,YAAY,CAACE,QAAb,CAAsBO,IAAtB,CAA2B;AACzBH,QAAAA,IAAI,EAAE,SADmB;AAEzBI,QAAAA,IAAI,EAAEQ,OAAO,CAACR,IAFW;AAGzBC,QAAAA,QAAQ,EAAEgB,WAHe;AAIzBC,QAAAA,aAJyB;AAKzBC,QAAAA;AALyB,OAA3B;AASAX,MAAAA,OAAO,CAACS,WAAR,GAAsBA,WAAtB;AACAA,MAAAA,WAAW,IAAI,CAAf;AACD;AACF;;AAED,QAAMX,QAAQ,GAAG,0BAAAlB,eAAe,CAACkB,QAAhB,gFAA0Be,MAA1B,CAAkCb,OAAD,IAAaA,OAAO,CAACP,QAAR,KAAqB,IAAnE,MAA4E,EAA7F;;AACA,MAAIK,QAAQ,CAACgB,MAAb,EAAqB;AACnBhC,IAAAA,YAAY,CAACgB,QAAb,GAAwBA,QAAxB;AACD;;AACD,+BAAIlB,eAAe,CAACmC,QAApB,kDAAI,sBAA0BD,MAA9B,EAAsC;AACpChC,IAAAA,YAAY,CAACiC,QAAb,GAAwBnC,eAAe,CAACmC,QAAxC;AACD;;AAED,SAAOjC,YAAP;AACD;AAOD,OAAO,SAASD,kBAAT,CACLH,EADK,EAELC,OAFK,EAGY;AACjB,QAAMqC,MAAuB,GAAG;AAC9BjC,IAAAA,UAAU,EAAEkC,qBAAqB,CAACvC,EAAD,EAAKC,OAAL,CADH;AAE9BmB,IAAAA,QAAQ,EAAEoB,mBAAmB,CAACxC,EAAD,EAAKC,OAAL,CAFC;AAG9BkB,IAAAA,aAAa,EAAEsB,iBAAiB,CAACzC,EAAD,EAAKC,OAAL,CAHF;AAI9BoC,IAAAA,QAAQ,EAAEK,YAAY,CAAC1C,EAAD,EAAKC,OAAL;AAJQ,GAAhC;AAOA0C,EAAAA,MAAM,CAACC,IAAP,CAAYN,MAAZ;AACA,SAAOA,MAAP;AAED;;AAOD,SAASC,qBAAT,CACEvC,EADF,EAEEC,OAFF,EAGsB;AACpB,QAAMI,UAA8B,GAAG,EAAvC;AAEA,QAAMwC,KAAK,GAAG7C,EAAE,CAAC8C,mBAAH,CAAuB7C,OAAvB,EAAgCD,EAAE,CAAC+C,iBAAnC,CAAd;;AAEA,OAAK,IAAIC,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGH,KAA5B,EAAmCG,KAAK,EAAxC,EAA4C;AAC1C,UAAMC,UAAU,GAAGjD,EAAE,CAACkD,eAAH,CAAmBjD,OAAnB,EAA4B+C,KAA5B,CAAnB;;AACA,QAAI,CAACC,UAAL,EAAiB;AACf,YAAM,IAAIE,KAAJ,CAAU,YAAV,CAAN;AACD;;AACD,UAAM;AAACrC,MAAAA,IAAD;AAAOJ,MAAAA,IAAI,EAAE0C,aAAb;AAA4BxC,MAAAA;AAA5B,QAAoCqC,UAA1C;AACA,UAAMlC,QAAQ,GAAGf,EAAE,CAACqD,iBAAH,CAAqBpD,OAArB,EAA8Ba,IAA9B,CAAjB;;AAGA,QAAIC,QAAQ,IAAI,CAAhB,EAAmB;AACjB,YAAM;AAACuC,QAAAA,MAAD;AAASC,QAAAA;AAAT,UAAuB3D,mBAAmB,CAACwD,aAAD,CAAhD;AAAgE;AAChE,YAAM3C,QAAwB,GAAG;AAACC,QAAAA,IAAI,EAAE4C,MAAP;AAAe1C,QAAAA,IAAI,EAAEA,IAAI,GAAG2C;AAA5B,OAAjC;;AAEA,UAAI,YAAYC,IAAZ,CAAiB1C,IAAjB,CAAJ,EAA4B;AAC1BL,QAAAA,QAAQ,CAACQ,OAAT,GAAmB,CAAnB;AACD;;AACD,YAAMwC,aAAa,GAAG;AAAC1C,QAAAA,QAAD;AAAWD,QAAAA,IAAX;AAAiBL,QAAAA,QAAQ,EAAE,IAAIf,QAAJ,CAAae,QAAb;AAA3B,OAAtB;AACAJ,MAAAA,UAAU,CAACQ,IAAX,CAAgB4C,aAAhB;AACD;AACF;;AAEDpD,EAAAA,UAAU,CAACqD,IAAX,CAAgB,CAACC,CAAD,EAAsBC,CAAtB,KAA8CD,CAAC,CAAC5C,QAAF,GAAa6C,CAAC,CAAC7C,QAA7E;AACA,SAAOV,UAAP;AACD;;AAOD,SAASqC,YAAT,CAAsB1C,EAAtB,EAAiDC,OAAjD,EAA0F;AACxF,MAAI,CAACR,QAAQ,CAACO,EAAD,CAAb,EAAmB;AACjB,WAAO,EAAP;AACD;;AACD,QAAM6D,GAAG,GAAG7D,EAAZ;AAEA,QAAMqC,QAA0B,GAAG,EAAnC;AAEA,QAAMQ,KAAK,GAAG7C,EAAE,CAAC8C,mBAAH,CAAuB7C,OAAvB,EAAgCT,EAAE,CAACsE,2BAAnC,CAAd;;AACA,OAAK,IAAI/C,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAG8B,KAAlC,EAAyC9B,QAAQ,EAAjD,EAAqD;AACnD,UAAMkC,UAAU,GAAGY,GAAG,CAACE,2BAAJ,CAAgC9D,OAAhC,EAAyCc,QAAzC,CAAnB;;AACA,QAAI,CAACkC,UAAL,EAAiB;AACf,YAAM,IAAIE,KAAJ,CAAU,YAAV,CAAN;AACD;;AACD,UAAM;AAACrC,MAAAA,IAAD;AAAOJ,MAAAA,IAAI,EAAE0C,aAAb;AAA4BxC,MAAAA;AAA5B,QAAoCqC,UAA1C;AACA,UAAM;AAACK,MAAAA,MAAD;AAASC,MAAAA;AAAT,QAAuB5D,iBAAiB,CAACyD,aAAD,CAA9C;AAA8D;AAC9D,UAAM3C,QAAQ,GAAG,IAAIf,QAAJ,CAAa;AAACgB,MAAAA,IAAI,EAAE4C,MAAP;AAAe1C,MAAAA,IAAI,EAAEA,IAAI,GAAG2C;AAA5B,KAAb,CAAjB;AACA,UAAMS,OAAO,GAAG;AAACjD,MAAAA,QAAD;AAAWD,MAAAA,IAAX;AAAiBL,MAAAA;AAAjB,KAAhB;AACA4B,IAAAA,QAAQ,CAACxB,IAAT,CAAcmD,OAAd;AACD;;AAED3B,EAAAA,QAAQ,CAACqB,IAAT,CAAc,CAACC,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAAC5C,QAAF,GAAa6C,CAAC,CAAC7C,QAAvC;AACA,SAAOsB,QAAP;AACD;;AAOD,SAASG,mBAAT,CAA6BxC,EAA7B,EAAwDC,OAAxD,EAAiG;AAC/F,QAAMmB,QAA0B,GAAG,EAAnC;AAEA,QAAM6C,YAAY,GAAGjE,EAAE,CAAC8C,mBAAH,CAAuB7C,OAAvB,EAAgCT,EAAE,CAAC0E,eAAnC,CAArB;;AACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,YAApB,EAAkCE,CAAC,EAAnC,EAAuC;AACrC,UAAMlB,UAAU,GAAGjD,EAAE,CAACoE,gBAAH,CAAoBnE,OAApB,EAA6BkE,CAA7B,CAAnB;;AACA,QAAI,CAAClB,UAAL,EAAiB;AACf,YAAM,IAAIE,KAAJ,CAAU,YAAV,CAAN;AACD;;AACD,UAAM;AAACrC,MAAAA,IAAI,EAAEuD,OAAP;AAAgBzD,MAAAA,IAAhB;AAAsBF,MAAAA;AAAtB,QAA8BuC,UAApC;AACA,UAAM;AAACnC,MAAAA,IAAD;AAAOwD,MAAAA;AAAP,QAAkBC,gBAAgB,CAACF,OAAD,CAAxC;AACA,QAAIG,aAAa,GAAGxE,EAAE,CAACyE,kBAAH,CAAsBxE,OAAtB,EAA+Ba,IAA/B,CAApB;AACA,UAAM4D,WAAW,GAAG;AAElB3D,MAAAA,QAAQ,EAAEyD,aAFQ;AAGlB1D,MAAAA,IAHkB;AAIlBF,MAAAA,IAJkB;AAKlBF,MAAAA,IALkB;AAMlB4D,MAAAA;AANkB,KAApB;AAQAlD,IAAAA,QAAQ,CAACP,IAAT,CAAc6D,WAAd;;AAGA,QAAIA,WAAW,CAAC9D,IAAZ,GAAmB,CAAvB,EAA0B;AACxB,WAAK,IAAI+D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,WAAW,CAAC9D,IAAhC,EAAsC+D,CAAC,EAAvC,EAA2C;AACzC,cAAMC,WAAW,aAAM9D,IAAN,cAAc6D,CAAd,MAAjB;AAEAH,QAAAA,aAAa,GAAGxE,EAAE,CAACyE,kBAAH,CAAsBxE,OAAtB,EAA+B2E,WAA/B,CAAhB;AAEA,cAAMC,uBAAuB,GAAG,EAC9B,GAAGH,WAD2B;AAE9B5D,UAAAA,IAAI,EAAE8D,WAFwB;AAG9B7D,UAAAA,QAAQ,EAAEyD;AAHoB,SAAhC;AAMApD,QAAAA,QAAQ,CAACP,IAAT,CAAcgE,uBAAd;AACD;AACF;AACF;;AACD,SAAOzD,QAAP;AACD;;AAQD,SAASqB,iBAAT,CACEzC,EADF,EAEEC,OAFF,EAGyB;AACvB,MAAI,CAACR,QAAQ,CAACO,EAAD,CAAb,EAAmB;AACjB,WAAO,EAAP;AACD;;AACD,QAAM6D,GAAG,GAAG7D,EAAZ;;AAEA,QAAM8E,iBAAiB,GAAG,CAACC,UAAD,EAAqBC,KAArB,KACxBnB,GAAG,CAACoB,8BAAJ,CAAmChF,OAAnC,EAA4C8E,UAA5C,EAAwDC,KAAxD,CADF;;AAGA,QAAM7D,aAAoC,GAAG,EAA7C;AAEA,QAAM+D,UAAU,GAAGrB,GAAG,CAACf,mBAAJ,CAAwB7C,OAAxB,EAAiCT,EAAE,CAAC2F,qBAApC,CAAnB;;AACA,OAAK,IAAIJ,UAAU,GAAG,CAAtB,EAAyBA,UAAU,GAAGG,UAAtC,EAAkDH,UAAU,EAA5D,EAAgE;AAC9D,UAAMK,SAA8B,GAAG;AACrCtE,MAAAA,IAAI,EAAE+C,GAAG,CAACwB,yBAAJ,CAA8BpF,OAA9B,EAAuC8E,UAAvC,KAAsD,EADvB;AAErChE,MAAAA,QAAQ,EAAE+D,iBAAiB,CAACC,UAAD,EAAavF,EAAE,CAAC8F,qBAAhB,CAFU;AAGrCxD,MAAAA,UAAU,EAAEgD,iBAAiB,CAACC,UAAD,EAAavF,EAAE,CAAC+F,uBAAhB,CAHQ;AAIrC5D,MAAAA,MAAM,EAAEmD,iBAAiB,CAACC,UAAD,EAAavF,EAAE,CAACgG,yCAAhB,CAJY;AAKrC5D,MAAAA,QAAQ,EAAEkD,iBAAiB,CAACC,UAAD,EAAavF,EAAE,CAACiG,2CAAhB,CALU;AAMrCxB,MAAAA,YAAY,EAAEa,iBAAiB,CAACC,UAAD,EAAavF,EAAE,CAACkG,6BAAhB,CANM;AAOrCtE,MAAAA,QAAQ,EAAE;AAP2B,KAAvC;AAUA,UAAMuE,cAAc,GAAGb,iBAAiB,CAACC,UAAD,EAAavF,EAAE,CAACoG,oCAAhB,CAAjB,IAAsF,EAA7G;AAEA,UAAMC,WAAW,GAAGhC,GAAG,CAACiC,iBAAJ,CAAsB7F,OAAtB,EAA+B0F,cAA/B,EAA+CnG,EAAE,CAACuG,YAAlD,CAApB;AACA,UAAMC,kBAAkB,GAAGnC,GAAG,CAACiC,iBAAJ,CAAsB7F,OAAtB,EAA+B0F,cAA/B,EAA+CnG,EAAE,CAACyG,YAAlD,CAA3B;AACA,UAAMC,iBAAiB,GAAGrC,GAAG,CAACiC,iBAAJ,CACxB7F,OADwB,EAExB0F,cAFwB,EAGxBnG,EAAE,CAAC2G,mBAHqB,CAA1B;AAKA,UAAMC,aAAa,GAAGvC,GAAG,CAACiC,iBAAJ,CAAsB7F,OAAtB,EAA+B0F,cAA/B,EAA+CnG,EAAE,CAAC6G,cAAlD,CAAtB;AACA,UAAMC,aAAa,GAAGzC,GAAG,CAACiC,iBAAJ,CAAsB7F,OAAtB,EAA+B0F,cAA/B,EAA+CnG,EAAE,CAAC+G,oBAAlD,CAAtB;AACA,UAAMC,mBAAmB,GAAG3C,GAAG,CAACiC,iBAAJ,CAC1B7F,OAD0B,EAE1B0F,cAF0B,EAG1BnG,EAAE,CAACiH,qBAHuB,CAA5B;AAKA,UAAMC,eAAe,GAAG7C,GAAG,CAACiC,iBAAJ,CAAsB7F,OAAtB,EAA+B0F,cAA/B,EAA+CnG,EAAE,CAACmH,oBAAlD,CAAxB;;AACA,SAAK,IAAIxC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiB,SAAS,CAACnB,YAA9B,EAA4C,EAAEE,CAA9C,EAAiD;AAC/C,YAAMlB,UAAU,GAAGY,GAAG,CAACO,gBAAJ,CAAqBnE,OAArB,EAA8B0F,cAAc,CAACxB,CAAD,CAA5C,CAAnB;;AACA,UAAI,CAAClB,UAAL,EAAiB;AACf,cAAM,IAAIE,KAAJ,CAAU,YAAV,CAAN;AACD;;AAEDiC,MAAAA,SAAS,CAAChE,QAAV,CAAmBP,IAAnB,CAAwB;AACtBC,QAAAA,IAAI,EAAEmC,UAAU,CAACnC,IADK;AAEtBN,QAAAA,MAAM,EAAEb,iBAAiB,CAACkG,WAAW,CAAC1B,CAAD,CAAZ,CAAjB,CAAkC3D,MAFpB;AAGtBE,QAAAA,IAAI,EAAEmF,WAAW,CAAC1B,CAAD,CAHK;AAItB1C,QAAAA,WAAW,EAAEuE,kBAAkB,CAAC7B,CAAD,CAJT;AAKtB5C,QAAAA,UAAU,EAAE6E,aAAa,CAACjC,CAAD,CALH;AAMtB3C,QAAAA,UAAU,EAAE8E,aAAa,CAACnC,CAAD;AANH,OAAxB;AAUD;;AAEDhD,IAAAA,aAAa,CAACN,IAAd,CAAmBuE,SAAnB;AACD;;AAEDjE,EAAAA,aAAa,CAACuC,IAAd,CAAmB,CAACC,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAAC5C,QAAF,GAAa6C,CAAC,CAAC7C,QAA5C;AACA,SAAOI,aAAP;AACD;;AAED,MAAMyF,0BAML,GAAG;AACF,GAACpH,EAAE,CAACqH,UAAJ,GAAiB,CAAC,IAAD,EAAO,OAAP,CADf;AAEF,GAACrH,EAAE,CAACsH,YAAJ,GAAmB,CAAC,MAAD,EAAS,OAAT,CAFjB;AAGF,GAACtH,EAAE,CAACuH,UAAJ,GAAiB,CAAC,IAAD,EAAO,OAAP,CAHf;AAIF,GAACvH,EAAE,CAACwH,iBAAJ,GAAwB,CAAC,IAAD,EAAO,OAAP,CAJtB;AAKF,GAACxH,EAAE,CAACyH,gBAAJ,GAAuB,CAAC,UAAD,EAAa,OAAb,CALrB;AAMF,GAACzH,EAAE,CAAC0H,uBAAJ,GAA8B,CAAC,UAAD,EAAa,OAAb,CAN5B;AAOF,GAAC1H,EAAE,CAAC2H,mBAAJ,GAA0B,CAAC,MAAD,EAAS,OAAT,CAPxB;AAQF,GAAC3H,EAAE,CAAC4H,cAAJ,GAAqB,CAAC,IAAD,EAAO,MAAP,CARnB;AASF,GAAC5H,EAAE,CAAC6H,cAAJ,GAAqB,CAAC,IAAD,EAAO,MAAP,CATnB;AAUF,GAAC7H,EAAE,CAAC8H,gBAAJ,GAAuB,CAAC,MAAD,EAAS,MAAT,CAVrB;AAWF,GAAC9H,EAAE,CAAC+H,oBAAJ,GAA2B,CAAC,UAAD,EAAa,MAAb,CAXzB;AAYF,GAAC/H,EAAE,CAACgI,uBAAJ,GAA8B,CAAC,IAAD,EAAO,MAAP,CAZ5B;AAaF,GAAChI,EAAE,CAACiI,uBAAJ,GAA8B,CAAC,IAAD,EAAO,MAAP,CAb5B;AAcF,GAACjI,EAAE,CAACkI,yBAAJ,GAAgC,CAAC,MAAD,EAAS,MAAT,CAd9B;AAeF,GAAClI,EAAE,CAACmI,6BAAJ,GAAoC,CAAC,UAAD,EAAa,MAAb;AAflC,CANJ;;AA6BA,SAASzF,cAAT,CAAwBxB,IAAxB,EAA+C;AAC7C,MAAIkH,OAAO,GAAGhB,0BAA0B,CAAClG,IAAD,CAAxC;;AACA,MAAI,CAACkH,OAAL,EAAc;AACZ,UAAM,IAAIzE,KAAJ,CAAU,SAAV,CAAN;AACD;;AACD,QAAM,CAACnB,aAAD,EAAgBC,UAAhB,IAA8B2F,OAApC;AACA,SAAO;AAAC5F,IAAAA,aAAD;AAAgBC,IAAAA;AAAhB,GAAP;AACD;;AAID,SAASsC,gBAAT,CAA0BzD,IAA1B,EAA0F;AAExF,MAAIA,IAAI,CAACA,IAAI,CAACsB,MAAL,GAAc,CAAf,CAAJ,KAA0B,GAA9B,EAAmC;AACjC,WAAO;AACLtB,MAAAA,IADK;AAELsB,MAAAA,MAAM,EAAE,CAFH;AAGLkC,MAAAA,OAAO,EAAE;AAHJ,KAAP;AAKD;;AAGD,QAAMuD,mBAAmB,GAAG,sBAA5B;AACA,QAAMC,OAAO,GAAGhH,IAAI,CAACiH,KAAL,CAAWF,mBAAX,CAAhB;;AACA,MAAI,CAACC,OAAD,IAAYA,OAAO,CAAC1F,MAAR,GAAiB,CAAjC,EAAoC;AAClC,UAAM,IAAIe,KAAJ,6CAA+CrC,IAA/C,EAAN;AACD;;AAED,SAAO;AACLA,IAAAA,IAAI,EAAEgH,OAAO,CAAC,CAAD,CADR;AAEL1F,IAAAA,MAAM,EAAE0F,OAAO,CAAC,CAAD,CAAP,GAAa,CAAb,GAAiB,CAFpB;AAGLxD,IAAAA,OAAO,EAAE0D,OAAO,CAACF,OAAO,CAAC,CAAD,CAAR;AAHX,GAAP;AAKD","sourcesContent":["// luma.gl, MIT license\n\nimport {\n ShaderLayout,\n BindingLayout,\n UniformBinding,\n UniformBlockBinding,\n ProgramBindings,\n AttributeBinding,\n VaryingBinding,\n AttributeLayout,\n AccessorObject\n} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\nimport Accessor from '../../classic/accessor'; // TODO - should NOT depend on classic API\nimport {decodeUniformType, decodeAttributeType} from './uniforms';\nimport {getVertexFormat} from '../converters/vertex-formats';\nimport {isSamplerUniform} from './uniforms';\n/**\n * Extract metadata describing binding information for a program's shaders\n * Note: `linkProgram()` needs to have been called\n * (although linking does not need to have been successful).\n */\nexport function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram): ShaderLayout {\n const programBindings = getProgramBindings(gl, program);\n\n const shaderLayout: ShaderLayout = {\n attributes: [],\n bindings: []\n };\n\n for (const attribute of programBindings.attributes) {\n const format =\n // attribute.accessor.format ||\n getVertexFormat(attribute.accessor.type || GL.FLOAT, attribute.accessor.size);\n shaderLayout.attributes.push({\n name: attribute.name,\n location: attribute.location,\n format,\n stepMode: attribute.accessor.divisor === 1 ? 'instance' : 'vertex'\n });\n }\n\n // Uniform blocks\n for (const uniformBlock of programBindings.uniformBlocks) {\n const uniforms = uniformBlock.uniforms.map((uniform) => ({\n name: uniform.name,\n format: uniform.format,\n byteOffset: uniform.byteOffset,\n byteStride: uniform.byteStride,\n arrayLength: uniform.arrayLength\n }));\n shaderLayout.bindings.push({\n type: 'uniform',\n name: uniformBlock.name,\n location: uniformBlock.location,\n visibility: (uniformBlock.vertex ? 0x1 : 0) & (uniformBlock.fragment ? 0x2 : 0),\n minBindingSize: uniformBlock.byteLength,\n uniforms\n });\n }\n\n let textureUnit = 0;\n for (const uniform of programBindings.uniforms) {\n if (isSamplerUniform(uniform.type)) {\n const {viewDimension, sampleType} = getSamplerInfo(uniform.type);\n shaderLayout.bindings.push({\n type: 'texture',\n name: uniform.name,\n location: textureUnit,\n viewDimension,\n sampleType\n });\n\n // @ts-expect-error\n uniform.textureUnit = textureUnit;\n textureUnit += 1;\n }\n }\n\n const uniforms = programBindings.uniforms?.filter((uniform) => uniform.location !== null) || [];\n if (uniforms.length) {\n shaderLayout.uniforms = uniforms;\n }\n if (programBindings.varyings?.length) {\n shaderLayout.varyings = programBindings.varyings;\n }\n\n return shaderLayout;\n}\n\n/**\n * Extract metadata describing binding information for a program's shaders\n * Note: `linkProgram()` needs to have been called\n * (although linking does not need to have been successful).\n */\nexport function getProgramBindings(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): ProgramBindings {\n const config: ProgramBindings = {\n attributes: readAttributeBindings(gl, program),\n uniforms: readUniformBindings(gl, program),\n uniformBlocks: readUniformBlocks(gl, program),\n varyings: readVaryings(gl, program)\n };\n\n Object.seal(config);\n return config;\n // generateWebGPUStyleBindings(bindings);\n}\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readAttributeBindings(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): AttributeBinding[] {\n const attributes: AttributeBinding[] = [];\n\n const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n\n for (let index = 0; index < count; index++) {\n const activeInfo = gl.getActiveAttrib(program, index);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name, type: compositeType, size} = activeInfo;\n const location = gl.getAttribLocation(program, name);\n // Add only user provided attributes, for built-in attributes like\n // `gl_InstanceID` locaiton will be < 0\n if (location >= 0) {\n const {glType, components} = decodeAttributeType(compositeType);;\n const accessor: AccessorObject = {type: glType, size: size * components};\n // Any attribute name containing the word \"instance\" will be assumed to be instanced\n if (/instance/i.test(name)) {\n accessor.divisor = 1;\n }\n const attributeInfo = {location, name, accessor: new Accessor(accessor)}; // Base values\n attributes.push(attributeInfo);\n }\n }\n\n attributes.sort((a: AttributeBinding, b: AttributeBinding) => a.location - b.location);\n return attributes;\n}\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readVaryings(gl: WebGLRenderingContext, program: WebGLProgram): VaryingBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const varyings: VaryingBinding[] = [];\n\n const count = gl.getProgramParameter(program, GL.TRANSFORM_FEEDBACK_VARYINGS);\n for (let location = 0; location < count; location++) {\n const activeInfo = gl2.getTransformFeedbackVarying(program, location);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name, type: compositeType, size} = activeInfo;\n const {glType, components} = decodeUniformType(compositeType);;\n const accessor = new Accessor({type: glType, size: size * components});\n const varying = {location, name, accessor}; // Base values\n varyings.push(varying);\n }\n\n varyings.sort((a, b) => a.location - b.location);\n return varyings;\n}\n\n/**\n * Extract info about all uniforms\n *\n * Query uniform locations and build name to setter map.\n */\nfunction readUniformBindings(gl: WebGLRenderingContext, program: WebGLProgram): UniformBinding[] {\n const uniforms: UniformBinding[] = [];\n\n const uniformCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORMS);\n for (let i = 0; i < uniformCount; i++) {\n const activeInfo = gl.getActiveUniform(program, i);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name: rawName, size, type} = activeInfo;\n const {name, isArray} = parseUniformName(rawName);\n let webglLocation = gl.getUniformLocation(program, name);\n const uniformInfo = {\n // WebGL locations are uniquely typed but just numbers\n location: webglLocation as number,\n name,\n size,\n type,\n isArray\n };\n uniforms.push(uniformInfo);\n\n // Array (e.g. matrix) uniforms can occupy several 4x4 byte banks\n if (uniformInfo.size > 1) {\n for (let j = 0; j < uniformInfo.size; j++) {\n const elementName = `${name}[${j}]`;\n\n webglLocation = gl.getUniformLocation(program, elementName);\n\n const arrayElementUniformInfo = {\n ...uniformInfo,\n name: elementName,\n location: webglLocation as number\n };\n\n uniforms.push(arrayElementUniformInfo);\n }\n }\n }\n return uniforms;\n}\n\n/**\n * Extract info about all \"active\" uniform blocks\n *\n * (\"Active\" just means that unused (aka inactive) blocks may have been\n * optimized away during linking)\n */\nfunction readUniformBlocks(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): UniformBlockBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const getBlockParameter = (blockIndex: number, pname: GL): any =>\n gl2.getActiveUniformBlockParameter(program, blockIndex, pname);\n\n const uniformBlocks: UniformBlockBinding[] = [];\n\n const blockCount = gl2.getProgramParameter(program, GL.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {\n const blockInfo: UniformBlockBinding = {\n name: gl2.getActiveUniformBlockName(program, blockIndex) || '',\n location: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_BINDING),\n byteLength: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_DATA_SIZE),\n vertex: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n fragment: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n uniformCount: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n uniforms: [] as any[]\n };\n\n const uniformIndices = getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) as number[] || [];\n\n const uniformType = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_TYPE); // Array of GLenum indicating the types of the uniforms.\n const uniformArrayLength = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_SIZE); // Array of GLuint indicating the sizes of the uniforms.\n const uniformBlockIndex = gl2.getActiveUniforms(\n program,\n uniformIndices,\n GL.UNIFORM_BLOCK_INDEX\n ); // Array of GLint indicating the block indices of the uniforms.\n const uniformOffset = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_OFFSET); // Array of GLint indicating the uniform buffer offsets.\n const uniformStride = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_ARRAY_STRIDE); // Array of GLint indicating the strides between the elements.\n const uniformMatrixStride = gl2.getActiveUniforms(\n program,\n uniformIndices,\n GL.UNIFORM_MATRIX_STRIDE\n ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.\n const uniformRowMajor = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);\n for (let i = 0; i < blockInfo.uniformCount; ++i) {\n const activeInfo = gl2.getActiveUniform(program, uniformIndices[i]);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n \n blockInfo.uniforms.push({\n name: activeInfo.name,\n format: decodeUniformType(uniformType[i]).format,\n type: uniformType[i],\n arrayLength: uniformArrayLength[i],\n byteOffset: uniformOffset[i],\n byteStride: uniformStride[i],\n // matrixStride: uniformStride[i],\n // rowMajor: uniformRowMajor[i]\n });\n }\n\n uniformBlocks.push(blockInfo);\n }\n\n uniformBlocks.sort((a, b) => a.location - b.location);\n return uniformBlocks;\n}\n\nconst SAMPLER_UNIFORMS_GL_TO_GPU: Record<\n number,\n [\n '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d',\n 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint'\n ]\n> = {\n [GL.SAMPLER_2D]: ['2d', 'float'],\n [GL.SAMPLER_CUBE]: ['cube', 'float'],\n [GL.SAMPLER_3D]: ['3d', 'float'],\n [GL.SAMPLER_2D_SHADOW]: ['3d', 'depth'],\n [GL.SAMPLER_2D_ARRAY]: ['2d-array', 'float'],\n [GL.SAMPLER_2D_ARRAY_SHADOW]: ['2d-array', 'depth'],\n [GL.SAMPLER_CUBE_SHADOW]: ['cube', 'float'],\n [GL.INT_SAMPLER_2D]: ['2d', 'sint'],\n [GL.INT_SAMPLER_3D]: ['3d', 'sint'],\n [GL.INT_SAMPLER_CUBE]: ['cube', 'sint'],\n [GL.INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D]: ['2d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_3D]: ['3d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: ['cube', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint']\n};\n\ntype SamplerInfo = | {\n viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';\n sampleType: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';\n};\n\nfunction getSamplerInfo(type: GL): SamplerInfo {\n let sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];\n if (!sampler) {\n throw new Error('sampler');\n }\n const [viewDimension, sampleType] = sampler;\n return {viewDimension, sampleType};\n}\n\n// HELPERS\n\nfunction parseUniformName(name: string): {name: string; length: number; isArray: boolean} {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: matches[2] ? 1 : 0,\n isArray: Boolean(matches[2])\n };\n}\n\n/**\n * TODO - verify this is a copy of above and delete\n * import type {TextureFormat} from '@luma.gl/api';\n* Extract info about all \"active\" uniform blocks\n * (\"Active\" just means that unused (inactive) blocks may have been optimized away during linking)\n *\n function getUniformBlockBindings(gl, program): Binding[] {\n if (!isWebGL2(gl)) {\n return;\n }\n const bindings: Binding[] = [];\n const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < count; blockIndex++) {\n const vertex = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n const fragment = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n const visibility = (vertex) + (fragment);\n const binding: BufferBinding = {\n location: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_BINDING),\n // name: gl.getActiveUniformBlockName(program, blockIndex),\n type: 'uniform',\n visibility,\n minBindingSize: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE),\n // uniformCount: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n // uniformIndices: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),\n }\n bindings.push(binding);\n }\n return bindings;\n}\n\nfunction setBindings(gl2: WebGL2RenderingContext, program: WebGLProgram, bindings: Binding[][]): void {\n for (const bindGroup of bindings) {\n for (const binding of bindGroup) {\n\n }\n }\n\n // Set up indirection table\n // this.gl2.uniformBlockBinding(this.handle, blockIndex, blockBinding);\n}\n */\n"],"file":"get-shader-layout.js"}
@@ -34,7 +34,7 @@ export function decodeUniformType(uniformType) {
34
34
  const typeAndSize = COMPOSITE_GL_TYPES[uniformType];
35
35
 
36
36
  if (!typeAndSize) {
37
- return null;
37
+ throw new Error('uniform');
38
38
  }
39
39
 
40
40
  const [glType, components,, format] = typeAndSize;
@@ -44,11 +44,11 @@ export function decodeUniformType(uniformType) {
44
44
  glType
45
45
  };
46
46
  }
47
- export function decodeAttributeType(uniformType) {
48
- const typeAndSize = COMPOSITE_GL_TYPES[uniformType];
47
+ export function decodeAttributeType(attributeType) {
48
+ const typeAndSize = COMPOSITE_GL_TYPES[attributeType];
49
49
 
50
50
  if (!typeAndSize) {
51
- return null;
51
+ throw new Error('attribute');
52
52
  }
53
53
 
54
54
  const [glType, components,,, format] = typeAndSize;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/helpers/uniforms.ts"],"names":["GL","isSamplerUniform","type","SAMPLER_TYPES","includes","SAMPLER_2D","SAMPLER_CUBE","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","COMPOSITE_GL_TYPES","FLOAT","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","UNSIGNED_INT","UNSIGNED_INT_VEC2","UNSIGNED_INT_VEC3","UNSIGNED_INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT2x3","FLOAT_MAT2x4","FLOAT_MAT3x2","FLOAT_MAT3","FLOAT_MAT3x4","FLOAT_MAT4x2","FLOAT_MAT4x3","FLOAT_MAT4","decodeUniformType","uniformType","typeAndSize","glType","components","format","decodeAttributeType","decomposeCompositeGLType","compositeGLType","getCompositeGLType","BYTE","UNSIGNED_BYTE","SHORT","UNSIGNED_SHORT","compType","compComponents","name","Number"],"mappings":"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","sourcesContent":["import {UniformFormat, VertexFormat} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {GLUniformType, GLSamplerType, GLCompositeType, GLType} from '../../types/webgl'\n\n/** Check is uniform is of sampler type */\nexport function isSamplerUniform(type: GLUniformType): boolean {\n return SAMPLER_TYPES.includes(type as GLSamplerType);\n}\n\nconst SAMPLER_TYPES: GLSamplerType[] = [\n GL.SAMPLER_2D,\n GL.SAMPLER_CUBE,\n GL.SAMPLER_3D,\n GL.SAMPLER_2D_SHADOW,\n GL.SAMPLER_2D_ARRAY,\n GL.SAMPLER_2D_ARRAY_SHADOW,\n GL.SAMPLER_CUBE_SHADOW,\n GL.INT_SAMPLER_2D,\n GL.INT_SAMPLER_3D,\n GL.INT_SAMPLER_CUBE,\n GL.INT_SAMPLER_2D_ARRAY,\n GL.UNSIGNED_INT_SAMPLER_2D,\n GL.UNSIGNED_INT_SAMPLER_3D,\n GL.UNSIGNED_INT_SAMPLER_CUBE,\n GL.UNSIGNED_INT_SAMPLER_2D_ARRAY\n];\n\n// Composite types table \nconst COMPOSITE_GL_TYPES: Record<GLCompositeType, [GLType, number, string, UniformFormat, VertexFormat?]> = {\n [GL.FLOAT]: [GL.FLOAT, 1, 'float', 'f32', 'float32'],\n [GL.FLOAT_VEC2]: [GL.FLOAT, 2, 'vec2', 'vec2<f32>', 'float32x2'],\n [GL.FLOAT_VEC3]: [GL.FLOAT, 3, 'vec3', 'vec3<f32>', 'float32x3'],\n [GL.FLOAT_VEC4]: [GL.FLOAT, 4, 'vec4', 'vec4<f32>', 'float32x4'],\n\n [GL.INT]: [GL.INT, 1, 'int', 'i32', 'sint32'],\n [GL.INT_VEC2]: [GL.INT, 2, 'ivec2', 'vec2<i32>', 'sint32x2'],\n [GL.INT_VEC3]: [GL.INT, 3, 'ivec3', 'vec3<i32>', 'sint32x3'],\n [GL.INT_VEC4]: [GL.INT, 4, 'ivec4', 'vec4<i32>', 'sint32x4'],\n\n [GL.UNSIGNED_INT]: [GL.UNSIGNED_INT, 1, 'uint', 'u32', 'uint32'],\n [GL.UNSIGNED_INT_VEC2]: [GL.UNSIGNED_INT, 2, 'uvec2', 'vec2<u32>', 'uint32x2'],\n [GL.UNSIGNED_INT_VEC3]: [GL.UNSIGNED_INT, 3, 'uvec3', 'vec3<u32>', 'uint32x3'],\n [GL.UNSIGNED_INT_VEC4]: [GL.UNSIGNED_INT, 4, 'uvec4', 'vec4<u32>', 'uint32x4'],\n\n [GL.BOOL]: [GL.FLOAT, 1, 'bool', 'f32', 'float32x2'],\n [GL.BOOL_VEC2]: [GL.FLOAT, 2, 'bvec2', 'vec2<f32>'],\n [GL.BOOL_VEC3]: [GL.FLOAT, 3, 'bvec3', 'vec3<f32>'],\n [GL.BOOL_VEC4]: [GL.FLOAT, 4, 'bvec4', 'vec4<f32>'],\n\n [GL.FLOAT_MAT2]: [GL.FLOAT, 8, 'mat2', 'mat2x2<f32>'], // 4\n [GL.FLOAT_MAT2x3]: [GL.FLOAT, 8, 'mat2x3', 'mat2x3<f32>'], // 6\n [GL.FLOAT_MAT2x4]: [GL.FLOAT, 8, 'mat2x4', 'mat2x4<f32>'], // 8\n\n [GL.FLOAT_MAT3x2]: [GL.FLOAT, 12, 'mat3x2', 'mat3x2<f32>'], // 6\n [GL.FLOAT_MAT3]: [GL.FLOAT, 12, 'mat3', 'mat3x3<f32>'], // 9\n [GL.FLOAT_MAT3x4]: [GL.FLOAT, 12, 'mat3x4', 'mat3x4<f32>'], // 12\n\n [GL.FLOAT_MAT4x2]: [GL.FLOAT, 16, 'mat4x2', 'mat4x2<f32>'], // 8\n [GL.FLOAT_MAT4x3]: [GL.FLOAT, 16, 'mat4x3', 'mat4x3<f32>'], // 12\n [GL.FLOAT_MAT4]: [GL.FLOAT, 16, 'mat4', 'mat4x4<f32>'] // 16\n};\n\n/** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */\nexport function decodeUniformType(uniformType: GL): {format: UniformFormat, components: number, glType: GLType} {\n const typeAndSize = COMPOSITE_GL_TYPES[uniformType];\n if (!typeAndSize) {\n return null;\n }\n const [glType, components, , format] = typeAndSize;\n return {format, components, glType};\n}\n\nexport function decodeAttributeType(uniformType: GL): {format: VertexFormat, components: number, glType: GLType} {\n const typeAndSize = COMPOSITE_GL_TYPES[uniformType];\n if (!typeAndSize) {\n return null;\n }\n const [glType, components, , , format] = typeAndSize;\n return {format, components, glType};\n}\n\n/** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */\nexport function decomposeCompositeGLType(compositeGLType: GLCompositeType): {type: GLType, components: number} | null {\n const typeAndSize = COMPOSITE_GL_TYPES[compositeGLType];\n if (!typeAndSize) {\n return null;\n }\n const [type, components] = typeAndSize;\n return {type, components};\n}\n\nexport function getCompositeGLType(type: GL, components): {glType: GLType, name: string} | null {\n switch (type) {\n case GL.BYTE:\n case GL.UNSIGNED_BYTE:\n case GL.SHORT:\n case GL.UNSIGNED_SHORT:\n type = GL.FLOAT;\n break;\n default:\n }\n\n for (const glType in COMPOSITE_GL_TYPES) {\n const [compType, compComponents, name] = COMPOSITE_GL_TYPES[glType];\n if (compType === type && compComponents === components) {\n return {glType: Number(glType), name};\n }\n }\n return null;\n}\n"],"file":"uniforms.js"}
1
+ {"version":3,"sources":["../../../../src/adapter/helpers/uniforms.ts"],"names":["GL","isSamplerUniform","type","SAMPLER_TYPES","includes","SAMPLER_2D","SAMPLER_CUBE","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","COMPOSITE_GL_TYPES","FLOAT","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","UNSIGNED_INT","UNSIGNED_INT_VEC2","UNSIGNED_INT_VEC3","UNSIGNED_INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT2x3","FLOAT_MAT2x4","FLOAT_MAT3x2","FLOAT_MAT3","FLOAT_MAT3x4","FLOAT_MAT4x2","FLOAT_MAT4x3","FLOAT_MAT4","decodeUniformType","uniformType","typeAndSize","Error","glType","components","format","decodeAttributeType","attributeType","decomposeCompositeGLType","compositeGLType","getCompositeGLType","BYTE","UNSIGNED_BYTE","SHORT","UNSIGNED_SHORT","compType","compComponents","name","Number"],"mappings":"AACA,OAAOA,EAAP,MAAe,oBAAf;AAIA,OAAO,SAASC,gBAAT,CAA0BC,IAA1B,EAAwD;AAC7D,SAAOC,aAAa,CAACC,QAAd,CAAuBF,IAAvB,CAAP;AACD;AAED,MAAMC,aAA8B,GAAG,CACrCH,EAAE,CAACK,UADkC,EAErCL,EAAE,CAACM,YAFkC,EAGrCN,EAAE,CAACO,UAHkC,EAIrCP,EAAE,CAACQ,iBAJkC,EAKrCR,EAAE,CAACS,gBALkC,EAMrCT,EAAE,CAACU,uBANkC,EAOrCV,EAAE,CAACW,mBAPkC,EAQrCX,EAAE,CAACY,cARkC,EASrCZ,EAAE,CAACa,cATkC,EAUrCb,EAAE,CAACc,gBAVkC,EAWrCd,EAAE,CAACe,oBAXkC,EAYrCf,EAAE,CAACgB,uBAZkC,EAarChB,EAAE,CAACiB,uBAbkC,EAcrCjB,EAAE,CAACkB,yBAdkC,EAerClB,EAAE,CAACmB,6BAfkC,CAAvC;AAmBA,MAAMC,kBAGL,GAAG;AACF,GAACpB,EAAE,CAACqB,KAAJ,GAAY,CAACrB,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,OAAd,EAAuB,KAAvB,EAA8B,SAA9B,CADV;AAEF,GAACrB,EAAE,CAACsB,UAAJ,GAAiB,CAACtB,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,MAAd,EAAsB,WAAtB,EAAmC,WAAnC,CAFf;AAGF,GAACrB,EAAE,CAACuB,UAAJ,GAAiB,CAACvB,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,MAAd,EAAsB,WAAtB,EAAmC,WAAnC,CAHf;AAIF,GAACrB,EAAE,CAACwB,UAAJ,GAAiB,CAACxB,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,MAAd,EAAsB,WAAtB,EAAmC,WAAnC,CAJf;AAMF,GAACrB,EAAE,CAACyB,GAAJ,GAAU,CAACzB,EAAE,CAACyB,GAAJ,EAAS,CAAT,EAAY,KAAZ,EAAmB,KAAnB,EAA0B,QAA1B,CANR;AAOF,GAACzB,EAAE,CAAC0B,QAAJ,GAAe,CAAC1B,EAAE,CAACyB,GAAJ,EAAS,CAAT,EAAY,OAAZ,EAAqB,WAArB,EAAkC,UAAlC,CAPb;AAQF,GAACzB,EAAE,CAAC2B,QAAJ,GAAe,CAAC3B,EAAE,CAACyB,GAAJ,EAAS,CAAT,EAAY,OAAZ,EAAqB,WAArB,EAAkC,UAAlC,CARb;AASF,GAACzB,EAAE,CAAC4B,QAAJ,GAAe,CAAC5B,EAAE,CAACyB,GAAJ,EAAS,CAAT,EAAY,OAAZ,EAAqB,WAArB,EAAkC,UAAlC,CATb;AAWF,GAACzB,EAAE,CAAC6B,YAAJ,GAAmB,CAAC7B,EAAE,CAAC6B,YAAJ,EAAkB,CAAlB,EAAqB,MAArB,EAA6B,KAA7B,EAAoC,QAApC,CAXjB;AAYF,GAAC7B,EAAE,CAAC8B,iBAAJ,GAAwB,CAAC9B,EAAE,CAAC6B,YAAJ,EAAkB,CAAlB,EAAqB,OAArB,EAA8B,WAA9B,EAA2C,UAA3C,CAZtB;AAaF,GAAC7B,EAAE,CAAC+B,iBAAJ,GAAwB,CAAC/B,EAAE,CAAC6B,YAAJ,EAAkB,CAAlB,EAAqB,OAArB,EAA8B,WAA9B,EAA2C,UAA3C,CAbtB;AAcF,GAAC7B,EAAE,CAACgC,iBAAJ,GAAwB,CAAChC,EAAE,CAAC6B,YAAJ,EAAkB,CAAlB,EAAqB,OAArB,EAA8B,WAA9B,EAA2C,UAA3C,CAdtB;AAgBF,GAAC7B,EAAE,CAACiC,IAAJ,GAAW,CAACjC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,MAAd,EAAsB,KAAtB,EAA6B,WAA7B,CAhBT;AAiBF,GAACrB,EAAE,CAACkC,SAAJ,GAAgB,CAAClC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,OAAd,EAAuB,WAAvB,CAjBd;AAkBF,GAACrB,EAAE,CAACmC,SAAJ,GAAgB,CAACnC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,OAAd,EAAuB,WAAvB,CAlBd;AAmBF,GAACrB,EAAE,CAACoC,SAAJ,GAAgB,CAACpC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,OAAd,EAAuB,WAAvB,CAnBd;AAqBF,GAACrB,EAAE,CAACqC,UAAJ,GAAiB,CAACrC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,MAAd,EAAsB,aAAtB,CArBf;AAsBF,GAACrB,EAAE,CAACsC,YAAJ,GAAmB,CAACtC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,QAAd,EAAwB,aAAxB,CAtBjB;AAuBF,GAACrB,EAAE,CAACuC,YAAJ,GAAmB,CAACvC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,QAAd,EAAwB,aAAxB,CAvBjB;AAyBF,GAACrB,EAAE,CAACwC,YAAJ,GAAmB,CAACxC,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,QAAf,EAAyB,aAAzB,CAzBjB;AA0BF,GAACrB,EAAE,CAACyC,UAAJ,GAAiB,CAACzC,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,MAAf,EAAuB,aAAvB,CA1Bf;AA2BF,GAACrB,EAAE,CAAC0C,YAAJ,GAAmB,CAAC1C,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,QAAf,EAAyB,aAAzB,CA3BjB;AA6BF,GAACrB,EAAE,CAAC2C,YAAJ,GAAmB,CAAC3C,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,QAAf,EAAyB,aAAzB,CA7BjB;AA8BF,GAACrB,EAAE,CAAC4C,YAAJ,GAAmB,CAAC5C,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,QAAf,EAAyB,aAAzB,CA9BjB;AA+BF,GAACrB,EAAE,CAAC6C,UAAJ,GAAiB,CAAC7C,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,MAAf,EAAuB,aAAvB;AA/Bf,CAHJ;AAsCA,OAAO,SAASyB,iBAAT,CACLC,WADK,EAEwD;AAC7D,QAAMC,WAAW,GAAG5B,kBAAkB,CAAC2B,WAAD,CAAtC;;AACA,MAAI,CAACC,WAAL,EAAkB;AAChB,UAAM,IAAIC,KAAJ,CAAU,SAAV,CAAN;AACD;;AACD,QAAM,CAACC,MAAD,EAASC,UAAT,GAAuBC,MAAvB,IAAiCJ,WAAvC;AACA,SAAO;AAACI,IAAAA,MAAD;AAASD,IAAAA,UAAT;AAAqBD,IAAAA;AAArB,GAAP;AACD;AAED,OAAO,SAASG,mBAAT,CAA6BC,aAA7B,EAIL;AACA,QAAMN,WAAW,GAAG5B,kBAAkB,CAACkC,aAAD,CAAtC;;AACA,MAAI,CAACN,WAAL,EAAkB;AAChB,UAAM,IAAIC,KAAJ,CAAU,WAAV,CAAN;AACD;;AACD,QAAM,CAACC,MAAD,EAASC,UAAT,IAAyBC,MAAzB,IAAmCJ,WAAzC;AACA,SAAO;AAACI,IAAAA,MAAD;AAASD,IAAAA,UAAT;AAAqBD,IAAAA;AAArB,GAAP;AACD;AAGD,OAAO,SAASK,wBAAT,CACLC,eADK,EAEsC;AAC3C,QAAMR,WAAW,GAAG5B,kBAAkB,CAACoC,eAAD,CAAtC;;AACA,MAAI,CAACR,WAAL,EAAkB;AAChB,WAAO,IAAP;AACD;;AACD,QAAM,CAAC9C,IAAD,EAAOiD,UAAP,IAAqBH,WAA3B;AACA,SAAO;AAAC9C,IAAAA,IAAD;AAAOiD,IAAAA;AAAP,GAAP;AACD;AAED,OAAO,SAASM,kBAAT,CAA4BvD,IAA5B,EAAsCiD,UAAtC,EAAyF;AAC9F,UAAQjD,IAAR;AACE,SAAKF,EAAE,CAAC0D,IAAR;AACA,SAAK1D,EAAE,CAAC2D,aAAR;AACA,SAAK3D,EAAE,CAAC4D,KAAR;AACA,SAAK5D,EAAE,CAAC6D,cAAR;AACE3D,MAAAA,IAAI,GAAGF,EAAE,CAACqB,KAAV;AACA;;AACF;AAPF;;AAUA,OAAK,MAAM6B,MAAX,IAAqB9B,kBAArB,EAAyC;AACvC,UAAM,CAAC0C,QAAD,EAAWC,cAAX,EAA2BC,IAA3B,IAAmC5C,kBAAkB,CAAC8B,MAAD,CAA3D;;AACA,QAAIY,QAAQ,KAAK5D,IAAb,IAAqB6D,cAAc,KAAKZ,UAA5C,EAAwD;AACtD,aAAO;AAACD,QAAAA,MAAM,EAAEe,MAAM,CAACf,MAAD,CAAf;AAAyBc,QAAAA;AAAzB,OAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD","sourcesContent":["import {UniformFormat, VertexFormat} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {GLUniformType, GLSamplerType, GLCompositeType, GLType} from '../../types/webgl';\n\n/** Check is uniform is of sampler type */\nexport function isSamplerUniform(type: GLUniformType): boolean {\n return SAMPLER_TYPES.includes(type as GLSamplerType);\n}\n\nconst SAMPLER_TYPES: GLSamplerType[] = [\n GL.SAMPLER_2D,\n GL.SAMPLER_CUBE,\n GL.SAMPLER_3D,\n GL.SAMPLER_2D_SHADOW,\n GL.SAMPLER_2D_ARRAY,\n GL.SAMPLER_2D_ARRAY_SHADOW,\n GL.SAMPLER_CUBE_SHADOW,\n GL.INT_SAMPLER_2D,\n GL.INT_SAMPLER_3D,\n GL.INT_SAMPLER_CUBE,\n GL.INT_SAMPLER_2D_ARRAY,\n GL.UNSIGNED_INT_SAMPLER_2D,\n GL.UNSIGNED_INT_SAMPLER_3D,\n GL.UNSIGNED_INT_SAMPLER_CUBE,\n GL.UNSIGNED_INT_SAMPLER_2D_ARRAY\n];\n\n// Composite types table\nconst COMPOSITE_GL_TYPES: Record<\n GLCompositeType,\n [GLType, number, string, UniformFormat, VertexFormat?]\n> = {\n [GL.FLOAT]: [GL.FLOAT, 1, 'float', 'f32', 'float32'],\n [GL.FLOAT_VEC2]: [GL.FLOAT, 2, 'vec2', 'vec2<f32>', 'float32x2'],\n [GL.FLOAT_VEC3]: [GL.FLOAT, 3, 'vec3', 'vec3<f32>', 'float32x3'],\n [GL.FLOAT_VEC4]: [GL.FLOAT, 4, 'vec4', 'vec4<f32>', 'float32x4'],\n\n [GL.INT]: [GL.INT, 1, 'int', 'i32', 'sint32'],\n [GL.INT_VEC2]: [GL.INT, 2, 'ivec2', 'vec2<i32>', 'sint32x2'],\n [GL.INT_VEC3]: [GL.INT, 3, 'ivec3', 'vec3<i32>', 'sint32x3'],\n [GL.INT_VEC4]: [GL.INT, 4, 'ivec4', 'vec4<i32>', 'sint32x4'],\n\n [GL.UNSIGNED_INT]: [GL.UNSIGNED_INT, 1, 'uint', 'u32', 'uint32'],\n [GL.UNSIGNED_INT_VEC2]: [GL.UNSIGNED_INT, 2, 'uvec2', 'vec2<u32>', 'uint32x2'],\n [GL.UNSIGNED_INT_VEC3]: [GL.UNSIGNED_INT, 3, 'uvec3', 'vec3<u32>', 'uint32x3'],\n [GL.UNSIGNED_INT_VEC4]: [GL.UNSIGNED_INT, 4, 'uvec4', 'vec4<u32>', 'uint32x4'],\n\n [GL.BOOL]: [GL.FLOAT, 1, 'bool', 'f32', 'float32x2'],\n [GL.BOOL_VEC2]: [GL.FLOAT, 2, 'bvec2', 'vec2<f32>'],\n [GL.BOOL_VEC3]: [GL.FLOAT, 3, 'bvec3', 'vec3<f32>'],\n [GL.BOOL_VEC4]: [GL.FLOAT, 4, 'bvec4', 'vec4<f32>'],\n\n [GL.FLOAT_MAT2]: [GL.FLOAT, 8, 'mat2', 'mat2x2<f32>'], // 4\n [GL.FLOAT_MAT2x3]: [GL.FLOAT, 8, 'mat2x3', 'mat2x3<f32>'], // 6\n [GL.FLOAT_MAT2x4]: [GL.FLOAT, 8, 'mat2x4', 'mat2x4<f32>'], // 8\n\n [GL.FLOAT_MAT3x2]: [GL.FLOAT, 12, 'mat3x2', 'mat3x2<f32>'], // 6\n [GL.FLOAT_MAT3]: [GL.FLOAT, 12, 'mat3', 'mat3x3<f32>'], // 9\n [GL.FLOAT_MAT3x4]: [GL.FLOAT, 12, 'mat3x4', 'mat3x4<f32>'], // 12\n\n [GL.FLOAT_MAT4x2]: [GL.FLOAT, 16, 'mat4x2', 'mat4x2<f32>'], // 8\n [GL.FLOAT_MAT4x3]: [GL.FLOAT, 16, 'mat4x3', 'mat4x3<f32>'], // 12\n [GL.FLOAT_MAT4]: [GL.FLOAT, 16, 'mat4', 'mat4x4<f32>'] // 16\n};\n\n/** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */\nexport function decodeUniformType(\n uniformType: GL\n): {format: UniformFormat; components: number; glType: GLType} {\n const typeAndSize = COMPOSITE_GL_TYPES[uniformType];\n if (!typeAndSize) {\n throw new Error('uniform');\n }\n const [glType, components, , format] = typeAndSize;\n return {format, components, glType};\n}\n\nexport function decodeAttributeType(attributeType: GL): {\n format: VertexFormat;\n components: number;\n glType: GLType;\n} {\n const typeAndSize = COMPOSITE_GL_TYPES[attributeType];\n if (!typeAndSize) {\n throw new Error('attribute')\n }\n const [glType, components, , , format] = typeAndSize;\n return {format, components, glType};\n}\n\n/** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */\nexport function decomposeCompositeGLType(\n compositeGLType: GLCompositeType\n): {type: GLType; components: number} | null {\n const typeAndSize = COMPOSITE_GL_TYPES[compositeGLType];\n if (!typeAndSize) {\n return null;\n }\n const [type, components] = typeAndSize;\n return {type, components};\n}\n\nexport function getCompositeGLType(type: GL, components): {glType: GLType; name: string} | null {\n switch (type) {\n case GL.BYTE:\n case GL.UNSIGNED_BYTE:\n case GL.SHORT:\n case GL.UNSIGNED_SHORT:\n type = GL.FLOAT;\n break;\n default:\n }\n\n for (const glType in COMPOSITE_GL_TYPES) {\n const [compType, compComponents, name] = COMPOSITE_GL_TYPES[glType];\n if (compType === type && compComponents === components) {\n return {glType: Number(glType), name};\n }\n }\n return null;\n}\n"],"file":"uniforms.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/objects/webgl-vertex-array-object.ts"],"names":["assert","GL","getBrowser","WebGLResource","ERR_ELEMENTS","WEBGLVertexArrayObject","Symbol","toStringTag","constructor","device","props","_createHandle","gl2","createVertexArray","_deleteHandle","deleteVertexArray","handle","elements","_bindHandle","bindVertexArray","setElementBuffer","elementBuffer","opts","target","ELEMENT_ARRAY_BUFFER","bind","gl","bindBuffer","setBuffer","location","buffer","accessor","size","type","stride","offset","normalized","integer","divisor","Number","ARRAY_BUFFER","assertWebGL2","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","canDisableAttributeZero","isWebGL2","canDisableAttribute","disableVertexAttribArray"],"mappings":"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","sourcesContent":["import {assert, ResourceProps} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getBrowser} from '@probe.gl/env';\n\nimport WebGLDevice from '../webgl-device';\nimport WebGLResource from './webgl-resource';\n\nimport Buffer from '../resources/webgl-buffer';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\n/**\n * VertexArrayObject properties\n */\nexport type VertexArrayObjectProps = ResourceProps & {\n};\n\n/** VertexArrayObject wrapper */\nexport default class WEBGLVertexArrayObject extends WebGLResource<VertexArrayObjectProps> {\n get [Symbol.toStringTag](): string {\n return 'BaseVertexArrayObject';\n }\n\n constructor(device: WebGLDevice, props?: VertexArrayObjectProps) {\n // @ts-expect-error\n super(device, props, {});\n }\n\n _createHandle() {\n return this.gl2.createVertexArray();\n }\n\n _deleteHandle(): void {\n this.gl2.deleteVertexArray(this.handle);\n // @ts-expect-error\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle: WEBGLVertexArrayObject): void {\n this.gl2.bindVertexArray(handle);\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer: Buffer = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */\n setBuffer(location: number, buffer: Buffer, accessor: any): this {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n this.device.assertWebGL2();\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n /**\n * Enabling an attribute location makes it reference the currently bound buffer\n * Disabling an attribute location makes it reference the global constant value\n * TODO - handle single values for size 1 attributes?\n * TODO - convert classic arrays based on known type?\n */\n enable(location: number, enable = true): this {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers...\n const canDisableAttributeZero = this.device.isWebGL2 || getBrowser() === 'Chrome';\n const canDisableAttribute = canDisableAttributeZero || location !== 0;\n\n if (enable || canDisableAttribute) {\n location = Number(location);\n this.bind(() =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n}\n"],"file":"webgl-vertex-array-object.js"}
1
+ {"version":3,"sources":["../../../../src/adapter/objects/webgl-vertex-array-object.ts"],"names":["assert","GL","getBrowser","WebGLResource","ERR_ELEMENTS","WEBGLVertexArrayObject","Symbol","toStringTag","constructor","device","props","_createHandle","gl2","createVertexArray","_deleteHandle","deleteVertexArray","handle","elements","_bindHandle","bindVertexArray","setElementBuffer","elementBuffer","opts","target","ELEMENT_ARRAY_BUFFER","bind","gl","bindBuffer","setBuffer","location","buffer","accessor","size","type","stride","offset","normalized","integer","divisor","Number","ARRAY_BUFFER","assertWebGL2","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","canDisableAttributeZero","isWebGL2","canDisableAttribute","disableVertexAttribArray"],"mappings":"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","sourcesContent":["import {assert, ResourceProps} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getBrowser} from '@probe.gl/env';\n\nimport WebGLDevice from '../webgl-device';\nimport WebGLResource from './webgl-resource';\n\nimport Buffer from '../resources/webgl-buffer';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\n/**\n * VertexArrayObject properties\n */\nexport type VertexArrayObjectProps = ResourceProps & {\n};\n\n/** VertexArrayObject wrapper */\nexport default class WEBGLVertexArrayObject extends WebGLResource<VertexArrayObjectProps> {\n get [Symbol.toStringTag](): string {\n return 'BaseVertexArrayObject';\n }\n\n constructor(device: WebGLDevice, props?: VertexArrayObjectProps) {\n // @ts-expect-error\n super(device, props, {});\n }\n\n _createHandle() {\n return this.gl2.createVertexArray();\n }\n\n _deleteHandle(): void {\n this.gl2.deleteVertexArray(this.handle);\n // @ts-expect-error\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle: WEBGLVertexArrayObject): void {\n this.gl2.bindVertexArray(handle);\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer: Buffer | null = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */\n setBuffer(location: number, buffer: Buffer, accessor: any): this {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n this.device.assertWebGL2();\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n /**\n * Enabling an attribute location makes it reference the currently bound buffer\n * Disabling an attribute location makes it reference the global constant value\n * TODO - handle single values for size 1 attributes?\n * TODO - convert classic arrays based on known type?\n */\n enable(location: number, enable = true): this {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers...\n const canDisableAttributeZero = this.device.isWebGL2 || getBrowser() === 'Chrome';\n const canDisableAttribute = canDisableAttributeZero || location !== 0;\n\n if (enable || canDisableAttribute) {\n location = Number(location);\n this.bind(() =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n}\n"],"file":"webgl-vertex-array-object.js"}
@@ -20,7 +20,7 @@ export default class WEBGLBuffer extends Buffer {
20
20
 
21
21
  _defineProperty(this, "bytesUsed", void 0);
22
22
 
23
- _defineProperty(this, "debugData", void 0);
23
+ _defineProperty(this, "debugData", null);
24
24
 
25
25
  _defineProperty(this, "webglUsage", void 0);
26
26
 
@@ -85,7 +85,7 @@ export default class WEBGLBuffer extends Buffer {
85
85
  this.removeStats();
86
86
  this.trackDeallocatedMemory();
87
87
  this.gl.deleteBuffer(this.handle);
88
- this.handle = null;
88
+ this.destroyed = true;
89
89
  }
90
90
  }
91
91
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/resources/webgl-buffer.ts"],"names":["Buffer","assert","GL","DEBUG_DATA_LENGTH","WEBGLBuffer","constructor","device","props","gl","gl2","handle","undefined","createBuffer","__SPECTOR_Metadata","data","target","getWebGLTarget","usage","webglUsage","getWebGLUsage","debugData","_initWithData","byteOffset","byteLength","_initWithByteLength","ArrayBuffer","isView","_getWriteTarget","bindBuffer","bufferData","bufferSubData","slice","bytesUsed","trackAllocatedMemory","Float32Array","destroy","removeStats","trackDeallocatedMemory","deleteBuffer","write","srcOffset","isWebGL2","COPY_WRITE_BUFFER","assertWebGL2","offset","readAsync","Uint8Array","dstOffset","COPY_READ_BUFFER","getBufferSubData","_invalidateDebugData","_getReadTarget","INDEX","ELEMENT_ARRAY_BUFFER","VERTEX","ARRAY_BUFFER","UNIFORM","UNIFORM_BUFFER","STATIC_DRAW","DYNAMIC_DRAW"],"mappings":"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","sourcesContent":["import type {BufferProps} from '@luma.gl/api';\nimport {Buffer, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../webgl-device';\n\nconst DEBUG_DATA_LENGTH = 10;\n\n/** WebGL Buffer interface */\nexport default class WEBGLBuffer extends Buffer {\n readonly device: WebGLDevice;\n readonly gl: WebGLRenderingContext;\n readonly gl2: WebGL2RenderingContext | null;\n readonly handle: WebGLBuffer;\n readonly target: number;\n\n byteLength: number;\n bytesUsed: number;\n debugData: ArrayBuffer;\n\n webglUsage: number;\n\n accessor: {};\n\n constructor(device: WebGLDevice, props: BufferProps = {}) {\n super(device, props);\n\n this.device = device;\n this.gl = this.device.gl;\n this.gl2 = this.device.gl2;\n\n const handle = typeof props === 'object' ? (props as BufferProps).handle : undefined;\n this.handle = handle || this.gl.createBuffer();\n // @ts-expect-error Add metadata for spector\n this.handle.__SPECTOR_Metadata = {...this.props, data: typeof this.props.data}; // {name: this.props.id};\n\n // In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers\n // otherwise buffer type will lock to generic (non-element) buffer\n // In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here\n // @ts-expect-error Hack - Checking for subclass prop\n this.target = this.props.target || getWebGLTarget(this.props.usage);\n // @ts-expect-error Hack - Checking for subclass prop\n this.webglUsage = this.props.webglUsage || getWebGLUsage(this.props.usage);\n this.debugData = null;\n\n // Set data: (re)initializes the buffer\n if (props.data) {\n this._initWithData(props.data, props.byteOffset, props.byteLength);\n } else {\n this._initWithByteLength(props.byteLength || 0);\n }\n\n // Deprecated: Merge main props and accessor\n // this.accessor = {...props.accessor};\n\n // Object.seal(this);\n }\n\n // PRIVATE METHODS\n\n // Allocate a new buffer and initialize to contents of typed array\n _initWithData(data, byteOffset: number = 0, byteLength: number = data.byteLength + byteOffset): this {\n assert(ArrayBuffer.isView(data));\n\n const target = this._getWriteTarget();\n\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, byteLength, this.webglUsage);\n this.gl.bufferSubData(target, byteOffset, data);\n this.gl.bindBuffer(target, null);\n\n this.debugData = data.slice(0, DEBUG_DATA_LENGTH);\n this.bytesUsed = byteLength;\n this.byteLength = byteLength;\n this.trackAllocatedMemory(byteLength);\n\n return this;\n }\n\n // Allocate a GPU buffer of specified size.\n _initWithByteLength(byteLength: number): this {\n assert(byteLength >= 0);\n\n // Workaround needed for Safari (#291):\n // gl.bufferData with size equal to 0 crashes. Instead create zero sized array.\n let data = byteLength;\n if (byteLength === 0) {\n // @ts-expect-error\n data = new Float32Array(0);\n }\n\n const target = this._getWriteTarget();\n\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, data, this.webglUsage);\n this.gl.bindBuffer(target, null);\n\n this.debugData = null;\n this.bytesUsed = byteLength;\n this.byteLength = byteLength;\n\n return this;\n }\n\n destroy(): void {\n if (this.handle) {\n this.removeStats();\n this.trackDeallocatedMemory();\n this.gl.deleteBuffer(this.handle);\n // @ts-expect-error\n this.handle = null;\n }\n }\n\n write(data: ArrayBufferView, byteOffset: number = 0): void {\n const srcOffset = 0;\n const byteLength = data.byteLength;\n\n // Create the buffer - binding it here for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n const target = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.target;\n this.gl.bindBuffer(target, this.handle);\n // WebGL2: subData supports additional srcOffset and length parameters\n if (srcOffset !== 0 || byteLength !== undefined) {\n this.device.assertWebGL2();\n\n // @ts-expect-error\n this.gl.bufferSubData(this.target, offset, data, srcOffset, byteLength);\n } else {\n this.gl.bufferSubData(target, byteOffset, data);\n }\n this.gl.bindBuffer(target, null);\n\n // TODO - update local `data` if offsets are right\n // this.debugData = data.slice(byteOffset, 40);\n }\n\n /** Read data from the buffer */\n async readAsync(\n byteOffset: number = 0,\n byteLength?: number\n ): Promise<ArrayBuffer> {\n this.device.assertWebGL2();\n\n const data = new Uint8Array(byteLength);\n const dstOffset = 0;\n\n // Use GL.COPY_READ_BUFFER to avoid disturbing other targets and locking type\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, this.handle);\n this.gl2.getBufferSubData(GL.COPY_READ_BUFFER, byteOffset, data, dstOffset, byteLength);\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, null);\n\n // TODO - update local `data` if offsets are 0\n // this.debugData = null;\n\n return data;\n }\n\n // PROTECTED METHODS (INTENDED FOR USE BY OTHER FRAMEWORK CODE ONLY)\n\n _invalidateDebugData() {\n this.debugData = null;\n }\n\n _getWriteTarget() {\n return this.target;\n // return this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.target;\n }\n\n _getReadTarget() {\n return this.target;\n return this.device.isWebGL2 ? GL.COPY_READ_BUFFER : this.target;\n }\n}\n\n// static MAP_READ = 0x01;\n// static MAP_WRITE = 0x02;\n// static COPY_SRC = 0x0004;\n// static COPY_DST = 0x0008;\n// static INDEX = 0x0010;\n// static VERTEX = 0x0020;\n// static UNIFORM = 0x0040;\n// static STORAGE = 0x0080;\n// static INDIRECT = 0x0100;\n// static QUERY_RESOLVE = 0x0200;\n\nfunction getWebGLTarget(usage: number): GL {\n if (usage & Buffer.INDEX) {\n return GL.ELEMENT_ARRAY_BUFFER;\n }\n if (usage & Buffer.VERTEX) {\n return GL.ARRAY_BUFFER;\n }\n if (usage & Buffer.UNIFORM) {\n return GL.UNIFORM_BUFFER;\n }\n\n // gl.COPY_READ_BUFFER: Buffer for copying from one buffer object to another.\n // gl.COPY_WRITE_BUFFER: Buffer for copying from one buffer object to another.\n // gl.TRANSFORM_FEEDBACK_BUFFER: Buffer for transform feedback operations.\n // gl.PIXEL_PACK_BUFFER: Buffer used for pixel transfer operations.\n // gl.PIXEL_UNPACK_BUFFER: Buffer used for pixel transfer operations.\n\n // Binding a buffer for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n return GL.ARRAY_BUFFER;\n}\n\nfunction getWebGLUsage(usage: number): GL {\n if (usage & Buffer.INDEX) {\n return GL.STATIC_DRAW;\n }\n if (usage & Buffer.VERTEX) {\n return GL.STATIC_DRAW;\n }\n if (usage & Buffer.UNIFORM) {\n return GL.DYNAMIC_DRAW;\n }\n return GL.DYNAMIC_DRAW;\n}\n"],"file":"webgl-buffer.js"}
1
+ {"version":3,"sources":["../../../../src/adapter/resources/webgl-buffer.ts"],"names":["Buffer","assert","GL","DEBUG_DATA_LENGTH","WEBGLBuffer","constructor","device","props","gl","gl2","handle","undefined","createBuffer","__SPECTOR_Metadata","data","target","getWebGLTarget","usage","webglUsage","getWebGLUsage","debugData","_initWithData","byteOffset","byteLength","_initWithByteLength","ArrayBuffer","isView","_getWriteTarget","bindBuffer","bufferData","bufferSubData","slice","bytesUsed","trackAllocatedMemory","Float32Array","destroy","removeStats","trackDeallocatedMemory","deleteBuffer","destroyed","write","srcOffset","isWebGL2","COPY_WRITE_BUFFER","assertWebGL2","offset","readAsync","Uint8Array","dstOffset","COPY_READ_BUFFER","getBufferSubData","_invalidateDebugData","_getReadTarget","INDEX","ELEMENT_ARRAY_BUFFER","VERTEX","ARRAY_BUFFER","UNIFORM","UNIFORM_BUFFER","STATIC_DRAW","DYNAMIC_DRAW"],"mappings":"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","sourcesContent":["import type {BufferProps} from '@luma.gl/api';\nimport {Buffer, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../webgl-device';\n\nconst DEBUG_DATA_LENGTH = 10;\n\n/** WebGL Buffer interface */\nexport default class WEBGLBuffer extends Buffer {\n readonly device: WebGLDevice;\n readonly gl: WebGLRenderingContext;\n readonly gl2: WebGL2RenderingContext | null;\n readonly handle: WebGLBuffer;\n readonly target: number;\n\n byteLength: number;\n bytesUsed: number;\n debugData: ArrayBuffer | null = null;\n\n webglUsage: number;\n\n accessor: {};\n\n constructor(device: WebGLDevice, props: BufferProps = {}) {\n super(device, props);\n\n this.device = device;\n this.gl = this.device.gl;\n this.gl2 = this.device.gl2;\n\n const handle = typeof props === 'object' ? (props as BufferProps).handle : undefined;\n this.handle = handle || this.gl.createBuffer();\n // @ts-expect-error Add metadata for spector\n this.handle.__SPECTOR_Metadata = {...this.props, data: typeof this.props.data}; // {name: this.props.id};\n\n // In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers\n // otherwise buffer type will lock to generic (non-element) buffer\n // In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here\n // @ts-expect-error Hack - Checking for subclass prop\n this.target = this.props.target || getWebGLTarget(this.props.usage);\n // @ts-expect-error Hack - Checking for subclass prop\n this.webglUsage = this.props.webglUsage || getWebGLUsage(this.props.usage);\n this.debugData = null;\n\n // Set data: (re)initializes the buffer\n if (props.data) {\n this._initWithData(props.data, props.byteOffset, props.byteLength);\n } else {\n this._initWithByteLength(props.byteLength || 0);\n }\n\n // Deprecated: Merge main props and accessor\n // this.accessor = {...props.accessor};\n\n // Object.seal(this);\n }\n\n // PRIVATE METHODS\n\n // Allocate a new buffer and initialize to contents of typed array\n _initWithData(data, byteOffset: number = 0, byteLength: number = data.byteLength + byteOffset): this {\n assert(ArrayBuffer.isView(data));\n\n const target = this._getWriteTarget();\n\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, byteLength, this.webglUsage);\n this.gl.bufferSubData(target, byteOffset, data);\n this.gl.bindBuffer(target, null);\n\n this.debugData = data.slice(0, DEBUG_DATA_LENGTH);\n this.bytesUsed = byteLength;\n this.byteLength = byteLength;\n this.trackAllocatedMemory(byteLength);\n\n return this;\n }\n\n // Allocate a GPU buffer of specified size.\n _initWithByteLength(byteLength: number): this {\n assert(byteLength >= 0);\n\n // Workaround needed for Safari (#291):\n // gl.bufferData with size equal to 0 crashes. Instead create zero sized array.\n let data = byteLength;\n if (byteLength === 0) {\n // @ts-expect-error\n data = new Float32Array(0);\n }\n\n const target = this._getWriteTarget();\n\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, data, this.webglUsage);\n this.gl.bindBuffer(target, null);\n\n this.debugData = null;\n this.bytesUsed = byteLength;\n this.byteLength = byteLength;\n\n return this;\n }\n\n destroy(): void {\n if (this.handle) {\n this.removeStats();\n this.trackDeallocatedMemory();\n this.gl.deleteBuffer(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n write(data: ArrayBufferView, byteOffset: number = 0): void {\n const srcOffset = 0;\n const byteLength = data.byteLength;\n\n // Create the buffer - binding it here for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n const target = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.target;\n this.gl.bindBuffer(target, this.handle);\n // WebGL2: subData supports additional srcOffset and length parameters\n if (srcOffset !== 0 || byteLength !== undefined) {\n this.device.assertWebGL2();\n\n // @ts-expect-error\n this.gl.bufferSubData(this.target, offset, data, srcOffset, byteLength);\n } else {\n this.gl.bufferSubData(target, byteOffset, data);\n }\n this.gl.bindBuffer(target, null);\n\n // TODO - update local `data` if offsets are right\n // this.debugData = data.slice(byteOffset, 40);\n }\n\n /** Read data from the buffer */\n async readAsync(\n byteOffset: number = 0,\n byteLength?: number\n ): Promise<ArrayBuffer> {\n this.device.assertWebGL2();\n\n const data = new Uint8Array(byteLength);\n const dstOffset = 0;\n\n // Use GL.COPY_READ_BUFFER to avoid disturbing other targets and locking type\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, this.handle);\n this.gl2.getBufferSubData(GL.COPY_READ_BUFFER, byteOffset, data, dstOffset, byteLength);\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, null);\n\n // TODO - update local `data` if offsets are 0\n // this.debugData = null;\n\n return data;\n }\n\n // PROTECTED METHODS (INTENDED FOR USE BY OTHER FRAMEWORK CODE ONLY)\n\n _invalidateDebugData() {\n this.debugData = null;\n }\n\n _getWriteTarget() {\n return this.target;\n // return this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.target;\n }\n\n _getReadTarget() {\n return this.target;\n return this.device.isWebGL2 ? GL.COPY_READ_BUFFER : this.target;\n }\n}\n\n// static MAP_READ = 0x01;\n// static MAP_WRITE = 0x02;\n// static COPY_SRC = 0x0004;\n// static COPY_DST = 0x0008;\n// static INDEX = 0x0010;\n// static VERTEX = 0x0020;\n// static UNIFORM = 0x0040;\n// static STORAGE = 0x0080;\n// static INDIRECT = 0x0100;\n// static QUERY_RESOLVE = 0x0200;\n\nfunction getWebGLTarget(usage: number): GL {\n if (usage & Buffer.INDEX) {\n return GL.ELEMENT_ARRAY_BUFFER;\n }\n if (usage & Buffer.VERTEX) {\n return GL.ARRAY_BUFFER;\n }\n if (usage & Buffer.UNIFORM) {\n return GL.UNIFORM_BUFFER;\n }\n\n // gl.COPY_READ_BUFFER: Buffer for copying from one buffer object to another.\n // gl.COPY_WRITE_BUFFER: Buffer for copying from one buffer object to another.\n // gl.TRANSFORM_FEEDBACK_BUFFER: Buffer for transform feedback operations.\n // gl.PIXEL_PACK_BUFFER: Buffer used for pixel transfer operations.\n // gl.PIXEL_UNPACK_BUFFER: Buffer used for pixel transfer operations.\n\n // Binding a buffer for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n return GL.ARRAY_BUFFER;\n}\n\nfunction getWebGLUsage(usage: number): GL {\n if (usage & Buffer.INDEX) {\n return GL.STATIC_DRAW;\n }\n if (usage & Buffer.VERTEX) {\n return GL.STATIC_DRAW;\n }\n if (usage & Buffer.UNIFORM) {\n return GL.DYNAMIC_DRAW;\n }\n return GL.DYNAMIC_DRAW;\n}\n"],"file":"webgl-buffer.js"}
@@ -20,7 +20,9 @@ export default class WEBGLFramebuffer extends Framebuffer {
20
20
 
21
21
  _defineProperty(this, "colorAttachments", []);
22
22
 
23
- _defineProperty(this, "depthStencilAttachment", undefined);
23
+ _defineProperty(this, "depthStencilAttachment", null);
24
+
25
+ _defineProperty(this, "d", void 0);
24
26
 
25
27
  _defineProperty(this, "_ownResources", []);
26
28
 
@@ -66,7 +68,7 @@ export default class WEBGLFramebuffer extends Framebuffer {
66
68
  }
67
69
 
68
70
  this.gl.deleteFramebuffer(this.handle);
69
- this.handle = null;
71
+ this.destroyed = true;
70
72
  }
71
73
  }
72
74
 
@@ -213,7 +215,7 @@ export default class WEBGLFramebuffer extends Framebuffer {
213
215
  case GL.TEXTURE_2D_ARRAY:
214
216
  case GL.TEXTURE_3D:
215
217
  this.device.assertWebGL2();
216
- gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
218
+ gl2 === null || gl2 === void 0 ? void 0 : gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
217
219
  break;
218
220
 
219
221
  case GL.TEXTURE_CUBE_MAP:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/resources/webgl-framebuffer.ts"],"names":["Framebuffer","Texture","log","assert","GL","WebGLTexture","Renderbuffer","getWebGLTextureFormat","getWebGLDepthStencilAttachment","WEBGLFramebuffer","texture","colorAttachments","constructor","device","props","undefined","gl","handle","createFramebuffer","__SPECTOR_Metadata","id","_createColorAttachments","depthStencilAttachment","_createDepthStencilAttachment","prevHandle","bindFramebuffer","FRAMEBUFFER","i","length","attachment","attachmentPoint","COLOR_ATTACHMENT0","_attachOne","format","check","_checkStatus","destroy","resource","_ownResources","deleteFramebuffer","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","Error","_getFrameBufferStatus","map","colorAttachment","_createColorAttachment","width","height","_createTexture","data","mipmaps","sampler","minFilter","magFilter","addressModeU","addressModeV","push","webglFormat","_resizeAttachments","drawingBufferWidth","drawingBufferHeight","resize","_attachRenderbuffer","Array","isArray","layer","level","_attachTexture","renderbuffer","framebufferRenderbuffer","RENDERBUFFER","gl2","bindTexture","target","TEXTURE_2D_ARRAY","TEXTURE_3D","assertWebGL2","framebufferTextureLayer","TEXTURE_CUBE_MAP","face","mapIndexToCubeMapFace","framebufferTexture2D","TEXTURE_2D","TEXTURE_CUBE_MAP_POSITIVE_X","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"],"mappings":"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","sourcesContent":["import type {FramebufferProps, DepthStencilTextureFormat, ColorTextureFormat} from '@luma.gl/api';\nimport {Framebuffer, Texture, log, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../webgl-device';\nimport WebGLTexture from './webgl-texture';\nimport Renderbuffer from '../objects/webgl-renderbuffer';\nimport {getWebGLTextureFormat, getWebGLDepthStencilAttachment} from '../converters/texture-formats';\n\nexport type TextureAttachment = [Texture, number?, number?];\nexport type Attachment = WebGLTexture | Renderbuffer | TextureAttachment;\n\n/** luma.gl Framebuffer, WebGL implementation */\nexport default class WEBGLFramebuffer extends Framebuffer {\n device: WebGLDevice;\n gl: WebGLRenderingContext;\n handle: WebGLFramebuffer;\n\n get texture() { return this.colorAttachments[0]; }\n readonly colorAttachments: WebGLTexture[] = [];\n readonly depthStencilAttachment: WebGLTexture | undefined = undefined;\n protected _ownResources: (WebGLTexture | Renderbuffer)[] = [];\n\n constructor(device: WebGLDevice, props: FramebufferProps) {\n super(device, props);\n this.device = device;\n this.gl = device.gl;\n this.handle = this.props.handle !== undefined ? this.props.handle : this.gl.createFramebuffer();\n\n if (this.handle) { // default framebuffer is null...\n // @ts-expect-error Per SPECTOR docs\n this.handle.__SPECTOR_Metadata = {id: this.props.id, props: this.props};\n }\n\n this.colorAttachments = this._createColorAttachments();\n // @ts-expect-error\n this.depthStencilAttachment = this._createDepthStencilAttachment();\n\n /** Attach from a map of attachments */\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (let i = 0; i < this.colorAttachments.length; ++i) {\n const attachment = this.colorAttachments[i];\n const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;\n if (attachment) {\n this._attachOne(attachmentPoint, attachment);\n }\n }\n\n if (this.props.depthStencilAttachment) {\n this._attachOne(getWebGLDepthStencilAttachment(this.depthStencilAttachment.format), this.depthStencilAttachment);\n }\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n // @ts-expect-error\n if (props.check !== false) {\n this._checkStatus();\n }\n }\n\n destroy() {\n if (this.handle !== null) {\n for (const resource of this._ownResources) {\n resource.destroy();\n }\n this.gl.deleteFramebuffer(this.handle);\n this.handle = null;\n }\n }\n\n // PRIVATE\n\n /** Check the status */\n protected _checkStatus(): void {\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 if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);\n }\n }\n\n _createColorAttachments(): WebGLTexture[] {\n return this.props.colorAttachments.map(colorAttachment => {\n if (!colorAttachment) {\n return undefined;\n }\n if (colorAttachment instanceof WebGLTexture) {\n return colorAttachment;\n }\n // if (typeof colorAttachment === 'default') {\n // return this._createColorAttachment('rgba8unorm', this.width, this.height);\n // }\n // @ts-expect-error\n return this._createColorAttachment(colorAttachment, this.width, this.height);\n });\n }\n\n /** Create a color attachment */\n protected _createColorAttachment(format: ColorTextureFormat, width: number, height: number): WebGLTexture {\n const texture = this.device._createTexture({\n id: `${this.id}-color`,\n data: null, // reserves texture memory, but texels are undefined\n format,\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 sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n },\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 }) as WebGLTexture;\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Create a depth stencil attachment GL.DEPTH24_STENCIL8 */\n protected _createDepthStencilAttachment(): Renderbuffer | WebGLTexture {\n if (!this.props.depthStencilAttachment) {\n return undefined;\n }\n if (this.props.depthStencilAttachment instanceof Renderbuffer) {\n return this.props.depthStencilAttachment;\n }\n if (this.props.depthStencilAttachment instanceof Texture) {\n return this.props.depthStencilAttachment as unknown as WebGLTexture;\n }\n const format = this.props.depthStencilAttachment;\n const webglFormat = getWebGLTextureFormat(this.gl, format);\n\n const texture = new Renderbuffer(this.device, {\n id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?\n format: webglFormat,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n width: this.width,\n height: this.height\n });\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Attachment resize is expected to be a noop if size is same */\n protected _resizeAttachments(width: number, height: number): this {\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 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\n for (const colorAttachment of this.colorAttachments) {\n colorAttachment.resize({width, height});\n }\n this.depthStencilAttachment?.resize({width, height});\n return this;\n }\n\n /** Attach one attachment */\n protected _attachOne(attachmentPoint: GL, attachment: Attachment): WebGLTexture | Renderbuffer {\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 as unknown as WebGLTexture, layer, level);\n return texture as unknown as WebGLTexture;\n } else if (attachment instanceof WebGLTexture) {\n this._attachTexture(attachmentPoint, attachment, 0, 0);\n return attachment;\n }\n }\n\n protected _attachRenderbuffer(attachment: GL, renderbuffer: Renderbuffer): void {\n this.gl.framebufferRenderbuffer(\n GL.FRAMEBUFFER,\n attachment,\n GL.RENDERBUFFER,\n renderbuffer.handle\n );\n }\n\n /**\n * @param attachment\n * @param texture\n * @param layer = 0 - index into WebGLTextureArray and Texture3D or face for `TextureCubeMap`\n * @param level = 0 - mipmapLevel (must be 0 in WebGL1)\n */\n protected _attachTexture(attachment: GL, texture: WebGLTexture, layer: number, level: number): void {\n const {gl, gl2} = this.device;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n this.device.assertWebGL2();\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\n// Helper functions\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 switch (status) {\n case GL.FRAMEBUFFER_COMPLETE:\n return 'success';\n case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n return 'Mismatched attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n return 'No attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n return 'Height/width mismatch';\n case GL.FRAMEBUFFER_UNSUPPORTED:\n return 'Unsupported or split attachments';\n // WebGL2\n case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:\n return 'Samples mismatch';\n // OVR_multiview2 extension\n // case GL.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: return 'baseViewIndex mismatch';\n default:\n return `${status}`;\n }\n}\n"],"file":"webgl-framebuffer.js"}
1
+ {"version":3,"sources":["../../../../src/adapter/resources/webgl-framebuffer.ts"],"names":["Framebuffer","Texture","log","assert","GL","WebGLTexture","Renderbuffer","getWebGLTextureFormat","getWebGLDepthStencilAttachment","WEBGLFramebuffer","texture","colorAttachments","constructor","device","props","gl","handle","undefined","createFramebuffer","__SPECTOR_Metadata","id","_createColorAttachments","depthStencilAttachment","_createDepthStencilAttachment","prevHandle","bindFramebuffer","FRAMEBUFFER","i","length","attachment","attachmentPoint","COLOR_ATTACHMENT0","_attachOne","format","check","_checkStatus","destroy","resource","_ownResources","deleteFramebuffer","destroyed","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","Error","_getFrameBufferStatus","map","colorAttachment","_createColorAttachment","width","height","_createTexture","data","mipmaps","sampler","minFilter","magFilter","addressModeU","addressModeV","push","webglFormat","_resizeAttachments","drawingBufferWidth","drawingBufferHeight","resize","_attachRenderbuffer","Array","isArray","layer","level","_attachTexture","renderbuffer","framebufferRenderbuffer","RENDERBUFFER","gl2","bindTexture","target","TEXTURE_2D_ARRAY","TEXTURE_3D","assertWebGL2","framebufferTextureLayer","TEXTURE_CUBE_MAP","face","mapIndexToCubeMapFace","framebufferTexture2D","TEXTURE_2D","TEXTURE_CUBE_MAP_POSITIVE_X","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\n\nimport type {FramebufferProps, DepthStencilTextureFormat, ColorTextureFormat} from '@luma.gl/api';\nimport {Framebuffer, Texture, log, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../webgl-device';\nimport WebGLTexture from './webgl-texture';\nimport Renderbuffer from '../objects/webgl-renderbuffer';\nimport {getWebGLTextureFormat, getWebGLDepthStencilAttachment} from '../converters/texture-formats';\n\nexport type TextureAttachment = [Texture, number?, number?];\nexport type Attachment = WebGLTexture | Renderbuffer | TextureAttachment;\n\n/** luma.gl Framebuffer, WebGL implementation */\nexport default class WEBGLFramebuffer extends Framebuffer {\n device: WebGLDevice;\n gl: WebGLRenderingContext;\n handle: WebGLFramebuffer;\n\n get texture() { return this.colorAttachments[0]; }\n readonly colorAttachments: WebGLTexture[] = [];\n readonly depthStencilAttachment: WebGLTexture | null = null; d \n protected _ownResources: (WebGLTexture | Renderbuffer)[] = [];\n\n constructor(device: WebGLDevice, props: FramebufferProps) {\n super(device, props);\n this.device = device;\n this.gl = device.gl;\n this.handle = this.props.handle !== undefined ? this.props.handle : this.gl.createFramebuffer();\n\n if (this.handle) { // default framebuffer is null...\n // @ts-expect-error Per SPECTOR docs\n this.handle.__SPECTOR_Metadata = {id: this.props.id, props: this.props};\n }\n\n this.colorAttachments = this._createColorAttachments();\n // @ts-expect-error\n this.depthStencilAttachment = this._createDepthStencilAttachment();\n\n /** Attach from a map of attachments */\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (let i = 0; i < this.colorAttachments.length; ++i) {\n const attachment = this.colorAttachments[i];\n const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;\n if (attachment) {\n this._attachOne(attachmentPoint, attachment);\n }\n }\n\n if (this.props.depthStencilAttachment) {\n this._attachOne(getWebGLDepthStencilAttachment(this.depthStencilAttachment.format), this.depthStencilAttachment);\n }\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n // @ts-expect-error\n if (props.check !== false) {\n this._checkStatus();\n }\n }\n\n destroy() {\n if (this.handle !== null) {\n for (const resource of this._ownResources) {\n resource.destroy();\n }\n this.gl.deleteFramebuffer(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n // PRIVATE\n\n /** Check the status */\n protected _checkStatus(): void {\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 if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);\n }\n }\n\n _createColorAttachments(): WebGLTexture[] {\n return this.props.colorAttachments.map(colorAttachment => {\n if (!colorAttachment) {\n return undefined;\n }\n if (colorAttachment instanceof WebGLTexture) {\n return colorAttachment;\n }\n // if (typeof colorAttachment === 'default') {\n // return this._createColorAttachment('rgba8unorm', this.width, this.height);\n // }\n // @ts-expect-error\n return this._createColorAttachment(colorAttachment, this.width, this.height);\n });\n }\n\n /** Create a color attachment */\n protected _createColorAttachment(format: ColorTextureFormat, width: number, height: number): WebGLTexture {\n const texture = this.device._createTexture({\n id: `${this.id}-color`,\n data: null, // reserves texture memory, but texels are undefined\n format,\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 sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n },\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 }) as WebGLTexture;\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Create a depth stencil attachment GL.DEPTH24_STENCIL8 */\n protected _createDepthStencilAttachment(): Renderbuffer | WebGLTexture {\n if (!this.props.depthStencilAttachment) {\n return undefined;\n }\n if (this.props.depthStencilAttachment instanceof Renderbuffer) {\n return this.props.depthStencilAttachment;\n }\n if (this.props.depthStencilAttachment instanceof Texture) {\n return this.props.depthStencilAttachment as unknown as WebGLTexture;\n }\n const format = this.props.depthStencilAttachment;\n const webglFormat = getWebGLTextureFormat(this.gl, format);\n\n const texture = new Renderbuffer(this.device, {\n id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?\n format: webglFormat,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n width: this.width,\n height: this.height\n });\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Attachment resize is expected to be a noop if size is same */\n protected _resizeAttachments(width: number, height: number): this {\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 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\n for (const colorAttachment of this.colorAttachments) {\n colorAttachment.resize({width, height});\n }\n this.depthStencilAttachment?.resize({width, height});\n return this;\n }\n\n /** Attach one attachment */\n protected _attachOne(attachmentPoint: GL, attachment: Attachment): WebGLTexture | Renderbuffer {\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 as unknown as WebGLTexture, layer, level);\n return texture as unknown as WebGLTexture;\n } else if (attachment instanceof WebGLTexture) {\n this._attachTexture(attachmentPoint, attachment, 0, 0);\n return attachment;\n }\n }\n\n protected _attachRenderbuffer(attachment: GL, renderbuffer: Renderbuffer): void {\n this.gl.framebufferRenderbuffer(\n GL.FRAMEBUFFER,\n attachment,\n GL.RENDERBUFFER,\n renderbuffer.handle\n );\n }\n\n /**\n * @param attachment\n * @param texture\n * @param layer = 0 - index into WebGLTextureArray and Texture3D or face for `TextureCubeMap`\n * @param level = 0 - mipmapLevel (must be 0 in WebGL1)\n */\n protected _attachTexture(attachment: GL, texture: WebGLTexture, layer: number, level: number): void {\n const {gl, gl2} = this.device;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n this.device.assertWebGL2();\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\n// Helper functions\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 switch (status) {\n case GL.FRAMEBUFFER_COMPLETE:\n return 'success';\n case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n return 'Mismatched attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n return 'No attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n return 'Height/width mismatch';\n case GL.FRAMEBUFFER_UNSUPPORTED:\n return 'Unsupported or split attachments';\n // WebGL2\n case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:\n return 'Samples mismatch';\n // OVR_multiview2 extension\n // case GL.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: return 'baseViewIndex mismatch';\n default:\n return `${status}`;\n }\n}\n"],"file":"webgl-framebuffer.js"}
@@ -5,6 +5,8 @@ export default class WEBGLRenderPass extends RenderPass {
5
5
  super(device, props);
6
6
 
7
7
  _defineProperty(this, "device", void 0);
8
+
9
+ this.device = device;
8
10
  }
9
11
 
10
12
  endPass() {}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/resources/webgl-render-pass.ts"],"names":["RenderPass","WEBGLRenderPass","constructor","device","props","endPass","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"mappings":";AAAA,SAAQA,UAAR,QAA0C,cAA1C;AAGA,eAAe,MAAMC,eAAN,SAA8BD,UAA9B,CAAyC;AAGtDE,EAAAA,WAAW,CAACC,MAAD,EAAsBC,KAAtB,EAA8C;AACvD,UAAMD,MAAN,EAAcC,KAAd;;AADuD;AAExD;;AAEDC,EAAAA,OAAO,GAAS,CAAE;;AAElBC,EAAAA,cAAc,CAACC,UAAD,EAA2B,CAAE;;AAC3CC,EAAAA,aAAa,GAAS,CAAE;;AACxBC,EAAAA,iBAAiB,CAACC,WAAD,EAA4B,CAAE;;AAXO","sourcesContent":["import {RenderPass, RenderPassProps} from '@luma.gl/api';\nimport WebGLDevice from '../webgl-device';\n\nexport default class WEBGLRenderPass extends RenderPass {\n readonly device: WebGLDevice;\n\n constructor(device: WebGLDevice, props: RenderPassProps) {\n super(device, props);\n }\n\n endPass(): void {}\n\n pushDebugGroup(groupLabel: string): void {}\n popDebugGroup(): void {}\n insertDebugMarker(markerLabel: string): void {}\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n}\n"],"file":"webgl-render-pass.js"}
1
+ {"version":3,"sources":["../../../../src/adapter/resources/webgl-render-pass.ts"],"names":["RenderPass","WEBGLRenderPass","constructor","device","props","endPass","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"mappings":";AAAA,SAAQA,UAAR,QAA0C,cAA1C;AAGA,eAAe,MAAMC,eAAN,SAA8BD,UAA9B,CAAyC;AAGtDE,EAAAA,WAAW,CAACC,MAAD,EAAsBC,KAAtB,EAA8C;AACvD,UAAMD,MAAN,EAAcC,KAAd;;AADuD;;AAEvD,SAAKD,MAAL,GAAcA,MAAd;AACD;;AAEDE,EAAAA,OAAO,GAAS,CAAE;;AAElBC,EAAAA,cAAc,CAACC,UAAD,EAA2B,CAAE;;AAC3CC,EAAAA,aAAa,GAAS,CAAE;;AACxBC,EAAAA,iBAAiB,CAACC,WAAD,EAA4B,CAAE;;AAZO","sourcesContent":["import {RenderPass, RenderPassProps} from '@luma.gl/api';\nimport WebGLDevice from '../webgl-device';\n\nexport default class WEBGLRenderPass extends RenderPass {\n readonly device: WebGLDevice;\n\n constructor(device: WebGLDevice, props: RenderPassProps) {\n super(device, props);\n this.device = device;\n }\n\n endPass(): void {}\n\n pushDebugGroup(groupLabel: string): void {}\n popDebugGroup(): void {}\n insertDebugMarker(markerLabel: string): void {}\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n}\n"],"file":"webgl-render-pass.js"}