@lightningjs/renderer 2.9.0-beta2 → 2.9.0-beta4
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.
- package/COPYING +1 -0
- package/LICENSE +202 -202
- package/NOTICE +3 -3
- package/README.md +147 -147
- package/dist/src/core/CoreNode.d.ts +29 -6
- package/dist/src/core/CoreNode.js +118 -79
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +2 -2
- package/dist/src/core/CoreTextNode.js +7 -4
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +61 -15
- package/dist/src/core/CoreTextureManager.js +179 -104
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +7 -0
- package/dist/src/core/Stage.js +34 -1
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureMemoryManager.js +2 -5
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.js +31 -28
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +1 -0
- package/dist/src/core/lib/WebGlContextWrapper.js +2 -0
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -0
- package/dist/src/core/renderers/CoreContextTexture.js +1 -0
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +13 -5
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +6 -8
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +3 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +1 -2
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +26 -24
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +7 -17
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +45 -45
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +61 -61
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +93 -93
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +63 -63
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +62 -62
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +6 -6
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +42 -42
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +44 -44
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +3 -3
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +22 -22
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +28 -28
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +12 -12
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +37 -37
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +19 -19
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +9 -5
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +2 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/textures/ColorTexture.d.ts +1 -1
- package/dist/src/core/textures/ColorTexture.js +2 -1
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +8 -1
- package/dist/src/core/textures/ImageTexture.js +39 -1
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
- package/dist/src/core/textures/NoiseTexture.js +2 -1
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.d.ts +1 -1
- package/dist/src/core/textures/RenderTexture.js +2 -1
- package/dist/src/core/textures/RenderTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +1 -1
- package/dist/src/core/textures/SubTexture.js +21 -4
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +44 -22
- package/dist/src/core/textures/Texture.js +116 -36
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +18 -0
- package/dist/src/main-api/Renderer.js +6 -4
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/canvas.ts +39 -39
- package/exports/index.ts +89 -89
- package/exports/inspector.ts +24 -24
- package/exports/utils.ts +44 -44
- package/exports/webgl.ts +38 -38
- package/package.json +1 -1
- package/scripts/please-use-pnpm.js +13 -13
- package/src/common/CommonTypes.ts +139 -139
- package/src/common/EventEmitter.ts +77 -77
- package/src/common/IAnimationController.ts +92 -92
- package/src/common/IEventEmitter.ts +28 -28
- package/src/core/CoreNode.test.ts +199 -95
- package/src/core/CoreNode.ts +2313 -2258
- package/src/core/CoreShaderManager.ts +292 -292
- package/src/core/CoreTextNode.ts +455 -450
- package/src/core/CoreTextureManager.ts +522 -432
- package/src/core/Stage.ts +700 -652
- package/src/core/TextureMemoryManager.ts +277 -279
- package/src/core/animations/AnimationManager.ts +38 -38
- package/src/core/animations/CoreAnimation.ts +340 -340
- package/src/core/animations/CoreAnimationController.ts +157 -157
- package/src/core/lib/ContextSpy.ts +41 -41
- package/src/core/lib/ImageWorker.ts +270 -267
- package/src/core/lib/Matrix3d.ts +244 -244
- package/src/core/lib/RenderCoords.ts +86 -86
- package/src/core/lib/WebGlContextWrapper.ts +1322 -1320
- package/src/core/lib/textureCompression.ts +152 -152
- package/src/core/lib/textureSvg.ts +78 -78
- package/src/core/lib/utils.ts +306 -306
- package/src/core/platform.ts +61 -61
- package/src/core/renderers/CoreContextTexture.ts +43 -42
- package/src/core/renderers/CoreRenderOp.ts +22 -22
- package/src/core/renderers/CoreRenderer.ts +114 -114
- package/src/core/renderers/CoreShader.ts +41 -41
- package/src/core/renderers/canvas/CanvasCoreRenderer.ts +364 -353
- package/src/core/renderers/canvas/CanvasCoreTexture.ts +150 -149
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +231 -231
- package/src/core/renderers/canvas/internal/ColorUtils.ts +69 -69
- package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +48 -48
- package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +79 -79
- package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +50 -48
- package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +298 -290
- package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +125 -125
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +805 -817
- package/src/core/renderers/webgl/WebGlCoreShader.ts +362 -362
- package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
- package/src/core/renderers/webgl/internal/RendererUtils.ts +155 -155
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -143
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
- package/src/core/renderers/webgl/shaders/DefaultShader.ts +93 -93
- package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -132
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +580 -580
- package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +167 -167
- package/src/core/renderers/webgl/shaders/SdfShader.ts +204 -204
- package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +87 -87
- package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +159 -159
- package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +127 -127
- package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +148 -148
- package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +67 -67
- package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +157 -157
- package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +171 -171
- package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +168 -168
- package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +187 -187
- package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +110 -110
- package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +196 -196
- package/src/core/text-rendering/TextRenderingUtils.ts +36 -36
- package/src/core/text-rendering/TextTextureRendererUtils.ts +263 -263
- package/src/core/text-rendering/TrFontManager.ts +183 -183
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +176 -171
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -139
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -173
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +171 -171
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +187 -187
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +89 -89
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +509 -507
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +798 -798
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +853 -853
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -48
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -66
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -32
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +117 -117
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -133
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -38
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +403 -403
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -49
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +52 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -205
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -93
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -40
- package/src/core/text-rendering/renderers/TextRenderer.ts +557 -557
- package/src/core/textures/ColorTexture.ts +102 -100
- package/src/core/textures/ImageTexture.ts +378 -337
- package/src/core/textures/NoiseTexture.ts +104 -101
- package/src/core/textures/RenderTexture.ts +85 -83
- package/src/core/textures/SubTexture.ts +171 -146
- package/src/core/textures/Texture.ts +423 -318
- package/src/core/utils.ts +227 -227
- package/src/env.d.ts +7 -7
- package/src/main-api/DynamicShaderController.ts +104 -104
- package/src/main-api/INode.ts +101 -101
- package/src/main-api/Inspector.ts +505 -505
- package/src/main-api/Renderer.ts +693 -670
- package/src/main-api/ShaderController.ts +80 -80
- package/src/main-api/utils.ts +45 -45
- package/src/utils.ts +248 -248
package/README.md
CHANGED
|
@@ -1,147 +1,147 @@
|
|
|
1
|
-
# Lightning 3 Renderer
|
|
2
|
-
|
|
3
|
-
A powerful 2D scene renderer designed for rendering highly performant user
|
|
4
|
-
interfaces on web browsers running on embedded devices using WebGL.
|
|
5
|
-
|
|
6
|
-
The Renderer is part of the [LightningJS](https://lightningjs.io) project. While it is possible to use the renderer directly, it is not recommended. Instead, Lightning 3 works best when combined with [Blits](https://lightningjs.io/v3-docs/blits/getting_started/intro.html).
|
|
7
|
-
|
|
8
|
-
## Setup & Commands
|
|
9
|
-
|
|
10
|
-
```
|
|
11
|
-
# Install renderer + example dependencies
|
|
12
|
-
pnpm install
|
|
13
|
-
|
|
14
|
-
# Build Renderer
|
|
15
|
-
pnpm build
|
|
16
|
-
|
|
17
|
-
# Build Renderer (watch mode)
|
|
18
|
-
pnpm watch
|
|
19
|
-
|
|
20
|
-
# Run unit tests
|
|
21
|
-
pnpm test
|
|
22
|
-
|
|
23
|
-
# Run Visual Regression Tests
|
|
24
|
-
pnpm test:visual
|
|
25
|
-
|
|
26
|
-
# Build API Documentation (builds into ./typedocs folder)
|
|
27
|
-
pnpm typedoc
|
|
28
|
-
|
|
29
|
-
# Launch Example Tests in dev mode (includes Build Renderer (watch mode))
|
|
30
|
-
pnpm start
|
|
31
|
-
|
|
32
|
-
# Launch Example Tests in production mode
|
|
33
|
-
# IMPORTANT: To run test examples on embedded devices that use older browser versions
|
|
34
|
-
# you MUST run the examples in this mode.
|
|
35
|
-
pnpm start:prod
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Browser Targets
|
|
39
|
-
|
|
40
|
-
The Lightning 3 Renderer's goal is to work with the following browser versions and above:
|
|
41
|
-
|
|
42
|
-
- Chrome v38 (Released October 7, 2014)
|
|
43
|
-
|
|
44
|
-
Any JavaScript language features or browser APIs that cannot be automatically transpiled or polyfilled by industry standard transpilers (such as Babel) to target these versions must be carefully considered before use.
|
|
45
|
-
|
|
46
|
-
For a more detailed and comprehensive list of browsers and their features please see [browsers](./BROWSERS.md).
|
|
47
|
-
|
|
48
|
-
## Example Tests
|
|
49
|
-
|
|
50
|
-
The Example Tests sub-project define a set of tests for various Renderer
|
|
51
|
-
features. This is NOT an automated test. The command below will launch a
|
|
52
|
-
web server which can be accessed by a web browser for manual testing. However,
|
|
53
|
-
many of the Example Tests define Snapshots for the Visual Regression Test Runner
|
|
54
|
-
(see below).
|
|
55
|
-
|
|
56
|
-
The Example Tests can be launched with:
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
pnpm start
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
A hosted version can be found [here](https://lightning-js.github.io/renderer/).
|
|
63
|
-
|
|
64
|
-
This supports modern browsers as well as Chrome 38 and above through a legacy build.
|
|
65
|
-
|
|
66
|
-
See [examples/README.md](./examples/README.md) for more info.
|
|
67
|
-
|
|
68
|
-
## Visual Regression Tests
|
|
69
|
-
|
|
70
|
-
In order to prevent bugs on existing Renderer features when new features or bug
|
|
71
|
-
fixes are added, the Renderer includes a Visual Regression Test Runner along
|
|
72
|
-
with a set of certified snapshot files that are checked into the repository.
|
|
73
|
-
|
|
74
|
-
These tests can be launched with:
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
pnpm test:visual
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
The captured Snapshots of these tests are optionally defined in the individual
|
|
81
|
-
Example Tests.
|
|
82
|
-
|
|
83
|
-
See [visual-regression/README.md](./visual-regression/README.md) for more info.
|
|
84
|
-
|
|
85
|
-
## Manual Regression Tests
|
|
86
|
-
|
|
87
|
-
See [docs/ManualRegressionTests.md].
|
|
88
|
-
|
|
89
|
-
## Release Procedure
|
|
90
|
-
|
|
91
|
-
See [RELEASE.md](./RELEASE.md)
|
|
92
|
-
|
|
93
|
-
## Installing Fonts
|
|
94
|
-
|
|
95
|
-
Fonts can be installed into the Font Manager exposed by the Renderer's Stage.
|
|
96
|
-
There are two types of fonts that you can install, Web/Canvas2D fonts (WebTrFontFace)
|
|
97
|
-
and SDF fonts (SdfTrFontFace). Install that fonts that your applications needs
|
|
98
|
-
at start up so they are ready when your application is rendered.
|
|
99
|
-
|
|
100
|
-
```ts
|
|
101
|
-
import {
|
|
102
|
-
RendererMain,
|
|
103
|
-
WebTrFontFace,
|
|
104
|
-
SdfTrFontFace,
|
|
105
|
-
} from '@lightningjs/renderer';
|
|
106
|
-
|
|
107
|
-
import {
|
|
108
|
-
WebGlCoreRenderer,
|
|
109
|
-
SdfTextRenderer,
|
|
110
|
-
} from '@lightningjs/renderer/webgl';
|
|
111
|
-
import { CanvasTextRenderer } from '@lightningjs/renderer/canvas';
|
|
112
|
-
|
|
113
|
-
const renderer = new RendererMain(
|
|
114
|
-
{
|
|
115
|
-
appWidth: 1920,
|
|
116
|
-
appHeight: 1080,
|
|
117
|
-
renderEngine: WebGlCoreRenderer,
|
|
118
|
-
fontEngines: [SdfTextRenderer, CanvasTextRenderer],
|
|
119
|
-
// ...Other Renderer Config
|
|
120
|
-
},
|
|
121
|
-
'app', // id of div to insert Canvas.
|
|
122
|
-
);
|
|
123
|
-
|
|
124
|
-
// Load fonts into renderer
|
|
125
|
-
renderer.stage.fontManager.addFontFace(
|
|
126
|
-
new WebTrFontFace('Ubuntu', {}, '/fonts/Ubuntu-Regular.ttf'),
|
|
127
|
-
);
|
|
128
|
-
|
|
129
|
-
renderer.stage.fontManager.addFontFace(
|
|
130
|
-
new SdfTrFontFace(
|
|
131
|
-
'Ubuntu',
|
|
132
|
-
{},
|
|
133
|
-
'msdf',
|
|
134
|
-
stage,
|
|
135
|
-
'/fonts/Ubuntu-Regular.msdf.png',
|
|
136
|
-
'/fonts/Ubuntu-Regular.msdf.json',
|
|
137
|
-
),
|
|
138
|
-
);
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
Please note that the WebGL renderer supports both SDF Fonts and Web Fonts, however the
|
|
142
|
-
Canvas renderer only supports Web Fonts:
|
|
143
|
-
|
|
144
|
-
| Font Type Renderer | SDF Font | Web Font |
|
|
145
|
-
| ------------------ | -------- | -------- |
|
|
146
|
-
| WebGL | Y | Y |
|
|
147
|
-
| Canvas | N | Y |
|
|
1
|
+
# Lightning 3 Renderer
|
|
2
|
+
|
|
3
|
+
A powerful 2D scene renderer designed for rendering highly performant user
|
|
4
|
+
interfaces on web browsers running on embedded devices using WebGL.
|
|
5
|
+
|
|
6
|
+
The Renderer is part of the [LightningJS](https://lightningjs.io) project. While it is possible to use the renderer directly, it is not recommended. Instead, Lightning 3 works best when combined with [Blits](https://lightningjs.io/v3-docs/blits/getting_started/intro.html).
|
|
7
|
+
|
|
8
|
+
## Setup & Commands
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
# Install renderer + example dependencies
|
|
12
|
+
pnpm install
|
|
13
|
+
|
|
14
|
+
# Build Renderer
|
|
15
|
+
pnpm build
|
|
16
|
+
|
|
17
|
+
# Build Renderer (watch mode)
|
|
18
|
+
pnpm watch
|
|
19
|
+
|
|
20
|
+
# Run unit tests
|
|
21
|
+
pnpm test
|
|
22
|
+
|
|
23
|
+
# Run Visual Regression Tests
|
|
24
|
+
pnpm test:visual
|
|
25
|
+
|
|
26
|
+
# Build API Documentation (builds into ./typedocs folder)
|
|
27
|
+
pnpm typedoc
|
|
28
|
+
|
|
29
|
+
# Launch Example Tests in dev mode (includes Build Renderer (watch mode))
|
|
30
|
+
pnpm start
|
|
31
|
+
|
|
32
|
+
# Launch Example Tests in production mode
|
|
33
|
+
# IMPORTANT: To run test examples on embedded devices that use older browser versions
|
|
34
|
+
# you MUST run the examples in this mode.
|
|
35
|
+
pnpm start:prod
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Browser Targets
|
|
39
|
+
|
|
40
|
+
The Lightning 3 Renderer's goal is to work with the following browser versions and above:
|
|
41
|
+
|
|
42
|
+
- Chrome v38 (Released October 7, 2014)
|
|
43
|
+
|
|
44
|
+
Any JavaScript language features or browser APIs that cannot be automatically transpiled or polyfilled by industry standard transpilers (such as Babel) to target these versions must be carefully considered before use.
|
|
45
|
+
|
|
46
|
+
For a more detailed and comprehensive list of browsers and their features please see [browsers](./BROWSERS.md).
|
|
47
|
+
|
|
48
|
+
## Example Tests
|
|
49
|
+
|
|
50
|
+
The Example Tests sub-project define a set of tests for various Renderer
|
|
51
|
+
features. This is NOT an automated test. The command below will launch a
|
|
52
|
+
web server which can be accessed by a web browser for manual testing. However,
|
|
53
|
+
many of the Example Tests define Snapshots for the Visual Regression Test Runner
|
|
54
|
+
(see below).
|
|
55
|
+
|
|
56
|
+
The Example Tests can be launched with:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
pnpm start
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
A hosted version can be found [here](https://lightning-js.github.io/renderer/).
|
|
63
|
+
|
|
64
|
+
This supports modern browsers as well as Chrome 38 and above through a legacy build.
|
|
65
|
+
|
|
66
|
+
See [examples/README.md](./examples/README.md) for more info.
|
|
67
|
+
|
|
68
|
+
## Visual Regression Tests
|
|
69
|
+
|
|
70
|
+
In order to prevent bugs on existing Renderer features when new features or bug
|
|
71
|
+
fixes are added, the Renderer includes a Visual Regression Test Runner along
|
|
72
|
+
with a set of certified snapshot files that are checked into the repository.
|
|
73
|
+
|
|
74
|
+
These tests can be launched with:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
pnpm test:visual
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
The captured Snapshots of these tests are optionally defined in the individual
|
|
81
|
+
Example Tests.
|
|
82
|
+
|
|
83
|
+
See [visual-regression/README.md](./visual-regression/README.md) for more info.
|
|
84
|
+
|
|
85
|
+
## Manual Regression Tests
|
|
86
|
+
|
|
87
|
+
See [docs/ManualRegressionTests.md].
|
|
88
|
+
|
|
89
|
+
## Release Procedure
|
|
90
|
+
|
|
91
|
+
See [RELEASE.md](./RELEASE.md)
|
|
92
|
+
|
|
93
|
+
## Installing Fonts
|
|
94
|
+
|
|
95
|
+
Fonts can be installed into the Font Manager exposed by the Renderer's Stage.
|
|
96
|
+
There are two types of fonts that you can install, Web/Canvas2D fonts (WebTrFontFace)
|
|
97
|
+
and SDF fonts (SdfTrFontFace). Install that fonts that your applications needs
|
|
98
|
+
at start up so they are ready when your application is rendered.
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
import {
|
|
102
|
+
RendererMain,
|
|
103
|
+
WebTrFontFace,
|
|
104
|
+
SdfTrFontFace,
|
|
105
|
+
} from '@lightningjs/renderer';
|
|
106
|
+
|
|
107
|
+
import {
|
|
108
|
+
WebGlCoreRenderer,
|
|
109
|
+
SdfTextRenderer,
|
|
110
|
+
} from '@lightningjs/renderer/webgl';
|
|
111
|
+
import { CanvasTextRenderer } from '@lightningjs/renderer/canvas';
|
|
112
|
+
|
|
113
|
+
const renderer = new RendererMain(
|
|
114
|
+
{
|
|
115
|
+
appWidth: 1920,
|
|
116
|
+
appHeight: 1080,
|
|
117
|
+
renderEngine: WebGlCoreRenderer,
|
|
118
|
+
fontEngines: [SdfTextRenderer, CanvasTextRenderer],
|
|
119
|
+
// ...Other Renderer Config
|
|
120
|
+
},
|
|
121
|
+
'app', // id of div to insert Canvas.
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
// Load fonts into renderer
|
|
125
|
+
renderer.stage.fontManager.addFontFace(
|
|
126
|
+
new WebTrFontFace('Ubuntu', {}, '/fonts/Ubuntu-Regular.ttf'),
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
renderer.stage.fontManager.addFontFace(
|
|
130
|
+
new SdfTrFontFace(
|
|
131
|
+
'Ubuntu',
|
|
132
|
+
{},
|
|
133
|
+
'msdf',
|
|
134
|
+
stage,
|
|
135
|
+
'/fonts/Ubuntu-Regular.msdf.png',
|
|
136
|
+
'/fonts/Ubuntu-Regular.msdf.json',
|
|
137
|
+
),
|
|
138
|
+
);
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Please note that the WebGL renderer supports both SDF Fonts and Web Fonts, however the
|
|
142
|
+
Canvas renderer only supports Web Fonts:
|
|
143
|
+
|
|
144
|
+
| Font Type Renderer | SDF Font | Web Font |
|
|
145
|
+
| ------------------ | -------- | -------- |
|
|
146
|
+
| WebGL | Y | Y |
|
|
147
|
+
| Canvas | N | Y |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TextureOptions } from './CoreTextureManager.js';
|
|
2
2
|
import type { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
3
3
|
import type { Stage } from './Stage.js';
|
|
4
|
-
import type
|
|
4
|
+
import { type Texture } from './textures/Texture.js';
|
|
5
5
|
import type { Dimensions } from '../common/CommonTypes.js';
|
|
6
6
|
import { EventEmitter } from '../common/EventEmitter.js';
|
|
7
7
|
import { type Bound, type RectWithValid } from './lib/utils.js';
|
|
@@ -681,18 +681,40 @@ export declare class CoreNode extends EventEmitter {
|
|
|
681
681
|
update(delta: number, parentClippingRect: RectWithValid): void;
|
|
682
682
|
private findParentRTTNode;
|
|
683
683
|
private notifyParentRTTOfUpdate;
|
|
684
|
-
hasRenderableProperties(): boolean;
|
|
685
684
|
checkRenderBounds(): CoreNodeRenderState;
|
|
686
685
|
updateBoundingRect(): void;
|
|
687
686
|
createRenderBounds(): void;
|
|
688
687
|
updateRenderState(renderState: CoreNodeRenderState): void;
|
|
689
688
|
/**
|
|
690
|
-
*
|
|
691
|
-
*
|
|
692
|
-
* @returns
|
|
689
|
+
* Updates the `isRenderable` property based on various conditions.
|
|
693
690
|
*/
|
|
694
691
|
updateIsRenderable(): void;
|
|
695
|
-
|
|
692
|
+
/**
|
|
693
|
+
* Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
|
|
694
|
+
*/
|
|
695
|
+
checkBasicRenderability(): boolean;
|
|
696
|
+
/**
|
|
697
|
+
* Sets the renderable state and triggers changes if necessary.
|
|
698
|
+
* @param isRenderable - The new renderable state
|
|
699
|
+
*/
|
|
700
|
+
setRenderable(isRenderable: boolean): void;
|
|
701
|
+
/**
|
|
702
|
+
* Changes the renderable state of the node.
|
|
703
|
+
*/
|
|
704
|
+
updateTextureOwnership(isRenderable: boolean): void;
|
|
705
|
+
/**
|
|
706
|
+
* Checks if the node is out of the viewport bounds.
|
|
707
|
+
*/
|
|
708
|
+
isOutOfBounds(): boolean;
|
|
709
|
+
/**
|
|
710
|
+
* Checks if the node has dimensions (width/height)
|
|
711
|
+
*/
|
|
712
|
+
hasDimensions(): boolean;
|
|
713
|
+
/**
|
|
714
|
+
* Checks if the node has any color properties set.
|
|
715
|
+
*/
|
|
716
|
+
hasColorProperties(): boolean;
|
|
717
|
+
hasShader(): boolean;
|
|
696
718
|
calculateRenderCoords(): void;
|
|
697
719
|
/**
|
|
698
720
|
* This function calculates the clipping rectangle for a node.
|
|
@@ -777,6 +799,7 @@ export declare class CoreNode extends EventEmitter {
|
|
|
777
799
|
get rtt(): boolean;
|
|
778
800
|
set rtt(value: boolean);
|
|
779
801
|
private initRenderTexture;
|
|
802
|
+
private loadRenderTexture;
|
|
780
803
|
private cleanupRenderTexture;
|
|
781
804
|
private markChildrenWithRTT;
|
|
782
805
|
private applyRTTInheritance;
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
import { assertTruthy, getNewId, mergeColorAlphaPremultiplied, } from '../utils.js';
|
|
20
|
+
import {} from './textures/Texture.js';
|
|
20
21
|
import { EventEmitter } from '../common/EventEmitter.js';
|
|
21
22
|
import { copyRect, intersectRect, createBound, boundInsideBound, boundLargeThanBound, createPreloadBounds, } from './lib/utils.js';
|
|
22
23
|
import { Matrix3d } from './lib/Matrix3d.js';
|
|
@@ -206,6 +207,14 @@ export class CoreNode extends EventEmitter {
|
|
|
206
207
|
UpdateType.Local |
|
|
207
208
|
UpdateType.RenderBounds |
|
|
208
209
|
UpdateType.RenderState);
|
|
210
|
+
// if the default texture isn't loaded yet, wait for it to load
|
|
211
|
+
// this only happens when the node is created before the stage is ready
|
|
212
|
+
if (this.stage.defaultTexture &&
|
|
213
|
+
this.stage.defaultTexture.state !== 'loaded') {
|
|
214
|
+
this.stage.defaultTexture.once('loaded', () => {
|
|
215
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
209
218
|
}
|
|
210
219
|
//#region Textures
|
|
211
220
|
loadTexture() {
|
|
@@ -217,10 +226,6 @@ export class CoreNode extends EventEmitter {
|
|
|
217
226
|
// synchronous task after calling loadTexture()
|
|
218
227
|
queueMicrotask(() => {
|
|
219
228
|
texture.preventCleanup = this.props.preventCleanup;
|
|
220
|
-
// Preload texture if required
|
|
221
|
-
if (this.textureOptions.preload) {
|
|
222
|
-
texture.ctxTexture.load();
|
|
223
|
-
}
|
|
224
229
|
texture.on('loaded', this.onTextureLoaded);
|
|
225
230
|
texture.on('failed', this.onTextureFailed);
|
|
226
231
|
texture.on('freed', this.onTextureFreed);
|
|
@@ -262,6 +267,7 @@ export class CoreNode extends EventEmitter {
|
|
|
262
267
|
}
|
|
263
268
|
onTextureLoaded = (_, dimensions) => {
|
|
264
269
|
this.autosizeNode(dimensions);
|
|
270
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
265
271
|
// Texture was loaded. In case the RAF loop has already stopped, we request
|
|
266
272
|
// a render to ensure the texture is rendered.
|
|
267
273
|
this.stage.requestRender();
|
|
@@ -269,16 +275,20 @@ export class CoreNode extends EventEmitter {
|
|
|
269
275
|
if (this.parentHasRenderTexture) {
|
|
270
276
|
this.notifyParentRTTOfUpdate();
|
|
271
277
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
278
|
+
// ignore 1x1 pixel textures
|
|
279
|
+
if (dimensions.width > 1 && dimensions.height > 1) {
|
|
280
|
+
this.emit('loaded', {
|
|
281
|
+
type: 'texture',
|
|
282
|
+
dimensions,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
276
285
|
// Trigger a local update if the texture is loaded and the resizeMode is 'contain'
|
|
277
286
|
if (this.props.textureOptions?.resizeMode?.type === 'contain') {
|
|
278
287
|
this.setUpdateType(UpdateType.Local);
|
|
279
288
|
}
|
|
280
289
|
};
|
|
281
290
|
onTextureFailed = (_, error) => {
|
|
291
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
282
292
|
// If parent has a render texture, flag that we need to update
|
|
283
293
|
if (this.parentHasRenderTexture) {
|
|
284
294
|
this.notifyParentRTTOfUpdate();
|
|
@@ -289,6 +299,7 @@ export class CoreNode extends EventEmitter {
|
|
|
289
299
|
});
|
|
290
300
|
};
|
|
291
301
|
onTextureFreed = () => {
|
|
302
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
292
303
|
// If parent has a render texture, flag that we need to update
|
|
293
304
|
if (this.parentHasRenderTexture) {
|
|
294
305
|
this.notifyParentRTTOfUpdate();
|
|
@@ -398,7 +409,7 @@ export class CoreNode extends EventEmitter {
|
|
|
398
409
|
if (this.updateType & UpdateType.RenderTexture && this.rtt) {
|
|
399
410
|
// Only the RTT node itself triggers `renderToTexture`
|
|
400
411
|
this.hasRTTupdates = true;
|
|
401
|
-
this.
|
|
412
|
+
this.loadRenderTexture();
|
|
402
413
|
}
|
|
403
414
|
if (this.updateType & UpdateType.Global) {
|
|
404
415
|
assertTruthy(this.localTransform);
|
|
@@ -547,51 +558,6 @@ export class CoreNode extends EventEmitter {
|
|
|
547
558
|
rttNode.notifyParentRTTOfUpdate();
|
|
548
559
|
}
|
|
549
560
|
}
|
|
550
|
-
//check if CoreNode is renderable based on props
|
|
551
|
-
hasRenderableProperties() {
|
|
552
|
-
if (this.props.texture) {
|
|
553
|
-
return true;
|
|
554
|
-
}
|
|
555
|
-
if (!this.props.width || !this.props.height) {
|
|
556
|
-
return false;
|
|
557
|
-
}
|
|
558
|
-
if (this.props.shader !== this.stage.defShaderCtr) {
|
|
559
|
-
return true;
|
|
560
|
-
}
|
|
561
|
-
if (this.props.clipping) {
|
|
562
|
-
return true;
|
|
563
|
-
}
|
|
564
|
-
if (this.props.color !== 0) {
|
|
565
|
-
return true;
|
|
566
|
-
}
|
|
567
|
-
// Consider removing these checks and just using the color property check above.
|
|
568
|
-
// Maybe add a forceRender prop for nodes that should always render.
|
|
569
|
-
if (this.props.colorTop !== 0) {
|
|
570
|
-
return true;
|
|
571
|
-
}
|
|
572
|
-
if (this.props.colorBottom !== 0) {
|
|
573
|
-
return true;
|
|
574
|
-
}
|
|
575
|
-
if (this.props.colorLeft !== 0) {
|
|
576
|
-
return true;
|
|
577
|
-
}
|
|
578
|
-
if (this.props.colorRight !== 0) {
|
|
579
|
-
return true;
|
|
580
|
-
}
|
|
581
|
-
if (this.props.colorTl !== 0) {
|
|
582
|
-
return true;
|
|
583
|
-
}
|
|
584
|
-
if (this.props.colorTr !== 0) {
|
|
585
|
-
return true;
|
|
586
|
-
}
|
|
587
|
-
if (this.props.colorBl !== 0) {
|
|
588
|
-
return true;
|
|
589
|
-
}
|
|
590
|
-
if (this.props.colorBr !== 0) {
|
|
591
|
-
return true;
|
|
592
|
-
}
|
|
593
|
-
return false;
|
|
594
|
-
}
|
|
595
561
|
checkRenderBounds() {
|
|
596
562
|
assertTruthy(this.renderBound);
|
|
597
563
|
assertTruthy(this.strictBound);
|
|
@@ -679,26 +645,86 @@ export class CoreNode extends EventEmitter {
|
|
|
679
645
|
});
|
|
680
646
|
}
|
|
681
647
|
/**
|
|
682
|
-
*
|
|
683
|
-
*
|
|
684
|
-
* @returns
|
|
648
|
+
* Updates the `isRenderable` property based on various conditions.
|
|
685
649
|
*/
|
|
686
650
|
updateIsRenderable() {
|
|
687
|
-
let newIsRenderable;
|
|
688
|
-
|
|
689
|
-
|
|
651
|
+
let newIsRenderable = false;
|
|
652
|
+
let needsTextureOwnership = false;
|
|
653
|
+
// If the node is out of bounds or has an alpha of 0, it is not renderable
|
|
654
|
+
if (this.checkBasicRenderability() === false) {
|
|
655
|
+
this.updateTextureOwnership(false);
|
|
656
|
+
this.setRenderable(false);
|
|
657
|
+
return;
|
|
690
658
|
}
|
|
691
|
-
|
|
692
|
-
|
|
659
|
+
if (this.texture !== null) {
|
|
660
|
+
needsTextureOwnership = true;
|
|
661
|
+
// we're only renderable if the texture state is loaded
|
|
662
|
+
newIsRenderable = this.texture.state === 'loaded';
|
|
663
|
+
}
|
|
664
|
+
else if ((this.hasShader() || this.hasColorProperties() === true) &&
|
|
665
|
+
this.hasDimensions() === true) {
|
|
666
|
+
// This mean we have dimensions and a color set, so we can render a ColorTexture
|
|
667
|
+
if (this.stage.defaultTexture &&
|
|
668
|
+
this.stage.defaultTexture.state === 'loaded') {
|
|
669
|
+
newIsRenderable = true;
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
this.updateTextureOwnership(needsTextureOwnership);
|
|
673
|
+
this.setRenderable(newIsRenderable);
|
|
674
|
+
}
|
|
675
|
+
/**
|
|
676
|
+
* Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
|
|
677
|
+
*/
|
|
678
|
+
checkBasicRenderability() {
|
|
679
|
+
if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
|
|
680
|
+
return false;
|
|
693
681
|
}
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
this.onChangeIsRenderable(newIsRenderable);
|
|
682
|
+
else {
|
|
683
|
+
return true;
|
|
697
684
|
}
|
|
698
685
|
}
|
|
699
|
-
|
|
686
|
+
/**
|
|
687
|
+
* Sets the renderable state and triggers changes if necessary.
|
|
688
|
+
* @param isRenderable - The new renderable state
|
|
689
|
+
*/
|
|
690
|
+
setRenderable(isRenderable) {
|
|
691
|
+
this.isRenderable = isRenderable;
|
|
692
|
+
}
|
|
693
|
+
/**
|
|
694
|
+
* Changes the renderable state of the node.
|
|
695
|
+
*/
|
|
696
|
+
updateTextureOwnership(isRenderable) {
|
|
700
697
|
this.texture?.setRenderableOwner(this, isRenderable);
|
|
701
698
|
}
|
|
699
|
+
/**
|
|
700
|
+
* Checks if the node is out of the viewport bounds.
|
|
701
|
+
*/
|
|
702
|
+
isOutOfBounds() {
|
|
703
|
+
return this.renderState <= CoreNodeRenderState.OutOfBounds;
|
|
704
|
+
}
|
|
705
|
+
/**
|
|
706
|
+
* Checks if the node has dimensions (width/height)
|
|
707
|
+
*/
|
|
708
|
+
hasDimensions() {
|
|
709
|
+
return this.props.width !== 0 && this.props.height !== 0;
|
|
710
|
+
}
|
|
711
|
+
/**
|
|
712
|
+
* Checks if the node has any color properties set.
|
|
713
|
+
*/
|
|
714
|
+
hasColorProperties() {
|
|
715
|
+
return (this.props.color !== 0 ||
|
|
716
|
+
this.props.colorTop !== 0 ||
|
|
717
|
+
this.props.colorBottom !== 0 ||
|
|
718
|
+
this.props.colorLeft !== 0 ||
|
|
719
|
+
this.props.colorRight !== 0 ||
|
|
720
|
+
this.props.colorTl !== 0 ||
|
|
721
|
+
this.props.colorTr !== 0 ||
|
|
722
|
+
this.props.colorBl !== 0 ||
|
|
723
|
+
this.props.colorBr !== 0);
|
|
724
|
+
}
|
|
725
|
+
hasShader() {
|
|
726
|
+
return this.props.shader !== null;
|
|
727
|
+
}
|
|
702
728
|
calculateRenderCoords() {
|
|
703
729
|
const { width, height, globalTransform: transform } = this;
|
|
704
730
|
assertTruthy(transform);
|
|
@@ -821,7 +847,9 @@ export class CoreNode extends EventEmitter {
|
|
|
821
847
|
colorTr: this.premultipliedColorTr,
|
|
822
848
|
colorBl: this.premultipliedColorBl,
|
|
823
849
|
colorBr: this.premultipliedColorBr,
|
|
824
|
-
texture
|
|
850
|
+
// if we do not have a texture, use the default texture
|
|
851
|
+
// this assumes any renderable node is either a distinct texture or a ColorTexture
|
|
852
|
+
texture: this.texture || this.stage.defaultTexture,
|
|
825
853
|
textureOptions: this.textureOptions,
|
|
826
854
|
zIndex: this.zIndex,
|
|
827
855
|
shader: this.shader.shader,
|
|
@@ -886,11 +914,10 @@ export class CoreNode extends EventEmitter {
|
|
|
886
914
|
this.props.width = value;
|
|
887
915
|
this.setUpdateType(UpdateType.Local);
|
|
888
916
|
if (this.props.rtt) {
|
|
889
|
-
this.texture = this.stage.txManager.
|
|
917
|
+
this.texture = this.stage.txManager.createTexture('RenderTexture', {
|
|
890
918
|
width: this.width,
|
|
891
919
|
height: this.height,
|
|
892
920
|
});
|
|
893
|
-
this.textureOptions.preload = true;
|
|
894
921
|
this.setUpdateType(UpdateType.RenderTexture);
|
|
895
922
|
}
|
|
896
923
|
}
|
|
@@ -903,11 +930,10 @@ export class CoreNode extends EventEmitter {
|
|
|
903
930
|
this.props.height = value;
|
|
904
931
|
this.setUpdateType(UpdateType.Local);
|
|
905
932
|
if (this.props.rtt) {
|
|
906
|
-
this.texture = this.stage.txManager.
|
|
933
|
+
this.texture = this.stage.txManager.createTexture('RenderTexture', {
|
|
907
934
|
width: this.width,
|
|
908
935
|
height: this.height,
|
|
909
936
|
});
|
|
910
|
-
this.textureOptions.preload = true;
|
|
911
937
|
this.setUpdateType(UpdateType.RenderTexture);
|
|
912
938
|
}
|
|
913
939
|
}
|
|
@@ -1195,12 +1221,27 @@ export class CoreNode extends EventEmitter {
|
|
|
1195
1221
|
}
|
|
1196
1222
|
}
|
|
1197
1223
|
initRenderTexture() {
|
|
1198
|
-
this.texture = this.stage.txManager.
|
|
1224
|
+
this.texture = this.stage.txManager.createTexture('RenderTexture', {
|
|
1199
1225
|
width: this.width,
|
|
1200
1226
|
height: this.height,
|
|
1201
1227
|
});
|
|
1202
|
-
this.
|
|
1203
|
-
|
|
1228
|
+
this.loadRenderTexture();
|
|
1229
|
+
}
|
|
1230
|
+
loadRenderTexture() {
|
|
1231
|
+
if (this.texture === null) {
|
|
1232
|
+
return;
|
|
1233
|
+
}
|
|
1234
|
+
// If the texture is already loaded, render to it immediately
|
|
1235
|
+
if (this.texture.state === 'loaded') {
|
|
1236
|
+
this.stage.renderer?.renderToTexture(this);
|
|
1237
|
+
return;
|
|
1238
|
+
}
|
|
1239
|
+
// call load immediately to ensure the texture is created
|
|
1240
|
+
this.stage.txManager.loadTexture(this.texture, true);
|
|
1241
|
+
this.texture.once('loaded', () => {
|
|
1242
|
+
this.stage.renderer?.renderToTexture(this); // Only this RTT node
|
|
1243
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
1244
|
+
});
|
|
1204
1245
|
}
|
|
1205
1246
|
cleanupRenderTexture() {
|
|
1206
1247
|
this.unloadTexture();
|
|
@@ -1263,7 +1304,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1263
1304
|
this.texture = null;
|
|
1264
1305
|
return;
|
|
1265
1306
|
}
|
|
1266
|
-
this.texture = this.stage.txManager.
|
|
1307
|
+
this.texture = this.stage.txManager.createTexture('ImageTexture', {
|
|
1267
1308
|
src: imageUrl,
|
|
1268
1309
|
width: this.props.width,
|
|
1269
1310
|
height: this.props.height,
|
|
@@ -1345,8 +1386,8 @@ export class CoreNode extends EventEmitter {
|
|
|
1345
1386
|
this.unloadTexture();
|
|
1346
1387
|
}
|
|
1347
1388
|
this.props.texture = value;
|
|
1348
|
-
if (value) {
|
|
1349
|
-
value.setRenderableOwner(this, this.isRenderable);
|
|
1389
|
+
if (value !== null) {
|
|
1390
|
+
value.setRenderableOwner(this, this.isRenderable); // WVB TODO: check if this is correct
|
|
1350
1391
|
this.loadTexture();
|
|
1351
1392
|
}
|
|
1352
1393
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
@@ -1370,9 +1411,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1370
1411
|
}
|
|
1371
1412
|
animate(props, settings) {
|
|
1372
1413
|
const animation = new CoreAnimation(this, props, settings);
|
|
1373
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
|
1374
1414
|
const controller = new CoreAnimationController(this.stage.animationManager, animation);
|
|
1375
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
1376
1415
|
return controller;
|
|
1377
1416
|
}
|
|
1378
1417
|
flush() {
|