@luma.gl/shaders 10.0.0-alpha.6 → 10.0.0-alpha.8

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 (109) hide show
  1. package/dist/dist.dev.js +236 -141
  2. package/dist/dist.min.js +130 -125
  3. package/dist/glsl.cjs.map +1 -1
  4. package/dist/index.cjs.map +2 -2
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/glsl-shader-assembler.cjs +1 -1
  9. package/dist/lib/glsl-shader-assembler.js +1 -1
  10. package/dist/lib/glsl-shader-assembler.js.map +1 -1
  11. package/dist/lib/preprocessor/preprocessor.cjs +21 -0
  12. package/dist/lib/preprocessor/preprocessor.js +21 -0
  13. package/dist/lib/preprocessor/preprocessor.js.map +1 -1
  14. package/dist/lib/shader-assembly/assemble-glsl-shaders.cjs +12 -20
  15. package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts +3 -2
  16. package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts.map +1 -1
  17. package/dist/lib/shader-assembly/assemble-glsl-shaders.js +13 -21
  18. package/dist/lib/shader-assembly/assemble-glsl-shaders.js.map +1 -1
  19. package/dist/lib/shader-assembly/assemble-wgsl-shaders.cjs +7 -7
  20. package/dist/lib/shader-assembly/assemble-wgsl-shaders.js +8 -8
  21. package/dist/lib/shader-assembly/assemble-wgsl-shaders.js.map +1 -1
  22. package/dist/lib/shader-assembly/shader-assembly-types.d.ts +11 -7
  23. package/dist/lib/shader-assembly/shader-assembly-types.d.ts.map +1 -1
  24. package/dist/lib/shader-assembly/shader-hooks.cjs +23 -4
  25. package/dist/lib/shader-assembly/shader-hooks.d.ts +1 -1
  26. package/dist/lib/shader-assembly/shader-hooks.d.ts.map +1 -1
  27. package/dist/lib/shader-assembly/shader-hooks.js +27 -4
  28. package/dist/lib/shader-assembly/shader-hooks.js.map +1 -1
  29. package/dist/lib/shader-assembly/shader-injections.d.ts +2 -0
  30. package/dist/lib/shader-assembly/shader-injections.d.ts.map +1 -1
  31. package/dist/lib/shader-assembly/shader-injections.js.map +1 -1
  32. package/dist/lib/shader-assembly/shader-plugin-varyings.cjs +39 -22
  33. package/dist/lib/shader-assembly/shader-plugin-varyings.d.ts +5 -5
  34. package/dist/lib/shader-assembly/shader-plugin-varyings.d.ts.map +1 -1
  35. package/dist/lib/shader-assembly/shader-plugin-varyings.js +45 -19
  36. package/dist/lib/shader-assembly/shader-plugin-varyings.js.map +1 -1
  37. package/dist/lib/shader-generator/glsl/generate-glsl.d.ts +1 -1
  38. package/dist/lib/shader-generator/glsl/generate-glsl.d.ts.map +1 -1
  39. package/dist/lib/shader-generator/wgsl/generate-wgsl.d.ts +1 -1
  40. package/dist/lib/shader-generator/wgsl/generate-wgsl.d.ts.map +1 -1
  41. package/dist/lib/shader-plugin.cjs +94 -34
  42. package/dist/lib/shader-plugin.d.ts +55 -37
  43. package/dist/lib/shader-plugin.d.ts.map +1 -1
  44. package/dist/lib/shader-plugin.js +103 -35
  45. package/dist/lib/shader-plugin.js.map +1 -1
  46. package/dist/lib/wgsl-shader-assembler.cjs +1 -1
  47. package/dist/lib/wgsl-shader-assembler.js +1 -1
  48. package/dist/lib/wgsl-shader-assembler.js.map +1 -1
  49. package/dist/modules/engine/clip/clip.cjs +20 -30
  50. package/dist/modules/engine/clip/clip.d.ts.map +1 -1
  51. package/dist/modules/engine/clip/clip.js +21 -31
  52. package/dist/modules/engine/clip/clip.js.map +1 -1
  53. package/dist/modules/engine/filter/filter.cjs +10 -18
  54. package/dist/modules/engine/filter/filter.d.ts.map +1 -1
  55. package/dist/modules/engine/filter/filter.js +10 -18
  56. package/dist/modules/engine/filter/filter.js.map +1 -1
  57. package/dist/modules/lighting/lights/lighting.d.ts +1 -1
  58. package/dist/modules/lighting/lights/lighting.d.ts.map +1 -1
  59. package/dist/modules/lighting/pbr-material/pbr-material-glsl.cjs +2 -2
  60. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts +1 -1
  61. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts.map +1 -1
  62. package/dist/modules/lighting/pbr-material/pbr-material-glsl.js +2 -2
  63. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.cjs +2 -2
  64. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts +1 -1
  65. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts.map +1 -1
  66. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js +2 -2
  67. package/dist/modules/lighting/pbr-material/pbr-material.d.ts +2 -2
  68. package/dist/modules/math/fp64/fp64.cjs +1 -1
  69. package/dist/modules/math/fp64/fp64.d.ts +1 -1
  70. package/dist/modules/math/fp64/fp64.d.ts.map +1 -1
  71. package/dist/modules/math/fp64/fp64.js +1 -1
  72. package/dist/modules/math/fp64/fp64.js.map +1 -1
  73. package/dist/types/texture-formats.d.ts +1 -1
  74. package/dist/types/texture-formats.d.ts.map +1 -1
  75. package/dist/types.cjs +27 -16
  76. package/dist/types.d.ts +7 -7
  77. package/dist/types.d.ts.map +1 -1
  78. package/dist/types.js +2 -7
  79. package/dist/types.js.map +1 -1
  80. package/dist/wgsl.cjs +20 -4
  81. package/dist/wgsl.cjs.map +1 -1
  82. package/dist/wgsl.d.ts +1 -1
  83. package/dist/wgsl.d.ts.map +1 -1
  84. package/dist/wgsl.js +1 -1
  85. package/dist/wgsl.js.map +1 -1
  86. package/package.json +3 -3
  87. package/src/index.ts +5 -4
  88. package/src/lib/glsl-shader-assembler.ts +1 -1
  89. package/src/lib/preprocessor/preprocessor.ts +25 -0
  90. package/src/lib/shader-assembly/assemble-glsl-shaders.ts +19 -23
  91. package/src/lib/shader-assembly/assemble-wgsl-shaders.ts +9 -9
  92. package/src/lib/shader-assembly/shader-assembly-types.ts +11 -7
  93. package/src/lib/shader-assembly/shader-hooks.ts +33 -4
  94. package/src/lib/shader-assembly/shader-injections.ts +2 -0
  95. package/src/lib/shader-assembly/shader-plugin-varyings.ts +58 -27
  96. package/src/lib/shader-generator/glsl/generate-glsl.ts +1 -1
  97. package/src/lib/shader-generator/wgsl/generate-wgsl.ts +1 -1
  98. package/src/lib/shader-module/shader-module-dependencies.ts +1 -1
  99. package/src/lib/shader-plugin.ts +154 -77
  100. package/src/lib/wgsl-shader-assembler.ts +1 -1
  101. package/src/modules/engine/clip/clip.ts +21 -31
  102. package/src/modules/engine/filter/filter.ts +10 -18
  103. package/src/modules/lighting/lights/lighting.ts +1 -1
  104. package/src/modules/lighting/pbr-material/pbr-material-glsl.ts +2 -2
  105. package/src/modules/lighting/pbr-material/pbr-material-wgsl.ts +2 -2
  106. package/src/modules/math/fp64/fp64.ts +1 -1
  107. package/src/types/texture-formats.ts +2 -0
  108. package/src/types.ts +75 -7
  109. package/src/wgsl.ts +12 -1
