@luma.gl/webgl 9.0.0-beta.4 → 9.0.0-beta.5

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 (237) hide show
  1. package/dist/adapter/converters/device-parameters.js +240 -158
  2. package/dist/adapter/converters/sampler-parameters.d.ts +0 -4
  3. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/sampler-parameters.js +73 -68
  5. package/dist/adapter/converters/shader-formats.js +33 -46
  6. package/dist/adapter/converters/texture-formats.d.ts +9 -18
  7. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  8. package/dist/adapter/converters/texture-formats.js +454 -871
  9. package/dist/adapter/converters/vertex-formats.js +52 -61
  10. package/dist/adapter/device-helpers/device-features.d.ts +2 -5
  11. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  12. package/dist/adapter/device-helpers/device-features.js +56 -87
  13. package/dist/adapter/device-helpers/device-limits.d.ts +2 -4
  14. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  15. package/dist/adapter/device-helpers/device-limits.js +88 -83
  16. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  17. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  18. package/dist/adapter/device-helpers/get-device-info.js +79 -63
  19. package/dist/adapter/device-helpers/webgl-device-features.d.ts +6 -0
  20. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
  21. package/dist/adapter/device-helpers/webgl-device-features.js +52 -0
  22. package/dist/adapter/device-helpers/webgl-device-info.d.ts +4 -0
  23. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
  24. package/dist/adapter/device-helpers/webgl-device-info.js +87 -0
  25. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +50 -0
  26. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
  27. package/dist/adapter/device-helpers/webgl-device-limits.js +92 -0
  28. package/dist/adapter/helpers/decode-webgl-types.js +87 -76
  29. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
  30. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  31. package/dist/adapter/helpers/get-shader-layout.js +261 -226
  32. package/dist/adapter/helpers/parse-shader-compiler-log.js +46 -37
  33. package/dist/adapter/helpers/set-uniform.d.ts +1 -1
  34. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  35. package/dist/adapter/helpers/set-uniform.js +67 -82
  36. package/dist/adapter/helpers/webgl-topology-utils.js +77 -93
  37. package/dist/adapter/objects/constants-to-keys.d.ts +1 -1
  38. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  39. package/dist/adapter/objects/constants-to-keys.js +18 -12
  40. package/dist/adapter/objects/webgl-renderbuffer.js +76 -80
  41. package/dist/adapter/objects/webgl-resource.d.ts +1 -1
  42. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  43. package/dist/adapter/objects/webgl-resource.js +204 -154
  44. package/dist/adapter/resources/webgl-buffer.d.ts +2 -3
  45. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  46. package/dist/adapter/resources/webgl-buffer.js +160 -119
  47. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  48. package/dist/adapter/resources/webgl-command-buffer.js +268 -171
  49. package/dist/adapter/resources/webgl-command-encoder.js +32 -40
  50. package/dist/adapter/resources/webgl-external-texture.js +92 -1
  51. package/dist/adapter/resources/webgl-framebuffer.d.ts +2 -2
  52. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  53. package/dist/adapter/resources/webgl-framebuffer.js +167 -139
  54. package/dist/adapter/resources/webgl-render-pass.js +121 -95
  55. package/dist/adapter/resources/webgl-render-pipeline.d.ts +11 -1
  56. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  57. package/dist/adapter/resources/webgl-render-pipeline.js +378 -228
  58. package/dist/adapter/resources/webgl-sampler.d.ts +0 -2
  59. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  60. package/dist/adapter/resources/webgl-sampler.js +43 -34
  61. package/dist/adapter/resources/webgl-shader.d.ts +10 -1
  62. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  63. package/dist/adapter/resources/webgl-shader.js +106 -45
  64. package/dist/adapter/resources/webgl-texture.d.ts +2 -6
  65. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  66. package/dist/adapter/resources/webgl-texture.js +614 -699
  67. package/dist/adapter/resources/webgl-transform-feedback.d.ts +1 -1
  68. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
  69. package/dist/adapter/resources/webgl-transform-feedback.js +143 -145
  70. package/dist/adapter/resources/webgl-vertex-array.d.ts +1 -1
  71. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
  72. package/dist/adapter/resources/webgl-vertex-array.js +229 -158
  73. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  74. package/dist/adapter/webgl-canvas-context.js +58 -37
  75. package/dist/adapter/webgl-device.d.ts +7 -15
  76. package/dist/adapter/webgl-device.d.ts.map +1 -1
  77. package/dist/adapter/webgl-device.js +440 -381
  78. package/dist/classic/accessor.js +132 -102
  79. package/dist/classic/clear.d.ts +2 -2
  80. package/dist/classic/clear.d.ts.map +1 -1
  81. package/dist/classic/clear.js +73 -73
  82. package/dist/classic/copy-and-blit.d.ts.map +1 -1
  83. package/dist/classic/copy-and-blit.js +176 -177
  84. package/dist/classic/format-utils.d.ts +2 -2
  85. package/dist/classic/format-utils.js +38 -32
  86. package/dist/classic/typed-array-utils.js +95 -81
  87. package/dist/context/{polyfill → context}/context-data.d.ts +2 -1
  88. package/dist/context/context/context-data.d.ts.map +1 -0
  89. package/dist/context/context/context-data.js +33 -0
  90. package/dist/context/context/create-browser-context.d.ts +1 -6
  91. package/dist/context/context/create-browser-context.d.ts.map +1 -1
  92. package/dist/context/context/create-browser-context.js +62 -49
  93. package/dist/context/debug/spector.js +54 -50
  94. package/dist/context/debug/webgl-developer-tools.d.ts +1 -2
  95. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  96. package/dist/context/debug/webgl-developer-tools.js +102 -76
  97. package/dist/context/parameters/unified-parameter-api.d.ts +3 -3
  98. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  99. package/dist/context/parameters/unified-parameter-api.js +95 -46
  100. package/dist/context/parameters/webgl-parameter-tables.d.ts +110 -99
  101. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  102. package/dist/context/parameters/webgl-parameter-tables.js +456 -404
  103. package/dist/context/state-tracker/deep-array-equal.js +18 -14
  104. package/dist/context/state-tracker/track-context-state.d.ts +4 -4
  105. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  106. package/dist/context/state-tracker/track-context-state.js +190 -126
  107. package/dist/context/state-tracker/with-parameters.d.ts +1 -1
  108. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  109. package/dist/context/state-tracker/with-parameters.js +45 -29
  110. package/dist/dist.dev.js +2568 -3786
  111. package/dist/index.cjs +1346 -2464
  112. package/dist/index.cjs.map +7 -0
  113. package/dist/index.d.ts +2 -5
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +36 -26
  116. package/dist/types.js +2 -1
  117. package/dist.min.js +9 -42
  118. package/package.json +11 -15
  119. package/src/adapter/converters/device-parameters.ts +0 -1
  120. package/src/adapter/converters/sampler-parameters.ts +0 -17
  121. package/src/adapter/converters/texture-formats.ts +86 -154
  122. package/src/adapter/device-helpers/webgl-device-features.ts +69 -0
  123. package/src/adapter/device-helpers/{get-device-info.ts → webgl-device-info.ts} +3 -4
  124. package/src/adapter/device-helpers/{device-limits.ts → webgl-device-limits.ts} +25 -23
  125. package/src/adapter/helpers/get-shader-layout.ts +17 -28
  126. package/src/adapter/helpers/set-uniform.ts +1 -3
  127. package/src/adapter/objects/constants-to-keys.ts +1 -1
  128. package/src/adapter/objects/webgl-renderbuffer.ts +4 -4
  129. package/src/adapter/objects/webgl-resource.ts +3 -18
  130. package/src/adapter/resources/webgl-buffer.ts +6 -11
  131. package/src/adapter/resources/webgl-command-buffer.ts +20 -30
  132. package/src/adapter/resources/webgl-external-texture.ts +2 -3
  133. package/src/adapter/resources/webgl-framebuffer.ts +4 -5
  134. package/src/adapter/resources/webgl-render-pass.ts +7 -7
  135. package/src/adapter/resources/webgl-render-pipeline.ts +106 -31
  136. package/src/adapter/resources/webgl-sampler.ts +5 -9
  137. package/src/adapter/resources/webgl-shader.ts +57 -10
  138. package/src/adapter/resources/webgl-texture.ts +29 -103
  139. package/src/adapter/resources/webgl-transform-feedback.ts +14 -15
  140. package/src/adapter/resources/webgl-vertex-array.ts +16 -18
  141. package/src/adapter/webgl-canvas-context.ts +1 -7
  142. package/src/adapter/webgl-device.ts +18 -67
  143. package/src/classic/clear.ts +13 -14
  144. package/src/classic/copy-and-blit.ts +1 -2
  145. package/src/context/context/context-data.ts +44 -0
  146. package/src/context/context/create-browser-context.ts +7 -32
  147. package/src/context/debug/webgl-developer-tools.ts +6 -8
  148. package/src/context/parameters/unified-parameter-api.ts +3 -3
  149. package/src/context/parameters/webgl-parameter-tables.ts +66 -75
  150. package/src/context/state-tracker/track-context-state.ts +18 -17
  151. package/src/context/state-tracker/with-parameters.ts +1 -1
  152. package/src/index.ts +2 -17
  153. package/dist/adapter/converters/device-parameters.js.map +0 -1
  154. package/dist/adapter/converters/sampler-parameters.js.map +0 -1
  155. package/dist/adapter/converters/shader-formats.js.map +0 -1
  156. package/dist/adapter/converters/texture-formats.js.map +0 -1
  157. package/dist/adapter/converters/vertex-formats.js.map +0 -1
  158. package/dist/adapter/device-helpers/device-features.js.map +0 -1
  159. package/dist/adapter/device-helpers/device-limits.js.map +0 -1
  160. package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
  161. package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
  162. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
  163. package/dist/adapter/device-helpers/is-old-ie.js +0 -9
  164. package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
  165. package/dist/adapter/helpers/decode-webgl-types.js.map +0 -1
  166. package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
  167. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  168. package/dist/adapter/helpers/set-uniform.js.map +0 -1
  169. package/dist/adapter/helpers/webgl-topology-utils.js.map +0 -1
  170. package/dist/adapter/objects/constants-to-keys.js.map +0 -1
  171. package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
  172. package/dist/adapter/objects/webgl-resource.js.map +0 -1
  173. package/dist/adapter/resources/webgl-buffer.js.map +0 -1
  174. package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
  175. package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
  176. package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
  177. package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
  178. package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
  179. package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
  180. package/dist/adapter/resources/webgl-sampler.js.map +0 -1
  181. package/dist/adapter/resources/webgl-shader.js.map +0 -1
  182. package/dist/adapter/resources/webgl-texture.js.map +0 -1
  183. package/dist/adapter/resources/webgl-transform-feedback.js.map +0 -1
  184. package/dist/adapter/resources/webgl-vertex-array.js.map +0 -1
  185. package/dist/adapter/webgl-canvas-context.js.map +0 -1
  186. package/dist/adapter/webgl-device.js.map +0 -1
  187. package/dist/classic/accessor.js.map +0 -1
  188. package/dist/classic/clear.js.map +0 -1
  189. package/dist/classic/copy-and-blit.js.map +0 -1
  190. package/dist/classic/format-utils.js.map +0 -1
  191. package/dist/classic/typed-array-utils.js.map +0 -1
  192. package/dist/context/context/create-browser-context.js.map +0 -1
  193. package/dist/context/context/create-headless-context.d.ts +0 -9
  194. package/dist/context/context/create-headless-context.d.ts.map +0 -1
  195. package/dist/context/context/create-headless-context.js +0 -42
  196. package/dist/context/context/create-headless-context.js.map +0 -1
  197. package/dist/context/context/webgl-checks.d.ts +0 -13
  198. package/dist/context/context/webgl-checks.d.ts.map +0 -1
  199. package/dist/context/context/webgl-checks.js +0 -31
  200. package/dist/context/context/webgl-checks.js.map +0 -1
  201. package/dist/context/debug/spector.js.map +0 -1
  202. package/dist/context/debug/webgl-developer-tools.js.map +0 -1
  203. package/dist/context/parameters/unified-parameter-api.js.map +0 -1
  204. package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
  205. package/dist/context/polyfill/context-data.d.ts.map +0 -1
  206. package/dist/context/polyfill/context-data.js +0 -12
  207. package/dist/context/polyfill/context-data.js.map +0 -1
  208. package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
  209. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
  210. package/dist/context/polyfill/get-parameter-polyfill.js +0 -85
  211. package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
  212. package/dist/context/polyfill/polyfill-context.d.ts +0 -5
  213. package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
  214. package/dist/context/polyfill/polyfill-context.js +0 -87
  215. package/dist/context/polyfill/polyfill-context.js.map +0 -1
  216. package/dist/context/polyfill/polyfill-table.d.ts +0 -48
  217. package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
  218. package/dist/context/polyfill/polyfill-table.js +0 -137
  219. package/dist/context/polyfill/polyfill-table.js.map +0 -1
  220. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
  221. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
  222. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -265
  223. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  224. package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
  225. package/dist/context/state-tracker/track-context-state.js.map +0 -1
  226. package/dist/context/state-tracker/with-parameters.js.map +0 -1
  227. package/dist/index.js.map +0 -1
  228. package/dist/types.js.map +0 -1
  229. package/src/adapter/device-helpers/device-features.ts +0 -161
  230. package/src/adapter/device-helpers/is-old-ie.ts +0 -14
  231. package/src/context/context/create-headless-context.ts +0 -51
  232. package/src/context/context/webgl-checks.ts +0 -51
  233. package/src/context/polyfill/context-data.ts +0 -30
  234. package/src/context/polyfill/get-parameter-polyfill.ts +0 -122
  235. package/src/context/polyfill/polyfill-context.ts +0 -104
  236. package/src/context/polyfill/polyfill-table.ts +0 -167
  237. package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -365
