@itwin/core-frontend 5.4.0-dev.6 → 5.4.0

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 (74) hide show
  1. package/CHANGELOG.md +70 -1
  2. package/lib/cjs/IModelApp.d.ts +12 -0
  3. package/lib/cjs/IModelApp.d.ts.map +1 -1
  4. package/lib/cjs/IModelApp.js +9 -0
  5. package/lib/cjs/IModelApp.js.map +1 -1
  6. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  7. package/lib/cjs/IModelConnection.js +6 -2
  8. package/lib/cjs/IModelConnection.js.map +1 -1
  9. package/lib/cjs/SheetViewState.d.ts +7 -5
  10. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  11. package/lib/cjs/SheetViewState.js +52 -683
  12. package/lib/cjs/SheetViewState.js.map +1 -1
  13. package/lib/cjs/internal/SheetViewAttachments.d.ts +57 -0
  14. package/lib/cjs/internal/SheetViewAttachments.d.ts.map +1 -0
  15. package/lib/cjs/internal/SheetViewAttachments.js +336 -0
  16. package/lib/cjs/internal/SheetViewAttachments.js.map +1 -0
  17. package/lib/cjs/internal/ViewAttachmentRenderer.d.ts +32 -0
  18. package/lib/cjs/internal/ViewAttachmentRenderer.d.ts.map +1 -0
  19. package/lib/cjs/internal/ViewAttachmentRenderer.js +462 -0
  20. package/lib/cjs/internal/ViewAttachmentRenderer.js.map +1 -0
  21. package/lib/cjs/internal/render/webgl/SceneCompositor.js +1 -1
  22. package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
  23. package/lib/cjs/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
  24. package/lib/cjs/internal/render/webgl/ShaderBuilder.js +8 -1
  25. package/lib/cjs/internal/render/webgl/ShaderBuilder.js.map +1 -1
  26. package/lib/cjs/properties/AngleDescription.js +4 -4
  27. package/lib/cjs/properties/AngleDescription.js.map +1 -1
  28. package/lib/cjs/properties/LengthDescription.js +9 -9
  29. package/lib/cjs/properties/LengthDescription.js.map +1 -1
  30. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  31. package/lib/cjs/quantity-formatting/QuantityFormatter.js +9 -8
  32. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  33. package/lib/cjs/tools/EventController.js +1 -1
  34. package/lib/cjs/tools/EventController.js.map +1 -1
  35. package/lib/cjs/tools/MeasureTool.js +21 -21
  36. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  37. package/lib/esm/IModelApp.d.ts +12 -0
  38. package/lib/esm/IModelApp.d.ts.map +1 -1
  39. package/lib/esm/IModelApp.js +9 -0
  40. package/lib/esm/IModelApp.js.map +1 -1
  41. package/lib/esm/IModelConnection.d.ts.map +1 -1
  42. package/lib/esm/IModelConnection.js +7 -3
  43. package/lib/esm/IModelConnection.js.map +1 -1
  44. package/lib/esm/SheetViewState.d.ts +7 -5
  45. package/lib/esm/SheetViewState.d.ts.map +1 -1
  46. package/lib/esm/SheetViewState.js +55 -686
  47. package/lib/esm/SheetViewState.js.map +1 -1
  48. package/lib/esm/internal/SheetViewAttachments.d.ts +57 -0
  49. package/lib/esm/internal/SheetViewAttachments.d.ts.map +1 -0
  50. package/lib/esm/internal/SheetViewAttachments.js +332 -0
  51. package/lib/esm/internal/SheetViewAttachments.js.map +1 -0
  52. package/lib/esm/internal/ViewAttachmentRenderer.d.ts +32 -0
  53. package/lib/esm/internal/ViewAttachmentRenderer.d.ts.map +1 -0
  54. package/lib/esm/internal/ViewAttachmentRenderer.js +459 -0
  55. package/lib/esm/internal/ViewAttachmentRenderer.js.map +1 -0
  56. package/lib/esm/internal/render/webgl/SceneCompositor.js +1 -1
  57. package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
  58. package/lib/esm/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
  59. package/lib/esm/internal/render/webgl/ShaderBuilder.js +8 -1
  60. package/lib/esm/internal/render/webgl/ShaderBuilder.js.map +1 -1
  61. package/lib/esm/properties/AngleDescription.js +4 -4
  62. package/lib/esm/properties/AngleDescription.js.map +1 -1
  63. package/lib/esm/properties/LengthDescription.js +9 -9
  64. package/lib/esm/properties/LengthDescription.js.map +1 -1
  65. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  66. package/lib/esm/quantity-formatting/QuantityFormatter.js +9 -8
  67. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  68. package/lib/esm/tools/EventController.js +1 -1
  69. package/lib/esm/tools/EventController.js.map +1 -1
  70. package/lib/esm/tools/MeasureTool.js +21 -21
  71. package/lib/esm/tools/MeasureTool.js.map +1 -1
  72. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  73. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  74. package/package.json +21 -21
@@ -1 +1 @@
1
- {"version":3,"file":"ShaderBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/ShaderBuilder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIlD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD;;GAEG;AACH,0BAAkB,YAAY;IAC5B,OAAO,IAAA,CAAE,OAAO;IAChB,GAAG,IAAA,CAAE,MAAM;IACX,KAAK,IAAA,CAAE,QAAQ;IACf,IAAI,IAAA,CAAE,OAAO;IACb,IAAI,IAAA,CAAE,OAAO;IACb,IAAI,IAAA,CAAE,OAAO;IACb,IAAI,IAAA,CAAE,OAAO;IACb,IAAI,IAAA,CAAE,OAAO;IACb,SAAS,IAAA,CAAE,YAAY;IACvB,WAAW,IAAA,CAAE,cAAc;IAC3B,IAAI,KAAA,CAAE,OAAO;IACb,KAAK,KAAA,CAAE,QAAQ;IAEf,KAAK,KAAA;CACN;AAED;;GAEG;AACH,0BAAkB,aAAa;IAC7B,MAAM,IAAA,CAAE,eAAe;IACvB,OAAO,IAAA,CAAE,UAAU;IACnB,OAAO,IAAA,CAAE,UAAU;IAEnB,KAAK,IAAA;CACN;AAED;;GAEG;AACH,0BAAkB,iBAAiB;IACjC,OAAO,IAAA,CAAE,+FAA+F;IACxG,GAAG,IAAA,CAAE,OAAO;IACZ,MAAM,IAAA,CAAE,UAAU;IAClB,IAAI,IAAA,CAAE,QAAQ;IAEd,KAAK,IAAA;CACN;AAgDD;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;AAE/D;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAqB;IAClD,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,KAAK,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,SAAgB,KAAK,EAAE,aAAa,CAAC;IACrC,SAAgB,SAAS,EAAE,iBAAiB,CAAC;IAC7C,SAAgB,OAAO,EAAE,OAAO,CAAS;IACzC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO;WAWO,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,kBAAkB,EAAE,SAAS,GAAE,iBAA6C,GAAG,cAAc;WAIzK,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,kBAAkB,EAAE,SAAS,GAAE,iBAA6C,GAAG,cAAc;WAI9L,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe;IAIrG,IAAW,UAAU,IAAI,OAAO,CAA2C;IACpE,UAAU,CAAC,IAAI,EAAE,aAAa;IAKrC,IAAW,QAAQ,IAAI,MAAM,CAA4C;IAClE,YAAY,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM;IACpD,IAAW,aAAa,IAAI,MAAM,CAAsD;IAExF,8DAA8D;IACvD,gBAAgB,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM;CA2BzD;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,CAA+B;IAEhE,wDAAwD;IACjD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAErD,yGAAyG;IAClG,WAAW,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO;IAYvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,GAAE,iBAA6C;IAIlI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB;IAI7F,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO;IAIrD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe;IAIpF,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM;IAI3D,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIrD,oFAAoF;IAC7E,sBAAsB,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM;IAUzG,wEAAwE;IACjE,iBAAiB,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM;IAgBzD;;;OAGG;IACI,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI;IAS3E,IAAW,MAAM,IAAI,MAAM,CAA8B;IAEzD,OAAO,CAAC,QAAQ;IAaT,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IA8ElD,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;CAkD5D;AAED;;GAEG;AACH,qBAAa,aAAa;IACjB,MAAM,EAAE,MAAM,CAAM;IAGpB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAGvB,OAAO,IAAI,IAAI;IAGf,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKlC;;;;;;;;;;;OAWG;WACW,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM;IAQ1F,oHAAoH;IAC7G,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAErE,2HAA2H;IACpH,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;CAC7C;AAED,gBAAgB;AAChB,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,iKAAiK;IACjK,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACtC;AAED;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,eAAe;IAChD,SAAS,CAAC,WAAW,yBAAmC;IACxD,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IACpC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,CAAM;IACrC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;IACjC,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAM;IACtC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAM;IACzB,aAAa,EAAE,MAAM,CAAM;IAClC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAC9C,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,CAAuB;IAExD,IAAW,qBAAqB,IAAI,OAAO,CAE1C;IAEM,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKhD,SAAS,aAAa,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB;IAUtE,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM9D,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM;IAKvC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKlD,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IASrE,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAU/D,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKnC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAW5C,eAAe,IAAI,IAAI;IAKvB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQvD,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,SAAS,EAAE,cAAc,EAAE,OAAO,GAAG,aAAa;IAmDxH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;CAW/C;AAED;;GAEG;AACH,0BAAkB,qBAAqB;IAIrC,wBAAwB,IAAA;IAGxB,iBAAiB,IAAA;IAGjB,oBAAoB,IAAA;IAGpB,uBAAuB,IAAA;IAGvB,eAAe,IAAA;IAGf,gBAAgB,IAAA;IAGhB,kBAAkB,IAAA;IAGlB,iBAAiB,IAAA;IAGjB,cAAc,IAAA;IAKd,eAAe,IAAA;IAGf,eAAe,KAAA;IAGf,oCAAoC,KAAA;IAGpC,mBAAmB,KAAA;IAGnB,gBAAgB,KAAA;IAEhB,KAAK,KAAA;CACN;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,OAAO,CAAC,gBAAgB,CAAiC;IAEzD,OAAO,CAAC,YAAY;gBAED,KAAK,GAAE,kBAAuB;IAgBjD,IAAW,eAAe,IAAI,OAAO,CAEpC;IAED,IAAW,YAAY,IAAI,YAAY,CAGtC;IAEM,GAAG,CAAC,EAAE,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS;IAClD,GAAG,CAAC,EAAE,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM;IAChD,KAAK,CAAC,EAAE,EAAE,qBAAqB;IAE/B,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAK/E,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM;IA8G5D,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI;CAIhD;AAED;;GAEG;AACH,0BAAkB,uBAAuB;IAGvC,oBAAoB,IAAA;IAGpB,gBAAgB,IAAA;IAGhB,sBAAsB,IAAA;IAGtB,iBAAiB,IAAA;IAIjB,eAAe,IAAA;IAGf,cAAc,IAAA;IAGd,eAAe,IAAA;IAGf,oBAAoB,IAAA;IAGpB,aAAa,IAAA;IAEb,mBAAmB,IAAA;IAGnB,aAAa,KAAA;IAGb,aAAa,KAAA;IAGb,UAAU,KAAA;IAGV,qBAAqB,KAAA;IAGrB,YAAY,KAAA;IAGZ,mBAAmB,KAAA;IAGnB,aAAa,KAAA;IAGb,eAAe,KAAA;IAGf,cAAc,KAAA;IAGd,iBAAiB,KAAA;IAGjB,aAAa,KAAA;IAGb,aAAa,KAAA;IAGb,mBAAmB,KAAA;IAGnB,0BAA0B,KAAA;IAG1B,cAAc,KAAA;IACd,KAAK,KAAA;CACN;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;IAC/C,wBAAwB,UAAS;gBAErB,KAAK,GAAE,kBAAuB;IAK1C,GAAG,CAAC,EAAE,EAAE,uBAAuB,GAAG,MAAM,GAAG,SAAS;IACpD,GAAG,CAAC,EAAE,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM;IAClD,KAAK,CAAC,EAAE,EAAE,uBAAuB;IAEjC,uBAAuB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAMxC,WAAW,IAAI,MAAM;IAkL5B,OAAO,CAAC,YAAY;IAIb,QAAQ,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI;CAIlD;AAED,gBAAgB;AAChB,0BAAkB,UAAU;IAC1B,QAAQ,IAAS;IACjB,MAAM,IAAS;IACf,IAAI,IAAoB;CACzB;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB,SAAgB,IAAI,EAAE,mBAAmB,CAAC;IAC1C,SAAgB,IAAI,EAAE,qBAAqB,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAgC;gBAEvC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,KAAK,GAAE,kBAAuB;IAO1F,OAAO,CAAC,WAAW;IAUZ,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,GAAE,UAA4B;IAG7G,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,GAAE,UAA4B;IAGlI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY;IAG3C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,GAAE,UAA4B,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe;IAIzH,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM;IAIpF,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAO/F,kCAAkC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAM7G,kGAAkG;IAC3F,YAAY,CAAC,EAAE,EAAE,sBAAsB,GAAG,aAAa;IAmCvD,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKrD,mDAAmD;IAC5C,KAAK,IAAI,cAAc;CAM/B"}
1
+ {"version":3,"file":"ShaderBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/ShaderBuilder.ts"],"names":[],"mappings":"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"}
@@ -614,12 +614,19 @@ class VertexShaderBuilder extends ShaderBuilder {
614
614
  }
615
615
  main.addline(" v_color = baseColor;");
616
616
  }
617
+ /*
618
+ There is currently a driver glitch which is known to affect much of the Intel Ultra 7 family of chipsets when using Intel driver from some point after driver version 32.0.101.6078 (9/13/2024).
619
+
620
+ The graphics driver will glitch when discarding triangles using the vertex shader (setting all vertices to the same value) if gl_Position was not initialized to a valid position beforehand.
621
+
622
+ The workaround for this bug involves ensuring that gl_Position is initialized to a valid position before attempting a discard using a degenerate triangle.
623
+ */
624
+ main.addline(" gl_Position = computePosition(rawPosition);");
617
625
  const checkForDiscard = this.get(9 /* VertexShaderComponent.CheckForDiscard */);
618
626
  if (undefined !== checkForDiscard) {
619
627
  prelude.addFunction("bool checkForDiscard()", checkForDiscard);
620
628
  main.add(Vertex_1.vertexDiscard);
621
629
  }
622
- main.addline(" gl_Position = computePosition(rawPosition);");
623
630
  const finalizePos = this.get(13 /* VertexShaderComponent.FinalizePosition */);
