@lightningjs/renderer 3.0.0-beta8 → 3.0.0
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 +230 -147
- package/dist/exports/canvas.d.ts +1 -1
- package/dist/exports/canvas.js +1 -1
- package/dist/exports/canvas.js.map +1 -1
- package/dist/exports/index.d.ts +5 -6
- package/dist/exports/index.js +3 -5
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/platform.d.ts +7 -0
- package/dist/exports/platform.js +27 -0
- package/dist/exports/platform.js.map +1 -0
- package/dist/exports/webgl.d.ts +2 -1
- package/dist/exports/webgl.js +2 -1
- package/dist/exports/webgl.js.map +1 -1
- package/dist/src/common/CommonTypes.d.ts +15 -3
- package/dist/src/core/AutosizeManager.d.ts +29 -0
- package/dist/src/core/AutosizeManager.js +169 -0
- package/dist/src/core/AutosizeManager.js.map +1 -0
- package/dist/src/core/Autosizer.d.ts +35 -0
- package/dist/src/core/Autosizer.js +196 -0
- package/dist/src/core/Autosizer.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +106 -58
- package/dist/src/core/CoreNode.js +530 -282
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +73 -88
- package/dist/src/core/CoreTextNode.js +375 -236
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +23 -26
- package/dist/src/core/CoreTextureManager.js +60 -166
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +63 -9
- package/dist/src/core/Stage.js +233 -133
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureError.d.ts +11 -0
- package/dist/src/core/TextureError.js +37 -0
- package/dist/src/core/TextureError.js.map +1 -0
- package/dist/src/core/TextureMemoryManager.d.ts +3 -5
- package/dist/src/core/TextureMemoryManager.js +84 -94
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/Animation.d.ts +21 -0
- package/dist/src/core/animations/Animation.js +194 -0
- package/dist/src/core/animations/Animation.js.map +1 -0
- package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
- package/dist/src/core/animations/CoreAnimation.js +3 -3
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.d.ts +1 -1
- package/dist/src/core/animations/CoreAnimationController.js +8 -5
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/animations/Playback.d.ts +64 -0
- package/dist/src/core/animations/Playback.js +169 -0
- package/dist/src/core/animations/Playback.js.map +1 -0
- package/dist/src/core/animations/Transition.d.ts +27 -0
- package/dist/src/core/animations/Transition.js +52 -0
- package/dist/src/core/animations/Transition.js.map +1 -0
- package/dist/src/core/animations/utils.d.ts +2 -0
- package/dist/src/core/animations/utils.js +136 -0
- package/dist/src/core/animations/utils.js.map +1 -0
- package/dist/src/core/lib/ImageWorker.d.ts +2 -2
- package/dist/src/core/lib/ImageWorker.js +30 -11
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
- package/dist/src/core/lib/WebGlContextWrapper.js +105 -28
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/collectionUtils.d.ts +4 -0
- package/dist/src/core/lib/collectionUtils.js +72 -0
- package/dist/src/core/lib/collectionUtils.js.map +1 -0
- package/dist/src/core/lib/colorCache.d.ts +1 -0
- package/dist/src/core/lib/colorCache.js +19 -0
- package/dist/src/core/lib/colorCache.js.map +1 -0
- package/dist/src/core/lib/colorParser.d.ts +21 -0
- package/dist/src/core/lib/colorParser.js +72 -0
- package/dist/src/core/lib/colorParser.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +14 -2
- package/dist/src/core/lib/textureCompression.js +320 -67
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +6 -6
- package/dist/src/core/lib/utils.js +21 -65
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/platform.d.ts +10 -0
- package/dist/src/core/platform.js +81 -0
- package/dist/src/core/platform.js.map +1 -0
- package/dist/src/core/platforms/GlContextWrapper.d.ts +136 -0
- package/{src/core/text-rendering/TextRenderingUtils.ts → dist/src/core/platforms/GlContextWrapper.js} +32 -36
- package/dist/src/core/platforms/GlContextWrapper.js.map +1 -0
- package/dist/src/core/platforms/Platform.d.ts +78 -12
- package/dist/src/core/platforms/Platform.js +18 -0
- package/dist/src/core/platforms/Platform.js.map +1 -1
- package/dist/src/core/platforms/web/WebGlContextWrapper.d.ts +776 -0
- package/dist/src/core/platforms/web/WebGlContextWrapper.js +1208 -0
- package/dist/src/core/platforms/web/WebGlContextWrapper.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatform.d.ts +17 -2
- package/dist/src/core/platforms/web/WebPlatform.js +158 -13
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
- package/dist/src/core/platforms/web/WebPlatformChrome50.d.ts +19 -0
- package/dist/src/core/platforms/web/WebPlatformChrome50.js +54 -0
- package/dist/src/core/platforms/web/WebPlatformChrome50.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatformLegacy.d.ts +20 -0
- package/dist/src/core/platforms/web/WebPlatformLegacy.js +105 -0
- package/dist/src/core/platforms/web/WebPlatformLegacy.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatformNext.d.ts +21 -0
- package/dist/src/core/platforms/web/WebPlatformNext.js +52 -0
- package/dist/src/core/platforms/web/WebPlatformNext.js.map +1 -0
- package/dist/src/core/platforms/web/lib/ImageWorker.d.ts +21 -0
- package/dist/src/core/platforms/web/lib/ImageWorker.js +136 -0
- package/dist/src/core/platforms/web/lib/ImageWorker.js.map +1 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerDefault.d.ts +6 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js +92 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js.map +1 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.d.ts +1 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js +63 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js.map +1 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.d.ts +7 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js +75 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js.map +1 -0
- package/dist/src/core/platforms/web/lib/createImageBitmap.d.ts +1 -0
- package/dist/src/core/platforms/web/lib/createImageBitmap.js +27 -0
- package/dist/src/core/platforms/web/lib/createImageBitmap.js.map +1 -0
- package/dist/src/core/platforms/web/lib/textureCompression.d.ts +26 -0
- package/dist/src/core/platforms/web/lib/textureCompression.js +301 -0
- package/dist/src/core/platforms/web/lib/textureCompression.js.map +1 -0
- package/dist/src/core/platforms/web/lib/textureSvg.d.ts +7 -0
- package/dist/src/core/platforms/web/lib/textureSvg.js +51 -0
- package/dist/src/core/platforms/web/lib/textureSvg.js.map +1 -0
- package/dist/src/core/platforms/web/lib/utils.d.ts +5 -0
- package/dist/src/core/platforms/web/lib/utils.js +86 -0
- package/dist/src/core/platforms/web/lib/utils.js.map +1 -0
- package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +4 -40
- package/dist/src/core/renderers/CoreRenderer.js +3 -4
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShader.d.ts +9 -0
- package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts → dist/src/core/renderers/CoreShader.js} +28 -32
- package/dist/src/core/renderers/CoreShader.js.map +1 -0
- package/dist/src/core/renderers/CoreShaderNode.d.ts +10 -0
- package/dist/src/core/renderers/CoreShaderNode.js +19 -2
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +5 -6
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +67 -91
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +5 -4
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
- package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
- package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts → dist/src/core/renderers/canvas/shaders/UnsupportedShader.js} +43 -40
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +98 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +69 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +272 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +649 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +78 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +202 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +4 -2
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +15 -2
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +19 -9
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +101 -49
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -23
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +122 -133
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +4 -6
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +3 -3
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +11 -9
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +83 -46
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -4
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -3
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +38 -37
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +84 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +108 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +408 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +126 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +148 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +134 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +40 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +143 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
- package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
- package/dist/src/core/shaders/canvas/Border.js +64 -25
- package/dist/src/core/shaders/canvas/Border.js.map +1 -1
- package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js +12 -10
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/Rounded.js +3 -3
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +41 -11
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +46 -9
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +6 -5
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/Shadow.js +4 -2
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
- package/dist/src/core/shaders/canvas/utils/render.js +31 -18
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +11 -1
- package/dist/src/core/shaders/templates/BorderTemplate.js +30 -10
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +2 -2
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/webgl/Border.js +138 -84
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/Default.js +46 -47
- package/dist/src/core/shaders/webgl/Default.js.map +1 -1
- package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
- package/dist/src/core/shaders/webgl/HolePunch.js +34 -34
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +60 -36
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +60 -37
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/Rounded.js +74 -72
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +172 -113
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +191 -132
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +57 -55
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
- package/dist/src/core/shaders/webgl/SdfShader.js +56 -66
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
- package/dist/src/core/shaders/webgl/Shadow.js +89 -83
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFont.d.ts +14 -0
- package/dist/src/core/text-rendering/CanvasFont.js +111 -0
- package/dist/src/core/text-rendering/CanvasFont.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/CoreFont.d.ts +33 -0
- package/dist/src/core/text-rendering/CoreFont.js +48 -0
- package/dist/src/core/text-rendering/CoreFont.js.map +1 -0
- package/dist/src/core/text-rendering/FontManager.d.ts +11 -0
- package/dist/src/core/text-rendering/FontManager.js +42 -0
- package/dist/src/core/text-rendering/FontManager.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFont.d.ts +29 -0
- package/dist/src/core/text-rendering/SdfFont.js +142 -0
- package/dist/src/core/text-rendering/SdfFont.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +381 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
- package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts → dist/src/core/text-rendering/TextRenderer.js} +20 -38
- package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
- package/dist/src/core/text-rendering/Utils.d.ts +30 -0
- package/dist/src/core/text-rendering/Utils.js +84 -0
- package/dist/src/core/text-rendering/Utils.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -5
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -7
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +2 -50
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +87 -46
- 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 +8 -66
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -14
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -3
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
- package/dist/src/core/textures/ColorTexture.d.ts +1 -1
- package/dist/src/core/textures/ColorTexture.js +3 -4
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +33 -14
- package/dist/src/core/textures/ImageTexture.js +46 -125
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
- package/dist/src/core/textures/NoiseTexture.js +8 -8
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.d.ts +7 -7
- package/dist/src/core/textures/RenderTexture.js +12 -12
- package/dist/src/core/textures/RenderTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +6 -8
- package/dist/src/core/textures/SubTexture.js +22 -40
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +74 -11
- package/dist/src/core/textures/Texture.js +136 -18
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +2 -1
- package/dist/src/core/utils.js +1 -1
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
- package/dist/src/main-api/DynamicShaderController.js +58 -0
- package/dist/src/main-api/DynamicShaderController.js.map +1 -0
- package/dist/src/main-api/Inspector.d.ts +129 -1
- package/dist/src/main-api/Inspector.js +462 -23
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +223 -41
- package/dist/src/main-api/Renderer.js +107 -62
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/main-api/ShaderController.d.ts +31 -0
- package/dist/src/main-api/ShaderController.js +37 -0
- package/dist/src/main-api/ShaderController.js.map +1 -0
- package/dist/src/utils.d.ts +0 -2
- package/dist/src/utils.js +0 -36
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/exports/canvas-shaders.ts +28 -28
- package/exports/canvas.ts +45 -45
- package/exports/index.ts +90 -90
- package/exports/inspector.ts +24 -24
- package/exports/platform.ts +31 -0
- package/exports/utils.ts +50 -50
- package/exports/webgl-shaders.ts +28 -28
- package/exports/webgl.ts +52 -50
- package/package.json +16 -15
- package/src/common/CommonTypes.ts +163 -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/Autosizer.ts +224 -0
- package/src/core/CoreNode.test.ts +365 -202
- package/src/core/CoreNode.ts +2785 -2483
- package/src/core/CoreShaderManager.ts +188 -188
- package/src/core/CoreTextNode.test.ts +311 -0
- package/src/core/CoreTextNode.ts +598 -451
- package/src/core/CoreTextureManager.ts +484 -608
- package/src/core/Stage.ts +927 -800
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +418 -435
- package/src/core/animations/AnimationManager.ts +38 -38
- package/src/core/animations/CoreAnimation.ts +290 -291
- package/src/core/animations/CoreAnimationController.ts +169 -164
- package/src/core/lib/ContextSpy.ts +41 -41
- package/src/core/lib/Matrix3d.ts +244 -244
- package/src/core/lib/RenderCoords.ts +71 -71
- package/src/core/lib/collectionUtils.ts +83 -0
- package/src/core/lib/colorCache.ts +20 -0
- package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +85 -85
- package/src/core/lib/utils.ts +337 -390
- package/src/core/platforms/GlContextWrapper.ts +291 -0
- package/src/core/platforms/Platform.ts +176 -77
- package/src/core/{lib → platforms/web}/WebGlContextWrapper.ts +1547 -1374
- package/src/core/platforms/web/WebPlatform.ts +306 -84
- package/src/core/platforms/web/WebPlatformChrome50.ts +63 -0
- package/src/core/platforms/web/WebPlatformLegacy.ts +150 -0
- package/src/core/platforms/web/WebPlatformNext.ts +57 -0
- package/src/core/platforms/web/lib/ImageWorker.ts +192 -0
- package/src/core/platforms/web/lib/ImageWorkerDefault.ts +117 -0
- package/src/core/platforms/web/lib/ImageWorkerLegacy.ts +87 -0
- package/src/core/platforms/web/lib/ImageWorkerNoOptions.ts +99 -0
- package/src/core/platforms/web/lib/createImageBitmap.ts +40 -0
- package/src/core/platforms/web/lib/textureCompression.ts +391 -0
- package/src/core/{lib → platforms/web/lib}/textureSvg.ts +66 -78
- package/src/core/platforms/web/lib/utils.ts +105 -0
- package/src/core/renderers/CoreContextTexture.ts +44 -43
- package/src/core/renderers/CoreRenderOp.ts +22 -22
- package/src/core/renderers/CoreRenderer.ts +71 -110
- package/src/core/renderers/CoreShaderNode.ts +202 -175
- package/src/core/renderers/CoreShaderProgram.ts +23 -23
- package/src/core/renderers/canvas/CanvasRenderer.ts +258 -302
- package/src/core/renderers/canvas/CanvasShaderNode.ts +95 -96
- package/src/core/renderers/canvas/CanvasTexture.ts +160 -156
- package/src/core/renderers/webgl/SdfRenderOp.ts +106 -0
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +89 -86
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +95 -50
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +350 -298
- package/src/core/renderers/webgl/WebGlRenderer.ts +726 -747
- package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -435
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +362 -318
- package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
- package/src/core/renderers/webgl/internal/RendererUtils.ts +151 -155
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +283 -281
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
- package/src/core/shaders/canvas/Border.ts +132 -78
- package/src/core/shaders/canvas/HolePunch.ts +56 -62
- package/src/core/shaders/canvas/LinearGradient.ts +73 -71
- package/src/core/shaders/canvas/RadialGradient.ts +96 -99
- package/src/core/shaders/canvas/Rounded.ts +55 -55
- package/src/core/shaders/canvas/RoundedWithBorder.ts +122 -74
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +136 -90
- package/src/core/shaders/canvas/RoundedWithShadow.ts +71 -70
- package/src/core/shaders/canvas/Shadow.ts +54 -52
- package/src/core/shaders/canvas/utils/render.ts +160 -151
- package/src/core/shaders/templates/BorderTemplate.ts +145 -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 +83 -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/utils.ts +46 -46
- package/src/core/shaders/webgl/Border.ts +169 -116
- package/src/core/shaders/webgl/Default.ts +88 -89
- package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
- package/src/core/shaders/webgl/HolePunch.ts +75 -75
- package/src/core/shaders/webgl/LinearGradient.ts +106 -82
- package/src/core/shaders/webgl/RadialGradient.ts +108 -85
- package/src/core/shaders/webgl/Rounded.ts +115 -117
- package/src/core/shaders/webgl/RoundedWithBorder.ts +210 -155
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +234 -175
- package/src/core/shaders/webgl/RoundedWithShadow.ts +96 -98
- package/src/core/shaders/webgl/SdfShader.ts +122 -134
- package/src/core/shaders/webgl/Shadow.ts +121 -115
- package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
- package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
- package/src/core/text-rendering/SdfFontHandler.ts +584 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +403 -0
- package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
- package/src/core/text-rendering/TextRenderer.ts +444 -0
- package/src/core/text-rendering/Utils.ts +99 -0
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
- package/src/core/textures/ColorTexture.ts +104 -102
- package/src/core/textures/ImageTexture.ts +292 -418
- package/src/core/textures/NoiseTexture.ts +106 -104
- package/src/core/textures/RenderTexture.ts +87 -85
- package/src/core/textures/SubTexture.ts +184 -205
- package/src/core/textures/Texture.ts +524 -372
- package/src/core/utils.ts +229 -227
- package/src/env.d.ts +7 -7
- package/src/main-api/INode.ts +100 -100
- package/src/main-api/Inspector.ts +1278 -569
- package/src/main-api/Renderer.ts +1030 -818
- package/src/main-api/utils.ts +45 -45
- package/src/utils.ts +220 -267
- package/COPYING +0 -1
- package/src/core/lib/ImageWorker.ts +0 -286
- package/src/core/lib/textureCompression.ts +0 -152
- package/src/core/lib/validateImageBitmap.ts +0 -87
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
- package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
- package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
- package/src/core/text-rendering/TrFontManager.ts +0 -183
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
- package/src/core/text-rendering/font-face-types/utils.ts +0 -39
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -514
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -863
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -793
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -497
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
- package/src/core/text-rendering/renderers/TextRenderer.ts +0 -567
|
@@ -24,6 +24,8 @@ import { Matrix3d } from './lib/Matrix3d.js';
|
|
|
24
24
|
import { RenderCoords } from './lib/RenderCoords.js';
|
|
25
25
|
import { CoreAnimation } from './animations/CoreAnimation.js';
|
|
26
26
|
import { CoreAnimationController } from './animations/CoreAnimationController.js';
|
|
27
|
+
import { AutosizeMode, Autosizer } from './Autosizer.js';
|
|
28
|
+
import { bucketSortByZIndex, removeChild } from './lib/collectionUtils.js';
|
|
27
29
|
export var CoreNodeRenderState;
|
|
28
30
|
(function (CoreNodeRenderState) {
|
|
29
31
|
CoreNodeRenderState[CoreNodeRenderState["Init"] = 0] = "Init";
|
|
@@ -31,6 +33,13 @@ export var CoreNodeRenderState;
|
|
|
31
33
|
CoreNodeRenderState[CoreNodeRenderState["InBounds"] = 4] = "InBounds";
|
|
32
34
|
CoreNodeRenderState[CoreNodeRenderState["InViewport"] = 8] = "InViewport";
|
|
33
35
|
})(CoreNodeRenderState || (CoreNodeRenderState = {}));
|
|
36
|
+
const NO_CLIPPING_RECT = {
|
|
37
|
+
x: 0,
|
|
38
|
+
y: 0,
|
|
39
|
+
w: 0,
|
|
40
|
+
h: 0,
|
|
41
|
+
valid: false,
|
|
42
|
+
};
|
|
34
43
|
const CoreNodeRenderStateMap = new Map();
|
|
35
44
|
CoreNodeRenderStateMap.set(CoreNodeRenderState.Init, 'init');
|
|
36
45
|
CoreNodeRenderStateMap.set(CoreNodeRenderState.OutOfBounds, 'outOfBounds');
|
|
@@ -69,21 +78,13 @@ export var UpdateType;
|
|
|
69
78
|
*/
|
|
70
79
|
UpdateType[UpdateType["Clipping"] = 8] = "Clipping";
|
|
71
80
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* @remarks
|
|
75
|
-
* CoreNode Properties Updated:
|
|
76
|
-
* - `calcZIndex`
|
|
77
|
-
*/
|
|
78
|
-
UpdateType[UpdateType["CalculatedZIndex"] = 16] = "CalculatedZIndex";
|
|
79
|
-
/**
|
|
80
|
-
* Z-Index Sorted Children update
|
|
81
|
+
* Sort Z-Index Children update
|
|
81
82
|
*
|
|
82
83
|
* @remarks
|
|
83
84
|
* CoreNode Properties Updated:
|
|
84
85
|
* - `children` (sorts children by their `calcZIndex`)
|
|
85
86
|
*/
|
|
86
|
-
UpdateType[UpdateType["
|
|
87
|
+
UpdateType[UpdateType["SortZIndexChildren"] = 16] = "SortZIndexChildren";
|
|
87
88
|
/**
|
|
88
89
|
* Premultiplied Colors update
|
|
89
90
|
*
|
|
@@ -94,7 +95,7 @@ export var UpdateType;
|
|
|
94
95
|
* - `premultipliedColorBl`
|
|
95
96
|
* - `premultipliedColorBr`
|
|
96
97
|
*/
|
|
97
|
-
UpdateType[UpdateType["PremultipliedColors"] =
|
|
98
|
+
UpdateType[UpdateType["PremultipliedColors"] = 32] = "PremultipliedColors";
|
|
98
99
|
/**
|
|
99
100
|
* World Alpha update
|
|
100
101
|
*
|
|
@@ -102,7 +103,7 @@ export var UpdateType;
|
|
|
102
103
|
* CoreNode Properties Updated:
|
|
103
104
|
* - `worldAlpha` = `parent.worldAlpha` * `alpha`
|
|
104
105
|
*/
|
|
105
|
-
UpdateType[UpdateType["WorldAlpha"] =
|
|
106
|
+
UpdateType[UpdateType["WorldAlpha"] = 64] = "WorldAlpha";
|
|
106
107
|
/**
|
|
107
108
|
* Render State update
|
|
108
109
|
*
|
|
@@ -110,7 +111,7 @@ export var UpdateType;
|
|
|
110
111
|
* CoreNode Properties Updated:
|
|
111
112
|
* - `renderState`
|
|
112
113
|
*/
|
|
113
|
-
UpdateType[UpdateType["RenderState"] =
|
|
114
|
+
UpdateType[UpdateType["RenderState"] = 128] = "RenderState";
|
|
114
115
|
/**
|
|
115
116
|
* Is Renderable update
|
|
116
117
|
*
|
|
@@ -118,23 +119,27 @@ export var UpdateType;
|
|
|
118
119
|
* CoreNode Properties Updated:
|
|
119
120
|
* - `isRenderable`
|
|
120
121
|
*/
|
|
121
|
-
UpdateType[UpdateType["IsRenderable"] =
|
|
122
|
+
UpdateType[UpdateType["IsRenderable"] = 256] = "IsRenderable";
|
|
122
123
|
/**
|
|
123
124
|
* Render Texture update
|
|
124
125
|
*/
|
|
125
|
-
UpdateType[UpdateType["RenderTexture"] =
|
|
126
|
+
UpdateType[UpdateType["RenderTexture"] = 512] = "RenderTexture";
|
|
126
127
|
/**
|
|
127
128
|
* Track if parent has render texture
|
|
128
129
|
*/
|
|
129
|
-
UpdateType[UpdateType["ParentRenderTexture"] =
|
|
130
|
+
UpdateType[UpdateType["ParentRenderTexture"] = 1024] = "ParentRenderTexture";
|
|
130
131
|
/**
|
|
131
132
|
* Render Bounds update
|
|
132
133
|
*/
|
|
133
|
-
UpdateType[UpdateType["RenderBounds"] =
|
|
134
|
+
UpdateType[UpdateType["RenderBounds"] = 2048] = "RenderBounds";
|
|
134
135
|
/**
|
|
135
136
|
* RecalcUniforms
|
|
136
137
|
*/
|
|
137
|
-
UpdateType[UpdateType["RecalcUniforms"] =
|
|
138
|
+
UpdateType[UpdateType["RecalcUniforms"] = 4096] = "RecalcUniforms";
|
|
139
|
+
/**
|
|
140
|
+
* Autosize update
|
|
141
|
+
*/
|
|
142
|
+
UpdateType[UpdateType["Autosize"] = 8192] = "Autosize";
|
|
138
143
|
/**
|
|
139
144
|
* None
|
|
140
145
|
*/
|
|
@@ -157,8 +162,17 @@ export class CoreNode extends EventEmitter {
|
|
|
157
162
|
children = [];
|
|
158
163
|
_id = getNewId();
|
|
159
164
|
props;
|
|
165
|
+
isCoreNode = true;
|
|
166
|
+
// WebGL Render Op State
|
|
167
|
+
renderOpBufferIdx = 0;
|
|
168
|
+
numQuads = 0;
|
|
169
|
+
renderOpTextures = [];
|
|
160
170
|
hasShaderUpdater = false;
|
|
171
|
+
hasShaderTimeFn = false;
|
|
161
172
|
hasColorProps = false;
|
|
173
|
+
zIndexMin = 0;
|
|
174
|
+
zIndexMax = 0;
|
|
175
|
+
previousZIndex = -1;
|
|
162
176
|
updateType = UpdateType.All;
|
|
163
177
|
childUpdateType = UpdateType.None;
|
|
164
178
|
globalTransform;
|
|
@@ -172,12 +186,12 @@ export class CoreNode extends EventEmitter {
|
|
|
172
186
|
clippingRect = {
|
|
173
187
|
x: 0,
|
|
174
188
|
y: 0,
|
|
175
|
-
|
|
176
|
-
|
|
189
|
+
w: 0,
|
|
190
|
+
h: 0,
|
|
177
191
|
valid: false,
|
|
178
192
|
};
|
|
179
193
|
textureCoords;
|
|
180
|
-
|
|
194
|
+
updateShaderUniforms = false;
|
|
181
195
|
isRenderable = false;
|
|
182
196
|
renderState = CoreNodeRenderState.Init;
|
|
183
197
|
worldAlpha = 1;
|
|
@@ -193,16 +207,23 @@ export class CoreNode extends EventEmitter {
|
|
|
193
207
|
* only used when rtt = true
|
|
194
208
|
*/
|
|
195
209
|
framebufferDimensions = null;
|
|
210
|
+
/**Autosize properties */
|
|
211
|
+
autosizer = null;
|
|
212
|
+
parentAutosizer = null;
|
|
196
213
|
destroyed = false;
|
|
197
214
|
constructor(stage, props) {
|
|
198
215
|
super();
|
|
199
216
|
this.stage = stage;
|
|
200
217
|
const p = (this.props = {});
|
|
218
|
+
// Initialize the renderOpTextures array with a capacity of 16 (typical max textures)
|
|
219
|
+
this.renderOpTextures = [];
|
|
220
|
+
//inital update type
|
|
221
|
+
let initialUpdateType = UpdateType.Local | UpdateType.RenderBounds | UpdateType.RenderState;
|
|
201
222
|
// Fast-path assign only known keys
|
|
202
223
|
p.x = props.x;
|
|
203
224
|
p.y = props.y;
|
|
204
|
-
p.
|
|
205
|
-
p.
|
|
225
|
+
p.w = props.w;
|
|
226
|
+
p.h = props.h;
|
|
206
227
|
p.alpha = props.alpha;
|
|
207
228
|
p.autosize = props.autosize;
|
|
208
229
|
p.clipping = props.clipping;
|
|
@@ -215,6 +236,19 @@ export class CoreNode extends EventEmitter {
|
|
|
215
236
|
p.colorTr = props.colorTr;
|
|
216
237
|
p.colorBl = props.colorBl;
|
|
217
238
|
p.colorBr = props.colorBr;
|
|
239
|
+
//check if any color props are set for premultiplied color updates
|
|
240
|
+
if (props.color > 0 ||
|
|
241
|
+
props.colorTop > 0 ||
|
|
242
|
+
props.colorBottom > 0 ||
|
|
243
|
+
props.colorLeft > 0 ||
|
|
244
|
+
props.colorRight > 0 ||
|
|
245
|
+
props.colorTl > 0 ||
|
|
246
|
+
props.colorTr > 0 ||
|
|
247
|
+
props.colorBl > 0 ||
|
|
248
|
+
props.colorBr > 0) {
|
|
249
|
+
this.hasColorProps = true;
|
|
250
|
+
initialUpdateType |= UpdateType.PremultipliedColors;
|
|
251
|
+
}
|
|
218
252
|
p.scaleX = props.scaleX;
|
|
219
253
|
p.scaleY = props.scaleY;
|
|
220
254
|
p.rotation = props.rotation;
|
|
@@ -224,9 +258,7 @@ export class CoreNode extends EventEmitter {
|
|
|
224
258
|
p.mountY = props.mountY;
|
|
225
259
|
p.mount = props.mount;
|
|
226
260
|
p.pivot = props.pivot;
|
|
227
|
-
p.strictBounds = props.strictBounds;
|
|
228
261
|
p.zIndex = props.zIndex;
|
|
229
|
-
p.zIndexLocked = props.zIndexLocked;
|
|
230
262
|
p.textureOptions = props.textureOptions;
|
|
231
263
|
p.data = props.data;
|
|
232
264
|
p.imageType = props.imageType;
|
|
@@ -234,67 +266,79 @@ export class CoreNode extends EventEmitter {
|
|
|
234
266
|
p.srcY = props.srcY;
|
|
235
267
|
p.srcWidth = props.srcWidth;
|
|
236
268
|
p.srcHeight = props.srcHeight;
|
|
237
|
-
p.
|
|
269
|
+
p.autosize = props.autosize;
|
|
270
|
+
p.parent = props.parent;
|
|
238
271
|
p.texture = null;
|
|
239
272
|
p.shader = null;
|
|
240
273
|
p.src = null;
|
|
241
274
|
p.rtt = false;
|
|
242
275
|
p.boundsMargin = null;
|
|
276
|
+
// Only set non-default values
|
|
277
|
+
if (props.zIndex !== 0) {
|
|
278
|
+
this.zIndex = props.zIndex;
|
|
279
|
+
}
|
|
280
|
+
if (props.parent !== null) {
|
|
281
|
+
props.parent.addChild(this);
|
|
282
|
+
}
|
|
243
283
|
// Assign props to instances
|
|
244
|
-
this.parent = props.parent;
|
|
245
284
|
this.texture = props.texture;
|
|
246
285
|
this.shader = props.shader;
|
|
247
286
|
this.src = props.src;
|
|
248
287
|
this.rtt = props.rtt;
|
|
249
288
|
this.boundsMargin = props.boundsMargin;
|
|
250
289
|
this.interactive = props.interactive;
|
|
251
|
-
|
|
290
|
+
// Initialize autosize if enabled
|
|
291
|
+
if (p.autosize === true) {
|
|
292
|
+
this.autosizer = new Autosizer(this);
|
|
293
|
+
}
|
|
294
|
+
this.setUpdateType(initialUpdateType);
|
|
252
295
|
// if the default texture isn't loaded yet, wait for it to load
|
|
253
296
|
// this only happens when the node is created before the stage is ready
|
|
254
|
-
const dt =
|
|
297
|
+
const dt = stage.defaultTexture;
|
|
255
298
|
if (dt !== null && dt.state !== 'loaded') {
|
|
256
299
|
dt.once('loaded', () => this.setUpdateType(UpdateType.IsRenderable));
|
|
257
300
|
}
|
|
258
301
|
}
|
|
259
302
|
//#region Textures
|
|
260
303
|
loadTexture() {
|
|
261
|
-
|
|
262
|
-
if (!texture) {
|
|
304
|
+
if (this.props.texture === null) {
|
|
263
305
|
return;
|
|
264
306
|
}
|
|
265
307
|
// If texture is already loaded / failed, trigger loaded event manually
|
|
266
308
|
// so that users get a consistent event experience.
|
|
267
309
|
// We do this in a microtask to allow listeners to be attached in the same
|
|
268
310
|
// synchronous task after calling loadTexture()
|
|
269
|
-
queueMicrotask(
|
|
270
|
-
if (this.textureOptions.preload === true) {
|
|
271
|
-
this.stage.txManager.loadTexture(texture);
|
|
272
|
-
}
|
|
273
|
-
texture.preventCleanup =
|
|
274
|
-
this.props.textureOptions?.preventCleanup ?? false;
|
|
275
|
-
texture.on('loaded', this.onTextureLoaded);
|
|
276
|
-
texture.on('failed', this.onTextureFailed);
|
|
277
|
-
texture.on('freed', this.onTextureFreed);
|
|
278
|
-
// If the parent is a render texture, the initial texture status
|
|
279
|
-
// will be set to freed until the texture is processed by the
|
|
280
|
-
// Render RTT nodes. So we only need to listen fo changes and
|
|
281
|
-
// no need to check the texture.state until we restructure how
|
|
282
|
-
// textures are being processed.
|
|
283
|
-
if (this.parentHasRenderTexture) {
|
|
284
|
-
this.notifyParentRTTOfUpdate();
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
287
|
-
if (texture.state === 'loaded') {
|
|
288
|
-
this.onTextureLoaded(texture, texture.dimensions);
|
|
289
|
-
}
|
|
290
|
-
else if (texture.state === 'failed') {
|
|
291
|
-
this.onTextureFailed(texture, texture.error);
|
|
292
|
-
}
|
|
293
|
-
else if (texture.state === 'freed') {
|
|
294
|
-
this.onTextureFreed(texture);
|
|
295
|
-
}
|
|
296
|
-
});
|
|
311
|
+
queueMicrotask(this.loadTextureTask);
|
|
297
312
|
}
|
|
313
|
+
/**
|
|
314
|
+
* Task for queueMicrotask to loadTexture
|
|
315
|
+
*
|
|
316
|
+
* @remarks
|
|
317
|
+
* This method is called in a microtask to release the texture.
|
|
318
|
+
*/
|
|
319
|
+
loadTextureTask = () => {
|
|
320
|
+
const texture = this.props.texture;
|
|
321
|
+
//it is possible that texture is null here if user sets the texture to null right after loadTexture call
|
|
322
|
+
if (texture === null) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
if (this.textureOptions.preload === true) {
|
|
326
|
+
this.stage.txManager.loadTexture(texture);
|
|
327
|
+
}
|
|
328
|
+
texture.preventCleanup = this.props.textureOptions?.preventCleanup ?? false;
|
|
329
|
+
texture.on('loaded', this.onTextureLoaded);
|
|
330
|
+
texture.on('failed', this.onTextureFailed);
|
|
331
|
+
texture.on('freed', this.onTextureFreed);
|
|
332
|
+
if (texture.state === 'loaded') {
|
|
333
|
+
this.onTextureLoaded(texture, texture.dimensions);
|
|
334
|
+
}
|
|
335
|
+
else if (texture.state === 'failed') {
|
|
336
|
+
this.onTextureFailed(texture, texture.error);
|
|
337
|
+
}
|
|
338
|
+
else if (texture.state === 'freed') {
|
|
339
|
+
this.onTextureFreed(texture);
|
|
340
|
+
}
|
|
341
|
+
};
|
|
298
342
|
unloadTexture() {
|
|
299
343
|
if (this.texture === null) {
|
|
300
344
|
return;
|
|
@@ -303,16 +347,12 @@ export class CoreNode extends EventEmitter {
|
|
|
303
347
|
texture.off('loaded', this.onTextureLoaded);
|
|
304
348
|
texture.off('failed', this.onTextureFailed);
|
|
305
349
|
texture.off('freed', this.onTextureFreed);
|
|
306
|
-
texture.setRenderableOwner(this, false);
|
|
307
|
-
}
|
|
308
|
-
autosizeNode(dimensions) {
|
|
309
|
-
if (this.autosize) {
|
|
310
|
-
this.width = dimensions.width;
|
|
311
|
-
this.height = dimensions.height;
|
|
312
|
-
}
|
|
350
|
+
texture.setRenderableOwner(this._id, false);
|
|
313
351
|
}
|
|
314
352
|
onTextureLoaded = (_, dimensions) => {
|
|
315
|
-
this.
|
|
353
|
+
if (this.autosizer !== null) {
|
|
354
|
+
this.autosizer.update();
|
|
355
|
+
}
|
|
316
356
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
317
357
|
// Texture was loaded. In case the RAF loop has already stopped, we request
|
|
318
358
|
// a render to ensure the texture is rendered.
|
|
@@ -322,29 +362,44 @@ export class CoreNode extends EventEmitter {
|
|
|
322
362
|
this.notifyParentRTTOfUpdate();
|
|
323
363
|
}
|
|
324
364
|
// ignore 1x1 pixel textures
|
|
325
|
-
if (dimensions.
|
|
365
|
+
if (dimensions.w > 1 && dimensions.h > 1) {
|
|
326
366
|
this.emit('loaded', {
|
|
327
367
|
type: 'texture',
|
|
328
368
|
dimensions,
|
|
329
369
|
});
|
|
330
370
|
}
|
|
371
|
+
if (this.stage.calculateTextureCoord === true &&
|
|
372
|
+
this.props.textureOptions !== null) {
|
|
373
|
+
this.textureCoords = this.stage.renderer.getTextureCoords(this);
|
|
374
|
+
}
|
|
331
375
|
// Trigger a local update if the texture is loaded and the resizeMode is 'contain'
|
|
332
376
|
if (this.props.textureOptions?.resizeMode?.type === 'contain') {
|
|
333
377
|
this.setUpdateType(UpdateType.Local);
|
|
334
378
|
}
|
|
335
379
|
};
|
|
336
380
|
onTextureFailed = (_, error) => {
|
|
381
|
+
// immediately set isRenderable to false, so that we handle the error
|
|
382
|
+
// without waiting for the next frame loop
|
|
383
|
+
this.isRenderable = false;
|
|
384
|
+
this.updateTextureOwnership(false);
|
|
337
385
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
338
386
|
// If parent has a render texture, flag that we need to update
|
|
339
387
|
if (this.parentHasRenderTexture) {
|
|
340
388
|
this.notifyParentRTTOfUpdate();
|
|
341
389
|
}
|
|
342
|
-
this.
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
390
|
+
if (this.texture !== null &&
|
|
391
|
+
this.texture.retryCount > this.texture.maxRetryCount) {
|
|
392
|
+
this.emit('failed', {
|
|
393
|
+
type: 'texture',
|
|
394
|
+
error,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
346
397
|
};
|
|
347
398
|
onTextureFreed = () => {
|
|
399
|
+
// immediately set isRenderable to false, so that we handle the error
|
|
400
|
+
// without waiting for the next frame loop
|
|
401
|
+
this.isRenderable = false;
|
|
402
|
+
this.updateTextureOwnership(false);
|
|
348
403
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
349
404
|
// If parent has a render texture, flag that we need to update
|
|
350
405
|
if (this.parentHasRenderTexture) {
|
|
@@ -370,20 +425,17 @@ export class CoreNode extends EventEmitter {
|
|
|
370
425
|
return;
|
|
371
426
|
parent.setUpdateType(UpdateType.Children);
|
|
372
427
|
}
|
|
373
|
-
sortChildren() {
|
|
374
|
-
this.children.sort((a, b) => a.calcZIndex - b.calcZIndex);
|
|
375
|
-
}
|
|
376
428
|
updateLocalTransform() {
|
|
377
429
|
const p = this.props;
|
|
378
|
-
const { x, y,
|
|
379
|
-
const mountTranslateX = p.mountX *
|
|
380
|
-
const mountTranslateY = p.mountY *
|
|
430
|
+
const { x, y, w, h } = p;
|
|
431
|
+
const mountTranslateX = p.mountX * w;
|
|
432
|
+
const mountTranslateY = p.mountY * h;
|
|
381
433
|
if (p.rotation !== 0 || p.scaleX !== 1 || p.scaleY !== 1) {
|
|
382
|
-
const
|
|
383
|
-
const
|
|
434
|
+
const scaleRotate = Matrix3d.rotate(p.rotation).scale(p.scaleX, p.scaleY);
|
|
435
|
+
const pivotTranslateX = p.pivotX * w;
|
|
436
|
+
const pivotTranslateY = p.pivotY * h;
|
|
384
437
|
this.localTransform = Matrix3d.translate(x - mountTranslateX + pivotTranslateX, y - mountTranslateY + pivotTranslateY, this.localTransform)
|
|
385
|
-
.
|
|
386
|
-
.scale(p.scaleX, p.scaleY)
|
|
438
|
+
.multiply(scaleRotate)
|
|
387
439
|
.translate(-pivotTranslateX, -pivotTranslateY);
|
|
388
440
|
}
|
|
389
441
|
else {
|
|
@@ -398,26 +450,26 @@ export class CoreNode extends EventEmitter {
|
|
|
398
450
|
let resizeModeScaleY = 1;
|
|
399
451
|
let extraX = 0;
|
|
400
452
|
let extraY = 0;
|
|
401
|
-
const {
|
|
453
|
+
const { w: tw, h: th } = texture.dimensions;
|
|
402
454
|
const txAspectRatio = tw / th;
|
|
403
|
-
const nodeAspectRatio =
|
|
455
|
+
const nodeAspectRatio = w / h;
|
|
404
456
|
if (txAspectRatio > nodeAspectRatio) {
|
|
405
457
|
// Texture is wider than node
|
|
406
458
|
// Center the node vertically (shift down by extraY)
|
|
407
459
|
// Scale the node vertically to maintain original aspect ratio
|
|
408
|
-
const scaleX =
|
|
460
|
+
const scaleX = w / tw;
|
|
409
461
|
const scaledTxHeight = th * scaleX;
|
|
410
|
-
extraY = (
|
|
411
|
-
resizeModeScaleY = scaledTxHeight /
|
|
462
|
+
extraY = (h - scaledTxHeight) / 2;
|
|
463
|
+
resizeModeScaleY = scaledTxHeight / h;
|
|
412
464
|
}
|
|
413
465
|
else {
|
|
414
466
|
// Texture is taller than node (or equal)
|
|
415
467
|
// Center the node horizontally (shift right by extraX)
|
|
416
468
|
// Scale the node horizontally to maintain original aspect ratio
|
|
417
|
-
const scaleY =
|
|
469
|
+
const scaleY = h / th;
|
|
418
470
|
const scaledTxWidth = tw * scaleY;
|
|
419
|
-
extraX = (
|
|
420
|
-
resizeModeScaleX = scaledTxWidth /
|
|
471
|
+
extraX = (w - scaledTxWidth) / 2;
|
|
472
|
+
resizeModeScaleX = scaledTxWidth / w;
|
|
421
473
|
}
|
|
422
474
|
// Apply the extra translation and scale to the local transform
|
|
423
475
|
this.localTransform
|
|
@@ -430,17 +482,21 @@ export class CoreNode extends EventEmitter {
|
|
|
430
482
|
* @param delta
|
|
431
483
|
*/
|
|
432
484
|
update(delta, parentClippingRect) {
|
|
433
|
-
if (this.updateType === UpdateType.None) {
|
|
434
|
-
return;
|
|
435
|
-
}
|
|
436
485
|
const props = this.props;
|
|
437
486
|
const parent = props.parent;
|
|
438
487
|
const parentHasRenderTexture = this.parentHasRenderTexture;
|
|
439
488
|
const hasParent = props.parent !== null;
|
|
440
|
-
let
|
|
489
|
+
let newRenderState = null;
|
|
441
490
|
let updateType = this.updateType;
|
|
442
491
|
let childUpdateType = this.childUpdateType;
|
|
443
492
|
let updateParent = false;
|
|
493
|
+
//this needs to be handled before setting updateTypes are reset
|
|
494
|
+
if (updateType & UpdateType.Autosize && this.autosizer !== null) {
|
|
495
|
+
this.autosizer.update();
|
|
496
|
+
}
|
|
497
|
+
// reset update type
|
|
498
|
+
this.updateType = 0;
|
|
499
|
+
this.childUpdateType = 0;
|
|
444
500
|
if (updateType & UpdateType.Local) {
|
|
445
501
|
this.updateLocalTransform();
|
|
446
502
|
updateType |= UpdateType.Global;
|
|
@@ -474,12 +530,13 @@ export class CoreNode extends EventEmitter {
|
|
|
474
530
|
}
|
|
475
531
|
this.calculateRenderCoords();
|
|
476
532
|
this.updateBoundingRect();
|
|
477
|
-
updateType |=
|
|
478
|
-
UpdateType.RenderState |
|
|
479
|
-
UpdateType.Children |
|
|
480
|
-
UpdateType.RecalcUniforms;
|
|
533
|
+
updateType |= UpdateType.RenderState | UpdateType.RecalcUniforms;
|
|
481
534
|
updateParent = hasParent;
|
|
482
|
-
|
|
535
|
+
//only propagate children updates if not autosizing
|
|
536
|
+
if ((updateType & UpdateType.Autosize) === 0) {
|
|
537
|
+
updateType |= UpdateType.Children;
|
|
538
|
+
childUpdateType |= UpdateType.Global;
|
|
539
|
+
}
|
|
483
540
|
if (this.clipping === true) {
|
|
484
541
|
updateType |= UpdateType.Clipping | UpdateType.RenderBounds;
|
|
485
542
|
updateParent = hasParent;
|
|
@@ -493,18 +550,18 @@ export class CoreNode extends EventEmitter {
|
|
|
493
550
|
childUpdateType |= UpdateType.RenderBounds;
|
|
494
551
|
}
|
|
495
552
|
if (updateType & UpdateType.RenderState) {
|
|
496
|
-
|
|
553
|
+
newRenderState = this.checkRenderBounds();
|
|
497
554
|
updateType |= UpdateType.IsRenderable;
|
|
498
555
|
updateParent = hasParent;
|
|
499
556
|
// if we're not going out of bounds, update the render state
|
|
500
557
|
// this is done so the update loop can finish before we mark a node
|
|
501
558
|
// as out of bounds
|
|
502
|
-
if (
|
|
503
|
-
this.updateRenderState(
|
|
559
|
+
if (newRenderState !== CoreNodeRenderState.OutOfBounds) {
|
|
560
|
+
this.updateRenderState(newRenderState);
|
|
504
561
|
}
|
|
505
562
|
}
|
|
506
563
|
if (updateType & UpdateType.WorldAlpha) {
|
|
507
|
-
this.worldAlpha = (
|
|
564
|
+
this.worldAlpha = (parent?.worldAlpha ?? 1) * this.props.alpha;
|
|
508
565
|
updateType |=
|
|
509
566
|
UpdateType.PremultipliedColors |
|
|
510
567
|
UpdateType.Children |
|
|
@@ -515,6 +572,12 @@ export class CoreNode extends EventEmitter {
|
|
|
515
572
|
if (updateType & UpdateType.IsRenderable) {
|
|
516
573
|
this.updateIsRenderable();
|
|
517
574
|
}
|
|
575
|
+
// Handle autosize updates when children transforms change
|
|
576
|
+
if (updateType & UpdateType.Global &&
|
|
577
|
+
this.isRenderable === true &&
|
|
578
|
+
this.parentAutosizer !== null) {
|
|
579
|
+
this.parentAutosizer.patch(this.id);
|
|
580
|
+
}
|
|
518
581
|
if (updateType & UpdateType.Clipping) {
|
|
519
582
|
this.calculateClippingRect(parentClippingRect);
|
|
520
583
|
updateType |= UpdateType.Children;
|
|
@@ -531,7 +594,7 @@ export class CoreNode extends EventEmitter {
|
|
|
531
594
|
const same = tl === tr && tl === bl && tl === br;
|
|
532
595
|
const merged = mergeColorAlphaPremultiplied(tl, alpha, true);
|
|
533
596
|
this.premultipliedColorTl = merged;
|
|
534
|
-
if (same) {
|
|
597
|
+
if (same === true) {
|
|
535
598
|
this.premultipliedColorTr =
|
|
536
599
|
this.premultipliedColorBl =
|
|
537
600
|
this.premultipliedColorBr =
|
|
@@ -543,42 +606,37 @@ export class CoreNode extends EventEmitter {
|
|
|
543
606
|
this.premultipliedColorBr = mergeColorAlphaPremultiplied(br, alpha, true);
|
|
544
607
|
}
|
|
545
608
|
}
|
|
609
|
+
if (this.renderState === CoreNodeRenderState.OutOfBounds) {
|
|
610
|
+
// Delay updating children until the node is in bounds
|
|
611
|
+
this.updateType = updateType;
|
|
612
|
+
this.childUpdateType = childUpdateType;
|
|
613
|
+
return;
|
|
614
|
+
}
|
|
546
615
|
if (updateParent === true) {
|
|
547
616
|
parent.setUpdateType(UpdateType.Children);
|
|
548
617
|
}
|
|
549
|
-
// No need to update zIndex if there is no parent
|
|
550
|
-
if (updateType & UpdateType.CalculatedZIndex && parent !== null) {
|
|
551
|
-
this.calculateZIndex();
|
|
552
|
-
// Tell parent to re-sort children
|
|
553
|
-
parent.setUpdateType(UpdateType.ZIndexSortedChildren);
|
|
554
|
-
}
|
|
555
|
-
if (props.strictBounds === true &&
|
|
556
|
-
this.renderState === CoreNodeRenderState.OutOfBounds) {
|
|
557
|
-
updateType &= ~UpdateType.RenderBounds; // remove render bounds update
|
|
558
|
-
return;
|
|
559
|
-
}
|
|
560
618
|
if (updateType & UpdateType.RecalcUniforms &&
|
|
561
619
|
this.hasShaderUpdater === true) {
|
|
620
|
+
this.updateShaderUniforms = true;
|
|
621
|
+
}
|
|
622
|
+
if (this.isRenderable === true && this.updateShaderUniforms === true) {
|
|
623
|
+
this.updateShaderUniforms = false;
|
|
562
624
|
//this exists because the boolean hasShaderUpdater === true
|
|
563
625
|
this.shader.update();
|
|
564
626
|
}
|
|
565
627
|
if (updateType & UpdateType.Children && this.children.length > 0) {
|
|
628
|
+
let childClippingRect = this.clippingRect;
|
|
629
|
+
if (this.rtt === true) {
|
|
630
|
+
childClippingRect = NO_CLIPPING_RECT;
|
|
631
|
+
}
|
|
566
632
|
for (let i = 0, length = this.children.length; i < length; i++) {
|
|
567
633
|
const child = this.children[i];
|
|
568
|
-
|
|
634
|
+
if (childUpdateType !== 0) {
|
|
635
|
+
child.setUpdateType(childUpdateType);
|
|
636
|
+
}
|
|
569
637
|
if (child.updateType === 0) {
|
|
570
638
|
continue;
|
|
571
639
|
}
|
|
572
|
-
let childClippingRect = this.clippingRect;
|
|
573
|
-
if (this.rtt === true) {
|
|
574
|
-
childClippingRect = {
|
|
575
|
-
x: 0,
|
|
576
|
-
y: 0,
|
|
577
|
-
width: 0,
|
|
578
|
-
height: 0,
|
|
579
|
-
valid: false,
|
|
580
|
-
};
|
|
581
|
-
}
|
|
582
640
|
child.update(delta, childClippingRect);
|
|
583
641
|
}
|
|
584
642
|
}
|
|
@@ -588,32 +646,24 @@ export class CoreNode extends EventEmitter {
|
|
|
588
646
|
if (parentHasRenderTexture === true) {
|
|
589
647
|
this.notifyParentRTTOfUpdate();
|
|
590
648
|
}
|
|
591
|
-
//
|
|
592
|
-
|
|
593
|
-
if (updateType & UpdateType.ZIndexSortedChildren) {
|
|
649
|
+
//Resort children if needed
|
|
650
|
+
if (updateType & UpdateType.SortZIndexChildren) {
|
|
594
651
|
// reorder z-index
|
|
595
652
|
this.sortChildren();
|
|
596
653
|
}
|
|
597
|
-
if (this.updateTextureCoords === true) {
|
|
598
|
-
this.updateTextureCoords = false;
|
|
599
|
-
this.textureCoords = this.stage.renderer.getTextureCoords(this);
|
|
600
|
-
}
|
|
601
654
|
// If we're out of bounds, apply the render state now
|
|
602
655
|
// this is done so nodes can finish their entire update loop before
|
|
603
656
|
// being marked as out of bounds
|
|
604
|
-
if (
|
|
605
|
-
this.updateRenderState(
|
|
657
|
+
if (newRenderState === CoreNodeRenderState.OutOfBounds) {
|
|
658
|
+
this.updateRenderState(newRenderState);
|
|
606
659
|
this.updateIsRenderable();
|
|
607
660
|
if (this.rtt === true &&
|
|
608
|
-
|
|
661
|
+
newRenderState === CoreNodeRenderState.OutOfBounds) {
|
|
609
662
|
// notify children that we are going out of bounds
|
|
610
663
|
// we have to do this now before we stop processing the render tree
|
|
611
|
-
this.notifyChildrenRTTOfUpdate(
|
|
664
|
+
this.notifyChildrenRTTOfUpdate(newRenderState);
|
|
612
665
|
}
|
|
613
666
|
}
|
|
614
|
-
// reset update type
|
|
615
|
-
this.updateType = 0;
|
|
616
|
-
this.childUpdateType = 0;
|
|
617
667
|
}
|
|
618
668
|
findParentRTTNode() {
|
|
619
669
|
let rttNode = this.parent;
|
|
@@ -658,15 +708,16 @@ export class CoreNode extends EventEmitter {
|
|
|
658
708
|
return CoreNodeRenderState.InViewport;
|
|
659
709
|
}
|
|
660
710
|
// check if we dont have dimensions, take our parent's render state
|
|
661
|
-
if (this.parent !== null &&
|
|
662
|
-
(this.props.width === 0 || this.props.height === 0)) {
|
|
711
|
+
if (this.parent !== null && (this.props.w === 0 || this.props.h === 0)) {
|
|
663
712
|
return this.parent.renderState;
|
|
664
713
|
}
|
|
665
714
|
return CoreNodeRenderState.OutOfBounds;
|
|
666
715
|
}
|
|
667
716
|
updateBoundingRect() {
|
|
668
|
-
const transform = (this.sceneGlobalTransform ||
|
|
669
|
-
|
|
717
|
+
const transform = (this.sceneGlobalTransform ||
|
|
718
|
+
this.globalTransform);
|
|
719
|
+
const renderCoords = (this.sceneRenderCoords ||
|
|
720
|
+
this.renderCoords);
|
|
670
721
|
if (transform.tb === 0 || transform.tc === 0) {
|
|
671
722
|
this.renderBound = createBound(renderCoords.x1, renderCoords.y1, renderCoords.x3, renderCoords.y3, this.renderBound);
|
|
672
723
|
}
|
|
@@ -701,13 +752,13 @@ export class CoreNode extends EventEmitter {
|
|
|
701
752
|
return;
|
|
702
753
|
}
|
|
703
754
|
// clipping is enabled and we are in bounds create our own bounds
|
|
704
|
-
const { x, y,
|
|
755
|
+
const { x, y, w, h } = this.props;
|
|
705
756
|
// Pick the global transform if available, otherwise use the local transform
|
|
706
757
|
// global transform is only available if the node in an RTT chain
|
|
707
758
|
const { tx, ty } = this.sceneGlobalTransform || this.globalTransform || {};
|
|
708
759
|
const _x = tx ?? x;
|
|
709
760
|
const _y = ty ?? y;
|
|
710
|
-
this.strictBound = createBound(_x, _y, _x +
|
|
761
|
+
this.strictBound = createBound(_x, _y, _x + w, _y + h, this.strictBound);
|
|
711
762
|
this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
|
|
712
763
|
}
|
|
713
764
|
updateRenderState(renderState) {
|
|
@@ -723,6 +774,17 @@ export class CoreNode extends EventEmitter {
|
|
|
723
774
|
current: renderState,
|
|
724
775
|
});
|
|
725
776
|
}
|
|
777
|
+
/**
|
|
778
|
+
* Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
|
|
779
|
+
*/
|
|
780
|
+
checkBasicRenderability() {
|
|
781
|
+
if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
|
|
782
|
+
return false;
|
|
783
|
+
}
|
|
784
|
+
else {
|
|
785
|
+
return true;
|
|
786
|
+
}
|
|
787
|
+
}
|
|
726
788
|
/**
|
|
727
789
|
* Updates the `isRenderable` property based on various conditions.
|
|
728
790
|
*/
|
|
@@ -730,13 +792,20 @@ export class CoreNode extends EventEmitter {
|
|
|
730
792
|
let newIsRenderable = false;
|
|
731
793
|
let needsTextureOwnership = false;
|
|
732
794
|
// If the node is out of bounds or has an alpha of 0, it is not renderable
|
|
733
|
-
if (this.
|
|
734
|
-
this.renderState <= CoreNodeRenderState.OutOfBounds) {
|
|
795
|
+
if (this.checkBasicRenderability() === false) {
|
|
735
796
|
this.updateTextureOwnership(false);
|
|
736
797
|
this.setRenderable(false);
|
|
737
798
|
return;
|
|
738
799
|
}
|
|
739
800
|
if (this.texture !== null) {
|
|
801
|
+
// preemptive check for failed textures this will mark the current node as non-renderable
|
|
802
|
+
// and will prevent further checks until the texture is reloaded or retry is reset on the texture
|
|
803
|
+
if (this.texture.retryCount > this.texture.maxRetryCount) {
|
|
804
|
+
// texture has failed to load, we cannot render
|
|
805
|
+
this.updateTextureOwnership(false);
|
|
806
|
+
this.setRenderable(false);
|
|
807
|
+
return;
|
|
808
|
+
}
|
|
740
809
|
needsTextureOwnership = true;
|
|
741
810
|
// we're only renderable if the texture state is loaded
|
|
742
811
|
newIsRenderable = this.texture.state === 'loaded';
|
|
@@ -745,7 +814,7 @@ export class CoreNode extends EventEmitter {
|
|
|
745
814
|
// check shader
|
|
746
815
|
(this.props.shader !== null || this.hasColorProps === true) &&
|
|
747
816
|
// check dimensions
|
|
748
|
-
|
|
817
|
+
this.hasDimensions() === true) {
|
|
749
818
|
// This mean we have dimensions and a color set, so we can render a ColorTexture
|
|
750
819
|
if (this.stage.defaultTexture &&
|
|
751
820
|
this.stage.defaultTexture.state === 'loaded') {
|
|
@@ -760,28 +829,43 @@ export class CoreNode extends EventEmitter {
|
|
|
760
829
|
* @param isRenderable - The new renderable state
|
|
761
830
|
*/
|
|
762
831
|
setRenderable(isRenderable) {
|
|
832
|
+
const previousIsRenderable = this.isRenderable;
|
|
763
833
|
this.isRenderable = isRenderable;
|
|
764
|
-
if
|
|
765
|
-
|
|
766
|
-
this.
|
|
767
|
-
|
|
834
|
+
// Emit event if renderable status has changed
|
|
835
|
+
if (previousIsRenderable !== isRenderable) {
|
|
836
|
+
this.emit('renderable', {
|
|
837
|
+
type: 'renderable',
|
|
838
|
+
isRenderable,
|
|
839
|
+
});
|
|
768
840
|
}
|
|
769
841
|
}
|
|
770
842
|
/**
|
|
771
843
|
* Changes the renderable state of the node.
|
|
772
844
|
*/
|
|
773
845
|
updateTextureOwnership(isRenderable) {
|
|
774
|
-
this.texture?.setRenderableOwner(this, isRenderable);
|
|
846
|
+
this.texture?.setRenderableOwner(this._id, isRenderable);
|
|
847
|
+
}
|
|
848
|
+
/**
|
|
849
|
+
* Checks if the node is out of the viewport bounds.
|
|
850
|
+
*/
|
|
851
|
+
isOutOfBounds() {
|
|
852
|
+
return this.renderState <= CoreNodeRenderState.OutOfBounds;
|
|
853
|
+
}
|
|
854
|
+
/**
|
|
855
|
+
* Checks if the node has dimensions (width/height)
|
|
856
|
+
*/
|
|
857
|
+
hasDimensions() {
|
|
858
|
+
return this.props.w !== 0 && this.props.h !== 0;
|
|
775
859
|
}
|
|
776
860
|
calculateRenderCoords() {
|
|
777
|
-
const {
|
|
861
|
+
const { w, h } = this.props;
|
|
778
862
|
const g = this.globalTransform;
|
|
779
863
|
const tx = g.tx, ty = g.ty, ta = g.ta, tb = g.tb, tc = g.tc, td = g.td;
|
|
780
864
|
if (tb === 0 && tc === 0) {
|
|
781
865
|
const minX = tx;
|
|
782
|
-
const maxX = tx +
|
|
866
|
+
const maxX = tx + w * ta;
|
|
783
867
|
const minY = ty;
|
|
784
|
-
const maxY = ty +
|
|
868
|
+
const maxY = ty + h * td;
|
|
785
869
|
this.renderCoords = RenderCoords.translate(
|
|
786
870
|
//top-left
|
|
787
871
|
minX, minY,
|
|
@@ -797,11 +881,11 @@ export class CoreNode extends EventEmitter {
|
|
|
797
881
|
//top-left
|
|
798
882
|
tx, ty,
|
|
799
883
|
//top-right
|
|
800
|
-
tx +
|
|
884
|
+
tx + w * ta, ty + w * tc,
|
|
801
885
|
//bottom-right
|
|
802
|
-
tx +
|
|
886
|
+
tx + w * ta + h * tb, ty + w * tc + h * td,
|
|
803
887
|
//bottom-left
|
|
804
|
-
tx +
|
|
888
|
+
tx + h * tb, ty + h * td, this.renderCoords);
|
|
805
889
|
}
|
|
806
890
|
if (this.sceneGlobalTransform === undefined) {
|
|
807
891
|
return;
|
|
@@ -809,9 +893,9 @@ export class CoreNode extends EventEmitter {
|
|
|
809
893
|
const { tx: stx, ty: sty, ta: sta, tb: stb, tc: stc, td: std, } = this.sceneGlobalTransform;
|
|
810
894
|
if (stb === 0 && stc === 0) {
|
|
811
895
|
const minX = stx;
|
|
812
|
-
const maxX = stx +
|
|
896
|
+
const maxX = stx + w * sta;
|
|
813
897
|
const minY = sty;
|
|
814
|
-
const maxY = sty +
|
|
898
|
+
const maxY = sty + h * std;
|
|
815
899
|
this.sceneRenderCoords = RenderCoords.translate(
|
|
816
900
|
//top-left
|
|
817
901
|
minX, minY,
|
|
@@ -827,11 +911,11 @@ export class CoreNode extends EventEmitter {
|
|
|
827
911
|
//top-left
|
|
828
912
|
stx, sty,
|
|
829
913
|
//top-right
|
|
830
|
-
stx +
|
|
914
|
+
stx + w * sta, sty + w * stc,
|
|
831
915
|
//bottom-right
|
|
832
|
-
stx +
|
|
916
|
+
stx + w * sta + h * stb, sty + w * stc + h * std,
|
|
833
917
|
//bottom-left
|
|
834
|
-
stx +
|
|
918
|
+
stx + h * stb, sty + h * std, this.sceneRenderCoords);
|
|
835
919
|
}
|
|
836
920
|
}
|
|
837
921
|
/**
|
|
@@ -849,8 +933,8 @@ export class CoreNode extends EventEmitter {
|
|
|
849
933
|
if (clipping === true && isRotated === false) {
|
|
850
934
|
clippingRect.x = gt.tx;
|
|
851
935
|
clippingRect.y = gt.ty;
|
|
852
|
-
clippingRect.
|
|
853
|
-
clippingRect.
|
|
936
|
+
clippingRect.w = this.props.w * gt.ta;
|
|
937
|
+
clippingRect.h = this.props.h * gt.td;
|
|
854
938
|
clippingRect.valid = true;
|
|
855
939
|
}
|
|
856
940
|
else {
|
|
@@ -866,16 +950,6 @@ export class CoreNode extends EventEmitter {
|
|
|
866
950
|
clippingRect.valid = true;
|
|
867
951
|
}
|
|
868
952
|
}
|
|
869
|
-
calculateZIndex() {
|
|
870
|
-
const props = this.props;
|
|
871
|
-
const z = props.zIndex || 0;
|
|
872
|
-
const p = props.parent?.zIndex || 0;
|
|
873
|
-
let zIndex = z;
|
|
874
|
-
if (props.parent?.zIndexLocked) {
|
|
875
|
-
zIndex = z < p ? z : p;
|
|
876
|
-
}
|
|
877
|
-
this.calcZIndex = zIndex;
|
|
878
|
-
}
|
|
879
953
|
/**
|
|
880
954
|
* Destroy the node and cleanup all resources
|
|
881
955
|
*/
|
|
@@ -887,21 +961,23 @@ export class CoreNode extends EventEmitter {
|
|
|
887
961
|
this.destroyed = true;
|
|
888
962
|
this.unloadTexture();
|
|
889
963
|
this.isRenderable = false;
|
|
964
|
+
if (this.hasShaderTimeFn === true) {
|
|
965
|
+
this.stage.untrackTimedNode(this);
|
|
966
|
+
}
|
|
890
967
|
// Kill children
|
|
891
968
|
while (this.children.length > 0) {
|
|
892
969
|
this.children[0].destroy();
|
|
893
970
|
}
|
|
894
971
|
const parent = this.parent;
|
|
895
972
|
if (parent !== null) {
|
|
896
|
-
|
|
897
|
-
parent.children.splice(index, 1);
|
|
898
|
-
parent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
|
|
973
|
+
parent.removeChild(this);
|
|
899
974
|
}
|
|
900
975
|
this.props.parent = null;
|
|
901
976
|
this.props.texture = null;
|
|
902
977
|
if (this.rtt === true) {
|
|
903
978
|
this.stage.renderer.removeRTTNode(this);
|
|
904
979
|
}
|
|
980
|
+
this.stage.requestRender();
|
|
905
981
|
}
|
|
906
982
|
renderQuads(renderer) {
|
|
907
983
|
if (this.parentHasRenderTexture === true) {
|
|
@@ -909,37 +985,134 @@ export class CoreNode extends EventEmitter {
|
|
|
909
985
|
if (rtt === false || this.parentRenderTexture !== renderer.activeRttNode)
|
|
910
986
|
return;
|
|
911
987
|
}
|
|
912
|
-
const
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
988
|
+
const texture = this.props.texture || this.stage.defaultTexture;
|
|
989
|
+
// There is a race condition where the texture can be null
|
|
990
|
+
// with RTT nodes. Adding this defensively to avoid errors.
|
|
991
|
+
// Also check if we have a valid texture or default texture to render
|
|
992
|
+
if (!texture || texture.state !== 'loaded') {
|
|
993
|
+
return;
|
|
994
|
+
}
|
|
995
|
+
renderer.addQuad(this);
|
|
996
|
+
}
|
|
997
|
+
get quadBufferCollection() {
|
|
998
|
+
return this.stage.renderer.quadBufferCollection;
|
|
999
|
+
}
|
|
1000
|
+
get time() {
|
|
1001
|
+
if (this.hasShaderTimeFn === true) {
|
|
1002
|
+
return this.getTimerValue();
|
|
1003
|
+
}
|
|
1004
|
+
return 0;
|
|
1005
|
+
}
|
|
1006
|
+
getTimerValue() {
|
|
1007
|
+
if (typeof this.shader.time === 'function') {
|
|
1008
|
+
return this.shader.time(this.stage);
|
|
1009
|
+
}
|
|
1010
|
+
return this.stage.elapsedTime;
|
|
1011
|
+
}
|
|
1012
|
+
sortChildren() {
|
|
1013
|
+
const children = this.children;
|
|
1014
|
+
const n = children.length;
|
|
1015
|
+
if (n === 0) {
|
|
1016
|
+
this.zIndexMin = 0;
|
|
1017
|
+
this.zIndexMax = 0;
|
|
1018
|
+
return;
|
|
1019
|
+
}
|
|
1020
|
+
let firstZIndex = children[0].props.zIndex;
|
|
1021
|
+
let min = firstZIndex;
|
|
1022
|
+
let max = firstZIndex;
|
|
1023
|
+
let prevZIndex = firstZIndex;
|
|
1024
|
+
let isSorted = true;
|
|
1025
|
+
for (let i = 1; i < n; i++) {
|
|
1026
|
+
const zIndex = children[i].props.zIndex;
|
|
1027
|
+
if (zIndex < min) {
|
|
1028
|
+
min = zIndex;
|
|
1029
|
+
}
|
|
1030
|
+
else if (zIndex > max) {
|
|
1031
|
+
max = zIndex;
|
|
1032
|
+
}
|
|
1033
|
+
if (prevZIndex > zIndex) {
|
|
1034
|
+
isSorted = false;
|
|
1035
|
+
}
|
|
1036
|
+
prevZIndex = zIndex;
|
|
1037
|
+
}
|
|
1038
|
+
// update min and max zIndex
|
|
1039
|
+
this.zIndexMin = min;
|
|
1040
|
+
this.zIndexMax = max;
|
|
1041
|
+
// if min and max are the same, no need to sort
|
|
1042
|
+
if (min === max || isSorted === true) {
|
|
1043
|
+
return;
|
|
1044
|
+
}
|
|
1045
|
+
bucketSortByZIndex(children, min);
|
|
1046
|
+
}
|
|
1047
|
+
removeChild(node, targetParent = null) {
|
|
1048
|
+
if (targetParent === null) {
|
|
1049
|
+
if (this.props.rtt === true && this.parentHasRenderTexture === true) {
|
|
1050
|
+
node.clearRTTInheritance();
|
|
1051
|
+
}
|
|
1052
|
+
const autosizeTarget = this.autosizer || this.parentAutosizer;
|
|
1053
|
+
if (autosizeTarget !== null) {
|
|
1054
|
+
autosizeTarget.detach(node);
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
const children = this.children;
|
|
1058
|
+
removeChild(node, children);
|
|
1059
|
+
if (children.length === 0) {
|
|
1060
|
+
this.zIndexMin = 0;
|
|
1061
|
+
this.zIndexMax = 0;
|
|
1062
|
+
return;
|
|
1063
|
+
}
|
|
1064
|
+
const removedZIndex = node.zIndex;
|
|
1065
|
+
if (removedZIndex === this.zIndexMin || removedZIndex === this.zIndexMax) {
|
|
1066
|
+
this.setUpdateType(UpdateType.SortZIndexChildren);
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
addChild(node, previousParent = null) {
|
|
1070
|
+
const inRttCluster = this.props.rtt === true || this.parentHasRenderTexture === true;
|
|
1071
|
+
const children = this.children;
|
|
1072
|
+
const zIndex = node.zIndex;
|
|
1073
|
+
const autosizeTarget = this.autosizer || this.parentAutosizer;
|
|
1074
|
+
let attachToAutosizer = autosizeTarget !== null;
|
|
1075
|
+
node.parentHasRenderTexture = inRttCluster;
|
|
1076
|
+
if (previousParent !== null) {
|
|
1077
|
+
const previousParentInRttCluster = previousParent.props.rtt === true ||
|
|
1078
|
+
previousParent.parentHasRenderTexture === true;
|
|
1079
|
+
if (inRttCluster === false && previousParentInRttCluster === true) {
|
|
1080
|
+
// update child RTT status
|
|
1081
|
+
node.clearRTTInheritance();
|
|
1082
|
+
}
|
|
1083
|
+
const previousAutosizer = node.autosizer || node.parentAutosizer;
|
|
1084
|
+
if (previousAutosizer !== null) {
|
|
1085
|
+
if (autosizeTarget === null ||
|
|
1086
|
+
previousAutosizer.id !== autosizeTarget.id) {
|
|
1087
|
+
previousAutosizer.detach(node);
|
|
1088
|
+
}
|
|
1089
|
+
attachToAutosizer = false;
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
if (attachToAutosizer === true) {
|
|
1093
|
+
//if this is true, then the autosizer really exists
|
|
1094
|
+
autosizeTarget.attach(node);
|
|
1095
|
+
}
|
|
1096
|
+
if (inRttCluster === true) {
|
|
1097
|
+
node.markChildrenWithRTT(this);
|
|
1098
|
+
}
|
|
1099
|
+
children.push(node);
|
|
1100
|
+
if (children.length === 1) {
|
|
1101
|
+
this.zIndexMin = zIndex;
|
|
1102
|
+
this.zIndexMax = zIndex;
|
|
1103
|
+
}
|
|
1104
|
+
else {
|
|
1105
|
+
if (zIndex < this.zIndexMin) {
|
|
1106
|
+
this.zIndexMin = zIndex;
|
|
1107
|
+
}
|
|
1108
|
+
if (zIndex > this.zIndexMax) {
|
|
1109
|
+
this.zIndexMax = zIndex;
|
|
1110
|
+
}
|
|
1111
|
+
}
|
|
1112
|
+
if (this.zIndexMax !== this.zIndexMin) {
|
|
1113
|
+
this.setUpdateType(UpdateType.SortZIndexChildren);
|
|
1114
|
+
}
|
|
1115
|
+
this.setUpdateType(UpdateType.Children);
|
|
943
1116
|
}
|
|
944
1117
|
//#region Properties
|
|
945
1118
|
get id() {
|
|
@@ -962,12 +1135,12 @@ export class CoreNode extends EventEmitter {
|
|
|
962
1135
|
}
|
|
963
1136
|
get absX() {
|
|
964
1137
|
return (this.props.x +
|
|
965
|
-
-this.props.
|
|
1138
|
+
-this.props.w * this.props.mountX +
|
|
966
1139
|
(this.props.parent?.absX || this.props.parent?.globalTransform?.tx || 0));
|
|
967
1140
|
}
|
|
968
1141
|
get absY() {
|
|
969
1142
|
return (this.props.y +
|
|
970
|
-
-this.props.
|
|
1143
|
+
-this.props.h * this.props.mountY +
|
|
971
1144
|
(this.props.parent?.absY ?? 0));
|
|
972
1145
|
}
|
|
973
1146
|
get y() {
|
|
@@ -979,34 +1152,46 @@ export class CoreNode extends EventEmitter {
|
|
|
979
1152
|
this.setUpdateType(UpdateType.Local);
|
|
980
1153
|
}
|
|
981
1154
|
}
|
|
982
|
-
get
|
|
983
|
-
return this.props.
|
|
1155
|
+
get w() {
|
|
1156
|
+
return this.props.w;
|
|
984
1157
|
}
|
|
985
|
-
set
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
if (
|
|
991
|
-
this.
|
|
1158
|
+
set w(value) {
|
|
1159
|
+
const props = this.props;
|
|
1160
|
+
if (props.w !== value) {
|
|
1161
|
+
props.w = value;
|
|
1162
|
+
let updateType = UpdateType.Local;
|
|
1163
|
+
if (props.texture !== null &&
|
|
1164
|
+
this.stage.calculateTextureCoord === true &&
|
|
1165
|
+
props.textureOptions !== null) {
|
|
1166
|
+
this.textureCoords = this.stage.renderer.getTextureCoords(this);
|
|
1167
|
+
}
|
|
1168
|
+
if (props.rtt === true) {
|
|
1169
|
+
this.framebufferDimensions.w = value;
|
|
992
1170
|
this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
|
|
993
|
-
|
|
1171
|
+
updateType |= UpdateType.RenderTexture;
|
|
994
1172
|
}
|
|
1173
|
+
this.setUpdateType(updateType);
|
|
995
1174
|
}
|
|
996
1175
|
}
|
|
997
|
-
get
|
|
998
|
-
return this.props.
|
|
1176
|
+
get h() {
|
|
1177
|
+
return this.props.h;
|
|
999
1178
|
}
|
|
1000
|
-
set
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
if (
|
|
1006
|
-
this.
|
|
1179
|
+
set h(value) {
|
|
1180
|
+
const props = this.props;
|
|
1181
|
+
if (props.h !== value) {
|
|
1182
|
+
props.h = value;
|
|
1183
|
+
let updateType = UpdateType.Local;
|
|
1184
|
+
if (props.texture !== null &&
|
|
1185
|
+
this.stage.calculateTextureCoord === true &&
|
|
1186
|
+
props.textureOptions !== null) {
|
|
1187
|
+
this.textureCoords = this.stage.renderer.getTextureCoords(this);
|
|
1188
|
+
}
|
|
1189
|
+
if (props.rtt === true) {
|
|
1190
|
+
this.framebufferDimensions.h = value;
|
|
1007
1191
|
this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
|
|
1008
|
-
|
|
1192
|
+
updateType |= UpdateType.RenderTexture;
|
|
1009
1193
|
}
|
|
1194
|
+
this.setUpdateType(updateType);
|
|
1010
1195
|
}
|
|
1011
1196
|
}
|
|
1012
1197
|
get scale() {
|
|
@@ -1120,7 +1305,16 @@ export class CoreNode extends EventEmitter {
|
|
|
1120
1305
|
return this.props.autosize;
|
|
1121
1306
|
}
|
|
1122
1307
|
set autosize(value) {
|
|
1308
|
+
if (this.props.autosize === value) {
|
|
1309
|
+
return;
|
|
1310
|
+
}
|
|
1123
1311
|
this.props.autosize = value;
|
|
1312
|
+
if (value === true && this.autosizer === null) {
|
|
1313
|
+
this.autosizer = new Autosizer(this);
|
|
1314
|
+
}
|
|
1315
|
+
else {
|
|
1316
|
+
this.autosizer = null;
|
|
1317
|
+
}
|
|
1124
1318
|
}
|
|
1125
1319
|
get boundsMargin() {
|
|
1126
1320
|
const props = this.props;
|
|
@@ -1259,26 +1453,34 @@ export class CoreNode extends EventEmitter {
|
|
|
1259
1453
|
this.hasColorProps = value > 0;
|
|
1260
1454
|
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1261
1455
|
}
|
|
1262
|
-
// we're only interested in parent zIndex to test
|
|
1263
|
-
// if we should use node zIndex is higher then parent zIndex
|
|
1264
|
-
get zIndexLocked() {
|
|
1265
|
-
return this.props.zIndexLocked || 0;
|
|
1266
|
-
}
|
|
1267
|
-
set zIndexLocked(value) {
|
|
1268
|
-
this.props.zIndexLocked = value;
|
|
1269
|
-
this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
|
|
1270
|
-
for (let i = 0, length = this.children.length; i < length; i++) {
|
|
1271
|
-
this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
|
|
1272
|
-
}
|
|
1273
|
-
}
|
|
1274
1456
|
get zIndex() {
|
|
1275
1457
|
return this.props.zIndex;
|
|
1276
1458
|
}
|
|
1277
1459
|
set zIndex(value) {
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1460
|
+
let sanitizedValue = value;
|
|
1461
|
+
if (isNaN(sanitizedValue) || Number.isFinite(sanitizedValue) === false) {
|
|
1462
|
+
console.warn(`zIndex was set to an invalid value: ${value}, defaulting to 0`);
|
|
1463
|
+
sanitizedValue = 0;
|
|
1464
|
+
}
|
|
1465
|
+
//Clamp to safe integer range
|
|
1466
|
+
if (sanitizedValue > Number.MAX_SAFE_INTEGER) {
|
|
1467
|
+
sanitizedValue = 1000;
|
|
1468
|
+
}
|
|
1469
|
+
else if (sanitizedValue < Number.MIN_SAFE_INTEGER) {
|
|
1470
|
+
sanitizedValue = -1000;
|
|
1471
|
+
}
|
|
1472
|
+
if (this.props.zIndex === sanitizedValue) {
|
|
1473
|
+
return;
|
|
1474
|
+
}
|
|
1475
|
+
this.previousZIndex = this.props.zIndex;
|
|
1476
|
+
this.props.zIndex = sanitizedValue;
|
|
1477
|
+
const parent = this.parent;
|
|
1478
|
+
if (parent !== null) {
|
|
1479
|
+
const min = parent.zIndexMin;
|
|
1480
|
+
const max = parent.zIndexMax;
|
|
1481
|
+
if (min !== max || sanitizedValue < min || sanitizedValue > max) {
|
|
1482
|
+
parent.setUpdateType(UpdateType.SortZIndexChildren);
|
|
1483
|
+
}
|
|
1282
1484
|
}
|
|
1283
1485
|
}
|
|
1284
1486
|
get parent() {
|
|
@@ -1291,23 +1493,13 @@ export class CoreNode extends EventEmitter {
|
|
|
1291
1493
|
}
|
|
1292
1494
|
this.props.parent = newParent;
|
|
1293
1495
|
if (oldParent) {
|
|
1294
|
-
|
|
1295
|
-
oldParent.children.splice(index, 1);
|
|
1296
|
-
oldParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
|
|
1297
|
-
}
|
|
1298
|
-
if (newParent) {
|
|
1299
|
-
newParent.children.push(this);
|
|
1300
|
-
// Since this node has a new parent, to be safe, have it do a full update.
|
|
1301
|
-
this.setUpdateType(UpdateType.All);
|
|
1302
|
-
// Tell parent that it's children need to be updated and sorted.
|
|
1303
|
-
newParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
|
|
1304
|
-
// If the new parent has an RTT enabled, apply RTT inheritance
|
|
1305
|
-
if (newParent.rtt || newParent.parentHasRenderTexture) {
|
|
1306
|
-
this.applyRTTInheritance(newParent);
|
|
1307
|
-
}
|
|
1496
|
+
oldParent.removeChild(this, newParent);
|
|
1308
1497
|
}
|
|
1309
|
-
|
|
1310
|
-
|
|
1498
|
+
if (newParent !== null) {
|
|
1499
|
+
newParent.addChild(this, oldParent);
|
|
1500
|
+
}
|
|
1501
|
+
//since this node has a new parent, recalc global and render bounds
|
|
1502
|
+
this.setUpdateType(UpdateType.Global | UpdateType.RenderBounds);
|
|
1311
1503
|
}
|
|
1312
1504
|
get rtt() {
|
|
1313
1505
|
return this.props.rtt;
|
|
@@ -1331,8 +1523,8 @@ export class CoreNode extends EventEmitter {
|
|
|
1331
1523
|
}
|
|
1332
1524
|
initRenderTexture() {
|
|
1333
1525
|
this.framebufferDimensions = {
|
|
1334
|
-
|
|
1335
|
-
|
|
1526
|
+
w: this.props.w,
|
|
1527
|
+
h: this.props.h,
|
|
1336
1528
|
};
|
|
1337
1529
|
this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
|
|
1338
1530
|
this.stage.renderer.renderToTexture(this);
|
|
@@ -1391,8 +1583,15 @@ export class CoreNode extends EventEmitter {
|
|
|
1391
1583
|
}
|
|
1392
1584
|
if (shader.shaderKey !== 'default') {
|
|
1393
1585
|
this.hasShaderUpdater = shader.update !== undefined;
|
|
1586
|
+
this.hasShaderTimeFn = shader.time !== undefined;
|
|
1394
1587
|
shader.attachNode(this);
|
|
1395
1588
|
}
|
|
1589
|
+
if (this.hasShaderTimeFn === true) {
|
|
1590
|
+
this.stage.trackTimedNode(this);
|
|
1591
|
+
}
|
|
1592
|
+
else {
|
|
1593
|
+
this.stage.untrackTimedNode(this);
|
|
1594
|
+
}
|
|
1396
1595
|
this.props.shader = shader;
|
|
1397
1596
|
this.setUpdateType(UpdateType.IsRenderable | UpdateType.RecalcUniforms);
|
|
1398
1597
|
}
|
|
@@ -1410,8 +1609,8 @@ export class CoreNode extends EventEmitter {
|
|
|
1410
1609
|
}
|
|
1411
1610
|
this.texture = this.stage.txManager.createTexture('ImageTexture', {
|
|
1412
1611
|
src: imageUrl,
|
|
1413
|
-
|
|
1414
|
-
|
|
1612
|
+
w: this.props.w,
|
|
1613
|
+
h: this.props.h,
|
|
1415
1614
|
type: this.props.imageType,
|
|
1416
1615
|
sx: this.props.srcX,
|
|
1417
1616
|
sy: this.props.srcY,
|
|
@@ -1460,7 +1659,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1460
1659
|
return this.rttParent.framebufferDimensions;
|
|
1461
1660
|
}
|
|
1462
1661
|
this.rttParent = this.findParentRTTNode();
|
|
1463
|
-
return this.rttParent.framebufferDimensions;
|
|
1662
|
+
return this.rttParent ? this.rttParent.framebufferDimensions : null;
|
|
1464
1663
|
}
|
|
1465
1664
|
/**
|
|
1466
1665
|
* Returns the parent render texture node if it exists.
|
|
@@ -1485,17 +1684,26 @@ export class CoreNode extends EventEmitter {
|
|
|
1485
1684
|
const oldTexture = this.props.texture;
|
|
1486
1685
|
if (oldTexture) {
|
|
1487
1686
|
this.unloadTexture();
|
|
1687
|
+
if (this.autosizer !== null && value === null) {
|
|
1688
|
+
this.autosizer.setMode(AutosizeMode.Children); // Set to children size mode
|
|
1689
|
+
}
|
|
1488
1690
|
}
|
|
1489
1691
|
this.textureCoords = undefined;
|
|
1490
1692
|
this.props.texture = value;
|
|
1491
1693
|
if (value !== null) {
|
|
1492
|
-
|
|
1694
|
+
if (this.autosizer !== null) {
|
|
1695
|
+
this.autosizer.setMode(AutosizeMode.Texture); // Set to texture size mode
|
|
1696
|
+
}
|
|
1697
|
+
value.setRenderableOwner(this._id, this.isRenderable);
|
|
1493
1698
|
this.loadTexture();
|
|
1494
1699
|
}
|
|
1495
1700
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
1496
1701
|
}
|
|
1497
1702
|
set textureOptions(value) {
|
|
1498
1703
|
this.props.textureOptions = value;
|
|
1704
|
+
if (this.stage.calculateTextureCoord === true && value !== null) {
|
|
1705
|
+
this.textureCoords = this.stage.renderer.getTextureCoords(this);
|
|
1706
|
+
}
|
|
1499
1707
|
}
|
|
1500
1708
|
get textureOptions() {
|
|
1501
1709
|
return this.props.textureOptions;
|
|
@@ -1514,17 +1722,6 @@ export class CoreNode extends EventEmitter {
|
|
|
1514
1722
|
this.hasRTTupdates = true;
|
|
1515
1723
|
this.parent?.setRTTUpdates(type);
|
|
1516
1724
|
}
|
|
1517
|
-
get strictBounds() {
|
|
1518
|
-
return this.props.strictBounds;
|
|
1519
|
-
}
|
|
1520
|
-
set strictBounds(v) {
|
|
1521
|
-
if (v === this.props.strictBounds) {
|
|
1522
|
-
return;
|
|
1523
|
-
}
|
|
1524
|
-
this.props.strictBounds = v;
|
|
1525
|
-
this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
1526
|
-
this.childUpdateType |= UpdateType.RenderBounds | UpdateType.Children;
|
|
1527
|
-
}
|
|
1528
1725
|
animate(props, settings) {
|
|
1529
1726
|
const animation = new CoreAnimation(this, props, settings);
|
|
1530
1727
|
const controller = new CoreAnimationController(this.stage.animationManager, animation);
|
|
@@ -1533,5 +1730,56 @@ export class CoreNode extends EventEmitter {
|
|
|
1533
1730
|
flush() {
|
|
1534
1731
|
// no-op
|
|
1535
1732
|
}
|
|
1733
|
+
/**
|
|
1734
|
+
* Add a texture to the current RenderOp.
|
|
1735
|
+
*
|
|
1736
|
+
* @param texture
|
|
1737
|
+
* @returns Assigned Texture Index of the texture in the render op
|
|
1738
|
+
*/
|
|
1739
|
+
addTexture(texture) {
|
|
1740
|
+
const textures = this.renderOpTextures;
|
|
1741
|
+
const length = textures.length;
|
|
1742
|
+
for (let i = 0; i < length; i++) {
|
|
1743
|
+
if (textures[i] === texture) {
|
|
1744
|
+
return i;
|
|
1745
|
+
}
|
|
1746
|
+
}
|
|
1747
|
+
if (length >= 1) {
|
|
1748
|
+
return 0xffffffff;
|
|
1749
|
+
}
|
|
1750
|
+
textures.push(texture);
|
|
1751
|
+
return length;
|
|
1752
|
+
}
|
|
1753
|
+
draw(renderer) {
|
|
1754
|
+
const { glw, stage } = renderer;
|
|
1755
|
+
const canvas = stage.platform.canvas;
|
|
1756
|
+
const shader = this.props.shader;
|
|
1757
|
+
stage.shManager.useShader(shader.program);
|
|
1758
|
+
shader.program.bindRenderOp(this);
|
|
1759
|
+
// Clipping
|
|
1760
|
+
if (this.clippingRect.valid === true) {
|
|
1761
|
+
const pixelRatio = this.parentHasRenderTexture ? 1 : stage.pixelRatio;
|
|
1762
|
+
const clipX = Math.round(this.clippingRect.x * pixelRatio);
|
|
1763
|
+
const clipWidth = Math.round(this.clippingRect.w * pixelRatio);
|
|
1764
|
+
const clipHeight = Math.round(this.clippingRect.h * pixelRatio);
|
|
1765
|
+
let clipY = Math.round(canvas.height - clipHeight - this.clippingRect.y * pixelRatio);
|
|
1766
|
+
// if parent has render texture, we need to adjust the scissor rect
|
|
1767
|
+
// to be relative to the parent's framebuffer
|
|
1768
|
+
if (this.parentHasRenderTexture) {
|
|
1769
|
+
const parentFramebufferDimensions = this.parentFramebufferDimensions;
|
|
1770
|
+
clipY =
|
|
1771
|
+
parentFramebufferDimensions !== null
|
|
1772
|
+
? parentFramebufferDimensions.h - this.props.h
|
|
1773
|
+
: 0;
|
|
1774
|
+
}
|
|
1775
|
+
glw.setScissorTest(true);
|
|
1776
|
+
glw.scissor(clipX, clipY, clipWidth, clipHeight);
|
|
1777
|
+
}
|
|
1778
|
+
else {
|
|
1779
|
+
glw.setScissorTest(false);
|
|
1780
|
+
}
|
|
1781
|
+
const quadIdx = (this.renderOpBufferIdx / 32) * 6 * 2;
|
|
1782
|
+
glw.drawElements(glw.TRIANGLES, 6 * this.numQuads, glw.UNSIGNED_SHORT, quadIdx);
|
|
1783
|
+
}
|
|
1536
1784
|
}
|
|
1537
1785
|
//# sourceMappingURL=CoreNode.js.map
|