extended.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { Scalar, DefaultRenderingPipeline, Scene } from 'babylonjs';
  2. import { SceneManager } from '../../managers/sceneManager';
  3. /**
  4. * A custom upgrade-oriented function configuration for the scene optimizer.
  5. *
  6. * @param viewer the viewer to optimize
  7. */
  8. export function extendedUpgrade(sceneManager: SceneManager): boolean {
  9. let defaultPipeline = <DefaultRenderingPipeline>sceneManager.defaultRenderingPipeline;
  10. // if (!this.Scene.BackgroundHelper) {
  11. // this.Scene.EngineScene.autoClear = false;
  12. // this.Scene.BackgroundHelper = true;
  13. // Would require a dedicated clear color;
  14. // return false;
  15. // }
  16. if (sceneManager.scene.getEngine().getHardwareScalingLevel() > 1) {
  17. let scaling = Scalar.Clamp(sceneManager.scene.getEngine().getHardwareScalingLevel() - 0.25, 0, 1);
  18. sceneManager.scene.getEngine().setHardwareScalingLevel(scaling);
  19. return false;
  20. }
  21. if (!sceneManager.scene.postProcessesEnabled) {
  22. sceneManager.scene.postProcessesEnabled = true;
  23. return false;
  24. }
  25. if (!sceneManager.groundEnabled) {
  26. sceneManager.groundEnabled = true;
  27. return false;
  28. }
  29. if (defaultPipeline && !sceneManager.fxaaEnabled) {
  30. sceneManager.fxaaEnabled = true;
  31. return false;
  32. }
  33. var hardwareScalingLevel = Math.max(1 / 2, 1 / (window.devicePixelRatio || 2));
  34. if (sceneManager.scene.getEngine().getHardwareScalingLevel() > hardwareScalingLevel) {
  35. let scaling = Scalar.Clamp(sceneManager.scene.getEngine().getHardwareScalingLevel() - 0.25, 0, hardwareScalingLevel);
  36. sceneManager.scene.getEngine().setHardwareScalingLevel(scaling);
  37. return false;
  38. }
  39. if (!sceneManager.processShadows) {
  40. sceneManager.processShadows = true;
  41. return false;
  42. }
  43. if (defaultPipeline && !sceneManager.bloomEnabled) {
  44. sceneManager.bloomEnabled = true;
  45. return false;
  46. }
  47. if (!sceneManager.groundMirrorEnabled) {
  48. sceneManager.groundMirrorEnabled = true;
  49. return false;
  50. }
  51. return true;
  52. }
  53. /**
  54. * A custom degrade-oriented function configuration for the scene optimizer.
  55. *
  56. * @param viewer the viewer to optimize
  57. */
  58. export function extendedDegrade(sceneManager: SceneManager): boolean {
  59. let defaultPipeline = <DefaultRenderingPipeline>sceneManager.defaultRenderingPipeline;
  60. if (sceneManager.groundMirrorEnabled) {
  61. sceneManager.groundMirrorEnabled = false;
  62. return false;
  63. }
  64. if (defaultPipeline && sceneManager.bloomEnabled) {
  65. sceneManager.bloomEnabled = false;
  66. return false;
  67. }
  68. if (sceneManager.processShadows) {
  69. sceneManager.processShadows = false;
  70. return false;
  71. }
  72. if (sceneManager.scene.getEngine().getHardwareScalingLevel() < 1) {
  73. let scaling = Scalar.Clamp(sceneManager.scene.getEngine().getHardwareScalingLevel() + 0.25, 0, 1);
  74. sceneManager.scene.getEngine().setHardwareScalingLevel(scaling);
  75. return false;
  76. }
  77. if (defaultPipeline && sceneManager.fxaaEnabled) {
  78. sceneManager.fxaaEnabled = false;
  79. return false;
  80. }
  81. if (sceneManager.groundEnabled) {
  82. sceneManager.groundEnabled = false;
  83. return false;
  84. }
  85. if (sceneManager.scene.postProcessesEnabled) {
  86. sceneManager.scene.postProcessesEnabled = false;
  87. return false;
  88. }
  89. if (sceneManager.scene.getEngine().getHardwareScalingLevel() < 1.25) {
  90. let scaling = Scalar.Clamp(sceneManager.scene.getEngine().getHardwareScalingLevel() + 0.25, 0, 1.25);
  91. sceneManager.scene.getEngine().setHardwareScalingLevel(scaling);
  92. return false;
  93. }
  94. // if (this.Scene.BackgroundHelper) {
  95. // this.Scene.EngineScene.autoClear = true;
  96. // this.Scene.BackgroundHelper = false;
  97. // Would require a dedicated clear color;
  98. // return false;
  99. // }
  100. return true;
  101. }