@lightningjs/renderer 0.8.3 → 0.9.0
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/core/CoreNode.d.ts +27 -1
- package/dist/src/core/CoreNode.js +130 -5
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.js +3 -2
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.js +20 -1
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +2 -0
- package/dist/src/core/CoreTextureManager.js +2 -0
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.js +25 -9
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureMemoryManager.d.ts +1 -0
- package/dist/src/core/TextureMemoryManager.js +3 -1
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.d.ts +2 -1
- package/dist/src/core/lib/ImageWorker.js +10 -6
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/Matrix3d.d.ts +38 -24
- package/dist/src/core/lib/Matrix3d.js +143 -166
- package/dist/src/core/lib/Matrix3d.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +26 -1
- package/dist/src/core/lib/WebGlContextWrapper.js +37 -1
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +11 -0
- package/dist/src/core/renderers/CoreRenderer.js +1 -0
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +10 -4
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +18 -7
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -2
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +8 -6
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +1 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +1 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +4 -4
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +1 -1
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +2 -2
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +11 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +51 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +11 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +22 -11
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +4 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +7 -2
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +16 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +119 -27
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +19 -4
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +4 -6
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +6 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
- package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
- package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
- package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +19 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +61 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +8 -2
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +24 -3
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +2 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +72 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +11 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +5 -2
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +4 -3
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +8 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +42 -16
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +7 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +42 -11
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +6 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +27 -9
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +2 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +32 -5
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +2 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +2 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +10 -5
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +6 -5
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.d.ts +28 -0
- package/dist/src/core/textures/RenderTexture.js +52 -0
- package/dist/src/core/textures/RenderTexture.js.map +1 -0
- package/dist/src/core/utils.d.ts +6 -1
- package/dist/src/core/utils.js +74 -82
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/INode.d.ts +9 -0
- package/dist/src/main-api/RendererMain.js +4 -3
- package/dist/src/main-api/RendererMain.js.map +1 -1
- package/dist/src/render-drivers/main/MainOnlyNode.d.ts +3 -0
- package/dist/src/render-drivers/main/MainOnlyNode.js +29 -0
- package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -1
- package/dist/src/render-drivers/main/MainOnlyTextNode.js +2 -3
- package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/NodeStruct.d.ts +3 -0
- package/dist/src/render-drivers/threadx/NodeStruct.js +9 -0
- package/dist/src/render-drivers/threadx/NodeStruct.js.map +1 -1
- package/dist/src/render-drivers/threadx/SharedNode.d.ts +1 -0
- package/dist/src/render-drivers/threadx/SharedNode.js +1 -0
- package/dist/src/render-drivers/threadx/SharedNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.js +3 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +1 -1
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +2 -0
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -1
- package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +3 -0
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js +7 -0
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +1 -0
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +1 -0
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/worker/renderer.js +1 -0
- package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/core/CoreNode.ts +164 -8
- package/src/core/CoreShaderManager.ts +6 -3
- package/src/core/CoreTextNode.ts +25 -0
- package/src/core/CoreTextureManager.ts +3 -0
- package/src/core/Stage.ts +32 -11
- package/src/core/TextureMemoryManager.ts +3 -1
- package/src/core/lib/ImageWorker.ts +12 -7
- package/src/core/lib/Matrix3d.ts +144 -190
- package/src/core/lib/WebGlContextWrapper.ts +51 -1
- package/src/core/renderers/CoreRenderer.ts +15 -1
- package/src/core/renderers/canvas/CanvasCoreRenderer.ts +59 -14
- package/src/core/renderers/canvas/CanvasCoreTexture.ts +24 -18
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +6 -3
- package/src/core/renderers/canvas/internal/ColorUtils.ts +6 -6
- package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +2 -3
- package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +79 -0
- package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +26 -24
- package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +4 -2
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +166 -33
- package/src/core/renderers/webgl/WebGlCoreShader.ts +29 -4
- package/src/core/renderers/webgl/shaders/DefaultShader.ts +4 -6
- package/src/core/renderers/webgl/shaders/SdfShader.ts +6 -1
- package/src/core/text-rendering/TextRenderingUtils.ts +36 -0
- package/src/core/text-rendering/TextTextureRendererUtils.ts +74 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +41 -12
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +2 -0
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +86 -1
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +13 -7
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +52 -20
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +59 -13
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +36 -8
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +38 -5
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +5 -2
- package/src/core/text-rendering/renderers/TextRenderer.ts +17 -10
- package/src/core/textures/RenderTexture.ts +81 -0
- package/src/core/utils.ts +101 -93
- package/src/main-api/INode.ts +11 -0
- package/src/main-api/RendererMain.ts +4 -3
- package/src/render-drivers/main/MainOnlyNode.ts +44 -0
- package/src/render-drivers/main/MainOnlyTextNode.ts +2 -3
- package/src/render-drivers/threadx/NodeStruct.ts +10 -0
- package/src/render-drivers/threadx/SharedNode.ts +2 -0
- package/src/render-drivers/threadx/TextNodeStruct.ts +3 -1
- package/src/render-drivers/threadx/ThreadXCoreDriver.ts +2 -0
- package/src/render-drivers/threadx/ThreadXMainNode.ts +9 -0
- package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +1 -0
- package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +1 -0
- package/src/render-drivers/threadx/worker/renderer.ts +1 -0
|
@@ -75,6 +75,7 @@ export class WebGlContextWrapper {
|
|
|
75
75
|
public readonly RGBA;
|
|
76
76
|
public readonly UNSIGNED_BYTE;
|
|
77
77
|
public readonly UNPACK_PREMULTIPLY_ALPHA_WEBGL;
|
|
78
|
+
public readonly UNPACK_FLIP_Y_WEBGL;
|
|
78
79
|
public readonly FLOAT;
|
|
79
80
|
public readonly TRIANGLES;
|
|
80
81
|
public readonly UNSIGNED_SHORT;
|
|
@@ -86,6 +87,7 @@ export class WebGlContextWrapper {
|
|
|
86
87
|
public readonly COMPILE_STATUS;
|
|
87
88
|
public readonly LINK_STATUS;
|
|
88
89
|
public readonly DYNAMIC_DRAW;
|
|
90
|
+
public readonly COLOR_ATTACHMENT0;
|
|
89
91
|
//#endregion WebGL Enums
|
|
90
92
|
|
|
91
93
|
constructor(private gl: WebGLRenderingContext | WebGL2RenderingContext) {
|
|
@@ -161,6 +163,7 @@ export class WebGlContextWrapper {
|
|
|
161
163
|
this.RGBA = gl.RGBA;
|
|
162
164
|
this.UNSIGNED_BYTE = gl.UNSIGNED_BYTE;
|
|
163
165
|
this.UNPACK_PREMULTIPLY_ALPHA_WEBGL = gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL;
|
|
166
|
+
this.UNPACK_FLIP_Y_WEBGL = gl.UNPACK_FLIP_Y_WEBGL;
|
|
164
167
|
this.FLOAT = gl.FLOAT;
|
|
165
168
|
this.TRIANGLES = gl.TRIANGLES;
|
|
166
169
|
this.UNSIGNED_SHORT = gl.UNSIGNED_SHORT;
|
|
@@ -175,6 +178,7 @@ export class WebGlContextWrapper {
|
|
|
175
178
|
this.COMPILE_STATUS = gl.COMPILE_STATUS;
|
|
176
179
|
this.LINK_STATUS = gl.LINK_STATUS;
|
|
177
180
|
this.DYNAMIC_DRAW = gl.DYNAMIC_DRAW;
|
|
181
|
+
this.COLOR_ATTACHMENT0 = gl.COLOR_ATTACHMENT0;
|
|
178
182
|
}
|
|
179
183
|
/**
|
|
180
184
|
* Returns true if the WebGL context is WebGL2
|
|
@@ -533,7 +537,7 @@ export class WebGlContextWrapper {
|
|
|
533
537
|
|
|
534
538
|
/**
|
|
535
539
|
* ```
|
|
536
|
-
* createBuffer();
|
|
540
|
+
* gl.createBuffer();
|
|
537
541
|
* ```
|
|
538
542
|
*
|
|
539
543
|
* @returns
|
|
@@ -543,6 +547,52 @@ export class WebGlContextWrapper {
|
|
|
543
547
|
return gl.createBuffer();
|
|
544
548
|
}
|
|
545
549
|
|
|
550
|
+
/**
|
|
551
|
+
* ```
|
|
552
|
+
* gl.createFramebuffer();
|
|
553
|
+
* ```
|
|
554
|
+
* @returns
|
|
555
|
+
*/
|
|
556
|
+
createFramebuffer() {
|
|
557
|
+
const { gl } = this;
|
|
558
|
+
return gl.createFramebuffer();
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* ```
|
|
563
|
+
* gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
|
|
564
|
+
* ```
|
|
565
|
+
*
|
|
566
|
+
* @param framebuffer
|
|
567
|
+
*/
|
|
568
|
+
bindFramebuffer(framebuffer: WebGLFramebuffer | null) {
|
|
569
|
+
const { gl } = this;
|
|
570
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* ```
|
|
575
|
+
* gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
|
|
576
|
+
* ```
|
|
577
|
+
* @remarks
|
|
578
|
+
* **WebGL Difference**: Bind target is always `gl.FRAMEBUFFER` and textarget is always `gl.TEXTURE_2D`
|
|
579
|
+
*/
|
|
580
|
+
|
|
581
|
+
framebufferTexture2D(
|
|
582
|
+
attachment: GLenum,
|
|
583
|
+
texture: WebGLTexture | null,
|
|
584
|
+
level: GLint,
|
|
585
|
+
) {
|
|
586
|
+
const { gl } = this;
|
|
587
|
+
gl.framebufferTexture2D(
|
|
588
|
+
gl.FRAMEBUFFER,
|
|
589
|
+
attachment,
|
|
590
|
+
gl.TEXTURE_2D,
|
|
591
|
+
texture,
|
|
592
|
+
level,
|
|
593
|
+
);
|
|
594
|
+
}
|
|
595
|
+
|
|
546
596
|
/**
|
|
547
597
|
* ```
|
|
548
598
|
* gl.clear(gl.COLOR_BUFFER_BIT);
|
|
@@ -17,8 +17,13 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
+
import type { Dimensions } from '../../common/CommonTypes.js';
|
|
21
|
+
import type { CoreNode } from '../CoreNode.js';
|
|
20
22
|
import type { CoreShaderManager } from '../CoreShaderManager.js';
|
|
21
|
-
import type {
|
|
23
|
+
import type {
|
|
24
|
+
CoreTextureManager,
|
|
25
|
+
TextureOptions,
|
|
26
|
+
} from '../CoreTextureManager.js';
|
|
22
27
|
import type { Stage } from '../Stage.js';
|
|
23
28
|
import type { TextureMemoryManager } from '../TextureMemoryManager.js';
|
|
24
29
|
import type { ContextSpy } from '../lib/ContextSpy.js';
|
|
@@ -48,6 +53,9 @@ export interface QuadOptions {
|
|
|
48
53
|
tb: number;
|
|
49
54
|
tc: number;
|
|
50
55
|
td: number;
|
|
56
|
+
rtt?: boolean;
|
|
57
|
+
parentHasRenderTexture?: boolean;
|
|
58
|
+
framebufferDimensions?: Dimensions;
|
|
51
59
|
}
|
|
52
60
|
|
|
53
61
|
export interface CoreRendererOptions {
|
|
@@ -72,6 +80,7 @@ export abstract class CoreRenderer {
|
|
|
72
80
|
txManager: CoreTextureManager;
|
|
73
81
|
txMemManager: TextureMemoryManager;
|
|
74
82
|
shManager: CoreShaderManager;
|
|
83
|
+
rttNodes: CoreNode[] = [];
|
|
75
84
|
|
|
76
85
|
constructor(options: CoreRendererOptions) {
|
|
77
86
|
this.options = options;
|
|
@@ -86,4 +95,9 @@ export abstract class CoreRenderer {
|
|
|
86
95
|
abstract addQuad(quad: QuadOptions): void;
|
|
87
96
|
abstract createCtxTexture(textureSource: Texture): CoreContextTexture;
|
|
88
97
|
abstract getShaderManager(): CoreShaderManager;
|
|
98
|
+
abstract get renderToTextureActive(): boolean;
|
|
99
|
+
abstract get activeRttNode(): CoreNode | null;
|
|
100
|
+
abstract renderRTTNodes(): void;
|
|
101
|
+
abstract removeRTTNode(node: CoreNode): void;
|
|
102
|
+
abstract renderToTexture(node: CoreNode): void;
|
|
89
103
|
}
|
|
@@ -17,23 +17,32 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
import type {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import
|
|
24
|
-
import type {
|
|
25
|
-
import
|
|
26
|
-
import {
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
import type { CoreNode } from '../../CoreNode.js';
|
|
21
|
+
import type { CoreShaderManager } from '../../CoreShaderManager.js';
|
|
22
|
+
import { getRgbaComponents, type RGBA } from '../../lib/utils.js';
|
|
23
|
+
import { SubTexture } from '../../textures/SubTexture.js';
|
|
24
|
+
import type { Texture } from '../../textures/Texture.js';
|
|
25
|
+
import type { CoreContextTexture } from '../CoreContextTexture.js';
|
|
26
|
+
import {
|
|
27
|
+
CoreRenderer,
|
|
28
|
+
type CoreRendererOptions,
|
|
29
|
+
type QuadOptions,
|
|
30
|
+
} from '../CoreRenderer.js';
|
|
31
|
+
import { CanvasCoreTexture } from './CanvasCoreTexture.js';
|
|
32
|
+
import { getRadius } from './internal/C2DShaderUtils.js';
|
|
33
|
+
import {
|
|
34
|
+
formatRgba,
|
|
35
|
+
parseColor,
|
|
36
|
+
type IParsedColor,
|
|
37
|
+
} from './internal/ColorUtils.js';
|
|
29
38
|
|
|
30
39
|
export class CanvasCoreRenderer extends CoreRenderer {
|
|
31
|
-
|
|
32
40
|
private context: CanvasRenderingContext2D;
|
|
33
41
|
private canvas: HTMLCanvasElement;
|
|
34
42
|
private pixelRatio: number;
|
|
35
43
|
private clearColor: RGBA | undefined;
|
|
36
|
-
|
|
44
|
+
public renderToTextureActive = false;
|
|
45
|
+
activeRttNode: CoreNode | null = null;
|
|
37
46
|
constructor(options: CoreRendererOptions) {
|
|
38
47
|
super(options);
|
|
39
48
|
|
|
@@ -69,11 +78,25 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
69
78
|
addQuad(quad: QuadOptions): void {
|
|
70
79
|
const ctx = this.context;
|
|
71
80
|
const {
|
|
72
|
-
tx,
|
|
81
|
+
tx,
|
|
82
|
+
ty,
|
|
83
|
+
width,
|
|
84
|
+
height,
|
|
85
|
+
alpha,
|
|
86
|
+
colorTl,
|
|
87
|
+
colorTr,
|
|
88
|
+
colorBr,
|
|
89
|
+
ta,
|
|
90
|
+
tb,
|
|
91
|
+
tc,
|
|
92
|
+
td,
|
|
93
|
+
clippingRect,
|
|
73
94
|
} = quad;
|
|
74
95
|
let texture = quad.texture;
|
|
75
96
|
let ctxTexture: CanvasCoreTexture | undefined = undefined;
|
|
76
|
-
let frame:
|
|
97
|
+
let frame:
|
|
98
|
+
| { x: number; y: number; width: number; height: number }
|
|
99
|
+
| undefined;
|
|
77
100
|
|
|
78
101
|
if (texture) {
|
|
79
102
|
if (texture instanceof SubTexture) {
|
|
@@ -133,7 +156,17 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
133
156
|
const image = ctxTexture.getImage(color);
|
|
134
157
|
ctx.globalAlpha = alpha;
|
|
135
158
|
if (frame) {
|
|
136
|
-
ctx.drawImage(
|
|
159
|
+
ctx.drawImage(
|
|
160
|
+
image,
|
|
161
|
+
frame.x,
|
|
162
|
+
frame.y,
|
|
163
|
+
frame.width,
|
|
164
|
+
frame.height,
|
|
165
|
+
tx,
|
|
166
|
+
ty,
|
|
167
|
+
width,
|
|
168
|
+
height,
|
|
169
|
+
);
|
|
137
170
|
} else {
|
|
138
171
|
ctx.drawImage(image, tx, ty, width, height);
|
|
139
172
|
}
|
|
@@ -175,4 +208,16 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
175
208
|
getShaderManager(): CoreShaderManager {
|
|
176
209
|
return this.shManager;
|
|
177
210
|
}
|
|
211
|
+
|
|
212
|
+
renderRTTNodes(): void {
|
|
213
|
+
// noop
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
removeRTTNode(node: CoreNode): void {
|
|
217
|
+
// noop
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
renderToTexture(node: CoreNode): void {
|
|
221
|
+
// noop
|
|
222
|
+
}
|
|
178
223
|
}
|
|
@@ -17,30 +17,33 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
import type { Dimensions } from
|
|
21
|
-
import { assertTruthy } from
|
|
22
|
-
import { CoreContextTexture } from
|
|
23
|
-
import { formatRgba, type IParsedColor } from
|
|
20
|
+
import type { Dimensions } from '../../../common/CommonTypes.js';
|
|
21
|
+
import { assertTruthy } from '../../../utils.js';
|
|
22
|
+
import { CoreContextTexture } from '../CoreContextTexture.js';
|
|
23
|
+
import { formatRgba, type IParsedColor } from './internal/ColorUtils.js';
|
|
24
24
|
|
|
25
25
|
export class CanvasCoreTexture extends CoreContextTexture {
|
|
26
|
-
|
|
27
26
|
protected image: ImageBitmap | HTMLCanvasElement | undefined;
|
|
28
|
-
protected tintCache:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
protected tintCache:
|
|
28
|
+
| {
|
|
29
|
+
key: string;
|
|
30
|
+
image: HTMLCanvasElement;
|
|
31
|
+
}
|
|
32
|
+
| undefined;
|
|
32
33
|
|
|
33
34
|
load(): void {
|
|
34
35
|
if (this.textureSource.state !== 'freed') {
|
|
35
36
|
return;
|
|
36
37
|
}
|
|
37
38
|
this.textureSource.setState('loading');
|
|
38
|
-
this.onLoadRequest()
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
this.onLoadRequest()
|
|
40
|
+
.then((size) => {
|
|
41
|
+
this.textureSource.setState('loaded', size);
|
|
42
|
+
this.updateMemSize();
|
|
43
|
+
})
|
|
44
|
+
.catch((err) => {
|
|
45
|
+
this.textureSource.setState('failed', err as Error);
|
|
46
|
+
});
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
free(): void {
|
|
@@ -84,13 +87,16 @@ export class CanvasCoreTexture extends CoreContextTexture {
|
|
|
84
87
|
const tintedImage = this.tintTexture(image, key);
|
|
85
88
|
this.tintCache = {
|
|
86
89
|
key,
|
|
87
|
-
image: tintedImage
|
|
88
|
-
}
|
|
90
|
+
image: tintedImage,
|
|
91
|
+
};
|
|
89
92
|
this.updateMemSize();
|
|
90
93
|
return tintedImage;
|
|
91
94
|
}
|
|
92
95
|
|
|
93
|
-
protected tintTexture(
|
|
96
|
+
protected tintTexture(
|
|
97
|
+
source: ImageBitmap | HTMLCanvasElement,
|
|
98
|
+
color: string,
|
|
99
|
+
) {
|
|
94
100
|
const { width, height } = source;
|
|
95
101
|
const canvas = document.createElement('canvas');
|
|
96
102
|
canvas.width = width;
|
|
@@ -17,8 +17,11 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
import type { QuadOptions } from
|
|
21
|
-
import {
|
|
20
|
+
import type { QuadOptions } from '../../CoreRenderer.js';
|
|
21
|
+
import {
|
|
22
|
+
ROUNDED_RECTANGLE_SHADER_TYPE,
|
|
23
|
+
UnsupportedShader,
|
|
24
|
+
} from '../shaders/UnsupportedShader.js';
|
|
22
25
|
|
|
23
26
|
/**
|
|
24
27
|
* Extract `RoundedRectangle` shader radius to apply as a clipping
|
|
@@ -27,7 +30,7 @@ export function getRadius(quad: QuadOptions): number {
|
|
|
27
30
|
if (quad.shader instanceof UnsupportedShader) {
|
|
28
31
|
const shType = quad.shader.shType;
|
|
29
32
|
if (shType === ROUNDED_RECTANGLE_SHADER_TYPE) {
|
|
30
|
-
return quad.shaderProps?.radius as number ?? 0;
|
|
33
|
+
return (quad.shaderProps?.radius as number) ?? 0;
|
|
31
34
|
}
|
|
32
35
|
}
|
|
33
36
|
return 0;
|
|
@@ -30,8 +30,8 @@ const WHITE: IParsedColor = {
|
|
|
30
30
|
a: 1,
|
|
31
31
|
r: 0xff,
|
|
32
32
|
g: 0xff,
|
|
33
|
-
b: 0xff
|
|
34
|
-
}
|
|
33
|
+
b: 0xff,
|
|
34
|
+
};
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* Extract color components
|
|
@@ -41,10 +41,10 @@ export function parseColor(abgr: number): IParsedColor {
|
|
|
41
41
|
return WHITE;
|
|
42
42
|
}
|
|
43
43
|
const a = ((abgr >>> 24) & 0xff) / 255;
|
|
44
|
-
const b = (
|
|
45
|
-
const g = (
|
|
46
|
-
const r =
|
|
47
|
-
return { isWhite: false, a, r, g, b }
|
|
44
|
+
const b = (abgr >>> 16) & 0xff & 0xff;
|
|
45
|
+
const g = (abgr >>> 8) & 0xff & 0xff;
|
|
46
|
+
const r = abgr & 0xff & 0xff;
|
|
47
|
+
return { isWhite: false, a, r, g, b };
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
/**
|
|
@@ -17,12 +17,11 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
import { CoreShader } from
|
|
20
|
+
import { CoreShader } from '../../CoreShader.js';
|
|
21
21
|
|
|
22
|
-
export const ROUNDED_RECTANGLE_SHADER_TYPE =
|
|
22
|
+
export const ROUNDED_RECTANGLE_SHADER_TYPE = 'RoundedRectangle';
|
|
23
23
|
|
|
24
24
|
export class UnsupportedShader extends CoreShader {
|
|
25
|
-
|
|
26
25
|
public shType: string;
|
|
27
26
|
|
|
28
27
|
constructor(shType: string) {
|
|
@@ -0,0 +1,79 @@
|
|
|
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 2024 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
|
+
import type { Dimensions } from '../../../common/CommonTypes.js';
|
|
21
|
+
import { assertTruthy } from '../../../utils.js';
|
|
22
|
+
import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
|
|
23
|
+
import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
|
|
24
|
+
import type { RenderTexture } from '../../textures/RenderTexture.js';
|
|
25
|
+
import { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
|
|
26
|
+
|
|
27
|
+
export class WebGlCoreCtxRenderTexture extends WebGlCoreCtxTexture {
|
|
28
|
+
declare textureSource: RenderTexture;
|
|
29
|
+
|
|
30
|
+
readonly framebuffer: WebGLFramebuffer;
|
|
31
|
+
|
|
32
|
+
constructor(
|
|
33
|
+
glw: WebGlContextWrapper,
|
|
34
|
+
memManager: TextureMemoryManager,
|
|
35
|
+
textureSource: RenderTexture,
|
|
36
|
+
) {
|
|
37
|
+
super(glw, memManager, textureSource);
|
|
38
|
+
// Create Framebuffer object
|
|
39
|
+
const framebuffer = glw.createFramebuffer();
|
|
40
|
+
assertTruthy(framebuffer, 'Unable to create framebuffer');
|
|
41
|
+
this.framebuffer = framebuffer;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
override async onLoadRequest(): Promise<Dimensions> {
|
|
45
|
+
const { glw, memManager } = this;
|
|
46
|
+
const nativeTexture = (this._nativeCtxTexture =
|
|
47
|
+
this.createNativeCtxTexture());
|
|
48
|
+
const { width, height } = this.textureSource;
|
|
49
|
+
|
|
50
|
+
// Set the dimensions of the render texture
|
|
51
|
+
glw.texImage2D(
|
|
52
|
+
0,
|
|
53
|
+
glw.RGBA,
|
|
54
|
+
width,
|
|
55
|
+
height,
|
|
56
|
+
0,
|
|
57
|
+
glw.RGBA,
|
|
58
|
+
glw.UNSIGNED_BYTE,
|
|
59
|
+
null,
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
// Update the texture memory manager
|
|
63
|
+
memManager.setTextureMemUse(this, width * height * 4);
|
|
64
|
+
|
|
65
|
+
// Bind the framebuffer
|
|
66
|
+
glw.bindFramebuffer(this.framebuffer);
|
|
67
|
+
|
|
68
|
+
// Attach the texture to the framebuffer
|
|
69
|
+
glw.framebufferTexture2D(glw.COLOR_ATTACHMENT0, nativeTexture, 0);
|
|
70
|
+
|
|
71
|
+
// Unbind the framebuffer
|
|
72
|
+
glw.bindFramebuffer(null);
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
width,
|
|
76
|
+
height,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -115,29 +115,8 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
115
115
|
async onLoadRequest(): Promise<Dimensions> {
|
|
116
116
|
const { glw, memManager } = this;
|
|
117
117
|
|
|
118
|
-
//
|
|
119
|
-
|
|
120
|
-
glw.activeTexture(0);
|
|
121
|
-
glw.bindTexture(this._nativeCtxTexture);
|
|
122
|
-
|
|
123
|
-
// linear texture filtering
|
|
124
|
-
glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
|
|
125
|
-
glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
|
|
126
|
-
|
|
127
|
-
// texture wrapping method
|
|
128
|
-
glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
|
|
129
|
-
glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
|
|
130
|
-
|
|
131
|
-
glw.texImage2D(
|
|
132
|
-
0,
|
|
133
|
-
glw.RGBA,
|
|
134
|
-
1,
|
|
135
|
-
1,
|
|
136
|
-
0,
|
|
137
|
-
glw.RGBA,
|
|
138
|
-
glw.UNSIGNED_BYTE,
|
|
139
|
-
TRANSPARENT_TEXTURE_DATA,
|
|
140
|
-
);
|
|
118
|
+
// Set to a 1x1 transparent texture
|
|
119
|
+
glw.texImage2D(0, glw.RGBA, 1, 1, 0, glw.RGBA, glw.UNSIGNED_BYTE, null);
|
|
141
120
|
memManager.setTextureMemUse(this, TRANSPARENT_TEXTURE_DATA.byteLength);
|
|
142
121
|
|
|
143
122
|
const textureData = await this.textureSource?.getTextureData();
|
|
@@ -250,12 +229,35 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
250
229
|
this._nativeCtxTexture = null;
|
|
251
230
|
}
|
|
252
231
|
|
|
253
|
-
|
|
232
|
+
/**
|
|
233
|
+
* Create native context texture
|
|
234
|
+
*
|
|
235
|
+
* @remarks
|
|
236
|
+
* When this method returns the returned texture will be bound to the GL context state.
|
|
237
|
+
*
|
|
238
|
+
* @param width
|
|
239
|
+
* @param height
|
|
240
|
+
* @returns
|
|
241
|
+
*/
|
|
242
|
+
protected createNativeCtxTexture() {
|
|
254
243
|
const { glw } = this;
|
|
255
244
|
const nativeTexture = glw.createTexture();
|
|
256
245
|
if (!nativeTexture) {
|
|
257
246
|
throw new Error('Could not create WebGL Texture');
|
|
258
247
|
}
|
|
248
|
+
|
|
249
|
+
// On initial load request, create a 1x1 transparent texture to use until
|
|
250
|
+
// the texture data is finally loaded.
|
|
251
|
+
glw.activeTexture(0);
|
|
252
|
+
glw.bindTexture(nativeTexture);
|
|
253
|
+
|
|
254
|
+
// linear texture filtering
|
|
255
|
+
glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
|
|
256
|
+
glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
|
|
257
|
+
|
|
258
|
+
// texture wrapping method
|
|
259
|
+
glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
|
|
260
|
+
glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
|
|
259
261
|
return nativeTexture;
|
|
260
262
|
}
|
|
261
263
|
}
|
|
@@ -49,6 +49,9 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
|
|
|
49
49
|
readonly dimensions: Dimensions,
|
|
50
50
|
readonly bufferIdx: number,
|
|
51
51
|
readonly zIndex: number,
|
|
52
|
+
readonly renderToTexture: boolean | undefined,
|
|
53
|
+
readonly parentHasRenderTexture: boolean | undefined,
|
|
54
|
+
readonly framebufferDimensions: Dimensions | undefined,
|
|
52
55
|
) {
|
|
53
56
|
super();
|
|
54
57
|
this.maxTextures = shader.supportsIndexedTextures
|
|
@@ -72,9 +75,8 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
|
|
|
72
75
|
|
|
73
76
|
draw() {
|
|
74
77
|
const { glw, shader, shaderProps, options } = this;
|
|
75
|
-
// shaderOp.draw(this);
|
|
76
|
-
|
|
77
78
|
const { shManager } = options;
|
|
79
|
+
|
|
78
80
|
shManager.useShader(shader);
|
|
79
81
|
shader.bindRenderOp(this, shaderProps);
|
|
80
82
|
|