@lightningjs/renderer 2.10.0 → 2.11.1
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/LICENSE +202 -202
- package/NOTICE +3 -3
- package/README.md +147 -147
- package/dist/exports/core-api.d.ts +74 -0
- package/dist/exports/core-api.js +96 -0
- package/dist/exports/core-api.js.map +1 -0
- package/dist/exports/main-api.d.ts +30 -0
- package/dist/exports/main-api.js +45 -0
- package/dist/exports/main-api.js.map +1 -0
- package/dist/src/core/CoreExtension.d.ts +12 -0
- package/dist/src/core/CoreExtension.js +29 -0
- package/dist/src/core/CoreExtension.js.map +1 -0
- package/dist/src/core/CoreStuff.d.ts +1 -0
- package/dist/src/core/CoreStuff.js +138 -0
- package/dist/src/core/CoreStuff.js.map +1 -0
- package/dist/src/core/CoreTextureManager.d.ts +4 -1
- package/dist/src/core/CoreTextureManager.js +14 -3
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/LngNode.d.ts +736 -0
- package/dist/src/core/LngNode.js +1174 -0
- package/dist/src/core/LngNode.js.map +1 -0
- package/dist/src/core/Matrix2DContext.d.ts +15 -0
- package/dist/src/core/Matrix2DContext.js +45 -0
- package/dist/src/core/Matrix2DContext.js.map +1 -0
- package/dist/src/core/ShaderNode.d.ts +10 -0
- package/dist/src/core/ShaderNode.js +30 -0
- package/dist/src/core/ShaderNode.js.map +1 -0
- package/dist/src/core/Stage.js +1 -1
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextNode.d.ts +103 -0
- package/dist/src/core/TextNode.js +331 -0
- package/dist/src/core/TextNode.js.map +1 -0
- package/dist/src/core/TextureMemoryManager.d.ts +30 -0
- package/dist/src/core/TextureMemoryManager.js +70 -37
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/lib/Coords.d.ts +14 -0
- package/dist/src/core/lib/Coords.js +55 -0
- package/dist/src/core/lib/Coords.js.map +1 -0
- package/dist/src/core/lib/glm/common.d.ts +162 -0
- package/dist/src/core/lib/glm/common.js +81 -0
- package/dist/src/core/lib/glm/common.js.map +1 -0
- package/dist/src/core/lib/glm/index.d.ts +11 -0
- package/dist/src/core/lib/glm/index.js +30 -0
- package/dist/src/core/lib/glm/index.js.map +1 -0
- package/dist/src/core/lib/glm/mat2.d.ts +219 -0
- package/dist/src/core/lib/glm/mat2.js +396 -0
- package/dist/src/core/lib/glm/mat2.js.map +1 -0
- package/dist/src/core/lib/glm/mat2d.d.ts +237 -0
- package/dist/src/core/lib/glm/mat2d.js +442 -0
- package/dist/src/core/lib/glm/mat2d.js.map +1 -0
- package/dist/src/core/lib/glm/mat3.d.ts +283 -0
- package/dist/src/core/lib/glm/mat3.js +680 -0
- package/dist/src/core/lib/glm/mat3.js.map +1 -0
- package/dist/src/core/lib/glm/mat4.d.ts +550 -0
- package/dist/src/core/lib/glm/mat4.js +1802 -0
- package/dist/src/core/lib/glm/mat4.js.map +1 -0
- package/dist/src/core/lib/glm/quat.d.ts +363 -0
- package/dist/src/core/lib/glm/quat.js +693 -0
- package/dist/src/core/lib/glm/quat.js.map +1 -0
- package/dist/src/core/lib/glm/quat2.d.ts +356 -0
- package/dist/src/core/lib/glm/quat2.js +754 -0
- package/dist/src/core/lib/glm/quat2.js.map +1 -0
- package/dist/src/core/lib/glm/vec2.d.ts +365 -0
- package/dist/src/core/lib/glm/vec2.js +569 -0
- package/dist/src/core/lib/glm/vec2.js.map +1 -0
- package/dist/src/core/lib/glm/vec3.d.ts +406 -0
- package/dist/src/core/lib/glm/vec3.js +720 -0
- package/dist/src/core/lib/glm/vec3.js.map +1 -0
- package/dist/src/core/lib/glm/vec4.d.ts +330 -0
- package/dist/src/core/lib/glm/vec4.js +608 -0
- package/dist/src/core/lib/glm/vec4.js.map +1 -0
- package/dist/src/core/lib/textureSvg.js +1 -1
- package/dist/src/core/lib/textureSvg.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderManager.d.ts +19 -0
- package/dist/src/core/renderers/CoreShaderManager.js +33 -0
- package/dist/src/core/renderers/CoreShaderManager.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +4 -2
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +4 -4
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +9 -12
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +27 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +82 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +11 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +34 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +1 -0
- 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/scene/Scene.d.ts +59 -0
- package/dist/src/core/scene/Scene.js +106 -0
- package/dist/src/core/scene/Scene.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +20 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +55 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +1 -0
- package/dist/src/core/textures/ColorTexture.js +1 -1
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.js +3 -3
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.js +1 -1
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.js +1 -1
- package/dist/src/core/textures/RenderTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +4 -0
- package/dist/src/core/textures/SubTexture.js +54 -16
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +2 -34
- package/dist/src/core/textures/Texture.js +13 -69
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/main-api/ICoreDriver.d.ts +27 -0
- package/dist/src/main-api/ICoreDriver.js +20 -0
- package/dist/src/main-api/ICoreDriver.js.map +1 -0
- package/dist/src/main-api/IRenderDriver.d.ts +20 -0
- package/dist/src/main-api/IRenderDriver.js +20 -0
- package/dist/src/main-api/IRenderDriver.js.map +1 -0
- package/dist/src/main-api/IShaderController.d.ts +14 -0
- package/dist/src/main-api/IShaderController.js +30 -0
- package/dist/src/main-api/IShaderController.js.map +1 -0
- package/dist/src/main-api/IShaderNode.d.ts +17 -0
- package/dist/src/main-api/IShaderNode.js +19 -0
- package/dist/src/main-api/IShaderNode.js.map +1 -0
- package/dist/src/main-api/Renderer.js +1 -0
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/main-api/RendererMain.d.ts +375 -0
- package/dist/src/main-api/RendererMain.js +365 -0
- package/dist/src/main-api/RendererMain.js.map +1 -0
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +9 -0
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +38 -0
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +1 -0
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +56 -0
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +101 -0
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +1 -0
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +32 -0
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +28 -0
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +1 -0
- package/dist/src/render-drivers/main/MainCoreDriver.d.ts +24 -0
- package/dist/src/render-drivers/main/MainCoreDriver.js +118 -0
- package/dist/src/render-drivers/main/MainCoreDriver.js.map +1 -0
- package/dist/src/render-drivers/main/MainOnlyNode.d.ts +99 -0
- package/dist/src/render-drivers/main/MainOnlyNode.js +396 -0
- package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -0
- package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +6 -0
- package/dist/src/render-drivers/main/MainOnlyShaderController.js +15 -0
- package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +1 -0
- package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +7 -0
- package/dist/src/render-drivers/main/MainOnlyShaderNode.js +34 -0
- package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +1 -0
- package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +47 -0
- package/dist/src/render-drivers/main/MainOnlyTextNode.js +205 -0
- package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -0
- package/dist/src/render-drivers/main/MainRenderDriver.d.ts +17 -0
- package/dist/src/render-drivers/main/MainRenderDriver.js +88 -0
- package/dist/src/render-drivers/main/MainRenderDriver.js.map +1 -0
- package/dist/src/render-drivers/threadx/NodeStruct.d.ts +90 -0
- package/dist/src/render-drivers/threadx/NodeStruct.js +281 -0
- package/dist/src/render-drivers/threadx/NodeStruct.js.map +1 -0
- package/dist/src/render-drivers/threadx/SharedNode.d.ts +39 -0
- package/dist/src/render-drivers/threadx/SharedNode.js +60 -0
- package/dist/src/render-drivers/threadx/SharedNode.js.map +1 -0
- package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +44 -0
- package/dist/src/render-drivers/threadx/TextNodeStruct.js +201 -0
- package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +1 -0
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +28 -0
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +234 -0
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -0
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +20 -0
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +84 -0
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +1 -0
- package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +44 -0
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js +154 -0
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +1 -0
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +6 -0
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +16 -0
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +1 -0
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +7 -0
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +15 -0
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +1 -0
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +28 -0
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +55 -0
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +1 -0
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +21 -0
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +198 -0
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +1 -0
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +70 -0
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +32 -0
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +1 -0
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +19 -0
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +177 -0
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -0
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +27 -0
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +108 -0
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +1 -0
- package/dist/src/render-drivers/threadx/worker/renderer.d.ts +1 -0
- package/dist/src/render-drivers/threadx/worker/renderer.js +145 -0
- package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -0
- package/dist/src/render-drivers/utils.d.ts +12 -0
- package/dist/src/render-drivers/utils.js +69 -0
- package/dist/src/render-drivers/utils.js.map +1 -0
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/canvas.ts +39 -39
- package/exports/index.ts +89 -89
- package/exports/inspector.ts +24 -24
- package/exports/utils.ts +44 -44
- package/exports/webgl.ts +38 -38
- package/package.json +2 -1
- package/scripts/please-use-pnpm.js +13 -13
- package/src/common/CommonTypes.ts +139 -139
- 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 +199 -199
- package/src/core/CoreNode.ts +2335 -2335
- package/src/core/CoreShaderManager.ts +292 -292
- package/src/core/CoreTextNode.ts +455 -455
- package/src/core/CoreTextureManager.ts +561 -545
- package/src/core/Stage.ts +700 -700
- package/src/core/TextureMemoryManager.ts +310 -277
- package/src/core/animations/AnimationManager.ts +38 -38
- package/src/core/animations/CoreAnimation.ts +340 -340
- package/src/core/animations/CoreAnimationController.ts +157 -157
- package/src/core/lib/ContextSpy.ts +41 -41
- package/src/core/lib/ImageWorker.ts +270 -270
- package/src/core/lib/Matrix3d.ts +244 -244
- package/src/core/lib/RenderCoords.ts +86 -86
- package/src/core/lib/WebGlContextWrapper.ts +1322 -1322
- package/src/core/lib/textureCompression.ts +152 -152
- package/src/core/lib/textureSvg.ts +78 -78
- package/src/core/lib/utils.ts +310 -310
- package/src/core/platform.ts +61 -61
- package/src/core/renderers/CoreContextTexture.ts +43 -43
- package/src/core/renderers/CoreRenderOp.ts +22 -22
- package/src/core/renderers/CoreRenderer.ts +114 -114
- package/src/core/renderers/CoreShader.ts +41 -41
- package/src/core/renderers/canvas/CanvasCoreRenderer.ts +371 -369
- package/src/core/renderers/canvas/CanvasCoreTexture.ts +150 -150
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +231 -231
- package/src/core/renderers/canvas/internal/ColorUtils.ts +69 -69
- package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +48 -48
- package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +79 -79
- package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +50 -50
- package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +295 -298
- package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +125 -125
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +805 -805
- package/src/core/renderers/webgl/WebGlCoreShader.ts +362 -362
- 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 +143 -143
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
- package/src/core/renderers/webgl/shaders/DefaultShader.ts +93 -93
- package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -132
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +580 -580
- package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +167 -167
- package/src/core/renderers/webgl/shaders/SdfShader.ts +204 -204
- package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +87 -87
- package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +159 -159
- package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +127 -127
- package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +148 -148
- package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +67 -67
- package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +157 -157
- package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +171 -171
- package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +168 -168
- package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +187 -187
- package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +110 -110
- package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +196 -196
- 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/renderers/CanvasTextRenderer.ts +509 -509
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +808 -808
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +853 -853
- 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 +408 -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 +557 -557
- package/src/core/textures/ColorTexture.ts +102 -102
- package/src/core/textures/ImageTexture.ts +379 -379
- package/src/core/textures/NoiseTexture.ts +104 -104
- package/src/core/textures/RenderTexture.ts +85 -85
- package/src/core/textures/SubTexture.ts +225 -179
- package/src/core/textures/Texture.ts +347 -435
- package/src/core/utils.ts +227 -227
- package/src/env.d.ts +7 -7
- package/src/main-api/DynamicShaderController.ts +104 -104
- package/src/main-api/INode.ts +101 -101
- package/src/main-api/Inspector.ts +505 -505
- package/src/main-api/Renderer.ts +698 -694
- package/src/main-api/ShaderController.ts +80 -80
- package/src/main-api/utils.ts +45 -45
- package/src/utils.ts +248 -248
- package/COPYING +0 -1
|
@@ -0,0 +1,331 @@
|
|
|
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
|
+
import { LngNode, UpdateType } from './LngNode.js';
|
|
20
|
+
import { assertTruthy } from '../utils.js';
|
|
21
|
+
import { Matrix3d } from './lib/Matrix3d.js';
|
|
22
|
+
/**
|
|
23
|
+
* An LngNode in the Renderer scene graph that renders text.
|
|
24
|
+
*
|
|
25
|
+
* @remarks
|
|
26
|
+
* A Text Node is the second graphical building block of the Renderer scene
|
|
27
|
+
* graph. It renders text using a specific text renderer that is automatically
|
|
28
|
+
* chosen based on the font requested and what type of fonts are installed
|
|
29
|
+
* into an app.
|
|
30
|
+
*
|
|
31
|
+
* The text renderer can be overridden by setting the `textRendererOverride`
|
|
32
|
+
*
|
|
33
|
+
* The `texture` and `shader` properties are managed by loaded text renderer and
|
|
34
|
+
* should not be set directly.
|
|
35
|
+
*
|
|
36
|
+
* For non-text rendering, see {@link LngNode}.
|
|
37
|
+
*/
|
|
38
|
+
export class TextNode extends LngNode {
|
|
39
|
+
textRenderer;
|
|
40
|
+
trState;
|
|
41
|
+
_textRendererOverride = null;
|
|
42
|
+
constructor(stage, props) {
|
|
43
|
+
super(stage, props);
|
|
44
|
+
this._textRendererOverride = props.textRendererOverride;
|
|
45
|
+
const { resolvedTextRenderer, textRendererState } = this.resolveTextRendererAndState({
|
|
46
|
+
x: this.absX,
|
|
47
|
+
y: this.absY,
|
|
48
|
+
width: props.width,
|
|
49
|
+
height: props.height,
|
|
50
|
+
textAlign: props.textAlign,
|
|
51
|
+
color: props.color,
|
|
52
|
+
zIndex: props.zIndex,
|
|
53
|
+
contain: props.contain,
|
|
54
|
+
scrollable: props.scrollable,
|
|
55
|
+
scrollY: props.scrollY,
|
|
56
|
+
offsetY: props.offsetY,
|
|
57
|
+
letterSpacing: props.letterSpacing,
|
|
58
|
+
debug: props.debug,
|
|
59
|
+
fontFamily: props.fontFamily,
|
|
60
|
+
fontSize: props.fontSize,
|
|
61
|
+
fontStretch: props.fontStretch,
|
|
62
|
+
fontStyle: props.fontStyle,
|
|
63
|
+
fontWeight: props.fontWeight,
|
|
64
|
+
text: props.text,
|
|
65
|
+
lineHeight: props.lineHeight,
|
|
66
|
+
maxLines: props.maxLines,
|
|
67
|
+
textBaseline: props.textBaseline,
|
|
68
|
+
verticalAlign: props.verticalAlign,
|
|
69
|
+
overflowSuffix: props.overflowSuffix,
|
|
70
|
+
});
|
|
71
|
+
this.textRenderer = resolvedTextRenderer;
|
|
72
|
+
this.trState = textRendererState;
|
|
73
|
+
}
|
|
74
|
+
onTextLoaded = () => {
|
|
75
|
+
const { contain } = this;
|
|
76
|
+
const setWidth = this.trState.props.width;
|
|
77
|
+
const setHeight = this.trState.props.height;
|
|
78
|
+
const calcWidth = this.trState.textW || 0;
|
|
79
|
+
const calcHeight = this.trState.textH || 0;
|
|
80
|
+
if (contain === 'both') {
|
|
81
|
+
this.props.width = setWidth;
|
|
82
|
+
this.props.height = setHeight;
|
|
83
|
+
}
|
|
84
|
+
else if (contain === 'width') {
|
|
85
|
+
this.props.width = setWidth;
|
|
86
|
+
this.props.height = calcHeight;
|
|
87
|
+
}
|
|
88
|
+
else if (contain === 'none') {
|
|
89
|
+
this.props.width = calcWidth;
|
|
90
|
+
this.props.height = calcHeight;
|
|
91
|
+
}
|
|
92
|
+
this.updateLocalTransform();
|
|
93
|
+
// Incase the RAF loop has been stopped already before text was loaded,
|
|
94
|
+
// we request a render so it can be drawn.
|
|
95
|
+
this.stage.requestRender();
|
|
96
|
+
this.emit('loaded', {
|
|
97
|
+
type: 'text',
|
|
98
|
+
dimensions: {
|
|
99
|
+
width: this.trState.textW || 0,
|
|
100
|
+
height: this.trState.textH || 0,
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
onTextFailed = (target, error) => {
|
|
105
|
+
this.emit('failed', {
|
|
106
|
+
type: 'text',
|
|
107
|
+
error,
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
get width() {
|
|
111
|
+
return this.props.width;
|
|
112
|
+
}
|
|
113
|
+
set width(value) {
|
|
114
|
+
this.props.width = value;
|
|
115
|
+
this.textRenderer.set.width(this.trState, value);
|
|
116
|
+
// If not containing, we must update the local transform to account for the
|
|
117
|
+
// new width
|
|
118
|
+
if (this.contain === 'none') {
|
|
119
|
+
this.setUpdateType(UpdateType.Local);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
get height() {
|
|
123
|
+
return this.props.height;
|
|
124
|
+
}
|
|
125
|
+
set height(value) {
|
|
126
|
+
this.props.height = value;
|
|
127
|
+
this.textRenderer.set.height(this.trState, value);
|
|
128
|
+
// If not containing in the horizontal direction, we must update the local
|
|
129
|
+
// transform to account for the new height
|
|
130
|
+
if (this.contain !== 'both') {
|
|
131
|
+
this.setUpdateType(UpdateType.Local);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
get color() {
|
|
135
|
+
return this.trState.props.color;
|
|
136
|
+
}
|
|
137
|
+
set color(value) {
|
|
138
|
+
this.textRenderer.set.color(this.trState, value);
|
|
139
|
+
}
|
|
140
|
+
get text() {
|
|
141
|
+
return this.trState.props.text;
|
|
142
|
+
}
|
|
143
|
+
set text(value) {
|
|
144
|
+
this.textRenderer.set.text(this.trState, value);
|
|
145
|
+
}
|
|
146
|
+
get textRendererOverride() {
|
|
147
|
+
return this._textRendererOverride;
|
|
148
|
+
}
|
|
149
|
+
set textRendererOverride(value) {
|
|
150
|
+
this._textRendererOverride = value;
|
|
151
|
+
this.textRenderer.destroyState(this.trState);
|
|
152
|
+
const { resolvedTextRenderer, textRendererState } = this.resolveTextRendererAndState(this.trState.props);
|
|
153
|
+
this.textRenderer = resolvedTextRenderer;
|
|
154
|
+
this.trState = textRendererState;
|
|
155
|
+
}
|
|
156
|
+
get fontSize() {
|
|
157
|
+
return this.trState.props.fontSize;
|
|
158
|
+
}
|
|
159
|
+
set fontSize(value) {
|
|
160
|
+
this.textRenderer.set.fontSize(this.trState, value);
|
|
161
|
+
}
|
|
162
|
+
get fontFamily() {
|
|
163
|
+
return this.trState.props.fontFamily;
|
|
164
|
+
}
|
|
165
|
+
set fontFamily(value) {
|
|
166
|
+
this.textRenderer.set.fontFamily(this.trState, value);
|
|
167
|
+
}
|
|
168
|
+
get fontStretch() {
|
|
169
|
+
return this.trState.props.fontStretch;
|
|
170
|
+
}
|
|
171
|
+
set fontStretch(value) {
|
|
172
|
+
this.textRenderer.set.fontStretch(this.trState, value);
|
|
173
|
+
}
|
|
174
|
+
get fontStyle() {
|
|
175
|
+
return this.trState.props.fontStyle;
|
|
176
|
+
}
|
|
177
|
+
set fontStyle(value) {
|
|
178
|
+
this.textRenderer.set.fontStyle(this.trState, value);
|
|
179
|
+
}
|
|
180
|
+
get fontWeight() {
|
|
181
|
+
return this.trState.props.fontWeight;
|
|
182
|
+
}
|
|
183
|
+
set fontWeight(value) {
|
|
184
|
+
this.textRenderer.set.fontWeight(this.trState, value);
|
|
185
|
+
}
|
|
186
|
+
get textAlign() {
|
|
187
|
+
return this.trState.props.textAlign;
|
|
188
|
+
}
|
|
189
|
+
set textAlign(value) {
|
|
190
|
+
this.textRenderer.set.textAlign(this.trState, value);
|
|
191
|
+
}
|
|
192
|
+
get contain() {
|
|
193
|
+
return this.trState.props.contain;
|
|
194
|
+
}
|
|
195
|
+
set contain(value) {
|
|
196
|
+
this.textRenderer.set.contain(this.trState, value);
|
|
197
|
+
}
|
|
198
|
+
get scrollable() {
|
|
199
|
+
return this.trState.props.scrollable;
|
|
200
|
+
}
|
|
201
|
+
set scrollable(value) {
|
|
202
|
+
this.textRenderer.set.scrollable(this.trState, value);
|
|
203
|
+
}
|
|
204
|
+
get scrollY() {
|
|
205
|
+
return this.trState.props.scrollY;
|
|
206
|
+
}
|
|
207
|
+
set scrollY(value) {
|
|
208
|
+
this.textRenderer.set.scrollY(this.trState, value);
|
|
209
|
+
}
|
|
210
|
+
get offsetY() {
|
|
211
|
+
return this.trState.props.offsetY;
|
|
212
|
+
}
|
|
213
|
+
set offsetY(value) {
|
|
214
|
+
this.textRenderer.set.offsetY(this.trState, value);
|
|
215
|
+
}
|
|
216
|
+
get letterSpacing() {
|
|
217
|
+
return this.trState.props.letterSpacing;
|
|
218
|
+
}
|
|
219
|
+
set letterSpacing(value) {
|
|
220
|
+
this.textRenderer.set.letterSpacing(this.trState, value);
|
|
221
|
+
}
|
|
222
|
+
get lineHeight() {
|
|
223
|
+
return this.trState.props.lineHeight;
|
|
224
|
+
}
|
|
225
|
+
set lineHeight(value) {
|
|
226
|
+
if (this.textRenderer.set.lineHeight) {
|
|
227
|
+
this.textRenderer.set.lineHeight(this.trState, value);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
get maxLines() {
|
|
231
|
+
return this.trState.props.maxLines;
|
|
232
|
+
}
|
|
233
|
+
set maxLines(value) {
|
|
234
|
+
if (this.textRenderer.set.maxLines) {
|
|
235
|
+
this.textRenderer.set.maxLines(this.trState, value);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
get textBaseline() {
|
|
239
|
+
return this.trState.props.textBaseline;
|
|
240
|
+
}
|
|
241
|
+
set textBaseline(value) {
|
|
242
|
+
if (this.textRenderer.set.textBaseline) {
|
|
243
|
+
this.textRenderer.set.textBaseline(this.trState, value);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
get verticalAlign() {
|
|
247
|
+
return this.trState.props.verticalAlign;
|
|
248
|
+
}
|
|
249
|
+
set verticalAlign(value) {
|
|
250
|
+
if (this.textRenderer.set.verticalAlign) {
|
|
251
|
+
this.textRenderer.set.verticalAlign(this.trState, value);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
get overflowSuffix() {
|
|
255
|
+
return this.trState.props.overflowSuffix;
|
|
256
|
+
}
|
|
257
|
+
set overflowSuffix(value) {
|
|
258
|
+
if (this.textRenderer.set.overflowSuffix) {
|
|
259
|
+
this.textRenderer.set.overflowSuffix(this.trState, value);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
get debug() {
|
|
263
|
+
return this.trState.props.debug;
|
|
264
|
+
}
|
|
265
|
+
set debug(value) {
|
|
266
|
+
this.textRenderer.set.debug(this.trState, value);
|
|
267
|
+
}
|
|
268
|
+
update(delta, parentClippingRect) {
|
|
269
|
+
super.update(delta, parentClippingRect);
|
|
270
|
+
assertTruthy(this.globalTransform);
|
|
271
|
+
// globalTransform is updated in super.update(delta)
|
|
272
|
+
this.textRenderer.set.x(this.trState, this.globalTransform.tx);
|
|
273
|
+
this.textRenderer.set.y(this.trState, this.globalTransform.ty);
|
|
274
|
+
}
|
|
275
|
+
checkRenderProps() {
|
|
276
|
+
if (this.trState.props.text !== '') {
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
return super.checkRenderProps();
|
|
280
|
+
}
|
|
281
|
+
onChangeIsRenderable(isRenderable) {
|
|
282
|
+
super.onChangeIsRenderable(isRenderable);
|
|
283
|
+
this.textRenderer.setIsRenderable(this.trState, isRenderable);
|
|
284
|
+
}
|
|
285
|
+
renderQuads(renderer) {
|
|
286
|
+
assertTruthy(this.globalTransform);
|
|
287
|
+
// Prevent quad rendering if parent has a render texture
|
|
288
|
+
// and this node is not the render texture
|
|
289
|
+
if (this.parentHasRenderTexture) {
|
|
290
|
+
if (!renderer.renderToTextureActive) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
// Prevent quad rendering if parent render texture is not the active render texture
|
|
294
|
+
if (this.parentRenderTexture !== renderer.activeRttNode) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
if (this.parentHasRenderTexture && this.props.parent?.rtt) {
|
|
299
|
+
this.globalTransform = Matrix3d.identity();
|
|
300
|
+
if (this.localTransform) {
|
|
301
|
+
this.globalTransform.multiply(this.localTransform);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
assertTruthy(this.globalTransform);
|
|
305
|
+
this.textRenderer.renderQuads(this.trState, this.globalTransform, this.clippingRect, this.worldAlpha, this.parentHasRenderTexture, this.framebufferDimensions);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Destroy the node and cleanup all resources
|
|
309
|
+
*/
|
|
310
|
+
destroy() {
|
|
311
|
+
super.destroy();
|
|
312
|
+
this.textRenderer.destroyState(this.trState);
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Resolve a text renderer and a new state based on the current text renderer props provided
|
|
316
|
+
* @param props
|
|
317
|
+
* @returns
|
|
318
|
+
*/
|
|
319
|
+
resolveTextRendererAndState(props) {
|
|
320
|
+
const resolvedTextRenderer = this.stage.resolveTextRenderer(props, this._textRendererOverride);
|
|
321
|
+
const textRendererState = resolvedTextRenderer.createState(props);
|
|
322
|
+
textRendererState.emitter.on('loaded', this.onTextLoaded);
|
|
323
|
+
textRendererState.emitter.on('failed', this.onTextFailed);
|
|
324
|
+
resolvedTextRenderer.scheduleUpdateState(textRendererState);
|
|
325
|
+
return {
|
|
326
|
+
resolvedTextRenderer,
|
|
327
|
+
textRendererState,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=TextNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextNode.js","sourceRoot":"","sources":["../../../src/core/TextNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,16 @@ export interface TextureMemoryManagerSettings {
|
|
|
44
44
|
* @defaultValue `false`
|
|
45
45
|
*/
|
|
46
46
|
debugLogging: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Baseline memory allocation for the Texture Memory Manager
|
|
49
|
+
*
|
|
50
|
+
* @remarks
|
|
51
|
+
* Baseline texture memory is an allocation of memory by simply having a 1080p WebGL context.
|
|
52
|
+
* This will be used on top of the memory used by textures to determine when to trigger a cleanup.
|
|
53
|
+
*
|
|
54
|
+
* @defaultValue `25e6` (25 MB)
|
|
55
|
+
*/
|
|
56
|
+
baselineMemoryAllocation: number;
|
|
47
57
|
}
|
|
48
58
|
export interface MemoryInfo {
|
|
49
59
|
criticalThreshold: number;
|
|
@@ -52,6 +62,7 @@ export interface MemoryInfo {
|
|
|
52
62
|
memUsed: number;
|
|
53
63
|
renderableTexturesLoaded: number;
|
|
54
64
|
loadedTextures: number;
|
|
65
|
+
baselineMemoryAllocation: number;
|
|
55
66
|
}
|
|
56
67
|
/**
|
|
57
68
|
* LRU (Least Recently Used) style memory manager for textures
|
|
@@ -72,6 +83,7 @@ export declare class TextureMemoryManager {
|
|
|
72
83
|
private stage;
|
|
73
84
|
private memUsed;
|
|
74
85
|
private loadedTextures;
|
|
86
|
+
private orphanedTextures;
|
|
75
87
|
private criticalThreshold;
|
|
76
88
|
private targetThreshold;
|
|
77
89
|
private cleanupInterval;
|
|
@@ -88,6 +100,24 @@ export declare class TextureMemoryManager {
|
|
|
88
100
|
*/
|
|
89
101
|
frameTime: number;
|
|
90
102
|
constructor(stage: Stage, settings: TextureMemoryManagerSettings);
|
|
103
|
+
/**
|
|
104
|
+
* Add a texture to the orphaned textures list
|
|
105
|
+
*
|
|
106
|
+
* @param texture - The texture to add to the orphaned textures list
|
|
107
|
+
*/
|
|
108
|
+
addToOrphanedTextures(texture: Texture): void;
|
|
109
|
+
/**
|
|
110
|
+
* Remove a texture from the orphaned textures list
|
|
111
|
+
*
|
|
112
|
+
* @param texture - The texture to remove from the orphaned textures list
|
|
113
|
+
*/
|
|
114
|
+
removeFromOrphanedTextures(texture: Texture): void;
|
|
115
|
+
/**
|
|
116
|
+
* Set the memory usage of a texture
|
|
117
|
+
*
|
|
118
|
+
* @param texture - The texture to set memory usage for
|
|
119
|
+
* @param byteSize - The size of the texture in bytes
|
|
120
|
+
*/
|
|
91
121
|
setTextureMemUse(texture: Texture, byteSize: number): void;
|
|
92
122
|
checkCleanup(): boolean;
|
|
93
123
|
cleanup(): void;
|
|
@@ -1,3 +1,23 @@
|
|
|
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 2024 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
|
+
import { isProductionEnvironment } from '../utils.js';
|
|
20
|
+
import { getTimeStamp } from './platform.js';
|
|
1
21
|
import { bytesToMb } from './utils.js';
|
|
2
22
|
/**
|
|
3
23
|
* LRU (Least Recently Used) style memory manager for textures
|
|
@@ -18,6 +38,7 @@ export class TextureMemoryManager {
|
|
|
18
38
|
stage;
|
|
19
39
|
memUsed = 0;
|
|
20
40
|
loadedTextures = new Map();
|
|
41
|
+
orphanedTextures = [];
|
|
21
42
|
criticalThreshold;
|
|
22
43
|
targetThreshold;
|
|
23
44
|
cleanupInterval;
|
|
@@ -41,6 +62,7 @@ export class TextureMemoryManager {
|
|
|
41
62
|
this.targetThreshold = Math.round(criticalThreshold * targetFraction);
|
|
42
63
|
this.cleanupInterval = settings.cleanupInterval;
|
|
43
64
|
this.debugLogging = settings.debugLogging;
|
|
65
|
+
this.memUsed = Math.round(settings.baselineMemoryAllocation);
|
|
44
66
|
if (settings.debugLogging) {
|
|
45
67
|
let lastMemUse = 0;
|
|
46
68
|
setInterval(() => {
|
|
@@ -57,6 +79,38 @@ export class TextureMemoryManager {
|
|
|
57
79
|
this.setTextureMemUse = () => { };
|
|
58
80
|
}
|
|
59
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Add a texture to the orphaned textures list
|
|
84
|
+
*
|
|
85
|
+
* @param texture - The texture to add to the orphaned textures list
|
|
86
|
+
*/
|
|
87
|
+
addToOrphanedTextures(texture) {
|
|
88
|
+
// if the texture is already in the orphaned textures list add it at the end
|
|
89
|
+
if (this.orphanedTextures.includes(texture)) {
|
|
90
|
+
this.removeFromOrphanedTextures(texture);
|
|
91
|
+
}
|
|
92
|
+
// If the texture can be cleaned up, add it to the orphaned textures list
|
|
93
|
+
if (texture.preventCleanup === false) {
|
|
94
|
+
this.orphanedTextures.push(texture);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Remove a texture from the orphaned textures list
|
|
99
|
+
*
|
|
100
|
+
* @param texture - The texture to remove from the orphaned textures list
|
|
101
|
+
*/
|
|
102
|
+
removeFromOrphanedTextures(texture) {
|
|
103
|
+
const index = this.orphanedTextures.indexOf(texture);
|
|
104
|
+
if (index !== -1) {
|
|
105
|
+
this.orphanedTextures.splice(index, 1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Set the memory usage of a texture
|
|
110
|
+
*
|
|
111
|
+
* @param texture - The texture to set memory usage for
|
|
112
|
+
* @param byteSize - The size of the texture in bytes
|
|
113
|
+
*/
|
|
60
114
|
setTextureMemUse(texture, byteSize) {
|
|
61
115
|
if (this.loadedTextures.has(texture)) {
|
|
62
116
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -83,7 +137,7 @@ export class TextureMemoryManager {
|
|
|
83
137
|
const critical = this.criticalCleanupRequested;
|
|
84
138
|
this.lastCleanupTime = this.frameTime;
|
|
85
139
|
this.criticalCleanupRequested = false;
|
|
86
|
-
if (critical) {
|
|
140
|
+
if (critical === true) {
|
|
87
141
|
this.stage.queueFrameEvent('criticalCleanup', {
|
|
88
142
|
memUsed: this.memUsed,
|
|
89
143
|
criticalThreshold: this.criticalThreshold,
|
|
@@ -92,52 +146,30 @@ export class TextureMemoryManager {
|
|
|
92
146
|
if (this.debugLogging) {
|
|
93
147
|
console.log(`[TextureMemoryManager] Cleaning up textures. Critical: ${critical}`);
|
|
94
148
|
}
|
|
95
|
-
/**
|
|
96
|
-
* Sort the loaded textures by renderability, then by last touch time.
|
|
97
|
-
*
|
|
98
|
-
* This will ensure that the array is ordered by the following:
|
|
99
|
-
* - Non-renderable textures, starting at the least recently rendered
|
|
100
|
-
* - Renderable textures, starting at the least recently rendered
|
|
101
|
-
*/
|
|
102
|
-
const textures = [...this.loadedTextures.keys()].sort((textureA, textureB) => {
|
|
103
|
-
const txARenderable = textureA.renderable;
|
|
104
|
-
const txBRenderable = textureB.renderable;
|
|
105
|
-
if (txARenderable === txBRenderable) {
|
|
106
|
-
return (textureA.lastRenderableChangeTime -
|
|
107
|
-
textureB.lastRenderableChangeTime);
|
|
108
|
-
}
|
|
109
|
-
else if (txARenderable) {
|
|
110
|
-
return 1;
|
|
111
|
-
}
|
|
112
|
-
else if (txBRenderable) {
|
|
113
|
-
return -1;
|
|
114
|
-
}
|
|
115
|
-
return 0;
|
|
116
|
-
});
|
|
117
149
|
// Free non-renderable textures until we reach the target threshold
|
|
118
150
|
const memTarget = this.targetThreshold;
|
|
119
151
|
const txManager = this.stage.txManager;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (texture.
|
|
127
|
-
texture
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
if (this.memUsed <= memTarget) {
|
|
131
|
-
// Stop once we've freed enough textures to reach under the target threshold
|
|
132
|
-
break;
|
|
152
|
+
const timestamp = getTimeStamp();
|
|
153
|
+
while (this.memUsed >= memTarget &&
|
|
154
|
+
this.orphanedTextures.length > 0 &&
|
|
155
|
+
// if it a non-critical cleanup, we will only cleanup for 10ms
|
|
156
|
+
(critical || getTimeStamp() - timestamp < 10)) {
|
|
157
|
+
const texture = this.orphanedTextures.shift();
|
|
158
|
+
if (texture.renderable === true) {
|
|
159
|
+
// If the texture is renderable, we can't free it up
|
|
160
|
+
continue;
|
|
133
161
|
}
|
|
162
|
+
texture.free();
|
|
163
|
+
txManager.removeTextureFromCache(texture);
|
|
134
164
|
}
|
|
135
165
|
if (this.memUsed >= this.criticalThreshold) {
|
|
136
166
|
this.stage.queueFrameEvent('criticalCleanupFailed', {
|
|
137
167
|
memUsed: this.memUsed,
|
|
138
168
|
criticalThreshold: this.criticalThreshold,
|
|
139
169
|
});
|
|
140
|
-
|
|
170
|
+
if (this.debugLogging === true || isProductionEnvironment() === false) {
|
|
171
|
+
console.warn(`[TextureMemoryManager] Memory usage above critical threshold after cleanup: ${this.memUsed}`);
|
|
172
|
+
}
|
|
141
173
|
}
|
|
142
174
|
}
|
|
143
175
|
/**
|
|
@@ -160,6 +192,7 @@ export class TextureMemoryManager {
|
|
|
160
192
|
memUsed: this.memUsed,
|
|
161
193
|
renderableTexturesLoaded,
|
|
162
194
|
loadedTextures: this.loadedTextures.size,
|
|
195
|
+
baselineMemoryAllocation: this.memUsed - renderableMemUsed,
|
|
163
196
|
};
|
|
164
197
|
}
|
|
165
198
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextureMemoryManager.js","sourceRoot":"","sources":["../../../src/core/TextureMemoryManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TextureMemoryManager.js","sourceRoot":"","sources":["../../../src/core/TextureMemoryManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class RenderCoords {
|
|
2
|
+
data: Float32Array;
|
|
3
|
+
constructor(entries?: [number, number, number, number, number, number, number, number] | Float32Array);
|
|
4
|
+
get x1(): number;
|
|
5
|
+
get x2(): number;
|
|
6
|
+
get x3(): number;
|
|
7
|
+
get xValues(): [number, number, number, number];
|
|
8
|
+
get x4(): number;
|
|
9
|
+
get y1(): number;
|
|
10
|
+
get y2(): number;
|
|
11
|
+
get y3(): number;
|
|
12
|
+
get y4(): number;
|
|
13
|
+
get yValues(): [number, number, number, number];
|
|
14
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const x1 = 0;
|
|
2
|
+
const x2 = 2;
|
|
3
|
+
const x3 = 4;
|
|
4
|
+
const x4 = 6;
|
|
5
|
+
const y1 = 1;
|
|
6
|
+
const y2 = 3;
|
|
7
|
+
const y3 = 5;
|
|
8
|
+
const y4 = 7;
|
|
9
|
+
export class RenderCoords {
|
|
10
|
+
data;
|
|
11
|
+
constructor(entries) {
|
|
12
|
+
this.data = new Float32Array(8);
|
|
13
|
+
if (entries) {
|
|
14
|
+
this.data[x1] = entries[x1];
|
|
15
|
+
this.data[x2] = entries[x2];
|
|
16
|
+
this.data[x3] = entries[x3];
|
|
17
|
+
this.data[x4] = entries[x4];
|
|
18
|
+
this.data[y1] = entries[y1];
|
|
19
|
+
this.data[y2] = entries[y2];
|
|
20
|
+
this.data[y3] = entries[y3];
|
|
21
|
+
this.data[y4] = entries[y4];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
get x1() {
|
|
25
|
+
return this.data[x1];
|
|
26
|
+
}
|
|
27
|
+
get x2() {
|
|
28
|
+
return this.data[x2];
|
|
29
|
+
}
|
|
30
|
+
get x3() {
|
|
31
|
+
return this.data[x3];
|
|
32
|
+
}
|
|
33
|
+
get xValues() {
|
|
34
|
+
return [this.data[x1], this.data[x2], this.data[x3], this.data[x4]];
|
|
35
|
+
}
|
|
36
|
+
get x4() {
|
|
37
|
+
return this.data[x4];
|
|
38
|
+
}
|
|
39
|
+
get y1() {
|
|
40
|
+
return this.data[y1];
|
|
41
|
+
}
|
|
42
|
+
get y2() {
|
|
43
|
+
return this.data[y2];
|
|
44
|
+
}
|
|
45
|
+
get y3() {
|
|
46
|
+
return this.data[y3];
|
|
47
|
+
}
|
|
48
|
+
get y4() {
|
|
49
|
+
return this.data[y4];
|
|
50
|
+
}
|
|
51
|
+
get yValues() {
|
|
52
|
+
return [this.data[y1], this.data[y2], this.data[y3], this.data[y4]];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=Coords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Coords.js","sourceRoot":"","sources":["../../../../src/core/lib/Coords.ts"],"names":[],"mappings":"AAAA,MAAM,EAAE,GAAG,CAAC,CAAC;AACb,MAAM,EAAE,GAAG,CAAC,CAAC;AACb,MAAM,EAAE,GAAG,CAAC,CAAC;AACb,MAAM,EAAE,GAAG,CAAC,CAAC;AACb,MAAM,EAAE,GAAG,CAAC,CAAC;AACb,MAAM,EAAE,GAAG,CAAC,CAAC;AACb,MAAM,EAAE,GAAG,CAAC,CAAC;AACb,MAAM,EAAE,GAAG,CAAC,CAAC;AAEb,MAAM,OAAO,YAAY;IAChB,IAAI,CAAe;IAC1B,YAAY,OAEI;QAEd,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,IAAG,OAAO,EAAE;YACV,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;SAC7B;IACH,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;IACxB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;IACxB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;IACxB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,CAAA;IACzE,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;IACxB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;IACxB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;IACxB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;IACxB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;IACxB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,CAAA;IACzE,CAAC;CACF"}
|