624
631
  if (undefined !== finalizePos) {
625
632
  prelude.addFunction("vec4 finalizePosition(vec4 pos)", finalizePos);
@@ -1 +1 @@
1
- {"version":3,"file":"ShaderBuilder.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/ShaderBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeDetails } from \"./AttributeMap\";\r\nimport { addInstancedModelMatrixRTC } from \"./glsl/Instancing\";\r\nimport { volClassOpaqueColor } from \"./glsl/PlanarClassification\";\r\nimport { addPosition, earlyVertexDiscard, lateVertexDiscard, vertexDiscard } from \"./glsl/Vertex\";\r\nimport { ShaderProgram } from \"./ShaderProgram\";\r\nimport { PositionType } from \"./TechniqueFlags\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Describes the data type of a shader program variable.\r\n * @internal\r\n */\r\nexport const enum VariableType {\r\n Boolean, // bool\r\n Int, // int\r\n Float, // float\r\n Vec2, // vec2\r\n Vec3, // vec3\r\n Vec4, // vec4\r\n Mat3, // mat3\r\n Mat4, // mat4\r\n Sampler2D, // sampler2D\r\n SamplerCube, // samplerCube\r\n Uint, // uint\r\n BVec2, // bvec2\r\n\r\n COUNT,\r\n}\r\n\r\n/** Describes the qualifier associated with a shader program variable.\r\n * @internal\r\n */\r\nexport const enum VariableScope {\r\n Global, // no qualifier\r\n Varying, // varying\r\n Uniform, // uniform\r\n\r\n COUNT,\r\n}\r\n\r\n/** Describes the declared or undeclared precision of a shader program variable.\r\n * @internal\r\n */\r\nexport const enum VariablePrecision {\r\n Default, // undeclared precision - variable uses the explicit or implicit precision default for its type\r\n Low, // lowp\r\n Medium, // mediump\r\n High, // highp\r\n\r\n COUNT,\r\n}\r\n\r\n/** @internal */\r\nnamespace Convert {\r\n export function typeToString(type: VariableType): string {\r\n switch (type) {\r\n case VariableType.Boolean: return \"bool\";\r\n case VariableType.Int: return \"int\";\r\n case VariableType.Float: return \"float\";\r\n case VariableType.Vec2: return \"vec2\";\r\n case VariableType.Vec3: return \"vec3\";\r\n case VariableType.Vec4: return \"vec4\";\r\n case VariableType.Mat3: return \"mat3\";\r\n case VariableType.Mat4: return \"mat4\";\r\n case VariableType.Sampler2D: return \"sampler2D\";\r\n case VariableType.SamplerCube: return \"samplerCube\";\r\n case VariableType.Uint: return \"uint\";\r\n case VariableType.BVec2: return \"bvec2\";\r\n default:\r\n assert(false);\r\n return \"undefined\";\r\n }\r\n }\r\n\r\n export function scopeToString(scope: VariableScope, isVertexShader: boolean): string {\r\n switch (scope) {\r\n case VariableScope.Global: return \"\";\r\n case VariableScope.Varying: return (isVertexShader ? \"out\" : \"in\");\r\n case VariableScope.Uniform: return \"uniform\";\r\n default:\r\n assert(false);\r\n return \"undefined\";\r\n }\r\n }\r\n\r\n export function precisionToString(precision: VariablePrecision): string {\r\n switch (precision) {\r\n case VariablePrecision.Default: return \"\";\r\n case VariablePrecision.Low: return \"lowp\";\r\n case VariablePrecision.Medium: return \"mediump\";\r\n case VariablePrecision.High: return \"highp\";\r\n default:\r\n assert(false);\r\n return \"undefined\";\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Function invoked by ShaderVariable::AddBinding() to bind the variable to the compiled program.\r\n * The implementation should call ShaderProgram::AddShaderUniform or ShaderProgram::AddGraphicUniform/Attribute to register a function\r\n * which can be used to bind the value of the variable when program is used.\r\n * @internal\r\n */\r\nexport type AddVariableBinding = (prog: ShaderProgram) => void;\r\n\r\n/** Represents a variable within a fragment or vertex shader.\r\n * @internal\r\n */\r\nexport class ShaderVariable {\r\n private readonly _addBinding?: AddVariableBinding;\r\n public readonly name: string;\r\n public readonly value?: string; // for global variables only\r\n public readonly type: VariableType;\r\n public readonly scope: VariableScope;\r\n public readonly precision: VariablePrecision;\r\n public readonly isConst: boolean = false; // for global variables only\r\n public readonly length: number; // for uniform arrays only\r\n\r\n private constructor(name: string, type: VariableType, scope: VariableScope, precision: VariablePrecision, isConst: boolean, addBinding?: AddVariableBinding, value?: string, length: number = 0) {\r\n this._addBinding = addBinding;\r\n this.name = name;\r\n this.value = value;\r\n this.type = type;\r\n this.scope = scope;\r\n this.precision = precision;\r\n this.isConst = isConst;\r\n this.length = length;\r\n }\r\n\r\n public static create(name: string, type: VariableType, scope: VariableScope, addBinding?: AddVariableBinding, precision: VariablePrecision = VariablePrecision.Default): ShaderVariable {\r\n return new ShaderVariable(name, type, scope, precision, false, addBinding, undefined);\r\n }\r\n\r\n public static createArray(name: string, type: VariableType, length: number, scope: VariableScope, addBinding?: AddVariableBinding, precision: VariablePrecision = VariablePrecision.Default): ShaderVariable {\r\n return new ShaderVariable(name, type, scope, precision, false, addBinding, undefined, length);\r\n }\r\n\r\n public static createGlobal(name: string, type: VariableType, value?: string, isConst: boolean = false) {\r\n return new ShaderVariable(name, type, VariableScope.Global, VariablePrecision.Default, isConst, undefined, value);\r\n }\r\n\r\n public get hasBinding(): boolean { return undefined !== this._addBinding; }\r\n public addBinding(prog: ShaderProgram) {\r\n if (undefined !== this._addBinding)\r\n this._addBinding(prog);\r\n }\r\n\r\n public get typeName(): string { return Convert.typeToString(this.type); }\r\n public getScopeName(isVertexShader: boolean): string { return Convert.scopeToString(this.scope, isVertexShader); }\r\n public get precisionName(): string { return Convert.precisionToString(this.precision); }\r\n\r\n /** Constructs the single-line declaration of this variable */\r\n public buildDeclaration(isVertexShader: boolean): string {\r\n const parts = new Array<string>();\r\n if (this.isConst)\r\n parts.push(\"const\");\r\n\r\n const scopeName = this.getScopeName(isVertexShader);\r\n if (0 < scopeName.length)\r\n parts.push(scopeName);\r\n\r\n const precisionName = this.precisionName;\r\n if (0 < precisionName.length)\r\n parts.push(precisionName);\r\n\r\n parts.push(this.typeName);\r\n\r\n if (this.length > 0)\r\n parts.push(`${this.name}[${this.length.toFixed(0)}]`);\r\n else\r\n parts.push(this.name);\r\n\r\n if (undefined !== this.value && 0 < this.value.length) {\r\n parts.push(\"=\");\r\n parts.push(this.value);\r\n }\r\n\r\n return `${parts.join(\" \")};`;\r\n }\r\n}\r\n\r\n/**\r\n * Represents the set of variables defined and used within a fragment or vertex shader.\r\n * If the same variable is used in both the fragment and vertex shader (e.g., a varying variable), it should be defined in both ShaderBuilders' ShaderVariables object.\r\n * @internal\r\n */\r\nexport class ShaderVariables {\r\n protected _list: ShaderVariable[] = new Array<ShaderVariable>();\r\n\r\n /** Find an existing variable with the specified name */\r\n public find(name: string): ShaderVariable | undefined { return this._list.find((v: ShaderVariable) => v.name === name); }\r\n\r\n /** Add a new variable, if a variable with the same name does not already exist. return true if added */\r\n public addVariable(v: ShaderVariable): boolean {\r\n const found = this.find(v.name);\r\n if (undefined !== found) {\r\n assert(found.type === v.type);\r\n // assume same binding etc...\r\n return false;\r\n } else {\r\n this._list.push(v);\r\n return true;\r\n }\r\n }\r\n\r\n public addUniform(name: string, type: VariableType, binding: AddVariableBinding, precision: VariablePrecision = VariablePrecision.Default) {\r\n this.addVariable(ShaderVariable.create(name, type, VariableScope.Uniform, binding, precision));\r\n }\r\n\r\n public addUniformArray(name: string, type: VariableType, length: number, binding: AddVariableBinding) {\r\n this.addVariable(ShaderVariable.createArray(name, type, length, VariableScope.Uniform, binding));\r\n }\r\n\r\n public addVarying(name: string, type: VariableType): boolean {\r\n return this.addVariable(ShaderVariable.create(name, type, VariableScope.Varying));\r\n }\r\n\r\n public addGlobal(name: string, type: VariableType, value?: string, isConst: boolean = false) {\r\n this.addVariable(ShaderVariable.createGlobal(name, type, value, isConst));\r\n }\r\n\r\n public addConstant(name: string, type: VariableType, value: string) {\r\n this.addGlobal(name, type, value, true);\r\n }\r\n\r\n public addBitFlagConstant(name: string, value: number) {\r\n this.addGlobal(name, VariableType.Uint, `${(2 ** value).toFixed(0)}u`, true);\r\n }\r\n\r\n /** Constructs the lines of glsl code declaring the variables of a certain scope. */\r\n public buildScopeDeclarations(isVertexShader: boolean, scope: VariableScope, constants?: boolean): string {\r\n let decls = \"\";\r\n for (const v of this._list) {\r\n if (scope === v.scope && (undefined === constants ? true : v.isConst === constants))\r\n decls += `${v.buildDeclaration(isVertexShader)}\\n`;\r\n }\r\n\r\n return decls;\r\n }\r\n\r\n /** Constructs the lines of glsl code declaring all of the variables. */\r\n public buildDeclarations(isVertexShader: boolean): string {\r\n let decls = \"\";\r\n if (isVertexShader) {\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Uniform);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Global, true);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Global, false);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Varying);\r\n } else {\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Varying);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Uniform);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Global, true);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Global, false);\r\n }\r\n return decls;\r\n }\r\n\r\n /**\r\n * For every uniform and attribute variable not contained in the optional 'predefined' list, invokes the associated binding function\r\n * to add the corresponding Uniform or Attribute object to the ShaderProgram.\r\n */\r\n public addBindings(prog: ShaderProgram, predefined?: ShaderVariables): void {\r\n for (const v of this._list) {\r\n // Some variables exist in both frag and vert shaders - only add them to the program once.\r\n if (v.hasBinding && (undefined === predefined || undefined === predefined.find(v.name))) {\r\n v.addBinding(prog);\r\n }\r\n }\r\n }\r\n\r\n public get length(): number { return this._list.length; }\r\n\r\n private findSlot(variableSize: number, loopSize: number, registers: number[]): number {\r\n // Find the first available slot into which to insert this variable\r\n for (let i = 0; i < loopSize; i++) {\r\n const newSize = registers[i] + variableSize;\r\n if (newSize <= 4) {\r\n registers[i] = newSize;\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n // Return string of varying types with their theoretical slot numbers\r\n public checkMaxVaryingVectors(fragSource: string): string {\r\n // Varyings go into a matrix of 4 columns and GL_MAX_VARYING_VECTORS rows of floats.\r\n // The packing rules are defined by the standard. Specifically each row can contain one of:\r\n // vec4\r\n // vec3 (+ float)\r\n // vec2 (+ vec2)\r\n // vec2 (+ float (+ float))\r\n // float (+ float (+ float (+ float)))\r\n // Varyings are packed in order of size from largest to smallest\r\n const loopSize = 64;\r\n const registers = Array(loopSize + 1).fill(0);\r\n let outStr = \"\";\r\n let slot = 0;\r\n\r\n const varyings = this._list.filter((variable) => VariableScope.Varying === variable.scope);\r\n // Add in any built in vars that count as varyings if they are used\r\n if (fragSource.includes(\"gl_FragCoord\")) {\r\n varyings.push(ShaderVariable.create(\"gl_FragCoord\", VariableType.Vec4, VariableScope.Varying));\r\n }\r\n if (fragSource.includes(\"gl_PointCoord\")) {\r\n varyings.push(ShaderVariable.create(\"gl_PointCoord\", VariableType.Vec2, VariableScope.Varying));\r\n }\r\n if (fragSource.includes(\"gl_FrontFacing\")) {\r\n varyings.push(ShaderVariable.create(\"gl_FrontFacing\", VariableType.Boolean, VariableScope.Varying));\r\n }\r\n // Need to process in size order (largest first)\r\n varyings.sort((a, b) => b.type - a.type); // this is good enough to sort by\r\n\r\n for (const variable of varyings) {\r\n let variableSize = 0;\r\n switch (variable.type) {\r\n case VariableType.Boolean:\r\n case VariableType.Int:\r\n case VariableType.Float:\r\n variableSize = 1;\r\n break;\r\n case VariableType.Vec2:\r\n case VariableType.BVec2:\r\n variableSize = 2;\r\n break;\r\n case VariableType.Vec3:\r\n variableSize = 3;\r\n break;\r\n case VariableType.Vec4:\r\n variableSize = 4;\r\n break;\r\n default:\r\n assert(false, \"Invalid varying variable type\");\r\n continue;\r\n }\r\n slot = this.findSlot(variableSize, loopSize, registers);\r\n outStr += `// varying slot ${slot} ${Convert.typeToString(variable.type)} ${variable.name}\\n`;\r\n }\r\n const slotsUsed = registers.indexOf(0);\r\n registers.length = slotsUsed;\r\n outStr += `// Slots used: ${slotsUsed} [${registers.toString()}]\\n`;\r\n\r\n // debug output modes\r\n const outputAll = true; // false just outputs varyings that use more than 8\r\n if (outputAll) {\r\n return outStr;\r\n } else {\r\n if (slotsUsed > 8)\r\n return outStr;\r\n else\r\n return \"\";\r\n }\r\n }\r\n\r\n // Return the number of varying vectors used by the shader.\r\n // Varyings go into a matrix of 4 columns and GL_MAX_VARYING_VECTORS rows of floats.\r\n // The packing rules are defined by the standard. Specifically each row can contain one of:\r\n // vec4\r\n // vec3 (+ float)\r\n // vec2 (+ vec2)\r\n // vec2 (+ float (+ float))\r\n // float (+ float (+ float (+ float)))\r\n // Varyings are packed in order of size from largest to smallest\r\n public computeNumVaryingVectors(fragSource: string): number {\r\n const loopSize = 64;\r\n const registers = Array(loopSize + 1).fill(0);\r\n\r\n const varyings = this._list.filter((variable) => VariableScope.Varying === variable.scope);\r\n // Add in any built in vars that count as varyings if they are used\r\n if (fragSource.includes(\"gl_FragCoord\")) {\r\n varyings.push(ShaderVariable.create(\"gl_FragCoord\", VariableType.Vec4, VariableScope.Varying));\r\n }\r\n if (fragSource.includes(\"gl_PointCoord\")) {\r\n varyings.push(ShaderVariable.create(\"gl_PointCoord\", VariableType.Vec2, VariableScope.Varying));\r\n }\r\n if (fragSource.includes(\"gl_FrontFacing\")) {\r\n varyings.push(ShaderVariable.create(\"gl_FrontFacing\", VariableType.Boolean, VariableScope.Varying));\r\n }\r\n // Need to process in size order (largest first)\r\n varyings.sort((a, b) => b.type - a.type); // this is good enough to sort by\r\n\r\n for (const variable of varyings) {\r\n if (VariableScope.Varying !== variable.scope)\r\n continue;\r\n\r\n let variableSize = 0;\r\n switch (variable.type) {\r\n case VariableType.Boolean:\r\n case VariableType.Int:\r\n case VariableType.Float:\r\n variableSize = 1;\r\n break;\r\n case VariableType.Vec2:\r\n case VariableType.BVec2:\r\n variableSize = 2;\r\n break;\r\n case VariableType.Vec3:\r\n variableSize = 3;\r\n break;\r\n case VariableType.Vec4:\r\n variableSize = 4;\r\n break;\r\n default:\r\n assert(false, \"Invalid varying variable type\");\r\n continue;\r\n }\r\n\r\n this.findSlot(variableSize, loopSize, registers);\r\n }\r\n\r\n const slotsUsed = registers.indexOf(0);\r\n return slotsUsed;\r\n }\r\n}\r\n\r\n/** Convenience API for assembling glsl source code.\r\n * @internal\r\n */\r\nexport class SourceBuilder {\r\n public source: string = \"\";\r\n\r\n /* Append the specified string to the glsl source */\r\n public add(what: string): void { this.source += what; }\r\n\r\n /* Append a new-line to the glsl source */\r\n public newline(): void { this.add(\"\\n\"); }\r\n\r\n /* Append the specified string to the glsl source, followed by a new-line */\r\n public addline(what: string): void {\r\n this.add(what);\r\n this.newline();\r\n }\r\n\r\n /**\r\n * Construct a function definition given the function signature and body. For example:\r\n * buildFunctionDefinition(\"float average(float a, float b)\", \"\\n return (a + b) / 2.0;\\n\");\r\n * will produce:\r\n * \"float average(float a, float b) {\r\n * return (a + b) / 2.0;\r\n * }\"\r\n * For an inline function:\r\n * buildFunctionDefinition(\"float average(float a, float b)\", \"return (a + b) / 2.0;\");\r\n * will produce:\r\n * \"float average(float a, float b) { return (a + b) / 2.0; }\"\r\n */\r\n public static buildFunctionDefinition(declaration: string, implementation: string): string {\r\n // If implementation does not start with a newline then assume it is an inline function & add spaces between braces.\r\n if (\"\\n\" === implementation.charAt(0))\r\n return `${declaration} {${implementation}}\\n\\n`;\r\n else\r\n return `${declaration} { ${implementation} }\\n\\n`;\r\n }\r\n\r\n /** Constructs a function definition as described by buildFunctionDefinition() and appends it to the glsl source. */\r\n public addFunction(declaration: string, implementation: string): void { this.add(SourceBuilder.buildFunctionDefinition(declaration, implementation)); }\r\n\r\n /** Constructs the definition of the main() function using the supplied function body and appends it to the glsl source. */\r\n public addMain(implementation: string): void { this.addFunction(\"void main()\", implementation); }\r\n}\r\n\r\n/** @internal */\r\nexport interface ShaderBuilderFlags {\r\n /** If defined and true, the geometry is instanced. */\r\n readonly instanced?: boolean;\r\n /** If defined, indicates the vertex data comes from a texture and specifies whether the positions are quantized 16-bit integers or unquantized 32-bit floats. */\r\n readonly positionType?: PositionType;\r\n}\r\n\r\n/**\r\n * Represents a fragment or vertex shader under construction. The shader consists of a set of defined variables,\r\n * plus a set of code snippets which can be concatenated together to form the shader source.\r\n * @internal\r\n */\r\nexport class ShaderBuilder extends ShaderVariables {\r\n protected _components = new Array<string | undefined>();\r\n protected _functions: string[] = [];\r\n protected _extensions: string[] = [];\r\n protected _macros: string[] = [];\r\n protected _fragOutputs: string[] = [];\r\n protected _version: string = \"\";\r\n public headerComment: string = \"\";\r\n protected readonly _flags: ShaderBuilderFlags;\r\n protected _initializers: string[] = new Array<string>();\r\n\r\n public get usesInstancedGeometry(): boolean {\r\n return !!this._flags.instanced;\r\n }\r\n\r\n public addInitializer(initializer: string): void {\r\n if (-1 === this._initializers.indexOf(initializer))\r\n this._initializers.push(initializer);\r\n }\r\n\r\n protected constructor(maxComponents: number, flags: ShaderBuilderFlags) {\r\n super();\r\n this._components.length = maxComponents;\r\n this._flags = flags;\r\n this._version = \"#version 300 es\";\r\n this.addDefine(\"TEXTURE\", \"texture\");\r\n this.addDefine(\"TEXTURE_CUBE\", \"texture\");\r\n this.addDefine(\"TEXTURE_PROJ\", \"textureProj\");\r\n }\r\n\r\n protected addComponent(index: number, component: string): void {\r\n assert(index < this._components.length);\r\n\r\n // assume if caller is replacing an existing component, they know what they're doing...\r\n this._components[index] = component;\r\n }\r\n protected removeComponent(index: number) {\r\n assert(index < this._components.length);\r\n this._components[index] = undefined;\r\n }\r\n\r\n protected getComponent(index: number): string | undefined {\r\n assert(index < this._components.length);\r\n return this._components[index];\r\n }\r\n\r\n public addFunction(declarationOrFull: string, implementation?: string): void {\r\n let def = declarationOrFull;\r\n if (undefined !== implementation)\r\n def = SourceBuilder.buildFunctionDefinition(`\\n${declarationOrFull}`, implementation);\r\n\r\n if (undefined === this.findFunction(def))\r\n this._functions.push(def);\r\n }\r\n\r\n public replaceFunction(existing: string, replacement: string): boolean {\r\n const index = this._functions.indexOf(existing);\r\n if (-1 !== index) {\r\n this._functions[index] = replacement;\r\n }\r\n\r\n assert(-1 !== index);\r\n return -1 !== index;\r\n }\r\n\r\n public findFunction(func: string): string | undefined {\r\n return this._functions.find((f: string | undefined) => f === func);\r\n }\r\n\r\n public addExtension(extName: string): void {\r\n if (-1 === this._extensions.indexOf(extName))\r\n this._extensions.push(extName);\r\n }\r\n\r\n public addMacro(macro: string): void {\r\n if (-1 === this._macros.indexOf(macro))\r\n this._macros.push(macro);\r\n }\r\n\r\n public addDefine(name: string, value: string): void {\r\n const defineName = `#define ${name} `;\r\n const macro = defineName + value;\r\n\r\n const index = this._macros.findIndex((x) => x.startsWith(defineName));\r\n if (-1 !== index)\r\n this._macros[index] = macro;\r\n else\r\n this._macros.push(defineName + value);\r\n }\r\n\r\n public clearFragOutput(): void {\r\n while (this._fragOutputs.length > 0)\r\n this._fragOutputs.pop();\r\n }\r\n\r\n public addFragOutput(name: string, value: number): void {\r\n if (-1 === value) {\r\n this._fragOutputs.push(\"out vec4 FragColor;\");\r\n return;\r\n }\r\n this._fragOutputs.push(`layout(location = ${value}) out vec4 ${name};`);\r\n }\r\n\r\n protected buildPreludeCommon(attrMap: Map<string, AttributeDetails> | undefined, isVertexShader: boolean): SourceBuilder {\r\n const src = new SourceBuilder();\r\n\r\n // Version number (must be first thing for GLSL 300)\r\n src.addline(this._version);\r\n\r\n // Header comment\r\n src.newline();\r\n if (\"\" !== this.headerComment) {\r\n src.addline(this.headerComment);\r\n src.newline();\r\n }\r\n\r\n // Macros\r\n for (const macro of this._macros)\r\n src.addline(macro);\r\n\r\n // Extensions\r\n for (const ext of this._extensions)\r\n src.addline(`#extension ${ext} : enable`);\r\n\r\n // Default precisions\r\n src.addline(\"precision highp float;\");\r\n src.addline(\"precision highp int;\");\r\n src.newline();\r\n\r\n // Attribute declarations\r\n if (attrMap !== undefined) {\r\n attrMap.forEach((attr: AttributeDetails, key: string) => {\r\n src.addline(`in ${Convert.typeToString(attr.type)} ${key};`);\r\n });\r\n }\r\n\r\n // Variable declarations\r\n src.add(this.buildDeclarations(isVertexShader));\r\n\r\n // Layouts\r\n for (const layout of this._fragOutputs)\r\n src.addline(layout);\r\n\r\n // Functions\r\n for (const func of this._functions) {\r\n src.add(func);\r\n }\r\n\r\n if (!src.source.endsWith(\"\\n\\n\"))\r\n src.newline();\r\n\r\n return src;\r\n }\r\n\r\n protected copyCommon(src: ShaderBuilder): void {\r\n this._version = src._version;\r\n this.headerComment = src.headerComment;\r\n this._initializers = [...src._initializers];\r\n this._components = [...src._components];\r\n this._functions = [...src._functions];\r\n this._extensions = [...src._extensions];\r\n this._list = [...src._list];\r\n this._macros = [...src._macros];\r\n this._fragOutputs = [...src._fragOutputs];\r\n }\r\n}\r\n\r\n/** Describes the optional and required components which can be assembled into complete\r\n * @internal\r\n */\r\nexport const enum VertexShaderComponent {\r\n // (Optional) Compute the quantized position. By default this simply returns the `a_pos` attribute.\r\n // This runs before any initializers.\r\n // vec3 computeQuantizedPosition()\r\n ComputeQuantizedPosition,\r\n // (Optional) Adjust the result of computeVertexPosition().\r\n // vec4 adjustRawPosition(vec4 rawPosition)\r\n AdjustRawPosition,\r\n // (Optional) Return true to discard this vertex before evaluating feature overrides etc, given the model-space position.\r\n // bool checkForEarlyDiscard(vec4 rawPos)\r\n CheckForEarlyDiscard,\r\n // (Optional) Compute feature overrides like visibility, rgb, transparency, line weight.\r\n // void computeFeatureOverrides()\r\n ComputeFeatureOverrides,\r\n // (Optional) Compute material parameters.\r\n // void computeMaterial()\r\n ComputeMaterial,\r\n // (Optional) Compute the vertex's base color. Requires the program to have a `varying vec4 v_color`.\r\n // vec4 computeBaseColor()\r\n ComputeBaseColor,\r\n // (Optional - does nothing if ComputeBaseColor not specified) Apply material overrides to vertex color\r\n // vec4 applyMaterialColor(vec4 baseColor)\r\n ApplyMaterialColor,\r\n // (Optional - does nothing if ComputeBaseColor not specified) Apply feature overrides to vertex color\r\n // vec4 applyFeatureColor(vec4 baseColor)\r\n ApplyFeatureColor,\r\n // (Optional - does nothing if ComputeBaseColor not specified)) Adjust base color for contrast\r\n // vec4 adjustContrast(vec4 baseColor)\r\n AdjustContrast,\r\n // (Optional - does nothing if ComputeBaseColor not specified) Return true if this vertex should be \"discarded\" (is not visible)\r\n // bool checkForDiscard()\r\n // If this returns true, gl_Position will be set to 0; presumably related vertices will also do so, resulting in a degenerate triangle.\r\n // If this returns true, no further processing will be performed.\r\n CheckForDiscard,\r\n // (Required) Return this vertex's position in clip space.\r\n // vec4 computePosition(vec4 rawPos)\r\n ComputePosition,\r\n // (Optional) Compute all atmospheric scattering values in one pass and assign them to varyings (For Skybox and RealityMesh only)\r\n // void computeAtmosphericScatteringVaryings\r\n ComputeAtmosphericScatteringVaryings,\r\n // (Optional) After all output (varying) values have been computed, return true if this vertex should be discarded.\r\n // bool checkForLateDiscard()\r\n CheckForLateDiscard,\r\n // (Optional) Adjust the final position\r\n // vec4 adjustPosition(vec4 pos)\r\n FinalizePosition,\r\n\r\n COUNT,\r\n}\r\n\r\n/** Assembles the source code for a vertex shader from a set of modular components.\r\n * @internal\r\n */\r\nexport class VertexShaderBuilder extends ShaderBuilder {\r\n private _computedVarying: string[] = new Array<string>();\r\n\r\n private buildPrelude(attrMap?: Map<string, AttributeDetails>): SourceBuilder { return this.buildPreludeCommon(attrMap, true); }\r\n\r\n public constructor(flags: ShaderBuilderFlags = {}) {\r\n super(VertexShaderComponent.COUNT, flags);\r\n\r\n this.addDefine(\"MAT_NORM\", \"g_nmx\");\r\n if (this.usesInstancedGeometry) {\r\n addInstancedModelMatrixRTC(this);\r\n this.addDefine(\"MAT_MV\", \"g_mv\");\r\n this.addDefine(\"MAT_MVP\", \"g_mvp\");\r\n } else {\r\n this.addDefine(\"MAT_MV\", \"u_mv\");\r\n this.addDefine(\"MAT_MVP\", \"u_mvp\");\r\n }\r\n\r\n addPosition(this, this.usesVertexTable);\r\n }\r\n\r\n public get usesVertexTable(): boolean {\r\n return undefined !== this._flags.positionType;\r\n }\r\n\r\n public get positionType(): PositionType {\r\n assert(undefined !== this._flags.positionType);\r\n return this._flags.positionType;\r\n }\r\n\r\n public get(id: VertexShaderComponent): string | undefined { return this.getComponent(id); }\r\n public set(id: VertexShaderComponent, component: string) { this.addComponent(id, component); }\r\n public unset(id: VertexShaderComponent) { this.removeComponent(id); }\r\n\r\n public addComputedVarying(name: string, type: VariableType, computation: string): void {\r\n this.addVarying(name, type);\r\n this._computedVarying.push(computation);\r\n }\r\n\r\n public buildSource(attrMap?: Map<string, AttributeDetails>): string {\r\n const prelude = this.buildPrelude(attrMap);\r\n const main = new SourceBuilder();\r\n main.newline();\r\n\r\n const computePosition = this.get(VertexShaderComponent.ComputePosition);\r\n assert(undefined !== computePosition);\r\n if (undefined !== computePosition) {\r\n prelude.addFunction(\"vec4 computePosition(vec4 rawPos)\", computePosition);\r\n }\r\n\r\n const computeQPos = this.get(VertexShaderComponent.ComputeQuantizedPosition) ?? \"return a_pos;\";\r\n prelude.addFunction(\"vec3 computeQuantizedPosition()\", computeQPos);\r\n main.addline(\" vec3 qpos = computeQuantizedPosition();\");\r\n\r\n // Initialization logic that should occur at start of main() - primarily global variables whose values\r\n // are too complex to compute inline or which depend on uniforms and/or other globals.\r\n for (const init of this._initializers) {\r\n if (\"\\n\" === init.charAt(0))\r\n main.addline(` {${init} }\\n`);\r\n else\r\n main.addline(` { ${init} }\\n`);\r\n }\r\n\r\n main.addline(\" vec4 rawPosition = computeVertexPosition(qpos);\");\r\n const adjustRawPosition = this.get(VertexShaderComponent.AdjustRawPosition);\r\n if (undefined !== adjustRawPosition) {\r\n prelude.addFunction(\"vec4 adjustRawPosition(vec4 rawPos)\", adjustRawPosition);\r\n main.addline(\" rawPosition = adjustRawPosition(rawPosition);\");\r\n }\r\n\r\n const checkForEarlyDiscard = this.get(VertexShaderComponent.CheckForEarlyDiscard);\r\n if (undefined !== checkForEarlyDiscard) {\r\n prelude.addFunction(\"bool checkForEarlyDiscard(vec4 rawPos)\", checkForEarlyDiscard);\r\n main.add(earlyVertexDiscard);\r\n }\r\n\r\n const computeFeatureOverrides = this.get(VertexShaderComponent.ComputeFeatureOverrides);\r\n if (undefined !== computeFeatureOverrides) {\r\n prelude.addFunction(\"void computeFeatureOverrides()\", computeFeatureOverrides);\r\n main.addline(\" computeFeatureOverrides();\");\r\n }\r\n\r\n const computeMaterial = this.get(VertexShaderComponent.ComputeMaterial);\r\n if (undefined !== computeMaterial) {\r\n prelude.addFunction(\"void computeMaterial()\", computeMaterial);\r\n main.addline(\" computeMaterial();\");\r\n }\r\n\r\n const computeBaseColor = this.get(VertexShaderComponent.ComputeBaseColor);\r\n if (undefined !== computeBaseColor) {\r\n assert(undefined !== this.find(\"v_color\"));\r\n prelude.addFunction(\"vec4 computeBaseColor()\", computeBaseColor);\r\n main.addline(\" vec4 baseColor = computeBaseColor();\");\r\n\r\n const applyMaterialColor = this.get(VertexShaderComponent.ApplyMaterialColor);\r\n if (undefined !== applyMaterialColor) {\r\n prelude.addFunction(\"vec4 applyMaterialColor(vec4 baseColor)\", applyMaterialColor);\r\n main.addline(\" baseColor = applyMaterialColor(baseColor);\");\r\n }\r\n\r\n const applyFeatureColor = this.get(VertexShaderComponent.ApplyFeatureColor);\r\n if (undefined !== applyFeatureColor) {\r\n prelude.addFunction(\"vec4 applyFeatureColor(vec4 baseColor)\", applyFeatureColor);\r\n main.addline(\" baseColor = applyFeatureColor(baseColor);\");\r\n }\r\n\r\n const adjustContrast = this.get(VertexShaderComponent.AdjustContrast);\r\n if (adjustContrast) {\r\n prelude.addFunction(\"vec4 adjustContrast(vec4 baseColor)\", adjustContrast);\r\n main.addline(\" baseColor = adjustContrast(baseColor);\");\r\n }\r\n\r\n main.addline(\" v_color = baseColor;\");\r\n }\r\n\r\n const checkForDiscard = this.get(VertexShaderComponent.CheckForDiscard);\r\n if (undefined !== checkForDiscard) {\r\n prelude.addFunction(\"bool checkForDiscard()\", checkForDiscard);\r\n main.add(vertexDiscard);\r\n }\r\n\r\n main.addline(\" gl_Position = computePosition(rawPosition);\");\r\n\r\n const finalizePos = this.get(VertexShaderComponent.FinalizePosition);\r\n if (undefined !== finalizePos) {\r\n prelude.addFunction(\"vec4 finalizePosition(vec4 pos)\", finalizePos);\r\n main.addline(\" gl_Position = finalizePosition(gl_Position);\");\r\n }\r\n\r\n for (const comp of this._computedVarying) {\r\n main.addline(` ${comp}`);\r\n }\r\n\r\n const computeAtmosphericScatteringVaryings = this.get(VertexShaderComponent.ComputeAtmosphericScatteringVaryings);\r\n if (undefined !== computeAtmosphericScatteringVaryings) {\r\n prelude.addFunction(\"void computeAtmosphericScatteringVaryings()\", computeAtmosphericScatteringVaryings);\r\n main.addline(\" computeAtmosphericScatteringVaryings();\");\r\n }\r\n\r\n const checkForLateDiscard = this.get(VertexShaderComponent.CheckForLateDiscard);\r\n if (undefined !== checkForLateDiscard) {\r\n prelude.addFunction(\"bool checkForLateDiscard()\", checkForLateDiscard);\r\n main.addline(lateVertexDiscard);\r\n }\r\n\r\n prelude.addMain(main.source);\r\n return prelude.source;\r\n }\r\n\r\n public copyFrom(src: VertexShaderBuilder): void {\r\n this.copyCommon(src);\r\n this._computedVarying = [...src._computedVarying];\r\n }\r\n}\r\n\r\n/** Describes the optional and required components which can be assembled into complete\r\n * @internal\r\n */\r\nexport const enum FragmentShaderComponent {\r\n // (Optional) Return true to immediately discard this fragment.\r\n // bool checkForEarlyDiscard()\r\n CheckForEarlyDiscard,\r\n // (Required) Compute this fragment's base color\r\n // vec4 computeBaseColor()\r\n ComputeBaseColor,\r\n // (Optional) Apply material overrides to base color\r\n // vec4 applyMaterialOverrides(vec4 baseColor)\r\n ApplyMaterialOverrides,\r\n // (Optional) Adjust base color after material and/or feature overrides have been applied.\r\n // vec4 finalizeBaseColor(vec4 baseColor)\r\n FinalizeBaseColor,\r\n // (Optional) Return true if this fragment should be discarded\r\n // Do not invoke discard directly in your shader components - instead, return true from this function to generate a discard statement.\r\n // bool checkForDiscard(vec4 baseColor)\r\n CheckForDiscard,\r\n // (Optional) Return true if the alpha value is not suitable for the current render pass\r\n // bool discardByAlpha(float alpha)\r\n DiscardByAlpha,\r\n // (Optional) Apply monochrome overrides to base color\r\n // vec4 applyMonochrome(vec4 baseColor)\r\n ApplyMonochrome,\r\n // (Optional) Apply thematic display to base color. This happens before lighting and can alter the fragment color that is lit.\r\n // vec4 applyThematicDisplay(vec4 baseColor)\r\n ApplyThematicDisplay,\r\n // (Optional) Apply lighting to base color\r\n // vec4 applyLighting(vec4 baseColor)\r\n ApplyLighting,\r\n // (Optional) Apply white-on-white reversal to base color\r\n ReverseWhiteOnWhite,\r\n // (Optional) Discard if outside any clipping planes\r\n // void applyClipping()\r\n ApplyClipping,\r\n // (Optional) Apply countour lines to lit base color\r\n // vec4 applyClipping(vec4 baseColor)\r\n ApplyContours,\r\n // (Optional) Apply flash hilite to lit base color\r\n // vec4 applyFlash(vec4 baseColor)\r\n ApplyFlash,\r\n // (Optional) Apply planar classifier.\r\n // vec4 applyPlanarClassification(vec4)\r\n ApplyPlanarClassifier,\r\n // (Optional) Apply Draping.\r\n // vec4 ApplyDraping(vec4)\r\n ApplyDraping,\r\n // (Optional) Apply solar shadow map.\r\n // vec4 applySolarShadowMap(vec4)\r\n ApplySolarShadowMap,\r\n // (Optional) Apply wiremesh to edges of triangles\r\n // vec4 applyWiremesh(vec4 baseColor)\r\n ApplyWiremesh,\r\n // (Optional) Apply a debug color\r\n // vec4 applyDebugColor(vec4 baseColor)\r\n ApplyDebugColor,\r\n // (Required) Assign the final color to gl_FragColor or gl_FragData\r\n // void assignFragData(vec4 baseColor)\r\n AssignFragData,\r\n // (Optional) Override current featureId\r\n // vec4 overrideFeatureId(vec4 currentId)\r\n OverrideFeatureId,\r\n // (Optional) Override fragment depth\r\n // float finalizeDepth()\r\n FinalizeDepth,\r\n // (Optional) Override fragment color. This is invoked just after alpha is multiplied, and just before FragColor is assigned.\r\n // vec4 overrideColor(vec4 currentColor)\r\n OverrideColor,\r\n // (Optional) Override render order to be output to pick buffers.\r\n // float overrideRenderOrder(float renderOrder)\r\n OverrideRenderOrder,\r\n // (Optional) Apply atmospheric scattering effect. (For Skybox and RealityMesh only)\r\n // vec4 applyAtmosphericScattering()\r\n ApplyAtmosphericScattering,\r\n // (Optional) Override normal\r\n // float finalizeNormal()\r\n FinalizeNormal,\r\n COUNT,\r\n}\r\n\r\n/** Assembles the source code for a fragment shader from a set of modular components.\r\n * @internal\r\n */\r\nexport class FragmentShaderBuilder extends ShaderBuilder {\r\n public requiresEarlyZWorkaround = false;\r\n\r\n public constructor(flags: ShaderBuilderFlags = {}) {\r\n super(FragmentShaderComponent.COUNT, flags);\r\n this.addFragOutput(\"FragColor\", -1);\r\n }\r\n\r\n public get(id: FragmentShaderComponent): string | undefined { return this.getComponent(id); }\r\n public set(id: FragmentShaderComponent, component: string) { this.addComponent(id, component); }\r\n public unset(id: FragmentShaderComponent) { this.removeComponent(id); }\r\n\r\n public addDrawBuffersExtension(n: number): void {\r\n this.clearFragOutput();\r\n for (let i = 0; i < n; i++)\r\n this.addFragOutput(`FragColor${i}`, i);\r\n }\r\n\r\n public buildSource(): string {\r\n const applyLighting = this.get(FragmentShaderComponent.ApplyLighting);\r\n const prelude = this.buildPrelude(undefined);\r\n\r\n const computeBaseColor = this.get(FragmentShaderComponent.ComputeBaseColor);\r\n assert(undefined !== computeBaseColor);\r\n if (undefined !== computeBaseColor) {\r\n prelude.addFunction(\"vec4 computeBaseColor()\", computeBaseColor);\r\n }\r\n\r\n const main = new SourceBuilder();\r\n main.newline();\r\n\r\n // Initialization logic that should occur at start of main() - primarily global variables whose values\r\n // are too complex to compute inline or which depend on uniforms and/or other globals.\r\n for (const init of this._initializers) {\r\n if (\"\\n\" === init.charAt(0))\r\n main.addline(` {${init} }\\n`);\r\n else\r\n main.addline(` { ${init} }\\n`);\r\n }\r\n\r\n const checkForEarlyDiscard = this.get(FragmentShaderComponent.CheckForEarlyDiscard);\r\n if (undefined !== checkForEarlyDiscard) {\r\n prelude.addFunction(\"bool checkForEarlyDiscard()\", checkForEarlyDiscard);\r\n main.addline(\" if (checkForEarlyDiscard()) { discard; return; }\");\r\n }\r\n\r\n const finalizeNormal = this.get(FragmentShaderComponent.FinalizeNormal);\r\n if (undefined !== finalizeNormal) {\r\n prelude.addFunction(\"vec3 finalizeNormal()\", finalizeNormal);\r\n main.addline(\" g_normal = finalizeNormal();\");\r\n }\r\n\r\n main.addline(\" vec4 baseColor = computeBaseColor();\");\r\n\r\n const finalizeDepth = this.get(FragmentShaderComponent.FinalizeDepth);\r\n if (undefined !== finalizeDepth) {\r\n prelude.addFunction(\"float finalizeDepth()\", finalizeDepth);\r\n main.addline(\" float finalDepth = finalizeDepth();\");\r\n main.addline(\" gl_FragDepth = finalDepth;\");\r\n }\r\n\r\n let clipIndent = \"\";\r\n const applyClipping = this.get(FragmentShaderComponent.ApplyClipping);\r\n if (undefined !== applyClipping) {\r\n prelude.addline(\"vec3 g_clipColor;\\n\");\r\n prelude.addFunction(\"bvec2 applyClipping(vec4 baseColor)\", applyClipping);\r\n main.addline(\" g_hasClipColor = applyClipping(baseColor);\");\r\n main.addline(\" if (g_hasClipColor.x) { baseColor.rgb = g_clipColor; } else {\");\r\n clipIndent = \" \";\r\n }\r\n\r\n const applyMaterialOverrides = this.get(FragmentShaderComponent.ApplyMaterialOverrides);\r\n if (undefined !== applyMaterialOverrides) {\r\n prelude.addFunction(\"vec4 applyMaterialOverrides(vec4 baseColor)\", applyMaterialOverrides);\r\n main.addline(`${clipIndent} baseColor = applyMaterialOverrides(baseColor);`);\r\n }\r\n\r\n const applyThematicDisplay = this.get(FragmentShaderComponent.ApplyThematicDisplay);\r\n if (undefined !== applyThematicDisplay) {\r\n prelude.addFunction(\"vec4 applyThematicDisplay(vec4 baseColor)\", applyThematicDisplay);\r\n main.addline(`${clipIndent} if (u_renderPass != kRenderPass_PlanarClassification)`);\r\n main.addline(`${clipIndent} baseColor = applyThematicDisplay(baseColor);`);\r\n }\r\n\r\n const applyPlanarClassifier = this.get(FragmentShaderComponent.ApplyPlanarClassifier);\r\n if (undefined !== applyPlanarClassifier) {\r\n if (undefined === finalizeDepth) {\r\n if (this.findFunction(volClassOpaqueColor))\r\n main.addline(`${clipIndent} float finalDepth = gl_FragCoord.z;`);\r\n else\r\n main.addline(`${clipIndent} float finalDepth = 1.0;`);\r\n }\r\n prelude.addFunction(\"vec4 applyPlanarClassifications(vec4 baseColor, float depth)\", applyPlanarClassifier);\r\n main.addline(`${clipIndent} baseColor = applyPlanarClassifications(baseColor, finalDepth);`);\r\n }\r\n\r\n const applySolarShadowMap = this.get(FragmentShaderComponent.ApplySolarShadowMap);\r\n if (undefined !== applySolarShadowMap) {\r\n prelude.addFunction(\"vec4 applySolarShadowMap(vec4 baseColor)\", applySolarShadowMap);\r\n main.addline(`${clipIndent} baseColor = applySolarShadowMap(baseColor);`);\r\n }\r\n\r\n const finalize = this.get(FragmentShaderComponent.FinalizeBaseColor);\r\n if (undefined !== finalize) {\r\n prelude.addFunction(\"vec4 finalizeBaseColor(vec4 baseColor)\", finalize);\r\n main.addline(`${clipIndent} baseColor = finalizeBaseColor(baseColor);`);\r\n }\r\n\r\n const checkForDiscard = this.get(FragmentShaderComponent.CheckForDiscard);\r\n if (undefined !== checkForDiscard) {\r\n prelude.addFunction(\"bool checkForDiscard(vec4 baseColor)\", checkForDiscard);\r\n main.addline(`${clipIndent} if (checkForDiscard(baseColor)) { discard; return; }`);\r\n }\r\n\r\n const discardByAlpha = this.get(FragmentShaderComponent.DiscardByAlpha);\r\n if (undefined !== discardByAlpha) {\r\n prelude.addFunction(\"bool discardByAlpha(float alpha)\", discardByAlpha);\r\n main.addline(`${clipIndent} if (discardByAlpha(baseColor.a)) { discard; return; }`);\r\n }\r\n\r\n if (undefined !== applyClipping)\r\n main.addline(\" }\");\r\n\r\n const applyMonochrome = this.get(FragmentShaderComponent.ApplyMonochrome);\r\n if (undefined !== applyMonochrome) {\r\n prelude.addFunction(\"vec4 applyMonochrome(vec4 baseColor)\", applyMonochrome);\r\n main.addline(\" baseColor = applyMonochrome(baseColor);\");\r\n }\r\n\r\n if (undefined !== applyLighting) {\r\n prelude.addFunction(\"vec4 applyLighting(vec4 baseColor)\", applyLighting);\r\n main.addline(\" baseColor = applyLighting(baseColor);\");\r\n }\r\n\r\n if (undefined !== applyClipping) {\r\n main.addline(\" if (g_hasClipColor.y) { baseColor.rgba = vec4(g_clipColor, 1.0); } \");\r\n }\r\n\r\n const reverseWoW = this.get(FragmentShaderComponent.ReverseWhiteOnWhite);\r\n if (undefined !== reverseWoW) {\r\n prelude.addFunction(\"vec4 reverseWhiteOnWhite(vec4 baseColor)\", reverseWoW);\r\n main.addline(\" baseColor = reverseWhiteOnWhite(baseColor);\");\r\n }\r\n\r\n const applyContours = this.get(FragmentShaderComponent.ApplyContours);\r\n if (undefined !== applyContours) {\r\n prelude.addFunction(\"vec4 applyContours(vec4 baseColor)\", applyContours);\r\n main.addline(\" baseColor = applyContours(baseColor);\");\r\n }\r\n\r\n const applyFlash = this.get(FragmentShaderComponent.ApplyFlash);\r\n if (undefined !== applyFlash) {\r\n prelude.addFunction(\"vec4 applyFlash(vec4 baseColor)\", applyFlash);\r\n main.addline(\" baseColor = applyFlash(baseColor);\");\r\n }\r\n\r\n const applyWiremesh = this.get(FragmentShaderComponent.ApplyWiremesh);\r\n if (applyWiremesh) {\r\n prelude.addFunction(\"vec4 applyWiremesh(vec4 baseColor)\", applyWiremesh);\r\n main.addline(\" baseColor = applyWiremesh(baseColor);\");\r\n }\r\n\r\n const applyAtmosphericScattering = this.get(FragmentShaderComponent.ApplyAtmosphericScattering);\r\n if (applyAtmosphericScattering) {\r\n prelude.addFunction(\"vec4 applyAtmosphericScattering(vec4 baseColor)\", applyAtmosphericScattering);\r\n main.addline(\" baseColor = applyAtmosphericScattering(baseColor);\");\r\n }\r\n\r\n const applyDraping = this.get(FragmentShaderComponent.ApplyDraping);\r\n if (undefined !== applyDraping) {\r\n prelude.addFunction(\"vec4 applyDraping(vec4 baseColor)\", applyDraping);\r\n main.addline(`${clipIndent} baseColor = applyDraping(baseColor);`);\r\n }\r\n\r\n const applyDebug = this.get(FragmentShaderComponent.ApplyDebugColor);\r\n if (undefined !== applyDebug) {\r\n prelude.addFunction(\"vec4 applyDebugColor(vec4 baseColor)\", applyDebug);\r\n main.addline(\" baseColor = applyDebugColor(baseColor);\");\r\n }\r\n\r\n const assignFragData = this.get(FragmentShaderComponent.AssignFragData);\r\n assert(undefined !== assignFragData);\r\n if (undefined !== assignFragData) {\r\n prelude.addFunction(\"void assignFragData(vec4 baseColor)\", assignFragData);\r\n main.addline(\" assignFragData(baseColor);\");\r\n }\r\n\r\n if (this.requiresEarlyZWorkaround) {\r\n // Add a conditional discard that never executes to force buggy Intel driver to skip early Z despite our fragment shader writing depth.\r\n main.addline(\"if (v_eyeSpace.z == 9999999.0) discard;\");\r\n }\r\n\r\n prelude.addMain(main.source);\r\n return prelude.source;\r\n }\r\n\r\n private buildPrelude(attrMap: Map<string, AttributeDetails> | undefined): SourceBuilder {\r\n return this.buildPreludeCommon(attrMap, false);\r\n }\r\n\r\n public copyFrom(src: FragmentShaderBuilder): void {\r\n this.copyCommon(src);\r\n this.requiresEarlyZWorkaround = src.requiresEarlyZWorkaround;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const enum ShaderType {\r\n Fragment = 1 << 0,\r\n Vertex = 1 << 1,\r\n Both = Fragment | Vertex,\r\n}\r\n\r\n/**\r\n * Assembles vertex and fragment shaders from a set of modular components to produce a compiled ShaderProgram.\r\n * Be very careful with components which use samplers to ensure that no conflicts exist with texture units used by other components (see TextureUnit enum).\r\n * @internal\r\n */\r\nexport class ProgramBuilder {\r\n public readonly vert: VertexShaderBuilder;\r\n public readonly frag: FragmentShaderBuilder;\r\n private readonly _flags: ShaderBuilderFlags;\r\n private readonly _attrMap?: Map<string, AttributeDetails>;\r\n\r\n public constructor(attrMap?: Map<string, AttributeDetails>, flags: ShaderBuilderFlags = {}) {\r\n this._attrMap = attrMap;\r\n this.vert = new VertexShaderBuilder(flags);\r\n this.frag = new FragmentShaderBuilder(flags);\r\n this._flags = flags; // only needed for clone - though could look up from vert or frag shader.\r\n }\r\n\r\n private addVariable(v: ShaderVariable, which: ShaderType) {\r\n if (which & ShaderType.Fragment) {\r\n this.frag.addVariable(v);\r\n }\r\n\r\n if (which & ShaderType.Vertex) {\r\n this.vert.addVariable(v);\r\n }\r\n }\r\n\r\n public addUniform(name: string, type: VariableType, binding: AddVariableBinding, which: ShaderType = ShaderType.Both) {\r\n this.addVariable(ShaderVariable.create(name, type, VariableScope.Uniform, binding), which);\r\n }\r\n public addUniformArray(name: string, type: VariableType, length: number, binding: AddVariableBinding, which: ShaderType = ShaderType.Both) {\r\n this.addVariable(ShaderVariable.createArray(name, type, length, VariableScope.Uniform, binding), which);\r\n }\r\n public addVarying(name: string, type: VariableType) {\r\n this.addVariable(ShaderVariable.create(name, type, VariableScope.Varying), ShaderType.Both);\r\n }\r\n public addGlobal(name: string, type: VariableType, which: ShaderType = ShaderType.Both, value?: string, isConst: boolean = false) {\r\n this.addVariable(ShaderVariable.createGlobal(name, type, value, isConst), which);\r\n }\r\n\r\n public addInlineComputedVarying(name: string, type: VariableType, inlineComputation: string) {\r\n if (this.frag.addVarying(name, type))\r\n this.vert.addComputedVarying(name, type, inlineComputation);\r\n }\r\n public addFunctionComputedVarying(name: string, type: VariableType, funcName: string, funcBody: string) {\r\n let funcDecl = `\\n${Convert.typeToString(type)} ${funcName}()`;\r\n funcDecl = SourceBuilder.buildFunctionDefinition(funcDecl, funcBody);\r\n\r\n const funcCall = `${funcName}()`;\r\n this.addFunctionComputedVaryingWithArgs(name, type, funcCall, funcDecl);\r\n }\r\n public addFunctionComputedVaryingWithArgs(name: string, type: VariableType, funcCall: string, funcDef: string) {\r\n this.vert.addFunction(funcDef);\r\n const computation = `${name} = ${funcCall};`;\r\n this.addInlineComputedVarying(name, type, computation);\r\n }\r\n\r\n /** Assembles the vertex and fragment shader code and returns a ready-to-compile shader program */\r\n public buildProgram(gl: WebGL2RenderingContext): ShaderProgram {\r\n const vertSource = this.vert.buildSource(this._attrMap);\r\n const fragSource = this.frag.buildSource(); // NB: frag has no need to specify attributes, only vertex does.\r\n\r\n // Debug output\r\n const debugVaryings = false;\r\n if (debugVaryings) {\r\n const dbgLog = (x: string) => console.log(x); // eslint-disable-line no-console\r\n const outSrc = false; // true for source out, false for just varying info\r\n if (this.frag.headerComment) {\r\n let tStr = \"\";\r\n if (!outSrc) {\r\n tStr = `${this.frag.headerComment}\\n`;\r\n }\r\n const tStr2 = this.vert.checkMaxVaryingVectors(fragSource);\r\n if (tStr2) {\r\n if (outSrc) {\r\n dbgLog(\"//===============================================================================================================\");\r\n dbgLog(vertSource);\r\n dbgLog(\"//========= Varying Info =========\");\r\n dbgLog(tStr2);\r\n dbgLog(fragSource);\r\n } else {\r\n dbgLog(tStr + tStr2);\r\n }\r\n }\r\n }\r\n }\r\n\r\n const prog = new ShaderProgram(gl, vertSource, fragSource, this._attrMap, this.vert.headerComment, this.frag.headerComment);\r\n this.vert.addBindings(prog);\r\n this.frag.addBindings(prog, this.vert);\r\n return prog;\r\n }\r\n\r\n public setDebugDescription(description: string): void {\r\n this.vert.headerComment = (`//!V! ${description}`);\r\n this.frag.headerComment = (`//!F! ${description}`);\r\n }\r\n\r\n /** Returns a deep copy of this program builder. */\r\n public clone(): ProgramBuilder {\r\n const clone = new ProgramBuilder(this._attrMap, this._flags);\r\n clone.vert.copyFrom(this.vert);\r\n clone.frag.copyFrom(this.frag);\r\n return clone;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ShaderBuilder.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/ShaderBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeDetails } from \"./AttributeMap\";\r\nimport { addInstancedModelMatrixRTC } from \"./glsl/Instancing\";\r\nimport { volClassOpaqueColor } from \"./glsl/PlanarClassification\";\r\nimport { addPosition, earlyVertexDiscard, lateVertexDiscard, vertexDiscard } from \"./glsl/Vertex\";\r\nimport { ShaderProgram } from \"./ShaderProgram\";\r\nimport { PositionType } from \"./TechniqueFlags\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Describes the data type of a shader program variable.\r\n * @internal\r\n */\r\nexport const enum VariableType {\r\n Boolean, // bool\r\n Int, // int\r\n Float, // float\r\n Vec2, // vec2\r\n Vec3, // vec3\r\n Vec4, // vec4\r\n Mat3, // mat3\r\n Mat4, // mat4\r\n Sampler2D, // sampler2D\r\n SamplerCube, // samplerCube\r\n Uint, // uint\r\n BVec2, // bvec2\r\n\r\n COUNT,\r\n}\r\n\r\n/** Describes the qualifier associated with a shader program variable.\r\n * @internal\r\n */\r\nexport const enum VariableScope {\r\n Global, // no qualifier\r\n Varying, // varying\r\n Uniform, // uniform\r\n\r\n COUNT,\r\n}\r\n\r\n/** Describes the declared or undeclared precision of a shader program variable.\r\n * @internal\r\n */\r\nexport const enum VariablePrecision {\r\n Default, // undeclared precision - variable uses the explicit or implicit precision default for its type\r\n Low, // lowp\r\n Medium, // mediump\r\n High, // highp\r\n\r\n COUNT,\r\n}\r\n\r\n/** @internal */\r\nnamespace Convert {\r\n export function typeToString(type: VariableType): string {\r\n switch (type) {\r\n case VariableType.Boolean: return \"bool\";\r\n case VariableType.Int: return \"int\";\r\n case VariableType.Float: return \"float\";\r\n case VariableType.Vec2: return \"vec2\";\r\n case VariableType.Vec3: return \"vec3\";\r\n case VariableType.Vec4: return \"vec4\";\r\n case VariableType.Mat3: return \"mat3\";\r\n case VariableType.Mat4: return \"mat4\";\r\n case VariableType.Sampler2D: return \"sampler2D\";\r\n case VariableType.SamplerCube: return \"samplerCube\";\r\n case VariableType.Uint: return \"uint\";\r\n case VariableType.BVec2: return \"bvec2\";\r\n default:\r\n assert(false);\r\n return \"undefined\";\r\n }\r\n }\r\n\r\n export function scopeToString(scope: VariableScope, isVertexShader: boolean): string {\r\n switch (scope) {\r\n case VariableScope.Global: return \"\";\r\n case VariableScope.Varying: return (isVertexShader ? \"out\" : \"in\");\r\n case VariableScope.Uniform: return \"uniform\";\r\n default:\r\n assert(false);\r\n return \"undefined\";\r\n }\r\n }\r\n\r\n export function precisionToString(precision: VariablePrecision): string {\r\n switch (precision) {\r\n case VariablePrecision.Default: return \"\";\r\n case VariablePrecision.Low: return \"lowp\";\r\n case VariablePrecision.Medium: return \"mediump\";\r\n case VariablePrecision.High: return \"highp\";\r\n default:\r\n assert(false);\r\n return \"undefined\";\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Function invoked by ShaderVariable::AddBinding() to bind the variable to the compiled program.\r\n * The implementation should call ShaderProgram::AddShaderUniform or ShaderProgram::AddGraphicUniform/Attribute to register a function\r\n * which can be used to bind the value of the variable when program is used.\r\n * @internal\r\n */\r\nexport type AddVariableBinding = (prog: ShaderProgram) => void;\r\n\r\n/** Represents a variable within a fragment or vertex shader.\r\n * @internal\r\n */\r\nexport class ShaderVariable {\r\n private readonly _addBinding?: AddVariableBinding;\r\n public readonly name: string;\r\n public readonly value?: string; // for global variables only\r\n public readonly type: VariableType;\r\n public readonly scope: VariableScope;\r\n public readonly precision: VariablePrecision;\r\n public readonly isConst: boolean = false; // for global variables only\r\n public readonly length: number; // for uniform arrays only\r\n\r\n private constructor(name: string, type: VariableType, scope: VariableScope, precision: VariablePrecision, isConst: boolean, addBinding?: AddVariableBinding, value?: string, length: number = 0) {\r\n this._addBinding = addBinding;\r\n this.name = name;\r\n this.value = value;\r\n this.type = type;\r\n this.scope = scope;\r\n this.precision = precision;\r\n this.isConst = isConst;\r\n this.length = length;\r\n }\r\n\r\n public static create(name: string, type: VariableType, scope: VariableScope, addBinding?: AddVariableBinding, precision: VariablePrecision = VariablePrecision.Default): ShaderVariable {\r\n return new ShaderVariable(name, type, scope, precision, false, addBinding, undefined);\r\n }\r\n\r\n public static createArray(name: string, type: VariableType, length: number, scope: VariableScope, addBinding?: AddVariableBinding, precision: VariablePrecision = VariablePrecision.Default): ShaderVariable {\r\n return new ShaderVariable(name, type, scope, precision, false, addBinding, undefined, length);\r\n }\r\n\r\n public static createGlobal(name: string, type: VariableType, value?: string, isConst: boolean = false) {\r\n return new ShaderVariable(name, type, VariableScope.Global, VariablePrecision.Default, isConst, undefined, value);\r\n }\r\n\r\n public get hasBinding(): boolean { return undefined !== this._addBinding; }\r\n public addBinding(prog: ShaderProgram) {\r\n if (undefined !== this._addBinding)\r\n this._addBinding(prog);\r\n }\r\n\r\n public get typeName(): string { return Convert.typeToString(this.type); }\r\n public getScopeName(isVertexShader: boolean): string { return Convert.scopeToString(this.scope, isVertexShader); }\r\n public get precisionName(): string { return Convert.precisionToString(this.precision); }\r\n\r\n /** Constructs the single-line declaration of this variable */\r\n public buildDeclaration(isVertexShader: boolean): string {\r\n const parts = new Array<string>();\r\n if (this.isConst)\r\n parts.push(\"const\");\r\n\r\n const scopeName = this.getScopeName(isVertexShader);\r\n if (0 < scopeName.length)\r\n parts.push(scopeName);\r\n\r\n const precisionName = this.precisionName;\r\n if (0 < precisionName.length)\r\n parts.push(precisionName);\r\n\r\n parts.push(this.typeName);\r\n\r\n if (this.length > 0)\r\n parts.push(`${this.name}[${this.length.toFixed(0)}]`);\r\n else\r\n parts.push(this.name);\r\n\r\n if (undefined !== this.value && 0 < this.value.length) {\r\n parts.push(\"=\");\r\n parts.push(this.value);\r\n }\r\n\r\n return `${parts.join(\" \")};`;\r\n }\r\n}\r\n\r\n/**\r\n * Represents the set of variables defined and used within a fragment or vertex shader.\r\n * If the same variable is used in both the fragment and vertex shader (e.g., a varying variable), it should be defined in both ShaderBuilders' ShaderVariables object.\r\n * @internal\r\n */\r\nexport class ShaderVariables {\r\n protected _list: ShaderVariable[] = new Array<ShaderVariable>();\r\n\r\n /** Find an existing variable with the specified name */\r\n public find(name: string): ShaderVariable | undefined { return this._list.find((v: ShaderVariable) => v.name === name); }\r\n\r\n /** Add a new variable, if a variable with the same name does not already exist. return true if added */\r\n public addVariable(v: ShaderVariable): boolean {\r\n const found = this.find(v.name);\r\n if (undefined !== found) {\r\n assert(found.type === v.type);\r\n // assume same binding etc...\r\n return false;\r\n } else {\r\n this._list.push(v);\r\n return true;\r\n }\r\n }\r\n\r\n public addUniform(name: string, type: VariableType, binding: AddVariableBinding, precision: VariablePrecision = VariablePrecision.Default) {\r\n this.addVariable(ShaderVariable.create(name, type, VariableScope.Uniform, binding, precision));\r\n }\r\n\r\n public addUniformArray(name: string, type: VariableType, length: number, binding: AddVariableBinding) {\r\n this.addVariable(ShaderVariable.createArray(name, type, length, VariableScope.Uniform, binding));\r\n }\r\n\r\n public addVarying(name: string, type: VariableType): boolean {\r\n return this.addVariable(ShaderVariable.create(name, type, VariableScope.Varying));\r\n }\r\n\r\n public addGlobal(name: string, type: VariableType, value?: string, isConst: boolean = false) {\r\n this.addVariable(ShaderVariable.createGlobal(name, type, value, isConst));\r\n }\r\n\r\n public addConstant(name: string, type: VariableType, value: string) {\r\n this.addGlobal(name, type, value, true);\r\n }\r\n\r\n public addBitFlagConstant(name: string, value: number) {\r\n this.addGlobal(name, VariableType.Uint, `${(2 ** value).toFixed(0)}u`, true);\r\n }\r\n\r\n /** Constructs the lines of glsl code declaring the variables of a certain scope. */\r\n public buildScopeDeclarations(isVertexShader: boolean, scope: VariableScope, constants?: boolean): string {\r\n let decls = \"\";\r\n for (const v of this._list) {\r\n if (scope === v.scope && (undefined === constants ? true : v.isConst === constants))\r\n decls += `${v.buildDeclaration(isVertexShader)}\\n`;\r\n }\r\n\r\n return decls;\r\n }\r\n\r\n /** Constructs the lines of glsl code declaring all of the variables. */\r\n public buildDeclarations(isVertexShader: boolean): string {\r\n let decls = \"\";\r\n if (isVertexShader) {\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Uniform);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Global, true);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Global, false);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Varying);\r\n } else {\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Varying);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Uniform);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Global, true);\r\n decls += this.buildScopeDeclarations(isVertexShader, VariableScope.Global, false);\r\n }\r\n return decls;\r\n }\r\n\r\n /**\r\n * For every uniform and attribute variable not contained in the optional 'predefined' list, invokes the associated binding function\r\n * to add the corresponding Uniform or Attribute object to the ShaderProgram.\r\n */\r\n public addBindings(prog: ShaderProgram, predefined?: ShaderVariables): void {\r\n for (const v of this._list) {\r\n // Some variables exist in both frag and vert shaders - only add them to the program once.\r\n if (v.hasBinding && (undefined === predefined || undefined === predefined.find(v.name))) {\r\n v.addBinding(prog);\r\n }\r\n }\r\n }\r\n\r\n public get length(): number { return this._list.length; }\r\n\r\n private findSlot(variableSize: number, loopSize: number, registers: number[]): number {\r\n // Find the first available slot into which to insert this variable\r\n for (let i = 0; i < loopSize; i++) {\r\n const newSize = registers[i] + variableSize;\r\n if (newSize <= 4) {\r\n registers[i] = newSize;\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n // Return string of varying types with their theoretical slot numbers\r\n public checkMaxVaryingVectors(fragSource: string): string {\r\n // Varyings go into a matrix of 4 columns and GL_MAX_VARYING_VECTORS rows of floats.\r\n // The packing rules are defined by the standard. Specifically each row can contain one of:\r\n // vec4\r\n // vec3 (+ float)\r\n // vec2 (+ vec2)\r\n // vec2 (+ float (+ float))\r\n // float (+ float (+ float (+ float)))\r\n // Varyings are packed in order of size from largest to smallest\r\n const loopSize = 64;\r\n const registers = Array(loopSize + 1).fill(0);\r\n let outStr = \"\";\r\n let slot = 0;\r\n\r\n const varyings = this._list.filter((variable) => VariableScope.Varying === variable.scope);\r\n // Add in any built in vars that count as varyings if they are used\r\n if (fragSource.includes(\"gl_FragCoord\")) {\r\n varyings.push(ShaderVariable.create(\"gl_FragCoord\", VariableType.Vec4, VariableScope.Varying));\r\n }\r\n if (fragSource.includes(\"gl_PointCoord\")) {\r\n varyings.push(ShaderVariable.create(\"gl_PointCoord\", VariableType.Vec2, VariableScope.Varying));\r\n }\r\n if (fragSource.includes(\"gl_FrontFacing\")) {\r\n varyings.push(ShaderVariable.create(\"gl_FrontFacing\", VariableType.Boolean, VariableScope.Varying));\r\n }\r\n // Need to process in size order (largest first)\r\n varyings.sort((a, b) => b.type - a.type); // this is good enough to sort by\r\n\r\n for (const variable of varyings) {\r\n let variableSize = 0;\r\n switch (variable.type) {\r\n case VariableType.Boolean:\r\n case VariableType.Int:\r\n case VariableType.Float:\r\n variableSize = 1;\r\n break;\r\n case VariableType.Vec2:\r\n case VariableType.BVec2:\r\n variableSize = 2;\r\n break;\r\n case VariableType.Vec3:\r\n variableSize = 3;\r\n break;\r\n case VariableType.Vec4:\r\n variableSize = 4;\r\n break;\r\n default:\r\n assert(false, \"Invalid varying variable type\");\r\n continue;\r\n }\r\n slot = this.findSlot(variableSize, loopSize, registers);\r\n outStr += `// varying slot ${slot} ${Convert.typeToString(variable.type)} ${variable.name}\\n`;\r\n }\r\n const slotsUsed = registers.indexOf(0);\r\n registers.length = slotsUsed;\r\n outStr += `// Slots used: ${slotsUsed} [${registers.toString()}]\\n`;\r\n\r\n // debug output modes\r\n const outputAll = true; // false just outputs varyings that use more than 8\r\n if (outputAll) {\r\n return outStr;\r\n } else {\r\n if (slotsUsed > 8)\r\n return outStr;\r\n else\r\n return \"\";\r\n }\r\n }\r\n\r\n // Return the number of varying vectors used by the shader.\r\n // Varyings go into a matrix of 4 columns and GL_MAX_VARYING_VECTORS rows of floats.\r\n // The packing rules are defined by the standard. Specifically each row can contain one of:\r\n // vec4\r\n // vec3 (+ float)\r\n // vec2 (+ vec2)\r\n // vec2 (+ float (+ float))\r\n // float (+ float (+ float (+ float)))\r\n // Varyings are packed in order of size from largest to smallest\r\n public computeNumVaryingVectors(fragSource: string): number {\r\n const loopSize = 64;\r\n const registers = Array(loopSize + 1).fill(0);\r\n\r\n const varyings = this._list.filter((variable) => VariableScope.Varying === variable.scope);\r\n // Add in any built in vars that count as varyings if they are used\r\n if (fragSource.includes(\"gl_FragCoord\")) {\r\n varyings.push(ShaderVariable.create(\"gl_FragCoord\", VariableType.Vec4, VariableScope.Varying));\r\n }\r\n if (fragSource.includes(\"gl_PointCoord\")) {\r\n varyings.push(ShaderVariable.create(\"gl_PointCoord\", VariableType.Vec2, VariableScope.Varying));\r\n }\r\n if (fragSource.includes(\"gl_FrontFacing\")) {\r\n varyings.push(ShaderVariable.create(\"gl_FrontFacing\", VariableType.Boolean, VariableScope.Varying));\r\n }\r\n // Need to process in size order (largest first)\r\n varyings.sort((a, b) => b.type - a.type); // this is good enough to sort by\r\n\r\n for (const variable of varyings) {\r\n if (VariableScope.Varying !== variable.scope)\r\n continue;\r\n\r\n let variableSize = 0;\r\n switch (variable.type) {\r\n case VariableType.Boolean:\r\n case VariableType.Int:\r\n case VariableType.Float:\r\n variableSize = 1;\r\n break;\r\n case VariableType.Vec2:\r\n case VariableType.BVec2:\r\n variableSize = 2;\r\n break;\r\n case VariableType.Vec3:\r\n variableSize = 3;\r\n break;\r\n case VariableType.Vec4:\r\n variableSize = 4;\r\n break;\r\n default:\r\n assert(false, \"Invalid varying variable type\");\r\n continue;\r\n }\r\n\r\n this.findSlot(variableSize, loopSize, registers);\r\n }\r\n\r\n const slotsUsed = registers.indexOf(0);\r\n return slotsUsed;\r\n }\r\n}\r\n\r\n/** Convenience API for assembling glsl source code.\r\n * @internal\r\n */\r\nexport class SourceBuilder {\r\n public source: string = \"\";\r\n\r\n /* Append the specified string to the glsl source */\r\n public add(what: string): void { this.source += what; }\r\n\r\n /* Append a new-line to the glsl source */\r\n public newline(): void { this.add(\"\\n\"); }\r\n\r\n /* Append the specified string to the glsl source, followed by a new-line */\r\n public addline(what: string): void {\r\n this.add(what);\r\n this.newline();\r\n }\r\n\r\n /**\r\n * Construct a function definition given the function signature and body. For example:\r\n * buildFunctionDefinition(\"float average(float a, float b)\", \"\\n return (a + b) / 2.0;\\n\");\r\n * will produce:\r\n * \"float average(float a, float b) {\r\n * return (a + b) / 2.0;\r\n * }\"\r\n * For an inline function:\r\n * buildFunctionDefinition(\"float average(float a, float b)\", \"return (a + b) / 2.0;\");\r\n * will produce:\r\n * \"float average(float a, float b) { return (a + b) / 2.0; }\"\r\n */\r\n public static buildFunctionDefinition(declaration: string, implementation: string): string {\r\n // If implementation does not start with a newline then assume it is an inline function & add spaces between braces.\r\n if (\"\\n\" === implementation.charAt(0))\r\n return `${declaration} {${implementation}}\\n\\n`;\r\n else\r\n return `${declaration} { ${implementation} }\\n\\n`;\r\n }\r\n\r\n /** Constructs a function definition as described by buildFunctionDefinition() and appends it to the glsl source. */\r\n public addFunction(declaration: string, implementation: string): void { this.add(SourceBuilder.buildFunctionDefinition(declaration, implementation)); }\r\n\r\n /** Constructs the definition of the main() function using the supplied function body and appends it to the glsl source. */\r\n public addMain(implementation: string): void { this.addFunction(\"void main()\", implementation); }\r\n}\r\n\r\n/** @internal */\r\nexport interface ShaderBuilderFlags {\r\n /** If defined and true, the geometry is instanced. */\r\n readonly instanced?: boolean;\r\n /** If defined, indicates the vertex data comes from a texture and specifies whether the positions are quantized 16-bit integers or unquantized 32-bit floats. */\r\n readonly positionType?: PositionType;\r\n}\r\n\r\n/**\r\n * Represents a fragment or vertex shader under construction. The shader consists of a set of defined variables,\r\n * plus a set of code snippets which can be concatenated together to form the shader source.\r\n * @internal\r\n */\r\nexport class ShaderBuilder extends ShaderVariables {\r\n protected _components = new Array<string | undefined>();\r\n protected _functions: string[] = [];\r\n protected _extensions: string[] = [];\r\n protected _macros: string[] = [];\r\n protected _fragOutputs: string[] = [];\r\n protected _version: string = \"\";\r\n public headerComment: string = \"\";\r\n protected readonly _flags: ShaderBuilderFlags;\r\n protected _initializers: string[] = new Array<string>();\r\n\r\n public get usesInstancedGeometry(): boolean {\r\n return !!this._flags.instanced;\r\n }\r\n\r\n public addInitializer(initializer: string): void {\r\n if (-1 === this._initializers.indexOf(initializer))\r\n this._initializers.push(initializer);\r\n }\r\n\r\n protected constructor(maxComponents: number, flags: ShaderBuilderFlags) {\r\n super();\r\n this._components.length = maxComponents;\r\n this._flags = flags;\r\n this._version = \"#version 300 es\";\r\n this.addDefine(\"TEXTURE\", \"texture\");\r\n this.addDefine(\"TEXTURE_CUBE\", \"texture\");\r\n this.addDefine(\"TEXTURE_PROJ\", \"textureProj\");\r\n }\r\n\r\n protected addComponent(index: number, component: string): void {\r\n assert(index < this._components.length);\r\n\r\n // assume if caller is replacing an existing component, they know what they're doing...\r\n this._components[index] = component;\r\n }\r\n protected removeComponent(index: number) {\r\n assert(index < this._components.length);\r\n this._components[index] = undefined;\r\n }\r\n\r\n protected getComponent(index: number): string | undefined {\r\n assert(index < this._components.length);\r\n return this._components[index];\r\n }\r\n\r\n public addFunction(declarationOrFull: string, implementation?: string): void {\r\n let def = declarationOrFull;\r\n if (undefined !== implementation)\r\n def = SourceBuilder.buildFunctionDefinition(`\\n${declarationOrFull}`, implementation);\r\n\r\n if (undefined === this.findFunction(def))\r\n this._functions.push(def);\r\n }\r\n\r\n public replaceFunction(existing: string, replacement: string): boolean {\r\n const index = this._functions.indexOf(existing);\r\n if (-1 !== index) {\r\n this._functions[index] = replacement;\r\n }\r\n\r\n assert(-1 !== index);\r\n return -1 !== index;\r\n }\r\n\r\n public findFunction(func: string): string | undefined {\r\n return this._functions.find((f: string | undefined) => f === func);\r\n }\r\n\r\n public addExtension(extName: string): void {\r\n if (-1 === this._extensions.indexOf(extName))\r\n this._extensions.push(extName);\r\n }\r\n\r\n public addMacro(macro: string): void {\r\n if (-1 === this._macros.indexOf(macro))\r\n this._macros.push(macro);\r\n }\r\n\r\n public addDefine(name: string, value: string): void {\r\n const defineName = `#define ${name} `;\r\n const macro = defineName + value;\r\n\r\n const index = this._macros.findIndex((x) => x.startsWith(defineName));\r\n if (-1 !== index)\r\n this._macros[index] = macro;\r\n else\r\n this._macros.push(defineName + value);\r\n }\r\n\r\n public clearFragOutput(): void {\r\n while (this._fragOutputs.length > 0)\r\n this._fragOutputs.pop();\r\n }\r\n\r\n public addFragOutput(name: string, value: number): void {\r\n if (-1 === value) {\r\n this._fragOutputs.push(\"out vec4 FragColor;\");\r\n return;\r\n }\r\n this._fragOutputs.push(`layout(location = ${value}) out vec4 ${name};`);\r\n }\r\n\r\n protected buildPreludeCommon(attrMap: Map<string, AttributeDetails> | undefined, isVertexShader: boolean): SourceBuilder {\r\n const src = new SourceBuilder();\r\n\r\n // Version number (must be first thing for GLSL 300)\r\n src.addline(this._version);\r\n\r\n // Header comment\r\n src.newline();\r\n if (\"\" !== this.headerComment) {\r\n src.addline(this.headerComment);\r\n src.newline();\r\n }\r\n\r\n // Macros\r\n for (const macro of this._macros)\r\n src.addline(macro);\r\n\r\n // Extensions\r\n for (const ext of this._extensions)\r\n src.addline(`#extension ${ext} : enable`);\r\n\r\n // Default precisions\r\n src.addline(\"precision highp float;\");\r\n src.addline(\"precision highp int;\");\r\n src.newline();\r\n\r\n // Attribute declarations\r\n if (attrMap !== undefined) {\r\n attrMap.forEach((attr: AttributeDetails, key: string) => {\r\n src.addline(`in ${Convert.typeToString(attr.type)} ${key};`);\r\n });\r\n }\r\n\r\n // Variable declarations\r\n src.add(this.buildDeclarations(isVertexShader));\r\n\r\n // Layouts\r\n for (const layout of this._fragOutputs)\r\n src.addline(layout);\r\n\r\n // Functions\r\n for (const func of this._functions) {\r\n src.add(func);\r\n }\r\n\r\n if (!src.source.endsWith(\"\\n\\n\"))\r\n src.newline();\r\n\r\n return src;\r\n }\r\n\r\n protected copyCommon(src: ShaderBuilder): void {\r\n this._version = src._version;\r\n this.headerComment = src.headerComment;\r\n this._initializers = [...src._initializers];\r\n this._components = [...src._components];\r\n this._functions = [...src._functions];\r\n this._extensions = [...src._extensions];\r\n this._list = [...src._list];\r\n this._macros = [...src._macros];\r\n this._fragOutputs = [...src._fragOutputs];\r\n }\r\n}\r\n\r\n/** Describes the optional and required components which can be assembled into complete\r\n * @internal\r\n */\r\nexport const enum VertexShaderComponent {\r\n // (Optional) Compute the quantized position. By default this simply returns the `a_pos` attribute.\r\n // This runs before any initializers.\r\n // vec3 computeQuantizedPosition()\r\n ComputeQuantizedPosition,\r\n // (Optional) Adjust the result of computeVertexPosition().\r\n // vec4 adjustRawPosition(vec4 rawPosition)\r\n AdjustRawPosition,\r\n // (Optional) Return true to discard this vertex before evaluating feature overrides etc, given the model-space position.\r\n // bool checkForEarlyDiscard(vec4 rawPos)\r\n CheckForEarlyDiscard,\r\n // (Optional) Compute feature overrides like visibility, rgb, transparency, line weight.\r\n // void computeFeatureOverrides()\r\n ComputeFeatureOverrides,\r\n // (Optional) Compute material parameters.\r\n // void computeMaterial()\r\n ComputeMaterial,\r\n // (Optional) Compute the vertex's base color. Requires the program to have a `varying vec4 v_color`.\r\n // vec4 computeBaseColor()\r\n ComputeBaseColor,\r\n // (Optional - does nothing if ComputeBaseColor not specified) Apply material overrides to vertex color\r\n // vec4 applyMaterialColor(vec4 baseColor)\r\n ApplyMaterialColor,\r\n // (Optional - does nothing if ComputeBaseColor not specified) Apply feature overrides to vertex color\r\n // vec4 applyFeatureColor(vec4 baseColor)\r\n ApplyFeatureColor,\r\n // (Optional - does nothing if ComputeBaseColor not specified)) Adjust base color for contrast\r\n // vec4 adjustContrast(vec4 baseColor)\r\n AdjustContrast,\r\n // (Optional - does nothing if ComputeBaseColor not specified) Return true if this vertex should be \"discarded\" (is not visible)\r\n // bool checkForDiscard()\r\n // If this returns true, gl_Position will be set to 0; presumably related vertices will also do so, resulting in a degenerate triangle.\r\n // If this returns true, no further processing will be performed.\r\n CheckForDiscard,\r\n // (Required) Return this vertex's position in clip space.\r\n // vec4 computePosition(vec4 rawPos)\r\n ComputePosition,\r\n // (Optional) Compute all atmospheric scattering values in one pass and assign them to varyings (For Skybox and RealityMesh only)\r\n // void computeAtmosphericScatteringVaryings\r\n ComputeAtmosphericScatteringVaryings,\r\n // (Optional) After all output (varying) values have been computed, return true if this vertex should be discarded.\r\n // bool checkForLateDiscard()\r\n CheckForLateDiscard,\r\n // (Optional) Adjust the final position\r\n // vec4 adjustPosition(vec4 pos)\r\n FinalizePosition,\r\n\r\n COUNT,\r\n}\r\n\r\n/** Assembles the source code for a vertex shader from a set of modular components.\r\n * @internal\r\n */\r\nexport class VertexShaderBuilder extends ShaderBuilder {\r\n private _computedVarying: string[] = new Array<string>();\r\n\r\n private buildPrelude(attrMap?: Map<string, AttributeDetails>): SourceBuilder { return this.buildPreludeCommon(attrMap, true); }\r\n\r\n public constructor(flags: ShaderBuilderFlags = {}) {\r\n super(VertexShaderComponent.COUNT, flags);\r\n\r\n this.addDefine(\"MAT_NORM\", \"g_nmx\");\r\n if (this.usesInstancedGeometry) {\r\n addInstancedModelMatrixRTC(this);\r\n this.addDefine(\"MAT_MV\", \"g_mv\");\r\n this.addDefine(\"MAT_MVP\", \"g_mvp\");\r\n } else {\r\n this.addDefine(\"MAT_MV\", \"u_mv\");\r\n this.addDefine(\"MAT_MVP\", \"u_mvp\");\r\n }\r\n\r\n addPosition(this, this.usesVertexTable);\r\n }\r\n\r\n public get usesVertexTable(): boolean {\r\n return undefined !== this._flags.positionType;\r\n }\r\n\r\n public get positionType(): PositionType {\r\n assert(undefined !== this._flags.positionType);\r\n return this._flags.positionType;\r\n }\r\n\r\n public get(id: VertexShaderComponent): string | undefined { return this.getComponent(id); }\r\n public set(id: VertexShaderComponent, component: string) { this.addComponent(id, component); }\r\n public unset(id: VertexShaderComponent) { this.removeComponent(id); }\r\n\r\n public addComputedVarying(name: string, type: VariableType, computation: string): void {\r\n this.addVarying(name, type);\r\n this._computedVarying.push(computation);\r\n }\r\n\r\n public buildSource(attrMap?: Map<string, AttributeDetails>): string {\r\n const prelude = this.buildPrelude(attrMap);\r\n const main = new SourceBuilder();\r\n main.newline();\r\n\r\n const computePosition = this.get(VertexShaderComponent.ComputePosition);\r\n assert(undefined !== computePosition);\r\n if (undefined !== computePosition) {\r\n prelude.addFunction(\"vec4 computePosition(vec4 rawPos)\", computePosition);\r\n }\r\n\r\n const computeQPos = this.get(VertexShaderComponent.ComputeQuantizedPosition) ?? \"return a_pos;\";\r\n prelude.addFunction(\"vec3 computeQuantizedPosition()\", computeQPos);\r\n main.addline(\" vec3 qpos = computeQuantizedPosition();\");\r\n\r\n // Initialization logic that should occur at start of main() - primarily global variables whose values\r\n // are too complex to compute inline or which depend on uniforms and/or other globals.\r\n for (const init of this._initializers) {\r\n if (\"\\n\" === init.charAt(0))\r\n main.addline(` {${init} }\\n`);\r\n else\r\n main.addline(` { ${init} }\\n`);\r\n }\r\n\r\n main.addline(\" vec4 rawPosition = computeVertexPosition(qpos);\");\r\n const adjustRawPosition = this.get(VertexShaderComponent.AdjustRawPosition);\r\n if (undefined !== adjustRawPosition) {\r\n prelude.addFunction(\"vec4 adjustRawPosition(vec4 rawPos)\", adjustRawPosition);\r\n main.addline(\" rawPosition = adjustRawPosition(rawPosition);\");\r\n }\r\n\r\n const checkForEarlyDiscard = this.get(VertexShaderComponent.CheckForEarlyDiscard);\r\n if (undefined !== checkForEarlyDiscard) {\r\n prelude.addFunction(\"bool checkForEarlyDiscard(vec4 rawPos)\", checkForEarlyDiscard);\r\n main.add(earlyVertexDiscard);\r\n }\r\n\r\n const computeFeatureOverrides = this.get(VertexShaderComponent.ComputeFeatureOverrides);\r\n if (undefined !== computeFeatureOverrides) {\r\n prelude.addFunction(\"void computeFeatureOverrides()\", computeFeatureOverrides);\r\n main.addline(\" computeFeatureOverrides();\");\r\n }\r\n\r\n const computeMaterial = this.get(VertexShaderComponent.ComputeMaterial);\r\n if (undefined !== computeMaterial) {\r\n prelude.addFunction(\"void computeMaterial()\", computeMaterial);\r\n main.addline(\" computeMaterial();\");\r\n }\r\n\r\n const computeBaseColor = this.get(VertexShaderComponent.ComputeBaseColor);\r\n if (undefined !== computeBaseColor) {\r\n assert(undefined !== this.find(\"v_color\"));\r\n prelude.addFunction(\"vec4 computeBaseColor()\", computeBaseColor);\r\n main.addline(\" vec4 baseColor = computeBaseColor();\");\r\n\r\n const applyMaterialColor = this.get(VertexShaderComponent.ApplyMaterialColor);\r\n if (undefined !== applyMaterialColor) {\r\n prelude.addFunction(\"vec4 applyMaterialColor(vec4 baseColor)\", applyMaterialColor);\r\n main.addline(\" baseColor = applyMaterialColor(baseColor);\");\r\n }\r\n\r\n const applyFeatureColor = this.get(VertexShaderComponent.ApplyFeatureColor);\r\n if (undefined !== applyFeatureColor) {\r\n prelude.addFunction(\"vec4 applyFeatureColor(vec4 baseColor)\", applyFeatureColor);\r\n main.addline(\" baseColor = applyFeatureColor(baseColor);\");\r\n }\r\n\r\n const adjustContrast = this.get(VertexShaderComponent.AdjustContrast);\r\n if (adjustContrast) {\r\n prelude.addFunction(\"vec4 adjustContrast(vec4 baseColor)\", adjustContrast);\r\n main.addline(\" baseColor = adjustContrast(baseColor);\");\r\n }\r\n\r\n main.addline(\" v_color = baseColor;\");\r\n }\r\n\r\n /*\r\n There is currently a driver glitch which is known to affect much of the Intel Ultra 7 family of chipsets when using Intel driver from some point after driver version 32.0.101.6078 (9/13/2024).\r\n\r\n The graphics driver will glitch when discarding triangles using the vertex shader (setting all vertices to the same value) if gl_Position was not initialized to a valid position beforehand.\r\n\r\n The workaround for this bug involves ensuring that gl_Position is initialized to a valid position before attempting a discard using a degenerate triangle.\r\n */\r\n main.addline(\" gl_Position = computePosition(rawPosition);\");\r\n const checkForDiscard = this.get(VertexShaderComponent.CheckForDiscard);\r\n if (undefined !== checkForDiscard) {\r\n prelude.addFunction(\"bool checkForDiscard()\", checkForDiscard);\r\n main.add(vertexDiscard);\r\n }\r\n\r\n const finalizePos = this.get(VertexShaderComponent.FinalizePosition);\r\n if (undefined !== finalizePos) {\r\n prelude.addFunction(\"vec4 finalizePosition(vec4 pos)\", finalizePos);\r\n main.addline(\" gl_Position = finalizePosition(gl_Position);\");\r\n }\r\n\r\n for (const comp of this._computedVarying) {\r\n main.addline(` ${comp}`);\r\n }\r\n\r\n const computeAtmosphericScatteringVaryings = this.get(VertexShaderComponent.ComputeAtmosphericScatteringVaryings);\r\n if (undefined !== computeAtmosphericScatteringVaryings) {\r\n prelude.addFunction(\"void computeAtmosphericScatteringVaryings()\", computeAtmosphericScatteringVaryings);\r\n main.addline(\" computeAtmosphericScatteringVaryings();\");\r\n }\r\n\r\n const checkForLateDiscard = this.get(VertexShaderComponent.CheckForLateDiscard);\r\n if (undefined !== checkForLateDiscard) {\r\n prelude.addFunction(\"bool checkForLateDiscard()\", checkForLateDiscard);\r\n main.addline(lateVertexDiscard);\r\n }\r\n\r\n prelude.addMain(main.source);\r\n return prelude.source;\r\n }\r\n\r\n public copyFrom(src: VertexShaderBuilder): void {\r\n this.copyCommon(src);\r\n this._computedVarying = [...src._computedVarying];\r\n }\r\n}\r\n\r\n/** Describes the optional and required components which can be assembled into complete\r\n * @internal\r\n */\r\nexport const enum FragmentShaderComponent {\r\n // (Optional) Return true to immediately discard this fragment.\r\n // bool checkForEarlyDiscard()\r\n CheckForEarlyDiscard,\r\n // (Required) Compute this fragment's base color\r\n // vec4 computeBaseColor()\r\n ComputeBaseColor,\r\n // (Optional) Apply material overrides to base color\r\n // vec4 applyMaterialOverrides(vec4 baseColor)\r\n ApplyMaterialOverrides,\r\n // (Optional) Adjust base color after material and/or feature overrides have been applied.\r\n // vec4 finalizeBaseColor(vec4 baseColor)\r\n FinalizeBaseColor,\r\n // (Optional) Return true if this fragment should be discarded\r\n // Do not invoke discard directly in your shader components - instead, return true from this function to generate a discard statement.\r\n // bool checkForDiscard(vec4 baseColor)\r\n CheckForDiscard,\r\n // (Optional) Return true if the alpha value is not suitable for the current render pass\r\n // bool discardByAlpha(float alpha)\r\n DiscardByAlpha,\r\n // (Optional) Apply monochrome overrides to base color\r\n // vec4 applyMonochrome(vec4 baseColor)\r\n ApplyMonochrome,\r\n // (Optional) Apply thematic display to base color. This happens before lighting and can alter the fragment color that is lit.\r\n // vec4 applyThematicDisplay(vec4 baseColor)\r\n ApplyThematicDisplay,\r\n // (Optional) Apply lighting to base color\r\n // vec4 applyLighting(vec4 baseColor)\r\n ApplyLighting,\r\n // (Optional) Apply white-on-white reversal to base color\r\n ReverseWhiteOnWhite,\r\n // (Optional) Discard if outside any clipping planes\r\n // void applyClipping()\r\n ApplyClipping,\r\n // (Optional) Apply countour lines to lit base color\r\n // vec4 applyClipping(vec4 baseColor)\r\n ApplyContours,\r\n // (Optional) Apply flash hilite to lit base color\r\n // vec4 applyFlash(vec4 baseColor)\r\n ApplyFlash,\r\n // (Optional) Apply planar classifier.\r\n // vec4 applyPlanarClassification(vec4)\r\n ApplyPlanarClassifier,\r\n // (Optional) Apply Draping.\r\n // vec4 ApplyDraping(vec4)\r\n ApplyDraping,\r\n // (Optional) Apply solar shadow map.\r\n // vec4 applySolarShadowMap(vec4)\r\n ApplySolarShadowMap,\r\n // (Optional) Apply wiremesh to edges of triangles\r\n // vec4 applyWiremesh(vec4 baseColor)\r\n ApplyWiremesh,\r\n // (Optional) Apply a debug color\r\n // vec4 applyDebugColor(vec4 baseColor)\r\n ApplyDebugColor,\r\n // (Required) Assign the final color to gl_FragColor or gl_FragData\r\n // void assignFragData(vec4 baseColor)\r\n AssignFragData,\r\n // (Optional) Override current featureId\r\n // vec4 overrideFeatureId(vec4 currentId)\r\n OverrideFeatureId,\r\n // (Optional) Override fragment depth\r\n // float finalizeDepth()\r\n FinalizeDepth,\r\n // (Optional) Override fragment color. This is invoked just after alpha is multiplied, and just before FragColor is assigned.\r\n // vec4 overrideColor(vec4 currentColor)\r\n OverrideColor,\r\n // (Optional) Override render order to be output to pick buffers.\r\n // float overrideRenderOrder(float renderOrder)\r\n OverrideRenderOrder,\r\n // (Optional) Apply atmospheric scattering effect. (For Skybox and RealityMesh only)\r\n // vec4 applyAtmosphericScattering()\r\n ApplyAtmosphericScattering,\r\n // (Optional) Override normal\r\n // float finalizeNormal()\r\n FinalizeNormal,\r\n COUNT,\r\n}\r\n\r\n/** Assembles the source code for a fragment shader from a set of modular components.\r\n * @internal\r\n */\r\nexport class FragmentShaderBuilder extends ShaderBuilder {\r\n public requiresEarlyZWorkaround = false;\r\n\r\n public constructor(flags: ShaderBuilderFlags = {}) {\r\n super(FragmentShaderComponent.COUNT, flags);\r\n this.addFragOutput(\"FragColor\", -1);\r\n }\r\n\r\n public get(id: FragmentShaderComponent): string | undefined { return this.getComponent(id); }\r\n public set(id: FragmentShaderComponent, component: string) { this.addComponent(id, component); }\r\n public unset(id: FragmentShaderComponent) { this.removeComponent(id); }\r\n\r\n public addDrawBuffersExtension(n: number): void {\r\n this.clearFragOutput();\r\n for (let i = 0; i < n; i++)\r\n this.addFragOutput(`FragColor${i}`, i);\r\n }\r\n\r\n public buildSource(): string {\r\n const applyLighting = this.get(FragmentShaderComponent.ApplyLighting);\r\n const prelude = this.buildPrelude(undefined);\r\n\r\n const computeBaseColor = this.get(FragmentShaderComponent.ComputeBaseColor);\r\n assert(undefined !== computeBaseColor);\r\n if (undefined !== computeBaseColor) {\r\n prelude.addFunction(\"vec4 computeBaseColor()\", computeBaseColor);\r\n }\r\n\r\n const main = new SourceBuilder();\r\n main.newline();\r\n\r\n // Initialization logic that should occur at start of main() - primarily global variables whose values\r\n // are too complex to compute inline or which depend on uniforms and/or other globals.\r\n for (const init of this._initializers) {\r\n if (\"\\n\" === init.charAt(0))\r\n main.addline(` {${init} }\\n`);\r\n else\r\n main.addline(` { ${init} }\\n`);\r\n }\r\n\r\n const checkForEarlyDiscard = this.get(FragmentShaderComponent.CheckForEarlyDiscard);\r\n if (undefined !== checkForEarlyDiscard) {\r\n prelude.addFunction(\"bool checkForEarlyDiscard()\", checkForEarlyDiscard);\r\n main.addline(\" if (checkForEarlyDiscard()) { discard; return; }\");\r\n }\r\n\r\n const finalizeNormal = this.get(FragmentShaderComponent.FinalizeNormal);\r\n if (undefined !== finalizeNormal) {\r\n prelude.addFunction(\"vec3 finalizeNormal()\", finalizeNormal);\r\n main.addline(\" g_normal = finalizeNormal();\");\r\n }\r\n\r\n main.addline(\" vec4 baseColor = computeBaseColor();\");\r\n\r\n const finalizeDepth = this.get(FragmentShaderComponent.FinalizeDepth);\r\n if (undefined !== finalizeDepth) {\r\n prelude.addFunction(\"float finalizeDepth()\", finalizeDepth);\r\n main.addline(\" float finalDepth = finalizeDepth();\");\r\n main.addline(\" gl_FragDepth = finalDepth;\");\r\n }\r\n\r\n let clipIndent = \"\";\r\n const applyClipping = this.get(FragmentShaderComponent.ApplyClipping);\r\n if (undefined !== applyClipping) {\r\n prelude.addline(\"vec3 g_clipColor;\\n\");\r\n prelude.addFunction(\"bvec2 applyClipping(vec4 baseColor)\", applyClipping);\r\n main.addline(\" g_hasClipColor = applyClipping(baseColor);\");\r\n main.addline(\" if (g_hasClipColor.x) { baseColor.rgb = g_clipColor; } else {\");\r\n clipIndent = \" \";\r\n }\r\n\r\n const applyMaterialOverrides = this.get(FragmentShaderComponent.ApplyMaterialOverrides);\r\n if (undefined !== applyMaterialOverrides) {\r\n prelude.addFunction(\"vec4 applyMaterialOverrides(vec4 baseColor)\", applyMaterialOverrides);\r\n main.addline(`${clipIndent} baseColor = applyMaterialOverrides(baseColor);`);\r\n }\r\n\r\n const applyThematicDisplay = this.get(FragmentShaderComponent.ApplyThematicDisplay);\r\n if (undefined !== applyThematicDisplay) {\r\n prelude.addFunction(\"vec4 applyThematicDisplay(vec4 baseColor)\", applyThematicDisplay);\r\n main.addline(`${clipIndent} if (u_renderPass != kRenderPass_PlanarClassification)`);\r\n main.addline(`${clipIndent} baseColor = applyThematicDisplay(baseColor);`);\r\n }\r\n\r\n const applyPlanarClassifier = this.get(FragmentShaderComponent.ApplyPlanarClassifier);\r\n if (undefined !== applyPlanarClassifier) {\r\n if (undefined === finalizeDepth) {\r\n if (this.findFunction(volClassOpaqueColor))\r\n main.addline(`${clipIndent} float finalDepth = gl_FragCoord.z;`);\r\n else\r\n main.addline(`${clipIndent} float finalDepth = 1.0;`);\r\n }\r\n prelude.addFunction(\"vec4 applyPlanarClassifications(vec4 baseColor, float depth)\", applyPlanarClassifier);\r\n main.addline(`${clipIndent} baseColor = applyPlanarClassifications(baseColor, finalDepth);`);\r\n }\r\n\r\n const applySolarShadowMap = this.get(FragmentShaderComponent.ApplySolarShadowMap);\r\n if (undefined !== applySolarShadowMap) {\r\n prelude.addFunction(\"vec4 applySolarShadowMap(vec4 baseColor)\", applySolarShadowMap);\r\n main.addline(`${clipIndent} baseColor = applySolarShadowMap(baseColor);`);\r\n }\r\n\r\n const finalize = this.get(FragmentShaderComponent.FinalizeBaseColor);\r\n if (undefined !== finalize) {\r\n prelude.addFunction(\"vec4 finalizeBaseColor(vec4 baseColor)\", finalize);\r\n main.addline(`${clipIndent} baseColor = finalizeBaseColor(baseColor);`);\r\n }\r\n\r\n const checkForDiscard = this.get(FragmentShaderComponent.CheckForDiscard);\r\n if (undefined !== checkForDiscard) {\r\n prelude.addFunction(\"bool checkForDiscard(vec4 baseColor)\", checkForDiscard);\r\n main.addline(`${clipIndent} if (checkForDiscard(baseColor)) { discard; return; }`);\r\n }\r\n\r\n const discardByAlpha = this.get(FragmentShaderComponent.DiscardByAlpha);\r\n if (undefined !== discardByAlpha) {\r\n prelude.addFunction(\"bool discardByAlpha(float alpha)\", discardByAlpha);\r\n main.addline(`${clipIndent} if (discardByAlpha(baseColor.a)) { discard; return; }`);\r\n }\r\n\r\n if (undefined !== applyClipping)\r\n main.addline(\" }\");\r\n\r\n const applyMonochrome = this.get(FragmentShaderComponent.ApplyMonochrome);\r\n if (undefined !== applyMonochrome) {\r\n prelude.addFunction(\"vec4 applyMonochrome(vec4 baseColor)\", applyMonochrome);\r\n main.addline(\" baseColor = applyMonochrome(baseColor);\");\r\n }\r\n\r\n if (undefined !== applyLighting) {\r\n prelude.addFunction(\"vec4 applyLighting(vec4 baseColor)\", applyLighting);\r\n main.addline(\" baseColor = applyLighting(baseColor);\");\r\n }\r\n\r\n if (undefined !== applyClipping) {\r\n main.addline(\" if (g_hasClipColor.y) { baseColor.rgba = vec4(g_clipColor, 1.0); } \");\r\n }\r\n\r\n const reverseWoW = this.get(FragmentShaderComponent.ReverseWhiteOnWhite);\r\n if (undefined !== reverseWoW) {\r\n prelude.addFunction(\"vec4 reverseWhiteOnWhite(vec4 baseColor)\", reverseWoW);\r\n main.addline(\" baseColor = reverseWhiteOnWhite(baseColor);\");\r\n }\r\n\r\n const applyContours = this.get(FragmentShaderComponent.ApplyContours);\r\n if (undefined !== applyContours) {\r\n prelude.addFunction(\"vec4 applyContours(vec4 baseColor)\", applyContours);\r\n main.addline(\" baseColor = applyContours(baseColor);\");\r\n }\r\n\r\n const applyFlash = this.get(FragmentShaderComponent.ApplyFlash);\r\n if (undefined !== applyFlash) {\r\n prelude.addFunction(\"vec4 applyFlash(vec4 baseColor)\", applyFlash);\r\n main.addline(\" baseColor = applyFlash(baseColor);\");\r\n }\r\n\r\n const applyWiremesh = this.get(FragmentShaderComponent.ApplyWiremesh);\r\n if (applyWiremesh) {\r\n prelude.addFunction(\"vec4 applyWiremesh(vec4 baseColor)\", applyWiremesh);\r\n main.addline(\" baseColor = applyWiremesh(baseColor);\");\r\n }\r\n\r\n const applyAtmosphericScattering = this.get(FragmentShaderComponent.ApplyAtmosphericScattering);\r\n if (applyAtmosphericScattering) {\r\n prelude.addFunction(\"vec4 applyAtmosphericScattering(vec4 baseColor)\", applyAtmosphericScattering);\r\n main.addline(\" baseColor = applyAtmosphericScattering(baseColor);\");\r\n }\r\n\r\n const applyDraping = this.get(FragmentShaderComponent.ApplyDraping);\r\n if (undefined !== applyDraping) {\r\n prelude.addFunction(\"vec4 applyDraping(vec4 baseColor)\", applyDraping);\r\n main.addline(`${clipIndent} baseColor = applyDraping(baseColor);`);\r\n }\r\n\r\n const applyDebug = this.get(FragmentShaderComponent.ApplyDebugColor);\r\n if (undefined !== applyDebug) {\r\n prelude.addFunction(\"vec4 applyDebugColor(vec4 baseColor)\", applyDebug);\r\n main.addline(\" baseColor = applyDebugColor(baseColor);\");\r\n }\r\n\r\n const assignFragData = this.get(FragmentShaderComponent.AssignFragData);\r\n assert(undefined !== assignFragData);\r\n if (undefined !== assignFragData) {\r\n prelude.addFunction(\"void assignFragData(vec4 baseColor)\", assignFragData);\r\n main.addline(\" assignFragData(baseColor);\");\r\n }\r\n\r\n if (this.requiresEarlyZWorkaround) {\r\n // Add a conditional discard that never executes to force buggy Intel driver to skip early Z despite our fragment shader writing depth.\r\n main.addline(\"if (v_eyeSpace.z == 9999999.0) discard;\");\r\n }\r\n\r\n prelude.addMain(main.source);\r\n return prelude.source;\r\n }\r\n\r\n private buildPrelude(attrMap: Map<string, AttributeDetails> | undefined): SourceBuilder {\r\n return this.buildPreludeCommon(attrMap, false);\r\n }\r\n\r\n public copyFrom(src: FragmentShaderBuilder): void {\r\n this.copyCommon(src);\r\n this.requiresEarlyZWorkaround = src.requiresEarlyZWorkaround;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const enum ShaderType {\r\n Fragment = 1 << 0,\r\n Vertex = 1 << 1,\r\n Both = Fragment | Vertex,\r\n}\r\n\r\n/**\r\n * Assembles vertex and fragment shaders from a set of modular components to produce a compiled ShaderProgram.\r\n * Be very careful with components which use samplers to ensure that no conflicts exist with texture units used by other components (see TextureUnit enum).\r\n * @internal\r\n */\r\nexport class ProgramBuilder {\r\n public readonly vert: VertexShaderBuilder;\r\n public readonly frag: FragmentShaderBuilder;\r\n private readonly _flags: ShaderBuilderFlags;\r\n private readonly _attrMap?: Map<string, AttributeDetails>;\r\n\r\n public constructor(attrMap?: Map<string, AttributeDetails>, flags: ShaderBuilderFlags = {}) {\r\n this._attrMap = attrMap;\r\n this.vert = new VertexShaderBuilder(flags);\r\n this.frag = new FragmentShaderBuilder(flags);\r\n this._flags = flags; // only needed for clone - though could look up from vert or frag shader.\r\n }\r\n\r\n private addVariable(v: ShaderVariable, which: ShaderType) {\r\n if (which & ShaderType.Fragment) {\r\n this.frag.addVariable(v);\r\n }\r\n\r\n if (which & ShaderType.Vertex) {\r\n this.vert.addVariable(v);\r\n }\r\n }\r\n\r\n public addUniform(name: string, type: VariableType, binding: AddVariableBinding, which: ShaderType = ShaderType.Both) {\r\n this.addVariable(ShaderVariable.create(name, type, VariableScope.Uniform, binding), which);\r\n }\r\n public addUniformArray(name: string, type: VariableType, length: number, binding: AddVariableBinding, which: ShaderType = ShaderType.Both) {\r\n this.addVariable(ShaderVariable.createArray(name, type, length, VariableScope.Uniform, binding), which);\r\n }\r\n public addVarying(name: string, type: VariableType) {\r\n this.addVariable(ShaderVariable.create(name, type, VariableScope.Varying), ShaderType.Both);\r\n }\r\n public addGlobal(name: string, type: VariableType, which: ShaderType = ShaderType.Both, value?: string, isConst: boolean = false) {\r\n this.addVariable(ShaderVariable.createGlobal(name, type, value, isConst), which);\r\n }\r\n\r\n public addInlineComputedVarying(name: string, type: VariableType, inlineComputation: string) {\r\n if (this.frag.addVarying(name, type))\r\n this.vert.addComputedVarying(name, type, inlineComputation);\r\n }\r\n public addFunctionComputedVarying(name: string, type: VariableType, funcName: string, funcBody: string) {\r\n let funcDecl = `\\n${Convert.typeToString(type)} ${funcName}()`;\r\n funcDecl = SourceBuilder.buildFunctionDefinition(funcDecl, funcBody);\r\n\r\n const funcCall = `${funcName}()`;\r\n this.addFunctionComputedVaryingWithArgs(name, type, funcCall, funcDecl);\r\n }\r\n public addFunctionComputedVaryingWithArgs(name: string, type: VariableType, funcCall: string, funcDef: string) {\r\n this.vert.addFunction(funcDef);\r\n const computation = `${name} = ${funcCall};`;\r\n this.addInlineComputedVarying(name, type, computation);\r\n }\r\n\r\n /** Assembles the vertex and fragment shader code and returns a ready-to-compile shader program */\r\n public buildProgram(gl: WebGL2RenderingContext): ShaderProgram {\r\n const vertSource = this.vert.buildSource(this._attrMap);\r\n const fragSource = this.frag.buildSource(); // NB: frag has no need to specify attributes, only vertex does.\r\n\r\n // Debug output\r\n const debugVaryings = false;\r\n if (debugVaryings) {\r\n const dbgLog = (x: string) => console.log(x); // eslint-disable-line no-console\r\n const outSrc = false; // true for source out, false for just varying info\r\n if (this.frag.headerComment) {\r\n let tStr = \"\";\r\n if (!outSrc) {\r\n tStr = `${this.frag.headerComment}\\n`;\r\n }\r\n const tStr2 = this.vert.checkMaxVaryingVectors(fragSource);\r\n if (tStr2) {\r\n if (outSrc) {\r\n dbgLog(\"//===============================================================================================================\");\r\n dbgLog(vertSource);\r\n dbgLog(\"//========= Varying Info =========\");\r\n dbgLog(tStr2);\r\n dbgLog(fragSource);\r\n } else {\r\n dbgLog(tStr + tStr2);\r\n }\r\n }\r\n }\r\n }\r\n\r\n const prog = new ShaderProgram(gl, vertSource, fragSource, this._attrMap, this.vert.headerComment, this.frag.headerComment);\r\n this.vert.addBindings(prog);\r\n this.frag.addBindings(prog, this.vert);\r\n return prog;\r\n }\r\n\r\n public setDebugDescription(description: string): void {\r\n this.vert.headerComment = (`//!V! ${description}`);\r\n this.frag.headerComment = (`//!F! ${description}`);\r\n }\r\n\r\n /** Returns a deep copy of this program builder. */\r\n public clone(): ProgramBuilder {\r\n const clone = new ProgramBuilder(this._attrMap, this._flags);\r\n clone.vert.copyFrom(this.vert);\r\n clone.frag.copyFrom(this.frag);\r\n return clone;\r\n }\r\n}\r\n"]}
@@ -19,10 +19,10 @@ class AngleDescription extends FormattedQuantityDescription_1.FormattedQuantityD
19
19
  constructor(name, displayLabel, iconSpec, kindOfQuantityName) {
20
20
  const defaultName = "angle";
21
21
  super({
22
- name: name ? name : defaultName,
23
- displayLabel: displayLabel ? displayLabel : IModelApp_1.IModelApp.localization.getLocalizedString("iModelJs:Properties.Angle"),
24
- kindOfQuantityName: kindOfQuantityName ? kindOfQuantityName : "AecUnits.ANGLE",
25
- iconSpec
22
+ name: name ?? defaultName,
23
+ displayLabel: displayLabel ?? IModelApp_1.IModelApp.localization.getLocalizedString("iModelJs:Properties.Angle"),
24
+ kindOfQuantityName: kindOfQuantityName ?? "DefaultToolsUnits.ANGLE",
25
+ iconSpec,
26
26
  });
27
27
  }
