@visactor/vrender-core 0.16.0-alpha.0 → 0.16.0-alpha.2

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 (155) hide show
  1. package/cjs/animate/animate.js +8 -2
  2. package/cjs/animate/animate.js.map +1 -1
  3. package/cjs/core/constants.d.ts +3 -0
  4. package/cjs/core/constants.js +4 -2
  5. package/cjs/core/constants.js.map +1 -1
  6. package/cjs/core/contributions/layerHandler/canvas2d-contribution.d.ts +3 -1
  7. package/cjs/core/contributions/layerHandler/canvas2d-contribution.js +1 -1
  8. package/cjs/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
  9. package/cjs/core/contributions/layerHandler/empty-contribution.d.ts +24 -0
  10. package/cjs/core/contributions/layerHandler/empty-contribution.js +57 -0
  11. package/cjs/core/contributions/layerHandler/empty-contribution.js.map +1 -0
  12. package/cjs/core/contributions/layerHandler/modules.js +4 -2
  13. package/cjs/core/contributions/layerHandler/modules.js.map +1 -1
  14. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.d.ts +3 -1
  15. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js +1 -1
  16. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
  17. package/cjs/core/layer-service.d.ts +5 -2
  18. package/cjs/core/layer-service.js +22 -3
  19. package/cjs/core/layer-service.js.map +1 -1
  20. package/cjs/core/layer.d.ts +4 -3
  21. package/cjs/core/layer.js +13 -8
  22. package/cjs/core/layer.js.map +1 -1
  23. package/cjs/core/stage.d.ts +8 -7
  24. package/cjs/core/stage.js +30 -36
  25. package/cjs/core/stage.js.map +1 -1
  26. package/cjs/graphic/config.d.ts +2 -1
  27. package/cjs/graphic/config.js +11 -6
  28. package/cjs/graphic/config.js.map +1 -1
  29. package/cjs/graphic/graphic-service/graphic-service.d.ts +2 -0
  30. package/cjs/graphic/graphic-service/graphic-service.js +4 -0
  31. package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
  32. package/cjs/graphic/graphic.js +3 -2
  33. package/cjs/graphic/graphic.js.map +1 -1
  34. package/cjs/graphic/node-tree.d.ts +1 -1
  35. package/cjs/graphic/node-tree.js +2 -2
  36. package/cjs/graphic/node-tree.js.map +1 -1
  37. package/cjs/graphic/text.d.ts +12 -0
  38. package/cjs/graphic/text.js +31 -5
  39. package/cjs/graphic/text.js.map +1 -1
  40. package/cjs/interface/core.d.ts +2 -1
  41. package/cjs/interface/core.js.map +1 -1
  42. package/cjs/interface/graphic/text.d.ts +3 -0
  43. package/cjs/interface/graphic/text.js.map +1 -1
  44. package/cjs/interface/graphic-service.d.ts +2 -0
  45. package/cjs/interface/graphic-service.js.map +1 -1
  46. package/cjs/interface/graphic.d.ts +6 -1
  47. package/cjs/interface/graphic.js.map +1 -1
  48. package/cjs/interface/layer.d.ts +9 -2
  49. package/cjs/interface/layer.js.map +1 -1
  50. package/cjs/interface/picker.d.ts +5 -5
  51. package/cjs/interface/picker.js.map +1 -1
  52. package/cjs/interface/render.d.ts +1 -1
  53. package/cjs/interface/render.js.map +1 -1
  54. package/cjs/interface/stage.d.ts +3 -8
  55. package/cjs/interface/stage.js.map +1 -1
  56. package/cjs/picker/global-picker-service.d.ts +1 -1
  57. package/cjs/picker/global-picker-service.js +14 -4
  58. package/cjs/picker/global-picker-service.js.map +1 -1
  59. package/cjs/picker/pick-interceptor.d.ts +3 -3
  60. package/cjs/picker/pick-interceptor.js +4 -4
  61. package/cjs/picker/pick-interceptor.js.map +1 -1
  62. package/cjs/picker/picker-service.d.ts +1 -1
  63. package/cjs/picker/picker-service.js +5 -4
  64. package/cjs/picker/picker-service.js.map +1 -1
  65. package/cjs/plugins/builtin-plugin/html-attribute-plugin.d.ts +1 -0
  66. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +7 -0
  67. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  68. package/cjs/render/contributions/render/draw-interceptor.d.ts +10 -0
  69. package/cjs/render/contributions/render/draw-interceptor.js +63 -1
  70. package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
  71. package/cjs/render/contributions/render/module.js +4 -0
  72. package/cjs/render/contributions/render/module.js.map +1 -1
  73. package/cjs/render/contributions/render/text-render.js +9 -2
  74. package/cjs/render/contributions/render/text-render.js.map +1 -1
  75. package/cjs/render/contributions/render/utils.js +1 -1
  76. package/cjs/render/contributions/render/utils.js.map +1 -1
  77. package/dist/index.js +351 -66
  78. package/dist/index.min.js +1 -1
  79. package/es/animate/animate.js +8 -2
  80. package/es/animate/animate.js.map +1 -1
  81. package/es/core/constants.d.ts +3 -0
  82. package/es/core/constants.js +6 -0
  83. package/es/core/constants.js.map +1 -1
  84. package/es/core/contributions/layerHandler/canvas2d-contribution.d.ts +3 -1
  85. package/es/core/contributions/layerHandler/canvas2d-contribution.js +1 -1
  86. package/es/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
  87. package/es/core/contributions/layerHandler/empty-contribution.d.ts +24 -0
  88. package/es/core/contributions/layerHandler/empty-contribution.js +53 -0
  89. package/es/core/contributions/layerHandler/empty-contribution.js.map +1 -0
  90. package/es/core/contributions/layerHandler/modules.js +6 -2
  91. package/es/core/contributions/layerHandler/modules.js.map +1 -1
  92. package/es/core/contributions/layerHandler/offscreen2d-contribution.d.ts +3 -1
  93. package/es/core/contributions/layerHandler/offscreen2d-contribution.js +1 -1
  94. package/es/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
  95. package/es/core/layer-service.d.ts +5 -2
  96. package/es/core/layer-service.js +25 -2
  97. package/es/core/layer-service.js.map +1 -1
  98. package/es/core/layer.d.ts +4 -3
  99. package/es/core/layer.js +11 -7
  100. package/es/core/layer.js.map +1 -1
  101. package/es/core/stage.d.ts +8 -7
  102. package/es/core/stage.js +30 -36
  103. package/es/core/stage.js.map +1 -1
  104. package/es/graphic/config.d.ts +2 -1
  105. package/es/graphic/config.js +10 -4
  106. package/es/graphic/config.js.map +1 -1
  107. package/es/graphic/graphic-service/graphic-service.d.ts +2 -0
  108. package/es/graphic/graphic-service/graphic-service.js +4 -0
  109. package/es/graphic/graphic-service/graphic-service.js.map +1 -1
  110. package/es/graphic/graphic.js +3 -2
  111. package/es/graphic/graphic.js.map +1 -1
  112. package/es/graphic/node-tree.d.ts +1 -1
  113. package/es/graphic/node-tree.js +2 -2
  114. package/es/graphic/node-tree.js.map +1 -1
  115. package/es/graphic/text.d.ts +12 -0
  116. package/es/graphic/text.js +31 -5
  117. package/es/graphic/text.js.map +1 -1
  118. package/es/interface/core.d.ts +2 -1
  119. package/es/interface/core.js.map +1 -1
  120. package/es/interface/graphic/text.d.ts +3 -0
  121. package/es/interface/graphic/text.js.map +1 -1
  122. package/es/interface/graphic-service.d.ts +2 -0
  123. package/es/interface/graphic-service.js.map +1 -1
  124. package/es/interface/graphic.d.ts +6 -1
  125. package/es/interface/graphic.js.map +1 -1
  126. package/es/interface/layer.d.ts +9 -2
  127. package/es/interface/layer.js.map +1 -1
  128. package/es/interface/picker.d.ts +5 -5
  129. package/es/interface/picker.js.map +1 -1
  130. package/es/interface/render.d.ts +1 -1
  131. package/es/interface/render.js.map +1 -1
  132. package/es/interface/stage.d.ts +3 -8
  133. package/es/interface/stage.js.map +1 -1
  134. package/es/picker/global-picker-service.d.ts +1 -1
  135. package/es/picker/global-picker-service.js +14 -4
  136. package/es/picker/global-picker-service.js.map +1 -1
  137. package/es/picker/pick-interceptor.d.ts +3 -3
  138. package/es/picker/pick-interceptor.js +4 -4
  139. package/es/picker/pick-interceptor.js.map +1 -1
  140. package/es/picker/picker-service.d.ts +1 -1
  141. package/es/picker/picker-service.js +4 -4
  142. package/es/picker/picker-service.js.map +1 -1
  143. package/es/plugins/builtin-plugin/html-attribute-plugin.d.ts +1 -0
  144. package/es/plugins/builtin-plugin/html-attribute-plugin.js +7 -0
  145. package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  146. package/es/render/contributions/render/draw-interceptor.d.ts +10 -0
  147. package/es/render/contributions/render/draw-interceptor.js +64 -0
  148. package/es/render/contributions/render/draw-interceptor.js.map +1 -1
  149. package/es/render/contributions/render/module.js +3 -1
  150. package/es/render/contributions/render/module.js.map +1 -1
  151. package/es/render/contributions/render/text-render.js +9 -2
  152. package/es/render/contributions/render/text-render.js.map +1 -1
  153. package/es/render/contributions/render/utils.js +1 -1
  154. package/es/render/contributions/render/utils.js.map +1 -1
  155. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import type { ILayer, IStage, IGlobal, ILayerParams } from '../interface';
