1 | import { ExtensionType, extensions } from '@pixi/extensions';
|
2 |
|
3 | class ObjectRendererSystem {
|
4 | constructor(renderer) {
|
5 | this.renderer = renderer;
|
6 | }
|
7 | render(displayObject, options) {
|
8 | const renderer = this.renderer;
|
9 | let renderTexture;
|
10 | let clear;
|
11 | let transform;
|
12 | let skipUpdateTransform;
|
13 | if (options) {
|
14 | renderTexture = options.renderTexture;
|
15 | clear = options.clear;
|
16 | transform = options.transform;
|
17 | skipUpdateTransform = options.skipUpdateTransform;
|
18 | }
|
19 | this.renderingToScreen = !renderTexture;
|
20 | renderer.runners.prerender.emit();
|
21 | renderer.emit("prerender");
|
22 | renderer.projection.transform = transform;
|
23 | if (renderer.context.isLost) {
|
24 | return;
|
25 | }
|
26 | if (!renderTexture) {
|
27 | this.lastObjectRendered = displayObject;
|
28 | }
|
29 | if (!skipUpdateTransform) {
|
30 | const cacheParent = displayObject.enableTempParent();
|
31 | displayObject.updateTransform();
|
32 | displayObject.disableTempParent(cacheParent);
|
33 | }
|
34 | renderer.renderTexture.bind(renderTexture);
|
35 | renderer.batch.currentRenderer.start();
|
36 | if (clear ?? renderer.background.clearBeforeRender) {
|
37 | renderer.renderTexture.clear();
|
38 | }
|
39 | displayObject.render(renderer);
|
40 | renderer.batch.currentRenderer.flush();
|
41 | if (renderTexture) {
|
42 | if (options.blit) {
|
43 | renderer.framebuffer.blit();
|
44 | }
|
45 | renderTexture.baseTexture.update();
|
46 | }
|
47 | renderer.runners.postrender.emit();
|
48 | renderer.projection.transform = null;
|
49 | renderer.emit("postrender");
|
50 | }
|
51 | destroy() {
|
52 | this.renderer = null;
|
53 | this.lastObjectRendered = null;
|
54 | }
|
55 | }
|
56 | ObjectRendererSystem.extension = {
|
57 | type: ExtensionType.RendererSystem,
|
58 | name: "objectRenderer"
|
59 | };
|
60 | extensions.add(ObjectRendererSystem);
|
61 |
|
62 | export { ObjectRendererSystem };
|
63 |
|