@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
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export enum TextureErrorCode {
|
|
2
|
+
MEMORY_THRESHOLD_EXCEEDED = 'MEMORY_THRESHOLD_EXCEEDED',
|
|
3
|
+
TEXTURE_DATA_NULL = 'TEXTURE_DATA_NULL',
|
|
4
|
+
TEXTURE_TYPE_NOT_REGISTERED = 'TEXTURE_TYPE_NOT_REGISTERED',
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
const defaultMessages: Record<TextureErrorCode, string> = {
|
|
8
|
+
[TextureErrorCode.MEMORY_THRESHOLD_EXCEEDED]: 'Memory threshold exceeded',
|
|
9
|
+
[TextureErrorCode.TEXTURE_DATA_NULL]: 'Texture data is null',
|
|
10
|
+
[TextureErrorCode.TEXTURE_TYPE_NOT_REGISTERED]:
|
|
11
|
+
'Texture type is not registered',
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export class TextureError extends Error {
|
|
15
|
+
code?: TextureErrorCode;
|
|
16
|
+
|
|
17
|
+
constructor(message: string);
|
|
18
|
+
constructor(code: TextureErrorCode, message?: string);
|
|
19
|
+
constructor(codeOrMessage: TextureErrorCode | string, maybeMessage?: string) {
|
|
20
|
+
const isCode = Object.values(TextureErrorCode).includes(
|
|
21
|
+
codeOrMessage as TextureErrorCode,
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
const code = isCode ? (codeOrMessage as TextureErrorCode) : undefined;
|
|
25
|
+
let message: string;
|
|
26
|
+
if (isCode && code) {
|
|
27
|
+
message = maybeMessage ?? defaultMessages[code];
|
|
28
|
+
} else {
|
|
29
|
+
message = String(codeOrMessage);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
super(message);
|
|
33
|
+
this.name = new.target.name;
|
|
34
|
+
if (code) this.code = code;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function isTextureError(err: unknown): err is TextureError {
|
|
39
|
+
return (
|
|
40
|
+
err instanceof TextureError ||
|
|
41
|
+
(typeof err === 'object' &&
|
|
42
|
+
err !== null &&
|
|
43
|
+
(err as { name?: unknown }).name === 'TextureError' &&
|
|
44
|
+
typeof (err as { code?: unknown }).code === 'string')
|
|
45
|
+
);
|
|
46
|
+
}
|
|
@@ -17,9 +17,8 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
import { isProductionEnvironment } from '../utils.js';
|
|
20
|
-
import { getTimeStamp } from './platform.js';
|
|
21
20
|
import type { Stage } from './Stage.js';
|
|
22
|
-
import {
|
|
21
|
+
import { Texture, TextureType } from './textures/Texture.js';
|
|
23
22
|
import { bytesToMb } from './utils.js';
|
|
24
23
|
|
|
25
24
|
export interface TextureMemoryManagerSettings {
|
|
@@ -116,17 +115,21 @@ export interface MemoryInfo {
|
|
|
116
115
|
*/
|
|
117
116
|
export class TextureMemoryManager {
|
|
118
117
|
private memUsed = 0;
|
|
119
|
-
private loadedTextures:
|
|
118
|
+
private loadedTextures: (Texture | null)[] = [];
|
|
120
119
|
private orphanedTextures: Texture[] = [];
|
|
121
|
-
private criticalThreshold: number;
|
|
122
|
-
private targetThreshold: number;
|
|
123
|
-
private cleanupInterval: number;
|
|
124
|
-
private debugLogging: boolean;
|
|
120
|
+
private criticalThreshold: number = 124e6;
|
|
121
|
+
private targetThreshold: number = 0.5;
|
|
122
|
+
private cleanupInterval: number = 5000;
|
|
123
|
+
private debugLogging: boolean = false;
|
|
124
|
+
private loggingID: ReturnType<typeof setInterval> =
|
|
125
|
+
0 as unknown as ReturnType<typeof setInterval>;
|
|
125
126
|
private lastCleanupTime = 0;
|
|
126
|
-
private baselineMemoryAllocation: number;
|
|
127
|
+
private baselineMemoryAllocation: number = 26e6;
|
|
128
|
+
|
|
129
|
+
private hasWarnedAboveCritical = false;
|
|
127
130
|
|
|
128
131
|
public criticalCleanupRequested = false;
|
|
129
|
-
public doNotExceedCriticalThreshold: boolean;
|
|
132
|
+
public doNotExceedCriticalThreshold: boolean = false;
|
|
130
133
|
|
|
131
134
|
/**
|
|
132
135
|
* The current frame time in milliseconds
|
|
@@ -139,46 +142,7 @@ export class TextureMemoryManager {
|
|
|
139
142
|
public frameTime = 0;
|
|
140
143
|
|
|
141
144
|
constructor(private stage: Stage, settings: TextureMemoryManagerSettings) {
|
|
142
|
-
|
|
143
|
-
this.doNotExceedCriticalThreshold = doNotExceedCriticalThreshold || false;
|
|
144
|
-
this.criticalThreshold = Math.round(criticalThreshold);
|
|
145
|
-
const targetFraction = Math.max(
|
|
146
|
-
0,
|
|
147
|
-
Math.min(1, settings.targetThresholdLevel),
|
|
148
|
-
);
|
|
149
|
-
this.cleanupInterval = settings.cleanupInterval;
|
|
150
|
-
this.debugLogging = settings.debugLogging;
|
|
151
|
-
this.baselineMemoryAllocation = Math.round(
|
|
152
|
-
settings.baselineMemoryAllocation,
|
|
153
|
-
);
|
|
154
|
-
this.targetThreshold = Math.max(
|
|
155
|
-
Math.round(criticalThreshold * targetFraction),
|
|
156
|
-
this.baselineMemoryAllocation,
|
|
157
|
-
);
|
|
158
|
-
this.memUsed = Math.round(settings.baselineMemoryAllocation);
|
|
159
|
-
|
|
160
|
-
if (settings.debugLogging) {
|
|
161
|
-
let lastMemUse = 0;
|
|
162
|
-
setInterval(() => {
|
|
163
|
-
if (lastMemUse !== this.memUsed) {
|
|
164
|
-
lastMemUse = this.memUsed;
|
|
165
|
-
console.log(
|
|
166
|
-
`[TextureMemoryManager] Memory used: ${bytesToMb(
|
|
167
|
-
this.memUsed,
|
|
168
|
-
)} mb / ${bytesToMb(this.criticalThreshold)} mb (${(
|
|
169
|
-
(this.memUsed / this.criticalThreshold) *
|
|
170
|
-
100
|
|
171
|
-
).toFixed(1)}%)`,
|
|
172
|
-
);
|
|
173
|
-
}
|
|
174
|
-
}, 1000);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// If the threshold is 0, we disable the memory manager by replacing the
|
|
178
|
-
// setTextureMemUse method with a no-op function.
|
|
179
|
-
if (criticalThreshold === 0) {
|
|
180
|
-
this.setTextureMemUse = () => {};
|
|
181
|
-
}
|
|
145
|
+
this.updateSettings(settings);
|
|
182
146
|
}
|
|
183
147
|
|
|
184
148
|
/**
|
|
@@ -217,17 +181,30 @@ export class TextureMemoryManager {
|
|
|
217
181
|
* @param byteSize - The size of the texture in bytes
|
|
218
182
|
*/
|
|
219
183
|
setTextureMemUse(texture: Texture, byteSize: number) {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
this.memUsed -= this.loadedTextures.get(texture)!;
|
|
223
|
-
}
|
|
184
|
+
// Update global memory counter by subtracting old value
|
|
185
|
+
this.memUsed -= texture.memUsed;
|
|
224
186
|
|
|
225
187
|
if (byteSize === 0) {
|
|
226
|
-
|
|
188
|
+
// PERFORMANCE: Mark for deletion, slot will be reused later
|
|
189
|
+
const index = this.loadedTextures.indexOf(texture);
|
|
190
|
+
if (index !== -1) {
|
|
191
|
+
this.loadedTextures[index] = null;
|
|
192
|
+
}
|
|
193
|
+
texture.memUsed = 0;
|
|
227
194
|
return;
|
|
228
195
|
} else {
|
|
196
|
+
// Update texture memory and add to tracking if not already present
|
|
197
|
+
texture.memUsed = byteSize;
|
|
229
198
|
this.memUsed += byteSize;
|
|
230
|
-
this.loadedTextures.
|
|
199
|
+
if (this.loadedTextures.indexOf(texture) === -1) {
|
|
200
|
+
// PERFORMANCE: Reuse empty slots before appending
|
|
201
|
+
const emptyIndex = this.loadedTextures.indexOf(null);
|
|
202
|
+
if (emptyIndex !== -1) {
|
|
203
|
+
this.loadedTextures[emptyIndex] = texture;
|
|
204
|
+
} else {
|
|
205
|
+
this.loadedTextures.push(texture);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
231
208
|
}
|
|
232
209
|
|
|
233
210
|
if (this.memUsed > this.criticalThreshold) {
|
|
@@ -247,82 +224,36 @@ export class TextureMemoryManager {
|
|
|
247
224
|
return this.memUsed > this.criticalThreshold;
|
|
248
225
|
}
|
|
249
226
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
) {
|
|
261
|
-
const texture = this.orphanedTextures.shift();
|
|
262
|
-
|
|
263
|
-
if (texture === undefined) {
|
|
264
|
-
continue;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
if (texture.renderable === true) {
|
|
268
|
-
// If the texture is renderable, we can't free it up
|
|
269
|
-
continue;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
texture.free();
|
|
273
|
-
txManager.removeTextureFromCache(texture);
|
|
227
|
+
/**
|
|
228
|
+
* Destroy a texture and remove it from the memory manager
|
|
229
|
+
*
|
|
230
|
+
* @param texture - The texture to destroy
|
|
231
|
+
*/
|
|
232
|
+
destroyTexture(texture: Texture) {
|
|
233
|
+
if (this.debugLogging === true) {
|
|
234
|
+
console.log(
|
|
235
|
+
`[TextureMemoryManager] Destroying texture. State: ${texture.state}`,
|
|
236
|
+
);
|
|
274
237
|
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
cleanupDeep(critical: boolean) {
|
|
278
|
-
// Free non-renderable textures until we reach the target threshold
|
|
279
|
-
const memTarget = critical ? this.criticalThreshold : this.targetThreshold;
|
|
280
|
-
const txManager = this.stage.txManager;
|
|
281
238
|
|
|
282
|
-
//
|
|
283
|
-
const
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
const texture = textures[i];
|
|
287
|
-
if (texture === undefined) {
|
|
288
|
-
continue;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
if (
|
|
292
|
-
texture.type === TextureType.image ||
|
|
293
|
-
texture.type === TextureType.noise ||
|
|
294
|
-
texture.type === TextureType.renderToTexture
|
|
295
|
-
) {
|
|
296
|
-
if (texture.renderable === true) {
|
|
297
|
-
filteredAndSortedTextures.push(texture);
|
|
298
|
-
} else {
|
|
299
|
-
filteredAndSortedTextures.unshift(texture);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
239
|
+
// PERFORMANCE: Null out array position, slot will be reused later
|
|
240
|
+
const index = this.loadedTextures.indexOf(texture);
|
|
241
|
+
if (index !== -1) {
|
|
242
|
+
this.loadedTextures[index] = null;
|
|
302
243
|
}
|
|
303
244
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
continue;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
if (texture.preventCleanup === true) {
|
|
311
|
-
continue;
|
|
312
|
-
}
|
|
245
|
+
// Destroy texture and update memory counters
|
|
246
|
+
const txManager = this.stage.txManager;
|
|
247
|
+
txManager.removeTextureFromCache(texture);
|
|
313
248
|
|
|
314
|
-
|
|
315
|
-
break;
|
|
316
|
-
}
|
|
249
|
+
texture.destroy();
|
|
317
250
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
txManager.removeTextureFromQueue(texture);
|
|
322
|
-
}
|
|
251
|
+
// Update memory counters
|
|
252
|
+
this.memUsed -= texture.memUsed;
|
|
253
|
+
texture.memUsed = 0;
|
|
323
254
|
}
|
|
324
255
|
|
|
325
|
-
cleanup(
|
|
256
|
+
cleanup(full: boolean = false) {
|
|
326
257
|
const critical = this.criticalCleanupRequested;
|
|
327
258
|
this.lastCleanupTime = this.frameTime;
|
|
328
259
|
|
|
@@ -335,16 +266,41 @@ export class TextureMemoryManager {
|
|
|
335
266
|
|
|
336
267
|
if (this.debugLogging === true) {
|
|
337
268
|
console.log(
|
|
338
|
-
`[TextureMemoryManager] Cleaning up textures. Critical: ${critical}.
|
|
269
|
+
`[TextureMemoryManager] Cleaning up textures. Critical: ${critical}. Full: ${full}`,
|
|
339
270
|
);
|
|
340
271
|
}
|
|
341
272
|
|
|
342
|
-
//
|
|
343
|
-
this.
|
|
273
|
+
// Free non-renderable textures until we reach the target threshold
|
|
274
|
+
const memTarget = critical ? this.criticalThreshold : this.targetThreshold;
|
|
275
|
+
|
|
276
|
+
// PERFORMANCE: Zero-overhead cleanup with null marking
|
|
277
|
+
// Skip null entries, mark cleaned textures as null for later defrag
|
|
278
|
+
let currentMemUsed = this.memUsed;
|
|
344
279
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
280
|
+
for (let i = 0; i < this.loadedTextures.length; i++) {
|
|
281
|
+
// Early exit: target memory reached
|
|
282
|
+
if (full === false && currentMemUsed < memTarget) {
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const texture = this.loadedTextures[i];
|
|
287
|
+
if (!texture) continue; // Skip null entries from previous deletions
|
|
288
|
+
|
|
289
|
+
// Fast type check for cleanable textures
|
|
290
|
+
const isCleanableType =
|
|
291
|
+
texture.type === TextureType.image ||
|
|
292
|
+
texture.type === TextureType.noise ||
|
|
293
|
+
texture.type === TextureType.renderToTexture;
|
|
294
|
+
|
|
295
|
+
// Immediate cleanup if eligible
|
|
296
|
+
if (isCleanableType && texture.canBeCleanedUp() === true) {
|
|
297
|
+
// Get memory before destroying
|
|
298
|
+
const textureMemory = texture.memUsed;
|
|
299
|
+
|
|
300
|
+
// Destroy texture (which will null out the array position)
|
|
301
|
+
this.destroyTexture(texture);
|
|
302
|
+
currentMemUsed -= textureMemory;
|
|
303
|
+
}
|
|
348
304
|
}
|
|
349
305
|
|
|
350
306
|
if (this.memUsed >= this.criticalThreshold) {
|
|
@@ -352,14 +308,20 @@ export class TextureMemoryManager {
|
|
|
352
308
|
memUsed: this.memUsed,
|
|
353
309
|
criticalThreshold: this.criticalThreshold,
|
|
354
310
|
});
|
|
355
|
-
|
|
356
|
-
if (
|
|
311
|
+
// Only emit the warning once per over-threshold period
|
|
312
|
+
if (
|
|
313
|
+
!this.hasWarnedAboveCritical &&
|
|
314
|
+
(this.debugLogging === true || isProductionEnvironment === false)
|
|
315
|
+
) {
|
|
357
316
|
console.warn(
|
|
358
317
|
`[TextureMemoryManager] Memory usage above critical threshold after cleanup: ${this.memUsed}`,
|
|
359
318
|
);
|
|
319
|
+
|
|
320
|
+
this.hasWarnedAboveCritical = true;
|
|
360
321
|
}
|
|
361
322
|
} else {
|
|
362
323
|
this.criticalCleanupRequested = false;
|
|
324
|
+
this.hasWarnedAboveCritical = false;
|
|
363
325
|
}
|
|
364
326
|
}
|
|
365
327
|
|
|
@@ -372,15 +334,19 @@ export class TextureMemoryManager {
|
|
|
372
334
|
*/
|
|
373
335
|
getMemoryInfo(): MemoryInfo {
|
|
374
336
|
let renderableTexturesLoaded = 0;
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
|
|
337
|
+
let renderableMemUsed = this.baselineMemoryAllocation;
|
|
338
|
+
|
|
339
|
+
for (const texture of this.loadedTextures) {
|
|
340
|
+
if (texture && texture.renderable) {
|
|
341
|
+
renderableTexturesLoaded += 1;
|
|
342
|
+
renderableMemUsed += texture.memUsed;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Count non-null entries for accurate loaded texture count
|
|
347
|
+
const actualLoadedTextures = this.loadedTextures.filter(
|
|
348
|
+
(t) => t !== null,
|
|
349
|
+
).length;
|
|
384
350
|
|
|
385
351
|
return {
|
|
386
352
|
criticalThreshold: this.criticalThreshold,
|
|
@@ -388,8 +354,65 @@ export class TextureMemoryManager {
|
|
|
388
354
|
renderableMemUsed,
|
|
389
355
|
memUsed: this.memUsed,
|
|
390
356
|
renderableTexturesLoaded,
|
|
391
|
-
loadedTextures:
|
|
357
|
+
loadedTextures: actualLoadedTextures,
|
|
392
358
|
baselineMemoryAllocation: this.baselineMemoryAllocation,
|
|
393
359
|
};
|
|
394
360
|
}
|
|
361
|
+
|
|
362
|
+
public updateSettings(settings: TextureMemoryManagerSettings): void {
|
|
363
|
+
const { criticalThreshold, doNotExceedCriticalThreshold } = settings;
|
|
364
|
+
|
|
365
|
+
this.doNotExceedCriticalThreshold = doNotExceedCriticalThreshold || false;
|
|
366
|
+
this.criticalThreshold = Math.round(criticalThreshold);
|
|
367
|
+
|
|
368
|
+
if (this.memUsed === 0) {
|
|
369
|
+
this.memUsed = Math.round(settings.baselineMemoryAllocation);
|
|
370
|
+
} else {
|
|
371
|
+
const memUsedExBaseline = this.memUsed - this.baselineMemoryAllocation;
|
|
372
|
+
this.memUsed = Math.round(
|
|
373
|
+
settings.baselineMemoryAllocation + memUsedExBaseline,
|
|
374
|
+
);
|
|
375
|
+
}
|
|
376
|
+
this.baselineMemoryAllocation = Math.round(
|
|
377
|
+
settings.baselineMemoryAllocation,
|
|
378
|
+
);
|
|
379
|
+
const targetFraction = Math.max(
|
|
380
|
+
0,
|
|
381
|
+
Math.min(1, settings.targetThresholdLevel),
|
|
382
|
+
);
|
|
383
|
+
this.targetThreshold = Math.max(
|
|
384
|
+
Math.round(criticalThreshold * targetFraction),
|
|
385
|
+
this.baselineMemoryAllocation,
|
|
386
|
+
);
|
|
387
|
+
|
|
388
|
+
this.cleanupInterval = settings.cleanupInterval;
|
|
389
|
+
this.debugLogging = settings.debugLogging;
|
|
390
|
+
|
|
391
|
+
if (this.loggingID && !settings.debugLogging) {
|
|
392
|
+
clearInterval(this.loggingID);
|
|
393
|
+
this.loggingID = 0 as unknown as ReturnType<typeof setInterval>;
|
|
394
|
+
}
|
|
395
|
+
if (settings.debugLogging && !this.loggingID) {
|
|
396
|
+
let lastMemUse = 0;
|
|
397
|
+
this.loggingID = setInterval(() => {
|
|
398
|
+
if (lastMemUse !== this.memUsed) {
|
|
399
|
+
lastMemUse = this.memUsed;
|
|
400
|
+
console.log(
|
|
401
|
+
`[TextureMemoryManager] Memory used: ${bytesToMb(
|
|
402
|
+
this.memUsed,
|
|
403
|
+
)} mb / ${bytesToMb(this.criticalThreshold)} mb (${(
|
|
404
|
+
(this.memUsed / this.criticalThreshold) *
|
|
405
|
+
100
|
|
406
|
+
).toFixed(1)}%)`,
|
|
407
|
+
);
|
|
408
|
+
}
|
|
409
|
+
}, 1000);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// If the threshold is 0, we disable the memory manager by replacing the
|
|
413
|
+
// setTextureMemUse method with a no-op function.
|
|
414
|
+
if (criticalThreshold === 0) {
|
|
415
|
+
this.setTextureMemUse = () => {};
|
|
416
|
+
}
|
|
417
|
+
}
|
|
395
418
|
}
|
|
@@ -18,17 +18,16 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import { type CoreNode, type CoreNodeAnimateProps } from '../CoreNode.js';
|
|
21
|
-
import { getTimingFunction } from '../utils.js';
|
|
21
|
+
import { getTimingFunction, type TimingFunction } from '../utils.js';
|
|
22
22
|
import { mergeColorProgress } from '../../utils.js';
|
|
23
23
|
import { EventEmitter } from '../../common/EventEmitter.js';
|
|
24
24
|
|
|
25
25
|
export interface AnimationSettings {
|
|
26
26
|
duration: number;
|
|
27
27
|
delay: number;
|
|
28
|
-
easing: string;
|
|
28
|
+
easing: string | TimingFunction;
|
|
29
29
|
loop: boolean;
|
|
30
30
|
repeat: number;
|
|
31
|
-
repeatDelay: number;
|
|
32
31
|
stopMethod: 'reverse' | 'reset' | false;
|
|
33
32
|
}
|
|
34
33
|
|
|
@@ -43,7 +42,7 @@ export class CoreAnimation extends EventEmitter {
|
|
|
43
42
|
private progress = 0;
|
|
44
43
|
private delayFor = 0;
|
|
45
44
|
private delay = 0;
|
|
46
|
-
private timingFunction:
|
|
45
|
+
private timingFunction: TimingFunction;
|
|
47
46
|
|
|
48
47
|
propValuesMap: PropValuesMap = {};
|
|
49
48
|
|
|
@@ -89,10 +88,10 @@ export class CoreAnimation extends EventEmitter {
|
|
|
89
88
|
easing,
|
|
90
89
|
loop: settings.loop ?? false,
|
|
91
90
|
repeat: settings.repeat ?? 0,
|
|
92
|
-
repeatDelay: settings.repeatDelay ?? 0,
|
|
93
91
|
stopMethod: settings.stopMethod ?? false,
|
|
94
92
|
};
|
|
95
|
-
this.timingFunction =
|
|
93
|
+
this.timingFunction =
|
|
94
|
+
typeof easing === 'string' ? getTimingFunction(easing) : easing;
|
|
96
95
|
this.delayFor = delay;
|
|
97
96
|
this.delay = delay;
|
|
98
97
|
}
|
|
@@ -162,14 +161,14 @@ export class CoreAnimation extends EventEmitter {
|
|
|
162
161
|
}
|
|
163
162
|
|
|
164
163
|
private applyEasing(p: number, s: number, e: number): number {
|
|
165
|
-
return
|
|
164
|
+
return this.timingFunction(p) * (e - s) + s;
|
|
166
165
|
}
|
|
167
166
|
|
|
168
167
|
updateValue(
|
|
169
168
|
propName: string,
|
|
170
169
|
propValue: number,
|
|
171
170
|
startValue: number,
|
|
172
|
-
easing: string | undefined,
|
|
171
|
+
easing: string | TimingFunction | undefined,
|
|
173
172
|
): number {
|
|
174
173
|
if (this.progress === 1) {
|
|
175
174
|
return propValue;
|
|
@@ -201,7 +200,7 @@ export class CoreAnimation extends EventEmitter {
|
|
|
201
200
|
private updateValues(
|
|
202
201
|
target: Record<string, number>,
|
|
203
202
|
valueMap: Record<string, PropValues>,
|
|
204
|
-
easing: string | undefined,
|
|
203
|
+
easing: string | TimingFunction | undefined,
|
|
205
204
|
) {
|
|
206
205
|
const entries = Object.entries(valueMap);
|
|
207
206
|
const eLength = entries.length;
|
|
@@ -215,6 +214,13 @@ export class CoreAnimation extends EventEmitter {
|
|
|
215
214
|
update(dt: number) {
|
|
216
215
|
const { duration, loop, easing, stopMethod } = this.settings;
|
|
217
216
|
const { delayFor } = this;
|
|
217
|
+
|
|
218
|
+
if (this.node.destroyed) {
|
|
219
|
+
// cleanup
|
|
220
|
+
this.emit('destroyed', {});
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
|
|
218
224
|
if (duration === 0 && delayFor === 0) {
|
|
219
225
|
this.emit('finished', {});
|
|
220
226
|
return;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/unbound-method */
|
|
2
1
|
/*
|
|
3
2
|
* If not stated otherwise in this file or this component's LICENSE file the
|
|
4
3
|
* following copyright and licenses apply:
|
|
@@ -52,6 +51,7 @@ export class CoreAnimationController
|
|
|
52
51
|
this.onAnimating = this.onAnimating.bind(this);
|
|
53
52
|
this.onFinished = this.onFinished.bind(this);
|
|
54
53
|
this.onTick = this.onTick.bind(this);
|
|
54
|
+
this.onDestroy = this.onDestroy.bind(this);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
start(): IAnimationController {
|
|
@@ -96,6 +96,7 @@ export class CoreAnimationController
|
|
|
96
96
|
this.animation.once('finished', this.onFinished);
|
|
97
97
|
this.animation.on('animating', this.onAnimating);
|
|
98
98
|
this.animation.on('tick', this.onTick);
|
|
99
|
+
this.animation.on('destroyed', this.onDestroy);
|
|
99
100
|
// Then register the animation
|
|
100
101
|
this.manager.registerAnimation(this.animation);
|
|
101
102
|
}
|
|
@@ -107,6 +108,7 @@ export class CoreAnimationController
|
|
|
107
108
|
this.animation.off('finished', this.onFinished);
|
|
108
109
|
this.animation.off('animating', this.onAnimating);
|
|
109
110
|
this.animation.off('tick', this.onTick);
|
|
111
|
+
this.animation.off('destroy', this.onDestroy);
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
private makeStoppedPromise(): void {
|
|
@@ -117,8 +119,12 @@ export class CoreAnimationController
|
|
|
117
119
|
}
|
|
118
120
|
}
|
|
119
121
|
|
|
122
|
+
private onDestroy(this: CoreAnimationController): void {
|
|
123
|
+
this.unregisterAnimation();
|
|
124
|
+
this.state = 'stopped';
|
|
125
|
+
}
|
|
126
|
+
|
|
120
127
|
private onFinished(this: CoreAnimationController): void {
|
|
121
|
-
assertTruthy(this.stoppedResolve);
|
|
122
128
|
// If the animation is looping, then we need to restart it.
|
|
123
129
|
const { loop, stopMethod } = this.animation.settings;
|
|
124
130
|
|
|
@@ -136,8 +142,11 @@ export class CoreAnimationController
|
|
|
136
142
|
this.unregisterAnimation();
|
|
137
143
|
|
|
138
144
|
// resolve promise
|
|
139
|
-
this.stoppedResolve
|
|
140
|
-
|
|
145
|
+
if (this.stoppedResolve !== null) {
|
|
146
|
+
this.stoppedResolve();
|
|
147
|
+
this.stoppedResolve = null;
|
|
148
|
+
}
|
|
149
|
+
|
|
141
150
|
this.emit('stopped', this);
|
|
142
151
|
this.state = 'stopped';
|
|
143
152
|
}
|
|
@@ -75,7 +75,13 @@ function createImageWorker() {
|
|
|
75
75
|
xhr.onload = function () {
|
|
76
76
|
// On most devices like WebOS and Tizen, the file protocol returns 0 while http(s) protocol returns 200
|
|
77
77
|
if (xhr.status !== 200 && xhr.status !== 0) {
|
|
78
|
-
return reject(
|
|
78
|
+
return reject(
|
|
79
|
+
new Error(
|
|
80
|
+
`Image loading failed. HTTP status code: ${
|
|
81
|
+
xhr.status || 'N/A'
|
|
82
|
+
}. URL: ${src}`,
|
|
83
|
+
),
|
|
84
|
+
);
|
|
79
85
|
}
|
|
80
86
|
|
|
81
87
|
var blob = xhr.response;
|
|
@@ -172,7 +178,7 @@ export class ImageWorkerManager {
|
|
|
172
178
|
imageWorkersEnabled = true;
|
|
173
179
|
messageManager: Record<number, MessageCallback> = {};
|
|
174
180
|
workers: Worker[] = [];
|
|
175
|
-
|
|
181
|
+
workerLoad: number[] = [];
|
|
176
182
|
nextId = 0;
|
|
177
183
|
|
|
178
184
|
constructor(
|
|
@@ -183,14 +189,19 @@ export class ImageWorkerManager {
|
|
|
183
189
|
numImageWorkers,
|
|
184
190
|
createImageBitmapSupport,
|
|
185
191
|
);
|
|
186
|
-
this.workers.forEach((worker) => {
|
|
187
|
-
worker.onmessage = this.handleMessage
|
|
192
|
+
this.workers.forEach((worker, index) => {
|
|
193
|
+
worker.onmessage = (event) => this.handleMessage(event, index);
|
|
188
194
|
});
|
|
189
195
|
}
|
|
190
196
|
|
|
191
|
-
private handleMessage(event: MessageEvent) {
|
|
197
|
+
private handleMessage(event: MessageEvent, workerIndex: number) {
|
|
192
198
|
const { id, data, error } = event.data as ImageWorkerMessage;
|
|
193
199
|
const msg = this.messageManager[id];
|
|
200
|
+
|
|
201
|
+
if (this.workerLoad[workerIndex]) {
|
|
202
|
+
this.workerLoad[workerIndex]--;
|
|
203
|
+
}
|
|
204
|
+
|
|
194
205
|
if (msg) {
|
|
195
206
|
const [resolve, reject] = msg;
|
|
196
207
|
delete this.messageManager[id];
|
|
@@ -236,14 +247,30 @@ export class ImageWorkerManager {
|
|
|
236
247
|
const workers: Worker[] = [];
|
|
237
248
|
for (let i = 0; i < numWorkers; i++) {
|
|
238
249
|
workers.push(new Worker(blobURL));
|
|
250
|
+
this.workerLoad.push(0);
|
|
239
251
|
}
|
|
240
252
|
return workers;
|
|
241
253
|
}
|
|
242
254
|
|
|
243
|
-
private
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
255
|
+
private getNextWorkerIndex(): number {
|
|
256
|
+
if (this.workers.length === 0) return -1;
|
|
257
|
+
|
|
258
|
+
let minLoad = 99;
|
|
259
|
+
let workerIndex = 0;
|
|
260
|
+
|
|
261
|
+
for (let i = 0; i < this.workers.length; i++) {
|
|
262
|
+
const load = this.workerLoad[i] || 0;
|
|
263
|
+
|
|
264
|
+
if (load === 0) {
|
|
265
|
+
return i;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
if (load < minLoad) {
|
|
269
|
+
minLoad = load;
|
|
270
|
+
workerIndex = i;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return workerIndex;
|
|
247
274
|
}
|
|
248
275
|
|
|
249
276
|
getImage(
|
|
@@ -259,9 +286,13 @@ export class ImageWorkerManager {
|
|
|
259
286
|
if (this.workers) {
|
|
260
287
|
const id = this.nextId++;
|
|
261
288
|
this.messageManager[id] = [resolve, reject];
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
289
|
+
const nextWorkerIndex = this.getNextWorkerIndex();
|
|
290
|
+
|
|
291
|
+
if (nextWorkerIndex !== -1) {
|
|
292
|
+
const worker = this.workers[nextWorkerIndex];
|
|
293
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
294
|
+
this.workerLoad[nextWorkerIndex]!++;
|
|
295
|
+
worker!.postMessage({
|
|
265
296
|
id,
|
|
266
297
|
src: src,
|
|
267
298
|
premultiplyAlpha,
|