@lightningjs/renderer 2.0.0 → 2.1.1
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/dist/exports/canvas.d.ts +2 -0
- package/dist/exports/canvas.js +2 -0
- package/dist/exports/canvas.js.map +1 -1
- package/dist/exports/index.d.ts +1 -1
- package/dist/exports/index.js +1 -1
- package/dist/exports/inspector.d.ts +3 -0
- package/dist/exports/inspector.js +3 -0
- package/dist/exports/inspector.js.map +1 -1
- package/dist/exports/utils.d.ts +2 -0
- package/dist/exports/utils.js +2 -0
- package/dist/exports/utils.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +10 -3
- package/dist/src/core/CoreNode.js +113 -50
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/Stage.js +4 -4
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +1 -0
- package/dist/src/core/lib/utils.js +6 -0
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +2 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +2 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +10 -6
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +2 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
- package/dist/src/core/utils.d.ts +1 -1
- package/dist/src/main-api/Renderer.d.ts +1 -1
- package/dist/src/main-api/Renderer.js +1 -1
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/canvas.ts +2 -0
- package/exports/index.ts +1 -1
- package/exports/inspector.ts +4 -0
- package/exports/utils.ts +2 -0
- package/package.json +1 -1
- package/src/core/CoreNode.ts +167 -71
- package/src/core/Stage.ts +4 -4
- package/src/core/lib/utils.ts +9 -0
- package/src/core/renderers/canvas/CanvasCoreTexture.ts +4 -1
- package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +2 -1
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +11 -6
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +1 -0
- package/src/main-api/Renderer.ts +2 -2
- package/dist/exports/core-api.d.ts +0 -74
- package/dist/exports/core-api.js +0 -96
- package/dist/exports/core-api.js.map +0 -1
- package/dist/exports/main-api.d.ts +0 -30
- package/dist/exports/main-api.js +0 -45
- package/dist/exports/main-api.js.map +0 -1
- package/dist/src/core/CoreExtension.d.ts +0 -12
- package/dist/src/core/CoreExtension.js +0 -29
- package/dist/src/core/CoreExtension.js.map +0 -1
- package/dist/src/main-api/ICoreDriver.d.ts +0 -24
- package/dist/src/main-api/ICoreDriver.js +0 -20
- package/dist/src/main-api/ICoreDriver.js.map +0 -1
- package/dist/src/main-api/RendererMain.d.ts +0 -378
- package/dist/src/main-api/RendererMain.js +0 -367
- package/dist/src/main-api/RendererMain.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
- package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -21
- package/dist/src/render-drivers/main/MainCoreDriver.js +0 -115
- package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -101
- package/dist/src/render-drivers/main/MainOnlyNode.js +0 -425
- package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
- package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -204
- package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -93
- package/dist/src/render-drivers/threadx/NodeStruct.js +0 -290
- package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -40
- package/dist/src/render-drivers/threadx/SharedNode.js +0 -61
- package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
- package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -203
- package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -25
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -232
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -24
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -113
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -46
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -160
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -184
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -109
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
- package/dist/src/render-drivers/threadx/worker/renderer.js +0 -147
- package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
- package/dist/src/render-drivers/utils.d.ts +0 -12
- package/dist/src/render-drivers/utils.js +0 -74
- package/dist/src/render-drivers/utils.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/src/core/CoreNode.ts
CHANGED
|
@@ -45,6 +45,7 @@ import {
|
|
|
45
45
|
type RectWithValid,
|
|
46
46
|
createBound,
|
|
47
47
|
boundInsideBound,
|
|
48
|
+
boundLargeThanBound,
|
|
48
49
|
} from './lib/utils.js';
|
|
49
50
|
import { Matrix3d } from './lib/Matrix3d.js';
|
|
50
51
|
import { RenderCoords } from './lib/RenderCoords.js';
|
|
@@ -178,6 +179,11 @@ export enum UpdateType {
|
|
|
178
179
|
*/
|
|
179
180
|
ParentRenderTexture = 4096,
|
|
180
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Render Bounds update
|
|
184
|
+
*/
|
|
185
|
+
RenderBounds = 8192,
|
|
186
|
+
|
|
181
187
|
/**
|
|
182
188
|
* None
|
|
183
189
|
*/
|
|
@@ -693,6 +699,7 @@ export class CoreNode extends EventEmitter {
|
|
|
693
699
|
readonly props: CoreNodeProps;
|
|
694
700
|
|
|
695
701
|
public updateType = UpdateType.All;
|
|
702
|
+
public childUpdateType = UpdateType.None;
|
|
696
703
|
|
|
697
704
|
public globalTransform?: Matrix3d;
|
|
698
705
|
public scaleRotateTransform?: Matrix3d;
|
|
@@ -738,6 +745,10 @@ export class CoreNode extends EventEmitter {
|
|
|
738
745
|
this.rtt = props.rtt;
|
|
739
746
|
|
|
740
747
|
this.updateScaleRotateTransform();
|
|
748
|
+
|
|
749
|
+
this.setUpdateType(
|
|
750
|
+
UpdateType.Local | UpdateType.RenderBounds | UpdateType.RenderState,
|
|
751
|
+
);
|
|
741
752
|
}
|
|
742
753
|
|
|
743
754
|
//#region Textures
|
|
@@ -838,7 +849,7 @@ export class CoreNode extends EventEmitter {
|
|
|
838
849
|
// If we're updating this node at all, we need to inform the parent
|
|
839
850
|
// (and all ancestors) that their children need updating as well
|
|
840
851
|
const parent = this.props.parent;
|
|
841
|
-
if (parent && !(parent.updateType & UpdateType.Children)) {
|
|
852
|
+
if (parent !== null && !(parent.updateType & UpdateType.Children)) {
|
|
842
853
|
parent.setUpdateType(UpdateType.Children);
|
|
843
854
|
}
|
|
844
855
|
// If node is part of RTT texture
|
|
@@ -948,7 +959,6 @@ export class CoreNode extends EventEmitter {
|
|
|
948
959
|
}
|
|
949
960
|
|
|
950
961
|
const parent = this.props.parent;
|
|
951
|
-
let childUpdateType = UpdateType.None;
|
|
952
962
|
|
|
953
963
|
if (this.updateType & UpdateType.ParentRenderTexture) {
|
|
954
964
|
let p = this.parent;
|
|
@@ -988,16 +998,41 @@ export class CoreNode extends EventEmitter {
|
|
|
988
998
|
|
|
989
999
|
this.calculateRenderCoords();
|
|
990
1000
|
this.updateBoundingRect();
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
1001
|
+
|
|
1002
|
+
this.setUpdateType(UpdateType.RenderState | UpdateType.Children);
|
|
1003
|
+
|
|
1004
|
+
if (this.clipping === true) {
|
|
1005
|
+
this.setUpdateType(UpdateType.Clipping);
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
this.childUpdateType |= UpdateType.Global;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
if (this.updateType & UpdateType.RenderBounds) {
|
|
1012
|
+
this.createRenderBounds();
|
|
1013
|
+
this.setUpdateType(UpdateType.RenderState);
|
|
1014
|
+
this.setUpdateType(UpdateType.Children);
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
if (this.updateType & UpdateType.RenderState) {
|
|
1018
|
+
this.updateRenderState();
|
|
1019
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
if (this.updateType & UpdateType.IsRenderable) {
|
|
1023
|
+
this.updateIsRenderable();
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
if (this.renderState === CoreNodeRenderState.OutOfBounds) {
|
|
1027
|
+
return;
|
|
995
1028
|
}
|
|
996
1029
|
|
|
997
1030
|
if (this.updateType & UpdateType.Clipping) {
|
|
998
1031
|
this.calculateClippingRect(parentClippingRect);
|
|
999
1032
|
this.setUpdateType(UpdateType.Children);
|
|
1000
|
-
|
|
1033
|
+
|
|
1034
|
+
this.childUpdateType |= UpdateType.Clipping;
|
|
1035
|
+
this.childUpdateType |= UpdateType.RenderBounds;
|
|
1001
1036
|
}
|
|
1002
1037
|
|
|
1003
1038
|
if (this.updateType & UpdateType.WorldAlpha) {
|
|
@@ -1011,7 +1046,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1011
1046
|
UpdateType.PremultipliedColors |
|
|
1012
1047
|
UpdateType.IsRenderable,
|
|
1013
1048
|
);
|
|
1014
|
-
childUpdateType |= UpdateType.WorldAlpha;
|
|
1049
|
+
this.childUpdateType |= UpdateType.WorldAlpha;
|
|
1015
1050
|
}
|
|
1016
1051
|
|
|
1017
1052
|
if (this.updateType & UpdateType.PremultipliedColors) {
|
|
@@ -1050,17 +1085,8 @@ export class CoreNode extends EventEmitter {
|
|
|
1050
1085
|
}
|
|
1051
1086
|
}
|
|
1052
1087
|
|
|
1053
|
-
if (this.updateType & UpdateType.RenderState) {
|
|
1054
|
-
this.updateRenderState(parentClippingRect);
|
|
1055
|
-
this.setUpdateType(UpdateType.IsRenderable);
|
|
1056
|
-
}
|
|
1057
|
-
|
|
1058
|
-
if (this.updateType & UpdateType.IsRenderable) {
|
|
1059
|
-
this.updateIsRenderable();
|
|
1060
|
-
}
|
|
1061
|
-
|
|
1062
1088
|
// No need to update zIndex if there is no parent
|
|
1063
|
-
if (parent && this.updateType & UpdateType.CalculatedZIndex) {
|
|
1089
|
+
if (parent !== null && this.updateType & UpdateType.CalculatedZIndex) {
|
|
1064
1090
|
this.calculateZIndex();
|
|
1065
1091
|
// Tell parent to re-sort children
|
|
1066
1092
|
parent.setUpdateType(UpdateType.ZIndexSortedChildren);
|
|
@@ -1068,18 +1094,23 @@ export class CoreNode extends EventEmitter {
|
|
|
1068
1094
|
|
|
1069
1095
|
if (
|
|
1070
1096
|
this.updateType & UpdateType.Children &&
|
|
1071
|
-
this.children.length &&
|
|
1072
|
-
|
|
1097
|
+
this.children.length > 0 &&
|
|
1098
|
+
this.rtt === false
|
|
1073
1099
|
) {
|
|
1074
|
-
this.children.
|
|
1075
|
-
|
|
1076
|
-
child
|
|
1077
|
-
|
|
1100
|
+
for (let i = 0; i < this.children.length; i++) {
|
|
1101
|
+
const child = this.children[i];
|
|
1102
|
+
if (child === undefined) {
|
|
1103
|
+
continue;
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
child.setUpdateType(this.childUpdateType);
|
|
1107
|
+
|
|
1078
1108
|
if (child.updateType === 0) {
|
|
1079
|
-
|
|
1109
|
+
continue;
|
|
1080
1110
|
}
|
|
1111
|
+
|
|
1081
1112
|
child.update(delta, this.clippingRect);
|
|
1082
|
-
}
|
|
1113
|
+
}
|
|
1083
1114
|
}
|
|
1084
1115
|
|
|
1085
1116
|
// Sorting children MUST happen after children have been updated so
|
|
@@ -1091,6 +1122,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1091
1122
|
|
|
1092
1123
|
// reset update type
|
|
1093
1124
|
this.updateType = 0;
|
|
1125
|
+
this.childUpdateType = 0;
|
|
1094
1126
|
}
|
|
1095
1127
|
|
|
1096
1128
|
//check if CoreNode is renderable based on props
|
|
@@ -1151,39 +1183,112 @@ export class CoreNode extends EventEmitter {
|
|
|
1151
1183
|
return false;
|
|
1152
1184
|
}
|
|
1153
1185
|
|
|
1154
|
-
checkRenderBounds(
|
|
1186
|
+
checkRenderBounds(): CoreNodeRenderState {
|
|
1155
1187
|
assertTruthy(this.renderBound);
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
this.strictBound = createBound(
|
|
1159
|
-
parentClippingRect.x,
|
|
1160
|
-
parentClippingRect.y,
|
|
1161
|
-
parentClippingRect.x + rectW,
|
|
1162
|
-
parentClippingRect.y + rectH,
|
|
1163
|
-
this.strictBound,
|
|
1164
|
-
);
|
|
1188
|
+
assertTruthy(this.strictBound);
|
|
1189
|
+
assertTruthy(this.preloadBound);
|
|
1165
1190
|
|
|
1166
1191
|
if (boundInsideBound(this.renderBound, this.strictBound)) {
|
|
1167
1192
|
return CoreNodeRenderState.InViewport;
|
|
1168
1193
|
}
|
|
1169
1194
|
|
|
1195
|
+
if (boundInsideBound(this.renderBound, this.preloadBound)) {
|
|
1196
|
+
return CoreNodeRenderState.InBounds;
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
// check if we're larger then our parent, we're definitely in the viewport
|
|
1200
|
+
if (boundLargeThanBound(this.renderBound, this.strictBound)) {
|
|
1201
|
+
return CoreNodeRenderState.InViewport;
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1204
|
+
// check if we dont have dimensions, take our parent's render state
|
|
1205
|
+
if (
|
|
1206
|
+
this.parent !== null &&
|
|
1207
|
+
(this.props.width === 0 || this.props.height === 0)
|
|
1208
|
+
) {
|
|
1209
|
+
return this.parent.renderState;
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
return CoreNodeRenderState.OutOfBounds;
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
createPreloadBounds(strictBound: Bound): Bound {
|
|
1170
1216
|
const renderM = this.stage.boundsMargin;
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1217
|
+
return createBound(
|
|
1218
|
+
strictBound.x1 - renderM[3],
|
|
1219
|
+
strictBound.y1 - renderM[0],
|
|
1220
|
+
strictBound.x2 + renderM[1],
|
|
1221
|
+
strictBound.y2 + renderM[2],
|
|
1176
1222
|
this.preloadBound,
|
|
1177
1223
|
);
|
|
1224
|
+
}
|
|
1178
1225
|
|
|
1179
|
-
|
|
1180
|
-
|
|
1226
|
+
updateBoundingRect() {
|
|
1227
|
+
const { renderCoords, globalTransform: transform } = this;
|
|
1228
|
+
assertTruthy(transform);
|
|
1229
|
+
assertTruthy(renderCoords);
|
|
1230
|
+
|
|
1231
|
+
const { tb, tc } = transform;
|
|
1232
|
+
const { x1, y1, x3, y3 } = renderCoords;
|
|
1233
|
+
if (tb === 0 || tc === 0) {
|
|
1234
|
+
this.renderBound = createBound(x1, y1, x3, y3, this.renderBound);
|
|
1235
|
+
} else {
|
|
1236
|
+
const { x2, x4, y2, y4 } = renderCoords;
|
|
1237
|
+
this.renderBound = createBound(
|
|
1238
|
+
Math.min(x1, x2, x3, x4),
|
|
1239
|
+
Math.min(y1, y2, y3, y4),
|
|
1240
|
+
Math.max(x1, x2, x3, x4),
|
|
1241
|
+
Math.max(y1, y2, y3, y4),
|
|
1242
|
+
this.renderBound,
|
|
1243
|
+
);
|
|
1181
1244
|
}
|
|
1182
|
-
return CoreNodeRenderState.OutOfBounds;
|
|
1183
1245
|
}
|
|
1184
1246
|
|
|
1185
|
-
|
|
1186
|
-
|
|
1247
|
+
createRenderBounds(): void {
|
|
1248
|
+
assertTruthy(this.stage);
|
|
1249
|
+
|
|
1250
|
+
// no clipping, use parent's bounds
|
|
1251
|
+
if (this.clipping === false) {
|
|
1252
|
+
if (this.parent !== null) {
|
|
1253
|
+
this.strictBound =
|
|
1254
|
+
this.parent.strictBound ??
|
|
1255
|
+
createBound(0, 0, this.stage.root.width, this.stage.root.height);
|
|
1256
|
+
|
|
1257
|
+
this.preloadBound =
|
|
1258
|
+
this.parent.preloadBound ??
|
|
1259
|
+
this.createPreloadBounds(this.strictBound);
|
|
1260
|
+
return;
|
|
1261
|
+
} else {
|
|
1262
|
+
this.strictBound = createBound(
|
|
1263
|
+
0,
|
|
1264
|
+
0,
|
|
1265
|
+
this.stage.root.width,
|
|
1266
|
+
this.stage.root.height,
|
|
1267
|
+
);
|
|
1268
|
+
|
|
1269
|
+
this.preloadBound = this.createPreloadBounds(this.strictBound);
|
|
1270
|
+
return;
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
// clipping is enabled create our own bounds
|
|
1275
|
+
const { x, y, width, height } = this.props;
|
|
1276
|
+
const { tx, ty } = this.globalTransform || {};
|
|
1277
|
+
const _x = tx ?? x;
|
|
1278
|
+
const _y = ty ?? y;
|
|
1279
|
+
this.strictBound = createBound(
|
|
1280
|
+
_x,
|
|
1281
|
+
_y,
|
|
1282
|
+
_x + width,
|
|
1283
|
+
_y + height,
|
|
1284
|
+
this.strictBound,
|
|
1285
|
+
);
|
|
1286
|
+
|
|
1287
|
+
this.preloadBound = this.createPreloadBounds(this.strictBound);
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
updateRenderState() {
|
|
1291
|
+
const renderState = this.checkRenderBounds();
|
|
1187
1292
|
|
|
1188
1293
|
if (renderState === this.renderState) {
|
|
1189
1294
|
return;
|
|
@@ -1265,26 +1370,6 @@ export class CoreNode extends EventEmitter {
|
|
|
1265
1370
|
}
|
|
1266
1371
|
}
|
|
1267
1372
|
|
|
1268
|
-
updateBoundingRect() {
|
|
1269
|
-
const { renderCoords, globalTransform: transform } = this;
|
|
1270
|
-
assertTruthy(transform);
|
|
1271
|
-
assertTruthy(renderCoords);
|
|
1272
|
-
|
|
1273
|
-
const { tb, tc } = transform;
|
|
1274
|
-
const { x1, y1, x3, y3 } = renderCoords;
|
|
1275
|
-
if (tb === 0 || tc === 0) {
|
|
1276
|
-
this.renderBound = createBound(x1, y1, x3, y3, this.renderBound);
|
|
1277
|
-
} else {
|
|
1278
|
-
const { x2, x4, y2, y4 } = renderCoords;
|
|
1279
|
-
this.renderBound = createBound(
|
|
1280
|
-
Math.min(x1, x2, x3, x4),
|
|
1281
|
-
Math.min(y1, y2, y3, y4),
|
|
1282
|
-
Math.max(x1, x2, x3, x4),
|
|
1283
|
-
Math.max(y1, y2, y3, y4),
|
|
1284
|
-
this.renderBound,
|
|
1285
|
-
);
|
|
1286
|
-
}
|
|
1287
|
-
}
|
|
1288
1373
|
/**
|
|
1289
1374
|
* This function calculates the clipping rectangle for a node.
|
|
1290
1375
|
*
|
|
@@ -1300,7 +1385,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1300
1385
|
|
|
1301
1386
|
const isRotated = gt.tb !== 0 || gt.tc !== 0;
|
|
1302
1387
|
|
|
1303
|
-
if (clipping &&
|
|
1388
|
+
if (clipping === true && isRotated === false) {
|
|
1304
1389
|
clippingRect.x = gt.tx;
|
|
1305
1390
|
clippingRect.y = gt.ty;
|
|
1306
1391
|
clippingRect.width = this.width * gt.ta;
|
|
@@ -1310,10 +1395,10 @@ export class CoreNode extends EventEmitter {
|
|
|
1310
1395
|
clippingRect.valid = false;
|
|
1311
1396
|
}
|
|
1312
1397
|
|
|
1313
|
-
if (parentClippingRect.valid && clippingRect.valid) {
|
|
1398
|
+
if (parentClippingRect.valid === true && clippingRect.valid === true) {
|
|
1314
1399
|
// Intersect parent clipping rect with node clipping rect
|
|
1315
1400
|
intersectRect(parentClippingRect, clippingRect, clippingRect);
|
|
1316
|
-
} else if (parentClippingRect.valid) {
|
|
1401
|
+
} else if (parentClippingRect.valid === true) {
|
|
1317
1402
|
// Copy parent clipping rect
|
|
1318
1403
|
copyRect(parentClippingRect, clippingRect);
|
|
1319
1404
|
clippingRect.valid = true;
|
|
@@ -1642,7 +1727,12 @@ export class CoreNode extends EventEmitter {
|
|
|
1642
1727
|
|
|
1643
1728
|
set alpha(value: number) {
|
|
1644
1729
|
this.props.alpha = value;
|
|
1645
|
-
this.setUpdateType(
|
|
1730
|
+
this.setUpdateType(
|
|
1731
|
+
UpdateType.PremultipliedColors |
|
|
1732
|
+
UpdateType.WorldAlpha |
|
|
1733
|
+
UpdateType.Children,
|
|
1734
|
+
);
|
|
1735
|
+
this.childUpdateType |= UpdateType.Global;
|
|
1646
1736
|
}
|
|
1647
1737
|
|
|
1648
1738
|
get autosize(): boolean {
|
|
@@ -1659,7 +1749,10 @@ export class CoreNode extends EventEmitter {
|
|
|
1659
1749
|
|
|
1660
1750
|
set clipping(value: boolean) {
|
|
1661
1751
|
this.props.clipping = value;
|
|
1662
|
-
this.setUpdateType(
|
|
1752
|
+
this.setUpdateType(
|
|
1753
|
+
UpdateType.Clipping | UpdateType.RenderBounds | UpdateType.Children,
|
|
1754
|
+
);
|
|
1755
|
+
this.childUpdateType |= UpdateType.Global | UpdateType.Clipping;
|
|
1663
1756
|
}
|
|
1664
1757
|
|
|
1665
1758
|
get color(): number {
|
|
@@ -1825,6 +1918,9 @@ export class CoreNode extends EventEmitter {
|
|
|
1825
1918
|
}
|
|
1826
1919
|
}
|
|
1827
1920
|
this.updateScaleRotateTransform();
|
|
1921
|
+
|
|
1922
|
+
// fetch render bounds from parent
|
|
1923
|
+
this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
1828
1924
|
}
|
|
1829
1925
|
|
|
1830
1926
|
get preventCleanup(): boolean {
|
package/src/core/Stage.ts
CHANGED
|
@@ -381,20 +381,20 @@ export class Stage {
|
|
|
381
381
|
}
|
|
382
382
|
|
|
383
383
|
addQuads(node: CoreNode) {
|
|
384
|
-
assertTruthy(this.renderer
|
|
384
|
+
assertTruthy(this.renderer);
|
|
385
385
|
|
|
386
|
-
if (node.isRenderable) {
|
|
386
|
+
if (node.isRenderable === true) {
|
|
387
387
|
node.renderQuads(this.renderer);
|
|
388
388
|
}
|
|
389
389
|
|
|
390
390
|
for (let i = 0; i < node.children.length; i++) {
|
|
391
391
|
const child = node.children[i];
|
|
392
392
|
|
|
393
|
-
if (
|
|
393
|
+
if (child === undefined) {
|
|
394
394
|
continue;
|
|
395
395
|
}
|
|
396
396
|
|
|
397
|
-
if (child
|
|
397
|
+
if (child.worldAlpha === 0) {
|
|
398
398
|
continue;
|
|
399
399
|
}
|
|
400
400
|
|
package/src/core/lib/utils.ts
CHANGED
|
@@ -244,6 +244,15 @@ export function boundInsideBound(bound1: Bound, bound2: Bound) {
|
|
|
244
244
|
);
|
|
245
245
|
}
|
|
246
246
|
|
|
247
|
+
export function boundLargeThanBound(bound1: Bound, bound2: Bound) {
|
|
248
|
+
return (
|
|
249
|
+
bound1.x1 < bound2.x1 &&
|
|
250
|
+
bound1.x2 > bound2.x2 &&
|
|
251
|
+
bound1.y1 < bound2.y1 &&
|
|
252
|
+
bound1.y2 > bound2.y2
|
|
253
|
+
);
|
|
254
|
+
}
|
|
255
|
+
|
|
247
256
|
export function isBoundPositive(bound: Bound): boolean {
|
|
248
257
|
return bound.x1 < bound.x2 && bound.y1 < bound.y2;
|
|
249
258
|
}
|
|
@@ -131,7 +131,10 @@ export class CanvasCoreTexture extends CoreContextTexture {
|
|
|
131
131
|
if (ctx) ctx.putImageData(data, 0, 0);
|
|
132
132
|
this.image = canvas;
|
|
133
133
|
return { width: data.width, height: data.height };
|
|
134
|
-
} else if (
|
|
134
|
+
} else if (
|
|
135
|
+
typeof ImageBitmap !== 'undefined' &&
|
|
136
|
+
data instanceof ImageBitmap
|
|
137
|
+
) {
|
|
135
138
|
this.image = data;
|
|
136
139
|
return { width: data.width, height: data.height };
|
|
137
140
|
}
|
|
@@ -134,7 +134,8 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
134
134
|
// If textureData is null, the texture is empty (0, 0) and we don't need to
|
|
135
135
|
// upload any data to the GPU.
|
|
136
136
|
if (
|
|
137
|
-
|
|
137
|
+
(typeof ImageBitmap !== 'undefined' &&
|
|
138
|
+
textureData.data instanceof ImageBitmap) ||
|
|
138
139
|
textureData.data instanceof ImageData ||
|
|
139
140
|
// not using typeof HTMLImageElement due to web worker
|
|
140
141
|
isHTMLImageElement(textureData.data)
|
|
@@ -254,13 +254,18 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
254
254
|
|
|
255
255
|
/**
|
|
256
256
|
* If the shader props contain any automatic properties, update it with the
|
|
257
|
-
* current dimensions that will be used to render the quad.
|
|
257
|
+
* current dimensions and or alpha that will be used to render the quad.
|
|
258
258
|
*/
|
|
259
|
-
if (shaderProps
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
259
|
+
if (shaderProps !== null) {
|
|
260
|
+
if (hasOwn(shaderProps, '$dimensions')) {
|
|
261
|
+
const dimensions = shaderProps.$dimensions as Dimensions;
|
|
262
|
+
dimensions.width = width;
|
|
263
|
+
dimensions.height = height;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
if (hasOwn(shaderProps, '$alpha')) {
|
|
267
|
+
shaderProps.$alpha = alpha;
|
|
268
|
+
}
|
|
264
269
|
}
|
|
265
270
|
|
|
266
271
|
texture = texture ?? this.defaultTexture;
|
|
@@ -172,6 +172,7 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
172
172
|
propsB: Required<DynamicShaderProps>,
|
|
173
173
|
): boolean {
|
|
174
174
|
if (
|
|
175
|
+
propsA.$alpha !== propsB.$alpha ||
|
|
175
176
|
propsA.$dimensions.width !== propsB.$dimensions.width ||
|
|
176
177
|
propsA.$dimensions.height !== propsB.$dimensions.height ||
|
|
177
178
|
propsA.effects.length !== propsB.effects.length
|
package/src/main-api/Renderer.ts
CHANGED
|
@@ -192,7 +192,7 @@ export interface RendererMainSettings {
|
|
|
192
192
|
* in the renderer and allow inspection of the state of the nodes.
|
|
193
193
|
*
|
|
194
194
|
*/
|
|
195
|
-
inspector
|
|
195
|
+
inspector?: typeof Inspector | false;
|
|
196
196
|
|
|
197
197
|
/**
|
|
198
198
|
* Renderer Engine
|
|
@@ -330,7 +330,7 @@ export class RendererMain extends EventEmitter {
|
|
|
330
330
|
numImageWorkers:
|
|
331
331
|
settings.numImageWorkers !== undefined ? settings.numImageWorkers : 2,
|
|
332
332
|
enableContextSpy: settings.enableContextSpy ?? false,
|
|
333
|
-
inspector: settings.inspector,
|
|
333
|
+
inspector: settings.inspector ?? false,
|
|
334
334
|
renderEngine: settings.renderEngine,
|
|
335
335
|
quadBufferSize: settings.quadBufferSize ?? 4 * 1024 * 1024,
|
|
336
336
|
fontEngines: settings.fontEngines,
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lightning 3 Renderer Core API
|
|
3
|
-
*
|
|
4
|
-
* @remarks
|
|
5
|
-
* ```
|
|
6
|
-
* import * from '@lightning/renderer/core';
|
|
7
|
-
* ```
|
|
8
|
-
*
|
|
9
|
-
* The Core API is used by developers to extend the capabilities of the Renderer
|
|
10
|
-
* by writing custom Shaders, Dynamic Shader Effects, Textures, Text Renderers,
|
|
11
|
-
* etc.
|
|
12
|
-
*
|
|
13
|
-
* Custom capabilities as well as fonts can be loaded via Core Extensions.
|
|
14
|
-
*
|
|
15
|
-
* A core extension module is structured like so:
|
|
16
|
-
* ```ts
|
|
17
|
-
* import {
|
|
18
|
-
* CoreExtension,
|
|
19
|
-
* WebTrFontFace,
|
|
20
|
-
* SdfTrFontFace,
|
|
21
|
-
* type Stage
|
|
22
|
-
* } from '@lightning/renderer/core';
|
|
23
|
-
*
|
|
24
|
-
* export default class MyCoreExtension extends CoreExtension {
|
|
25
|
-
* async run(stage: Stage) {
|
|
26
|
-
* stage.fontManager.addFontFace(
|
|
27
|
-
* new WebTrFontFace('Ubuntu', {}, '/fonts/Ubuntu-Regular.ttf'),
|
|
28
|
-
* );
|
|
29
|
-
*
|
|
30
|
-
* stage.fontManager.addFontFace(
|
|
31
|
-
* new SdfTrFontFace(
|
|
32
|
-
* 'Ubuntu',
|
|
33
|
-
* {},
|
|
34
|
-
* 'msdf',
|
|
35
|
-
* stage,
|
|
36
|
-
* '/fonts/Ubuntu-Regular.msdf.png',
|
|
37
|
-
* '/fonts/Ubuntu-Regular.msdf.json',
|
|
38
|
-
* ),
|
|
39
|
-
* );
|
|
40
|
-
* }
|
|
41
|
-
* }
|
|
42
|
-
* ```
|
|
43
|
-
*
|
|
44
|
-
* And then imported and registered in the application's entry point
|
|
45
|
-
* using the `@lightningjs/vite-plugin-import-chunk-url` plugin:
|
|
46
|
-
* ```ts
|
|
47
|
-
* import coreExtensionModuleUrl from './MyCoreExtension.js?importChunkUrl';
|
|
48
|
-
*
|
|
49
|
-
* // Set up driver, etc.
|
|
50
|
-
*
|
|
51
|
-
* // Initialize the Renderer
|
|
52
|
-
* const renderer = new RendererMain(
|
|
53
|
-
* {
|
|
54
|
-
* // Other Renderer Config...
|
|
55
|
-
* coreExtensionModule: coreExtensionModuleUrl,
|
|
56
|
-
* },
|
|
57
|
-
* 'app',
|
|
58
|
-
* driver,
|
|
59
|
-
* );
|
|
60
|
-
* ```
|
|
61
|
-
*
|
|
62
|
-
* @module
|
|
63
|
-
*/
|
|
64
|
-
export * from '../src/core/renderers/webgl/WebGlCoreShader.js';
|
|
65
|
-
export * from '../src/core/renderers/webgl/shaders/effects/ShaderEffect.js';
|
|
66
|
-
export * from '../src/core/textures/Texture.js';
|
|
67
|
-
export * from '../src/core/text-rendering/renderers/TextRenderer.js';
|
|
68
|
-
export * from '../src/core/text-rendering/renderers/CanvasTextRenderer.js';
|
|
69
|
-
export * from '../src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
|
|
70
|
-
export * from '../src/core/text-rendering/font-face-types/TrFontFace.js';
|
|
71
|
-
export * from '../src/core/text-rendering/font-face-types/WebTrFontFace.js';
|
|
72
|
-
export * from '../src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js';
|
|
73
|
-
export * from '../src/core/CoreExtension.js';
|
|
74
|
-
export type * from '../src/core/Stage.js';
|
package/dist/exports/core-api.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
-
* following copyright and licenses apply:
|
|
4
|
-
*
|
|
5
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
-
*
|
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
|
-
/**
|
|
20
|
-
* Lightning 3 Renderer Core API
|
|
21
|
-
*
|
|
22
|
-
* @remarks
|
|
23
|
-
* ```
|
|
24
|
-
* import * from '@lightning/renderer/core';
|
|
25
|
-
* ```
|
|
26
|
-
*
|
|
27
|
-
* The Core API is used by developers to extend the capabilities of the Renderer
|
|
28
|
-
* by writing custom Shaders, Dynamic Shader Effects, Textures, Text Renderers,
|
|
29
|
-
* etc.
|
|
30
|
-
*
|
|
31
|
-
* Custom capabilities as well as fonts can be loaded via Core Extensions.
|
|
32
|
-
*
|
|
33
|
-
* A core extension module is structured like so:
|
|
34
|
-
* ```ts
|
|
35
|
-
* import {
|
|
36
|
-
* CoreExtension,
|
|
37
|
-
* WebTrFontFace,
|
|
38
|
-
* SdfTrFontFace,
|
|
39
|
-
* type Stage
|
|
40
|
-
* } from '@lightning/renderer/core';
|
|
41
|
-
*
|
|
42
|
-
* export default class MyCoreExtension extends CoreExtension {
|
|
43
|
-
* async run(stage: Stage) {
|
|
44
|
-
* stage.fontManager.addFontFace(
|
|
45
|
-
* new WebTrFontFace('Ubuntu', {}, '/fonts/Ubuntu-Regular.ttf'),
|
|
46
|
-
* );
|
|
47
|
-
*
|
|
48
|
-
* stage.fontManager.addFontFace(
|
|
49
|
-
* new SdfTrFontFace(
|
|
50
|
-
* 'Ubuntu',
|
|
51
|
-
* {},
|
|
52
|
-
* 'msdf',
|
|
53
|
-
* stage,
|
|
54
|
-
* '/fonts/Ubuntu-Regular.msdf.png',
|
|
55
|
-
* '/fonts/Ubuntu-Regular.msdf.json',
|
|
56
|
-
* ),
|
|
57
|
-
* );
|
|
58
|
-
* }
|
|
59
|
-
* }
|
|
60
|
-
* ```
|
|
61
|
-
*
|
|
62
|
-
* And then imported and registered in the application's entry point
|
|
63
|
-
* using the `@lightningjs/vite-plugin-import-chunk-url` plugin:
|
|
64
|
-
* ```ts
|
|
65
|
-
* import coreExtensionModuleUrl from './MyCoreExtension.js?importChunkUrl';
|
|
66
|
-
*
|
|
67
|
-
* // Set up driver, etc.
|
|
68
|
-
*
|
|
69
|
-
* // Initialize the Renderer
|
|
70
|
-
* const renderer = new RendererMain(
|
|
71
|
-
* {
|
|
72
|
-
* // Other Renderer Config...
|
|
73
|
-
* coreExtensionModule: coreExtensionModuleUrl,
|
|
74
|
-
* },
|
|
75
|
-
* 'app',
|
|
76
|
-
* driver,
|
|
77
|
-
* );
|
|
78
|
-
* ```
|
|
79
|
-
*
|
|
80
|
-
* @module
|
|
81
|
-
*/
|
|
82
|
-
// Shaders
|
|
83
|
-
export * from '../src/core/renderers/webgl/WebGlCoreShader.js';
|
|
84
|
-
export * from '../src/core/renderers/webgl/shaders/effects/ShaderEffect.js';
|
|
85
|
-
// Textures
|
|
86
|
-
export * from '../src/core/textures/Texture.js';
|
|
87
|
-
// Text Rendering & Fonts
|
|
88
|
-
export * from '../src/core/text-rendering/renderers/TextRenderer.js';
|
|
89
|
-
export * from '../src/core/text-rendering/renderers/CanvasTextRenderer.js';
|
|
90
|
-
export * from '../src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
|
|
91
|
-
export * from '../src/core/text-rendering/font-face-types/TrFontFace.js';
|
|
92
|
-
export * from '../src/core/text-rendering/font-face-types/WebTrFontFace.js';
|
|
93
|
-
export * from '../src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js';
|
|
94
|
-
// Core Extensions
|
|
95
|
-
export * from '../src/core/CoreExtension.js';
|
|
96
|
-
//# sourceMappingURL=core-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-api.js","sourceRoot":"","sources":["../../exports/core-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH,UAAU;AACV,cAAc,gDAAgD,CAAC;AAC/D,cAAc,6DAA6D,CAAC;AAE5E,WAAW;AACX,cAAc,iCAAiC,CAAC;AAEhD,yBAAyB;AACzB,cAAc,sDAAsD,CAAC;AACrE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,yEAAyE,CAAC;AACxF,cAAc,0DAA0D,CAAC;AACzE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,2EAA2E,CAAC;AAE1F,kBAAkB;AAClB,cAAc,8BAA8B,CAAC"}
|