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