@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -26
- package/dist/exports/canvas.d.ts +1 -1
- package/dist/exports/canvas.js +1 -1
- package/dist/exports/canvas.js.map +1 -1
- package/dist/exports/index.d.ts +2 -5
- package/dist/exports/index.js +1 -5
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/utils.d.ts +2 -1
- package/dist/exports/utils.js +2 -1
- package/dist/exports/utils.js.map +1 -1
- package/dist/exports/webgl.d.ts +2 -1
- package/dist/exports/webgl.js +2 -1
- package/dist/exports/webgl.js.map +1 -1
- package/dist/src/common/CommonTypes.d.ts +13 -2
- package/dist/src/core/Autosizer.d.ts +35 -0
- package/dist/src/core/Autosizer.js +196 -0
- package/dist/src/core/Autosizer.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +124 -100
- package/dist/src/core/CoreNode.js +720 -472
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.d.ts +3 -5
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +74 -87
- package/dist/src/core/CoreTextNode.js +355 -232
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +25 -13
- package/dist/src/core/CoreTextureManager.js +80 -104
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +93 -33
- package/dist/src/core/Stage.js +315 -151
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureError.d.ts +11 -0
- package/dist/src/core/TextureError.js +37 -0
- package/dist/src/core/TextureError.js.map +1 -0
- package/dist/src/core/TextureMemoryManager.d.ts +11 -4
- package/dist/src/core/TextureMemoryManager.js +128 -109
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/Animation.d.ts +21 -0
- package/dist/src/core/animations/Animation.js +194 -0
- package/dist/src/core/animations/Animation.js.map +1 -0
- package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
- package/dist/src/core/animations/CoreAnimation.js +8 -3
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
- package/dist/src/core/animations/CoreAnimationController.js +11 -4
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/animations/Playback.d.ts +64 -0
- package/dist/src/core/animations/Playback.js +169 -0
- package/dist/src/core/animations/Playback.js.map +1 -0
- package/dist/src/core/animations/Transition.d.ts +27 -0
- package/dist/src/core/animations/Transition.js +52 -0
- package/dist/src/core/animations/Transition.js.map +1 -0
- package/dist/src/core/animations/utils.d.ts +2 -0
- package/dist/src/core/animations/utils.js +136 -0
- package/dist/src/core/animations/utils.js.map +1 -0
- package/dist/src/core/lib/ImageWorker.d.ts +2 -2
- package/dist/src/core/lib/ImageWorker.js +31 -12
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
- package/dist/src/core/lib/WebGlContextWrapper.js +105 -28
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/collectionUtils.d.ts +5 -0
- package/dist/src/core/lib/collectionUtils.js +100 -0
- package/dist/src/core/lib/collectionUtils.js.map +1 -0
- package/dist/src/core/lib/colorCache.d.ts +1 -0
- package/dist/src/core/lib/colorCache.js +19 -0
- package/dist/src/core/lib/colorCache.js.map +1 -0
- package/dist/src/core/lib/colorParser.d.ts +21 -0
- package/dist/src/core/lib/colorParser.js +72 -0
- package/dist/src/core/lib/colorParser.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +14 -2
- package/dist/src/core/lib/textureCompression.js +320 -67
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +8 -2
- package/dist/src/core/lib/utils.js +43 -21
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
- package/dist/src/core/lib/validateImageBitmap.js +4 -4
- package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
- package/dist/src/core/platform.js +30 -5
- package/dist/src/core/platform.js.map +1 -1
- package/dist/src/core/platforms/Platform.d.ts +42 -0
- package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
- package/dist/src/core/platforms/Platform.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
- package/dist/src/core/platforms/web/WebPlatform.js +87 -0
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
- package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +5 -30
- package/dist/src/core/renderers/CoreRenderer.js +1 -0
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderNode.d.ts +12 -1
- package/dist/src/core/renderers/CoreShaderNode.js +26 -0
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +65 -87
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
- package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +97 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +87 -42
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -52
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +11 -4
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -21
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +168 -152
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -4
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +83 -43
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
- package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
- package/dist/src/core/shaders/canvas/Border.js +64 -25
- package/dist/src/core/shaders/canvas/Border.js.map +1 -1
- package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/canvas/LinearGradient.js +11 -7
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js +21 -17
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/Rounded.js +3 -3
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +45 -7
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +50 -11
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +10 -7
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/Shadow.js +4 -2
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
- package/dist/src/core/shaders/canvas/utils/render.js +31 -18
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
- package/dist/src/core/shaders/templates/BorderTemplate.js +31 -11
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -3
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
- package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
- package/dist/src/core/shaders/utils.js.map +1 -0
- package/dist/src/core/shaders/webgl/Border.js +116 -35
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/Default.js +6 -7
- package/dist/src/core/shaders/webgl/Default.js.map +1 -1
- package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/Rounded.js +4 -2
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +153 -39
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +158 -43
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +6 -4
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
- package/dist/src/core/shaders/webgl/SdfShader.js +7 -17
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
- package/dist/src/core/shaders/webgl/Shadow.js +12 -6
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +303 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
- package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
- package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
- package/dist/src/core/text-rendering/Utils.d.ts +30 -0
- package/dist/src/core/text-rendering/Utils.js +84 -0
- package/dist/src/core/text-rendering/Utils.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
- package/dist/src/core/textures/ColorTexture.d.ts +1 -1
- package/dist/src/core/textures/ColorTexture.js +3 -4
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +11 -4
- package/dist/src/core/textures/ImageTexture.js +31 -40
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
- package/dist/src/core/textures/NoiseTexture.js +8 -8
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.d.ts +7 -7
- package/dist/src/core/textures/RenderTexture.js +12 -12
- package/dist/src/core/textures/RenderTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +6 -8
- package/dist/src/core/textures/SubTexture.js +19 -37
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +87 -10
- package/dist/src/core/textures/Texture.js +160 -17
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +2 -1
- package/dist/src/core/utils.js +1 -1
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/INode.d.ts +2 -2
- package/dist/src/main-api/Inspector.d.ts +131 -2
- package/dist/src/main-api/Inspector.js +345 -28
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +295 -82
- package/dist/src/main-api/Renderer.js +223 -76
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/utils.d.ts +1 -6
- package/dist/src/utils.js +2 -9
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/exports/canvas.ts +1 -1
- package/exports/index.ts +2 -8
- package/exports/utils.ts +7 -1
- package/exports/webgl.ts +3 -1
- package/package.json +15 -17
- package/src/common/CommonTypes.ts +18 -2
- package/src/core/Autosizer.ts +224 -0
- package/src/core/CoreNode.test.ts +179 -17
- package/src/core/CoreNode.ts +895 -599
- package/src/core/CoreShaderManager.ts +5 -10
- package/src/core/CoreTextNode.ts +422 -286
- package/src/core/CoreTextureManager.ts +110 -130
- package/src/core/Stage.ts +397 -195
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +164 -141
- package/src/core/animations/CoreAnimation.ts +15 -9
- package/src/core/animations/CoreAnimationController.ts +13 -4
- package/src/core/lib/ImageWorker.ts +43 -12
- package/src/core/lib/WebGlContextWrapper.ts +127 -79
- package/src/core/lib/collectionUtils.ts +118 -0
- package/src/core/lib/colorCache.ts +20 -0
- package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
- package/src/core/lib/textureCompression.ts +433 -75
- package/src/core/lib/utils.ts +54 -25
- package/src/core/lib/validateImageBitmap.ts +17 -6
- package/src/core/platforms/Platform.ts +83 -0
- package/src/core/platforms/web/WebPlatform.ts +132 -0
- package/src/core/renderers/CoreContextTexture.ts +2 -1
- package/src/core/renderers/CoreRenderer.ts +5 -32
- package/src/core/renderers/CoreShaderNode.ts +38 -3
- package/src/core/renderers/canvas/CanvasRenderer.ts +84 -126
- package/src/core/renderers/canvas/CanvasShaderNode.ts +4 -8
- package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
- package/src/core/renderers/webgl/SdfRenderOp.ts +105 -0
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -84
- package/src/core/renderers/webgl/WebGlRenderer.ts +203 -190
- package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -11
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +101 -53
- package/src/core/shaders/canvas/Border.ts +88 -34
- package/src/core/shaders/canvas/HolePunch.ts +5 -11
- package/src/core/shaders/canvas/LinearGradient.ts +14 -10
- package/src/core/shaders/canvas/RadialGradient.ts +24 -41
- package/src/core/shaders/canvas/Rounded.ts +7 -7
- package/src/core/shaders/canvas/RoundedWithBorder.ts +77 -23
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +84 -36
- package/src/core/shaders/canvas/RoundedWithShadow.ts +15 -13
- package/src/core/shaders/canvas/Shadow.ts +7 -5
- package/src/core/shaders/canvas/utils/render.ts +45 -36
- package/src/core/shaders/templates/BorderTemplate.ts +42 -12
- package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
- package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
- package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
- package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
- package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
- package/src/core/shaders/webgl/Border.ts +116 -39
- package/src/core/shaders/webgl/Default.ts +6 -7
- package/src/core/shaders/webgl/HolePunch.ts +4 -7
- package/src/core/shaders/webgl/LinearGradient.ts +33 -8
- package/src/core/shaders/webgl/RadialGradient.ts +58 -34
- package/src/core/shaders/webgl/Rounded.ts +4 -6
- package/src/core/shaders/webgl/RoundedWithBorder.ts +154 -46
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +159 -52
- package/src/core/shaders/webgl/RoundedWithShadow.ts +6 -8
- package/src/core/shaders/webgl/SdfShader.ts +7 -19
- package/src/core/shaders/webgl/Shadow.ts +12 -6
- package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
- package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
- package/src/core/text-rendering/SdfFontHandler.ts +591 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +408 -0
- package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
- package/src/core/text-rendering/TextRenderer.ts +444 -0
- package/src/core/text-rendering/Utils.ts +99 -0
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
- package/src/core/textures/ColorTexture.ts +7 -5
- package/src/core/textures/ImageTexture.ts +78 -66
- package/src/core/textures/NoiseTexture.ts +14 -12
- package/src/core/textures/RenderTexture.ts +18 -16
- package/src/core/textures/SubTexture.ts +25 -46
- package/src/core/textures/Texture.ts +207 -24
- package/src/core/utils.ts +9 -7
- package/src/main-api/INode.ts +4 -3
- package/src/main-api/Inspector.ts +577 -36
- package/src/main-api/Renderer.ts +518 -139
- package/src/utils.ts +10 -10
- package/dist/exports/core-api.d.ts +0 -74
- package/dist/exports/core-api.js +0 -96
- package/dist/exports/core-api.js.map +0 -1
- package/dist/exports/main-api.d.ts +0 -30
- package/dist/exports/main-api.js +0 -45
- package/dist/exports/main-api.js.map +0 -1
- package/dist/src/core/CoreExtension.d.ts +0 -12
- package/dist/src/core/CoreExtension.js +0 -29
- package/dist/src/core/CoreExtension.js.map +0 -1
- package/dist/src/core/CoreStuff.d.ts +0 -1
- package/dist/src/core/CoreStuff.js +0 -138
- package/dist/src/core/CoreStuff.js.map +0 -1
- package/dist/src/core/CoreTexturizer.d.ts +0 -14
- package/dist/src/core/CoreTexturizer.js +0 -47
- package/dist/src/core/CoreTexturizer.js.map +0 -1
- package/dist/src/core/LngNode.d.ts +0 -736
- package/dist/src/core/LngNode.js +0 -1174
- package/dist/src/core/LngNode.js.map +0 -1
- package/dist/src/core/Matrix2DContext.d.ts +0 -15
- package/dist/src/core/Matrix2DContext.js +0 -45
- package/dist/src/core/Matrix2DContext.js.map +0 -1
- package/dist/src/core/ShaderNode.d.ts +0 -10
- package/dist/src/core/ShaderNode.js +0 -30
- package/dist/src/core/ShaderNode.js.map +0 -1
- package/dist/src/core/TextNode.d.ts +0 -103
- package/dist/src/core/TextNode.js +0 -331
- package/dist/src/core/TextNode.js.map +0 -1
- package/dist/src/core/lib/Coords.d.ts +0 -14
- package/dist/src/core/lib/Coords.js +0 -55
- package/dist/src/core/lib/Coords.js.map +0 -1
- package/dist/src/core/lib/glm/common.d.ts +0 -162
- package/dist/src/core/lib/glm/common.js +0 -81
- package/dist/src/core/lib/glm/common.js.map +0 -1
- package/dist/src/core/lib/glm/index.d.ts +0 -11
- package/dist/src/core/lib/glm/index.js +0 -30
- package/dist/src/core/lib/glm/index.js.map +0 -1
- package/dist/src/core/lib/glm/mat2.d.ts +0 -219
- package/dist/src/core/lib/glm/mat2.js +0 -396
- package/dist/src/core/lib/glm/mat2.js.map +0 -1
- package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
- package/dist/src/core/lib/glm/mat2d.js +0 -442
- package/dist/src/core/lib/glm/mat2d.js.map +0 -1
- package/dist/src/core/lib/glm/mat3.d.ts +0 -283
- package/dist/src/core/lib/glm/mat3.js +0 -680
- package/dist/src/core/lib/glm/mat3.js.map +0 -1
- package/dist/src/core/lib/glm/mat4.d.ts +0 -550
- package/dist/src/core/lib/glm/mat4.js +0 -1802
- package/dist/src/core/lib/glm/mat4.js.map +0 -1
- package/dist/src/core/lib/glm/quat.d.ts +0 -363
- package/dist/src/core/lib/glm/quat.js +0 -693
- package/dist/src/core/lib/glm/quat.js.map +0 -1
- package/dist/src/core/lib/glm/quat2.d.ts +0 -356
- package/dist/src/core/lib/glm/quat2.js +0 -754
- package/dist/src/core/lib/glm/quat2.js.map +0 -1
- package/dist/src/core/lib/glm/vec2.d.ts +0 -365
- package/dist/src/core/lib/glm/vec2.js +0 -569
- package/dist/src/core/lib/glm/vec2.js.map +0 -1
- package/dist/src/core/lib/glm/vec3.d.ts +0 -406
- package/dist/src/core/lib/glm/vec3.js +0 -720
- package/dist/src/core/lib/glm/vec3.js.map +0 -1
- package/dist/src/core/lib/glm/vec4.d.ts +0 -330
- package/dist/src/core/lib/glm/vec4.js +0 -608
- package/dist/src/core/lib/glm/vec4.js.map +0 -1
- package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
- package/dist/src/core/renderers/CoreShaderManager.js +0 -33
- package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
- package/dist/src/core/scene/Scene.d.ts +0 -59
- package/dist/src/core/scene/Scene.js +0 -106
- package/dist/src/core/scene/Scene.js.map +0 -1
- package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
- package/dist/src/main-api/ICoreDriver.d.ts +0 -27
- package/dist/src/main-api/ICoreDriver.js.map +0 -1
- package/dist/src/main-api/IRenderDriver.d.ts +0 -20
- package/dist/src/main-api/IRenderDriver.js.map +0 -1
- package/dist/src/main-api/IShaderController.d.ts +0 -14
- package/dist/src/main-api/IShaderController.js +0 -30
- package/dist/src/main-api/IShaderController.js.map +0 -1
- package/dist/src/main-api/IShaderNode.d.ts +0 -17
- package/dist/src/main-api/IShaderNode.js +0 -19
- package/dist/src/main-api/IShaderNode.js.map +0 -1
- package/dist/src/main-api/RendererMain.d.ts +0 -375
- package/dist/src/main-api/RendererMain.js +0 -365
- package/dist/src/main-api/RendererMain.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
- package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
- package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
- package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
- package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
- package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
- package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
- package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
- package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
- package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
- package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
- package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
- package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
- package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
- package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
- package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
- package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
- package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
- package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
- package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
- package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
- package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
- package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
- package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
- package/dist/src/render-drivers/utils.d.ts +0 -12
- package/dist/src/render-drivers/utils.js +0 -69
- package/dist/src/render-drivers/utils.js.map +0 -1
- package/scripts/please-use-pnpm.js +0 -13
- package/src/core/platform.ts +0 -64
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
- package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
- package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
- package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
- package/src/core/text-rendering/TrFontManager.ts +0 -183
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
- package/src/core/text-rendering/font-face-types/utils.ts +0 -39
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -840
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
- package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
package/src/main-api/Renderer.ts
CHANGED
|
@@ -19,51 +19,173 @@
|
|
|
19
19
|
|
|
20
20
|
import type { ExtractProps, TextureMap } from '../core/CoreTextureManager.js';
|
|
21
21
|
import { EventEmitter } from '../common/EventEmitter.js';
|
|
22
|
-
import {
|
|
23
|
-
import { Stage } from '../core/Stage.js';
|
|
22
|
+
import { isProductionEnvironment } from '../utils.js';
|
|
23
|
+
import { Stage, type StageOptions } from '../core/Stage.js';
|
|
24
24
|
import { CoreNode, type CoreNodeProps } from '../core/CoreNode.js';
|
|
25
25
|
import { type CoreTextNodeProps } from '../core/CoreTextNode.js';
|
|
26
26
|
import type { INode, INodeProps, ITextNode, ITextNodeProps } from './INode.js';
|
|
27
27
|
import type { TextureMemoryManagerSettings } from '../core/TextureMemoryManager.js';
|
|
28
|
-
import type {
|
|
29
|
-
import type { SdfTextRenderer } from '../core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
|
|
30
|
-
import type { WebGlRenderer } from '../core/renderers/webgl/WebGlRenderer.js';
|
|
28
|
+
import type { TextRenderer } from '../core/text-rendering/TextRenderer.js';
|
|
31
29
|
import type { CanvasRenderer } from '../core/renderers/canvas/CanvasRenderer.js';
|
|
32
|
-
import type {
|
|
30
|
+
import type { WebGlRenderer } from '../core/renderers/webgl/WebGlRenderer.js';
|
|
31
|
+
import type { Inspector, InspectorOptions } from './Inspector.js';
|
|
33
32
|
import type { CoreShaderNode } from '../core/renderers/CoreShaderNode.js';
|
|
34
33
|
import type {
|
|
35
34
|
ExtractShaderProps,
|
|
36
35
|
OptionalShaderProps,
|
|
37
36
|
ShaderMap,
|
|
38
37
|
} from '../core/CoreShaderManager.js';
|
|
38
|
+
import { WebPlatform } from '../core/platforms/web/WebPlatform.js';
|
|
39
|
+
import { Platform } from '../core/platforms/Platform.js';
|
|
39
40
|
|
|
40
41
|
/**
|
|
41
|
-
*
|
|
42
|
+
* FPS Update Event Data
|
|
43
|
+
*
|
|
44
|
+
* @category Events
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* renderer.on('fpsUpdate', (data) => {
|
|
48
|
+
* console.log(`Current FPS: ${data.fps}`);
|
|
49
|
+
* if (data.contextSpyData) {
|
|
50
|
+
* console.log('WebGL calls:', data.contextSpyData);
|
|
51
|
+
* }
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export interface RendererMainFpsUpdateEvent {
|
|
56
|
+
/** Current frames per second */
|
|
57
|
+
fps: number;
|
|
58
|
+
/** Context spy data (if enabled) - contains WebGL call statistics */
|
|
59
|
+
contextSpyData?: unknown;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Frame Tick Event Data
|
|
64
|
+
*
|
|
65
|
+
* @category Events
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* renderer.on('frameTick', (data) => {
|
|
69
|
+
* console.log(`Frame time: ${data.time}ms, delta: ${data.delta}ms`);
|
|
70
|
+
* });
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export interface RendererMainFrameTickEvent {
|
|
74
|
+
/** Current timestamp */
|
|
75
|
+
time: number;
|
|
76
|
+
/** Time delta since last frame */
|
|
77
|
+
delta: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Quads Update Event Data
|
|
82
|
+
*
|
|
83
|
+
* @category Events
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* renderer.on('quadsUpdate', (data) => {
|
|
87
|
+
* console.log(`Rendered quads: ${data.quads}`);
|
|
88
|
+
* });
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export interface RendererMainQuadsUpdateEvent {
|
|
92
|
+
/** Number of rendered quads */
|
|
93
|
+
quads: number;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Idle Event Data
|
|
98
|
+
*
|
|
99
|
+
* @category Events
|
|
100
|
+
* @remarks
|
|
101
|
+
* This event is emitted when the renderer has no scene updates to process.
|
|
102
|
+
* The event has no payload - use this for performance optimizations during idle periods.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* renderer.on('idle', () => {
|
|
107
|
+
* // Renderer is idle - perfect time for cleanup, analytics, etc.
|
|
108
|
+
* console.log('Renderer is idle - no scene changes');
|
|
109
|
+
*
|
|
110
|
+
* // Example: Perform background tasks
|
|
111
|
+
* performBackgroundCleanup();
|
|
112
|
+
* sendAnalytics();
|
|
113
|
+
* });
|
|
114
|
+
* ```
|
|
42
115
|
*/
|
|
43
|
-
export interface
|
|
116
|
+
export interface RendererMainIdleEvent {
|
|
117
|
+
/** This event has no payload - listen without parameters */
|
|
118
|
+
readonly __eventHasNoPayload?: never;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Critical Cleanup Event Data
|
|
123
|
+
*
|
|
124
|
+
* @category Events
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* renderer.on('criticalCleanup', (data) => {
|
|
128
|
+
* console.log(`Memory cleanup triggered!`);
|
|
129
|
+
* console.log(`Memory used: ${data.memUsed} bytes`);
|
|
130
|
+
* console.log(`Critical threshold: ${data.criticalThreshold} bytes`);
|
|
131
|
+
* });
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export interface RendererMainCriticalCleanupEvent {
|
|
135
|
+
/** Memory used before cleanup (bytes) */
|
|
136
|
+
memUsed: number;
|
|
137
|
+
/** Critical threshold (bytes) */
|
|
138
|
+
criticalThreshold: number;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Critical Cleanup Failed Event Data
|
|
143
|
+
*
|
|
144
|
+
* @category Events
|
|
145
|
+
* @example
|
|
146
|
+
* ```typescript
|
|
147
|
+
* renderer.on('criticalCleanupFailed', (data) => {
|
|
148
|
+
* console.warn(`Memory cleanup failed!`);
|
|
149
|
+
* console.log(`Memory still used: ${data.memUsed} bytes`);
|
|
150
|
+
* console.log(`Critical threshold: ${data.criticalThreshold} bytes`);
|
|
151
|
+
* // Consider reducing texture usage or forcing cleanup
|
|
152
|
+
* });
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
export interface RendererMainCriticalCleanupFailedEvent {
|
|
156
|
+
/** Memory used after cleanup (bytes) */
|
|
157
|
+
memUsed: number;
|
|
158
|
+
/** Critical threshold (bytes) */
|
|
159
|
+
criticalThreshold: number;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Settings for the Renderer that can be updated during runtime.
|
|
164
|
+
*/
|
|
165
|
+
export interface RendererRuntimeSettings {
|
|
44
166
|
/**
|
|
45
167
|
* Authored logical pixel width of the application
|
|
46
168
|
*
|
|
47
169
|
* @defaultValue `1920`
|
|
48
170
|
*/
|
|
49
|
-
appWidth
|
|
171
|
+
appWidth: number;
|
|
50
172
|
|
|
51
173
|
/**
|
|
52
174
|
* Authored logical pixel height of the application
|
|
53
175
|
*
|
|
54
176
|
* @defaultValue `1080`
|
|
55
177
|
*/
|
|
56
|
-
appHeight
|
|
178
|
+
appHeight: number;
|
|
57
179
|
|
|
58
180
|
/**
|
|
59
181
|
* Texture Memory Manager Settings
|
|
60
182
|
*/
|
|
61
|
-
textureMemory
|
|
183
|
+
textureMemory: Partial<TextureMemoryManagerSettings>;
|
|
62
184
|
|
|
63
185
|
/**
|
|
64
186
|
* Bounds margin to extend the boundary in which a Node is added as Quad.
|
|
65
187
|
*/
|
|
66
|
-
boundsMargin
|
|
188
|
+
boundsMargin: number | [number, number, number, number];
|
|
67
189
|
|
|
68
190
|
/**
|
|
69
191
|
* Factor to convert app-authored logical coorindates to device logical coordinates
|
|
@@ -80,7 +202,7 @@ export interface RendererMainSettings {
|
|
|
80
202
|
*
|
|
81
203
|
* @defaultValue `1`
|
|
82
204
|
*/
|
|
83
|
-
deviceLogicalPixelRatio
|
|
205
|
+
deviceLogicalPixelRatio: number;
|
|
84
206
|
|
|
85
207
|
/**
|
|
86
208
|
* Factor to convert device logical coordinates to device physical coordinates
|
|
@@ -97,14 +219,14 @@ export interface RendererMainSettings {
|
|
|
97
219
|
*
|
|
98
220
|
* @defaultValue `window.devicePixelRatio`
|
|
99
221
|
*/
|
|
100
|
-
devicePhysicalPixelRatio
|
|
222
|
+
devicePhysicalPixelRatio: number;
|
|
101
223
|
|
|
102
224
|
/**
|
|
103
225
|
* RGBA encoded number of the background to use
|
|
104
226
|
*
|
|
105
227
|
* @defaultValue `0x00000000`
|
|
106
228
|
*/
|
|
107
|
-
clearColor
|
|
229
|
+
clearColor: number;
|
|
108
230
|
|
|
109
231
|
/**
|
|
110
232
|
* Interval in milliseconds to receive FPS updates
|
|
@@ -114,8 +236,71 @@ export interface RendererMainSettings {
|
|
|
114
236
|
*
|
|
115
237
|
* @defaultValue `0` (disabled)
|
|
116
238
|
*/
|
|
117
|
-
fpsUpdateInterval
|
|
239
|
+
fpsUpdateInterval: number;
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Clears the render buffer on reset
|
|
243
|
+
*
|
|
244
|
+
* @remarks
|
|
245
|
+
* If false, the renderer will not clear the buffer before rendering a new frame.
|
|
246
|
+
* This is useful if you want to preserve the previous frame.
|
|
247
|
+
*
|
|
248
|
+
* @defaultValue `true`
|
|
249
|
+
*/
|
|
250
|
+
enableClear: boolean;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* DOM Inspector
|
|
254
|
+
*
|
|
255
|
+
* @remarks
|
|
256
|
+
* The inspector will replicate the state of the Nodes created
|
|
257
|
+
* in the renderer and allow inspection of the state of the nodes.
|
|
258
|
+
*
|
|
259
|
+
*/
|
|
260
|
+
inspector: typeof Inspector | false;
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Inspector Options
|
|
264
|
+
*
|
|
265
|
+
* @remarks
|
|
266
|
+
* Configuration options for the Inspector's performance monitoring features.
|
|
267
|
+
* Only used when inspector is enabled.
|
|
268
|
+
*/
|
|
269
|
+
inspectorOptions?: Partial<InspectorOptions>;
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Texture Processing Limit (in milliseconds)
|
|
273
|
+
*
|
|
274
|
+
* @remarks
|
|
275
|
+
* The maximum amount of time the renderer is allowed to process textures in a
|
|
276
|
+
* single frame. If the processing time exceeds this limit, the renderer will
|
|
277
|
+
* skip processing the remaining textures and continue rendering the frame.
|
|
278
|
+
*
|
|
279
|
+
* @defaultValue `10`
|
|
280
|
+
*/
|
|
281
|
+
textureProcessingTimeLimit: number;
|
|
118
282
|
|
|
283
|
+
/**
|
|
284
|
+
* Target FPS for the global render loop
|
|
285
|
+
*
|
|
286
|
+
* @remarks
|
|
287
|
+
* Controls the maximum frame rate of the entire rendering system.
|
|
288
|
+
* When set to 0, no throttling is applied (use display refresh rate).
|
|
289
|
+
* When set to a positive number, the global requestAnimationFrame loop
|
|
290
|
+
* will be throttled to this target FPS, affecting all animations and rendering.
|
|
291
|
+
*
|
|
292
|
+
* This provides global performance control for the entire application,
|
|
293
|
+
* useful for managing performance on lower-end devices.
|
|
294
|
+
*
|
|
295
|
+
* @defaultValue `0` (no throttling, use display refresh rate)
|
|
296
|
+
*/
|
|
297
|
+
targetFPS: number;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Configuration settings for {@link RendererMain}
|
|
302
|
+
*/
|
|
303
|
+
export type RendererMainSettings = RendererRuntimeSettings & {
|
|
119
304
|
/**
|
|
120
305
|
* Include context call (i.e. WebGL) information in FPS updates
|
|
121
306
|
*
|
|
@@ -129,7 +314,7 @@ export interface RendererMainSettings {
|
|
|
129
314
|
*
|
|
130
315
|
* @defaultValue `false` (disabled)
|
|
131
316
|
*/
|
|
132
|
-
enableContextSpy
|
|
317
|
+
enableContextSpy: boolean;
|
|
133
318
|
|
|
134
319
|
/**
|
|
135
320
|
* Number or Image Workers to use
|
|
@@ -141,17 +326,7 @@ export interface RendererMainSettings {
|
|
|
141
326
|
*
|
|
142
327
|
* @defaultValue `2`
|
|
143
328
|
*/
|
|
144
|
-
numImageWorkers
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* DOM Inspector
|
|
148
|
-
*
|
|
149
|
-
* @remarks
|
|
150
|
-
* The inspector will replicate the state of the Nodes created
|
|
151
|
-
* in the renderer and allow inspection of the state of the nodes.
|
|
152
|
-
*
|
|
153
|
-
*/
|
|
154
|
-
inspector?: typeof Inspector | false;
|
|
329
|
+
numImageWorkers: number;
|
|
155
330
|
|
|
156
331
|
/**
|
|
157
332
|
* Renderer Engine
|
|
@@ -173,7 +348,7 @@ export interface RendererMainSettings {
|
|
|
173
348
|
*
|
|
174
349
|
* @defaultValue 4 * 1024 * 1024
|
|
175
350
|
*/
|
|
176
|
-
quadBufferSize
|
|
351
|
+
quadBufferSize: number;
|
|
177
352
|
|
|
178
353
|
/**
|
|
179
354
|
* Font Engines
|
|
@@ -203,7 +378,7 @@ export interface RendererMainSettings {
|
|
|
203
378
|
*
|
|
204
379
|
*
|
|
205
380
|
*/
|
|
206
|
-
fontEngines:
|
|
381
|
+
fontEngines: TextRenderer[];
|
|
207
382
|
|
|
208
383
|
/**
|
|
209
384
|
* Force WebGL2
|
|
@@ -214,30 +389,7 @@ export interface RendererMainSettings {
|
|
|
214
389
|
*
|
|
215
390
|
* @defaultValue `false`
|
|
216
391
|
*/
|
|
217
|
-
forceWebGL2
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Enable strictBounds
|
|
221
|
-
*
|
|
222
|
-
* @remarks
|
|
223
|
-
* Enable strict bounds for the renderer. This will ensure that the renderer
|
|
224
|
-
* will not render outside the bounds of the canvas.
|
|
225
|
-
*
|
|
226
|
-
* @defaultValue `true`
|
|
227
|
-
*/
|
|
228
|
-
strictBounds?: boolean;
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Texture Processing Limit (in milliseconds)
|
|
232
|
-
*
|
|
233
|
-
* @remarks
|
|
234
|
-
* The maximum amount of time the renderer is allowed to process textures in a
|
|
235
|
-
* single frame. If the processing time exceeds this limit, the renderer will
|
|
236
|
-
* skip processing the remaining textures and continue rendering the frame.
|
|
237
|
-
*
|
|
238
|
-
* @defaultValue `10`
|
|
239
|
-
*/
|
|
240
|
-
textureProcessingTimeLimit?: number;
|
|
392
|
+
forceWebGL2: boolean;
|
|
241
393
|
|
|
242
394
|
/**
|
|
243
395
|
* Canvas object to use for rendering
|
|
@@ -246,7 +398,7 @@ export interface RendererMainSettings {
|
|
|
246
398
|
* This is used to render the scene graph. If not provided, a new canvas
|
|
247
399
|
* element will be created and appended to the target element.
|
|
248
400
|
*/
|
|
249
|
-
canvas
|
|
401
|
+
canvas: HTMLCanvasElement;
|
|
250
402
|
|
|
251
403
|
/**
|
|
252
404
|
* createImageBitmap support for the runtime
|
|
@@ -271,8 +423,34 @@ export interface RendererMainSettings {
|
|
|
271
423
|
*
|
|
272
424
|
* @defaultValue `full`
|
|
273
425
|
*/
|
|
274
|
-
createImageBitmapSupport
|
|
275
|
-
|
|
426
|
+
createImageBitmapSupport: 'auto' | 'basic' | 'options' | 'full';
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Provide an alternative platform abstraction layer
|
|
430
|
+
*
|
|
431
|
+
* @remarks
|
|
432
|
+
* By default the Lightning 3 renderer will load a webplatform, assuming it runs
|
|
433
|
+
* inside a web browsr. However for special cases there might be a need to provide
|
|
434
|
+
* an abstracted platform layer to run on non-web or non-standard JS engines
|
|
435
|
+
*
|
|
436
|
+
* @defaultValue `null`
|
|
437
|
+
*/
|
|
438
|
+
platform: typeof Platform | null;
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* Number of times to retry loading a failed texture
|
|
442
|
+
*
|
|
443
|
+
* @remarks
|
|
444
|
+
* When a texture fails to load, Lightning will retry up to this many times
|
|
445
|
+
* before permanently giving up. Each retry will clear the texture ownership
|
|
446
|
+
* and then re-establish it to trigger a new load attempt.
|
|
447
|
+
*
|
|
448
|
+
* Set to null to disable retries. Set to 0 to always try once and never retry.
|
|
449
|
+
* This is typically only used on ImageTexture instances.
|
|
450
|
+
*
|
|
451
|
+
*/
|
|
452
|
+
maxRetryCount?: number;
|
|
453
|
+
};
|
|
276
454
|
|
|
277
455
|
/**
|
|
278
456
|
* The Renderer Main API
|
|
@@ -298,36 +476,36 @@ export interface RendererMainSettings {
|
|
|
298
476
|
* );
|
|
299
477
|
* ```
|
|
300
478
|
*
|
|
301
|
-
* ##
|
|
302
|
-
*
|
|
303
|
-
*
|
|
304
|
-
*
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
*
|
|
309
|
-
*
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
*
|
|
319
|
-
*
|
|
320
|
-
*
|
|
321
|
-
*
|
|
322
|
-
*
|
|
323
|
-
*
|
|
324
|
-
*
|
|
325
|
-
*
|
|
479
|
+
* ## Event Handling
|
|
480
|
+
*
|
|
481
|
+
* Listen to events using the standard EventEmitter API:
|
|
482
|
+
* ```typescript
|
|
483
|
+
* renderer.on('fpsUpdate', (data: RendererMainFpsUpdateEvent) => {
|
|
484
|
+
* console.log(`FPS: ${data.fps}`);
|
|
485
|
+
* });
|
|
486
|
+
*
|
|
487
|
+
* renderer.on('idle', (data: RendererMainIdleEvent) => {
|
|
488
|
+
* // Renderer is idle - no scene changes
|
|
489
|
+
* });
|
|
490
|
+
* ```
|
|
491
|
+
*
|
|
492
|
+
* @see {@link RendererMainFpsUpdateEvent}
|
|
493
|
+
* @see {@link RendererMainFrameTickEvent}
|
|
494
|
+
* @see {@link RendererMainQuadsUpdateEvent}
|
|
495
|
+
* @see {@link RendererMainIdleEvent}
|
|
496
|
+
* @see {@link RendererMainCriticalCleanupEvent}
|
|
497
|
+
* @see {@link RendererMainCriticalCleanupFailedEvent}
|
|
498
|
+
*
|
|
499
|
+
* @fires RendererMain#fpsUpdate
|
|
500
|
+
* @fires RendererMain#frameTick
|
|
501
|
+
* @fires RendererMain#quadsUpdate
|
|
502
|
+
* @fires RendererMain#idle
|
|
503
|
+
* @fires RendererMain#criticalCleanup
|
|
504
|
+
* @fires RendererMain#criticalCleanupFailed
|
|
326
505
|
*/
|
|
327
506
|
export class RendererMain extends EventEmitter {
|
|
328
507
|
readonly root: INode;
|
|
329
508
|
readonly canvas: HTMLCanvasElement;
|
|
330
|
-
readonly settings: Readonly<Required<RendererMainSettings>>;
|
|
331
509
|
readonly stage: Stage;
|
|
332
510
|
private inspector: Inspector | null = null;
|
|
333
511
|
|
|
@@ -338,44 +516,43 @@ export class RendererMain extends EventEmitter {
|
|
|
338
516
|
* @param target Element ID or HTMLElement to insert the canvas into
|
|
339
517
|
* @param driver Core Driver to use
|
|
340
518
|
*/
|
|
341
|
-
constructor(
|
|
519
|
+
constructor(
|
|
520
|
+
settings: Partial<RendererMainSettings>,
|
|
521
|
+
target?: string | HTMLElement,
|
|
522
|
+
) {
|
|
342
523
|
super();
|
|
343
524
|
|
|
344
|
-
const resolvedTxSettings
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
cleanupInterval: settings.textureMemory?.cleanupInterval || 5000,
|
|
348
|
-
debugLogging: settings.textureMemory?.debugLogging || false,
|
|
349
|
-
baselineMemoryAllocation:
|
|
350
|
-
settings.textureMemory?.baselineMemoryAllocation || 26e6,
|
|
351
|
-
doNotExceedCriticalThreshold:
|
|
352
|
-
settings.textureMemory?.doNotExceedCriticalThreshold || false,
|
|
353
|
-
};
|
|
525
|
+
const resolvedTxSettings = this.resolveTxSettings(
|
|
526
|
+
settings.textureMemory || {},
|
|
527
|
+
);
|
|
354
528
|
|
|
355
|
-
|
|
529
|
+
settings = {
|
|
356
530
|
appWidth: settings.appWidth || 1920,
|
|
357
531
|
appHeight: settings.appHeight || 1080,
|
|
358
532
|
textureMemory: resolvedTxSettings,
|
|
359
533
|
boundsMargin: settings.boundsMargin || 0,
|
|
360
534
|
deviceLogicalPixelRatio: settings.deviceLogicalPixelRatio || 1,
|
|
361
535
|
devicePhysicalPixelRatio:
|
|
362
|
-
settings.devicePhysicalPixelRatio || window.devicePixelRatio,
|
|
536
|
+
settings.devicePhysicalPixelRatio || window.devicePixelRatio || 1,
|
|
363
537
|
clearColor: settings.clearColor ?? 0x00000000,
|
|
364
538
|
fpsUpdateInterval: settings.fpsUpdateInterval || 0,
|
|
539
|
+
enableClear: settings.enableClear ?? true,
|
|
540
|
+
targetFPS: settings.targetFPS || 0,
|
|
365
541
|
numImageWorkers:
|
|
366
542
|
settings.numImageWorkers !== undefined ? settings.numImageWorkers : 2,
|
|
367
543
|
enableContextSpy: settings.enableContextSpy ?? false,
|
|
368
544
|
forceWebGL2: settings.forceWebGL2 ?? false,
|
|
369
545
|
inspector: settings.inspector ?? false,
|
|
546
|
+
inspectorOptions: settings.inspectorOptions ?? {},
|
|
370
547
|
renderEngine: settings.renderEngine,
|
|
371
548
|
quadBufferSize: settings.quadBufferSize ?? 4 * 1024 * 1024,
|
|
372
|
-
fontEngines: settings.fontEngines,
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
canvas: settings.canvas || document.createElement('canvas'),
|
|
549
|
+
fontEngines: settings.fontEngines ?? [],
|
|
550
|
+
textureProcessingTimeLimit: settings.textureProcessingTimeLimit || 42,
|
|
551
|
+
canvas: settings.canvas,
|
|
376
552
|
createImageBitmapSupport: settings.createImageBitmapSupport || 'full',
|
|
553
|
+
platform: settings.platform || null,
|
|
554
|
+
maxRetryCount: settings.maxRetryCount ?? 5,
|
|
377
555
|
};
|
|
378
|
-
this.settings = resolvedSettings;
|
|
379
556
|
|
|
380
557
|
const {
|
|
381
558
|
appWidth,
|
|
@@ -383,8 +560,21 @@ export class RendererMain extends EventEmitter {
|
|
|
383
560
|
deviceLogicalPixelRatio,
|
|
384
561
|
devicePhysicalPixelRatio,
|
|
385
562
|
inspector,
|
|
386
|
-
|
|
387
|
-
|
|
563
|
+
} = settings as RendererMainSettings;
|
|
564
|
+
|
|
565
|
+
let platform;
|
|
566
|
+
if (
|
|
567
|
+
settings.platform !== undefined &&
|
|
568
|
+
settings.platform !== null &&
|
|
569
|
+
settings.platform.prototype instanceof Platform === true
|
|
570
|
+
) {
|
|
571
|
+
// @ts-ignore - if Platform is a valid class, it will be used
|
|
572
|
+
platform = new settings.platform();
|
|
573
|
+
} else {
|
|
574
|
+
platform = new WebPlatform();
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
const canvas = settings.canvas || platform.createCanvas();
|
|
388
578
|
|
|
389
579
|
const deviceLogicalWidth = appWidth * deviceLogicalPixelRatio;
|
|
390
580
|
const deviceLogicalHeight = appHeight * deviceLogicalPixelRatio;
|
|
@@ -398,51 +588,98 @@ export class RendererMain extends EventEmitter {
|
|
|
398
588
|
|
|
399
589
|
// Initialize the stage
|
|
400
590
|
this.stage = new Stage({
|
|
401
|
-
appWidth
|
|
402
|
-
appHeight
|
|
403
|
-
boundsMargin:
|
|
404
|
-
clearColor:
|
|
591
|
+
appWidth,
|
|
592
|
+
appHeight,
|
|
593
|
+
boundsMargin: settings.boundsMargin!,
|
|
594
|
+
clearColor: settings.clearColor!,
|
|
405
595
|
canvas: this.canvas,
|
|
406
|
-
deviceLogicalPixelRatio
|
|
407
|
-
devicePhysicalPixelRatio
|
|
408
|
-
enableContextSpy:
|
|
409
|
-
forceWebGL2:
|
|
410
|
-
fpsUpdateInterval:
|
|
411
|
-
|
|
412
|
-
|
|
596
|
+
deviceLogicalPixelRatio,
|
|
597
|
+
devicePhysicalPixelRatio,
|
|
598
|
+
enableContextSpy: settings.enableContextSpy!,
|
|
599
|
+
forceWebGL2: settings.forceWebGL2!,
|
|
600
|
+
fpsUpdateInterval: settings.fpsUpdateInterval!,
|
|
601
|
+
enableClear: settings.enableClear!,
|
|
602
|
+
numImageWorkers: settings.numImageWorkers!,
|
|
603
|
+
renderEngine: settings.renderEngine!,
|
|
413
604
|
textureMemory: resolvedTxSettings,
|
|
414
605
|
eventBus: this,
|
|
415
|
-
quadBufferSize:
|
|
416
|
-
fontEngines:
|
|
417
|
-
inspector:
|
|
418
|
-
|
|
419
|
-
textureProcessingTimeLimit:
|
|
420
|
-
createImageBitmapSupport:
|
|
606
|
+
quadBufferSize: settings.quadBufferSize!,
|
|
607
|
+
fontEngines: settings.fontEngines!,
|
|
608
|
+
inspector: settings.inspector !== null,
|
|
609
|
+
targetFPS: settings.targetFPS!,
|
|
610
|
+
textureProcessingTimeLimit: settings.textureProcessingTimeLimit!,
|
|
611
|
+
createImageBitmapSupport: settings.createImageBitmapSupport!,
|
|
612
|
+
platform,
|
|
613
|
+
maxRetryCount: settings.maxRetryCount ?? 5,
|
|
421
614
|
});
|
|
422
615
|
|
|
423
616
|
// Extract the root node
|
|
424
617
|
this.root = this.stage.root as unknown as INode;
|
|
425
618
|
|
|
426
619
|
// Get the target element and attach the canvas to it
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
620
|
+
if (target) {
|
|
621
|
+
let targetEl: HTMLElement | null;
|
|
622
|
+
if (typeof target === 'string') {
|
|
623
|
+
targetEl = document.getElementById(target);
|
|
624
|
+
} else {
|
|
625
|
+
targetEl = target;
|
|
626
|
+
}
|
|
433
627
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
628
|
+
if (!targetEl) {
|
|
629
|
+
throw new Error('Could not find target element');
|
|
630
|
+
}
|
|
437
631
|
|
|
438
|
-
|
|
632
|
+
targetEl.appendChild(canvas);
|
|
633
|
+
} else if (settings.canvas !== canvas) {
|
|
634
|
+
throw new Error(
|
|
635
|
+
'New canvas element could not be appended to undefined target',
|
|
636
|
+
);
|
|
637
|
+
}
|
|
439
638
|
|
|
440
639
|
// Initialize inspector (if enabled)
|
|
441
|
-
if (inspector &&
|
|
442
|
-
this.inspector = new inspector(canvas,
|
|
640
|
+
if (inspector && isProductionEnvironment === false) {
|
|
641
|
+
this.inspector = new inspector(canvas, settings as RendererMainSettings);
|
|
443
642
|
}
|
|
444
643
|
}
|
|
445
644
|
|
|
645
|
+
/**
|
|
646
|
+
* Resolves the Texture Memory Manager values
|
|
647
|
+
*
|
|
648
|
+
* @param props
|
|
649
|
+
* @returns
|
|
650
|
+
*/
|
|
651
|
+
private resolveTxSettings(
|
|
652
|
+
textureMemory: Partial<TextureMemoryManagerSettings>,
|
|
653
|
+
): TextureMemoryManagerSettings {
|
|
654
|
+
const currentTxSettings =
|
|
655
|
+
(this.stage && this.stage.options.textureMemory) || {};
|
|
656
|
+
|
|
657
|
+
return {
|
|
658
|
+
criticalThreshold:
|
|
659
|
+
textureMemory?.criticalThreshold ??
|
|
660
|
+
currentTxSettings?.criticalThreshold ??
|
|
661
|
+
124e6,
|
|
662
|
+
targetThresholdLevel:
|
|
663
|
+
textureMemory?.targetThresholdLevel ??
|
|
664
|
+
currentTxSettings?.targetThresholdLevel ??
|
|
665
|
+
0.5,
|
|
666
|
+
cleanupInterval:
|
|
667
|
+
textureMemory?.cleanupInterval ??
|
|
668
|
+
currentTxSettings?.cleanupInterval ??
|
|
669
|
+
5000,
|
|
670
|
+
debugLogging:
|
|
671
|
+
textureMemory?.debugLogging ?? currentTxSettings?.debugLogging ?? false,
|
|
672
|
+
baselineMemoryAllocation:
|
|
673
|
+
textureMemory?.baselineMemoryAllocation ??
|
|
674
|
+
currentTxSettings?.baselineMemoryAllocation ??
|
|
675
|
+
26e6,
|
|
676
|
+
doNotExceedCriticalThreshold:
|
|
677
|
+
textureMemory?.doNotExceedCriticalThreshold ??
|
|
678
|
+
currentTxSettings?.doNotExceedCriticalThreshold ??
|
|
679
|
+
false,
|
|
680
|
+
};
|
|
681
|
+
}
|
|
682
|
+
|
|
446
683
|
/**
|
|
447
684
|
* Create a new scene graph node
|
|
448
685
|
*
|
|
@@ -461,16 +698,12 @@ export class RendererMain extends EventEmitter {
|
|
|
461
698
|
createNode<ShNode extends CoreShaderNode<any>>(
|
|
462
699
|
props: Partial<INodeProps<ShNode>>,
|
|
463
700
|
): INode<ShNode> {
|
|
464
|
-
assertTruthy(this.stage, 'Stage is not initialized');
|
|
465
|
-
|
|
466
701
|
const node = this.stage.createNode(props as Partial<CoreNodeProps>);
|
|
467
702
|
|
|
468
703
|
if (this.inspector) {
|
|
469
704
|
return this.inspector.createNode(node) as unknown as INode<ShNode>;
|
|
470
705
|
}
|
|
471
706
|
|
|
472
|
-
// FIXME onDestroy event? node.once('beforeDestroy'
|
|
473
|
-
// FIXME onCreate event?
|
|
474
707
|
return node as unknown as INode<ShNode>;
|
|
475
708
|
}
|
|
476
709
|
|
|
@@ -557,7 +790,7 @@ export class RendererMain extends EventEmitter {
|
|
|
557
790
|
props?: OptionalShaderProps<ShType>,
|
|
558
791
|
) {
|
|
559
792
|
return this.stage.shManager.createShader(shType, props) as CoreShaderNode<
|
|
560
|
-
ExtractShaderProps<ShType
|
|
793
|
+
NonNullable<ExtractShaderProps<ShType>>
|
|
561
794
|
>;
|
|
562
795
|
}
|
|
563
796
|
|
|
@@ -634,8 +867,8 @@ export class RendererMain extends EventEmitter {
|
|
|
634
867
|
* **NOTE3**: This will not cleanup textures that are marked as `preventCleanup`.
|
|
635
868
|
* **NOTE4**: This has nothing to do with the garbage collection of JavaScript.
|
|
636
869
|
*/
|
|
637
|
-
cleanup(
|
|
638
|
-
this.stage.cleanup(
|
|
870
|
+
cleanup() {
|
|
871
|
+
this.stage.cleanup();
|
|
639
872
|
}
|
|
640
873
|
|
|
641
874
|
/**
|
|
@@ -646,4 +879,150 @@ export class RendererMain extends EventEmitter {
|
|
|
646
879
|
setClearColor(color: number) {
|
|
647
880
|
this.stage.setClearColor(color);
|
|
648
881
|
}
|
|
882
|
+
|
|
883
|
+
/**
|
|
884
|
+
* Set options for the renderer
|
|
885
|
+
*
|
|
886
|
+
* @param options
|
|
887
|
+
*/
|
|
888
|
+
setOptions(options: Partial<RendererRuntimeSettings>) {
|
|
889
|
+
const stage = this.stage;
|
|
890
|
+
if (options.textureMemory !== undefined) {
|
|
891
|
+
const textureMemory = (options.textureMemory = this.resolveTxSettings(
|
|
892
|
+
options.textureMemory,
|
|
893
|
+
));
|
|
894
|
+
stage.txMemManager.updateSettings(textureMemory);
|
|
895
|
+
stage.txMemManager.cleanup();
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
if (options.boundsMargin !== undefined) {
|
|
899
|
+
let bm = options.boundsMargin!;
|
|
900
|
+
options.boundsMargin = Array.isArray(bm) ? bm : [bm, bm, bm, bm];
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
const stageOptions = stage.options;
|
|
904
|
+
for (let key in options) {
|
|
905
|
+
stageOptions[key] = options[key]!;
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
if (options.inspector !== undefined && !isProductionEnvironment) {
|
|
909
|
+
if (options.inspector === false) {
|
|
910
|
+
this.inspector?.destroy();
|
|
911
|
+
this.inspector = null;
|
|
912
|
+
} else if (
|
|
913
|
+
this.inspector === null ||
|
|
914
|
+
this.inspector.constructor !== options.inspector
|
|
915
|
+
) {
|
|
916
|
+
this.inspector = new options.inspector(
|
|
917
|
+
this.canvas,
|
|
918
|
+
stage.options as unknown as RendererMainSettings,
|
|
919
|
+
);
|
|
920
|
+
this.inspector?.createNodes(this.root as unknown as CoreNode);
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
let needDimensionsUpdate = false;
|
|
925
|
+
|
|
926
|
+
if (
|
|
927
|
+
options.deviceLogicalPixelRatio ||
|
|
928
|
+
options.devicePhysicalPixelRatio !== undefined
|
|
929
|
+
) {
|
|
930
|
+
this.stage.pixelRatio =
|
|
931
|
+
stageOptions.devicePhysicalPixelRatio *
|
|
932
|
+
stageOptions.deviceLogicalPixelRatio;
|
|
933
|
+
this.inspector?.updateViewport(
|
|
934
|
+
stageOptions.appWidth,
|
|
935
|
+
stageOptions.appHeight,
|
|
936
|
+
stageOptions.deviceLogicalPixelRatio,
|
|
937
|
+
);
|
|
938
|
+
needDimensionsUpdate = true;
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
if (options.appWidth !== undefined || options.appHeight !== undefined) {
|
|
942
|
+
this.inspector?.updateViewport(
|
|
943
|
+
stageOptions.appWidth,
|
|
944
|
+
stageOptions.appHeight,
|
|
945
|
+
stageOptions.deviceLogicalPixelRatio,
|
|
946
|
+
);
|
|
947
|
+
needDimensionsUpdate = true;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
if (options.boundsMargin !== undefined) {
|
|
951
|
+
this.stage.setBoundsMargin(options.boundsMargin);
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
if (options.clearColor !== undefined) {
|
|
955
|
+
this.stage.setClearColor(options.clearColor);
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
if (needDimensionsUpdate) {
|
|
959
|
+
this.updateAppDimensions();
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
private updateAppDimensions() {
|
|
964
|
+
const {
|
|
965
|
+
appWidth,
|
|
966
|
+
appHeight,
|
|
967
|
+
deviceLogicalPixelRatio,
|
|
968
|
+
devicePhysicalPixelRatio,
|
|
969
|
+
} = this.stage.options;
|
|
970
|
+
|
|
971
|
+
const deviceLogicalWidth = appWidth * deviceLogicalPixelRatio;
|
|
972
|
+
const deviceLogicalHeight = appHeight * deviceLogicalPixelRatio;
|
|
973
|
+
|
|
974
|
+
this.canvas.width = deviceLogicalWidth * devicePhysicalPixelRatio;
|
|
975
|
+
this.canvas.height = deviceLogicalHeight * devicePhysicalPixelRatio;
|
|
976
|
+
|
|
977
|
+
this.canvas.style.width = `${deviceLogicalWidth}px`;
|
|
978
|
+
this.canvas.style.height = `${deviceLogicalHeight}px`;
|
|
979
|
+
|
|
980
|
+
this.stage.renderer.updateViewport();
|
|
981
|
+
|
|
982
|
+
this.root.w = appWidth;
|
|
983
|
+
this.root.h = appHeight;
|
|
984
|
+
this.stage.updateViewportBounds();
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
get settings(): Readonly<StageOptions> {
|
|
988
|
+
return this.stage.options;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
/**
|
|
992
|
+
* Gets the target FPS for the global render loop
|
|
993
|
+
*
|
|
994
|
+
* @returns The current target FPS (0 means no throttling)
|
|
995
|
+
*
|
|
996
|
+
* @remarks
|
|
997
|
+
* This controls the maximum frame rate of the entire rendering system.
|
|
998
|
+
* When 0, the system runs at display refresh rate.
|
|
999
|
+
*/
|
|
1000
|
+
get targetFPS(): number {
|
|
1001
|
+
return this.stage.options.targetFPS || 0;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
/**
|
|
1005
|
+
* Sets the target FPS for the global render loop
|
|
1006
|
+
*
|
|
1007
|
+
* @param fps - The target FPS to set for the global render loop.
|
|
1008
|
+
* Set to 0 or a negative value to disable throttling.
|
|
1009
|
+
*
|
|
1010
|
+
* @remarks
|
|
1011
|
+
* This setting affects the entire rendering system immediately.
|
|
1012
|
+
* All animations, rendering, and frame updates will be throttled
|
|
1013
|
+
* to this target FPS. Provides global performance control.
|
|
1014
|
+
*
|
|
1015
|
+
* @example
|
|
1016
|
+
* ```typescript
|
|
1017
|
+
* // Set global target to 30fps for better performance
|
|
1018
|
+
* renderer.targetFPS = 30;
|
|
1019
|
+
*
|
|
1020
|
+
* // Disable global throttling (use display refresh rate)
|
|
1021
|
+
* renderer.targetFPS = 0;
|
|
1022
|
+
* ```
|
|
1023
|
+
*/
|
|
1024
|
+
set targetFPS(fps: number) {
|
|
1025
|
+
this.stage.options.targetFPS = fps > 0 ? fps : 0;
|
|
1026
|
+
this.stage.updateTargetFrameTime();
|
|
1027
|
+
}
|
|
649
1028
|
}
|