@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta4
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/COPYING +1 -0
- package/LICENSE +202 -202
- package/NOTICE +3 -3
- package/README.md +147 -147
- package/dist/exports/index.d.ts +1 -0
- package/dist/exports/index.js +1 -0
- package/dist/exports/index.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +3 -2
- package/dist/src/core/CoreNode.js +13 -7
- 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 +2 -0
- package/dist/src/core/CoreTextNode.js +7 -0
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +2 -0
- package/dist/src/core/CoreTextureManager.js +7 -5
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +5 -0
- package/dist/src/core/Stage.js +10 -5
- package/dist/src/core/Stage.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 +37 -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 +9 -0
- package/dist/src/core/platforms/web/WebPlatform.js +58 -0
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
- package/dist/src/core/renderers/CoreRenderer.d.ts +3 -1
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderNode.d.ts +1 -1
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +3 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +86 -60
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +35 -35
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +45 -45
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +61 -61
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +93 -93
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +63 -63
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +62 -62
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +6 -6
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +42 -42
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +44 -44
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +3 -3
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +22 -22
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +28 -28
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +10 -10
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +37 -37
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +19 -19
- package/dist/src/core/shaders/webgl/Border.js +59 -59
- package/dist/src/core/shaders/webgl/Default.js +47 -47
- package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
- package/dist/src/core/shaders/webgl/HolePunch.js +32 -32
- package/dist/src/core/shaders/webgl/LinearGradient.js +36 -36
- package/dist/src/core/shaders/webgl/RadialGradient.js +33 -33
- package/dist/src/core/shaders/webgl/Rounded.js +71 -71
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +66 -66
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +79 -79
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +54 -54
- package/dist/src/core/shaders/webgl/SdfShader.js +62 -62
- package/dist/src/core/shaders/webgl/Shadow.js +83 -83
- package/dist/src/core/temp.js +77 -0
- package/dist/src/core/temp.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +5 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +50 -2
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +6 -2
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +66 -8
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +13 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +3 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +1 -0
- package/dist/src/core/textures/ImageTexture.js +5 -3
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +9 -2
- package/dist/src/core/textures/Texture.js +18 -6
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/main-api/INode.d.ts +2 -2
- package/dist/src/main-api/Renderer.d.ts +13 -1
- package/dist/src/main-api/Renderer.js +14 -2
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/canvas-shaders.ts +28 -28
- package/exports/canvas.ts +45 -45
- package/exports/index.ts +90 -89
- package/exports/inspector.ts +24 -24
- package/exports/utils.ts +44 -44
- package/exports/webgl-shaders.ts +28 -28
- package/exports/webgl.ts +50 -50
- package/package.json +2 -3
- package/scripts/please-use-pnpm.js +13 -13
- package/src/common/CommonTypes.ts +146 -146
- package/src/common/EventEmitter.ts +77 -77
- package/src/common/IAnimationController.ts +92 -92
- package/src/common/IEventEmitter.ts +28 -28
- package/src/core/CoreNode.test.ts +203 -203
- package/src/core/CoreNode.ts +2494 -2486
- package/src/core/CoreShaderManager.ts +188 -193
- package/src/core/CoreTextNode.ts +448 -439
- package/src/core/CoreTextureManager.ts +601 -597
- package/src/core/Stage.ts +754 -738
- package/src/core/TextureMemoryManager.ts +395 -395
- package/src/core/animations/AnimationManager.ts +38 -38
- package/src/core/animations/CoreAnimation.ts +284 -284
- package/src/core/animations/CoreAnimationController.ts +157 -157
- package/src/core/lib/ContextSpy.ts +41 -41
- package/src/core/lib/ImageWorker.ts +280 -280
- package/src/core/lib/Matrix3d.ts +244 -244
- package/src/core/lib/RenderCoords.ts +71 -71
- package/src/core/lib/WebGlContextWrapper.ts +1374 -1374
- package/src/core/lib/textureCompression.ts +152 -152
- package/src/core/lib/textureSvg.ts +78 -78
- package/src/core/lib/utils.ts +386 -386
- package/src/core/lib/validateImageBitmap.ts +87 -76
- package/src/core/platform.ts +64 -64
- package/src/core/platforms/Platform.ts +77 -0
- package/src/core/platforms/web/WebPlatform.ts +84 -0
- package/src/core/renderers/CoreContextTexture.ts +43 -43
- package/src/core/renderers/CoreRenderOp.ts +22 -22
- package/src/core/renderers/CoreRenderer.ts +109 -107
- package/src/core/renderers/CoreShaderNode.ts +165 -167
- package/src/core/renderers/CoreShaderProgram.ts +23 -23
- package/src/core/renderers/canvas/CanvasRenderer.ts +298 -298
- package/src/core/renderers/canvas/CanvasShaderNode.ts +99 -99
- package/src/core/renderers/canvas/CanvasTexture.ts +156 -156
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +220 -220
- package/src/core/renderers/canvas/internal/ColorUtils.ts +85 -85
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +86 -86
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -50
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +301 -301
- package/src/core/renderers/webgl/WebGlRenderOp.ts +161 -161
- package/src/core/renderers/webgl/WebGlRenderer.ts +750 -720
- package/src/core/renderers/webgl/WebGlShaderNode.ts +437 -437
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +318 -318
- package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
- package/src/core/renderers/webgl/internal/RendererUtils.ts +155 -155
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +281 -281
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
- package/src/core/shaders/canvas/Border.ts +78 -78
- package/src/core/shaders/canvas/HolePunch.ts +62 -62
- package/src/core/shaders/canvas/LinearGradient.ts +69 -69
- package/src/core/shaders/canvas/RadialGradient.ts +113 -113
- package/src/core/shaders/canvas/Rounded.ts +55 -55
- package/src/core/shaders/canvas/RoundedWithBorder.ts +68 -68
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +88 -88
- package/src/core/shaders/canvas/RoundedWithShadow.ts +69 -69
- package/src/core/shaders/canvas/Shadow.ts +52 -52
- package/src/core/shaders/canvas/utils/render.ts +151 -151
- package/src/core/shaders/templates/BorderTemplate.ts +115 -115
- package/src/core/shaders/templates/HolePunchTemplate.ts +82 -82
- package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -71
- package/src/core/shaders/templates/RadialGradientTemplate.ts +81 -81
- package/src/core/shaders/templates/RoundedTemplate.ts +98 -98
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -38
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -35
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -35
- package/src/core/shaders/templates/ShadowTemplate.ts +106 -106
- package/src/core/shaders/templates/shaderUtils.ts +47 -47
- package/src/core/shaders/webgl/Border.ts +96 -96
- package/src/core/shaders/webgl/Default.ts +89 -89
- package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
- package/src/core/shaders/webgl/HolePunch.ts +78 -78
- package/src/core/shaders/webgl/LinearGradient.ts +81 -81
- package/src/core/shaders/webgl/RadialGradient.ts +84 -84
- package/src/core/shaders/webgl/Rounded.ts +117 -117
- package/src/core/shaders/webgl/RoundedWithBorder.ts +114 -114
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +133 -133
- package/src/core/shaders/webgl/RoundedWithShadow.ts +98 -98
- package/src/core/shaders/webgl/SdfShader.ts +134 -134
- package/src/core/shaders/webgl/Shadow.ts +115 -115
- package/src/core/text-rendering/TextRenderingUtils.ts +36 -36
- package/src/core/text-rendering/TextTextureRendererUtils.ts +263 -263
- package/src/core/text-rendering/TrFontManager.ts +183 -183
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +176 -176
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -139
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -173
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +171 -171
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +187 -187
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +94 -94
- package/src/core/text-rendering/font-face-types/utils.ts +39 -39
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +514 -509
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +863 -815
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +846 -840
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -48
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -66
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -32
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +117 -117
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -133
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -38
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +497 -408
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -49
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +52 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -205
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -93
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -40
- package/src/core/text-rendering/renderers/TextRenderer.ts +567 -550
- package/src/core/textures/ColorTexture.ts +102 -102
- package/src/core/textures/ImageTexture.ts +410 -399
- package/src/core/textures/NoiseTexture.ts +104 -104
- package/src/core/textures/RenderTexture.ts +85 -85
- package/src/core/textures/SubTexture.ts +205 -205
- package/src/core/textures/Texture.ts +358 -337
- package/src/core/utils.ts +227 -227
- package/src/env.d.ts +7 -7
- package/src/main-api/INode.ts +100 -99
- package/src/main-api/Inspector.ts +522 -522
- package/src/main-api/Renderer.ts +675 -649
- package/src/main-api/utils.ts +45 -45
- package/src/utils.ts +267 -267
- 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.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/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 +0 -20
- 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/dist/src/core/{CoreStuff.d.ts → temp.d.ts} +0 -0
package/src/main-api/Renderer.ts
CHANGED
|
@@ -1,649 +1,675 @@
|
|
|
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
|
-
import type { ExtractProps, TextureMap } from '../core/CoreTextureManager.js';
|
|
21
|
-
import { EventEmitter } from '../common/EventEmitter.js';
|
|
22
|
-
import { assertTruthy, isProductionEnvironment } from '../utils.js';
|
|
23
|
-
import { Stage } from '../core/Stage.js';
|
|
24
|
-
import { CoreNode, type CoreNodeProps } from '../core/CoreNode.js';
|
|
25
|
-
import { type CoreTextNodeProps } from '../core/CoreTextNode.js';
|
|
26
|
-
import type { INode, INodeProps, ITextNode, ITextNodeProps } from './INode.js';
|
|
27
|
-
import type { TextureMemoryManagerSettings } from '../core/TextureMemoryManager.js';
|
|
28
|
-
import type { CanvasTextRenderer } from '../core/text-rendering/renderers/CanvasTextRenderer.js';
|
|
29
|
-
import type { SdfTextRenderer } from '../core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
|
|
30
|
-
import type { WebGlRenderer } from '../core/renderers/webgl/WebGlRenderer.js';
|
|
31
|
-
import type { CanvasRenderer } from '../core/renderers/canvas/CanvasRenderer.js';
|
|
32
|
-
import type { Inspector } from './Inspector.js';
|
|
33
|
-
import type { CoreShaderNode } from '../core/renderers/CoreShaderNode.js';
|
|
34
|
-
import type {
|
|
35
|
-
ExtractShaderProps,
|
|
36
|
-
OptionalShaderProps,
|
|
37
|
-
ShaderMap,
|
|
38
|
-
} from '../core/CoreShaderManager.js';
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
*
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
*
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* This
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
*
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
*
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
* import
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
*
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
258
|
-
*
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
* -
|
|
263
|
-
* -
|
|
264
|
-
*
|
|
265
|
-
*
|
|
266
|
-
*
|
|
267
|
-
*
|
|
268
|
-
*
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
*
|
|
293
|
-
*
|
|
294
|
-
*
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
*
|
|
298
|
-
*
|
|
299
|
-
*
|
|
300
|
-
*
|
|
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
|
-
*
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
settings.
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
//
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
this.
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
if
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
*
|
|
479
|
-
*
|
|
480
|
-
*
|
|
481
|
-
*
|
|
482
|
-
*
|
|
483
|
-
*
|
|
484
|
-
*
|
|
485
|
-
*
|
|
486
|
-
*
|
|
487
|
-
*
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
*
|
|
505
|
-
*
|
|
506
|
-
*
|
|
507
|
-
*
|
|
508
|
-
*
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
*
|
|
529
|
-
*
|
|
530
|
-
* @
|
|
531
|
-
*
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
*
|
|
546
|
-
*
|
|
547
|
-
*
|
|
548
|
-
*
|
|
549
|
-
*
|
|
550
|
-
*
|
|
551
|
-
*
|
|
552
|
-
*
|
|
553
|
-
*
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
*
|
|
568
|
-
*
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
*
|
|
634
|
-
*
|
|
635
|
-
*
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
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
|
+
import type { ExtractProps, TextureMap } from '../core/CoreTextureManager.js';
|
|
21
|
+
import { EventEmitter } from '../common/EventEmitter.js';
|
|
22
|
+
import { assertTruthy, isProductionEnvironment } from '../utils.js';
|
|
23
|
+
import { Stage } from '../core/Stage.js';
|
|
24
|
+
import { CoreNode, type CoreNodeProps } from '../core/CoreNode.js';
|
|
25
|
+
import { type CoreTextNodeProps } from '../core/CoreTextNode.js';
|
|
26
|
+
import type { INode, INodeProps, ITextNode, ITextNodeProps } from './INode.js';
|
|
27
|
+
import type { TextureMemoryManagerSettings } from '../core/TextureMemoryManager.js';
|
|
28
|
+
import type { CanvasTextRenderer } from '../core/text-rendering/renderers/CanvasTextRenderer.js';
|
|
29
|
+
import type { SdfTextRenderer } from '../core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
|
|
30
|
+
import type { WebGlRenderer } from '../core/renderers/webgl/WebGlRenderer.js';
|
|
31
|
+
import type { CanvasRenderer } from '../core/renderers/canvas/CanvasRenderer.js';
|
|
32
|
+
import type { Inspector } from './Inspector.js';
|
|
33
|
+
import type { CoreShaderNode } from '../core/renderers/CoreShaderNode.js';
|
|
34
|
+
import type {
|
|
35
|
+
ExtractShaderProps,
|
|
36
|
+
OptionalShaderProps,
|
|
37
|
+
ShaderMap,
|
|
38
|
+
} from '../core/CoreShaderManager.js';
|
|
39
|
+
import { WebPlatform } from '../core/platforms/web/WebPlatform.js';
|
|
40
|
+
import { Platform } from '../core/platforms/Platform.js';
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Configuration settings for {@link RendererMain}
|
|
44
|
+
*/
|
|
45
|
+
export interface RendererMainSettings {
|
|
46
|
+
/**
|
|
47
|
+
* Authored logical pixel width of the application
|
|
48
|
+
*
|
|
49
|
+
* @defaultValue `1920`
|
|
50
|
+
*/
|
|
51
|
+
appWidth?: number;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Authored logical pixel height of the application
|
|
55
|
+
*
|
|
56
|
+
* @defaultValue `1080`
|
|
57
|
+
*/
|
|
58
|
+
appHeight?: number;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Texture Memory Manager Settings
|
|
62
|
+
*/
|
|
63
|
+
textureMemory?: Partial<TextureMemoryManagerSettings>;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Bounds margin to extend the boundary in which a Node is added as Quad.
|
|
67
|
+
*/
|
|
68
|
+
boundsMargin?: number | [number, number, number, number];
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Factor to convert app-authored logical coorindates to device logical coordinates
|
|
72
|
+
*
|
|
73
|
+
* @remarks
|
|
74
|
+
* This value allows auto-scaling to support larger/small resolutions than the
|
|
75
|
+
* app was authored for.
|
|
76
|
+
*
|
|
77
|
+
* If the app was authored for 1920x1080 and this value is 2, the app's canvas
|
|
78
|
+
* will be rendered at 3840x2160 logical pixels.
|
|
79
|
+
*
|
|
80
|
+
* Likewise, if the app was authored for 1920x1080 and this value is 0.66667,
|
|
81
|
+
* the app's canvas will be rendered at 1280x720 logical pixels.
|
|
82
|
+
*
|
|
83
|
+
* @defaultValue `1`
|
|
84
|
+
*/
|
|
85
|
+
deviceLogicalPixelRatio?: number;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Factor to convert device logical coordinates to device physical coordinates
|
|
89
|
+
*
|
|
90
|
+
* @remarks
|
|
91
|
+
* This value allows auto-scaling to support devices with different pixel densities.
|
|
92
|
+
*
|
|
93
|
+
* This controls the number of physical pixels that are used to render each logical
|
|
94
|
+
* pixel. For example, if the device has a pixel density of 2, each logical pixel
|
|
95
|
+
* will be rendered using 2x2 physical pixels.
|
|
96
|
+
*
|
|
97
|
+
* By default, it will be set to `window.devicePixelRatio` which is the pixel
|
|
98
|
+
* density of the device the app is running on reported by the browser.
|
|
99
|
+
*
|
|
100
|
+
* @defaultValue `window.devicePixelRatio`
|
|
101
|
+
*/
|
|
102
|
+
devicePhysicalPixelRatio?: number;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* RGBA encoded number of the background to use
|
|
106
|
+
*
|
|
107
|
+
* @defaultValue `0x00000000`
|
|
108
|
+
*/
|
|
109
|
+
clearColor?: number;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Interval in milliseconds to receive FPS updates
|
|
113
|
+
*
|
|
114
|
+
* @remarks
|
|
115
|
+
* If set to `0`, FPS updates will be disabled.
|
|
116
|
+
*
|
|
117
|
+
* @defaultValue `0` (disabled)
|
|
118
|
+
*/
|
|
119
|
+
fpsUpdateInterval?: number;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Include context call (i.e. WebGL) information in FPS updates
|
|
123
|
+
*
|
|
124
|
+
* @remarks
|
|
125
|
+
* When enabled the number of calls to each context method over the
|
|
126
|
+
* `fpsUpdateInterval` will be included in the FPS update payload's
|
|
127
|
+
* `contextSpyData` property.
|
|
128
|
+
*
|
|
129
|
+
* Enabling the context spy has a serious impact on performance so only use it
|
|
130
|
+
* when you need to extract context call information.
|
|
131
|
+
*
|
|
132
|
+
* @defaultValue `false` (disabled)
|
|
133
|
+
*/
|
|
134
|
+
enableContextSpy?: boolean;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Number or Image Workers to use
|
|
138
|
+
*
|
|
139
|
+
* @remarks
|
|
140
|
+
* On devices with multiple cores, this can be used to improve image loading
|
|
141
|
+
* as well as reduce the impact of image loading on the main thread.
|
|
142
|
+
* Set to 0 to disable image workers.
|
|
143
|
+
*
|
|
144
|
+
* @defaultValue `2`
|
|
145
|
+
*/
|
|
146
|
+
numImageWorkers?: number;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* DOM Inspector
|
|
150
|
+
*
|
|
151
|
+
* @remarks
|
|
152
|
+
* The inspector will replicate the state of the Nodes created
|
|
153
|
+
* in the renderer and allow inspection of the state of the nodes.
|
|
154
|
+
*
|
|
155
|
+
*/
|
|
156
|
+
inspector?: typeof Inspector | false;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Renderer Engine
|
|
160
|
+
*
|
|
161
|
+
* @remarks
|
|
162
|
+
* The renderer engine to use. Spawns a WebGL or Canvas renderer.
|
|
163
|
+
* WebGL is more performant and supports more features. Canvas is
|
|
164
|
+
* supported on most platforms.
|
|
165
|
+
*
|
|
166
|
+
* Note: When using CanvasCoreRenderer you can only use
|
|
167
|
+
* CanvasTextRenderer. The WebGLCoreRenderer supports
|
|
168
|
+
* both CanvasTextRenderer and SdfTextRenderer for Text Rendering.
|
|
169
|
+
*
|
|
170
|
+
*/
|
|
171
|
+
renderEngine: typeof CanvasRenderer | typeof WebGlRenderer;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Quad buffer size in bytes
|
|
175
|
+
*
|
|
176
|
+
* @defaultValue 4 * 1024 * 1024
|
|
177
|
+
*/
|
|
178
|
+
quadBufferSize?: number;
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Font Engines
|
|
182
|
+
*
|
|
183
|
+
* @remarks
|
|
184
|
+
* The font engines to use for text rendering. CanvasTextRenderer is supported
|
|
185
|
+
* on all platforms. SdfTextRenderer is a more performant renderer.
|
|
186
|
+
* When using `renderEngine=CanvasCoreRenderer` you can only use `CanvasTextRenderer`.
|
|
187
|
+
* The `renderEngine=WebGLCoreRenderer` supports both `CanvasTextRenderer` and `SdfTextRenderer`.
|
|
188
|
+
*
|
|
189
|
+
* This setting is used to enable tree shaking of unused font engines. Please
|
|
190
|
+
* import your font engine(s) as follows:
|
|
191
|
+
* ```
|
|
192
|
+
* import { CanvasTextRenderer } from '@lightning/renderer/canvas';
|
|
193
|
+
* import { SdfTextRenderer } from '@lightning/renderer/webgl';
|
|
194
|
+
* ```
|
|
195
|
+
*
|
|
196
|
+
* If both CanvasTextRenderer and SdfTextRenderer are provided, the first renderer
|
|
197
|
+
* provided will be asked first if it can render the font. If it cannot render the
|
|
198
|
+
* font, the next renderer will be asked. If no renderer can render the font, the
|
|
199
|
+
* text will not be rendered.
|
|
200
|
+
*
|
|
201
|
+
* **Note** that if you have fonts available in both engines the second font engine
|
|
202
|
+
* will not be used. This is because the first font engine will always be asked first.
|
|
203
|
+
*
|
|
204
|
+
* @defaultValue '[]'
|
|
205
|
+
*
|
|
206
|
+
*
|
|
207
|
+
*/
|
|
208
|
+
fontEngines: (typeof SdfTextRenderer | typeof CanvasTextRenderer)[];
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Force WebGL2
|
|
212
|
+
*
|
|
213
|
+
* @remarks
|
|
214
|
+
* Force the renderer to use WebGL2. This can be used to force the renderer to
|
|
215
|
+
* use WebGL2 even if the browser supports WebGL1.
|
|
216
|
+
*
|
|
217
|
+
* @defaultValue `false`
|
|
218
|
+
*/
|
|
219
|
+
forceWebGL2?: boolean;
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Enable strictBounds
|
|
223
|
+
*
|
|
224
|
+
* @remarks
|
|
225
|
+
* Enable strict bounds for the renderer. This will ensure that the renderer
|
|
226
|
+
* will not render outside the bounds of the canvas.
|
|
227
|
+
*
|
|
228
|
+
* @defaultValue `true`
|
|
229
|
+
*/
|
|
230
|
+
strictBounds?: boolean;
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Texture Processing Limit (in milliseconds)
|
|
234
|
+
*
|
|
235
|
+
* @remarks
|
|
236
|
+
* The maximum amount of time the renderer is allowed to process textures in a
|
|
237
|
+
* single frame. If the processing time exceeds this limit, the renderer will
|
|
238
|
+
* skip processing the remaining textures and continue rendering the frame.
|
|
239
|
+
*
|
|
240
|
+
* @defaultValue `10`
|
|
241
|
+
*/
|
|
242
|
+
textureProcessingTimeLimit?: number;
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Canvas object to use for rendering
|
|
246
|
+
*
|
|
247
|
+
* @remarks
|
|
248
|
+
* This is used to render the scene graph. If not provided, a new canvas
|
|
249
|
+
* element will be created and appended to the target element.
|
|
250
|
+
*/
|
|
251
|
+
canvas?: HTMLCanvasElement;
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* createImageBitmap support for the runtime
|
|
255
|
+
*
|
|
256
|
+
* @remarks
|
|
257
|
+
* This is used to determine if and which version of the createImageBitmap API
|
|
258
|
+
* is supported by the runtime. This is used to determine if the renderer can
|
|
259
|
+
* use createImageBitmap to load images.
|
|
260
|
+
*
|
|
261
|
+
* Options supported
|
|
262
|
+
* - Auto - Automatically determine the supported version
|
|
263
|
+
* - Basic - Supports createImageBitmap(image)
|
|
264
|
+
* - Options - Supports createImageBitmap(image, options)
|
|
265
|
+
* - Full - Supports createImageBitmap(image, sx, sy, sw, sh, options)
|
|
266
|
+
*
|
|
267
|
+
* Note with auto detection, the renderer will attempt to use the most advanced
|
|
268
|
+
* version of the API available. If the API is not available, the renderer will
|
|
269
|
+
* fall back to the next available version.
|
|
270
|
+
*
|
|
271
|
+
* This will affect startup performance as the renderer will need to determine
|
|
272
|
+
* the supported version of the API.
|
|
273
|
+
*
|
|
274
|
+
* @defaultValue `full`
|
|
275
|
+
*/
|
|
276
|
+
createImageBitmapSupport?: 'auto' | 'basic' | 'options' | 'full';
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Provide an alternative platform abstraction layer
|
|
280
|
+
*
|
|
281
|
+
* @remarks
|
|
282
|
+
* By default the Lightning 3 renderer will load a webplatform, assuming it runs
|
|
283
|
+
* inside a web browsr. However for special cases there might be a need to provide
|
|
284
|
+
* an abstracted platform layer to run on non-web or non-standard JS engines
|
|
285
|
+
*
|
|
286
|
+
* @defaultValue `null`
|
|
287
|
+
*/
|
|
288
|
+
platform?: typeof Platform | null;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* The Renderer Main API
|
|
293
|
+
*
|
|
294
|
+
* @remarks
|
|
295
|
+
* This is the primary class used to configure and operate the Renderer.
|
|
296
|
+
*
|
|
297
|
+
* It is used to create and destroy Nodes, as well as Texture and Shader
|
|
298
|
+
* references.
|
|
299
|
+
*
|
|
300
|
+
* Example:
|
|
301
|
+
* ```ts
|
|
302
|
+
* import { RendererMain, MainCoreDriver } from '@lightningjs/renderer';
|
|
303
|
+
*
|
|
304
|
+
* // Initialize the Renderer
|
|
305
|
+
* const renderer = new RendererMain(
|
|
306
|
+
* {
|
|
307
|
+
* appWidth: 1920,
|
|
308
|
+
* appHeight: 1080
|
|
309
|
+
* },
|
|
310
|
+
* 'app',
|
|
311
|
+
* new MainCoreDriver(),
|
|
312
|
+
* );
|
|
313
|
+
* ```
|
|
314
|
+
*
|
|
315
|
+
* ## Events
|
|
316
|
+
* - `fpsUpdate`
|
|
317
|
+
* - Emitted every `fpsUpdateInterval` milliseconds with the current FPS
|
|
318
|
+
* - `frameTick`
|
|
319
|
+
* - Emitted every frame tick
|
|
320
|
+
* - `quadsUpdate`
|
|
321
|
+
* - Emitted when number of quads rendered is updated
|
|
322
|
+
* - `idle`
|
|
323
|
+
* - Emitted when the renderer is idle (no changes to the scene
|
|
324
|
+
* graph/animations running)
|
|
325
|
+
* - `criticalCleanup`
|
|
326
|
+
* - Emitted when the Texture Memory Manager Cleanup process is triggered
|
|
327
|
+
* - Payload: { memUsed: number, criticalThreshold: number }
|
|
328
|
+
* - `memUsed` - The amount of memory (in bytes) used by textures before the
|
|
329
|
+
* cleanup process
|
|
330
|
+
* - `criticalThreshold` - The critical threshold (in bytes)
|
|
331
|
+
* - `criticalCleanupFailed`
|
|
332
|
+
* - Emitted when the Texture Memory Manager Cleanup process is unable to free
|
|
333
|
+
* up enough texture memory to reach below the critical threshold.
|
|
334
|
+
* This can happen when there is not enough non-renderable textures to
|
|
335
|
+
* free up.
|
|
336
|
+
* - Payload (object with keys):
|
|
337
|
+
* - `memUsed` - The amount of memory (in bytes) used by textures after
|
|
338
|
+
* the cleanup process
|
|
339
|
+
* - `criticalThreshold` - The critical threshold (in bytes)
|
|
340
|
+
*/
|
|
341
|
+
export class RendererMain extends EventEmitter {
|
|
342
|
+
readonly root: INode;
|
|
343
|
+
readonly canvas: HTMLCanvasElement;
|
|
344
|
+
readonly settings: Readonly<Required<RendererMainSettings>>;
|
|
345
|
+
readonly stage: Stage;
|
|
346
|
+
private inspector: Inspector | null = null;
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Constructs a new Renderer instance
|
|
350
|
+
*
|
|
351
|
+
* @param settings Renderer settings
|
|
352
|
+
* @param target Element ID or HTMLElement to insert the canvas into
|
|
353
|
+
* @param driver Core Driver to use
|
|
354
|
+
*/
|
|
355
|
+
constructor(settings: RendererMainSettings, target: string | HTMLElement) {
|
|
356
|
+
super();
|
|
357
|
+
|
|
358
|
+
const resolvedTxSettings: TextureMemoryManagerSettings = {
|
|
359
|
+
criticalThreshold: settings.textureMemory?.criticalThreshold || 124e6,
|
|
360
|
+
targetThresholdLevel: settings.textureMemory?.targetThresholdLevel || 0.5,
|
|
361
|
+
cleanupInterval: settings.textureMemory?.cleanupInterval || 5000,
|
|
362
|
+
debugLogging: settings.textureMemory?.debugLogging || false,
|
|
363
|
+
baselineMemoryAllocation:
|
|
364
|
+
settings.textureMemory?.baselineMemoryAllocation || 26e6,
|
|
365
|
+
doNotExceedCriticalThreshold:
|
|
366
|
+
settings.textureMemory?.doNotExceedCriticalThreshold || false,
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
const resolvedSettings: Required<RendererMainSettings> = {
|
|
370
|
+
appWidth: settings.appWidth || 1920,
|
|
371
|
+
appHeight: settings.appHeight || 1080,
|
|
372
|
+
textureMemory: resolvedTxSettings,
|
|
373
|
+
boundsMargin: settings.boundsMargin || 0,
|
|
374
|
+
deviceLogicalPixelRatio: settings.deviceLogicalPixelRatio || 1,
|
|
375
|
+
devicePhysicalPixelRatio:
|
|
376
|
+
settings.devicePhysicalPixelRatio || window.devicePixelRatio,
|
|
377
|
+
clearColor: settings.clearColor ?? 0x00000000,
|
|
378
|
+
fpsUpdateInterval: settings.fpsUpdateInterval || 0,
|
|
379
|
+
numImageWorkers:
|
|
380
|
+
settings.numImageWorkers !== undefined ? settings.numImageWorkers : 2,
|
|
381
|
+
enableContextSpy: settings.enableContextSpy ?? false,
|
|
382
|
+
forceWebGL2: settings.forceWebGL2 ?? false,
|
|
383
|
+
inspector: settings.inspector ?? false,
|
|
384
|
+
renderEngine: settings.renderEngine,
|
|
385
|
+
quadBufferSize: settings.quadBufferSize ?? 4 * 1024 * 1024,
|
|
386
|
+
fontEngines: settings.fontEngines,
|
|
387
|
+
strictBounds: settings.strictBounds ?? true,
|
|
388
|
+
textureProcessingTimeLimit: settings.textureProcessingTimeLimit || 10,
|
|
389
|
+
canvas: settings.canvas || document.createElement('canvas'),
|
|
390
|
+
createImageBitmapSupport: settings.createImageBitmapSupport || 'full',
|
|
391
|
+
platform: settings.platform || null,
|
|
392
|
+
};
|
|
393
|
+
this.settings = resolvedSettings;
|
|
394
|
+
|
|
395
|
+
const {
|
|
396
|
+
appWidth,
|
|
397
|
+
appHeight,
|
|
398
|
+
deviceLogicalPixelRatio,
|
|
399
|
+
devicePhysicalPixelRatio,
|
|
400
|
+
inspector,
|
|
401
|
+
canvas,
|
|
402
|
+
} = resolvedSettings;
|
|
403
|
+
|
|
404
|
+
let platform;
|
|
405
|
+
if (
|
|
406
|
+
settings.platform !== undefined &&
|
|
407
|
+
settings.platform !== null &&
|
|
408
|
+
settings.platform.prototype instanceof Platform === true
|
|
409
|
+
) {
|
|
410
|
+
// @ts-ignore - if Platform is a valid class, it will be used
|
|
411
|
+
platform = new settings.platform();
|
|
412
|
+
} else {
|
|
413
|
+
platform = new WebPlatform();
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
const deviceLogicalWidth = appWidth * deviceLogicalPixelRatio;
|
|
417
|
+
const deviceLogicalHeight = appHeight * deviceLogicalPixelRatio;
|
|
418
|
+
|
|
419
|
+
this.canvas = canvas;
|
|
420
|
+
canvas.width = deviceLogicalWidth * devicePhysicalPixelRatio;
|
|
421
|
+
canvas.height = deviceLogicalHeight * devicePhysicalPixelRatio;
|
|
422
|
+
|
|
423
|
+
canvas.style.width = `${deviceLogicalWidth}px`;
|
|
424
|
+
canvas.style.height = `${deviceLogicalHeight}px`;
|
|
425
|
+
|
|
426
|
+
// Initialize the stage
|
|
427
|
+
this.stage = new Stage({
|
|
428
|
+
appWidth: this.settings.appWidth,
|
|
429
|
+
appHeight: this.settings.appHeight,
|
|
430
|
+
boundsMargin: this.settings.boundsMargin,
|
|
431
|
+
clearColor: this.settings.clearColor,
|
|
432
|
+
canvas: this.canvas,
|
|
433
|
+
deviceLogicalPixelRatio: this.settings.deviceLogicalPixelRatio,
|
|
434
|
+
devicePhysicalPixelRatio: this.settings.devicePhysicalPixelRatio,
|
|
435
|
+
enableContextSpy: this.settings.enableContextSpy,
|
|
436
|
+
forceWebGL2: this.settings.forceWebGL2,
|
|
437
|
+
fpsUpdateInterval: this.settings.fpsUpdateInterval,
|
|
438
|
+
numImageWorkers: this.settings.numImageWorkers,
|
|
439
|
+
renderEngine: this.settings.renderEngine,
|
|
440
|
+
textureMemory: resolvedTxSettings,
|
|
441
|
+
eventBus: this,
|
|
442
|
+
quadBufferSize: this.settings.quadBufferSize,
|
|
443
|
+
fontEngines: this.settings.fontEngines,
|
|
444
|
+
inspector: this.settings.inspector !== null,
|
|
445
|
+
strictBounds: this.settings.strictBounds,
|
|
446
|
+
textureProcessingTimeLimit: this.settings.textureProcessingTimeLimit,
|
|
447
|
+
createImageBitmapSupport: this.settings.createImageBitmapSupport,
|
|
448
|
+
platform,
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
// Extract the root node
|
|
452
|
+
this.root = this.stage.root as unknown as INode;
|
|
453
|
+
|
|
454
|
+
// Get the target element and attach the canvas to it
|
|
455
|
+
let targetEl: HTMLElement | null;
|
|
456
|
+
if (typeof target === 'string') {
|
|
457
|
+
targetEl = document.getElementById(target);
|
|
458
|
+
} else {
|
|
459
|
+
targetEl = target;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
if (!targetEl) {
|
|
463
|
+
throw new Error('Could not find target element');
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
targetEl.appendChild(canvas);
|
|
467
|
+
|
|
468
|
+
// Initialize inspector (if enabled)
|
|
469
|
+
if (inspector && !isProductionEnvironment()) {
|
|
470
|
+
this.inspector = new inspector(canvas, resolvedSettings);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Create a new scene graph node
|
|
476
|
+
*
|
|
477
|
+
* @remarks
|
|
478
|
+
* A node is the main graphical building block of the Renderer scene graph. It
|
|
479
|
+
* can be a container for other nodes, or it can be a leaf node that renders a
|
|
480
|
+
* solid color, gradient, image, or specific texture, using a specific shader.
|
|
481
|
+
*
|
|
482
|
+
* To create a text node, see {@link createTextNode}.
|
|
483
|
+
*
|
|
484
|
+
* See {@link CoreNode} for more details.
|
|
485
|
+
*
|
|
486
|
+
* @param props
|
|
487
|
+
* @returns
|
|
488
|
+
*/
|
|
489
|
+
createNode<ShNode extends CoreShaderNode<any>>(
|
|
490
|
+
props: Partial<INodeProps<ShNode>>,
|
|
491
|
+
): INode<ShNode> {
|
|
492
|
+
assertTruthy(this.stage, 'Stage is not initialized');
|
|
493
|
+
|
|
494
|
+
const node = this.stage.createNode(props as Partial<CoreNodeProps>);
|
|
495
|
+
|
|
496
|
+
if (this.inspector) {
|
|
497
|
+
return this.inspector.createNode(node) as unknown as INode<ShNode>;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
return node as unknown as INode<ShNode>;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
* Create a new scene graph text node
|
|
505
|
+
*
|
|
506
|
+
* @remarks
|
|
507
|
+
* A text node is the second graphical building block of the Renderer scene
|
|
508
|
+
* graph. It renders text using a specific text renderer that is automatically
|
|
509
|
+
* chosen based on the font requested and what type of fonts are installed
|
|
510
|
+
* into an app.
|
|
511
|
+
*
|
|
512
|
+
* See {@link ITextNode} for more details.
|
|
513
|
+
*
|
|
514
|
+
* @param props
|
|
515
|
+
* @returns
|
|
516
|
+
*/
|
|
517
|
+
createTextNode(props: Partial<ITextNodeProps>): ITextNode {
|
|
518
|
+
const textNode = this.stage.createTextNode(props as CoreTextNodeProps);
|
|
519
|
+
|
|
520
|
+
if (this.inspector) {
|
|
521
|
+
return this.inspector.createTextNode(textNode) as unknown as ITextNode;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
return textNode as unknown as ITextNode;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* Destroy a node
|
|
529
|
+
*
|
|
530
|
+
* @remarks
|
|
531
|
+
* This method destroys a node
|
|
532
|
+
*
|
|
533
|
+
* @param node
|
|
534
|
+
* @returns
|
|
535
|
+
*/
|
|
536
|
+
destroyNode(node: INode) {
|
|
537
|
+
if (this.inspector) {
|
|
538
|
+
this.inspector.destroyNode(node.id);
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
return node.destroy();
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
/**
|
|
545
|
+
* Create a new texture reference
|
|
546
|
+
*
|
|
547
|
+
* @remarks
|
|
548
|
+
* This method creates a new reference to a texture. The texture is not
|
|
549
|
+
* loaded until it is used on a node.
|
|
550
|
+
*
|
|
551
|
+
* It can be assigned to a node's `texture` property, or it can be used
|
|
552
|
+
* when creating a SubTexture.
|
|
553
|
+
*
|
|
554
|
+
* @param textureType
|
|
555
|
+
* @param props
|
|
556
|
+
* @param options
|
|
557
|
+
* @returns
|
|
558
|
+
*/
|
|
559
|
+
createTexture<TxType extends keyof TextureMap>(
|
|
560
|
+
textureType: TxType,
|
|
561
|
+
props: ExtractProps<TextureMap[TxType]>,
|
|
562
|
+
): InstanceType<TextureMap[TxType]> {
|
|
563
|
+
return this.stage.txManager.createTexture(textureType, props);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Create a new shader controller for a shader type
|
|
568
|
+
*
|
|
569
|
+
* @remarks
|
|
570
|
+
* This method creates a new Shader Controller for a specific shader type.
|
|
571
|
+
*
|
|
572
|
+
* If the shader has not been loaded yet, it will be loaded. Otherwise, the
|
|
573
|
+
* existing shader will be reused.
|
|
574
|
+
*
|
|
575
|
+
* It can be assigned to a Node's `shader` property.
|
|
576
|
+
*
|
|
577
|
+
* @param shaderType
|
|
578
|
+
* @param props
|
|
579
|
+
* @returns
|
|
580
|
+
*/
|
|
581
|
+
createShader<ShType extends keyof ShaderMap>(
|
|
582
|
+
shType: ShType,
|
|
583
|
+
props?: OptionalShaderProps<ShType>,
|
|
584
|
+
) {
|
|
585
|
+
return this.stage.shManager.createShader(shType, props) as CoreShaderNode<
|
|
586
|
+
NonNullable<ExtractShaderProps<ShType>>
|
|
587
|
+
>;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
/**
|
|
591
|
+
* Get a Node by its ID
|
|
592
|
+
*
|
|
593
|
+
* @param id
|
|
594
|
+
* @returns
|
|
595
|
+
*/
|
|
596
|
+
getNodeById(id: number): CoreNode | null {
|
|
597
|
+
const root = this.stage?.root;
|
|
598
|
+
if (!root) {
|
|
599
|
+
return null;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
const findNode = (node: CoreNode): CoreNode | null => {
|
|
603
|
+
if (node.id === id) {
|
|
604
|
+
return node;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
for (const child of node.children) {
|
|
608
|
+
const found = findNode(child);
|
|
609
|
+
if (found) {
|
|
610
|
+
return found;
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
return null;
|
|
615
|
+
};
|
|
616
|
+
|
|
617
|
+
return findNode(root);
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
toggleFreeze() {
|
|
621
|
+
throw new Error('Not implemented');
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
advanceFrame() {
|
|
625
|
+
throw new Error('Not implemented');
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
getBufferInfo() {
|
|
629
|
+
return this.stage.renderer.getBufferInfo();
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
/**
|
|
633
|
+
* Re-render the current frame without advancing any running animations.
|
|
634
|
+
*
|
|
635
|
+
* @remarks
|
|
636
|
+
* Any state changes will be reflected in the re-rendered frame. Useful for
|
|
637
|
+
* debugging.
|
|
638
|
+
*
|
|
639
|
+
* May not do anything if the render loop is running on a separate worker.
|
|
640
|
+
*/
|
|
641
|
+
rerender() {
|
|
642
|
+
this.stage.requestRender();
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/**
|
|
646
|
+
* Cleanup textures that are not being used
|
|
647
|
+
*
|
|
648
|
+
* @param aggressive - If true, will cleanup all textures, regardless of render status
|
|
649
|
+
*
|
|
650
|
+
* @remarks
|
|
651
|
+
* This can be used to free up GFX memory used by textures that are no longer
|
|
652
|
+
* being displayed.
|
|
653
|
+
*
|
|
654
|
+
* This routine is also called automatically when the memory used by textures
|
|
655
|
+
* exceeds the critical threshold on frame generation **OR** when the renderer
|
|
656
|
+
* is idle and the memory used by textures exceeds the target threshold.
|
|
657
|
+
*
|
|
658
|
+
* **NOTE**: This is a heavy operation and should be used sparingly.
|
|
659
|
+
* **NOTE2**: This will not cleanup textures that are currently being displayed.
|
|
660
|
+
* **NOTE3**: This will not cleanup textures that are marked as `preventCleanup`.
|
|
661
|
+
* **NOTE4**: This has nothing to do with the garbage collection of JavaScript.
|
|
662
|
+
*/
|
|
663
|
+
cleanup(aggressive: boolean = false) {
|
|
664
|
+
this.stage.cleanup(aggressive);
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
/**
|
|
668
|
+
* Sets the clear color for the stage.
|
|
669
|
+
*
|
|
670
|
+
* @param color - The color to set as the clear color.
|
|
671
|
+
*/
|
|
672
|
+
setClearColor(color: number) {
|
|
673
|
+
this.stage.setClearColor(color);
|
|
674
|
+
}
|
|
675
|
+
}
|