@luma.gl/shadertools 9.0.0-alpha.4 → 9.0.0-alpha.6

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 (66) hide show
  1. package/dist/index.d.ts +2 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/filters/prop-types.d.ts +29 -6
  5. package/dist/lib/filters/prop-types.d.ts.map +1 -1
  6. package/dist/lib/filters/prop-types.js +48 -24
  7. package/dist/lib/filters/prop-types.js.map +1 -1
  8. package/dist/lib/glsl-utils/get-shader-info.js +1 -1
  9. package/dist/lib/glsl-utils/get-shader-info.js.map +1 -1
  10. package/dist/lib/glsl-utils/shader-utils.d.ts +1 -1
  11. package/dist/lib/glsl-utils/shader-utils.d.ts.map +1 -1
  12. package/dist/lib/glsl-utils/shader-utils.js +4 -0
  13. package/dist/lib/glsl-utils/shader-utils.js.map +1 -1
  14. package/dist/lib/shader-assembler/assemble-shaders.d.ts +7 -5
  15. package/dist/lib/shader-assembler/assemble-shaders.d.ts.map +1 -1
  16. package/dist/lib/shader-assembler/assemble-shaders.js +15 -12
  17. package/dist/lib/shader-assembler/assemble-shaders.js.map +1 -1
  18. package/dist/lib/shader-assembler/inject-shader.d.ts +3 -2
  19. package/dist/lib/shader-assembler/inject-shader.d.ts.map +1 -1
  20. package/dist/lib/shader-assembler/inject-shader.js.map +1 -1
  21. package/dist/lib/shader-assembler/resolve-modules.d.ts +1 -1
  22. package/dist/lib/shader-assembler/resolve-modules.d.ts.map +1 -1
  23. package/dist/lib/shader-assembler/resolve-modules.js.map +1 -1
  24. package/dist/lib/shader-module/shader-module-instance.d.ts +18 -9
  25. package/dist/lib/shader-module/shader-module-instance.d.ts.map +1 -1
  26. package/dist/lib/shader-module/shader-module-instance.js +17 -17
  27. package/dist/lib/shader-module/shader-module-instance.js.map +1 -1
  28. package/dist/lib/shader-module/shader-module.d.ts +32 -0
  29. package/dist/lib/shader-module/shader-module.d.ts.map +1 -0
  30. package/dist/lib/shader-module/shader-module.js +2 -0
  31. package/dist/lib/shader-module/shader-module.js.map +1 -0
  32. package/dist/lib/shader-module/shader-pass.d.ts +8 -0
  33. package/dist/lib/shader-module/shader-pass.d.ts.map +1 -0
  34. package/dist/lib/shader-module/shader-pass.js +2 -0
  35. package/dist/lib/shader-module/shader-pass.js.map +1 -0
  36. package/dist/lib/transpiler/transpile-shader.d.ts +1 -1
  37. package/dist/lib/transpiler/transpile-shader.d.ts.map +1 -1
  38. package/dist/lib/transpiler/transpile-shader.js.map +1 -1
  39. package/dist/modules/image-adjust-filters/brightnesscontrast.d.ts.map +1 -1
  40. package/dist/modules/image-adjust-filters/brightnesscontrast.js +1 -1
  41. package/dist/modules/image-adjust-filters/brightnesscontrast.js.map +1 -1
  42. package/dist/modules/lights/lights.js +4 -2
  43. package/dist/modules/lights/lights.js.map +1 -1
  44. package/dist/modules/picking/picking.d.ts +1 -1
  45. package/dist/modules/picking/picking.d.ts.map +1 -1
  46. package/dist/modules/picking/picking.js.map +1 -1
  47. package/dist/types.d.ts +0 -24
  48. package/dist/types.d.ts.map +1 -1
  49. package/package.json +3 -3
  50. package/src/index.ts +3 -1
  51. package/src/lib/filters/prop-types.ts +90 -28
  52. package/src/lib/glsl-utils/get-shader-info.ts +1 -1
  53. package/src/lib/glsl-utils/shader-utils.ts +4 -1
  54. package/src/lib/shader-assembler/assemble-shaders.ts +30 -22
  55. package/src/lib/shader-assembler/inject-shader.ts +4 -3
  56. package/src/lib/shader-assembler/resolve-modules.ts +1 -1
  57. package/src/lib/shader-module/shader-module-instance.ts +39 -29
  58. package/src/lib/shader-module/shader-module.ts +31 -0
  59. package/src/lib/shader-module/shader-pass.ts +8 -0
  60. package/src/lib/transpiler/transpile-shader.ts +1 -1
  61. package/src/modules/image-adjust-filters/brightnesscontrast.ts +14 -13
  62. package/src/modules/lights/lights.ts +2 -2
  63. package/src/modules/picking/picking.ts +1 -1
  64. package/src/types.ts +0 -43
  65. package/dist/lib/glsl-utils/shader-utils.ts.disabled +0 -149
  66. package/src/lib/glsl-utils/shader-utils.ts.disabled +0 -149
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- export type { ShaderModule, ShaderPass } from './types';
1
+ export type { ShaderModule } from './lib/shader-module/shader-module';
2
+ export type { ShaderPass } from './lib/shader-module/shader-pass';
2
3
  export { assembleShaders } from './lib/shader-assembler/assemble-shaders';
3
4
  export { combineInjects } from './lib/shader-assembler/inject-shader';
