UNPKG

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