clipPlaneMaterialHelper.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /** @internal */
  2. export function addClipPlaneUniforms(uniforms) {
  3. if (uniforms.indexOf("vClipPlane") === -1) {
  4. uniforms.push("vClipPlane");
  5. }
  6. if (uniforms.indexOf("vClipPlane2") === -1) {
  7. uniforms.push("vClipPlane2");
  8. }
  9. if (uniforms.indexOf("vClipPlane3") === -1) {
  10. uniforms.push("vClipPlane3");
  11. }
  12. if (uniforms.indexOf("vClipPlane4") === -1) {
  13. uniforms.push("vClipPlane4");
  14. }
  15. if (uniforms.indexOf("vClipPlane5") === -1) {
  16. uniforms.push("vClipPlane5");
  17. }
  18. if (uniforms.indexOf("vClipPlane6") === -1) {
  19. uniforms.push("vClipPlane6");
  20. }
  21. }
  22. /** @internal */
  23. export function prepareStringDefinesForClipPlanes(primaryHolder, secondaryHolder, defines) {
  24. const clipPlane = !!(primaryHolder.clipPlane ?? secondaryHolder.clipPlane);
  25. const clipPlane2 = !!(primaryHolder.clipPlane2 ?? secondaryHolder.clipPlane2);
  26. const clipPlane3 = !!(primaryHolder.clipPlane3 ?? secondaryHolder.clipPlane3);
  27. const clipPlane4 = !!(primaryHolder.clipPlane4 ?? secondaryHolder.clipPlane4);
  28. const clipPlane5 = !!(primaryHolder.clipPlane5 ?? secondaryHolder.clipPlane5);
  29. const clipPlane6 = !!(primaryHolder.clipPlane6 ?? secondaryHolder.clipPlane6);
  30. if (clipPlane)
  31. defines.push("#define CLIPPLANE");
  32. if (clipPlane2)
  33. defines.push("#define CLIPPLANE2");
  34. if (clipPlane3)
  35. defines.push("#define CLIPPLANE3");
  36. if (clipPlane4)
  37. defines.push("#define CLIPPLANE4");
  38. if (clipPlane5)
  39. defines.push("#define CLIPPLANE5");
  40. if (clipPlane6)
  41. defines.push("#define CLIPPLANE6");
  42. }
  43. /** @internal */
  44. export function prepareDefinesForClipPlanes(primaryHolder, secondaryHolder, defines) {
  45. let changed = false;
  46. const clipPlane = !!(primaryHolder.clipPlane ?? secondaryHolder.clipPlane);
  47. const clipPlane2 = !!(primaryHolder.clipPlane2 ?? secondaryHolder.clipPlane2);
  48. const clipPlane3 = !!(primaryHolder.clipPlane3 ?? secondaryHolder.clipPlane3);
  49. const clipPlane4 = !!(primaryHolder.clipPlane4 ?? secondaryHolder.clipPlane4);
  50. const clipPlane5 = !!(primaryHolder.clipPlane5 ?? secondaryHolder.clipPlane5);
  51. const clipPlane6 = !!(primaryHolder.clipPlane6 ?? secondaryHolder.clipPlane6);
  52. // Do not factorize this code, it breaks browsers optimizations.
  53. if (defines["CLIPPLANE"] !== clipPlane) {
  54. defines["CLIPPLANE"] = clipPlane;
  55. changed = true;
  56. }
  57. if (defines["CLIPPLANE2"] !== clipPlane2) {
  58. defines["CLIPPLANE2"] = clipPlane2;
  59. changed = true;
  60. }
  61. if (defines["CLIPPLANE3"] !== clipPlane3) {
  62. defines["CLIPPLANE3"] = clipPlane3;
  63. changed = true;
  64. }
  65. if (defines["CLIPPLANE4"] !== clipPlane4) {
  66. defines["CLIPPLANE4"] = clipPlane4;
  67. changed = true;
  68. }
  69. if (defines["CLIPPLANE5"] !== clipPlane5) {
  70. defines["CLIPPLANE5"] = clipPlane5;
  71. changed = true;
  72. }
  73. if (defines["CLIPPLANE6"] !== clipPlane6) {
  74. defines["CLIPPLANE6"] = clipPlane6;
  75. changed = true;
  76. }
  77. return changed;
  78. }
  79. /** @internal */
  80. export function bindClipPlane(effect, primaryHolder, secondaryHolder) {
  81. let clipPlane = primaryHolder.clipPlane ?? secondaryHolder.clipPlane;
  82. setClipPlane(effect, "vClipPlane", clipPlane);
  83. clipPlane = primaryHolder.clipPlane2 ?? secondaryHolder.clipPlane2;
  84. setClipPlane(effect, "vClipPlane2", clipPlane);
  85. clipPlane = primaryHolder.clipPlane3 ?? secondaryHolder.clipPlane3;
  86. setClipPlane(effect, "vClipPlane3", clipPlane);
  87. clipPlane = primaryHolder.clipPlane4 ?? secondaryHolder.clipPlane4;
  88. setClipPlane(effect, "vClipPlane4", clipPlane);
  89. clipPlane = primaryHolder.clipPlane5 ?? secondaryHolder.clipPlane5;
  90. setClipPlane(effect, "vClipPlane5", clipPlane);
  91. clipPlane = primaryHolder.clipPlane6 ?? secondaryHolder.clipPlane6;
  92. setClipPlane(effect, "vClipPlane6", clipPlane);
  93. }
  94. function setClipPlane(effect, uniformName, clipPlane) {
  95. if (clipPlane) {
  96. effect.setFloat4(uniformName, clipPlane.normal.x, clipPlane.normal.y, clipPlane.normal.z, clipPlane.d);
  97. }
  98. }
  99. //# sourceMappingURL=clipPlaneMaterialHelper.js.map