28
28
  get formatterQuantityType() { return QuantityFormatter_1.QuantityType.Angle; }
@@ -1 +1 @@
1
- {"version":3,"file":"AngleDescription.js","sourceRoot":"","sources":["../../../src/properties/AngleDescription.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,4CAAyC;AACzC,gFAAwE;AACxE,iFAA8E;AAE9E;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,2DAA4B;IAChE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB,EAAE,kBAA2B;QAC9F,MAAM,WAAW,GAAG,OAAO,CAAC;QAC5B,KAAK,CAAC;YACJ,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;YAC/B,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,2BAA2B,CAAC;YAClH,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB;YAC9E,QAAQ;SACT,CAAC,CAAA;IACJ,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/E;;OAEG;IACH,IAAW,YAAY,KAAa,OAAO,OAAO,CAAC,CAAC,CAAC;IAErD,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,wCAAwC,CAAC,CAAC,CAAC,CAAC;CAChI;AAlBD,4CAkBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Properties\r\n */\r\n\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\r\nimport { FormattedQuantityDescription } from \"./FormattedQuantityDescription\";\r\n\r\n/**\r\n * Angle Property Description\r\n * @beta\r\n */\r\nexport class AngleDescription extends FormattedQuantityDescription {\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string, kindOfQuantityName?: string) {\r\n const defaultName = \"angle\";\r\n super({\r\n name: name ? name : defaultName,\r\n displayLabel: displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Angle\"),\r\n kindOfQuantityName: kindOfQuantityName ? kindOfQuantityName : \"AecUnits.ANGLE\",\r\n iconSpec\r\n })\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.Angle; }\r\n /**\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use the `kindOfQuantityName` property instead.\r\n */\r\n public get quantityType(): string { return \"Angle\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseAngle\"); }\r\n}\r\n"]}
1
+ {"version":3,"file":"AngleDescription.js","sourceRoot":"","sources":["../../../src/properties/AngleDescription.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,4CAAyC;AACzC,gFAAwE;AACxE,iFAA8E;AAE9E;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,2DAA4B;IAChE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB,EAAE,kBAA2B;QAC9F,MAAM,WAAW,GAAG,OAAO,CAAC;QAC5B,KAAK,CAAC;YACJ,IAAI,EAAE,IAAI,IAAI,WAAW;YACzB,YAAY,EAAE,YAAY,IAAI,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,2BAA2B,CAAC;YACpG,kBAAkB,EAAE,kBAAkB,IAAI,yBAAyB;YACnE,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/E;;OAEG;IACH,IAAW,YAAY,KAAa,OAAO,OAAO,CAAC,CAAC,CAAC;IAErD,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,wCAAwC,CAAC,CAAC,CAAC,CAAC;CAChI;AAlBD,4CAkBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Properties\r\n */\r\n\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\r\nimport { FormattedQuantityDescription } from \"./FormattedQuantityDescription\";\r\n\r\n/**\r\n * Angle Property Description\r\n * @beta\r\n */\r\nexport class AngleDescription extends FormattedQuantityDescription {\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string, kindOfQuantityName?: string) {\r\n const defaultName = \"angle\";\r\n super({\r\n name: name ?? defaultName,\r\n displayLabel: displayLabel ?? IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Angle\"),\r\n kindOfQuantityName: kindOfQuantityName ?? \"DefaultToolsUnits.ANGLE\",\r\n iconSpec,\r\n });\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.Angle; }\r\n /**\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use the `kindOfQuantityName` property instead.\r\n */\r\n public get quantityType(): string { return \"Angle\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseAngle\"); }\r\n}\r\n"]}
@@ -19,9 +19,9 @@ class LengthDescription extends FormattedQuantityDescription_1.FormattedQuantity
19
19
  constructor(name, displayLabel, iconSpec, kindOfQuantityName) {
20
20
  const defaultName = "length";
21
21
  super({
22
- name: name ? name : defaultName,
23
- displayLabel: displayLabel ? displayLabel : IModelApp_1.IModelApp.localization.getLocalizedString("iModelJs:Properties.Length"),
24
- kindOfQuantityName: kindOfQuantityName ? kindOfQuantityName : "AecUnits.LENGTH",
22
+ name: name ?? defaultName,
23
+ displayLabel: displayLabel ?? IModelApp_1.IModelApp.localization.getLocalizedString("iModelJs:Properties.Length"),
24
+ kindOfQuantityName: kindOfQuantityName ?? "DefaultToolsUnits.LENGTH",
25
25
  iconSpec,
26
26
  });
27
27
  }
