RenderingService.d.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import type { GlobalRuntime } from '../global-runtime';
  2. import type { ICamera } from '../camera';
  3. import type { DisplayObject } from '../display-objects';
  4. import type { CanvasContext } from '../dom';
  5. import type { EventPosition, InteractivePointerEvent, CanvasConfig } from '../types';
  6. import { AsyncParallelHook, AsyncSeriesWaterfallHook, SyncHook, SyncWaterfallHook } from '../utils';
  7. export type RenderingPluginContext = CanvasContext & GlobalRuntime;
  8. export interface RenderingPlugin {
  9. apply: (context: RenderingPluginContext, runtime: GlobalRuntime) => void;
  10. }
  11. export interface PickingResult {
  12. /**
  13. * position in canvas coordinate
  14. */
  15. position: EventPosition;
  16. picked: DisplayObject[];
  17. /**
  18. * only return the topmost object if there are multiple objects overlapped
  19. */
  20. topmost?: boolean;
  21. }
  22. /**
  23. * Use frame renderer implemented by `g-canvas/svg/webgl`, in every frame we do followings:
  24. * * update & merge dirty rectangles
  25. * * begin frame
  26. * * filter by visible
  27. * * sort by z-index in scene graph
  28. * * culling with strategies registered in `g-canvas/webgl`
  29. * * end frame
  30. */
  31. export declare class RenderingService {
  32. private globalRuntime;
  33. private context;
  34. constructor(globalRuntime: GlobalRuntime, context: CanvasContext);
  35. private inited;
  36. private stats;
  37. private zIndexCounter;
  38. hooks: {
  39. /**
  40. * called before any frame rendered
  41. */
  42. init: SyncHook<[], void>;
  43. initAsync: AsyncParallelHook<[]>;
  44. /**
  45. * only dirty object which has sth changed will be rendered
  46. */
  47. dirtycheck: SyncWaterfallHook<[DisplayObject<any, any>], DisplayObject<any, any>>;
  48. /**
  49. * do culling
  50. */
  51. cull: SyncWaterfallHook<[DisplayObject<any, any>, ICamera], DisplayObject<any, any>>;
  52. /**
  53. * called at beginning of each frame, won't get called if nothing to re-render
  54. */
  55. beginFrame: SyncHook<[], void>;
  56. /**
  57. * called before every dirty object get rendered
  58. */
  59. beforeRender: SyncHook<[DisplayObject<any, any>], void>;
  60. /**
  61. * called when every dirty object rendering even it's culled
  62. */
  63. render: SyncHook<[DisplayObject<any, any>], void>;
  64. /**
  65. * called after every dirty object get rendered
  66. */
  67. afterRender: SyncHook<[DisplayObject<any, any>], void>;
  68. endFrame: SyncHook<[], void>;
  69. destroy: SyncHook<[], void>;
  70. /**
  71. * use async but faster method such as GPU-based picking in `g-plugin-device-renderer`
  72. */
  73. pick: AsyncSeriesWaterfallHook<[PickingResult], PickingResult>;
  74. /**
  75. * Unsafe but sync version of pick.
  76. */
  77. pickSync: SyncWaterfallHook<[PickingResult], PickingResult>;
  78. /**
  79. * used in event system
  80. */
  81. pointerDown: SyncHook<[InteractivePointerEvent], void>;
  82. pointerUp: SyncHook<[InteractivePointerEvent], void>;
  83. pointerMove: SyncHook<[InteractivePointerEvent], void>;
  84. pointerOut: SyncHook<[InteractivePointerEvent], void>;
  85. pointerOver: SyncHook<[InteractivePointerEvent], void>;
  86. pointerWheel: SyncHook<[InteractivePointerEvent], void>;
  87. pointerCancel: SyncHook<[InteractivePointerEvent], void>;
  88. click: SyncHook<[InteractivePointerEvent], void>;
  89. };
  90. init(callback: () => void): void;
  91. getStats(): {
  92. /**
  93. * total display objects in scenegraph
  94. */
  95. total: number;
  96. /**
  97. * number of display objects need to render in current frame
  98. */
  99. rendered: number;
  100. };
  101. /**
  102. * Meet the following conditions:
  103. * * disable DirtyRectangleRendering
  104. * * camera changed
  105. */
  106. disableDirtyRectangleRendering(): boolean;
  107. render(canvasConfig: Partial<CanvasConfig>, rerenderCallback: () => void): void;
  108. private renderDisplayObject;
  109. private sort;
  110. destroy(): void;
  111. dirtify(): void;
  112. }
  113. //# sourceMappingURL=RenderingService.d.ts.map