engine.alpha.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { ThinEngine } from "../../Engines/thinEngine.js";
  2. ThinEngine.prototype.setAlphaMode = function (mode, noDepthWriteChange = false) {
  3. if (this._alphaMode === mode) {
  4. if (!noDepthWriteChange) {
  5. // Make sure we still have the correct depth mask according to the alpha mode (a transparent material could have forced writting to the depth buffer, for instance)
  6. const depthMask = mode === 0;
  7. if (this.depthCullingState.depthMask !== depthMask) {
  8. this.depthCullingState.depthMask = depthMask;
  9. }
  10. }
  11. return;
  12. }
  13. switch (mode) {
  14. case 0:
  15. this._alphaState.alphaBlend = false;
  16. break;
  17. case 7:
  18. this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE);
  19. this._alphaState.alphaBlend = true;
  20. break;
  21. case 8:
  22. this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);
  23. this._alphaState.alphaBlend = true;
  24. break;
  25. case 2:
  26. this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE);
  27. this._alphaState.alphaBlend = true;
  28. break;
  29. case 6:
  30. this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ZERO, this._gl.ONE);
  31. this._alphaState.alphaBlend = true;
  32. break;
  33. case 1:
  34. this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE, this._gl.ZERO, this._gl.ONE);
  35. this._alphaState.alphaBlend = true;
  36. break;
  37. case 3:
  38. this._alphaState.setAlphaBlendFunctionParameters(this._gl.ZERO, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE);
  39. this._alphaState.alphaBlend = true;
  40. break;
  41. case 4:
  42. this._alphaState.setAlphaBlendFunctionParameters(this._gl.DST_COLOR, this._gl.ZERO, this._gl.ONE, this._gl.ONE);
  43. this._alphaState.alphaBlend = true;
  44. break;
  45. case 5:
  46. this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE);
  47. this._alphaState.alphaBlend = true;
  48. break;
  49. case 9:
  50. this._alphaState.setAlphaBlendFunctionParameters(this._gl.CONSTANT_COLOR, this._gl.ONE_MINUS_CONSTANT_COLOR, this._gl.CONSTANT_ALPHA, this._gl.ONE_MINUS_CONSTANT_ALPHA);
  51. this._alphaState.alphaBlend = true;
  52. break;
  53. case 10:
  54. this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);
  55. this._alphaState.alphaBlend = true;
  56. break;
  57. case 11:
  58. this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ONE, this._gl.ONE);
  59. this._alphaState.alphaBlend = true;
  60. break;
  61. case 12:
  62. this._alphaState.setAlphaBlendFunctionParameters(this._gl.DST_ALPHA, this._gl.ONE, this._gl.ZERO, this._gl.ZERO);
  63. this._alphaState.alphaBlend = true;
  64. break;
  65. case 13:
  66. this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE_MINUS_DST_COLOR, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE_MINUS_DST_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA);
  67. this._alphaState.alphaBlend = true;
  68. break;
  69. case 14:
  70. this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);
  71. this._alphaState.alphaBlend = true;
  72. break;
  73. case 15:
  74. this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ONE, this._gl.ZERO);
  75. this._alphaState.alphaBlend = true;
  76. break;
  77. case 16:
  78. this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE_MINUS_DST_COLOR, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ZERO, this._gl.ONE);
  79. this._alphaState.alphaBlend = true;
  80. break;
  81. case 17:
  82. // Same as ALPHA_COMBINE but accumulates (1 - alpha) values in the alpha channel for a later readout in order independant transparency
  83. this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);
  84. this._alphaState.alphaBlend = true;
  85. break;
  86. }
  87. if (!noDepthWriteChange) {
  88. this.depthCullingState.depthMask = mode === 0;
  89. }
  90. this._alphaMode = mode;
  91. };
  92. //# sourceMappingURL=engine.alpha.js.map