1
+ import type { ILayer, IStage, IGlobal, ILayerParams, LayerMode, ILayerHandlerContribution } from '../interface';
2
2
  import type { ILayerService } from '../interface/core';
3
3
  export declare class DefaultLayerService implements ILayerService {
4
4
  readonly global: IGlobal;
@@ -9,7 +9,10 @@ export declare class DefaultLayerService implements ILayerService {
9
9
  constructor(global: IGlobal);
10
10
  tryInit(): void;
11
11
  getStageLayer(stage: IStage): ILayer[];
12
- createLayer(stage: IStage, options?: ILayerParams): ILayer;
12
+ getRecommendedLayerType(layerMode?: LayerMode): LayerMode;
13
+ getLayerHandler(layerMode: LayerMode): ILayerHandlerContribution;
14
+ createLayer(stage: IStage, options?: Partial<ILayerParams>): ILayer;
15
+ prepareStageLayer(stage: IStage): void;
13
16
  releaseLayer(stage: IStage, layer: ILayer): void;
14
17
  layerCount(stage: IStage): number;
15
18
  restLayerCount(stage: IStage): number;
@@ -16,6 +16,10 @@ import { Layer } from "./layer";
16
16
 
17
17
  import { VGlobal } from "../constants";
18
18
 
19
+ import { container } from "../container";
20
+
21
+ import { DynamicLayerHandlerContribution, StaticLayerHandlerContribution, VirtualLayerHandlerContribution } from "./constants";
22
+
19
23
  let DefaultLayerService = class {
20
24
  constructor(global) {
21
25
  this.global = global, this.layerMap = new Map;
@@ -27,16 +31,35 @@ let DefaultLayerService = class {
27
31
  getStageLayer(stage) {
28
32
  return this.layerMap.get(stage);
29
33
  }
34
+ getRecommendedLayerType(layerMode) {
35
+ return layerMode || (0 !== this.staticLayerCountInEnv ? "static" : 0 !== this.dynamicLayerCountInEnv ? "dynamic" : "virtual");
36
+ }
37
+ getLayerHandler(layerMode) {
38
+ let layerHandler;
39
+ return layerHandler = "static" === layerMode ? container.get(StaticLayerHandlerContribution) : "dynamic" === layerMode ? container.get(DynamicLayerHandlerContribution) : container.get(VirtualLayerHandlerContribution),
40
+ layerHandler;
41
+ }
30
42
  createLayer(stage, options = {
31
43
  main: !1
32
44
  }) {
33
45
  this.tryInit();
34
- const layer = new Layer(stage, this.global, stage.window, Object.assign(Object.assign({}, options), {
35
- virtual: 0 === this.staticLayerCountInEnv
46
+ const layerMode = this.getRecommendedLayerType(options.layerMode), layerHandler = this.getLayerHandler(layerMode), layer = new Layer(stage, this.global, stage.window, Object.assign(Object.assign({
47
+ main: !1
48
+ }, options), {
49
+ layerMode: layerMode,
50
+ layerHandler: layerHandler
36
51
  })), stageLayers = this.layerMap.get(stage) || [];
37
52
  return stageLayers.push(layer), this.layerMap.set(stage, stageLayers), this.staticLayerCountInEnv--,
38
53
  layer;
39
54
  }
55
+ prepareStageLayer(stage) {
56
+ let mainHandler;
57
+ stage.forEachChildren((l => {
58
+ const handler = l.getNativeHandler();
59
+ "virtual" === handler.type ? (handler.mainHandler = mainHandler, mainHandler.secondaryHandlers.push(handler)) : (mainHandler = handler,
60
+ mainHandler.secondaryHandlers = []);
61
+ }));
62
+ }
40
63
  releaseLayer(stage, layer) {
41
64
  layer.release();
42
65
  const stageLayers = this.layerMap.get(stage) || [];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/layer-service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGhC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAK9B,YAA6C,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;QAC1D,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAClE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;IACH,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,UAAwB,EAAE,IAAI,EAAE,KAAK,EAAE;QAChE,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,kCACnD,OAAO,KACV,OAAO,EAAE,IAAI,CAAC,qBAAqB,KAAK,CAAC,IACzC,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACnD,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,YAAY,CAAC,KAAa,EAAE,KAAa;QACvC,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,KAAK,EACL,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CACrC,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACjD,CAAC;IACD,cAAc,CAAC,KAAa;QAE1B,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE;YACjC,OAAO,EAAE,CAAC;SACX;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CACF,CAAA;AApDY,mBAAmB;IAD/B,UAAU,EAAE;IAME,WAAA,MAAM,CAAC,OAAO,CAAC,CAAA;;GALjB,mBAAmB,CAoD/B;SApDY,mBAAmB","file":"layer-service.js","sourcesContent":["import { inject, injectable } from '../common/inversify-lite';\nimport type { ILayer, IStage, IGlobal, ILayerParams } from '../interface';\nimport { Layer } from './layer';\nimport type { ILayerService } from '../interface/core';\nimport { VGlobal } from '../constants';\n\n@injectable()\nexport class DefaultLayerService implements ILayerService {\n declare layerMap: Map<IStage, ILayer[]>;\n declare staticLayerCountInEnv: number;\n declare dynamicLayerCountInEnv: number;\n declare inited: boolean;\n constructor(@inject(VGlobal) public readonly global: IGlobal) {\n this.layerMap = new Map();\n }\n\n tryInit() {\n if (!this.inited) {\n this.staticLayerCountInEnv = this.global.getStaticCanvasCount();\n this.dynamicLayerCountInEnv = this.global.getDynamicCanvasCount();\n this.inited = true;\n }\n }\n\n getStageLayer(stage: IStage) {\n return this.layerMap.get(stage);\n }\n\n createLayer(stage: IStage, options: ILayerParams = { main: false }): ILayer {\n this.tryInit();\n const layer = new Layer(stage, this.global, stage.window, {\n ...options,\n virtual: this.staticLayerCountInEnv === 0\n });\n const stageLayers = this.layerMap.get(stage) || [];\n stageLayers.push(layer);\n this.layerMap.set(stage, stageLayers);\n this.staticLayerCountInEnv--;\n return layer;\n }\n releaseLayer(stage: IStage, layer: ILayer): void {\n layer.release();\n const stageLayers = this.layerMap.get(stage) || [];\n this.layerMap.set(\n stage,\n stageLayers.filter(l => l !== layer)\n );\n }\n\n layerCount(stage: IStage): number {\n return (this.layerMap.get(stage) || []).length;\n }\n restLayerCount(stage: IStage): number {\n // TODO: 设置精确的值\n if (this.global.env === 'browser') {\n return 10;\n }\n return 0;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/core/layer-service.ts"],"names":[],"mappings":"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","file":"layer-service.js","sourcesContent":["import { inject, injectable } from '../common/inversify-lite';\nimport type { ILayer, IStage, IGlobal, ILayerParams, LayerMode, ILayerHandlerContribution } from '../interface';\nimport { Layer } from './layer';\nimport type { ILayerService } from '../interface/core';\nimport { VGlobal } from '../constants';\nimport { container } from '../container';\nimport {\n DynamicLayerHandlerContribution,\n StaticLayerHandlerContribution,\n VirtualLayerHandlerContribution\n} from './constants';\n\n@injectable()\nexport class DefaultLayerService implements ILayerService {\n declare layerMap: Map<IStage, ILayer[]>;\n declare staticLayerCountInEnv: number;\n declare dynamicLayerCountInEnv: number;\n declare inited: boolean;\n constructor(@inject(VGlobal) public readonly global: IGlobal) {\n this.layerMap = new Map();\n }\n\n tryInit() {\n if (!this.inited) {\n this.staticLayerCountInEnv = this.global.getStaticCanvasCount();\n this.dynamicLayerCountInEnv = this.global.getDynamicCanvasCount();\n this.inited = true;\n }\n }\n\n getStageLayer(stage: IStage) {\n return this.layerMap.get(stage);\n }\n\n getRecommendedLayerType(layerMode?: LayerMode): LayerMode {\n if (layerMode) {\n return layerMode;\n }\n // 默认推荐实体canvas,不行就推荐离屏canvas,最次才是virtual\n if (this.staticLayerCountInEnv !== 0) {\n return 'static';\n } else if (this.dynamicLayerCountInEnv !== 0) {\n return 'dynamic';\n }\n return 'virtual';\n }\n\n getLayerHandler(layerMode: LayerMode) {\n let layerHandler: ILayerHandlerContribution;\n if (layerMode === 'static') {\n layerHandler = container.get<ILayerHandlerContribution>(StaticLayerHandlerContribution);\n } else if (layerMode === 'dynamic') {\n layerHandler = container.get<ILayerHandlerContribution>(DynamicLayerHandlerContribution);\n } else {\n layerHandler = container.get<ILayerHandlerContribution>(VirtualLayerHandlerContribution);\n }\n return layerHandler;\n }\n\n createLayer(stage: IStage, options: Partial<ILayerParams> = { main: false }): ILayer {\n this.tryInit();\n const layerMode = this.getRecommendedLayerType(options.layerMode);\n const layerHandler = this.getLayerHandler(layerMode);\n const layer = new Layer(stage, this.global, stage.window, {\n main: false,\n ...options,\n layerMode,\n layerHandler\n });\n const stageLayers = this.layerMap.get(stage) || [];\n stageLayers.push(layer);\n this.layerMap.set(stage, stageLayers);\n this.staticLayerCountInEnv--;\n return layer;\n }\n\n prepareStageLayer(stage: IStage) {\n let mainHandler: ILayerHandlerContribution;\n stage.forEachChildren((l: ILayer) => {\n const handler = l.getNativeHandler();\n if (handler.type === 'virtual') {\n handler.mainHandler = mainHandler;\n mainHandler.secondaryHandlers.push(handler);\n } else {\n mainHandler = handler;\n mainHandler.secondaryHandlers = [];\n }\n });\n }\n\n releaseLayer(stage: IStage, layer: ILayer): void {\n layer.release();\n const stageLayers = this.layerMap.get(stage) || [];\n this.layerMap.set(\n stage,\n stageLayers.filter(l => l !== layer)\n );\n }\n\n layerCount(stage: IStage): number {\n return (this.layerMap.get(stage) || []).length;\n }\n restLayerCount(stage: IStage): number {\n // TODO: 设置精确的值\n if (this.global.env === 'browser') {\n return 10;\n }\n return 0;\n }\n}\n"]}
@@ -1,13 +1,12 @@
1
1
  import type { AABBBounds, IBoundsLike } from '@visactor/vutils';
2
- import type { IDrawToParams, IGraphic, IGroup, ILayer, ILayerDrawParams, IStage, IGlobal, ILayerHandlerContribution, IDrawContext, ILayerHandlerDrawParams, IDrawContribution, IWindow, ILayerParams } from '../interface';
2
+ import type { IDrawToParams, IGraphic, IGroup, ILayer, ILayerDrawParams, IStage, IGlobal, ILayerHandlerContribution, IDrawContext, ILayerHandlerDrawParams, IDrawContribution, IWindow, ILayerParams, LayerMode } from '../interface';
3
3
  import { Group } from '../graphic/group';
4
- export declare const LayerHandlerContribution: unique symbol;
5
4
  type BlendMode = 'normal';
6
5
  export declare class Layer extends Group implements ILayer {
7
6
  parent: any;
8
7
  _dpr: number;
9
8
  main: boolean;
10
- readonly virtual: boolean;
9
+ renderCount: number;
11
10
  afterDrawCbs: ((l: this) => void)[];
12
11
  imageData?: ImageData;
13
12
  blendMode: BlendMode;
@@ -21,6 +20,7 @@ export declare class Layer extends Group implements ILayer {
21
20
  drawContribution?: IDrawContribution;
22
21
  }>;
23
22
  get offscreen(): boolean;
23
+ get layerMode(): LayerMode;
24
24
  get width(): number;
25
25
  get height(): number;
26
26
  get viewWidth(): number;
@@ -40,6 +40,7 @@ export declare class Layer extends Group implements ILayer {
40
40
  graphic?: IGraphic;
41
41
  group?: IGroup;
42
42
  } | false;
43
+ protected tryRenderSecondaryLayer(params: ILayerDrawParams, userParams?: Partial<IDrawContext>): void;
43
44
  render(params: ILayerDrawParams, userParams?: Partial<IDrawContext>): void;
44
45
  resize(w: number, h: number): void;
45
46
  resizeView(w: number, h: number): void;
package/es/core/layer.js CHANGED
@@ -1,17 +1,16 @@
1
1
  import { application } from "../application";
2
2
 
3
- import { container } from "../container";
4
-
5
3
  import { Theme } from "../graphic/theme";
6
4
 
7
5
  import { Group } from "../graphic/group";
8
6
 
9
- export const LayerHandlerContribution = Symbol.for("LayerHandlerContribution");
10
-
11
7
  export class Layer extends Group {
12
8
  get offscreen() {
13
9
  return this.layerHandler.offscreen;
14
10
  }
11
+ get layerMode() {
12
+ return this.layerHandler.type;
13
+ }
15
14
  get width() {
16
15
  return this.stage ? this.stage.width : 0;
17
16
  }
@@ -33,14 +32,14 @@ export class Layer extends Group {
33
32
  constructor(stage, global, window, params) {
34
33
  var _a;
35
34
  super({}), this.stage = stage, this.global = global, this.window = window, this.main = params.main,
36
- this.layerHandler = container.get(LayerHandlerContribution), this.layerHandler.init(this, window, {
35
+ this.layerHandler = params.layerHandler, this.layerHandler.init(this, window, {
37
36
  main: params.main,
38
37
  canvasId: params.canvasId,
39
38
  width: this.viewWidth,
40
39
  height: this.viewHeight,
41
40
  zIndex: null !== (_a = params.zIndex) && void 0 !== _a ? _a : 0
42
41
  }), this.layer = this, this.subLayers = new Map, this.theme = new Theme, this.background = "rgba(0, 0, 0, 0)",
43
- this.virtual = !!params.virtual, this.afterDrawCbs = [];
42
+ this.afterDrawCbs = [];
44
43
  }
45
44
  combineSubLayer(removeIncrementalKey = !0) {
46
45
  const subLayers = Array.from(this.subLayers.values()).sort(((a, b) => a.zIndex - b.zIndex));
@@ -60,6 +59,11 @@ export class Layer extends Group {
60
59
  pick(x, y) {
61
60
  throw new Error("暂不支持");
62
61
  }
62
+ tryRenderSecondaryLayer(params, userParams) {
63
+ this.layerHandler.secondaryHandlers && this.layerHandler.secondaryHandlers.length && this.layerHandler.secondaryHandlers.forEach((h => {
64
+ h.layer.renderCount = this.renderCount, h.layer.render(params, userParams);
65
+ }));
66
+ }
63
67
  render(params, userParams) {
64
68
  var _a;
65
69
  const stage = this.stage;
@@ -73,7 +77,7 @@ export class Layer extends Group {
73
77
  layer: this,
74
78
  background: null !== (_a = params.background) && void 0 !== _a ? _a : this.background,
75
79
  updateBounds: params.updateBounds
76
- }, userParams), this.afterDrawCbs.forEach((c => c(this)));
80
+ }, userParams), this.afterDrawCbs.forEach((c => c(this))), this.tryRenderSecondaryLayer(params, userParams);
77
81
  }
78
82
  resize(w, h) {
79
83
  this.layerHandler.resize(w, h);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/layer.ts"],"names":[],"mappings":"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","file":"layer.js","sourcesContent":["import type { AABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { application } from '../application';\nimport { container } from '../container';\nimport type {\n IDrawToParams,\n IGraphic,\n IGroup,\n ILayer,\n ILayerDrawParams,\n IStage,\n IGlobal,\n ILayerHandlerContribution,\n IDrawContext,\n ILayerHandlerDrawParams,\n IDrawContribution,\n IWindow,\n ILayerParams\n} from '../interface';\nimport { Theme } from '../graphic/theme';\nimport { Group } from '../graphic/group';\n\nexport const LayerHandlerContribution = Symbol.for('LayerHandlerContribution');\n\ntype BlendMode = 'normal';\n\n// layer需要有多个,对于Canvas来说,layer可以绑定一个canvas或一个ImageData\n// 对于WebGL来说,layer对应一个FrameBuffer\n// 对于Native来说,layer保留一个FrameBufferHandler\nexport class Layer extends Group implements ILayer {\n declare parent: any;\n\n declare _dpr: number;\n declare main: boolean;\n\n declare readonly virtual: boolean;\n declare afterDrawCbs: ((l: this) => void)[];\n\n declare imageData?: ImageData;\n // 混合模式,用于多图层混合\n declare blendMode: BlendMode;\n\n declare background: string;\n declare opacity: number;\n\n declare layer: this;\n declare subLayers: Map<\n number,\n { layer: ILayer; group?: IGroup; zIndex: number; drawContribution?: IDrawContribution }\n >;\n\n get offscreen(): boolean {\n return this.layerHandler.offscreen;\n }\n\n // stage控制\n // width: number;\n // height: number;\n get width(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.width;\n }\n get height(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.height;\n }\n get viewWidth(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.viewWidth;\n }\n get viewHeight(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.viewHeight;\n }\n declare pickable: boolean;\n\n get dirtyBound(): AABBBounds {\n // this.getRootNode<any>();\n throw new Error('暂不支持');\n }\n\n get dpr(): number {\n return this._dpr;\n }\n\n declare stage?: IStage;\n protected declare global: IGlobal;\n protected declare window: IWindow;\n protected declare layerHandler: ILayerHandlerContribution;\n\n constructor(stage: IStage, global: IGlobal, window: IWindow, params: ILayerParams) {\n super({});\n this.stage = stage;\n this.global = global;\n this.window = window;\n this.main = params.main;\n this.layerHandler = container.get<ILayerHandlerContribution>(LayerHandlerContribution);\n this.layerHandler.init(this, window, {\n main: params.main,\n canvasId: params.canvasId,\n width: this.viewWidth,\n height: this.viewHeight,\n zIndex: params.zIndex ?? 0\n });\n this.layer = this;\n this.subLayers = new Map();\n this.theme = new Theme();\n this.background = 'rgba(0, 0, 0, 0)';\n this.virtual = !!params.virtual;\n this.afterDrawCbs = [];\n }\n\n combineSubLayer(removeIncrementalKey: boolean = true) {\n const subLayers = Array.from(this.subLayers.values()).sort((a, b) => {\n return a.zIndex - b.zIndex;\n });\n this.layerHandler.merge(\n subLayers.map(l => {\n if (l.layer.subLayers.size) {\n l.layer.combineSubLayer(removeIncrementalKey);\n }\n return l.layer.getNativeHandler();\n })\n );\n if (removeIncrementalKey) {\n subLayers.forEach(l => {\n l.group && (l.group.incremental = 0);\n });\n }\n subLayers.forEach(l => {\n // l.layer.release();\n application.layerService.releaseLayer(this.stage, l.layer);\n });\n this.subLayers.clear();\n }\n\n getNativeHandler(): ILayerHandlerContribution {\n return this.layerHandler;\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n super.setStage(stage, this);\n }\n\n // 选中图层中的节点\n pick(x: number, y: number): { graphic?: IGraphic; group?: IGroup } | false {\n throw new Error('暂不支持');\n }\n // 绘制图层\n render(params: ILayerDrawParams, userParams?: Partial<IDrawContext>) {\n const stage = this.stage;\n this.layerHandler.render(\n [this],\n {\n renderService: params.renderService,\n x: stage.x,\n y: stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n updateBounds: params.updateBounds\n },\n userParams\n );\n this.afterDrawCbs.forEach(c => c(this));\n }\n resize(w: number, h: number) {\n this.layerHandler.resize(w, h);\n }\n resizeView(w: number, h: number) {\n this.layerHandler.resizeView(w, h);\n }\n setDpr(dpr: number) {\n this.layerHandler.setDpr(dpr);\n }\n afterDraw(cb: (l: this) => void) {\n this.afterDrawCbs.push(cb);\n }\n\n // 动画相关\n startAnimate(t: number) {\n throw new Error('暂不支持');\n }\n\n setToFrame(t: number) {\n throw new Error('暂不支持');\n }\n\n prepare(dirtyBounds: IBoundsLike, params: ILayerHandlerDrawParams) {\n return;\n }\n\n // 合并到某个target上\n combineTo(target: IWindow, params: IDrawToParams) {\n if (this.offscreen) {\n this.layerHandler.drawTo(target, [this], {\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n renderService: params.renderService,\n x: params.x ?? this.stage.x,\n y: params.y ?? this.stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n ...params\n });\n this.afterDrawCbs.forEach(c => c(this));\n }\n }\n\n release(): void {\n super.release();\n this.layerHandler.release();\n if (this.subLayers) {\n this.subLayers.forEach(l => {\n // l.layer.release();\n application.layerService.releaseLayer(this.stage, l.layer);\n });\n }\n }\n\n drawTo(target: IWindow, params: IDrawToParams) {\n this.layerHandler.drawTo(target, [this], {\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n renderService: params.renderService,\n x: params.x ?? this.stage.x,\n y: params.y ?? this.stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n ...params\n });\n this.afterDrawCbs.forEach(c => c(this));\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/core/layer.ts"],"names":[],"mappings":"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","file":"layer.js","sourcesContent":["import type { AABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { application } from '../application';\nimport { container } from '../container';\nimport type {\n IDrawToParams,\n IGraphic,\n IGroup,\n ILayer,\n ILayerDrawParams,\n IStage,\n IGlobal,\n ILayerHandlerContribution,\n IDrawContext,\n ILayerHandlerDrawParams,\n IDrawContribution,\n IWindow,\n ILayerParams,\n LayerMode\n} from '../interface';\nimport { Theme } from '../graphic/theme';\nimport { Group } from '../graphic/group';\n\ntype BlendMode = 'normal';\n\n// layer需要有多个,对于Canvas来说,layer可以绑定一个canvas或一个ImageData\n// 对于WebGL来说,layer对应一个FrameBuffer\n// 对于Native来说,layer保留一个FrameBufferHandler\nexport class Layer extends Group implements ILayer {\n declare parent: any;\n\n declare _dpr: number;\n declare main: boolean;\n declare renderCount: number;\n\n declare afterDrawCbs: ((l: this) => void)[];\n\n declare imageData?: ImageData;\n // 混合模式,用于多图层混合\n declare blendMode: BlendMode;\n\n declare background: string;\n declare opacity: number;\n\n declare layer: this;\n declare subLayers: Map<\n number,\n { layer: ILayer; group?: IGroup; zIndex: number; drawContribution?: IDrawContribution }\n >;\n\n get offscreen(): boolean {\n return this.layerHandler.offscreen;\n }\n\n get layerMode(): LayerMode {\n return this.layerHandler.type;\n }\n\n // stage控制\n // width: number;\n // height: number;\n get width(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.width;\n }\n get height(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.height;\n }\n get viewWidth(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.viewWidth;\n }\n get viewHeight(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.viewHeight;\n }\n declare pickable: boolean;\n\n get dirtyBound(): AABBBounds {\n // this.getRootNode<any>();\n throw new Error('暂不支持');\n }\n\n get dpr(): number {\n return this._dpr;\n }\n\n declare stage?: IStage;\n protected declare global: IGlobal;\n protected declare window: IWindow;\n protected declare layerHandler: ILayerHandlerContribution;\n\n constructor(stage: IStage, global: IGlobal, window: IWindow, params: ILayerParams) {\n super({});\n this.stage = stage;\n this.global = global;\n this.window = window;\n this.main = params.main;\n this.layerHandler = params.layerHandler;\n // this.layerHandler = container.get<ILayerHandlerContribution>(LayerHandlerContribution);\n this.layerHandler.init(this, window, {\n main: params.main,\n canvasId: params.canvasId,\n width: this.viewWidth,\n height: this.viewHeight,\n zIndex: params.zIndex ?? 0\n });\n this.layer = this;\n this.subLayers = new Map();\n this.theme = new Theme();\n this.background = 'rgba(0, 0, 0, 0)';\n this.afterDrawCbs = [];\n }\n\n combineSubLayer(removeIncrementalKey: boolean = true) {\n const subLayers = Array.from(this.subLayers.values()).sort((a, b) => {\n return a.zIndex - b.zIndex;\n });\n this.layerHandler.merge(\n subLayers.map(l => {\n if (l.layer.subLayers.size) {\n l.layer.combineSubLayer(removeIncrementalKey);\n }\n return l.layer.getNativeHandler();\n })\n );\n if (removeIncrementalKey) {\n subLayers.forEach(l => {\n l.group && (l.group.incremental = 0);\n });\n }\n subLayers.forEach(l => {\n // l.layer.release();\n application.layerService.releaseLayer(this.stage, l.layer);\n });\n this.subLayers.clear();\n }\n\n getNativeHandler(): ILayerHandlerContribution {\n return this.layerHandler;\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n super.setStage(stage, this);\n }\n\n // 选中图层中的节点\n pick(x: number, y: number): { graphic?: IGraphic; group?: IGroup } | false {\n throw new Error('暂不支持');\n }\n // 绘制依赖的副layer\n protected tryRenderSecondaryLayer(params: ILayerDrawParams, userParams?: Partial<IDrawContext>) {\n if (this.layerHandler.secondaryHandlers && this.layerHandler.secondaryHandlers.length) {\n this.layerHandler.secondaryHandlers.forEach(h => {\n h.layer.renderCount = this.renderCount;\n h.layer.render(params, userParams);\n });\n }\n }\n // 绘制图层\n render(params: ILayerDrawParams, userParams?: Partial<IDrawContext>) {\n const stage = this.stage;\n this.layerHandler.render(\n [this],\n {\n renderService: params.renderService,\n x: stage.x,\n y: stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n updateBounds: params.updateBounds\n },\n userParams\n );\n this.afterDrawCbs.forEach(c => c(this));\n this.tryRenderSecondaryLayer(params, userParams);\n }\n resize(w: number, h: number) {\n this.layerHandler.resize(w, h);\n }\n resizeView(w: number, h: number) {\n this.layerHandler.resizeView(w, h);\n }\n setDpr(dpr: number) {\n this.layerHandler.setDpr(dpr);\n }\n afterDraw(cb: (l: this) => void) {\n this.afterDrawCbs.push(cb);\n }\n\n // 动画相关\n startAnimate(t: number) {\n throw new Error('暂不支持');\n }\n\n setToFrame(t: number) {\n throw new Error('暂不支持');\n }\n\n prepare(dirtyBounds: IBoundsLike, params: ILayerHandlerDrawParams) {\n return;\n }\n\n // 合并到某个target上\n combineTo(target: IWindow, params: IDrawToParams) {\n if (this.offscreen) {\n this.layerHandler.drawTo(target, [this], {\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n renderService: params.renderService,\n x: params.x ?? this.stage.x,\n y: params.y ?? this.stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n ...params\n });\n this.afterDrawCbs.forEach(c => c(this));\n }\n }\n\n release(): void {\n super.release();\n this.layerHandler.release();\n if (this.subLayers) {\n this.subLayers.forEach(l => {\n // l.layer.release();\n application.layerService.releaseLayer(this.stage, l.layer);\n });\n }\n }\n\n drawTo(target: IWindow, params: IDrawToParams) {\n this.layerHandler.drawTo(target, [this], {\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n renderService: params.renderService,\n x: params.x ?? this.stage.x,\n y: params.y ?? this.stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n ...params\n });\n this.afterDrawCbs.forEach(c => c(this));\n }\n}\n"]}
@@ -1,10 +1,12 @@
1
1
  import type { IAABBBounds, IBounds, IBoundsLike, IMatrix } from '@visactor/vutils';
2
2
  import { AABBBounds } from '@visactor/vutils';
3
- import type { IGraphic, IGroup, IExportType, IStage, IStageParams, ILayer, IColor, IOption3D, ICamera, vec3, IDirectionLight, ITicker, IRenderService, IPickerService, IPluginService, ISyncHook, IDrawContext, IWindow, ILayerService, ITimeline, IOptimizeType } from '../interface';
3
+ import type { IExportType, IStage, IStageParams, ILayer, IColor, IOption3D, ICamera, vec3, IDirectionLight, ITicker, IRenderService, IPickerService, IPluginService, ISyncHook, IDrawContext, IWindow, ILayerService, ITimeline, IOptimizeType, LayerMode, PickResult } from '../interface';
4
4
  import type { Layer } from './layer';
5
5
  import { Group } from '../graphic';
6
+ type IStageState = 'rendering' | 'normal';
6
7
  export declare class Stage extends Group implements IStage {
7
8
  parent: IStage | null;
9
+ state: IStageState;
8
10
  protected _viewBox: AABBBounds;
9
11
  private _background;
10
12
  private _subView;
@@ -108,15 +110,16 @@ export declare class Stage extends Group implements IStage {
108
110
  disableHtmlAttribute(): void;
109
111
  protected tryUpdateAABBBounds(): AABBBounds;
110
112
  combineLayer(ILayer1: ILayer, ILayer2: ILayer): ILayer;
111
- createLayer(canvasId?: string): ILayer;
113
+ createLayer(layerMode?: LayerMode): ILayer;
112
114
  sortLayer(cb: (ILayer1: ILayer, layer2: ILayer) => number): void;
113
115
  removeLayer(ILayerId: number): ILayer | false;
114
116
  tryInitInteractiveLayer(): void;
115
117
  clearViewBox(color?: string): void;
116
118
  render(layers?: ILayer[], params?: Partial<IDrawContext>): void;
117
119
  protected combineLayersToWindow(): void;
118
- renderNextFrame(layers?: ILayer[]): void;
120
+ renderNextFrame(layers?: ILayer[], force?: boolean): void;
119
121
  _doRenderInThisFrame(): void;
122
+ protected renderLayerList(layerList: ILayer[], params?: Partial<IDrawContext>): void;
120
123
  resizeWindow(w: number, h: number, rerender?: boolean): void;
121
124
  resize(w: number, h: number, rerender?: boolean): void;
122
125
  resizeView(w: number, h: number, rerender?: boolean): void;
@@ -125,10 +128,7 @@ export declare class Stage extends Group implements IStage {
125
128
  setDpr(dpr: number, rerender?: boolean): void;
126
129
  setOrigin(x: number, y: number): void;
127
130
  export(type: IExportType): HTMLCanvasElement | ImageData;
128
- pick(x: number, y: number): {
129
- graphic: IGraphic | null;
130
- group: IGroup | null;
131
- } | false;
131
+ pick(x: number, y: number): PickResult | false;
132
132
  startAnimate(t: number): void;
133
133
  setToFrame(t: number): void;
134
134
  release(): void;
@@ -146,3 +146,4 @@ export declare class Stage extends Group implements IStage {
146
146
  setCursor(mode?: string): void;
147
147
  getCursor(): string;
148
148
  }
149
+ export {};
package/es/core/stage.js CHANGED
@@ -129,7 +129,7 @@ export class Stage extends Group {
129
129
  title: params.title || "",
130
130
  canvas: params.canvas
131
131
  }), this._viewBox = new AABBBounds, params.viewBox ? this._viewBox.setValue(params.viewBox.x1, params.viewBox.y1, params.viewBox.x2, params.viewBox.y2) : this._viewBox.setValue(0, 0, this.width, this.height),
132
- this.renderCount = 0, this._subView = !(this._viewBox.width() === this.width && this._viewBox.height() === this.height),
132
+ this.state = "normal", this.renderCount = 0, this._subView = !(this._viewBox.width() === this.width && this._viewBox.height() === this.height),
133
133
  this._background = null !== (_a = params.background) && void 0 !== _a ? _a : DefaultConfig.BACKGROUND,
134
134
  this.appendChild(this.layerService.createLayer(this, {
135
135
  main: !0
@@ -285,10 +285,10 @@ export class Stage extends Group {
285
285
  combineLayer(ILayer1, ILayer2) {
286
286
  throw new Error("暂不支持");
287
287
  }
288
- createLayer(canvasId) {
288
+ createLayer(layerMode) {
289
289
  const layer = this.layerService.createLayer(this, {
290
290
  main: !1,
291
- canvasId: canvasId
291
+ layerMode: layerMode
292
292
  });
293
293
  return this.appendChild(layer), layer;
294
294
  }
@@ -309,51 +309,45 @@ export class Stage extends Group {
309
309
  this.window.clearViewBox(this._viewBox, color);
310
310
  }
311
311
  render(layers, params) {
312
- this.ticker.start(), this.timeline.resume(), this._skipRender || (this.lastRenderparams = params,
313
- this.hooks.beforeRender.call(this), (layers || this).forEach(((layer, i) => {
314
- layer.render({
315
- renderService: this.renderService,
316
- background: layer === this.defaultLayer ? this.background : void 0,
317
- updateBounds: !!this.dirtyBounds
318
- }, Object.assign({
319
- renderStyle: this.renderStyle
320
- }, params));
321
- })), this.combineLayersToWindow(), this.nextFrameRenderLayerSet.clear(), this.hooks.afterRender.call(this)),
312
+ this.ticker.start(), this.timeline.resume();
313
+ const state = this.state;
314
+ this.state = "rendering", this.layerService.prepareStageLayer(this), this._skipRender || (this.lastRenderparams = params,
315
+ this.hooks.beforeRender.call(this), this.renderLayerList(this.children), this.combineLayersToWindow(),
316
+ this.nextFrameRenderLayerSet.clear(), this.hooks.afterRender.call(this)), this.state = state,
322
317
  this._skipRender && this._skipRender++;
323
318
  }
324
- combineLayersToWindow() {
325
- this.forEach(((layer, i) => {
326
- layer.combineTo(this.window, {
327
- clear: 0 === i,
328
- x: this.x,
329
- y: this.y,
330
- width: this.viewWidth,
331
- height: this.viewHeight,
332
- renderService: this.renderService,
333
- background: layer === this.defaultLayer ? this.background : void 0,
334
- updateBounds: !!this.dirtyBounds
335
- });
336
- }));
337
- }
338
- renderNextFrame(layers) {
339
- this.nextFrameRenderLayerSet.size !== this.childrenCount && (layers || this).forEach((layer => {
319
+ combineLayersToWindow() {}
320
+ renderNextFrame(layers, force) {
321
+ ("rendering" !== this.state || force) && (this.nextFrameRenderLayerSet.size !== this.childrenCount && (layers || this).forEach((layer => {
340
322
  this.nextFrameRenderLayerSet.add(layer);
341
323
  })), this.willNextFrameRender || (this.willNextFrameRender = !0, this.global.getRequestAnimationFrame()((() => {
342
324
  this._doRenderInThisFrame(), this.willNextFrameRender = !1;
343
- })));
325
+ }))));
344
326
  }
345
327
  _doRenderInThisFrame() {
346
- this.timeline.resume(), this.ticker.start(), this.nextFrameRenderLayerSet.size && !this._skipRender && (this.hooks.beforeRender.call(this),
347
- this.forEach((layer => {
348
- this.nextFrameRenderLayerSet.has(layer) && layer.render({
328
+ this.timeline.resume(), this.ticker.start();
329
+ const state = this.state;
330
+ this.state = "rendering", this.layerService.prepareStageLayer(this), this.nextFrameRenderLayerSet.size && !this._skipRender && (this.hooks.beforeRender.call(this),
331
+ this.renderLayerList(Array.from(this.nextFrameRenderLayerSet.values()), this.lastRenderparams || {}),
332
+ this.combineLayersToWindow(), this.hooks.afterRender.call(this), this.nextFrameRenderLayerSet.clear()),
333
+ this.state = state, this._skipRender && this._skipRender++;
334
+ }
335
+ renderLayerList(layerList, params) {
336
+ const list = [];
337
+ for (let i = 0; i < layerList.length; i++) {
338
+ let l = layerList[i];
339
+ "virtual" === l.layerMode && (l = l.getNativeHandler().mainHandler.layer), list.includes(l) || list.push(l);
340
+ }
341
+ list.forEach((layer => {
342
+ layer.renderCount > this.renderCount || (layer.renderCount = this.renderCount + 1,
343
+ layer.render({
349
344
  renderService: this.renderService,
350
345
  background: layer === this.defaultLayer ? this.background : void 0,
351
346
  updateBounds: !!this.dirtyBounds
352
347
  }, Object.assign({
353
348
  renderStyle: this.renderStyle
354
- }, this.lastRenderparams || {}));
355
- })), this.combineLayersToWindow(), this.hooks.afterRender.call(this), this.nextFrameRenderLayerSet.clear()),
356
- this._skipRender && this._skipRender++;
349
+ }, params)));
350
+ }));
357
351
  }
358
352
  resizeWindow(w, h, rerender = !0) {
359
353
  this.window.resize(w, h), rerender && this.render();