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