@@ -41,9 +41,9 @@ class SurveyLengthDescription extends FormattedQuantityDescription_1.FormattedQu
41
41
  constructor(name, displayLabel, iconSpec, kindOfQuantityName) {
42
42
  const defaultName = "surveyLength";
43
43
  super({
44
- name: name ? name : defaultName,
45
- displayLabel: displayLabel ? displayLabel : IModelApp_1.IModelApp.localization.getLocalizedString("iModelJs:Properties.Length"),
46
- kindOfQuantityName: kindOfQuantityName ? kindOfQuantityName : "AecUnits.LENGTH",
44
+ name: name ?? defaultName,
45
+ displayLabel: displayLabel ?? IModelApp_1.IModelApp.localization.getLocalizedString("iModelJs:Properties.Length"),
46
+ kindOfQuantityName: kindOfQuantityName ?? "CivilUnits.LENGTH",
47
47
  iconSpec,
48
48
  });
49
49
  }
@@ -63,9 +63,9 @@ class EngineeringLengthDescription extends FormattedQuantityDescription_1.Format
63
63
  constructor(name, displayLabel, iconSpec, kindOfQuantityName) {
64
64
  const defaultName = "engineeringLength";
65
65
  super({
66
- name: name ? name : defaultName,
67
- displayLabel: displayLabel ? displayLabel : IModelApp_1.IModelApp.localization.getLocalizedString("iModelJs:Properties.Length"),
68
- kindOfQuantityName: kindOfQuantityName ? kindOfQuantityName : "AecUnits.LENGTH",
66
+ name: name ?? defaultName,
67
+ displayLabel: displayLabel ?? IModelApp_1.IModelApp.localization.getLocalizedString("iModelJs:Properties.Length"),
68
+ kindOfQuantityName: kindOfQuantityName ?? "AecUnits.LENGTH",
69
69
  iconSpec,
70
70
  });
71
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LengthDescription.js","sourceRoot":"","sources":["../../../src/properties/LengthDescription.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,4CAAyC;AACzC,gFAAwE;AACxE,iFAA8E;AAE9E;;;GAGG;AACH,MAAa,iBAAkB,SAAQ,2DAA4B;IACjE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB,EAAE,kBAA2B;QAC9F,MAAM,WAAW,GAAG,QAAQ,CAAC;QAC7B,KAAK,CAAC;YACJ,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;YAC/B,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC;YACnH,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB;YAC/E,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF;;OAEG;IACH,IAAW,YAAY,KAAa,OAAO,QAAQ,CAAC,CAAC,CAAC;IAEtD,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAlBD,8CAkBC;AAED;;;GAGG;AACH,MAAa,uBAAwB,SAAQ,2DAA4B;IACvE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB,EAAE,kBAA2B;QAC9F,MAAM,WAAW,GAAG,cAAc,CAAC;QACnC,KAAK,CAAC;YACJ,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;YAC/B,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC;YACnH,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB;YAC/E,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IACtF;;OAEG;IACH,IAAW,YAAY,KAAa,OAAO,cAAc,CAAC,CAAC,CAAC;IAE5D,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAlBD,0DAkBC;AAED;;;GAGG;AACH,MAAa,4BAA6B,SAAQ,2DAA4B;IAE5E,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB,EAAE,kBAA2B;QAC9F,MAAM,WAAW,GAAG,mBAAmB,CAAC;QACxC,KAAK,CAAC;YACJ,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;YAC/B,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC;YACnH,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB;YAC/E,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3F;;OAEG;IACH,IAAW,YAAY,KAAa,OAAO,mBAAmB,CAAC,CAAC,CAAC;IAEjE,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAnBD,oEAmBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Properties\r\n */\r\n\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\r\nimport { FormattedQuantityDescription } from \"./FormattedQuantityDescription\";\r\n\r\n/**\r\n * Length Property Description\r\n * @beta\r\n */\r\nexport class LengthDescription extends FormattedQuantityDescription {\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string, kindOfQuantityName?: string) {\r\n const defaultName = \"length\";\r\n super({\r\n name: name ? name : defaultName,\r\n displayLabel: displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\r\n kindOfQuantityName: kindOfQuantityName ? kindOfQuantityName : \"AecUnits.LENGTH\",\r\n iconSpec,\r\n });\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.Length; }\r\n /**\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use the `kindOfQuantityName` property instead.\r\n */\r\n public get quantityType(): string { return \"Length\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\r\n}\r\n\r\n/**\r\n * Survey Length Property Description\r\n * @beta\r\n */\r\nexport class SurveyLengthDescription extends FormattedQuantityDescription {\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string, kindOfQuantityName?: string) {\r\n const defaultName = \"surveyLength\";\r\n super({\r\n name: name ? name : defaultName,\r\n displayLabel: displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\r\n kindOfQuantityName: kindOfQuantityName ? kindOfQuantityName : \"AecUnits.LENGTH\",\r\n iconSpec,\r\n });\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.LengthSurvey; }\r\n /**\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use the `kindOfQuantityName` property instead.\r\n */\r\n public get quantityType(): string { return \"LengthSurvey\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\r\n}\r\n\r\n/**\r\n * Engineering Length Property Description\r\n * @beta\r\n */\r\nexport class EngineeringLengthDescription extends FormattedQuantityDescription {\r\n\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string, kindOfQuantityName?: string) {\r\n const defaultName = \"engineeringLength\";\r\n super({\r\n name: name ? name : defaultName,\r\n displayLabel: displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\r\n kindOfQuantityName: kindOfQuantityName ? kindOfQuantityName : \"AecUnits.LENGTH\",\r\n iconSpec,\r\n });\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.LengthEngineering; }\r\n /**\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use the `kindOfQuantityName` property instead.\r\n */\r\n public get quantityType(): string { return \"LengthEngineering\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\r\n}\r\n"]}
1
+ {"version":3,"file":"LengthDescription.js","sourceRoot":"","sources":["../../../src/properties/LengthDescription.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,4CAAyC;AACzC,gFAAwE;AACxE,iFAA8E;AAE9E;;;GAGG;AACH,MAAa,iBAAkB,SAAQ,2DAA4B;IACjE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB,EAAE,kBAA2B;QAC9F,MAAM,WAAW,GAAG,QAAQ,CAAC;QAC7B,KAAK,CAAC;YACJ,IAAI,EAAE,IAAI,IAAI,WAAW;YACzB,YAAY,EAAE,YAAY,IAAI,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC;YACrG,kBAAkB,EAAE,kBAAkB,IAAI,0BAA0B;YACpE,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF;;OAEG;IACH,IAAW,YAAY,KAAa,OAAO,QAAQ,CAAC,CAAC,CAAC;IAEtD,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAlBD,8CAkBC;AAED;;;GAGG;AACH,MAAa,uBAAwB,SAAQ,2DAA4B;IACvE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB,EAAE,kBAA2B;QAC9F,MAAM,WAAW,GAAG,cAAc,CAAC;QACnC,KAAK,CAAC;YACJ,IAAI,EAAE,IAAI,IAAI,WAAW;YACzB,YAAY,EAAE,YAAY,IAAI,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC;YACrG,kBAAkB,EAAE,kBAAkB,IAAI,mBAAmB;YAC7D,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IACtF;;OAEG;IACH,IAAW,YAAY,KAAa,OAAO,cAAc,CAAC,CAAC,CAAC;IAE5D,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAlBD,0DAkBC;AAED;;;GAGG;AACH,MAAa,4BAA6B,SAAQ,2DAA4B;IAE5E,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB,EAAE,kBAA2B;QAC9F,MAAM,WAAW,GAAG,mBAAmB,CAAC;QACxC,KAAK,CAAC;YACJ,IAAI,EAAE,IAAI,IAAI,WAAW;YACzB,YAAY,EAAE,YAAY,IAAI,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC;YACrG,kBAAkB,EAAE,kBAAkB,IAAI,iBAAiB;YAC3D,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3F;;OAEG;IACH,IAAW,YAAY,KAAa,OAAO,mBAAmB,CAAC,CAAC,CAAC;IAEjE,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAnBD,oEAmBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Properties\r\n */\r\n\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\r\nimport { FormattedQuantityDescription } from \"./FormattedQuantityDescription\";\r\n\r\n/**\r\n * Length Property Description\r\n * @beta\r\n */\r\nexport class LengthDescription extends FormattedQuantityDescription {\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string, kindOfQuantityName?: string) {\r\n const defaultName = \"length\";\r\n super({\r\n name: name ?? defaultName,\r\n displayLabel: displayLabel ?? IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\r\n kindOfQuantityName: kindOfQuantityName ?? \"DefaultToolsUnits.LENGTH\",\r\n iconSpec,\r\n });\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.Length; }\r\n /**\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use the `kindOfQuantityName` property instead.\r\n */\r\n public get quantityType(): string { return \"Length\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\r\n}\r\n\r\n/**\r\n * Survey Length Property Description\r\n * @beta\r\n */\r\nexport class SurveyLengthDescription extends FormattedQuantityDescription {\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string, kindOfQuantityName?: string) {\r\n const defaultName = \"surveyLength\";\r\n super({\r\n name: name ?? defaultName,\r\n displayLabel: displayLabel ?? IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\r\n kindOfQuantityName: kindOfQuantityName ?? \"CivilUnits.LENGTH\",\r\n iconSpec,\r\n });\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.LengthSurvey; }\r\n /**\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use the `kindOfQuantityName` property instead.\r\n */\r\n public get quantityType(): string { return \"LengthSurvey\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\r\n}\r\n\r\n/**\r\n * Engineering Length Property Description\r\n * @beta\r\n */\r\nexport class EngineeringLengthDescription extends FormattedQuantityDescription {\r\n\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string, kindOfQuantityName?: string) {\r\n const defaultName = \"engineeringLength\";\r\n super({\r\n name: name ?? defaultName,\r\n displayLabel: displayLabel ?? IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\r\n kindOfQuantityName: kindOfQuantityName ?? \"AecUnits.LENGTH\",\r\n iconSpec,\r\n });\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.LengthEngineering; }\r\n /**\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use the `kindOfQuantityName` property instead.\r\n */\r\n public get quantityType(): string { return \"LengthEngineering\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\r\n}\r\n"]}