@@ -4,5 +4,5 @@ import type { ShaderLayout } from '@luma.gl/core';
4
4
  * Note: `linkProgram()` needs to have been called
5
5
  * (although linking does not need to have been successful).
6
6
  */
7
- export declare function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram): ShaderLayout;
7
+ export declare function getShaderLayout(gl: WebGL2RenderingContext, program: WebGLProgram): ShaderLayout;
8
8
  //# sourceMappingURL=get-shader-layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-shader-layout.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-shader-layout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,eAAe,CAAC;AAOvB;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,qBAAqB,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,CA2D9F"}
1
+ {"version":3,"file":"get-shader-layout.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-shader-layout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,eAAe,CAAC;AAMvB;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,sBAAsB,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,CA2D/F"}
@@ -1,250 +1,285 @@
1
- import { isWebGL2 } from "../../context/context/webgl-checks.js";
2
- import { Accessor } from "../../classic/accessor.js";
3
- import { decodeGLUniformType, decodeGLAttributeType, isSamplerUniform } from "./decode-webgl-types.js";
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+ import { GL } from '@luma.gl/constants';
4
+ import { Accessor } from '../../classic/accessor'; // TODO - should NOT depend on classic API
5
+ import { decodeGLUniformType, decodeGLAttributeType, isSamplerUniform } from './decode-webgl-types';
6
+ /**
7
+ * Extract metadata describing binding information for a program's shaders
8
+ * Note: `linkProgram()` needs to have been called
9
+ * (although linking does not need to have been successful).
10
+ */
4
11
  export function getShaderLayout(gl, program) {
5
- const shaderLayout = {
6
- attributes: [],
7
- bindings: []
8
- };
9
- shaderLayout.attributes = readAttributeDeclarations(gl, program);
10
- const uniformBlocks = readUniformBlocks(gl, program);
11
- for (const uniformBlock of uniformBlocks) {
12
- const uniforms = uniformBlock.uniforms.map(uniform => ({
13
- name: uniform.name,
14
- format: uniform.format,
15
- byteOffset: uniform.byteOffset,
16
- byteStride: uniform.byteStride,
17
- arrayLength: uniform.arrayLength
18
- }));
19
- shaderLayout.bindings.push({
20
- type: 'uniform',
21
- name: uniformBlock.name,
22
- location: uniformBlock.location,
23
- visibility: (uniformBlock.vertex ? 0x1 : 0) & (uniformBlock.fragment ? 0x2 : 0),
24
- minBindingSize: uniformBlock.byteLength,
25
- uniforms
26
- });
27
- }
28
- const uniforms = readUniformBindings(gl, program);
29
- let textureUnit = 0;
30
- for (const uniform of uniforms) {
31
- if (isSamplerUniform(uniform.type)) {
32
- const {
33
- viewDimension,
34
- sampleType
35
- } = getSamplerInfo(uniform.type);
36
- shaderLayout.bindings.push({
37
- type: 'texture',
38
- name: uniform.name,
39
- location: textureUnit,
40
- viewDimension,
41
- sampleType
42
- });
43
- uniform.textureUnit = textureUnit;
44
- textureUnit += 1;
12
+ const shaderLayout = {
13
+ attributes: [],
14
+ bindings: []
15
+ };
16
+ shaderLayout.attributes = readAttributeDeclarations(gl, program);
17
+ // Uniform blocks
18
+ const uniformBlocks = readUniformBlocks(gl, program);
19
+ for (const uniformBlock of uniformBlocks) {
20
+ const uniforms = uniformBlock.uniforms.map(uniform => ({
21
+ name: uniform.name,
22
+ format: uniform.format,
23
+ byteOffset: uniform.byteOffset,
24
+ byteStride: uniform.byteStride,
25
+ arrayLength: uniform.arrayLength
26
+ }));
27
+ shaderLayout.bindings.push({
28
+ type: 'uniform',
29
+ name: uniformBlock.name,
30
+ location: uniformBlock.location,
31
+ visibility: (uniformBlock.vertex ? 0x1 : 0) & (uniformBlock.fragment ? 0x2 : 0),
32
+ minBindingSize: uniformBlock.byteLength,
33
+ uniforms
34
+ });
45
35
  }
46
- }
47
- if (uniforms.length) {
48
- shaderLayout.uniforms = uniforms;
49
- }
50
- const varyings = readVaryings(gl, program);
51
- if (varyings !== null && varyings !== void 0 && varyings.length) {
52
- shaderLayout.varyings = varyings;
53
- }
54
- return shaderLayout;
36
+ const uniforms = readUniformBindings(gl, program);
37
+ let textureUnit = 0;
38
+ for (const uniform of uniforms) {
39
+ if (isSamplerUniform(uniform.type)) {
40
+ const { viewDimension, sampleType } = getSamplerInfo(uniform.type);
41
+ shaderLayout.bindings.push({
42
+ type: 'texture',
43
+ name: uniform.name,
44
+ location: textureUnit,
45
+ viewDimension,
46
+ sampleType
47
+ });
48
+ // @ts-expect-error
49
+ uniform.textureUnit = textureUnit;
50
+ textureUnit += 1;
51
+ }
52
+ }
53
+ if (uniforms.length) {
54
+ shaderLayout.uniforms = uniforms;
55
+ }
56
+ // Varyings
57
+ const varyings = readVaryings(gl, program);
58
+ // Note - samplers are always in unform bindings, even if uniform blocks are used
59
+ if (varyings?.length) {
60
+ shaderLayout.varyings = varyings;
61
+ }
62
+ return shaderLayout;
55
63
  }
64
+ // HELPERS
65
+ /**
66
+ * Extract info about all transform feedback varyings
67
+ *
68
+ * linkProgram needs to have been called, although linking does not need to have been successful
69
+ */
56
70
  function readAttributeDeclarations(gl, program) {
57
- const attributes = [];
58
- const count = gl.getProgramParameter(program, 35721);
59
- for (let index = 0; index < count; index++) {
60
- const activeInfo = gl.getActiveAttrib(program, index);
61
- if (!activeInfo) {
62
- throw new Error('activeInfo');
63
- }
64
- const {
65
- name,
66
- type: compositeType
67
- } = activeInfo;
68
- const location = gl.getAttribLocation(program, name);
69
- if (location >= 0) {
70
- const {
71
- attributeType
72
- } = decodeGLAttributeType(compositeType);
73
- const stepMode = /instance/i.test(name) ? 'instance' : 'vertex';
74
- attributes.push({
75
- name,
76
- location,
77
- stepMode,
78
- type: attributeType
79
- });
71
+ const attributes = [];
72
+ const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
73
+ for (let index = 0; index < count; index++) {
74
+ const activeInfo = gl.getActiveAttrib(program, index);
75
+ if (!activeInfo) {
76
+ throw new Error('activeInfo');
77
+ }
78
+ const { name, type: compositeType /* , size*/ } = activeInfo;
79
+ const location = gl.getAttribLocation(program, name);
80
+ // Add only user provided attributes, for built-in attributes like `gl_InstanceID` location will be < 0
81
+ if (location >= 0) {
82
+ const { attributeType } = decodeGLAttributeType(compositeType);
83
+ // Whether an attribute is instanced is essentially fixed by the structure of the shader code,
84
+ // so it is arguably a static property of the shader.
85
+ // There is no hint in the shader declarations
86
+ // Heuristic: Any attribute name containing the word "instance" will be assumed to be instanced
87
+ const stepMode = /instance/i.test(name) ? 'instance' : 'vertex';
88
+ attributes.push({
89
+ name,
90
+ location,
91
+ stepMode,
92
+ type: attributeType,
93
+ // size - for arrays, size is the number of elements in the array
94
+ });
95
+ }
80
96
  }
81
- }
82
- attributes.sort((a, b) => a.location - b.location);
83
- return attributes;
97
+ // Sort by declaration order
98
+ attributes.sort((a, b) => a.location - b.location);
99
+ return attributes;
84
100
  }
101
+ /**
102
+ * Extract info about all transform feedback varyings
103
+ *
104
+ * linkProgram needs to have been called, although linking does not need to have been successful
105
+ */
85
106
  function readVaryings(gl, program) {
86
- if (!isWebGL2(gl)) {
87
- return [];
88
- }
89
- const gl2 = gl;
90
- const varyings = [];
91
- const count = gl.getProgramParameter(program, 35971);
92
- for (let location = 0; location < count; location++) {
93
- const activeInfo = gl2.getTransformFeedbackVarying(program, location);
94
- if (!activeInfo) {
95
- throw new Error('activeInfo');
107
+ const varyings = [];
108
+ const count = gl.getProgramParameter(program, GL.TRANSFORM_FEEDBACK_VARYINGS);
109
+ for (let location = 0; location < count; location++) {
110
+ const activeInfo = gl.getTransformFeedbackVarying(program, location);
111
+ if (!activeInfo) {
112
+ throw new Error('activeInfo');
113
+ }
114
+ const { name, type: compositeType, size } = activeInfo;
115
+ const { glType, components } = decodeGLUniformType(compositeType);
116
+ const accessor = new Accessor({ type: glType, size: size * components });
117
+ const varying = { location, name, accessor }; // Base values
118
+ varyings.push(varying);
96
119
  }
97
- const {
98
- name,
99
- type: compositeType,
100
- size
101
- } = activeInfo;
102
- const {
103
- glType,
104
- components
105
- } = decodeGLUniformType(compositeType);
106
- const accessor = new Accessor({
107
- type: glType,
108
- size: size * components
109
- });
110
- const varying = {
111
- location,
112
- name,
113
- accessor
114
- };
115
- varyings.push(varying);
116
- }
117
- varyings.sort((a, b) => a.location - b.location);
118
- return varyings;
120
+ varyings.sort((a, b) => a.location - b.location);
121
+ return varyings;
119
122
  }
123
+ /**
124
+ * Extract info about all uniforms
125
+ *
126
+ * Query uniform locations and build name to setter map.
127
+ */
120
128
  function readUniformBindings(gl, program) {
121
- const uniforms = [];
122
- const uniformCount = gl.getProgramParameter(program, 35718);
123
- for (let i = 0; i < uniformCount; i++) {
124
- const activeInfo = gl.getActiveUniform(program, i);
125
- if (!activeInfo) {
126
- throw new Error('activeInfo');
127
- }
128
- const {
129
- name: rawName,
130
- size,
131
- type
132
- } = activeInfo;
133
- const {
134
- name,
135
- isArray
136
- } = parseUniformName(rawName);
137
- let webglLocation = gl.getUniformLocation(program, name);
138
- const uniformInfo = {
139
- location: webglLocation,
140
- name,
141
- size,
142
- type,
143
- isArray
144
- };
145
- uniforms.push(uniformInfo);
146
- if (uniformInfo.size > 1) {
147
- for (let j = 0; j < uniformInfo.size; j++) {
148
- const elementName = `${name}[${j}]`;
149
- webglLocation = gl.getUniformLocation(program, elementName);
150
- const arrayElementUniformInfo = {
151
- ...uniformInfo,
152
- name: elementName,
153
- location: webglLocation
129
+ const uniforms = [];
130
+ const uniformCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORMS);
131
+ for (let i = 0; i < uniformCount; i++) {
132
+ const activeInfo = gl.getActiveUniform(program, i);
133
+ if (!activeInfo) {
134
+ throw new Error('activeInfo');
135
+ }
136
+ const { name: rawName, size, type } = activeInfo;
137
+ const { name, isArray } = parseUniformName(rawName);
138
+ let webglLocation = gl.getUniformLocation(program, name);
139
+ const uniformInfo = {
140
+ // WebGL locations are uniquely typed but just numbers
141
+ location: webglLocation,
142
+ name,
143
+ size,
144
+ type,
145
+ isArray
154
146
  };
155
- uniforms.push(arrayElementUniformInfo);
156
- }
147
+ uniforms.push(uniformInfo);
148
+ // Array (e.g. matrix) uniforms can occupy several 4x4 byte banks
149
+ if (uniformInfo.size > 1) {
150
+ for (let j = 0; j < uniformInfo.size; j++) {
151
+ const elementName = `${name}[${j}]`;
152
+ webglLocation = gl.getUniformLocation(program, elementName);
153
+ const arrayElementUniformInfo = {
154
+ ...uniformInfo,
155
+ name: elementName,
156
+ location: webglLocation
157
+ };
158
+ uniforms.push(arrayElementUniformInfo);
159
+ }
160
+ }
157
161
  }
158
- }
159
- return uniforms;
162
+ return uniforms;
160
163
  }
164
+ /**
165
+ * Extract info about all "active" uniform blocks
166
+ * @note In WebGL, "active" just means that unused (inactive) blocks may have been optimized away during linking)
167
+ */
161
168
  function readUniformBlocks(gl, program) {
162
- if (!isWebGL2(gl)) {
163
- return [];
164
- }
165
- const gl2 = gl;
166
- const getBlockParameter = (blockIndex, pname) => gl2.getActiveUniformBlockParameter(program, blockIndex, pname);
167
- const uniformBlocks = [];
168
- const blockCount = gl2.getProgramParameter(program, 35382);
169
- for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {
170
- const blockInfo = {
171
- name: gl2.getActiveUniformBlockName(program, blockIndex) || '',
172
- location: getBlockParameter(blockIndex, 35391),
173
- byteLength: getBlockParameter(blockIndex, 35392),
174
- vertex: getBlockParameter(blockIndex, 35396),
175
- fragment: getBlockParameter(blockIndex, 35398),
176
- uniformCount: getBlockParameter(blockIndex, 35394),
177
- uniforms: []
178
- };
179
- const uniformIndices = getBlockParameter(blockIndex, 35395) || [];
180
- const uniformType = gl2.getActiveUniforms(program, uniformIndices, 35383);
181
- const uniformArrayLength = gl2.getActiveUniforms(program, uniformIndices, 35384);
182
- const uniformOffset = gl2.getActiveUniforms(program, uniformIndices, 35387);
183
- const uniformStride = gl2.getActiveUniforms(program, uniformIndices, 35388);
184
- for (let i = 0; i < blockInfo.uniformCount; ++i) {
185
- const activeInfo = gl2.getActiveUniform(program, uniformIndices[i]);
186
- if (!activeInfo) {
187
- throw new Error('activeInfo');
188
- }
189
- blockInfo.uniforms.push({
190
- name: activeInfo.name,
191
- format: decodeGLUniformType(uniformType[i]).format,
192
- type: uniformType[i],
193
- arrayLength: uniformArrayLength[i],
194
- byteOffset: uniformOffset[i],
195
- byteStride: uniformStride[i]
196
- });
169
+ const getBlockParameter = (blockIndex, pname) => gl.getActiveUniformBlockParameter(program, blockIndex, pname);
170
+ const uniformBlocks = [];
171
+ const blockCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORM_BLOCKS);
172
+ for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {
173
+ const blockInfo = {
174
+ name: gl.getActiveUniformBlockName(program, blockIndex) || '',
175
+ location: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_BINDING),
176
+ byteLength: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_DATA_SIZE),
177
+ vertex: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),
178
+ fragment: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),
179
+ uniformCount: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORMS),
180
+ uniforms: []
181
+ };
182
+ const uniformIndices = getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) || [];
183
+ const uniformType = gl.getActiveUniforms(program, uniformIndices, GL.UNIFORM_TYPE); // Array of GLenum indicating the types of the uniforms.
184
+ const uniformArrayLength = gl.getActiveUniforms(program, uniformIndices, GL.UNIFORM_SIZE); // Array of GLuint indicating the sizes of the uniforms.
185
+ // const uniformBlockIndex = gl.getActiveUniforms(
186
+ // program,
187
+ // uniformIndices,
188
+ // GL.UNIFORM_BLOCK_INDEX
189
+ // ); // Array of GLint indicating the block indices of the uniforms.
190
+ const uniformOffset = gl.getActiveUniforms(program, uniformIndices, GL.UNIFORM_OFFSET); // Array of GLint indicating the uniform buffer offsets.
191
+ const uniformStride = gl.getActiveUniforms(program, uniformIndices, GL.UNIFORM_ARRAY_STRIDE); // Array of GLint indicating the strides between the elements.
192
+ // const uniformMatrixStride = gl.getActiveUniforms(
193
+ // program,
194
+ // uniformIndices,
195
+ // GL.UNIFORM_MATRIX_STRIDE
196
+ // ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.
197
+ // const uniformRowMajor = gl.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);
198
+ for (let i = 0; i < blockInfo.uniformCount; ++i) {
199
+ const activeInfo = gl.getActiveUniform(program, uniformIndices[i]);
200
+ if (!activeInfo) {
201
+ throw new Error('activeInfo');
202
+ }
203
+ blockInfo.uniforms.push({
204
+ name: activeInfo.name,
205
+ format: decodeGLUniformType(uniformType[i]).format,
206
+ type: uniformType[i],
207
+ arrayLength: uniformArrayLength[i],
208
+ byteOffset: uniformOffset[i],
209
+ byteStride: uniformStride[i]
210
+ // matrixStride: uniformStride[i],
211
+ // rowMajor: uniformRowMajor[i]
212
+ });
213
+ }
214
+ uniformBlocks.push(blockInfo);
197
215
  }