@@ -1,4 +1,4 @@
1
- import { ShaderModule } from "../../../lib/shader-module/shader-module.js";
1
+ import { ShaderModule } from "../../shader-module/shader-module.js";
2
2
  export type GLSLGenerationOptions = {
3
3
  shaderLanguage: 'glsl';
4
4
  uniforms: 'scoped-interface-blocks' | 'unscoped-interface-blocks' | 'uniforms';
@@ -1 +1 @@
1
- {"version":3,"file":"generate-glsl.d.ts","sourceRoot":"","sources":["../../../../src/lib/shader-generator/glsl/generate-glsl.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,YAAY,EAAC,oDAAiD;AAGtE,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,yBAAyB,GAAG,2BAA2B,GAAG,UAAU,CAAC;CAChF,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,UAEzF"}
1
+ {"version":3,"file":"generate-glsl.d.ts","sourceRoot":"","sources":["../../../../src/lib/shader-generator/glsl/generate-glsl.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,YAAY,EAAC,6CAA0C;AAG/D,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,yBAAyB,GAAG,2BAA2B,GAAG,UAAU,CAAC;CAChF,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,UAEzF"}
@@ -1,4 +1,4 @@
1
- import { ShaderModule } from "../../../lib/shader-module/shader-module.js";
1
+ import { ShaderModule } from "../../shader-module/shader-module.js";
2
2
  export type WGSLGenerationOptions = {
3
3
  shaderLanguage: 'wgsl';
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"generate-wgsl.d.ts","sourceRoot":"","sources":["../../../../src/lib/shader-generator/wgsl/generate-wgsl.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAC,oDAAiD;AAGtE,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,UAEzF;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,qBAAqB,UAsB/B"}
1
+ {"version":3,"file":"generate-wgsl.d.ts","sourceRoot":"","sources":["../../../../src/lib/shader-generator/wgsl/generate-wgsl.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAC,6CAA0C;AAG/D,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,UAEzF;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,qBAAqB,UAsB/B"}
@@ -24,45 +24,56 @@ module.exports = __toCommonJS(shader_plugin_exports);
24
24
  var import_types = require("../types.cjs");
25
25
  const SHADER_PLUGIN_INJECTION_TARGET_REGEX = /^(vs|fs):(?:#(?:decl|main-start|main-end)|[A-Za-z_][\w-]*)$/;
26
26
  function resolveShaderPlugins(plugins = [], shaderLanguage) {
27
- const modules = [];
28
- const defines = {};
29
- const injections = {};
30
- const vertexInputs = {};
31
- const varyings = {};
27
+ const resolved = {
28
+ modules: [],
29
+ hooks: [],
30
+ defines: {},
31
+ injections: {},
32
+ vertexInputs: {},
33
+ interStageVariables: {}
34
+ };
32
35
  for (const plugin of plugins) {
33
- appendShaderPluginVariant({ modules, defines, injections, vertexInputs, varyings }, plugin);
34
- appendShaderPluginVariant({ modules, defines, injections, vertexInputs, varyings }, plugin[shaderLanguage]);
36
+ appendShaderPlugin(resolved, plugin, shaderLanguage);
35
37
  }
36
- for (const name of Object.keys(varyings)) {
38
+ const { vertexInputs, interStageVariables } = resolved;
39
+ for (const name of Object.keys(interStageVariables)) {
37
40
  if (vertexInputs[name]) {
38
41
  throw new Error(`ShaderPlugin name "${name}" cannot be both a vertex input and a varying`);
39
42
  }
40
43
  }
41
- return { modules, defines, injections, vertexInputs, varyings };
44
+ return resolved;
42
45
  }
43
- function mergeShaderPluginModules(modules = [], pluginModules = []) {
46
+ function mergeShaderPluginModules(modules = [], pluginModules = [], options = {}) {
47
+ var _a, _b;
44
48
  const mergedModules = [...modules];
45
- const seenModuleNames = new Set(mergedModules.map((module2) => module2.name));
49
+ const selectedModules = /* @__PURE__ */ new Map();
50
+ for (const module2 of mergedModules) {
51
+ const selected = selectedModules.get(module2.name);
52
+ if (selected && selected !== module2)
53
+ (_a = options.onConflict) == null ? void 0 : _a.call(options, module2.name, selected, module2);
54
+ if (!selected)
55
+ selectedModules.set(module2.name, module2);
56
+ }
46
57
  for (const pluginModule of pluginModules) {
47
- if (!seenModuleNames.has(pluginModule.name)) {
58
+ const selected = selectedModules.get(pluginModule.name);
59
+ if (selected && selected !== pluginModule) {
60
+ (_b = options.onConflict) == null ? void 0 : _b.call(options, pluginModule.name, selected, pluginModule);
61
+ }
62
+ if (!selected) {
48
63
  mergedModules.push(pluginModule);
49
- seenModuleNames.add(pluginModule.name);
64
+ selectedModules.set(pluginModule.name, pluginModule);
50
65
  }
51
66
  }
52
67
  return mergedModules;
53
68
  }
54
- function appendShaderPluginVariant(resolved, variant) {
55
- var _a;
56
- if (!variant) {
57
- return;
58
- }
59
- if ((_a = variant.modules) == null ? void 0 : _a.length) {
60
- resolved.modules.push(...variant.modules);
69
+ function appendShaderPlugin(resolved, plugin, shaderLanguage) {
70
+ if (plugin.module) {
71
+ resolved.modules.push(plugin.module);
61
72
  }
62
- if (variant.defines) {
63
- Object.assign(resolved.defines, variant.defines);
73
+ if (plugin.defines) {
74
+ Object.assign(resolved.defines, plugin.defines);
64
75
  }
65
- for (const [name, type] of Object.entries(variant.vertexInputs || {})) {
76
+ for (const [name, type] of Object.entries(plugin.vertexInputs || {})) {
66
77
  assertShaderPluginInterfaceName(name, "vertex input");
67
78
  const existingType = resolved.vertexInputs[name];
68
79
  if (existingType && existingType !== type) {
@@ -70,23 +81,62 @@ function appendShaderPluginVariant(resolved, variant) {
70
81
  }
71
82
  resolved.vertexInputs[name] = type;
72
83
  }
73
- for (const [name, varying] of Object.entries(variant.varyings || {})) {
84
+ for (const [name, varying] of Object.entries(plugin.interStageVariables || {})) {
74
85
  assertShaderPluginInterfaceName(name, "varying");
75
- const normalizedVarying = normalizeShaderPluginVarying(name, varying);
76
- const existingVarying = resolved.varyings[name];
86
+ const normalizedVarying = normalizeShaderPluginInterStageVariable(name, varying);
87
+ const existingVarying = resolved.interStageVariables[name];
77
88
  if (existingVarying && (existingVarying.type !== normalizedVarying.type || existingVarying.interpolation !== normalizedVarying.interpolation)) {
78
89
  throw new Error(`ShaderPlugin varying "${name}" has conflicting declarations "${existingVarying.type}/${existingVarying.interpolation}" and "${normalizedVarying.type}/${normalizedVarying.interpolation}"`);
79
90
  }
80
- resolved.varyings[name] = normalizedVarying;
91
+ resolved.interStageVariables[name] = normalizedVarying;
81
92
  }
82
- for (const injection of variant.injections || []) {
83
- assertNamedShaderPluginInjectionTarget(injection.target);
84
- if (!resolved.injections[injection.target]) {
85
- resolved.injections[injection.target] = [];
93
+ for (const hook of plugin.hooks || []) {
94
+ const declarationSource = typeof hook === "string" ? selectShaderLanguage(hook, shaderLanguage) : void 0;
95
+ if (typeof hook === "string" && declarationSource === void 0)
96
+ continue;
97
+ const signature = typeof hook === "string" ? declarationSource.slice(declarationSource.indexOf("(")) : hook[shaderLanguage];
98
+ if (signature === void 0)
99
+ continue;
100
+ const target = typeof hook === "string" ? declarationSource.split("(")[0] : getShaderPluginTarget(hook);
101
+ if (!/^(vs|fs):[A-Za-z_][A-Za-z0-9_]*$/.test(target) || !/^\([^]*\)$/.test(signature.trim())) {
102
+ throw new Error(`Invalid ShaderPlugin hook ${target}`);
86
103
  }
87
- const injections = resolved.injections[injection.target];
104
+ const declaration = { hook: `${target}${signature.trim()}` };
105
+ const existing = resolved.hooks.find((value) => value.hook.split("(")[0] === target);
106
+ if (existing && existing.hook !== declaration.hook) {
107
+ throw new Error(`Conflicting ShaderPlugin hook ${target}`);
108
+ }
109
+ if (!existing)
110
+ resolved.hooks.push(declaration);
111
+ }
112
+ const pluginInjections = Array.isArray(plugin.injections) ? plugin.injections : Object.entries(plugin.injections || {}).flatMap(([key, source]) => {
113
+ const target = selectShaderLanguage(key, shaderLanguage);
114
+ if (target === void 0)
115
+ return [];
116
+ const [stage, ...name] = target.split(":");
117
+ if (stage !== "vs" && stage !== "fs")
118
+ throw new Error(`Invalid ShaderPlugin injection ${key}`);
119
+ return [
120
+ {
121
+ stage: stage === "vs" ? "vertex" : "fragment",
122
+ target: name.join(":"),
123
+ [shaderLanguage]: source
124
+ }
125
+ ];
126
+ });
127
+ for (const injection of pluginInjections) {
128
+ const source = injection[shaderLanguage];
129
+ if (source === void 0)
130
+ continue;
131
+ const target = getShaderPluginTarget(injection);
132
+ assertNamedShaderPluginInjectionTarget(target);
133
+ if (!resolved.injections[target]) {
134
+ resolved.injections[target] = [];
135
+ }
136
+ const injections = resolved.injections[target];
88
137
  injections.push({
89
- injection: injection.injection,
138
+ pluginName: plugin.name,
139
+ injection: source,
90
140
  order: injection.order ?? 0
91
141
  });
92
142
  }
@@ -96,7 +146,7 @@ function assertShaderPluginInterfaceName(name, kind) {
96
146
  throw new Error(`ShaderPlugin ${kind} "${name}" must be a valid non-reserved identifier`);
97
147
  }
98
148
  }
99
- function normalizeShaderPluginVarying(name, varying) {
149
+ function normalizeShaderPluginInterStageVariable(name, varying) {
100
150
  const { primitiveType } = import_types.shaderTypeDecoder.getAttributeShaderTypeInfo(varying.type);
101
151
  const integerType = primitiveType === "i32" || primitiveType === "u32";
102
152
  const interpolation = varying.interpolation || (integerType ? "flat" : "smooth");
@@ -110,6 +160,16 @@ function assertNamedShaderPluginInjectionTarget(target) {
110
160
  throw new Error(`ShaderPlugin injection target "${target}" must be a named shader anchor or hook`);
111
161
  }
112
162
  }
163
+ function getShaderPluginTarget(value) {
164
+ if (value.stage !== "vertex" && value.stage !== "fragment" || value.target.includes(":")) {
165
+ throw new Error("ShaderPlugin object targets require an explicit stage and unqualified target");
166
+ }
167
+ return `${value.stage === "vertex" ? "vs" : "fs"}:${value.target}`;
168
+ }
169
+ function selectShaderLanguage(value, language) {
170
+ const match = /^(glsl|wgsl):([\s\S]+)$/.exec(value);
171
+ return match ? match[1] === language ? match[2] : void 0 : value;
172
+ }
113
173
  // Annotate the CommonJS export names for ESM import in node:
114
174
  0 && (module.exports = {
115
175
  mergeShaderPluginModules,
@@ -1,68 +1,86 @@
1
+ import type { ShaderHook } from "./shader-assembly/shader-hooks.js";
1
2
  import type { ShaderInjection } from "./shader-assembly/shader-injections.js";
2
3
  import type { ShaderModule } from "./shader-module/shader-module.js";
3
4
  import { type AttributeShaderType } from "../types.js";
4
5
  /** Named shader anchor or hook target accepted by ShaderPlugin injections. */
5
6
  export type ShaderPluginInjectionTarget = 'vs:#decl' | 'vs:#main-start' | 'vs:#main-end' | 'fs:#decl' | 'fs:#main-start' | 'fs:#main-end' | `vs:${string}` | `fs:${string}`;
7
+ /** Explicit stage and unqualified target for plugin object declarations. */
8
+ export type ShaderPluginTarget = {
9
+ /** Shader stage containing this extension point. */
10
+ stage: 'vertex' | 'fragment';
11
+ /** Unqualified hook name or structural anchor such as #main-start. */
12
+ target: string;
13
+ };
14
+ /** Hook function declared by a plugin, with parameter signatures per language. */
15
+ export type ShaderPluginHook = ShaderPluginTarget & {
16
+ /** GLSL parameter list, including parentheses. */
17
+ glsl?: string;
18
+ /** WGSL parameter list, including parentheses. */
19
+ wgsl?: string;
20
+ };
6
21
  /** Named shader source injection contributed by a ShaderPlugin. */
7
- export type ShaderPluginInjection = {
8
- /** Named shader anchor or hook that receives this source. */
9
- target: ShaderPluginInjectionTarget;
10
- /** Shader source to inject at the target. */
11
- injection: string;
22
+ export type ShaderPluginInjection = ShaderPluginTarget & {
23
+ /** GLSL source for this target. Omit to skip this injection when assembling GLSL. */
24
+ glsl?: string;
25
+ /** WGSL source for this target. Omit to skip this injection when assembling WGSL. */
26
+ wgsl?: string;
12
27
  /** Relative injection order within the target. */
13
28
  order?: number;
14
29
  };
15
- /** Portable interpolation modes for ShaderPlugin varyings. */
16
- export type ShaderPluginVaryingInterpolation = 'smooth' | 'flat';
30
+ /** Portable interpolation modes for ShaderPlugin inter-stage variables. */
31
+ export type ShaderPluginInterStageVariableInterpolation = 'smooth' | 'flat';
17
32
  /** Cross-stage value contributed by a ShaderPlugin. */
18
- export type ShaderPluginVarying = {
33
+ export type ShaderPluginInterStageVariable = {
19
34
  /** Portable scalar or vector shader type. */
20
35
  type: AttributeShaderType;
21
36
  /** Defaults to smooth for floating-point types and flat for integer types. */
22
- interpolation?: ShaderPluginVaryingInterpolation;
37
+ interpolation?: ShaderPluginInterStageVariableInterpolation;
23
38
  };
24
- /** Fully normalized ShaderPlugin varying declaration. */
25
- export type ResolvedShaderPluginVarying = {
39
+ /** Fully normalized ShaderPlugin inter-stage variable declaration. */
40
+ export type ResolvedShaderPluginInterStageVariable = {
26
41
  type: AttributeShaderType;
27
- interpolation: ShaderPluginVaryingInterpolation;
42
+ interpolation: ShaderPluginInterStageVariableInterpolation;
28
43
  };
29
- /** Shared or backend-specific shader assembly contributions. */
30
- export type ShaderPluginVariant = {
31
- /** Shader modules added to shader assembly. */
32
- modules?: ShaderModule[];
33
- /** Boolean preprocessor defines added to shader assembly. */
34
- defines?: Record<string, boolean>;
35
- /** Named code injections added to shader assembly. */
36
- injections?: ShaderPluginInjection[];
44
+ /** Reusable shader assembly descriptor with one portable interface and language-specific source. */
45
+ export type ShaderPlugin = {
46
+ /** Stable plugin identifier. */
47
+ name: string;
48
+ /** Primary shader module. Supporting modules belong in its dependencies; omit for injection-only plugins. */
49
+ module?: ShaderModule<any, any, any>;
50
+ /** Boolean or numeric preprocessor defines added to shader assembly. */
51
+ defines?: Record<string, boolean | number>;
52
+ /** Named injections as explicit-stage objects or optionally language-qualified string keys. */
53
+ injections?: ShaderPluginInjection[] | Record<string, string>;
54
+ /** Callable extension points as explicit-stage objects or optionally language-qualified signatures. */
55
+ hooks?: (ShaderPluginHook | string)[];
37
56
  /** Shader-facing vertex inputs added by this plugin. Buffer ownership remains with the caller. */
38
57
  vertexInputs?: Record<string, AttributeShaderType>;
39
58
  /** Values transported from the selected vertex entry point to the fragment entry point. */
40
- varyings?: Record<string, ShaderPluginVarying>;
41
- };
42
- /** Reusable cross-backend shader assembly descriptor. */
43
- export type ShaderPlugin = ShaderPluginVariant & {
44
- /** Stable plugin identifier. */
45
- name: string;
46
- /** GLSL-only shader assembly contributions. */
47
- glsl?: ShaderPluginVariant;
48
- /** WGSL-only shader assembly contributions. */
49
- wgsl?: ShaderPluginVariant;
59
+ interStageVariables?: Record<string, ShaderPluginInterStageVariable>;
50
60
  };
51
61
  /** ShaderPlugin contributions resolved for one shader language. */
52
62
  export type ResolvedShaderPlugins = {
53
63
  /** Resolved shader modules in plugin declaration order. */
54
64
  modules: ShaderModule[];
55
- /** Resolved boolean preprocessor defines. */
56
- defines: Record<string, boolean>;
65
+ /** Language-selected hook declarations. */
66
+ hooks: ShaderHook[];
67
+ /** Resolved boolean or numeric preprocessor defines. */
68
+ defines: Record<string, boolean | number>;
57
69
  /** Resolved named code injections grouped by target. */
58
70
  injections: Record<string, ShaderInjection[]>;
59
71
  /** Resolved shader-facing vertex inputs in plugin declaration order. */
60
72
  vertexInputs: Record<string, AttributeShaderType>;
61
- /** Resolved cross-stage varyings in plugin declaration order. */
62
- varyings: Record<string, ResolvedShaderPluginVarying>;
73
+ /** Resolved inter-stage variables in plugin declaration order. */
74
+ interStageVariables: Record<string, ResolvedShaderPluginInterStageVariable>;
63
75
  };
64
- /** Resolve shared and backend-specific contributions from shader plugins. */
76
+ /** Resolve plugin interfaces and select injection source for one shader language. */
65
77
  export declare function resolveShaderPlugins(plugins: readonly ShaderPlugin[] | undefined, shaderLanguage: 'glsl' | 'wgsl'): ResolvedShaderPlugins;
66
- /** Preserve explicit module inputs while appending plugin modules by first-seen name. */
67
- export declare function mergeShaderPluginModules(modules?: readonly ShaderModule[], pluginModules?: readonly ShaderModule[]): ShaderModule[];
78
+ /**
79
+ * Preserve explicit module inputs while appending plugin modules by first-seen name.
80
+ * Optional diagnostics report distinct descriptors sharing a name, without changing selection.
81
+ * Descriptor identity is checked; equivalent independently-created descriptors also report a conflict.
82
+ */
83
+ export declare function mergeShaderPluginModules(modules?: readonly ShaderModule[], pluginModules?: readonly ShaderModule[], options?: {
84
+ onConflict?: (name: string, selected: ShaderModule, ignored: ShaderModule) => void;
85
+ }): ShaderModule[];
68
86
  //# sourceMappingURL=shader-plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shader-plugin.d.ts","sourceRoot":"","sources":["../../src/lib/shader-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,eAAe,EAAC,+CAA4C;AACzE,OAAO,KAAK,EAAC,YAAY,EAAC,yCAAsC;AAChE,OAAO,EAAoB,KAAK,mBAAmB,EAAC,oBAAiB;AAErE,8EAA8E;AAC9E,MAAM,MAAM,2BAA2B,GACnC,UAAU,GACV,gBAAgB,GAChB,cAAc,GACd,UAAU,GACV,gBAAgB,GAChB,cAAc,GACd,MAAM,MAAM,EAAE,GACd,MAAM,MAAM,EAAE,CAAC;AAEnB,mEAAmE;AACnE,MAAM,MAAM,qBAAqB,GAAG;IAClC,6DAA6D;IAC7D,MAAM,EAAE,2BAA2B,CAAC;IACpC,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,8DAA8D;AAC9D,MAAM,MAAM,gCAAgC,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjE,uDAAuD;AACvD,MAAM,MAAM,mBAAmB,GAAG;IAChC,6CAA6C;IAC7C,IAAI,EAAE,mBAAmB,CAAC;IAC1B,8EAA8E;IAC9E,aAAa,CAAC,EAAE,gCAAgC,CAAC;CAClD,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,aAAa,EAAE,gCAAgC,CAAC;CACjD,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,mBAAmB,GAAG;IAChC,+CAA+C;IAC/C,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,sDAAsD;IACtD,UAAU,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACrC,kGAAkG;IAClG,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACnD,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAChD,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG;IAC/C,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,+CAA+C;IAC/C,IAAI,CAAC,EAAE,mBAAmB,CAAC;CAC5B,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,qBAAqB,GAAG;IAClC,2DAA2D;IAC3D,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAC9C,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAClD,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;CACvD,CAAC;AAKF,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,YAAY,EAAE,YAAK,EACrC,cAAc,EAAE,MAAM,GAAG,MAAM,GAC9B,qBAAqB,CAsBvB;AAED,yFAAyF;AACzF,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,SAAS,YAAY,EAAO,EACrC,aAAa,GAAE,SAAS,YAAY,EAAO,GAC1C,YAAY,EAAE,CAYhB"}
1
+ {"version":3,"file":"shader-plugin.d.ts","sourceRoot":"","sources":["../../src/lib/shader-plugin.ts"],"names":[],"mappings":"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"}
@@ -3,47 +3,62 @@
3
3
  // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
4
  import { shaderTypeDecoder } from "../types.js";
5
5
  const SHADER_PLUGIN_INJECTION_TARGET_REGEX = /^(vs|fs):(?:#(?:decl|main-start|main-end)|[A-Za-z_][\w-]*)$/;
6
- /** Resolve shared and backend-specific contributions from shader plugins. */
6
+ /** Resolve plugin interfaces and select injection source for one shader language. */
7
7
  export function resolveShaderPlugins(plugins = [], shaderLanguage) {
8
- const modules = [];
9
- const defines = {};
10
- const injections = {};
11
- const vertexInputs = {};
12
- const varyings = {};
8
+ const resolved = {
9
+ modules: [],
10
+ hooks: [],
11
+ defines: {},
12
+ injections: {},
13
+ vertexInputs: {},
14
+ interStageVariables: {}
15
+ };
13
16
  for (const plugin of plugins) {
14
- appendShaderPluginVariant({ modules, defines, injections, vertexInputs, varyings }, plugin);
15
- appendShaderPluginVariant({ modules, defines, injections, vertexInputs, varyings }, plugin[shaderLanguage]);
17
+ appendShaderPlugin(resolved, plugin, shaderLanguage);
16
18
  }
17
- for (const name of Object.keys(varyings)) {
19
+ const { vertexInputs, interStageVariables } = resolved;
20
+ for (const name of Object.keys(interStageVariables)) {
18
21
  if (vertexInputs[name]) {
19
22
  throw new Error(`ShaderPlugin name "${name}" cannot be both a vertex input and a varying`);
20
23
  }
21
24
  }
22
- return { modules, defines, injections, vertexInputs, varyings };
25
+ return resolved;
23
26
  }
24
- /** Preserve explicit module inputs while appending plugin modules by first-seen name. */
25
- export function mergeShaderPluginModules(modules = [], pluginModules = []) {
27
+ /**
28
+ * Preserve explicit module inputs while appending plugin modules by first-seen name.
29
+ * Optional diagnostics report distinct descriptors sharing a name, without changing selection.
30
+ * Descriptor identity is checked; equivalent independently-created descriptors also report a conflict.
31
+ */
32
+ export function mergeShaderPluginModules(modules = [], pluginModules = [], options = {}) {
26
33
  const mergedModules = [...modules];
27
- const seenModuleNames = new Set(mergedModules.map(module => module.name));
34
+ const selectedModules = new Map();
35
+ for (const module of mergedModules) {
36
+ const selected = selectedModules.get(module.name);
37
+ if (selected && selected !== module)
38
+ options.onConflict?.(module.name, selected, module);
39
+ if (!selected)
40
+ selectedModules.set(module.name, module);
41
+ }
28
42
  for (const pluginModule of pluginModules) {
29
- if (!seenModuleNames.has(pluginModule.name)) {
43
+ const selected = selectedModules.get(pluginModule.name);
44
+ if (selected && selected !== pluginModule) {
45
+ options.onConflict?.(pluginModule.name, selected, pluginModule);
46
+ }
47
+ if (!selected) {
30
48
  mergedModules.push(pluginModule);
31
- seenModuleNames.add(pluginModule.name);
49
+ selectedModules.set(pluginModule.name, pluginModule);
32
50
  }
33
51
  }
34
52
  return mergedModules;
35
53
  }
36
- function appendShaderPluginVariant(resolved, variant) {
37
- if (!variant) {
38
- return;
39
- }
40
- if (variant.modules?.length) {
41
- resolved.modules.push(...variant.modules);
54
+ function appendShaderPlugin(resolved, plugin, shaderLanguage) {
55
+ if (plugin.module) {
56
+ resolved.modules.push(plugin.module);
42
57
  }
43
- if (variant.defines) {
44
- Object.assign(resolved.defines, variant.defines);
58
+ if (plugin.defines) {
59
+ Object.assign(resolved.defines, plugin.defines);
45
60
  }
46
- for (const [name, type] of Object.entries(variant.vertexInputs || {})) {
61
+ for (const [name, type] of Object.entries(plugin.vertexInputs || {})) {
47
62
  assertShaderPluginInterfaceName(name, 'vertex input');
48
63
  const existingType = resolved.vertexInputs[name];
49
64
  if (existingType && existingType !== type) {
@@ -51,10 +66,10 @@ function appendShaderPluginVariant(resolved, variant) {
51
66
  }
52
67
  resolved.vertexInputs[name] = type;
53
68
  }
54
- for (const [name, varying] of Object.entries(variant.varyings || {})) {
69
+ for (const [name, varying] of Object.entries(plugin.interStageVariables || {})) {
55
70
  assertShaderPluginInterfaceName(name, 'varying');
56
- const normalizedVarying = normalizeShaderPluginVarying(name, varying);
57
- const existingVarying = resolved.varyings[name];
71
+ const normalizedVarying = normalizeShaderPluginInterStageVariable(name, varying);
72
+ const existingVarying = resolved.interStageVariables[name];
58
73
  if (existingVarying &&
59
74
  (existingVarying.type !== normalizedVarying.type ||
60
75
  existingVarying.interpolation !== normalizedVarying.interpolation)) {
@@ -62,16 +77,59 @@ function appendShaderPluginVariant(resolved, variant) {
62
77
  `"${existingVarying.type}/${existingVarying.interpolation}" and ` +
63
78
  `"${normalizedVarying.type}/${normalizedVarying.interpolation}"`);
64
79
  }
65
- resolved.varyings[name] = normalizedVarying;
80
+ resolved.interStageVariables[name] = normalizedVarying;
81
+ }
82
+ for (const hook of plugin.hooks || []) {
83
+ const declarationSource = typeof hook === 'string' ? selectShaderLanguage(hook, shaderLanguage) : undefined;
84
+ if (typeof hook === 'string' && declarationSource === undefined)
85
+ continue;
86
+ const signature = typeof hook === 'string'
87
+ ? declarationSource.slice(declarationSource.indexOf('('))
88
+ : hook[shaderLanguage];
89
+ if (signature === undefined)
90
+ continue;
91
+ const target = typeof hook === 'string' ? declarationSource.split('(')[0] : getShaderPluginTarget(hook);
92
+ if (!/^(vs|fs):[A-Za-z_][A-Za-z0-9_]*$/.test(target) || !/^\([^]*\)$/.test(signature.trim())) {
93
+ throw new Error(`Invalid ShaderPlugin hook ${target}`);
94
+ }
95
+ const declaration = { hook: `${target}${signature.trim()}` };
96
+ const existing = resolved.hooks.find(value => value.hook.split('(')[0] === target);
97
+ if (existing && existing.hook !== declaration.hook) {
98
+ throw new Error(`Conflicting ShaderPlugin hook ${target}`);
99
+ }
100
+ if (!existing)
101
+ resolved.hooks.push(declaration);
66
102
  }
67
- for (const injection of variant.injections || []) {
68
- assertNamedShaderPluginInjectionTarget(injection.target);
69
- if (!resolved.injections[injection.target]) {
70
- resolved.injections[injection.target] = [];
103
+ const pluginInjections = Array.isArray(plugin.injections)
104
+ ? plugin.injections
105
+ : Object.entries(plugin.injections || {}).flatMap(([key, source]) => {
106
+ const target = selectShaderLanguage(key, shaderLanguage);
107
+ if (target === undefined)
108
+ return [];
109
+ const [stage, ...name] = target.split(':');
110
+ if (stage !== 'vs' && stage !== 'fs')
111
+ throw new Error(`Invalid ShaderPlugin injection ${key}`);
112
+ return [
113
+ {
114
+ stage: stage === 'vs' ? 'vertex' : 'fragment',
115
+ target: name.join(':'),
116
+ [shaderLanguage]: source
117
+ }
118
+ ];
119
+ });
120
+ for (const injection of pluginInjections) {
121
+ const source = injection[shaderLanguage];
122
+ if (source === undefined)
123
+ continue;
124
+ const target = getShaderPluginTarget(injection);
125
+ assertNamedShaderPluginInjectionTarget(target);
126
+ if (!resolved.injections[target]) {
127
+ resolved.injections[target] = [];
71
128
  }
72
- const injections = resolved.injections[injection.target];
129
+ const injections = resolved.injections[target];
73
130
  injections.push({
74
- injection: injection.injection,
131
+ pluginName: plugin.name,
132
+ injection: source,
75
133
  order: injection.order ?? 0
76
134
  });
77
135
  }
@@ -81,7 +139,7 @@ function assertShaderPluginInterfaceName(name, kind) {
81
139
  throw new Error(`ShaderPlugin ${kind} "${name}" must be a valid non-reserved identifier`);
82
140
  }
83
141
  }
84
- function normalizeShaderPluginVarying(name, varying) {
142
+ function normalizeShaderPluginInterStageVariable(name, varying) {
85
143
  const { primitiveType } = shaderTypeDecoder.getAttributeShaderTypeInfo(varying.type);
86
144
  const integerType = primitiveType === 'i32' || primitiveType === 'u32';
87
145
  const interpolation = varying.interpolation || (integerType ? 'flat' : 'smooth');
@@ -95,4 +153,14 @@ function assertNamedShaderPluginInjectionTarget(target) {
95
153
  throw new Error(`ShaderPlugin injection target "${target}" must be a named shader anchor or hook`);
96
154
  }
97
155
  }
156
+ function getShaderPluginTarget(value) {
157
+ if ((value.stage !== 'vertex' && value.stage !== 'fragment') || value.target.includes(':')) {
158
+ throw new Error('ShaderPlugin object targets require an explicit stage and unqualified target');
159
+ }
160
+ return `${value.stage === 'vertex' ? 'vs' : 'fs'}:${value.target}`;
161
+ }
162
+ function selectShaderLanguage(value, language) {
163
+ const match = /^(glsl|wgsl):([\s\S]+)$/.exec(value);
164
+ return match ? (match[1] === language ? match[2] : undefined) : value;
165
+ }
98
166
  //# sourceMappingURL=shader-plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shader-plugin.js","sourceRoot":"","sources":["../../src/lib/shader-plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shader-plugin.js","sourceRoot":"","sources":["../../src/lib/shader-plugin.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ class WGSLShaderAssembler extends import_shader_assembler_base.ShaderAssembler {
37
37
  assembleWGSLShader(props) {
38
38
  var _a, _b, _c;
39
39
  const modules = this._getModuleList(props.modules);
40
- const hookFunctions = this._hookFunctions;
40
+ const hookFunctions = [...this._hookFunctions, ...props.hookFunctions || []];
41
41
  const translated = this._transpileShader(props, modules, props.source, props.shaderStage ?? (props.computeEntryPoint ? "compute" : void 0));
42
42
  const entryPoints = {
43
43
  vertex: ((_a = translated.entryPoints) == null ? void 0 : _a.vertex) ?? props.vertexEntryPoint,
@@ -18,7 +18,7 @@ export class WGSLShaderAssembler extends ShaderAssembler {
18
18
  */
19
19
  assembleWGSLShader(props) {
20
20
  const modules = this._getModuleList(props.modules); // Combine with default modules
21
- const hookFunctions = this._hookFunctions; // TODO - combine with default hook functions
21
+ const hookFunctions = [...this._hookFunctions, ...(props.hookFunctions || [])];
22
22
  const translated = this._transpileShader(props, modules, props.source, props.shaderStage ?? (props.computeEntryPoint ? 'compute' : undefined));
23
23
  const entryPoints = {
24
24
  vertex: translated.entryPoints?.vertex ?? props.vertexEntryPoint,
@@ -1 +1 @@
1
- {"version":3,"file":"wgsl-shader-assembler.js","sourceRoot":"","sources":["../../src/lib/wgsl-shader-assembler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wgsl-shader-assembler.js","sourceRoot":"","sources":["../../src/lib/wgsl-shader-assembler.ts"],"names":[],"mappings":"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"}