@lightningjs/renderer 2.9.0-beta2 → 2.9.0-beta3
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 +2 -1
- package/dist/src/core/CoreNode.js +54 -43
- package/dist/src/core/CoreNode.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 +33 -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 +10 -10
- 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 +3 -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 +43 -21
- package/dist/src/core/textures/Texture.js +105 -33
- 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 +95 -95
- package/src/core/CoreNode.ts +2282 -2258
- package/src/core/CoreShaderManager.ts +292 -292
- package/src/core/CoreTextNode.ts +450 -450
- package/src/core/CoreTextureManager.ts +522 -432
- package/src/core/Stage.ts +699 -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/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 +169 -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 +407 -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';
|
|
@@ -657,6 +657,7 @@ export declare class CoreNode extends EventEmitter {
|
|
|
657
657
|
rttParent: CoreNode | null;
|
|
658
658
|
constructor(stage: Stage, props: CoreNodeProps);
|
|
659
659
|
loadTexture(): void;
|
|
660
|
+
createDefaultTexture(): void;
|
|
660
661
|
unloadTexture(): void;
|
|
661
662
|
autosizeNode(dimensions: Dimensions): void;
|
|
662
663
|
private onTextureLoaded;
|
|
@@ -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,7 @@ export class CoreNode extends EventEmitter {
|
|
|
206
207
|
UpdateType.Local |
|
|
207
208
|
UpdateType.RenderBounds |
|
|
208
209
|
UpdateType.RenderState);
|
|
210
|
+
this.createDefaultTexture();
|
|
209
211
|
}
|
|
210
212
|
//#region Textures
|
|
211
213
|
loadTexture() {
|
|
@@ -217,10 +219,6 @@ export class CoreNode extends EventEmitter {
|
|
|
217
219
|
// synchronous task after calling loadTexture()
|
|
218
220
|
queueMicrotask(() => {
|
|
219
221
|
texture.preventCleanup = this.props.preventCleanup;
|
|
220
|
-
// Preload texture if required
|
|
221
|
-
if (this.textureOptions.preload) {
|
|
222
|
-
texture.ctxTexture.load();
|
|
223
|
-
}
|
|
224
222
|
texture.on('loaded', this.onTextureLoaded);
|
|
225
223
|
texture.on('failed', this.onTextureFailed);
|
|
226
224
|
texture.on('freed', this.onTextureFreed);
|
|
@@ -246,6 +244,15 @@ export class CoreNode extends EventEmitter {
|
|
|
246
244
|
}
|
|
247
245
|
});
|
|
248
246
|
}
|
|
247
|
+
createDefaultTexture() {
|
|
248
|
+
// load default texture if no texture is set
|
|
249
|
+
if (this.stage.defaultTexture !== null &&
|
|
250
|
+
this.props.src === null &&
|
|
251
|
+
this.props.texture === null &&
|
|
252
|
+
this.props.rtt === false) {
|
|
253
|
+
this.texture = this.stage.defaultTexture;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
249
256
|
unloadTexture() {
|
|
250
257
|
if (this.texture !== null) {
|
|
251
258
|
this.texture.off('loaded', this.onTextureLoaded);
|
|
@@ -262,6 +269,7 @@ export class CoreNode extends EventEmitter {
|
|
|
262
269
|
}
|
|
263
270
|
onTextureLoaded = (_, dimensions) => {
|
|
264
271
|
this.autosizeNode(dimensions);
|
|
272
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
265
273
|
// Texture was loaded. In case the RAF loop has already stopped, we request
|
|
266
274
|
// a render to ensure the texture is rendered.
|
|
267
275
|
this.stage.requestRender();
|
|
@@ -269,16 +277,20 @@ export class CoreNode extends EventEmitter {
|
|
|
269
277
|
if (this.parentHasRenderTexture) {
|
|
270
278
|
this.notifyParentRTTOfUpdate();
|
|
271
279
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
280
|
+
// ignore 1x1 pixel textures
|
|
281
|
+
if (dimensions.width > 1 && dimensions.height > 1) {
|
|
282
|
+
this.emit('loaded', {
|
|
283
|
+
type: 'texture',
|
|
284
|
+
dimensions,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
276
287
|
// Trigger a local update if the texture is loaded and the resizeMode is 'contain'
|
|
277
288
|
if (this.props.textureOptions?.resizeMode?.type === 'contain') {
|
|
278
289
|
this.setUpdateType(UpdateType.Local);
|
|
279
290
|
}
|
|
280
291
|
};
|
|
281
292
|
onTextureFailed = (_, error) => {
|
|
293
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
282
294
|
// If parent has a render texture, flag that we need to update
|
|
283
295
|
if (this.parentHasRenderTexture) {
|
|
284
296
|
this.notifyParentRTTOfUpdate();
|
|
@@ -289,6 +301,7 @@ export class CoreNode extends EventEmitter {
|
|
|
289
301
|
});
|
|
290
302
|
};
|
|
291
303
|
onTextureFreed = () => {
|
|
304
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
292
305
|
// If parent has a render texture, flag that we need to update
|
|
293
306
|
if (this.parentHasRenderTexture) {
|
|
294
307
|
this.notifyParentRTTOfUpdate();
|
|
@@ -549,8 +562,11 @@ export class CoreNode extends EventEmitter {
|
|
|
549
562
|
}
|
|
550
563
|
//check if CoreNode is renderable based on props
|
|
551
564
|
hasRenderableProperties() {
|
|
552
|
-
if (this.
|
|
553
|
-
|
|
565
|
+
if (this.texture !== null) {
|
|
566
|
+
if (this.texture.state === 'loaded') {
|
|
567
|
+
return true;
|
|
568
|
+
}
|
|
569
|
+
return false;
|
|
554
570
|
}
|
|
555
571
|
if (!this.props.width || !this.props.height) {
|
|
556
572
|
return false;
|
|
@@ -558,7 +574,7 @@ export class CoreNode extends EventEmitter {
|
|
|
558
574
|
if (this.props.shader !== this.stage.defShaderCtr) {
|
|
559
575
|
return true;
|
|
560
576
|
}
|
|
561
|
-
if (this.props.clipping) {
|
|
577
|
+
if (this.props.clipping === true) {
|
|
562
578
|
return true;
|
|
563
579
|
}
|
|
564
580
|
if (this.props.color !== 0) {
|
|
@@ -566,28 +582,14 @@ export class CoreNode extends EventEmitter {
|
|
|
566
582
|
}
|
|
567
583
|
// Consider removing these checks and just using the color property check above.
|
|
568
584
|
// Maybe add a forceRender prop for nodes that should always render.
|
|
569
|
-
if (this.props.colorTop !== 0
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
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) {
|
|
585
|
+
if (this.props.colorTop !== 0 ||
|
|
586
|
+
this.props.colorBottom !== 0 ||
|
|
587
|
+
this.props.colorLeft !== 0 ||
|
|
588
|
+
this.props.colorRight !== 0 ||
|
|
589
|
+
this.props.colorTl !== 0 ||
|
|
590
|
+
this.props.colorTr !== 0 ||
|
|
591
|
+
this.props.colorBl !== 0 ||
|
|
592
|
+
this.props.colorBr !== 0) {
|
|
591
593
|
return true;
|
|
592
594
|
}
|
|
593
595
|
return false;
|
|
@@ -691,6 +693,13 @@ export class CoreNode extends EventEmitter {
|
|
|
691
693
|
else {
|
|
692
694
|
newIsRenderable = this.renderState > CoreNodeRenderState.OutOfBounds;
|
|
693
695
|
}
|
|
696
|
+
// If the texture is not loaded and the node is renderable, load the texture
|
|
697
|
+
// this only needs to happen once or until the texture is no longer loaded
|
|
698
|
+
if (this.texture !== null &&
|
|
699
|
+
this.texture.state === 'freed' &&
|
|
700
|
+
this.renderState > CoreNodeRenderState.OutOfBounds) {
|
|
701
|
+
this.stage.txManager.loadTexture(this.texture);
|
|
702
|
+
}
|
|
694
703
|
if (this.isRenderable !== newIsRenderable) {
|
|
695
704
|
this.isRenderable = newIsRenderable;
|
|
696
705
|
this.onChangeIsRenderable(newIsRenderable);
|
|
@@ -813,6 +822,7 @@ export class CoreNode extends EventEmitter {
|
|
|
813
822
|
}
|
|
814
823
|
assertTruthy(this.globalTransform);
|
|
815
824
|
assertTruthy(this.renderCoords);
|
|
825
|
+
assertTruthy(this.texture);
|
|
816
826
|
// add to list of renderables to be sorted before rendering
|
|
817
827
|
renderer.addQuad({
|
|
818
828
|
width: this.props.width,
|
|
@@ -886,11 +896,10 @@ export class CoreNode extends EventEmitter {
|
|
|
886
896
|
this.props.width = value;
|
|
887
897
|
this.setUpdateType(UpdateType.Local);
|
|
888
898
|
if (this.props.rtt) {
|
|
889
|
-
this.texture = this.stage.txManager.
|
|
899
|
+
this.texture = this.stage.txManager.createTexture('RenderTexture', {
|
|
890
900
|
width: this.width,
|
|
891
901
|
height: this.height,
|
|
892
902
|
});
|
|
893
|
-
this.textureOptions.preload = true;
|
|
894
903
|
this.setUpdateType(UpdateType.RenderTexture);
|
|
895
904
|
}
|
|
896
905
|
}
|
|
@@ -903,11 +912,10 @@ export class CoreNode extends EventEmitter {
|
|
|
903
912
|
this.props.height = value;
|
|
904
913
|
this.setUpdateType(UpdateType.Local);
|
|
905
914
|
if (this.props.rtt) {
|
|
906
|
-
this.texture = this.stage.txManager.
|
|
915
|
+
this.texture = this.stage.txManager.createTexture('RenderTexture', {
|
|
907
916
|
width: this.width,
|
|
908
917
|
height: this.height,
|
|
909
918
|
});
|
|
910
|
-
this.textureOptions.preload = true;
|
|
911
919
|
this.setUpdateType(UpdateType.RenderTexture);
|
|
912
920
|
}
|
|
913
921
|
}
|
|
@@ -1195,11 +1203,12 @@ export class CoreNode extends EventEmitter {
|
|
|
1195
1203
|
}
|
|
1196
1204
|
}
|
|
1197
1205
|
initRenderTexture() {
|
|
1198
|
-
this.texture = this.stage.txManager.
|
|
1206
|
+
this.texture = this.stage.txManager.createTexture('RenderTexture', {
|
|
1199
1207
|
width: this.width,
|
|
1200
1208
|
height: this.height,
|
|
1201
1209
|
});
|
|
1202
|
-
|
|
1210
|
+
// call load immediately to ensure the texture is created
|
|
1211
|
+
this.stage.txManager.loadTexture(this.texture, true);
|
|
1203
1212
|
this.stage.renderer?.renderToTexture(this); // Only this RTT node
|
|
1204
1213
|
}
|
|
1205
1214
|
cleanupRenderTexture() {
|
|
@@ -1263,7 +1272,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1263
1272
|
this.texture = null;
|
|
1264
1273
|
return;
|
|
1265
1274
|
}
|
|
1266
|
-
this.texture = this.stage.txManager.
|
|
1275
|
+
this.texture = this.stage.txManager.createTexture('ImageTexture', {
|
|
1267
1276
|
src: imageUrl,
|
|
1268
1277
|
width: this.props.width,
|
|
1269
1278
|
height: this.props.height,
|
|
@@ -1345,10 +1354,14 @@ export class CoreNode extends EventEmitter {
|
|
|
1345
1354
|
this.unloadTexture();
|
|
1346
1355
|
}
|
|
1347
1356
|
this.props.texture = value;
|
|
1348
|
-
if (value) {
|
|
1357
|
+
if (value !== null) {
|
|
1349
1358
|
value.setRenderableOwner(this, this.isRenderable);
|
|
1350
1359
|
this.loadTexture();
|
|
1351
1360
|
}
|
|
1361
|
+
else {
|
|
1362
|
+
// If the texture is null, create a default texture
|
|
1363
|
+
this.createDefaultTexture();
|
|
1364
|
+
}
|
|
1352
1365
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
1353
1366
|
}
|
|
1354
1367
|
set textureOptions(value) {
|
|
@@ -1370,9 +1383,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1370
1383
|
}
|
|
1371
1384
|
animate(props, settings) {
|
|
1372
1385
|
const animation = new CoreAnimation(this, props, settings);
|
|
1373
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
|
1374
1386
|
const controller = new CoreAnimationController(this.stage.animationManager, animation);
|
|
1375
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
1376
1387
|
return controller;
|
|
1377
1388
|
}
|
|
1378
1389
|
flush() {
|