@luma.gl/shadertools 9.2.6 → 9.3.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/dist/dist.dev.js +4798 -6439
  2. package/dist/dist.min.js +2047 -311
  3. package/dist/index.cjs +3033 -507
  4. package/dist/index.cjs.map +4 -4
  5. package/dist/index.d.ts +12 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +5 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/preprocessor/preprocessor.d.ts.map +1 -1
  10. package/dist/lib/preprocessor/preprocessor.js +35 -8
  11. package/dist/lib/preprocessor/preprocessor.js.map +1 -1
  12. package/dist/lib/shader-assembler.d.ts +10 -0
  13. package/dist/lib/shader-assembler.d.ts.map +1 -1
  14. package/dist/lib/shader-assembler.js +20 -3
  15. package/dist/lib/shader-assembler.js.map +1 -1
  16. package/dist/lib/shader-assembly/assemble-shaders.d.ts +23 -2
  17. package/dist/lib/shader-assembly/assemble-shaders.d.ts.map +1 -1
  18. package/dist/lib/shader-assembly/assemble-shaders.js +214 -11
  19. package/dist/lib/shader-assembly/assemble-shaders.js.map +1 -1
  20. package/dist/lib/shader-assembly/wgsl-binding-debug.d.ts +37 -0
  21. package/dist/lib/shader-assembly/wgsl-binding-debug.d.ts.map +1 -0
  22. package/dist/lib/shader-assembly/wgsl-binding-debug.js +140 -0
  23. package/dist/lib/shader-assembly/wgsl-binding-debug.js.map +1 -0
  24. package/dist/lib/shader-generator/glsl/generate-glsl.js +7 -4
  25. package/dist/lib/shader-generator/glsl/generate-glsl.js.map +1 -1
  26. package/dist/lib/shader-generator/wgsl/generate-wgsl.d.ts.map +1 -1
  27. package/dist/lib/shader-generator/wgsl/generate-wgsl.js +3 -0
  28. package/dist/lib/shader-generator/wgsl/generate-wgsl.js.map +1 -1
  29. package/dist/lib/shader-module/shader-module-uniform-layout.d.ts +91 -0
  30. package/dist/lib/shader-module/shader-module-uniform-layout.d.ts.map +1 -0
  31. package/dist/lib/shader-module/shader-module-uniform-layout.js +209 -0
  32. package/dist/lib/shader-module/shader-module-uniform-layout.js.map +1 -0
  33. package/dist/lib/shader-module/shader-module.d.ts +12 -6
  34. package/dist/lib/shader-module/shader-module.d.ts.map +1 -1
  35. package/dist/lib/shader-module/shader-module.js.map +1 -1
  36. package/dist/lib/utils/assert.d.ts.map +1 -1
  37. package/dist/lib/utils/assert.js +3 -1
  38. package/dist/lib/utils/assert.js.map +1 -1
  39. package/dist/lib/utils/uniform-types.d.ts +11 -7
  40. package/dist/lib/utils/uniform-types.d.ts.map +1 -1
  41. package/dist/modules/engine/picking/picking.d.ts +5 -2
  42. package/dist/modules/engine/picking/picking.d.ts.map +1 -1
  43. package/dist/modules/engine/picking/picking.js +5 -2
  44. package/dist/modules/engine/picking/picking.js.map +1 -1
  45. package/dist/modules/engine/project/project.d.ts +1 -1
  46. package/dist/modules/engine/project/project.js +1 -1
  47. package/dist/modules/engine/skin/skin.d.ts +30 -0
  48. package/dist/modules/engine/skin/skin.d.ts.map +1 -0
  49. package/dist/modules/engine/skin/skin.js +86 -0
  50. package/dist/modules/engine/skin/skin.js.map +1 -0
  51. package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts +1 -0
  52. package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts.map +1 -1
  53. package/dist/modules/lighting/gouraud-material/gouraud-material.js +3 -0
  54. package/dist/modules/lighting/gouraud-material/gouraud-material.js.map +1 -1
  55. package/dist/modules/lighting/ibl/ibl.d.ts +26 -0
  56. package/dist/modules/lighting/ibl/ibl.d.ts.map +1 -0
  57. package/dist/modules/lighting/ibl/ibl.js +33 -0
  58. package/dist/modules/lighting/ibl/ibl.js.map +1 -0
  59. package/dist/modules/lighting/lambert-material/lambert-material.d.ts +10 -0
  60. package/dist/modules/lighting/lambert-material/lambert-material.d.ts.map +1 -0
  61. package/dist/modules/lighting/lambert-material/lambert-material.js +33 -0
  62. package/dist/modules/lighting/lambert-material/lambert-material.js.map +1 -0
  63. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts +3 -0
  64. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts.map +1 -0
  65. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.js +60 -0
  66. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.js.map +1 -0
  67. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.d.ts +2 -0
  68. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.d.ts.map +1 -0
  69. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.js +73 -0
  70. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.js.map +1 -0
  71. package/dist/modules/lighting/lights/lighting-glsl.d.ts +1 -1
  72. package/dist/modules/lighting/lights/lighting-glsl.d.ts.map +1 -1
  73. package/dist/modules/lighting/lights/lighting-glsl.js +44 -38
  74. package/dist/modules/lighting/lights/lighting-glsl.js.map +1 -1
  75. package/dist/modules/lighting/lights/lighting-wgsl.d.ts +1 -1
  76. package/dist/modules/lighting/lights/lighting-wgsl.d.ts.map +1 -1
  77. package/dist/modules/lighting/lights/lighting-wgsl.js +46 -18
  78. package/dist/modules/lighting/lights/lighting-wgsl.js.map +1 -1
  79. package/dist/modules/lighting/lights/lighting.d.ts +104 -62
  80. package/dist/modules/lighting/lights/lighting.d.ts.map +1 -1
  81. package/dist/modules/lighting/lights/lighting.js +107 -68
  82. package/dist/modules/lighting/lights/lighting.js.map +1 -1
  83. package/dist/modules/lighting/no-material/dirlight.d.ts +8 -3
  84. package/dist/modules/lighting/no-material/dirlight.d.ts.map +1 -1
  85. package/dist/modules/lighting/no-material/dirlight.js +4 -2
  86. package/dist/modules/lighting/no-material/dirlight.js.map +1 -1
  87. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts +1 -1
  88. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts.map +1 -1
  89. package/dist/modules/lighting/pbr-material/pbr-material-glsl.js +581 -28
  90. package/dist/modules/lighting/pbr-material/pbr-material-glsl.js.map +1 -1
  91. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts +2 -2
  92. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts.map +1 -1
  93. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js +850 -107
  94. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js.map +1 -1
  95. package/dist/modules/lighting/pbr-material/pbr-material.d.ts +172 -41
  96. package/dist/modules/lighting/pbr-material/pbr-material.d.ts.map +1 -1
  97. package/dist/modules/lighting/pbr-material/pbr-material.js +109 -1
  98. package/dist/modules/lighting/pbr-material/pbr-material.js.map +1 -1
  99. package/dist/modules/lighting/pbr-material/pbr-projection.d.ts.map +1 -1
  100. package/dist/modules/lighting/pbr-material/pbr-projection.js +14 -2
  101. package/dist/modules/lighting/pbr-material/pbr-projection.js.map +1 -1
  102. package/dist/modules/lighting/pbr-material/pbr-scene.d.ts +40 -0
  103. package/dist/modules/lighting/pbr-material/pbr-scene.d.ts.map +1 -0
  104. package/dist/modules/lighting/pbr-material/pbr-scene.js +67 -0
  105. package/dist/modules/lighting/pbr-material/pbr-scene.js.map +1 -0
  106. package/dist/modules/lighting/phong-material/phong-material.d.ts +1 -0
  107. package/dist/modules/lighting/phong-material/phong-material.d.ts.map +1 -1
  108. package/dist/modules/lighting/phong-material/phong-material.js +4 -0
  109. package/dist/modules/lighting/phong-material/phong-material.js.map +1 -1
  110. package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts +2 -2
  111. package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts.map +1 -1
  112. package/dist/modules/lighting/phong-material/phong-shaders-glsl.js +17 -6
  113. package/dist/modules/lighting/phong-material/phong-shaders-glsl.js.map +1 -1
  114. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.d.ts +1 -40
  115. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.d.ts.map +1 -1
  116. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.js +71 -76
  117. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.js.map +1 -1
  118. package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts +1 -1
  119. package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts.map +1 -1
  120. package/dist/modules/math/fp64/fp64-arithmetic-glsl.js +42 -11
  121. package/dist/modules/math/fp64/fp64-arithmetic-glsl.js.map +1 -1
  122. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.d.ts +2 -0
  123. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.d.ts.map +1 -0
  124. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.js +212 -0
  125. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.js.map +1 -0
  126. package/dist/modules/math/fp64/fp64.d.ts +1 -0
  127. package/dist/modules/math/fp64/fp64.d.ts.map +1 -1
  128. package/dist/modules/math/fp64/fp64.js +8 -2
  129. package/dist/modules/math/fp64/fp64.js.map +1 -1
  130. package/dist/modules/math/random/random.d.ts +1 -1
  131. package/dist/modules/math/random/random.d.ts.map +1 -1
  132. package/dist/modules/math/random/random.js +2 -3
  133. package/dist/modules/math/random/random.js.map +1 -1
  134. package/package.json +4 -5
  135. package/src/index.ts +37 -6
  136. package/src/lib/preprocessor/preprocessor.ts +44 -8
  137. package/src/lib/shader-assembler.ts +25 -3
  138. package/src/lib/shader-assembly/assemble-shaders.ts +384 -12
  139. package/src/lib/shader-assembly/wgsl-binding-debug.ts +216 -0
  140. package/src/lib/shader-generator/glsl/generate-glsl.ts +11 -5
  141. package/src/lib/shader-generator/wgsl/generate-wgsl.ts +6 -0
  142. package/src/lib/shader-module/shader-module-uniform-layout.ts +346 -0
  143. package/src/lib/shader-module/shader-module.ts +17 -7
  144. package/src/lib/utils/assert.ts +3 -1
  145. package/src/lib/utils/uniform-types.ts +24 -9
  146. package/src/modules/engine/picking/picking.ts +5 -2
  147. package/src/modules/engine/project/project.ts +1 -1
  148. package/src/modules/engine/skin/skin.ts +114 -0
  149. package/src/modules/lighting/gouraud-material/gouraud-material.ts +4 -0
  150. package/src/modules/lighting/ibl/ibl.ts +44 -0
  151. package/src/modules/lighting/lambert-material/lambert-material.ts +42 -0
  152. package/src/modules/lighting/lambert-material/lambert-shaders-glsl.ts +61 -0
  153. package/src/modules/lighting/lambert-material/lambert-shaders-wgsl.ts +73 -0
  154. package/src/modules/lighting/lights/lighting-glsl.ts +44 -38
  155. package/src/modules/lighting/lights/lighting-wgsl.ts +46 -18
  156. package/src/modules/lighting/lights/lighting.ts +198 -99
  157. package/src/modules/lighting/no-material/dirlight.ts +4 -2
  158. package/src/modules/lighting/pbr-material/pbr-material-glsl.ts +581 -28
  159. package/src/modules/lighting/pbr-material/pbr-material-wgsl.ts +850 -107
  160. package/src/modules/lighting/pbr-material/pbr-material.ts +185 -5
  161. package/src/modules/lighting/pbr-material/pbr-projection.ts +15 -2
  162. package/src/modules/lighting/pbr-material/pbr-scene.ts +91 -0
  163. package/src/modules/lighting/phong-material/phong-material.ts +5 -0
  164. package/src/modules/lighting/phong-material/phong-shaders-glsl.ts +17 -6
  165. package/src/modules/lighting/phong-material/phong-shaders-wgsl.ts +71 -77
  166. package/src/modules/math/fp64/fp64-arithmetic-glsl.ts +42 -11
  167. package/src/modules/math/fp64/fp64-arithmetic-wgsl.ts +212 -0
  168. package/src/modules/math/fp64/fp64.ts +9 -3
  169. package/src/modules/math/random/random.ts +2 -3
  170. package/dist/lib/wgsl/get-shader-layout-wgsl.d.ts +0 -8
  171. package/dist/lib/wgsl/get-shader-layout-wgsl.d.ts.map +0 -1
  172. package/dist/lib/wgsl/get-shader-layout-wgsl.js +0 -95
  173. package/dist/lib/wgsl/get-shader-layout-wgsl.js.map +0 -1
  174. package/src/lib/wgsl/get-shader-layout-wgsl.ts +0 -105
