@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/dist/src/core/Stage.js
CHANGED
|
@@ -16,20 +16,19 @@
|
|
|
16
16
|
* See the License for the specific language governing permissions and
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
|
-
import { startLoop, getTimeStamp } from './platform.js';
|
|
20
19
|
import { assertTruthy, setPremultiplyMode } from '../utils.js';
|
|
21
20
|
import { AnimationManager } from './animations/AnimationManager.js';
|
|
22
21
|
import { UpdateType, CoreNode, CoreNodeRenderState, } from './CoreNode.js';
|
|
23
22
|
import { CoreTextureManager } from './CoreTextureManager.js';
|
|
24
|
-
import { TrFontManager } from './text-rendering/TrFontManager.js';
|
|
25
23
|
import { CoreShaderManager } from './CoreShaderManager.js';
|
|
26
|
-
import {
|
|
24
|
+
import {} from './text-rendering/TextRenderer.js';
|
|
27
25
|
import { EventEmitter } from '../common/EventEmitter.js';
|
|
28
26
|
import { ContextSpy } from './lib/ContextSpy.js';
|
|
29
27
|
import { TextureMemoryManager, } from './TextureMemoryManager.js';
|
|
30
28
|
import { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
31
29
|
import { CoreTextNode } from './CoreTextNode.js';
|
|
32
30
|
import { santizeCustomDataMap } from '../main-api/utils.js';
|
|
31
|
+
import { pointInBound } from './lib/utils.js';
|
|
33
32
|
import { createBound, createPreloadBounds } from './lib/utils.js';
|
|
34
33
|
import { ColorTexture } from './textures/ColorTexture.js';
|
|
35
34
|
const autoStart = true;
|
|
@@ -39,19 +38,30 @@ export class Stage {
|
|
|
39
38
|
animationManager;
|
|
40
39
|
txManager;
|
|
41
40
|
txMemManager;
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
textRenderers = {};
|
|
42
|
+
fontHandlers = {};
|
|
44
43
|
shManager;
|
|
45
44
|
renderer;
|
|
46
45
|
root;
|
|
46
|
+
interactiveNodes = new Set();
|
|
47
47
|
boundsMargin;
|
|
48
48
|
defShaderNode = null;
|
|
49
49
|
strictBound;
|
|
50
50
|
preloadBound;
|
|
51
|
-
strictBounds;
|
|
52
51
|
defaultTexture = null;
|
|
53
52
|
pixelRatio;
|
|
54
53
|
bufferMemory = 2e6;
|
|
54
|
+
platform;
|
|
55
|
+
calculateTextureCoord;
|
|
56
|
+
/**
|
|
57
|
+
* Target frame time in milliseconds (calculated from targetFPS)
|
|
58
|
+
*
|
|
59
|
+
* @remarks
|
|
60
|
+
* This is pre-calculated to avoid recalculating on every frame.
|
|
61
|
+
* - 0 means no throttling (use display refresh rate)
|
|
62
|
+
* - >0 means throttle to this frame time (1000 / targetFPS)
|
|
63
|
+
*/
|
|
64
|
+
targetFrameTime = 0;
|
|
55
65
|
/**
|
|
56
66
|
* Renderer Event Bus for the Stage to emit events onto
|
|
57
67
|
*
|
|
@@ -62,28 +72,42 @@ export class Stage {
|
|
|
62
72
|
*/
|
|
63
73
|
eventBus;
|
|
64
74
|
/// State
|
|
75
|
+
startTime = 0;
|
|
65
76
|
deltaTime = 0;
|
|
66
77
|
lastFrameTime = 0;
|
|
67
78
|
currentFrameTime = 0;
|
|
79
|
+
elapsedTime = 0;
|
|
80
|
+
timedNodes = [];
|
|
68
81
|
clrColor = 0x00000000;
|
|
69
82
|
fpsNumFrames = 0;
|
|
70
83
|
fpsElapsedTime = 0;
|
|
71
84
|
numQuadsRendered = 0;
|
|
72
85
|
renderRequested = false;
|
|
73
86
|
frameEventQueue = [];
|
|
74
|
-
|
|
75
|
-
|
|
87
|
+
// Font resolve optimisation flags
|
|
88
|
+
hasOnlyOneFontEngine;
|
|
89
|
+
hasOnlyCanvasFontEngine;
|
|
90
|
+
hasCanvasEngine;
|
|
91
|
+
singleFontEngine = null;
|
|
92
|
+
singleFontHandler = null;
|
|
93
|
+
// Debug data
|
|
76
94
|
contextSpy = null;
|
|
77
95
|
/**
|
|
78
96
|
* Stage constructor
|
|
79
97
|
*/
|
|
80
98
|
constructor(options) {
|
|
81
99
|
this.options = options;
|
|
82
|
-
const { canvas, clearColor, appWidth, appHeight, boundsMargin, enableContextSpy, forceWebGL2, numImageWorkers, textureMemory, renderEngine, fontEngines, createImageBitmapSupport, } = options;
|
|
100
|
+
const { canvas, clearColor, appWidth, appHeight, boundsMargin, enableContextSpy, forceWebGL2, numImageWorkers, textureMemory, renderEngine, fontEngines, createImageBitmapSupport, platform, maxRetryCount, } = options;
|
|
101
|
+
assertTruthy(platform !== null, 'A CorePlatform is not provided in the options');
|
|
102
|
+
this.platform = platform;
|
|
103
|
+
this.startTime = platform.getTimeStamp();
|
|
83
104
|
this.eventBus = options.eventBus;
|
|
105
|
+
// Calculate target frame time from targetFPS option
|
|
106
|
+
this.targetFrameTime = options.targetFPS > 0 ? 1000 / options.targetFPS : 0;
|
|
84
107
|
this.txManager = new CoreTextureManager(this, {
|
|
85
108
|
numImageWorkers,
|
|
86
109
|
createImageBitmapSupport,
|
|
110
|
+
maxRetryCount,
|
|
87
111
|
});
|
|
88
112
|
// Wait for the Texture Manager to initialize
|
|
89
113
|
// once it does, request a render
|
|
@@ -93,7 +117,6 @@ export class Stage {
|
|
|
93
117
|
this.txMemManager = new TextureMemoryManager(this, textureMemory);
|
|
94
118
|
this.animationManager = new AnimationManager();
|
|
95
119
|
this.contextSpy = enableContextSpy ? new ContextSpy() : null;
|
|
96
|
-
this.strictBounds = options.strictBounds;
|
|
97
120
|
let bm = [0, 0, 0, 0];
|
|
98
121
|
if (boundsMargin) {
|
|
99
122
|
bm = Array.isArray(boundsMargin)
|
|
@@ -115,40 +138,85 @@ export class Stage {
|
|
|
115
138
|
});
|
|
116
139
|
this.shManager = new CoreShaderManager(this);
|
|
117
140
|
this.defShaderNode = this.renderer.getDefaultShaderNode();
|
|
141
|
+
this.calculateTextureCoord = this.renderer.getTextureCoords !== undefined;
|
|
118
142
|
const renderMode = this.renderer.mode || 'webgl';
|
|
119
143
|
this.createDefaultTexture();
|
|
120
144
|
setPremultiplyMode(renderMode);
|
|
121
145
|
// Must do this after renderer is created
|
|
122
146
|
this.txManager.renderer = this.renderer;
|
|
123
147
|
// Create text renderers
|
|
124
|
-
this.
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
148
|
+
this.hasOnlyOneFontEngine = fontEngines.length === 1;
|
|
149
|
+
this.hasOnlyCanvasFontEngine =
|
|
150
|
+
fontEngines.length === 1 && fontEngines[0].type === 'canvas';
|
|
151
|
+
this.hasCanvasEngine = false;
|
|
152
|
+
this.singleFontEngine = this.hasOnlyOneFontEngine
|
|
153
|
+
? fontEngines[0]
|
|
154
|
+
: null;
|
|
155
|
+
this.singleFontHandler = this.hasOnlyOneFontEngine
|
|
156
|
+
? fontEngines[0]?.font
|
|
157
|
+
: null;
|
|
158
|
+
if (this.singleFontEngine === null) {
|
|
159
|
+
// Multiple font engines case
|
|
160
|
+
// Filter out incompatible engines first
|
|
161
|
+
const compatibleEngines = fontEngines.filter((fontEngine) => {
|
|
162
|
+
const type = fontEngine.type;
|
|
163
|
+
if (type === 'sdf' && renderMode === 'canvas') {
|
|
164
|
+
console.warn('MsdfTextRenderer is not compatible with Canvas renderer. Skipping...');
|
|
165
|
+
return false;
|
|
136
166
|
}
|
|
137
|
-
|
|
138
|
-
this.
|
|
167
|
+
if (type === 'canvas') {
|
|
168
|
+
this.hasCanvasEngine = true;
|
|
139
169
|
}
|
|
170
|
+
return true;
|
|
171
|
+
});
|
|
172
|
+
// Sort engines: SDF first, Canvas last, others in between
|
|
173
|
+
const sortedEngines = compatibleEngines.sort((a, b) => {
|
|
174
|
+
if (a.type === 'sdf')
|
|
175
|
+
return -1;
|
|
176
|
+
if (b.type === 'sdf')
|
|
177
|
+
return 1;
|
|
178
|
+
if (a.type === 'canvas')
|
|
179
|
+
return 1;
|
|
180
|
+
if (b.type === 'canvas')
|
|
181
|
+
return -1;
|
|
182
|
+
return 0;
|
|
183
|
+
});
|
|
184
|
+
// Initialize engines in sorted order
|
|
185
|
+
sortedEngines.forEach((fontEngine) => {
|
|
186
|
+
const type = fontEngine.type;
|
|
187
|
+
// Add to map for type-based access
|
|
188
|
+
this.textRenderers[type] = fontEngine;
|
|
189
|
+
this.textRenderers[type].init(this);
|
|
190
|
+
this.fontHandlers[type] = fontEngine.font;
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
// Single font engine case - initialize it directly
|
|
195
|
+
const fontEngine = this.singleFontEngine;
|
|
196
|
+
const type = fontEngine.type;
|
|
197
|
+
// Check compatibility
|
|
198
|
+
if (type === 'sdf' && renderMode === 'canvas') {
|
|
199
|
+
console.warn('MsdfTextRenderer is not compatible with Canvas renderer. Skipping...');
|
|
140
200
|
}
|
|
141
|
-
|
|
201
|
+
else {
|
|
202
|
+
if (type === 'canvas') {
|
|
203
|
+
this.hasCanvasEngine = true;
|
|
204
|
+
}
|
|
205
|
+
// Add to map for type-based access
|
|
206
|
+
this.textRenderers[type] = fontEngine;
|
|
207
|
+
this.fontHandlers[type] = fontEngine.font;
|
|
208
|
+
this.textRenderers[type].init(this);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
142
211
|
if (Object.keys(this.textRenderers).length === 0) {
|
|
143
212
|
console.warn('No text renderers available. Your text will not render.');
|
|
144
213
|
}
|
|
145
|
-
this.fontManager = new TrFontManager(this.textRenderers);
|
|
146
214
|
// create root node
|
|
147
215
|
const rootNode = new CoreNode(this, {
|
|
148
216
|
x: 0,
|
|
149
217
|
y: 0,
|
|
150
|
-
|
|
151
|
-
|
|
218
|
+
w: appWidth,
|
|
219
|
+
h: appHeight,
|
|
152
220
|
alpha: 1,
|
|
153
221
|
autosize: false,
|
|
154
222
|
boundsMargin: null,
|
|
@@ -163,7 +231,6 @@ export class Stage {
|
|
|
163
231
|
colorBl: 0x00000000,
|
|
164
232
|
colorBr: 0x00000000,
|
|
165
233
|
zIndex: 0,
|
|
166
|
-
zIndexLocked: 0,
|
|
167
234
|
scaleX: 1,
|
|
168
235
|
scaleY: 1,
|
|
169
236
|
mountX: 0,
|
|
@@ -180,13 +247,11 @@ export class Stage {
|
|
|
180
247
|
rtt: false,
|
|
181
248
|
src: null,
|
|
182
249
|
scale: 1,
|
|
183
|
-
preventCleanup: false,
|
|
184
|
-
strictBounds: this.strictBounds,
|
|
185
250
|
});
|
|
186
251
|
this.root = rootNode;
|
|
187
252
|
// execute platform start loop
|
|
188
|
-
if (autoStart) {
|
|
189
|
-
startLoop(this);
|
|
253
|
+
if (autoStart === true) {
|
|
254
|
+
this.platform.startLoop(this);
|
|
190
255
|
}
|
|
191
256
|
}
|
|
192
257
|
setClearColor(color) {
|
|
@@ -194,10 +259,24 @@ export class Stage {
|
|
|
194
259
|
this.renderer.updateClearColor(color);
|
|
195
260
|
this.renderRequested = true;
|
|
196
261
|
}
|
|
262
|
+
/**
|
|
263
|
+
* Update the target frame time based on the current targetFPS setting
|
|
264
|
+
*
|
|
265
|
+
* @remarks
|
|
266
|
+
* This should be called whenever the targetFPS option is changed
|
|
267
|
+
* to ensure targetFrameTime stays in sync.
|
|
268
|
+
* targetFPS of 0 means no throttling (targetFrameTime = 0)
|
|
269
|
+
* targetFPS > 0 means throttle to 1000/targetFPS milliseconds
|
|
270
|
+
*/
|
|
271
|
+
updateTargetFrameTime() {
|
|
272
|
+
this.targetFrameTime =
|
|
273
|
+
this.options.targetFPS > 0 ? 1000 / this.options.targetFPS : 0;
|
|
274
|
+
}
|
|
197
275
|
updateFrameTime() {
|
|
198
|
-
const newFrameTime = getTimeStamp();
|
|
276
|
+
const newFrameTime = this.platform.getTimeStamp();
|
|
199
277
|
this.lastFrameTime = this.currentFrameTime;
|
|
200
278
|
this.currentFrameTime = newFrameTime;
|
|
279
|
+
this.elapsedTime = newFrameTime - this.startTime;
|
|
201
280
|
this.deltaTime = !this.lastFrameTime
|
|
202
281
|
? 100 / 6
|
|
203
282
|
: newFrameTime - this.lastFrameTime;
|
|
@@ -214,7 +293,6 @@ export class Stage {
|
|
|
214
293
|
* Create default PixelTexture
|
|
215
294
|
*/
|
|
216
295
|
createDefaultTexture() {
|
|
217
|
-
console.log('Creating default texture');
|
|
218
296
|
this.defaultTexture = this.txManager.createTexture('ColorTexture', {
|
|
219
297
|
color: 0xffffffff,
|
|
220
298
|
});
|
|
@@ -223,7 +301,7 @@ export class Stage {
|
|
|
223
301
|
// Mark the default texture as ALWAYS renderable
|
|
224
302
|
// This prevents it from ever being cleaned up.
|
|
225
303
|
// Fixes https://github.com/lightning-js/renderer/issues/262
|
|
226
|
-
this.defaultTexture.setRenderableOwner(
|
|
304
|
+
this.defaultTexture.setRenderableOwner('stage', true);
|
|
227
305
|
// When the default texture is loaded, request a render in case the
|
|
228
306
|
// RAF is paused. Fixes: https://github.com/lightning-js/renderer/issues/123
|
|
229
307
|
this.defaultTexture.once('loaded', () => {
|
|
@@ -253,24 +331,23 @@ export class Stage {
|
|
|
253
331
|
* Start a new frame draw
|
|
254
332
|
*/
|
|
255
333
|
drawFrame() {
|
|
256
|
-
const { renderer, renderRequested } = this;
|
|
257
|
-
|
|
334
|
+
const { renderer, renderRequested, root } = this;
|
|
335
|
+
const txMemManager = this.txMemManager;
|
|
258
336
|
// Update tree if needed
|
|
259
|
-
if (
|
|
260
|
-
|
|
337
|
+
if (root.updateType !== 0) {
|
|
338
|
+
root.update(this.deltaTime, root.clippingRect);
|
|
339
|
+
}
|
|
340
|
+
// Process some textures asynchronously but don't block the frame
|
|
341
|
+
// Use a background task to prevent frame drops
|
|
342
|
+
if (this.txManager.hasUpdates() === true) {
|
|
343
|
+
this.txManager
|
|
344
|
+
.processSome(this.options.textureProcessingTimeLimit)
|
|
345
|
+
.catch((err) => {
|
|
346
|
+
console.error('Error processing textures:', err);
|
|
347
|
+
});
|
|
261
348
|
}
|
|
262
|
-
// Process some textures
|
|
263
|
-
this.txManager.processSome(this.options.textureProcessingTimeLimit);
|
|
264
349
|
// Reset render operations and clear the canvas
|
|
265
350
|
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
351
|
// If we have RTT nodes draw them first
|
|
275
352
|
// So we can use them as textures in the main scene
|
|
276
353
|
if (renderer.rttNodes.length > 0) {
|
|
@@ -279,13 +356,25 @@ export class Stage {
|
|
|
279
356
|
// Fill quads buffer
|
|
280
357
|
this.addQuads(this.root);
|
|
281
358
|
// Perform render pass
|
|
282
|
-
renderer
|
|
359
|
+
renderer.render();
|
|
283
360
|
this.calculateFps();
|
|
284
361
|
this.calculateQuads();
|
|
285
362
|
// Reset renderRequested flag if it was set
|
|
286
|
-
if (renderRequested) {
|
|
363
|
+
if (renderRequested === true) {
|
|
287
364
|
this.renderRequested = false;
|
|
288
365
|
}
|
|
366
|
+
if (this.timedNodes.length > 0) {
|
|
367
|
+
for (let key in this.timedNodes) {
|
|
368
|
+
if (this.timedNodes[key].isRenderable === true) {
|
|
369
|
+
this.requestRender();
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
// Check if we need to cleanup textures
|
|
375
|
+
if (this.txMemManager.criticalCleanupRequested === true) {
|
|
376
|
+
this.txMemManager.cleanup();
|
|
377
|
+
}
|
|
289
378
|
}
|
|
290
379
|
/**
|
|
291
380
|
* Queue an event to be emitted after the current/next frame is rendered
|
|
@@ -359,8 +448,7 @@ export class Stage {
|
|
|
359
448
|
continue;
|
|
360
449
|
}
|
|
361
450
|
if (child.worldAlpha === 0 ||
|
|
362
|
-
|
|
363
|
-
child.renderState === CoreNodeRenderState.OutOfBounds)) {
|
|
451
|
+
child.renderState === CoreNodeRenderState.OutOfBounds) {
|
|
364
452
|
continue;
|
|
365
453
|
}
|
|
366
454
|
this.addQuads(child);
|
|
@@ -383,86 +471,68 @@ export class Stage {
|
|
|
383
471
|
* @returns
|
|
384
472
|
*/
|
|
385
473
|
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;
|
|
474
|
+
// If we have an overide, return it
|
|
475
|
+
if (textRendererOverride !== null) {
|
|
476
|
+
const overrideKey = String(textRendererOverride);
|
|
477
|
+
if (this.textRenderers[overrideKey] === undefined) {
|
|
478
|
+
console.warn(`Text renderer override '${overrideKey}' not found.`);
|
|
479
|
+
return null;
|
|
406
480
|
}
|
|
481
|
+
return this.textRenderers[overrideKey];
|
|
407
482
|
}
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
break;
|
|
414
|
-
}
|
|
483
|
+
// If we have only one font engine early return it
|
|
484
|
+
if (this.singleFontEngine !== null) {
|
|
485
|
+
// If we have only one font engine and its the canvas engine, we can just return it
|
|
486
|
+
if (this.hasOnlyCanvasFontEngine === true) {
|
|
487
|
+
return this.singleFontEngine;
|
|
415
488
|
}
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
489
|
+
// If we have only one font engine and it can render the font, return it
|
|
490
|
+
if (this.singleFontHandler?.canRenderFont(trProps) === true) {
|
|
491
|
+
return this.singleFontEngine;
|
|
419
492
|
}
|
|
493
|
+
// If we have only one font engine and it cannot render the font, return null
|
|
494
|
+
console.warn(`Text renderer cannot render font`, trProps);
|
|
495
|
+
return null;
|
|
420
496
|
}
|
|
421
|
-
|
|
422
|
-
|
|
497
|
+
// Multi font handling - If we have multiple font engines, we need to resolve the best one
|
|
498
|
+
// First check SDF
|
|
499
|
+
if (this.fontHandlers['sdf']?.canRenderFont(trProps) === true) {
|
|
500
|
+
return this.textRenderers.sdf || null;
|
|
423
501
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
return null;
|
|
502
|
+
// If we have a canvas engine, we can return it (it can render all fonts)
|
|
503
|
+
if (this.hasCanvasEngine === true) {
|
|
504
|
+
return this.textRenderers.canvas || null;
|
|
428
505
|
}
|
|
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;
|
|
506
|
+
// If we have no font engines, return null
|
|
507
|
+
console.warn('No text renderers available. Your text will not render.');
|
|
508
|
+
return null;
|
|
437
509
|
}
|
|
438
510
|
createNode(props) {
|
|
439
511
|
const resolvedProps = this.resolveNodeDefaults(props);
|
|
440
512
|
return new CoreNode(this, resolvedProps);
|
|
441
513
|
}
|
|
442
514
|
createTextNode(props) {
|
|
443
|
-
const fontSize = props.fontSize
|
|
515
|
+
const fontSize = props.fontSize || 16;
|
|
444
516
|
const resolvedProps = Object.assign(this.resolveNodeDefaults(props), {
|
|
445
|
-
text: props.text
|
|
446
|
-
textRendererOverride: props.textRendererOverride
|
|
517
|
+
text: props.text || '',
|
|
518
|
+
textRendererOverride: props.textRendererOverride || null,
|
|
447
519
|
fontSize,
|
|
448
|
-
fontFamily: props.fontFamily
|
|
449
|
-
fontStyle: props.fontStyle
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
overflowSuffix: props.overflowSuffix ?? '...',
|
|
463
|
-
debug: props.debug ?? {},
|
|
520
|
+
fontFamily: props.fontFamily || 'sans-serif',
|
|
521
|
+
fontStyle: props.fontStyle || 'normal',
|
|
522
|
+
textAlign: props.textAlign || 'left',
|
|
523
|
+
offsetY: props.offsetY || 0,
|
|
524
|
+
letterSpacing: props.letterSpacing || 0,
|
|
525
|
+
lineHeight: props.lineHeight || 1.2,
|
|
526
|
+
maxLines: props.maxLines || 0,
|
|
527
|
+
verticalAlign: props.verticalAlign || 'top',
|
|
528
|
+
overflowSuffix: props.overflowSuffix || '...',
|
|
529
|
+
wordBreak: props.wordBreak || 'break-word',
|
|
530
|
+
contain: props.contain || 'none',
|
|
531
|
+
maxWidth: props.maxWidth || 0,
|
|
532
|
+
maxHeight: props.maxHeight || 0,
|
|
533
|
+
forceLoad: props.forceLoad || false,
|
|
464
534
|
});
|
|
465
|
-
const resolvedTextRenderer = this.resolveTextRenderer(resolvedProps,
|
|
535
|
+
const resolvedTextRenderer = this.resolveTextRenderer(resolvedProps, resolvedProps.textRendererOverride);
|
|
466
536
|
if (!resolvedTextRenderer) {
|
|
467
537
|
throw new Error(`No compatible text renderer found for ${resolvedProps.fontFamily}`);
|
|
468
538
|
}
|
|
@@ -474,6 +544,74 @@ export class Stage {
|
|
|
474
544
|
: [value, value, value, value];
|
|
475
545
|
this.root.setUpdateType(UpdateType.RenderBounds);
|
|
476
546
|
}
|
|
547
|
+
/**
|
|
548
|
+
* Update the viewport bounds
|
|
549
|
+
*/
|
|
550
|
+
updateViewportBounds() {
|
|
551
|
+
const { appWidth, appHeight } = this.options;
|
|
552
|
+
this.strictBound = createBound(0, 0, appWidth, appHeight);
|
|
553
|
+
this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
|
|
554
|
+
this.root.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
555
|
+
this.root.childUpdateType |= UpdateType.RenderBounds;
|
|
556
|
+
}
|
|
557
|
+
/** Find all nodes at a given point
|
|
558
|
+
* @param data
|
|
559
|
+
*/
|
|
560
|
+
findNodesAtPoint(data) {
|
|
561
|
+
const x = data.x / this.options.deviceLogicalPixelRatio;
|
|
562
|
+
const y = data.y / this.options.deviceLogicalPixelRatio;
|
|
563
|
+
const nodes = [];
|
|
564
|
+
for (const node of this.interactiveNodes) {
|
|
565
|
+
if (node.isRenderable === false) {
|
|
566
|
+
continue;
|
|
567
|
+
}
|
|
568
|
+
if (pointInBound(x, y, node.renderBound) === true) {
|
|
569
|
+
nodes.push(node);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
return nodes;
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Find the top node at a given point
|
|
576
|
+
* @param data
|
|
577
|
+
* @returns
|
|
578
|
+
*/
|
|
579
|
+
getNodeFromPosition(data) {
|
|
580
|
+
const nodes = this.findNodesAtPoint(data);
|
|
581
|
+
if (nodes.length === 0) {
|
|
582
|
+
return null;
|
|
583
|
+
}
|
|
584
|
+
//get last node in array (as top node)
|
|
585
|
+
let topNode = nodes[nodes.length - 1];
|
|
586
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
587
|
+
if (nodes[i].zIndex > topNode.zIndex) {
|
|
588
|
+
topNode = nodes[i];
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
return topNode || null;
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* add node to timeNodes arrays
|
|
595
|
+
* @param node
|
|
596
|
+
* @returns
|
|
597
|
+
*/
|
|
598
|
+
trackTimedNode(node) {
|
|
599
|
+
if (this.timedNodes[node.id] !== undefined) {
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
602
|
+
this.timedNodes[node.id] = node;
|
|
603
|
+
}
|
|
604
|
+
/**
|
|
605
|
+
* remove node from timeNodes arrays
|
|
606
|
+
* @param node
|
|
607
|
+
* @returns
|
|
608
|
+
*/
|
|
609
|
+
untrackTimedNode(node) {
|
|
610
|
+
if (this.timedNodes[node.id] === undefined) {
|
|
611
|
+
return;
|
|
612
|
+
}
|
|
613
|
+
delete this.timedNodes[node.id];
|
|
614
|
+
}
|
|
477
615
|
/**
|
|
478
616
|
* Resolves the default property values for a Node
|
|
479
617
|
*
|
|
@@ -486,61 +624,64 @@ export class Stage {
|
|
|
486
624
|
* @returns
|
|
487
625
|
*/
|
|
488
626
|
resolveNodeDefaults(props) {
|
|
627
|
+
const { colorTop: top, colorBottom: bottom, colorLeft: left, colorRight: right, } = props;
|
|
489
628
|
const color = props.color ?? 0xffffffff;
|
|
490
|
-
const
|
|
491
|
-
const
|
|
492
|
-
const
|
|
493
|
-
const
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
629
|
+
const colorTop = top ?? color;
|
|
630
|
+
const colorBottom = bottom ?? color;
|
|
631
|
+
const colorLeft = left ?? color;
|
|
632
|
+
const colorRight = right ?? color;
|
|
633
|
+
const colorTl = props.colorTl ?? top ?? left ?? color;
|
|
634
|
+
const colorTr = props.colorTr ?? top ?? right ?? color;
|
|
635
|
+
const colorBl = props.colorBl ?? bottom ?? left ?? color;
|
|
636
|
+
const colorBr = props.colorBr ?? bottom ?? right ?? color;
|
|
637
|
+
const scale = props.scale ?? null;
|
|
638
|
+
const mount = props.mount ?? 0;
|
|
639
|
+
const pivot = props.pivot ?? 0.5;
|
|
640
|
+
const data = this.options.inspector
|
|
641
|
+
? santizeCustomDataMap(props.data ?? {})
|
|
642
|
+
: {};
|
|
498
643
|
return {
|
|
499
644
|
x: props.x ?? 0,
|
|
500
645
|
y: props.y ?? 0,
|
|
501
|
-
|
|
502
|
-
|
|
646
|
+
w: props.w ?? 0,
|
|
647
|
+
h: props.h ?? 0,
|
|
503
648
|
alpha: props.alpha ?? 1,
|
|
504
649
|
autosize: props.autosize ?? false,
|
|
505
650
|
boundsMargin: props.boundsMargin ?? null,
|
|
506
651
|
clipping: props.clipping ?? false,
|
|
507
652
|
color,
|
|
508
|
-
colorTop
|
|
509
|
-
colorBottom
|
|
510
|
-
colorLeft
|
|
511
|
-
colorRight
|
|
512
|
-
colorBl,
|
|
513
|
-
colorBr,
|
|
653
|
+
colorTop,
|
|
654
|
+
colorBottom,
|
|
655
|
+
colorLeft,
|
|
656
|
+
colorRight,
|
|
514
657
|
colorTl,
|
|
515
658
|
colorTr,
|
|
659
|
+
colorBl,
|
|
660
|
+
colorBr,
|
|
516
661
|
zIndex: props.zIndex ?? 0,
|
|
517
|
-
zIndexLocked: props.zIndexLocked ?? 0,
|
|
518
662
|
parent: props.parent ?? null,
|
|
519
663
|
texture: props.texture ?? null,
|
|
520
664
|
textureOptions: props.textureOptions ?? {},
|
|
521
665
|
shader: props.shader ?? this.defShaderNode,
|
|
522
|
-
// Since setting the `src` will trigger a texture load, we need to set it after
|
|
523
|
-
// we set the texture. Otherwise, problems happen.
|
|
524
666
|
src: props.src ?? null,
|
|
525
667
|
srcHeight: props.srcHeight,
|
|
526
668
|
srcWidth: props.srcWidth,
|
|
527
669
|
srcX: props.srcX,
|
|
528
670
|
srcY: props.srcY,
|
|
529
|
-
scale
|
|
530
|
-
scaleX: props.scaleX ??
|
|
531
|
-
scaleY: props.scaleY ??
|
|
532
|
-
mount
|
|
533
|
-
mountX: props.mountX ??
|
|
534
|
-
mountY: props.mountY ??
|
|
535
|
-
pivot
|
|
536
|
-
pivotX: props.pivotX ??
|
|
537
|
-
pivotY: props.pivotY ??
|
|
671
|
+
scale,
|
|
672
|
+
scaleX: props.scaleX ?? scale ?? 1,
|
|
673
|
+
scaleY: props.scaleY ?? scale ?? 1,
|
|
674
|
+
mount,
|
|
675
|
+
mountX: props.mountX ?? mount,
|
|
676
|
+
mountY: props.mountY ?? mount,
|
|
677
|
+
pivot,
|
|
678
|
+
pivotX: props.pivotX ?? pivot,
|
|
679
|
+
pivotY: props.pivotY ?? pivot,
|
|
538
680
|
rotation: props.rotation ?? 0,
|
|
539
681
|
rtt: props.rtt ?? false,
|
|
540
|
-
data
|
|
541
|
-
preventCleanup: props.preventCleanup ?? false,
|
|
682
|
+
data,
|
|
542
683
|
imageType: props.imageType,
|
|
543
|
-
|
|
684
|
+
interactive: props.interactive ?? false,
|
|
544
685
|
};
|
|
545
686
|
}
|
|
546
687
|
/**
|
|
@@ -549,8 +690,8 @@ export class Stage {
|
|
|
549
690
|
* @remarks
|
|
550
691
|
* This method is used to cleanup orphaned textures that are no longer in use.
|
|
551
692
|
*/
|
|
552
|
-
cleanup(
|
|
553
|
-
this.txMemManager.cleanup(
|
|
693
|
+
cleanup(full = false) {
|
|
694
|
+
this.txMemManager.cleanup(full);
|
|
554
695
|
}
|
|
555
696
|
set clearColor(value) {
|
|
556
697
|
this.renderer.updateClearColor(value);
|
|
@@ -560,5 +701,28 @@ export class Stage {
|
|
|
560
701
|
get clearColor() {
|
|
561
702
|
return this.clrColor;
|
|
562
703
|
}
|
|
704
|
+
/**
|
|
705
|
+
* Load a font using a specific text renderer type
|
|
706
|
+
*
|
|
707
|
+
* @remarks
|
|
708
|
+
* This method allows consumers to explicitly load fonts for a specific
|
|
709
|
+
* text renderer type (e.g., 'canvas', 'sdf'). Consumers must specify
|
|
710
|
+
* the renderer type to ensure fonts are loaded with the correct pipeline.
|
|
711
|
+
*
|
|
712
|
+
* For Canvas fonts, provide fontUrl (e.g., .ttf, .woff, .woff2)
|
|
713
|
+
* For SDF fonts, provide atlasUrl (image) and atlasDataUrl (JSON glyph data)
|
|
714
|
+
*
|
|
715
|
+
* @param rendererType - The type of text renderer ('canvas', 'sdf', etc.)
|
|
716
|
+
* @param options - Font loading options specific to the renderer type
|
|
717
|
+
* @returns Promise that resolves when the font is loaded
|
|
718
|
+
*/
|
|
719
|
+
async loadFont(rendererType, options) {
|
|
720
|
+
const rendererTypeKey = String(rendererType);
|
|
721
|
+
const fontHandler = this.fontHandlers[rendererTypeKey];
|
|
722
|
+
if (!fontHandler) {
|
|
723
|
+
throw new Error(`Font handler for renderer type '${rendererTypeKey}' not found. Available types: ${Object.keys(this.fontHandlers).join(', ')}`);
|
|
724
|
+
}
|
|
725
|
+
return fontHandler.loadFont(this, options);
|
|
726
|
+
}
|
|
563
727
|
}
|
|
564
728
|
//# sourceMappingURL=Stage.js.map
|