@luma.gl/shadertools 9.0.0-alpha.31 → 9.0.0-alpha.33
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 +125 -4
- package/dist/index.cjs +118 -4
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/shader-assembler.d.ts +51 -0
- package/dist/lib/shader-assembler.d.ts.map +1 -0
- package/dist/lib/shader-assembler.js +65 -0
- package/dist/lib/shader-assembler.js.map +1 -0
- package/dist/lib/shader-assembly/assemble-shaders.d.ts +52 -0
- package/dist/lib/shader-assembly/assemble-shaders.d.ts.map +1 -0
- package/dist/lib/shader-assembly/assemble-shaders.js.map +1 -0
- package/dist/lib/shader-assembly/inject-shader.d.ts.map +1 -0
- package/dist/lib/shader-assembly/inject-shader.js.map +1 -0
- package/dist/lib/{shader-assembler → shader-assembly}/platform-defines.d.ts +1 -4
- package/dist/lib/shader-assembly/platform-defines.d.ts.map +1 -0
- package/dist/lib/shader-assembly/platform-defines.js.map +1 -0
- package/dist/lib/shader-assembly/platform-info.d.ts +16 -0
- package/dist/lib/shader-assembly/platform-info.d.ts.map +1 -0
- package/dist/lib/shader-assembly/platform-info.js +2 -0
- package/dist/lib/shader-assembly/platform-info.js.map +1 -0
- package/dist/lib/shader-assembly/resolve-modules.d.ts.map +1 -0
- package/dist/lib/shader-assembly/resolve-modules.js.map +1 -0
- package/dist/lib/shader-assembly/select-shaders.d.ts +23 -0
- package/dist/lib/shader-assembly/select-shaders.d.ts.map +1 -0
- package/dist/lib/shader-assembly/select-shaders.js +33 -0
- package/dist/lib/shader-assembly/select-shaders.js.map +1 -0
- package/dist.min.js +82 -82
- package/package.json +3 -3
- package/src/index.ts +9 -7
- package/src/lib/shader-assembler.ts +105 -0
- package/src/lib/{shader-assembler → shader-assembly}/assemble-shaders.ts +22 -4
- package/src/lib/{shader-assembler → shader-assembly}/platform-defines.ts +1 -5
- package/src/lib/shader-assembly/platform-info.ts +17 -0
- package/src/lib/shader-assembly/select-shaders.ts +59 -0
- package/dist/lib/shader-assembler/assemble-shaders.d.ts +0 -36
- package/dist/lib/shader-assembler/assemble-shaders.d.ts.map +0 -1
- package/dist/lib/shader-assembler/assemble-shaders.js.map +0 -1
- package/dist/lib/shader-assembler/inject-shader.d.ts.map +0 -1
- package/dist/lib/shader-assembler/inject-shader.js.map +0 -1
- package/dist/lib/shader-assembler/platform-defines.d.ts.map +0 -1
- package/dist/lib/shader-assembler/platform-defines.js.map +0 -1
- package/dist/lib/shader-assembler/resolve-modules.d.ts.map +0 -1
- package/dist/lib/shader-assembler/resolve-modules.js.map +0 -1
- /package/dist/lib/{shader-assembler → shader-assembly}/assemble-shaders.js +0 -0
- /package/dist/lib/{shader-assembler → shader-assembly}/inject-shader.d.ts +0 -0
- /package/dist/lib/{shader-assembler → shader-assembly}/inject-shader.js +0 -0
- /package/dist/lib/{shader-assembler → shader-assembly}/platform-defines.js +0 -0
- /package/dist/lib/{shader-assembler → shader-assembly}/resolve-modules.d.ts +0 -0
- /package/dist/lib/{shader-assembler → shader-assembly}/resolve-modules.js +0 -0
- /package/src/lib/{shader-assembler → shader-assembly}/inject-shader.ts +0 -0
- /package/src/lib/{shader-assembler → shader-assembly}/resolve-modules.ts +0 -0
package/dist/dist.dev.js
CHANGED
|
@@ -27,6 +27,7 @@ var __exports__ = (() => {
|
|
|
27
27
|
// src/index.ts
|
|
28
28
|
var src_exports = {};
|
|
29
29
|
__export(src_exports, {
|
|
30
|
+
ShaderAssembler: () => ShaderAssembler,
|
|
30
31
|
_ShaderModuleInstance: () => ShaderModuleInstance,
|
|
31
32
|
_getDependencyGraph: () => getDependencyGraph,
|
|
32
33
|
_resolveModules: () => resolveModules,
|
|
@@ -298,7 +299,7 @@ ${moduleSource}// END MODULE_${this.name}
|
|
|
298
299
|
return result;
|
|
299
300
|
}
|
|
300
301
|
|
|
301
|
-
// src/lib/shader-
|
|
302
|
+
// src/lib/shader-assembly/resolve-modules.ts
|
|
302
303
|
function resolveModules(modules) {
|
|
303
304
|
const instances = ShaderModuleInstance.instantiateModules(modules);
|
|
304
305
|
return getShaderDependencies(instances);
|
|
@@ -342,7 +343,7 @@ ${moduleSource}// END MODULE_${this.name}
|
|
|
342
343
|
}
|
|
343
344
|
}
|
|
344
345
|
|
|
345
|
-
// src/lib/shader-
|
|
346
|
+
// src/lib/shader-assembly/platform-defines.ts
|
|
346
347
|
function getPlatformShaderDefines(platformInfo) {
|
|
347
348
|
switch (platformInfo?.gpu.toLowerCase()) {
|
|
348
349
|
case "apple":
|
|
@@ -477,7 +478,7 @@ ${moduleSource}// END MODULE_${this.name}
|
|
|
477
478
|
#endif
|
|
478
479
|
`;
|
|
479
480
|
|
|
480
|
-
// src/lib/shader-
|
|
481
|
+
// src/lib/shader-assembly/inject-shader.ts
|
|
481
482
|
var MODULE_INJECTORS = {
|
|
482
483
|
vs: MODULE_INJECTORS_VS,
|
|
483
484
|
fs: MODULE_INJECTORS_FS
|
|
@@ -630,7 +631,7 @@ ${match}`).replace(new RegExp(`\\b${ES100_FRAGMENT_OUTPUT_NAME}\\b`, "g"), outpu
|
|
|
630
631
|
return new RegExp(`\\b${qualifier}[ \\t]+(\\w+[ \\t]+\\w+(\\[\\w+\\])?;)`, "g");
|
|
631
632
|
}
|
|
632
633
|
|
|
633
|
-
// src/lib/shader-
|
|
634
|
+
// src/lib/shader-assembly/assemble-shaders.ts
|
|
634
635
|
var INJECT_SHADER_DECLARATIONS = `
|
|
635
636
|
|
|
636
637
|
${DECLARATION_INJECT_MARKER}
|
|
@@ -862,6 +863,126 @@ ${isVertex ? "" : FRAGMENT_SHADER_PROLOGUE}
|
|
|
862
863
|
return result;
|
|
863
864
|
}
|
|
864
865
|
|
|
866
|
+
// src/lib/shader-assembly/select-shaders.ts
|
|
867
|
+
function selectShaders(platformInfo, props) {
|
|
868
|
+
if (!props.vs) {
|
|
869
|
+
throw new Error("no vertex shader");
|
|
870
|
+
}
|
|
871
|
+
const vs5 = getShaderSource(platformInfo, props.vs);
|
|
872
|
+
let fs26;
|
|
873
|
+
if (props.fs) {
|
|
874
|
+
fs26 = getShaderSource(platformInfo, props.fs);
|
|
875
|
+
}
|
|
876
|
+
return {
|
|
877
|
+
...props,
|
|
878
|
+
vs: vs5,
|
|
879
|
+
fs: fs26
|
|
880
|
+
};
|
|
881
|
+
}
|
|
882
|
+
function getShaderSource(platformInfo, shader) {
|
|
883
|
+
if (typeof shader === "string") {
|
|
884
|
+
return shader;
|
|
885
|
+
}
|
|
886
|
+
switch (platformInfo.type) {
|
|
887
|
+
case "webgpu":
|
|
888
|
+
if (shader?.wgsl) {
|
|
889
|
+
return shader.wgsl;
|
|
890
|
+
}
|
|
891
|
+
throw new Error("WebGPU does not support GLSL shaders");
|
|
892
|
+
default:
|
|
893
|
+
if (shader?.glsl) {
|
|
894
|
+
return shader.glsl;
|
|
895
|
+
}
|
|
896
|
+
throw new Error("WebGL does not support WGSL shaders");
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
// src/lib/shader-assembler.ts
|
|
901
|
+
var ShaderAssembler = class {
|
|
902
|
+
/** Default ShaderAssembler instance */
|
|
903
|
+
/** Hook functions */
|
|
904
|
+
_hookFunctions = [];
|
|
905
|
+
/** Shader modules */
|
|
906
|
+
_defaultModules = [];
|
|
907
|
+
/**
|
|
908
|
+
* A default shader assembler instance - the natural place to register default modules and hooks
|
|
909
|
+
* @returns
|
|
910
|
+
*/
|
|
911
|
+
static getDefaultShaderAssembler() {
|
|
912
|
+
ShaderAssembler.defaultShaderAssembler = ShaderAssembler.defaultShaderAssembler || new ShaderAssembler();
|
|
913
|
+
return ShaderAssembler.defaultShaderAssembler;
|
|
914
|
+
}
|
|
915
|
+
/**
|
|
916
|
+
* Add a default module that does not have to be provided with every call to assembleShaders()
|
|
917
|
+
*/
|
|
918
|
+
addDefaultModule(module) {
|
|
919
|
+
if (!this._defaultModules.find((m) => m.name === (typeof module === "string" ? module : module.name))) {
|
|
920
|
+
this._defaultModules.push(module);
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
/**
|
|
924
|
+
* Remove a default module
|
|
925
|
+
*/
|
|
926
|
+
removeDefaultModule(module) {
|
|
927
|
+
const moduleName = typeof module === "string" ? module : module.name;
|
|
928
|
+
this._defaultModules = this._defaultModules.filter((m) => m.name !== moduleName);
|
|
929
|
+
}
|
|
930
|
+
/**
|
|
931
|
+
* Register a shader hook
|
|
932
|
+
* @param hook
|
|
933
|
+
* @param opts
|
|
934
|
+
*/
|
|
935
|
+
addShaderHook(hook, opts) {
|
|
936
|
+
if (opts) {
|
|
937
|
+
hook = Object.assign(opts, {
|
|
938
|
+
hook
|
|
939
|
+
});
|
|
940
|
+
}
|
|
941
|
+
this._hookFunctions.push(hook);
|
|
942
|
+
}
|
|
943
|
+
/**
|
|
944
|
+
* Assemble a pair of shaders into a single shader program
|
|
945
|
+
* @param platformInfo
|
|
946
|
+
* @param props
|
|
947
|
+
* @returns
|
|
948
|
+
*/
|
|
949
|
+
assembleShaders(platformInfo, props) {
|
|
950
|
+
const modules = this._getModuleList(props.modules);
|
|
951
|
+
const hookFunctions = this._hookFunctions;
|
|
952
|
+
const options = selectShaders(platformInfo, props);
|
|
953
|
+
const assembled = assembleShaders(platformInfo, {
|
|
954
|
+
...options,
|
|
955
|
+
modules,
|
|
956
|
+
hookFunctions
|
|
957
|
+
});
|
|
958
|
+
return assembled;
|
|
959
|
+
}
|
|
960
|
+
/**
|
|
961
|
+
* Dedupe and combine with default modules
|
|
962
|
+
*/
|
|
963
|
+
_getModuleList(appModules = []) {
|
|
964
|
+
const modules = new Array(this._defaultModules.length + appModules.length);
|
|
965
|
+
const seen = {};
|
|
966
|
+
let count = 0;
|
|
967
|
+
for (let i = 0, len = this._defaultModules.length; i < len; ++i) {
|
|
968
|
+
const module = this._defaultModules[i];
|
|
969
|
+
const name = module.name;
|
|
970
|
+
modules[count++] = module;
|
|
971
|
+
seen[name] = true;
|
|
972
|
+
}
|
|
973
|
+
for (let i = 0, len = appModules.length; i < len; ++i) {
|
|
974
|
+
const module = appModules[i];
|
|
975
|
+
const name = module.name;
|
|
976
|
+
if (!seen[name]) {
|
|
977
|
+
modules[count++] = module;
|
|
978
|
+
seen[name] = true;
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
modules.length = count;
|
|
982
|
+
return modules;
|
|
983
|
+
}
|
|
984
|
+
};
|
|
985
|
+
|
|
865
986
|
// src/lib/shader-module/normalize-shader-module.ts
|
|
866
987
|
function normalizeShaderModule(module) {
|
|
867
988
|
if (!module.normalized) {
|
package/dist/index.cjs
CHANGED
|
@@ -37,6 +37,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
37
37
|
// src/index.ts
|
|
38
38
|
var src_exports = {};
|
|
39
39
|
__export(src_exports, {
|
|
40
|
+
ShaderAssembler: () => ShaderAssembler,
|
|
40
41
|
_ShaderModuleInstance: () => ShaderModuleInstance,
|
|
41
42
|
_getDependencyGraph: () => getDependencyGraph,
|
|
42
43
|
_resolveModules: () => resolveModules,
|
|
@@ -295,7 +296,7 @@ function normalizeInjections(injections) {
|
|
|
295
296
|
return result;
|
|
296
297
|
}
|
|
297
298
|
|
|
298
|
-
// src/lib/shader-
|
|
299
|
+
// src/lib/shader-assembly/resolve-modules.ts
|
|
299
300
|
function resolveModules(modules) {
|
|
300
301
|
const instances = ShaderModuleInstance.instantiateModules(modules);
|
|
301
302
|
return getShaderDependencies(instances);
|
|
@@ -324,7 +325,7 @@ function getDependencyGraph(options) {
|
|
|
324
325
|
}
|
|
325
326
|
}
|
|
326
327
|
|
|
327
|
-
// src/lib/shader-
|
|
328
|
+
// src/lib/shader-assembly/platform-defines.ts
|
|
328
329
|
function getPlatformShaderDefines(platformInfo) {
|
|
329
330
|
switch (platformInfo == null ? void 0 : platformInfo.gpu.toLowerCase()) {
|
|
330
331
|
case "apple":
|
|
@@ -459,7 +460,7 @@ var MODULE_INJECTORS_FS = glsl`\
|
|
|
459
460
|
#endif
|
|
460
461
|
`;
|
|
461
462
|
|
|
462
|
-
// src/lib/shader-
|
|
463
|
+
// src/lib/shader-assembly/inject-shader.ts
|
|
463
464
|
var MODULE_INJECTORS = {
|
|
464
465
|
vs: MODULE_INJECTORS_VS,
|
|
465
466
|
fs: MODULE_INJECTORS_FS
|
|
@@ -616,7 +617,7 @@ function makeVariableTextRegExp(qualifier) {
|
|
|
616
617
|
return new RegExp(`\\b${qualifier}[ \\t]+(\\w+[ \\t]+\\w+(\\[\\w+\\])?;)`, "g");
|
|
617
618
|
}
|
|
618
619
|
|
|
619
|
-
// src/lib/shader-
|
|
620
|
+
// src/lib/shader-assembly/assemble-shaders.ts
|
|
620
621
|
var INJECT_SHADER_DECLARATIONS = `
|
|
621
622
|
|
|
622
623
|
${DECLARATION_INJECT_MARKER}
|
|
@@ -826,6 +827,119 @@ function normalizeHookFunctions(hookFunctions) {
|
|
|
826
827
|
return result;
|
|
827
828
|
}
|
|
828
829
|
|
|
830
|
+
// src/lib/shader-assembly/select-shaders.ts
|
|
831
|
+
function selectShaders(platformInfo, props) {
|
|
832
|
+
if (!props.vs) {
|
|
833
|
+
throw new Error("no vertex shader");
|
|
834
|
+
}
|
|
835
|
+
const vs5 = getShaderSource(platformInfo, props.vs);
|
|
836
|
+
let fs26;
|
|
837
|
+
if (props.fs) {
|
|
838
|
+
fs26 = getShaderSource(platformInfo, props.fs);
|
|
839
|
+
}
|
|
840
|
+
return __spreadProps(__spreadValues({}, props), { vs: vs5, fs: fs26 });
|
|
841
|
+
}
|
|
842
|
+
function getShaderSource(platformInfo, shader) {
|
|
843
|
+
if (typeof shader === "string") {
|
|
844
|
+
return shader;
|
|
845
|
+
}
|
|
846
|
+
switch (platformInfo.type) {
|
|
847
|
+
case "webgpu":
|
|
848
|
+
if (shader == null ? void 0 : shader.wgsl) {
|
|
849
|
+
return shader.wgsl;
|
|
850
|
+
}
|
|
851
|
+
throw new Error("WebGPU does not support GLSL shaders");
|
|
852
|
+
default:
|
|
853
|
+
if (shader == null ? void 0 : shader.glsl) {
|
|
854
|
+
return shader.glsl;
|
|
855
|
+
}
|
|
856
|
+
throw new Error("WebGL does not support WGSL shaders");
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
// src/lib/shader-assembler.ts
|
|
861
|
+
var ShaderAssembler = class {
|
|
862
|
+
constructor() {
|
|
863
|
+
/** Hook functions */
|
|
864
|
+
this._hookFunctions = [];
|
|
865
|
+
/** Shader modules */
|
|
866
|
+
this._defaultModules = [];
|
|
867
|
+
}
|
|
868
|
+
/**
|
|
869
|
+
* A default shader assembler instance - the natural place to register default modules and hooks
|
|
870
|
+
* @returns
|
|
871
|
+
*/
|
|
872
|
+
static getDefaultShaderAssembler() {
|
|
873
|
+
ShaderAssembler.defaultShaderAssembler = ShaderAssembler.defaultShaderAssembler || new ShaderAssembler();
|
|
874
|
+
return ShaderAssembler.defaultShaderAssembler;
|
|
875
|
+
}
|
|
876
|
+
/**
|
|
877
|
+
* Add a default module that does not have to be provided with every call to assembleShaders()
|
|
878
|
+
*/
|
|
879
|
+
addDefaultModule(module2) {
|
|
880
|
+
if (!this._defaultModules.find(
|
|
881
|
+
(m) => m.name === (typeof module2 === "string" ? module2 : module2.name)
|
|
882
|
+
)) {
|
|
883
|
+
this._defaultModules.push(module2);
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
/**
|
|
887
|
+
* Remove a default module
|
|
888
|
+
*/
|
|
889
|
+
removeDefaultModule(module2) {
|
|
890
|
+
const moduleName = typeof module2 === "string" ? module2 : module2.name;
|
|
891
|
+
this._defaultModules = this._defaultModules.filter((m) => m.name !== moduleName);
|
|
892
|
+
}
|
|
893
|
+
/**
|
|
894
|
+
* Register a shader hook
|
|
895
|
+
* @param hook
|
|
896
|
+
* @param opts
|
|
897
|
+
*/
|
|
898
|
+
addShaderHook(hook, opts) {
|
|
899
|
+
if (opts) {
|
|
900
|
+
hook = Object.assign(opts, { hook });
|
|
901
|
+
}
|
|
902
|
+
this._hookFunctions.push(hook);
|
|
903
|
+
}
|
|
904
|
+
/**
|
|
905
|
+
* Assemble a pair of shaders into a single shader program
|
|
906
|
+
* @param platformInfo
|
|
907
|
+
* @param props
|
|
908
|
+
* @returns
|
|
909
|
+
*/
|
|
910
|
+
assembleShaders(platformInfo, props) {
|
|
911
|
+
const modules = this._getModuleList(props.modules);
|
|
912
|
+
const hookFunctions = this._hookFunctions;
|
|
913
|
+
const options = selectShaders(platformInfo, props);
|
|
914
|
+
const assembled = assembleShaders(platformInfo, __spreadProps(__spreadValues({}, options), { modules, hookFunctions }));
|
|
915
|
+
return assembled;
|
|
916
|
+
}
|
|
917
|
+
/**
|
|
918
|
+
* Dedupe and combine with default modules
|
|
919
|
+
*/
|
|
920
|
+
_getModuleList(appModules = []) {
|
|
921
|
+
const modules = new Array(this._defaultModules.length + appModules.length);
|
|
922
|
+
const seen = {};
|
|
923
|
+
let count = 0;
|
|
924
|
+
for (let i = 0, len = this._defaultModules.length; i < len; ++i) {
|
|
925
|
+
const module2 = this._defaultModules[i];
|
|
926
|
+
const name = module2.name;
|
|
927
|
+
modules[count++] = module2;
|
|
928
|
+
seen[name] = true;
|
|
929
|
+
}
|
|
930
|
+
for (let i = 0, len = appModules.length; i < len; ++i) {
|
|
931
|
+
const module2 = appModules[i];
|
|
932
|
+
const name = module2.name;
|
|
933
|
+
if (!seen[name]) {
|
|
934
|
+
modules[count++] = module2;
|
|
935
|
+
seen[name] = true;
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
modules.length = count;
|
|
939
|
+
return modules;
|
|
940
|
+
}
|
|
941
|
+
};
|
|
942
|
+
|
|
829
943
|
// src/lib/shader-module/normalize-shader-module.ts
|
|
830
944
|
function normalizeShaderModule(module2) {
|
|
831
945
|
if (!module2.normalized) {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export type { ShaderModule } from './lib/shader-module/shader-module';
|
|
2
2
|
export type { ShaderPass } from './lib/shader-module/shader-pass';
|
|
3
|
-
export type {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
3
|
+
export type { PlatformInfo } from './lib/shader-assembly/platform-info';
|
|
4
|
+
export type { HookFunction } from './lib/shader-assembly/assemble-shaders';
|
|
5
|
+
export { ShaderAssembler } from './lib/shader-assembler';
|
|
6
|
+
export { assembleShaders } from './lib/shader-assembly/assemble-shaders';
|
|
7
|
+
export { combineInjects } from './lib/shader-assembly/inject-shader';
|
|
6
8
|
export { normalizeShaderModule } from './lib/shader-module/normalize-shader-module';
|
|
7
9
|
export { getShaderInfo } from './lib/glsl-utils/get-shader-info';
|
|
8
10
|
export { getQualifierDetails, getPassthroughFS, typeToChannelSuffix, typeToChannelCount, convertToVec4 } from './lib/glsl-utils/shader-utils';
|
|
@@ -46,6 +48,6 @@ export { fxaa } from './modules/fxaa/fxaa';
|
|
|
46
48
|
export { warp as _warp } from './modules/image-warp-filters/warp';
|
|
47
49
|
export { transform as _transform } from './modules/transform/transform';
|
|
48
50
|
export { ShaderModuleInstance as _ShaderModuleInstance } from './lib/shader-module/shader-module-instance';
|
|
49
|
-
export { resolveModules as _resolveModules } from './lib/shader-
|
|
50
|
-
export { getDependencyGraph as _getDependencyGraph } from './lib/shader-
|
|
51
|
+
export { resolveModules as _resolveModules } from './lib/shader-assembly/resolve-modules';
|
|
52
|
+
export { getDependencyGraph as _getDependencyGraph } from './lib/shader-assembly/resolve-modules';
|
|
51
53
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAC,YAAY,EAAC,MAAM,mCAAmC,CAAC;AACpE,YAAY,EAAC,UAAU,EAAC,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { ShaderAssembler } from "./lib/shader-assembler.js";
|
|
2
|
+
export { assembleShaders } from "./lib/shader-assembly/assemble-shaders.js";
|
|
3
|
+
export { combineInjects } from "./lib/shader-assembly/inject-shader.js";
|
|
3
4
|
export { normalizeShaderModule } from "./lib/shader-module/normalize-shader-module.js";
|
|
4
5
|
export { getShaderInfo } from "./lib/glsl-utils/get-shader-info.js";
|
|
5
6
|
export { getQualifierDetails, getPassthroughFS, typeToChannelSuffix, typeToChannelCount, convertToVec4 } from "./lib/glsl-utils/shader-utils.js";
|
|
@@ -37,6 +38,6 @@ export { fxaa } from "./modules/fxaa/fxaa.js";
|
|
|
37
38
|
export { warp as _warp } from "./modules/image-warp-filters/warp.js";
|
|
38
39
|
export { transform as _transform } from "./modules/transform/transform.js";
|
|
39
40
|
export { ShaderModuleInstance as _ShaderModuleInstance } from "./lib/shader-module/shader-module-instance.js";
|
|
40
|
-
export { resolveModules as _resolveModules } from "./lib/shader-
|
|
41
|
-
export { getDependencyGraph as _getDependencyGraph } from "./lib/shader-
|
|
41
|
+
export { resolveModules as _resolveModules } from "./lib/shader-assembly/resolve-modules.js";
|
|
42
|
+
export { getDependencyGraph as _getDependencyGraph } from "./lib/shader-assembly/resolve-modules.js";
|
|
42
43
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["assembleShaders","combineInjects","normalizeShaderModule","getShaderInfo","getQualifierDetails","getPassthroughFS","typeToChannelSuffix","typeToChannelCount","convertToVec4","glsl","generateShaderForModule","capitalize","random","fp32","fp64","fp64arithmetic","project","lights","dirlight","picking","gouraudLighting","phongLighting","pbr","tiltShift","triangleBlur","zoomBlur","brightnessContrast","denoise","hueSaturation","noise","sepia","vibrance","vignette","colorHalftone","dotScreen","edgeWork","hexagonalPixelate","ink","magnify","bulgePinch","swirl","fxaa","warp","_warp","transform","_transform","ShaderModuleInstance","_ShaderModuleInstance","resolveModules","_resolveModules","getDependencyGraph","_getDependencyGraph"],"sources":["../src/index.ts"],"sourcesContent":["// shadertools exports\n\n//
|
|
1
|
+
{"version":3,"file":"index.js","names":["ShaderAssembler","assembleShaders","combineInjects","normalizeShaderModule","getShaderInfo","getQualifierDetails","getPassthroughFS","typeToChannelSuffix","typeToChannelCount","convertToVec4","glsl","generateShaderForModule","capitalize","random","fp32","fp64","fp64arithmetic","project","lights","dirlight","picking","gouraudLighting","phongLighting","pbr","tiltShift","triangleBlur","zoomBlur","brightnessContrast","denoise","hueSaturation","noise","sepia","vibrance","vignette","colorHalftone","dotScreen","edgeWork","hexagonalPixelate","ink","magnify","bulgePinch","swirl","fxaa","warp","_warp","transform","_transform","ShaderModuleInstance","_ShaderModuleInstance","resolveModules","_resolveModules","getDependencyGraph","_getDependencyGraph"],"sources":["../src/index.ts"],"sourcesContent":["// shadertools exports\n\n// ShaderAssembler\nexport type {ShaderModule} from './lib/shader-module/shader-module';\nexport type {ShaderPass} from './lib/shader-module/shader-pass';\nexport type {PlatformInfo} from './lib/shader-assembly/platform-info';\nexport type {HookFunction} from './lib/shader-assembly/assemble-shaders';\n\nexport {ShaderAssembler} from './lib/shader-assembler';\n\n// Detailed API (normally recommended to use ShaderAssembler instead)\nexport {assembleShaders} from './lib/shader-assembly/assemble-shaders';\nexport {combineInjects} from './lib/shader-assembly/inject-shader';\nexport {normalizeShaderModule} from './lib/shader-module/normalize-shader-module';\n\n// Shader source introspection\nexport {getShaderInfo} from './lib/glsl-utils/get-shader-info';\nexport {\n getQualifierDetails,\n getPassthroughFS,\n typeToChannelSuffix,\n typeToChannelCount,\n convertToVec4\n} from './lib/glsl-utils/shader-utils';\n\n// SHADER HELPERS\n\n/**\n * Marks GLSL shaders for syntax highlighting: glsl`...`\n * Install https://marketplace.visualstudio.com/items?itemName=boyswan.glsl-literal\n */\nexport {glsl} from './lib/glsl-utils/highlight';\n\n// TODO - experimental\nexport type {ShaderGenerationOptions} from './lib/shader-generator/generate-shader';\nexport {generateShaderForModule} from './lib/shader-generator/generate-shader';\nexport {capitalize} from './lib/shader-generator/utils/capitalize';\n\n// SHADER MODULES\n\n// utils\nexport {random} from './modules/utils/random';\n\n// math libraries\nexport {fp32} from './modules/fp32/fp32';\nexport {fp64, fp64arithmetic} from './modules/fp64/fp64';\n\n// projection and lighting\nexport {project} from './modules/project/project';\nexport {lights} from './modules/lights/lights';\nexport {dirlight} from './modules/dirlight/dirlight';\nexport {picking} from './modules/picking/picking';\nexport {gouraudLighting, phongLighting} from './modules/phong-lighting/phong-lighting';\nexport {pbr} from './modules/pbr/pbr';\n\n// glfx BLUR shader modules\nexport {tiltShift} from './modules/image-blur-filters/tiltshift';\nexport {triangleBlur} from './modules/image-blur-filters/triangleblur';\nexport {zoomBlur} from './modules/image-blur-filters/zoomblur';\n\n// glfx image adjustment shader modules\nexport type {BrightnessContrastProps} from './modules/image-adjust-filters/brightnesscontrast';\nexport {brightnessContrast} from './modules/image-adjust-filters/brightnesscontrast';\nexport {denoise} from './modules/image-adjust-filters/denoise';\nexport {hueSaturation} from './modules/image-adjust-filters/huesaturation';\nexport {noise} from './modules/image-adjust-filters/noise';\nexport {sepia} from './modules/image-adjust-filters/sepia';\nexport {vibrance} from './modules/image-adjust-filters/vibrance';\nexport {vignette} from './modules/image-adjust-filters/vignette';\n\n// glfx FUN shader modules\nexport {colorHalftone} from './modules/image-fun-filters/colorhalftone';\nexport {dotScreen} from './modules/image-fun-filters/dotscreen';\nexport {edgeWork} from './modules/image-fun-filters/edgework';\nexport {hexagonalPixelate} from './modules/image-fun-filters/hexagonalpixelate';\nexport {ink} from './modules/image-fun-filters/ink';\nexport {magnify} from './modules/image-fun-filters/magnify';\n\n// glfx WARP shader modules\nexport {bulgePinch} from './modules/image-warp-filters/bulgepinch';\nexport {swirl} from './modules/image-warp-filters/swirl';\n\n// Postprocessing\nexport {fxaa} from './modules/fxaa/fxaa';\n\n// experimental\nexport {warp as _warp} from './modules/image-warp-filters/warp';\nexport {transform as _transform} from './modules/transform/transform';\n\n// TEST EXPORTS\nexport {ShaderModuleInstance as _ShaderModuleInstance} from './lib/shader-module/shader-module-instance';\nexport {resolveModules as _resolveModules} from './lib/shader-assembly/resolve-modules';\nexport {getDependencyGraph as _getDependencyGraph} from './lib/shader-assembly/resolve-modules';"],"mappings":"SAQQA,eAAe;AAAA,SAGfC,eAAe;AAAA,SACfC,cAAc;AAAA,SACdC,qBAAqB;AAAA,SAGrBC,aAAa;AAAA,SAEnBC,mBAAmB,EACnBC,gBAAgB,EAChBC,mBAAmB,EACnBC,kBAAkB,EAClBC,aAAa;AAAA,SASPC,IAAI;AAAA,SAIJC,uBAAuB;AAAA,SACvBC,UAAU;AAAA,SAKVC,MAAM;AAAA,SAGNC,IAAI;AAAA,SACJC,IAAI,EAAEC,cAAc;AAAA,SAGpBC,OAAO;AAAA,SACPC,MAAM;AAAA,SACNC,QAAQ;AAAA,SACRC,OAAO;AAAA,SACPC,eAAe,EAAEC,aAAa;AAAA,SAC9BC,GAAG;AAAA,SAGHC,SAAS;AAAA,SACTC,YAAY;AAAA,SACZC,QAAQ;AAAA,SAIRC,kBAAkB;AAAA,SAClBC,OAAO;AAAA,SACPC,aAAa;AAAA,SACbC,KAAK;AAAA,SACLC,KAAK;AAAA,SACLC,QAAQ;AAAA,SACRC,QAAQ;AAAA,SAGRC,aAAa;AAAA,SACbC,SAAS;AAAA,SACTC,QAAQ;AAAA,SACRC,iBAAiB;AAAA,SACjBC,GAAG;AAAA,SACHC,OAAO;AAAA,SAGPC,UAAU;AAAA,SACVC,KAAK;AAAA,SAGLC,IAAI;AAAA,SAGJC,IAAI,IAAIC,KAAK;AAAA,SACbC,SAAS,IAAIC,UAAU;AAAA,SAGvBC,oBAAoB,IAAIC,qBAAqB;AAAA,SAC7CC,cAAc,IAAIC,eAAe;AAAA,SACjCC,kBAAkB,IAAIC,mBAAmB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { ShaderModule } from './shader-module/shader-module';
|
|
2
|
+
import type { PlatformInfo } from './shader-assembly/platform-info';
|
|
3
|
+
import { ShaderModuleInstance } from './shader-module/shader-module-instance';
|
|
4
|
+
import { AssembleShaderProps } from './shader-assembly/select-shaders';
|
|
5
|
+
/**
|
|
6
|
+
* A stateful version of `assembleShaders` that can be used to assemble shaders.
|
|
7
|
+
* Supports setting of default modules and hooks.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ShaderAssembler {
|
|
10
|
+
/** Default ShaderAssembler instance */
|
|
11
|
+
static defaultShaderAssembler: ShaderAssembler;
|
|
12
|
+
/** Hook functions */
|
|
13
|
+
private readonly _hookFunctions;
|
|
14
|
+
/** Shader modules */
|
|
15
|
+
private _defaultModules;
|
|
16
|
+
/**
|
|
17
|
+
* A default shader assembler instance - the natural place to register default modules and hooks
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
static getDefaultShaderAssembler(): ShaderAssembler;
|
|
21
|
+
/**
|
|
22
|
+
* Add a default module that does not have to be provided with every call to assembleShaders()
|
|
23
|
+
*/
|
|
24
|
+
addDefaultModule(module: ShaderModule): void;
|
|
25
|
+
/**
|
|
26
|
+
* Remove a default module
|
|
27
|
+
*/
|
|
28
|
+
removeDefaultModule(module: ShaderModule): void;
|
|
29
|
+
/**
|
|
30
|
+
* Register a shader hook
|
|
31
|
+
* @param hook
|
|
32
|
+
* @param opts
|
|
33
|
+
*/
|
|
34
|
+
addShaderHook(hook: string, opts?: any): void;
|
|
35
|
+
/**
|
|
36
|
+
* Assemble a pair of shaders into a single shader program
|
|
37
|
+
* @param platformInfo
|
|
38
|
+
* @param props
|
|
39
|
+
* @returns
|
|
40
|
+
*/
|
|
41
|
+
assembleShaders(platformInfo: PlatformInfo, props: AssembleShaderProps): {
|
|
42
|
+
vs: string;
|
|
43
|
+
fs: string;
|
|
44
|
+
getUniforms: import("./shader-assembly/assemble-shaders").GetUniformsFunc;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Dedupe and combine with default modules
|
|
48
|
+
*/
|
|
49
|
+
_getModuleList(appModules?: (ShaderModule | ShaderModuleInstance)[]): (ShaderModule | ShaderModuleInstance)[];
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=shader-assembler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader-assembler.d.ts","sourceRoot":"","sources":["../../src/lib/shader-assembler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAE5E,OAAO,EAAgB,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AAEpF;;;GAGG;AACH,qBAAa,eAAe;IAC1B,uCAAuC;IACvC,MAAM,CAAC,sBAAsB,EAAE,eAAe,CAAC;IAC/C,qBAAqB;IACrB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAa;IAC5C,qBAAqB;IACrB,OAAO,CAAC,eAAe,CAAsB;IAE7C;;;OAGG;IACH,MAAM,CAAC,yBAAyB,IAAI,eAAe;IAKnD;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAU5C;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAK/C;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAO7C;;;;;OAKG;IACH,eAAe,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB;;;;;IAQtE;;OAEG;IACH,cAAc,CAAC,UAAU,GAAE,CAAC,YAAY,GAAG,oBAAoB,CAAC,EAAO,GAAG,CAAC,YAAY,GAAG,oBAAoB,CAAC,EAAE;CAyBlH"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { assembleShaders } from "./shader-assembly/assemble-shaders.js";
|
|
3
|
+
import { selectShaders } from "./shader-assembly/select-shaders.js";
|
|
4
|
+
export class ShaderAssembler {
|
|
5
|
+
constructor() {
|
|
6
|
+
_defineProperty(this, "_hookFunctions", []);
|
|
7
|
+
_defineProperty(this, "_defaultModules", []);
|
|
8
|
+
}
|
|
9
|
+
static getDefaultShaderAssembler() {
|
|
10
|
+
ShaderAssembler.defaultShaderAssembler = ShaderAssembler.defaultShaderAssembler || new ShaderAssembler();
|
|
11
|
+
return ShaderAssembler.defaultShaderAssembler;
|
|
12
|
+
}
|
|
13
|
+
addDefaultModule(module) {
|
|
14
|
+
if (!this._defaultModules.find(m => m.name === (typeof module === 'string' ? module : module.name))) {
|
|
15
|
+
this._defaultModules.push(module);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
removeDefaultModule(module) {
|
|
19
|
+
const moduleName = typeof module === 'string' ? module : module.name;
|
|
20
|
+
this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);
|
|
21
|
+
}
|
|
22
|
+
addShaderHook(hook, opts) {
|
|
23
|
+
if (opts) {
|
|
24
|
+
hook = Object.assign(opts, {
|
|
25
|
+
hook
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
this._hookFunctions.push(hook);
|
|
29
|
+
}
|
|
30
|
+
assembleShaders(platformInfo, props) {
|
|
31
|
+
const modules = this._getModuleList(props.modules);
|
|
32
|
+
const hookFunctions = this._hookFunctions;
|
|
33
|
+
const options = selectShaders(platformInfo, props);
|
|
34
|
+
const assembled = assembleShaders(platformInfo, {
|
|
35
|
+
...options,
|
|
36
|
+
modules,
|
|
37
|
+
hookFunctions
|
|
38
|
+
});
|
|
39
|
+
return assembled;
|
|
40
|
+
}
|
|
41
|
+
_getModuleList() {
|
|
42
|
+
let appModules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
43
|
+
const modules = new Array(this._defaultModules.length + appModules.length);
|
|
44
|
+
const seen = {};
|
|
45
|
+
let count = 0;
|
|
46
|
+
for (let i = 0, len = this._defaultModules.length; i < len; ++i) {
|
|
47
|
+
const module = this._defaultModules[i];
|
|
48
|
+
const name = module.name;
|
|
49
|
+
modules[count++] = module;
|
|
50
|
+
seen[name] = true;
|
|
51
|
+
}
|
|
52
|
+
for (let i = 0, len = appModules.length; i < len; ++i) {
|
|
53
|
+
const module = appModules[i];
|
|
54
|
+
const name = module.name;
|
|
55
|
+
if (!seen[name]) {
|
|
56
|
+
modules[count++] = module;
|
|
57
|
+
seen[name] = true;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
modules.length = count;
|
|
61
|
+
return modules;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
_defineProperty(ShaderAssembler, "defaultShaderAssembler", void 0);
|
|
65
|
+
//# sourceMappingURL=shader-assembler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader-assembler.js","names":["assembleShaders","selectShaders","ShaderAssembler","constructor","_defineProperty","getDefaultShaderAssembler","defaultShaderAssembler","addDefaultModule","module","_defaultModules","find","m","name","push","removeDefaultModule","moduleName","filter","addShaderHook","hook","opts","Object","assign","_hookFunctions","platformInfo","props","modules","_getModuleList","hookFunctions","options","assembled","appModules","arguments","length","undefined","Array","seen","count","i","len"],"sources":["../../src/lib/shader-assembler.ts"],"sourcesContent":["// luma.gl, MIT license\n\nimport type {ShaderModule} from './shader-module/shader-module';\nimport type {PlatformInfo} from './shader-assembly/platform-info';\nimport {ShaderModuleInstance} from './shader-module/shader-module-instance';\nimport {assembleShaders} from './shader-assembly/assemble-shaders';\nimport {selectShaders, AssembleShaderProps} from './shader-assembly/select-shaders';\n\n/**\n * A stateful version of `assembleShaders` that can be used to assemble shaders.\n * Supports setting of default modules and hooks.\n */\nexport class ShaderAssembler {\n /** Default ShaderAssembler instance */\n static defaultShaderAssembler: ShaderAssembler;\n /** Hook functions */\n private readonly _hookFunctions: any[] = [];\n /** Shader modules */\n private _defaultModules: ShaderModule[] = [];\n\n /**\n * A default shader assembler instance - the natural place to register default modules and hooks\n * @returns \n */\n static getDefaultShaderAssembler(): ShaderAssembler {\n ShaderAssembler.defaultShaderAssembler = ShaderAssembler.defaultShaderAssembler || new ShaderAssembler();\n return ShaderAssembler.defaultShaderAssembler;\n }\n\n /** \n * Add a default module that does not have to be provided with every call to assembleShaders() \n */\n addDefaultModule(module: ShaderModule): void {\n if (\n !this._defaultModules.find(\n m => m.name === (typeof module === 'string' ? module : module.name)\n )\n ) {\n this._defaultModules.push(module);\n }\n }\n\n /** \n * Remove a default module\n */\n removeDefaultModule(module: ShaderModule): void {\n const moduleName = typeof module === 'string' ? module : module.name;\n this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);\n }\n\n /**\n * Register a shader hook\n * @param hook \n * @param opts \n */\n addShaderHook(hook: string, opts?: any): void {\n if (opts) {\n hook = Object.assign(opts, {hook});\n }\n this._hookFunctions.push(hook);\n }\n\n /**\n * Assemble a pair of shaders into a single shader program\n * @param platformInfo \n * @param props \n * @returns \n */\n assembleShaders(platformInfo: PlatformInfo, props: AssembleShaderProps) {\n const modules = this._getModuleList(props.modules); // Combine with default modules\n const hookFunctions = this._hookFunctions; // TODO - combine with default hook functions\n const options = selectShaders(platformInfo, props);\n const assembled = assembleShaders(platformInfo, {...options, modules, hookFunctions});\n return assembled;\n }\n\n /** \n * Dedupe and combine with default modules \n */\n _getModuleList(appModules: (ShaderModule | ShaderModuleInstance)[] = []): (ShaderModule | ShaderModuleInstance)[] {\n const modules = new Array(this._defaultModules.length + appModules.length);\n const seen: Record<string, boolean> = {};\n let count = 0;\n\n for (let i = 0, len = this._defaultModules.length; i < len; ++i) {\n const module = this._defaultModules[i];\n const name = module.name;\n modules[count++] = module;\n seen[name] = true;\n }\n\n for (let i = 0, len = appModules.length; i < len; ++i) {\n const module = appModules[i];\n const name = module.name;\n if (!seen[name]) {\n modules[count++] = module;\n seen[name] = true;\n }\n }\n\n modules.length = count;\n\n return modules;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { PlatformInfo } from './platform-info';
|
|
2
|
+
import { ShaderModuleInstance } from '../shader-module/shader-module-instance';
|
|
3
|
+
import { ShaderModule } from '../shader-module/shader-module';
|
|
4
|
+
/** Define map */
|
|
5
|
+
type Defines = Record<string, string | number | boolean>;
|
|
6
|
+
export type HookFunction = {
|
|
7
|
+
hook: string;
|
|
8
|
+
header: string;
|
|
9
|
+
footer: string;
|
|
10
|
+
signature?: string;
|
|
11
|
+
};
|
|
12
|
+
export type AssembleShaderOptions = {
|
|
13
|
+
/** Inject shader id #defines */
|
|
14
|
+
id?: string;
|
|
15
|
+
/** Vertex shader */
|
|
16
|
+
vs: string;
|
|
17
|
+
/** Fragment shader */
|
|
18
|
+
fs: string;
|
|
19
|
+
/** Shader type @deprecated do we still need this */
|
|
20
|
+
/** Modules to be injected */
|
|
21
|
+
modules?: (ShaderModule | ShaderModuleInstance)[];
|
|
22
|
+
/** Defines to be injected */
|
|
23
|
+
defines?: Defines;
|
|
24
|
+
/** Hook functions */
|
|
25
|
+
hookFunctions?: (HookFunction | string | {
|
|
26
|
+
hook: string;
|
|
27
|
+
header: string;
|
|
28
|
+
footer: string;
|
|
29
|
+
})[];
|
|
30
|
+
/** Code injections */
|
|
31
|
+
inject?: object;
|
|
32
|
+
/** Whether to transpile code */
|
|
33
|
+
transpileToGLSL100?: boolean;
|
|
34
|
+
/** Whether to inject prologue */
|
|
35
|
+
prologue?: boolean;
|
|
36
|
+
/** logger object */
|
|
37
|
+
log?: any;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* getUniforms function returned from the shader module system
|
|
41
|
+
*/
|
|
42
|
+
export type GetUniformsFunc = (opts: Record<string, any>) => Record<string, any>;
|
|
43
|
+
/**
|
|
44
|
+
* Inject a list of shader modules into shader sources
|
|
45
|
+
*/
|
|
46
|
+
export declare function assembleShaders(platformInfo: PlatformInfo, options: AssembleShaderOptions): {
|
|
47
|
+
vs: string;
|
|
48
|
+
fs: string;
|
|
49
|
+
getUniforms: GetUniformsFunc;
|
|
50
|
+
};
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=assemble-shaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assemble-shaders.d.ts","sourceRoot":"","sources":["../../../src/lib/shader-assembly/assemble-shaders.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAK7C,OAAO,EAAC,oBAAoB,EAAC,MAAM,yCAAyC,CAAC;AAE7E,OAAO,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAmB5D,iBAAiB;AACjB,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAEzD,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC;AAE/F,MAAM,MAAM,qBAAqB,GAAG;IAClC,gCAAgC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oBAAoB;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IAEpD,6BAA6B;IAC7B,OAAO,CAAC,EAAE,CAAC,YAAY,GAAG,oBAAoB,CAAC,EAAE,CAAC;IAClD,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qBAAqB;IACrB,aAAa,CAAC,EAAE,CAAC,YAAY,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC,EAAE,CAAC;IAC9F,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oBAAoB;IACpB,GAAG,CAAC,EAAE,GAAG,CAAC;CACX,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEjF;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,qBAAqB,GAC7B;IACD,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,eAAe,CAAC;CAC9B,CAQA"}
|