@lightningtv/renderer 2.16.1 → 3.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +4 -0
- package/README.md +22 -28
- package/dist/exports/canvas-shaders.js +0 -16
- package/dist/exports/canvas-shaders.js.map +1 -1
- package/dist/exports/canvas.d.ts +8 -2
- package/dist/exports/canvas.js +8 -20
- package/dist/exports/canvas.js.map +1 -1
- package/dist/exports/index.d.ts +18 -13
- package/dist/exports/index.js +9 -27
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/inspector.js +0 -18
- package/dist/exports/inspector.js.map +1 -1
- package/dist/exports/utils.d.ts +2 -1
- package/dist/exports/utils.js +2 -19
- package/dist/exports/utils.js.map +1 -1
- package/dist/exports/webgl-shaders.js +0 -16
- package/dist/exports/webgl-shaders.js.map +1 -1
- package/dist/exports/webgl.d.ts +11 -2
- package/dist/exports/webgl.js +11 -20
- package/dist/exports/webgl.js.map +1 -1
- package/dist/src/common/CommonTypes.d.ts +15 -3
- package/dist/src/common/CommonTypes.js +0 -18
- package/dist/src/common/CommonTypes.js.map +1 -1
- package/dist/src/common/EventEmitter.js +0 -18
- package/dist/src/common/EventEmitter.js.map +1 -1
- package/dist/src/common/IEventEmitter.js +0 -16
- package/dist/src/common/IEventEmitter.js.map +1 -1
- package/dist/src/core/Autosizer.d.ts +35 -0
- package/dist/src/core/Autosizer.js +178 -0
- package/dist/src/core/Autosizer.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +138 -105
- package/dist/src/core/CoreNode.js +805 -526
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.d.ts +29 -73
- package/dist/src/core/CoreShaderManager.js +92 -97
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +75 -87
- package/dist/src/core/CoreTextNode.js +380 -258
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +18 -3
- package/dist/src/core/CoreTextureManager.js +63 -107
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +82 -55
- package/dist/src/core/Stage.js +410 -247
- 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 +4 -3
- package/dist/src/core/TextureMemoryManager.js +103 -135
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/AnimationManager.js +0 -18
- package/dist/src/core/animations/AnimationManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.d.ts +3 -4
- package/dist/src/core/animations/CoreAnimation.js +9 -76
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.js +0 -18
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/lib/ContextSpy.js +0 -18
- package/dist/src/core/lib/ContextSpy.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.d.ts +2 -2
- package/dist/src/core/lib/ImageWorker.js +31 -30
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/Matrix3d.d.ts +1 -0
- package/dist/src/core/lib/Matrix3d.js +7 -19
- package/dist/src/core/lib/Matrix3d.js.map +1 -1
- package/dist/src/core/lib/RenderCoords.d.ts +9 -10
- package/dist/src/core/lib/RenderCoords.js +27 -55
- package/dist/src/core/lib/RenderCoords.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +147 -59
- package/dist/src/core/lib/WebGlContextWrapper.js +252 -158
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/collectionUtils.d.ts +5 -0
- package/dist/src/core/lib/collectionUtils.js +82 -0
- package/dist/src/core/lib/collectionUtils.js.map +1 -0
- package/dist/src/core/lib/colorCache.d.ts +1 -0
- package/dist/src/core/lib/colorCache.js +19 -0
- package/dist/src/core/lib/colorCache.js.map +1 -0
- package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +2 -0
- package/dist/src/core/{renderers/canvas/internal/ColorUtils.js → lib/colorParser.js} +15 -19
- package/dist/src/core/lib/colorParser.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +14 -2
- package/dist/src/core/lib/textureCompression.js +320 -86
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/lib/textureSvg.js +0 -18
- package/dist/src/core/lib/textureSvg.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +8 -2
- package/dist/src/core/lib/utils.js +21 -20
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
- package/dist/src/core/lib/validateImageBitmap.js +4 -4
- package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
- package/dist/src/core/platforms/Platform.d.ts +5 -0
- package/dist/src/core/platforms/Platform.js +0 -18
- package/dist/src/core/platforms/Platform.js.map +1 -1
- package/dist/src/core/platforms/web/WebPlatform.d.ts +1 -0
- package/dist/src/core/platforms/web/WebPlatform.js +39 -7
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
- package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -0
- package/dist/src/core/renderers/CoreContextTexture.js +0 -18
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderOp.js +0 -18
- package/dist/src/core/renderers/CoreRenderOp.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +25 -23
- package/dist/src/core/renderers/CoreRenderer.js +1 -24
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderNode.d.ts +10 -0
- package/dist/src/core/renderers/CoreShaderNode.js +19 -2
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderProgram.js +0 -18
- package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +3 -5
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +86 -83
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +2 -17
- 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 -31
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +80 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -24
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -23
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -67
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +31 -19
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +297 -200
- 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.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +5 -5
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +61 -34
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +32 -5
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +50 -18
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -1
- package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
- package/dist/src/core/shaders/canvas/Border.js +67 -41
- package/dist/src/core/shaders/canvas/Border.js.map +1 -1
- package/dist/src/core/shaders/canvas/HolePunch.js +3 -19
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/canvas/LinearGradient.js +2 -18
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js +5 -21
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/Rounded.js +1 -17
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +40 -26
- 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 +43 -23
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +4 -18
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/Shadow.js +0 -16
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
- package/dist/src/core/shaders/canvas/utils/render.js +31 -34
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +11 -2
- package/dist/src/core/shaders/templates/BorderTemplate.js +30 -26
- 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 +2 -18
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -16
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -18
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -2
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/utils.js +0 -16
- package/dist/src/core/shaders/utils.js.map +1 -1
- package/dist/src/core/shaders/webgl/Border.js +75 -31
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/Default.js +6 -41
- package/dist/src/core/shaders/webgl/Default.js.map +1 -1
- package/dist/src/core/shaders/webgl/HolePunch.js +2 -18
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +68 -30
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +52 -45
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/Rounded.js +25 -23
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +110 -48
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +114 -54
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
- package/dist/src/core/shaders/webgl/SdfShader.js +7 -35
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
- package/dist/src/core/shaders/webgl/Shadow.js +39 -34
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +18 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +384 -0
- package/dist/src/core/text-rendering/TextRenderer.js +2 -0
- package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/Utils.d.ts +30 -0
- package/dist/src/core/text-rendering/Utils.js +66 -0
- package/dist/src/core/text-rendering/Utils.js.map +1 -0
- package/dist/src/core/textures/ColorTexture.d.ts +1 -1
- package/dist/src/core/textures/ColorTexture.js +3 -22
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +10 -3
- package/dist/src/core/textures/ImageTexture.js +33 -62
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
- package/dist/src/core/textures/NoiseTexture.js +8 -26
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.d.ts +7 -7
- package/dist/src/core/textures/RenderTexture.js +12 -30
- package/dist/src/core/textures/RenderTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +6 -8
- package/dist/src/core/textures/SubTexture.js +19 -55
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +80 -16
- package/dist/src/core/textures/Texture.js +131 -37
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +2 -1
- package/dist/src/core/utils.js +1 -19
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/INode.d.ts +9 -9
- package/dist/src/main-api/INode.js.map +1 -1
- package/dist/src/main-api/Inspector.d.ts +135 -2
- package/dist/src/main-api/Inspector.js +507 -30
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +246 -162
- package/dist/src/main-api/Renderer.js +192 -152
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/utils.d.ts +23 -4
- package/dist/src/utils.js +50 -27
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/exports/canvas-shaders.ts +11 -0
- package/exports/canvas.ts +8 -20
- package/exports/index.ts +24 -44
- package/exports/inspector.ts +0 -19
- package/exports/utils.ts +7 -19
- package/exports/webgl-shaders.ts +12 -0
- package/exports/webgl.ts +15 -20
- package/package.json +23 -20
- package/src/common/CommonTypes.ts +20 -22
- package/src/common/EventEmitter.ts +0 -19
- package/src/common/IAnimationController.ts +0 -18
- package/src/common/IEventEmitter.ts +0 -17
- package/src/core/Autosizer.ts +205 -0
- package/src/core/CoreNode.test.ts +378 -46
- package/src/core/CoreNode.ts +1007 -659
- package/src/core/CoreShaderManager.ts +128 -250
- package/src/core/CoreTextNode.ts +457 -321
- package/src/core/CoreTextureManager.ts +94 -115
- package/src/core/Stage.ts +516 -312
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +139 -175
- package/src/core/animations/AnimationManager.ts +0 -19
- package/src/core/animations/CoreAnimation.ts +16 -96
- package/src/core/animations/CoreAnimationController.ts +0 -19
- package/src/core/lib/ContextSpy.ts +0 -19
- package/src/core/lib/ImageWorker.ts +43 -31
- package/src/core/lib/Matrix3d.ts +7 -20
- package/src/core/lib/RenderCoords.ts +36 -67
- package/src/core/lib/WebGlContextWrapper.ts +353 -237
- package/src/core/lib/collectionUtils.ts +99 -0
- package/src/core/lib/colorCache.ts +20 -0
- package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +16 -19
- package/src/core/lib/textureCompression.ts +434 -94
- package/src/core/lib/textureSvg.ts +0 -19
- package/src/core/lib/utils.ts +31 -19
- package/src/core/lib/validateImageBitmap.ts +17 -6
- package/src/core/platforms/Platform.ts +64 -0
- package/src/core/platforms/web/WebPlatform.ts +132 -0
- package/src/core/renderers/CoreContextTexture.ts +1 -19
- package/src/core/renderers/CoreRenderOp.ts +0 -19
- package/src/core/renderers/CoreRenderer.ts +34 -49
- package/src/core/renderers/CoreShaderNode.ts +202 -0
- package/src/core/renderers/CoreShaderProgram.ts +4 -0
- package/src/core/renderers/canvas/CanvasRenderer.ts +270 -0
- package/src/core/renderers/canvas/CanvasShaderNode.ts +79 -0
- package/src/core/renderers/canvas/{CanvasCoreTexture.ts → CanvasTexture.ts} +15 -27
- package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
- package/src/core/renderers/webgl/{WebGlCoreCtxRenderTexture.ts → WebGlCtxRenderTexture.ts} +15 -36
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +76 -0
- package/src/core/renderers/webgl/{WebGlCoreCtxTexture.ts → WebGlCtxTexture.ts} +89 -70
- package/src/core/renderers/webgl/WebGlRenderer.ts +850 -0
- package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -0
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +356 -0
- package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
- package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -24
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
- package/src/core/shaders/canvas/Border.ts +119 -0
- package/src/core/shaders/canvas/HolePunch.ts +38 -0
- package/src/core/shaders/canvas/LinearGradient.ts +54 -0
- package/src/core/shaders/canvas/RadialGradient.ts +82 -0
- package/src/core/shaders/canvas/Rounded.ts +38 -0
- package/src/core/shaders/canvas/RoundedWithBorder.ts +105 -0
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +118 -0
- package/src/core/shaders/canvas/RoundedWithShadow.ts +56 -0
- package/src/core/shaders/canvas/Shadow.ts +35 -0
- package/src/core/shaders/canvas/utils/render.ts +143 -0
- package/src/core/shaders/templates/BorderTemplate.ts +128 -0
- package/src/core/shaders/templates/HolePunchTemplate.ts +65 -0
- package/src/core/shaders/templates/LinearGradientTemplate.ts +54 -0
- package/src/core/shaders/templates/RadialGradientTemplate.ts +66 -0
- package/src/core/shaders/templates/RoundedTemplate.ts +81 -0
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +21 -0
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +23 -0
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +18 -0
- package/src/core/shaders/templates/ShadowTemplate.ts +89 -0
- package/src/core/shaders/utils.ts +30 -0
- package/src/core/shaders/webgl/Border.ts +159 -0
- package/src/core/shaders/webgl/Default.ts +52 -0
- package/src/core/shaders/webgl/HolePunch.ts +58 -0
- package/src/core/shaders/webgl/LinearGradient.ts +119 -0
- package/src/core/shaders/webgl/RadialGradient.ts +91 -0
- package/src/core/shaders/webgl/Rounded.ts +97 -0
- package/src/core/shaders/webgl/RoundedWithBorder.ts +212 -0
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +234 -0
- package/src/core/shaders/webgl/RoundedWithShadow.ts +132 -0
- package/src/core/shaders/webgl/SdfShader.ts +104 -0
- package/src/core/shaders/webgl/Shadow.ts +119 -0
- package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
- package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
- package/src/core/text-rendering/SdfFontHandler.ts +566 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +406 -0
- package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
- package/src/core/text-rendering/TextRenderer.ts +426 -0
- package/src/core/text-rendering/Utils.ts +80 -0
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
- package/src/core/textures/ColorTexture.ts +7 -24
- package/src/core/textures/ImageTexture.ts +72 -78
- package/src/core/textures/NoiseTexture.ts +14 -31
- package/src/core/textures/RenderTexture.ts +18 -35
- package/src/core/textures/SubTexture.ts +25 -65
- package/src/core/textures/Texture.ts +182 -53
- package/src/core/utils.ts +9 -26
- package/src/main-api/INode.ts +10 -29
- package/src/main-api/Inspector.ts +794 -38
- package/src/main-api/Renderer.ts +476 -274
- package/src/utils.ts +83 -29
- package/dist/src/core/animations/SimpleAnimation.d.ts +0 -28
- package/dist/src/core/animations/SimpleAnimation.js +0 -96
- package/dist/src/core/animations/SimpleAnimation.js.map +0 -1
- package/dist/src/core/platform.d.ts +0 -10
- package/dist/src/core/platform.js +0 -81
- package/dist/src/core/platform.js.map +0 -1
- package/dist/src/core/renderers/CoreShader.d.ts +0 -9
- package/dist/src/core/renderers/CoreShader.js +0 -28
- package/dist/src/core/renderers/CoreShader.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -16
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -124
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -14
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -138
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -58
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -56
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -239
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -616
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -233
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -44
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -118
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
- package/dist/src/core/shaders/templates/shaderUtils.d.ts +0 -5
- package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
- package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
- package/dist/src/core/shaders/webgl/Magnifier.d.ts +0 -46
- package/dist/src/core/shaders/webgl/Magnifier.js +0 -107
- package/dist/src/core/shaders/webgl/Magnifier.js.map +0 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder copy.d.ts +0 -3
- package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js +0 -218
- package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js.map +0 -1
- package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
- package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
- package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
- package/dist/src/core/text-rendering/TrFontManager.js +0 -131
- package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
- package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -120
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -92
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -607
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -373
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
- package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
- package/dist/src/main-api/DynamicShaderController.js +0 -58
- package/dist/src/main-api/DynamicShaderController.js.map +0 -1
- package/dist/src/main-api/ShaderController.d.ts +0 -31
- package/dist/src/main-api/ShaderController.js +0 -37
- package/dist/src/main-api/ShaderController.js.map +0 -1
- package/scripts/please-use-pnpm.js +0 -13
- package/src/core/platform.ts +0 -100
- package/src/core/renderers/CoreShader.ts +0 -41
- package/src/core/renderers/canvas/CanvasCoreRenderer.ts +0 -375
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -231
- package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +0 -48
- package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +0 -50
- package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +0 -125
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +0 -821
- package/src/core/renderers/webgl/WebGlCoreShader.ts +0 -365
- package/src/core/renderers/webgl/shaders/DefaultShader.ts +0 -93
- package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +0 -132
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +0 -580
- package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +0 -167
- package/src/core/renderers/webgl/shaders/SdfShader.ts +0 -204
- package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +0 -87
- package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +0 -159
- package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +0 -127
- package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +0 -148
- package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +0 -67
- package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +0 -157
- package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +0 -171
- package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +0 -168
- package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +0 -187
- package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +0 -110
- package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +0 -196
- 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 -808
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -853
- 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 -557
- package/src/main-api/DynamicShaderController.ts +0 -104
- package/src/main-api/ShaderController.ts +0 -80
package/src/core/Stage.ts
CHANGED
|
@@ -1,23 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
|
-
import { startLoop, getTimeStamp } from './platform.js';
|
|
20
|
-
import { assertTruthy, setPremultiplyMode } from '../utils.js';
|
|
1
|
+
import {
|
|
2
|
+
assertTruthy,
|
|
3
|
+
CALCULATE_FPS,
|
|
4
|
+
isProductionEnvironment,
|
|
5
|
+
setPremultiplyMode,
|
|
6
|
+
USE_RTT,
|
|
7
|
+
} from '../utils.js';
|
|
21
8
|
import { AnimationManager } from './animations/AnimationManager.js';
|
|
22
9
|
import {
|
|
23
10
|
UpdateType,
|
|
@@ -26,13 +13,14 @@ import {
|
|
|
26
13
|
type CoreNodeProps,
|
|
27
14
|
} from './CoreNode.js';
|
|
28
15
|
import { CoreTextureManager } from './CoreTextureManager.js';
|
|
29
|
-
import {
|
|
30
|
-
import { CoreShaderManager, type ShaderMap } from './CoreShaderManager.js';
|
|
16
|
+
import { CoreShaderManager } from './CoreShaderManager.js';
|
|
31
17
|
import {
|
|
32
|
-
|
|
33
|
-
type
|
|
18
|
+
type FontHandler,
|
|
19
|
+
type FontLoadOptions,
|
|
20
|
+
type TextRenderer,
|
|
21
|
+
type TextRenderers,
|
|
34
22
|
type TrProps,
|
|
35
|
-
} from './text-rendering/
|
|
23
|
+
} from './text-rendering/TextRenderer.js';
|
|
36
24
|
|
|
37
25
|
import { EventEmitter } from '../common/EventEmitter.js';
|
|
38
26
|
import { ContextSpy } from './lib/ContextSpy.js';
|
|
@@ -45,47 +33,32 @@ import {
|
|
|
45
33
|
TextureMemoryManager,
|
|
46
34
|
type TextureMemoryManagerSettings,
|
|
47
35
|
} from './TextureMemoryManager.js';
|
|
48
|
-
import type { CoreRendererOptions } from './renderers/CoreRenderer.js';
|
|
49
36
|
import { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
50
|
-
import type { WebGlCoreRenderer } from './renderers/webgl/WebGlCoreRenderer.js';
|
|
51
|
-
import type { CanvasCoreRenderer } from './renderers/canvas/CanvasCoreRenderer.js';
|
|
52
|
-
import type { BaseShaderController } from '../main-api/ShaderController.js';
|
|
53
37
|
import { CoreTextNode, type CoreTextNodeProps } from './CoreTextNode.js';
|
|
54
38
|
import { santizeCustomDataMap } from '../main-api/utils.js';
|
|
55
|
-
import
|
|
56
|
-
import type {
|
|
57
|
-
import {
|
|
58
|
-
|
|
59
|
-
createPreloadBounds,
|
|
60
|
-
pointInBound,
|
|
61
|
-
type Bound,
|
|
62
|
-
} from './lib/utils.js';
|
|
39
|
+
import { pointInBound } from './lib/utils.js';
|
|
40
|
+
import type { CoreShaderNode } from './renderers/CoreShaderNode.js';
|
|
41
|
+
import { Matrix3d } from './lib/Matrix3d.js';
|
|
42
|
+
import { createBound, createPreloadBounds, type Bound } from './lib/utils.js';
|
|
63
43
|
import type { Texture } from './textures/Texture.js';
|
|
64
44
|
import { ColorTexture } from './textures/ColorTexture.js';
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
45
|
+
import type { Platform } from './platforms/Platform.js';
|
|
46
|
+
import type { WebPlatform } from './platforms/web/WebPlatform.js';
|
|
47
|
+
import type { RendererMainSettings } from '../main-api/Renderer.js';
|
|
48
|
+
|
|
49
|
+
export type StageOptions = Omit<
|
|
50
|
+
RendererMainSettings,
|
|
51
|
+
'inspector' | 'platform' | 'maxRetryCount'
|
|
52
|
+
> & {
|
|
69
53
|
textureMemory: TextureMemoryManagerSettings;
|
|
70
|
-
boundsMargin: number | [number, number, number, number];
|
|
71
|
-
deviceLogicalPixelRatio: number;
|
|
72
|
-
devicePhysicalPixelRatio: number;
|
|
73
54
|
canvas: HTMLCanvasElement | OffscreenCanvas;
|
|
74
|
-
clearColor: number;
|
|
75
55
|
fpsUpdateInterval: number;
|
|
76
|
-
targetFPS: number;
|
|
77
|
-
enableContextSpy: boolean;
|
|
78
|
-
forceWebGL2: boolean;
|
|
79
|
-
numImageWorkers: number;
|
|
80
|
-
renderEngine: typeof WebGlCoreRenderer | typeof CanvasCoreRenderer;
|
|
81
56
|
eventBus: EventEmitter;
|
|
82
|
-
|
|
83
|
-
fontEngines: (typeof CanvasTextRenderer | typeof SdfTextRenderer)[];
|
|
57
|
+
platform: Platform | WebPlatform;
|
|
84
58
|
inspector: boolean;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
59
|
+
maxRetryCount: number;
|
|
60
|
+
enableClear: boolean;
|
|
61
|
+
};
|
|
89
62
|
|
|
90
63
|
export type StageFpsUpdateHandler = (
|
|
91
64
|
stage: Stage,
|
|
@@ -96,12 +69,12 @@ export type StageFrameTickHandler = (
|
|
|
96
69
|
stage: Stage,
|
|
97
70
|
frameTickData: FrameTickPayload,
|
|
98
71
|
) => void;
|
|
72
|
+
|
|
99
73
|
export interface Point {
|
|
100
74
|
x: number;
|
|
101
75
|
y: number;
|
|
102
76
|
}
|
|
103
77
|
|
|
104
|
-
const bufferMemory = 2e6;
|
|
105
78
|
const autoStart = true;
|
|
106
79
|
|
|
107
80
|
export class Stage {
|
|
@@ -109,18 +82,21 @@ export class Stage {
|
|
|
109
82
|
public readonly animationManager: AnimationManager;
|
|
110
83
|
public readonly txManager: CoreTextureManager;
|
|
111
84
|
public readonly txMemManager: TextureMemoryManager;
|
|
112
|
-
public readonly
|
|
113
|
-
public readonly
|
|
85
|
+
public readonly textRenderers: Record<string, TextRenderer> = {};
|
|
86
|
+
public readonly fontHandlers: Record<string, FontHandler> = {};
|
|
114
87
|
public readonly shManager: CoreShaderManager;
|
|
115
88
|
public readonly renderer: CoreRenderer;
|
|
116
89
|
public readonly root: CoreNode;
|
|
117
90
|
public readonly interactiveNodes: Set<CoreNode> = new Set();
|
|
118
91
|
public boundsMargin: [number, number, number, number];
|
|
119
|
-
public readonly
|
|
120
|
-
public
|
|
121
|
-
public
|
|
122
|
-
public readonly strictBounds: boolean;
|
|
92
|
+
public readonly defShaderNode: CoreShaderNode | null = null;
|
|
93
|
+
public strictBound: Bound;
|
|
94
|
+
public preloadBound: Bound;
|
|
123
95
|
public readonly defaultTexture: Texture | null = null;
|
|
96
|
+
public pixelRatio: number;
|
|
97
|
+
public readonly bufferMemory: number = 2e6;
|
|
98
|
+
public readonly platform: Platform | WebPlatform;
|
|
99
|
+
public readonly calculateTextureCoord: boolean;
|
|
124
100
|
|
|
125
101
|
/**
|
|
126
102
|
* Target frame time in milliseconds (calculated from targetFPS)
|
|
@@ -143,24 +119,39 @@ export class Stage {
|
|
|
143
119
|
public readonly eventBus: EventEmitter;
|
|
144
120
|
|
|
145
121
|
/// State
|
|
122
|
+
startTime = 0;
|
|
146
123
|
deltaTime = 0;
|
|
147
124
|
lastFrameTime = 0;
|
|
148
125
|
currentFrameTime = 0;
|
|
126
|
+
elapsedTime = 0;
|
|
127
|
+
private timedNodes: CoreNode[] = [];
|
|
128
|
+
private clrColor = 0x00000000;
|
|
149
129
|
private fpsNumFrames = 0;
|
|
150
130
|
private fpsElapsedTime = 0;
|
|
151
131
|
private numQuadsRendered = 0;
|
|
152
132
|
private renderRequested = false;
|
|
133
|
+
private reprocessFrame = false;
|
|
134
|
+
private reprocessCallback: (() => void) | null = null;
|
|
153
135
|
private frameEventQueue: [name: string, payload: unknown][] = [];
|
|
154
|
-
private fontResolveMap: Record<string, CanvasTextRenderer | SdfTextRenderer> =
|
|
155
|
-
{};
|
|
156
136
|
|
|
157
|
-
|
|
137
|
+
// Flattened render list optimization
|
|
138
|
+
public renderList: CoreNode[] = [];
|
|
139
|
+
public renderListDirty: boolean = true;
|
|
140
|
+
|
|
141
|
+
// Font resolve optimisation flags
|
|
142
|
+
private hasOnlyOneFontEngine: boolean;
|
|
143
|
+
private hasOnlyCanvasFontEngine: boolean;
|
|
144
|
+
private hasCanvasEngine: boolean;
|
|
145
|
+
private singleFontEngine: TextRenderer | null = null;
|
|
146
|
+
private singleFontHandler: FontHandler | null = null;
|
|
147
|
+
|
|
148
|
+
// Debug data
|
|
158
149
|
contextSpy: ContextSpy | null = null;
|
|
159
150
|
|
|
160
151
|
/**
|
|
161
152
|
* Stage constructor
|
|
162
153
|
*/
|
|
163
|
-
constructor(
|
|
154
|
+
constructor(public options: StageOptions) {
|
|
164
155
|
const {
|
|
165
156
|
canvas,
|
|
166
157
|
clearColor,
|
|
@@ -174,8 +165,19 @@ export class Stage {
|
|
|
174
165
|
renderEngine,
|
|
175
166
|
fontEngines,
|
|
176
167
|
createImageBitmapSupport,
|
|
168
|
+
platform,
|
|
169
|
+
maxRetryCount,
|
|
177
170
|
} = options;
|
|
178
171
|
|
|
172
|
+
assertTruthy(
|
|
173
|
+
platform !== null,
|
|
174
|
+
'A CorePlatform is not provided in the options',
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
this.platform = platform;
|
|
178
|
+
|
|
179
|
+
this.startTime = platform.getTimeStamp();
|
|
180
|
+
|
|
179
181
|
this.eventBus = options.eventBus;
|
|
180
182
|
|
|
181
183
|
// Calculate target frame time from targetFPS option
|
|
@@ -184,6 +186,7 @@ export class Stage {
|
|
|
184
186
|
this.txManager = new CoreTextureManager(this, {
|
|
185
187
|
numImageWorkers,
|
|
186
188
|
createImageBitmapSupport,
|
|
189
|
+
maxRetryCount,
|
|
187
190
|
});
|
|
188
191
|
|
|
189
192
|
// Wait for the Texture Manager to initialize
|
|
@@ -193,10 +196,9 @@ export class Stage {
|
|
|
193
196
|
});
|
|
194
197
|
|
|
195
198
|
this.txMemManager = new TextureMemoryManager(this, textureMemory);
|
|
196
|
-
|
|
199
|
+
|
|
197
200
|
this.animationManager = new AnimationManager();
|
|
198
201
|
this.contextSpy = enableContextSpy ? new ContextSpy() : null;
|
|
199
|
-
this.strictBounds = options.strictBounds;
|
|
200
202
|
|
|
201
203
|
let bm = [0, 0, 0, 0] as [number, number, number, number];
|
|
202
204
|
if (boundsMargin) {
|
|
@@ -210,65 +212,118 @@ export class Stage {
|
|
|
210
212
|
this.strictBound = createBound(0, 0, appWidth, appHeight);
|
|
211
213
|
this.preloadBound = createPreloadBounds(this.strictBound, bm);
|
|
212
214
|
|
|
213
|
-
|
|
215
|
+
this.clrColor = clearColor;
|
|
216
|
+
|
|
217
|
+
this.pixelRatio =
|
|
218
|
+
options.devicePhysicalPixelRatio * options.deviceLogicalPixelRatio;
|
|
219
|
+
|
|
220
|
+
this.renderer = new renderEngine({
|
|
214
221
|
stage: this,
|
|
215
222
|
canvas,
|
|
216
|
-
pixelRatio:
|
|
217
|
-
options.devicePhysicalPixelRatio * options.deviceLogicalPixelRatio,
|
|
218
|
-
clearColor: clearColor ?? 0xff000000,
|
|
219
|
-
bufferMemory,
|
|
220
|
-
txManager: this.txManager,
|
|
221
|
-
txMemManager: this.txMemManager,
|
|
222
|
-
shManager: this.shManager,
|
|
223
223
|
contextSpy: this.contextSpy,
|
|
224
224
|
forceWebGL2,
|
|
225
|
-
};
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
this.shManager = new CoreShaderManager(this);
|
|
228
|
+
|
|
229
|
+
this.defShaderNode = this.renderer.getDefaultShaderNode();
|
|
230
|
+
this.calculateTextureCoord = this.renderer.getTextureCoords !== undefined;
|
|
226
231
|
|
|
227
|
-
this.renderer = new renderEngine(rendererOptions);
|
|
228
232
|
const renderMode = this.renderer.mode || 'webgl';
|
|
229
233
|
|
|
230
234
|
this.createDefaultTexture();
|
|
231
|
-
this.defShaderCtr = this.renderer.getDefShaderCtr();
|
|
232
235
|
setPremultiplyMode(renderMode);
|
|
233
236
|
|
|
234
237
|
// Must do this after renderer is created
|
|
235
238
|
this.txManager.renderer = this.renderer;
|
|
236
239
|
|
|
237
240
|
// Create text renderers
|
|
238
|
-
this.
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
241
|
+
this.hasOnlyOneFontEngine = fontEngines.length === 1;
|
|
242
|
+
this.hasOnlyCanvasFontEngine =
|
|
243
|
+
fontEngines.length === 1 && fontEngines[0]!.type === 'canvas';
|
|
244
|
+
this.hasCanvasEngine = false;
|
|
245
|
+
this.singleFontEngine = this.hasOnlyOneFontEngine
|
|
246
|
+
? (fontEngines[0] as TextRenderer)
|
|
247
|
+
: null;
|
|
248
|
+
this.singleFontHandler = this.hasOnlyOneFontEngine
|
|
249
|
+
? (fontEngines[0]?.font as FontHandler)
|
|
250
|
+
: null;
|
|
251
|
+
|
|
252
|
+
if (this.singleFontEngine === null) {
|
|
253
|
+
// Multiple font engines case
|
|
254
|
+
// Filter out incompatible engines first
|
|
255
|
+
const compatibleEngines = fontEngines.filter(
|
|
256
|
+
(fontEngine: TextRenderer) => {
|
|
257
|
+
const type = fontEngine.type;
|
|
258
|
+
|
|
259
|
+
if (type === 'sdf' && renderMode === 'canvas') {
|
|
260
|
+
console.warn(
|
|
261
|
+
'MsdfTextRenderer is not compatible with Canvas renderer. Skipping...',
|
|
262
|
+
);
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
if (type === 'canvas') {
|
|
267
|
+
this.hasCanvasEngine = true;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
return true;
|
|
271
|
+
},
|
|
272
|
+
);
|
|
273
|
+
|
|
274
|
+
// Sort engines: SDF first, Canvas last, others in between
|
|
275
|
+
const sortedEngines = compatibleEngines.sort(
|
|
276
|
+
(a: TextRenderer, b: TextRenderer) => {
|
|
277
|
+
if (a.type === 'sdf') return -1;
|
|
278
|
+
if (b.type === 'sdf') return 1;
|
|
279
|
+
if (a.type === 'canvas') return 1;
|
|
280
|
+
if (b.type === 'canvas') return -1;
|
|
281
|
+
return 0;
|
|
282
|
+
},
|
|
283
|
+
);
|
|
284
|
+
|
|
285
|
+
// Initialize engines in sorted order
|
|
286
|
+
sortedEngines.forEach((fontEngine: TextRenderer) => {
|
|
287
|
+
const type = fontEngine.type;
|
|
288
|
+
|
|
289
|
+
// Add to map for type-based access
|
|
290
|
+
this.textRenderers[type] = fontEngine;
|
|
291
|
+
this.textRenderers[type].init(this);
|
|
292
|
+
|
|
293
|
+
this.fontHandlers[type] = fontEngine.font;
|
|
294
|
+
});
|
|
295
|
+
} else {
|
|
296
|
+
// Single font engine case - initialize it directly
|
|
297
|
+
const fontEngine = this.singleFontEngine;
|
|
298
|
+
const type = fontEngine.type;
|
|
242
299
|
|
|
243
|
-
|
|
300
|
+
// Check compatibility
|
|
301
|
+
if (type === 'sdf' && renderMode === 'canvas') {
|
|
244
302
|
console.warn(
|
|
245
|
-
'
|
|
303
|
+
'MsdfTextRenderer is not compatible with Canvas renderer. Skipping...',
|
|
246
304
|
);
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
if (fontEngineInstance instanceof TextRenderer) {
|
|
251
|
-
if (className === 'canvas') {
|
|
252
|
-
this.textRenderers['canvas'] =
|
|
253
|
-
fontEngineInstance as CanvasTextRenderer;
|
|
254
|
-
} else if (className === 'sdf') {
|
|
255
|
-
this.textRenderers['sdf'] = fontEngineInstance as SdfTextRenderer;
|
|
305
|
+
} else {
|
|
306
|
+
if (type === 'canvas') {
|
|
307
|
+
this.hasCanvasEngine = true;
|
|
256
308
|
}
|
|
309
|
+
|
|
310
|
+
// Add to map for type-based access
|
|
311
|
+
this.textRenderers[type] = fontEngine;
|
|
312
|
+
this.fontHandlers[type] = fontEngine.font;
|
|
313
|
+
this.textRenderers[type].init(this);
|
|
257
314
|
}
|
|
258
|
-
}
|
|
315
|
+
}
|
|
259
316
|
|
|
260
317
|
if (Object.keys(this.textRenderers).length === 0) {
|
|
261
318
|
console.warn('No text renderers available. Your text will not render.');
|
|
262
319
|
}
|
|
263
320
|
|
|
264
|
-
this.fontManager = new TrFontManager(this.textRenderers);
|
|
265
|
-
|
|
266
321
|
// create root node
|
|
267
322
|
const rootNode = new CoreNode(this, {
|
|
268
323
|
x: 0,
|
|
269
324
|
y: 0,
|
|
270
|
-
|
|
271
|
-
|
|
325
|
+
w: appWidth,
|
|
326
|
+
h: appHeight,
|
|
272
327
|
alpha: 1,
|
|
273
328
|
autosize: false,
|
|
274
329
|
boundsMargin: null,
|
|
@@ -283,7 +338,6 @@ export class Stage {
|
|
|
283
338
|
colorBl: 0x00000000,
|
|
284
339
|
colorBr: 0x00000000,
|
|
285
340
|
zIndex: 0,
|
|
286
|
-
zIndexLocked: 0,
|
|
287
341
|
scaleX: 1,
|
|
288
342
|
scaleY: 1,
|
|
289
343
|
mountX: 0,
|
|
@@ -296,23 +350,39 @@ export class Stage {
|
|
|
296
350
|
parent: null,
|
|
297
351
|
texture: null,
|
|
298
352
|
textureOptions: {},
|
|
299
|
-
shader: this.
|
|
353
|
+
shader: this.defShaderNode,
|
|
300
354
|
rtt: false,
|
|
301
355
|
src: null,
|
|
302
356
|
scale: 1,
|
|
303
|
-
preventCleanup: false,
|
|
304
|
-
strictBounds: this.strictBounds,
|
|
305
357
|
});
|
|
306
358
|
|
|
307
359
|
this.root = rootNode;
|
|
308
360
|
|
|
361
|
+
// Initialize root node properties
|
|
362
|
+
rootNode.updateLocalTransform();
|
|
363
|
+
rootNode.globalTransform = Matrix3d.copy(rootNode.localTransform!);
|
|
364
|
+
rootNode.sceneGlobalTransform = Matrix3d.copy(rootNode.localTransform!);
|
|
365
|
+
rootNode.calculateRenderCoords();
|
|
366
|
+
rootNode.updateBoundingRect();
|
|
367
|
+
rootNode.createRenderBounds();
|
|
368
|
+
rootNode.updateRenderState(CoreNodeRenderState.InViewport);
|
|
369
|
+
rootNode.updateIsRenderable();
|
|
370
|
+
|
|
371
|
+
// Initialize premultiplied colors (default is transparent 0x00000000)
|
|
372
|
+
rootNode.premultipliedColorTl =
|
|
373
|
+
rootNode.premultipliedColorTr =
|
|
374
|
+
rootNode.premultipliedColorBl =
|
|
375
|
+
rootNode.premultipliedColorBr =
|
|
376
|
+
0;
|
|
377
|
+
|
|
309
378
|
// execute platform start loop
|
|
310
|
-
if (autoStart) {
|
|
311
|
-
startLoop(this);
|
|
379
|
+
if (autoStart === true) {
|
|
380
|
+
this.platform.startLoop(this);
|
|
312
381
|
}
|
|
313
382
|
}
|
|
314
383
|
|
|
315
384
|
setClearColor(color: number) {
|
|
385
|
+
this.clearColor = color;
|
|
316
386
|
this.renderer.updateClearColor(color);
|
|
317
387
|
this.renderRequested = true;
|
|
318
388
|
}
|
|
@@ -332,9 +402,10 @@ export class Stage {
|
|
|
332
402
|
}
|
|
333
403
|
|
|
334
404
|
updateFrameTime() {
|
|
335
|
-
const newFrameTime = getTimeStamp();
|
|
405
|
+
const newFrameTime = this.platform.getTimeStamp();
|
|
336
406
|
this.lastFrameTime = this.currentFrameTime;
|
|
337
407
|
this.currentFrameTime = newFrameTime;
|
|
408
|
+
this.elapsedTime = newFrameTime - this.startTime;
|
|
338
409
|
this.deltaTime = !this.lastFrameTime
|
|
339
410
|
? 100 / 6
|
|
340
411
|
: newFrameTime - this.lastFrameTime;
|
|
@@ -353,7 +424,6 @@ export class Stage {
|
|
|
353
424
|
* Create default PixelTexture
|
|
354
425
|
*/
|
|
355
426
|
createDefaultTexture() {
|
|
356
|
-
console.log('Creating default texture');
|
|
357
427
|
(this.defaultTexture as ColorTexture) = this.txManager.createTexture(
|
|
358
428
|
'ColorTexture',
|
|
359
429
|
{
|
|
@@ -367,7 +437,7 @@ export class Stage {
|
|
|
367
437
|
// Mark the default texture as ALWAYS renderable
|
|
368
438
|
// This prevents it from ever being cleaned up.
|
|
369
439
|
// Fixes https://github.com/lightning-js/renderer/issues/262
|
|
370
|
-
this.defaultTexture.setRenderableOwner(
|
|
440
|
+
this.defaultTexture.setRenderableOwner('stage', true);
|
|
371
441
|
|
|
372
442
|
// When the default texture is loaded, request a render in case the
|
|
373
443
|
// RAF is paused. Fixes: https://github.com/lightning-js/renderer/issues/123
|
|
@@ -379,13 +449,14 @@ export class Stage {
|
|
|
379
449
|
/**
|
|
380
450
|
* Update animations
|
|
381
451
|
*/
|
|
382
|
-
updateAnimations() {
|
|
452
|
+
updateAnimations(): boolean {
|
|
383
453
|
const { animationManager } = this;
|
|
384
454
|
if (!this.root) {
|
|
385
|
-
return;
|
|
455
|
+
return false;
|
|
386
456
|
}
|
|
387
457
|
// step animation
|
|
388
458
|
animationManager.update(this.deltaTime);
|
|
459
|
+
return animationManager.activeAnimations.size > 0;
|
|
389
460
|
}
|
|
390
461
|
|
|
391
462
|
/**
|
|
@@ -402,55 +473,99 @@ export class Stage {
|
|
|
402
473
|
/**
|
|
403
474
|
* Start a new frame draw
|
|
404
475
|
*/
|
|
405
|
-
drawFrame() {
|
|
406
|
-
const { renderer, renderRequested } = this;
|
|
407
|
-
assertTruthy(renderer);
|
|
476
|
+
drawFrame(hasActiveAnimations: boolean = false) {
|
|
477
|
+
const { renderer, renderRequested, root } = this;
|
|
408
478
|
|
|
409
479
|
// Update tree if needed
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
480
|
+
do {
|
|
481
|
+
const forceUpdate = this.reprocessFrame;
|
|
482
|
+
this.reprocessFrame = false;
|
|
483
|
+
|
|
484
|
+
if (root.updateType !== 0 || forceUpdate) {
|
|
485
|
+
root.updateType = 0;
|
|
486
|
+
const childUpdateType = root.childUpdateType;
|
|
487
|
+
root.childUpdateType = 0;
|
|
488
|
+
|
|
489
|
+
for (let i = 0, length = root.children.length; i < length; i++) {
|
|
490
|
+
const child = root.children[i] as CoreNode;
|
|
491
|
+
|
|
492
|
+
if (childUpdateType !== 0) {
|
|
493
|
+
child.setUpdateType(childUpdateType);
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
if (child.updateType === 0) {
|
|
497
|
+
continue;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
child.update(this.deltaTime, root.clippingRect);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
if (this.reprocessCallback !== null) {
|
|
505
|
+
this.reprocessCallback();
|
|
506
|
+
this.reprocessCallback = null;
|
|
507
|
+
}
|
|
508
|
+
} while (this.reprocessFrame);
|
|
413
509
|
|
|
414
510
|
// Process some textures asynchronously but don't block the frame
|
|
415
511
|
// Use a background task to prevent frame drops
|
|
416
|
-
this.txManager
|
|
417
|
-
|
|
418
|
-
|
|
512
|
+
if (this.txManager.hasUpdates() === true) {
|
|
513
|
+
const timeLimit = hasActiveAnimations
|
|
514
|
+
? this.options.textureProcessingTimeLimit / 2
|
|
515
|
+
: this.options.textureProcessingTimeLimit;
|
|
516
|
+
|
|
517
|
+
this.txManager.processSome(timeLimit).catch((err) => {
|
|
419
518
|
console.error('Error processing textures:', err);
|
|
420
519
|
});
|
|
520
|
+
}
|
|
421
521
|
|
|
422
522
|
// Reset render operations and clear the canvas
|
|
423
523
|
renderer.reset();
|
|
424
524
|
|
|
425
|
-
// Check if we need to cleanup textures
|
|
426
|
-
if (this.txMemManager.criticalCleanupRequested === true) {
|
|
427
|
-
this.txMemManager.cleanup(false);
|
|
428
|
-
|
|
429
|
-
if (this.txMemManager.criticalCleanupRequested === true) {
|
|
430
|
-
// If we still need to cleanup, request another but aggressive cleanup
|
|
431
|
-
this.txMemManager.cleanup(true);
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
|
|
435
525
|
// If we have RTT nodes draw them first
|
|
436
526
|
// So we can use them as textures in the main scene
|
|
437
|
-
if (renderer.rttNodes.length > 0) {
|
|
527
|
+
if (USE_RTT && renderer.rttNodes.length > 0) {
|
|
438
528
|
renderer.renderRTTNodes();
|
|
439
529
|
}
|
|
440
530
|
|
|
441
|
-
//
|
|
442
|
-
|
|
531
|
+
// Update render list if dirty
|
|
532
|
+
if (this.renderListDirty === true) {
|
|
533
|
+
this.renderList.length = 0;
|
|
534
|
+
this.buildRenderList(this.root);
|
|
535
|
+
this.renderListDirty = false;
|
|
536
|
+
} else {
|
|
537
|
+
// Fill quads buffer
|
|
538
|
+
const renderList = this.renderList;
|
|
539
|
+
for (let i = 0, len = renderList.length; i < len; i++) {
|
|
540
|
+
renderList[i]!.renderQuads(renderer);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
443
543
|
|
|
444
544
|
// Perform render pass
|
|
445
|
-
renderer
|
|
545
|
+
renderer.render();
|
|
446
546
|
|
|
447
|
-
|
|
448
|
-
|
|
547
|
+
if (CALCULATE_FPS) {
|
|
548
|
+
this.calculateFps();
|
|
549
|
+
this.calculateQuads();
|
|
550
|
+
}
|
|
449
551
|
|
|
450
552
|
// Reset renderRequested flag if it was set
|
|
451
|
-
if (renderRequested) {
|
|
553
|
+
if (renderRequested === true) {
|
|
452
554
|
this.renderRequested = false;
|
|
453
555
|
}
|
|
556
|
+
|
|
557
|
+
if (this.timedNodes.length > 0) {
|
|
558
|
+
for (let key in this.timedNodes) {
|
|
559
|
+
if (this.timedNodes[key]!.isRenderable === true) {
|
|
560
|
+
this.requestRender();
|
|
561
|
+
break;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
// Check if we need to cleanup textures
|
|
566
|
+
if (this.txMemManager.criticalCleanupRequested === true) {
|
|
567
|
+
this.txMemManager.cleanup();
|
|
568
|
+
}
|
|
454
569
|
}
|
|
455
570
|
|
|
456
571
|
/**
|
|
@@ -519,30 +634,38 @@ export class Stage {
|
|
|
519
634
|
}
|
|
520
635
|
}
|
|
521
636
|
|
|
522
|
-
|
|
523
|
-
|
|
637
|
+
requestRenderListUpdate() {
|
|
638
|
+
// Notify the renderer that the render list is structurally changing.
|
|
639
|
+
// For the WebGL renderer this resets per-node buffer slot assignments
|
|
640
|
+
// and schedules a full GPU buffer re-upload on the next frame.
|
|
641
|
+
if (this.renderer.invalidateQuadBuffer !== undefined) {
|
|
642
|
+
this.renderer.invalidateQuadBuffer();
|
|
643
|
+
}
|
|
644
|
+
this.renderListDirty = true;
|
|
645
|
+
this.requestRender();
|
|
646
|
+
}
|
|
524
647
|
|
|
525
|
-
|
|
648
|
+
buildRenderList(node: CoreNode) {
|
|
649
|
+
// If the node is renderable and has a loaded texture, add it
|
|
526
650
|
if (node.isRenderable === true) {
|
|
527
651
|
node.renderQuads(this.renderer);
|
|
652
|
+
this.renderList.push(node);
|
|
528
653
|
}
|
|
529
654
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
continue;
|
|
535
|
-
}
|
|
655
|
+
const children = node.children;
|
|
656
|
+
const len = children.length;
|
|
657
|
+
for (let i = 0; i < len; i++) {
|
|
658
|
+
const child = children[i] as CoreNode;
|
|
536
659
|
|
|
660
|
+
// Skip invisible subtrees
|
|
537
661
|
if (
|
|
538
662
|
child.worldAlpha === 0 ||
|
|
539
|
-
|
|
540
|
-
child.renderState === CoreNodeRenderState.OutOfBounds)
|
|
663
|
+
child.renderState === CoreNodeRenderState.OutOfBounds
|
|
541
664
|
) {
|
|
542
665
|
continue;
|
|
543
666
|
}
|
|
544
667
|
|
|
545
|
-
this.
|
|
668
|
+
this.buildRenderList(child);
|
|
546
669
|
}
|
|
547
670
|
}
|
|
548
671
|
|
|
@@ -553,42 +676,11 @@ export class Stage {
|
|
|
553
676
|
this.renderRequested = true;
|
|
554
677
|
}
|
|
555
678
|
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
findNodesAtPoint(data: Point): CoreNode[] {
|
|
561
|
-
const x = data.x / this.options.deviceLogicalPixelRatio;
|
|
562
|
-
const y = data.y / this.options.deviceLogicalPixelRatio;
|
|
563
|
-
const nodes: CoreNode[] = [];
|
|
564
|
-
for (const node of this.interactiveNodes) {
|
|
565
|
-
if (node.isRenderable === false) {
|
|
566
|
-
continue;
|
|
567
|
-
}
|
|
568
|
-
if (pointInBound(x, y, node.renderBound!) === true) {
|
|
569
|
-
nodes.push(node);
|
|
570
|
-
}
|
|
679
|
+
reprocessUpdates(callback?: () => void) {
|
|
680
|
+
this.reprocessFrame = true;
|
|
681
|
+
if (callback) {
|
|
682
|
+
this.reprocessCallback = callback;
|
|
571
683
|
}
|
|
572
|
-
return nodes;
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
/**
|
|
576
|
-
* Find the top node at a given point
|
|
577
|
-
* @param data
|
|
578
|
-
* @returns
|
|
579
|
-
*/
|
|
580
|
-
getNodeFromPosition(data: Point): CoreNode | null {
|
|
581
|
-
const nodes: CoreNode[] = this.findNodesAtPoint(data);
|
|
582
|
-
if (nodes.length === 0) {
|
|
583
|
-
return null;
|
|
584
|
-
}
|
|
585
|
-
let topNode = nodes[0] as CoreNode;
|
|
586
|
-
for (let i = 0; i < nodes.length; i++) {
|
|
587
|
-
if (nodes[i]!.zIndex > topNode.zIndex) {
|
|
588
|
-
topNode = nodes[i]!;
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
return topNode || null;
|
|
592
684
|
}
|
|
593
685
|
|
|
594
686
|
/**
|
|
@@ -603,86 +695,52 @@ export class Stage {
|
|
|
603
695
|
*/
|
|
604
696
|
resolveTextRenderer(
|
|
605
697
|
trProps: TrProps,
|
|
606
|
-
textRendererOverride: keyof
|
|
698
|
+
textRendererOverride: keyof TextRenderers | null = null,
|
|
607
699
|
): TextRenderer | null {
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
700
|
+
// If we have an overide, return it
|
|
701
|
+
if (textRendererOverride !== null) {
|
|
702
|
+
const overrideKey = String(textRendererOverride);
|
|
703
|
+
if (this.textRenderers[overrideKey] === undefined) {
|
|
704
|
+
console.warn(`Text renderer override '${overrideKey}' not found.`);
|
|
705
|
+
return null;
|
|
706
|
+
}
|
|
611
707
|
|
|
612
|
-
|
|
613
|
-
if (this.fontResolveMap[fontCacheString] !== undefined) {
|
|
614
|
-
return this.fontResolveMap[fontCacheString] as unknown as TextRenderer;
|
|
708
|
+
return this.textRenderers[overrideKey];
|
|
615
709
|
}
|
|
616
710
|
|
|
617
|
-
//
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
if (rendererId) {
|
|
623
|
-
const possibleRenderer = this.textRenderers[rendererId];
|
|
624
|
-
if (!possibleRenderer) {
|
|
625
|
-
console.warn(`Text renderer override '${rendererId}' not found.`);
|
|
626
|
-
rendererId = null;
|
|
627
|
-
overrideFallback = true;
|
|
628
|
-
} else if (!possibleRenderer.canRenderFont(trProps)) {
|
|
629
|
-
console.warn(
|
|
630
|
-
`Cannot use override text renderer '${rendererId}' for font`,
|
|
631
|
-
trProps,
|
|
632
|
-
);
|
|
633
|
-
rendererId = null;
|
|
634
|
-
overrideFallback = true;
|
|
711
|
+
// If we have only one font engine early return it
|
|
712
|
+
if (this.singleFontEngine !== null) {
|
|
713
|
+
// If we have only one font engine and its the canvas engine, we can just return it
|
|
714
|
+
if (this.hasOnlyCanvasFontEngine === true) {
|
|
715
|
+
return this.singleFontEngine;
|
|
635
716
|
}
|
|
636
|
-
}
|
|
637
717
|
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
if (tr.canRenderFont(trProps)) {
|
|
642
|
-
rendererId = trId as keyof TextRendererMap;
|
|
643
|
-
break;
|
|
644
|
-
}
|
|
718
|
+
// If we have only one font engine and it can render the font, return it
|
|
719
|
+
if (this.singleFontHandler?.canRenderFont(trProps) === true) {
|
|
720
|
+
return this.singleFontEngine;
|
|
645
721
|
}
|
|
646
|
-
if (!rendererId && this.textRenderers.canvas !== undefined) {
|
|
647
|
-
// If no renderer can be found, use the canvas renderer
|
|
648
|
-
rendererId = 'canvas';
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
722
|
|
|
652
|
-
|
|
653
|
-
console.warn(`
|
|
654
|
-
}
|
|
723
|
+
// If we have only one font engine and it cannot render the font, return null
|
|
724
|
+
console.warn(`Text renderer cannot render font`, trProps);
|
|
655
725
|
|
|
656
|
-
if (!rendererId) {
|
|
657
|
-
// silently fail if no renderer can be found, the error is already created
|
|
658
|
-
// at the constructor level
|
|
659
726
|
return null;
|
|
660
727
|
}
|
|
661
728
|
|
|
662
|
-
//
|
|
663
|
-
const resolvedTextRenderer = this.textRenderers[rendererId];
|
|
664
|
-
assertTruthy(resolvedTextRenderer, 'resolvedTextRenderer undefined');
|
|
729
|
+
// Multi font handling - If we have multiple font engines, we need to resolve the best one
|
|
665
730
|
|
|
666
|
-
//
|
|
667
|
-
this.
|
|
731
|
+
// First check SDF
|
|
732
|
+
if (this.fontHandlers['sdf']?.canRenderFont(trProps) === true) {
|
|
733
|
+
return this.textRenderers.sdf || null;
|
|
734
|
+
}
|
|
668
735
|
|
|
669
|
-
//
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
736
|
+
// If we have a canvas engine, we can return it (it can render all fonts)
|
|
737
|
+
if (this.hasCanvasEngine === true) {
|
|
738
|
+
return this.textRenderers.canvas || null;
|
|
739
|
+
}
|
|
673
740
|
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
* @param type
|
|
678
|
-
* @param props
|
|
679
|
-
* @returns
|
|
680
|
-
*/
|
|
681
|
-
createShaderCtr(
|
|
682
|
-
type: keyof ShaderMap,
|
|
683
|
-
props: Record<string, unknown>,
|
|
684
|
-
): BaseShaderController {
|
|
685
|
-
return this.shManager.loadShader(type, props);
|
|
741
|
+
// If we have no font engines, return null
|
|
742
|
+
console.warn('No text renderers available. Your text will not render.');
|
|
743
|
+
return null;
|
|
686
744
|
}
|
|
687
745
|
|
|
688
746
|
createNode(props: Partial<CoreNodeProps>) {
|
|
@@ -691,34 +749,30 @@ export class Stage {
|
|
|
691
749
|
}
|
|
692
750
|
|
|
693
751
|
createTextNode(props: Partial<CoreTextNodeProps>) {
|
|
694
|
-
const fontSize = props.fontSize
|
|
695
|
-
const resolvedProps =
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
overflowSuffix: props.overflowSuffix ?? '...',
|
|
715
|
-
debug: props.debug ?? {},
|
|
716
|
-
shaderProps: null,
|
|
717
|
-
};
|
|
752
|
+
const fontSize = props.fontSize || 16;
|
|
753
|
+
const resolvedProps = this.resolveNodeDefaults(props) as CoreTextNodeProps;
|
|
754
|
+
|
|
755
|
+
resolvedProps.text = props.text ?? '';
|
|
756
|
+
resolvedProps.textRendererOverride = props.textRendererOverride ?? null;
|
|
757
|
+
resolvedProps.fontSize = fontSize;
|
|
758
|
+
resolvedProps.fontFamily = props.fontFamily || 'sans-serif';
|
|
759
|
+
resolvedProps.fontStyle = props.fontStyle || 'normal';
|
|
760
|
+
resolvedProps.textAlign = props.textAlign || 'left';
|
|
761
|
+
resolvedProps.offsetY = props.offsetY || 0;
|
|
762
|
+
resolvedProps.letterSpacing = props.letterSpacing || 0;
|
|
763
|
+
resolvedProps.lineHeight = props.lineHeight || 1.2;
|
|
764
|
+
resolvedProps.maxLines = props.maxLines || 0;
|
|
765
|
+
resolvedProps.verticalAlign = props.verticalAlign || 'top';
|
|
766
|
+
resolvedProps.overflowSuffix = props.overflowSuffix || '...';
|
|
767
|
+
resolvedProps.wordBreak = props.wordBreak || 'break-word';
|
|
768
|
+
resolvedProps.contain = props.contain || 'none';
|
|
769
|
+
resolvedProps.maxWidth = props.maxWidth || 0;
|
|
770
|
+
resolvedProps.maxHeight = props.maxHeight || 0;
|
|
771
|
+
resolvedProps.forceLoad = props.forceLoad || false;
|
|
718
772
|
|
|
719
773
|
const resolvedTextRenderer = this.resolveTextRenderer(
|
|
720
774
|
resolvedProps,
|
|
721
|
-
|
|
775
|
+
resolvedProps.textRendererOverride as keyof TextRenderers | null,
|
|
722
776
|
);
|
|
723
777
|
|
|
724
778
|
if (!resolvedTextRenderer) {
|
|
@@ -735,7 +789,84 @@ export class Stage {
|
|
|
735
789
|
? value
|
|
736
790
|
: [value, value, value, value];
|
|
737
791
|
|
|
738
|
-
this.
|
|
792
|
+
this.updateViewportBounds();
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/**
|
|
796
|
+
* Update the viewport bounds
|
|
797
|
+
*/
|
|
798
|
+
updateViewportBounds() {
|
|
799
|
+
const { appWidth, appHeight } = this.options;
|
|
800
|
+
this.strictBound = createBound(0, 0, appWidth, appHeight);
|
|
801
|
+
this.preloadBound = createPreloadBounds(
|
|
802
|
+
this.strictBound,
|
|
803
|
+
this.boundsMargin,
|
|
804
|
+
);
|
|
805
|
+
this.root.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
806
|
+
this.root.childUpdateType |= UpdateType.RenderBounds;
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
/** Find all nodes at a given point
|
|
810
|
+
* @param data
|
|
811
|
+
*/
|
|
812
|
+
findNodesAtPoint(data: Point): CoreNode[] {
|
|
813
|
+
const x = data.x / this.options.deviceLogicalPixelRatio;
|
|
814
|
+
const y = data.y / this.options.deviceLogicalPixelRatio;
|
|
815
|
+
const nodes: CoreNode[] = [];
|
|
816
|
+
for (const node of this.interactiveNodes) {
|
|
817
|
+
if (node.isRenderable === false) {
|
|
818
|
+
continue;
|
|
819
|
+
}
|
|
820
|
+
if (pointInBound(x, y, node.renderBound!) === true) {
|
|
821
|
+
nodes.push(node);
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
return nodes;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
/**
|
|
828
|
+
* Find the top node at a given point
|
|
829
|
+
* @param data
|
|
830
|
+
* @returns
|
|
831
|
+
*/
|
|
832
|
+
getNodeFromPosition(data: Point): CoreNode | null {
|
|
833
|
+
const nodes: CoreNode[] = this.findNodesAtPoint(data);
|
|
834
|
+
if (nodes.length === 0) {
|
|
835
|
+
return null;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
//get last node in array (as top node)
|
|
839
|
+
let topNode = nodes[nodes.length - 1] as CoreNode;
|
|
840
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
841
|
+
if (nodes[i]!.zIndex > topNode.zIndex) {
|
|
842
|
+
topNode = nodes[i]!;
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
return topNode || null;
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
/**
|
|
849
|
+
* add node to timeNodes arrays
|
|
850
|
+
* @param node
|
|
851
|
+
* @returns
|
|
852
|
+
*/
|
|
853
|
+
trackTimedNode(node: CoreNode) {
|
|
854
|
+
if (this.timedNodes[node.id] !== undefined) {
|
|
855
|
+
return;
|
|
856
|
+
}
|
|
857
|
+
this.timedNodes[node.id] = node;
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
/**
|
|
861
|
+
* remove node from timeNodes arrays
|
|
862
|
+
* @param node
|
|
863
|
+
* @returns
|
|
864
|
+
*/
|
|
865
|
+
untrackTimedNode(node: CoreNode) {
|
|
866
|
+
if (this.timedNodes[node.id] === undefined) {
|
|
867
|
+
return;
|
|
868
|
+
}
|
|
869
|
+
delete this.timedNodes[node.id];
|
|
739
870
|
}
|
|
740
871
|
|
|
741
872
|
/**
|
|
@@ -751,66 +882,96 @@ export class Stage {
|
|
|
751
882
|
*/
|
|
752
883
|
protected resolveNodeDefaults(props: Partial<CoreNodeProps>): CoreNodeProps {
|
|
753
884
|
const color = props.color ?? 0xffffffff;
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
if
|
|
764
|
-
|
|
885
|
+
let colorTop = color;
|
|
886
|
+
let colorBottom = color;
|
|
887
|
+
let colorLeft = color;
|
|
888
|
+
let colorRight = color;
|
|
889
|
+
let colorTl = color;
|
|
890
|
+
let colorTr = color;
|
|
891
|
+
let colorBl = color;
|
|
892
|
+
let colorBr = color;
|
|
893
|
+
|
|
894
|
+
// Fast-path: Check if any complex color props are present
|
|
895
|
+
// We check values directly to avoid destructuring
|
|
896
|
+
if (
|
|
897
|
+
props.colorTop !== undefined ||
|
|
898
|
+
props.colorBottom !== undefined ||
|
|
899
|
+
props.colorLeft !== undefined ||
|
|
900
|
+
props.colorRight !== undefined ||
|
|
901
|
+
props.colorTl !== undefined ||
|
|
902
|
+
props.colorTr !== undefined ||
|
|
903
|
+
props.colorBl !== undefined ||
|
|
904
|
+
props.colorBr !== undefined
|
|
905
|
+
) {
|
|
906
|
+
const {
|
|
907
|
+
colorTop: top,
|
|
908
|
+
colorBottom: bottom,
|
|
909
|
+
colorLeft: left,
|
|
910
|
+
colorRight: right,
|
|
911
|
+
} = props;
|
|
912
|
+
|
|
913
|
+
colorTop = top ?? color;
|
|
914
|
+
colorBottom = bottom ?? color;
|
|
915
|
+
colorLeft = left ?? color;
|
|
916
|
+
colorRight = right ?? color;
|
|
917
|
+
|
|
918
|
+
colorTl = props.colorTl ?? top ?? left ?? color;
|
|
919
|
+
colorTr = props.colorTr ?? top ?? right ?? color;
|
|
920
|
+
colorBl = props.colorBl ?? bottom ?? left ?? color;
|
|
921
|
+
colorBr = props.colorBr ?? bottom ?? right ?? color;
|
|
765
922
|
}
|
|
766
923
|
|
|
924
|
+
const scale = props.scale ?? null;
|
|
925
|
+
const mount = props.mount ?? 0;
|
|
926
|
+
const pivot = props.pivot ?? 0.5;
|
|
927
|
+
|
|
928
|
+
const data =
|
|
929
|
+
!isProductionEnvironment && this.options.inspector
|
|
930
|
+
? santizeCustomDataMap(props.data ?? {})
|
|
931
|
+
: {};
|
|
932
|
+
|
|
767
933
|
return {
|
|
768
934
|
x: props.x ?? 0,
|
|
769
935
|
y: props.y ?? 0,
|
|
770
|
-
|
|
771
|
-
|
|
936
|
+
w: props.w ?? 0,
|
|
937
|
+
h: props.h ?? 0,
|
|
772
938
|
alpha: props.alpha ?? 1,
|
|
773
939
|
autosize: props.autosize ?? false,
|
|
774
940
|
boundsMargin: props.boundsMargin ?? null,
|
|
775
941
|
clipping: props.clipping ?? false,
|
|
776
942
|
color,
|
|
777
|
-
colorTop
|
|
778
|
-
colorBottom
|
|
779
|
-
colorLeft
|
|
780
|
-
colorRight
|
|
781
|
-
colorBl,
|
|
782
|
-
colorBr,
|
|
943
|
+
colorTop,
|
|
944
|
+
colorBottom,
|
|
945
|
+
colorLeft,
|
|
946
|
+
colorRight,
|
|
783
947
|
colorTl,
|
|
784
948
|
colorTr,
|
|
949
|
+
colorBl,
|
|
950
|
+
colorBr,
|
|
785
951
|
zIndex: props.zIndex ?? 0,
|
|
786
|
-
zIndexLocked: props.zIndexLocked ?? 0,
|
|
787
952
|
parent: props.parent ?? null,
|
|
788
953
|
texture: props.texture ?? null,
|
|
789
954
|
textureOptions: props.textureOptions ?? {},
|
|
790
|
-
shader: props.shader ?? this.
|
|
791
|
-
// Since setting the `src` will trigger a texture load, we need to set it after
|
|
792
|
-
// we set the texture. Otherwise, problems happen.
|
|
955
|
+
shader: props.shader ?? this.defShaderNode,
|
|
793
956
|
src: props.src ?? null,
|
|
794
957
|
srcHeight: props.srcHeight,
|
|
795
958
|
srcWidth: props.srcWidth,
|
|
796
959
|
srcX: props.srcX,
|
|
797
960
|
srcY: props.srcY,
|
|
798
|
-
scale
|
|
799
|
-
scaleX: props.scaleX ??
|
|
800
|
-
scaleY: props.scaleY ??
|
|
801
|
-
mount
|
|
802
|
-
mountX: props.mountX ??
|
|
803
|
-
mountY: props.mountY ??
|
|
804
|
-
pivot
|
|
805
|
-
pivotX: props.pivotX ??
|
|
806
|
-
pivotY: props.pivotY ??
|
|
961
|
+
scale,
|
|
962
|
+
scaleX: props.scaleX ?? scale ?? 1,
|
|
963
|
+
scaleY: props.scaleY ?? scale ?? 1,
|
|
964
|
+
mount,
|
|
965
|
+
mountX: props.mountX ?? mount,
|
|
966
|
+
mountY: props.mountY ?? mount,
|
|
967
|
+
pivot,
|
|
968
|
+
pivotX: props.pivotX ?? pivot,
|
|
969
|
+
pivotY: props.pivotY ?? pivot,
|
|
807
970
|
rotation: props.rotation ?? 0,
|
|
808
971
|
rtt: props.rtt ?? false,
|
|
809
|
-
data
|
|
810
|
-
preventCleanup: props.preventCleanup ?? false,
|
|
972
|
+
data,
|
|
811
973
|
imageType: props.imageType,
|
|
812
974
|
interactive: props.interactive ?? false,
|
|
813
|
-
strictBounds: props.strictBounds ?? this.strictBounds,
|
|
814
975
|
};
|
|
815
976
|
}
|
|
816
977
|
|
|
@@ -820,7 +981,50 @@ export class Stage {
|
|
|
820
981
|
* @remarks
|
|
821
982
|
* This method is used to cleanup orphaned textures that are no longer in use.
|
|
822
983
|
*/
|
|
823
|
-
cleanup(
|
|
824
|
-
this.txMemManager.cleanup(
|
|
984
|
+
cleanup(full: boolean = false) {
|
|
985
|
+
this.txMemManager.cleanup(full);
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
set clearColor(value: number) {
|
|
989
|
+
this.renderer.updateClearColor(value);
|
|
990
|
+
this.renderRequested = true;
|
|
991
|
+
this.clrColor = value;
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
get clearColor() {
|
|
995
|
+
return this.clrColor;
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
/**
|
|
999
|
+
* Load a font using a specific text renderer type
|
|
1000
|
+
*
|
|
1001
|
+
* @remarks
|
|
1002
|
+
* This method allows consumers to explicitly load fonts for a specific
|
|
1003
|
+
* text renderer type (e.g., 'canvas', 'sdf'). Consumers must specify
|
|
1004
|
+
* the renderer type to ensure fonts are loaded with the correct pipeline.
|
|
1005
|
+
*
|
|
1006
|
+
* For Canvas fonts, provide fontUrl (e.g., .ttf, .woff, .woff2)
|
|
1007
|
+
* For SDF fonts, provide atlasUrl (image) and atlasDataUrl (JSON glyph data)
|
|
1008
|
+
*
|
|
1009
|
+
* @param rendererType - The type of text renderer ('canvas', 'sdf', etc.)
|
|
1010
|
+
* @param options - Font loading options specific to the renderer type
|
|
1011
|
+
* @returns Promise that resolves when the font is loaded
|
|
1012
|
+
*/
|
|
1013
|
+
async loadFont(
|
|
1014
|
+
rendererType: TextRenderers,
|
|
1015
|
+
options: FontLoadOptions,
|
|
1016
|
+
): Promise<void> {
|
|
1017
|
+
const rendererTypeKey = String(rendererType);
|
|
1018
|
+
const fontHandler = this.fontHandlers[rendererTypeKey];
|
|
1019
|
+
|
|
1020
|
+
if (!fontHandler) {
|
|
1021
|
+
throw new Error(
|
|
1022
|
+
`Font handler for renderer type '${rendererTypeKey}' not found. Available types: ${Object.keys(
|
|
1023
|
+
this.fontHandlers,
|
|
1024
|
+
).join(', ')}`,
|
|
1025
|
+
);
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
return fontHandler.loadFont(this, options);
|
|
825
1029
|
}
|
|
826
1030
|
}
|