@lightningtv/renderer 3.0.0-beta1 → 3.2.4
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/NOTICE +4 -0
- package/README.md +22 -28
- package/dist/exports/canvas-shaders.js +0 -16
- package/dist/exports/canvas-shaders.js.map +1 -1
- package/dist/exports/canvas.d.ts +1 -1
- package/dist/exports/canvas.js +1 -19
- package/dist/exports/canvas.js.map +1 -1
- package/dist/exports/index.d.ts +2 -5
- package/dist/exports/index.js +1 -23
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/inspector.js +0 -18
- package/dist/exports/inspector.js.map +1 -1
- package/dist/exports/utils.d.ts +2 -1
- package/dist/exports/utils.js +2 -19
- package/dist/exports/utils.js.map +1 -1
- package/dist/exports/webgl-shaders.js +0 -16
- package/dist/exports/webgl-shaders.js.map +1 -1
- package/dist/exports/webgl.d.ts +2 -1
- package/dist/exports/webgl.js +2 -19
- package/dist/exports/webgl.js.map +1 -1
- package/dist/src/common/CommonTypes.d.ts +15 -3
- package/dist/src/common/CommonTypes.js +0 -18
- package/dist/src/common/CommonTypes.js.map +1 -1
- package/dist/src/common/EventEmitter.js +0 -18
- package/dist/src/common/EventEmitter.js.map +1 -1
- package/dist/src/common/IEventEmitter.js +0 -16
- package/dist/src/common/IEventEmitter.js.map +1 -1
- package/dist/src/core/Autosizer.d.ts +35 -0
- package/dist/src/core/Autosizer.js +178 -0
- package/dist/src/core/Autosizer.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +139 -101
- package/dist/src/core/CoreNode.js +813 -528
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.d.ts +3 -3
- package/dist/src/core/CoreShaderManager.js +0 -18
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +75 -87
- package/dist/src/core/CoreTextNode.js +380 -258
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +25 -14
- package/dist/src/core/CoreTextureManager.js +83 -140
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +102 -36
- package/dist/src/core/Stage.js +424 -191
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureError.d.ts +11 -0
- package/dist/src/core/TextureError.js +37 -0
- package/dist/src/core/TextureError.js.map +1 -0
- package/dist/src/core/TextureMemoryManager.d.ts +11 -4
- package/dist/src/core/TextureMemoryManager.js +114 -134
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/AnimationManager.js +0 -18
- package/dist/src/core/animations/AnimationManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
- package/dist/src/core/animations/CoreAnimation.js +8 -24
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
- package/dist/src/core/animations/CoreAnimationController.js +11 -22
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/lib/ContextSpy.js +0 -18
- package/dist/src/core/lib/ContextSpy.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.d.ts +2 -2
- package/dist/src/core/lib/ImageWorker.js +33 -31
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/Matrix3d.d.ts +1 -0
- package/dist/src/core/lib/Matrix3d.js +7 -19
- package/dist/src/core/lib/Matrix3d.js.map +1 -1
- package/dist/src/core/lib/RenderCoords.d.ts +9 -10
- package/dist/src/core/lib/RenderCoords.js +27 -55
- package/dist/src/core/lib/RenderCoords.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +78 -3
- package/dist/src/core/lib/WebGlContextWrapper.js +150 -25
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/collectionUtils.d.ts +5 -0
- package/dist/src/core/lib/collectionUtils.js +82 -0
- package/dist/src/core/lib/collectionUtils.js.map +1 -0
- package/dist/src/core/lib/colorCache.d.ts +1 -0
- package/dist/src/core/lib/colorCache.js +19 -0
- package/dist/src/core/lib/colorCache.js.map +1 -0
- package/dist/src/core/{renderers/canvas/internal/ColorUtils.js → lib/colorParser.js} +1 -19
- package/dist/src/core/lib/colorParser.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +14 -2
- package/dist/src/core/lib/textureCompression.js +320 -85
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/lib/textureSvg.js +0 -18
- package/dist/src/core/lib/textureSvg.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +8 -1
- package/dist/src/core/lib/utils.js +44 -20
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
- package/dist/src/core/lib/validateImageBitmap.js +4 -4
- package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
- package/dist/src/core/platforms/Platform.d.ts +42 -0
- package/dist/src/core/platforms/Platform.js +4 -0
- package/dist/src/core/platforms/Platform.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
- package/dist/src/core/platforms/web/WebPlatform.js +90 -0
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
- package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
- package/dist/src/core/renderers/CoreContextTexture.js +0 -18
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderOp.js +0 -18
- package/dist/src/core/renderers/CoreRenderOp.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +15 -3
- package/dist/src/core/renderers/CoreRenderer.js +1 -18
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderNode.d.ts +13 -3
- package/dist/src/core/renderers/CoreShaderNode.js +25 -2
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderProgram.js +0 -18
- package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +89 -83
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -21
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
- package/dist/src/core/renderers/canvas/CanvasTexture.js +18 -31
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/BatchRenderOp.d.ts +25 -0
- package/dist/src/core/renderers/webgl/BatchRenderOp.js +60 -0
- package/dist/src/core/renderers/webgl/BatchRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +80 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -24
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -23
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -70
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +34 -20
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +319 -195
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -3
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +99 -48
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -1
- package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
- package/dist/src/core/shaders/canvas/Border.js +67 -41
- package/dist/src/core/shaders/canvas/Border.js.map +1 -1
- package/dist/src/core/shaders/canvas/HolePunch.js +3 -19
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/canvas/LinearGradient.js +7 -21
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js +14 -28
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/Rounded.js +1 -17
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +44 -22
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +47 -25
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +9 -21
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/Shadow.js +0 -16
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
- package/dist/src/core/shaders/canvas/utils/render.js +31 -34
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
- package/dist/src/core/shaders/templates/BorderTemplate.js +31 -27
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -19
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -16
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -18
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -17
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +4 -2
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
- package/dist/src/core/shaders/utils.js +25 -0
- package/dist/src/core/shaders/utils.js.map +1 -0
- package/dist/src/core/shaders/webgl/Border.js +118 -51
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/Default.js +6 -41
- package/dist/src/core/shaders/webgl/Default.js.map +1 -1
- package/dist/src/core/shaders/webgl/HolePunch.js +4 -19
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +73 -34
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +56 -48
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/Rounded.js +25 -23
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +160 -55
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +168 -58
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
- package/dist/src/core/shaders/webgl/SdfShader.js +8 -36
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
- package/dist/src/core/shaders/webgl/Shadow.js +39 -34
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +18 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +384 -0
- package/dist/src/core/text-rendering/TextRenderer.js +2 -0
- package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/Utils.d.ts +30 -0
- package/dist/src/core/text-rendering/Utils.js +66 -0
- package/dist/src/core/text-rendering/Utils.js.map +1 -0
- package/dist/src/core/textures/ColorTexture.d.ts +1 -1
- package/dist/src/core/textures/ColorTexture.js +3 -22
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +13 -6
- package/dist/src/core/textures/ImageTexture.js +57 -66
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
- package/dist/src/core/textures/NoiseTexture.js +8 -26
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.d.ts +7 -7
- package/dist/src/core/textures/RenderTexture.js +12 -30
- package/dist/src/core/textures/RenderTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +6 -8
- package/dist/src/core/textures/SubTexture.js +19 -55
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +90 -12
- package/dist/src/core/textures/Texture.js +160 -35
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +2 -1
- package/dist/src/core/utils.js +1 -19
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/INode.js.map +1 -1
- package/dist/src/main-api/Inspector.d.ts +135 -2
- package/dist/src/main-api/Inspector.js +507 -30
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +294 -81
- package/dist/src/main-api/Renderer.js +225 -96
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/utils.d.ts +19 -6
- package/dist/src/utils.js +32 -27
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/exports/canvas-shaders.ts +0 -17
- package/exports/canvas.ts +1 -19
- package/exports/index.ts +6 -27
- package/exports/inspector.ts +0 -19
- package/exports/utils.ts +7 -19
- package/exports/webgl-shaders.ts +0 -16
- package/exports/webgl.ts +3 -20
- package/package.json +23 -22
- package/src/common/CommonTypes.ts +20 -22
- package/src/common/EventEmitter.ts +0 -19
- package/src/common/IAnimationController.ts +0 -18
- package/src/common/IEventEmitter.ts +0 -17
- package/src/core/Autosizer.ts +205 -0
- package/src/core/CoreNode.test.ts +376 -45
- package/src/core/CoreNode.ts +1017 -656
- package/src/core/CoreShaderManager.ts +3 -21
- package/src/core/CoreTextNode.ts +457 -314
- package/src/core/CoreTextureManager.ts +123 -168
- package/src/core/Stage.ts +526 -236
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +150 -167
- package/src/core/animations/AnimationManager.ts +0 -19
- package/src/core/animations/CoreAnimation.ts +15 -32
- package/src/core/animations/CoreAnimationController.ts +13 -23
- package/src/core/lib/ContextSpy.ts +0 -19
- package/src/core/lib/ImageWorker.ts +45 -32
- package/src/core/lib/Matrix3d.ts +7 -20
- package/src/core/lib/RenderCoords.ts +36 -67
- package/src/core/lib/WebGlContextWrapper.ts +196 -72
- package/src/core/lib/collectionUtils.ts +99 -0
- package/src/core/lib/colorCache.ts +20 -0
- package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -21
- package/src/core/lib/textureCompression.ts +433 -93
- package/src/core/lib/textureSvg.ts +0 -19
- package/src/core/lib/utils.ts +58 -19
- package/src/core/lib/validateImageBitmap.ts +17 -6
- package/src/core/platforms/Platform.ts +64 -0
- package/src/core/platforms/web/WebPlatform.ts +132 -0
- package/src/core/renderers/CoreContextTexture.ts +2 -20
- package/src/core/renderers/CoreRenderOp.ts +0 -19
- package/src/core/renderers/CoreRenderer.ts +16 -23
- package/src/core/renderers/CoreShaderNode.ts +37 -6
- package/src/core/renderers/CoreShaderProgram.ts +0 -19
- package/src/core/renderers/canvas/CanvasRenderer.ts +108 -137
- package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -23
- package/src/core/renderers/canvas/CanvasTexture.ts +25 -37
- package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -34
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -24
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -103
- package/src/core/renderers/webgl/WebGlRenderer.ts +368 -233
- package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -7
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +122 -76
- package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
- package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +0 -19
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
- package/src/core/shaders/canvas/Border.ts +91 -50
- package/src/core/shaders/canvas/HolePunch.ts +4 -28
- package/src/core/shaders/canvas/LinearGradient.ts +10 -25
- package/src/core/shaders/canvas/RadialGradient.ts +23 -54
- package/src/core/shaders/canvas/Rounded.ts +2 -19
- package/src/core/shaders/canvas/RoundedWithBorder.ts +72 -35
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +77 -47
- package/src/core/shaders/canvas/RoundedWithShadow.ts +21 -34
- package/src/core/shaders/canvas/Shadow.ts +0 -17
- package/src/core/shaders/canvas/utils/render.ts +45 -53
- package/src/core/shaders/templates/BorderTemplate.ts +42 -29
- package/src/core/shaders/templates/HolePunchTemplate.ts +5 -22
- package/src/core/shaders/templates/LinearGradientTemplate.ts +0 -17
- package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -25
- package/src/core/shaders/templates/RoundedTemplate.ts +1 -18
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -18
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +7 -19
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -18
- package/src/core/shaders/templates/ShadowTemplate.ts +1 -18
- package/src/core/shaders/utils.ts +30 -0
- package/src/core/shaders/webgl/Border.ts +118 -55
- package/src/core/shaders/webgl/Default.ts +6 -43
- package/src/core/shaders/webgl/HolePunch.ts +4 -24
- package/src/core/shaders/webgl/LinearGradient.ts +73 -35
- package/src/core/shaders/webgl/RadialGradient.ts +58 -51
- package/src/core/shaders/webgl/Rounded.ts +25 -45
- package/src/core/shaders/webgl/RoundedWithBorder.ts +161 -63
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +169 -68
- package/src/core/shaders/webgl/RoundedWithShadow.ts +73 -39
- package/src/core/shaders/webgl/SdfShader.ts +8 -41
- package/src/core/shaders/webgl/Shadow.ts +39 -35
- package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
- package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
- package/src/core/text-rendering/SdfFontHandler.ts +566 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +406 -0
- package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
- package/src/core/text-rendering/TextRenderer.ts +426 -0
- package/src/core/text-rendering/Utils.ts +80 -0
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
- package/src/core/textures/ColorTexture.ts +7 -24
- package/src/core/textures/ImageTexture.ts +110 -92
- package/src/core/textures/NoiseTexture.ts +14 -31
- package/src/core/textures/RenderTexture.ts +18 -35
- package/src/core/textures/SubTexture.ts +25 -65
- package/src/core/textures/Texture.ts +214 -46
- package/src/core/utils.ts +9 -26
- package/src/main-api/INode.ts +0 -18
- package/src/main-api/Inspector.ts +794 -38
- package/src/main-api/Renderer.ts +519 -159
- package/src/utils.ts +64 -29
- package/dist/src/core/platform.d.ts +0 -10
- package/dist/src/core/platform.js +0 -56
- package/dist/src/core/platform.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -217
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -36
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -107
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
- package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
- package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
- package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +0 -2
- package/dist/src/core/shaders/webgl/DefaultBatched.js +0 -104
- package/dist/src/core/shaders/webgl/DefaultBatched.js.map +0 -1
- package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
- package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
- package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
- package/dist/src/core/text-rendering/TrFontManager.js +0 -131
- package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
- package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -126
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -91
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -611
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -370
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
- package/scripts/please-use-pnpm.js +0 -13
- package/src/core/platform.ts +0 -64
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
- package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -145
- package/src/core/shaders/templates/shaderUtils.ts +0 -47
- package/src/core/shaders/webgl/DefaultBatched.ts +0 -129
- package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
- package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
- package/src/core/text-rendering/TrFontManager.ts +0 -183
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
- package/src/core/text-rendering/font-face-types/utils.ts +0 -39
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
- package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
- /package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +0 -0
package/dist/src/core/Stage.js
CHANGED
|
@@ -1,35 +1,17 @@
|
|
|
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
|
-
import { startLoop, getTimeStamp } from './platform.js';
|
|
20
|
-
import { assertTruthy, setPremultiplyMode } from '../utils.js';
|
|
1
|
+
import { assertTruthy, CALCULATE_FPS, isProductionEnvironment, setPremultiplyMode, USE_RTT, } from '../utils.js';
|
|
21
2
|
import { AnimationManager } from './animations/AnimationManager.js';
|
|
22
3
|
import { UpdateType, CoreNode, CoreNodeRenderState, } from './CoreNode.js';
|
|
23
4
|
import { CoreTextureManager } from './CoreTextureManager.js';
|
|
24
|
-
import { TrFontManager } from './text-rendering/TrFontManager.js';
|
|
25
5
|
import { CoreShaderManager } from './CoreShaderManager.js';
|
|
26
|
-
import {
|
|
6
|
+
import {} from './text-rendering/TextRenderer.js';
|
|
27
7
|
import { EventEmitter } from '../common/EventEmitter.js';
|
|
28
8
|
import { ContextSpy } from './lib/ContextSpy.js';
|
|
29
9
|
import { TextureMemoryManager, } from './TextureMemoryManager.js';
|
|
30
10
|
import { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
31
11
|
import { CoreTextNode } from './CoreTextNode.js';
|
|
32
12
|
import { santizeCustomDataMap } from '../main-api/utils.js';
|
|
13
|
+
import { pointInBound } from './lib/utils.js';
|
|
14
|
+
import { Matrix3d } from './lib/Matrix3d.js';
|
|
33
15
|
import { createBound, createPreloadBounds } from './lib/utils.js';
|
|
34
16
|
import { ColorTexture } from './textures/ColorTexture.js';
|
|
35
17
|
const autoStart = true;
|
|
@@ -39,19 +21,30 @@ export class Stage {
|
|
|
39
21
|
animationManager;
|
|
40
22
|
txManager;
|
|
41
23
|
txMemManager;
|
|
42
|
-
|
|
43
|
-
|
|
24
|
+
textRenderers = {};
|
|
25
|
+
fontHandlers = {};
|
|
44
26
|
shManager;
|
|
45
27
|
renderer;
|
|
46
28
|
root;
|
|
29
|
+
interactiveNodes = new Set();
|
|
47
30
|
boundsMargin;
|
|
48
31
|
defShaderNode = null;
|
|
49
32
|
strictBound;
|
|
50
33
|
preloadBound;
|
|
51
|
-
strictBounds;
|
|
52
34
|
defaultTexture = null;
|
|
53
35
|
pixelRatio;
|
|
54
36
|
bufferMemory = 2e6;
|
|
37
|
+
platform;
|
|
38
|
+
calculateTextureCoord;
|
|
39
|
+
/**
|
|
40
|
+
* Target frame time in milliseconds (calculated from targetFPS)
|
|
41
|
+
*
|
|
42
|
+
* @remarks
|
|
43
|
+
* This is pre-calculated to avoid recalculating on every frame.
|
|
44
|
+
* - 0 means no throttling (use display refresh rate)
|
|
45
|
+
* - >0 means throttle to this frame time (1000 / targetFPS)
|
|
46
|
+
*/
|
|
47
|
+
targetFrameTime = 0;
|
|
55
48
|
/**
|
|
56
49
|
* Renderer Event Bus for the Stage to emit events onto
|
|
57
50
|
*
|
|
@@ -62,28 +55,47 @@ export class Stage {
|
|
|
62
55
|
*/
|
|
63
56
|
eventBus;
|
|
64
57
|
/// State
|
|
58
|
+
startTime = 0;
|
|
65
59
|
deltaTime = 0;
|
|
66
60
|
lastFrameTime = 0;
|
|
67
61
|
currentFrameTime = 0;
|
|
62
|
+
elapsedTime = 0;
|
|
63
|
+
timedNodes = [];
|
|
68
64
|
clrColor = 0x00000000;
|
|
69
65
|
fpsNumFrames = 0;
|
|
70
66
|
fpsElapsedTime = 0;
|
|
71
67
|
numQuadsRendered = 0;
|
|
72
68
|
renderRequested = false;
|
|
69
|
+
reprocessFrame = false;
|
|
70
|
+
reprocessCallback = null;
|
|
73
71
|
frameEventQueue = [];
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
// Flattened render list optimization
|
|
73
|
+
renderList = [];
|
|
74
|
+
renderListDirty = true;
|
|
75
|
+
// Font resolve optimisation flags
|
|
76
|
+
hasOnlyOneFontEngine;
|
|
77
|
+
hasOnlyCanvasFontEngine;
|
|
78
|
+
hasCanvasEngine;
|
|
79
|
+
singleFontEngine = null;
|
|
80
|
+
singleFontHandler = null;
|
|
81
|
+
// Debug data
|
|
76
82
|
contextSpy = null;
|
|
77
83
|
/**
|
|
78
84
|
* Stage constructor
|
|
79
85
|
*/
|
|
80
86
|
constructor(options) {
|
|
81
87
|
this.options = options;
|
|
82
|
-
const { canvas, clearColor, appWidth, appHeight, boundsMargin, enableContextSpy, forceWebGL2, numImageWorkers, textureMemory, renderEngine, fontEngines, createImageBitmapSupport, } = options;
|
|
88
|
+
const { canvas, clearColor, appWidth, appHeight, boundsMargin, enableContextSpy, forceWebGL2, numImageWorkers, textureMemory, renderEngine, fontEngines, createImageBitmapSupport, platform, maxRetryCount, } = options;
|
|
89
|
+
assertTruthy(platform !== null, 'A CorePlatform is not provided in the options');
|
|
90
|
+
this.platform = platform;
|
|
91
|
+
this.startTime = platform.getTimeStamp();
|
|
83
92
|
this.eventBus = options.eventBus;
|
|
93
|
+
// Calculate target frame time from targetFPS option
|
|
94
|
+
this.targetFrameTime = options.targetFPS > 0 ? 1000 / options.targetFPS : 0;
|
|
84
95
|
this.txManager = new CoreTextureManager(this, {
|
|
85
96
|
numImageWorkers,
|
|
86
97
|
createImageBitmapSupport,
|
|
98
|
+
maxRetryCount,
|
|
87
99
|
});
|
|
88
100
|
// Wait for the Texture Manager to initialize
|
|
89
101
|
// once it does, request a render
|
|
@@ -93,7 +105,6 @@ export class Stage {
|
|
|
93
105
|
this.txMemManager = new TextureMemoryManager(this, textureMemory);
|
|
94
106
|
this.animationManager = new AnimationManager();
|
|
95
107
|
this.contextSpy = enableContextSpy ? new ContextSpy() : null;
|
|
96
|
-
this.strictBounds = options.strictBounds;
|
|
97
108
|
let bm = [0, 0, 0, 0];
|
|
98
109
|
if (boundsMargin) {
|
|
99
110
|
bm = Array.isArray(boundsMargin)
|
|
@@ -115,40 +126,85 @@ export class Stage {
|
|
|
115
126
|
});
|
|
116
127
|
this.shManager = new CoreShaderManager(this);
|
|
117
128
|
this.defShaderNode = this.renderer.getDefaultShaderNode();
|
|
129
|
+
this.calculateTextureCoord = this.renderer.getTextureCoords !== undefined;
|
|
118
130
|
const renderMode = this.renderer.mode || 'webgl';
|
|
119
131
|
this.createDefaultTexture();
|
|
120
132
|
setPremultiplyMode(renderMode);
|
|
121
133
|
// Must do this after renderer is created
|
|
122
134
|
this.txManager.renderer = this.renderer;
|
|
123
135
|
// Create text renderers
|
|
124
|
-
this.
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
+
this.hasOnlyOneFontEngine = fontEngines.length === 1;
|
|
137
|
+
this.hasOnlyCanvasFontEngine =
|
|
138
|
+
fontEngines.length === 1 && fontEngines[0].type === 'canvas';
|
|
139
|
+
this.hasCanvasEngine = false;
|
|
140
|
+
this.singleFontEngine = this.hasOnlyOneFontEngine
|
|
141
|
+
? fontEngines[0]
|
|
142
|
+
: null;
|
|
143
|
+
this.singleFontHandler = this.hasOnlyOneFontEngine
|
|
144
|
+
? fontEngines[0]?.font
|
|
145
|
+
: null;
|
|
146
|
+
if (this.singleFontEngine === null) {
|
|
147
|
+
// Multiple font engines case
|
|
148
|
+
// Filter out incompatible engines first
|
|
149
|
+
const compatibleEngines = fontEngines.filter((fontEngine) => {
|
|
150
|
+
const type = fontEngine.type;
|
|
151
|
+
if (type === 'sdf' && renderMode === 'canvas') {
|
|
152
|
+
console.warn('MsdfTextRenderer is not compatible with Canvas renderer. Skipping...');
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
if (type === 'canvas') {
|
|
156
|
+
this.hasCanvasEngine = true;
|
|
136
157
|
}
|
|
137
|
-
|
|
138
|
-
|
|
158
|
+
return true;
|
|
159
|
+
});
|
|
160
|
+
// Sort engines: SDF first, Canvas last, others in between
|
|
161
|
+
const sortedEngines = compatibleEngines.sort((a, b) => {
|
|
162
|
+
if (a.type === 'sdf')
|
|
163
|
+
return -1;
|
|
164
|
+
if (b.type === 'sdf')
|
|
165
|
+
return 1;
|
|
166
|
+
if (a.type === 'canvas')
|
|
167
|
+
return 1;
|
|
168
|
+
if (b.type === 'canvas')
|
|
169
|
+
return -1;
|
|
170
|
+
return 0;
|
|
171
|
+
});
|
|
172
|
+
// Initialize engines in sorted order
|
|
173
|
+
sortedEngines.forEach((fontEngine) => {
|
|
174
|
+
const type = fontEngine.type;
|
|
175
|
+
// Add to map for type-based access
|
|
176
|
+
this.textRenderers[type] = fontEngine;
|
|
177
|
+
this.textRenderers[type].init(this);
|
|
178
|
+
this.fontHandlers[type] = fontEngine.font;
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// Single font engine case - initialize it directly
|
|
183
|
+
const fontEngine = this.singleFontEngine;
|
|
184
|
+
const type = fontEngine.type;
|
|
185
|
+
// Check compatibility
|
|
186
|
+
if (type === 'sdf' && renderMode === 'canvas') {
|
|
187
|
+
console.warn('MsdfTextRenderer is not compatible with Canvas renderer. Skipping...');
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
if (type === 'canvas') {
|
|
191
|
+
this.hasCanvasEngine = true;
|
|
139
192
|
}
|
|
193
|
+
// Add to map for type-based access
|
|
194
|
+
this.textRenderers[type] = fontEngine;
|
|
195
|
+
this.fontHandlers[type] = fontEngine.font;
|
|
196
|
+
this.textRenderers[type].init(this);
|
|
140
197
|
}
|
|
141
|
-
}
|
|
198
|
+
}
|
|
142
199
|
if (Object.keys(this.textRenderers).length === 0) {
|
|
143
200
|
console.warn('No text renderers available. Your text will not render.');
|
|
144
201
|
}
|
|
145
|
-
this.fontManager = new TrFontManager(this.textRenderers);
|
|
146
202
|
// create root node
|
|
147
203
|
const rootNode = new CoreNode(this, {
|
|
148
204
|
x: 0,
|
|
149
205
|
y: 0,
|
|
150
|
-
|
|
151
|
-
|
|
206
|
+
w: appWidth,
|
|
207
|
+
h: appHeight,
|
|
152
208
|
alpha: 1,
|
|
153
209
|
autosize: false,
|
|
154
210
|
boundsMargin: null,
|
|
@@ -163,7 +219,6 @@ export class Stage {
|
|
|
163
219
|
colorBl: 0x00000000,
|
|
164
220
|
colorBr: 0x00000000,
|
|
165
221
|
zIndex: 0,
|
|
166
|
-
zIndexLocked: 0,
|
|
167
222
|
scaleX: 1,
|
|
168
223
|
scaleY: 1,
|
|
169
224
|
mountX: 0,
|
|
@@ -180,13 +235,26 @@ export class Stage {
|
|
|
180
235
|
rtt: false,
|
|
181
236
|
src: null,
|
|
182
237
|
scale: 1,
|
|
183
|
-
preventCleanup: false,
|
|
184
|
-
strictBounds: this.strictBounds,
|
|
185
238
|
});
|
|
186
239
|
this.root = rootNode;
|
|
240
|
+
// Initialize root node properties
|
|
241
|
+
rootNode.updateLocalTransform();
|
|
242
|
+
rootNode.globalTransform = Matrix3d.copy(rootNode.localTransform);
|
|
243
|
+
rootNode.sceneGlobalTransform = Matrix3d.copy(rootNode.localTransform);
|
|
244
|
+
rootNode.calculateRenderCoords();
|
|
245
|
+
rootNode.updateBoundingRect();
|
|
246
|
+
rootNode.createRenderBounds();
|
|
247
|
+
rootNode.updateRenderState(CoreNodeRenderState.InViewport);
|
|
248
|
+
rootNode.updateIsRenderable();
|
|
249
|
+
// Initialize premultiplied colors (default is transparent 0x00000000)
|
|
250
|
+
rootNode.premultipliedColorTl =
|
|
251
|
+
rootNode.premultipliedColorTr =
|
|
252
|
+
rootNode.premultipliedColorBl =
|
|
253
|
+
rootNode.premultipliedColorBr =
|
|
254
|
+
0;
|
|
187
255
|
// execute platform start loop
|
|
188
|
-
if (autoStart) {
|
|
189
|
-
startLoop(this);
|
|
256
|
+
if (autoStart === true) {
|
|
257
|
+
this.platform.startLoop(this);
|
|
190
258
|
}
|
|
191
259
|
}
|
|
192
260
|
setClearColor(color) {
|
|
@@ -194,10 +262,24 @@ export class Stage {
|
|
|
194
262
|
this.renderer.updateClearColor(color);
|
|
195
263
|
this.renderRequested = true;
|
|
196
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Update the target frame time based on the current targetFPS setting
|
|
267
|
+
*
|
|
268
|
+
* @remarks
|
|
269
|
+
* This should be called whenever the targetFPS option is changed
|
|
270
|
+
* to ensure targetFrameTime stays in sync.
|
|
271
|
+
* targetFPS of 0 means no throttling (targetFrameTime = 0)
|
|
272
|
+
* targetFPS > 0 means throttle to 1000/targetFPS milliseconds
|
|
273
|
+
*/
|
|
274
|
+
updateTargetFrameTime() {
|
|
275
|
+
this.targetFrameTime =
|
|
276
|
+
this.options.targetFPS > 0 ? 1000 / this.options.targetFPS : 0;
|
|
277
|
+
}
|
|
197
278
|
updateFrameTime() {
|
|
198
|
-
const newFrameTime = getTimeStamp();
|
|
279
|
+
const newFrameTime = this.platform.getTimeStamp();
|
|
199
280
|
this.lastFrameTime = this.currentFrameTime;
|
|
200
281
|
this.currentFrameTime = newFrameTime;
|
|
282
|
+
this.elapsedTime = newFrameTime - this.startTime;
|
|
201
283
|
this.deltaTime = !this.lastFrameTime
|
|
202
284
|
? 100 / 6
|
|
203
285
|
: newFrameTime - this.lastFrameTime;
|
|
@@ -214,7 +296,6 @@ export class Stage {
|
|
|
214
296
|
* Create default PixelTexture
|
|
215
297
|
*/
|
|
216
298
|
createDefaultTexture() {
|
|
217
|
-
console.log('Creating default texture');
|
|
218
299
|
this.defaultTexture = this.txManager.createTexture('ColorTexture', {
|
|
219
300
|
color: 0xffffffff,
|
|
220
301
|
});
|
|
@@ -223,7 +304,7 @@ export class Stage {
|
|
|
223
304
|
// Mark the default texture as ALWAYS renderable
|
|
224
305
|
// This prevents it from ever being cleaned up.
|
|
225
306
|
// Fixes https://github.com/lightning-js/renderer/issues/262
|
|
226
|
-
this.defaultTexture.setRenderableOwner(
|
|
307
|
+
this.defaultTexture.setRenderableOwner('stage', true);
|
|
227
308
|
// When the default texture is loaded, request a render in case the
|
|
228
309
|
// RAF is paused. Fixes: https://github.com/lightning-js/renderer/issues/123
|
|
229
310
|
this.defaultTexture.once('loaded', () => {
|
|
@@ -236,10 +317,11 @@ export class Stage {
|
|
|
236
317
|
updateAnimations() {
|
|
237
318
|
const { animationManager } = this;
|
|
238
319
|
if (!this.root) {
|
|
239
|
-
return;
|
|
320
|
+
return false;
|
|
240
321
|
}
|
|
241
322
|
// step animation
|
|
242
323
|
animationManager.update(this.deltaTime);
|
|
324
|
+
return animationManager.activeAnimations.size > 0;
|
|
243
325
|
}
|
|
244
326
|
/**
|
|
245
327
|
* Check if the scene has updates
|
|
@@ -252,40 +334,84 @@ export class Stage {
|
|
|
252
334
|
/**
|
|
253
335
|
* Start a new frame draw
|
|
254
336
|
*/
|
|
255
|
-
drawFrame() {
|
|
256
|
-
const { renderer, renderRequested } = this;
|
|
257
|
-
assertTruthy(renderer);
|
|
337
|
+
drawFrame(hasActiveAnimations = false) {
|
|
338
|
+
const { renderer, renderRequested, root } = this;
|
|
258
339
|
// Update tree if needed
|
|
259
|
-
|
|
260
|
-
|
|
340
|
+
do {
|
|
341
|
+
const forceUpdate = this.reprocessFrame;
|
|
342
|
+
this.reprocessFrame = false;
|
|
343
|
+
if (root.updateType !== 0 || forceUpdate) {
|
|
344
|
+
root.updateType = 0;
|
|
345
|
+
const childUpdateType = root.childUpdateType;
|
|
346
|
+
root.childUpdateType = 0;
|
|
347
|
+
for (let i = 0, length = root.children.length; i < length; i++) {
|
|
348
|
+
const child = root.children[i];
|
|
349
|
+
if (childUpdateType !== 0) {
|
|
350
|
+
child.setUpdateType(childUpdateType);
|
|
351
|
+
}
|
|
352
|
+
if (child.updateType === 0) {
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
child.update(this.deltaTime, root.clippingRect);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
if (this.reprocessCallback !== null) {
|
|
359
|
+
this.reprocessCallback();
|
|
360
|
+
this.reprocessCallback = null;
|
|
361
|
+
}
|
|
362
|
+
} while (this.reprocessFrame);
|
|
363
|
+
// Process some textures asynchronously but don't block the frame
|
|
364
|
+
// Use a background task to prevent frame drops
|
|
365
|
+
if (this.txManager.hasUpdates() === true) {
|
|
366
|
+
const timeLimit = hasActiveAnimations
|
|
367
|
+
? this.options.textureProcessingTimeLimit / 2
|
|
368
|
+
: this.options.textureProcessingTimeLimit;
|
|
369
|
+
this.txManager.processSome(timeLimit).catch((err) => {
|
|
370
|
+
console.error('Error processing textures:', err);
|
|
371
|
+
});
|
|
261
372
|
}
|
|
262
|
-
// Process some textures
|
|
263
|
-
this.txManager.processSome(this.options.textureProcessingTimeLimit);
|
|
264
373
|
// Reset render operations and clear the canvas
|
|
265
374
|
renderer.reset();
|
|
266
|
-
// Check if we need to cleanup textures
|
|
267
|
-
if (this.txMemManager.criticalCleanupRequested === true) {
|
|
268
|
-
this.txMemManager.cleanup(false);
|
|
269
|
-
if (this.txMemManager.criticalCleanupRequested === true) {
|
|
270
|
-
// If we still need to cleanup, request another but aggressive cleanup
|
|
271
|
-
this.txMemManager.cleanup(true);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
375
|
// If we have RTT nodes draw them first
|
|
275
376
|
// So we can use them as textures in the main scene
|
|
276
|
-
if (renderer.rttNodes.length > 0) {
|
|
377
|
+
if (USE_RTT && renderer.rttNodes.length > 0) {
|
|
277
378
|
renderer.renderRTTNodes();
|
|
278
379
|
}
|
|
279
|
-
//
|
|
280
|
-
|
|
380
|
+
// Update render list if dirty
|
|
381
|
+
if (this.renderListDirty === true) {
|
|
382
|
+
this.renderList.length = 0;
|
|
383
|
+
this.buildRenderList(this.root);
|
|
384
|
+
this.renderListDirty = false;
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
// Fill quads buffer
|
|
388
|
+
const renderList = this.renderList;
|
|
389
|
+
for (let i = 0, len = renderList.length; i < len; i++) {
|
|
390
|
+
renderList[i].renderQuads(renderer);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
281
393
|
// Perform render pass
|
|
282
|
-
renderer
|
|
283
|
-
|
|
284
|
-
|
|
394
|
+
renderer.render();
|
|
395
|
+
if (CALCULATE_FPS) {
|
|
396
|
+
this.calculateFps();
|
|
397
|
+
this.calculateQuads();
|
|
398
|
+
}
|
|
285
399
|
// Reset renderRequested flag if it was set
|
|
286
|
-
if (renderRequested) {
|
|
400
|
+
if (renderRequested === true) {
|
|
287
401
|
this.renderRequested = false;
|
|
288
402
|
}
|
|
403
|
+
if (this.timedNodes.length > 0) {
|
|
404
|
+
for (let key in this.timedNodes) {
|
|
405
|
+
if (this.timedNodes[key].isRenderable === true) {
|
|
406
|
+
this.requestRender();
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
// Check if we need to cleanup textures
|
|
412
|
+
if (this.txMemManager.criticalCleanupRequested === true) {
|
|
413
|
+
this.txMemManager.cleanup();
|
|
414
|
+
}
|
|
289
415
|
}
|
|
290
416
|
/**
|
|
291
417
|
* Queue an event to be emitted after the current/next frame is rendered
|
|
@@ -347,23 +473,32 @@ export class Stage {
|
|
|
347
473
|
});
|
|
348
474
|
}
|
|
349
475
|
}
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
//
|
|
476
|
+
requestRenderListUpdate() {
|
|
477
|
+
// Notify the renderer that the render list is structurally changing.
|
|
478
|
+
// For the WebGL renderer this resets per-node buffer slot assignments
|
|
479
|
+
// and schedules a full GPU buffer re-upload on the next frame.
|
|
480
|
+
if (this.renderer.invalidateQuadBuffer !== undefined) {
|
|
481
|
+
this.renderer.invalidateQuadBuffer();
|
|
482
|
+
}
|
|
483
|
+
this.renderListDirty = true;
|
|
484
|
+
this.requestRender();
|
|
485
|
+
}
|
|
486
|
+
buildRenderList(node) {
|
|
487
|
+
// If the node is renderable and has a loaded texture, add it
|
|
353
488
|
if (node.isRenderable === true) {
|
|
354
489
|
node.renderQuads(this.renderer);
|
|
490
|
+
this.renderList.push(node);
|
|
355
491
|
}
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
492
|
+
const children = node.children;
|
|
493
|
+
const len = children.length;
|
|
494
|
+
for (let i = 0; i < len; i++) {
|
|
495
|
+
const child = children[i];
|
|
496
|
+
// Skip invisible subtrees
|
|
361
497
|
if (child.worldAlpha === 0 ||
|
|
362
|
-
|
|
363
|
-
child.renderState === CoreNodeRenderState.OutOfBounds)) {
|
|
498
|
+
child.renderState === CoreNodeRenderState.OutOfBounds) {
|
|
364
499
|
continue;
|
|
365
500
|
}
|
|
366
|
-
this.
|
|
501
|
+
this.buildRenderList(child);
|
|
367
502
|
}
|
|
368
503
|
}
|
|
369
504
|
/**
|
|
@@ -372,6 +507,12 @@ export class Stage {
|
|
|
372
507
|
requestRender() {
|
|
373
508
|
this.renderRequested = true;
|
|
374
509
|
}
|
|
510
|
+
reprocessUpdates(callback) {
|
|
511
|
+
this.reprocessFrame = true;
|
|
512
|
+
if (callback) {
|
|
513
|
+
this.reprocessCallback = callback;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
375
516
|
/**
|
|
376
517
|
* Given a font name, and possible renderer override, return the best compatible text renderer.
|
|
377
518
|
*
|
|
@@ -383,88 +524,67 @@ export class Stage {
|
|
|
383
524
|
* @returns
|
|
384
525
|
*/
|
|
385
526
|
resolveTextRenderer(trProps, textRendererOverride = null) {
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
let rendererId = textRendererOverride;
|
|
393
|
-
let overrideFallback = false;
|
|
394
|
-
// Check if the override is valid (if one is provided)
|
|
395
|
-
if (rendererId) {
|
|
396
|
-
const possibleRenderer = this.textRenderers[rendererId];
|
|
397
|
-
if (!possibleRenderer) {
|
|
398
|
-
console.warn(`Text renderer override '${rendererId}' not found.`);
|
|
399
|
-
rendererId = null;
|
|
400
|
-
overrideFallback = true;
|
|
401
|
-
}
|
|
402
|
-
else if (!possibleRenderer.canRenderFont(trProps)) {
|
|
403
|
-
console.warn(`Cannot use override text renderer '${rendererId}' for font`, trProps);
|
|
404
|
-
rendererId = null;
|
|
405
|
-
overrideFallback = true;
|
|
527
|
+
// If we have an overide, return it
|
|
528
|
+
if (textRendererOverride !== null) {
|
|
529
|
+
const overrideKey = String(textRendererOverride);
|
|
530
|
+
if (this.textRenderers[overrideKey] === undefined) {
|
|
531
|
+
console.warn(`Text renderer override '${overrideKey}' not found.`);
|
|
532
|
+
return null;
|
|
406
533
|
}
|
|
534
|
+
return this.textRenderers[overrideKey];
|
|
407
535
|
}
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
break;
|
|
414
|
-
}
|
|
536
|
+
// If we have only one font engine early return it
|
|
537
|
+
if (this.singleFontEngine !== null) {
|
|
538
|
+
// If we have only one font engine and its the canvas engine, we can just return it
|
|
539
|
+
if (this.hasOnlyCanvasFontEngine === true) {
|
|
540
|
+
return this.singleFontEngine;
|
|
415
541
|
}
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
542
|
+
// If we have only one font engine and it can render the font, return it
|
|
543
|
+
if (this.singleFontHandler?.canRenderFont(trProps) === true) {
|
|
544
|
+
return this.singleFontEngine;
|
|
419
545
|
}
|
|
546
|
+
// If we have only one font engine and it cannot render the font, return null
|
|
547
|
+
console.warn(`Text renderer cannot render font`, trProps);
|
|
548
|
+
return null;
|
|
420
549
|
}
|
|
421
|
-
|
|
422
|
-
|
|
550
|
+
// Multi font handling - If we have multiple font engines, we need to resolve the best one
|
|
551
|
+
// First check SDF
|
|
552
|
+
if (this.fontHandlers['sdf']?.canRenderFont(trProps) === true) {
|
|
553
|
+
return this.textRenderers.sdf || null;
|
|
423
554
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
return null;
|
|
555
|
+
// If we have a canvas engine, we can return it (it can render all fonts)
|
|
556
|
+
if (this.hasCanvasEngine === true) {
|
|
557
|
+
return this.textRenderers.canvas || null;
|
|
428
558
|
}
|
|
429
|
-
//
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
// cache the resolved renderer for future use with these trProps
|
|
433
|
-
this.fontResolveMap[fontCacheString] = resolvedTextRenderer;
|
|
434
|
-
// Need to explicitly cast to TextRenderer because TS doesn't like
|
|
435
|
-
// the covariant state argument in the setter method map
|
|
436
|
-
return resolvedTextRenderer;
|
|
559
|
+
// If we have no font engines, return null
|
|
560
|
+
console.warn('No text renderers available. Your text will not render.');
|
|
561
|
+
return null;
|
|
437
562
|
}
|
|
438
563
|
createNode(props) {
|
|
439
564
|
const resolvedProps = this.resolveNodeDefaults(props);
|
|
440
565
|
return new CoreNode(this, resolvedProps);
|
|
441
566
|
}
|
|
442
567
|
createTextNode(props) {
|
|
443
|
-
const fontSize = props.fontSize
|
|
444
|
-
const resolvedProps =
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
overflowSuffix: props.overflowSuffix ?? '...',
|
|
464
|
-
debug: props.debug ?? {},
|
|
465
|
-
shaderProps: null,
|
|
466
|
-
};
|
|
467
|
-
const resolvedTextRenderer = this.resolveTextRenderer(resolvedProps, props.textRendererOverride);
|
|
568
|
+
const fontSize = props.fontSize || 16;
|
|
569
|
+
const resolvedProps = this.resolveNodeDefaults(props);
|
|
570
|
+
resolvedProps.text = props.text ?? '';
|
|
571
|
+
resolvedProps.textRendererOverride = props.textRendererOverride ?? null;
|
|
572
|
+
resolvedProps.fontSize = fontSize;
|
|
573
|
+
resolvedProps.fontFamily = props.fontFamily || 'sans-serif';
|
|
574
|
+
resolvedProps.fontStyle = props.fontStyle || 'normal';
|
|
575
|
+
resolvedProps.textAlign = props.textAlign || 'left';
|
|
576
|
+
resolvedProps.offsetY = props.offsetY || 0;
|
|
577
|
+
resolvedProps.letterSpacing = props.letterSpacing || 0;
|
|
578
|
+
resolvedProps.lineHeight = props.lineHeight || 1.2;
|
|
579
|
+
resolvedProps.maxLines = props.maxLines || 0;
|
|
580
|
+
resolvedProps.verticalAlign = props.verticalAlign || 'top';
|
|
581
|
+
resolvedProps.overflowSuffix = props.overflowSuffix || '...';
|
|
582
|
+
resolvedProps.wordBreak = props.wordBreak || 'break-word';
|
|
583
|
+
resolvedProps.contain = props.contain || 'none';
|
|
584
|
+
resolvedProps.maxWidth = props.maxWidth || 0;
|
|
585
|
+
resolvedProps.maxHeight = props.maxHeight || 0;
|
|
586
|
+
resolvedProps.forceLoad = props.forceLoad || false;
|
|
587
|
+
const resolvedTextRenderer = this.resolveTextRenderer(resolvedProps, resolvedProps.textRendererOverride);
|
|
468
588
|
if (!resolvedTextRenderer) {
|
|
469
589
|
throw new Error(`No compatible text renderer found for ${resolvedProps.fontFamily}`);
|
|
470
590
|
}
|
|
@@ -474,7 +594,75 @@ export class Stage {
|
|
|
474
594
|
this.boundsMargin = Array.isArray(value)
|
|
475
595
|
? value
|
|
476
596
|
: [value, value, value, value];
|
|
477
|
-
this.
|
|
597
|
+
this.updateViewportBounds();
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Update the viewport bounds
|
|
601
|
+
*/
|
|
602
|
+
updateViewportBounds() {
|
|
603
|
+
const { appWidth, appHeight } = this.options;
|
|
604
|
+
this.strictBound = createBound(0, 0, appWidth, appHeight);
|
|
605
|
+
this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
|
|
606
|
+
this.root.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
607
|
+
this.root.childUpdateType |= UpdateType.RenderBounds;
|
|
608
|
+
}
|
|
609
|
+
/** Find all nodes at a given point
|
|
610
|
+
* @param data
|
|
611
|
+
*/
|
|
612
|
+
findNodesAtPoint(data) {
|
|
613
|
+
const x = data.x / this.options.deviceLogicalPixelRatio;
|
|
614
|
+
const y = data.y / this.options.deviceLogicalPixelRatio;
|
|
615
|
+
const nodes = [];
|
|
616
|
+
for (const node of this.interactiveNodes) {
|
|
617
|
+
if (node.isRenderable === false) {
|
|
618
|
+
continue;
|
|
619
|
+
}
|
|
620
|
+
if (pointInBound(x, y, node.renderBound) === true) {
|
|
621
|
+
nodes.push(node);
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
return nodes;
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* Find the top node at a given point
|
|
628
|
+
* @param data
|
|
629
|
+
* @returns
|
|
630
|
+
*/
|
|
631
|
+
getNodeFromPosition(data) {
|
|
632
|
+
const nodes = this.findNodesAtPoint(data);
|
|
633
|
+
if (nodes.length === 0) {
|
|
634
|
+
return null;
|
|
635
|
+
}
|
|
636
|
+
//get last node in array (as top node)
|
|
637
|
+
let topNode = nodes[nodes.length - 1];
|
|
638
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
639
|
+
if (nodes[i].zIndex > topNode.zIndex) {
|
|
640
|
+
topNode = nodes[i];
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
return topNode || null;
|
|
644
|
+
}
|
|
645
|
+
/**
|
|
646
|
+
* add node to timeNodes arrays
|
|
647
|
+
* @param node
|
|
648
|
+
* @returns
|
|
649
|
+
*/
|
|
650
|
+
trackTimedNode(node) {
|
|
651
|
+
if (this.timedNodes[node.id] !== undefined) {
|
|
652
|
+
return;
|
|
653
|
+
}
|
|
654
|
+
this.timedNodes[node.id] = node;
|
|
655
|
+
}
|
|
656
|
+
/**
|
|
657
|
+
* remove node from timeNodes arrays
|
|
658
|
+
* @param node
|
|
659
|
+
* @returns
|
|
660
|
+
*/
|
|
661
|
+
untrackTimedNode(node) {
|
|
662
|
+
if (this.timedNodes[node.id] === undefined) {
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
665
|
+
delete this.timedNodes[node.id];
|
|
478
666
|
}
|
|
479
667
|
/**
|
|
480
668
|
* Resolves the default property values for a Node
|
|
@@ -489,60 +677,82 @@ export class Stage {
|
|
|
489
677
|
*/
|
|
490
678
|
resolveNodeDefaults(props) {
|
|
491
679
|
const color = props.color ?? 0xffffffff;
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
let
|
|
497
|
-
|
|
498
|
-
|
|
680
|
+
let colorTop = color;
|
|
681
|
+
let colorBottom = color;
|
|
682
|
+
let colorLeft = color;
|
|
683
|
+
let colorRight = color;
|
|
684
|
+
let colorTl = color;
|
|
685
|
+
let colorTr = color;
|
|
686
|
+
let colorBl = color;
|
|
687
|
+
let colorBr = color;
|
|
688
|
+
// Fast-path: Check if any complex color props are present
|
|
689
|
+
// We check values directly to avoid destructuring
|
|
690
|
+
if (props.colorTop !== undefined ||
|
|
691
|
+
props.colorBottom !== undefined ||
|
|
692
|
+
props.colorLeft !== undefined ||
|
|
693
|
+
props.colorRight !== undefined ||
|
|
694
|
+
props.colorTl !== undefined ||
|
|
695
|
+
props.colorTr !== undefined ||
|
|
696
|
+
props.colorBl !== undefined ||
|
|
697
|
+
props.colorBr !== undefined) {
|
|
698
|
+
const { colorTop: top, colorBottom: bottom, colorLeft: left, colorRight: right, } = props;
|
|
699
|
+
colorTop = top ?? color;
|
|
700
|
+
colorBottom = bottom ?? color;
|
|
701
|
+
colorLeft = left ?? color;
|
|
702
|
+
colorRight = right ?? color;
|
|
703
|
+
colorTl = props.colorTl ?? top ?? left ?? color;
|
|
704
|
+
colorTr = props.colorTr ?? top ?? right ?? color;
|
|
705
|
+
colorBl = props.colorBl ?? bottom ?? left ?? color;
|
|
706
|
+
colorBr = props.colorBr ?? bottom ?? right ?? color;
|
|
499
707
|
}
|
|
708
|
+
const scale = props.scale ?? null;
|
|
709
|
+
const mount = props.mount ?? 0;
|
|
710
|
+
const pivot = props.pivot ?? 0.5;
|
|
711
|
+
const data = !isProductionEnvironment && this.options.inspector
|
|
712
|
+
? santizeCustomDataMap(props.data ?? {})
|
|
713
|
+
: {};
|
|
500
714
|
return {
|
|
501
715
|
x: props.x ?? 0,
|
|
502
716
|
y: props.y ?? 0,
|
|
503
|
-
|
|
504
|
-
|
|
717
|
+
w: props.w ?? 0,
|
|
718
|
+
h: props.h ?? 0,
|
|
505
719
|
alpha: props.alpha ?? 1,
|
|
506
720
|
autosize: props.autosize ?? false,
|
|
507
721
|
boundsMargin: props.boundsMargin ?? null,
|
|
508
722
|
clipping: props.clipping ?? false,
|
|
509
723
|
color,
|
|
510
|
-
colorTop
|
|
511
|
-
colorBottom
|
|
512
|
-
colorLeft
|
|
513
|
-
colorRight
|
|
514
|
-
colorBl,
|
|
515
|
-
colorBr,
|
|
724
|
+
colorTop,
|
|
725
|
+
colorBottom,
|
|
726
|
+
colorLeft,
|
|
727
|
+
colorRight,
|
|
516
728
|
colorTl,
|
|
517
729
|
colorTr,
|
|
730
|
+
colorBl,
|
|
731
|
+
colorBr,
|
|
518
732
|
zIndex: props.zIndex ?? 0,
|
|
519
|
-
zIndexLocked: props.zIndexLocked ?? 0,
|
|
520
733
|
parent: props.parent ?? null,
|
|
521
734
|
texture: props.texture ?? null,
|
|
522
735
|
textureOptions: props.textureOptions ?? {},
|
|
523
736
|
shader: props.shader ?? this.defShaderNode,
|
|
524
|
-
// Since setting the `src` will trigger a texture load, we need to set it after
|
|
525
|
-
// we set the texture. Otherwise, problems happen.
|
|
526
737
|
src: props.src ?? null,
|
|
527
738
|
srcHeight: props.srcHeight,
|
|
528
739
|
srcWidth: props.srcWidth,
|
|
529
740
|
srcX: props.srcX,
|
|
530
741
|
srcY: props.srcY,
|
|
531
|
-
scale
|
|
532
|
-
scaleX: props.scaleX ??
|
|
533
|
-
scaleY: props.scaleY ??
|
|
534
|
-
mount
|
|
535
|
-
mountX: props.mountX ??
|
|
536
|
-
mountY: props.mountY ??
|
|
537
|
-
pivot
|
|
538
|
-
pivotX: props.pivotX ??
|
|
539
|
-
pivotY: props.pivotY ??
|
|
742
|
+
scale,
|
|
743
|
+
scaleX: props.scaleX ?? scale ?? 1,
|
|
744
|
+
scaleY: props.scaleY ?? scale ?? 1,
|
|
745
|
+
mount,
|
|
746
|
+
mountX: props.mountX ?? mount,
|
|
747
|
+
mountY: props.mountY ?? mount,
|
|
748
|
+
pivot,
|
|
749
|
+
pivotX: props.pivotX ?? pivot,
|
|
750
|
+
pivotY: props.pivotY ?? pivot,
|
|
540
751
|
rotation: props.rotation ?? 0,
|
|
541
752
|
rtt: props.rtt ?? false,
|
|
542
|
-
data
|
|
543
|
-
preventCleanup: props.preventCleanup ?? false,
|
|
753
|
+
data,
|
|
544
754
|
imageType: props.imageType,
|
|
545
|
-
|
|
755
|
+
interactive: props.interactive ?? false,
|
|
546
756
|
};
|
|
547
757
|
}
|
|
548
758
|
/**
|
|
@@ -551,8 +761,8 @@ export class Stage {
|
|
|
551
761
|
* @remarks
|
|
552
762
|
* This method is used to cleanup orphaned textures that are no longer in use.
|
|
553
763
|
*/
|
|
554
|
-
cleanup(
|
|
555
|
-
this.txMemManager.cleanup(
|
|
764
|
+
cleanup(full = false) {
|
|
765
|
+
this.txMemManager.cleanup(full);
|
|
556
766
|
}
|
|
557
767
|
set clearColor(value) {
|
|
558
768
|
this.renderer.updateClearColor(value);
|
|
@@ -562,5 +772,28 @@ export class Stage {
|
|
|
562
772
|
get clearColor() {
|
|
563
773
|
return this.clrColor;
|
|
564
774
|
}
|
|
775
|
+
/**
|
|
776
|
+
* Load a font using a specific text renderer type
|
|
777
|
+
*
|
|
778
|
+
* @remarks
|
|
779
|
+
* This method allows consumers to explicitly load fonts for a specific
|
|
780
|
+
* text renderer type (e.g., 'canvas', 'sdf'). Consumers must specify
|
|
781
|
+
* the renderer type to ensure fonts are loaded with the correct pipeline.
|
|
782
|
+
*
|
|
783
|
+
* For Canvas fonts, provide fontUrl (e.g., .ttf, .woff, .woff2)
|
|
784
|
+
* For SDF fonts, provide atlasUrl (image) and atlasDataUrl (JSON glyph data)
|
|
785
|
+
*
|
|
786
|
+
* @param rendererType - The type of text renderer ('canvas', 'sdf', etc.)
|
|
787
|
+
* @param options - Font loading options specific to the renderer type
|
|
788
|
+
* @returns Promise that resolves when the font is loaded
|
|
789
|
+
*/
|
|
790
|
+
async loadFont(rendererType, options) {
|
|
791
|
+
const rendererTypeKey = String(rendererType);
|
|
792
|
+
const fontHandler = this.fontHandlers[rendererTypeKey];
|
|
793
|
+
if (!fontHandler) {
|
|
794
|
+
throw new Error(`Font handler for renderer type '${rendererTypeKey}' not found. Available types: ${Object.keys(this.fontHandlers).join(', ')}`);
|
|
795
|
+
}
|
|
796
|
+
return fontHandler.loadFont(this, options);
|
|
797
|
+
}
|
|
565
798
|
}
|
|
566
799
|
//# sourceMappingURL=Stage.js.map
|