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