4
5
  export { normalizeShaderModule } from './lib/shader-module/normalize-shader-module';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAC,YAAY,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,yCAAyC,CAAC;AAGxE,OAAO,EAAC,cAAc,EAAC,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,6CAA6C,CAAC;AAGlF,YAAY,EAAC,eAAe,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,iBAAiB,EAAC,MAAM,wCAAwC,CAAC;AAGzE,OAAO,EAAC,aAAa,EAAC,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACd,MAAM,+BAA+B,CAAC;AAKvC,OAAO,EAAC,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAG9C,OAAO,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAC,IAAI,EAAE,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAC,GAAG,EAAC,MAAM,mBAAmB,CAAC;AAGtC,OAAO,EAAC,SAAS,EAAC,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAAC,YAAY,EAAC,MAAM,2CAA2C,CAAC;AACvE,OAAO,EAAC,QAAQ,EAAC,MAAM,uCAAuC,CAAC;AAG/D,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,mDAAmD,CAAC;AAC/F,YAAY,EAAC,uBAAuB,EAAC,CAAC;AACtC,OAAO,EAAC,kBAAkB,EAAC,MAAM,mDAAmD,CAAC;AACrF,OAAO,EAAC,OAAO,EAAC,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAC,aAAa,EAAC,MAAM,8CAA8C,CAAC;AAC3E,OAAO,EAAC,KAAK,EAAC,MAAM,sCAAsC,CAAC;AAC3D,OAAO,EAAC,KAAK,EAAC,MAAM,sCAAsC,CAAC;AAC3D,OAAO,EAAC,QAAQ,EAAC,MAAM,yCAAyC,CAAC;AACjE,OAAO,EAAC,QAAQ,EAAC,MAAM,yCAAyC,CAAC;AAGjE,OAAO,EAAC,aAAa,EAAC,MAAM,2CAA2C,CAAC;AACxE,OAAO,EAAC,SAAS,EAAC,MAAM,uCAAuC,CAAC;AAChE,OAAO,EAAC,QAAQ,EAAC,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAC,iBAAiB,EAAC,MAAM,+CAA+C,CAAC;AAChF,OAAO,EAAC,GAAG,EAAC,MAAM,iCAAiC,CAAC;AACpD,OAAO,EAAC,OAAO,EAAC,MAAM,qCAAqC,CAAC;AAG5D,OAAO,EAAC,UAAU,EAAC,MAAM,yCAAyC,CAAC;AACnE,OAAO,EAAC,KAAK,EAAC,MAAM,oCAAoC,CAAC;AAGzD,OAAO,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAGzC,OAAO,EAAC,IAAI,IAAI,KAAK,EAAC,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAC,SAAS,IAAI,UAAU,EAAC,MAAM,+BAA+B,CAAC;AAEtE,oBAAY,eAAe,GAAG;IAC5B,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;CAC9C,CAAA"}
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;AAEhE,OAAO,EAAC,eAAe,EAAC,MAAM,yCAAyC,CAAC;AAGxE,OAAO,EAAC,cAAc,EAAC,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,6CAA6C,CAAC;AAGlF,YAAY,EAAC,eAAe,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,iBAAiB,EAAC,MAAM,wCAAwC,CAAC;AAGzE,OAAO,EAAC,aAAa,EAAC,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACd,MAAM,+BAA+B,CAAC;AAKvC,OAAO,EAAC,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAG9C,OAAO,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAC,IAAI,EAAE,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAC,GAAG,EAAC,MAAM,mBAAmB,CAAC;AAGtC,OAAO,EAAC,SAAS,EAAC,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAAC,YAAY,EAAC,MAAM,2CAA2C,CAAC;AACvE,OAAO,EAAC,QAAQ,EAAC,MAAM,uCAAuC,CAAC;AAG/D,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,mDAAmD,CAAC;AAC/F,YAAY,EAAC,uBAAuB,EAAC,CAAC;AACtC,OAAO,EAAC,kBAAkB,EAAC,MAAM,mDAAmD,CAAC;AACrF,OAAO,EAAC,OAAO,EAAC,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAC,aAAa,EAAC,MAAM,8CAA8C,CAAC;AAC3E,OAAO,EAAC,KAAK,EAAC,MAAM,sCAAsC,CAAC;AAC3D,OAAO,EAAC,KAAK,EAAC,MAAM,sCAAsC,CAAC;AAC3D,OAAO,EAAC,QAAQ,EAAC,MAAM,yCAAyC,CAAC;AACjE,OAAO,EAAC,QAAQ,EAAC,MAAM,yCAAyC,CAAC;AAGjE,OAAO,EAAC,aAAa,EAAC,MAAM,2CAA2C,CAAC;AACxE,OAAO,EAAC,SAAS,EAAC,MAAM,uCAAuC,CAAC;AAChE,OAAO,EAAC,QAAQ,EAAC,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAC,iBAAiB,EAAC,MAAM,+CAA+C,CAAC;AAChF,OAAO,EAAC,GAAG,EAAC,MAAM,iCAAiC,CAAC;AACpD,OAAO,EAAC,OAAO,EAAC,MAAM,qCAAqC,CAAC;AAG5D,OAAO,EAAC,UAAU,EAAC,MAAM,yCAAyC,CAAC;AACnE,OAAO,EAAC,KAAK,EAAC,MAAM,oCAAoC,CAAC;AAGzD,OAAO,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAGzC,OAAO,EAAC,IAAI,IAAI,KAAK,EAAC,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAC,SAAS,IAAI,UAAU,EAAC,MAAM,+BAA+B,CAAC;AAEtE,oBAAY,eAAe,GAAG;IAC5B,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;CAC9C,CAAA"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["assembleShaders","combineInjects","normalizeShaderModule","formatCompilerLog","getShaderInfo","getQualifierDetails","getPassthroughFS","typeToChannelSuffix","typeToChannelCount","convertToVec4","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"],"mappings":"AAIA,SAAQA,eAAR,QAA8B,yCAA9B;AAGA,SAAQC,cAAR,QAA6B,sCAA7B;AACA,SAAQC,qBAAR,QAAoC,6CAApC;AAIA,SAAQC,iBAAR,QAAgC,wCAAhC;AAGA,SAAQC,aAAR,QAA4B,kCAA5B;AACA,SACEC,mBADF,EAEEC,gBAFF,EAGEC,mBAHF,EAIEC,kBAJF,EAKEC,aALF,QAMO,+BANP;AAWA,SAAQC,MAAR,QAAqB,wBAArB;AAGA,SAAQC,IAAR,QAAmB,qBAAnB;AACA,SAAQC,IAAR,EAAcC,cAAd,QAAmC,qBAAnC;AAGA,SAAQC,OAAR,QAAsB,2BAAtB;AACA,SAAQC,MAAR,QAAqB,yBAArB;AACA,SAAQC,QAAR,QAAuB,6BAAvB;AACA,SAAQC,OAAR,QAAsB,2BAAtB;AACA,SAAQC,eAAR,EAAyBC,aAAzB,QAA6C,yCAA7C;AACA,SAAQC,GAAR,QAAkB,mBAAlB;AAGA,SAAQC,SAAR,QAAwB,wCAAxB;AACA,SAAQC,YAAR,QAA2B,2CAA3B;AACA,SAAQC,QAAR,QAAuB,uCAAvB;AAKA,SAAQC,kBAAR,QAAiC,mDAAjC;AACA,SAAQC,OAAR,QAAsB,wCAAtB;AACA,SAAQC,aAAR,QAA4B,8CAA5B;AACA,SAAQC,KAAR,QAAoB,sCAApB;AACA,SAAQC,KAAR,QAAoB,sCAApB;AACA,SAAQC,QAAR,QAAuB,yCAAvB;AACA,SAAQC,QAAR,QAAuB,yCAAvB;AAGA,SAAQC,aAAR,QAA4B,2CAA5B;AACA,SAAQC,SAAR,QAAwB,uCAAxB;AACA,SAAQC,QAAR,QAAuB,sCAAvB;AACA,SAAQC,iBAAR,QAAgC,+CAAhC;AACA,SAAQC,GAAR,QAAkB,iCAAlB;AACA,SAAQC,OAAR,QAAsB,qCAAtB;AAGA,SAAQC,UAAR,QAAyB,yCAAzB;AACA,SAAQC,KAAR,QAAoB,oCAApB;AAGA,SAAQC,IAAR,QAAmB,qBAAnB;AAGA,SAAQC,IAAI,IAAIC,KAAhB,QAA4B,mCAA5B;AACA,SAAQC,SAAS,IAAIC,UAArB,QAAsC,+BAAtC","sourcesContent":["// shadertools exports\n\n// DOCUMENTED APIS\nexport type {ShaderModule, ShaderPass} from './types';\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// COMPILER LOG\nexport type {CompilerMessage} from './lib/compiler-log/compiler-message';\nexport {formatCompilerLog} from './lib/compiler-log/format-compiler-log';\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 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\nimport type {BrightnessContrastProps} from './modules/image-adjust-filters/brightnesscontrast';\nexport type {BrightnessContrastProps};\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\nexport type ShaderPassProps = {\n brightnessContrast?: BrightnessContrastProps;\n}"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["assembleShaders","combineInjects","normalizeShaderModule","formatCompilerLog","getShaderInfo","getQualifierDetails","getPassthroughFS","typeToChannelSuffix","typeToChannelCount","convertToVec4","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"],"mappings":"AAMA,SAAQA,eAAR,QAA8B,yCAA9B;AAGA,SAAQC,cAAR,QAA6B,sCAA7B;AACA,SAAQC,qBAAR,QAAoC,6CAApC;AAIA,SAAQC,iBAAR,QAAgC,wCAAhC;AAGA,SAAQC,aAAR,QAA4B,kCAA5B;AACA,SACEC,mBADF,EAEEC,gBAFF,EAGEC,mBAHF,EAIEC,kBAJF,EAKEC,aALF,QAMO,+BANP;AAWA,SAAQC,MAAR,QAAqB,wBAArB;AAGA,SAAQC,IAAR,QAAmB,qBAAnB;AACA,SAAQC,IAAR,EAAcC,cAAd,QAAmC,qBAAnC;AAGA,SAAQC,OAAR,QAAsB,2BAAtB;AACA,SAAQC,MAAR,QAAqB,yBAArB;AACA,SAAQC,QAAR,QAAuB,6BAAvB;AACA,SAAQC,OAAR,QAAsB,2BAAtB;AACA,SAAQC,eAAR,EAAyBC,aAAzB,QAA6C,yCAA7C;AACA,SAAQC,GAAR,QAAkB,mBAAlB;AAGA,SAAQC,SAAR,QAAwB,wCAAxB;AACA,SAAQC,YAAR,QAA2B,2CAA3B;AACA,SAAQC,QAAR,QAAuB,uCAAvB;AAKA,SAAQC,kBAAR,QAAiC,mDAAjC;AACA,SAAQC,OAAR,QAAsB,wCAAtB;AACA,SAAQC,aAAR,QAA4B,8CAA5B;AACA,SAAQC,KAAR,QAAoB,sCAApB;AACA,SAAQC,KAAR,QAAoB,sCAApB;AACA,SAAQC,QAAR,QAAuB,yCAAvB;AACA,SAAQC,QAAR,QAAuB,yCAAvB;AAGA,SAAQC,aAAR,QAA4B,2CAA5B;AACA,SAAQC,SAAR,QAAwB,uCAAxB;AACA,SAAQC,QAAR,QAAuB,sCAAvB;AACA,SAAQC,iBAAR,QAAgC,+CAAhC;AACA,SAAQC,GAAR,QAAkB,iCAAlB;AACA,SAAQC,OAAR,QAAsB,qCAAtB;AAGA,SAAQC,UAAR,QAAyB,yCAAzB;AACA,SAAQC,KAAR,QAAoB,oCAApB;AAGA,SAAQC,IAAR,QAAmB,qBAAnB;AAGA,SAAQC,IAAI,IAAIC,KAAhB,QAA4B,mCAA5B;AACA,SAAQC,SAAS,IAAIC,UAArB,QAAsC,+BAAtC","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 {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// COMPILER LOG\nexport type {CompilerMessage} from './lib/compiler-log/compiler-message';\nexport {formatCompilerLog} from './lib/compiler-log/format-compiler-log';\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 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\nimport type {BrightnessContrastProps} from './modules/image-adjust-filters/brightnesscontrast';\nexport type {BrightnessContrastProps};\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\nexport type ShaderPassProps = {\n brightnessContrast?: BrightnessContrastProps;\n}"],"file":"index.js"}
@@ -1,16 +1,39 @@
1
- export declare type PropDef = {
1
+ /**
2
+ * For use by shader module and shader pass writers to describe the types of the
3
+ * properties they expose (properties ultimately map to uniforms).
4
+ */
5
+ export declare type PropType = {
2
6
  type?: string;
3
7
  max?: number;
4
8
  min?: number;
5
- value?: any;
9
+ value?: unknown;
6
10
  } | number;
7
- export declare type PropType = {
11
+ /**
12
+ * Internal property validators generated by processing the prop types ,
13
+ * The `validate()` method can be used to validate the type of properties passed in to
14
+ * shader module or shader pass
15
+ */
16
+ export declare type PropValidator = {
8
17
  type: string;
9
- value: any;
18
+ value?: unknown;
10
19
  max?: number;
11
20
  min?: number;
12
21
  private?: boolean;
13
- validate?(value: any, propDef: PropType): boolean;
22
+ validate?(value: unknown, propDef: PropValidator): boolean;
14
23
  };
15
- export declare function parsePropTypes(propDefs: Record<string, PropDef>): Record<string, PropType>;
24
+ /**
25
+ * Parse a list of property types into property definitions that can be used to validate
26
+ * values passed in by applications.
27
+ * @param propTypes
28
+ * @returns
29
+ */
30
+ export declare function makePropValidators(propTypes: Record<string, PropType>): Record<string, PropValidator>;
31
+ /**
32
+ * Validate a map of user supplied properties against a map of validators
33
+ * Inject default values when user doesn't supply a property
34
+ * @param properties
35
+ * @param propValidators
36
+ * @returns
37
+ */
38
+ export declare function getValidatedProperties(properties: Record<string, unknown>, propValidators: Record<string, PropValidator>, errorMessage: string): Record<string, unknown>;
16
39
  //# sourceMappingURL=prop-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prop-types.d.ts","sourceRoot":"","sources":["../../../src/lib/filters/prop-types.ts"],"names":[],"mappings":"AAAA,oBAAY,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,GAAG,MAAM,CAAC;AAEX,oBAAY,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC;CACnD,CAAC;AAoBF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAM1F"}
1
+ {"version":3,"file":"prop-types.d.ts","sourceRoot":"","sources":["../../../src/lib/filters/prop-types.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,oBAAY,QAAQ,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,MAAM,CAAC;AAEX;;;;GAIG;AACH,oBAAY,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;CAC5D,CAAC;AAuBF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAMrG;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAC7C,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB"}
@@ -1,66 +1,90 @@
1
- const TYPE_DEFINITIONS = {
1
+ import { assert } from '../utils/assert';
2
+ const DEFAULT_PROP_VALIDATORS = {
2
3
  number: {
4
+ type: 'number',
5
+
3
6
  validate(value, propType) {
4
- return Number.isFinite(value) && typeof propType === 'object' && (!('max' in propType) || value <= propType.max) && (!('min' in propType) || value >= propType.min);
7
+ return Number.isFinite(value) && typeof propType === 'object' && (propType.max === undefined || value <= propType.max) && (propType.min === undefined || value >= propType.min);
5
8
  }
6
9
 
7
10
  },
8
11
  array: {
12
+ type: 'array',
13
+
9
14
  validate(value, propType) {
10
15
  return Array.isArray(value) || ArrayBuffer.isView(value);
11
16
  }
12
17
 
13
18
  }
14
19
  };
15
- export function parsePropTypes(propDefs) {
16
- const propTypes = {};
20
+ export function makePropValidators(propTypes) {
21
+ const propValidators = {};
22
+
23
+ for (const [name, propType] of Object.entries(propTypes)) {
24
+ propValidators[name] = makePropValidator(propType);
25
+ }
26
+
27
+ return propValidators;
28
+ }
29
+ export function getValidatedProperties(properties, propValidators, errorMessage) {
30
+ const validated = {};
31
+
32
+ for (const [key, propsValidator] of Object.entries(propValidators)) {
33
+ if (properties && key in properties && !propsValidator.private) {
34
+ if (propsValidator.validate) {
35
+ assert(propsValidator.validate(properties[key], propsValidator), "".concat(errorMessage, ": invalid ").concat(key));
36
+ }
17
37
 
18
- for (const [name, propDef] of Object.entries(propDefs)) {
19
- propTypes[name] = parsePropType(propDef);
38
+ validated[key] = properties[key];
39
+ } else {
40
+ validated[key] = propsValidator.value;
41
+ }
20
42
  }
21
43
 
22
- return propTypes;
44
+ return validated;
23
45
  }
24
46
 
25
- function parsePropType(propDef) {
26
- let type = getTypeOf(propDef);
47
+ function makePropValidator(propType) {
48
+ let type = getTypeOf(propType);
27
49
 
28
50
  if (type !== 'object') {
29
51
  return {
30
- type,
31
- value: propDef,
32
- ...TYPE_DEFINITIONS[type]
52
+ value: propType,
53
+ ...DEFAULT_PROP_VALIDATORS[type],
54
+ type
33
55
  };
34
56
  }
35
57
 
36
- if (typeof propDef === 'object') {
37
- if (!propDef) {
58
+ if (typeof propType === 'object') {
59
+ if (!propType) {
38
60
  return {
39
61
  type: 'object',
40
62
  value: null
41
63
  };
42
64
  }
43
65
 
44
- if ('type' in propDef) {
45
- return { ...propDef,
46
- ...TYPE_DEFINITIONS[propDef.type]
66
+ if (propType.type !== undefined) {
67
+ return { ...propType,
68
+ ...DEFAULT_PROP_VALIDATORS[propType.type],
69
+ type: propType.type
47
70
  };
48
71
  }
49
72
 
50
- if (!('value' in propDef)) {
73
+ if (propType.value === undefined) {
51
74
  return {
52
75
  type: 'object',
53
- value: propDef
76
+ value: propType
54
77
  };
55
78
  }
56
79
 
57
- type = getTypeOf(propDef.value);
58
- return {
59
- type,
60
- ...propDef,
61
- ...TYPE_DEFINITIONS[type]
80
+ type = getTypeOf(propType.value);
81
+ return { ...propType,
82
+ ...DEFAULT_PROP_VALIDATORS[type],
83
+ type
62
84
  };
63
85
  }
86
+
87
+ throw new Error('props');
64
88
  }
65
89
 
66
90
  function getTypeOf(value) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/filters/prop-types.ts"],"names":["TYPE_DEFINITIONS","number","validate","value","propType","Number","isFinite","max","min","array","Array","isArray","ArrayBuffer","isView","parsePropTypes","propDefs","propTypes","name","propDef","Object","entries","parsePropType","type","getTypeOf"],"mappings":"AAgBA,MAAMA,gBAAgB,GAAG;AACvBC,EAAAA,MAAM,EAAE;AACNC,IAAAA,QAAQ,CAACC,KAAD,EAAiBC,QAAjB,EAAoC;AAC1C,aACEC,MAAM,CAACC,QAAP,CAAgBH,KAAhB,KACA,OAAOC,QAAP,KAAoB,QADpB,KAEC,EAAE,SAASA,QAAX,KAAwBD,KAAK,IAAIC,QAAQ,CAACG,GAF3C,MAGC,EAAE,SAASH,QAAX,KAAwBD,KAAK,IAAIC,QAAQ,CAACI,GAH3C,CADF;AAMD;;AARK,GADe;AAWvBC,EAAAA,KAAK,EAAE;AACLP,IAAAA,QAAQ,CAACC,KAAD,EAAiBC,QAAjB,EAAoC;AAC1C,aAAOM,KAAK,CAACC,OAAN,CAAcR,KAAd,KAAwBS,WAAW,CAACC,MAAZ,CAAmBV,KAAnB,CAA/B;AACD;;AAHI;AAXgB,CAAzB;AAkBA,OAAO,SAASW,cAAT,CAAwBC,QAAxB,EAAqF;AAC1F,QAAMC,SAAmC,GAAG,EAA5C;;AACA,OAAK,MAAM,CAACC,IAAD,EAAOC,OAAP,CAAX,IAA8BC,MAAM,CAACC,OAAP,CAAeL,QAAf,CAA9B,EAAwD;AACtDC,IAAAA,SAAS,CAACC,IAAD,CAAT,GAAkBI,aAAa,CAACH,OAAD,CAA/B;AACD;;AACD,SAAOF,SAAP;AACD;;AAOD,SAASK,aAAT,CAAuBH,OAAvB,EAAmD;AACjD,MAAII,IAAI,GAAGC,SAAS,CAACL,OAAD,CAApB;;AACA,MAAII,IAAI,KAAK,QAAb,EAAuB;AACrB,WAAO;AAACA,MAAAA,IAAD;AAAOnB,MAAAA,KAAK,EAAEe,OAAd;AAAuB,SAAGlB,gBAAgB,CAACsB,IAAD;AAA1C,KAAP;AACD;;AACD,MAAI,OAAOJ,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,QAAI,CAACA,OAAL,EAAc;AACZ,aAAO;AAACI,QAAAA,IAAI,EAAE,QAAP;AAAiBnB,QAAAA,KAAK,EAAE;AAAxB,OAAP;AACD;;AACD,QAAI,UAAUe,OAAd,EAAuB;AACrB,aAAO,EAAC,GAAGA,OAAJ;AAAa,WAAGlB,gBAAgB,CAACkB,OAAO,CAACI,IAAT;AAAhC,OAAP;AACD;;AACD,QAAI,EAAE,WAAWJ,OAAb,CAAJ,EAA2B;AAEzB,aAAO;AAACI,QAAAA,IAAI,EAAE,QAAP;AAAiBnB,QAAAA,KAAK,EAAEe;AAAxB,OAAP;AACD;;AACDI,IAAAA,IAAI,GAAGC,SAAS,CAACL,OAAO,CAACf,KAAT,CAAhB;AACA,WAAO;AAACmB,MAAAA,IAAD;AAAO,SAAGJ,OAAV;AAAmB,SAAGlB,gBAAgB,CAACsB,IAAD;AAAtC,KAAP;AACD;AACF;;AAGD,SAASC,SAAT,CAAmBpB,KAAnB,EAA2C;AACzC,MAAIO,KAAK,CAACC,OAAN,CAAcR,KAAd,KAAwBS,WAAW,CAACC,MAAZ,CAAmBV,KAAnB,CAA5B,EAAuD;AACrD,WAAO,OAAP;AACD;;AACD,SAAO,OAAOA,KAAd;AACD","sourcesContent":["export type PropDef = {\n type?: string;\n max?: number;\n min?: number;\n value?: any;\n} | number;\n\nexport type PropType = {\n type: string;\n value: any;\n max?: number;\n min?: number;\n private?: boolean;\n validate?(value: any, propDef: PropType): boolean;\n};\n\nconst TYPE_DEFINITIONS = {\n number: {\n validate(value: unknown, propType: PropDef) {\n return (\n Number.isFinite(value) &&\n typeof propType === 'object' &&\n (!('max' in propType) || value <= propType.max) &&\n (!('min' in propType) || value >= propType.min)\n );\n }\n },\n array: {\n validate(value: unknown, propType: PropDef) {\n return Array.isArray(value) || ArrayBuffer.isView(value);\n }\n }\n};\n\nexport function parsePropTypes(propDefs: Record<string, PropDef>): Record<string, PropType> {\n const propTypes: Record<string, PropType> = {};\n for (const [name, propDef] of Object.entries(propDefs)) {\n propTypes[name] = parsePropType(propDef);\n }\n return propTypes;\n}\n\n/**\n * Parses one property definition entry. Either contains:\n * - a valid prop type object ({type, ...})\n * - or just a default value, in which case type and name inference is used\n */\nfunction parsePropType(propDef: PropDef): PropType {\n let type = getTypeOf(propDef);\n if (type !== 'object') {\n return {type, value: propDef, ...TYPE_DEFINITIONS[type]};\n }\n if (typeof propDef === 'object') {\n if (!propDef) {\n return {type: 'object', value: null};\n }\n if ('type' in propDef) {\n return {...propDef, ...TYPE_DEFINITIONS[propDef.type]};\n }\n if (!('value' in propDef)) {\n // If no type and value this object is likely the value\n return {type: 'object', value: propDef};\n }\n type = getTypeOf(propDef.value);\n return {type, ...propDef, ...TYPE_DEFINITIONS[type]};\n }\n}\n\n// improved version of javascript typeof that can distinguish arrays and null values\nfunction getTypeOf(value: unknown): string {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return 'array';\n }\n return typeof value;\n}\n"],"file":"prop-types.js"}
1
+ {"version":3,"sources":["../../../src/lib/filters/prop-types.ts"],"names":["assert","DEFAULT_PROP_VALIDATORS","number","type","validate","value","propType","Number","isFinite","max","undefined","min","array","Array","isArray","ArrayBuffer","isView","makePropValidators","propTypes","propValidators","name","Object","entries","makePropValidator","getValidatedProperties","properties","errorMessage","validated","key","propsValidator","private","getTypeOf","Error"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\nimport {assert} from '../utils/assert';\n\n/** \n * For use by shader module and shader pass writers to describe the types of the \n * properties they expose (properties ultimately map to uniforms).\n */\nexport type PropType = {\n type?: string;\n max?: number;\n min?: number;\n value?: unknown;\n} | number;\n\n/**\n * Internal property validators generated by processing the prop types , \n * The `validate()` method can be used to validate the type of properties passed in to\n * shader module or shader pass\n */\nexport type PropValidator = {\n type: string;\n value?: unknown;\n max?: number;\n min?: number;\n private?: boolean;\n validate?(value: unknown, propDef: PropValidator): boolean;\n};\n\n/** Minimal validators for number and array types */\nconst DEFAULT_PROP_VALIDATORS: Record<string, PropValidator> = {\n number: {\n type: 'number',\n validate(value: unknown, propType: PropType) {\n return (\n Number.isFinite(value) &&\n typeof propType === 'object' &&\n (propType.max === undefined || value as number <= propType.max) &&\n (propType.min === undefined || value as number >= propType.min)\n );\n }\n },\n array: {\n type: 'array',\n validate(value: unknown, propType: PropType) {\n return Array.isArray(value) || ArrayBuffer.isView(value);\n }\n }\n};\n\n/**\n * Parse a list of property types into property definitions that can be used to validate\n * values passed in by applications.\n * @param propTypes \n * @returns \n */\nexport function makePropValidators(propTypes: Record<string, PropType>): Record<string, PropValidator> {\n const propValidators: Record<string, PropValidator> = {};\n for (const [name, propType] of Object.entries(propTypes)) {\n propValidators[name] = makePropValidator(propType);\n }\n return propValidators;\n}\n\n/**\n * Validate a map of user supplied properties against a map of validators\n * Inject default values when user doesn't supply a property\n * @param properties \n * @param propValidators \n * @returns \n */\nexport function getValidatedProperties(\n properties: Record<string, unknown>,\n propValidators: Record<string, PropValidator>,\n errorMessage: string\n): Record<string, unknown> {\n\n const validated: Record<string, unknown> = {};\n\n for (const [key, propsValidator] of Object.entries(propValidators)) {\n if (properties && key in properties && !propsValidator.private) {\n if (propsValidator.validate) {\n assert(propsValidator.validate(properties[key], propsValidator), `${errorMessage}: invalid ${key}`);\n }\n validated[key] = properties[key];\n } else {\n // property not supplied - use default value\n validated[key] = propsValidator.value;\n }\n }\n\n // TODO - warn for unused properties that don't match a validator?\n\n return validated;\n}\n\n\n/**\n * Creates a property validator for a prop type. Either contains:\n * - a valid prop type object ({type, ...})\n * - or just a default value, in which case type and name inference is used\n */\nfunction makePropValidator(propType: PropType): PropValidator {\n let type = getTypeOf(propType);\n\n if (type !== 'object') {\n return {value: propType, ...DEFAULT_PROP_VALIDATORS[type], type};\n }\n\n // Special handling for objects\n if (typeof propType === 'object') {\n if (!propType) {\n return {type: 'object', value: null};\n }\n if (propType.type !== undefined) {\n return {...propType, ...DEFAULT_PROP_VALIDATORS[propType.type], type: propType.type};\n }\n // If no type and value this object is likely the value\n if (propType.value === undefined) {\n return {type: 'object', value: propType};\n }\n\n type = getTypeOf(propType.value);\n return {...propType, ...DEFAULT_PROP_VALIDATORS[type], type};\n }\n\n throw new Error('props');\n}\n\n/** \n * \"improved\" version of javascript typeof that can distinguish arrays and null values\n */\nfunction getTypeOf(value: unknown): string {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return 'array';\n }\n return typeof value;\n}\n"],"file":"prop-types.js"}
@@ -16,7 +16,7 @@ function getShaderVersion(source) {
16
16
  let version = 100;
17
17
  const words = source.match(/[^\s]+/g);
18
18
 
19
- if (words.length >= 2 && words[0] === '#version') {
19
+ if (words && words.length >= 2 && words[0] === '#version') {
20
20
  const v = parseInt(words[1], 10);
21
21
 
22
22
  if (Number.isFinite(v)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/glsl-utils/get-shader-info.ts"],"names":["getShaderInfo","source","defaultName","name","getShaderName","language","version","getShaderVersion","shader","SHADER_NAME_REGEXP","match","words","length","v","parseInt","Number","isFinite"],"mappings":"AAUA,OAAO,SAASA,aAAT,CAAuBC,MAAvB,EAAuCC,WAAvC,EAAyE;AAC9E,SAAO;AACLC,IAAAA,IAAI,EAAEC,aAAa,CAACH,MAAD,EAASC,WAAT,CADd;AAELG,IAAAA,QAAQ,EAAE,MAFL;AAGLC,IAAAA,OAAO,EAAEC,gBAAgB,CAACN,MAAD;AAHpB,GAAP;AAKD;;AAGD,SAASG,aAAT,CAAuBI,MAAvB,EAAuCN,WAAmB,GAAG,SAA7D,EAAgF;AAC9E,QAAMO,kBAAkB,GAAG,mDAA3B;AACA,QAAMC,KAAK,GAAGF,MAAM,CAACE,KAAP,CAAaD,kBAAb,CAAd;AACA,SAAOC,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAR,GAAcR,WAA1B;AACD;;AAGD,SAASK,gBAAT,CAA0BN,MAA1B,EAAkD;AAChD,MAAIK,OAAO,GAAG,GAAd;AACA,QAAMK,KAAK,GAAGV,MAAM,CAACS,KAAP,CAAa,SAAb,CAAd;;AACA,MAAIC,KAAK,CAACC,MAAN,IAAgB,CAAhB,IAAqBD,KAAK,CAAC,CAAD,CAAL,KAAa,UAAtC,EAAkD;AAChD,UAAME,CAAC,GAAGC,QAAQ,CAACH,KAAK,CAAC,CAAD,CAAN,EAAW,EAAX,CAAlB;;AACA,QAAII,MAAM,CAACC,QAAP,CAAgBH,CAAhB,CAAJ,EAAwB;AACtBP,MAAAA,OAAO,GAAGO,CAAV;AACD;AACF;;AACD,SAAOP,OAAP;AACD","sourcesContent":["// luma.gl, MIT license\n\n/** Information extracted from shader source code */\nexport type ShaderInfo = {\n name: string;\n language: 'glsl' | 'wgsl';\n version: number;\n};\n\n/** Extracts information from shader source code */\nexport function getShaderInfo(source: string, defaultName?: string): ShaderInfo {\n return {\n name: getShaderName(source, defaultName),\n language: 'glsl',\n version: getShaderVersion(source)\n };\n}\n\n/** Extracts GLSLIFY style naming of shaders: `#define SHADER_NAME ...` */\nfunction getShaderName(shader: string, defaultName: string = 'unnamed'): string {\n const SHADER_NAME_REGEXP = /#define[\\s*]SHADER_NAME[\\s*]([A-Za-z0-9_-]+)[\\s*]/;\n const match = shader.match(SHADER_NAME_REGEXP);\n return match ? match[1] : defaultName;\n}\n\n/** returns GLSL shader version of given shader string */\nfunction getShaderVersion(source: string): number {\n let version = 100;\n const words = source.match(/[^\\s]+/g);\n if (words.length >= 2 && words[0] === '#version') {\n const v = parseInt(words[1], 10);\n if (Number.isFinite(v)) {\n version = v;\n }\n }\n return version;\n}\n"],"file":"get-shader-info.js"}
1
+ {"version":3,"sources":["../../../src/lib/glsl-utils/get-shader-info.ts"],"names":["getShaderInfo","source","defaultName","name","getShaderName","language","version","getShaderVersion","shader","SHADER_NAME_REGEXP","match","words","length","v","parseInt","Number","isFinite"],"mappings":"AAUA,OAAO,SAASA,aAAT,CAAuBC,MAAvB,EAAuCC,WAAvC,EAAyE;AAC9E,SAAO;AACLC,IAAAA,IAAI,EAAEC,aAAa,CAACH,MAAD,EAASC,WAAT,CADd;AAELG,IAAAA,QAAQ,EAAE,MAFL;AAGLC,IAAAA,OAAO,EAAEC,gBAAgB,CAACN,MAAD;AAHpB,GAAP;AAKD;;AAGD,SAASG,aAAT,CAAuBI,MAAvB,EAAuCN,WAAmB,GAAG,SAA7D,EAAgF;AAC9E,QAAMO,kBAAkB,GAAG,mDAA3B;AACA,QAAMC,KAAK,GAAGF,MAAM,CAACE,KAAP,CAAaD,kBAAb,CAAd;AACA,SAAOC,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAR,GAAcR,WAA1B;AACD;;AAGD,SAASK,gBAAT,CAA0BN,MAA1B,EAAkD;AAChD,MAAIK,OAAO,GAAG,GAAd;AACA,QAAMK,KAAK,GAAGV,MAAM,CAACS,KAAP,CAAa,SAAb,CAAd;;AACA,MAAIC,KAAK,IAAIA,KAAK,CAACC,MAAN,IAAgB,CAAzB,IAA8BD,KAAK,CAAC,CAAD,CAAL,KAAa,UAA/C,EAA2D;AACzD,UAAME,CAAC,GAAGC,QAAQ,CAACH,KAAK,CAAC,CAAD,CAAN,EAAW,EAAX,CAAlB;;AACA,QAAII,MAAM,CAACC,QAAP,CAAgBH,CAAhB,CAAJ,EAAwB;AACtBP,MAAAA,OAAO,GAAGO,CAAV;AACD;AACF;;AACD,SAAOP,OAAP;AACD","sourcesContent":["// luma.gl, MIT license\n\n/** Information extracted from shader source code */\nexport type ShaderInfo = {\n name: string;\n language: 'glsl' | 'wgsl';\n version: number;\n};\n\n/** Extracts information from shader source code */\nexport function getShaderInfo(source: string, defaultName?: string): ShaderInfo {\n return {\n name: getShaderName(source, defaultName),\n language: 'glsl',\n version: getShaderVersion(source)\n };\n}\n\n/** Extracts GLSLIFY style naming of shaders: `#define SHADER_NAME ...` */\nfunction getShaderName(shader: string, defaultName: string = 'unnamed'): string {\n const SHADER_NAME_REGEXP = /#define[\\s*]SHADER_NAME[\\s*]([A-Za-z0-9_-]+)[\\s*]/;\n const match = shader.match(SHADER_NAME_REGEXP);\n return match ? match[1] : defaultName;\n}\n\n/** returns GLSL shader version of given shader string */\nfunction getShaderVersion(source: string): number {\n let version = 100;\n const words = source.match(/[^\\s]+/g);\n if (words && words.length >= 2 && words[0] === '#version') {\n const v = parseInt(words[1], 10);\n if (Number.isFinite(v)) {\n version = v;\n }\n }\n return version;\n}\n"],"file":"get-shader-info.js"}
@@ -3,7 +3,7 @@ declare type QualifierInfo = {
3
3
  type: string;
4
4
  name: string;
5
5
  };
6
- export declare function getQualifierDetails(line: string, qualifiers: string | string[]): QualifierInfo;
6
+ export declare function getQualifierDetails(line: string, qualifiers: string | string[]): QualifierInfo | null;
7
7
  /**
8
8
  * Given the shader version, input and output variable names,
9
9
  * builds and return a pass through fragment shader.
@@ -1 +1 @@
1
- {"version":3,"file":"shader-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/glsl-utils/shader-utils.ts"],"names":[],"mappings":"AASA,aAAK,aAAa,GAAG;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAA;AAGD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,aAAa,CAU9F;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CA8BT;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAI,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,CAU9E;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAU9D;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAUpE"}
1
+ {"version":3,"file":"shader-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/glsl-utils/shader-utils.ts"],"names":[],"mappings":"AASA,aAAK,aAAa,GAAG;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAA;AAGD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,aAAa,GAAG,IAAI,CAUrG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAiCT;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAI,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,CAU9E;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAU9D;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAUpE"}
@@ -35,6 +35,10 @@ export function getPassthroughFS(options) {
35
35
  return FS100;
36
36
  }
37
37
 
38
+ if (!inputType) {
39
+ throw new Error('inputType');
40
+ }
41
+
38
42
  const outputValue = convertToVec4(input, inputType);
39
43
 
40
44
  if (version >= 300) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/glsl-utils/shader-utils.ts"],"names":["FS100","FS_GLES","FS300","getQualifierDetails","line","qualifiers","Array","isArray","words","replace","split","qualifier","type","definition","includes","name","getPassthroughFS","options","version","input","inputType","output","outputValue","convertToVec4","typeToChannelSuffix","Error","typeToChannelCount","variable"],"mappings":"AACA,MAAMA,KAAK,0CAAX;AACA,MAAMC,OAAO,gFAAb;AAKA,MAAMC,KAAK,8BAAuBD,OAAvB,CAAX;AASA,OAAO,SAASE,mBAAT,CAA6BC,IAA7B,EAA2CC,UAA3C,EAAyF;AAC9FA,EAAAA,UAAU,GAAGC,KAAK,CAACC,OAAN,CAAcF,UAAd,IAA4BA,UAA5B,GAAyC,CAACA,UAAD,CAAtD;AACA,QAAMG,KAAK,GAAGJ,IAAI,CAACK,OAAL,CAAa,MAAb,EAAqB,EAArB,EAAyBC,KAAzB,CAA+B,KAA/B,CAAd;AAEA,QAAM,CAACC,SAAD,EAAYC,IAAZ,EAAkBC,UAAlB,IAAgCL,KAAtC;;AACA,MAAI,CAACH,UAAU,CAACS,QAAX,CAAoBH,SAApB,CAAD,IAAmC,CAACC,IAApC,IAA4C,CAACC,UAAjD,EAA6D;AAC3D,WAAO,IAAP;AACD;;AACD,QAAME,IAAI,GAAGF,UAAU,CAACH,KAAX,CAAiB,GAAjB,EAAsB,CAAtB,CAAb;AACA,SAAO;AAACC,IAAAA,SAAD;AAAYC,IAAAA,IAAZ;AAAkBG,IAAAA;AAAlB,GAAP;AACD;AAMD,OAAO,SAASC,gBAAT,CAA0BC,OAA1B,EAKI;AACT,QAAM;AAACC,IAAAA,OAAO,GAAG,GAAX;AAAgBC,IAAAA,KAAhB;AAAuBC,IAAAA,SAAvB;AAAkCC,IAAAA;AAAlC,MAA4CJ,OAAO,IAAI,EAA7D;;AACA,MAAI,CAACE,KAAL,EAAY;AACV,QAAID,OAAO,KAAK,GAAhB,EAAqB;AAEnB,aAAOhB,KAAP;AACD,KAHD,MAGO,IAAIgB,OAAO,GAAG,GAAd,EAAmB;AAExB,gCAAmBA,OAAnB,eAA+BjB,OAA/B;AACD;;AAED,WAAOD,KAAP;AACD;;AACD,QAAMsB,WAAW,GAAGC,aAAa,CAACJ,KAAD,EAAQC,SAAR,CAAjC;;AACA,MAAIF,OAAO,IAAI,GAAf,EAAoB;AAElB,8BACOA,OADP,cACkBA,OAAO,KAAK,GAAZ,GAAkB,IAAlB,GAAyB,EAD3C,kBAECE,SAFD,cAEcD,KAFd,yBAGOE,MAHP,iCAKAA,MALA,gBAKYC,WALZ;AAOD;;AAED,2BACQF,SADR,cACqBD,KADrB,gDAGiBG,WAHjB;AAKD;AAGD,OAAO,SAASE,mBAAT,CAA6BZ,IAA7B,EAAyE;AAE9E,UAAQA,IAAR;AACE,SAAK,OAAL;AAAc,aAAO,GAAP;;AACd,SAAK,MAAL;AAAa,aAAO,IAAP;;AACb,SAAK,MAAL;AAAa,aAAO,KAAP;;AACb,SAAK,MAAL;AAAa,aAAO,MAAP;;AACb;AACE,YAAM,IAAIa,KAAJ,CAAUb,IAAV,CAAN;AANJ;AAQD;AAGD,OAAO,SAASc,kBAAT,CAA4Bd,IAA5B,EAAyD;AAE9D,UAAQA,IAAR;AACE,SAAK,OAAL;AAAc,aAAO,CAAP;;AACd,SAAK,MAAL;AAAa,aAAO,CAAP;;AACb,SAAK,MAAL;AAAa,aAAO,CAAP;;AACb,SAAK,MAAL;AAAa,aAAO,CAAP;;AACb;AACE,YAAM,IAAIa,KAAJ,CAAUb,IAAV,CAAN;AANJ;AAQD;AAGD,OAAO,SAASW,aAAT,CAAuBI,QAAvB,EAAyCf,IAAzC,EAA+D;AAEpE,UAAQA,IAAR;AACE,SAAK,OAAL;AAAc,4BAAee,QAAf;;AACd,SAAK,MAAL;AAAa,4BAAeA,QAAf;;AACb,SAAK,MAAL;AAAa,4BAAeA,QAAf;;AACb,SAAK,MAAL;AAAa,aAAOA,QAAP;;AACb;AACE,YAAM,IAAIF,KAAJ,CAAUb,IAAV,CAAN;AANJ;AAQD","sourcesContent":["// luma.gl, MIT license\nconst FS100 = `void main() {gl_FragColor = vec4(0);}`;\nconst FS_GLES = `\\\nout vec4 transform_output;\nvoid main() {\n transform_output = vec4(0);\n}`;\nconst FS300 = `#version 300 es\\n${FS_GLES}`;\n\ntype QualifierInfo = {\n qualifier: string;\n type: string;\n name: string;\n}\n\n// Prase given glsl line and return qualifier details or null\nexport function getQualifierDetails(line: string, qualifiers: string | string[]): QualifierInfo {\n qualifiers = Array.isArray(qualifiers) ? qualifiers : [qualifiers];\n const words = line.replace(/^\\s+/, '').split(/\\s+/);\n // TODO add support for precession qualifiers (highp, mediump and lowp)\n const [qualifier, type, definition] = words;\n if (!qualifiers.includes(qualifier) || !type || !definition) {\n return null;\n }\n const name = definition.split(';')[0];\n return {qualifier, type, name};\n}\n\n/**\n * Given the shader version, input and output variable names,\n * builds and return a pass through fragment shader.\n */\nexport function getPassthroughFS(options?: {\n version?: number;\n input?: string;\n inputType?: string;\n output?: string;\n}): string {\n const {version = 100, input, inputType, output} = options || {};\n if (!input) {\n if (version === 300) {\n // Fast-path for WebGL 2.0\n return FS300;\n } else if (version > 300) {\n // Use the supplied version for OpenGL/ES 3.2+\n return `#version ${version}\\n${FS_GLES}`;\n }\n // Fast-path for WebGL 1.0\n return FS100;\n }\n const outputValue = convertToVec4(input, inputType);\n if (version >= 300) {\n // If version is 300, assume WebGL 2.0\n return `\\\n#version ${version} ${version === 300 ? 'es' : ''}\nin ${inputType} ${input};\nout vec4 ${output};\nvoid main() {\n ${output} = ${outputValue};\n}`;\n }\n // WebGL 1.0\n return `\\\nvarying ${inputType} ${input};\nvoid main() {\n gl_FragColor = ${outputValue};\n}`;\n}\n\n/** convert glsl type to suffix */\nexport function typeToChannelSuffix(type: string): 'x' | 'xy' | 'xyz' | 'xyzw' {\n // prettier-ignore\n switch (type) {\n case 'float': return 'x';\n case 'vec2': return 'xy';\n case 'vec3': return 'xyz';\n case 'vec4': return 'xyzw';\n default:\n throw new Error(type);\n }\n}\n\n/** convert glsl type to channel count */\nexport function typeToChannelCount(type: string): 1 | 2 | 3 | 4 {\n // prettier-ignore\n switch (type) {\n case 'float': return 1;\n case 'vec2': return 2;\n case 'vec3': return 3;\n case 'vec4': return 4;\n default:\n throw new Error(type);\n }\n}\n\n/** Returns glsl instruction for converting to vec4 */\nexport function convertToVec4(variable: string, type: string): string {\n // prettier-ignore\n switch (type) {\n case 'float': return `vec4(${variable}, 0.0, 0.0, 1.0)`;\n case 'vec2': return `vec4(${variable}, 0.0, 1.0)`;\n case 'vec3': return `vec4(${variable}, 1.0)`;\n case 'vec4': return variable;\n default:\n throw new Error(type);\n }\n}\n"],"file":"shader-utils.js"}
1
+ {"version":3,"sources":["../../../src/lib/glsl-utils/shader-utils.ts"],"names":["FS100","FS_GLES","FS300","getQualifierDetails","line","qualifiers","Array","isArray","words","replace","split","qualifier","type","definition","includes","name","getPassthroughFS","options","version","input","inputType","output","Error","outputValue","convertToVec4","typeToChannelSuffix","typeToChannelCount","variable"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\nconst FS100 = `void main() {gl_FragColor = vec4(0);}`;\nconst FS_GLES = `\\\nout vec4 transform_output;\nvoid main() {\n transform_output = vec4(0);\n}`;\nconst FS300 = `#version 300 es\\n${FS_GLES}`;\n\ntype QualifierInfo = {\n qualifier: string;\n type: string;\n name: string;\n}\n\n// Prase given glsl line and return qualifier details or null\nexport function getQualifierDetails(line: string, qualifiers: string | string[]): QualifierInfo | null {\n qualifiers = Array.isArray(qualifiers) ? qualifiers : [qualifiers];\n const words = line.replace(/^\\s+/, '').split(/\\s+/);\n // TODO add support for precession qualifiers (highp, mediump and lowp)\n const [qualifier, type, definition] = words;\n if (!qualifiers.includes(qualifier) || !type || !definition) {\n return null;\n }\n const name = definition.split(';')[0];\n return {qualifier, type, name};\n}\n\n/**\n * Given the shader version, input and output variable names,\n * builds and return a pass through fragment shader.\n */\nexport function getPassthroughFS(options?: {\n version?: number;\n input?: string;\n inputType?: string;\n output?: string;\n}): string {\n const {version = 100, input, inputType, output} = options || {};\n if (!input) {\n if (version === 300) {\n // Fast-path for WebGL 2.0\n return FS300;\n } else if (version > 300) {\n // Use the supplied version for OpenGL/ES 3.2+\n return `#version ${version}\\n${FS_GLES}`;\n }\n // Fast-path for WebGL 1.0\n return FS100;\n }\n if (!inputType) {\n throw new Error('inputType');\n }\n const outputValue = convertToVec4(input, inputType);\n if (version >= 300) {\n // If version is 300, assume WebGL 2.0\n return `\\\n#version ${version} ${version === 300 ? 'es' : ''}\nin ${inputType} ${input};\nout vec4 ${output};\nvoid main() {\n ${output} = ${outputValue};\n}`;\n }\n // WebGL 1.0\n return `\\\nvarying ${inputType} ${input};\nvoid main() {\n gl_FragColor = ${outputValue};\n}`;\n}\n\n/** convert glsl type to suffix */\nexport function typeToChannelSuffix(type: string): 'x' | 'xy' | 'xyz' | 'xyzw' {\n // prettier-ignore\n switch (type) {\n case 'float': return 'x';\n case 'vec2': return 'xy';\n case 'vec3': return 'xyz';\n case 'vec4': return 'xyzw';\n default:\n throw new Error(type);\n }\n}\n\n/** convert glsl type to channel count */\nexport function typeToChannelCount(type: string): 1 | 2 | 3 | 4 {\n // prettier-ignore\n switch (type) {\n case 'float': return 1;\n case 'vec2': return 2;\n case 'vec3': return 3;\n case 'vec4': return 4;\n default:\n throw new Error(type);\n }\n}\n\n/** Returns glsl instruction for converting to vec4 */\nexport function convertToVec4(variable: string, type: string): string {\n // prettier-ignore\n switch (type) {\n case 'float': return `vec4(${variable}, 0.0, 0.0, 1.0)`;\n case 'vec2': return `vec4(${variable}, 0.0, 1.0)`;\n case 'vec3': return `vec4(${variable}, 1.0)`;\n case 'vec4': return variable;\n default:\n throw new Error(type);\n }\n}\n"],"file":"shader-utils.js"}
@@ -1,13 +1,11 @@
1
1
  import { PlatformInfo } from './platform-defines';
2
2
  /** Define map */
3
3
  declare type Defines = Record<string, string | number | boolean>;
4
- export declare type HookFunction = string | {
4
+ export declare type HookFunction = {
5
5
  hook: string;
6
6
  header: string;
7
7
  footer: string;
8
- } | {
9
- vs: string;
10
- fs: string;
8
+ signature?: string;
11
9
  };
12
10
  export declare type AssembleShaderOptions = {
13
11
  id?: string;
@@ -16,7 +14,11 @@ export declare type AssembleShaderOptions = {
16
14
  type?: any;
17
15
  modules?: any[];
18
16
  defines?: Defines;
19
- hookFunctions?: HookFunction[] | [string, string];
17
+ hookFunctions?: (HookFunction | string | {
18
+ hook: string;
19
+ header: string;
20
+ footer: string;
21
+ })[];
20
22
  inject?: object;
21
23
  transpileToGLSL100?: boolean;
22
24
  prologue?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"assemble-shaders.d.ts","sourceRoot":"","sources":["../../../src/lib/shader-assembler/assemble-shaders.ts"],"names":[],"mappings":"AACA,OAAO,EAA8C,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAsB7F,iBAAiB;AACjB,aAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAEzD,oBAAY,YAAY,GAAG,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE,GAAG;IACtF,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,oBAAY,qBAAqB,GAAG;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC;CACX,CAAC;AAEF;;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,GAAG,CAAC;CAClB,CAQA"}
1
+ {"version":3,"file":"assemble-shaders.d.ts","sourceRoot":"","sources":["../../../src/lib/shader-assembler/assemble-shaders.ts"],"names":[],"mappings":"AACA,OAAO,EAA8C,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAwB7F,iBAAiB;AACjB,aAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAEzD,oBAAY,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,oBAAY,qBAAqB,GAAG;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,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,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC;CACX,CAAC;AAEF;;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,GAAG,CAAC;CAClB,CAQA"}
@@ -63,13 +63,11 @@ function assembleShader(platformInfo, options) {
63
63
  Object.assign(allDefines, module.getDefines());
64
64
  });
65
65
  Object.assign(allDefines, defines);
66
- let assembledSource = prologue ? "".concat(versionLine, "\n").concat(getShaderName({
66
+ let assembledSource = prologue ? "".concat(versionLine, "\n").concat(getShaderNameDefine({
67
67
  id,
68
68
  source,
69
69
  type
70
- }), "\n").concat(getShaderType({
71
- type
72
- }), "\n").concat(getPlatformShaderDefines(platformInfo), "\n").concat(getVersionDefines(platformInfo), "\n").concat(getApplicationDefines(allDefines), "\n").concat(isVertex ? '' : FRAGMENT_SHADER_PROLOGUE, "\n") : "".concat(versionLine, "\n");
70
+ }), "\n").concat(getShaderType(type), "\n").concat(getPlatformShaderDefines(platformInfo), "\n").concat(getVersionDefines(platformInfo), "\n").concat(getApplicationDefines(allDefines), "\n").concat(isVertex ? '' : FRAGMENT_SHADER_PROLOGUE, "\n") : "".concat(versionLine, "\n");
73
71
  const hookFunctionMap = normalizeHookFunctions(hookFunctions);
74
72
  const hookInjections = {};
75
73
  const declInjections = {};
@@ -146,19 +144,17 @@ function assembleGetUniforms(modules) {
146
144
  };
147
145
  }
148
146
 
149
- function getShaderType({
150
- type
151
- }) {
147
+ function getShaderType(type) {
152
148
  return "\n#define SHADER_TYPE_".concat(SHADER_TYPE[type].toUpperCase(), "\n");
153
149
  }
154
150
 
155
- function getShaderName(options) {
151
+ function getShaderNameDefine(options) {
156
152
  const {
157
153
  id,
158
154
  source,
159
155
  type
160
156
  } = options;
161
- const injectShaderName = id && typeof id === 'string' && source.indexOf('SHADER_NAME') === -1;
157
+ const injectShaderName = id && source.indexOf('SHADER_NAME') === -1;
162
158
  return injectShaderName ? "\n#define SHADER_NAME ".concat(id, "_").concat(SHADER_TYPE[type], "\n\n") : '';
163
159
  }
164
160
 
@@ -221,19 +217,26 @@ function normalizeHookFunctions(hookFunctions) {
221
217
  vs: {},
222
218
  fs: {}
223
219
  };
224
- hookFunctions.forEach(hook => {
220
+ hookFunctions.forEach(hookFunction => {
225
221
  let opts;
222
+ let hook;
226
223
 
227
- if (typeof hook !== 'string') {
228
- opts = hook;
224
+ if (typeof hookFunction !== 'string') {
225
+ opts = hookFunction;
229
226
  hook = opts.hook;
230
227
  } else {
231
228
  opts = {};
229
+ hook = hookFunction;
232
230
  }
233
231
 
234
232
  hook = hook.trim();
235
233
  const [stage, signature] = hook.split(':');
236
234
  const name = hook.replace(/\(.+/, '');
235
+
236
+ if (stage !== 'vs' && stage !== 'fs') {
237
+ throw new Error(stage);
238
+ }
239
+
237
240
  result[stage][name] = Object.assign(opts, {
238
241
  signature
239
242
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/shader-assembler/assemble-shaders.ts"],"names":["resolveModules","getPlatformShaderDefines","getVersionDefines","injectShader","DECLARATION_INJECT_MARKER","transpileShader","assert","INJECT_SHADER_DECLARATIONS","SHADER_TYPE","FRAGMENT_SHADER_PROLOGUE","assembleShaders","platformInfo","options","vs","fs","modules","assembleShader","source","type","getUniforms","assembleGetUniforms","id","defines","hookFunctions","inject","transpileToGLSL100","prologue","log","isVertex","sourceLines","split","glslVersion","versionLine","coreSource","indexOf","slice","join","allDefines","forEach","module","Object","assign","getDefines","assembledSource","getShaderName","getShaderType","getApplicationDefines","hookFunctionMap","normalizeHookFunctions","hookInjections","declInjections","mainInjections","key","injection","order","match","hash","name","checkDeprecations","moduleSource","getModuleSource","injections","injectionType","push","getHookFunctions","opts","uniforms","moduleUniforms","toUpperCase","injectShaderName","count","sourceText","define","value","Number","isFinite","result","hookName","hookFunction","signature","header","sort","a","b","footer","hook","trim","stage","replace"],"mappings":"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","sourcesContent":["import {resolveModules} from './resolve-modules';\nimport {getPlatformShaderDefines, getVersionDefines, PlatformInfo} from './platform-defines';\nimport injectShader, {DECLARATION_INJECT_MARKER} from './inject-shader';\nimport transpileShader from '../transpiler/transpile-shader';\nimport {assert} from '../utils/assert';\n\n\nconst INJECT_SHADER_DECLARATIONS = `\\n\\n${DECLARATION_INJECT_MARKER}\\n\\n`;\n\nconst SHADER_TYPE = {\n 'fs': 'fragment',\n 'vs': 'vertex'\n};\n\n/**\n * Precision prologue to inject before functions are injected in shader\n * TODO - extract any existing prologue in the fragment source and move it up...\n */\nconst FRAGMENT_SHADER_PROLOGUE = `\\\nprecision highp float;\n\n`;\n\n/** Define map */\ntype Defines = Record<string, string | number | boolean>;\n\nexport type HookFunction = string | { hook: string; header: string; footer: string; } | {\n vs: string;\n fs: string;\n};\n\nexport type AssembleShaderOptions = {\n id?: string;\n vs: string;\n fs: string;\n type?: any;\n modules?: any[];\n defines?: Defines;\n hookFunctions?: HookFunction[] | [string, string];\n inject?: object;\n transpileToGLSL100?: boolean;\n prologue?: boolean;\n log?: any;\n};\n\n/**\n * Inject a list of shader modules into shader sources\n */\nexport function assembleShaders(\n platformInfo: PlatformInfo,\n options: AssembleShaderOptions\n): {\n vs: string;\n fs: string;\n getUniforms: any;\n} {\n const {vs, fs} = options;\n const modules = resolveModules(options.modules || []);\n return {\n vs: assembleShader(platformInfo, {...options, source: vs, type: 'vs', modules}),\n fs: assembleShader(platformInfo, {...options, source: fs, type: 'fs', modules}),\n getUniforms: assembleGetUniforms(modules)\n };\n}\n\n/**\n * Pulls together complete source code for either a vertex or a fragment shader\n * adding prologues, requested module chunks, and any final injections.\n * @param gl \n * @param options \n * @returns \n */\nfunction assembleShader(\n platformInfo: PlatformInfo,\n options: {\n id?: string;\n source: string;\n type: 'vs' | 'fs';\n modules: any[];\n defines?: Defines;\n hookFunctions?: any[];\n inject?: Record<string, any>;\n transpileToGLSL100?: boolean;\n prologue?: boolean;\n log?: any;\n }\n) {\n const {\n id,\n source,\n type,\n modules,\n defines = {},\n hookFunctions = [],\n inject = {},\n transpileToGLSL100 = false,\n prologue = true,\n log\n } = options;\n\n assert(typeof source === 'string', 'shader source must be a string');\n\n const isVertex = type === 'vs';\n\n const sourceLines = source.split('\\n');\n let glslVersion = 100;\n let versionLine = '';\n let coreSource = source;\n // Extract any version directive string from source.\n // TODO : keep all pre-processor statements at the beginning of the shader.\n if (sourceLines[0].indexOf('#version ') === 0) {\n glslVersion = 300; // TODO - regexp that matches actual version number\n versionLine = sourceLines[0];\n coreSource = sourceLines.slice(1).join('\\n');\n } else {\n versionLine = `#version ${glslVersion}`;\n }\n\n // Combine Module and Application Defines\n const allDefines = {};\n modules.forEach((module) => {\n Object.assign(allDefines, module.getDefines());\n });\n Object.assign(allDefines, defines);\n\n // Add platform defines (use these to work around platform-specific bugs and limitations)\n // Add common defines (GLSL version compatibility, feature detection)\n // Add precision declaration for fragment shaders\n let assembledSource = prologue\n ? `\\\n${versionLine}\n${getShaderName({id, source, type})}\n${getShaderType({type})}\n${getPlatformShaderDefines(platformInfo)}\n${getVersionDefines(platformInfo)}\n${getApplicationDefines(allDefines)}\n${isVertex ? '' : FRAGMENT_SHADER_PROLOGUE}\n`\n : `${versionLine}\n`;\n\n const hookFunctionMap = normalizeHookFunctions(hookFunctions);\n\n // Add source of dependent modules in resolved order\n const hookInjections: Record<string, string[]> = {};\n const declInjections: Record<string, string[]> = {};\n const mainInjections: Record<string, string[]> = {};\n\n for (const key in inject) {\n const injection =\n typeof inject[key] === 'string' ? {injection: inject[key], order: 0} : inject[key];\n const match = key.match(/^(v|f)s:(#)?([\\w-]+)$/);\n if (match) {\n const hash = match[2];\n const name = match[3];\n if (hash) {\n if (name === 'decl') {\n declInjections[key] = [injection];\n } else {\n mainInjections[key] = [injection];\n }\n } else {\n hookInjections[key] = [injection];\n }\n } else {\n // Regex injection\n mainInjections[key] = [injection];\n }\n }\n\n for (const module of modules) {\n if (log) {\n module.checkDeprecations(coreSource, log);\n }\n const moduleSource = module.getModuleSource(type, glslVersion);\n // Add the module source, and a #define that declares it presence\n assembledSource += moduleSource;\n\n const injections = module.injections[type];\n for (const key in injections) {\n const match = key.match(/^(v|f)s:#([\\w-]+)$/);\n if (match) {\n const name = match[2];\n const injectionType = name === 'decl' ? declInjections : mainInjections;\n injectionType[key] = injectionType[key] || [];\n injectionType[key].push(injections[key]);\n } else {\n hookInjections[key] = hookInjections[key] || [];\n hookInjections[key].push(injections[key]);\n }\n }\n }\n\n // For injectShader\n assembledSource += INJECT_SHADER_DECLARATIONS;\n\n assembledSource = injectShader(assembledSource, type, declInjections);\n\n assembledSource += getHookFunctions(hookFunctionMap[type], hookInjections);\n\n // Add the version directive and actual source of this shader\n assembledSource += coreSource;\n\n // Apply any requested shader injections\n assembledSource = injectShader(assembledSource, type, mainInjections);\n\n assembledSource = transpileShader(\n assembledSource,\n transpileToGLSL100 ? 100 : glslVersion,\n isVertex\n );\n\n return assembledSource;\n}\n\n/**\n * Returns a combined `getUniforms` covering the options for all the modules,\n * the created function will pass on options to the inidividual `getUniforms`\n * function of each shader module and combine the results into one object that\n * can be passed to setUniforms.\n * @param modules \n * @returns \n */\nfunction assembleGetUniforms(modules) {\n return function getUniforms(opts) {\n const uniforms = {};\n for (const module of modules) {\n // `modules` is already sorted by dependency level. This guarantees that\n // modules have access to the uniforms that are generated by their dependencies.\n const moduleUniforms = module.getUniforms(opts, uniforms);\n Object.assign(uniforms, moduleUniforms);\n }\n return uniforms;\n };\n}\n\nfunction getShaderType({type}) {\n return `\n#define SHADER_TYPE_${SHADER_TYPE[type].toUpperCase()}\n`;\n}\n\n/**\n * Generate \"glslify-compatible\" SHADER_NAME defines\n * These are understood by the GLSL error parsing function\n * If id is provided and no SHADER_NAME constant is present in source, create one\n */\nfunction getShaderName(options: {id: string, source: string, type: 'vs' | 'fs'}): string {\n const {id, source, type} = options;\n const injectShaderName = id && typeof id === 'string' && source.indexOf('SHADER_NAME') === -1;\n return injectShaderName\n ? `\n#define SHADER_NAME ${id}_${SHADER_TYPE[type]}\n\n`\n : '';\n}\n\n/** Generates application defines from an object of key value pairs */\nfunction getApplicationDefines(defines: Defines = {}): string {\n let count = 0;\n let sourceText = '';\n for (const define in defines) {\n if (count === 0) {\n sourceText += '\\n// APPLICATION DEFINES\\n';\n }\n count++;\n\n const value = defines[define];\n if (value || Number.isFinite(value)) {\n sourceText += `#define ${define.toUpperCase()} ${defines[define]}\\n`;\n }\n }\n if (count === 0) {\n sourceText += '\\n';\n }\n return sourceText;\n}\n\nfunction getHookFunctions(hookFunctions, hookInjections): string {\n let result = '';\n for (const hookName in hookFunctions) {\n const hookFunction = hookFunctions[hookName];\n result += `void ${hookFunction.signature} {\\n`;\n if (hookFunction.header) {\n result += ` ${hookFunction.header}`;\n }\n if (hookInjections[hookName]) {\n const injections = hookInjections[hookName];\n injections.sort((a: {order: number}, b: {order: number}): number => a.order - b.order);\n for (const injection of injections) {\n result += ` ${injection.injection}\\n`;\n }\n }\n if (hookFunction.footer) {\n result += ` ${hookFunction.footer}`;\n }\n result += '}\\n';\n }\n\n return result;\n}\n\nfunction normalizeHookFunctions(hookFunctions): {vs: Record<string, any>, fs: Record<string, any>} {\n const result: {vs: Record<string, any>, fs: Record<string, any>} = {\n vs: {},\n fs: {}\n };\n\n hookFunctions.forEach((hook) => {\n let opts;\n if (typeof hook !== 'string') {\n opts = hook;\n hook = opts.hook;\n } else {\n opts = {};\n }\n hook = hook.trim();\n const [stage, signature] = hook.split(':');\n const name = hook.replace(/\\(.+/, '');\n result[stage][name] = Object.assign(opts, {signature});\n });\n\n return result;\n}\n"],"file":"assemble-shaders.js"}
1
+ {"version":3,"sources":["../../../src/lib/shader-assembler/assemble-shaders.ts"],"names":["resolveModules","getPlatformShaderDefines","getVersionDefines","injectShader","DECLARATION_INJECT_MARKER","transpileShader","assert","INJECT_SHADER_DECLARATIONS","SHADER_TYPE","FRAGMENT_SHADER_PROLOGUE","assembleShaders","platformInfo","options","vs","fs","modules","assembleShader","source","type","getUniforms","assembleGetUniforms","id","defines","hookFunctions","inject","transpileToGLSL100","prologue","log","isVertex","sourceLines","split","glslVersion","versionLine","coreSource","indexOf","slice","join","allDefines","forEach","module","Object","assign","getDefines","assembledSource","getShaderNameDefine","getShaderType","getApplicationDefines","hookFunctionMap","normalizeHookFunctions","hookInjections","declInjections","mainInjections","key","injection","order","match","hash","name","checkDeprecations","moduleSource","getModuleSource","injections","injectionType","push","getHookFunctions","opts","uniforms","moduleUniforms","toUpperCase","injectShaderName","count","sourceText","define","value","Number","isFinite","result","hookName","hookFunction","signature","header","sort","a","b","footer","hook","trim","stage","replace","Error"],"mappings":"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","sourcesContent":["import {resolveModules} from './resolve-modules';\nimport {getPlatformShaderDefines, getVersionDefines, PlatformInfo} from './platform-defines';\nimport injectShader, {DECLARATION_INJECT_MARKER} from './inject-shader';\nimport transpileShader from '../transpiler/transpile-shader';\nimport {assert} from '../utils/assert';\nimport {ShaderModuleInstance} from '../shader-module/shader-module-instance';\nimport type { Injection } from '../shader-module/shader-module-instance';\n\n\nconst INJECT_SHADER_DECLARATIONS = `\\n\\n${DECLARATION_INJECT_MARKER}\\n\\n`;\n\nconst SHADER_TYPE = {\n 'fs': 'fragment',\n 'vs': 'vertex'\n};\n\n/**\n * Precision prologue to inject before functions are injected in shader\n * TODO - extract any existing prologue in the fragment source and move it up...\n */\nconst FRAGMENT_SHADER_PROLOGUE = `\\\nprecision highp float;\n\n`;\n\n/** Define map */\ntype Defines = Record<string, string | number | boolean>;\n\nexport type HookFunction = { hook: string; header: string; footer: string; signature?: string};\n\nexport type AssembleShaderOptions = {\n id?: string;\n vs: string;\n fs: string;\n type?: any;\n modules?: any[];\n defines?: Defines;\n hookFunctions?: (HookFunction | string | { hook: string; header: string; footer: string; })[];\n inject?: object;\n transpileToGLSL100?: boolean;\n prologue?: boolean;\n log?: any;\n};\n\n/**\n * Inject a list of shader modules into shader sources\n */\nexport function assembleShaders(\n platformInfo: PlatformInfo,\n options: AssembleShaderOptions\n): {\n vs: string;\n fs: string;\n getUniforms: any;\n} {\n const {vs, fs} = options;\n const modules = resolveModules(options.modules || []);\n return {\n vs: assembleShader(platformInfo, {...options, source: vs, type: 'vs', modules}),\n fs: assembleShader(platformInfo, {...options, source: fs, type: 'fs', modules}),\n getUniforms: assembleGetUniforms(modules)\n };\n}\n\n/**\n * Pulls together complete source code for either a vertex or a fragment shader\n * adding prologues, requested module chunks, and any final injections.\n * @param gl \n * @param options \n * @returns \n */\nfunction assembleShader(\n platformInfo: PlatformInfo,\n options: {\n id?: string;\n source: string;\n type: 'vs' | 'fs';\n modules: any[];\n defines?: Defines;\n hookFunctions?: any[];\n inject?: Record<string, any>;\n transpileToGLSL100?: boolean;\n prologue?: boolean;\n log?: any;\n }\n) {\n const {\n id,\n source,\n type,\n modules,\n defines = {},\n hookFunctions = [],\n inject = {},\n transpileToGLSL100 = false,\n prologue = true,\n log\n } = options;\n\n assert(typeof source === 'string', 'shader source must be a string');\n\n const isVertex = type === 'vs';\n\n const sourceLines = source.split('\\n');\n let glslVersion = 100;\n let versionLine = '';\n let coreSource = source;\n // Extract any version directive string from source.\n // TODO : keep all pre-processor statements at the beginning of the shader.\n if (sourceLines[0].indexOf('#version ') === 0) {\n glslVersion = 300; // TODO - regexp that matches actual version number\n versionLine = sourceLines[0];\n coreSource = sourceLines.slice(1).join('\\n');\n } else {\n versionLine = `#version ${glslVersion}`;\n }\n\n // Combine Module and Application Defines\n const allDefines = {};\n modules.forEach((module) => {\n Object.assign(allDefines, module.getDefines());\n });\n Object.assign(allDefines, defines);\n\n // Add platform defines (use these to work around platform-specific bugs and limitations)\n // Add common defines (GLSL version compatibility, feature detection)\n // Add precision declaration for fragment shaders\n let assembledSource = prologue\n ? `\\\n${versionLine}\n${getShaderNameDefine({id, source, type})}\n${getShaderType(type)}\n${getPlatformShaderDefines(platformInfo)}\n${getVersionDefines(platformInfo)}\n${getApplicationDefines(allDefines)}\n${isVertex ? '' : FRAGMENT_SHADER_PROLOGUE}\n`\n : `${versionLine}\n`;\n\n const hookFunctionMap = normalizeHookFunctions(hookFunctions);\n\n // Add source of dependent modules in resolved order\n const hookInjections: Record<string, Injection[]> = {};\n const declInjections: Record<string, Injection[]> = {};\n const mainInjections: Record<string, Injection[]> = {};\n\n for (const key in inject) {\n const injection =\n typeof inject[key] === 'string' ? {injection: inject[key], order: 0} : inject[key];\n const match = key.match(/^(v|f)s:(#)?([\\w-]+)$/);\n if (match) {\n const hash = match[2];\n const name = match[3];\n if (hash) {\n if (name === 'decl') {\n declInjections[key] = [injection];\n } else {\n mainInjections[key] = [injection];\n }\n } else {\n hookInjections[key] = [injection];\n }\n } else {\n // Regex injection\n mainInjections[key] = [injection];\n }\n }\n\n for (const module of modules) {\n if (log) {\n module.checkDeprecations(coreSource, log);\n }\n const moduleSource = module.getModuleSource(type, glslVersion);\n // Add the module source, and a #define that declares it presence\n assembledSource += moduleSource;\n\n const injections = module.injections[type];\n for (const key in injections) {\n const match = key.match(/^(v|f)s:#([\\w-]+)$/);\n if (match) {\n const name = match[2];\n const injectionType = name === 'decl' ? declInjections : mainInjections;\n injectionType[key] = injectionType[key] || [];\n injectionType[key].push(injections[key]);\n } else {\n hookInjections[key] = hookInjections[key] || [];\n hookInjections[key].push(injections[key]);\n }\n }\n }\n\n // For injectShader\n assembledSource += INJECT_SHADER_DECLARATIONS;\n\n assembledSource = injectShader(assembledSource, type, declInjections);\n\n assembledSource += getHookFunctions(hookFunctionMap[type], hookInjections);\n\n // Add the version directive and actual source of this shader\n assembledSource += coreSource;\n\n // Apply any requested shader injections\n assembledSource = injectShader(assembledSource, type, mainInjections);\n\n assembledSource = transpileShader(\n assembledSource,\n transpileToGLSL100 ? 100 : glslVersion,\n isVertex\n );\n\n return assembledSource;\n}\n\n/**\n * Returns a combined `getUniforms` covering the options for all the modules,\n * the created function will pass on options to the inidividual `getUniforms`\n * function of each shader module and combine the results into one object that\n * can be passed to setUniforms.\n * @param modules \n * @returns \n */\nfunction assembleGetUniforms(modules: ShaderModuleInstance[]) {\n return function getUniforms(opts: Record<string, any>): Record<string, any> {\n const uniforms = {};\n for (const module of modules) {\n // `modules` is already sorted by dependency level. This guarantees that\n // modules have access to the uniforms that are generated by their dependencies.\n const moduleUniforms = module.getUniforms(opts, uniforms);\n Object.assign(uniforms, moduleUniforms);\n }\n return uniforms;\n };\n}\n\nfunction getShaderType(type: 'fs' | 'vs') {\n return `\n#define SHADER_TYPE_${SHADER_TYPE[type].toUpperCase()}\n`;\n}\n\n/**\n * Generate \"glslify-compatible\" SHADER_NAME defines\n * These are understood by the GLSL error parsing function\n * If id is provided and no SHADER_NAME constant is present in source, create one\n */\nfunction getShaderNameDefine(options: {id?: string, source: string, type: 'vs' | 'fs'}): string {\n const {id, source, type} = options;\n const injectShaderName = id && source.indexOf('SHADER_NAME') === -1;\n return injectShaderName\n ? `\n#define SHADER_NAME ${id}_${SHADER_TYPE[type]}\n\n`\n : '';\n}\n\n/** Generates application defines from an object of key value pairs */\nfunction getApplicationDefines(defines: Defines = {}): string {\n let count = 0;\n let sourceText = '';\n for (const define in defines) {\n if (count === 0) {\n sourceText += '\\n// APPLICATION DEFINES\\n';\n }\n count++;\n\n const value = defines[define];\n if (value || Number.isFinite(value)) {\n sourceText += `#define ${define.toUpperCase()} ${defines[define]}\\n`;\n }\n }\n if (count === 0) {\n sourceText += '\\n';\n }\n return sourceText;\n}\n\nfunction getHookFunctions(\n hookFunctions: Record<string, HookFunction>, hookInjections: Record<string, Injection[]>): string {\n let result = '';\n for (const hookName in hookFunctions) {\n const hookFunction = hookFunctions[hookName];\n result += `void ${hookFunction.signature} {\\n`;\n if (hookFunction.header) {\n result += ` ${hookFunction.header}`;\n }\n if (hookInjections[hookName]) {\n const injections = hookInjections[hookName];\n injections.sort((a: {order: number}, b: {order: number}): number => a.order - b.order);\n for (const injection of injections) {\n result += ` ${injection.injection}\\n`;\n }\n }\n if (hookFunction.footer) {\n result += ` ${hookFunction.footer}`;\n }\n result += '}\\n';\n }\n\n return result;\n}\n\nfunction normalizeHookFunctions(hookFunctions: (string | HookFunction)[]): {\n vs: Record<string, HookFunction>, \n fs: Record<string, HookFunction>\n} {\n const result: {vs: Record<string, any>, fs: Record<string, any>} = {\n vs: {},\n fs: {}\n };\n\n hookFunctions.forEach((hookFunction: string | HookFunction) => {\n let opts: HookFunction;\n let hook: string;\n if (typeof hookFunction !== 'string') {\n opts = hookFunction;\n hook = opts.hook;\n } else {\n opts = {} as HookFunction;\n hook = hookFunction;\n }\n hook = hook.trim();\n const [stage, signature] = hook.split(':');\n const name = hook.replace(/\\(.+/, '');\n if (stage !== 'vs' && stage !== 'fs') {\n throw new Error(stage);\n }\n result[stage][name] = Object.assign(opts, {signature});\n });\n\n return result;\n}\n"],"file":"assemble-shaders.js"}
@@ -1,3 +1,4 @@
1
+ import type { Injection } from '../shader-module/shader-module-instance';
1
2
  export declare const DECLARATION_INJECT_MARKER = "__LUMA_INJECT_DECLARATIONS__";
2
3
  /**
3
4
  // A minimal shader injection/templating system.
@@ -8,6 +9,6 @@ export declare const DECLARATION_INJECT_MARKER = "__LUMA_INJECT_DECLARATIONS__";
8
9
  * @param injectStandardStubs
9
10
  * @returns
10
11
  */
11
- export default function injectShader(source: string, type: 'vs' | 'fs', inject: Record<string, any>, injectStandardStubs?: boolean): string;
12
- export declare function combineInjects(injects: {}[]): Record<string, string>;
12
+ export default function injectShader(source: string, type: 'vs' | 'fs', inject: Record<string, Injection[]>, injectStandardStubs?: boolean): string;
13
+ export declare function combineInjects(injects: any[]): Record<string, string>;
13
14
  //# sourceMappingURL=inject-shader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inject-shader.d.ts","sourceRoot":"","sources":["../../../src/lib/shader-assembler/inject-shader.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,yBAAyB,iCAAiC,CAAC;AAExE;;;;;;;;GAQG;AAEH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,mBAAmB,UAAQ,GAC1B,MAAM,CAkER;AAGD,wBAAgB,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASpE"}
1
+ {"version":3,"file":"inject-shader.d.ts","sourceRoot":"","sources":["../../../src/lib/shader-assembler/inject-shader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,eAAO,MAAM,yBAAyB,iCAAiC,CAAC;AAExE;;;;;;;;GAQG;AAEH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EACnC,mBAAmB,UAAQ,GAC1B,MAAM,CAkER;AAGD,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASrE"}