@@ -0,0 +1,91 @@
1
+ import type { ShaderModule } from "./shader-module.js";
2
+ /**
3
+ * Shader stages supported by shader-module uniform-layout validation helpers.
4
+ */
5
+ export type ShaderModuleUniformLayoutStage = 'vertex' | 'fragment' | 'wgsl';
6
+ /**
7
+ * Describes the result of comparing declared `uniformTypes` with the fields
8
+ * found in a shader uniform block.
9
+ */
10
+ export type ShaderModuleUniformLayoutValidationResult = {
11
+ /** Name of the shader module being validated. */
12
+ moduleName: string;
13
+ /** Expected block name derived from the shader module name. */
14
+ uniformBlockName: string;
15
+ /** Shader stage that was inspected. */
16
+ stage: ShaderModuleUniformLayoutStage;
17
+ /** Field names declared by the module metadata. */
18
+ expectedUniformNames: string[];
19
+ /** Field names parsed from the shader source. */
20
+ actualUniformNames: string[];
21
+ /** Whether the declared and parsed field lists match exactly. */
22
+ matches: boolean;
23
+ };
24
+ /**
25
+ * Parsed information about one GLSL uniform block declaration.
26
+ */
27
+ export type GLSLUniformBlockInfo = {
28
+ /** Declared block type name. */
29
+ blockName: string;
30
+ /** Optional instance name that follows the block declaration. */
31
+ instanceName: string | null;
32
+ /** Raw layout qualifier text, if present. */
33
+ layoutQualifier: string | null;
34
+ /** Whether any explicit layout qualifier was present. */
35
+ hasLayoutQualifier: boolean;
36
+ /** Whether the block explicitly declares `layout(std140)`. */
37
+ isStd140: boolean;
38
+ /** Raw source text inside the block braces. */
39
+ body: string;
40
+ };
41
+ /**
42
+ * Logging surface used by validation and warning helpers.
43
+ */
44
+ type Logger = {
45
+ /** Error logger compatible with luma's deferred log API. */
46
+ error?: (...args: unknown[]) => () => unknown;
47
+ /** Warning logger compatible with luma's deferred log API. */
48
+ warn?: (...args: unknown[]) => () => unknown;
49
+ };
50
+ /**
51
+ * Returns the uniform block type name expected for the supplied shader module.
52
+ */
53
+ export declare function getShaderModuleUniformBlockName(module: ShaderModule): string;
54
+ /**
55
+ * Returns the ordered field names parsed from a shader module's uniform block.
56
+ *
57
+ * @returns `null` when the stage has no source or the expected block is absent.
58
+ */
59
+ export declare function getShaderModuleUniformBlockFields(module: ShaderModule, stage: ShaderModuleUniformLayoutStage): string[] | null;
60
+ /**
61
+ * Computes the validation result for a shader module's declared and parsed
62
+ * uniform-block field lists.
63
+ *
64
+ * @returns `null` when the module has no declared uniform types or no matching block.
65
+ */
66
+ export declare function getShaderModuleUniformLayoutValidationResult(module: ShaderModule, stage: ShaderModuleUniformLayoutStage): ShaderModuleUniformLayoutValidationResult | null;
67
+ /**
68
+ * Validates that a shader module's parsed uniform block matches `uniformTypes`.
69
+ *
70
+ * When a mismatch is detected, the helper logs a formatted error and optionally
71
+ * throws via {@link assert}.
72
+ */
73
+ export declare function validateShaderModuleUniformLayout(module: ShaderModule, stage: ShaderModuleUniformLayoutStage, options?: {
74
+ log?: Logger;
75
+ throwOnError?: boolean;
76
+ }): ShaderModuleUniformLayoutValidationResult | null;
77
+ /**
78
+ * Parses all GLSL uniform blocks in a shader source string.
79
+ */
80
+ export declare function getGLSLUniformBlocks(shaderSource: string): GLSLUniformBlockInfo[];
81
+ /**
82
+ * Emits warnings for GLSL uniform blocks that do not explicitly declare
83
+ * `layout(std140)`.
84
+ *
85
+ * @returns The list of parsed blocks that were considered non-compliant.
86
+ */
87
+ export declare function warnIfGLSLUniformBlocksAreNotStd140(shaderSource: string, stage: Exclude<ShaderModuleUniformLayoutStage, 'wgsl'>, log?: Logger, context?: {
88
+ label?: string;
89
+ }): GLSLUniformBlockInfo[];
90
+ export {};
91
+ //# sourceMappingURL=shader-module-uniform-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-module-uniform-layout.d.ts","sourceRoot":"","sources":["../../../src/lib/shader-module/shader-module-uniform-layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAC,2BAAwB;AAGlD;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAE5E;;;GAGG;AACH,MAAM,MAAM,yCAAyC,GAAG;IACtD,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,CAAC;IACzB,uCAAuC;IACvC,KAAK,EAAE,8BAA8B,CAAC;IACtC,mDAAmD;IACnD,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iDAAiD;IACjD,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6CAA6C;IAC7C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,yDAAyD;IACzD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,8DAA8D;IAC9D,QAAQ,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,KAAK,MAAM,GAAG;IACZ,4DAA4D;IAC5D,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,OAAO,CAAC;IAC9C,8DAA8D;IAC9D,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,OAAO,CAAC;CAC9C,CAAC;AAaF;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,8BAA8B,GACpC,MAAM,EAAE,GAAG,IAAI,CAcjB;AAED;;;;;GAKG;AACH,wBAAgB,4CAA4C,CAC1D,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,8BAA8B,GACpC,yCAAyC,GAAG,IAAI,CAmBlD;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,8BAA8B,EACrC,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;CACnB,GACL,yCAAyC,GAAG,IAAI,CAclD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAmBjF;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,OAAO,CAAC,8BAA8B,EAAE,MAAM,CAAC,EACtD,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,GACzB,oBAAoB,EAAE,CAqBxB"}
@@ -0,0 +1,209 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { assert } from "../utils/assert.js";
5
+ /**
6
+ * Matches one field declaration inside a GLSL uniform block body.
7
+ */
8
+ const GLSL_UNIFORM_BLOCK_FIELD_REGEXP = /^(?:uniform\s+)?(?:(?:lowp|mediump|highp)\s+)?[A-Za-z0-9_]+(?:<[^>]+>)?\s+([A-Za-z0-9_]+)(?:\s*\[[^\]]+\])?\s*;/;
9
+ /**
10
+ * Matches full GLSL uniform block declarations, including optional layout qualifiers.
11
+ */
12
+ const GLSL_UNIFORM_BLOCK_REGEXP = /((?:layout\s*\([^)]*\)\s*)*)uniform\s+([A-Za-z_][A-Za-z0-9_]*)\s*\{([\s\S]*?)\}\s*([A-Za-z_][A-Za-z0-9_]*)?\s*;/g;
13
+ /**
14
+ * Returns the uniform block type name expected for the supplied shader module.
15
+ */
16
+ export function getShaderModuleUniformBlockName(module) {
17
+ return `${module.name}Uniforms`;
18
+ }
19
+ /**
20
+ * Returns the ordered field names parsed from a shader module's uniform block.
21
+ *
22
+ * @returns `null` when the stage has no source or the expected block is absent.
23
+ */
24
+ export function getShaderModuleUniformBlockFields(module, stage) {
25
+ const shaderSource = stage === 'wgsl' ? module.source : stage === 'vertex' ? module.vs : module.fs;
26
+ if (!shaderSource) {
27
+ return null;
28
+ }
29
+ const uniformBlockName = getShaderModuleUniformBlockName(module);
30
+ return extractShaderUniformBlockFieldNames(shaderSource, stage === 'wgsl' ? 'wgsl' : 'glsl', uniformBlockName);
31
+ }
32
+ /**
33
+ * Computes the validation result for a shader module's declared and parsed
34
+ * uniform-block field lists.
35
+ *
36
+ * @returns `null` when the module has no declared uniform types or no matching block.
37
+ */
38
+ export function getShaderModuleUniformLayoutValidationResult(module, stage) {
39
+ const expectedUniformNames = Object.keys(module.uniformTypes || {});
40
+ if (!expectedUniformNames.length) {
41
+ return null;
42
+ }
43
+ const actualUniformNames = getShaderModuleUniformBlockFields(module, stage);
44
+ if (!actualUniformNames) {
45
+ return null;
46
+ }
47
+ return {
48
+ moduleName: module.name,
49
+ uniformBlockName: getShaderModuleUniformBlockName(module),
50
+ stage,
51
+ expectedUniformNames,
52
+ actualUniformNames,
53
+ matches: areStringArraysEqual(expectedUniformNames, actualUniformNames)
54
+ };
55
+ }
56
+ /**
57
+ * Validates that a shader module's parsed uniform block matches `uniformTypes`.
58
+ *
59
+ * When a mismatch is detected, the helper logs a formatted error and optionally
60
+ * throws via {@link assert}.
61
+ */
62
+ export function validateShaderModuleUniformLayout(module, stage, options = {}) {
63
+ const validationResult = getShaderModuleUniformLayoutValidationResult(module, stage);
64
+ if (!validationResult || validationResult.matches) {
65
+ return validationResult;
66
+ }
67
+ const message = formatShaderModuleUniformLayoutError(validationResult);
68
+ options.log?.error?.(message, validationResult)();
69
+ if (options.throwOnError !== false) {
70
+ assert(false, message);
71
+ }
72
+ return validationResult;
73
+ }
74
+ /**
75
+ * Parses all GLSL uniform blocks in a shader source string.
76
+ */
77
+ export function getGLSLUniformBlocks(shaderSource) {
78
+ const blocks = [];
79
+ const uncommentedSource = stripShaderComments(shaderSource);
80
+ for (const sourceMatch of uncommentedSource.matchAll(GLSL_UNIFORM_BLOCK_REGEXP)) {
81
+ const layoutQualifier = sourceMatch[1]?.trim() || null;
82
+ blocks.push({
83
+ blockName: sourceMatch[2],
84
+ body: sourceMatch[3],
85
+ instanceName: sourceMatch[4] || null,
86
+ layoutQualifier,
87
+ hasLayoutQualifier: Boolean(layoutQualifier),
88
+ isStd140: Boolean(layoutQualifier && /\blayout\s*\([^)]*\bstd140\b[^)]*\)/.exec(layoutQualifier))
89
+ });
90
+ }
91
+ return blocks;
92
+ }
93
+ /**
94
+ * Emits warnings for GLSL uniform blocks that do not explicitly declare
95
+ * `layout(std140)`.
96
+ *
97
+ * @returns The list of parsed blocks that were considered non-compliant.
98
+ */
99
+ export function warnIfGLSLUniformBlocksAreNotStd140(shaderSource, stage, log, context) {
100
+ const nonStd140Blocks = getGLSLUniformBlocks(shaderSource).filter(block => !block.isStd140);
101
+ const seenBlockNames = new Set();
102
+ for (const block of nonStd140Blocks) {
103
+ if (seenBlockNames.has(block.blockName)) {
104
+ continue;
105
+ }
106
+ seenBlockNames.add(block.blockName);
107
+ const shaderLabel = context?.label ? `${context.label} ` : '';
108
+ const actualLayout = block.hasLayoutQualifier
109
+ ? `declares ${normalizeWhitespace(block.layoutQualifier)} instead of layout(std140)`
110
+ : 'does not declare layout(std140)';
111
+ const message = `${shaderLabel}${stage} shader uniform block ${block.blockName} ${actualLayout}. luma.gl host-side shader block packing assumes explicit layout(std140) for GLSL uniform blocks. Add \`layout(std140)\` to the block declaration.`;
112
+ log?.warn?.(message, block)();
113
+ }
114
+ return nonStd140Blocks;
115
+ }
116
+ /**
117
+ * Extracts field names from the named GLSL or WGSL uniform block/struct.
118
+ */
119
+ function extractShaderUniformBlockFieldNames(shaderSource, language, uniformBlockName) {
120
+ const sourceBody = language === 'wgsl'
121
+ ? extractWGSLStructBody(shaderSource, uniformBlockName)
122
+ : extractGLSLUniformBlockBody(shaderSource, uniformBlockName);
123
+ if (!sourceBody) {
124
+ return null;
125
+ }
126
+ const fieldNames = [];
127
+ for (const sourceLine of sourceBody.split('\n')) {
128
+ const line = sourceLine.replace(/\/\/.*$/, '').trim();
129
+ if (!line || line.startsWith('#')) {
130
+ continue;
131
+ }
132
+ const fieldMatch = language === 'wgsl'
133
+ ? line.match(/^([A-Za-z0-9_]+)\s*:/)
134
+ : line.match(GLSL_UNIFORM_BLOCK_FIELD_REGEXP);
135
+ if (fieldMatch) {
136
+ fieldNames.push(fieldMatch[1]);
137
+ }
138
+ }
139
+ return fieldNames;
140
+ }
141
+ /**
142
+ * Extracts the body of a WGSL struct with the supplied name.
143
+ */
144
+ function extractWGSLStructBody(shaderSource, uniformBlockName) {
145
+ const structMatch = new RegExp(`\\bstruct\\s+${uniformBlockName}\\b`, 'm').exec(shaderSource);
146
+ if (!structMatch) {
147
+ return null;
148
+ }
149
+ const openBraceIndex = shaderSource.indexOf('{', structMatch.index);
150
+ if (openBraceIndex < 0) {
151
+ return null;
152
+ }
153
+ let braceDepth = 0;
154
+ for (let index = openBraceIndex; index < shaderSource.length; index++) {
155
+ const character = shaderSource[index];
156
+ if (character === '{') {
157
+ braceDepth++;
158
+ continue;
159
+ }
160
+ if (character !== '}') {
161
+ continue;
162
+ }
163
+ braceDepth--;
164
+ if (braceDepth === 0) {
165
+ return shaderSource.slice(openBraceIndex + 1, index);
166
+ }
167
+ }
168
+ return null;
169
+ }
170
+ /**
171
+ * Extracts the body of a named GLSL uniform block from shader source.
172
+ */
173
+ function extractGLSLUniformBlockBody(shaderSource, uniformBlockName) {
174
+ const block = getGLSLUniformBlocks(shaderSource).find(candidate => candidate.blockName === uniformBlockName);
175
+ return block?.body || null;
176
+ }
177
+ /**
178
+ * Returns `true` when the two arrays contain the same strings in the same order.
179
+ */
180
+ function areStringArraysEqual(leftValues, rightValues) {
181
+ if (leftValues.length !== rightValues.length) {
182
+ return false;
183
+ }
184
+ for (let valueIndex = 0; valueIndex < leftValues.length; valueIndex++) {
185
+ if (leftValues[valueIndex] !== rightValues[valueIndex]) {
186
+ return false;
187
+ }
188
+ }
189
+ return true;
190
+ }
191
+ /**
192
+ * Formats the standard validation error message for a shader-module layout mismatch.
193
+ */
194
+ function formatShaderModuleUniformLayoutError(validationResult) {
195
+ return `${validationResult.moduleName}: ${validationResult.stage} shader uniform block ${validationResult.uniformBlockName} does not match module.uniformTypes.\nExpected: ${validationResult.expectedUniformNames.join(', ')}\nActual: ${validationResult.actualUniformNames.join(', ')}`;
196
+ }
197
+ /**
198
+ * Removes line and block comments from shader source before lightweight parsing.
199
+ */
200
+ function stripShaderComments(shaderSource) {
201
+ return shaderSource.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/.*$/gm, '');
202
+ }
203
+ /**
204
+ * Collapses repeated whitespace in a layout qualifier for log-friendly output.
205
+ */
206
+ function normalizeWhitespace(value) {
207
+ return value.replace(/\s+/g, ' ').trim();
208
+ }
209
+ //# sourceMappingURL=shader-module-uniform-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-module-uniform-layout.js","sourceRoot":"","sources":["../../../src/lib/shader-module/shader-module-uniform-layout.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,15 @@
1
1
  import { UniformFormat } from "../../types.js";
