@solidtv/renderer 1.5.0 → 1.5.2
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/src/common/EventEmitter.d.ts +8 -0
- package/dist/src/common/EventEmitter.js +20 -0
- package/dist/src/common/EventEmitter.js.map +1 -1
- package/dist/src/core/Autosizer.js +3 -1
- package/dist/src/core/Autosizer.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +39 -0
- package/dist/src/core/CoreNode.js +115 -25
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextNode.js +11 -4
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/Stage.d.ts +6 -0
- package/dist/src/core/Stage.js +9 -0
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureMemoryManager.d.ts +39 -2
- package/dist/src/core/TextureMemoryManager.js +53 -1
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +5 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +5 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +28 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +70 -10
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +23 -0
- package/dist/src/main-api/Renderer.js +2 -0
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/common/EventEmitter.ts +21 -0
- package/src/core/Autosizer.ts +3 -1
- package/src/core/CoreNode.test.ts +425 -0
- package/src/core/CoreNode.ts +146 -26
- package/src/core/CoreTextNode.test.ts +62 -0
- package/src/core/CoreTextNode.ts +13 -4
- package/src/core/Stage.ts +9 -0
- package/src/core/TextureMemoryManager.test.ts +272 -5
- package/src/core/TextureMemoryManager.ts +59 -2
- package/src/core/renderers/canvas/CanvasRenderer.ts +7 -1
- package/src/core/renderers/webgl/WebGlRenderer.ts +6 -1
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +78 -15
- package/src/core/renderers/webgl/WebGlShaderProgram.uniformDedup.test.ts +233 -0
- package/src/main-api/Renderer.ts +26 -0
|
@@ -14,5 +14,13 @@ export declare class EventEmitter implements IEventEmitter {
|
|
|
14
14
|
off(event: string, listener?: (target: any, data: any) => void): void;
|
|
15
15
|
once(event: string, listener: (target: any, data: any) => void): void;
|
|
16
16
|
emit(event: string, data?: any): void;
|
|
17
|
+
/**
|
|
18
|
+
* Whether any listener is currently registered for any event.
|
|
19
|
+
*
|
|
20
|
+
* @remarks
|
|
21
|
+
* Used as a liveness signal: a `Texture` with no listeners has no
|
|
22
|
+
* `CoreNode` (or `SubTexture`) subscribed to it.
|
|
23
|
+
*/
|
|
24
|
+
hasListeners(): boolean;
|
|
17
25
|
removeAllListeners(): void;
|
|
18
26
|
}
|
|
@@ -59,6 +59,26 @@ export class EventEmitter {
|
|
|
59
59
|
listener(this, data);
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Whether any listener is currently registered for any event.
|
|
64
|
+
*
|
|
65
|
+
* @remarks
|
|
66
|
+
* Used as a liveness signal: a `Texture` with no listeners has no
|
|
67
|
+
* `CoreNode` (or `SubTexture`) subscribed to it.
|
|
68
|
+
*/
|
|
69
|
+
hasListeners() {
|
|
70
|
+
const map = this.eventListeners;
|
|
71
|
+
if (map === null) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
for (const event in map) {
|
|
75
|
+
const listeners = map[event];
|
|
76
|
+
if (listeners !== undefined && listeners.length > 0) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
62
82
|
removeAllListeners() {
|
|
63
83
|
this.eventListeners = null;
|
|
64
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../../../src/common/EventEmitter.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;OAKG;IACK,cAAc,GAAwC,IAAI,CAAC;IAEnE,EAAE,CAAC,KAAa,EAAE,QAA0C;QAC1D,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,SAAS,GAAG,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;QACzB,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,QAA2C;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAChC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,QAA0C;QAC5D,MAAM,YAAY,GAAG,CAAC,MAAW,EAAE,IAAS,EAAE,EAAE;YAC9C,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAC9B,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,IAAU;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAChC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAClC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../../../src/common/EventEmitter.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;OAKG;IACK,cAAc,GAAwC,IAAI,CAAC;IAEnE,EAAE,CAAC,KAAa,EAAE,QAA0C;QAC1D,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,SAAS,GAAG,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;QACzB,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,QAA2C;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAChC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,QAA0C;QAC5D,MAAM,YAAY,GAAG,CAAC,MAAW,EAAE,IAAS,EAAE,EAAE;YAC9C,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAC9B,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,IAAU;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAChC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAClC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,YAAY;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAChC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -13,7 +13,9 @@ export var AutosizeUpdateType;
|
|
|
13
13
|
const applyDimensions = (node, w, h) => {
|
|
14
14
|
node.props.w = w;
|
|
15
15
|
node.props.h = h;
|
|
16
|
-
|
|
16
|
+
// Direct props.w/h write bypasses the w/h setters, so raise RecalcUniforms
|
|
17
|
+
// here too — dimensions feed shader uniforms.
|
|
18
|
+
node.setUpdateType(UpdateType.Local | UpdateType.RecalcUniforms);
|
|
17
19
|
};
|
|
18
20
|
const getFilteredChildren = (children, childMap) => {
|
|
19
21
|
const filtered = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Autosizer.js","sourceRoot":"","sources":["../../../src/core/Autosizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,eAAe,CAAC;AAG1D,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,uDAAY,CAAA;IACZ,qDAAW,CAAA;AACb,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAED,MAAM,CAAN,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC5B,2DAAQ,CAAA;IACR,mEAAY,CAAA;IACZ,yDAAO,CAAA;AACT,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,QAI7B;AAED,MAAM,eAAe,GAAG,CAAC,IAAc,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE;IAC/D,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IACjB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IACjB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Autosizer.js","sourceRoot":"","sources":["../../../src/core/Autosizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -322,6 +322,23 @@ export interface CoreNodeProps {
|
|
|
322
322
|
* rendering.
|
|
323
323
|
*/
|
|
324
324
|
colorBl: number;
|
|
325
|
+
/**
|
|
326
|
+
* Placeholder color shown while the Node's texture is not yet loaded.
|
|
327
|
+
*
|
|
328
|
+
* @remarks
|
|
329
|
+
* When set to a non-zero color and the Node has a texture (e.g. {@link src}),
|
|
330
|
+
* the Node renders a solid rectangle of this color until the texture
|
|
331
|
+
* finishes loading, instead of rendering nothing. The placeholder renders
|
|
332
|
+
* through the Node's shader, so rounded corners and borders apply to it.
|
|
333
|
+
* It also shows again if the texture is freed under memory pressure (until
|
|
334
|
+
* the reload completes) and remains if the texture permanently fails.
|
|
335
|
+
*
|
|
336
|
+
* The color value is a number in the format 0xRRGGBBAA. Set to `0` to
|
|
337
|
+
* disable (default). Has no effect on Nodes without a texture.
|
|
338
|
+
*
|
|
339
|
+
* @default `0`
|
|
340
|
+
*/
|
|
341
|
+
placeholderColor: number;
|
|
325
342
|
/**
|
|
326
343
|
* The Node's parent Node.
|
|
327
344
|
*
|
|
@@ -704,6 +721,14 @@ export declare class CoreNode extends EventEmitter {
|
|
|
704
721
|
hasShaderTimeFn: boolean;
|
|
705
722
|
private hasColorProps;
|
|
706
723
|
textureLoaded: boolean;
|
|
724
|
+
/**
|
|
725
|
+
* True while this node should render its `placeholderColor` instead of its
|
|
726
|
+
* texture: `placeholderColor` is non-zero, a texture is set, and that
|
|
727
|
+
* texture is not loaded. Read by the renderers' quad path to substitute the
|
|
728
|
+
* stage's default (1x1 white) texture. Maintained by
|
|
729
|
+
* {@link updatePlaceholderActive} — never written elsewhere.
|
|
730
|
+
*/
|
|
731
|
+
placeholderActive: boolean;
|
|
707
732
|
updateType: UpdateType;
|
|
708
733
|
childUpdateType: UpdateType;
|
|
709
734
|
globalTransform?: Matrix3d;
|
|
@@ -767,6 +792,18 @@ export declare class CoreNode extends EventEmitter {
|
|
|
767
792
|
parentAutosizer: Autosizer | null;
|
|
768
793
|
destroyed: boolean;
|
|
769
794
|
constructor(stage: Stage, props: CoreNodeProps);
|
|
795
|
+
/**
|
|
796
|
+
* Recompute {@link placeholderActive} after any of its inputs changed
|
|
797
|
+
* (placeholderColor, texture, textureLoaded).
|
|
798
|
+
*
|
|
799
|
+
* @remarks
|
|
800
|
+
* On a toggle this raises `PremultipliedColors` (the quad's vertex colors
|
|
801
|
+
* switch between the placeholder color and the regular color props — this
|
|
802
|
+
* also marks the quad dirty) and `IsRenderable` (a loading texture with a
|
|
803
|
+
* placeholder is renderable). Both are processed in the same frame's update
|
|
804
|
+
* pass, before quads are submitted.
|
|
805
|
+
*/
|
|
806
|
+
private updatePlaceholderActive;
|
|
770
807
|
loadTexture(): void;
|
|
771
808
|
/**
|
|
772
809
|
* Task for queueMicrotask to loadTexture
|
|
@@ -895,6 +932,8 @@ export declare class CoreNode extends EventEmitter {
|
|
|
895
932
|
set clipping(value: boolean | [number, number, number, number]);
|
|
896
933
|
get color(): number;
|
|
897
934
|
set color(value: number);
|
|
935
|
+
get placeholderColor(): number;
|
|
936
|
+
set placeholderColor(value: number);
|
|
898
937
|
get colorTop(): number;
|
|
899
938
|
set colorTop(value: number);
|
|
900
939
|
get colorBottom(): number;
|
|
@@ -171,6 +171,14 @@ export class CoreNode extends EventEmitter {
|
|
|
171
171
|
hasShaderTimeFn = false;
|
|
172
172
|
hasColorProps = false;
|
|
173
173
|
textureLoaded = false;
|
|
174
|
+
/**
|
|
175
|
+
* True while this node should render its `placeholderColor` instead of its
|
|
176
|
+
* texture: `placeholderColor` is non-zero, a texture is set, and that
|
|
177
|
+
* texture is not loaded. Read by the renderers' quad path to substitute the
|
|
178
|
+
* stage's default (1x1 white) texture. Maintained by
|
|
179
|
+
* {@link updatePlaceholderActive} — never written elsewhere.
|
|
180
|
+
*/
|
|
181
|
+
placeholderActive = false;
|
|
174
182
|
updateType = UpdateType.All;
|
|
175
183
|
childUpdateType = UpdateType.None;
|
|
176
184
|
globalTransform;
|
|
@@ -314,6 +322,26 @@ export class CoreNode extends EventEmitter {
|
|
|
314
322
|
this.updateIsSimple();
|
|
315
323
|
}
|
|
316
324
|
//#region Textures
|
|
325
|
+
/**
|
|
326
|
+
* Recompute {@link placeholderActive} after any of its inputs changed
|
|
327
|
+
* (placeholderColor, texture, textureLoaded).
|
|
328
|
+
*
|
|
329
|
+
* @remarks
|
|
330
|
+
* On a toggle this raises `PremultipliedColors` (the quad's vertex colors
|
|
331
|
+
* switch between the placeholder color and the regular color props — this
|
|
332
|
+
* also marks the quad dirty) and `IsRenderable` (a loading texture with a
|
|
333
|
+
* placeholder is renderable). Both are processed in the same frame's update
|
|
334
|
+
* pass, before quads are submitted.
|
|
335
|
+
*/
|
|
336
|
+
updatePlaceholderActive() {
|
|
337
|
+
const active = this.props.placeholderColor !== 0 &&
|
|
338
|
+
this.props.texture !== null &&
|
|
339
|
+
this.textureLoaded === false;
|
|
340
|
+
if (active !== this.placeholderActive) {
|
|
341
|
+
this.placeholderActive = active;
|
|
342
|
+
this.setUpdateType(UpdateType.PremultipliedColors | UpdateType.IsRenderable);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
317
345
|
loadTexture() {
|
|
318
346
|
if (this.props.texture === null) {
|
|
319
347
|
return;
|
|
@@ -377,6 +405,7 @@ export class CoreNode extends EventEmitter {
|
|
|
377
405
|
this.autosizer.update();
|
|
378
406
|
}
|
|
379
407
|
this.textureLoaded = true;
|
|
408
|
+
this.updatePlaceholderActive();
|
|
380
409
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
381
410
|
// Texture was loaded. In case the RAF loop has already stopped, we request
|
|
382
411
|
// a render to ensure the texture is rendered.
|
|
@@ -403,9 +432,12 @@ export class CoreNode extends EventEmitter {
|
|
|
403
432
|
};
|
|
404
433
|
onTextureFailed = (_, error) => {
|
|
405
434
|
// immediately set isRenderable to false, so that we handle the error
|
|
406
|
-
// without waiting for the next frame loop
|
|
435
|
+
// without waiting for the next frame loop. With a placeholder set, the
|
|
436
|
+
// same frame's update pass recomputes this to true and renders the
|
|
437
|
+
// placeholder instead.
|
|
407
438
|
this.textureLoaded = false;
|
|
408
439
|
this.isRenderable = false;
|
|
440
|
+
this.updatePlaceholderActive();
|
|
409
441
|
this.updateTextureOwnership(false);
|
|
410
442
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
411
443
|
// If parent has a render texture, flag that we need to update
|
|
@@ -422,9 +454,12 @@ export class CoreNode extends EventEmitter {
|
|
|
422
454
|
};
|
|
423
455
|
onTextureFreed = () => {
|
|
424
456
|
// immediately set isRenderable to false, so that we handle the error
|
|
425
|
-
// without waiting for the next frame loop
|
|
457
|
+
// without waiting for the next frame loop. With a placeholder set, the
|
|
458
|
+
// same frame's update pass recomputes this to true and renders the
|
|
459
|
+
// placeholder while the texture reloads.
|
|
426
460
|
this.textureLoaded = false;
|
|
427
461
|
this.isRenderable = false;
|
|
462
|
+
this.updatePlaceholderActive();
|
|
428
463
|
this.updateTextureOwnership(false);
|
|
429
464
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
430
465
|
// If parent has a render texture, flag that we need to update
|
|
@@ -642,7 +677,13 @@ export class CoreNode extends EventEmitter {
|
|
|
642
677
|
}
|
|
643
678
|
this.calculateRenderCoords();
|
|
644
679
|
this.updateBoundingRect();
|
|
645
|
-
|
|
680
|
+
// RecalcUniforms is intentionally NOT set here: shader uniforms are a
|
|
681
|
+
// function of resolvedProps + w/h only (that is exactly the shader
|
|
682
|
+
// value-key cache key), so pure transform changes (translate, scale,
|
|
683
|
+
// rotate) cannot affect them. The flag is raised where w/h actually
|
|
684
|
+
// change: the w/h setters, Autosizer.applyDimensions, text layout
|
|
685
|
+
// application, and the shader setter itself.
|
|
686
|
+
updateType |= UpdateType.RenderState;
|
|
646
687
|
//only propagate children updates if not autosizing
|
|
647
688
|
if ((updateType & UpdateType.Autosize) === 0) {
|
|
648
689
|
updateType |= UpdateType.Children;
|
|
@@ -693,24 +734,37 @@ export class CoreNode extends EventEmitter {
|
|
|
693
734
|
}
|
|
694
735
|
if (updateType & UpdateType.PremultipliedColors) {
|
|
695
736
|
const alpha = this.worldAlpha;
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
this.premultipliedColorBl =
|
|
707
|
-
this.premultipliedColorBr =
|
|
708
|
-
merged;
|
|
737
|
+
if (this.placeholderActive === true) {
|
|
738
|
+
// Placeholder rendering: all four corners take the placeholder color.
|
|
739
|
+
// The quad samples the stage's default 1x1 white texture, so this is
|
|
740
|
+
// exactly the color-rect path.
|
|
741
|
+
const merged = premultiplyColorABGR(props.placeholderColor, alpha);
|
|
742
|
+
this.premultipliedColorTl =
|
|
743
|
+
this.premultipliedColorTr =
|
|
744
|
+
this.premultipliedColorBl =
|
|
745
|
+
this.premultipliedColorBr =
|
|
746
|
+
merged;
|
|
709
747
|
}
|
|
710
748
|
else {
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
749
|
+
const tl = props.colorTl;
|
|
750
|
+
const tr = props.colorTr;
|
|
751
|
+
const bl = props.colorBl;
|
|
752
|
+
const br = props.colorBr;
|
|
753
|
+
// Fast equality check (covers all 4 corners)
|
|
754
|
+
const same = tl === tr && tl === bl && tl === br;
|
|
755
|
+
const merged = premultiplyColorABGR(tl, alpha);
|
|
756
|
+
this.premultipliedColorTl = merged;
|
|
757
|
+
if (same === true) {
|
|
758
|
+
this.premultipliedColorTr =
|
|
759
|
+
this.premultipliedColorBl =
|
|
760
|
+
this.premultipliedColorBr =
|
|
761
|
+
merged;
|
|
762
|
+
}
|
|
763
|
+
else {
|
|
764
|
+
this.premultipliedColorTr = premultiplyColorABGR(tr, alpha);
|
|
765
|
+
this.premultipliedColorBl = premultiplyColorABGR(bl, alpha);
|
|
766
|
+
this.premultipliedColorBr = premultiplyColorABGR(br, alpha);
|
|
767
|
+
}
|
|
714
768
|
}
|
|
715
769
|
}
|
|
716
770
|
if (this.renderState === CoreNodeRenderState.OutOfBounds) {
|
|
@@ -947,14 +1001,19 @@ export class CoreNode extends EventEmitter {
|
|
|
947
1001
|
// preemptive check for failed textures this will mark the current node as non-renderable
|
|
948
1002
|
// and will prevent further checks until the texture is reloaded or retry is reset on the texture
|
|
949
1003
|
if (this.texture.retryCount > this.texture.maxRetryCount) {
|
|
950
|
-
// texture has failed to load, we cannot render
|
|
1004
|
+
// texture has failed to load, we cannot render the texture itself —
|
|
1005
|
+
// but a placeholder color still renders in its place
|
|
951
1006
|
this.updateTextureOwnership(false);
|
|
952
|
-
this.setRenderable(
|
|
1007
|
+
this.setRenderable(this.placeholderActive === true &&
|
|
1008
|
+
(this.stage.renderOnlyInViewport === false ||
|
|
1009
|
+
this.renderState === CoreNodeRenderState.InViewport));
|
|
953
1010
|
return;
|
|
954
1011
|
}
|
|
955
1012
|
needsTextureOwnership = true;
|
|
956
|
-
// Use cached boolean instead of string comparison
|
|
957
|
-
|
|
1013
|
+
// Use cached boolean instead of string comparison; a placeholder
|
|
1014
|
+
// renders while the texture is loading
|
|
1015
|
+
newIsRenderable =
|
|
1016
|
+
this.textureLoaded === true || this.placeholderActive === true;
|
|
958
1017
|
}
|
|
959
1018
|
else if (
|
|
960
1019
|
// check shader
|
|
@@ -965,6 +1024,14 @@ export class CoreNode extends EventEmitter {
|
|
|
965
1024
|
// This mean we have dimensions and a color set, so we can render a ColorTexture
|
|
966
1025
|
newIsRenderable = true;
|
|
967
1026
|
}
|
|
1027
|
+
// renderOnlyInViewport: nodes in the preload margin keep texture
|
|
1028
|
+
// ownership above (so loading proceeds) but stay out of the render list
|
|
1029
|
+
// until they actually intersect the viewport.
|
|
1030
|
+
if (newIsRenderable === true &&
|
|
1031
|
+
this.stage.renderOnlyInViewport === true &&
|
|
1032
|
+
this.renderState !== CoreNodeRenderState.InViewport) {
|
|
1033
|
+
newIsRenderable = false;
|
|
1034
|
+
}
|
|
968
1035
|
this.updateTextureOwnership(needsTextureOwnership);
|
|
969
1036
|
this.setRenderable(newIsRenderable);
|
|
970
1037
|
}
|
|
@@ -1184,6 +1251,9 @@ export class CoreNode extends EventEmitter {
|
|
|
1184
1251
|
renderer.addQuad(this);
|
|
1185
1252
|
}
|
|
1186
1253
|
get renderTexture() {
|
|
1254
|
+
if (this.placeholderActive === true) {
|
|
1255
|
+
return this.stage.defaultTexture;
|
|
1256
|
+
}
|
|
1187
1257
|
return this.props.texture || this.stage.defaultTexture;
|
|
1188
1258
|
}
|
|
1189
1259
|
get renderTextureCoords() {
|
|
@@ -1330,7 +1400,9 @@ export class CoreNode extends EventEmitter {
|
|
|
1330
1400
|
const props = this.props;
|
|
1331
1401
|
if (props.w !== value) {
|
|
1332
1402
|
props.w = value;
|
|
1333
|
-
|
|
1403
|
+
// Dimensions feed shader uniforms (e.g. factored corner radius), so a
|
|
1404
|
+
// resize must recompute them; see the Global-update branch in update().
|
|
1405
|
+
let updateType = UpdateType.Local | UpdateType.RecalcUniforms;
|
|
1334
1406
|
if (props.texture !== null &&
|
|
1335
1407
|
this.stage.calculateTextureCoord === true &&
|
|
1336
1408
|
props.textureOptions !== null) {
|
|
@@ -1351,7 +1423,9 @@ export class CoreNode extends EventEmitter {
|
|
|
1351
1423
|
const props = this.props;
|
|
1352
1424
|
if (props.h !== value) {
|
|
1353
1425
|
props.h = value;
|
|
1354
|
-
|
|
1426
|
+
// Dimensions feed shader uniforms (e.g. factored corner radius), so a
|
|
1427
|
+
// resize must recompute them; see the Global-update branch in update().
|
|
1428
|
+
let updateType = UpdateType.Local | UpdateType.RecalcUniforms;
|
|
1355
1429
|
if (props.texture !== null &&
|
|
1356
1430
|
this.stage.calculateTextureCoord === true &&
|
|
1357
1431
|
props.textureOptions !== null) {
|
|
@@ -1557,6 +1631,21 @@ export class CoreNode extends EventEmitter {
|
|
|
1557
1631
|
this.colorRight = value;
|
|
1558
1632
|
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1559
1633
|
}
|
|
1634
|
+
get placeholderColor() {
|
|
1635
|
+
return this.props.placeholderColor;
|
|
1636
|
+
}
|
|
1637
|
+
set placeholderColor(value) {
|
|
1638
|
+
const p = this.props;
|
|
1639
|
+
if (p.placeholderColor === value)
|
|
1640
|
+
return;
|
|
1641
|
+
p.placeholderColor = value;
|
|
1642
|
+
this.updatePlaceholderActive();
|
|
1643
|
+
// If the placeholder is (still) showing, the new color must reach the
|
|
1644
|
+
// quad buffer even though the active state did not toggle.
|
|
1645
|
+
if (this.placeholderActive === true) {
|
|
1646
|
+
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1647
|
+
}
|
|
1648
|
+
}
|
|
1560
1649
|
get colorTop() {
|
|
1561
1650
|
return this.props.colorTop;
|
|
1562
1651
|
}
|
|
@@ -1896,6 +1985,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1896
1985
|
this.textureCoords = undefined;
|
|
1897
1986
|
this.props.texture = value;
|
|
1898
1987
|
this.textureLoaded = value !== null && value.state === 'loaded';
|
|
1988
|
+
this.updatePlaceholderActive();
|
|
1899
1989
|
if (value !== null) {
|
|
1900
1990
|
if (this.autosizer !== null) {
|
|
1901
1991
|
this.autosizer.setMode(AutosizeMode.Texture); // Set to texture size mode
|