@lightningjs/renderer 3.0.0-beta9 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -202
- package/NOTICE +3 -3
- package/README.md +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/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 +107 -59
- package/dist/src/core/CoreNode.js +524 -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 +383 -236
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +19 -17
- package/dist/src/core/CoreTextureManager.js +52 -120
- 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 +2 -4
- package/dist/src/core/TextureMemoryManager.js +80 -113
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- 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 +4 -2
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.js +1 -1
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +69 -97
- package/dist/src/core/lib/WebGlContextWrapper.js +192 -152
- 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 +311 -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/lib/validateImageBitmap.d.ts +1 -2
- package/dist/src/core/lib/validateImageBitmap.js +4 -4
- package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
- package/dist/src/core/platform.d.ts +10 -0
- package/dist/src/core/platform.js +84 -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/{WebGlRenderOp.js → WebGlCoreRenderOp.js} +43 -47
- 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.destroy.d.ts +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js +2 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js.map +1 -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/WebGlRenderer.d.ts +11 -23
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +124 -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 +7 -7
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +60 -38
- 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 +1 -2
- 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 +34 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +113 -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 +126 -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/Shadow.js +89 -83
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js +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/SdfFontHandler.d.ts +182 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +379 -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 -15
- package/dist/src/core/textures/Texture.js +131 -19
- 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/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 -2489
- package/src/core/CoreShaderManager.ts +188 -188
- package/src/core/CoreTextNode.test.ts +311 -0
- package/src/core/CoreTextNode.ts +607 -451
- package/src/core/CoreTextureManager.ts +484 -548
- package/src/core/Stage.ts +927 -800
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +418 -462
- package/src/core/animations/AnimationManager.ts +38 -38
- package/src/core/animations/CoreAnimation.ts +290 -291
- package/src/core/animations/CoreAnimationController.ts +169 -166
- 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 -1368
- 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.test.ts +113 -0
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +350 -298
- package/src/core/renderers/webgl/WebGlRenderer.ts +727 -747
- package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -435
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +364 -341
- package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
- package/src/core/renderers/webgl/internal/RendererUtils.ts +150 -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 +581 -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 -381
- 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/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -44
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +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,12 +362,16 @@ 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);
|
|
@@ -337,20 +381,25 @@ export class CoreNode extends EventEmitter {
|
|
|
337
381
|
// immediately set isRenderable to false, so that we handle the error
|
|
338
382
|
// without waiting for the next frame loop
|
|
339
383
|
this.isRenderable = false;
|
|
384
|
+
this.updateTextureOwnership(false);
|
|
340
385
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
341
386
|
// If parent has a render texture, flag that we need to update
|
|
342
387
|
if (this.parentHasRenderTexture) {
|
|
343
388
|
this.notifyParentRTTOfUpdate();
|
|
344
389
|
}
|
|
345
|
-
this.
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
390
|
+
if (this.texture !== null &&
|
|
391
|
+
this.texture.retryCount > this.texture.maxRetryCount) {
|
|
392
|
+
this.emit('failed', {
|
|
393
|
+
type: 'texture',
|
|
394
|
+
error,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
349
397
|
};
|
|
350
398
|
onTextureFreed = () => {
|
|
351
399
|
// immediately set isRenderable to false, so that we handle the error
|
|
352
400
|
// without waiting for the next frame loop
|
|
353
401
|
this.isRenderable = false;
|
|
402
|
+
this.updateTextureOwnership(false);
|
|
354
403
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
355
404
|
// If parent has a render texture, flag that we need to update
|
|
356
405
|
if (this.parentHasRenderTexture) {
|
|
@@ -376,20 +425,17 @@ export class CoreNode extends EventEmitter {
|
|
|
376
425
|
return;
|
|
377
426
|
parent.setUpdateType(UpdateType.Children);
|
|
378
427
|
}
|
|
379
|
-
sortChildren() {
|
|
380
|
-
this.children.sort((a, b) => a.calcZIndex - b.calcZIndex);
|
|
381
|
-
}
|
|
382
428
|
updateLocalTransform() {
|
|
383
429
|
const p = this.props;
|
|
384
|
-
const { x, y,
|
|
385
|
-
const mountTranslateX = p.mountX *
|
|
386
|
-
const mountTranslateY = p.mountY *
|
|
430
|
+
const { x, y, w, h } = p;
|
|
431
|
+
const mountTranslateX = p.mountX * w;
|
|
432
|
+
const mountTranslateY = p.mountY * h;
|
|
387
433
|
if (p.rotation !== 0 || p.scaleX !== 1 || p.scaleY !== 1) {
|
|
388
|
-
const
|
|
389
|
-
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;
|
|
390
437
|
this.localTransform = Matrix3d.translate(x - mountTranslateX + pivotTranslateX, y - mountTranslateY + pivotTranslateY, this.localTransform)
|
|
391
|
-
.
|
|
392
|
-
.scale(p.scaleX, p.scaleY)
|
|
438
|
+
.multiply(scaleRotate)
|
|
393
439
|
.translate(-pivotTranslateX, -pivotTranslateY);
|
|
394
440
|
}
|
|
395
441
|
else {
|
|
@@ -404,26 +450,26 @@ export class CoreNode extends EventEmitter {
|
|
|
404
450
|
let resizeModeScaleY = 1;
|
|
405
451
|
let extraX = 0;
|
|
406
452
|
let extraY = 0;
|
|
407
|
-
const {
|
|
453
|
+
const { w: tw, h: th } = texture.dimensions;
|
|
408
454
|
const txAspectRatio = tw / th;
|
|
409
|
-
const nodeAspectRatio =
|
|
455
|
+
const nodeAspectRatio = w / h;
|
|
410
456
|
if (txAspectRatio > nodeAspectRatio) {
|
|
411
457
|
// Texture is wider than node
|
|
412
458
|
// Center the node vertically (shift down by extraY)
|
|
413
459
|
// Scale the node vertically to maintain original aspect ratio
|
|
414
|
-
const scaleX =
|
|
460
|
+
const scaleX = w / tw;
|
|
415
461
|
const scaledTxHeight = th * scaleX;
|
|
416
|
-
extraY = (
|
|
417
|
-
resizeModeScaleY = scaledTxHeight /
|
|
462
|
+
extraY = (h - scaledTxHeight) / 2;
|
|
463
|
+
resizeModeScaleY = scaledTxHeight / h;
|
|
418
464
|
}
|
|
419
465
|
else {
|
|
420
466
|
// Texture is taller than node (or equal)
|
|
421
467
|
// Center the node horizontally (shift right by extraX)
|
|
422
468
|
// Scale the node horizontally to maintain original aspect ratio
|
|
423
|
-
const scaleY =
|
|
469
|
+
const scaleY = h / th;
|
|
424
470
|
const scaledTxWidth = tw * scaleY;
|
|
425
|
-
extraX = (
|
|
426
|
-
resizeModeScaleX = scaledTxWidth /
|
|
471
|
+
extraX = (w - scaledTxWidth) / 2;
|
|
472
|
+
resizeModeScaleX = scaledTxWidth / w;
|
|
427
473
|
}
|
|
428
474
|
// Apply the extra translation and scale to the local transform
|
|
429
475
|
this.localTransform
|
|
@@ -436,17 +482,21 @@ export class CoreNode extends EventEmitter {
|
|
|
436
482
|
* @param delta
|
|
437
483
|
*/
|
|
438
484
|
update(delta, parentClippingRect) {
|
|
439
|
-
if (this.updateType === UpdateType.None) {
|
|
440
|
-
return;
|
|
441
|
-
}
|
|
442
485
|
const props = this.props;
|
|
443
486
|
const parent = props.parent;
|
|
444
487
|
const parentHasRenderTexture = this.parentHasRenderTexture;
|
|
445
488
|
const hasParent = props.parent !== null;
|
|
446
|
-
let
|
|
489
|
+
let newRenderState = null;
|
|
447
490
|
let updateType = this.updateType;
|
|
448
491
|
let childUpdateType = this.childUpdateType;
|
|
449
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;
|
|
450
500
|
if (updateType & UpdateType.Local) {
|
|
451
501
|
this.updateLocalTransform();
|
|
452
502
|
updateType |= UpdateType.Global;
|
|
@@ -480,12 +530,13 @@ export class CoreNode extends EventEmitter {
|
|
|
480
530
|
}
|
|
481
531
|
this.calculateRenderCoords();
|
|
482
532
|
this.updateBoundingRect();
|
|
483
|
-
updateType |=
|
|
484
|
-
UpdateType.RenderState |
|
|
485
|
-
UpdateType.Children |
|
|
486
|
-
UpdateType.RecalcUniforms;
|
|
533
|
+
updateType |= UpdateType.RenderState | UpdateType.RecalcUniforms;
|
|
487
534
|
updateParent = hasParent;
|
|
488
|
-
|
|
535
|
+
//only propagate children updates if not autosizing
|
|
536
|
+
if ((updateType & UpdateType.Autosize) === 0) {
|
|
537
|
+
updateType |= UpdateType.Children;
|
|
538
|
+
childUpdateType |= UpdateType.Global;
|
|
539
|
+
}
|
|
489
540
|
if (this.clipping === true) {
|
|
490
541
|
updateType |= UpdateType.Clipping | UpdateType.RenderBounds;
|
|
491
542
|
updateParent = hasParent;
|
|
@@ -499,18 +550,18 @@ export class CoreNode extends EventEmitter {
|
|
|
499
550
|
childUpdateType |= UpdateType.RenderBounds;
|
|
500
551
|
}
|
|
501
552
|
if (updateType & UpdateType.RenderState) {
|
|
502
|
-
|
|
553
|
+
newRenderState = this.checkRenderBounds();
|
|
503
554
|
updateType |= UpdateType.IsRenderable;
|
|
504
555
|
updateParent = hasParent;
|
|
505
556
|
// if we're not going out of bounds, update the render state
|
|
506
557
|
// this is done so the update loop can finish before we mark a node
|
|
507
558
|
// as out of bounds
|
|
508
|
-
if (
|
|
509
|
-
this.updateRenderState(
|
|
559
|
+
if (newRenderState !== CoreNodeRenderState.OutOfBounds) {
|
|
560
|
+
this.updateRenderState(newRenderState);
|
|
510
561
|
}
|
|
511
562
|
}
|
|
512
563
|
if (updateType & UpdateType.WorldAlpha) {
|
|
513
|
-
this.worldAlpha = (
|
|
564
|
+
this.worldAlpha = (parent?.worldAlpha ?? 1) * this.props.alpha;
|
|
514
565
|
updateType |=
|
|
515
566
|
UpdateType.PremultipliedColors |
|
|
516
567
|
UpdateType.Children |
|
|
@@ -521,6 +572,12 @@ export class CoreNode extends EventEmitter {
|
|
|
521
572
|
if (updateType & UpdateType.IsRenderable) {
|
|
522
573
|
this.updateIsRenderable();
|
|
523
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
|
+
}
|
|
524
581
|
if (updateType & UpdateType.Clipping) {
|
|
525
582
|
this.calculateClippingRect(parentClippingRect);
|
|
526
583
|
updateType |= UpdateType.Children;
|
|
@@ -537,7 +594,7 @@ export class CoreNode extends EventEmitter {
|
|
|
537
594
|
const same = tl === tr && tl === bl && tl === br;
|
|
538
595
|
const merged = mergeColorAlphaPremultiplied(tl, alpha, true);
|
|
539
596
|
this.premultipliedColorTl = merged;
|
|
540
|
-
if (same) {
|
|
597
|
+
if (same === true) {
|
|
541
598
|
this.premultipliedColorTr =
|
|
542
599
|
this.premultipliedColorBl =
|
|
543
600
|
this.premultipliedColorBr =
|
|
@@ -549,42 +606,37 @@ export class CoreNode extends EventEmitter {
|
|
|
549
606
|
this.premultipliedColorBr = mergeColorAlphaPremultiplied(br, alpha, true);
|
|
550
607
|
}
|
|
551
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
|
+
}
|
|
552
615
|
if (updateParent === true) {
|
|
553
616
|
parent.setUpdateType(UpdateType.Children);
|
|
554
617
|
}
|
|
555
|
-
// No need to update zIndex if there is no parent
|
|
556
|
-
if (updateType & UpdateType.CalculatedZIndex && parent !== null) {
|
|
557
|
-
this.calculateZIndex();
|
|
558
|
-
// Tell parent to re-sort children
|
|
559
|
-
parent.setUpdateType(UpdateType.ZIndexSortedChildren);
|
|
560
|
-
}
|
|
561
|
-
if (props.strictBounds === true &&
|
|
562
|
-
this.renderState === CoreNodeRenderState.OutOfBounds) {
|
|
563
|
-
updateType &= ~UpdateType.RenderBounds; // remove render bounds update
|
|
564
|
-
return;
|
|
565
|
-
}
|
|
566
618
|
if (updateType & UpdateType.RecalcUniforms &&
|
|
567
619
|
this.hasShaderUpdater === true) {
|
|
620
|
+
this.updateShaderUniforms = true;
|
|
621
|
+
}
|
|
622
|
+
if (this.isRenderable === true && this.updateShaderUniforms === true) {
|
|
623
|
+
this.updateShaderUniforms = false;
|
|
568
624
|
//this exists because the boolean hasShaderUpdater === true
|
|
569
625
|
this.shader.update();
|
|
570
626
|
}
|
|
571
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
|
+
}
|
|
572
632
|
for (let i = 0, length = this.children.length; i < length; i++) {
|
|
573
633
|
const child = this.children[i];
|
|
574
|
-
|
|
634
|
+
if (childUpdateType !== 0) {
|
|
635
|
+
child.setUpdateType(childUpdateType);
|
|
636
|
+
}
|
|
575
637
|
if (child.updateType === 0) {
|
|
576
638
|
continue;
|
|
577
639
|
}
|
|
578
|
-
let childClippingRect = this.clippingRect;
|
|
579
|
-
if (this.rtt === true) {
|
|
580
|
-
childClippingRect = {
|
|
581
|
-
x: 0,
|
|
582
|
-
y: 0,
|
|
583
|
-
width: 0,
|
|
584
|
-
height: 0,
|
|
585
|
-
valid: false,
|
|
586
|
-
};
|
|
587
|
-
}
|
|
588
640
|
child.update(delta, childClippingRect);
|
|
589
641
|
}
|
|
590
642
|
}
|
|
@@ -594,32 +646,24 @@ export class CoreNode extends EventEmitter {
|
|
|
594
646
|
if (parentHasRenderTexture === true) {
|
|
595
647
|
this.notifyParentRTTOfUpdate();
|
|
596
648
|
}
|
|
597
|
-
//
|
|
598
|
-
|
|
599
|
-
if (updateType & UpdateType.ZIndexSortedChildren) {
|
|
649
|
+
//Resort children if needed
|
|
650
|
+
if (updateType & UpdateType.SortZIndexChildren) {
|
|
600
651
|
// reorder z-index
|
|
601
652
|
this.sortChildren();
|
|
602
653
|
}
|
|
603
|
-
if (this.updateTextureCoords === true) {
|
|
604
|
-
this.updateTextureCoords = false;
|
|
605
|
-
this.textureCoords = this.stage.renderer.getTextureCoords(this);
|
|
606
|
-
}
|
|
607
654
|
// If we're out of bounds, apply the render state now
|
|
608
655
|
// this is done so nodes can finish their entire update loop before
|
|
609
656
|
// being marked as out of bounds
|
|
610
|
-
if (
|
|
611
|
-
this.updateRenderState(
|
|
657
|
+
if (newRenderState === CoreNodeRenderState.OutOfBounds) {
|
|
658
|
+
this.updateRenderState(newRenderState);
|
|
612
659
|
this.updateIsRenderable();
|
|
613
660
|
if (this.rtt === true &&
|
|
614
|
-
|
|
661
|
+
newRenderState === CoreNodeRenderState.OutOfBounds) {
|
|
615
662
|
// notify children that we are going out of bounds
|
|
616
663
|
// we have to do this now before we stop processing the render tree
|
|
617
|
-
this.notifyChildrenRTTOfUpdate(
|
|
664
|
+
this.notifyChildrenRTTOfUpdate(newRenderState);
|
|
618
665
|
}
|
|
619
666
|
}
|
|
620
|
-
// reset update type
|
|
621
|
-
this.updateType = 0;
|
|
622
|
-
this.childUpdateType = 0;
|
|
623
667
|
}
|
|
624
668
|
findParentRTTNode() {
|
|
625
669
|
let rttNode = this.parent;
|
|
@@ -664,15 +708,16 @@ export class CoreNode extends EventEmitter {
|
|
|
664
708
|
return CoreNodeRenderState.InViewport;
|
|
665
709
|
}
|
|
666
710
|
// check if we dont have dimensions, take our parent's render state
|
|
667
|
-
if (this.parent !== null &&
|
|
668
|
-
(this.props.width === 0 || this.props.height === 0)) {
|
|
711
|
+
if (this.parent !== null && (this.props.w === 0 || this.props.h === 0)) {
|
|
669
712
|
return this.parent.renderState;
|
|
670
713
|
}
|
|
671
714
|
return CoreNodeRenderState.OutOfBounds;
|
|
672
715
|
}
|
|
673
716
|
updateBoundingRect() {
|
|
674
|
-
const transform = (this.sceneGlobalTransform ||
|
|
675
|
-
|
|
717
|
+
const transform = (this.sceneGlobalTransform ||
|
|
718
|
+
this.globalTransform);
|
|
719
|
+
const renderCoords = (this.sceneRenderCoords ||
|
|
720
|
+
this.renderCoords);
|
|
676
721
|
if (transform.tb === 0 || transform.tc === 0) {
|
|
677
722
|
this.renderBound = createBound(renderCoords.x1, renderCoords.y1, renderCoords.x3, renderCoords.y3, this.renderBound);
|
|
678
723
|
}
|
|
@@ -707,13 +752,13 @@ export class CoreNode extends EventEmitter {
|
|
|
707
752
|
return;
|
|
708
753
|
}
|
|
709
754
|
// clipping is enabled and we are in bounds create our own bounds
|
|
710
|
-
const { x, y,
|
|
755
|
+
const { x, y, w, h } = this.props;
|
|
711
756
|
// Pick the global transform if available, otherwise use the local transform
|
|
712
757
|
// global transform is only available if the node in an RTT chain
|
|
713
758
|
const { tx, ty } = this.sceneGlobalTransform || this.globalTransform || {};
|
|
714
759
|
const _x = tx ?? x;
|
|
715
760
|
const _y = ty ?? y;
|
|
716
|
-
this.strictBound = createBound(_x, _y, _x +
|
|
761
|
+
this.strictBound = createBound(_x, _y, _x + w, _y + h, this.strictBound);
|
|
717
762
|
this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
|
|
718
763
|
}
|
|
719
764
|
updateRenderState(renderState) {
|
|
@@ -729,6 +774,17 @@ export class CoreNode extends EventEmitter {
|
|
|
729
774
|
current: renderState,
|
|
730
775
|
});
|
|
731
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
|
+
}
|
|
732
788
|
/**
|
|
733
789
|
* Updates the `isRenderable` property based on various conditions.
|
|
734
790
|
*/
|
|
@@ -736,13 +792,20 @@ export class CoreNode extends EventEmitter {
|
|
|
736
792
|
let newIsRenderable = false;
|
|
737
793
|
let needsTextureOwnership = false;
|
|
738
794
|
// If the node is out of bounds or has an alpha of 0, it is not renderable
|
|
739
|
-
if (this.
|
|
740
|
-
this.renderState <= CoreNodeRenderState.OutOfBounds) {
|
|
795
|
+
if (this.checkBasicRenderability() === false) {
|
|
741
796
|
this.updateTextureOwnership(false);
|
|
742
797
|
this.setRenderable(false);
|
|
743
798
|
return;
|
|
744
799
|
}
|
|
745
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
|
+
}
|
|
746
809
|
needsTextureOwnership = true;
|
|
747
810
|
// we're only renderable if the texture state is loaded
|
|
748
811
|
newIsRenderable = this.texture.state === 'loaded';
|
|
@@ -751,7 +814,7 @@ export class CoreNode extends EventEmitter {
|
|
|
751
814
|
// check shader
|
|
752
815
|
(this.props.shader !== null || this.hasColorProps === true) &&
|
|
753
816
|
// check dimensions
|
|
754
|
-
|
|
817
|
+
this.hasDimensions() === true) {
|
|
755
818
|
// This mean we have dimensions and a color set, so we can render a ColorTexture
|
|
756
819
|
if (this.stage.defaultTexture &&
|
|
757
820
|
this.stage.defaultTexture.state === 'loaded') {
|
|
@@ -766,28 +829,43 @@ export class CoreNode extends EventEmitter {
|
|
|
766
829
|
* @param isRenderable - The new renderable state
|
|
767
830
|
*/
|
|
768
831
|
setRenderable(isRenderable) {
|
|
832
|
+
const previousIsRenderable = this.isRenderable;
|
|
769
833
|
this.isRenderable = isRenderable;
|
|
770
|
-
if
|
|
771
|
-
|
|
772
|
-
this.
|
|
773
|
-
|
|
834
|
+
// Emit event if renderable status has changed
|
|
835
|
+
if (previousIsRenderable !== isRenderable) {
|
|
836
|
+
this.emit('renderable', {
|
|
837
|
+
type: 'renderable',
|
|
838
|
+
isRenderable,
|
|
839
|
+
});
|
|
774
840
|
}
|
|
775
841
|
}
|
|
776
842
|
/**
|
|
777
843
|
* Changes the renderable state of the node.
|
|
778
844
|
*/
|
|
779
845
|
updateTextureOwnership(isRenderable) {
|
|
780
|
-
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;
|
|
781
859
|
}
|
|
782
860
|
calculateRenderCoords() {
|
|
783
|
-
const {
|
|
861
|
+
const { w, h } = this.props;
|
|
784
862
|
const g = this.globalTransform;
|
|
785
863
|
const tx = g.tx, ty = g.ty, ta = g.ta, tb = g.tb, tc = g.tc, td = g.td;
|
|
786
864
|
if (tb === 0 && tc === 0) {
|
|
787
865
|
const minX = tx;
|
|
788
|
-
const maxX = tx +
|
|
866
|
+
const maxX = tx + w * ta;
|
|
789
867
|
const minY = ty;
|
|
790
|
-
const maxY = ty +
|
|
868
|
+
const maxY = ty + h * td;
|
|
791
869
|
this.renderCoords = RenderCoords.translate(
|
|
792
870
|
//top-left
|
|
793
871
|
minX, minY,
|
|
@@ -803,11 +881,11 @@ export class CoreNode extends EventEmitter {
|
|
|
803
881
|
//top-left
|
|
804
882
|
tx, ty,
|
|
805
883
|
//top-right
|
|
806
|
-
tx +
|
|
884
|
+
tx + w * ta, ty + w * tc,
|
|
807
885
|
//bottom-right
|
|
808
|
-
tx +
|
|
886
|
+
tx + w * ta + h * tb, ty + w * tc + h * td,
|
|
809
887
|
//bottom-left
|
|
810
|
-
tx +
|
|
888
|
+
tx + h * tb, ty + h * td, this.renderCoords);
|
|
811
889
|
}
|
|
812
890
|
if (this.sceneGlobalTransform === undefined) {
|
|
813
891
|
return;
|
|
@@ -815,9 +893,9 @@ export class CoreNode extends EventEmitter {
|
|
|
815
893
|
const { tx: stx, ty: sty, ta: sta, tb: stb, tc: stc, td: std, } = this.sceneGlobalTransform;
|
|
816
894
|
if (stb === 0 && stc === 0) {
|
|
817
895
|
const minX = stx;
|
|
818
|
-
const maxX = stx +
|
|
896
|
+
const maxX = stx + w * sta;
|
|
819
897
|
const minY = sty;
|
|
820
|
-
const maxY = sty +
|
|
898
|
+
const maxY = sty + h * std;
|
|
821
899
|
this.sceneRenderCoords = RenderCoords.translate(
|
|
822
900
|
//top-left
|
|
823
901
|
minX, minY,
|
|
@@ -833,11 +911,11 @@ export class CoreNode extends EventEmitter {
|
|
|
833
911
|
//top-left
|
|
834
912
|
stx, sty,
|
|
835
913
|
//top-right
|
|
836
|
-
stx +
|
|
914
|
+
stx + w * sta, sty + w * stc,
|
|
837
915
|
//bottom-right
|
|
838
|
-
stx +
|
|
916
|
+
stx + w * sta + h * stb, sty + w * stc + h * std,
|
|
839
917
|
//bottom-left
|
|
840
|
-
stx +
|
|
918
|
+
stx + h * stb, sty + h * std, this.sceneRenderCoords);
|
|
841
919
|
}
|
|
842
920
|
}
|
|
843
921
|
/**
|
|
@@ -855,8 +933,8 @@ export class CoreNode extends EventEmitter {
|
|
|
855
933
|
if (clipping === true && isRotated === false) {
|
|
856
934
|
clippingRect.x = gt.tx;
|
|
857
935
|
clippingRect.y = gt.ty;
|
|
858
|
-
clippingRect.
|
|
859
|
-
clippingRect.
|
|
936
|
+
clippingRect.w = this.props.w * gt.ta;
|
|
937
|
+
clippingRect.h = this.props.h * gt.td;
|
|
860
938
|
clippingRect.valid = true;
|
|
861
939
|
}
|
|
862
940
|
else {
|
|
@@ -872,16 +950,6 @@ export class CoreNode extends EventEmitter {
|
|
|
872
950
|
clippingRect.valid = true;
|
|
873
951
|
}
|
|
874
952
|
}
|
|
875
|
-
calculateZIndex() {
|
|
876
|
-
const props = this.props;
|
|
877
|
-
const z = props.zIndex || 0;
|
|
878
|
-
const p = props.parent?.zIndex || 0;
|
|
879
|
-
let zIndex = z;
|
|
880
|
-
if (props.parent?.zIndexLocked) {
|
|
881
|
-
zIndex = z < p ? z : p;
|
|
882
|
-
}
|
|
883
|
-
this.calcZIndex = zIndex;
|
|
884
|
-
}
|
|
885
953
|
/**
|
|
886
954
|
* Destroy the node and cleanup all resources
|
|
887
955
|
*/
|
|
@@ -893,21 +961,23 @@ export class CoreNode extends EventEmitter {
|
|
|
893
961
|
this.destroyed = true;
|
|
894
962
|
this.unloadTexture();
|
|
895
963
|
this.isRenderable = false;
|
|
964
|
+
if (this.hasShaderTimeFn === true) {
|
|
965
|
+
this.stage.untrackTimedNode(this);
|
|
966
|
+
}
|
|
896
967
|
// Kill children
|
|
897
968
|
while (this.children.length > 0) {
|
|
898
969
|
this.children[0].destroy();
|
|
899
970
|
}
|
|
900
971
|
const parent = this.parent;
|
|
901
972
|
if (parent !== null) {
|
|
902
|
-
|
|
903
|
-
parent.children.splice(index, 1);
|
|
904
|
-
parent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
|
|
973
|
+
parent.removeChild(this);
|
|
905
974
|
}
|
|
906
975
|
this.props.parent = null;
|
|
907
976
|
this.props.texture = null;
|
|
908
977
|
if (this.rtt === true) {
|
|
909
978
|
this.stage.renderer.removeRTTNode(this);
|
|
910
979
|
}
|
|
980
|
+
this.stage.requestRender();
|
|
911
981
|
}
|
|
912
982
|
renderQuads(renderer) {
|
|
913
983
|
if (this.parentHasRenderTexture === true) {
|
|
@@ -915,37 +985,134 @@ export class CoreNode extends EventEmitter {
|
|
|
915
985
|
if (rtt === false || this.parentRenderTexture !== renderer.activeRttNode)
|
|
916
986
|
return;
|
|
917
987
|
}
|
|
918
|
-
const
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
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);
|
|
949
1116
|
}
|
|
950
1117
|
//#region Properties
|
|
951
1118
|
get id() {
|
|
@@ -968,12 +1135,12 @@ export class CoreNode extends EventEmitter {
|
|
|
968
1135
|
}
|
|
969
1136
|
get absX() {
|
|
970
1137
|
return (this.props.x +
|
|
971
|
-
-this.props.
|
|
1138
|
+
-this.props.w * this.props.mountX +
|
|
972
1139
|
(this.props.parent?.absX || this.props.parent?.globalTransform?.tx || 0));
|
|
973
1140
|
}
|
|
974
1141
|
get absY() {
|
|
975
1142
|
return (this.props.y +
|
|
976
|
-
-this.props.
|
|
1143
|
+
-this.props.h * this.props.mountY +
|
|
977
1144
|
(this.props.parent?.absY ?? 0));
|
|
978
1145
|
}
|
|
979
1146
|
get y() {
|
|
@@ -985,34 +1152,46 @@ export class CoreNode extends EventEmitter {
|
|
|
985
1152
|
this.setUpdateType(UpdateType.Local);
|
|
986
1153
|
}
|
|
987
1154
|
}
|
|
988
|
-
get
|
|
989
|
-
return this.props.
|
|
1155
|
+
get w() {
|
|
1156
|
+
return this.props.w;
|
|
990
1157
|
}
|
|
991
|
-
set
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
if (
|
|
997
|
-
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;
|
|
998
1170
|
this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
|
|
999
|
-
|
|
1171
|
+
updateType |= UpdateType.RenderTexture;
|
|
1000
1172
|
}
|
|
1173
|
+
this.setUpdateType(updateType);
|
|
1001
1174
|
}
|
|
1002
1175
|
}
|
|
1003
|
-
get
|
|
1004
|
-
return this.props.
|
|
1176
|
+
get h() {
|
|
1177
|
+
return this.props.h;
|
|
1005
1178
|
}
|
|
1006
|
-
set
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
if (
|
|
1012
|
-
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;
|
|
1013
1191
|
this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
|
|
1014
|
-
|
|
1192
|
+
updateType |= UpdateType.RenderTexture;
|
|
1015
1193
|
}
|
|
1194
|
+
this.setUpdateType(updateType);
|
|
1016
1195
|
}
|
|
1017
1196
|
}
|
|
1018
1197
|
get scale() {
|
|
@@ -1126,7 +1305,16 @@ export class CoreNode extends EventEmitter {
|
|
|
1126
1305
|
return this.props.autosize;
|
|
1127
1306
|
}
|
|
1128
1307
|
set autosize(value) {
|
|
1308
|
+
if (this.props.autosize === value) {
|
|
1309
|
+
return;
|
|
1310
|
+
}
|
|
1129
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
|
+
}
|
|
1130
1318
|
}
|
|
1131
1319
|
get boundsMargin() {
|
|
1132
1320
|
const props = this.props;
|
|
@@ -1265,26 +1453,34 @@ export class CoreNode extends EventEmitter {
|
|
|
1265
1453
|
this.hasColorProps = value > 0;
|
|
1266
1454
|
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1267
1455
|
}
|
|
1268
|
-
// we're only interested in parent zIndex to test
|
|
1269
|
-
// if we should use node zIndex is higher then parent zIndex
|
|
1270
|
-
get zIndexLocked() {
|
|
1271
|
-
return this.props.zIndexLocked || 0;
|
|
1272
|
-
}
|
|
1273
|
-
set zIndexLocked(value) {
|
|
1274
|
-
this.props.zIndexLocked = value;
|
|
1275
|
-
this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
|
|
1276
|
-
for (let i = 0, length = this.children.length; i < length; i++) {
|
|
1277
|
-
this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
|
|
1278
|
-
}
|
|
1279
|
-
}
|
|
1280
1456
|
get zIndex() {
|
|
1281
1457
|
return this.props.zIndex;
|
|
1282
1458
|
}
|
|
1283
1459
|
set zIndex(value) {
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
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
|
+
}
|
|
1288
1484
|
}
|
|
1289
1485
|
}
|
|
1290
1486
|
get parent() {
|
|
@@ -1297,23 +1493,13 @@ export class CoreNode extends EventEmitter {
|
|
|
1297
1493
|
}
|
|
1298
1494
|
this.props.parent = newParent;
|
|
1299
1495
|
if (oldParent) {
|
|
1300
|
-
|
|
1301
|
-
oldParent.children.splice(index, 1);
|
|
1302
|
-
oldParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
|
|
1303
|
-
}
|
|
1304
|
-
if (newParent) {
|
|
1305
|
-
newParent.children.push(this);
|
|
1306
|
-
// Since this node has a new parent, to be safe, have it do a full update.
|
|
1307
|
-
this.setUpdateType(UpdateType.All);
|
|
1308
|
-
// Tell parent that it's children need to be updated and sorted.
|
|
1309
|
-
newParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
|
|
1310
|
-
// If the new parent has an RTT enabled, apply RTT inheritance
|
|
1311
|
-
if (newParent.rtt || newParent.parentHasRenderTexture) {
|
|
1312
|
-
this.applyRTTInheritance(newParent);
|
|
1313
|
-
}
|
|
1496
|
+
oldParent.removeChild(this, newParent);
|
|
1314
1497
|
}
|
|
1315
|
-
|
|
1316
|
-
|
|
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);
|
|
1317
1503
|
}
|
|
1318
1504
|
get rtt() {
|
|
1319
1505
|
return this.props.rtt;
|
|
@@ -1337,8 +1523,8 @@ export class CoreNode extends EventEmitter {
|
|
|
1337
1523
|
}
|
|
1338
1524
|
initRenderTexture() {
|
|
1339
1525
|
this.framebufferDimensions = {
|
|
1340
|
-
|
|
1341
|
-
|
|
1526
|
+
w: this.props.w,
|
|
1527
|
+
h: this.props.h,
|
|
1342
1528
|
};
|
|
1343
1529
|
this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
|
|
1344
1530
|
this.stage.renderer.renderToTexture(this);
|
|
@@ -1397,8 +1583,15 @@ export class CoreNode extends EventEmitter {
|
|
|
1397
1583
|
}
|
|
1398
1584
|
if (shader.shaderKey !== 'default') {
|
|
1399
1585
|
this.hasShaderUpdater = shader.update !== undefined;
|
|
1586
|
+
this.hasShaderTimeFn = shader.time !== undefined;
|
|
1400
1587
|
shader.attachNode(this);
|
|
1401
1588
|
}
|
|
1589
|
+
if (this.hasShaderTimeFn === true) {
|
|
1590
|
+
this.stage.trackTimedNode(this);
|
|
1591
|
+
}
|
|
1592
|
+
else {
|
|
1593
|
+
this.stage.untrackTimedNode(this);
|
|
1594
|
+
}
|
|
1402
1595
|
this.props.shader = shader;
|
|
1403
1596
|
this.setUpdateType(UpdateType.IsRenderable | UpdateType.RecalcUniforms);
|
|
1404
1597
|
}
|
|
@@ -1416,8 +1609,8 @@ export class CoreNode extends EventEmitter {
|
|
|
1416
1609
|
}
|
|
1417
1610
|
this.texture = this.stage.txManager.createTexture('ImageTexture', {
|
|
1418
1611
|
src: imageUrl,
|
|
1419
|
-
|
|
1420
|
-
|
|
1612
|
+
w: this.props.w,
|
|
1613
|
+
h: this.props.h,
|
|
1421
1614
|
type: this.props.imageType,
|
|
1422
1615
|
sx: this.props.srcX,
|
|
1423
1616
|
sy: this.props.srcY,
|
|
@@ -1466,7 +1659,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1466
1659
|
return this.rttParent.framebufferDimensions;
|
|
1467
1660
|
}
|
|
1468
1661
|
this.rttParent = this.findParentRTTNode();
|
|
1469
|
-
return this.rttParent.framebufferDimensions;
|
|
1662
|
+
return this.rttParent ? this.rttParent.framebufferDimensions : null;
|
|
1470
1663
|
}
|
|
1471
1664
|
/**
|
|
1472
1665
|
* Returns the parent render texture node if it exists.
|
|
@@ -1491,17 +1684,26 @@ export class CoreNode extends EventEmitter {
|
|
|
1491
1684
|
const oldTexture = this.props.texture;
|
|
1492
1685
|
if (oldTexture) {
|
|
1493
1686
|
this.unloadTexture();
|
|
1687
|
+
if (this.autosizer !== null && value === null) {
|
|
1688
|
+
this.autosizer.setMode(AutosizeMode.Children); // Set to children size mode
|
|
1689
|
+
}
|
|
1494
1690
|
}
|
|
1495
1691
|
this.textureCoords = undefined;
|
|
1496
1692
|
this.props.texture = value;
|
|
1497
1693
|
if (value !== null) {
|
|
1498
|
-
|
|
1694
|
+
if (this.autosizer !== null) {
|
|
1695
|
+
this.autosizer.setMode(AutosizeMode.Texture); // Set to texture size mode
|
|
1696
|
+
}
|
|
1697
|
+
value.setRenderableOwner(this._id, this.isRenderable);
|
|
1499
1698
|
this.loadTexture();
|
|
1500
1699
|
}
|
|
1501
1700
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
1502
1701
|
}
|
|
1503
1702
|
set textureOptions(value) {
|
|
1504
1703
|
this.props.textureOptions = value;
|
|
1704
|
+
if (this.stage.calculateTextureCoord === true && value !== null) {
|
|
1705
|
+
this.textureCoords = this.stage.renderer.getTextureCoords(this);
|
|
1706
|
+
}
|
|
1505
1707
|
}
|
|
1506
1708
|
get textureOptions() {
|
|
1507
1709
|
return this.props.textureOptions;
|
|
@@ -1520,17 +1722,6 @@ export class CoreNode extends EventEmitter {
|
|
|
1520
1722
|
this.hasRTTupdates = true;
|
|
1521
1723
|
this.parent?.setRTTUpdates(type);
|
|
1522
1724
|
}
|
|
1523
|
-
get strictBounds() {
|
|
1524
|
-
return this.props.strictBounds;
|
|
1525
|
-
}
|
|
1526
|
-
set strictBounds(v) {
|
|
1527
|
-
if (v === this.props.strictBounds) {
|
|
1528
|
-
return;
|
|
1529
|
-
}
|
|
1530
|
-
this.props.strictBounds = v;
|
|
1531
|
-
this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
1532
|
-
this.childUpdateType |= UpdateType.RenderBounds | UpdateType.Children;
|
|
1533
|
-
}
|
|
1534
1725
|
animate(props, settings) {
|
|
1535
1726
|
const animation = new CoreAnimation(this, props, settings);
|
|
1536
1727
|
const controller = new CoreAnimationController(this.stage.animationManager, animation);
|
|
@@ -1539,5 +1730,56 @@ export class CoreNode extends EventEmitter {
|
|
|
1539
1730
|
flush() {
|
|
1540
1731
|
// no-op
|
|
1541
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
|
+
}
|
|
1542
1784
|
}
|
|
1543
1785
|
//# sourceMappingURL=CoreNode.js.map
|