2
2
  import { PropType, PropValidator } from "../filters/prop-types.js";
3
- import type { UniformSizes, UniformTypes, UniformValue } from "../utils/uniform-types.js";
3
+ import type { ShaderModuleUniformValue, UniformTypes, UniformValue } from "../utils/uniform-types.js";
4
4
  import { ShaderInjection } from "../shader-assembly/shader-injections.js";
5
5
  type Binding = unknown;
6
6
  export type UniformInfo = {
7
7
  format?: UniformFormat;
8
8
  } & PropType;
9
+ export type ShaderModuleBindingLayout = {
10
+ name: string;
11
+ group: number;
12
+ };
9
13
  type BindingKeys<T> = {
10
14
  [K in keyof T]: T[K] extends UniformValue ? never : K;
11
15
  }[keyof T];
@@ -25,13 +29,17 @@ export type PickUniforms<T> = {
25
29
  * @note `UniformsT` & `BindingsT` are deduced from `PropsT` by default. If
26
30
  * a custom type for `UniformsT` is used, `BindingsT` should be also be provided.
27
31
  */
28
- export type ShaderModule<PropsT extends Record<string, any> = Record<string, any>, UniformsT extends Record<string, UniformValue> = PickUniforms<PropsT>, BindingsT extends Record<string, Binding> = PickBindings<PropsT>> = {
32
+ export type ShaderModule<PropsT extends Record<string, any> = Record<string, any>, UniformsT extends Record<string, ShaderModuleUniformValue> = PickUniforms<PropsT>, BindingsT extends Record<string, Binding> = PickBindings<PropsT>> = {
29
33
  /** Used for type inference not for values */
30
34
  props?: PropsT;
31
35
  /** Used for type inference, not currently used for values */
32
36
  uniforms?: UniformsT;
33
37
  /** Used for type inference, not currently used for values */
34
38
  bindings?: BindingsT;
39
+ /** Logical bind-group assignment for bindings declared by this module */
40
+ bindingLayout?: readonly ShaderModuleBindingLayout[];
41
+ /** Preferred starting binding slot for this module's WGSL `@binding(auto)` declarations. */
42
+ firstBindingSlot?: number;
35
43
  name: string;
36
44
  /** WGSL code */
37
45
  source?: string;
@@ -41,15 +49,13 @@ export type ShaderModule<PropsT extends Record<string, any> = Record<string, any
41
49
  vs?: string;
42
50
  /** Uniform shader types @note: Both order and types MUST match uniform block declarations in shader */
43
51
  uniformTypes?: Required<UniformTypes<UniformsT>>;
44
- /** Uniform shader array sizes (default 1) */
45
- uniformSizes?: Required<UniformSizes<UniformsT>>;
46
52
  /** Uniform JS prop types */
47
53
  propTypes?: Record<keyof UniformsT, UniformInfo>;
48
54
  /** Default uniform values */
49
55
  defaultUniforms?: Required<UniformsT>;
50
56
  /** Function that maps props to uniforms & bindings */
51
57
  getUniforms?: (props: Partial<PropsT>, prevUniforms?: UniformsT) => Partial<UniformsT & BindingsT>;
52
- defines?: Record<string, boolean>;
58
+ defines?: Record<string, boolean | number>;
53
59
  /** Injections */
54
60
  inject?: Record<string, string | {
55
61
  injection: string;
@@ -79,7 +85,7 @@ export type ShaderModuleDeprecation = {
79
85
  export declare function initializeShaderModules(modules: ShaderModule[]): void;
80
86
  export declare function initializeShaderModule(module: ShaderModule): void;
81
87
  /** Convert module props to uniforms */
82
- export declare function getShaderModuleUniforms<ShaderModuleT extends ShaderModule<Record<string, unknown>, Record<string, UniformValue>>>(module: ShaderModuleT, props?: ShaderModuleT['props'], oldUniforms?: ShaderModuleT['uniforms']): Record<string, Binding | UniformValue>;
88
+ export declare function getShaderModuleUniforms<ShaderModuleT extends ShaderModule<Record<string, unknown>, Record<string, ShaderModuleUniformValue>>>(module: ShaderModuleT, props?: ShaderModuleT['props'], oldUniforms?: ShaderModuleT['uniforms']): Record<string, Binding | ShaderModuleUniformValue>;
83
89
  export declare function checkShaderModuleDeprecations(shaderModule: ShaderModule, shaderSource: string, log: any): void;
84
90
  export {};
85
91
  //# sourceMappingURL=shader-module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shader-module.d.ts","sourceRoot":"","sources":["../../../src/lib/shader-module/shader-module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shader-module.d.ts","sourceRoot":"","sources":["../../../src/lib/shader-module/shader-module.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,aAAa,EAAC,uBAAoB;AAC1C,OAAO,EACL,QAAQ,EACR,aAAa,EAGd,iCAA8B;AAC/B,OAAO,KAAK,EAAC,wBAAwB,EAAE,YAAY,EAAE,YAAY,EAAC,kCAA+B;AACjG,OAAO,EAAC,eAAe,EAAsB,gDAA6C;AAM1F,KAAK,OAAO,GAAG,OAAO,CAAC;AAEvB,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,GAAG,QAAQ,CAAC;AAEb,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAGF,KAAK,WAAW,CAAC,CAAC,IAAI;KAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,YAAY,GAAG,KAAK,GAAG,CAAC;CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvF,KAAK,WAAW,CAAC,CAAC,IAAI;KAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,YAAY,GAAG,CAAC,GAAG,KAAK;CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvF,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;KAAE,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAC,CAAC;AACtE,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;KAAE,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAC,CAAC;AAEtE;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,CACtB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxD,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,EACjF,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,IAC9D;IACF,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,yEAAyE;IACzE,aAAa,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACrD,4FAA4F;IAC5F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,IAAI,EAAE,MAAM,CAAC;IAEb,gBAAgB;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,uGAAuG;IACvG,YAAY,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,SAAS,EAAE,WAAW,CAAC,CAAC;IACjD,6BAA6B;IAC7B,eAAe,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEtC,sDAAsD;IACtD,WAAW,CAAC,EAAE,CACZ,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EACtB,YAAY,CAAC,EAAE,SAAS,KACrB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAEpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAC3C,iBAAiB;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IACrE,YAAY,CAAC,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACxC,2CAA2C;IAC3C,YAAY,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAEzC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE;QACT,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC/C,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;QAE9C,oBAAoB,EAAE;YACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;SAC3C,CAAC;KACH,CAAC;CACH,CAAC;AAEF,8DAA8D;AAC9D,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAIF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAErE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CA2CjE;AAED,uCAAuC;AACvC,wBAAgB,uBAAuB,CACrC,aAAa,SAAS,YAAY,CAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvB,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CACzC,EAED,MAAM,EAAE,aAAa,EACrB,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,EAC9B,WAAW,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,GACtC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,wBAAwB,CAAC,CAYpD;AAwBD,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,GAAG,GACP,IAAI,CAUN"}
@@ -1 +1 @@
1
- {"version":3,"file":"shader-module.js","sourceRoot":"","sources":["../../../src/lib/shader-module/shader-module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shader-module.js","sourceRoot":"","sources":["../../../src/lib/shader-module/shader-module.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/assert.ts"],"names":[],"mappings":"AAMA,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAIjE"}
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/assert.ts"],"names":[],"mappings":"AAMA,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAMjE"}
@@ -5,7 +5,9 @@
5
5
  // message so keep it for now.
6
6
  export function assert(condition, message) {
7
7
  if (!condition) {
8
- throw new Error(message || 'shadertools: assertion failed.');
8
+ const error = new Error(message || 'shadertools: assertion failed.');
9
+ Error.captureStackTrace?.(error, assert);
10
+ throw error;
9
11
  }
10
12
  }
11
13
  //# sourceMappingURL=assert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../src/lib/utils/assert.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,+EAA+E;AAC/E,8BAA8B;AAC9B,MAAM,UAAU,MAAM,CAAC,SAAkB,EAAE,OAAgB;IACzD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,gCAAgC,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../src/lib/utils/assert.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,+EAA+E;AAC/E,8BAA8B;AAC9B,MAAM,UAAU,MAAM,CAAC,SAAkB,EAAE,OAAgB;IACzD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,gCAAgC,CAAC,CAAC;QACrE,KAAK,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,14 +1,18 @@
1
1
  import type { Matrix3, Matrix4, Vector2, Vector3, Vector4, NumberArray2, NumberArray3, NumberArray4, NumberArray6, NumberArray8, NumberArray9, NumberArray12, NumberArray16 } from '@math.gl/core';
2
+ import type { CompositeShaderType } from '@luma.gl/core';
2
3
  export type UniformValue = Readonly<number | boolean | NumberArray2 | NumberArray3 | NumberArray4 | NumberArray6 | NumberArray8 | NumberArray9 | NumberArray12 | NumberArray16 | Vector2 | Vector3 | Vector4 | Matrix3 | Matrix4>;
3
- type UniformType<ValueT extends UniformValue> = ValueT extends number | boolean ? 'f32' | 'i32' | 'u32' : ValueT extends Readonly<NumberArray2 | Vector2> ? 'vec2<f32>' | 'vec2<i32>' | 'vec2<u32>' : ValueT extends Readonly<NumberArray3 | Vector3> ? 'vec3<f32>' | 'vec3<i32>' | 'vec3<u32>' : ValueT extends Readonly<NumberArray4 | Vector4> ? 'vec4<f32>' | 'vec4<i32>' | 'vec4<u32>' | 'mat2x2<f32>' : ValueT extends Readonly<NumberArray6> ? 'mat2x3<f32>' | 'mat3x2<f32>' : ValueT extends Readonly<NumberArray8> ? 'mat2x4<f32>' | 'mat4x2<f32>' : ValueT extends Readonly<NumberArray9 | Matrix3> ? 'mat3x3<f32>' : ValueT extends Readonly<NumberArray12> ? 'mat3x4<f32>' | 'mat4x3<f32>' : ValueT extends Readonly<NumberArray16 | Matrix4> ? 'mat4x4<f32>' : never;
4
- type UniformProps = {
5
- [name: string]: UniformValue;
4
+ export type ShaderModuleUniformValue = UniformValue | ShaderModuleUniformStruct | ShaderModuleUniformArray;
5
+ export type ShaderModuleUniformStruct = {
6
+ [name: string]: ShaderModuleUniformValue | undefined;
6
7
  };
8
+ export type ShaderModuleUniformArray = ReadonlyArray<ShaderModuleUniformValue | undefined>;
9
+ type UniformLeafType<ValueT extends UniformValue> = ValueT extends number | boolean ? 'f32' | 'i32' | 'u32' : ValueT extends Readonly<NumberArray2 | Vector2> ? 'vec2<f32>' | 'vec2<i32>' | 'vec2<u32>' : ValueT extends Readonly<NumberArray3 | Vector3> ? 'vec3<f32>' | 'vec3<i32>' | 'vec3<u32>' : ValueT extends Readonly<NumberArray4 | Vector4> ? 'vec4<f32>' | 'vec4<i32>' | 'vec4<u32>' | 'mat2x2<f32>' : ValueT extends Readonly<NumberArray6> ? 'mat2x3<f32>' | 'mat3x2<f32>' : ValueT extends Readonly<NumberArray8> ? 'mat2x4<f32>' | 'mat4x2<f32>' : ValueT extends Readonly<NumberArray9 | Matrix3> ? 'mat3x3<f32>' : ValueT extends Readonly<NumberArray12> ? 'mat3x4<f32>' | 'mat4x3<f32>' : ValueT extends Readonly<NumberArray16 | Matrix4> ? 'mat4x4<f32>' : never;
10
+ type UniformType<ValueT> = ValueT extends UniformValue ? UniformLeafType<ValueT> : ValueT extends ReadonlyArray<infer ElementT> ? readonly [UniformType<NonNullable<ElementT>>, number] : ValueT extends Record<string, unknown> ? {
11
+ [name in keyof ValueT]-?: UniformType<NonNullable<ValueT[name]>>;
12
+ } : never;
13
+ type UniformProps = Record<string, unknown>;
7
14
  export type UniformTypes<PropsT extends UniformProps> = {
8
- [name in keyof PropsT]: UniformType<PropsT[name]>;
9
- };
10
- export type UniformSizes<PropsT extends UniformProps> = {
11
- [name in keyof PropsT]: number;
15
+ [name in keyof PropsT]-?: UniformType<NonNullable<PropsT[name]>> & CompositeShaderType;
12
16
  };
13
17
  export {};
14
18
  //# sourceMappingURL=uniform-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uniform-types.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/uniform-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACd,MAAM,eAAe,CAAC;AAOvB,MAAM,MAAM,YAAY,GAAG,QAAQ,CAC/B,MAAM,GACN,OAAO,GACP,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,aAAa,GACb,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,CACV,CAAC;AAEF,KAAK,WAAW,CAAC,MAAM,SAAS,YAAY,IAAI,MAAM,SAAS,MAAM,GAAG,OAAO,GAC3E,KAAK,GAAG,KAAK,GAAG,KAAK,GACrB,MAAM,SAAS,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,GAC7C,WAAW,GAAG,WAAW,GAAG,WAAW,GACvC,MAAM,SAAS,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,GAC7C,WAAW,GAAG,WAAW,GAAG,WAAW,GACvC,MAAM,SAAS,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,GAC7C,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GACvD,MAAM,SAAS,QAAQ,CAAC,YAAY,CAAC,GACnC,aAAa,GAAG,aAAa,GAC7B,MAAM,SAAS,QAAQ,CAAC,YAAY,CAAC,GACnC,aAAa,GAAG,aAAa,GAC7B,MAAM,SAAS,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,GAC7C,aAAa,GACb,MAAM,SAAS,QAAQ,CAAC,aAAa,CAAC,GACpC,aAAa,GAAG,aAAa,GAC7B,MAAM,SAAS,QAAQ,CAAC,aAAa,GAAG,OAAO,CAAC,GAC9C,aAAa,GACb,KAAK,CAAC;AAE1B,KAAK,YAAY,GAAG;IAClB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,YAAY,IAAI;KACrD,IAAI,IAAI,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,YAAY,IAAI;KACrD,IAAI,IAAI,MAAM,MAAM,GAAG,MAAM;CAC/B,CAAC"}
1
+ {"version":3,"file":"uniform-types.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/uniform-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACd,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAOvD,MAAM,MAAM,YAAY,GAAG,QAAQ,CAC/B,MAAM,GACN,OAAO,GACP,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,aAAa,GACb,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,CACV,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC,YAAY,GACZ,yBAAyB,GACzB,wBAAwB,CAAC;AAE7B,MAAM,MAAM,yBAAyB,GAAG;IACtC,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,aAAa,CAAC,wBAAwB,GAAG,SAAS,CAAC,CAAC;AAE3F,KAAK,eAAe,CAAC,MAAM,SAAS,YAAY,IAAI,MAAM,SAAS,MAAM,GAAG,OAAO,GAC/E,KAAK,GAAG,KAAK,GAAG,KAAK,GACrB,MAAM,SAAS,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,GAC7C,WAAW,GAAG,WAAW,GAAG,WAAW,GACvC,MAAM,SAAS,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,GAC7C,WAAW,GAAG,WAAW,GAAG,WAAW,GACvC,MAAM,SAAS,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,GAC7C,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GACvD,MAAM,SAAS,QAAQ,CAAC,YAAY,CAAC,GACnC,aAAa,GAAG,aAAa,GAC7B,MAAM,SAAS,QAAQ,CAAC,YAAY,CAAC,GACnC,aAAa,GAAG,aAAa,GAC7B,MAAM,SAAS,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,GAC7C,aAAa,GACb,MAAM,SAAS,QAAQ,CAAC,aAAa,CAAC,GACpC,aAAa,GAAG,aAAa,GAC7B,MAAM,SAAS,QAAQ,CAAC,aAAa,GAAG,OAAO,CAAC,GAC9C,aAAa,GACb,KAAK,CAAC;AAE1B,KAAK,WAAW,CAAC,MAAM,IAAI,MAAM,SAAS,YAAY,GAClD,eAAe,CAAC,MAAM,CAAC,GACvB,MAAM,SAAS,aAAa,CAAC,MAAM,QAAQ,CAAC,GAC1C,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,GACrD,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC;KAAE,IAAI,IAAI,MAAM,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;CAAC,GAClE,KAAK,CAAC;AAEd,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,YAAY,IAAI;KACrD,IAAI,IAAI,MAAM,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,mBAAmB;CACvF,CAAC"}
@@ -39,6 +39,9 @@ export type PickingUniforms = {
39
39
  highlightColor?: NumberArray4;
40
40
  };
41
41
  /**
42
+ * Deprecated legacy picking module retained for compatibility with existing
43
+ * shadertools users such as deck.gl. Keep the shader contract stable.
44
+ *
42
45
  * Provides support for color-coding-based picking and highlighting.
43
46
  * In particular, supports picking a specific instance in an instanced
44
47
  * draw call and highlighting an instance based on its picking color,
@@ -65,8 +68,8 @@ export declare const picking: {
65
68
  readonly highlightedObjectColor: [0, 0, 0];
66
69
  readonly highlightColor: NumberArray4;
67
70
  };
68
- readonly vs: "uniform pickingUniforms {\n float isActive;\n float isAttribute;\n float isHighlightActive;\n float useFloatColors;\n vec3 highlightedObjectColor;\n vec4 highlightColor;\n} picking;\n\nout vec4 picking_vRGBcolor_Avalid;\n\n// Normalize unsigned byte color to 0-1 range\nvec3 picking_normalizeColor(vec3 color) {\n return picking.useFloatColors > 0.5 ? color : color / 255.0;\n}\n\n// Normalize unsigned byte color to 0-1 range\nvec4 picking_normalizeColor(vec4 color) {\n return picking.useFloatColors > 0.5 ? color : color / 255.0;\n}\n\nbool picking_isColorZero(vec3 color) {\n return dot(color, vec3(1.0)) < 0.00001;\n}\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.00001;\n}\n\n// Check if this vertex is highlighted \nbool isVertexHighlighted(vec3 vertexColor) {\n vec3 highlightedObjectColor = picking_normalizeColor(picking.highlightedObjectColor);\n return\n bool(picking.isHighlightActive) && picking_isColorZero(abs(vertexColor - highlightedObjectColor));\n}\n\n// Set the current picking color\nvoid picking_setPickingColor(vec3 pickingColor) {\n pickingColor = picking_normalizeColor(pickingColor);\n\n if (bool(picking.isActive)) {\n // Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable\n picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));\n\n if (!bool(picking.isAttribute)) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor;\n }\n } else {\n // Do the comparison with selected item color in vertex shader as it should mean fewer compares\n picking_vRGBcolor_Avalid.a = float(isVertexHighlighted(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\n\nvoid picking_setPickingAttribute(vec2 value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\n\nvoid picking_setPickingAttribute(vec3 value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n";
69
- readonly fs: "uniform pickingUniforms {\n float isActive;\n float isAttribute;\n float isHighlightActive;\n float useFloatColors;\n vec3 highlightedObjectColor;\n vec4 highlightColor;\n} picking;\n\nin vec4 picking_vRGBcolor_Avalid;\n\n/*\n * Returns highlight color if this item is selected.\n */\nvec4 picking_filterHighlightColor(vec4 color) {\n // If we are still picking, we don't highlight\n if (picking.isActive > 0.5) {\n return color;\n }\n\n bool selected = bool(picking_vRGBcolor_Avalid.a);\n\n if (selected) {\n // Blend in highlight color based on its alpha value\n float highLightAlpha = picking.highlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking.highlightColor.rgb, highLightRatio);\n return vec4(blendedRGB, blendedAlpha);\n } else {\n return color;\n }\n}\n\n/*\n * Returns picking color if picking enabled else unmodified argument.\n */\nvec4 picking_filterPickingColor(vec4 color) {\n if (bool(picking.isActive)) {\n if (picking_vRGBcolor_Avalid.a == 0.0) {\n discard;\n }\n return picking_vRGBcolor_Avalid;\n }\n return color;\n}\n\n/*\n * Returns picking color if picking is enabled if not\n * highlight color if this item is selected, otherwise unmodified argument.\n */\nvec4 picking_filterColor(vec4 color) {\n vec4 highlightColor = picking_filterHighlightColor(color);\n return picking_filterPickingColor(highlightColor);\n}\n";
71
+ readonly vs: "layout(std140) uniform pickingUniforms {\n float isActive;\n float isAttribute;\n float isHighlightActive;\n float useFloatColors;\n vec3 highlightedObjectColor;\n vec4 highlightColor;\n} picking;\n\nout vec4 picking_vRGBcolor_Avalid;\n\n// Normalize unsigned byte color to 0-1 range\nvec3 picking_normalizeColor(vec3 color) {\n return picking.useFloatColors > 0.5 ? color : color / 255.0;\n}\n\n// Normalize unsigned byte color to 0-1 range\nvec4 picking_normalizeColor(vec4 color) {\n return picking.useFloatColors > 0.5 ? color : color / 255.0;\n}\n\nbool picking_isColorZero(vec3 color) {\n return dot(color, vec3(1.0)) < 0.00001;\n}\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.00001;\n}\n\n// Check if this vertex is highlighted \nbool isVertexHighlighted(vec3 vertexColor) {\n vec3 highlightedObjectColor = picking_normalizeColor(picking.highlightedObjectColor);\n return\n bool(picking.isHighlightActive) && picking_isColorZero(abs(vertexColor - highlightedObjectColor));\n}\n\n// Set the current picking color\nvoid picking_setPickingColor(vec3 pickingColor) {\n pickingColor = picking_normalizeColor(pickingColor);\n\n if (bool(picking.isActive)) {\n // Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable\n picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));\n\n if (!bool(picking.isAttribute)) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor;\n }\n } else {\n // Do the comparison with selected item color in vertex shader as it should mean fewer compares\n picking_vRGBcolor_Avalid.a = float(isVertexHighlighted(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\n\nvoid picking_setPickingAttribute(vec2 value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\n\nvoid picking_setPickingAttribute(vec3 value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n";
72
+ readonly fs: "layout(std140) uniform pickingUniforms {\n float isActive;\n float isAttribute;\n float isHighlightActive;\n float useFloatColors;\n vec3 highlightedObjectColor;\n vec4 highlightColor;\n} picking;\n\nin vec4 picking_vRGBcolor_Avalid;\n\n/*\n * Returns highlight color if this item is selected.\n */\nvec4 picking_filterHighlightColor(vec4 color) {\n // If we are still picking, we don't highlight\n if (picking.isActive > 0.5) {\n return color;\n }\n\n bool selected = bool(picking_vRGBcolor_Avalid.a);\n\n if (selected) {\n // Blend in highlight color based on its alpha value\n float highLightAlpha = picking.highlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking.highlightColor.rgb, highLightRatio);\n return vec4(blendedRGB, blendedAlpha);\n } else {\n return color;\n }\n}\n\n/*\n * Returns picking color if picking enabled else unmodified argument.\n */\nvec4 picking_filterPickingColor(vec4 color) {\n if (bool(picking.isActive)) {\n if (picking_vRGBcolor_Avalid.a == 0.0) {\n discard;\n }\n return picking_vRGBcolor_Avalid;\n }\n return color;\n}\n\n/*\n * Returns picking color if picking is enabled if not\n * highlight color if this item is selected, otherwise unmodified argument.\n */\nvec4 picking_filterColor(vec4 color) {\n vec4 highlightColor = picking_filterHighlightColor(color);\n return picking_filterPickingColor(highlightColor);\n}\n";
70
73
  readonly getUniforms: typeof getUniforms;
71
74
  };
72
75
  declare function getUniforms(opts?: PickingProps, prevUniforms?: PickingUniforms): PickingUniforms;
@@ -1 +1 @@
1
- {"version":3,"file":"picking.d.ts","sourceRoot":"","sources":["../../../../src/modules/engine/picking/picking.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAK9D;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6FAA6F;IAC7F,sBAAsB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7C,mDAAmD;IACnD,cAAc,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;IAC7C,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6DAA6D;IAC7D,sBAAsB,CAAC,EAAE,YAAY,CAAC;IACtC,mDAAmD;IACnD,cAAc,CAAC,EAAE,YAAY,CAAC;CAC/B,CAAC;AAuIF;;;;;;GAMG;AACH,eAAO,MAAM,OAAO;oBACL,YAAY;uBACT,eAAe;;;;;;;;;;;;;;;;;;;;;CAwB+B,CAAC;AAEjE,iBAAS,WAAW,CAAC,IAAI,GAAE,YAAiB,EAAE,YAAY,CAAC,EAAE,eAAe,GAAG,eAAe,CA+B7F"}
1
+ {"version":3,"file":"picking.d.ts","sourceRoot":"","sources":["../../../../src/modules/engine/picking/picking.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAK9D;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6FAA6F;IAC7F,sBAAsB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7C,mDAAmD;IACnD,cAAc,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;IAC7C,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6DAA6D;IAC7D,sBAAsB,CAAC,EAAE,YAAY,CAAC;IACtC,mDAAmD;IACnD,cAAc,CAAC,EAAE,YAAY,CAAC;CAC/B,CAAC;AAuIF;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO;oBACL,YAAY;uBACT,eAAe;;;;;;;;;;;;;;;;;;;;;CAwB+B,CAAC;AAEjE,iBAAS,WAAW,CAAC,IAAI,GAAE,YAAiB,EAAE,YAAY,CAAC,EAAE,eAAe,GAAG,eAAe,CA+B7F"}
@@ -4,7 +4,7 @@
4
4
  // cyan color
5
5
  const DEFAULT_HIGHLIGHT_COLOR = [0, 1, 1, 1];
6
6
  const vs = /* glsl */ `\
7
- uniform pickingUniforms {
7
+ layout(std140) uniform pickingUniforms {
8
8
  float isActive;
9
9
  float isAttribute;
10
10
  float isHighlightActive;
@@ -77,7 +77,7 @@ void picking_setPickingAttribute(vec3 value) {
77
77
  }
78
78
  `;
79
79
  const fs = /* glsl */ `\
80
- uniform pickingUniforms {
80
+ layout(std140) uniform pickingUniforms {
81
81
  float isActive;
82
82
  float isAttribute;
83
83
  float isHighlightActive;
@@ -135,6 +135,9 @@ vec4 picking_filterColor(vec4 color) {
135
135
  }
136
136
  `;
137
137
  /**
138
+ * Deprecated legacy picking module retained for compatibility with existing
139
+ * shadertools users such as deck.gl. Keep the shader contract stable.
140
+ *
138
141
  * Provides support for color-coding-based picking and highlighting.
139
142
  * In particular, supports picking a specific instance in an instanced
140
143
  * draw call and highlighting an instance based on its picking color,
@@ -1 +1 @@
1
- {"version":3,"file":"picking.js","sourceRoot":"","sources":["../../../../src/modules/engine/picking/picking.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,aAAa;AACb,MAAM,uBAAuB,GAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AA2C3D,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwErB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDrB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE,EAAkB;IACzB,QAAQ,EAAE,EAAqB;IAE/B,IAAI,EAAE,SAAS;IAEf,YAAY,EAAE;QACZ,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK;QAClB,iBAAiB,EAAE,KAAK;QACxB,cAAc,EAAE,KAAK;QACrB,sBAAsB,EAAE,WAAW;QACnC,cAAc,EAAE,WAAW;KAC5B;IACD,eAAe,EAAE;QACf,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK;QAClB,iBAAiB,EAAE,KAAK;QACxB,cAAc,EAAE,IAAI;QACpB,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjC,cAAc,EAAE,uBAAuB;KACxC;IAED,EAAE;IACF,EAAE;IACF,WAAW;CACmD,CAAC;AAEjE,SAAS,WAAW,CAAC,OAAqB,EAAE,EAAE,YAA8B;IAC1E,MAAM,QAAQ,GAAG,EAAqB,CAAC;IAEvC,IAAI,IAAI,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;QAC9C,4EAA4E;IAC9E,CAAC;SAAM,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,EAAE,CAAC;QAChD,QAAQ,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAClC,MAAM,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAiB,CAAC;QACvF,QAAQ,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IAC3D,CAAC;IAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QACD,QAAQ,CAAC,cAAc,GAAG,KAAqB,CAAC;IAClD,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACtC,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"picking.js","sourceRoot":"","sources":["../../../../src/modules/engine/picking/picking.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,aAAa;AACb,MAAM,uBAAuB,GAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AA2C3D,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwErB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDrB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE,EAAkB;IACzB,QAAQ,EAAE,EAAqB;IAE/B,IAAI,EAAE,SAAS;IAEf,YAAY,EAAE;QACZ,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK;QAClB,iBAAiB,EAAE,KAAK;QACxB,cAAc,EAAE,KAAK;QACrB,sBAAsB,EAAE,WAAW;QACnC,cAAc,EAAE,WAAW;KAC5B;IACD,eAAe,EAAE;QACf,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK;QAClB,iBAAiB,EAAE,KAAK;QACxB,cAAc,EAAE,IAAI;QACpB,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjC,cAAc,EAAE,uBAAuB;KACxC;IAED,EAAE;IACF,EAAE;IACF,WAAW;CACmD,CAAC;AAEjE,SAAS,WAAW,CAAC,OAAqB,EAAE,EAAE,YAA8B;IAC1E,MAAM,QAAQ,GAAG,EAAqB,CAAC;IAEvC,IAAI,IAAI,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;QAC9C,4EAA4E;IAC9E,CAAC;SAAM,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,EAAE,CAAC;QAChD,QAAQ,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAClC,MAAM,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAiB,CAAC;QACvF,QAAQ,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IAC3D,CAAC;IAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QACD,QAAQ,CAAC,cAAc,GAAG,KAAqB,CAAC;IAClD,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACtC,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -32,7 +32,7 @@ export declare const projection: {
32
32
  readonly cameraPositionWorld: "vec3<f32>";
33
33
  };
34
34
  readonly getUniforms: typeof getUniforms;
35
- readonly vs: "varying vec4 project_vPositionWorld;\nvarying vec3 project_vNormalWorld;\n\n// Project uniform block\nuniform Project {\n mat4 viewMatrix;\n mat4 projectionMatrix;\n mat4 viewProjectionMatrix;\n vec3 cameraPositionWorld;\n} project;\n\nstruct World {\n vec3 position;\n vec3 normal;\n};\n\nWorld world;\n\nvoid project_setPosition(vec4 position) {\n project_vPositionWorld = position;\n}\n\nvoid project_setNormal(vec3 normal) {\n project_vNormalWorld = normal;\n}\n\nvoid project_setPositionAndNormal_World(vec3 position, vec3 normal) {\n world.position = position;\n world.normal = normal;\n}\n\nvoid project_setPositionAndNormal_Model(vec3 position, vec3 normal, mat4 modelMatrix) {\n world.position = (modelMatrix * vec4(position, 1.)).xyz;\n world.normal = mat3(modelMatrix) * normal;\n}\n\nvec4 project_model_to_clipspace(vec4 position) {\n return project.viewProjectionMatrix * position;\n}\n\nvec4 project_model_to_clipspace_Model(vec3 position, mat4 modelMatrix) {\n return project.viewProjectionMatrix * modelMatrix * vec4(position, 1.);\n}\n\nvec4 project_world_to_clipspace(vec3 position) {\n return project.viewProjectionMatrix * vec4(position, 1.);\n}\n\nvec4 project_view_to_clipspace(vec3 position) {\n return project.projectionMatrix * vec4(position, 1.);\n}\n\nvec4 project_to_clipspace(vec3 position) {\n return project.viewProjectionMatrix * vec4(position, 1.);\n}\n";
35
+ readonly vs: "varying vec4 project_vPositionWorld;\nvarying vec3 project_vNormalWorld;\n\n// Project uniform block\nlayout(std140) uniform Project {\n mat4 viewMatrix;\n mat4 projectionMatrix;\n mat4 viewProjectionMatrix;\n vec3 cameraPositionWorld;\n} project;\n\nstruct World {\n vec3 position;\n vec3 normal;\n};\n\nWorld world;\n\nvoid project_setPosition(vec4 position) {\n project_vPositionWorld = position;\n}\n\nvoid project_setNormal(vec3 normal) {\n project_vNormalWorld = normal;\n}\n\nvoid project_setPositionAndNormal_World(vec3 position, vec3 normal) {\n world.position = position;\n world.normal = normal;\n}\n\nvoid project_setPositionAndNormal_Model(vec3 position, vec3 normal, mat4 modelMatrix) {\n world.position = (modelMatrix * vec4(position, 1.)).xyz;\n world.normal = mat3(modelMatrix) * normal;\n}\n\nvec4 project_model_to_clipspace(vec4 position) {\n return project.viewProjectionMatrix * position;\n}\n\nvec4 project_model_to_clipspace_Model(vec3 position, mat4 modelMatrix) {\n return project.viewProjectionMatrix * modelMatrix * vec4(position, 1.);\n}\n\nvec4 project_world_to_clipspace(vec3 position) {\n return project.viewProjectionMatrix * vec4(position, 1.);\n}\n\nvec4 project_view_to_clipspace(vec3 position) {\n return project.projectionMatrix * vec4(position, 1.);\n}\n\nvec4 project_to_clipspace(vec3 position) {\n return project.viewProjectionMatrix * vec4(position, 1.);\n}\n";
36
36
  readonly fs: "varying vec4 project_vPositionWorld;\nvarying vec3 project_vNormalWorld;\n\nvec4 project_getPosition_World() {\n return project_vPositionWorld;\n}\n\nvec3 project_getNormal_World() {\n return project_vNormalWorld;\n}\n";
37
37
  };
38
38
  export {};
@@ -42,7 +42,7 @@ varying vec4 project_vPositionWorld;
42
42
  varying vec3 project_vNormalWorld;
43
43
 
44
44
  // Project uniform block
45
- uniform Project {
45
+ layout(std140) uniform Project {
46
46
  mat4 viewMatrix;
47
47
  mat4 projectionMatrix;
48
48
  mat4 viewProjectionMatrix;
@@ -0,0 +1,30 @@
1
+ export declare const source = "\nstruct skinUniforms {\n jointMatrix: array<mat4x4<f32>, 20>,\n};\n\n@group(0) @binding(auto) var<uniform> skin: skinUniforms;\n\nfn getSkinMatrix(weights: vec4f, joints: vec4u) -> mat4x4<f32> {\n return (weights.x * skin.jointMatrix[joints.x])\n + (weights.y * skin.jointMatrix[joints.y])\n + (weights.z * skin.jointMatrix[joints.z])\n + (weights.w * skin.jointMatrix[joints.w]);\n}\n";
2
+ export declare const vs = "\nlayout(std140) uniform skinUniforms {\n mat4 jointMatrix[SKIN_MAX_JOINTS];\n} skin;\n\nmat4 getSkinMatrix(vec4 weights, uvec4 joints) {\n return (weights.x * skin.jointMatrix[joints.x])\n + (weights.y * skin.jointMatrix[joints.y])\n + (weights.z * skin.jointMatrix[joints.z])\n + (weights.w * skin.jointMatrix[joints.w]);\n}\n\n";
3
+ export declare const fs = "";
4
+ export type SkinProps = {
5
+ scenegraphsFromGLTF?: any;
6
+ };
7
+ export type SkinUniforms = {
8
+ jointMatrix?: any;
9
+ };
10
+ export declare const skin: {
11
+ readonly props: SkinProps;
12
+ readonly uniforms: SkinUniforms;
13
+ readonly name: "skin";
14
+ readonly bindingLayout: readonly [{
15
+ readonly name: "skin";
16
+ readonly group: 0;
17
+ }];
18
+ readonly dependencies: [];
19
+ readonly source: "\nstruct skinUniforms {\n jointMatrix: array<mat4x4<f32>, 20>,\n};\n\n@group(0) @binding(auto) var<uniform> skin: skinUniforms;\n\nfn getSkinMatrix(weights: vec4f, joints: vec4u) -> mat4x4<f32> {\n return (weights.x * skin.jointMatrix[joints.x])\n + (weights.y * skin.jointMatrix[joints.y])\n + (weights.z * skin.jointMatrix[joints.z])\n + (weights.w * skin.jointMatrix[joints.w]);\n}\n";
20
+ readonly vs: "\nlayout(std140) uniform skinUniforms {\n mat4 jointMatrix[SKIN_MAX_JOINTS];\n} skin;\n\nmat4 getSkinMatrix(vec4 weights, uvec4 joints) {\n return (weights.x * skin.jointMatrix[joints.x])\n + (weights.y * skin.jointMatrix[joints.y])\n + (weights.z * skin.jointMatrix[joints.z])\n + (weights.w * skin.jointMatrix[joints.w]);\n}\n\n";
21
+ readonly fs: "";
22
+ readonly defines: {
23
+ readonly SKIN_MAX_JOINTS: 20;
24
+ };
25
+ readonly getUniforms: (props?: SkinProps, prevUniforms?: SkinUniforms) => SkinUniforms;
26
+ readonly uniformTypes: {
27
+ readonly jointMatrix: readonly ["mat4x4<f32>", 20];
28
+ };
29
+ };
30
+ //# sourceMappingURL=skin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skin.d.ts","sourceRoot":"","sources":["../../../../src/modules/engine/skin/skin.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,MAAM,2ZAalB,CAAC;AAEF,eAAO,MAAM,EAAE,mWAad,CAAC;AAEF,eAAO,MAAM,EAAE,KACd,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,mBAAmB,CAAC,EAAE,GAAG,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,IAAI;oBACF,SAAS;uBACN,YAAY;;;;;;;;;;;;;mCAaP,SAAS,iBAAsB,YAAY,KAAG,YAAY;;;;CA+CvB,CAAC"}