198
- uniformBlocks.push(blockInfo);
199
- }
200
- uniformBlocks.sort((a, b) => a.location - b.location);
201
- return uniformBlocks;
216
+ uniformBlocks.sort((a, b) => a.location - b.location);
217
+ return uniformBlocks;
202
218
  }
219
+ /**
220
+ * TOOD - compare with a above, confirm copy, then delete
221
+ const bindings: Binding[] = [];
222
+ const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);
223
+ for (let blockIndex = 0; blockIndex < count; blockIndex++) {
224
+ const vertex = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),
225
+ const fragment = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),
226
+ const visibility = (vertex) + (fragment);
227
+ const binding: BufferBinding = {
228
+ location: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_BINDING),
229
+ // name: gl.getActiveUniformBlockName(program, blockIndex),
230
+ type: 'uniform',
231
+ visibility,
232
+ minBindingSize: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE),
233
+ // uniformCount: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS),
234
+ // uniformIndices: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),
235
+ }
236
+ bindings.push(binding);
237
+ }
238
+ */
203
239
  const SAMPLER_UNIFORMS_GL_TO_GPU = {
204
- [35678]: ['2d', 'float'],
205
- [35680]: ['cube', 'float'],
206
- [35679]: ['3d', 'float'],
207
- [35682]: ['3d', 'depth'],
208
- [36289]: ['2d-array', 'float'],
209
- [36292]: ['2d-array', 'depth'],
210
- [36293]: ['cube', 'float'],
211
- [36298]: ['2d', 'sint'],
212
- [36299]: ['3d', 'sint'],
213
- [36300]: ['cube', 'sint'],
214
- [36303]: ['2d-array', 'uint'],
215
- [36306]: ['2d', 'uint'],
216
- [36307]: ['3d', 'uint'],
217
- [36308]: ['cube', 'uint'],
218
- [36311]: ['2d-array', 'uint']
240
+ [GL.SAMPLER_2D]: ['2d', 'float'],
241
+ [GL.SAMPLER_CUBE]: ['cube', 'float'],
242
+ [GL.SAMPLER_3D]: ['3d', 'float'],
243
+ [GL.SAMPLER_2D_SHADOW]: ['3d', 'depth'],
244
+ [GL.SAMPLER_2D_ARRAY]: ['2d-array', 'float'],
245
+ [GL.SAMPLER_2D_ARRAY_SHADOW]: ['2d-array', 'depth'],
246
+ [GL.SAMPLER_CUBE_SHADOW]: ['cube', 'float'],
247
+ [GL.INT_SAMPLER_2D]: ['2d', 'sint'],
248
+ [GL.INT_SAMPLER_3D]: ['3d', 'sint'],
249
+ [GL.INT_SAMPLER_CUBE]: ['cube', 'sint'],
250
+ [GL.INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint'],
251
+ [GL.UNSIGNED_INT_SAMPLER_2D]: ['2d', 'uint'],
252
+ [GL.UNSIGNED_INT_SAMPLER_3D]: ['3d', 'uint'],
253
+ [GL.UNSIGNED_INT_SAMPLER_CUBE]: ['cube', 'uint'],
254
+ [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint']
219
255
  };
220
256
  function getSamplerInfo(type) {
221
- const sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];
222
- if (!sampler) {
223
- throw new Error('sampler');
224
- }
225
- const [viewDimension, sampleType] = sampler;
226
- return {
227
- viewDimension,
228
- sampleType
229
- };
257
+ const sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];
258
+ if (!sampler) {
259
+ throw new Error('sampler');
260
+ }
261
+ const [viewDimension, sampleType] = sampler;
262
+ return { viewDimension, sampleType };
230
263
  }
