@luma.gl/shaders 10.0.0-alpha.8 → 10.0.0-alpha.9
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.
- package/dist/dist.dev.js +189 -268
- package/dist/dist.min.js +119 -119
- package/dist/glsl.cjs.map +2 -2
- package/dist/index.cjs.map +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/shader-assembler-base.cjs +3 -4
- package/dist/lib/shader-assembler-base.d.ts +4 -5
- package/dist/lib/shader-assembler-base.d.ts.map +1 -1
- package/dist/lib/shader-assembler-base.js +3 -4
- package/dist/lib/shader-assembler-base.js.map +1 -1
- package/dist/lib/shader-assembly/assemble-glsl-shaders.cjs +5 -16
- package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts +4 -4
- package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts.map +1 -1
- package/dist/lib/shader-assembly/assemble-glsl-shaders.js +13 -18
- package/dist/lib/shader-assembly/assemble-glsl-shaders.js.map +1 -1
- package/dist/lib/shader-assembly/assemble-wgsl-shaders.cjs +5 -24
- package/dist/lib/shader-assembly/assemble-wgsl-shaders.d.ts +5 -6
- package/dist/lib/shader-assembly/assemble-wgsl-shaders.d.ts.map +1 -1
- package/dist/lib/shader-assembly/assemble-wgsl-shaders.js +13 -26
- package/dist/lib/shader-assembly/assemble-wgsl-shaders.js.map +1 -1
- package/dist/lib/shader-assembly/shader-assembly-shared.d.ts +2 -2
- package/dist/lib/shader-assembly/shader-assembly-shared.d.ts.map +1 -1
- package/dist/lib/shader-assembly/shader-assembly-shared.js.map +1 -1
- package/dist/lib/shader-assembly/shader-assembly-types.d.ts +7 -7
- package/dist/lib/shader-assembly/shader-assembly-types.d.ts.map +1 -1
- package/dist/lib/shader-assembly/shader-hooks.cjs +17 -36
- package/dist/lib/shader-assembly/shader-hooks.d.ts +34 -32
- package/dist/lib/shader-assembly/shader-hooks.d.ts.map +1 -1
- package/dist/lib/shader-assembly/shader-hooks.js +20 -44
- package/dist/lib/shader-assembly/shader-hooks.js.map +1 -1
- package/dist/lib/shader-assembly/shader-injections.cjs +26 -2
- package/dist/lib/shader-assembly/shader-injections.d.ts +20 -7
- package/dist/lib/shader-assembly/shader-injections.d.ts.map +1 -1
- package/dist/lib/shader-assembly/shader-injections.js +24 -0
- package/dist/lib/shader-assembly/shader-injections.js.map +1 -1
- package/dist/lib/shader-module/shader-module.cjs +3 -9
- package/dist/lib/shader-module/shader-module.d.ts +4 -8
- package/dist/lib/shader-module/shader-module.d.ts.map +1 -1
- package/dist/lib/shader-module/shader-module.js +3 -6
- package/dist/lib/shader-module/shader-module.js.map +1 -1
- package/dist/lib/shader-plugin.cjs +13 -38
- package/dist/lib/shader-plugin.d.ts +5 -30
- package/dist/lib/shader-plugin.d.ts.map +1 -1
- package/dist/lib/shader-plugin.js +17 -40
- package/dist/lib/shader-plugin.js.map +1 -1
- package/dist/wgsl.cjs.map +2 -2
- package/package.json +2 -2
- package/src/index.ts +5 -6
- package/src/lib/shader-assembler-base.ts +5 -6
- package/src/lib/shader-assembly/assemble-glsl-shaders.ts +25 -25
- package/src/lib/shader-assembly/assemble-wgsl-shaders.ts +27 -42
- package/src/lib/shader-assembly/shader-assembly-shared.ts +5 -5
- package/src/lib/shader-assembly/shader-assembly-types.ts +7 -7
- package/src/lib/shader-assembly/shader-hooks.ts +55 -82
- package/src/lib/shader-assembly/shader-injections.ts +52 -8
- package/src/lib/shader-module/shader-module.ts +7 -14
- package/src/lib/shader-plugin.ts +31 -90
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { UniformFormat } from "../../types.js";
|
|
2
2
|
import { PropType, PropValidator } from "../filters/prop-types.js";
|
|
3
3
|
import type { ShaderModuleUniformValue, UniformTypes, UniformValue } from "../utils/uniform-types.js";
|
|
4
|
-
import {
|
|
4
|
+
import type { ResolvedShaderInjection } from "../shader-assembly/shader-injections.js";
|
|
5
5
|
import type { ShaderBinding as Binding } from "../../types.js";
|
|
6
6
|
export type UniformInfo = {
|
|
7
7
|
format?: UniformFormat;
|
|
@@ -63,11 +63,6 @@ export type ShaderModule<PropsT extends Record<string, any> = Record<string, any
|
|
|
63
63
|
getUniforms?: (props: Partial<PropsT>, prevUniforms?: UniformsT) => Partial<UniformsT & BindingsT>;
|
|
64
64
|
/** Boolean or numeric preprocessor defines contributed by this shader module. */
|
|
65
65
|
defines?: Record<string, boolean | number>;
|
|
66
|
-
/** Injections */
|
|
67
|
-
inject?: Record<string, string | {
|
|
68
|
-
injection: string;
|
|
69
|
-
order: number;
|
|
70
|
-
}>;
|
|
71
66
|
dependencies?: ShaderModule<any, any>[];
|
|
72
67
|
/** Information on deprecated properties */
|
|
73
68
|
deprecations?: ShaderModuleDeprecation[];
|
|
@@ -75,9 +70,10 @@ export type ShaderModule<PropsT extends Record<string, any> = Record<string, any
|
|
|
75
70
|
instance?: {
|
|
76
71
|
propValidators?: Record<string, PropValidator>;
|
|
77
72
|
parsedDeprecations: ShaderModuleDeprecation[];
|
|
73
|
+
/** Empty compatibility value for consumers using older shadertools assembly. */
|
|
78
74
|
normalizedInjections: {
|
|
79
|
-
vertex: Record<string,
|
|
80
|
-
fragment: Record<string,
|
|
75
|
+
vertex: Record<string, ResolvedShaderInjection>;
|
|
76
|
+
fragment: Record<string, ResolvedShaderInjection>;
|
|
81
77
|
};
|
|
82
78
|
};
|
|
83
79
|
};
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"shader-module.d.ts","sourceRoot":"","sources":["../../../src/lib/shader-module/shader-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
|
|
4
4
|
import { makePropValidators, getValidatedProperties } from "../filters/prop-types.js";
|
|
5
|
-
import { normalizeInjections } from "../shader-assembly/shader-injections.js";
|
|
6
5
|
// SHNDER MODULE API
|
|
7
6
|
export function initializeShaderModules(modules) {
|
|
8
7
|
modules.map((module) => initializeShaderModule(module));
|
|
@@ -12,12 +11,10 @@ export function initializeShaderModule(module) {
|
|
|
12
11
|
return;
|
|
13
12
|
}
|
|
14
13
|
initializeShaderModules(module.dependencies || []);
|
|
15
|
-
const { propTypes = {}, deprecations = []
|
|
16
|
-
// defines = {},
|
|
17
|
-
inject = {} } = module;
|
|
14
|
+
const { propTypes = {}, deprecations = [] } = module;
|
|
18
15
|
const instance = {
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
parsedDeprecations: parseDeprecationDefinitions(deprecations),
|
|
17
|
+
normalizedInjections: { vertex: {}, fragment: {} }
|
|
21
18
|
};
|
|
22
19
|
if (propTypes) {
|
|
23
20
|
instance.propValidators = makePropValidators(propTypes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader-module.js","sourceRoot":"","sources":["../../../src/lib/shader-module/shader-module.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;AAG5D,OAAO,EAGL,kBAAkB,EAClB,sBAAsB,EACvB,iCAA8B;
|
|
1
|
+
{"version":3,"file":"shader-module.js","sourceRoot":"","sources":["../../../src/lib/shader-module/shader-module.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;AAG5D,OAAO,EAGL,kBAAkB,EAClB,sBAAsB,EACvB,iCAA8B;AAoG/B,oBAAoB;AAEpB,MAAM,UAAU,uBAAuB,CAAC,OAAuB;IAC7D,OAAO,CAAC,GAAG,CAAC,CAAC,MAAoB,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,uBAAuB,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAEnD,MAAM,EAAC,SAAS,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE,EAAC,GAAG,MAAM,CAAC;IAEnD,MAAM,QAAQ,GAAuC;QACnD,kBAAkB,EAAE,2BAA2B,CAAC,YAAY,CAAC;QAC7D,oBAAoB,EAAE,EAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAC;KACjD,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,CAAC,cAAc,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,8EAA8E;IAC9E,IAAI,YAAY,GAA0B,EAAE,CAAC;IAC7C,IAAI,SAAS,EAAE,CAAC;QACd,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAC7C,CAAC,GAA0B,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE;YAC9C,mBAAmB;YACnB,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,CAAC;YAC9B,IAAI,KAAK,EAAE,CAAC;gBACV,mBAAmB;gBACnB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACnB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAA2B,CAC5B,CAAC;IACJ,CAAC;IAED,uGAAuG;IACvG,MAAM,CAAC,eAAe,GAAG;QACvB,GAAG,MAAM,CAAC,eAAe;QACzB,GAAG,YAAY;KACiB,CAAC;AACrC,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,uBAAuB,CAMrC,MAAqB,EACrB,KAA8B,EAC9B,WAAuC;IAEvC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/B,MAAM,QAAQ,GAAG,WAAW,IAAI,EAAC,GAAG,MAAM,CAAC,eAAe,EAAC,CAAC;IAC5D,+CAA+C;IAC/C,IAAI,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,yCAAyC;IACzC,mBAAmB;IACnB,OAAO,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACrF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;EAoBE;AACF,8CAA8C;AAC9C,MAAM,UAAU,6BAA6B,CAC3C,YAA0B,EAC1B,YAAoB,EACpB,GAAQ;IAER,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;QACvC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,UAAU;AAEV,SAAS,2BAA2B,CAAC,YAAuC;IAC1E,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACzB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,UAAU;gBACb,GAAG,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;gBAC3C,MAAM;YACR;gBACE,GAAG,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -21,8 +21,8 @@ __export(shader_plugin_exports, {
|
|
|
21
21
|
resolveShaderPlugins: () => resolveShaderPlugins
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(shader_plugin_exports);
|
|
24
|
+
var import_shader_injections = require("./shader-assembly/shader-injections.cjs");
|
|
24
25
|
var import_types = require("../types.cjs");
|
|
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
27
|
const resolved = {
|
|
28
28
|
modules: [],
|
|
@@ -91,23 +91,20 @@ function appendShaderPlugin(resolved, plugin, shaderLanguage) {
|
|
|
91
91
|
resolved.interStageVariables[name] = normalizedVarying;
|
|
92
92
|
}
|
|
93
93
|
for (const hook of plugin.hooks || []) {
|
|
94
|
-
const
|
|
95
|
-
if (
|
|
94
|
+
const implementation = hook[shaderLanguage];
|
|
95
|
+
if (!implementation)
|
|
96
96
|
continue;
|
|
97
|
-
const
|
|
98
|
-
if (
|
|
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())) {
|
|
97
|
+
const target = `${hook.stage === "vertex" ? "vs" : "fs"}:${hook.name}`;
|
|
98
|
+
if (!/^(vs|fs):[A-Za-z_][A-Za-z0-9_]*$/.test(target)) {
|
|
102
99
|
throw new Error(`Invalid ShaderPlugin hook ${target}`);
|
|
103
100
|
}
|
|
104
|
-
const
|
|
105
|
-
const
|
|
106
|
-
if (
|
|
101
|
+
const existing = resolved.hooks.find((value) => value.stage === hook.stage && value.name === hook.name);
|
|
102
|
+
const previous = existing == null ? void 0 : existing[shaderLanguage];
|
|
103
|
+
if (previous && (previous.parameters !== implementation.parameters || (previous.returnType || "void") !== (implementation.returnType || "void") || previous.header !== implementation.header || previous.footer !== implementation.footer)) {
|
|
107
104
|
throw new Error(`Conflicting ShaderPlugin hook ${target}`);
|
|
108
105
|
}
|
|
109
106
|
if (!existing)
|
|
110
|
-
resolved.hooks.push(
|
|
107
|
+
resolved.hooks.push({ name: hook.name, stage: hook.stage, [shaderLanguage]: implementation });
|
|
111
108
|
}
|
|
112
109
|
const pluginInjections = Array.isArray(plugin.injections) ? plugin.injections : Object.entries(plugin.injections || {}).flatMap(([key, source]) => {
|
|
113
110
|
const target = selectShaderLanguage(key, shaderLanguage);
|
|
@@ -124,21 +121,10 @@ function appendShaderPlugin(resolved, plugin, shaderLanguage) {
|
|
|
124
121
|
}
|
|
125
122
|
];
|
|
126
123
|
});
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const target = getShaderPluginTarget(injection);
|
|
132
|
-
assertNamedShaderPluginInjectionTarget(target);
|
|
133
|
-
if (!resolved.injections[target]) {
|
|
134
|
-
resolved.injections[target] = [];
|
|
135
|
-
}
|
|
136
|
-
const injections = resolved.injections[target];
|
|
137
|
-
injections.push({
|
|
138
|
-
pluginName: plugin.name,
|
|
139
|
-
injection: source,
|
|
140
|
-
order: injection.order ?? 0
|
|
141
|
-
});
|
|
124
|
+
const selectedInjections = (0, import_shader_injections.resolveShaderInjections)(pluginInjections, shaderLanguage, plugin.name);
|
|
125
|
+
for (const [target, injections] of Object.entries(selectedInjections)) {
|
|
126
|
+
resolved.injections[target] ||= [];
|
|
127
|
+
resolved.injections[target].push(...injections);
|
|
142
128
|
}
|
|
143
129
|
}
|
|
144
130
|
function assertShaderPluginInterfaceName(name, kind) {
|
|
@@ -155,17 +141,6 @@ function normalizeShaderPluginInterStageVariable(name, varying) {
|
|
|
155
141
|
}
|
|
156
142
|
return { type: varying.type, interpolation };
|
|
157
143
|
}
|
|
158
|
-
function assertNamedShaderPluginInjectionTarget(target) {
|
|
159
|
-
if (!SHADER_PLUGIN_INJECTION_TARGET_REGEX.test(target)) {
|
|
160
|
-
throw new Error(`ShaderPlugin injection target "${target}" must be a named shader anchor or hook`);
|
|
161
|
-
}
|
|
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
144
|
function selectShaderLanguage(value, language) {
|
|
170
145
|
const match = /^(glsl|wgsl):([\s\S]+)$/.exec(value);
|
|
171
146
|
return match ? match[1] === language ? match[2] : void 0 : value;
|
|
@@ -1,32 +1,7 @@
|
|
|
1
1
|
import type { ShaderHook } from "./shader-assembly/shader-hooks.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type ShaderInjection, type ResolvedShaderInjection } from "./shader-assembly/shader-injections.js";
|
|
3
3
|
import type { ShaderModule } from "./shader-module/shader-module.js";
|
|
4
4
|
import { type AttributeShaderType } from "../types.js";
|
|
5
|
-
/** Named shader anchor or hook target accepted by ShaderPlugin injections. */
|
|
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
|
-
};
|
|
21
|
-
/** Named shader source injection contributed by a ShaderPlugin. */
|
|
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;
|
|
27
|
-
/** Relative injection order within the target. */
|
|
28
|
-
order?: number;
|
|
29
|
-
};
|
|
30
5
|
/** Portable interpolation modes for ShaderPlugin inter-stage variables. */
|
|
31
6
|
export type ShaderPluginInterStageVariableInterpolation = 'smooth' | 'flat';
|
|
32
7
|
/** Cross-stage value contributed by a ShaderPlugin. */
|
|
@@ -50,9 +25,9 @@ export type ShaderPlugin = {
|
|
|
50
25
|
/** Boolean or numeric preprocessor defines added to shader assembly. */
|
|
51
26
|
defines?: Record<string, boolean | number>;
|
|
52
27
|
/** Named injections as explicit-stage objects or optionally language-qualified string keys. */
|
|
53
|
-
injections?:
|
|
54
|
-
/** Callable extension points
|
|
55
|
-
hooks?:
|
|
28
|
+
injections?: ShaderInjection[] | Record<string, string>;
|
|
29
|
+
/** Callable extension points with a shared name and language-specific source. */
|
|
30
|
+
hooks?: ShaderHook[];
|
|
56
31
|
/** Shader-facing vertex inputs added by this plugin. Buffer ownership remains with the caller. */
|
|
57
32
|
vertexInputs?: Record<string, AttributeShaderType>;
|
|
58
33
|
/** Values transported from the selected vertex entry point to the fragment entry point. */
|
|
@@ -67,7 +42,7 @@ export type ResolvedShaderPlugins = {
|
|
|
67
42
|
/** Resolved boolean or numeric preprocessor defines. */
|
|
68
43
|
defines: Record<string, boolean | number>;
|
|
69
44
|
/** Resolved named code injections grouped by target. */
|
|
70
|
-
injections: Record<string,
|
|
45
|
+
injections: Record<string, ResolvedShaderInjection[]>;
|
|
71
46
|
/** Resolved shader-facing vertex inputs in plugin declaration order. */
|
|
72
47
|
vertexInputs: Record<string, AttributeShaderType>;
|
|
73
48
|
/** Resolved inter-stage variables in plugin declaration order. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader-plugin.d.ts","sourceRoot":"","sources":["../../src/lib/shader-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,UAAU,EAAC,0CAAuC;AAC/D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"shader-plugin.d.ts","sourceRoot":"","sources":["../../src/lib/shader-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,UAAU,EAAC,0CAAuC;AAC/D,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC7B,+CAA4C;AAC7C,OAAO,KAAK,EAAC,YAAY,EAAC,yCAAsC;AAChE,OAAO,EAAoB,KAAK,mBAAmB,EAAC,oBAAiB;AAErE,2EAA2E;AAC3E,MAAM,MAAM,2CAA2C,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5E,uDAAuD;AACvD,MAAM,MAAM,8BAA8B,GAAG;IAC3C,6CAA6C;IAC7C,IAAI,EAAE,mBAAmB,CAAC;IAC1B,8EAA8E;IAC9E,aAAa,CAAC,EAAE,2CAA2C,CAAC;CAC7D,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,sCAAsC,GAAG;IACnD,IAAI,EAAE,mBAAmB,CAAC;IAC1B,aAAa,EAAE,2CAA2C,CAAC;CAC5D,CAAC;AAEF,oGAAoG;AACpG,MAAM,MAAM,YAAY,GAAG;IACzB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,6GAA6G;IAC7G,MAAM,CAAC,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAC3C,+FAA+F;IAC/F,UAAU,CAAC,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,iFAAiF;IACjF,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,kGAAkG;IAClG,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACnD,2FAA2F;IAC3F,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;CACtE,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,qBAAqB,GAAG;IAClC,2DAA2D;IAC3D,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,2CAA2C;IAC3C,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAC1C,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;IACtD,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAClD,kEAAkE;IAClE,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,sCAAsC,CAAC,CAAC;CAC7E,CAAC;AAEF,qFAAqF;AACrF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,YAAY,EAAE,YAAK,EACrC,cAAc,EAAE,MAAM,GAAG,MAAM,GAC9B,qBAAqB,CAsBvB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,SAAS,YAAY,EAAO,EACrC,aAAa,GAAE,SAAS,YAAY,EAAO,EAC3C,OAAO,GAAE;IAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,KAAK,IAAI,CAAA;CAAM,GACjG,YAAY,EAAE,CAqBhB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// luma.gl
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
|
|
4
|
+
import { resolveShaderInjections } from "./shader-assembly/shader-injections.js";
|
|
4
5
|
import { shaderTypeDecoder } from "../types.js";
|
|
5
|
-
const SHADER_PLUGIN_INJECTION_TARGET_REGEX = /^(vs|fs):(?:#(?:decl|main-start|main-end)|[A-Za-z_][\w-]*)$/;
|
|
6
6
|
/** Resolve plugin interfaces and select injection source for one shader language. */
|
|
7
7
|
export function resolveShaderPlugins(plugins = [], shaderLanguage) {
|
|
8
8
|
const resolved = {
|
|
@@ -80,25 +80,24 @@ function appendShaderPlugin(resolved, plugin, shaderLanguage) {
|
|
|
80
80
|
resolved.interStageVariables[name] = normalizedVarying;
|
|
81
81
|
}
|
|
82
82
|
for (const hook of plugin.hooks || []) {
|
|
83
|
-
const
|
|
84
|
-
if (
|
|
83
|
+
const implementation = hook[shaderLanguage];
|
|
84
|
+
if (!implementation)
|
|
85
85
|
continue;
|
|
86
|
-
const
|
|
87
|
-
|
|
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())) {
|
|
86
|
+
const target = `${hook.stage === 'vertex' ? 'vs' : 'fs'}:${hook.name}`;
|
|
87
|
+
if (!/^(vs|fs):[A-Za-z_][A-Za-z0-9_]*$/.test(target)) {
|
|
93
88
|
throw new Error(`Invalid ShaderPlugin hook ${target}`);
|
|
94
89
|
}
|
|
95
|
-
const
|
|
96
|
-
const
|
|
97
|
-
if (
|
|
90
|
+
const existing = resolved.hooks.find(value => value.stage === hook.stage && value.name === hook.name);
|
|
91
|
+
const previous = existing?.[shaderLanguage];
|
|
92
|
+
if (previous &&
|
|
93
|
+
(previous.parameters !== implementation.parameters ||
|
|
94
|
+
(previous.returnType || 'void') !== (implementation.returnType || 'void') ||
|
|
95
|
+
previous.header !== implementation.header ||
|
|
96
|
+
previous.footer !== implementation.footer)) {
|
|
98
97
|
throw new Error(`Conflicting ShaderPlugin hook ${target}`);
|
|
99
98
|
}
|
|
100
99
|
if (!existing)
|
|
101
|
-
resolved.hooks.push(
|
|
100
|
+
resolved.hooks.push({ name: hook.name, stage: hook.stage, [shaderLanguage]: implementation });
|
|
102
101
|
}
|
|
103
102
|
const pluginInjections = Array.isArray(plugin.injections)
|
|
104
103
|
? plugin.injections
|
|
@@ -117,21 +116,10 @@ function appendShaderPlugin(resolved, plugin, shaderLanguage) {
|
|
|
117
116
|
}
|
|
118
117
|
];
|
|
119
118
|
});
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const target = getShaderPluginTarget(injection);
|
|
125
|
-
assertNamedShaderPluginInjectionTarget(target);
|
|
126
|
-
if (!resolved.injections[target]) {
|
|
127
|
-
resolved.injections[target] = [];
|
|
128
|
-
}
|
|
129
|
-
const injections = resolved.injections[target];
|
|
130
|
-
injections.push({
|
|
131
|
-
pluginName: plugin.name,
|
|
132
|
-
injection: source,
|
|
133
|
-
order: injection.order ?? 0
|
|
134
|
-
});
|
|
119
|
+
const selectedInjections = resolveShaderInjections(pluginInjections, shaderLanguage, plugin.name);
|
|
120
|
+
for (const [target, injections] of Object.entries(selectedInjections)) {
|
|
121
|
+
resolved.injections[target] ||= [];
|
|
122
|
+
resolved.injections[target].push(...injections);
|
|
135
123
|
}
|
|
136
124
|
}
|
|
137
125
|
function assertShaderPluginInterfaceName(name, kind) {
|
|
@@ -148,17 +136,6 @@ function normalizeShaderPluginInterStageVariable(name, varying) {
|
|
|
148
136
|
}
|
|
149
137
|
return { type: varying.type, interpolation };
|
|
150
138
|
}
|
|
151
|
-
function assertNamedShaderPluginInjectionTarget(target) {
|
|
152
|
-
if (!SHADER_PLUGIN_INJECTION_TARGET_REGEX.test(target)) {
|
|
153
|
-
throw new Error(`ShaderPlugin injection target "${target}" must be a named shader anchor or hook`);
|
|
154
|
-
}
|
|
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
139
|
function selectShaderLanguage(value, language) {
|
|
163
140
|
const match = /^(glsl|wgsl):([\s\S]+)$/.exec(value);
|
|
164
141
|
return match ? (match[1] === language ? match[2] : undefined) : value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader-plugin.js","sourceRoot":"","sources":["../../src/lib/shader-plugin.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;
|
|
1
|
+
{"version":3,"file":"shader-plugin.js","sourceRoot":"","sources":["../../src/lib/shader-plugin.ts"],"names":[],"mappings":"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"}
|