@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.
Files changed (53) hide show
  1. package/dist/dist.dev.js +125 -4
  2. package/dist/index.cjs +118 -4
  3. package/dist/index.d.ts +7 -5
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +5 -4
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/shader-assembler.d.ts +51 -0
  8. package/dist/lib/shader-assembler.d.ts.map +1 -0
  9. package/dist/lib/shader-assembler.js +65 -0
  10. package/dist/lib/shader-assembler.js.map +1 -0
  11. package/dist/lib/shader-assembly/assemble-shaders.d.ts +52 -0
  12. package/dist/lib/shader-assembly/assemble-shaders.d.ts.map +1 -0
  13. package/dist/lib/shader-assembly/assemble-shaders.js.map +1 -0
  14. package/dist/lib/shader-assembly/inject-shader.d.ts.map +1 -0
  15. package/dist/lib/shader-assembly/inject-shader.js.map +1 -0
  16. package/dist/lib/{shader-assembler → shader-assembly}/platform-defines.d.ts +1 -4
  17. package/dist/lib/shader-assembly/platform-defines.d.ts.map +1 -0
  18. package/dist/lib/shader-assembly/platform-defines.js.map +1 -0
  19. package/dist/lib/shader-assembly/platform-info.d.ts +16 -0
  20. package/dist/lib/shader-assembly/platform-info.d.ts.map +1 -0
  21. package/dist/lib/shader-assembly/platform-info.js +2 -0
  22. package/dist/lib/shader-assembly/platform-info.js.map +1 -0
  23. package/dist/lib/shader-assembly/resolve-modules.d.ts.map +1 -0
  24. package/dist/lib/shader-assembly/resolve-modules.js.map +1 -0
  25. package/dist/lib/shader-assembly/select-shaders.d.ts +23 -0
  26. package/dist/lib/shader-assembly/select-shaders.d.ts.map +1 -0
  27. package/dist/lib/shader-assembly/select-shaders.js +33 -0
  28. package/dist/lib/shader-assembly/select-shaders.js.map +1 -0
  29. package/dist.min.js +82 -82
  30. package/package.json +3 -3
  31. package/src/index.ts +9 -7
  32. package/src/lib/shader-assembler.ts +105 -0
  33. package/src/lib/{shader-assembler → shader-assembly}/assemble-shaders.ts +22 -4
  34. package/src/lib/{shader-assembler → shader-assembly}/platform-defines.ts +1 -5
  35. package/src/lib/shader-assembly/platform-info.ts +17 -0
  36. package/src/lib/shader-assembly/select-shaders.ts +59 -0
  37. package/dist/lib/shader-assembler/assemble-shaders.d.ts +0 -36
  38. package/dist/lib/shader-assembler/assemble-shaders.d.ts.map +0 -1
  39. package/dist/lib/shader-assembler/assemble-shaders.js.map +0 -1
  40. package/dist/lib/shader-assembler/inject-shader.d.ts.map +0 -1
  41. package/dist/lib/shader-assembler/inject-shader.js.map +0 -1
  42. package/dist/lib/shader-assembler/platform-defines.d.ts.map +0 -1
  43. package/dist/lib/shader-assembler/platform-defines.js.map +0 -1
  44. package/dist/lib/shader-assembler/resolve-modules.d.ts.map +0 -1
  45. package/dist/lib/shader-assembler/resolve-modules.js.map +0 -1
  46. /package/dist/lib/{shader-assembler → shader-assembly}/assemble-shaders.js +0 -0
  47. /package/dist/lib/{shader-assembler → shader-assembly}/inject-shader.d.ts +0 -0
  48. /package/dist/lib/{shader-assembler → shader-assembly}/inject-shader.js +0 -0
  49. /package/dist/lib/{shader-assembler → shader-assembly}/platform-defines.js +0 -0
  50. /package/dist/lib/{shader-assembler → shader-assembly}/resolve-modules.d.ts +0 -0
  51. /package/dist/lib/{shader-assembler → shader-assembly}/resolve-modules.js +0 -0
  52. /package/src/lib/{shader-assembler → shader-assembly}/inject-shader.ts +0 -0
  53. /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-assembler/resolve-modules.ts
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-assembler/platform-defines.ts
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-assembler/inject-shader.ts
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-assembler/assemble-shaders.ts
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-assembler/resolve-modules.ts
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-assembler/platform-defines.ts
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-assembler/inject-shader.ts
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-assembler/assemble-shaders.ts
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 { HookFunction } from './lib/shader-assembler/assemble-shaders';
4
- export { assembleShaders } from './lib/shader-assembler/assemble-shaders';
5
- export { combineInjects } from './lib/shader-assembler/inject-shader';
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-assembler/resolve-modules';
50
- export { getDependencyGraph as _getDependencyGraph } from './lib/shader-assembler/resolve-modules';
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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 { assembleShaders } from "./lib/shader-assembler/assemble-shaders.js";
2
- export { combineInjects } from "./lib/shader-assembler/inject-shader.js";
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-assembler/resolve-modules.js";
41
- export { getDependencyGraph as _getDependencyGraph } from "./lib/shader-assembler/resolve-modules.js";
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// DOCUMENTED APIS\nexport type {ShaderModule} from './lib/shader-module/shader-module';\nexport type {ShaderPass} from './lib/shader-module/shader-pass';\n\nexport type {HookFunction} from './lib/shader-assembler/assemble-shaders';\nexport {assembleShaders} from './lib/shader-assembler/assemble-shaders';\n\n// HELPERS\nexport {combineInjects} from './lib/shader-assembler/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-assembler/resolve-modules';\nexport {getDependencyGraph as _getDependencyGraph} from './lib/shader-assembler/resolve-modules';"],"mappings":"SAOQA,eAAe;AAAA,SAGfC,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"}
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"}