@lightningtv/renderer 2.16.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 -0
- package/NOTICE +3 -0
- package/README.md +147 -0
- package/dist/exports/canvas-shaders.d.ts +10 -0
- package/dist/exports/canvas-shaders.js +27 -0
- package/dist/exports/canvas-shaders.js.map +1 -0
- package/dist/exports/canvas.d.ts +20 -0
- package/dist/exports/canvas.js +39 -0
- package/dist/exports/canvas.js.map +1 -0
- package/dist/exports/index.d.ts +45 -0
- package/dist/exports/index.js +58 -0
- package/dist/exports/index.js.map +1 -0
- package/dist/exports/inspector.d.ts +4 -0
- package/dist/exports/inspector.js +23 -0
- package/dist/exports/inspector.js.map +1 -0
- package/dist/exports/utils.d.ts +26 -0
- package/dist/exports/utils.js +45 -0
- package/dist/exports/utils.js.map +1 -0
- package/dist/exports/webgl-shaders.d.ts +11 -0
- package/dist/exports/webgl-shaders.js +28 -0
- package/dist/exports/webgl-shaders.js.map +1 -0
- package/dist/exports/webgl.d.ts +19 -0
- package/dist/exports/webgl.js +38 -0
- package/dist/exports/webgl.js.map +1 -0
- package/dist/src/common/CommonTypes.d.ts +97 -0
- package/dist/src/common/CommonTypes.js +20 -0
- package/dist/src/common/CommonTypes.js.map +1 -0
- package/dist/src/common/EventEmitter.d.ts +12 -0
- package/dist/src/common/EventEmitter.js +66 -0
- package/dist/src/common/EventEmitter.js.map +1 -0
- package/dist/src/common/IAnimationController.d.ts +66 -0
- package/dist/src/common/IAnimationController.js +2 -0
- package/dist/src/common/IAnimationController.js.map +1 -0
- package/dist/src/common/IEventEmitter.d.ts +8 -0
- package/dist/src/common/IEventEmitter.js +18 -0
- package/dist/src/common/IEventEmitter.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +865 -0
- package/dist/src/core/CoreNode.js +1532 -0
- package/dist/src/core/CoreNode.js.map +1 -0
- package/dist/src/core/CoreShaderManager.d.ts +82 -0
- package/dist/src/core/CoreShaderManager.js +128 -0
- package/dist/src/core/CoreShaderManager.js.map +1 -0
- package/dist/src/core/CoreTextNode.d.ts +103 -0
- package/dist/src/core/CoreTextNode.js +331 -0
- package/dist/src/core/CoreTextNode.js.map +1 -0
- package/dist/src/core/CoreTextureManager.d.ts +249 -0
- package/dist/src/core/CoreTextureManager.js +362 -0
- package/dist/src/core/CoreTextureManager.js.map +1 -0
- package/dist/src/core/Stage.d.ts +210 -0
- package/dist/src/core/Stage.js +636 -0
- package/dist/src/core/Stage.js.map +1 -0
- package/dist/src/core/TextureMemoryManager.d.ts +149 -0
- package/dist/src/core/TextureMemoryManager.js +271 -0
- package/dist/src/core/TextureMemoryManager.js.map +1 -0
- package/dist/src/core/animations/AnimationManager.d.ts +7 -0
- package/dist/src/core/animations/AnimationManager.js +34 -0
- package/dist/src/core/animations/AnimationManager.js.map +1 -0
- package/dist/src/core/animations/CoreAnimation.d.ts +38 -0
- package/dist/src/core/animations/CoreAnimation.js +261 -0
- package/dist/src/core/animations/CoreAnimation.js.map +1 -0
- package/dist/src/core/animations/CoreAnimationController.d.ts +27 -0
- package/dist/src/core/animations/CoreAnimationController.js +133 -0
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -0
- package/dist/src/core/animations/SimpleAnimation.d.ts +28 -0
- package/dist/src/core/animations/SimpleAnimation.js +96 -0
- package/dist/src/core/animations/SimpleAnimation.js.map +1 -0
- package/dist/src/core/lib/ContextSpy.d.ts +12 -0
- package/dist/src/core/lib/ContextSpy.js +38 -0
- package/dist/src/core/lib/ContextSpy.js.map +1 -0
- package/dist/src/core/lib/ImageWorker.d.ts +16 -0
- package/dist/src/core/lib/ImageWorker.js +201 -0
- package/dist/src/core/lib/ImageWorker.js.map +1 -0
- package/dist/src/core/lib/Matrix3d.d.ts +73 -0
- package/dist/src/core/lib/Matrix3d.js +230 -0
- package/dist/src/core/lib/Matrix3d.js.map +1 -0
- package/dist/src/core/lib/RenderCoords.d.ts +13 -0
- package/dist/src/core/lib/RenderCoords.js +63 -0
- package/dist/src/core/lib/RenderCoords.js.map +1 -0
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +694 -0
- package/dist/src/core/lib/WebGlContextWrapper.js +1049 -0
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +16 -0
- package/dist/src/core/lib/textureCompression.js +129 -0
- package/dist/src/core/lib/textureCompression.js.map +1 -0
- package/dist/src/core/lib/textureSvg.d.ts +16 -0
- package/dist/src/core/lib/textureSvg.js +63 -0
- package/dist/src/core/lib/textureSvg.js.map +1 -0
- package/dist/src/core/lib/utils.d.ts +60 -0
- package/dist/src/core/lib/utils.js +267 -0
- package/dist/src/core/lib/utils.js.map +1 -0
- package/dist/src/core/lib/validateImageBitmap.d.ts +6 -0
- package/dist/src/core/lib/validateImageBitmap.js +68 -0
- package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
- 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/Platform.d.ts +37 -0
- package/dist/src/core/platforms/Platform.js +22 -0
- package/dist/src/core/platforms/Platform.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
- package/dist/src/core/platforms/web/WebPlatform.js +58 -0
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
- package/dist/src/core/renderers/CoreContextTexture.d.ts +12 -0
- package/dist/src/core/renderers/CoreContextTexture.js +34 -0
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -0
- package/dist/src/core/renderers/CoreRenderOp.d.ts +3 -0
- package/dist/src/core/renderers/CoreRenderOp.js +21 -0
- package/dist/src/core/renderers/CoreRenderOp.js.map +1 -0
- package/dist/src/core/renderers/CoreRenderer.d.ts +78 -0
- package/dist/src/core/renderers/CoreRenderer.js +37 -0
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/CoreShader.d.ts +9 -0
- package/dist/src/core/renderers/CoreShader.js +28 -0
- package/dist/src/core/renderers/CoreShader.js.map +1 -0
- package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
- package/dist/src/core/renderers/CoreShaderNode.js +113 -0
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
- package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
- package/dist/src/core/renderers/CoreShaderProgram.js +20 -0
- package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
- 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 +16 -0
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +124 -0
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +37 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +215 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +57 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.js +124 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +14 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +138 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +19 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +58 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -0
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +43 -0
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.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 +56 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +239 -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 +616 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +83 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +233 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +55 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +9 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +38 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +57 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +224 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +44 -0
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +118 -0
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +136 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +573 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +222 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +219 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +27 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js +48 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +55 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js +106 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +47 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +51 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.d.ts +10 -0
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +31 -0
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +87 -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 +119 -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 +413 -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 +131 -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 +160 -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 +129 -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 +39 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +116 -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 +9 -0
- package/dist/src/core/shaders/canvas/Border.js +57 -0
- package/dist/src/core/shaders/canvas/Border.js.map +1 -0
- package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
- package/dist/src/core/shaders/canvas/HolePunch.js +38 -0
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
- package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
- package/dist/src/core/shaders/canvas/LinearGradient.js +48 -0
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
- package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
- package/dist/src/core/shaders/canvas/RadialGradient.js +70 -0
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
- package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
- package/dist/src/core/shaders/canvas/Rounded.js +33 -0
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +43 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +41 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +40 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
- package/dist/src/core/shaders/canvas/Shadow.js +31 -0
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
- package/dist/src/core/shaders/canvas/utils/render.js +84 -0
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +38 -0
- package/dist/src/core/shaders/templates/BorderTemplate.js +73 -0
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +35 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js +47 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.js +67 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +24 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +9 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +23 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.js +66 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/shaderUtils.d.ts +5 -0
- package/dist/src/core/shaders/templates/shaderUtils.js +41 -0
- package/dist/src/core/shaders/templates/shaderUtils.js.map +1 -0
- package/dist/src/core/shaders/utils.d.ts +5 -0
- package/dist/src/core/shaders/utils.js +41 -0
- package/dist/src/core/shaders/utils.js.map +1 -0
- package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
- package/dist/src/core/shaders/webgl/Border.js +110 -0
- package/dist/src/core/shaders/webgl/Border.js.map +1 -0
- package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
- package/dist/src/core/shaders/webgl/Default.js +86 -0
- package/dist/src/core/shaders/webgl/Default.js.map +1 -0
- package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
- package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
- package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
- package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
- package/dist/src/core/shaders/webgl/HolePunch.js +65 -0
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
- package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
- package/dist/src/core/shaders/webgl/LinearGradient.js +76 -0
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
- package/dist/src/core/shaders/webgl/Magnifier.d.ts +46 -0
- package/dist/src/core/shaders/webgl/Magnifier.js +107 -0
- package/dist/src/core/shaders/webgl/Magnifier.js.map +1 -0
- package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RadialGradient.js +74 -0
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
- package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
- package/dist/src/core/shaders/webgl/Rounded.js +86 -0
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder copy.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js +218 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +140 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +162 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +84 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +32 -0
- package/dist/src/core/shaders/webgl/SdfShader.js +116 -0
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
- package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/Shadow.js +110 -0
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
- package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
- package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +72 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +217 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -0
- package/dist/src/core/text-rendering/TrFontManager.d.ts +26 -0
- package/dist/src/core/text-rendering/TrFontManager.js +131 -0
- package/dist/src/core/text-rendering/TrFontManager.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +39 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +125 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +103 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +21 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +62 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +88 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +118 -0
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +63 -0
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +14 -0
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +66 -0
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/utils.d.ts +1 -0
- package/dist/src/core/text-rendering/font-face-types/utils.js +38 -0
- package/dist/src/core/text-rendering/font-face-types/utils.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +59 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +397 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +120 -0
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +551 -0
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +92 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +607 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +12 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +61 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +33 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +52 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +13 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +32 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +23 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +84 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +4 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +34 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +20 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +308 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +10 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +40 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +39 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +373 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +178 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -0
- package/dist/src/core/textures/ColorTexture.d.ts +36 -0
- package/dist/src/core/textures/ColorTexture.js +76 -0
- package/dist/src/core/textures/ColorTexture.js.map +1 -0
- package/dist/src/core/textures/ImageTexture.d.ts +124 -0
- package/dist/src/core/textures/ImageTexture.js +240 -0
- package/dist/src/core/textures/ImageTexture.js.map +1 -0
- package/dist/src/core/textures/NoiseTexture.d.ts +43 -0
- package/dist/src/core/textures/NoiseTexture.js +68 -0
- package/dist/src/core/textures/NoiseTexture.js.map +1 -0
- package/dist/src/core/textures/RenderTexture.d.ts +29 -0
- package/dist/src/core/textures/RenderTexture.js +54 -0
- package/dist/src/core/textures/RenderTexture.js.map +1 -0
- package/dist/src/core/textures/SubTexture.d.ts +63 -0
- package/dist/src/core/textures/SubTexture.js +135 -0
- package/dist/src/core/textures/SubTexture.js.map +1 -0
- package/dist/src/core/textures/Texture.d.ts +211 -0
- package/dist/src/core/textures/Texture.js +232 -0
- package/dist/src/core/textures/Texture.js.map +1 -0
- package/dist/src/core/utils.d.ts +22 -0
- package/dist/src/core/utils.js +173 -0
- package/dist/src/core/utils.js.map +1 -0
- 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/INode.d.ts +63 -0
- package/dist/src/main-api/INode.js +2 -0
- package/dist/src/main-api/INode.js.map +1 -0
- package/dist/src/main-api/Inspector.d.ts +21 -0
- package/dist/src/main-api/Inspector.js +376 -0
- package/dist/src/main-api/Inspector.js.map +1 -0
- package/dist/src/main-api/Renderer.d.ts +543 -0
- package/dist/src/main-api/Renderer.js +431 -0
- package/dist/src/main-api/Renderer.js.map +1 -0
- 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/main-api/utils.d.ts +2 -0
- package/dist/src/main-api/utils.js +34 -0
- package/dist/src/main-api/utils.js.map +1 -0
- package/dist/src/utils.d.ts +104 -0
- package/dist/src/utils.js +211 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/tsconfig.dist.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/exports/canvas.ts +39 -0
- package/exports/index.ts +89 -0
- package/exports/inspector.ts +24 -0
- package/exports/utils.ts +44 -0
- package/exports/webgl.ts +38 -0
- package/package.json +91 -0
- package/scripts/please-use-pnpm.js +13 -0
- package/src/common/CommonTypes.ts +146 -0
- package/src/common/EventEmitter.ts +77 -0
- package/src/common/IAnimationController.ts +92 -0
- package/src/common/IEventEmitter.ts +28 -0
- package/src/core/CoreNode.test.ts +202 -0
- package/src/core/CoreNode.ts +2487 -0
- package/src/core/CoreShaderManager.ts +292 -0
- package/src/core/CoreTextNode.ts +455 -0
- package/src/core/CoreTextureManager.ts +561 -0
- package/src/core/Stage.ts +826 -0
- package/src/core/TextureMemoryManager.ts +414 -0
- package/src/core/animations/AnimationManager.ts +38 -0
- package/src/core/animations/CoreAnimation.ts +347 -0
- package/src/core/animations/CoreAnimationController.ts +166 -0
- package/src/core/lib/ContextSpy.ts +41 -0
- package/src/core/lib/ImageWorker.ts +280 -0
- package/src/core/lib/Matrix3d.ts +244 -0
- package/src/core/lib/RenderCoords.ts +86 -0
- package/src/core/lib/WebGlContextWrapper.ts +1332 -0
- package/src/core/lib/textureCompression.ts +152 -0
- package/src/core/lib/textureSvg.ts +78 -0
- package/src/core/lib/utils.ts +388 -0
- package/src/core/lib/validateImageBitmap.ts +76 -0
- package/src/core/platform.ts +100 -0
- package/src/core/renderers/CoreContextTexture.ts +43 -0
- package/src/core/renderers/CoreRenderOp.ts +22 -0
- package/src/core/renderers/CoreRenderer.ts +115 -0
- package/src/core/renderers/CoreShader.ts +41 -0
- package/src/core/renderers/canvas/CanvasCoreRenderer.ts +375 -0
- package/src/core/renderers/canvas/CanvasCoreTexture.ts +153 -0
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +231 -0
- package/src/core/renderers/canvas/internal/ColorUtils.ts +69 -0
- package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +48 -0
- package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +91 -0
- package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +50 -0
- package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +313 -0
- package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +125 -0
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +821 -0
- package/src/core/renderers/webgl/WebGlCoreShader.ts +365 -0
- package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -0
- package/src/core/renderers/webgl/internal/RendererUtils.ts +155 -0
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -0
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -0
- package/src/core/renderers/webgl/shaders/DefaultShader.ts +93 -0
- package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -0
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +580 -0
- package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +167 -0
- package/src/core/renderers/webgl/shaders/SdfShader.ts +204 -0
- package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -0
- package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +87 -0
- package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -0
- package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -0
- package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -0
- package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +159 -0
- package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +127 -0
- package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +148 -0
- package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +67 -0
- package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +157 -0
- package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +171 -0
- package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +168 -0
- package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +187 -0
- package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +110 -0
- package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +196 -0
- package/src/core/text-rendering/TextRenderingUtils.ts +36 -0
- package/src/core/text-rendering/TextTextureRendererUtils.ts +263 -0
- package/src/core/text-rendering/TrFontManager.ts +183 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +176 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +171 -0
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +187 -0
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +94 -0
- package/src/core/text-rendering/font-face-types/utils.ts +39 -0
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +509 -0
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +808 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +853 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +117 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +408 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +52 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -0
- package/src/core/text-rendering/renderers/TextRenderer.ts +557 -0
- package/src/core/textures/ColorTexture.ts +102 -0
- package/src/core/textures/ImageTexture.ts +400 -0
- package/src/core/textures/NoiseTexture.ts +104 -0
- package/src/core/textures/RenderTexture.ts +85 -0
- package/src/core/textures/SubTexture.ts +205 -0
- package/src/core/textures/Texture.ts +376 -0
- package/src/core/utils.ts +227 -0
- package/src/env.d.ts +7 -0
- package/src/main-api/DynamicShaderController.ts +104 -0
- package/src/main-api/INode.ts +101 -0
- package/src/main-api/Inspector.ts +522 -0
- package/src/main-api/Renderer.ts +807 -0
- package/src/main-api/ShaderController.ts +80 -0
- package/src/main-api/utils.ts +45 -0
- package/src/utils.ts +248 -0
|
@@ -0,0 +1,1532 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
+
* following copyright and licenses apply:
|
|
4
|
+
*
|
|
5
|
+
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*/
|
|
19
|
+
import { assertTruthy, getNewId, isProductionEnvironment, mergeColorAlphaPremultiplied, } from '../utils.js';
|
|
20
|
+
import {} from './textures/Texture.js';
|
|
21
|
+
import { EventEmitter } from '../common/EventEmitter.js';
|
|
22
|
+
import { copyRect, intersectRect, createBound, boundInsideBound, boundLargeThanBound, createPreloadBounds, } from './lib/utils.js';
|
|
23
|
+
import { Matrix3d } from './lib/Matrix3d.js';
|
|
24
|
+
import { RenderCoords } from './lib/RenderCoords.js';
|
|
25
|
+
import { CoreAnimation } from './animations/CoreAnimation.js';
|
|
26
|
+
import { CoreAnimationController } from './animations/CoreAnimationController.js';
|
|
27
|
+
export var CoreNodeRenderState;
|
|
28
|
+
(function (CoreNodeRenderState) {
|
|
29
|
+
CoreNodeRenderState[CoreNodeRenderState["Init"] = 0] = "Init";
|
|
30
|
+
CoreNodeRenderState[CoreNodeRenderState["OutOfBounds"] = 2] = "OutOfBounds";
|
|
31
|
+
CoreNodeRenderState[CoreNodeRenderState["InBounds"] = 4] = "InBounds";
|
|
32
|
+
CoreNodeRenderState[CoreNodeRenderState["InViewport"] = 8] = "InViewport";
|
|
33
|
+
})(CoreNodeRenderState || (CoreNodeRenderState = {}));
|
|
34
|
+
const CoreNodeRenderStateMap = new Map();
|
|
35
|
+
CoreNodeRenderStateMap.set(CoreNodeRenderState.Init, 'init');
|
|
36
|
+
CoreNodeRenderStateMap.set(CoreNodeRenderState.OutOfBounds, 'outOfBounds');
|
|
37
|
+
CoreNodeRenderStateMap.set(CoreNodeRenderState.InBounds, 'inBounds');
|
|
38
|
+
CoreNodeRenderStateMap.set(CoreNodeRenderState.InViewport, 'inViewport');
|
|
39
|
+
export var UpdateType;
|
|
40
|
+
(function (UpdateType) {
|
|
41
|
+
/**
|
|
42
|
+
* Child updates
|
|
43
|
+
*/
|
|
44
|
+
UpdateType[UpdateType["Children"] = 1] = "Children";
|
|
45
|
+
/**
|
|
46
|
+
* Scale/Rotate transform update
|
|
47
|
+
*
|
|
48
|
+
* @remarks
|
|
49
|
+
* CoreNode Properties Updated:
|
|
50
|
+
* - `scaleRotateTransform`
|
|
51
|
+
*/
|
|
52
|
+
UpdateType[UpdateType["ScaleRotate"] = 2] = "ScaleRotate";
|
|
53
|
+
/**
|
|
54
|
+
* Translate transform update (x/y/width/height/pivot/mount)
|
|
55
|
+
*
|
|
56
|
+
* @remarks
|
|
57
|
+
* CoreNode Properties Updated:
|
|
58
|
+
* - `localTransform`
|
|
59
|
+
*/
|
|
60
|
+
UpdateType[UpdateType["Local"] = 4] = "Local";
|
|
61
|
+
/**
|
|
62
|
+
* Global Transform update
|
|
63
|
+
*
|
|
64
|
+
* @remarks
|
|
65
|
+
* CoreNode Properties Updated:
|
|
66
|
+
* - `globalTransform`
|
|
67
|
+
* - `renderCoords`
|
|
68
|
+
* - `renderBound`
|
|
69
|
+
*/
|
|
70
|
+
UpdateType[UpdateType["Global"] = 8] = "Global";
|
|
71
|
+
/**
|
|
72
|
+
* Clipping rect update
|
|
73
|
+
*
|
|
74
|
+
* @remarks
|
|
75
|
+
* CoreNode Properties Updated:
|
|
76
|
+
* - `clippingRect`
|
|
77
|
+
*/
|
|
78
|
+
UpdateType[UpdateType["Clipping"] = 16] = "Clipping";
|
|
79
|
+
/**
|
|
80
|
+
* Calculated ZIndex update
|
|
81
|
+
*
|
|
82
|
+
* @remarks
|
|
83
|
+
* CoreNode Properties Updated:
|
|
84
|
+
* - `calcZIndex`
|
|
85
|
+
*/
|
|
86
|
+
UpdateType[UpdateType["CalculatedZIndex"] = 32] = "CalculatedZIndex";
|
|
87
|
+
/**
|
|
88
|
+
* Z-Index Sorted Children update
|
|
89
|
+
*
|
|
90
|
+
* @remarks
|
|
91
|
+
* CoreNode Properties Updated:
|
|
92
|
+
* - `children` (sorts children by their `calcZIndex`)
|
|
93
|
+
*/
|
|
94
|
+
UpdateType[UpdateType["ZIndexSortedChildren"] = 64] = "ZIndexSortedChildren";
|
|
95
|
+
/**
|
|
96
|
+
* Premultiplied Colors update
|
|
97
|
+
*
|
|
98
|
+
* @remarks
|
|
99
|
+
* CoreNode Properties Updated:
|
|
100
|
+
* - `premultipliedColorTl`
|
|
101
|
+
* - `premultipliedColorTr`
|
|
102
|
+
* - `premultipliedColorBl`
|
|
103
|
+
* - `premultipliedColorBr`
|
|
104
|
+
*/
|
|
105
|
+
UpdateType[UpdateType["PremultipliedColors"] = 128] = "PremultipliedColors";
|
|
106
|
+
/**
|
|
107
|
+
* World Alpha update
|
|
108
|
+
*
|
|
109
|
+
* @remarks
|
|
110
|
+
* CoreNode Properties Updated:
|
|
111
|
+
* - `worldAlpha` = `parent.worldAlpha` * `alpha`
|
|
112
|
+
*/
|
|
113
|
+
UpdateType[UpdateType["WorldAlpha"] = 256] = "WorldAlpha";
|
|
114
|
+
/**
|
|
115
|
+
* Render State update
|
|
116
|
+
*
|
|
117
|
+
* @remarks
|
|
118
|
+
* CoreNode Properties Updated:
|
|
119
|
+
* - `renderState`
|
|
120
|
+
*/
|
|
121
|
+
UpdateType[UpdateType["RenderState"] = 512] = "RenderState";
|
|
122
|
+
/**
|
|
123
|
+
* Is Renderable update
|
|
124
|
+
*
|
|
125
|
+
* @remarks
|
|
126
|
+
* CoreNode Properties Updated:
|
|
127
|
+
* - `isRenderable`
|
|
128
|
+
*/
|
|
129
|
+
UpdateType[UpdateType["IsRenderable"] = 1024] = "IsRenderable";
|
|
130
|
+
/**
|
|
131
|
+
* Render Texture update
|
|
132
|
+
*/
|
|
133
|
+
UpdateType[UpdateType["RenderTexture"] = 2048] = "RenderTexture";
|
|
134
|
+
/**
|
|
135
|
+
* Track if parent has render texture
|
|
136
|
+
*/
|
|
137
|
+
UpdateType[UpdateType["ParentRenderTexture"] = 4096] = "ParentRenderTexture";
|
|
138
|
+
/**
|
|
139
|
+
* Render Bounds update
|
|
140
|
+
*/
|
|
141
|
+
UpdateType[UpdateType["RenderBounds"] = 8192] = "RenderBounds";
|
|
142
|
+
/**
|
|
143
|
+
* None
|
|
144
|
+
*/
|
|
145
|
+
UpdateType[UpdateType["None"] = 0] = "None";
|
|
146
|
+
/**
|
|
147
|
+
* All
|
|
148
|
+
*/
|
|
149
|
+
UpdateType[UpdateType["All"] = 14335] = "All";
|
|
150
|
+
})(UpdateType || (UpdateType = {}));
|
|
151
|
+
/**
|
|
152
|
+
* A visual Node in the Renderer scene graph.
|
|
153
|
+
*
|
|
154
|
+
* @remarks
|
|
155
|
+
* CoreNode is an internally used class that represents a Renderer Node in the
|
|
156
|
+
* scene graph. See INode.ts for the public APIs exposed to Renderer users
|
|
157
|
+
* that include generic types for Shaders.
|
|
158
|
+
*/
|
|
159
|
+
export class CoreNode extends EventEmitter {
|
|
160
|
+
stage;
|
|
161
|
+
children = [];
|
|
162
|
+
_id = getNewId();
|
|
163
|
+
props;
|
|
164
|
+
updateType = UpdateType.All;
|
|
165
|
+
childUpdateType = UpdateType.None;
|
|
166
|
+
globalTransform;
|
|
167
|
+
scaleRotateTransform;
|
|
168
|
+
localTransform;
|
|
169
|
+
sceneGlobalTransform;
|
|
170
|
+
renderCoords;
|
|
171
|
+
sceneRenderCoords;
|
|
172
|
+
renderBound;
|
|
173
|
+
strictBound;
|
|
174
|
+
preloadBound;
|
|
175
|
+
clippingRect = {
|
|
176
|
+
x: 0,
|
|
177
|
+
y: 0,
|
|
178
|
+
width: 0,
|
|
179
|
+
height: 0,
|
|
180
|
+
valid: false,
|
|
181
|
+
};
|
|
182
|
+
isRenderable = false;
|
|
183
|
+
renderState = CoreNodeRenderState.Init;
|
|
184
|
+
worldAlpha = 1;
|
|
185
|
+
premultipliedColorTl = 0;
|
|
186
|
+
premultipliedColorTr = 0;
|
|
187
|
+
premultipliedColorBl = 0;
|
|
188
|
+
premultipliedColorBr = 0;
|
|
189
|
+
calcZIndex = 0;
|
|
190
|
+
hasRTTupdates = false;
|
|
191
|
+
parentHasRenderTexture = false;
|
|
192
|
+
rttParent = null;
|
|
193
|
+
destroyed = false;
|
|
194
|
+
constructor(stage, props) {
|
|
195
|
+
super();
|
|
196
|
+
this.stage = stage;
|
|
197
|
+
this.props = {
|
|
198
|
+
...props,
|
|
199
|
+
parent: null,
|
|
200
|
+
texture: null,
|
|
201
|
+
src: null,
|
|
202
|
+
rtt: false,
|
|
203
|
+
};
|
|
204
|
+
// Assign props to instance
|
|
205
|
+
this.parent = props.parent;
|
|
206
|
+
this.texture = props.texture;
|
|
207
|
+
this.src = props.src;
|
|
208
|
+
this.rtt = props.rtt;
|
|
209
|
+
this.interactive = props.interactive;
|
|
210
|
+
if (props.boundsMargin) {
|
|
211
|
+
this.boundsMargin = Array.isArray(props.boundsMargin)
|
|
212
|
+
? props.boundsMargin
|
|
213
|
+
: [
|
|
214
|
+
props.boundsMargin,
|
|
215
|
+
props.boundsMargin,
|
|
216
|
+
props.boundsMargin,
|
|
217
|
+
props.boundsMargin,
|
|
218
|
+
];
|
|
219
|
+
}
|
|
220
|
+
this.setUpdateType(UpdateType.ScaleRotate |
|
|
221
|
+
UpdateType.Local |
|
|
222
|
+
UpdateType.RenderBounds |
|
|
223
|
+
UpdateType.RenderState);
|
|
224
|
+
if (isProductionEnvironment() === false && props.preventCleanup === true) {
|
|
225
|
+
console.warn('CoreNode.preventCleanup: Is deprecated and will be removed in upcoming release, please use textureOptions.preventCleanup instead');
|
|
226
|
+
}
|
|
227
|
+
// if the default texture isn't loaded yet, wait for it to load
|
|
228
|
+
// this only happens when the node is created before the stage is ready
|
|
229
|
+
if (this.stage.defaultTexture &&
|
|
230
|
+
this.stage.defaultTexture.state !== 'loaded') {
|
|
231
|
+
this.stage.defaultTexture.once('loaded', () => {
|
|
232
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
//#region Textures
|
|
237
|
+
loadTexture() {
|
|
238
|
+
const { texture } = this.props;
|
|
239
|
+
assertTruthy(texture);
|
|
240
|
+
// If texture is already loaded / failed, trigger loaded event manually
|
|
241
|
+
// so that users get a consistent event experience.
|
|
242
|
+
// We do this in a microtask to allow listeners to be attached in the same
|
|
243
|
+
// synchronous task after calling loadTexture()
|
|
244
|
+
queueMicrotask(() => {
|
|
245
|
+
if (this.textureOptions.preload === true) {
|
|
246
|
+
this.stage.txManager.loadTexture(texture);
|
|
247
|
+
}
|
|
248
|
+
texture.preventCleanup =
|
|
249
|
+
this.props.textureOptions?.preventCleanup ?? false;
|
|
250
|
+
texture.on('loaded', this.onTextureLoaded);
|
|
251
|
+
texture.on('failed', this.onTextureFailed);
|
|
252
|
+
texture.on('freed', this.onTextureFreed);
|
|
253
|
+
// If the parent is a render texture, the initial texture status
|
|
254
|
+
// will be set to freed until the texture is processed by the
|
|
255
|
+
// Render RTT nodes. So we only need to listen fo changes and
|
|
256
|
+
// no need to check the texture.state until we restructure how
|
|
257
|
+
// textures are being processed.
|
|
258
|
+
if (this.parentHasRenderTexture) {
|
|
259
|
+
this.notifyParentRTTOfUpdate();
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if (texture.state === 'loaded') {
|
|
263
|
+
assertTruthy(texture.dimensions);
|
|
264
|
+
this.onTextureLoaded(texture, texture.dimensions);
|
|
265
|
+
}
|
|
266
|
+
else if (texture.state === 'failed') {
|
|
267
|
+
assertTruthy(texture.error);
|
|
268
|
+
this.onTextureFailed(texture, texture.error);
|
|
269
|
+
}
|
|
270
|
+
else if (texture.state === 'freed') {
|
|
271
|
+
this.onTextureFreed(texture);
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
unloadTexture() {
|
|
276
|
+
if (this.texture !== null) {
|
|
277
|
+
this.texture.off('loaded', this.onTextureLoaded);
|
|
278
|
+
this.texture.off('failed', this.onTextureFailed);
|
|
279
|
+
this.texture.off('freed', this.onTextureFreed);
|
|
280
|
+
this.texture.setRenderableOwner(this, false);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
autosizeNode(dimensions) {
|
|
284
|
+
if (this.autosize) {
|
|
285
|
+
this.width = dimensions.width;
|
|
286
|
+
this.height = dimensions.height;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
onTextureLoaded = (_, dimensions) => {
|
|
290
|
+
this.autosizeNode(dimensions);
|
|
291
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
292
|
+
// Texture was loaded. In case the RAF loop has already stopped, we request
|
|
293
|
+
// a render to ensure the texture is rendered.
|
|
294
|
+
this.stage.requestRender();
|
|
295
|
+
// If parent has a render texture, flag that we need to update
|
|
296
|
+
if (this.parentHasRenderTexture) {
|
|
297
|
+
this.notifyParentRTTOfUpdate();
|
|
298
|
+
}
|
|
299
|
+
// ignore 1x1 pixel textures
|
|
300
|
+
if (dimensions.width > 1 && dimensions.height > 1) {
|
|
301
|
+
this.emit('loaded', {
|
|
302
|
+
type: 'texture',
|
|
303
|
+
dimensions,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
// Trigger a local update if the texture is loaded and the resizeMode is 'contain'
|
|
307
|
+
if (this.props.textureOptions?.resizeMode?.type === 'contain') {
|
|
308
|
+
this.setUpdateType(UpdateType.Local);
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
onTextureFailed = (_, error) => {
|
|
312
|
+
// immediately set isRenderable to false, so that we handle the error
|
|
313
|
+
// without waiting for the next frame loop
|
|
314
|
+
this.isRenderable = false;
|
|
315
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
316
|
+
// If parent has a render texture, flag that we need to update
|
|
317
|
+
if (this.parentHasRenderTexture) {
|
|
318
|
+
this.notifyParentRTTOfUpdate();
|
|
319
|
+
}
|
|
320
|
+
this.emit('failed', {
|
|
321
|
+
type: 'texture',
|
|
322
|
+
error,
|
|
323
|
+
});
|
|
324
|
+
};
|
|
325
|
+
onTextureFreed = () => {
|
|
326
|
+
// immediately set isRenderable to false, so that we handle the error
|
|
327
|
+
// without waiting for the next frame loop
|
|
328
|
+
this.isRenderable = false;
|
|
329
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
330
|
+
// If parent has a render texture, flag that we need to update
|
|
331
|
+
if (this.parentHasRenderTexture) {
|
|
332
|
+
this.notifyParentRTTOfUpdate();
|
|
333
|
+
}
|
|
334
|
+
this.emit('freed', {
|
|
335
|
+
type: 'texture',
|
|
336
|
+
});
|
|
337
|
+
};
|
|
338
|
+
//#endregion Textures
|
|
339
|
+
/**
|
|
340
|
+
* Change types types is used to determine the scope of the changes being applied
|
|
341
|
+
*
|
|
342
|
+
* @remarks
|
|
343
|
+
* See {@link UpdateType} for more information on each type
|
|
344
|
+
*
|
|
345
|
+
* @param type
|
|
346
|
+
*/
|
|
347
|
+
setUpdateType(type) {
|
|
348
|
+
this.updateType |= type;
|
|
349
|
+
const parent = this.props.parent;
|
|
350
|
+
if (!parent)
|
|
351
|
+
return;
|
|
352
|
+
if ((parent.updateType & UpdateType.Children) === 0) {
|
|
353
|
+
// Inform the parent if it doesn’t already have a child update
|
|
354
|
+
parent.setUpdateType(UpdateType.Children);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
sortChildren() {
|
|
358
|
+
this.children.sort((a, b) => a.calcZIndex - b.calcZIndex);
|
|
359
|
+
}
|
|
360
|
+
updateScaleRotateTransform() {
|
|
361
|
+
const { rotation, scaleX, scaleY } = this.props;
|
|
362
|
+
// optimize simple translation cases
|
|
363
|
+
if (rotation === 0 && scaleX === 1 && scaleY === 1) {
|
|
364
|
+
this.scaleRotateTransform = undefined;
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
this.scaleRotateTransform = Matrix3d.rotate(rotation, this.scaleRotateTransform).scale(scaleX, scaleY);
|
|
368
|
+
}
|
|
369
|
+
updateLocalTransform() {
|
|
370
|
+
const { x, y, width, height } = this.props;
|
|
371
|
+
const mountTranslateX = this.props.mountX * width;
|
|
372
|
+
const mountTranslateY = this.props.mountY * height;
|
|
373
|
+
if (this.scaleRotateTransform) {
|
|
374
|
+
const pivotTranslateX = this.props.pivotX * width;
|
|
375
|
+
const pivotTranslateY = this.props.pivotY * height;
|
|
376
|
+
this.localTransform = Matrix3d.translate(x - mountTranslateX + pivotTranslateX, y - mountTranslateY + pivotTranslateY, this.localTransform)
|
|
377
|
+
.multiply(this.scaleRotateTransform)
|
|
378
|
+
.translate(-pivotTranslateX, -pivotTranslateY);
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
this.localTransform = Matrix3d.translate(x - mountTranslateX, y - mountTranslateY, this.localTransform);
|
|
382
|
+
}
|
|
383
|
+
// Handle 'contain' resize mode
|
|
384
|
+
const texture = this.props.texture;
|
|
385
|
+
if (texture &&
|
|
386
|
+
texture.dimensions &&
|
|
387
|
+
this.props.textureOptions?.resizeMode?.type === 'contain') {
|
|
388
|
+
let resizeModeScaleX = 1;
|
|
389
|
+
let resizeModeScaleY = 1;
|
|
390
|
+
let extraX = 0;
|
|
391
|
+
let extraY = 0;
|
|
392
|
+
const { width: tw, height: th } = texture.dimensions;
|
|
393
|
+
const txAspectRatio = tw / th;
|
|
394
|
+
const nodeAspectRatio = width / height;
|
|
395
|
+
if (txAspectRatio > nodeAspectRatio) {
|
|
396
|
+
// Texture is wider than node
|
|
397
|
+
// Center the node vertically (shift down by extraY)
|
|
398
|
+
// Scale the node vertically to maintain original aspect ratio
|
|
399
|
+
const scaleX = width / tw;
|
|
400
|
+
const scaledTxHeight = th * scaleX;
|
|
401
|
+
extraY = (height - scaledTxHeight) / 2;
|
|
402
|
+
resizeModeScaleY = scaledTxHeight / height;
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
// Texture is taller than node (or equal)
|
|
406
|
+
// Center the node horizontally (shift right by extraX)
|
|
407
|
+
// Scale the node horizontally to maintain original aspect ratio
|
|
408
|
+
const scaleY = height / th;
|
|
409
|
+
const scaledTxWidth = tw * scaleY;
|
|
410
|
+
extraX = (width - scaledTxWidth) / 2;
|
|
411
|
+
resizeModeScaleX = scaledTxWidth / width;
|
|
412
|
+
}
|
|
413
|
+
// Apply the extra translation and scale to the local transform
|
|
414
|
+
this.localTransform
|
|
415
|
+
.translate(extraX, extraY)
|
|
416
|
+
.scale(resizeModeScaleX, resizeModeScaleY);
|
|
417
|
+
}
|
|
418
|
+
this.setUpdateType(UpdateType.Global);
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* @todo: test for correct calculation flag
|
|
422
|
+
* @param delta
|
|
423
|
+
*/
|
|
424
|
+
update(delta, parentClippingRect) {
|
|
425
|
+
if (this.updateType & UpdateType.ScaleRotate) {
|
|
426
|
+
this.updateScaleRotateTransform();
|
|
427
|
+
this.setUpdateType(UpdateType.Local);
|
|
428
|
+
}
|
|
429
|
+
if (this.updateType & UpdateType.Local) {
|
|
430
|
+
this.updateLocalTransform();
|
|
431
|
+
this.setUpdateType(UpdateType.Global);
|
|
432
|
+
}
|
|
433
|
+
const parent = this.props.parent;
|
|
434
|
+
let renderState = null;
|
|
435
|
+
// Handle specific RTT updates at this node level
|
|
436
|
+
if (this.updateType & UpdateType.RenderTexture && this.rtt) {
|
|
437
|
+
this.hasRTTupdates = true;
|
|
438
|
+
}
|
|
439
|
+
if (this.updateType & UpdateType.Global) {
|
|
440
|
+
assertTruthy(this.localTransform);
|
|
441
|
+
if (this.parentHasRenderTexture === true && parent?.rtt === true) {
|
|
442
|
+
// we are at the start of the RTT chain, so we need to reset the globalTransform
|
|
443
|
+
// for correct RTT rendering
|
|
444
|
+
this.globalTransform = Matrix3d.identity();
|
|
445
|
+
// Maintain a full scene global transform for bounds detection
|
|
446
|
+
this.sceneGlobalTransform = Matrix3d.copy(parent?.globalTransform || Matrix3d.identity()).multiply(this.localTransform);
|
|
447
|
+
}
|
|
448
|
+
else if (this.parentHasRenderTexture === true &&
|
|
449
|
+
parent?.rtt === false) {
|
|
450
|
+
// we're part of an RTT chain but our parent is not the main RTT node
|
|
451
|
+
// so we need to propogate the sceneGlobalTransform of the parent
|
|
452
|
+
// to maintain a full scene global transform for bounds detection
|
|
453
|
+
this.sceneGlobalTransform = Matrix3d.copy(parent?.sceneGlobalTransform || this.localTransform).multiply(this.localTransform);
|
|
454
|
+
this.globalTransform = Matrix3d.copy(parent?.globalTransform || this.localTransform, this.globalTransform);
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
this.globalTransform = Matrix3d.copy(parent?.globalTransform || this.localTransform, this.globalTransform);
|
|
458
|
+
}
|
|
459
|
+
if (parent !== null) {
|
|
460
|
+
this.globalTransform.multiply(this.localTransform);
|
|
461
|
+
}
|
|
462
|
+
this.calculateRenderCoords();
|
|
463
|
+
this.updateBoundingRect();
|
|
464
|
+
this.setUpdateType(UpdateType.RenderState | UpdateType.Children);
|
|
465
|
+
this.childUpdateType |= UpdateType.Global;
|
|
466
|
+
if (this.clipping === true) {
|
|
467
|
+
this.setUpdateType(UpdateType.Clipping | UpdateType.RenderBounds);
|
|
468
|
+
this.childUpdateType |= UpdateType.RenderBounds;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
if (this.updateType & UpdateType.RenderBounds) {
|
|
472
|
+
this.createRenderBounds();
|
|
473
|
+
this.setUpdateType(UpdateType.RenderState);
|
|
474
|
+
this.setUpdateType(UpdateType.Children);
|
|
475
|
+
this.childUpdateType |= UpdateType.RenderBounds;
|
|
476
|
+
}
|
|
477
|
+
if (this.updateType & UpdateType.RenderState) {
|
|
478
|
+
renderState = this.checkRenderBounds();
|
|
479
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
480
|
+
// if we're not going out of bounds, update the render state
|
|
481
|
+
// this is done so the update loop can finish before we mark a node
|
|
482
|
+
// as out of bounds
|
|
483
|
+
if (renderState !== CoreNodeRenderState.OutOfBounds) {
|
|
484
|
+
this.updateRenderState(renderState);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
if (this.updateType & UpdateType.WorldAlpha) {
|
|
488
|
+
if (parent) {
|
|
489
|
+
this.worldAlpha = parent.worldAlpha * this.props.alpha;
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
this.worldAlpha = this.props.alpha;
|
|
493
|
+
}
|
|
494
|
+
this.setUpdateType(UpdateType.Children |
|
|
495
|
+
UpdateType.PremultipliedColors |
|
|
496
|
+
UpdateType.IsRenderable);
|
|
497
|
+
this.childUpdateType |= UpdateType.WorldAlpha;
|
|
498
|
+
}
|
|
499
|
+
if (this.updateType & UpdateType.IsRenderable) {
|
|
500
|
+
this.updateIsRenderable();
|
|
501
|
+
}
|
|
502
|
+
if (this.updateType & UpdateType.Clipping) {
|
|
503
|
+
this.calculateClippingRect(parentClippingRect);
|
|
504
|
+
this.setUpdateType(UpdateType.Children);
|
|
505
|
+
this.childUpdateType |= UpdateType.Clipping;
|
|
506
|
+
this.childUpdateType |= UpdateType.RenderBounds;
|
|
507
|
+
}
|
|
508
|
+
if (this.updateType & UpdateType.PremultipliedColors) {
|
|
509
|
+
this.premultipliedColorTl = mergeColorAlphaPremultiplied(this.props.colorTl, this.worldAlpha, true);
|
|
510
|
+
// If all the colors are the same just sent them all to the same value
|
|
511
|
+
if (this.props.colorTl === this.props.colorTr &&
|
|
512
|
+
this.props.colorBl === this.props.colorBr &&
|
|
513
|
+
this.props.colorTl === this.props.colorBl) {
|
|
514
|
+
this.premultipliedColorTr =
|
|
515
|
+
this.premultipliedColorBl =
|
|
516
|
+
this.premultipliedColorBr =
|
|
517
|
+
this.premultipliedColorTl;
|
|
518
|
+
}
|
|
519
|
+
else {
|
|
520
|
+
this.premultipliedColorTr = mergeColorAlphaPremultiplied(this.props.colorTr, this.worldAlpha, true);
|
|
521
|
+
this.premultipliedColorBl = mergeColorAlphaPremultiplied(this.props.colorBl, this.worldAlpha, true);
|
|
522
|
+
this.premultipliedColorBr = mergeColorAlphaPremultiplied(this.props.colorBr, this.worldAlpha, true);
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
// No need to update zIndex if there is no parent
|
|
526
|
+
if (parent !== null && this.updateType & UpdateType.CalculatedZIndex) {
|
|
527
|
+
this.calculateZIndex();
|
|
528
|
+
// Tell parent to re-sort children
|
|
529
|
+
parent.setUpdateType(UpdateType.ZIndexSortedChildren);
|
|
530
|
+
}
|
|
531
|
+
if (this.props.strictBounds === true &&
|
|
532
|
+
this.renderState === CoreNodeRenderState.OutOfBounds) {
|
|
533
|
+
this.updateType &= ~UpdateType.RenderBounds; // remove render bounds update
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
if (this.updateType & UpdateType.Children && this.children.length > 0) {
|
|
537
|
+
for (let i = 0, length = this.children.length; i < length; i++) {
|
|
538
|
+
const child = this.children[i];
|
|
539
|
+
child.setUpdateType(this.childUpdateType);
|
|
540
|
+
if (child.updateType === 0) {
|
|
541
|
+
continue;
|
|
542
|
+
}
|
|
543
|
+
let childClippingRect = this.clippingRect;
|
|
544
|
+
if (this.rtt === true) {
|
|
545
|
+
childClippingRect = {
|
|
546
|
+
x: 0,
|
|
547
|
+
y: 0,
|
|
548
|
+
width: 0,
|
|
549
|
+
height: 0,
|
|
550
|
+
valid: false,
|
|
551
|
+
};
|
|
552
|
+
}
|
|
553
|
+
child.update(delta, childClippingRect);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
// If the node has an RTT parent and requires a texture re-render, inform the RTT parent
|
|
557
|
+
// if (this.parentHasRenderTexture && this.updateType & UpdateType.RenderTexture) {
|
|
558
|
+
// @TODO have a more scoped down updateType for RTT updates
|
|
559
|
+
if (this.parentHasRenderTexture && this.updateType > 0) {
|
|
560
|
+
this.notifyParentRTTOfUpdate();
|
|
561
|
+
}
|
|
562
|
+
// Sorting children MUST happen after children have been updated so
|
|
563
|
+
// that they have the oppotunity to update their calculated zIndex.
|
|
564
|
+
if (this.updateType & UpdateType.ZIndexSortedChildren) {
|
|
565
|
+
// reorder z-index
|
|
566
|
+
this.sortChildren();
|
|
567
|
+
}
|
|
568
|
+
// If we're out of bounds, apply the render state now
|
|
569
|
+
// this is done so nodes can finish their entire update loop before
|
|
570
|
+
// being marked as out of bounds
|
|
571
|
+
if (renderState === CoreNodeRenderState.OutOfBounds) {
|
|
572
|
+
this.updateRenderState(renderState);
|
|
573
|
+
this.updateIsRenderable();
|
|
574
|
+
if (this.rtt === true &&
|
|
575
|
+
renderState === CoreNodeRenderState.OutOfBounds) {
|
|
576
|
+
// notify children that we are going out of bounds
|
|
577
|
+
// we have to do this now before we stop processing the render tree
|
|
578
|
+
this.notifyChildrenRTTOfUpdate(renderState);
|
|
579
|
+
// this.childUpdateType |= UpdateType.RenderState;
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
// reset update type
|
|
583
|
+
this.updateType = 0;
|
|
584
|
+
this.childUpdateType = 0;
|
|
585
|
+
}
|
|
586
|
+
findParentRTTNode() {
|
|
587
|
+
let rttNode = this.parent;
|
|
588
|
+
while (rttNode && !rttNode.rtt) {
|
|
589
|
+
rttNode = rttNode.parent;
|
|
590
|
+
}
|
|
591
|
+
return rttNode;
|
|
592
|
+
}
|
|
593
|
+
getRTTParentRenderState() {
|
|
594
|
+
const rttNode = this.rttParent || this.findParentRTTNode();
|
|
595
|
+
if (!rttNode) {
|
|
596
|
+
return null;
|
|
597
|
+
}
|
|
598
|
+
return rttNode.renderState;
|
|
599
|
+
}
|
|
600
|
+
notifyChildrenRTTOfUpdate(renderState) {
|
|
601
|
+
for (const child of this.children) {
|
|
602
|
+
// force child to update render state
|
|
603
|
+
child.updateRenderState(renderState);
|
|
604
|
+
child.updateIsRenderable();
|
|
605
|
+
child.notifyChildrenRTTOfUpdate(renderState);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
notifyParentRTTOfUpdate() {
|
|
609
|
+
if (this.parent === null) {
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
const rttNode = this.rttParent || this.findParentRTTNode();
|
|
613
|
+
if (!rttNode) {
|
|
614
|
+
return;
|
|
615
|
+
}
|
|
616
|
+
// If an RTT node is found, mark it for re-rendering
|
|
617
|
+
rttNode.hasRTTupdates = true;
|
|
618
|
+
rttNode.setUpdateType(UpdateType.RenderTexture);
|
|
619
|
+
// if rttNode is nested, also make it update its RTT parent
|
|
620
|
+
if (rttNode.parentHasRenderTexture === true) {
|
|
621
|
+
rttNode.notifyParentRTTOfUpdate();
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
checkRenderBounds() {
|
|
625
|
+
assertTruthy(this.renderBound);
|
|
626
|
+
assertTruthy(this.strictBound);
|
|
627
|
+
assertTruthy(this.preloadBound);
|
|
628
|
+
if (boundInsideBound(this.renderBound, this.strictBound)) {
|
|
629
|
+
return CoreNodeRenderState.InViewport;
|
|
630
|
+
}
|
|
631
|
+
if (boundInsideBound(this.renderBound, this.preloadBound)) {
|
|
632
|
+
return CoreNodeRenderState.InBounds;
|
|
633
|
+
}
|
|
634
|
+
// check if we're larger then our parent, we're definitely in the viewport
|
|
635
|
+
if (boundLargeThanBound(this.renderBound, this.strictBound)) {
|
|
636
|
+
return CoreNodeRenderState.InViewport;
|
|
637
|
+
}
|
|
638
|
+
// check if we dont have dimensions, take our parent's render state
|
|
639
|
+
if (this.parent !== null &&
|
|
640
|
+
(this.props.width === 0 || this.props.height === 0)) {
|
|
641
|
+
return this.parent.renderState;
|
|
642
|
+
}
|
|
643
|
+
return CoreNodeRenderState.OutOfBounds;
|
|
644
|
+
}
|
|
645
|
+
updateBoundingRect() {
|
|
646
|
+
const transform = this.sceneGlobalTransform || this.globalTransform;
|
|
647
|
+
const renderCoords = this.sceneRenderCoords || this.renderCoords;
|
|
648
|
+
assertTruthy(transform);
|
|
649
|
+
assertTruthy(renderCoords);
|
|
650
|
+
const { tb, tc } = transform;
|
|
651
|
+
const { x1, y1, x3, y3 } = renderCoords;
|
|
652
|
+
if (tb === 0 || tc === 0) {
|
|
653
|
+
this.renderBound = createBound(x1, y1, x3, y3, this.renderBound);
|
|
654
|
+
}
|
|
655
|
+
else {
|
|
656
|
+
const { x2, x4, y2, y4 } = renderCoords;
|
|
657
|
+
this.renderBound = createBound(Math.min(x1, x2, x3, x4), Math.min(y1, y2, y3, y4), Math.max(x1, x2, x3, x4), Math.max(y1, y2, y3, y4), this.renderBound);
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
createRenderBounds() {
|
|
661
|
+
assertTruthy(this.stage);
|
|
662
|
+
if (this.parent !== null && this.parent.strictBound !== undefined) {
|
|
663
|
+
// we have a parent with a valid bound, copy it
|
|
664
|
+
const parentBound = this.parent.strictBound;
|
|
665
|
+
this.strictBound = createBound(parentBound.x1, parentBound.y1, parentBound.x2, parentBound.y2);
|
|
666
|
+
this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
|
|
667
|
+
}
|
|
668
|
+
else {
|
|
669
|
+
// no parent or parent does not have a bound, take the stage boundaries
|
|
670
|
+
this.strictBound = this.stage.strictBound;
|
|
671
|
+
this.preloadBound = this.stage.preloadBound;
|
|
672
|
+
}
|
|
673
|
+
// if clipping is disabled, we're done
|
|
674
|
+
if (this.props.clipping === false) {
|
|
675
|
+
return;
|
|
676
|
+
}
|
|
677
|
+
// only create local clipping bounds if node itself is in bounds
|
|
678
|
+
// this can only be done if we have a render bound already
|
|
679
|
+
if (this.renderBound === undefined) {
|
|
680
|
+
return;
|
|
681
|
+
}
|
|
682
|
+
// if we're out of bounds, we're done
|
|
683
|
+
if (boundInsideBound(this.renderBound, this.strictBound) === false) {
|
|
684
|
+
return;
|
|
685
|
+
}
|
|
686
|
+
// clipping is enabled and we are in bounds create our own bounds
|
|
687
|
+
const { x, y, width, height } = this.props;
|
|
688
|
+
// Pick the global transform if available, otherwise use the local transform
|
|
689
|
+
// global transform is only available if the node in an RTT chain
|
|
690
|
+
const { tx, ty } = this.sceneGlobalTransform || this.globalTransform || {};
|
|
691
|
+
const _x = tx ?? x;
|
|
692
|
+
const _y = ty ?? y;
|
|
693
|
+
this.strictBound = createBound(_x, _y, _x + width, _y + height, this.strictBound);
|
|
694
|
+
this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
|
|
695
|
+
}
|
|
696
|
+
updateRenderState(renderState) {
|
|
697
|
+
if (renderState === this.renderState) {
|
|
698
|
+
return;
|
|
699
|
+
}
|
|
700
|
+
const previous = this.renderState;
|
|
701
|
+
this.renderState = renderState;
|
|
702
|
+
const event = CoreNodeRenderStateMap.get(renderState);
|
|
703
|
+
assertTruthy(event);
|
|
704
|
+
this.emit(event, {
|
|
705
|
+
previous,
|
|
706
|
+
current: renderState,
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
/**
|
|
710
|
+
* Updates the `isRenderable` property based on various conditions.
|
|
711
|
+
*/
|
|
712
|
+
updateIsRenderable() {
|
|
713
|
+
let newIsRenderable = false;
|
|
714
|
+
let needsTextureOwnership = false;
|
|
715
|
+
// If the node is out of bounds or has an alpha of 0, it is not renderable
|
|
716
|
+
if (this.checkBasicRenderability() === false) {
|
|
717
|
+
this.updateTextureOwnership(false);
|
|
718
|
+
this.setRenderable(false);
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
721
|
+
if (this.texture !== null) {
|
|
722
|
+
needsTextureOwnership = true;
|
|
723
|
+
// we're only renderable if the texture state is loaded
|
|
724
|
+
newIsRenderable = this.texture.state === 'loaded';
|
|
725
|
+
}
|
|
726
|
+
else if ((this.hasShader() || this.hasColorProperties() === true) &&
|
|
727
|
+
this.hasDimensions() === true) {
|
|
728
|
+
// This mean we have dimensions and a color set, so we can render a ColorTexture
|
|
729
|
+
if (this.stage.defaultTexture &&
|
|
730
|
+
this.stage.defaultTexture.state === 'loaded') {
|
|
731
|
+
newIsRenderable = true;
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
this.updateTextureOwnership(needsTextureOwnership);
|
|
735
|
+
this.setRenderable(newIsRenderable);
|
|
736
|
+
}
|
|
737
|
+
/**
|
|
738
|
+
* Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
|
|
739
|
+
*/
|
|
740
|
+
checkBasicRenderability() {
|
|
741
|
+
if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
|
|
742
|
+
return false;
|
|
743
|
+
}
|
|
744
|
+
else {
|
|
745
|
+
return true;
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
/**
|
|
749
|
+
* Sets the renderable state and triggers changes if necessary.
|
|
750
|
+
* @param isRenderable - The new renderable state
|
|
751
|
+
*/
|
|
752
|
+
setRenderable(isRenderable) {
|
|
753
|
+
this.isRenderable = isRenderable;
|
|
754
|
+
}
|
|
755
|
+
/**
|
|
756
|
+
* Changes the renderable state of the node.
|
|
757
|
+
*/
|
|
758
|
+
updateTextureOwnership(isRenderable) {
|
|
759
|
+
this.texture?.setRenderableOwner(this, isRenderable);
|
|
760
|
+
}
|
|
761
|
+
/**
|
|
762
|
+
* Checks if the node is out of the viewport bounds.
|
|
763
|
+
*/
|
|
764
|
+
isOutOfBounds() {
|
|
765
|
+
return this.renderState <= CoreNodeRenderState.OutOfBounds;
|
|
766
|
+
}
|
|
767
|
+
/**
|
|
768
|
+
* Checks if the node has dimensions (width/height)
|
|
769
|
+
*/
|
|
770
|
+
hasDimensions() {
|
|
771
|
+
return this.props.width !== 0 && this.props.height !== 0;
|
|
772
|
+
}
|
|
773
|
+
/**
|
|
774
|
+
* Checks if the node has any color properties set.
|
|
775
|
+
*/
|
|
776
|
+
hasColorProperties() {
|
|
777
|
+
return (this.props.color !== 0 ||
|
|
778
|
+
this.props.colorTop !== 0 ||
|
|
779
|
+
this.props.colorBottom !== 0 ||
|
|
780
|
+
this.props.colorLeft !== 0 ||
|
|
781
|
+
this.props.colorRight !== 0 ||
|
|
782
|
+
this.props.colorTl !== 0 ||
|
|
783
|
+
this.props.colorTr !== 0 ||
|
|
784
|
+
this.props.colorBl !== 0 ||
|
|
785
|
+
this.props.colorBr !== 0);
|
|
786
|
+
}
|
|
787
|
+
hasShader() {
|
|
788
|
+
return this.props.shader !== null;
|
|
789
|
+
}
|
|
790
|
+
calculateRenderCoords() {
|
|
791
|
+
const { width, height } = this;
|
|
792
|
+
const { tx, ty, ta, tb, tc, td } = this.globalTransform;
|
|
793
|
+
if (tb === 0 && tc === 0) {
|
|
794
|
+
const minX = tx;
|
|
795
|
+
const maxX = tx + width * ta;
|
|
796
|
+
const minY = ty;
|
|
797
|
+
const maxY = ty + height * td;
|
|
798
|
+
this.renderCoords = RenderCoords.translate(
|
|
799
|
+
//top-left
|
|
800
|
+
minX, minY,
|
|
801
|
+
//top-right
|
|
802
|
+
maxX, minY,
|
|
803
|
+
//bottom-right
|
|
804
|
+
maxX, maxY,
|
|
805
|
+
//bottom-left
|
|
806
|
+
minX, maxY, this.renderCoords);
|
|
807
|
+
}
|
|
808
|
+
else {
|
|
809
|
+
this.renderCoords = RenderCoords.translate(
|
|
810
|
+
//top-left
|
|
811
|
+
tx, ty,
|
|
812
|
+
//top-right
|
|
813
|
+
tx + width * ta, ty + width * tc,
|
|
814
|
+
//bottom-right
|
|
815
|
+
tx + width * ta + height * tb, ty + width * tc + height * td,
|
|
816
|
+
//bottom-left
|
|
817
|
+
tx + height * tb, ty + height * td, this.renderCoords);
|
|
818
|
+
}
|
|
819
|
+
if (this.sceneGlobalTransform === undefined) {
|
|
820
|
+
return;
|
|
821
|
+
}
|
|
822
|
+
const { tx: stx, ty: sty, ta: sta, tb: stb, tc: stc, td: std, } = this.sceneGlobalTransform;
|
|
823
|
+
if (stb === 0 && stc === 0) {
|
|
824
|
+
const minX = stx;
|
|
825
|
+
const maxX = stx + width * sta;
|
|
826
|
+
const minY = sty;
|
|
827
|
+
const maxY = sty + height * std;
|
|
828
|
+
this.sceneRenderCoords = RenderCoords.translate(
|
|
829
|
+
//top-left
|
|
830
|
+
minX, minY,
|
|
831
|
+
//top-right
|
|
832
|
+
maxX, minY,
|
|
833
|
+
//bottom-right
|
|
834
|
+
maxX, maxY,
|
|
835
|
+
//bottom-left
|
|
836
|
+
minX, maxY, this.sceneRenderCoords);
|
|
837
|
+
}
|
|
838
|
+
else {
|
|
839
|
+
this.sceneRenderCoords = RenderCoords.translate(
|
|
840
|
+
//top-left
|
|
841
|
+
stx, sty,
|
|
842
|
+
//top-right
|
|
843
|
+
stx + width * sta, sty + width * stc,
|
|
844
|
+
//bottom-right
|
|
845
|
+
stx + width * sta + height * stb, sty + width * stc + height * std,
|
|
846
|
+
//bottom-left
|
|
847
|
+
stx + height * stb, sty + height * std, this.sceneRenderCoords);
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
/**
|
|
851
|
+
* This function calculates the clipping rectangle for a node.
|
|
852
|
+
*
|
|
853
|
+
* The function then checks if the node is rotated. If the node requires clipping and is not rotated, a new clipping rectangle is created based on the node's global transform and dimensions.
|
|
854
|
+
* If a parent clipping rectangle exists, it is intersected with the node's clipping rectangle (if it exists), or replaces the node's clipping rectangle.
|
|
855
|
+
*
|
|
856
|
+
* Finally, the node's parentClippingRect and clippingRect properties are updated.
|
|
857
|
+
*/
|
|
858
|
+
calculateClippingRect(parentClippingRect) {
|
|
859
|
+
assertTruthy(this.globalTransform);
|
|
860
|
+
const { clippingRect, props, globalTransform: gt } = this;
|
|
861
|
+
const { clipping } = props;
|
|
862
|
+
const isRotated = gt.tb !== 0 || gt.tc !== 0;
|
|
863
|
+
if (clipping === true && isRotated === false) {
|
|
864
|
+
clippingRect.x = gt.tx;
|
|
865
|
+
clippingRect.y = gt.ty;
|
|
866
|
+
clippingRect.width = this.width * gt.ta;
|
|
867
|
+
clippingRect.height = this.height * gt.td;
|
|
868
|
+
clippingRect.valid = true;
|
|
869
|
+
}
|
|
870
|
+
else {
|
|
871
|
+
clippingRect.valid = false;
|
|
872
|
+
}
|
|
873
|
+
if (parentClippingRect.valid === true && clippingRect.valid === true) {
|
|
874
|
+
// Intersect parent clipping rect with node clipping rect
|
|
875
|
+
intersectRect(parentClippingRect, clippingRect, clippingRect);
|
|
876
|
+
}
|
|
877
|
+
else if (parentClippingRect.valid === true) {
|
|
878
|
+
// Copy parent clipping rect
|
|
879
|
+
copyRect(parentClippingRect, clippingRect);
|
|
880
|
+
clippingRect.valid = true;
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
calculateZIndex() {
|
|
884
|
+
const props = this.props;
|
|
885
|
+
const z = props.zIndex || 0;
|
|
886
|
+
const p = props.parent?.zIndex || 0;
|
|
887
|
+
let zIndex = z;
|
|
888
|
+
if (props.parent?.zIndexLocked) {
|
|
889
|
+
zIndex = z < p ? z : p;
|
|
890
|
+
}
|
|
891
|
+
this.calcZIndex = zIndex;
|
|
892
|
+
}
|
|
893
|
+
/**
|
|
894
|
+
* Destroy the node and cleanup all resources
|
|
895
|
+
*/
|
|
896
|
+
destroy() {
|
|
897
|
+
if (this.destroyed === true) {
|
|
898
|
+
return;
|
|
899
|
+
}
|
|
900
|
+
this.destroyed = true;
|
|
901
|
+
this.unloadTexture();
|
|
902
|
+
this.clippingRect.valid = false;
|
|
903
|
+
this.isRenderable = false;
|
|
904
|
+
this.renderCoords = undefined;
|
|
905
|
+
this.renderBound = undefined;
|
|
906
|
+
this.strictBound = undefined;
|
|
907
|
+
this.preloadBound = undefined;
|
|
908
|
+
this.globalTransform = undefined;
|
|
909
|
+
this.scaleRotateTransform = undefined;
|
|
910
|
+
this.localTransform = undefined;
|
|
911
|
+
this.props.texture = null;
|
|
912
|
+
this.props.shader = this.stage.defShaderCtr;
|
|
913
|
+
while (this.children.length > 0) {
|
|
914
|
+
this.children[0]?.destroy();
|
|
915
|
+
}
|
|
916
|
+
// This very action will also remove the node from the parent's children array
|
|
917
|
+
this.parent = null;
|
|
918
|
+
if (this.rtt) {
|
|
919
|
+
this.stage.renderer.removeRTTNode(this);
|
|
920
|
+
}
|
|
921
|
+
this.removeAllListeners();
|
|
922
|
+
}
|
|
923
|
+
renderQuads(renderer) {
|
|
924
|
+
// Prevent quad rendering if parent has a render texture
|
|
925
|
+
// and renderer is not currently rendering to a texture
|
|
926
|
+
if (this.parentHasRenderTexture) {
|
|
927
|
+
if (!renderer.renderToTextureActive) {
|
|
928
|
+
return;
|
|
929
|
+
}
|
|
930
|
+
// Prevent quad rendering if parent render texture is not the active render texture
|
|
931
|
+
if (this.parentRenderTexture !== renderer.activeRttNode) {
|
|
932
|
+
return;
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
assertTruthy(this.globalTransform);
|
|
936
|
+
assertTruthy(this.renderCoords);
|
|
937
|
+
// add to list of renderables to be sorted before rendering
|
|
938
|
+
renderer.addQuad({
|
|
939
|
+
width: this.props.width,
|
|
940
|
+
height: this.props.height,
|
|
941
|
+
colorTl: this.premultipliedColorTl,
|
|
942
|
+
colorTr: this.premultipliedColorTr,
|
|
943
|
+
colorBl: this.premultipliedColorBl,
|
|
944
|
+
colorBr: this.premultipliedColorBr,
|
|
945
|
+
// if we do not have a texture, use the default texture
|
|
946
|
+
// this assumes any renderable node is either a distinct texture or a ColorTexture
|
|
947
|
+
texture: this.texture || this.stage.defaultTexture,
|
|
948
|
+
textureOptions: this.textureOptions,
|
|
949
|
+
zIndex: this.zIndex,
|
|
950
|
+
shader: this.shader.shader,
|
|
951
|
+
shaderProps: this.shader.getResolvedProps(),
|
|
952
|
+
alpha: this.worldAlpha,
|
|
953
|
+
clippingRect: this.clippingRect,
|
|
954
|
+
tx: this.globalTransform.tx,
|
|
955
|
+
ty: this.globalTransform.ty,
|
|
956
|
+
ta: this.globalTransform.ta,
|
|
957
|
+
tb: this.globalTransform.tb,
|
|
958
|
+
tc: this.globalTransform.tc,
|
|
959
|
+
td: this.globalTransform.td,
|
|
960
|
+
renderCoords: this.renderCoords,
|
|
961
|
+
rtt: this.rtt,
|
|
962
|
+
parentHasRenderTexture: this.parentHasRenderTexture,
|
|
963
|
+
framebufferDimensions: this.framebufferDimensions,
|
|
964
|
+
});
|
|
965
|
+
}
|
|
966
|
+
//#region Properties
|
|
967
|
+
get id() {
|
|
968
|
+
return this._id;
|
|
969
|
+
}
|
|
970
|
+
get data() {
|
|
971
|
+
return this.props.data;
|
|
972
|
+
}
|
|
973
|
+
set data(d) {
|
|
974
|
+
this.props.data = d;
|
|
975
|
+
}
|
|
976
|
+
get x() {
|
|
977
|
+
return this.props.x;
|
|
978
|
+
}
|
|
979
|
+
set x(value) {
|
|
980
|
+
if (this.props.x !== value) {
|
|
981
|
+
this.props.x = value;
|
|
982
|
+
this.setUpdateType(UpdateType.Local);
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
get absX() {
|
|
986
|
+
return (this.props.x +
|
|
987
|
+
-this.props.width * this.props.mountX +
|
|
988
|
+
(this.props.parent?.absX || this.props.parent?.globalTransform?.tx || 0));
|
|
989
|
+
}
|
|
990
|
+
get absY() {
|
|
991
|
+
return (this.props.y +
|
|
992
|
+
-this.props.height * this.props.mountY +
|
|
993
|
+
(this.props.parent?.absY ?? 0));
|
|
994
|
+
}
|
|
995
|
+
get y() {
|
|
996
|
+
return this.props.y;
|
|
997
|
+
}
|
|
998
|
+
set y(value) {
|
|
999
|
+
if (this.props.y !== value) {
|
|
1000
|
+
this.props.y = value;
|
|
1001
|
+
this.setUpdateType(UpdateType.Local);
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
get width() {
|
|
1005
|
+
return this.props.width;
|
|
1006
|
+
}
|
|
1007
|
+
set width(value) {
|
|
1008
|
+
if (this.props.width !== value) {
|
|
1009
|
+
this.props.width = value;
|
|
1010
|
+
this.setUpdateType(UpdateType.Local);
|
|
1011
|
+
if (this.props.rtt) {
|
|
1012
|
+
this.texture = this.stage.txManager.createTexture('RenderTexture', {
|
|
1013
|
+
width: this.width,
|
|
1014
|
+
height: this.height,
|
|
1015
|
+
});
|
|
1016
|
+
this.setUpdateType(UpdateType.RenderTexture);
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
get height() {
|
|
1021
|
+
return this.props.height;
|
|
1022
|
+
}
|
|
1023
|
+
set height(value) {
|
|
1024
|
+
if (this.props.height !== value) {
|
|
1025
|
+
this.props.height = value;
|
|
1026
|
+
this.setUpdateType(UpdateType.Local);
|
|
1027
|
+
if (this.props.rtt) {
|
|
1028
|
+
this.texture = this.stage.txManager.createTexture('RenderTexture', {
|
|
1029
|
+
width: this.width,
|
|
1030
|
+
height: this.height,
|
|
1031
|
+
});
|
|
1032
|
+
this.setUpdateType(UpdateType.RenderTexture);
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
get scale() {
|
|
1037
|
+
// The CoreNode `scale` property is only used by Animations.
|
|
1038
|
+
// Unlike INode, `null` should never be possibility for Animations.
|
|
1039
|
+
return this.scaleX;
|
|
1040
|
+
}
|
|
1041
|
+
set scale(value) {
|
|
1042
|
+
// The CoreNode `scale` property is only used by Animations.
|
|
1043
|
+
// Unlike INode, `null` should never be possibility for Animations.
|
|
1044
|
+
this.scaleX = value;
|
|
1045
|
+
this.scaleY = value;
|
|
1046
|
+
}
|
|
1047
|
+
get scaleX() {
|
|
1048
|
+
return this.props.scaleX;
|
|
1049
|
+
}
|
|
1050
|
+
set scaleX(value) {
|
|
1051
|
+
if (this.props.scaleX !== value) {
|
|
1052
|
+
this.props.scaleX = value;
|
|
1053
|
+
this.setUpdateType(UpdateType.ScaleRotate);
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
get scaleY() {
|
|
1057
|
+
return this.props.scaleY;
|
|
1058
|
+
}
|
|
1059
|
+
set scaleY(value) {
|
|
1060
|
+
if (this.props.scaleY !== value) {
|
|
1061
|
+
this.props.scaleY = value;
|
|
1062
|
+
this.setUpdateType(UpdateType.ScaleRotate);
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
get mount() {
|
|
1066
|
+
return this.props.mount;
|
|
1067
|
+
}
|
|
1068
|
+
set mount(value) {
|
|
1069
|
+
if (this.props.mountX !== value || this.props.mountY !== value) {
|
|
1070
|
+
this.props.mountX = value;
|
|
1071
|
+
this.props.mountY = value;
|
|
1072
|
+
this.props.mount = value;
|
|
1073
|
+
this.setUpdateType(UpdateType.Local);
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
get mountX() {
|
|
1077
|
+
return this.props.mountX;
|
|
1078
|
+
}
|
|
1079
|
+
set mountX(value) {
|
|
1080
|
+
if (this.props.mountX !== value) {
|
|
1081
|
+
this.props.mountX = value;
|
|
1082
|
+
this.setUpdateType(UpdateType.Local);
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
get mountY() {
|
|
1086
|
+
return this.props.mountY;
|
|
1087
|
+
}
|
|
1088
|
+
set mountY(value) {
|
|
1089
|
+
if (this.props.mountY !== value) {
|
|
1090
|
+
this.props.mountY = value;
|
|
1091
|
+
this.setUpdateType(UpdateType.Local);
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
get pivot() {
|
|
1095
|
+
return this.props.pivot;
|
|
1096
|
+
}
|
|
1097
|
+
set pivot(value) {
|
|
1098
|
+
if (this.props.pivotX !== value || this.props.pivotY !== value) {
|
|
1099
|
+
this.props.pivotX = value;
|
|
1100
|
+
this.props.pivotY = value;
|
|
1101
|
+
this.props.pivot = value;
|
|
1102
|
+
this.setUpdateType(UpdateType.Local);
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
get pivotX() {
|
|
1106
|
+
return this.props.pivotX;
|
|
1107
|
+
}
|
|
1108
|
+
set pivotX(value) {
|
|
1109
|
+
if (this.props.pivotX !== value) {
|
|
1110
|
+
this.props.pivotX = value;
|
|
1111
|
+
this.setUpdateType(UpdateType.Local);
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
get pivotY() {
|
|
1115
|
+
return this.props.pivotY;
|
|
1116
|
+
}
|
|
1117
|
+
set pivotY(value) {
|
|
1118
|
+
if (this.props.pivotY !== value) {
|
|
1119
|
+
this.props.pivotY = value;
|
|
1120
|
+
this.setUpdateType(UpdateType.Local);
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
get rotation() {
|
|
1124
|
+
return this.props.rotation;
|
|
1125
|
+
}
|
|
1126
|
+
set rotation(value) {
|
|
1127
|
+
if (this.props.rotation !== value) {
|
|
1128
|
+
this.props.rotation = value;
|
|
1129
|
+
this.setUpdateType(UpdateType.ScaleRotate);
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
get alpha() {
|
|
1133
|
+
return this.props.alpha;
|
|
1134
|
+
}
|
|
1135
|
+
set alpha(value) {
|
|
1136
|
+
this.props.alpha = value;
|
|
1137
|
+
this.setUpdateType(UpdateType.PremultipliedColors |
|
|
1138
|
+
UpdateType.WorldAlpha |
|
|
1139
|
+
UpdateType.Children |
|
|
1140
|
+
UpdateType.IsRenderable);
|
|
1141
|
+
this.childUpdateType |= UpdateType.WorldAlpha;
|
|
1142
|
+
}
|
|
1143
|
+
get autosize() {
|
|
1144
|
+
return this.props.autosize;
|
|
1145
|
+
}
|
|
1146
|
+
set autosize(value) {
|
|
1147
|
+
this.props.autosize = value;
|
|
1148
|
+
}
|
|
1149
|
+
get boundsMargin() {
|
|
1150
|
+
return (this.props.boundsMargin ??
|
|
1151
|
+
this.parent?.boundsMargin ??
|
|
1152
|
+
this.stage.boundsMargin);
|
|
1153
|
+
}
|
|
1154
|
+
set boundsMargin(value) {
|
|
1155
|
+
if (value === this.props.boundsMargin) {
|
|
1156
|
+
return;
|
|
1157
|
+
}
|
|
1158
|
+
if (value === null) {
|
|
1159
|
+
this.props.boundsMargin = value;
|
|
1160
|
+
}
|
|
1161
|
+
else {
|
|
1162
|
+
const bm = Array.isArray(value)
|
|
1163
|
+
? value
|
|
1164
|
+
: [value, value, value, value];
|
|
1165
|
+
this.props.boundsMargin = bm;
|
|
1166
|
+
}
|
|
1167
|
+
this.setUpdateType(UpdateType.RenderBounds);
|
|
1168
|
+
}
|
|
1169
|
+
get clipping() {
|
|
1170
|
+
return this.props.clipping;
|
|
1171
|
+
}
|
|
1172
|
+
set clipping(value) {
|
|
1173
|
+
this.props.clipping = value;
|
|
1174
|
+
this.setUpdateType(UpdateType.Clipping | UpdateType.RenderBounds | UpdateType.Children);
|
|
1175
|
+
this.childUpdateType |= UpdateType.Global | UpdateType.Clipping;
|
|
1176
|
+
}
|
|
1177
|
+
get color() {
|
|
1178
|
+
return this.props.color;
|
|
1179
|
+
}
|
|
1180
|
+
set color(value) {
|
|
1181
|
+
this.colorTop = value;
|
|
1182
|
+
this.colorBottom = value;
|
|
1183
|
+
this.colorLeft = value;
|
|
1184
|
+
this.colorRight = value;
|
|
1185
|
+
this.props.color = value;
|
|
1186
|
+
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1187
|
+
}
|
|
1188
|
+
get colorTop() {
|
|
1189
|
+
return this.props.colorTop;
|
|
1190
|
+
}
|
|
1191
|
+
set colorTop(value) {
|
|
1192
|
+
if (this.props.colorTl !== value || this.props.colorTr !== value) {
|
|
1193
|
+
this.colorTl = value;
|
|
1194
|
+
this.colorTr = value;
|
|
1195
|
+
}
|
|
1196
|
+
this.props.colorTop = value;
|
|
1197
|
+
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1198
|
+
}
|
|
1199
|
+
get colorBottom() {
|
|
1200
|
+
return this.props.colorBottom;
|
|
1201
|
+
}
|
|
1202
|
+
set colorBottom(value) {
|
|
1203
|
+
if (this.props.colorBl !== value || this.props.colorBr !== value) {
|
|
1204
|
+
this.colorBl = value;
|
|
1205
|
+
this.colorBr = value;
|
|
1206
|
+
}
|
|
1207
|
+
this.props.colorBottom = value;
|
|
1208
|
+
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1209
|
+
}
|
|
1210
|
+
get colorLeft() {
|
|
1211
|
+
return this.props.colorLeft;
|
|
1212
|
+
}
|
|
1213
|
+
set colorLeft(value) {
|
|
1214
|
+
if (this.props.colorTl !== value || this.props.colorBl !== value) {
|
|
1215
|
+
this.colorTl = value;
|
|
1216
|
+
this.colorBl = value;
|
|
1217
|
+
}
|
|
1218
|
+
this.props.colorLeft = value;
|
|
1219
|
+
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1220
|
+
}
|
|
1221
|
+
get colorRight() {
|
|
1222
|
+
return this.props.colorRight;
|
|
1223
|
+
}
|
|
1224
|
+
set colorRight(value) {
|
|
1225
|
+
if (this.props.colorTr !== value || this.props.colorBr !== value) {
|
|
1226
|
+
this.colorTr = value;
|
|
1227
|
+
this.colorBr = value;
|
|
1228
|
+
}
|
|
1229
|
+
this.props.colorRight = value;
|
|
1230
|
+
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1231
|
+
}
|
|
1232
|
+
get colorTl() {
|
|
1233
|
+
return this.props.colorTl;
|
|
1234
|
+
}
|
|
1235
|
+
set colorTl(value) {
|
|
1236
|
+
this.props.colorTl = value;
|
|
1237
|
+
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1238
|
+
}
|
|
1239
|
+
get colorTr() {
|
|
1240
|
+
return this.props.colorTr;
|
|
1241
|
+
}
|
|
1242
|
+
set colorTr(value) {
|
|
1243
|
+
this.props.colorTr = value;
|
|
1244
|
+
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1245
|
+
}
|
|
1246
|
+
get colorBl() {
|
|
1247
|
+
return this.props.colorBl;
|
|
1248
|
+
}
|
|
1249
|
+
set colorBl(value) {
|
|
1250
|
+
this.props.colorBl = value;
|
|
1251
|
+
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1252
|
+
}
|
|
1253
|
+
get colorBr() {
|
|
1254
|
+
return this.props.colorBr;
|
|
1255
|
+
}
|
|
1256
|
+
set colorBr(value) {
|
|
1257
|
+
this.props.colorBr = value;
|
|
1258
|
+
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
1259
|
+
}
|
|
1260
|
+
// we're only interested in parent zIndex to test
|
|
1261
|
+
// if we should use node zIndex is higher then parent zIndex
|
|
1262
|
+
get zIndexLocked() {
|
|
1263
|
+
return this.props.zIndexLocked || 0;
|
|
1264
|
+
}
|
|
1265
|
+
set zIndexLocked(value) {
|
|
1266
|
+
this.props.zIndexLocked = value;
|
|
1267
|
+
this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
|
|
1268
|
+
for (let i = 0, length = this.children.length; i < length; i++) {
|
|
1269
|
+
this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
get zIndex() {
|
|
1273
|
+
return this.props.zIndex;
|
|
1274
|
+
}
|
|
1275
|
+
set zIndex(value) {
|
|
1276
|
+
this.props.zIndex = value;
|
|
1277
|
+
this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
|
|
1278
|
+
for (let i = 0, length = this.children.length; i < length; i++) {
|
|
1279
|
+
this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
get parent() {
|
|
1283
|
+
return this.props.parent;
|
|
1284
|
+
}
|
|
1285
|
+
set parent(newParent) {
|
|
1286
|
+
const oldParent = this.props.parent;
|
|
1287
|
+
if (oldParent === newParent) {
|
|
1288
|
+
return;
|
|
1289
|
+
}
|
|
1290
|
+
this.props.parent = newParent;
|
|
1291
|
+
if (oldParent) {
|
|
1292
|
+
const index = oldParent.children.indexOf(this);
|
|
1293
|
+
assertTruthy(index !== -1, "CoreNode.parent: Node not found in old parent's children!");
|
|
1294
|
+
oldParent.children.splice(index, 1);
|
|
1295
|
+
oldParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
|
|
1296
|
+
}
|
|
1297
|
+
if (newParent) {
|
|
1298
|
+
newParent.children.push(this);
|
|
1299
|
+
// Since this node has a new parent, to be safe, have it do a full update.
|
|
1300
|
+
this.setUpdateType(UpdateType.All);
|
|
1301
|
+
// Tell parent that it's children need to be updated and sorted.
|
|
1302
|
+
newParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
|
|
1303
|
+
// If the new parent has an RTT enabled, apply RTT inheritance
|
|
1304
|
+
if (newParent.rtt || newParent.parentHasRenderTexture) {
|
|
1305
|
+
this.applyRTTInheritance(newParent);
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
this.updateScaleRotateTransform();
|
|
1309
|
+
// fetch render bounds from parent
|
|
1310
|
+
this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
1311
|
+
}
|
|
1312
|
+
get preventCleanup() {
|
|
1313
|
+
return this.props.textureOptions.preventCleanup || false;
|
|
1314
|
+
}
|
|
1315
|
+
set preventCleanup(value) {
|
|
1316
|
+
if (isProductionEnvironment() === false) {
|
|
1317
|
+
console.warn('CoreNode.preventCleanup: Is deprecated and will be removed in upcoming release, please use textureOptions.preventCleanup instead');
|
|
1318
|
+
}
|
|
1319
|
+
this.props.textureOptions.preventCleanup = value;
|
|
1320
|
+
}
|
|
1321
|
+
get rtt() {
|
|
1322
|
+
return this.props.rtt;
|
|
1323
|
+
}
|
|
1324
|
+
set rtt(value) {
|
|
1325
|
+
if (this.props.rtt === value) {
|
|
1326
|
+
return;
|
|
1327
|
+
}
|
|
1328
|
+
this.props.rtt = value;
|
|
1329
|
+
if (value === true) {
|
|
1330
|
+
this.initRenderTexture();
|
|
1331
|
+
this.markChildrenWithRTT();
|
|
1332
|
+
}
|
|
1333
|
+
else {
|
|
1334
|
+
this.cleanupRenderTexture();
|
|
1335
|
+
}
|
|
1336
|
+
this.setUpdateType(UpdateType.RenderTexture);
|
|
1337
|
+
if (this.parentHasRenderTexture === true) {
|
|
1338
|
+
this.notifyParentRTTOfUpdate();
|
|
1339
|
+
}
|
|
1340
|
+
}
|
|
1341
|
+
initRenderTexture() {
|
|
1342
|
+
this.texture = this.stage.txManager.createTexture('RenderTexture', {
|
|
1343
|
+
width: this.width,
|
|
1344
|
+
height: this.height,
|
|
1345
|
+
});
|
|
1346
|
+
this.stage.renderer.renderToTexture(this);
|
|
1347
|
+
}
|
|
1348
|
+
cleanupRenderTexture() {
|
|
1349
|
+
this.unloadTexture();
|
|
1350
|
+
this.clearRTTInheritance();
|
|
1351
|
+
this.hasRTTupdates = false;
|
|
1352
|
+
this.texture = null;
|
|
1353
|
+
}
|
|
1354
|
+
markChildrenWithRTT(node = null) {
|
|
1355
|
+
const parent = node || this;
|
|
1356
|
+
for (const child of parent.children) {
|
|
1357
|
+
child.setUpdateType(UpdateType.All);
|
|
1358
|
+
child.parentHasRenderTexture = true;
|
|
1359
|
+
child.markChildrenWithRTT();
|
|
1360
|
+
}
|
|
1361
|
+
}
|
|
1362
|
+
// Apply RTT inheritance when a node has an RTT-enabled parent
|
|
1363
|
+
applyRTTInheritance(parent) {
|
|
1364
|
+
if (parent.rtt) {
|
|
1365
|
+
// Only the RTT node should be added to `renderToTexture`
|
|
1366
|
+
parent.setUpdateType(UpdateType.RenderTexture);
|
|
1367
|
+
}
|
|
1368
|
+
// Propagate `parentHasRenderTexture` downwards
|
|
1369
|
+
this.markChildrenWithRTT(parent);
|
|
1370
|
+
}
|
|
1371
|
+
// Clear RTT inheritance when detaching from an RTT chain
|
|
1372
|
+
clearRTTInheritance() {
|
|
1373
|
+
// if this node is RTT itself stop the propagation important for nested RTT nodes
|
|
1374
|
+
// for the initial RTT node this is already handled in `set rtt`
|
|
1375
|
+
if (this.rtt) {
|
|
1376
|
+
return;
|
|
1377
|
+
}
|
|
1378
|
+
for (const child of this.children) {
|
|
1379
|
+
// force child to update everything as the RTT inheritance has changed
|
|
1380
|
+
child.parentHasRenderTexture = false;
|
|
1381
|
+
child.rttParent = null;
|
|
1382
|
+
child.setUpdateType(UpdateType.All);
|
|
1383
|
+
child.clearRTTInheritance();
|
|
1384
|
+
}
|
|
1385
|
+
}
|
|
1386
|
+
get shader() {
|
|
1387
|
+
return this.props.shader;
|
|
1388
|
+
}
|
|
1389
|
+
set shader(value) {
|
|
1390
|
+
if (this.props.shader === value) {
|
|
1391
|
+
return;
|
|
1392
|
+
}
|
|
1393
|
+
this.props.shader = value;
|
|
1394
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
1395
|
+
}
|
|
1396
|
+
get src() {
|
|
1397
|
+
return this.props.src;
|
|
1398
|
+
}
|
|
1399
|
+
set src(imageUrl) {
|
|
1400
|
+
if (this.props.src === imageUrl) {
|
|
1401
|
+
return;
|
|
1402
|
+
}
|
|
1403
|
+
this.props.src = imageUrl;
|
|
1404
|
+
if (!imageUrl) {
|
|
1405
|
+
this.texture = null;
|
|
1406
|
+
return;
|
|
1407
|
+
}
|
|
1408
|
+
this.texture = this.stage.txManager.createTexture('ImageTexture', {
|
|
1409
|
+
src: imageUrl,
|
|
1410
|
+
width: this.props.width,
|
|
1411
|
+
height: this.props.height,
|
|
1412
|
+
type: this.props.imageType,
|
|
1413
|
+
sx: this.props.srcX,
|
|
1414
|
+
sy: this.props.srcY,
|
|
1415
|
+
sw: this.props.srcWidth,
|
|
1416
|
+
sh: this.props.srcHeight,
|
|
1417
|
+
});
|
|
1418
|
+
}
|
|
1419
|
+
set imageType(type) {
|
|
1420
|
+
if (this.props.imageType === type) {
|
|
1421
|
+
return;
|
|
1422
|
+
}
|
|
1423
|
+
this.props.imageType = type;
|
|
1424
|
+
}
|
|
1425
|
+
get imageType() {
|
|
1426
|
+
return this.props.imageType || null;
|
|
1427
|
+
}
|
|
1428
|
+
get srcHeight() {
|
|
1429
|
+
return this.props.srcHeight;
|
|
1430
|
+
}
|
|
1431
|
+
set srcHeight(value) {
|
|
1432
|
+
this.props.srcHeight = value;
|
|
1433
|
+
}
|
|
1434
|
+
get srcWidth() {
|
|
1435
|
+
return this.props.srcWidth;
|
|
1436
|
+
}
|
|
1437
|
+
set srcWidth(value) {
|
|
1438
|
+
this.props.srcWidth = value;
|
|
1439
|
+
}
|
|
1440
|
+
get srcX() {
|
|
1441
|
+
return this.props.srcX;
|
|
1442
|
+
}
|
|
1443
|
+
set srcX(value) {
|
|
1444
|
+
this.props.srcX = value;
|
|
1445
|
+
}
|
|
1446
|
+
get srcY() {
|
|
1447
|
+
return this.props.srcY;
|
|
1448
|
+
}
|
|
1449
|
+
set srcY(value) {
|
|
1450
|
+
this.props.srcY = value;
|
|
1451
|
+
}
|
|
1452
|
+
/**
|
|
1453
|
+
* Returns the framebuffer dimensions of the node.
|
|
1454
|
+
* If the node has a render texture, the dimensions are the same as the node's dimensions.
|
|
1455
|
+
* If the node does not have a render texture, the dimensions are inherited from the parent.
|
|
1456
|
+
* If the node parent has a render texture and the node is a render texture, the nodes dimensions are used.
|
|
1457
|
+
*/
|
|
1458
|
+
get framebufferDimensions() {
|
|
1459
|
+
if (this.parentHasRenderTexture && !this.rtt && this.parent) {
|
|
1460
|
+
return this.parent.framebufferDimensions;
|
|
1461
|
+
}
|
|
1462
|
+
return { width: this.width, height: this.height };
|
|
1463
|
+
}
|
|
1464
|
+
/**
|
|
1465
|
+
* Returns the parent render texture node if it exists.
|
|
1466
|
+
*/
|
|
1467
|
+
get parentRenderTexture() {
|
|
1468
|
+
let parent = this.parent;
|
|
1469
|
+
while (parent) {
|
|
1470
|
+
if (parent.rtt) {
|
|
1471
|
+
return parent;
|
|
1472
|
+
}
|
|
1473
|
+
parent = parent.parent;
|
|
1474
|
+
}
|
|
1475
|
+
return null;
|
|
1476
|
+
}
|
|
1477
|
+
get texture() {
|
|
1478
|
+
return this.props.texture;
|
|
1479
|
+
}
|
|
1480
|
+
set texture(value) {
|
|
1481
|
+
if (this.props.texture === value) {
|
|
1482
|
+
return;
|
|
1483
|
+
}
|
|
1484
|
+
const oldTexture = this.props.texture;
|
|
1485
|
+
if (oldTexture) {
|
|
1486
|
+
oldTexture.setRenderableOwner(this, false);
|
|
1487
|
+
this.unloadTexture();
|
|
1488
|
+
}
|
|
1489
|
+
this.props.texture = value;
|
|
1490
|
+
if (value !== null) {
|
|
1491
|
+
value.setRenderableOwner(this, this.isRenderable);
|
|
1492
|
+
this.loadTexture();
|
|
1493
|
+
}
|
|
1494
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
1495
|
+
}
|
|
1496
|
+
set textureOptions(value) {
|
|
1497
|
+
this.props.textureOptions = value;
|
|
1498
|
+
}
|
|
1499
|
+
get textureOptions() {
|
|
1500
|
+
return this.props.textureOptions;
|
|
1501
|
+
}
|
|
1502
|
+
get strictBounds() {
|
|
1503
|
+
return this.props.strictBounds;
|
|
1504
|
+
}
|
|
1505
|
+
set strictBounds(v) {
|
|
1506
|
+
if (v === this.props.strictBounds) {
|
|
1507
|
+
return;
|
|
1508
|
+
}
|
|
1509
|
+
this.props.strictBounds = v;
|
|
1510
|
+
this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
1511
|
+
this.childUpdateType |= UpdateType.RenderBounds | UpdateType.Children;
|
|
1512
|
+
}
|
|
1513
|
+
set interactive(value) {
|
|
1514
|
+
this.props.interactive = value;
|
|
1515
|
+
// Update Stage's interactive Set
|
|
1516
|
+
if (value === true) {
|
|
1517
|
+
this.stage.interactiveNodes.add(this);
|
|
1518
|
+
}
|
|
1519
|
+
}
|
|
1520
|
+
get interactive() {
|
|
1521
|
+
return this.props.interactive;
|
|
1522
|
+
}
|
|
1523
|
+
animate(props, settings) {
|
|
1524
|
+
const animation = new CoreAnimation(this, props, settings);
|
|
1525
|
+
const controller = new CoreAnimationController(this.stage.animationManager, animation);
|
|
1526
|
+
return controller;
|
|
1527
|
+
}
|
|
1528
|
+
flush() {
|
|
1529
|
+
// no-op
|
|
1530
|
+
}
|
|
1531
|
+
}
|
|
1532
|
+
//# sourceMappingURL=CoreNode.js.map
|