@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta21
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/README.md +16 -26
- package/dist/exports/canvas.d.ts +1 -1
- package/dist/exports/canvas.js +1 -1
- package/dist/exports/canvas.js.map +1 -1
- package/dist/exports/index.d.ts +2 -5
- package/dist/exports/index.js +1 -5
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/utils.d.ts +2 -1
- package/dist/exports/utils.js +2 -1
- package/dist/exports/utils.js.map +1 -1
- package/dist/exports/webgl.d.ts +2 -1
- package/dist/exports/webgl.js +2 -1
- package/dist/exports/webgl.js.map +1 -1
- package/dist/src/common/CommonTypes.d.ts +13 -2
- package/dist/src/core/Autosizer.d.ts +35 -0
- package/dist/src/core/Autosizer.js +196 -0
- package/dist/src/core/Autosizer.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +124 -100
- package/dist/src/core/CoreNode.js +720 -472
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.d.ts +3 -5
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +74 -87
- package/dist/src/core/CoreTextNode.js +355 -232
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +25 -13
- package/dist/src/core/CoreTextureManager.js +80 -104
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +93 -33
- package/dist/src/core/Stage.js +315 -151
- 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 +128 -109
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/Animation.d.ts +21 -0
- package/dist/src/core/animations/Animation.js +194 -0
- package/dist/src/core/animations/Animation.js.map +1 -0
- package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
- package/dist/src/core/animations/CoreAnimation.js +8 -3
- 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 -4
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/animations/Playback.d.ts +64 -0
- package/dist/src/core/animations/Playback.js +169 -0
- package/dist/src/core/animations/Playback.js.map +1 -0
- package/dist/src/core/animations/Transition.d.ts +27 -0
- package/dist/src/core/animations/Transition.js +52 -0
- package/dist/src/core/animations/Transition.js.map +1 -0
- package/dist/src/core/animations/utils.d.ts +2 -0
- package/dist/src/core/animations/utils.js +136 -0
- package/dist/src/core/animations/utils.js.map +1 -0
- package/dist/src/core/lib/ImageWorker.d.ts +2 -2
- package/dist/src/core/lib/ImageWorker.js +31 -12
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
- package/dist/src/core/lib/WebGlContextWrapper.js +105 -28
- 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 +100 -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/lib/colorParser.d.ts +21 -0
- package/dist/src/core/lib/colorParser.js +72 -0
- 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 -67
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +8 -2
- package/dist/src/core/lib/utils.js +43 -21
- 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/platform.js +30 -5
- package/dist/src/core/platform.js.map +1 -1
- package/dist/src/core/platforms/Platform.d.ts +42 -0
- package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
- 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 +87 -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.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +5 -30
- package/dist/src/core/renderers/CoreRenderer.js +1 -0
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderNode.d.ts +12 -1
- package/dist/src/core/renderers/CoreShaderNode.js +26 -0
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +65 -87
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
- 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 +17 -13
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +97 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +87 -42
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
- 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 -5
- 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 -52
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +11 -4
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -21
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +168 -152
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -4
- 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 +83 -43
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
- package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
- package/dist/src/core/shaders/canvas/Border.js +64 -25
- package/dist/src/core/shaders/canvas/Border.js.map +1 -1
- package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/canvas/LinearGradient.js +11 -7
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js +21 -17
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/Rounded.js +3 -3
- 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 +45 -7
- 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 +50 -11
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +10 -7
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/Shadow.js +4 -2
- 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 -18
- 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 -11
- 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 -3
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
- 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/RoundedWithBorderTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
- package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
- package/dist/src/core/shaders/utils.js.map +1 -0
- package/dist/src/core/shaders/webgl/Border.js +116 -35
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/Default.js +6 -7
- package/dist/src/core/shaders/webgl/Default.js.map +1 -1
- package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/Rounded.js +4 -2
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +153 -39
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +158 -43
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +6 -4
- 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 +7 -17
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
- package/dist/src/core/shaders/webgl/Shadow.js +12 -6
- 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 +224 -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 +157 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +303 -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 +383 -0
- package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
- package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
- package/dist/src/core/text-rendering/Utils.d.ts +30 -0
- package/dist/src/core/text-rendering/Utils.js +84 -0
- package/dist/src/core/text-rendering/Utils.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
- package/dist/src/core/textures/ColorTexture.d.ts +1 -1
- package/dist/src/core/textures/ColorTexture.js +3 -4
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +11 -4
- package/dist/src/core/textures/ImageTexture.js +31 -40
- 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 -8
- 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 -12
- 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 -37
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +87 -10
- package/dist/src/core/textures/Texture.js +160 -17
- 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 -1
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/INode.d.ts +2 -2
- package/dist/src/main-api/Inspector.d.ts +131 -2
- package/dist/src/main-api/Inspector.js +345 -28
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +295 -82
- package/dist/src/main-api/Renderer.js +223 -76
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/utils.d.ts +1 -6
- package/dist/src/utils.js +2 -9
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/exports/canvas.ts +1 -1
- package/exports/index.ts +2 -8
- package/exports/utils.ts +7 -1
- package/exports/webgl.ts +3 -1
- package/package.json +15 -17
- package/src/common/CommonTypes.ts +18 -2
- package/src/core/Autosizer.ts +224 -0
- package/src/core/CoreNode.test.ts +179 -17
- package/src/core/CoreNode.ts +895 -599
- package/src/core/CoreShaderManager.ts +5 -10
- package/src/core/CoreTextNode.ts +422 -286
- package/src/core/CoreTextureManager.ts +110 -130
- package/src/core/Stage.ts +397 -195
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +164 -141
- package/src/core/animations/CoreAnimation.ts +15 -9
- package/src/core/animations/CoreAnimationController.ts +13 -4
- package/src/core/lib/ImageWorker.ts +43 -12
- package/src/core/lib/WebGlContextWrapper.ts +127 -79
- package/src/core/lib/collectionUtils.ts +118 -0
- package/src/core/lib/colorCache.ts +20 -0
- package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
- package/src/core/lib/textureCompression.ts +433 -75
- package/src/core/lib/utils.ts +54 -25
- package/src/core/lib/validateImageBitmap.ts +17 -6
- package/src/core/platforms/Platform.ts +83 -0
- package/src/core/platforms/web/WebPlatform.ts +132 -0
- package/src/core/renderers/CoreContextTexture.ts +2 -1
- package/src/core/renderers/CoreRenderer.ts +5 -32
- package/src/core/renderers/CoreShaderNode.ts +38 -3
- package/src/core/renderers/canvas/CanvasRenderer.ts +84 -126
- package/src/core/renderers/canvas/CanvasShaderNode.ts +4 -8
- package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
- package/src/core/renderers/webgl/SdfRenderOp.ts +105 -0
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -84
- package/src/core/renderers/webgl/WebGlRenderer.ts +203 -190
- package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -11
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +101 -53
- package/src/core/shaders/canvas/Border.ts +88 -34
- package/src/core/shaders/canvas/HolePunch.ts +5 -11
- package/src/core/shaders/canvas/LinearGradient.ts +14 -10
- package/src/core/shaders/canvas/RadialGradient.ts +24 -41
- package/src/core/shaders/canvas/Rounded.ts +7 -7
- package/src/core/shaders/canvas/RoundedWithBorder.ts +77 -23
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +84 -36
- package/src/core/shaders/canvas/RoundedWithShadow.ts +15 -13
- package/src/core/shaders/canvas/Shadow.ts +7 -5
- package/src/core/shaders/canvas/utils/render.ts +45 -36
- package/src/core/shaders/templates/BorderTemplate.ts +42 -12
- package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
- package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
- package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
- package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
- package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
- package/src/core/shaders/webgl/Border.ts +116 -39
- package/src/core/shaders/webgl/Default.ts +6 -7
- package/src/core/shaders/webgl/HolePunch.ts +4 -7
- package/src/core/shaders/webgl/LinearGradient.ts +33 -8
- package/src/core/shaders/webgl/RadialGradient.ts +58 -34
- package/src/core/shaders/webgl/Rounded.ts +4 -6
- package/src/core/shaders/webgl/RoundedWithBorder.ts +154 -46
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +159 -52
- package/src/core/shaders/webgl/RoundedWithShadow.ts +6 -8
- package/src/core/shaders/webgl/SdfShader.ts +7 -19
- package/src/core/shaders/webgl/Shadow.ts +12 -6
- package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
- package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
- package/src/core/text-rendering/SdfFontHandler.ts +591 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +408 -0
- package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
- package/src/core/text-rendering/TextRenderer.ts +444 -0
- package/src/core/text-rendering/Utils.ts +99 -0
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
- package/src/core/textures/ColorTexture.ts +7 -5
- package/src/core/textures/ImageTexture.ts +78 -66
- package/src/core/textures/NoiseTexture.ts +14 -12
- package/src/core/textures/RenderTexture.ts +18 -16
- package/src/core/textures/SubTexture.ts +25 -46
- package/src/core/textures/Texture.ts +207 -24
- package/src/core/utils.ts +9 -7
- package/src/main-api/INode.ts +4 -3
- package/src/main-api/Inspector.ts +577 -36
- package/src/main-api/Renderer.ts +518 -139
- package/src/utils.ts +10 -10
- package/dist/exports/core-api.d.ts +0 -74
- package/dist/exports/core-api.js +0 -96
- package/dist/exports/core-api.js.map +0 -1
- package/dist/exports/main-api.d.ts +0 -30
- package/dist/exports/main-api.js +0 -45
- package/dist/exports/main-api.js.map +0 -1
- package/dist/src/core/CoreExtension.d.ts +0 -12
- package/dist/src/core/CoreExtension.js +0 -29
- package/dist/src/core/CoreExtension.js.map +0 -1
- package/dist/src/core/CoreStuff.d.ts +0 -1
- package/dist/src/core/CoreStuff.js +0 -138
- package/dist/src/core/CoreStuff.js.map +0 -1
- package/dist/src/core/CoreTexturizer.d.ts +0 -14
- package/dist/src/core/CoreTexturizer.js +0 -47
- package/dist/src/core/CoreTexturizer.js.map +0 -1
- package/dist/src/core/LngNode.d.ts +0 -736
- package/dist/src/core/LngNode.js +0 -1174
- package/dist/src/core/LngNode.js.map +0 -1
- package/dist/src/core/Matrix2DContext.d.ts +0 -15
- package/dist/src/core/Matrix2DContext.js +0 -45
- package/dist/src/core/Matrix2DContext.js.map +0 -1
- package/dist/src/core/ShaderNode.d.ts +0 -10
- package/dist/src/core/ShaderNode.js +0 -30
- package/dist/src/core/ShaderNode.js.map +0 -1
- package/dist/src/core/TextNode.d.ts +0 -103
- package/dist/src/core/TextNode.js +0 -331
- package/dist/src/core/TextNode.js.map +0 -1
- package/dist/src/core/lib/Coords.d.ts +0 -14
- package/dist/src/core/lib/Coords.js +0 -55
- package/dist/src/core/lib/Coords.js.map +0 -1
- package/dist/src/core/lib/glm/common.d.ts +0 -162
- package/dist/src/core/lib/glm/common.js +0 -81
- package/dist/src/core/lib/glm/common.js.map +0 -1
- package/dist/src/core/lib/glm/index.d.ts +0 -11
- package/dist/src/core/lib/glm/index.js +0 -30
- package/dist/src/core/lib/glm/index.js.map +0 -1
- package/dist/src/core/lib/glm/mat2.d.ts +0 -219
- package/dist/src/core/lib/glm/mat2.js +0 -396
- package/dist/src/core/lib/glm/mat2.js.map +0 -1
- package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
- package/dist/src/core/lib/glm/mat2d.js +0 -442
- package/dist/src/core/lib/glm/mat2d.js.map +0 -1
- package/dist/src/core/lib/glm/mat3.d.ts +0 -283
- package/dist/src/core/lib/glm/mat3.js +0 -680
- package/dist/src/core/lib/glm/mat3.js.map +0 -1
- package/dist/src/core/lib/glm/mat4.d.ts +0 -550
- package/dist/src/core/lib/glm/mat4.js +0 -1802
- package/dist/src/core/lib/glm/mat4.js.map +0 -1
- package/dist/src/core/lib/glm/quat.d.ts +0 -363
- package/dist/src/core/lib/glm/quat.js +0 -693
- package/dist/src/core/lib/glm/quat.js.map +0 -1
- package/dist/src/core/lib/glm/quat2.d.ts +0 -356
- package/dist/src/core/lib/glm/quat2.js +0 -754
- package/dist/src/core/lib/glm/quat2.js.map +0 -1
- package/dist/src/core/lib/glm/vec2.d.ts +0 -365
- package/dist/src/core/lib/glm/vec2.js +0 -569
- package/dist/src/core/lib/glm/vec2.js.map +0 -1
- package/dist/src/core/lib/glm/vec3.d.ts +0 -406
- package/dist/src/core/lib/glm/vec3.js +0 -720
- package/dist/src/core/lib/glm/vec3.js.map +0 -1
- package/dist/src/core/lib/glm/vec4.d.ts +0 -330
- package/dist/src/core/lib/glm/vec4.js +0 -608
- package/dist/src/core/lib/glm/vec4.js.map +0 -1
- package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
- package/dist/src/core/renderers/CoreShaderManager.js +0 -33
- package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
- package/dist/src/core/scene/Scene.d.ts +0 -59
- package/dist/src/core/scene/Scene.js +0 -106
- package/dist/src/core/scene/Scene.js.map +0 -1
- package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
- package/dist/src/main-api/ICoreDriver.d.ts +0 -27
- package/dist/src/main-api/ICoreDriver.js.map +0 -1
- package/dist/src/main-api/IRenderDriver.d.ts +0 -20
- package/dist/src/main-api/IRenderDriver.js.map +0 -1
- package/dist/src/main-api/IShaderController.d.ts +0 -14
- package/dist/src/main-api/IShaderController.js +0 -30
- package/dist/src/main-api/IShaderController.js.map +0 -1
- package/dist/src/main-api/IShaderNode.d.ts +0 -17
- package/dist/src/main-api/IShaderNode.js +0 -19
- package/dist/src/main-api/IShaderNode.js.map +0 -1
- package/dist/src/main-api/RendererMain.d.ts +0 -375
- package/dist/src/main-api/RendererMain.js +0 -365
- package/dist/src/main-api/RendererMain.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
- package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
- package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
- package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
- package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
- package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
- package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
- package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
- package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
- package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
- package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
- package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
- package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
- package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
- package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
- package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
- package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
- package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
- package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
- package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
- package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
- package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
- package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
- package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
- package/dist/src/render-drivers/utils.d.ts +0 -12
- package/dist/src/render-drivers/utils.js +0 -69
- package/dist/src/render-drivers/utils.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 -161
- 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 -840
- 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/src/core/Stage.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* See the License for the specific language governing permissions and
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
import { assertTruthy, setPremultiplyMode } from '../utils.js';
|
|
21
21
|
import { AnimationManager } from './animations/AnimationManager.js';
|
|
22
22
|
import {
|
|
@@ -26,13 +26,14 @@ import {
|
|
|
26
26
|
type CoreNodeProps,
|
|
27
27
|
} from './CoreNode.js';
|
|
28
28
|
import { CoreTextureManager } from './CoreTextureManager.js';
|
|
29
|
-
import { TrFontManager } from './text-rendering/TrFontManager.js';
|
|
30
29
|
import { CoreShaderManager } from './CoreShaderManager.js';
|
|
31
30
|
import {
|
|
32
|
-
|
|
33
|
-
type
|
|
31
|
+
type FontHandler,
|
|
32
|
+
type FontLoadOptions,
|
|
33
|
+
type TextRenderer,
|
|
34
|
+
type TextRenderers,
|
|
34
35
|
type TrProps,
|
|
35
|
-
} from './text-rendering/
|
|
36
|
+
} from './text-rendering/TextRenderer.js';
|
|
36
37
|
|
|
37
38
|
import { EventEmitter } from '../common/EventEmitter.js';
|
|
38
39
|
import { ContextSpy } from './lib/ContextSpy.js';
|
|
@@ -46,39 +47,30 @@ import {
|
|
|
46
47
|
type TextureMemoryManagerSettings,
|
|
47
48
|
} from './TextureMemoryManager.js';
|
|
48
49
|
import { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
49
|
-
import type { WebGlRenderer } from './renderers/webgl/WebGlRenderer.js';
|
|
50
|
-
import type { CanvasRenderer } from './renderers/canvas/CanvasRenderer.js';
|
|
51
50
|
import { CoreTextNode, type CoreTextNodeProps } from './CoreTextNode.js';
|
|
52
51
|
import { santizeCustomDataMap } from '../main-api/utils.js';
|
|
53
|
-
import
|
|
54
|
-
import type { CanvasTextRenderer } from './text-rendering/renderers/CanvasTextRenderer.js';
|
|
52
|
+
import { pointInBound } from './lib/utils.js';
|
|
55
53
|
import type { CoreShaderNode } from './renderers/CoreShaderNode.js';
|
|
56
54
|
import { createBound, createPreloadBounds, type Bound } from './lib/utils.js';
|
|
57
55
|
import type { Texture } from './textures/Texture.js';
|
|
58
56
|
import { ColorTexture } from './textures/ColorTexture.js';
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
import type { Platform } from './platforms/Platform.js';
|
|
58
|
+
import type { WebPlatform } from './platforms/web/WebPlatform.js';
|
|
59
|
+
import type { RendererMainSettings } from '../main-api/Renderer.js';
|
|
60
|
+
|
|
61
|
+
export type StageOptions = Omit<
|
|
62
|
+
RendererMainSettings,
|
|
63
|
+
'inspector' | 'platform' | 'maxRetryCount'
|
|
64
|
+
> & {
|
|
63
65
|
textureMemory: TextureMemoryManagerSettings;
|
|
64
|
-
boundsMargin: number | [number, number, number, number];
|
|
65
|
-
deviceLogicalPixelRatio: number;
|
|
66
|
-
devicePhysicalPixelRatio: number;
|
|
67
66
|
canvas: HTMLCanvasElement | OffscreenCanvas;
|
|
68
|
-
clearColor: number;
|
|
69
67
|
fpsUpdateInterval: number;
|
|
70
|
-
enableContextSpy: boolean;
|
|
71
|
-
forceWebGL2: boolean;
|
|
72
|
-
numImageWorkers: number;
|
|
73
|
-
renderEngine: typeof WebGlRenderer | typeof CanvasRenderer;
|
|
74
68
|
eventBus: EventEmitter;
|
|
75
|
-
|
|
76
|
-
fontEngines: (typeof CanvasTextRenderer | typeof SdfTextRenderer)[];
|
|
69
|
+
platform: Platform | WebPlatform;
|
|
77
70
|
inspector: boolean;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
71
|
+
maxRetryCount: number;
|
|
72
|
+
enableClear: boolean;
|
|
73
|
+
};
|
|
82
74
|
|
|
83
75
|
export type StageFpsUpdateHandler = (
|
|
84
76
|
stage: Stage,
|
|
@@ -90,6 +82,11 @@ export type StageFrameTickHandler = (
|
|
|
90
82
|
frameTickData: FrameTickPayload,
|
|
91
83
|
) => void;
|
|
92
84
|
|
|
85
|
+
export interface Point {
|
|
86
|
+
x: number;
|
|
87
|
+
y: number;
|
|
88
|
+
}
|
|
89
|
+
|
|
93
90
|
const autoStart = true;
|
|
94
91
|
|
|
95
92
|
export class Stage {
|
|
@@ -97,19 +94,32 @@ export class Stage {
|
|
|
97
94
|
public readonly animationManager: AnimationManager;
|
|
98
95
|
public readonly txManager: CoreTextureManager;
|
|
99
96
|
public readonly txMemManager: TextureMemoryManager;
|
|
100
|
-
public readonly
|
|
101
|
-
public readonly
|
|
97
|
+
public readonly textRenderers: Record<string, TextRenderer> = {};
|
|
98
|
+
public readonly fontHandlers: Record<string, FontHandler> = {};
|
|
102
99
|
public readonly shManager: CoreShaderManager;
|
|
103
100
|
public readonly renderer: CoreRenderer;
|
|
104
101
|
public readonly root: CoreNode;
|
|
102
|
+
public readonly interactiveNodes: Set<CoreNode> = new Set();
|
|
105
103
|
public boundsMargin: [number, number, number, number];
|
|
106
104
|
public readonly defShaderNode: CoreShaderNode | null = null;
|
|
107
|
-
public
|
|
108
|
-
public
|
|
109
|
-
public readonly strictBounds: boolean;
|
|
105
|
+
public strictBound: Bound;
|
|
106
|
+
public preloadBound: Bound;
|
|
110
107
|
public readonly defaultTexture: Texture | null = null;
|
|
111
|
-
public
|
|
108
|
+
public pixelRatio: number;
|
|
112
109
|
public readonly bufferMemory: number = 2e6;
|
|
110
|
+
public readonly platform: Platform | WebPlatform;
|
|
111
|
+
public readonly calculateTextureCoord: boolean;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Target frame time in milliseconds (calculated from targetFPS)
|
|
115
|
+
*
|
|
116
|
+
* @remarks
|
|
117
|
+
* This is pre-calculated to avoid recalculating on every frame.
|
|
118
|
+
* - 0 means no throttling (use display refresh rate)
|
|
119
|
+
* - >0 means throttle to this frame time (1000 / targetFPS)
|
|
120
|
+
*/
|
|
121
|
+
public targetFrameTime: number = 0;
|
|
122
|
+
|
|
113
123
|
/**
|
|
114
124
|
* Renderer Event Bus for the Stage to emit events onto
|
|
115
125
|
*
|
|
@@ -121,25 +131,33 @@ export class Stage {
|
|
|
121
131
|
public readonly eventBus: EventEmitter;
|
|
122
132
|
|
|
123
133
|
/// State
|
|
134
|
+
startTime = 0;
|
|
124
135
|
deltaTime = 0;
|
|
125
136
|
lastFrameTime = 0;
|
|
126
137
|
currentFrameTime = 0;
|
|
138
|
+
elapsedTime = 0;
|
|
139
|
+
private timedNodes: CoreNode[] = [];
|
|
127
140
|
private clrColor = 0x00000000;
|
|
128
141
|
private fpsNumFrames = 0;
|
|
129
142
|
private fpsElapsedTime = 0;
|
|
130
143
|
private numQuadsRendered = 0;
|
|
131
144
|
private renderRequested = false;
|
|
132
145
|
private frameEventQueue: [name: string, payload: unknown][] = [];
|
|
133
|
-
private fontResolveMap: Record<string, CanvasTextRenderer | SdfTextRenderer> =
|
|
134
|
-
{};
|
|
135
146
|
|
|
136
|
-
|
|
147
|
+
// Font resolve optimisation flags
|
|
148
|
+
private hasOnlyOneFontEngine: boolean;
|
|
149
|
+
private hasOnlyCanvasFontEngine: boolean;
|
|
150
|
+
private hasCanvasEngine: boolean;
|
|
151
|
+
private singleFontEngine: TextRenderer | null = null;
|
|
152
|
+
private singleFontHandler: FontHandler | null = null;
|
|
153
|
+
|
|
154
|
+
// Debug data
|
|
137
155
|
contextSpy: ContextSpy | null = null;
|
|
138
156
|
|
|
139
157
|
/**
|
|
140
158
|
* Stage constructor
|
|
141
159
|
*/
|
|
142
|
-
constructor(
|
|
160
|
+
constructor(public options: StageOptions) {
|
|
143
161
|
const {
|
|
144
162
|
canvas,
|
|
145
163
|
clearColor,
|
|
@@ -153,12 +171,28 @@ export class Stage {
|
|
|
153
171
|
renderEngine,
|
|
154
172
|
fontEngines,
|
|
155
173
|
createImageBitmapSupport,
|
|
174
|
+
platform,
|
|
175
|
+
maxRetryCount,
|
|
156
176
|
} = options;
|
|
157
177
|
|
|
178
|
+
assertTruthy(
|
|
179
|
+
platform !== null,
|
|
180
|
+
'A CorePlatform is not provided in the options',
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
this.platform = platform;
|
|
184
|
+
|
|
185
|
+
this.startTime = platform.getTimeStamp();
|
|
186
|
+
|
|
158
187
|
this.eventBus = options.eventBus;
|
|
188
|
+
|
|
189
|
+
// Calculate target frame time from targetFPS option
|
|
190
|
+
this.targetFrameTime = options.targetFPS > 0 ? 1000 / options.targetFPS : 0;
|
|
191
|
+
|
|
159
192
|
this.txManager = new CoreTextureManager(this, {
|
|
160
193
|
numImageWorkers,
|
|
161
194
|
createImageBitmapSupport,
|
|
195
|
+
maxRetryCount,
|
|
162
196
|
});
|
|
163
197
|
|
|
164
198
|
// Wait for the Texture Manager to initialize
|
|
@@ -171,7 +205,6 @@ export class Stage {
|
|
|
171
205
|
|
|
172
206
|
this.animationManager = new AnimationManager();
|
|
173
207
|
this.contextSpy = enableContextSpy ? new ContextSpy() : null;
|
|
174
|
-
this.strictBounds = options.strictBounds;
|
|
175
208
|
|
|
176
209
|
let bm = [0, 0, 0, 0] as [number, number, number, number];
|
|
177
210
|
if (boundsMargin) {
|
|
@@ -200,6 +233,7 @@ export class Stage {
|
|
|
200
233
|
this.shManager = new CoreShaderManager(this);
|
|
201
234
|
|
|
202
235
|
this.defShaderNode = this.renderer.getDefaultShaderNode();
|
|
236
|
+
this.calculateTextureCoord = this.renderer.getTextureCoords !== undefined;
|
|
203
237
|
|
|
204
238
|
const renderMode = this.renderer.mode || 'webgl';
|
|
205
239
|
|
|
@@ -210,40 +244,92 @@ export class Stage {
|
|
|
210
244
|
this.txManager.renderer = this.renderer;
|
|
211
245
|
|
|
212
246
|
// Create text renderers
|
|
213
|
-
this.
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
247
|
+
this.hasOnlyOneFontEngine = fontEngines.length === 1;
|
|
248
|
+
this.hasOnlyCanvasFontEngine =
|
|
249
|
+
fontEngines.length === 1 && fontEngines[0]!.type === 'canvas';
|
|
250
|
+
this.hasCanvasEngine = false;
|
|
251
|
+
this.singleFontEngine = this.hasOnlyOneFontEngine
|
|
252
|
+
? (fontEngines[0] as TextRenderer)
|
|
253
|
+
: null;
|
|
254
|
+
this.singleFontHandler = this.hasOnlyOneFontEngine
|
|
255
|
+
? (fontEngines[0]?.font as FontHandler)
|
|
256
|
+
: null;
|
|
257
|
+
|
|
258
|
+
if (this.singleFontEngine === null) {
|
|
259
|
+
// Multiple font engines case
|
|
260
|
+
// Filter out incompatible engines first
|
|
261
|
+
const compatibleEngines = fontEngines.filter(
|
|
262
|
+
(fontEngine: TextRenderer) => {
|
|
263
|
+
const type = fontEngine.type;
|
|
264
|
+
|
|
265
|
+
if (type === 'sdf' && renderMode === 'canvas') {
|
|
266
|
+
console.warn(
|
|
267
|
+
'MsdfTextRenderer is not compatible with Canvas renderer. Skipping...',
|
|
268
|
+
);
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (type === 'canvas') {
|
|
273
|
+
this.hasCanvasEngine = true;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return true;
|
|
277
|
+
},
|
|
278
|
+
);
|
|
279
|
+
|
|
280
|
+
// Sort engines: SDF first, Canvas last, others in between
|
|
281
|
+
const sortedEngines = compatibleEngines.sort(
|
|
282
|
+
(a: TextRenderer, b: TextRenderer) => {
|
|
283
|
+
if (a.type === 'sdf') return -1;
|
|
284
|
+
if (b.type === 'sdf') return 1;
|
|
285
|
+
if (a.type === 'canvas') return 1;
|
|
286
|
+
if (b.type === 'canvas') return -1;
|
|
287
|
+
return 0;
|
|
288
|
+
},
|
|
289
|
+
);
|
|
290
|
+
|
|
291
|
+
// Initialize engines in sorted order
|
|
292
|
+
sortedEngines.forEach((fontEngine: TextRenderer) => {
|
|
293
|
+
const type = fontEngine.type;
|
|
294
|
+
|
|
295
|
+
// Add to map for type-based access
|
|
296
|
+
this.textRenderers[type] = fontEngine;
|
|
297
|
+
this.textRenderers[type].init(this);
|
|
298
|
+
|
|
299
|
+
this.fontHandlers[type] = fontEngine.font;
|
|
300
|
+
});
|
|
301
|
+
} else {
|
|
302
|
+
// Single font engine case - initialize it directly
|
|
303
|
+
const fontEngine = this.singleFontEngine;
|
|
304
|
+
const type = fontEngine.type;
|
|
217
305
|
|
|
218
|
-
|
|
306
|
+
// Check compatibility
|
|
307
|
+
if (type === 'sdf' && renderMode === 'canvas') {
|
|
219
308
|
console.warn(
|
|
220
|
-
'
|
|
309
|
+
'MsdfTextRenderer is not compatible with Canvas renderer. Skipping...',
|
|
221
310
|
);
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
if (fontEngineInstance instanceof TextRenderer) {
|
|
226
|
-
if (className === 'canvas') {
|
|
227
|
-
this.textRenderers['canvas'] =
|
|
228
|
-
fontEngineInstance as CanvasTextRenderer;
|
|
229
|
-
} else if (className === 'sdf') {
|
|
230
|
-
this.textRenderers['sdf'] = fontEngineInstance as SdfTextRenderer;
|
|
311
|
+
} else {
|
|
312
|
+
if (type === 'canvas') {
|
|
313
|
+
this.hasCanvasEngine = true;
|
|
231
314
|
}
|
|
315
|
+
|
|
316
|
+
// Add to map for type-based access
|
|
317
|
+
this.textRenderers[type] = fontEngine;
|
|
318
|
+
this.fontHandlers[type] = fontEngine.font;
|
|
319
|
+
this.textRenderers[type].init(this);
|
|
232
320
|
}
|
|
233
|
-
}
|
|
321
|
+
}
|
|
234
322
|
|
|
235
323
|
if (Object.keys(this.textRenderers).length === 0) {
|
|
236
324
|
console.warn('No text renderers available. Your text will not render.');
|
|
237
325
|
}
|
|
238
326
|
|
|
239
|
-
this.fontManager = new TrFontManager(this.textRenderers);
|
|
240
|
-
|
|
241
327
|
// create root node
|
|
242
328
|
const rootNode = new CoreNode(this, {
|
|
243
329
|
x: 0,
|
|
244
330
|
y: 0,
|
|
245
|
-
|
|
246
|
-
|
|
331
|
+
w: appWidth,
|
|
332
|
+
h: appHeight,
|
|
247
333
|
alpha: 1,
|
|
248
334
|
autosize: false,
|
|
249
335
|
boundsMargin: null,
|
|
@@ -258,7 +344,6 @@ export class Stage {
|
|
|
258
344
|
colorBl: 0x00000000,
|
|
259
345
|
colorBr: 0x00000000,
|
|
260
346
|
zIndex: 0,
|
|
261
|
-
zIndexLocked: 0,
|
|
262
347
|
scaleX: 1,
|
|
263
348
|
scaleY: 1,
|
|
264
349
|
mountX: 0,
|
|
@@ -275,15 +360,13 @@ export class Stage {
|
|
|
275
360
|
rtt: false,
|
|
276
361
|
src: null,
|
|
277
362
|
scale: 1,
|
|
278
|
-
preventCleanup: false,
|
|
279
|
-
strictBounds: this.strictBounds,
|
|
280
363
|
});
|
|
281
364
|
|
|
282
365
|
this.root = rootNode;
|
|
283
366
|
|
|
284
367
|
// execute platform start loop
|
|
285
|
-
if (autoStart) {
|
|
286
|
-
startLoop(this);
|
|
368
|
+
if (autoStart === true) {
|
|
369
|
+
this.platform.startLoop(this);
|
|
287
370
|
}
|
|
288
371
|
}
|
|
289
372
|
|
|
@@ -293,10 +376,25 @@ export class Stage {
|
|
|
293
376
|
this.renderRequested = true;
|
|
294
377
|
}
|
|
295
378
|
|
|
379
|
+
/**
|
|
380
|
+
* Update the target frame time based on the current targetFPS setting
|
|
381
|
+
*
|
|
382
|
+
* @remarks
|
|
383
|
+
* This should be called whenever the targetFPS option is changed
|
|
384
|
+
* to ensure targetFrameTime stays in sync.
|
|
385
|
+
* targetFPS of 0 means no throttling (targetFrameTime = 0)
|
|
386
|
+
* targetFPS > 0 means throttle to 1000/targetFPS milliseconds
|
|
387
|
+
*/
|
|
388
|
+
updateTargetFrameTime() {
|
|
389
|
+
this.targetFrameTime =
|
|
390
|
+
this.options.targetFPS > 0 ? 1000 / this.options.targetFPS : 0;
|
|
391
|
+
}
|
|
392
|
+
|
|
296
393
|
updateFrameTime() {
|
|
297
|
-
const newFrameTime = getTimeStamp();
|
|
394
|
+
const newFrameTime = this.platform.getTimeStamp();
|
|
298
395
|
this.lastFrameTime = this.currentFrameTime;
|
|
299
396
|
this.currentFrameTime = newFrameTime;
|
|
397
|
+
this.elapsedTime = newFrameTime - this.startTime;
|
|
300
398
|
this.deltaTime = !this.lastFrameTime
|
|
301
399
|
? 100 / 6
|
|
302
400
|
: newFrameTime - this.lastFrameTime;
|
|
@@ -315,7 +413,6 @@ export class Stage {
|
|
|
315
413
|
* Create default PixelTexture
|
|
316
414
|
*/
|
|
317
415
|
createDefaultTexture() {
|
|
318
|
-
console.log('Creating default texture');
|
|
319
416
|
(this.defaultTexture as ColorTexture) = this.txManager.createTexture(
|
|
320
417
|
'ColorTexture',
|
|
321
418
|
{
|
|
@@ -329,7 +426,7 @@ export class Stage {
|
|
|
329
426
|
// Mark the default texture as ALWAYS renderable
|
|
330
427
|
// This prevents it from ever being cleaned up.
|
|
331
428
|
// Fixes https://github.com/lightning-js/renderer/issues/262
|
|
332
|
-
this.defaultTexture.setRenderableOwner(
|
|
429
|
+
this.defaultTexture.setRenderableOwner('stage', true);
|
|
333
430
|
|
|
334
431
|
// When the default texture is loaded, request a render in case the
|
|
335
432
|
// RAF is paused. Fixes: https://github.com/lightning-js/renderer/issues/123
|
|
@@ -365,30 +462,27 @@ export class Stage {
|
|
|
365
462
|
* Start a new frame draw
|
|
366
463
|
*/
|
|
367
464
|
drawFrame() {
|
|
368
|
-
const { renderer, renderRequested } = this;
|
|
369
|
-
|
|
465
|
+
const { renderer, renderRequested, root } = this;
|
|
466
|
+
const txMemManager = this.txMemManager;
|
|
370
467
|
|
|
371
468
|
// Update tree if needed
|
|
372
|
-
if (
|
|
373
|
-
|
|
469
|
+
if (root.updateType !== 0) {
|
|
470
|
+
root.update(this.deltaTime, root.clippingRect);
|
|
374
471
|
}
|
|
375
472
|
|
|
376
|
-
// Process some textures
|
|
377
|
-
|
|
473
|
+
// Process some textures asynchronously but don't block the frame
|
|
474
|
+
// Use a background task to prevent frame drops
|
|
475
|
+
if (this.txManager.hasUpdates() === true) {
|
|
476
|
+
this.txManager
|
|
477
|
+
.processSome(this.options.textureProcessingTimeLimit)
|
|
478
|
+
.catch((err) => {
|
|
479
|
+
console.error('Error processing textures:', err);
|
|
480
|
+
});
|
|
481
|
+
}
|
|
378
482
|
|
|
379
483
|
// Reset render operations and clear the canvas
|
|
380
484
|
renderer.reset();
|
|
381
485
|
|
|
382
|
-
// Check if we need to cleanup textures
|
|
383
|
-
if (this.txMemManager.criticalCleanupRequested === true) {
|
|
384
|
-
this.txMemManager.cleanup(false);
|
|
385
|
-
|
|
386
|
-
if (this.txMemManager.criticalCleanupRequested === true) {
|
|
387
|
-
// If we still need to cleanup, request another but aggressive cleanup
|
|
388
|
-
this.txMemManager.cleanup(true);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
486
|
// If we have RTT nodes draw them first
|
|
393
487
|
// So we can use them as textures in the main scene
|
|
394
488
|
if (renderer.rttNodes.length > 0) {
|
|
@@ -399,15 +493,28 @@ export class Stage {
|
|
|
399
493
|
this.addQuads(this.root);
|
|
400
494
|
|
|
401
495
|
// Perform render pass
|
|
402
|
-
renderer
|
|
496
|
+
renderer.render();
|
|
403
497
|
|
|
404
498
|
this.calculateFps();
|
|
405
499
|
this.calculateQuads();
|
|
406
500
|
|
|
407
501
|
// Reset renderRequested flag if it was set
|
|
408
|
-
if (renderRequested) {
|
|
502
|
+
if (renderRequested === true) {
|
|
409
503
|
this.renderRequested = false;
|
|
410
504
|
}
|
|
505
|
+
|
|
506
|
+
if (this.timedNodes.length > 0) {
|
|
507
|
+
for (let key in this.timedNodes) {
|
|
508
|
+
if (this.timedNodes[key]!.isRenderable === true) {
|
|
509
|
+
this.requestRender();
|
|
510
|
+
break;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
// Check if we need to cleanup textures
|
|
515
|
+
if (this.txMemManager.criticalCleanupRequested === true) {
|
|
516
|
+
this.txMemManager.cleanup();
|
|
517
|
+
}
|
|
411
518
|
}
|
|
412
519
|
|
|
413
520
|
/**
|
|
@@ -493,8 +600,7 @@ export class Stage {
|
|
|
493
600
|
|
|
494
601
|
if (
|
|
495
602
|
child.worldAlpha === 0 ||
|
|
496
|
-
|
|
497
|
-
child.renderState === CoreNodeRenderState.OutOfBounds)
|
|
603
|
+
child.renderState === CoreNodeRenderState.OutOfBounds
|
|
498
604
|
) {
|
|
499
605
|
continue;
|
|
500
606
|
}
|
|
@@ -522,72 +628,52 @@ export class Stage {
|
|
|
522
628
|
*/
|
|
523
629
|
resolveTextRenderer(
|
|
524
630
|
trProps: TrProps,
|
|
525
|
-
textRendererOverride: keyof
|
|
631
|
+
textRendererOverride: keyof TextRenderers | null = null,
|
|
526
632
|
): TextRenderer | null {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
633
|
+
// If we have an overide, return it
|
|
634
|
+
if (textRendererOverride !== null) {
|
|
635
|
+
const overrideKey = String(textRendererOverride);
|
|
636
|
+
if (this.textRenderers[overrideKey] === undefined) {
|
|
637
|
+
console.warn(`Text renderer override '${overrideKey}' not found.`);
|
|
638
|
+
return null;
|
|
639
|
+
}
|
|
530
640
|
|
|
531
|
-
|
|
532
|
-
if (this.fontResolveMap[fontCacheString] !== undefined) {
|
|
533
|
-
return this.fontResolveMap[fontCacheString] as unknown as TextRenderer;
|
|
641
|
+
return this.textRenderers[overrideKey];
|
|
534
642
|
}
|
|
535
643
|
|
|
536
|
-
//
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
if (rendererId) {
|
|
542
|
-
const possibleRenderer = this.textRenderers[rendererId];
|
|
543
|
-
if (!possibleRenderer) {
|
|
544
|
-
console.warn(`Text renderer override '${rendererId}' not found.`);
|
|
545
|
-
rendererId = null;
|
|
546
|
-
overrideFallback = true;
|
|
547
|
-
} else if (!possibleRenderer.canRenderFont(trProps)) {
|
|
548
|
-
console.warn(
|
|
549
|
-
`Cannot use override text renderer '${rendererId}' for font`,
|
|
550
|
-
trProps,
|
|
551
|
-
);
|
|
552
|
-
rendererId = null;
|
|
553
|
-
overrideFallback = true;
|
|
644
|
+
// If we have only one font engine early return it
|
|
645
|
+
if (this.singleFontEngine !== null) {
|
|
646
|
+
// If we have only one font engine and its the canvas engine, we can just return it
|
|
647
|
+
if (this.hasOnlyCanvasFontEngine === true) {
|
|
648
|
+
return this.singleFontEngine;
|
|
554
649
|
}
|
|
555
|
-
}
|
|
556
650
|
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
if (tr.canRenderFont(trProps)) {
|
|
561
|
-
rendererId = trId as keyof TextRendererMap;
|
|
562
|
-
break;
|
|
563
|
-
}
|
|
651
|
+
// If we have only one font engine and it can render the font, return it
|
|
652
|
+
if (this.singleFontHandler?.canRenderFont(trProps) === true) {
|
|
653
|
+
return this.singleFontEngine;
|
|
564
654
|
}
|
|
565
|
-
if (!rendererId && this.textRenderers.canvas !== undefined) {
|
|
566
|
-
// If no renderer can be found, use the canvas renderer
|
|
567
|
-
rendererId = 'canvas';
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
655
|
|
|
571
|
-
|
|
572
|
-
console.warn(`
|
|
573
|
-
}
|
|
656
|
+
// If we have only one font engine and it cannot render the font, return null
|
|
657
|
+
console.warn(`Text renderer cannot render font`, trProps);
|
|
574
658
|
|
|
575
|
-
if (!rendererId) {
|
|
576
|
-
// silently fail if no renderer can be found, the error is already created
|
|
577
|
-
// at the constructor level
|
|
578
659
|
return null;
|
|
579
660
|
}
|
|
580
661
|
|
|
581
|
-
//
|
|
582
|
-
|
|
583
|
-
|
|
662
|
+
// Multi font handling - If we have multiple font engines, we need to resolve the best one
|
|
663
|
+
|
|
664
|
+
// First check SDF
|
|
665
|
+
if (this.fontHandlers['sdf']?.canRenderFont(trProps) === true) {
|
|
666
|
+
return this.textRenderers.sdf || null;
|
|
667
|
+
}
|
|
584
668
|
|
|
585
|
-
//
|
|
586
|
-
this.
|
|
669
|
+
// If we have a canvas engine, we can return it (it can render all fonts)
|
|
670
|
+
if (this.hasCanvasEngine === true) {
|
|
671
|
+
return this.textRenderers.canvas || null;
|
|
672
|
+
}
|
|
587
673
|
|
|
588
|
-
//
|
|
589
|
-
|
|
590
|
-
return
|
|
674
|
+
// If we have no font engines, return null
|
|
675
|
+
console.warn('No text renderers available. Your text will not render.');
|
|
676
|
+
return null;
|
|
591
677
|
}
|
|
592
678
|
|
|
593
679
|
createNode(props: Partial<CoreNodeProps>) {
|
|
@@ -596,32 +682,30 @@ export class Stage {
|
|
|
596
682
|
}
|
|
597
683
|
|
|
598
684
|
createTextNode(props: Partial<CoreTextNodeProps>) {
|
|
599
|
-
const fontSize = props.fontSize
|
|
685
|
+
const fontSize = props.fontSize || 16;
|
|
600
686
|
const resolvedProps = Object.assign(this.resolveNodeDefaults(props), {
|
|
601
|
-
text: props.text
|
|
602
|
-
textRendererOverride: props.textRendererOverride
|
|
687
|
+
text: props.text || '',
|
|
688
|
+
textRendererOverride: props.textRendererOverride || null,
|
|
603
689
|
fontSize,
|
|
604
|
-
fontFamily: props.fontFamily
|
|
605
|
-
fontStyle: props.fontStyle
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
overflowSuffix: props.overflowSuffix ?? '...',
|
|
619
|
-
debug: props.debug ?? {},
|
|
690
|
+
fontFamily: props.fontFamily || 'sans-serif',
|
|
691
|
+
fontStyle: props.fontStyle || 'normal',
|
|
692
|
+
textAlign: props.textAlign || 'left',
|
|
693
|
+
offsetY: props.offsetY || 0,
|
|
694
|
+
letterSpacing: props.letterSpacing || 0,
|
|
695
|
+
lineHeight: props.lineHeight || 1.2,
|
|
696
|
+
maxLines: props.maxLines || 0,
|
|
697
|
+
verticalAlign: props.verticalAlign || 'top',
|
|
698
|
+
overflowSuffix: props.overflowSuffix || '...',
|
|
699
|
+
wordBreak: props.wordBreak || 'break-word',
|
|
700
|
+
contain: props.contain || 'none',
|
|
701
|
+
maxWidth: props.maxWidth || 0,
|
|
702
|
+
maxHeight: props.maxHeight || 0,
|
|
703
|
+
forceLoad: props.forceLoad || false,
|
|
620
704
|
});
|
|
621
705
|
|
|
622
706
|
const resolvedTextRenderer = this.resolveTextRenderer(
|
|
623
707
|
resolvedProps,
|
|
624
|
-
|
|
708
|
+
resolvedProps.textRendererOverride as keyof TextRenderers | null,
|
|
625
709
|
);
|
|
626
710
|
|
|
627
711
|
if (!resolvedTextRenderer) {
|
|
@@ -641,6 +725,83 @@ export class Stage {
|
|
|
641
725
|
this.root.setUpdateType(UpdateType.RenderBounds);
|
|
642
726
|
}
|
|
643
727
|
|
|
728
|
+
/**
|
|
729
|
+
* Update the viewport bounds
|
|
730
|
+
*/
|
|
731
|
+
updateViewportBounds() {
|
|
732
|
+
const { appWidth, appHeight } = this.options;
|
|
733
|
+
this.strictBound = createBound(0, 0, appWidth, appHeight);
|
|
734
|
+
this.preloadBound = createPreloadBounds(
|
|
735
|
+
this.strictBound,
|
|
736
|
+
this.boundsMargin,
|
|
737
|
+
);
|
|
738
|
+
this.root.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
739
|
+
this.root.childUpdateType |= UpdateType.RenderBounds;
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
/** Find all nodes at a given point
|
|
743
|
+
* @param data
|
|
744
|
+
*/
|
|
745
|
+
findNodesAtPoint(data: Point): CoreNode[] {
|
|
746
|
+
const x = data.x / this.options.deviceLogicalPixelRatio;
|
|
747
|
+
const y = data.y / this.options.deviceLogicalPixelRatio;
|
|
748
|
+
const nodes: CoreNode[] = [];
|
|
749
|
+
for (const node of this.interactiveNodes) {
|
|
750
|
+
if (node.isRenderable === false) {
|
|
751
|
+
continue;
|
|
752
|
+
}
|
|
753
|
+
if (pointInBound(x, y, node.renderBound!) === true) {
|
|
754
|
+
nodes.push(node);
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
return nodes;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
/**
|
|
761
|
+
* Find the top node at a given point
|
|
762
|
+
* @param data
|
|
763
|
+
* @returns
|
|
764
|
+
*/
|
|
765
|
+
getNodeFromPosition(data: Point): CoreNode | null {
|
|
766
|
+
const nodes: CoreNode[] = this.findNodesAtPoint(data);
|
|
767
|
+
if (nodes.length === 0) {
|
|
768
|
+
return null;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
//get last node in array (as top node)
|
|
772
|
+
let topNode = nodes[nodes.length - 1] as CoreNode;
|
|
773
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
774
|
+
if (nodes[i]!.zIndex > topNode.zIndex) {
|
|
775
|
+
topNode = nodes[i]!;
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
return topNode || null;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
/**
|
|
782
|
+
* add node to timeNodes arrays
|
|
783
|
+
* @param node
|
|
784
|
+
* @returns
|
|
785
|
+
*/
|
|
786
|
+
trackTimedNode(node: CoreNode) {
|
|
787
|
+
if (this.timedNodes[node.id] !== undefined) {
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
790
|
+
this.timedNodes[node.id] = node;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
/**
|
|
794
|
+
* remove node from timeNodes arrays
|
|
795
|
+
* @param node
|
|
796
|
+
* @returns
|
|
797
|
+
*/
|
|
798
|
+
untrackTimedNode(node: CoreNode) {
|
|
799
|
+
if (this.timedNodes[node.id] === undefined) {
|
|
800
|
+
return;
|
|
801
|
+
}
|
|
802
|
+
delete this.timedNodes[node.id];
|
|
803
|
+
}
|
|
804
|
+
|
|
644
805
|
/**
|
|
645
806
|
* Resolves the default property values for a Node
|
|
646
807
|
*
|
|
@@ -653,66 +814,74 @@ export class Stage {
|
|
|
653
814
|
* @returns
|
|
654
815
|
*/
|
|
655
816
|
protected resolveNodeDefaults(props: Partial<CoreNodeProps>): CoreNodeProps {
|
|
817
|
+
const {
|
|
818
|
+
colorTop: top,
|
|
819
|
+
colorBottom: bottom,
|
|
820
|
+
colorLeft: left,
|
|
821
|
+
colorRight: right,
|
|
822
|
+
} = props;
|
|
823
|
+
|
|
656
824
|
const color = props.color ?? 0xffffffff;
|
|
657
|
-
const
|
|
658
|
-
const
|
|
659
|
-
|
|
660
|
-
const
|
|
661
|
-
|
|
662
|
-
const
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
825
|
+
const colorTop = top ?? color;
|
|
826
|
+
const colorBottom = bottom ?? color;
|
|
827
|
+
const colorLeft = left ?? color;
|
|
828
|
+
const colorRight = right ?? color;
|
|
829
|
+
|
|
830
|
+
const colorTl = props.colorTl ?? top ?? left ?? color;
|
|
831
|
+
const colorTr = props.colorTr ?? top ?? right ?? color;
|
|
832
|
+
const colorBl = props.colorBl ?? bottom ?? left ?? color;
|
|
833
|
+
const colorBr = props.colorBr ?? bottom ?? right ?? color;
|
|
834
|
+
|
|
835
|
+
const scale = props.scale ?? null;
|
|
836
|
+
const mount = props.mount ?? 0;
|
|
837
|
+
const pivot = props.pivot ?? 0.5;
|
|
838
|
+
|
|
839
|
+
const data = this.options.inspector
|
|
840
|
+
? santizeCustomDataMap(props.data ?? {})
|
|
841
|
+
: {};
|
|
669
842
|
|
|
670
843
|
return {
|
|
671
844
|
x: props.x ?? 0,
|
|
672
845
|
y: props.y ?? 0,
|
|
673
|
-
|
|
674
|
-
|
|
846
|
+
w: props.w ?? 0,
|
|
847
|
+
h: props.h ?? 0,
|
|
675
848
|
alpha: props.alpha ?? 1,
|
|
676
849
|
autosize: props.autosize ?? false,
|
|
677
850
|
boundsMargin: props.boundsMargin ?? null,
|
|
678
851
|
clipping: props.clipping ?? false,
|
|
679
852
|
color,
|
|
680
|
-
colorTop
|
|
681
|
-
colorBottom
|
|
682
|
-
colorLeft
|
|
683
|
-
colorRight
|
|
684
|
-
colorBl,
|
|
685
|
-
colorBr,
|
|
853
|
+
colorTop,
|
|
854
|
+
colorBottom,
|
|
855
|
+
colorLeft,
|
|
856
|
+
colorRight,
|
|
686
857
|
colorTl,
|
|
687
858
|
colorTr,
|
|
859
|
+
colorBl,
|
|
860
|
+
colorBr,
|
|
688
861
|
zIndex: props.zIndex ?? 0,
|
|
689
|
-
zIndexLocked: props.zIndexLocked ?? 0,
|
|
690
862
|
parent: props.parent ?? null,
|
|
691
863
|
texture: props.texture ?? null,
|
|
692
864
|
textureOptions: props.textureOptions ?? {},
|
|
693
865
|
shader: props.shader ?? this.defShaderNode,
|
|
694
|
-
// Since setting the `src` will trigger a texture load, we need to set it after
|
|
695
|
-
// we set the texture. Otherwise, problems happen.
|
|
696
866
|
src: props.src ?? null,
|
|
697
867
|
srcHeight: props.srcHeight,
|
|
698
868
|
srcWidth: props.srcWidth,
|
|
699
869
|
srcX: props.srcX,
|
|
700
870
|
srcY: props.srcY,
|
|
701
|
-
scale
|
|
702
|
-
scaleX: props.scaleX ??
|
|
703
|
-
scaleY: props.scaleY ??
|
|
704
|
-
mount
|
|
705
|
-
mountX: props.mountX ??
|
|
706
|
-
mountY: props.mountY ??
|
|
707
|
-
pivot
|
|
708
|
-
pivotX: props.pivotX ??
|
|
709
|
-
pivotY: props.pivotY ??
|
|
871
|
+
scale,
|
|
872
|
+
scaleX: props.scaleX ?? scale ?? 1,
|
|
873
|
+
scaleY: props.scaleY ?? scale ?? 1,
|
|
874
|
+
mount,
|
|
875
|
+
mountX: props.mountX ?? mount,
|
|
876
|
+
mountY: props.mountY ?? mount,
|
|
877
|
+
pivot,
|
|
878
|
+
pivotX: props.pivotX ?? pivot,
|
|
879
|
+
pivotY: props.pivotY ?? pivot,
|
|
710
880
|
rotation: props.rotation ?? 0,
|
|
711
881
|
rtt: props.rtt ?? false,
|
|
712
|
-
data
|
|
713
|
-
preventCleanup: props.preventCleanup ?? false,
|
|
882
|
+
data,
|
|
714
883
|
imageType: props.imageType,
|
|
715
|
-
|
|
884
|
+
interactive: props.interactive ?? false,
|
|
716
885
|
};
|
|
717
886
|
}
|
|
718
887
|
|
|
@@ -722,8 +891,8 @@ export class Stage {
|
|
|
722
891
|
* @remarks
|
|
723
892
|
* This method is used to cleanup orphaned textures that are no longer in use.
|
|
724
893
|
*/
|
|
725
|
-
cleanup(
|
|
726
|
-
this.txMemManager.cleanup(
|
|
894
|
+
cleanup(full: boolean = false) {
|
|
895
|
+
this.txMemManager.cleanup(full);
|
|
727
896
|
}
|
|
728
897
|
|
|
729
898
|
set clearColor(value: number) {
|
|
@@ -735,4 +904,37 @@ export class Stage {
|
|
|
735
904
|
get clearColor() {
|
|
736
905
|
return this.clrColor;
|
|
737
906
|
}
|
|
907
|
+
|
|
908
|
+
/**
|
|
909
|
+
* Load a font using a specific text renderer type
|
|
910
|
+
*
|
|
911
|
+
* @remarks
|
|
912
|
+
* This method allows consumers to explicitly load fonts for a specific
|
|
913
|
+
* text renderer type (e.g., 'canvas', 'sdf'). Consumers must specify
|
|
914
|
+
* the renderer type to ensure fonts are loaded with the correct pipeline.
|
|
915
|
+
*
|
|
916
|
+
* For Canvas fonts, provide fontUrl (e.g., .ttf, .woff, .woff2)
|
|
917
|
+
* For SDF fonts, provide atlasUrl (image) and atlasDataUrl (JSON glyph data)
|
|
918
|
+
*
|
|
919
|
+
* @param rendererType - The type of text renderer ('canvas', 'sdf', etc.)
|
|
920
|
+
* @param options - Font loading options specific to the renderer type
|
|
921
|
+
* @returns Promise that resolves when the font is loaded
|
|
922
|
+
*/
|
|
923
|
+
async loadFont(
|
|
924
|
+
rendererType: TextRenderers,
|
|
925
|
+
options: FontLoadOptions,
|
|
926
|
+
): Promise<void> {
|
|
927
|
+
const rendererTypeKey = String(rendererType);
|
|
928
|
+
const fontHandler = this.fontHandlers[rendererTypeKey];
|
|
929
|
+
|
|
930
|
+
if (!fontHandler) {
|
|
931
|
+
throw new Error(
|
|
932
|
+
`Font handler for renderer type '${rendererTypeKey}' not found. Available types: ${Object.keys(
|
|
933
|
+
this.fontHandlers,
|
|
934
|
+
).join(', ')}`,
|
|
935
|
+
);
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
return fontHandler.loadFont(this, options);
|
|
939
|
+
}
|
|
738
940
|
}
|