@lightningjs/renderer 3.0.0-beta18 → 3.0.0-beta19
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/dist/src/core/Autosizer.d.ts +29 -0
- package/dist/src/core/Autosizer.js +178 -0
- package/dist/src/core/Autosizer.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +44 -26
- package/dist/src/core/CoreNode.js +253 -150
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +1 -0
- package/dist/src/core/CoreTextNode.js +8 -4
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +16 -2
- package/dist/src/core/CoreTextureManager.js +38 -51
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +18 -2
- package/dist/src/core/Stage.js +44 -14
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureMemoryManager.d.ts +2 -4
- package/dist/src/core/TextureMemoryManager.js +80 -95
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +11 -0
- package/dist/src/core/lib/WebGlContextWrapper.js +34 -0
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/textureCompression.d.ts +14 -2
- package/dist/src/core/lib/textureCompression.js +320 -67
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/platforms/web/WebPlatform.js +2 -2
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
- package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -0
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +3 -1
- package/dist/src/core/renderers/CoreRenderer.js +1 -0
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderNode.d.ts +6 -0
- package/dist/src/core/renderers/CoreShaderNode.js +2 -0
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +1 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.js +4 -1
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +6 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +11 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +51 -14
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +2 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +2 -0
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +57 -61
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +12 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/shaders/webgl/Rounded.js +3 -1
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +3 -2
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +3 -2
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +2 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/text-rendering/SdfFontHandler.js +1 -1
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
- package/dist/src/core/textures/ColorTexture.d.ts +1 -1
- package/dist/src/core/textures/ColorTexture.js +2 -3
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +7 -1
- package/dist/src/core/textures/ImageTexture.js +20 -36
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
- package/dist/src/core/textures/NoiseTexture.js +2 -2
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.d.ts +1 -1
- package/dist/src/core/textures/RenderTexture.js +2 -2
- package/dist/src/core/textures/RenderTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +2 -4
- package/dist/src/core/textures/SubTexture.js +13 -31
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +67 -8
- package/dist/src/core/textures/Texture.js +127 -15
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +15 -2
- package/dist/src/main-api/Renderer.js +19 -12
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/core/CoreNode.test.ts +0 -1
- package/src/core/CoreNode.ts +296 -177
- package/src/core/CoreTextNode.ts +9 -4
- package/src/core/CoreTextureManager.ts +69 -57
- package/src/core/Stage.ts +51 -17
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +95 -122
- package/src/core/lib/WebGlContextWrapper.ts +40 -0
- package/src/core/lib/collectionUtils.ts +118 -0
- package/src/core/lib/textureCompression.ts +433 -77
- package/src/core/platforms/web/WebPlatform.ts +2 -2
- package/src/core/renderers/CoreContextTexture.ts +1 -0
- package/src/core/renderers/CoreRenderer.ts +3 -2
- package/src/core/renderers/CoreShaderNode.ts +7 -0
- package/src/core/renderers/canvas/CanvasTexture.ts +5 -1
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +8 -0
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +58 -15
- package/src/core/renderers/webgl/WebGlRenderOp.ts +4 -1
- package/src/core/renderers/webgl/WebGlRenderer.ts +66 -68
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +16 -0
- package/src/core/shaders/webgl/Rounded.ts +3 -1
- package/src/core/shaders/webgl/RoundedWithBorder.ts +3 -2
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +3 -2
- package/src/core/shaders/webgl/RoundedWithShadow.ts +2 -1
- package/src/core/text-rendering/SdfFontHandler.ts +1 -1
- package/src/core/textures/ColorTexture.ts +6 -4
- package/src/core/textures/ImageTexture.ts +35 -42
- package/src/core/textures/NoiseTexture.ts +6 -4
- package/src/core/textures/RenderTexture.ts +6 -4
- package/src/core/textures/SubTexture.ts +17 -38
- package/src/core/textures/Texture.ts +159 -20
- package/src/main-api/Renderer.ts +36 -14
- package/dist/src/core/AutosizeManager.d.ts +0 -29
- package/dist/src/core/AutosizeManager.js +0 -171
- package/dist/src/core/AutosizeManager.js.map +0 -1
- package/dist/src/core/animations/Animation.d.ts +0 -16
- package/dist/src/core/animations/Animation.js +0 -111
- package/dist/src/core/animations/Animation.js.map +0 -1
- package/dist/src/core/animations/CoreTransition.d.ts +0 -24
- package/dist/src/core/animations/CoreTransition.js +0 -63
- package/dist/src/core/animations/CoreTransition.js.map +0 -1
- package/dist/src/core/animations/Playback.d.ts +0 -62
- package/dist/src/core/animations/Playback.js +0 -155
- package/dist/src/core/animations/Playback.js.map +0 -1
- package/dist/src/core/animations/Transition.d.ts +0 -25
- package/dist/src/core/animations/Transition.js +0 -63
- package/dist/src/core/animations/Transition.js.map +0 -1
- package/dist/src/core/animations/utils.d.ts +0 -2
- package/dist/src/core/animations/utils.js +0 -137
- package/dist/src/core/animations/utils.js.map +0 -1
- package/dist/src/core/platform.d.ts +0 -10
- package/dist/src/core/platform.js +0 -81
- package/dist/src/core/platform.js.map +0 -1
- package/dist/src/core/renderers/CoreShader.d.ts +0 -9
- package/dist/src/core/renderers/CoreShader.js +0 -28
- package/dist/src/core/renderers/CoreShader.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -17
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -125
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -14
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -138
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -19
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -58
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -58
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -69
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -272
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -645
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -78
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -202
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -84
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -108
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -408
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -126
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -148
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -134
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -40
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -143
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
- package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
- package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
- package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
- package/dist/src/core/text-rendering/TrFontManager.js +0 -131
- package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
- package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -120
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -92
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -607
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -373
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
- package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
- package/dist/src/main-api/DynamicShaderController.js +0 -58
- package/dist/src/main-api/DynamicShaderController.js.map +0 -1
- package/dist/src/main-api/ShaderController.d.ts +0 -31
- package/dist/src/main-api/ShaderController.js +0 -37
- package/dist/src/main-api/ShaderController.js.map +0 -1
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import { isProductionEnvironment } from '../utils.js';
|
|
20
20
|
import type { Stage } from './Stage.js';
|
|
21
|
-
import { Texture, TextureType
|
|
21
|
+
import { Texture, TextureType } from './textures/Texture.js';
|
|
22
22
|
import { bytesToMb } from './utils.js';
|
|
23
23
|
|
|
24
24
|
export interface TextureMemoryManagerSettings {
|
|
@@ -115,7 +115,7 @@ export interface MemoryInfo {
|
|
|
115
115
|
*/
|
|
116
116
|
export class TextureMemoryManager {
|
|
117
117
|
private memUsed = 0;
|
|
118
|
-
private loadedTextures:
|
|
118
|
+
private loadedTextures: (Texture | null)[] = [];
|
|
119
119
|
private orphanedTextures: Texture[] = [];
|
|
120
120
|
private criticalThreshold: number = 124e6;
|
|
121
121
|
private targetThreshold: number = 0.5;
|
|
@@ -126,12 +126,10 @@ export class TextureMemoryManager {
|
|
|
126
126
|
private lastCleanupTime = 0;
|
|
127
127
|
private baselineMemoryAllocation: number = 26e6;
|
|
128
128
|
|
|
129
|
+
private hasWarnedAboveCritical = false;
|
|
130
|
+
|
|
129
131
|
public criticalCleanupRequested = false;
|
|
130
132
|
public doNotExceedCriticalThreshold: boolean = false;
|
|
131
|
-
private originalSetTextureMemUse: (
|
|
132
|
-
texture: Texture,
|
|
133
|
-
byteSize: number,
|
|
134
|
-
) => void;
|
|
135
133
|
|
|
136
134
|
/**
|
|
137
135
|
* The current frame time in milliseconds
|
|
@@ -144,8 +142,6 @@ export class TextureMemoryManager {
|
|
|
144
142
|
public frameTime = 0;
|
|
145
143
|
|
|
146
144
|
constructor(private stage: Stage, settings: TextureMemoryManagerSettings) {
|
|
147
|
-
this.originalSetTextureMemUse = this.setTextureMemUse;
|
|
148
|
-
|
|
149
145
|
this.updateSettings(settings);
|
|
150
146
|
}
|
|
151
147
|
|
|
@@ -185,17 +181,30 @@ export class TextureMemoryManager {
|
|
|
185
181
|
* @param byteSize - The size of the texture in bytes
|
|
186
182
|
*/
|
|
187
183
|
setTextureMemUse(texture: Texture, byteSize: number) {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
this.memUsed -= this.loadedTextures.get(texture)!;
|
|
191
|
-
}
|
|
184
|
+
// Update global memory counter by subtracting old value
|
|
185
|
+
this.memUsed -= texture.memUsed;
|
|
192
186
|
|
|
193
187
|
if (byteSize === 0) {
|
|
194
|
-
|
|
188
|
+
// PERFORMANCE: Mark for deletion, slot will be reused later
|
|
189
|
+
const index = this.loadedTextures.indexOf(texture);
|
|
190
|
+
if (index !== -1) {
|
|
191
|
+
this.loadedTextures[index] = null;
|
|
192
|
+
}
|
|
193
|
+
texture.memUsed = 0;
|
|
195
194
|
return;
|
|
196
195
|
} else {
|
|
196
|
+
// Update texture memory and add to tracking if not already present
|
|
197
|
+
texture.memUsed = byteSize;
|
|
197
198
|
this.memUsed += byteSize;
|
|
198
|
-
this.loadedTextures.
|
|
199
|
+
if (this.loadedTextures.indexOf(texture) === -1) {
|
|
200
|
+
// PERFORMANCE: Reuse empty slots before appending
|
|
201
|
+
const emptyIndex = this.loadedTextures.indexOf(null);
|
|
202
|
+
if (emptyIndex !== -1) {
|
|
203
|
+
this.loadedTextures[emptyIndex] = texture;
|
|
204
|
+
} else {
|
|
205
|
+
this.loadedTextures.push(texture);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
199
208
|
}
|
|
200
209
|
|
|
201
210
|
if (this.memUsed > this.criticalThreshold) {
|
|
@@ -215,41 +224,6 @@ export class TextureMemoryManager {
|
|
|
215
224
|
return this.memUsed > this.criticalThreshold;
|
|
216
225
|
}
|
|
217
226
|
|
|
218
|
-
cleanupQuick(critical: boolean) {
|
|
219
|
-
// Free non-renderable textures until we reach the target threshold
|
|
220
|
-
const platform = this.stage.platform;
|
|
221
|
-
const memTarget = this.targetThreshold;
|
|
222
|
-
const timestamp = platform.getTimeStamp();
|
|
223
|
-
|
|
224
|
-
while (
|
|
225
|
-
this.memUsed >= memTarget &&
|
|
226
|
-
this.orphanedTextures.length > 0 &&
|
|
227
|
-
(critical || platform.getTimeStamp() - timestamp < 10)
|
|
228
|
-
) {
|
|
229
|
-
const texture = this.orphanedTextures.shift();
|
|
230
|
-
|
|
231
|
-
if (texture === undefined) {
|
|
232
|
-
continue;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
if (texture.renderable === true) {
|
|
236
|
-
// If the texture is renderable, we can't free it up
|
|
237
|
-
continue;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// Skip textures that are in transitional states - we only want to clean up
|
|
241
|
-
// textures that are in a stable state (loaded, failed, or freed)
|
|
242
|
-
if (
|
|
243
|
-
texture.state === 'initial' ||
|
|
244
|
-
Texture.TRANSITIONAL_TEXTURE_STATES.includes(texture.state)
|
|
245
|
-
) {
|
|
246
|
-
continue;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
this.destroyTexture(texture);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
227
|
/**
|
|
254
228
|
* Destroy a texture and remove it from the memory manager
|
|
255
229
|
*
|
|
@@ -262,95 +236,92 @@ export class TextureMemoryManager {
|
|
|
262
236
|
);
|
|
263
237
|
}
|
|
264
238
|
|
|
239
|
+
// PERFORMANCE: Null out array position, slot will be reused later
|
|
240
|
+
const index = this.loadedTextures.indexOf(texture);
|
|
241
|
+
if (index !== -1) {
|
|
242
|
+
this.loadedTextures[index] = null;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Destroy texture and update memory counters
|
|
265
246
|
const txManager = this.stage.txManager;
|
|
266
|
-
txManager.removeTextureFromQueue(texture);
|
|
267
247
|
txManager.removeTextureFromCache(texture);
|
|
268
248
|
|
|
269
249
|
texture.destroy();
|
|
270
250
|
|
|
271
|
-
|
|
272
|
-
this.
|
|
251
|
+
// Update memory counters
|
|
252
|
+
this.memUsed -= texture.memUsed;
|
|
253
|
+
texture.memUsed = 0;
|
|
273
254
|
}
|
|
274
|
-
cleanupDeep(critical: boolean) {
|
|
275
|
-
// Free non-renderable textures until we reach the target threshold
|
|
276
|
-
const memTarget = critical ? this.criticalThreshold : this.targetThreshold;
|
|
277
|
-
|
|
278
|
-
// Filter for textures that are candidates for cleanup
|
|
279
|
-
// note: This is an expensive operation, so we only do it in deep cleanup
|
|
280
|
-
const cleanupCandidates = [...this.loadedTextures.keys()].filter(
|
|
281
|
-
(texture) => {
|
|
282
|
-
return (
|
|
283
|
-
(texture.type === TextureType.image ||
|
|
284
|
-
texture.type === TextureType.noise ||
|
|
285
|
-
texture.type === TextureType.renderToTexture) &&
|
|
286
|
-
texture.renderable === false &&
|
|
287
|
-
texture.preventCleanup === false &&
|
|
288
|
-
texture.state !== 'initial' &&
|
|
289
|
-
!Texture.TRANSITIONAL_TEXTURE_STATES.includes(texture.state)
|
|
290
|
-
);
|
|
291
|
-
},
|
|
292
|
-
);
|
|
293
255
|
|
|
294
|
-
|
|
295
|
-
const texture = cleanupCandidates.shift();
|
|
296
|
-
if (texture === undefined) {
|
|
297
|
-
continue;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
this.destroyTexture(texture);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
cleanup(aggressive: boolean = false) {
|
|
256
|
+
cleanup() {
|
|
305
257
|
const critical = this.criticalCleanupRequested;
|
|
306
|
-
const criticalThreshold = this.criticalThreshold;
|
|
307
|
-
const memUsed = this.memUsed;
|
|
308
|
-
const stage = this.stage;
|
|
309
258
|
this.lastCleanupTime = this.frameTime;
|
|
310
259
|
|
|
311
260
|
if (critical === true) {
|
|
312
|
-
stage.queueFrameEvent('criticalCleanup', {
|
|
261
|
+
this.stage.queueFrameEvent('criticalCleanup', {
|
|
313
262
|
memUsed: this.memUsed,
|
|
314
|
-
criticalThreshold: criticalThreshold,
|
|
263
|
+
criticalThreshold: this.criticalThreshold,
|
|
315
264
|
});
|
|
316
265
|
}
|
|
317
266
|
|
|
318
267
|
if (this.debugLogging === true) {
|
|
319
268
|
console.log(
|
|
320
|
-
`[TextureMemoryManager] Cleaning up textures. Critical: ${critical}
|
|
269
|
+
`[TextureMemoryManager] Cleaning up textures. Critical: ${critical}.`,
|
|
321
270
|
);
|
|
322
271
|
}
|
|
323
272
|
|
|
324
|
-
//
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
//
|
|
328
|
-
//
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
273
|
+
// Free non-renderable textures until we reach the target threshold
|
|
274
|
+
const memTarget = critical ? this.criticalThreshold : this.targetThreshold;
|
|
275
|
+
|
|
276
|
+
// PERFORMANCE: Zero-overhead cleanup with null marking
|
|
277
|
+
// Skip null entries, mark cleaned textures as null for later defrag
|
|
278
|
+
let currentMemUsed = this.memUsed;
|
|
279
|
+
|
|
280
|
+
for (let i = 0; i < this.loadedTextures.length; i++) {
|
|
281
|
+
// Early exit: target memory reached
|
|
282
|
+
if (currentMemUsed < memTarget) {
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const texture = this.loadedTextures[i];
|
|
287
|
+
if (!texture) continue; // Skip null entries from previous deletions
|
|
288
|
+
|
|
289
|
+
// Fast type check for cleanable textures
|
|
290
|
+
const isCleanableType =
|
|
291
|
+
texture.type === TextureType.image ||
|
|
292
|
+
texture.type === TextureType.noise ||
|
|
293
|
+
texture.type === TextureType.renderToTexture;
|
|
294
|
+
|
|
295
|
+
// Immediate cleanup if eligible
|
|
296
|
+
if (isCleanableType && texture.canBeCleanedUp() === true) {
|
|
297
|
+
// Get memory before destroying
|
|
298
|
+
const textureMemory = texture.memUsed;
|
|
299
|
+
|
|
300
|
+
// Destroy texture (which will null out the array position)
|
|
301
|
+
this.destroyTexture(texture);
|
|
302
|
+
currentMemUsed -= textureMemory;
|
|
303
|
+
}
|
|
339
304
|
}
|
|
340
305
|
|
|
341
|
-
if (memUsed >= criticalThreshold) {
|
|
342
|
-
stage.queueFrameEvent('criticalCleanupFailed', {
|
|
343
|
-
memUsed: memUsed,
|
|
344
|
-
criticalThreshold: criticalThreshold,
|
|
306
|
+
if (this.memUsed >= this.criticalThreshold) {
|
|
307
|
+
this.stage.queueFrameEvent('criticalCleanupFailed', {
|
|
308
|
+
memUsed: this.memUsed,
|
|
309
|
+
criticalThreshold: this.criticalThreshold,
|
|
345
310
|
});
|
|
346
|
-
|
|
347
|
-
if (
|
|
311
|
+
// Only emit the warning once per over-threshold period
|
|
312
|
+
if (
|
|
313
|
+
!this.hasWarnedAboveCritical &&
|
|
314
|
+
(this.debugLogging === true || isProductionEnvironment === false)
|
|
315
|
+
) {
|
|
348
316
|
console.warn(
|
|
349
|
-
`[TextureMemoryManager] Memory usage above critical threshold after cleanup: ${memUsed}`,
|
|
317
|
+
`[TextureMemoryManager] Memory usage above critical threshold after cleanup: ${this.memUsed}`,
|
|
350
318
|
);
|
|
319
|
+
|
|
320
|
+
this.hasWarnedAboveCritical = true;
|
|
351
321
|
}
|
|
352
322
|
} else {
|
|
353
323
|
this.criticalCleanupRequested = false;
|
|
324
|
+
this.hasWarnedAboveCritical = false;
|
|
354
325
|
}
|
|
355
326
|
}
|
|
356
327
|
|
|
@@ -363,15 +334,19 @@ export class TextureMemoryManager {
|
|
|
363
334
|
*/
|
|
364
335
|
getMemoryInfo(): MemoryInfo {
|
|
365
336
|
let renderableTexturesLoaded = 0;
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
|
|
337
|
+
let renderableMemUsed = this.baselineMemoryAllocation;
|
|
338
|
+
|
|
339
|
+
for (const texture of this.loadedTextures) {
|
|
340
|
+
if (texture && texture.renderable) {
|
|
341
|
+
renderableTexturesLoaded += 1;
|
|
342
|
+
renderableMemUsed += texture.memUsed;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Count non-null entries for accurate loaded texture count
|
|
347
|
+
const actualLoadedTextures = this.loadedTextures.filter(
|
|
348
|
+
(t) => t !== null,
|
|
349
|
+
).length;
|
|
375
350
|
|
|
376
351
|
return {
|
|
377
352
|
criticalThreshold: this.criticalThreshold,
|
|
@@ -379,7 +354,7 @@ export class TextureMemoryManager {
|
|
|
379
354
|
renderableMemUsed,
|
|
380
355
|
memUsed: this.memUsed,
|
|
381
356
|
renderableTexturesLoaded,
|
|
382
|
-
loadedTextures:
|
|
357
|
+
loadedTextures: actualLoadedTextures,
|
|
383
358
|
baselineMemoryAllocation: this.baselineMemoryAllocation,
|
|
384
359
|
};
|
|
385
360
|
}
|
|
@@ -438,8 +413,6 @@ export class TextureMemoryManager {
|
|
|
438
413
|
// setTextureMemUse method with a no-op function.
|
|
439
414
|
if (criticalThreshold === 0) {
|
|
440
415
|
this.setTextureMemUse = () => {};
|
|
441
|
-
} else {
|
|
442
|
-
this.setTextureMemUse = this.originalSetTextureMemUse;
|
|
443
416
|
}
|
|
444
417
|
}
|
|
445
418
|
}
|
|
@@ -73,6 +73,7 @@ export class WebGlContextWrapper {
|
|
|
73
73
|
public readonly TEXTURE_WRAP_S;
|
|
74
74
|
public readonly TEXTURE_WRAP_T;
|
|
75
75
|
public readonly LINEAR;
|
|
76
|
+
public readonly LINEAR_MIPMAP_LINEAR;
|
|
76
77
|
public readonly CLAMP_TO_EDGE;
|
|
77
78
|
public readonly RGB;
|
|
78
79
|
public readonly RGBA;
|
|
@@ -164,6 +165,7 @@ export class WebGlContextWrapper {
|
|
|
164
165
|
this.TEXTURE_WRAP_S = gl.TEXTURE_WRAP_S;
|
|
165
166
|
this.TEXTURE_WRAP_T = gl.TEXTURE_WRAP_T;
|
|
166
167
|
this.LINEAR = gl.LINEAR;
|
|
168
|
+
this.LINEAR_MIPMAP_LINEAR = gl.LINEAR_MIPMAP_LINEAR;
|
|
167
169
|
this.CLAMP_TO_EDGE = gl.CLAMP_TO_EDGE;
|
|
168
170
|
this.RGB = gl.RGB;
|
|
169
171
|
this.RGBA = gl.RGBA;
|
|
@@ -1327,6 +1329,44 @@ export class WebGlContextWrapper {
|
|
|
1327
1329
|
(this.gl as WebGL2RenderingContext).deleteVertexArray(vertexArray);
|
|
1328
1330
|
}
|
|
1329
1331
|
}
|
|
1332
|
+
|
|
1333
|
+
/**
|
|
1334
|
+
* Check for WebGL errors and return error information
|
|
1335
|
+
* @param operation Description of the operation for error reporting
|
|
1336
|
+
* @returns Object with error information or null if no error
|
|
1337
|
+
*/
|
|
1338
|
+
checkError(
|
|
1339
|
+
operation: string,
|
|
1340
|
+
): { error: number; errorName: string; message: string } | null {
|
|
1341
|
+
const error = this.getError();
|
|
1342
|
+
if (error !== 0) {
|
|
1343
|
+
// 0 is GL_NO_ERROR
|
|
1344
|
+
let errorName = 'UNKNOWN_ERROR';
|
|
1345
|
+
switch (error) {
|
|
1346
|
+
case this.INVALID_ENUM:
|
|
1347
|
+
errorName = 'INVALID_ENUM';
|
|
1348
|
+
break;
|
|
1349
|
+
case 0x0501: // GL_INVALID_VALUE
|
|
1350
|
+
errorName = 'INVALID_VALUE';
|
|
1351
|
+
break;
|
|
1352
|
+
case this.INVALID_OPERATION:
|
|
1353
|
+
errorName = 'INVALID_OPERATION';
|
|
1354
|
+
break;
|
|
1355
|
+
case 0x0505: // GL_OUT_OF_MEMORY
|
|
1356
|
+
errorName = 'OUT_OF_MEMORY';
|
|
1357
|
+
break;
|
|
1358
|
+
case 0x9242: // GL_CONTEXT_LOST_WEBGL
|
|
1359
|
+
errorName = 'CONTEXT_LOST_WEBGL';
|
|
1360
|
+
break;
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
const message = `WebGL ${errorName} (0x${error.toString(
|
|
1364
|
+
16,
|
|
1365
|
+
)}) during ${operation}`;
|
|
1366
|
+
return { error, errorName, message };
|
|
1367
|
+
}
|
|
1368
|
+
return null;
|
|
1369
|
+
}
|
|
1330
1370
|
}
|
|
1331
1371
|
|
|
1332
1372
|
// prettier-ignore
|
|
@@ -0,0 +1,118 @@
|
|
|
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 { CoreNode } from '../CoreNode.js';
|
|
21
|
+
|
|
22
|
+
//Bucket sort implementation for sorting CoreNode arrays by zIndex
|
|
23
|
+
export const bucketSortByZIndex = (nodes: CoreNode[], min: number): void => {
|
|
24
|
+
const buckets: CoreNode[][] = [];
|
|
25
|
+
const bucketIndices: number[] = [];
|
|
26
|
+
//distribute nodes into buckets
|
|
27
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
28
|
+
const node = nodes[i]!;
|
|
29
|
+
const index = node.props.zIndex - min;
|
|
30
|
+
//create bucket if it doesn't exist
|
|
31
|
+
if (buckets[index] === undefined) {
|
|
32
|
+
buckets[index] = [];
|
|
33
|
+
bucketIndices.push(index);
|
|
34
|
+
}
|
|
35
|
+
buckets[index]!.push(node);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//sort each bucket using insertion sort
|
|
39
|
+
for (let i = 1; i < bucketIndices.length; i++) {
|
|
40
|
+
const key = bucketIndices[i]!;
|
|
41
|
+
let j = i - 1;
|
|
42
|
+
while (j >= 0 && bucketIndices[j]! > key) {
|
|
43
|
+
bucketIndices[j + 1] = bucketIndices[j]!;
|
|
44
|
+
j--;
|
|
45
|
+
}
|
|
46
|
+
bucketIndices[j + 1] = key;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
//flatten buckets
|
|
50
|
+
let idx = 0;
|
|
51
|
+
for (let i = 0; i < bucketIndices.length; i++) {
|
|
52
|
+
const bucket = buckets[bucketIndices[i]!]!;
|
|
53
|
+
for (let j = 0; j < bucket.length; j++) {
|
|
54
|
+
nodes[idx++] = bucket[j]!;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//clean up
|
|
59
|
+
buckets.length = 0;
|
|
60
|
+
bucketIndices.length = 0;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const incrementalRepositionByZIndex = (
|
|
64
|
+
changedNodes: CoreNode[],
|
|
65
|
+
nodes: CoreNode[],
|
|
66
|
+
): void => {
|
|
67
|
+
for (let i = 0; i < changedNodes.length; i++) {
|
|
68
|
+
const node = changedNodes[i]!;
|
|
69
|
+
const currentIndex = findChildIndexById(node, nodes);
|
|
70
|
+
if (currentIndex === -1) continue;
|
|
71
|
+
|
|
72
|
+
const targetZIndex = node.props.zIndex;
|
|
73
|
+
|
|
74
|
+
//binary search for correct insertion position
|
|
75
|
+
let left = 0;
|
|
76
|
+
let right = nodes.length;
|
|
77
|
+
|
|
78
|
+
while (left < right) {
|
|
79
|
+
const mid = (left + right) >>> 1;
|
|
80
|
+
if (nodes[mid]!.props.zIndex <= targetZIndex) {
|
|
81
|
+
left = mid + 1;
|
|
82
|
+
} else {
|
|
83
|
+
right = mid;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
//adjust target position if it's after the current position
|
|
88
|
+
const targetIndex = left > currentIndex ? left - 1 : left;
|
|
89
|
+
|
|
90
|
+
//only reposition if target is different from current
|
|
91
|
+
if (targetIndex !== currentIndex) {
|
|
92
|
+
nodes.splice(currentIndex, 1);
|
|
93
|
+
nodes.splice(targetIndex, 0, node);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export const findChildIndexById = (
|
|
99
|
+
node: CoreNode,
|
|
100
|
+
children: CoreNode[],
|
|
101
|
+
): number => {
|
|
102
|
+
for (let i = 0; i < children.length; i++) {
|
|
103
|
+
const child = children[i]!;
|
|
104
|
+
|
|
105
|
+
// @ts-ignore - accessing protected property
|
|
106
|
+
if (child._id === node._id) {
|
|
107
|
+
return i;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return -1;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export const removeChild = (node: CoreNode, children: CoreNode[]): void => {
|
|
114
|
+
const index = findChildIndexById(node, children);
|
|
115
|
+
if (index !== -1) {
|
|
116
|
+
children.splice(index, 1);
|
|
117
|
+
}
|
|
118
|
+
};
|