264
+ // HELPERS
231
265
  function parseUniformName(name) {
232
- if (name[name.length - 1] !== ']') {
266
+ // Shortcut to avoid redundant or bad matches
267
+ if (name[name.length - 1] !== ']') {
268
+ return {
269
+ name,
270
+ length: 1,
271
+ isArray: false
272
+ };
273
+ }
274
+ // if array name then clean the array brackets
275
+ const UNIFORM_NAME_REGEXP = /([^[]*)(\[[0-9]+\])?/;
276
+ const matches = UNIFORM_NAME_REGEXP.exec(name);
277
+ if (!matches || matches.length < 2) {
278
+ throw new Error(`Failed to parse GLSL uniform name ${name}`);
279
+ }
233
280
  return {
234
- name,
235
- length: 1,
236
- isArray: false
281
+ name: matches[1],
282
+ length: matches[2] ? 1 : 0,
283
+ isArray: Boolean(matches[2])
237
284
  };
238
- }
239
- const UNIFORM_NAME_REGEXP = /([^[]*)(\[[0-9]+\])?/;
240
- const matches = UNIFORM_NAME_REGEXP.exec(name);
241
- if (!matches || matches.length < 2) {
242
- throw new Error(`Failed to parse GLSL uniform name ${name}`);
243
- }
244
- return {
245
- name: matches[1],
246
- length: matches[2] ? 1 : 0,
247
- isArray: Boolean(matches[2])
248
- };
249
285
  }
250
- //# sourceMappingURL=get-shader-layout.js.map
@@ -1,42 +1,51 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+ /**
4
+ * Parse a WebGL-format GLSL compilation log into an array of WebGPU style message records.
5
+ * This follows documented WebGL conventions for compilation logs.
6
+ * Based on https://github.com/wwwtyro/gl-format-compiler-error (public domain)
7
+ */
1
8
  export function parseShaderCompilerLog(errLog) {
2
- const lines = errLog.split(/\r?\n/);
3
- const messages = [];
4
- for (const line of lines) {
5
- if (line.length <= 1) {
6
- continue;
9
+ // Parse the error - note: browser and driver dependent
10
+ const lines = errLog.split(/\r?\n/);
11
+ const messages = [];
12
+ for (const line of lines) {
13
+ if (line.length <= 1) {
14
+ continue; // eslint-disable-line no-continue
15
+ }
16
+ const segments = line.split(':');
17
+ // Check for messages with no line information `ERROR: unsupported shader version`
18
+ if (segments.length === 2) {
19
+ const [messageType, message] = segments;
20
+ messages.push({
21
+ message: message.trim(),
22
+ type: getMessageType(messageType),
23
+ lineNum: 0,
24
+ linePos: 0
25
+ });
26
+ continue; // eslint-disable-line no-continue
27
+ }
28
+ const [messageType, linePosition, lineNumber, ...rest] = segments;
29
+ let lineNum = parseInt(lineNumber, 10);
30
+ if (isNaN(lineNum)) {
31
+ lineNum = 0;
32
+ }
33
+ let linePos = parseInt(linePosition, 10);
34
+ if (isNaN(linePos)) {
35
+ linePos = 0;
36
+ }
37
+ messages.push({
38
+ message: rest.join(':').trim(),
39
+ type: getMessageType(messageType),
40
+ lineNum,
41
+ linePos // TODO
42
+ });
7
43
  }
8
- const segments = line.split(':');
9
- if (segments.length === 2) {
10
- const [messageType, message] = segments;
11
- messages.push({
12
- message: message.trim(),
13
- type: getMessageType(messageType),
14
- lineNum: 0,
15
- linePos: 0
16
- });
17
- continue;
18
- }
19
- const [messageType, linePosition, lineNumber, ...rest] = segments;
20
- let lineNum = parseInt(lineNumber, 10);
21
- if (isNaN(lineNum)) {
22
- lineNum = 0;
23
- }
24
- let linePos = parseInt(linePosition, 10);
25
- if (isNaN(linePos)) {
26
- linePos = 0;
27
- }
28
- messages.push({
29
- message: rest.join(':').trim(),
30
- type: getMessageType(messageType),
31
- lineNum,
32
- linePos
33
- });
34
- }
35
- return messages;
44
+ return messages;
36
45
  }
46
+ /** Ensure supported type */
37
47
  function getMessageType(messageType) {
38
- const MESSAGE_TYPES = ['warning', 'error', 'info'];
39
- const lowerCaseType = messageType.toLowerCase();
40
- return MESSAGE_TYPES.includes(lowerCaseType) ? lowerCaseType : 'info';
48
+ const MESSAGE_TYPES = ['warning', 'error', 'info'];
49
+ const lowerCaseType = messageType.toLowerCase();
50
+ return (MESSAGE_TYPES.includes(lowerCaseType) ? lowerCaseType : 'info');
41
51
  }
42
- //# sourceMappingURL=parse-shader-compiler-log.js.map
@@ -1,5 +1,5 @@
1
1
  import type { UniformValue } from '@luma.gl/core';
2
2
  import { GLCompositeType, GLSamplerType } from '@luma.gl/constants';
3
3
  /** Set a raw uniform (without type conversion and caching) */
4
- export declare function setUniform(gl: WebGLRenderingContext, location: WebGLUniformLocation, type: GLCompositeType | GLSamplerType, value: UniformValue): void;
4
+ export declare function setUniform(gl: WebGL2RenderingContext, location: WebGLUniformLocation, type: GLCompositeType | GLSamplerType, value: UniformValue): void;
5
5
  //# sourceMappingURL=set-uniform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-uniform.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/set-uniform.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAChD,OAAO,EAAK,eAAe,EAAE,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAEtE,8DAA8D;AAE9D,wBAAgB,UAAU,CACxB,EAAE,EAAE,qBAAqB,EACzB,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,eAAe,GAAG,aAAa,EACrC,KAAK,EAAE,YAAY,GAClB,IAAI,CA0EN"}
1
+ {"version":3,"file":"set-uniform.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/set-uniform.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAChD,OAAO,EAAK,eAAe,EAAE,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAEtE,8DAA8D;AAE9D,wBAAgB,UAAU,CACxB,EAAE,EAAE,sBAAsB,EAC1B,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,eAAe,GAAG,aAAa,EACrC,KAAK,EAAE,YAAY,GAClB,IAAI,CAwEN"}