@lightningtv/renderer 2.16.1 → 3.2.3
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/NOTICE +4 -0
- package/README.md +22 -28
- package/dist/exports/canvas-shaders.js +0 -16
- package/dist/exports/canvas-shaders.js.map +1 -1
- package/dist/exports/canvas.d.ts +8 -2
- package/dist/exports/canvas.js +8 -20
- package/dist/exports/canvas.js.map +1 -1
- package/dist/exports/index.d.ts +18 -13
- package/dist/exports/index.js +9 -27
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/inspector.js +0 -18
- package/dist/exports/inspector.js.map +1 -1
- package/dist/exports/utils.d.ts +2 -1
- package/dist/exports/utils.js +2 -19
- package/dist/exports/utils.js.map +1 -1
- package/dist/exports/webgl-shaders.js +0 -16
- package/dist/exports/webgl-shaders.js.map +1 -1
- package/dist/exports/webgl.d.ts +11 -2
- package/dist/exports/webgl.js +11 -20
- package/dist/exports/webgl.js.map +1 -1
- package/dist/src/common/CommonTypes.d.ts +15 -3
- package/dist/src/common/CommonTypes.js +0 -18
- package/dist/src/common/CommonTypes.js.map +1 -1
- package/dist/src/common/EventEmitter.js +0 -18
- package/dist/src/common/EventEmitter.js.map +1 -1
- package/dist/src/common/IEventEmitter.js +0 -16
- package/dist/src/common/IEventEmitter.js.map +1 -1
- package/dist/src/core/Autosizer.d.ts +35 -0
- package/dist/src/core/Autosizer.js +178 -0
- package/dist/src/core/Autosizer.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +138 -105
- package/dist/src/core/CoreNode.js +805 -526
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.d.ts +29 -73
- package/dist/src/core/CoreShaderManager.js +92 -97
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +75 -87
- package/dist/src/core/CoreTextNode.js +380 -258
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +18 -3
- package/dist/src/core/CoreTextureManager.js +63 -107
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +82 -55
- package/dist/src/core/Stage.js +410 -247
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureError.d.ts +11 -0
- package/dist/src/core/TextureError.js +37 -0
- package/dist/src/core/TextureError.js.map +1 -0
- package/dist/src/core/TextureMemoryManager.d.ts +4 -3
- package/dist/src/core/TextureMemoryManager.js +103 -135
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/AnimationManager.js +0 -18
- package/dist/src/core/animations/AnimationManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.d.ts +3 -4
- package/dist/src/core/animations/CoreAnimation.js +9 -76
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.js +0 -18
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/lib/ContextSpy.js +0 -18
- package/dist/src/core/lib/ContextSpy.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.d.ts +2 -2
- package/dist/src/core/lib/ImageWorker.js +31 -30
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/Matrix3d.d.ts +1 -0
- package/dist/src/core/lib/Matrix3d.js +7 -19
- package/dist/src/core/lib/Matrix3d.js.map +1 -1
- package/dist/src/core/lib/RenderCoords.d.ts +9 -10
- package/dist/src/core/lib/RenderCoords.js +27 -55
- package/dist/src/core/lib/RenderCoords.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +147 -59
- package/dist/src/core/lib/WebGlContextWrapper.js +252 -158
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/collectionUtils.d.ts +5 -0
- package/dist/src/core/lib/collectionUtils.js +82 -0
- package/dist/src/core/lib/collectionUtils.js.map +1 -0
- package/dist/src/core/lib/colorCache.d.ts +1 -0
- package/dist/src/core/lib/colorCache.js +19 -0
- package/dist/src/core/lib/colorCache.js.map +1 -0
- package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +2 -0
- package/dist/src/core/{renderers/canvas/internal/ColorUtils.js → lib/colorParser.js} +15 -19
- package/dist/src/core/lib/colorParser.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +14 -2
- package/dist/src/core/lib/textureCompression.js +320 -86
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/lib/textureSvg.js +0 -18
- package/dist/src/core/lib/textureSvg.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +8 -2
- package/dist/src/core/lib/utils.js +21 -20
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
- package/dist/src/core/lib/validateImageBitmap.js +4 -4
- package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
- package/dist/src/core/platforms/Platform.d.ts +5 -0
- package/dist/src/core/platforms/Platform.js +0 -18
- package/dist/src/core/platforms/Platform.js.map +1 -1
- package/dist/src/core/platforms/web/WebPlatform.d.ts +1 -0
- package/dist/src/core/platforms/web/WebPlatform.js +39 -7
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
- package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -0
- package/dist/src/core/renderers/CoreContextTexture.js +0 -18
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderOp.js +0 -18
- package/dist/src/core/renderers/CoreRenderOp.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +25 -23
- package/dist/src/core/renderers/CoreRenderer.js +1 -24
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderNode.d.ts +10 -0
- package/dist/src/core/renderers/CoreShaderNode.js +19 -2
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderProgram.js +0 -18
- package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +3 -5
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +86 -83
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +2 -17
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
- package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -31
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +80 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -24
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -23
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -67
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +31 -19
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +297 -200
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -4
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +5 -5
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +61 -34
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +32 -5
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +50 -18
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -1
- package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
- package/dist/src/core/shaders/canvas/Border.js +67 -41
- package/dist/src/core/shaders/canvas/Border.js.map +1 -1
- package/dist/src/core/shaders/canvas/HolePunch.js +3 -19
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/canvas/LinearGradient.js +2 -18
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js +5 -21
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/Rounded.js +1 -17
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +40 -26
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +43 -23
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +4 -18
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/Shadow.js +0 -16
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
- package/dist/src/core/shaders/canvas/utils/render.js +31 -34
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +11 -2
- package/dist/src/core/shaders/templates/BorderTemplate.js +30 -26
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +2 -18
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -16
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -18
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -2
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/utils.js +0 -16
- package/dist/src/core/shaders/utils.js.map +1 -1
- package/dist/src/core/shaders/webgl/Border.js +75 -31
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/Default.js +6 -41
- package/dist/src/core/shaders/webgl/Default.js.map +1 -1
- package/dist/src/core/shaders/webgl/HolePunch.js +2 -18
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +68 -30
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +52 -45
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/Rounded.js +25 -23
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +110 -48
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +114 -54
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
- package/dist/src/core/shaders/webgl/SdfShader.js +7 -35
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
- package/dist/src/core/shaders/webgl/Shadow.js +39 -34
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +18 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +384 -0
- package/dist/src/core/text-rendering/TextRenderer.js +2 -0
- package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/Utils.d.ts +30 -0
- package/dist/src/core/text-rendering/Utils.js +66 -0
- package/dist/src/core/text-rendering/Utils.js.map +1 -0
- package/dist/src/core/textures/ColorTexture.d.ts +1 -1
- package/dist/src/core/textures/ColorTexture.js +3 -22
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +10 -3
- package/dist/src/core/textures/ImageTexture.js +33 -62
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
- package/dist/src/core/textures/NoiseTexture.js +8 -26
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.d.ts +7 -7
- package/dist/src/core/textures/RenderTexture.js +12 -30
- package/dist/src/core/textures/RenderTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +6 -8
- package/dist/src/core/textures/SubTexture.js +19 -55
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +80 -16
- package/dist/src/core/textures/Texture.js +131 -37
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +2 -1
- package/dist/src/core/utils.js +1 -19
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/INode.d.ts +9 -9
- package/dist/src/main-api/INode.js.map +1 -1
- package/dist/src/main-api/Inspector.d.ts +135 -2
- package/dist/src/main-api/Inspector.js +507 -30
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +246 -162
- package/dist/src/main-api/Renderer.js +192 -152
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/utils.d.ts +23 -4
- package/dist/src/utils.js +50 -27
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/exports/canvas-shaders.ts +11 -0
- package/exports/canvas.ts +8 -20
- package/exports/index.ts +24 -44
- package/exports/inspector.ts +0 -19
- package/exports/utils.ts +7 -19
- package/exports/webgl-shaders.ts +12 -0
- package/exports/webgl.ts +15 -20
- package/package.json +23 -20
- package/src/common/CommonTypes.ts +20 -22
- package/src/common/EventEmitter.ts +0 -19
- package/src/common/IAnimationController.ts +0 -18
- package/src/common/IEventEmitter.ts +0 -17
- package/src/core/Autosizer.ts +205 -0
- package/src/core/CoreNode.test.ts +378 -46
- package/src/core/CoreNode.ts +1007 -659
- package/src/core/CoreShaderManager.ts +128 -250
- package/src/core/CoreTextNode.ts +457 -321
- package/src/core/CoreTextureManager.ts +94 -115
- package/src/core/Stage.ts +516 -312
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +139 -175
- package/src/core/animations/AnimationManager.ts +0 -19
- package/src/core/animations/CoreAnimation.ts +16 -96
- package/src/core/animations/CoreAnimationController.ts +0 -19
- package/src/core/lib/ContextSpy.ts +0 -19
- package/src/core/lib/ImageWorker.ts +43 -31
- package/src/core/lib/Matrix3d.ts +7 -20
- package/src/core/lib/RenderCoords.ts +36 -67
- package/src/core/lib/WebGlContextWrapper.ts +353 -237
- package/src/core/lib/collectionUtils.ts +99 -0
- package/src/core/lib/colorCache.ts +20 -0
- package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +16 -19
- package/src/core/lib/textureCompression.ts +434 -94
- package/src/core/lib/textureSvg.ts +0 -19
- package/src/core/lib/utils.ts +31 -19
- package/src/core/lib/validateImageBitmap.ts +17 -6
- package/src/core/platforms/Platform.ts +64 -0
- package/src/core/platforms/web/WebPlatform.ts +132 -0
- package/src/core/renderers/CoreContextTexture.ts +1 -19
- package/src/core/renderers/CoreRenderOp.ts +0 -19
- package/src/core/renderers/CoreRenderer.ts +34 -49
- package/src/core/renderers/CoreShaderNode.ts +202 -0
- package/src/core/renderers/CoreShaderProgram.ts +4 -0
- package/src/core/renderers/canvas/CanvasRenderer.ts +270 -0
- package/src/core/renderers/canvas/CanvasShaderNode.ts +79 -0
- package/src/core/renderers/canvas/{CanvasCoreTexture.ts → CanvasTexture.ts} +15 -27
- package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
- package/src/core/renderers/webgl/{WebGlCoreCtxRenderTexture.ts → WebGlCtxRenderTexture.ts} +15 -36
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +76 -0
- package/src/core/renderers/webgl/{WebGlCoreCtxTexture.ts → WebGlCtxTexture.ts} +89 -70
- package/src/core/renderers/webgl/WebGlRenderer.ts +850 -0
- package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -0
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +356 -0
- package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
- package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -24
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
- package/src/core/shaders/canvas/Border.ts +119 -0
- package/src/core/shaders/canvas/HolePunch.ts +38 -0
- package/src/core/shaders/canvas/LinearGradient.ts +54 -0
- package/src/core/shaders/canvas/RadialGradient.ts +82 -0
- package/src/core/shaders/canvas/Rounded.ts +38 -0
- package/src/core/shaders/canvas/RoundedWithBorder.ts +105 -0
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +118 -0
- package/src/core/shaders/canvas/RoundedWithShadow.ts +56 -0
- package/src/core/shaders/canvas/Shadow.ts +35 -0
- package/src/core/shaders/canvas/utils/render.ts +143 -0
- package/src/core/shaders/templates/BorderTemplate.ts +128 -0
- package/src/core/shaders/templates/HolePunchTemplate.ts +65 -0
- package/src/core/shaders/templates/LinearGradientTemplate.ts +54 -0
- package/src/core/shaders/templates/RadialGradientTemplate.ts +66 -0
- package/src/core/shaders/templates/RoundedTemplate.ts +81 -0
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +21 -0
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +23 -0
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +18 -0
- package/src/core/shaders/templates/ShadowTemplate.ts +89 -0
- package/src/core/shaders/utils.ts +30 -0
- package/src/core/shaders/webgl/Border.ts +159 -0
- package/src/core/shaders/webgl/Default.ts +52 -0
- package/src/core/shaders/webgl/HolePunch.ts +58 -0
- package/src/core/shaders/webgl/LinearGradient.ts +119 -0
- package/src/core/shaders/webgl/RadialGradient.ts +91 -0
- package/src/core/shaders/webgl/Rounded.ts +97 -0
- package/src/core/shaders/webgl/RoundedWithBorder.ts +212 -0
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +234 -0
- package/src/core/shaders/webgl/RoundedWithShadow.ts +132 -0
- package/src/core/shaders/webgl/SdfShader.ts +104 -0
- package/src/core/shaders/webgl/Shadow.ts +119 -0
- package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
- package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
- package/src/core/text-rendering/SdfFontHandler.ts +566 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +406 -0
- package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
- package/src/core/text-rendering/TextRenderer.ts +426 -0
- package/src/core/text-rendering/Utils.ts +80 -0
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
- package/src/core/textures/ColorTexture.ts +7 -24
- package/src/core/textures/ImageTexture.ts +72 -78
- package/src/core/textures/NoiseTexture.ts +14 -31
- package/src/core/textures/RenderTexture.ts +18 -35
- package/src/core/textures/SubTexture.ts +25 -65
- package/src/core/textures/Texture.ts +182 -53
- package/src/core/utils.ts +9 -26
- package/src/main-api/INode.ts +10 -29
- package/src/main-api/Inspector.ts +794 -38
- package/src/main-api/Renderer.ts +476 -274
- package/src/utils.ts +83 -29
- package/dist/src/core/animations/SimpleAnimation.d.ts +0 -28
- package/dist/src/core/animations/SimpleAnimation.js +0 -96
- package/dist/src/core/animations/SimpleAnimation.js.map +0 -1
- package/dist/src/core/platform.d.ts +0 -10
- package/dist/src/core/platform.js +0 -81
- package/dist/src/core/platform.js.map +0 -1
- package/dist/src/core/renderers/CoreShader.d.ts +0 -9
- package/dist/src/core/renderers/CoreShader.js +0 -28
- package/dist/src/core/renderers/CoreShader.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -16
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -124
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -14
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -138
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -58
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -56
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -239
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -616
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -233
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -44
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -118
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
- package/dist/src/core/shaders/templates/shaderUtils.d.ts +0 -5
- package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
- package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
- package/dist/src/core/shaders/webgl/Magnifier.d.ts +0 -46
- package/dist/src/core/shaders/webgl/Magnifier.js +0 -107
- package/dist/src/core/shaders/webgl/Magnifier.js.map +0 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder copy.d.ts +0 -3
- package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js +0 -218
- package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js.map +0 -1
- package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
- package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
- package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
- package/dist/src/core/text-rendering/TrFontManager.js +0 -131
- package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
- package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -120
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -92
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -607
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -373
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
- package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
- package/dist/src/main-api/DynamicShaderController.js +0 -58
- package/dist/src/main-api/DynamicShaderController.js.map +0 -1
- package/dist/src/main-api/ShaderController.d.ts +0 -31
- package/dist/src/main-api/ShaderController.js +0 -37
- package/dist/src/main-api/ShaderController.js.map +0 -1
- package/scripts/please-use-pnpm.js +0 -13
- package/src/core/platform.ts +0 -100
- package/src/core/renderers/CoreShader.ts +0 -41
- package/src/core/renderers/canvas/CanvasCoreRenderer.ts +0 -375
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -231
- package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +0 -48
- package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +0 -50
- package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +0 -125
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +0 -821
- package/src/core/renderers/webgl/WebGlCoreShader.ts +0 -365
- package/src/core/renderers/webgl/shaders/DefaultShader.ts +0 -93
- package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +0 -132
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +0 -580
- package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +0 -167
- package/src/core/renderers/webgl/shaders/SdfShader.ts +0 -204
- package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +0 -87
- package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +0 -159
- package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +0 -127
- package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +0 -148
- package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +0 -67
- package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +0 -157
- package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +0 -171
- package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +0 -168
- package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +0 -187
- package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +0 -110
- package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +0 -196
- package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
- package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
- package/src/core/text-rendering/TrFontManager.ts +0 -183
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
- package/src/core/text-rendering/font-face-types/utils.ts +0 -39
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -808
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -853
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
- package/src/core/text-rendering/renderers/TextRenderer.ts +0 -557
- package/src/main-api/DynamicShaderController.ts +0 -104
- package/src/main-api/ShaderController.ts +0 -80
package/src/core/CoreNode.ts
CHANGED
|
@@ -1,33 +1,20 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
-
* following copyright and licenses apply:
|
|
4
|
-
*
|
|
5
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
-
*
|
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
1
|
import {
|
|
21
2
|
assertTruthy,
|
|
22
3
|
getNewId,
|
|
23
|
-
|
|
24
|
-
|
|
4
|
+
premultiplyColorABGR,
|
|
5
|
+
USE_RTT,
|
|
6
|
+
ENABLE_AUTOSIZE,
|
|
7
|
+
EMIT_BOUNDS_EVENTS,
|
|
25
8
|
} from '../utils.js';
|
|
26
9
|
import type { TextureOptions } from './CoreTextureManager.js';
|
|
10
|
+
import type { WebGlRenderer } from './renderers/webgl/WebGlRenderer.js';
|
|
11
|
+
import type { WebGlCtxTexture } from './renderers/webgl/WebGlCtxTexture.js';
|
|
12
|
+
import type { BufferCollection } from './renderers/webgl/internal/BufferCollection.js';
|
|
27
13
|
import type { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
28
14
|
import type { Stage } from './Stage.js';
|
|
29
15
|
import {
|
|
30
16
|
type Texture,
|
|
17
|
+
type TextureCoords,
|
|
31
18
|
type TextureFailedEventHandler,
|
|
32
19
|
type TextureFreedEventHandler,
|
|
33
20
|
type TextureLoadedEventHandler,
|
|
@@ -37,6 +24,7 @@ import type {
|
|
|
37
24
|
NodeTextureFailedPayload,
|
|
38
25
|
NodeTextureFreedPayload,
|
|
39
26
|
NodeTextureLoadedPayload,
|
|
27
|
+
NodeRenderablePayload,
|
|
40
28
|
} from '../common/CommonTypes.js';
|
|
41
29
|
import { EventEmitter } from '../common/EventEmitter.js';
|
|
42
30
|
import {
|
|
@@ -55,7 +43,9 @@ import type { AnimationSettings } from './animations/CoreAnimation.js';
|
|
|
55
43
|
import type { IAnimationController } from '../common/IAnimationController.js';
|
|
56
44
|
import { CoreAnimation } from './animations/CoreAnimation.js';
|
|
57
45
|
import { CoreAnimationController } from './animations/CoreAnimationController.js';
|
|
58
|
-
import type {
|
|
46
|
+
import type { CoreShaderNode } from './renderers/CoreShaderNode.js';
|
|
47
|
+
import { AutosizeMode, Autosizer } from './Autosizer.js';
|
|
48
|
+
import { removeChild } from './lib/collectionUtils.js';
|
|
59
49
|
|
|
60
50
|
export enum CoreNodeRenderState {
|
|
61
51
|
Init = 0,
|
|
@@ -64,6 +54,14 @@ export enum CoreNodeRenderState {
|
|
|
64
54
|
InViewport = 8,
|
|
65
55
|
}
|
|
66
56
|
|
|
57
|
+
const NO_CLIPPING_RECT: RectWithValid = {
|
|
58
|
+
x: 0,
|
|
59
|
+
y: 0,
|
|
60
|
+
width: 0,
|
|
61
|
+
height: 0,
|
|
62
|
+
valid: false,
|
|
63
|
+
};
|
|
64
|
+
|
|
67
65
|
const CoreNodeRenderStateMap: Map<CoreNodeRenderState, string> = new Map();
|
|
68
66
|
CoreNodeRenderStateMap.set(CoreNodeRenderState.Init, 'init');
|
|
69
67
|
CoreNodeRenderStateMap.set(CoreNodeRenderState.OutOfBounds, 'outOfBounds');
|
|
@@ -77,33 +75,24 @@ export enum UpdateType {
|
|
|
77
75
|
Children = 1,
|
|
78
76
|
|
|
79
77
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* @remarks
|
|
83
|
-
* CoreNode Properties Updated:
|
|
84
|
-
* - `scaleRotateTransform`
|
|
85
|
-
*/
|
|
86
|
-
ScaleRotate = 2,
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Translate transform update (x/y/width/height/pivot/mount)
|
|
78
|
+
* localTransform
|
|
90
79
|
*
|
|
91
80
|
* @remarks
|
|
92
81
|
* CoreNode Properties Updated:
|
|
93
82
|
* - `localTransform`
|
|
94
83
|
*/
|
|
95
|
-
Local =
|
|
84
|
+
Local = 2,
|
|
96
85
|
|
|
97
86
|
/**
|
|
98
|
-
*
|
|
87
|
+
* globalTransform
|
|
99
88
|
*
|
|
100
|
-
* @remarks
|
|
89
|
+
* * @remarks
|
|
101
90
|
* CoreNode Properties Updated:
|
|
102
91
|
* - `globalTransform`
|
|
92
|
+
* - `renderBounds`
|
|
103
93
|
* - `renderCoords`
|
|
104
|
-
* - `renderBound`
|
|
105
94
|
*/
|
|
106
|
-
Global =
|
|
95
|
+
Global = 4,
|
|
107
96
|
|
|
108
97
|
/**
|
|
109
98
|
* Clipping rect update
|
|
@@ -112,25 +101,16 @@ export enum UpdateType {
|
|
|
112
101
|
* CoreNode Properties Updated:
|
|
113
102
|
* - `clippingRect`
|
|
114
103
|
*/
|
|
115
|
-
Clipping =
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Calculated ZIndex update
|
|
119
|
-
*
|
|
120
|
-
* @remarks
|
|
121
|
-
* CoreNode Properties Updated:
|
|
122
|
-
* - `calcZIndex`
|
|
123
|
-
*/
|
|
124
|
-
CalculatedZIndex = 32,
|
|
104
|
+
Clipping = 8,
|
|
125
105
|
|
|
126
106
|
/**
|
|
127
|
-
* Z-Index
|
|
107
|
+
* Sort Z-Index Children update
|
|
128
108
|
*
|
|
129
109
|
* @remarks
|
|
130
110
|
* CoreNode Properties Updated:
|
|
131
111
|
* - `children` (sorts children by their `calcZIndex`)
|
|
132
112
|
*/
|
|
133
|
-
|
|
113
|
+
SortZIndexChildren = 16,
|
|
134
114
|
|
|
135
115
|
/**
|
|
136
116
|
* Premultiplied Colors update
|
|
@@ -142,7 +122,7 @@ export enum UpdateType {
|
|
|
142
122
|
* - `premultipliedColorBl`
|
|
143
123
|
* - `premultipliedColorBr`
|
|
144
124
|
*/
|
|
145
|
-
PremultipliedColors =
|
|
125
|
+
PremultipliedColors = 32,
|
|
146
126
|
|
|
147
127
|
/**
|
|
148
128
|
* World Alpha update
|
|
@@ -151,7 +131,7 @@ export enum UpdateType {
|
|
|
151
131
|
* CoreNode Properties Updated:
|
|
152
132
|
* - `worldAlpha` = `parent.worldAlpha` * `alpha`
|
|
153
133
|
*/
|
|
154
|
-
WorldAlpha =
|
|
134
|
+
WorldAlpha = 64,
|
|
155
135
|
|
|
156
136
|
/**
|
|
157
137
|
* Render State update
|
|
@@ -160,7 +140,7 @@ export enum UpdateType {
|
|
|
160
140
|
* CoreNode Properties Updated:
|
|
161
141
|
* - `renderState`
|
|
162
142
|
*/
|
|
163
|
-
RenderState =
|
|
143
|
+
RenderState = 128,
|
|
164
144
|
|
|
165
145
|
/**
|
|
166
146
|
* Is Renderable update
|
|
@@ -169,23 +149,32 @@ export enum UpdateType {
|
|
|
169
149
|
* CoreNode Properties Updated:
|
|
170
150
|
* - `isRenderable`
|
|
171
151
|
*/
|
|
172
|
-
IsRenderable =
|
|
152
|
+
IsRenderable = 256,
|
|
173
153
|
|
|
174
154
|
/**
|
|
175
155
|
* Render Texture update
|
|
176
156
|
*/
|
|
177
|
-
RenderTexture =
|
|
157
|
+
RenderTexture = 512,
|
|
178
158
|
|
|
179
159
|
/**
|
|
180
160
|
* Track if parent has render texture
|
|
181
161
|
*/
|
|
182
|
-
ParentRenderTexture =
|
|
162
|
+
ParentRenderTexture = 1024,
|
|
183
163
|
|
|
184
164
|
/**
|
|
185
165
|
* Render Bounds update
|
|
186
166
|
*/
|
|
187
|
-
RenderBounds =
|
|
167
|
+
RenderBounds = 2048,
|
|
188
168
|
|
|
169
|
+
/**
|
|
170
|
+
* RecalcUniforms
|
|
171
|
+
*/
|
|
172
|
+
RecalcUniforms = 4096,
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Autosize update
|
|
176
|
+
*/
|
|
177
|
+
Autosize = 8192,
|
|
189
178
|
/**
|
|
190
179
|
* None
|
|
191
180
|
*/
|
|
@@ -194,7 +183,7 @@ export enum UpdateType {
|
|
|
194
183
|
/**
|
|
195
184
|
* All
|
|
196
185
|
*/
|
|
197
|
-
All =
|
|
186
|
+
All = 16383,
|
|
198
187
|
}
|
|
199
188
|
|
|
200
189
|
/**
|
|
@@ -235,16 +224,18 @@ export interface CoreNodeProps {
|
|
|
235
224
|
y: number;
|
|
236
225
|
/**
|
|
237
226
|
* The width of the Node.
|
|
227
|
+
* @warning This will be deprecated in favor of `w` and `h` properties in the future.
|
|
238
228
|
*
|
|
239
229
|
* @default `0`
|
|
240
230
|
*/
|
|
241
|
-
|
|
231
|
+
w: number;
|
|
242
232
|
/**
|
|
243
233
|
* The height of the Node.
|
|
234
|
+
* @warning This will be deprecated in favor of `w` and `h` properties in the future.
|
|
244
235
|
*
|
|
245
236
|
* @default `0`
|
|
246
237
|
*/
|
|
247
|
-
|
|
238
|
+
h: number;
|
|
248
239
|
/**
|
|
249
240
|
* The alpha opacity of the Node.
|
|
250
241
|
*
|
|
@@ -256,14 +247,35 @@ export interface CoreNodeProps {
|
|
|
256
247
|
*/
|
|
257
248
|
alpha: number;
|
|
258
249
|
/**
|
|
259
|
-
* Autosize
|
|
250
|
+
* Autosize
|
|
260
251
|
*
|
|
261
252
|
* @remarks
|
|
262
|
-
* When enabled,
|
|
263
|
-
*
|
|
253
|
+
* When enabled, the Node automatically resizes based on its content
|
|
254
|
+
*
|
|
255
|
+
* **Texture Autosize Mode:**
|
|
256
|
+
* - When the Node has a texture, it automatically resizes to match the
|
|
257
|
+
* texture's dimensions when the texture loads
|
|
258
|
+
* - This ensures images display at their natural size without manual sizing
|
|
259
|
+
* - Text Nodes always use this mode regardless of this setting
|
|
260
|
+
*
|
|
261
|
+
* **Children Autosize Mode:**
|
|
262
|
+
* - When the Node has no texture but contains children, it automatically
|
|
263
|
+
* resizes to encompass all children's bounds
|
|
264
|
+
* - Calculates the bounding box that contains all child positions, dimensions,
|
|
265
|
+
* and transforms (scale, rotation, mount/pivot points)
|
|
266
|
+
* - Creates container behavior where the parent grows to fit its content
|
|
267
|
+
* - Updates dynamically as children are added, removed, or transformed
|
|
268
|
+
*
|
|
269
|
+
* **Mode Selection Logic:**
|
|
270
|
+
* - Texture mode takes precedence over children mode
|
|
271
|
+
* - Mode switches automatically when texture is added/removed
|
|
272
|
+
* - If no texture and no children, autosize has no effect
|
|
273
|
+
*
|
|
274
|
+
* **Performance:**
|
|
275
|
+
* - Children mode uses efficient transform caching and differential updates
|
|
276
|
+
* - Only recalculates when child transforms actually change
|
|
277
|
+
* - Minimal memory allocation with factory function patterns
|
|
264
278
|
*
|
|
265
|
-
* Text Nodes are always autosized based on their text content regardless
|
|
266
|
-
* of this mode setting.
|
|
267
279
|
*
|
|
268
280
|
* @default `false`
|
|
269
281
|
*/
|
|
@@ -391,7 +403,11 @@ export interface CoreNodeProps {
|
|
|
391
403
|
* The Node's z-index.
|
|
392
404
|
*
|
|
393
405
|
* @remarks
|
|
394
|
-
*
|
|
406
|
+
* Max z-index of children under the same parent determines which child
|
|
407
|
+
* is rendered on top. Higher z-index means the Node is rendered on top of
|
|
408
|
+
* children with lower z-index.
|
|
409
|
+
*
|
|
410
|
+
* Max value is 1000 and min value is -1000. Values outside of this range will be clamped.
|
|
395
411
|
*/
|
|
396
412
|
zIndex: number;
|
|
397
413
|
/**
|
|
@@ -419,15 +435,6 @@ export interface CoreNodeProps {
|
|
|
419
435
|
*/
|
|
420
436
|
texture: Texture | null;
|
|
421
437
|
|
|
422
|
-
/**
|
|
423
|
-
* [Deprecated]: Prevents the texture from being cleaned up when the Node is removed
|
|
424
|
-
*
|
|
425
|
-
* @remarks
|
|
426
|
-
* Please use the `preventCleanup` property on {@link TextureOptions} instead.
|
|
427
|
-
*
|
|
428
|
-
* @default false
|
|
429
|
-
*/
|
|
430
|
-
preventCleanup: boolean;
|
|
431
438
|
/**
|
|
432
439
|
* Options to associate with the Node's Texture
|
|
433
440
|
*/
|
|
@@ -447,7 +454,7 @@ export interface CoreNodeProps {
|
|
|
447
454
|
* Note: If this is a Text Node, the Shader will be managed by the Node's
|
|
448
455
|
* {@link TextRenderer} and should not be set explicitly.
|
|
449
456
|
*/
|
|
450
|
-
shader:
|
|
457
|
+
shader: CoreShaderNode<any> | null;
|
|
451
458
|
/**
|
|
452
459
|
* Image URL
|
|
453
460
|
*
|
|
@@ -457,7 +464,6 @@ export interface CoreNodeProps {
|
|
|
457
464
|
* settings being defaults)
|
|
458
465
|
*/
|
|
459
466
|
src: string | null;
|
|
460
|
-
zIndexLocked: number;
|
|
461
467
|
/**
|
|
462
468
|
* Scale to render the Node at
|
|
463
469
|
*
|
|
@@ -677,21 +683,6 @@ export interface CoreNodeProps {
|
|
|
677
683
|
* are provided. Only works when createImageBitmap is supported on the browser.
|
|
678
684
|
*/
|
|
679
685
|
srcY?: number;
|
|
680
|
-
/**
|
|
681
|
-
* By enabling Strict bounds the renderer will not process & render child nodes of a node that is out of the visible area
|
|
682
|
-
*
|
|
683
|
-
* @remarks
|
|
684
|
-
* When enabled out of bound nodes, i.e. nodes that are out of the visible area, will
|
|
685
|
-
* **NOT** have their children processed and renderer anymore. This means the children of a out of bound
|
|
686
|
-
* node will not receive update processing such as positioning updates and will not be drawn on screen.
|
|
687
|
-
* As such the rest of the branch of the update tree that sits below this node will not be processed anymore
|
|
688
|
-
*
|
|
689
|
-
* This is a big performance gain but may be disabled in cases where the width of the parent node is
|
|
690
|
-
* unknown and the render must process the child nodes regardless of the viewport status of the parent node
|
|
691
|
-
*
|
|
692
|
-
* @default false
|
|
693
|
-
*/
|
|
694
|
-
strictBounds: boolean;
|
|
695
686
|
/**
|
|
696
687
|
* Mark the node as interactive so we can perform hit tests on it
|
|
697
688
|
* when pointer events are registered.
|
|
@@ -730,12 +721,34 @@ export class CoreNode extends EventEmitter {
|
|
|
730
721
|
readonly children: CoreNode[] = [];
|
|
731
722
|
protected _id: number = getNewId();
|
|
732
723
|
readonly props: CoreNodeProps;
|
|
724
|
+
public readonly isCoreNode = true as const;
|
|
725
|
+
|
|
726
|
+
// WebGL Render Op State
|
|
727
|
+
public renderOpBufferIdx: number = 0;
|
|
728
|
+
public numQuads: number = 0;
|
|
729
|
+
public renderOpTextures: WebGlCtxTexture[] = [];
|
|
730
|
+
|
|
731
|
+
/**
|
|
732
|
+
* Permanent index (in float32 units) into the renderer's quad buffer.
|
|
733
|
+
* -1 means this node has not yet been assigned a slot.
|
|
734
|
+
*/
|
|
735
|
+
public quadBufferIndex: number = -1;
|
|
736
|
+
|
|
737
|
+
/**
|
|
738
|
+
* True when renderCoords, premultiplied colors, or textureCoords changed
|
|
739
|
+
* since the node's quad was last written to the GPU.
|
|
740
|
+
*/
|
|
741
|
+
public isQuadDirty: boolean = true;
|
|
742
|
+
|
|
743
|
+
private hasShaderUpdater = false;
|
|
744
|
+
public hasShaderTimeFn = false;
|
|
745
|
+
private hasColorProps = false;
|
|
746
|
+
public textureLoaded = false;
|
|
733
747
|
|
|
734
748
|
public updateType = UpdateType.All;
|
|
735
749
|
public childUpdateType = UpdateType.None;
|
|
736
750
|
|
|
737
751
|
public globalTransform?: Matrix3d;
|
|
738
|
-
public scaleRotateTransform?: Matrix3d;
|
|
739
752
|
public localTransform?: Matrix3d;
|
|
740
753
|
public sceneGlobalTransform?: Matrix3d;
|
|
741
754
|
public renderCoords?: RenderCoords;
|
|
@@ -750,8 +763,11 @@ export class CoreNode extends EventEmitter {
|
|
|
750
763
|
height: 0,
|
|
751
764
|
valid: false,
|
|
752
765
|
};
|
|
766
|
+
public textureCoords?: TextureCoords;
|
|
767
|
+
public updateShaderUniforms: boolean = false;
|
|
753
768
|
public isRenderable = false;
|
|
754
769
|
public renderState: CoreNodeRenderState = CoreNodeRenderState.Init;
|
|
770
|
+
public isSimple = true;
|
|
755
771
|
|
|
756
772
|
public worldAlpha = 1;
|
|
757
773
|
public premultipliedColorTl = 0;
|
|
@@ -762,123 +778,189 @@ export class CoreNode extends EventEmitter {
|
|
|
762
778
|
public hasRTTupdates = false;
|
|
763
779
|
public parentHasRenderTexture = false;
|
|
764
780
|
public rttParent: CoreNode | null = null;
|
|
781
|
+
/**
|
|
782
|
+
* only used when rtt = true
|
|
783
|
+
*/
|
|
784
|
+
public framebufferDimensions: Dimensions | null = null;
|
|
785
|
+
|
|
786
|
+
/**Autosize properties */
|
|
787
|
+
autosizer: Autosizer | null = null;
|
|
788
|
+
parentAutosizer: Autosizer | null = null;
|
|
765
789
|
|
|
766
790
|
public destroyed = false;
|
|
767
791
|
|
|
768
792
|
constructor(readonly stage: Stage, props: CoreNodeProps) {
|
|
769
793
|
super();
|
|
770
794
|
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
795
|
+
//inital update type
|
|
796
|
+
let initialUpdateType =
|
|
797
|
+
UpdateType.Local | UpdateType.RenderBounds | UpdateType.RenderState;
|
|
798
|
+
|
|
799
|
+
// Fast-path assign only known keys
|
|
800
|
+
const p = (this.props = {
|
|
801
|
+
x: props.x,
|
|
802
|
+
y: props.y,
|
|
803
|
+
w: props.w,
|
|
804
|
+
h: props.h,
|
|
805
|
+
alpha: props.alpha,
|
|
806
|
+
autosize: props.autosize,
|
|
807
|
+
clipping: props.clipping,
|
|
808
|
+
color: props.color,
|
|
809
|
+
colorTop: props.colorTop,
|
|
810
|
+
colorBottom: props.colorBottom,
|
|
811
|
+
colorLeft: props.colorLeft,
|
|
812
|
+
colorRight: props.colorRight,
|
|
813
|
+
colorTl: props.colorTl,
|
|
814
|
+
colorTr: props.colorTr,
|
|
815
|
+
colorBl: props.colorBl,
|
|
816
|
+
colorBr: props.colorBr,
|
|
817
|
+
scaleX: props.scaleX,
|
|
818
|
+
scaleY: props.scaleY,
|
|
819
|
+
rotation: props.rotation,
|
|
820
|
+
pivotX: props.pivotX,
|
|
821
|
+
pivotY: props.pivotY,
|
|
822
|
+
mountX: props.mountX,
|
|
823
|
+
mountY: props.mountY,
|
|
824
|
+
mount: props.mount,
|
|
825
|
+
pivot: props.pivot,
|
|
826
|
+
zIndex: props.zIndex,
|
|
827
|
+
textureOptions: props.textureOptions,
|
|
828
|
+
data: props.data,
|
|
829
|
+
imageType: props.imageType,
|
|
830
|
+
srcX: props.srcX,
|
|
831
|
+
srcY: props.srcY,
|
|
832
|
+
srcWidth: props.srcWidth,
|
|
833
|
+
srcHeight: props.srcHeight,
|
|
834
|
+
parent: props.parent,
|
|
774
835
|
texture: null,
|
|
836
|
+
shader: null,
|
|
775
837
|
src: null,
|
|
776
838
|
rtt: false,
|
|
777
|
-
|
|
839
|
+
boundsMargin: null,
|
|
840
|
+
scale: null,
|
|
841
|
+
interactive: props.interactive,
|
|
842
|
+
});
|
|
843
|
+
|
|
844
|
+
//check if any color props are set for premultiplied color updates
|
|
845
|
+
if (
|
|
846
|
+
p.color > 0 ||
|
|
847
|
+
p.colorTop > 0 ||
|
|
848
|
+
p.colorBottom > 0 ||
|
|
849
|
+
p.colorLeft > 0 ||
|
|
850
|
+
p.colorRight > 0 ||
|
|
851
|
+
p.colorTl > 0 ||
|
|
852
|
+
p.colorTr > 0 ||
|
|
853
|
+
p.colorBl > 0 ||
|
|
854
|
+
p.colorBr > 0
|
|
855
|
+
) {
|
|
856
|
+
this.hasColorProps = true;
|
|
857
|
+
initialUpdateType |= UpdateType.PremultipliedColors;
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
// Only set non-default values
|
|
861
|
+
if (p.zIndex !== 0) {
|
|
862
|
+
this.zIndex = p.zIndex;
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
if (props.parent !== null) {
|
|
866
|
+
props.parent.addChild(this);
|
|
867
|
+
}
|
|
778
868
|
|
|
779
|
-
// Assign props to
|
|
780
|
-
this.parent = props.parent;
|
|
869
|
+
// Assign props to instances
|
|
781
870
|
this.texture = props.texture;
|
|
871
|
+
this.shader = props.shader;
|
|
782
872
|
this.src = props.src;
|
|
783
873
|
this.rtt = props.rtt;
|
|
874
|
+
this.boundsMargin = props.boundsMargin;
|
|
784
875
|
this.interactive = props.interactive;
|
|
785
876
|
|
|
786
|
-
if
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
: [
|
|
790
|
-
props.boundsMargin,
|
|
791
|
-
props.boundsMargin,
|
|
792
|
-
props.boundsMargin,
|
|
793
|
-
props.boundsMargin,
|
|
794
|
-
];
|
|
877
|
+
// Initialize autosize if enabled
|
|
878
|
+
if (p.autosize === true) {
|
|
879
|
+
this.autosizer = new Autosizer(this);
|
|
795
880
|
}
|
|
796
881
|
|
|
797
|
-
this.setUpdateType(
|
|
798
|
-
UpdateType.ScaleRotate |
|
|
799
|
-
UpdateType.Local |
|
|
800
|
-
UpdateType.RenderBounds |
|
|
801
|
-
UpdateType.RenderState,
|
|
802
|
-
);
|
|
803
|
-
|
|
804
|
-
if (isProductionEnvironment() === false && props.preventCleanup === true) {
|
|
805
|
-
console.warn(
|
|
806
|
-
'CoreNode.preventCleanup: Is deprecated and will be removed in upcoming release, please use textureOptions.preventCleanup instead',
|
|
807
|
-
);
|
|
808
|
-
}
|
|
882
|
+
this.setUpdateType(initialUpdateType);
|
|
809
883
|
|
|
810
884
|
// if the default texture isn't loaded yet, wait for it to load
|
|
811
885
|
// this only happens when the node is created before the stage is ready
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
) {
|
|
816
|
-
this.stage.defaultTexture.once('loaded', () => {
|
|
817
|
-
this.setUpdateType(UpdateType.IsRenderable);
|
|
818
|
-
});
|
|
886
|
+
const dt = this.stage.defaultTexture;
|
|
887
|
+
if (dt !== null && dt.state !== 'loaded') {
|
|
888
|
+
dt.once('loaded', () => this.setUpdateType(UpdateType.IsRenderable));
|
|
819
889
|
}
|
|
890
|
+
this.updateIsSimple();
|
|
820
891
|
}
|
|
821
892
|
|
|
822
893
|
//#region Textures
|
|
823
894
|
loadTexture(): void {
|
|
824
|
-
|
|
825
|
-
|
|
895
|
+
if (this.props.texture === null) {
|
|
896
|
+
return;
|
|
897
|
+
}
|
|
826
898
|
|
|
827
899
|
// If texture is already loaded / failed, trigger loaded event manually
|
|
828
900
|
// so that users get a consistent event experience.
|
|
829
901
|
// We do this in a microtask to allow listeners to be attached in the same
|
|
830
902
|
// synchronous task after calling loadTexture()
|
|
831
|
-
queueMicrotask(
|
|
832
|
-
|
|
833
|
-
this.stage.txManager.loadTexture(texture);
|
|
834
|
-
}
|
|
903
|
+
queueMicrotask(this.loadTextureTask);
|
|
904
|
+
}
|
|
835
905
|
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
906
|
+
/**
|
|
907
|
+
* Task for queueMicrotask to loadTexture
|
|
908
|
+
*
|
|
909
|
+
* @remarks
|
|
910
|
+
* This method is called in a microtask to release the texture.
|
|
911
|
+
*/
|
|
912
|
+
private loadTextureTask = (): void => {
|
|
913
|
+
const texture = this.props.texture as Texture;
|
|
914
|
+
//it is possible that texture is null here if user sets the texture to null right after loadTexture call
|
|
915
|
+
if (texture === null) {
|
|
916
|
+
return;
|
|
917
|
+
}
|
|
918
|
+
if (this.textureOptions.preload === true) {
|
|
919
|
+
this.stage.txManager.loadTexture(texture);
|
|
920
|
+
}
|
|
851
921
|
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
922
|
+
texture.preventCleanup = this.props.textureOptions?.preventCleanup ?? false;
|
|
923
|
+
texture.on('loaded', this.onTextureLoaded);
|
|
924
|
+
texture.on('failed', this.onTextureFailed);
|
|
925
|
+
texture.on('freed', this.onTextureFreed);
|
|
926
|
+
|
|
927
|
+
// If the parent is a render texture, the initial texture status
|
|
928
|
+
// will be set to freed until the texture is processed by the
|
|
929
|
+
// Render RTT nodes. So we only need to listen fo changes and
|
|
930
|
+
// no need to check the texture.state until we restructure how
|
|
931
|
+
// textures are being processed.
|
|
932
|
+
if (this.parentHasRenderTexture) {
|
|
933
|
+
this.notifyParentRTTOfUpdate();
|
|
934
|
+
return;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
if (texture.state === 'loaded') {
|
|
938
|
+
this.onTextureLoaded(texture, texture.dimensions!);
|
|
939
|
+
} else if (texture.state === 'failed') {
|
|
940
|
+
this.onTextureFailed(texture, texture.error!);
|
|
941
|
+
} else if (texture.state === 'freed') {
|
|
942
|
+
this.onTextureFreed(texture);
|
|
943
|
+
}
|
|
944
|
+
};
|
|
863
945
|
|
|
864
946
|
unloadTexture(): void {
|
|
865
|
-
if (this.texture
|
|
866
|
-
|
|
867
|
-
this.texture.off('failed', this.onTextureFailed);
|
|
868
|
-
this.texture.off('freed', this.onTextureFreed);
|
|
869
|
-
this.texture.setRenderableOwner(this, false);
|
|
947
|
+
if (this.texture === null) {
|
|
948
|
+
return;
|
|
870
949
|
}
|
|
950
|
+
|
|
951
|
+
const texture = this.texture;
|
|
952
|
+
texture.off('loaded', this.onTextureLoaded);
|
|
953
|
+
texture.off('failed', this.onTextureFailed);
|
|
954
|
+
texture.off('freed', this.onTextureFreed);
|
|
955
|
+
texture.setRenderableOwner(this._id, false);
|
|
871
956
|
}
|
|
872
957
|
|
|
873
|
-
|
|
874
|
-
if (this.
|
|
875
|
-
this.
|
|
876
|
-
this.height = dimensions.height;
|
|
958
|
+
protected onTextureLoaded: TextureLoadedEventHandler = (_, dimensions) => {
|
|
959
|
+
if (this.autosizer !== null) {
|
|
960
|
+
this.autosizer.update();
|
|
877
961
|
}
|
|
878
|
-
}
|
|
879
962
|
|
|
880
|
-
|
|
881
|
-
this.autosizeNode(dimensions);
|
|
963
|
+
this.textureLoaded = true;
|
|
882
964
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
883
965
|
|
|
884
966
|
// Texture was loaded. In case the RAF loop has already stopped, we request
|
|
@@ -891,13 +973,20 @@ export class CoreNode extends EventEmitter {
|
|
|
891
973
|
}
|
|
892
974
|
|
|
893
975
|
// ignore 1x1 pixel textures
|
|
894
|
-
if (dimensions.
|
|
976
|
+
if (dimensions.w > 1 && dimensions.h > 1) {
|
|
895
977
|
this.emit('loaded', {
|
|
896
978
|
type: 'texture',
|
|
897
979
|
dimensions,
|
|
898
980
|
} satisfies NodeTextureLoadedPayload);
|
|
899
981
|
}
|
|
900
982
|
|
|
983
|
+
if (
|
|
984
|
+
this.stage.calculateTextureCoord === true &&
|
|
985
|
+
this.props.textureOptions !== null
|
|
986
|
+
) {
|
|
987
|
+
this.textureCoords = this.stage.renderer.getTextureCoords!(this);
|
|
988
|
+
}
|
|
989
|
+
|
|
901
990
|
// Trigger a local update if the texture is loaded and the resizeMode is 'contain'
|
|
902
991
|
if (this.props.textureOptions?.resizeMode?.type === 'contain') {
|
|
903
992
|
this.setUpdateType(UpdateType.Local);
|
|
@@ -907,7 +996,9 @@ export class CoreNode extends EventEmitter {
|
|
|
907
996
|
private onTextureFailed: TextureFailedEventHandler = (_, error) => {
|
|
908
997
|
// immediately set isRenderable to false, so that we handle the error
|
|
909
998
|
// without waiting for the next frame loop
|
|
999
|
+
this.textureLoaded = false;
|
|
910
1000
|
this.isRenderable = false;
|
|
1001
|
+
this.updateTextureOwnership(false);
|
|
911
1002
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
912
1003
|
|
|
913
1004
|
// If parent has a render texture, flag that we need to update
|
|
@@ -915,16 +1006,23 @@ export class CoreNode extends EventEmitter {
|
|
|
915
1006
|
this.notifyParentRTTOfUpdate();
|
|
916
1007
|
}
|
|
917
1008
|
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
1009
|
+
if (
|
|
1010
|
+
this.texture !== null &&
|
|
1011
|
+
this.texture.retryCount > this.texture.maxRetryCount
|
|
1012
|
+
) {
|
|
1013
|
+
this.emit('failed', {
|
|
1014
|
+
type: 'texture',
|
|
1015
|
+
error,
|
|
1016
|
+
} satisfies NodeTextureFailedPayload);
|
|
1017
|
+
}
|
|
922
1018
|
};
|
|
923
1019
|
|
|
924
1020
|
private onTextureFreed: TextureFreedEventHandler = () => {
|
|
925
1021
|
// immediately set isRenderable to false, so that we handle the error
|
|
926
1022
|
// without waiting for the next frame loop
|
|
1023
|
+
this.textureLoaded = false;
|
|
927
1024
|
this.isRenderable = false;
|
|
1025
|
+
this.updateTextureOwnership(false);
|
|
928
1026
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
929
1027
|
|
|
930
1028
|
// If parent has a render texture, flag that we need to update
|
|
@@ -950,48 +1048,38 @@ export class CoreNode extends EventEmitter {
|
|
|
950
1048
|
this.updateType |= type;
|
|
951
1049
|
|
|
952
1050
|
const parent = this.props.parent;
|
|
953
|
-
if (!parent) return;
|
|
1051
|
+
if (!parent || parent.updateType & UpdateType.Children) return;
|
|
954
1052
|
|
|
955
|
-
|
|
956
|
-
// Inform the parent if it doesn’t already have a child update
|
|
957
|
-
parent.setUpdateType(UpdateType.Children);
|
|
958
|
-
}
|
|
959
|
-
}
|
|
960
|
-
|
|
961
|
-
sortChildren() {
|
|
962
|
-
this.children.sort((a, b) => a.calcZIndex - b.calcZIndex);
|
|
1053
|
+
parent.setUpdateType(UpdateType.Children);
|
|
963
1054
|
}
|
|
964
1055
|
|
|
965
|
-
|
|
966
|
-
const
|
|
1056
|
+
updateLocalTransform() {
|
|
1057
|
+
const p = this.props;
|
|
1058
|
+
const { x, y } = p;
|
|
967
1059
|
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
this.scaleRotateTransform = undefined;
|
|
1060
|
+
if (this.isSimple) {
|
|
1061
|
+
this.localTransform = Matrix3d.translate(x, y, this.localTransform);
|
|
971
1062
|
return;
|
|
972
1063
|
}
|
|
973
1064
|
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
).scale(scaleX, scaleY);
|
|
978
|
-
}
|
|
979
|
-
|
|
980
|
-
updateLocalTransform() {
|
|
981
|
-
const { x, y, width, height } = this.props;
|
|
982
|
-
const mountTranslateX = this.props.mountX * width;
|
|
983
|
-
const mountTranslateY = this.props.mountY * height;
|
|
1065
|
+
const { w, h } = p;
|
|
1066
|
+
const mountTranslateX = p.mountX * w;
|
|
1067
|
+
const mountTranslateY = p.mountY * h;
|
|
984
1068
|
|
|
985
|
-
if (
|
|
986
|
-
const
|
|
987
|
-
|
|
1069
|
+
if (p.rotation !== 0 || p.scaleX !== 1 || p.scaleY !== 1) {
|
|
1070
|
+
const scaleRotate = Matrix3d.rotate(p.rotation, Matrix3d.temp).scale(
|
|
1071
|
+
p.scaleX,
|
|
1072
|
+
p.scaleY,
|
|
1073
|
+
);
|
|
1074
|
+
const pivotTranslateX = p.pivotX * w;
|
|
1075
|
+
const pivotTranslateY = p.pivotY * h;
|
|
988
1076
|
|
|
989
1077
|
this.localTransform = Matrix3d.translate(
|
|
990
1078
|
x - mountTranslateX + pivotTranslateX,
|
|
991
1079
|
y - mountTranslateY + pivotTranslateY,
|
|
992
1080
|
this.localTransform,
|
|
993
1081
|
)
|
|
994
|
-
.multiply(
|
|
1082
|
+
.multiply(scaleRotate)
|
|
995
1083
|
.translate(-pivotTranslateX, -pivotTranslateY);
|
|
996
1084
|
} else {
|
|
997
1085
|
this.localTransform = Matrix3d.translate(
|
|
@@ -1002,35 +1090,35 @@ export class CoreNode extends EventEmitter {
|
|
|
1002
1090
|
}
|
|
1003
1091
|
|
|
1004
1092
|
// Handle 'contain' resize mode
|
|
1005
|
-
const texture =
|
|
1093
|
+
const texture = p.texture;
|
|
1006
1094
|
if (
|
|
1007
1095
|
texture &&
|
|
1008
1096
|
texture.dimensions &&
|
|
1009
|
-
|
|
1097
|
+
p.textureOptions.resizeMode?.type === 'contain'
|
|
1010
1098
|
) {
|
|
1011
1099
|
let resizeModeScaleX = 1;
|
|
1012
1100
|
let resizeModeScaleY = 1;
|
|
1013
1101
|
let extraX = 0;
|
|
1014
1102
|
let extraY = 0;
|
|
1015
|
-
const {
|
|
1103
|
+
const { w: tw, h: th } = texture.dimensions;
|
|
1016
1104
|
const txAspectRatio = tw / th;
|
|
1017
|
-
const nodeAspectRatio =
|
|
1105
|
+
const nodeAspectRatio = w / h;
|
|
1018
1106
|
if (txAspectRatio > nodeAspectRatio) {
|
|
1019
1107
|
// Texture is wider than node
|
|
1020
1108
|
// Center the node vertically (shift down by extraY)
|
|
1021
1109
|
// Scale the node vertically to maintain original aspect ratio
|
|
1022
|
-
const scaleX =
|
|
1110
|
+
const scaleX = w / tw;
|
|
1023
1111
|
const scaledTxHeight = th * scaleX;
|
|
1024
|
-
extraY = (
|
|
1025
|
-
resizeModeScaleY = scaledTxHeight /
|
|
1112
|
+
extraY = (h - scaledTxHeight) / 2;
|
|
1113
|
+
resizeModeScaleY = scaledTxHeight / h;
|
|
1026
1114
|
} else {
|
|
1027
1115
|
// Texture is taller than node (or equal)
|
|
1028
1116
|
// Center the node horizontally (shift right by extraX)
|
|
1029
1117
|
// Scale the node horizontally to maintain original aspect ratio
|
|
1030
|
-
const scaleY =
|
|
1118
|
+
const scaleY = h / th;
|
|
1031
1119
|
const scaledTxWidth = tw * scaleY;
|
|
1032
|
-
extraX = (
|
|
1033
|
-
resizeModeScaleX = scaledTxWidth /
|
|
1120
|
+
extraX = (w - scaledTxWidth) / 2;
|
|
1121
|
+
resizeModeScaleX = scaledTxWidth / w;
|
|
1034
1122
|
}
|
|
1035
1123
|
|
|
1036
1124
|
// Apply the extra translation and scale to the local transform
|
|
@@ -1038,8 +1126,17 @@ export class CoreNode extends EventEmitter {
|
|
|
1038
1126
|
.translate(extraX, extraY)
|
|
1039
1127
|
.scale(resizeModeScaleX, resizeModeScaleY);
|
|
1040
1128
|
}
|
|
1129
|
+
}
|
|
1041
1130
|
|
|
1042
|
-
|
|
1131
|
+
updateIsSimple() {
|
|
1132
|
+
const p = this.props;
|
|
1133
|
+
this.isSimple =
|
|
1134
|
+
p.rotation === 0 &&
|
|
1135
|
+
p.scaleX === 1 &&
|
|
1136
|
+
p.scaleY === 1 &&
|
|
1137
|
+
p.mountX === 0 &&
|
|
1138
|
+
p.mountY === 0 &&
|
|
1139
|
+
!(p.texture && p.textureOptions.resizeMode?.type === 'contain');
|
|
1043
1140
|
}
|
|
1044
1141
|
|
|
1045
1142
|
/**
|
|
@@ -1047,205 +1144,235 @@ export class CoreNode extends EventEmitter {
|
|
|
1047
1144
|
* @param delta
|
|
1048
1145
|
*/
|
|
1049
1146
|
update(delta: number, parentClippingRect: RectWithValid): void {
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1147
|
+
const props = this.props;
|
|
1148
|
+
//parent can be forced to ! because the root node update loop uses updateRoot which implies that
|
|
1149
|
+
//all other loops using this update method have a parent
|
|
1150
|
+
const parent = props.parent!;
|
|
1151
|
+
const parentHasRenderTexture = this.parentHasRenderTexture;
|
|
1152
|
+
let newRenderState: CoreNodeRenderState | null = null;
|
|
1153
|
+
let updateType = this.updateType;
|
|
1154
|
+
let childUpdateType = this.childUpdateType;
|
|
1155
|
+
|
|
1156
|
+
//this needs to be handled before setting updateTypes are reset
|
|
1157
|
+
if (
|
|
1158
|
+
ENABLE_AUTOSIZE &&
|
|
1159
|
+
updateType & UpdateType.Autosize &&
|
|
1160
|
+
this.autosizer !== null
|
|
1161
|
+
) {
|
|
1162
|
+
this.autosizer.update();
|
|
1053
1163
|
}
|
|
1054
1164
|
|
|
1055
|
-
|
|
1165
|
+
// reset update type
|
|
1166
|
+
this.updateType = 0;
|
|
1167
|
+
this.childUpdateType = 0;
|
|
1168
|
+
|
|
1169
|
+
if (updateType & UpdateType.Local) {
|
|
1056
1170
|
this.updateLocalTransform();
|
|
1057
|
-
this.setUpdateType(UpdateType.Global);
|
|
1058
|
-
}
|
|
1059
1171
|
|
|
1060
|
-
|
|
1061
|
-
|
|
1172
|
+
updateType |= UpdateType.Global;
|
|
1173
|
+
}
|
|
1062
1174
|
|
|
1063
1175
|
// Handle specific RTT updates at this node level
|
|
1064
|
-
if (
|
|
1176
|
+
if (USE_RTT && updateType & UpdateType.RenderTexture && this.rtt === true) {
|
|
1065
1177
|
this.hasRTTupdates = true;
|
|
1066
1178
|
}
|
|
1067
1179
|
|
|
1068
|
-
if (
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1180
|
+
if (updateType & UpdateType.Global) {
|
|
1181
|
+
if (
|
|
1182
|
+
USE_RTT &&
|
|
1183
|
+
this.parentHasRenderTexture === true &&
|
|
1184
|
+
parent.rtt === true
|
|
1185
|
+
) {
|
|
1072
1186
|
// we are at the start of the RTT chain, so we need to reset the globalTransform
|
|
1073
1187
|
// for correct RTT rendering
|
|
1074
|
-
this.globalTransform = Matrix3d.identity();
|
|
1188
|
+
this.globalTransform = Matrix3d.identity(this.globalTransform);
|
|
1075
1189
|
|
|
1076
1190
|
// Maintain a full scene global transform for bounds detection
|
|
1191
|
+
const parentTransform =
|
|
1192
|
+
parent.globalTransform || Matrix3d.identity(Matrix3d.temp);
|
|
1193
|
+
|
|
1077
1194
|
this.sceneGlobalTransform = Matrix3d.copy(
|
|
1078
|
-
|
|
1079
|
-
|
|
1195
|
+
parentTransform,
|
|
1196
|
+
this.sceneGlobalTransform,
|
|
1197
|
+
).translateOrMultiply(this.localTransform!);
|
|
1080
1198
|
} else if (
|
|
1199
|
+
USE_RTT &&
|
|
1081
1200
|
this.parentHasRenderTexture === true &&
|
|
1082
|
-
parent
|
|
1201
|
+
parent.rtt === false
|
|
1083
1202
|
) {
|
|
1084
1203
|
// we're part of an RTT chain but our parent is not the main RTT node
|
|
1085
1204
|
// so we need to propogate the sceneGlobalTransform of the parent
|
|
1086
1205
|
// to maintain a full scene global transform for bounds detection
|
|
1206
|
+
const parentSceneTransform =
|
|
1207
|
+
parent.sceneGlobalTransform || this.localTransform!;
|
|
1208
|
+
|
|
1087
1209
|
this.sceneGlobalTransform = Matrix3d.copy(
|
|
1088
|
-
|
|
1089
|
-
|
|
1210
|
+
parentSceneTransform,
|
|
1211
|
+
this.sceneGlobalTransform,
|
|
1212
|
+
).translateOrMultiply(this.localTransform!);
|
|
1090
1213
|
|
|
1091
1214
|
this.globalTransform = Matrix3d.copy(
|
|
1092
|
-
parent
|
|
1215
|
+
parent.globalTransform || this.localTransform!,
|
|
1093
1216
|
this.globalTransform,
|
|
1094
1217
|
);
|
|
1095
1218
|
} else {
|
|
1096
1219
|
this.globalTransform = Matrix3d.copy(
|
|
1097
|
-
parent
|
|
1220
|
+
parent.globalTransform || this.localTransform!,
|
|
1098
1221
|
this.globalTransform,
|
|
1099
1222
|
);
|
|
1100
1223
|
}
|
|
1101
1224
|
|
|
1102
|
-
if (
|
|
1103
|
-
this.globalTransform.
|
|
1225
|
+
if (this.isSimple) {
|
|
1226
|
+
this.globalTransform.translate(
|
|
1227
|
+
this.localTransform!.tx,
|
|
1228
|
+
this.localTransform!.ty,
|
|
1229
|
+
);
|
|
1230
|
+
} else {
|
|
1231
|
+
this.globalTransform.translateOrMultiply(this.localTransform!);
|
|
1104
1232
|
}
|
|
1105
1233
|
this.calculateRenderCoords();
|
|
1106
1234
|
this.updateBoundingRect();
|
|
1107
1235
|
|
|
1108
|
-
|
|
1109
|
-
|
|
1236
|
+
updateType |= UpdateType.RenderState | UpdateType.RecalcUniforms;
|
|
1237
|
+
|
|
1238
|
+
//only propagate children updates if not autosizing
|
|
1239
|
+
if ((updateType & UpdateType.Autosize) === 0) {
|
|
1240
|
+
updateType |= UpdateType.Children;
|
|
1241
|
+
childUpdateType |= UpdateType.Global;
|
|
1242
|
+
}
|
|
1110
1243
|
|
|
1111
1244
|
if (this.clipping === true) {
|
|
1112
|
-
|
|
1113
|
-
|
|
1245
|
+
updateType |= UpdateType.Clipping | UpdateType.RenderBounds;
|
|
1246
|
+
childUpdateType |= UpdateType.RenderBounds;
|
|
1114
1247
|
}
|
|
1115
1248
|
}
|
|
1116
1249
|
|
|
1117
|
-
if (
|
|
1250
|
+
if (updateType & UpdateType.RenderBounds) {
|
|
1118
1251
|
this.createRenderBounds();
|
|
1119
|
-
this.setUpdateType(UpdateType.RenderState);
|
|
1120
|
-
this.setUpdateType(UpdateType.Children);
|
|
1121
1252
|
|
|
1122
|
-
|
|
1253
|
+
updateType |= UpdateType.RenderState | UpdateType.Children;
|
|
1254
|
+
childUpdateType |= UpdateType.RenderBounds;
|
|
1123
1255
|
}
|
|
1124
1256
|
|
|
1125
|
-
if (
|
|
1126
|
-
|
|
1127
|
-
|
|
1257
|
+
if (updateType & UpdateType.RenderState) {
|
|
1258
|
+
newRenderState = this.checkRenderBounds();
|
|
1259
|
+
updateType |= UpdateType.IsRenderable;
|
|
1128
1260
|
|
|
1129
1261
|
// if we're not going out of bounds, update the render state
|
|
1130
1262
|
// this is done so the update loop can finish before we mark a node
|
|
1131
1263
|
// as out of bounds
|
|
1132
|
-
if (
|
|
1133
|
-
this.updateRenderState(
|
|
1264
|
+
if (newRenderState !== CoreNodeRenderState.OutOfBounds) {
|
|
1265
|
+
this.updateRenderState(newRenderState);
|
|
1134
1266
|
}
|
|
1135
1267
|
}
|
|
1136
1268
|
|
|
1137
|
-
if (
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
this.worldAlpha = this.props.alpha;
|
|
1142
|
-
}
|
|
1143
|
-
this.setUpdateType(
|
|
1269
|
+
if (updateType & UpdateType.WorldAlpha) {
|
|
1270
|
+
this.worldAlpha = parent.worldAlpha * this.props.alpha;
|
|
1271
|
+
updateType |=
|
|
1272
|
+
UpdateType.PremultipliedColors |
|
|
1144
1273
|
UpdateType.Children |
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
);
|
|
1148
|
-
this.childUpdateType |= UpdateType.WorldAlpha;
|
|
1274
|
+
UpdateType.IsRenderable;
|
|
1275
|
+
childUpdateType |= UpdateType.WorldAlpha;
|
|
1149
1276
|
}
|
|
1150
1277
|
|
|
1151
|
-
if (
|
|
1278
|
+
if (updateType & UpdateType.IsRenderable) {
|
|
1152
1279
|
this.updateIsRenderable();
|
|
1153
1280
|
}
|
|
1154
1281
|
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1282
|
+
// Handle autosize updates when children transforms change
|
|
1283
|
+
if (
|
|
1284
|
+
ENABLE_AUTOSIZE &&
|
|
1285
|
+
updateType & UpdateType.Global &&
|
|
1286
|
+
this.isRenderable === true &&
|
|
1287
|
+
this.parentAutosizer !== null
|
|
1288
|
+
) {
|
|
1289
|
+
this.parentAutosizer.patch(this.id);
|
|
1290
|
+
}
|
|
1158
1291
|
|
|
1159
|
-
|
|
1160
|
-
this.
|
|
1292
|
+
if (updateType & UpdateType.Clipping) {
|
|
1293
|
+
this.calculateClippingRect(parentClippingRect);
|
|
1294
|
+
updateType |= UpdateType.Children;
|
|
1295
|
+
childUpdateType |= UpdateType.Clipping | UpdateType.RenderBounds;
|
|
1161
1296
|
}
|
|
1162
1297
|
|
|
1163
|
-
if (
|
|
1164
|
-
|
|
1165
|
-
this.props.colorTl,
|
|
1166
|
-
this.worldAlpha,
|
|
1167
|
-
true,
|
|
1168
|
-
);
|
|
1298
|
+
if (updateType & UpdateType.PremultipliedColors) {
|
|
1299
|
+
const alpha = this.worldAlpha;
|
|
1169
1300
|
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
)
|
|
1301
|
+
const tl = props.colorTl;
|
|
1302
|
+
const tr = props.colorTr;
|
|
1303
|
+
const bl = props.colorBl;
|
|
1304
|
+
const br = props.colorBr;
|
|
1305
|
+
|
|
1306
|
+
// Fast equality check (covers all 4 corners)
|
|
1307
|
+
const same = tl === tr && tl === bl && tl === br;
|
|
1308
|
+
|
|
1309
|
+
const merged = premultiplyColorABGR(tl, alpha);
|
|
1310
|
+
|
|
1311
|
+
this.premultipliedColorTl = merged;
|
|
1312
|
+
|
|
1313
|
+
if (same === true) {
|
|
1176
1314
|
this.premultipliedColorTr =
|
|
1177
1315
|
this.premultipliedColorBl =
|
|
1178
1316
|
this.premultipliedColorBr =
|
|
1179
|
-
|
|
1317
|
+
merged;
|
|
1180
1318
|
} else {
|
|
1181
|
-
this.premultipliedColorTr =
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
true,
|
|
1185
|
-
);
|
|
1186
|
-
this.premultipliedColorBl = mergeColorAlphaPremultiplied(
|
|
1187
|
-
this.props.colorBl,
|
|
1188
|
-
this.worldAlpha,
|
|
1189
|
-
true,
|
|
1190
|
-
);
|
|
1191
|
-
this.premultipliedColorBr = mergeColorAlphaPremultiplied(
|
|
1192
|
-
this.props.colorBr,
|
|
1193
|
-
this.worldAlpha,
|
|
1194
|
-
true,
|
|
1195
|
-
);
|
|
1319
|
+
this.premultipliedColorTr = premultiplyColorABGR(tr, alpha);
|
|
1320
|
+
this.premultipliedColorBl = premultiplyColorABGR(bl, alpha);
|
|
1321
|
+
this.premultipliedColorBr = premultiplyColorABGR(br, alpha);
|
|
1196
1322
|
}
|
|
1197
1323
|
}
|
|
1198
1324
|
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
this.
|
|
1202
|
-
|
|
1203
|
-
|
|
1325
|
+
if (this.renderState === CoreNodeRenderState.OutOfBounds) {
|
|
1326
|
+
// Delay updating children until the node is in bounds
|
|
1327
|
+
this.updateType = updateType;
|
|
1328
|
+
this.childUpdateType = childUpdateType;
|
|
1329
|
+
return;
|
|
1204
1330
|
}
|
|
1205
1331
|
|
|
1206
1332
|
if (
|
|
1207
|
-
|
|
1208
|
-
this.
|
|
1333
|
+
updateType & UpdateType.RecalcUniforms &&
|
|
1334
|
+
this.hasShaderUpdater === true
|
|
1209
1335
|
) {
|
|
1210
|
-
this.
|
|
1211
|
-
return;
|
|
1336
|
+
this.updateShaderUniforms = true;
|
|
1212
1337
|
}
|
|
1213
1338
|
|
|
1214
|
-
if (this.
|
|
1339
|
+
if (this.isRenderable === true && this.updateShaderUniforms === true) {
|
|
1340
|
+
this.updateShaderUniforms = false;
|
|
1341
|
+
//this exists because the boolean hasShaderUpdater === true
|
|
1342
|
+
this.shader!.update!();
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
if (updateType & UpdateType.Children && this.children.length > 0) {
|
|
1346
|
+
let childClippingRect = this.clippingRect;
|
|
1347
|
+
|
|
1348
|
+
if (USE_RTT && this.rtt === true) {
|
|
1349
|
+
childClippingRect = NO_CLIPPING_RECT;
|
|
1350
|
+
}
|
|
1351
|
+
|
|
1215
1352
|
for (let i = 0, length = this.children.length; i < length; i++) {
|
|
1216
1353
|
const child = this.children[i] as CoreNode;
|
|
1217
1354
|
|
|
1218
|
-
|
|
1355
|
+
if (childUpdateType !== 0) {
|
|
1356
|
+
child.setUpdateType(childUpdateType);
|
|
1357
|
+
}
|
|
1219
1358
|
|
|
1220
1359
|
if (child.updateType === 0) {
|
|
1221
1360
|
continue;
|
|
1222
1361
|
}
|
|
1223
1362
|
|
|
1224
|
-
let childClippingRect = this.clippingRect;
|
|
1225
|
-
if (this.rtt === true) {
|
|
1226
|
-
childClippingRect = {
|
|
1227
|
-
x: 0,
|
|
1228
|
-
y: 0,
|
|
1229
|
-
width: 0,
|
|
1230
|
-
height: 0,
|
|
1231
|
-
valid: false,
|
|
1232
|
-
};
|
|
1233
|
-
}
|
|
1234
|
-
|
|
1235
1363
|
child.update(delta, childClippingRect);
|
|
1236
1364
|
}
|
|
1237
1365
|
}
|
|
1238
1366
|
|
|
1239
1367
|
// If the node has an RTT parent and requires a texture re-render, inform the RTT parent
|
|
1240
|
-
// if (this.parentHasRenderTexture &&
|
|
1368
|
+
// if (this.parentHasRenderTexture && updateType & UpdateType.RenderTexture) {
|
|
1241
1369
|
// @TODO have a more scoped down updateType for RTT updates
|
|
1242
|
-
if (
|
|
1370
|
+
if (USE_RTT === true && parentHasRenderTexture === true) {
|
|
1243
1371
|
this.notifyParentRTTOfUpdate();
|
|
1244
1372
|
}
|
|
1245
1373
|
|
|
1246
|
-
//
|
|
1247
|
-
|
|
1248
|
-
if (this.updateType & UpdateType.ZIndexSortedChildren) {
|
|
1374
|
+
//Resort children if needed
|
|
1375
|
+
if (updateType & UpdateType.SortZIndexChildren) {
|
|
1249
1376
|
// reorder z-index
|
|
1250
1377
|
this.sortChildren();
|
|
1251
1378
|
}
|
|
@@ -1253,24 +1380,31 @@ export class CoreNode extends EventEmitter {
|
|
|
1253
1380
|
// If we're out of bounds, apply the render state now
|
|
1254
1381
|
// this is done so nodes can finish their entire update loop before
|
|
1255
1382
|
// being marked as out of bounds
|
|
1256
|
-
if (
|
|
1257
|
-
this.updateRenderState(
|
|
1383
|
+
if (newRenderState === CoreNodeRenderState.OutOfBounds) {
|
|
1384
|
+
this.updateRenderState(newRenderState);
|
|
1258
1385
|
this.updateIsRenderable();
|
|
1259
1386
|
|
|
1260
1387
|
if (
|
|
1388
|
+
USE_RTT === true &&
|
|
1261
1389
|
this.rtt === true &&
|
|
1262
|
-
|
|
1390
|
+
newRenderState === CoreNodeRenderState.OutOfBounds
|
|
1263
1391
|
) {
|
|
1264
1392
|
// notify children that we are going out of bounds
|
|
1265
1393
|
// we have to do this now before we stop processing the render tree
|
|
1266
|
-
this.notifyChildrenRTTOfUpdate(
|
|
1267
|
-
// this.childUpdateType |= UpdateType.RenderState;
|
|
1394
|
+
this.notifyChildrenRTTOfUpdate(newRenderState);
|
|
1268
1395
|
}
|
|
1269
1396
|
}
|
|
1270
1397
|
|
|
1271
|
-
//
|
|
1272
|
-
|
|
1273
|
-
|
|
1398
|
+
// Mark quad dirty only when visual data (transforms, colors) actually
|
|
1399
|
+
// changed, so the WebGL renderer only re-uploads modified slots.
|
|
1400
|
+
if (
|
|
1401
|
+
updateType &
|
|
1402
|
+
(UpdateType.Global |
|
|
1403
|
+
UpdateType.PremultipliedColors |
|
|
1404
|
+
UpdateType.WorldAlpha)
|
|
1405
|
+
) {
|
|
1406
|
+
this.isQuadDirty = true;
|
|
1407
|
+
}
|
|
1274
1408
|
}
|
|
1275
1409
|
|
|
1276
1410
|
private findParentRTTNode(): CoreNode | null {
|
|
@@ -1281,15 +1415,6 @@ export class CoreNode extends EventEmitter {
|
|
|
1281
1415
|
return rttNode;
|
|
1282
1416
|
}
|
|
1283
1417
|
|
|
1284
|
-
private getRTTParentRenderState(): CoreNodeRenderState | null {
|
|
1285
|
-
const rttNode = this.rttParent || this.findParentRTTNode();
|
|
1286
|
-
if (!rttNode) {
|
|
1287
|
-
return null;
|
|
1288
|
-
}
|
|
1289
|
-
|
|
1290
|
-
return rttNode.renderState;
|
|
1291
|
-
}
|
|
1292
|
-
|
|
1293
1418
|
private notifyChildrenRTTOfUpdate(renderState: CoreNodeRenderState) {
|
|
1294
1419
|
for (const child of this.children) {
|
|
1295
1420
|
// force child to update render state
|
|
@@ -1299,7 +1424,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1299
1424
|
}
|
|
1300
1425
|
}
|
|
1301
1426
|
|
|
1302
|
-
|
|
1427
|
+
protected notifyParentRTTOfUpdate() {
|
|
1303
1428
|
if (this.parent === null) {
|
|
1304
1429
|
return;
|
|
1305
1430
|
}
|
|
@@ -1320,28 +1445,21 @@ export class CoreNode extends EventEmitter {
|
|
|
1320
1445
|
}
|
|
1321
1446
|
|
|
1322
1447
|
checkRenderBounds(): CoreNodeRenderState {
|
|
1323
|
-
|
|
1324
|
-
assertTruthy(this.strictBound);
|
|
1325
|
-
assertTruthy(this.preloadBound);
|
|
1326
|
-
|
|
1327
|
-
if (boundInsideBound(this.renderBound, this.strictBound)) {
|
|
1448
|
+
if (boundInsideBound(this.renderBound!, this.strictBound!)) {
|
|
1328
1449
|
return CoreNodeRenderState.InViewport;
|
|
1329
1450
|
}
|
|
1330
1451
|
|
|
1331
|
-
if (boundInsideBound(this.renderBound
|
|
1452
|
+
if (boundInsideBound(this.renderBound!, this.preloadBound!)) {
|
|
1332
1453
|
return CoreNodeRenderState.InBounds;
|
|
1333
1454
|
}
|
|
1334
1455
|
|
|
1335
1456
|
// check if we're larger then our parent, we're definitely in the viewport
|
|
1336
|
-
if (boundLargeThanBound(this.renderBound
|
|
1457
|
+
if (boundLargeThanBound(this.renderBound!, this.strictBound!)) {
|
|
1337
1458
|
return CoreNodeRenderState.InViewport;
|
|
1338
1459
|
}
|
|
1339
1460
|
|
|
1340
1461
|
// check if we dont have dimensions, take our parent's render state
|
|
1341
|
-
if (
|
|
1342
|
-
this.parent !== null &&
|
|
1343
|
-
(this.props.width === 0 || this.props.height === 0)
|
|
1344
|
-
) {
|
|
1462
|
+
if (this.parent !== null && (this.props.w === 0 || this.props.h === 0)) {
|
|
1345
1463
|
return this.parent.renderState;
|
|
1346
1464
|
}
|
|
1347
1465
|
|
|
@@ -1349,18 +1467,21 @@ export class CoreNode extends EventEmitter {
|
|
|
1349
1467
|
}
|
|
1350
1468
|
|
|
1351
1469
|
updateBoundingRect() {
|
|
1352
|
-
const transform = this.sceneGlobalTransform ||
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
assertTruthy(renderCoords);
|
|
1470
|
+
const transform = (this.sceneGlobalTransform ||
|
|
1471
|
+
this.globalTransform) as Matrix3d;
|
|
1472
|
+
const renderCoords = (this.sceneRenderCoords ||
|
|
1473
|
+
this.renderCoords) as RenderCoords;
|
|
1357
1474
|
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1475
|
+
if (transform.tb === 0 || transform.tc === 0) {
|
|
1476
|
+
this.renderBound = createBound(
|
|
1477
|
+
renderCoords.x1,
|
|
1478
|
+
renderCoords.y1,
|
|
1479
|
+
renderCoords.x3,
|
|
1480
|
+
renderCoords.y3,
|
|
1481
|
+
this.renderBound,
|
|
1482
|
+
);
|
|
1362
1483
|
} else {
|
|
1363
|
-
const {
|
|
1484
|
+
const { x1, y1, x2, y2, x3, y3, x4, y4 } = renderCoords;
|
|
1364
1485
|
this.renderBound = createBound(
|
|
1365
1486
|
Math.min(x1, x2, x3, x4),
|
|
1366
1487
|
Math.min(y1, y2, y3, y4),
|
|
@@ -1372,8 +1493,6 @@ export class CoreNode extends EventEmitter {
|
|
|
1372
1493
|
}
|
|
1373
1494
|
|
|
1374
1495
|
createRenderBounds(): void {
|
|
1375
|
-
assertTruthy(this.stage);
|
|
1376
|
-
|
|
1377
1496
|
if (this.parent !== null && this.parent.strictBound !== undefined) {
|
|
1378
1497
|
// we have a parent with a valid bound, copy it
|
|
1379
1498
|
const parentBound = this.parent.strictBound;
|
|
@@ -1382,11 +1501,13 @@ export class CoreNode extends EventEmitter {
|
|
|
1382
1501
|
parentBound.y1,
|
|
1383
1502
|
parentBound.x2,
|
|
1384
1503
|
parentBound.y2,
|
|
1504
|
+
this.strictBound,
|
|
1385
1505
|
);
|
|
1386
1506
|
|
|
1387
1507
|
this.preloadBound = createPreloadBounds(
|
|
1388
1508
|
this.strictBound,
|
|
1389
1509
|
this.boundsMargin as [number, number, number, number],
|
|
1510
|
+
this.preloadBound,
|
|
1390
1511
|
);
|
|
1391
1512
|
} else {
|
|
1392
1513
|
// no parent or parent does not have a bound, take the stage boundaries
|
|
@@ -1411,24 +1532,19 @@ export class CoreNode extends EventEmitter {
|
|
|
1411
1532
|
}
|
|
1412
1533
|
|
|
1413
1534
|
// clipping is enabled and we are in bounds create our own bounds
|
|
1414
|
-
const { x, y,
|
|
1535
|
+
const { x, y, w, h } = this.props;
|
|
1415
1536
|
|
|
1416
1537
|
// Pick the global transform if available, otherwise use the local transform
|
|
1417
1538
|
// global transform is only available if the node in an RTT chain
|
|
1418
1539
|
const { tx, ty } = this.sceneGlobalTransform || this.globalTransform || {};
|
|
1419
1540
|
const _x = tx ?? x;
|
|
1420
1541
|
const _y = ty ?? y;
|
|
1421
|
-
this.strictBound = createBound(
|
|
1422
|
-
_x,
|
|
1423
|
-
_y,
|
|
1424
|
-
_x + width,
|
|
1425
|
-
_y + height,
|
|
1426
|
-
this.strictBound,
|
|
1427
|
-
);
|
|
1542
|
+
this.strictBound = createBound(_x, _y, _x + w, _y + h, this.strictBound);
|
|
1428
1543
|
|
|
1429
1544
|
this.preloadBound = createPreloadBounds(
|
|
1430
1545
|
this.strictBound,
|
|
1431
1546
|
this.boundsMargin as [number, number, number, number],
|
|
1547
|
+
this.preloadBound,
|
|
1432
1548
|
);
|
|
1433
1549
|
}
|
|
1434
1550
|
|
|
@@ -1439,12 +1555,34 @@ export class CoreNode extends EventEmitter {
|
|
|
1439
1555
|
|
|
1440
1556
|
const previous = this.renderState;
|
|
1441
1557
|
this.renderState = renderState;
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1558
|
+
|
|
1559
|
+
// If node visibility changes, dirty the render list cache
|
|
1560
|
+
if (
|
|
1561
|
+
renderState === CoreNodeRenderState.OutOfBounds ||
|
|
1562
|
+
previous === CoreNodeRenderState.OutOfBounds
|
|
1563
|
+
) {
|
|
1564
|
+
this.stage.requestRenderListUpdate();
|
|
1565
|
+
}
|
|
1566
|
+
|
|
1567
|
+
if (EMIT_BOUNDS_EVENTS) {
|
|
1568
|
+
const event = CoreNodeRenderStateMap.get(renderState);
|
|
1569
|
+
assertTruthy(event);
|
|
1570
|
+
this.emit(event, {
|
|
1571
|
+
previous,
|
|
1572
|
+
current: renderState,
|
|
1573
|
+
});
|
|
1574
|
+
}
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
/**
|
|
1578
|
+
* Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
|
|
1579
|
+
*/
|
|
1580
|
+
checkBasicRenderability(): boolean {
|
|
1581
|
+
if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
|
|
1582
|
+
return false;
|
|
1583
|
+
} else {
|
|
1584
|
+
return true;
|
|
1585
|
+
}
|
|
1448
1586
|
}
|
|
1449
1587
|
|
|
1450
1588
|
/**
|
|
@@ -1462,51 +1600,58 @@ export class CoreNode extends EventEmitter {
|
|
|
1462
1600
|
}
|
|
1463
1601
|
|
|
1464
1602
|
if (this.texture !== null) {
|
|
1465
|
-
|
|
1603
|
+
// preemptive check for failed textures this will mark the current node as non-renderable
|
|
1604
|
+
// and will prevent further checks until the texture is reloaded or retry is reset on the texture
|
|
1605
|
+
if (this.texture.retryCount > this.texture.maxRetryCount) {
|
|
1606
|
+
// texture has failed to load, we cannot render
|
|
1607
|
+
this.updateTextureOwnership(false);
|
|
1608
|
+
this.setRenderable(false);
|
|
1609
|
+
return;
|
|
1610
|
+
}
|
|
1466
1611
|
|
|
1467
|
-
|
|
1468
|
-
|
|
1612
|
+
needsTextureOwnership = true;
|
|
1613
|
+
// Use cached boolean instead of string comparison
|
|
1614
|
+
newIsRenderable = this.textureLoaded;
|
|
1469
1615
|
} else if (
|
|
1470
|
-
|
|
1616
|
+
// check shader
|
|
1617
|
+
(this.props.shader !== this.stage.renderer.getDefaultShaderNode() ||
|
|
1618
|
+
this.hasColorProps === true) &&
|
|
1619
|
+
// check dimensions
|
|
1471
1620
|
this.hasDimensions() === true
|
|
1472
1621
|
) {
|
|
1473
1622
|
// This mean we have dimensions and a color set, so we can render a ColorTexture
|
|
1474
|
-
|
|
1475
|
-
this.stage.defaultTexture &&
|
|
1476
|
-
this.stage.defaultTexture.state === 'loaded'
|
|
1477
|
-
) {
|
|
1478
|
-
newIsRenderable = true;
|
|
1479
|
-
}
|
|
1623
|
+
newIsRenderable = true;
|
|
1480
1624
|
}
|
|
1481
1625
|
|
|
1482
1626
|
this.updateTextureOwnership(needsTextureOwnership);
|
|
1483
1627
|
this.setRenderable(newIsRenderable);
|
|
1484
1628
|
}
|
|
1485
1629
|
|
|
1486
|
-
/**
|
|
1487
|
-
* Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
|
|
1488
|
-
*/
|
|
1489
|
-
checkBasicRenderability(): boolean {
|
|
1490
|
-
if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
|
|
1491
|
-
return false;
|
|
1492
|
-
} else {
|
|
1493
|
-
return true;
|
|
1494
|
-
}
|
|
1495
|
-
}
|
|
1496
|
-
|
|
1497
1630
|
/**
|
|
1498
1631
|
* Sets the renderable state and triggers changes if necessary.
|
|
1499
1632
|
* @param isRenderable - The new renderable state
|
|
1500
1633
|
*/
|
|
1501
1634
|
setRenderable(isRenderable: boolean) {
|
|
1635
|
+
const previousIsRenderable = this.isRenderable;
|
|
1502
1636
|
this.isRenderable = isRenderable;
|
|
1637
|
+
|
|
1638
|
+
// Emit event if renderable status has changed
|
|
1639
|
+
if (previousIsRenderable !== isRenderable) {
|
|
1640
|
+
this.stage.requestRenderListUpdate();
|
|
1641
|
+
if (EMIT_BOUNDS_EVENTS) {
|
|
1642
|
+
this.emit('renderable', {
|
|
1643
|
+
type: 'renderable',
|
|
1644
|
+
isRenderable,
|
|
1645
|
+
} satisfies NodeRenderablePayload);
|
|
1646
|
+
}
|
|
1647
|
+
}
|
|
1503
1648
|
}
|
|
1504
1649
|
|
|
1505
1650
|
/**
|
|
1506
1651
|
* Changes the renderable state of the node.
|
|
1507
1652
|
*/
|
|
1508
1653
|
updateTextureOwnership(isRenderable: boolean) {
|
|
1509
|
-
this.texture?.setRenderableOwner(this, isRenderable);
|
|
1654
|
+
this.texture?.setRenderableOwner(this._id, isRenderable);
|
|
1510
1655
|
}
|
|
1511
1656
|
|
|
1512
1657
|
/**
|
|
@@ -1520,38 +1665,24 @@ export class CoreNode extends EventEmitter {
|
|
|
1520
1665
|
* Checks if the node has dimensions (width/height)
|
|
1521
1666
|
*/
|
|
1522
1667
|
hasDimensions(): boolean {
|
|
1523
|
-
return this.props.
|
|
1524
|
-
}
|
|
1525
|
-
|
|
1526
|
-
/**
|
|
1527
|
-
* Checks if the node has any color properties set.
|
|
1528
|
-
*/
|
|
1529
|
-
hasColorProperties(): boolean {
|
|
1530
|
-
return (
|
|
1531
|
-
this.props.color !== 0 ||
|
|
1532
|
-
this.props.colorTop !== 0 ||
|
|
1533
|
-
this.props.colorBottom !== 0 ||
|
|
1534
|
-
this.props.colorLeft !== 0 ||
|
|
1535
|
-
this.props.colorRight !== 0 ||
|
|
1536
|
-
this.props.colorTl !== 0 ||
|
|
1537
|
-
this.props.colorTr !== 0 ||
|
|
1538
|
-
this.props.colorBl !== 0 ||
|
|
1539
|
-
this.props.colorBr !== 0
|
|
1540
|
-
);
|
|
1541
|
-
}
|
|
1542
|
-
|
|
1543
|
-
hasShader(): boolean {
|
|
1544
|
-
return this.props.shader !== null;
|
|
1668
|
+
return this.props.w !== 0 && this.props.h !== 0;
|
|
1545
1669
|
}
|
|
1546
1670
|
|
|
1547
1671
|
calculateRenderCoords() {
|
|
1548
|
-
const {
|
|
1549
|
-
|
|
1672
|
+
const { w, h } = this.props;
|
|
1673
|
+
|
|
1674
|
+
const g = this.globalTransform!;
|
|
1675
|
+
const tx = g.tx,
|
|
1676
|
+
ty = g.ty,
|
|
1677
|
+
ta = g.ta,
|
|
1678
|
+
tb = g.tb,
|
|
1679
|
+
tc = g.tc,
|
|
1680
|
+
td = g.td;
|
|
1550
1681
|
if (tb === 0 && tc === 0) {
|
|
1551
1682
|
const minX = tx;
|
|
1552
|
-
const maxX = tx +
|
|
1683
|
+
const maxX = tx + w * ta;
|
|
1553
1684
|
const minY = ty;
|
|
1554
|
-
const maxY = ty +
|
|
1685
|
+
const maxY = ty + h * td;
|
|
1555
1686
|
this.renderCoords = RenderCoords.translate(
|
|
1556
1687
|
//top-left
|
|
1557
1688
|
minX,
|
|
@@ -1573,18 +1704,18 @@ export class CoreNode extends EventEmitter {
|
|
|
1573
1704
|
tx,
|
|
1574
1705
|
ty,
|
|
1575
1706
|
//top-right
|
|
1576
|
-
tx +
|
|
1577
|
-
ty +
|
|
1707
|
+
tx + w * ta,
|
|
1708
|
+
ty + w * tc,
|
|
1578
1709
|
//bottom-right
|
|
1579
|
-
tx +
|
|
1580
|
-
ty +
|
|
1710
|
+
tx + w * ta + h * tb,
|
|
1711
|
+
ty + w * tc + h * td,
|
|
1581
1712
|
//bottom-left
|
|
1582
|
-
tx +
|
|
1583
|
-
ty +
|
|
1713
|
+
tx + h * tb,
|
|
1714
|
+
ty + h * td,
|
|
1584
1715
|
this.renderCoords,
|
|
1585
1716
|
);
|
|
1586
1717
|
}
|
|
1587
|
-
if (this.sceneGlobalTransform === undefined) {
|
|
1718
|
+
if (!USE_RTT || this.sceneGlobalTransform === undefined) {
|
|
1588
1719
|
return;
|
|
1589
1720
|
}
|
|
1590
1721
|
|
|
@@ -1598,9 +1729,9 @@ export class CoreNode extends EventEmitter {
|
|
|
1598
1729
|
} = this.sceneGlobalTransform;
|
|
1599
1730
|
if (stb === 0 && stc === 0) {
|
|
1600
1731
|
const minX = stx;
|
|
1601
|
-
const maxX = stx +
|
|
1732
|
+
const maxX = stx + w * sta;
|
|
1602
1733
|
const minY = sty;
|
|
1603
|
-
const maxY = sty +
|
|
1734
|
+
const maxY = sty + h * std;
|
|
1604
1735
|
this.sceneRenderCoords = RenderCoords.translate(
|
|
1605
1736
|
//top-left
|
|
1606
1737
|
minX,
|
|
@@ -1622,14 +1753,14 @@ export class CoreNode extends EventEmitter {
|
|
|
1622
1753
|
stx,
|
|
1623
1754
|
sty,
|
|
1624
1755
|
//top-right
|
|
1625
|
-
stx +
|
|
1626
|
-
sty +
|
|
1756
|
+
stx + w * sta,
|
|
1757
|
+
sty + w * stc,
|
|
1627
1758
|
//bottom-right
|
|
1628
|
-
stx +
|
|
1629
|
-
sty +
|
|
1759
|
+
stx + w * sta + h * stb,
|
|
1760
|
+
sty + w * stc + h * std,
|
|
1630
1761
|
//bottom-left
|
|
1631
|
-
stx +
|
|
1632
|
-
sty +
|
|
1762
|
+
stx + h * stb,
|
|
1763
|
+
sty + h * std,
|
|
1633
1764
|
this.sceneRenderCoords,
|
|
1634
1765
|
);
|
|
1635
1766
|
}
|
|
@@ -1644,16 +1775,15 @@ export class CoreNode extends EventEmitter {
|
|
|
1644
1775
|
* Finally, the node's parentClippingRect and clippingRect properties are updated.
|
|
1645
1776
|
*/
|
|
1646
1777
|
calculateClippingRect(parentClippingRect: RectWithValid) {
|
|
1647
|
-
assertTruthy(this.globalTransform);
|
|
1648
1778
|
const { clippingRect, props, globalTransform: gt } = this;
|
|
1649
1779
|
const { clipping } = props;
|
|
1650
|
-
const isRotated = gt
|
|
1780
|
+
const isRotated = gt!.tb !== 0 || gt!.tc !== 0;
|
|
1651
1781
|
|
|
1652
1782
|
if (clipping === true && isRotated === false) {
|
|
1653
|
-
clippingRect.x = gt
|
|
1654
|
-
clippingRect.y = gt
|
|
1655
|
-
clippingRect.width = this.
|
|
1656
|
-
clippingRect.height = this.
|
|
1783
|
+
clippingRect.x = gt!.tx;
|
|
1784
|
+
clippingRect.y = gt!.ty;
|
|
1785
|
+
clippingRect.width = this.props.w * gt!.ta;
|
|
1786
|
+
clippingRect.height = this.props.h * gt!.td;
|
|
1657
1787
|
clippingRect.valid = true;
|
|
1658
1788
|
} else {
|
|
1659
1789
|
clippingRect.valid = false;
|
|
@@ -1669,101 +1799,185 @@ export class CoreNode extends EventEmitter {
|
|
|
1669
1799
|
}
|
|
1670
1800
|
}
|
|
1671
1801
|
|
|
1672
|
-
calculateZIndex(): void {
|
|
1673
|
-
const props = this.props;
|
|
1674
|
-
const z = props.zIndex || 0;
|
|
1675
|
-
const p = props.parent?.zIndex || 0;
|
|
1676
|
-
|
|
1677
|
-
let zIndex = z;
|
|
1678
|
-
if (props.parent?.zIndexLocked) {
|
|
1679
|
-
zIndex = z < p ? z : p;
|
|
1680
|
-
}
|
|
1681
|
-
this.calcZIndex = zIndex;
|
|
1682
|
-
}
|
|
1683
|
-
|
|
1684
1802
|
/**
|
|
1685
1803
|
* Destroy the node and cleanup all resources
|
|
1686
1804
|
*/
|
|
1687
|
-
destroy(): void {
|
|
1805
|
+
destroy(isChild: boolean = false): void {
|
|
1688
1806
|
if (this.destroyed === true) {
|
|
1689
1807
|
return;
|
|
1690
1808
|
}
|
|
1691
|
-
|
|
1692
1809
|
this.destroyed = true;
|
|
1693
|
-
this.unloadTexture();
|
|
1694
1810
|
|
|
1695
|
-
|
|
1811
|
+
// Detach from parent first to stop propagation of updates
|
|
1812
|
+
if (isChild === false) {
|
|
1813
|
+
const parent = this.parent;
|
|
1814
|
+
if (parent !== null) {
|
|
1815
|
+
parent.removeChild(this);
|
|
1816
|
+
}
|
|
1817
|
+
this.props.parent = null;
|
|
1818
|
+
this.stage.requestRender();
|
|
1819
|
+
}
|
|
1820
|
+
|
|
1821
|
+
this.removeAllListeners();
|
|
1822
|
+
this.unloadTexture();
|
|
1696
1823
|
this.isRenderable = false;
|
|
1697
1824
|
|
|
1698
|
-
this.
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
this.
|
|
1703
|
-
|
|
1704
|
-
|
|
1825
|
+
if (this.hasShaderTimeFn === true) {
|
|
1826
|
+
this.stage.untrackTimedNode(this);
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1829
|
+
if (USE_RTT && this.rtt === true) {
|
|
1830
|
+
this.stage.renderer.removeRTTNode(this);
|
|
1831
|
+
}
|
|
1832
|
+
|
|
1833
|
+
// Kill children
|
|
1834
|
+
for (let i = 0, n = this.children.length; i < n; i++) {
|
|
1835
|
+
this.children[i]!.destroy(true);
|
|
1836
|
+
}
|
|
1837
|
+
this.children.length = 0;
|
|
1705
1838
|
|
|
1706
1839
|
this.props.texture = null;
|
|
1707
|
-
|
|
1840
|
+
}
|
|
1708
1841
|
|
|
1709
|
-
|
|
1710
|
-
|
|
1842
|
+
renderQuads(renderer: CoreRenderer): void {
|
|
1843
|
+
if (USE_RTT && this.parentHasRenderTexture === true) {
|
|
1844
|
+
const rtt = renderer.renderToTextureActive;
|
|
1845
|
+
if (rtt === false || this.parentRenderTexture !== renderer.activeRttNode)
|
|
1846
|
+
return;
|
|
1847
|
+
}
|
|
1848
|
+
// There is a race condition where the texture can be null
|
|
1849
|
+
// with RTT nodes. Adding this defensively to avoid errors.
|
|
1850
|
+
// Also check if we have a valid texture or default texture to render
|
|
1851
|
+
if (USE_RTT && this.renderTexture!.state !== 'loaded') {
|
|
1852
|
+
return;
|
|
1711
1853
|
}
|
|
1712
1854
|
|
|
1713
|
-
|
|
1714
|
-
|
|
1855
|
+
renderer.addQuad(this);
|
|
1856
|
+
}
|
|
1715
1857
|
|
|
1716
|
-
|
|
1717
|
-
|
|
1858
|
+
get renderTexture(): Texture | null {
|
|
1859
|
+
return this.props.texture || this.stage.defaultTexture;
|
|
1860
|
+
}
|
|
1861
|
+
|
|
1862
|
+
get renderTextureCoords(): TextureCoords | undefined {
|
|
1863
|
+
return this.textureCoords || this.stage.renderer.defaultTextureCoords;
|
|
1864
|
+
}
|
|
1865
|
+
|
|
1866
|
+
get quadBufferCollection(): BufferCollection {
|
|
1867
|
+
return (this.stage.renderer as WebGlRenderer).quadBufferCollection;
|
|
1868
|
+
}
|
|
1869
|
+
|
|
1870
|
+
get width(): number {
|
|
1871
|
+
return this.props.w;
|
|
1872
|
+
}
|
|
1873
|
+
|
|
1874
|
+
get height(): number {
|
|
1875
|
+
return this.props.h;
|
|
1876
|
+
}
|
|
1877
|
+
|
|
1878
|
+
get time(): number {
|
|
1879
|
+
if (this.hasShaderTimeFn === true) {
|
|
1880
|
+
return this.getTimerValue();
|
|
1718
1881
|
}
|
|
1882
|
+
return 0;
|
|
1883
|
+
}
|
|
1719
1884
|
|
|
1720
|
-
|
|
1885
|
+
getTimerValue(): number {
|
|
1886
|
+
if (typeof this.shader!.time === 'function') {
|
|
1887
|
+
return this.shader!.time(this.stage);
|
|
1888
|
+
}
|
|
1889
|
+
return this.stage.elapsedTime;
|
|
1721
1890
|
}
|
|
1722
1891
|
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1892
|
+
sortChildren() {
|
|
1893
|
+
this.children.sort((a, b) => a.props.zIndex - b.props.zIndex);
|
|
1894
|
+
this.stage.requestRenderListUpdate();
|
|
1895
|
+
}
|
|
1896
|
+
|
|
1897
|
+
removeChild(node: CoreNode, targetParent: CoreNode | null = null) {
|
|
1898
|
+
if (targetParent === null) {
|
|
1899
|
+
if (
|
|
1900
|
+
USE_RTT &&
|
|
1901
|
+
this.props.rtt === true &&
|
|
1902
|
+
this.parentHasRenderTexture === true
|
|
1903
|
+
) {
|
|
1904
|
+
node.clearRTTInheritance();
|
|
1729
1905
|
}
|
|
1730
|
-
|
|
1731
|
-
if (
|
|
1732
|
-
|
|
1906
|
+
|
|
1907
|
+
if (ENABLE_AUTOSIZE) {
|
|
1908
|
+
const autosizeTarget = this.autosizer || this.parentAutosizer;
|
|
1909
|
+
if (autosizeTarget !== null) {
|
|
1910
|
+
autosizeTarget.detach(node);
|
|
1911
|
+
}
|
|
1733
1912
|
}
|
|
1734
1913
|
}
|
|
1914
|
+
removeChild(node, this.children);
|
|
1915
|
+
this.stage.requestRenderListUpdate();
|
|
1916
|
+
}
|
|
1917
|
+
|
|
1918
|
+
addChild(node: CoreNode, previousParent: CoreNode | null = null) {
|
|
1919
|
+
const inRttCluster =
|
|
1920
|
+
USE_RTT &&
|
|
1921
|
+
(this.props.rtt === true || this.parentHasRenderTexture === true);
|
|
1922
|
+
const children = this.children;
|
|
1923
|
+
let attachToAutosizer = false;
|
|
1924
|
+
let autosizeTarget: Autosizer | null = null;
|
|
1925
|
+
if (ENABLE_AUTOSIZE) {
|
|
1926
|
+
autosizeTarget = this.autosizer || this.parentAutosizer;
|
|
1927
|
+
attachToAutosizer = autosizeTarget !== null;
|
|
1928
|
+
}
|
|
1929
|
+
|
|
1930
|
+
node.parentHasRenderTexture = inRttCluster;
|
|
1931
|
+
if (previousParent !== null) {
|
|
1932
|
+
const previousParentInRttCluster =
|
|
1933
|
+
USE_RTT &&
|
|
1934
|
+
(previousParent.props.rtt === true ||
|
|
1935
|
+
previousParent.parentHasRenderTexture === true);
|
|
1936
|
+
if (inRttCluster === false && previousParentInRttCluster === true) {
|
|
1937
|
+
// update child RTT status
|
|
1938
|
+
node.clearRTTInheritance();
|
|
1939
|
+
}
|
|
1735
1940
|
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
// this
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1941
|
+
if (ENABLE_AUTOSIZE) {
|
|
1942
|
+
const previousAutosizer = node.autosizer || node.parentAutosizer;
|
|
1943
|
+
if (previousAutosizer !== null) {
|
|
1944
|
+
if (!autosizeTarget || previousAutosizer.id !== autosizeTarget.id) {
|
|
1945
|
+
previousAutosizer.detach(node);
|
|
1946
|
+
}
|
|
1947
|
+
attachToAutosizer = false;
|
|
1948
|
+
}
|
|
1949
|
+
}
|
|
1950
|
+
}
|
|
1951
|
+
|
|
1952
|
+
if (ENABLE_AUTOSIZE && attachToAutosizer === true && autosizeTarget) {
|
|
1953
|
+
//if this is true, then the autosizer really exists
|
|
1954
|
+
autosizeTarget.attach(node);
|
|
1955
|
+
}
|
|
1956
|
+
|
|
1957
|
+
if (inRttCluster === true) {
|
|
1958
|
+
node.markChildrenWithRTT(this);
|
|
1959
|
+
}
|
|
1960
|
+
|
|
1961
|
+
children.push(node);
|
|
1962
|
+
|
|
1963
|
+
// check if we need to sort
|
|
1964
|
+
const lastIndex = children.length - 1;
|
|
1965
|
+
let shouldSort = node.zIndex !== 0;
|
|
1966
|
+
|
|
1967
|
+
if (shouldSort === false && lastIndex > 0) {
|
|
1968
|
+
// If the new node has zIndex 0, we check if any existing children have (had) non-zero zIndex.
|
|
1969
|
+
// Since children are sorted, we only need to check the first and the last (before the new one).
|
|
1970
|
+
// The new node is at `lastIndex`. The previous last node is at `lastIndex - 1`.
|
|
1971
|
+
const first = children[0]!;
|
|
1972
|
+
const last = children[lastIndex - 1]!;
|
|
1973
|
+
shouldSort = first.zIndex !== 0 || last.zIndex !== 0;
|
|
1974
|
+
}
|
|
1975
|
+
|
|
1976
|
+
if (shouldSort) {
|
|
1977
|
+
this.setUpdateType(UpdateType.SortZIndexChildren);
|
|
1978
|
+
}
|
|
1979
|
+
this.setUpdateType(UpdateType.Children);
|
|
1980
|
+
this.stage.requestRenderListUpdate();
|
|
1767
1981
|
}
|
|
1768
1982
|
|
|
1769
1983
|
//#region Properties
|
|
@@ -1793,7 +2007,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1793
2007
|
get absX(): number {
|
|
1794
2008
|
return (
|
|
1795
2009
|
this.props.x +
|
|
1796
|
-
-this.props.
|
|
2010
|
+
-this.props.w * this.props.mountX +
|
|
1797
2011
|
(this.props.parent?.absX || this.props.parent?.globalTransform?.tx || 0)
|
|
1798
2012
|
);
|
|
1799
2013
|
}
|
|
@@ -1801,7 +2015,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1801
2015
|
get absY(): number {
|
|
1802
2016
|
return (
|
|
1803
2017
|
this.props.y +
|
|
1804
|
-
-this.props.
|
|
2018
|
+
-this.props.h * this.props.mountY +
|
|
1805
2019
|
(this.props.parent?.absY ?? 0)
|
|
1806
2020
|
);
|
|
1807
2021
|
}
|
|
@@ -1817,43 +2031,63 @@ export class CoreNode extends EventEmitter {
|
|
|
1817
2031
|
}
|
|
1818
2032
|
}
|
|
1819
2033
|
|
|
1820
|
-
get
|
|
1821
|
-
return this.props.
|
|
2034
|
+
get w(): number {
|
|
2035
|
+
return this.props.w;
|
|
1822
2036
|
}
|
|
1823
2037
|
|
|
1824
|
-
set
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
2038
|
+
set w(value: number) {
|
|
2039
|
+
const props = this.props;
|
|
2040
|
+
if (props.w !== value) {
|
|
2041
|
+
props.w = value;
|
|
2042
|
+
let updateType = UpdateType.Local;
|
|
1828
2043
|
|
|
1829
|
-
if (
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
2044
|
+
if (
|
|
2045
|
+
props.texture !== null &&
|
|
2046
|
+
this.stage.calculateTextureCoord === true &&
|
|
2047
|
+
props.textureOptions !== null
|
|
2048
|
+
) {
|
|
2049
|
+
this.textureCoords = this.stage.renderer.getTextureCoords!(this);
|
|
2050
|
+
}
|
|
1834
2051
|
|
|
1835
|
-
|
|
2052
|
+
if (props.rtt === true) {
|
|
2053
|
+
this.framebufferDimensions!.w = value;
|
|
2054
|
+
this.texture = this.stage.txManager.createTexture(
|
|
2055
|
+
'RenderTexture',
|
|
2056
|
+
this.framebufferDimensions!,
|
|
2057
|
+
);
|
|
2058
|
+
updateType |= UpdateType.RenderTexture;
|
|
1836
2059
|
}
|
|
2060
|
+
this.setUpdateType(updateType);
|
|
1837
2061
|
}
|
|
1838
2062
|
}
|
|
1839
2063
|
|
|
1840
|
-
get
|
|
1841
|
-
return this.props.
|
|
2064
|
+
get h(): number {
|
|
2065
|
+
return this.props.h;
|
|
1842
2066
|
}
|
|
1843
2067
|
|
|
1844
|
-
set
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
2068
|
+
set h(value: number) {
|
|
2069
|
+
const props = this.props;
|
|
2070
|
+
if (props.h !== value) {
|
|
2071
|
+
props.h = value;
|
|
2072
|
+
let updateType = UpdateType.Local;
|
|
1848
2073
|
|
|
1849
|
-
if (
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
2074
|
+
if (
|
|
2075
|
+
props.texture !== null &&
|
|
2076
|
+
this.stage.calculateTextureCoord === true &&
|
|
2077
|
+
props.textureOptions !== null
|
|
2078
|
+
) {
|
|
2079
|
+
this.textureCoords = this.stage.renderer.getTextureCoords!(this);
|
|
2080
|
+
}
|
|
1854
2081
|
|
|
1855
|
-
|
|
2082
|
+
if (props.rtt === true) {
|
|
2083
|
+
this.framebufferDimensions!.h = value;
|
|
2084
|
+
this.texture = this.stage.txManager.createTexture(
|
|
2085
|
+
'RenderTexture',
|
|
2086
|
+
this.framebufferDimensions!,
|
|
2087
|
+
);
|
|
2088
|
+
updateType |= UpdateType.RenderTexture;
|
|
1856
2089
|
}
|
|
2090
|
+
this.setUpdateType(updateType);
|
|
1857
2091
|
}
|
|
1858
2092
|
}
|
|
1859
2093
|
|
|
@@ -1868,6 +2102,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1868
2102
|
// Unlike INode, `null` should never be possibility for Animations.
|
|
1869
2103
|
this.scaleX = value;
|
|
1870
2104
|
this.scaleY = value;
|
|
2105
|
+
this.updateIsSimple();
|
|
1871
2106
|
}
|
|
1872
2107
|
|
|
1873
2108
|
get scaleX(): number {
|
|
@@ -1877,7 +2112,8 @@ export class CoreNode extends EventEmitter {
|
|
|
1877
2112
|
set scaleX(value: number) {
|
|
1878
2113
|
if (this.props.scaleX !== value) {
|
|
1879
2114
|
this.props.scaleX = value;
|
|
1880
|
-
this.setUpdateType(UpdateType.
|
|
2115
|
+
this.setUpdateType(UpdateType.Local);
|
|
2116
|
+
this.updateIsSimple();
|
|
1881
2117
|
}
|
|
1882
2118
|
}
|
|
1883
2119
|
|
|
@@ -1888,7 +2124,8 @@ export class CoreNode extends EventEmitter {
|
|
|
1888
2124
|
set scaleY(value: number) {
|
|
1889
2125
|
if (this.props.scaleY !== value) {
|
|
1890
2126
|
this.props.scaleY = value;
|
|
1891
|
-
this.setUpdateType(UpdateType.
|
|
2127
|
+
this.setUpdateType(UpdateType.Local);
|
|
2128
|
+
this.updateIsSimple();
|
|
1892
2129
|
}
|
|
1893
2130
|
}
|
|
1894
2131
|
|
|
@@ -1902,6 +2139,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1902
2139
|
this.props.mountY = value;
|
|
1903
2140
|
this.props.mount = value;
|
|
1904
2141
|
this.setUpdateType(UpdateType.Local);
|
|
2142
|
+
this.updateIsSimple();
|
|
1905
2143
|
}
|
|
1906
2144
|
}
|
|
1907
2145
|
|
|
@@ -1913,6 +2151,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1913
2151
|
if (this.props.mountX !== value) {
|
|
1914
2152
|
this.props.mountX = value;
|
|
1915
2153
|
this.setUpdateType(UpdateType.Local);
|
|
2154
|
+
this.updateIsSimple();
|
|
1916
2155
|
}
|
|
1917
2156
|
}
|
|
1918
2157
|
|
|
@@ -1924,6 +2163,7 @@ export class CoreNode extends EventEmitter {
|
|
|
1924
2163
|
if (this.props.mountY !== value) {
|
|
1925
2164
|
this.props.mountY = value;
|
|
1926
2165
|
this.setUpdateType(UpdateType.Local);
|
|
2166
|
+
this.updateIsSimple();
|
|
1927
2167
|
}
|
|
1928
2168
|
}
|
|
1929
2169
|
|
|
@@ -1969,7 +2209,8 @@ export class CoreNode extends EventEmitter {
|
|
|
1969
2209
|
set rotation(value: number) {
|
|
1970
2210
|
if (this.props.rotation !== value) {
|
|
1971
2211
|
this.props.rotation = value;
|
|
1972
|
-
this.setUpdateType(UpdateType.
|
|
2212
|
+
this.setUpdateType(UpdateType.Local);
|
|
2213
|
+
this.updateIsSimple();
|
|
1973
2214
|
}
|
|
1974
2215
|
}
|
|
1975
2216
|
|
|
@@ -1993,15 +2234,34 @@ export class CoreNode extends EventEmitter {
|
|
|
1993
2234
|
}
|
|
1994
2235
|
|
|
1995
2236
|
set autosize(value: boolean) {
|
|
2237
|
+
if (this.props.autosize === value) {
|
|
2238
|
+
return;
|
|
2239
|
+
}
|
|
2240
|
+
|
|
1996
2241
|
this.props.autosize = value;
|
|
2242
|
+
|
|
2243
|
+
if (value === true && this.autosizer === null) {
|
|
2244
|
+
this.autosizer = new Autosizer(this);
|
|
2245
|
+
} else {
|
|
2246
|
+
this.autosizer = null;
|
|
2247
|
+
}
|
|
1997
2248
|
}
|
|
1998
2249
|
|
|
1999
2250
|
get boundsMargin(): number | [number, number, number, number] | null {
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2251
|
+
const props = this.props;
|
|
2252
|
+
if (props.boundsMargin !== null) {
|
|
2253
|
+
return props.boundsMargin;
|
|
2254
|
+
}
|
|
2255
|
+
|
|
2256
|
+
const parent = this.parent;
|
|
2257
|
+
if (parent !== null) {
|
|
2258
|
+
const margin = parent.boundsMargin;
|
|
2259
|
+
if (margin !== undefined) {
|
|
2260
|
+
return margin;
|
|
2261
|
+
}
|
|
2262
|
+
}
|
|
2263
|
+
|
|
2264
|
+
return this.stage.boundsMargin;
|
|
2005
2265
|
}
|
|
2006
2266
|
|
|
2007
2267
|
set boundsMargin(value: number | [number, number, number, number] | null) {
|
|
@@ -2038,11 +2298,22 @@ export class CoreNode extends EventEmitter {
|
|
|
2038
2298
|
}
|
|
2039
2299
|
|
|
2040
2300
|
set color(value: number) {
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2301
|
+
const p = this.props;
|
|
2302
|
+
if (p.color === value) return;
|
|
2303
|
+
|
|
2304
|
+
p.color = value;
|
|
2305
|
+
|
|
2306
|
+
const has = value > 0;
|
|
2307
|
+
|
|
2308
|
+
if (has !== this.hasColorProps) {
|
|
2309
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
2310
|
+
}
|
|
2311
|
+
this.hasColorProps = has;
|
|
2312
|
+
|
|
2313
|
+
if (p.colorTop !== value) this.colorTop = value;
|
|
2314
|
+
if (p.colorBottom !== value) this.colorBottom = value;
|
|
2315
|
+
if (p.colorLeft !== value) this.colorLeft = value;
|
|
2316
|
+
if (p.colorRight !== value) this.colorRight = value;
|
|
2046
2317
|
|
|
2047
2318
|
this.setUpdateType(UpdateType.PremultipliedColors);
|
|
2048
2319
|
}
|
|
@@ -2057,7 +2328,10 @@ export class CoreNode extends EventEmitter {
|
|
|
2057
2328
|
this.colorTr = value;
|
|
2058
2329
|
}
|
|
2059
2330
|
this.props.colorTop = value;
|
|
2060
|
-
this.
|
|
2331
|
+
this.hasColorProps = value > 0;
|
|
2332
|
+
this.setUpdateType(
|
|
2333
|
+
UpdateType.PremultipliedColors | UpdateType.IsRenderable,
|
|
2334
|
+
);
|
|
2061
2335
|
}
|
|
2062
2336
|
|
|
2063
2337
|
get colorBottom(): number {
|
|
@@ -2070,7 +2344,10 @@ export class CoreNode extends EventEmitter {
|
|
|
2070
2344
|
this.colorBr = value;
|
|
2071
2345
|
}
|
|
2072
2346
|
this.props.colorBottom = value;
|
|
2073
|
-
this.
|
|
2347
|
+
this.hasColorProps = value > 0;
|
|
2348
|
+
this.setUpdateType(
|
|
2349
|
+
UpdateType.PremultipliedColors | UpdateType.IsRenderable,
|
|
2350
|
+
);
|
|
2074
2351
|
}
|
|
2075
2352
|
|
|
2076
2353
|
get colorLeft(): number {
|
|
@@ -2083,7 +2360,10 @@ export class CoreNode extends EventEmitter {
|
|
|
2083
2360
|
this.colorBl = value;
|
|
2084
2361
|
}
|
|
2085
2362
|
this.props.colorLeft = value;
|
|
2086
|
-
this.
|
|
2363
|
+
this.hasColorProps = value > 0;
|
|
2364
|
+
this.setUpdateType(
|
|
2365
|
+
UpdateType.PremultipliedColors | UpdateType.IsRenderable,
|
|
2366
|
+
);
|
|
2087
2367
|
}
|
|
2088
2368
|
|
|
2089
2369
|
get colorRight(): number {
|
|
@@ -2096,7 +2376,10 @@ export class CoreNode extends EventEmitter {
|
|
|
2096
2376
|
this.colorBr = value;
|
|
2097
2377
|
}
|
|
2098
2378
|
this.props.colorRight = value;
|
|
2099
|
-
this.
|
|
2379
|
+
this.hasColorProps = value > 0;
|
|
2380
|
+
this.setUpdateType(
|
|
2381
|
+
UpdateType.PremultipliedColors | UpdateType.IsRenderable,
|
|
2382
|
+
);
|
|
2100
2383
|
}
|
|
2101
2384
|
|
|
2102
2385
|
get colorTl(): number {
|
|
@@ -2105,7 +2388,10 @@ export class CoreNode extends EventEmitter {
|
|
|
2105
2388
|
|
|
2106
2389
|
set colorTl(value: number) {
|
|
2107
2390
|
this.props.colorTl = value;
|
|
2108
|
-
this.
|
|
2391
|
+
this.hasColorProps = value > 0;
|
|
2392
|
+
this.setUpdateType(
|
|
2393
|
+
UpdateType.PremultipliedColors | UpdateType.IsRenderable,
|
|
2394
|
+
);
|
|
2109
2395
|
}
|
|
2110
2396
|
|
|
2111
2397
|
get colorTr(): number {
|
|
@@ -2114,7 +2400,10 @@ export class CoreNode extends EventEmitter {
|
|
|
2114
2400
|
|
|
2115
2401
|
set colorTr(value: number) {
|
|
2116
2402
|
this.props.colorTr = value;
|
|
2117
|
-
this.
|
|
2403
|
+
this.hasColorProps = value > 0;
|
|
2404
|
+
this.setUpdateType(
|
|
2405
|
+
UpdateType.PremultipliedColors | UpdateType.IsRenderable,
|
|
2406
|
+
);
|
|
2118
2407
|
}
|
|
2119
2408
|
|
|
2120
2409
|
get colorBl(): number {
|
|
@@ -2123,7 +2412,10 @@ export class CoreNode extends EventEmitter {
|
|
|
2123
2412
|
|
|
2124
2413
|
set colorBl(value: number) {
|
|
2125
2414
|
this.props.colorBl = value;
|
|
2126
|
-
this.
|
|
2415
|
+
this.hasColorProps = value > 0;
|
|
2416
|
+
this.setUpdateType(
|
|
2417
|
+
UpdateType.PremultipliedColors | UpdateType.IsRenderable,
|
|
2418
|
+
);
|
|
2127
2419
|
}
|
|
2128
2420
|
|
|
2129
2421
|
get colorBr(): number {
|
|
@@ -2132,21 +2424,10 @@ export class CoreNode extends EventEmitter {
|
|
|
2132
2424
|
|
|
2133
2425
|
set colorBr(value: number) {
|
|
2134
2426
|
this.props.colorBr = value;
|
|
2135
|
-
this.
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
// if we should use node zIndex is higher then parent zIndex
|
|
2140
|
-
get zIndexLocked(): number {
|
|
2141
|
-
return this.props.zIndexLocked || 0;
|
|
2142
|
-
}
|
|
2143
|
-
|
|
2144
|
-
set zIndexLocked(value: number) {
|
|
2145
|
-
this.props.zIndexLocked = value;
|
|
2146
|
-
this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
|
|
2147
|
-
for (let i = 0, length = this.children.length; i < length; i++) {
|
|
2148
|
-
this.children[i]!.setUpdateType(UpdateType.CalculatedZIndex);
|
|
2149
|
-
}
|
|
2427
|
+
this.hasColorProps = value > 0;
|
|
2428
|
+
this.setUpdateType(
|
|
2429
|
+
UpdateType.PremultipliedColors | UpdateType.IsRenderable,
|
|
2430
|
+
);
|
|
2150
2431
|
}
|
|
2151
2432
|
|
|
2152
2433
|
get zIndex(): number {
|
|
@@ -2154,10 +2435,28 @@ export class CoreNode extends EventEmitter {
|
|
|
2154
2435
|
}
|
|
2155
2436
|
|
|
2156
2437
|
set zIndex(value: number) {
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2438
|
+
let sanitizedValue = value;
|
|
2439
|
+
if (isNaN(sanitizedValue) || Number.isFinite(sanitizedValue) === false) {
|
|
2440
|
+
console.warn(
|
|
2441
|
+
`zIndex was set to an invalid value: ${value}, defaulting to 0`,
|
|
2442
|
+
);
|
|
2443
|
+
sanitizedValue = 0;
|
|
2444
|
+
}
|
|
2445
|
+
|
|
2446
|
+
//Clamp to safe integer range
|
|
2447
|
+
if (sanitizedValue > Number.MAX_SAFE_INTEGER) {
|
|
2448
|
+
sanitizedValue = 1000;
|
|
2449
|
+
} else if (sanitizedValue < Number.MIN_SAFE_INTEGER) {
|
|
2450
|
+
sanitizedValue = -1000;
|
|
2451
|
+
}
|
|
2452
|
+
|
|
2453
|
+
if (this.props.zIndex === sanitizedValue) {
|
|
2454
|
+
return;
|
|
2455
|
+
}
|
|
2456
|
+
this.props.zIndex = sanitizedValue;
|
|
2457
|
+
const parent = this.parent;
|
|
2458
|
+
if (parent !== null) {
|
|
2459
|
+
parent.setUpdateType(UpdateType.SortZIndexChildren);
|
|
2161
2460
|
}
|
|
2162
2461
|
}
|
|
2163
2462
|
|
|
@@ -2172,48 +2471,13 @@ export class CoreNode extends EventEmitter {
|
|
|
2172
2471
|
}
|
|
2173
2472
|
this.props.parent = newParent;
|
|
2174
2473
|
if (oldParent) {
|
|
2175
|
-
|
|
2176
|
-
assertTruthy(
|
|
2177
|
-
index !== -1,
|
|
2178
|
-
"CoreNode.parent: Node not found in old parent's children!",
|
|
2179
|
-
);
|
|
2180
|
-
oldParent.children.splice(index, 1);
|
|
2181
|
-
oldParent.setUpdateType(
|
|
2182
|
-
UpdateType.Children | UpdateType.ZIndexSortedChildren,
|
|
2183
|
-
);
|
|
2474
|
+
oldParent.removeChild(this, newParent);
|
|
2184
2475
|
}
|
|
2185
|
-
if (newParent) {
|
|
2186
|
-
newParent.
|
|
2187
|
-
// Since this node has a new parent, to be safe, have it do a full update.
|
|
2188
|
-
this.setUpdateType(UpdateType.All);
|
|
2189
|
-
// Tell parent that it's children need to be updated and sorted.
|
|
2190
|
-
newParent.setUpdateType(
|
|
2191
|
-
UpdateType.Children | UpdateType.ZIndexSortedChildren,
|
|
2192
|
-
);
|
|
2193
|
-
|
|
2194
|
-
// If the new parent has an RTT enabled, apply RTT inheritance
|
|
2195
|
-
if (newParent.rtt || newParent.parentHasRenderTexture) {
|
|
2196
|
-
this.applyRTTInheritance(newParent);
|
|
2197
|
-
}
|
|
2476
|
+
if (newParent !== null) {
|
|
2477
|
+
newParent.addChild(this, oldParent);
|
|
2198
2478
|
}
|
|
2199
|
-
this
|
|
2200
|
-
|
|
2201
|
-
// fetch render bounds from parent
|
|
2202
|
-
this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
2203
|
-
}
|
|
2204
|
-
|
|
2205
|
-
get preventCleanup(): boolean {
|
|
2206
|
-
return this.props.textureOptions.preventCleanup || false;
|
|
2207
|
-
}
|
|
2208
|
-
|
|
2209
|
-
set preventCleanup(value: boolean) {
|
|
2210
|
-
if (isProductionEnvironment() === false) {
|
|
2211
|
-
console.warn(
|
|
2212
|
-
'CoreNode.preventCleanup: Is deprecated and will be removed in upcoming release, please use textureOptions.preventCleanup instead',
|
|
2213
|
-
);
|
|
2214
|
-
}
|
|
2215
|
-
|
|
2216
|
-
this.props.textureOptions.preventCleanup = value;
|
|
2479
|
+
//since this node has a new parent, recalc global and render bounds
|
|
2480
|
+
this.setUpdateType(UpdateType.Global | UpdateType.RenderBounds);
|
|
2217
2481
|
}
|
|
2218
2482
|
|
|
2219
2483
|
get rtt(): boolean {
|
|
@@ -2240,11 +2504,14 @@ export class CoreNode extends EventEmitter {
|
|
|
2240
2504
|
}
|
|
2241
2505
|
}
|
|
2242
2506
|
private initRenderTexture() {
|
|
2243
|
-
this.
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
}
|
|
2247
|
-
|
|
2507
|
+
this.framebufferDimensions = {
|
|
2508
|
+
w: this.props.w,
|
|
2509
|
+
h: this.props.h,
|
|
2510
|
+
};
|
|
2511
|
+
this.texture = this.stage.txManager.createTexture(
|
|
2512
|
+
'RenderTexture',
|
|
2513
|
+
this.framebufferDimensions,
|
|
2514
|
+
);
|
|
2248
2515
|
this.stage.renderer.renderToTexture(this);
|
|
2249
2516
|
}
|
|
2250
2517
|
|
|
@@ -2254,6 +2521,7 @@ export class CoreNode extends EventEmitter {
|
|
|
2254
2521
|
|
|
2255
2522
|
this.hasRTTupdates = false;
|
|
2256
2523
|
this.texture = null;
|
|
2524
|
+
this.framebufferDimensions = null;
|
|
2257
2525
|
}
|
|
2258
2526
|
|
|
2259
2527
|
private markChildrenWithRTT(node: CoreNode | null = null) {
|
|
@@ -2294,18 +2562,33 @@ export class CoreNode extends EventEmitter {
|
|
|
2294
2562
|
}
|
|
2295
2563
|
}
|
|
2296
2564
|
|
|
2297
|
-
get shader():
|
|
2565
|
+
get shader(): CoreShaderNode<any> | null {
|
|
2298
2566
|
return this.props.shader;
|
|
2299
2567
|
}
|
|
2300
2568
|
|
|
2301
|
-
set shader(
|
|
2302
|
-
if (this.props.shader ===
|
|
2569
|
+
set shader(shader: CoreShaderNode<any> | null) {
|
|
2570
|
+
if (this.props.shader === shader) {
|
|
2303
2571
|
return;
|
|
2304
2572
|
}
|
|
2573
|
+
if (shader === null) {
|
|
2574
|
+
this.hasShaderUpdater = false;
|
|
2575
|
+
this.props.shader = this.stage.defShaderNode;
|
|
2576
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
2577
|
+
return;
|
|
2578
|
+
}
|
|
2579
|
+
if (shader.shaderKey !== 'default') {
|
|
2580
|
+
this.hasShaderUpdater = shader.update !== undefined;
|
|
2581
|
+
this.hasShaderTimeFn = shader.time !== undefined;
|
|
2582
|
+
shader.attachNode(this);
|
|
2583
|
+
}
|
|
2305
2584
|
|
|
2306
|
-
this.
|
|
2307
|
-
|
|
2308
|
-
|
|
2585
|
+
if (this.hasShaderTimeFn === true) {
|
|
2586
|
+
this.stage.trackTimedNode(this);
|
|
2587
|
+
} else {
|
|
2588
|
+
this.stage.untrackTimedNode(this);
|
|
2589
|
+
}
|
|
2590
|
+
this.props.shader = shader;
|
|
2591
|
+
this.setUpdateType(UpdateType.IsRenderable | UpdateType.RecalcUniforms);
|
|
2309
2592
|
}
|
|
2310
2593
|
|
|
2311
2594
|
get src(): string | null {
|
|
@@ -2326,8 +2609,8 @@ export class CoreNode extends EventEmitter {
|
|
|
2326
2609
|
|
|
2327
2610
|
this.texture = this.stage.txManager.createTexture('ImageTexture', {
|
|
2328
2611
|
src: imageUrl,
|
|
2329
|
-
|
|
2330
|
-
|
|
2612
|
+
w: this.props.w,
|
|
2613
|
+
h: this.props.h,
|
|
2331
2614
|
type: this.props.imageType,
|
|
2332
2615
|
sx: this.props.srcX,
|
|
2333
2616
|
sy: this.props.srcY,
|
|
@@ -2381,16 +2664,14 @@ export class CoreNode extends EventEmitter {
|
|
|
2381
2664
|
}
|
|
2382
2665
|
|
|
2383
2666
|
/**
|
|
2384
|
-
* Returns the framebuffer dimensions of the
|
|
2385
|
-
* If the node has a render texture, the dimensions are the same as the node's dimensions.
|
|
2386
|
-
* If the node does not have a render texture, the dimensions are inherited from the parent.
|
|
2387
|
-
* If the node parent has a render texture and the node is a render texture, the nodes dimensions are used.
|
|
2667
|
+
* Returns the framebuffer dimensions of the RTT parent
|
|
2388
2668
|
*/
|
|
2389
|
-
get
|
|
2390
|
-
if (this.
|
|
2391
|
-
return this.
|
|
2669
|
+
get parentFramebufferDimensions(): Dimensions | null {
|
|
2670
|
+
if (this.rttParent !== null) {
|
|
2671
|
+
return this.rttParent.framebufferDimensions;
|
|
2392
2672
|
}
|
|
2393
|
-
|
|
2673
|
+
this.rttParent = this.findParentRTTNode();
|
|
2674
|
+
return this.rttParent ? this.rttParent.framebufferDimensions : null;
|
|
2394
2675
|
}
|
|
2395
2676
|
|
|
2396
2677
|
/**
|
|
@@ -2418,41 +2699,38 @@ export class CoreNode extends EventEmitter {
|
|
|
2418
2699
|
|
|
2419
2700
|
const oldTexture = this.props.texture;
|
|
2420
2701
|
if (oldTexture) {
|
|
2421
|
-
oldTexture.setRenderableOwner(this, false);
|
|
2422
2702
|
this.unloadTexture();
|
|
2703
|
+
if (this.autosizer !== null && value === null) {
|
|
2704
|
+
this.autosizer.setMode(AutosizeMode.Children); // Set to children size mode
|
|
2705
|
+
}
|
|
2423
2706
|
}
|
|
2424
2707
|
|
|
2708
|
+
this.textureCoords = undefined;
|
|
2425
2709
|
this.props.texture = value;
|
|
2426
2710
|
if (value !== null) {
|
|
2427
|
-
|
|
2711
|
+
if (this.autosizer !== null) {
|
|
2712
|
+
this.autosizer.setMode(AutosizeMode.Texture); // Set to texture size mode
|
|
2713
|
+
}
|
|
2714
|
+
value.setRenderableOwner(this._id, this.isRenderable);
|
|
2428
2715
|
this.loadTexture();
|
|
2429
2716
|
}
|
|
2430
2717
|
|
|
2431
2718
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
2719
|
+
this.updateIsSimple();
|
|
2432
2720
|
}
|
|
2433
2721
|
|
|
2434
2722
|
set textureOptions(value: TextureOptions) {
|
|
2435
2723
|
this.props.textureOptions = value;
|
|
2724
|
+
if (this.stage.calculateTextureCoord === true && value !== null) {
|
|
2725
|
+
this.textureCoords = this.stage.renderer.getTextureCoords!(this);
|
|
2726
|
+
}
|
|
2727
|
+
this.updateIsSimple();
|
|
2436
2728
|
}
|
|
2437
2729
|
|
|
2438
2730
|
get textureOptions(): TextureOptions {
|
|
2439
2731
|
return this.props.textureOptions;
|
|
2440
2732
|
}
|
|
2441
2733
|
|
|
2442
|
-
get strictBounds(): boolean {
|
|
2443
|
-
return this.props.strictBounds;
|
|
2444
|
-
}
|
|
2445
|
-
|
|
2446
|
-
set strictBounds(v) {
|
|
2447
|
-
if (v === this.props.strictBounds) {
|
|
2448
|
-
return;
|
|
2449
|
-
}
|
|
2450
|
-
|
|
2451
|
-
this.props.strictBounds = v;
|
|
2452
|
-
this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
2453
|
-
this.childUpdateType |= UpdateType.RenderBounds | UpdateType.Children;
|
|
2454
|
-
}
|
|
2455
|
-
|
|
2456
2734
|
set interactive(value: boolean | undefined) {
|
|
2457
2735
|
this.props.interactive = value;
|
|
2458
2736
|
// Update Stage's interactive Set
|
|
@@ -2465,6 +2743,11 @@ export class CoreNode extends EventEmitter {
|
|
|
2465
2743
|
return this.props.interactive;
|
|
2466
2744
|
}
|
|
2467
2745
|
|
|
2746
|
+
setRTTUpdates(type: number) {
|
|
2747
|
+
this.hasRTTupdates = true;
|
|
2748
|
+
this.parent?.setRTTUpdates(type);
|
|
2749
|
+
}
|
|
2750
|
+
|
|
2468
2751
|
animate(
|
|
2469
2752
|
props: Partial<CoreNodeAnimateProps>,
|
|
2470
2753
|
settings: Partial<AnimationSettings>,
|
|
@@ -2483,5 +2766,70 @@ export class CoreNode extends EventEmitter {
|
|
|
2483
2766
|
// no-op
|
|
2484
2767
|
}
|
|
2485
2768
|
|
|
2769
|
+
/**
|
|
2770
|
+
* Add a texture to the current RenderOp.
|
|
2771
|
+
*
|
|
2772
|
+
* @param texture
|
|
2773
|
+
* @returns Assigned Texture Index of the texture in the render op
|
|
2774
|
+
*/
|
|
2775
|
+
addTexture(texture: WebGlCtxTexture): number {
|
|
2776
|
+
const textures = this.renderOpTextures;
|
|
2777
|
+
const length = textures.length;
|
|
2778
|
+
|
|
2779
|
+
for (let i = 0; i < length; i++) {
|
|
2780
|
+
if (textures[i] === texture) {
|
|
2781
|
+
return i;
|
|
2782
|
+
}
|
|
2783
|
+
}
|
|
2784
|
+
|
|
2785
|
+
if (length >= 1) {
|
|
2786
|
+
return 0xffffffff;
|
|
2787
|
+
}
|
|
2788
|
+
|
|
2789
|
+
textures.push(texture);
|
|
2790
|
+
return length;
|
|
2791
|
+
}
|
|
2792
|
+
|
|
2793
|
+
draw(renderer: WebGlRenderer) {
|
|
2794
|
+
const { glw, options, stage } = renderer;
|
|
2795
|
+
const shader = this.props.shader as any;
|
|
2796
|
+
|
|
2797
|
+
stage.shManager.useShader(shader.program);
|
|
2798
|
+
shader.program.bindRenderOp(this);
|
|
2799
|
+
|
|
2800
|
+
// Clipping
|
|
2801
|
+
if (this.clippingRect.valid === true) {
|
|
2802
|
+
const pixelRatio =
|
|
2803
|
+
USE_RTT && this.parentHasRenderTexture ? 1 : stage.pixelRatio;
|
|
2804
|
+
|
|
2805
|
+
const clipX = Math.round(this.clippingRect.x * pixelRatio);
|
|
2806
|
+
const clipWidth = Math.round(this.clippingRect.width * pixelRatio);
|
|
2807
|
+
const clipHeight = Math.round(this.clippingRect.height * pixelRatio);
|
|
2808
|
+
let clipY = Math.round(
|
|
2809
|
+
options.canvas.height - clipHeight - this.clippingRect.y * pixelRatio,
|
|
2810
|
+
);
|
|
2811
|
+
// if parent has render texture, we need to adjust the scissor rect
|
|
2812
|
+
// to be relative to the parent's framebuffer
|
|
2813
|
+
if (USE_RTT && this.parentHasRenderTexture) {
|
|
2814
|
+
clipY = this.parentFramebufferDimensions
|
|
2815
|
+
? this.parentFramebufferDimensions.h - this.props.h
|
|
2816
|
+
: 0;
|
|
2817
|
+
}
|
|
2818
|
+
|
|
2819
|
+
glw.setScissorTest(true);
|
|
2820
|
+
glw.scissor(clipX, clipY, clipWidth, clipHeight);
|
|
2821
|
+
} else {
|
|
2822
|
+
glw.setScissorTest(false);
|
|
2823
|
+
}
|
|
2824
|
+
|
|
2825
|
+
const quadIdx = (this.renderOpBufferIdx / 20) * 6 * 2;
|
|
2826
|
+
glw.drawElements(
|
|
2827
|
+
glw.TRIANGLES,
|
|
2828
|
+
6 * this.numQuads,
|
|
2829
|
+
glw.UNSIGNED_SHORT,
|
|
2830
|
+
quadIdx,
|
|
2831
|
+
);
|
|
2832
|
+
}
|
|
2833
|
+
|
|
2486
2834
|
//#endregion Properties
|
|
2487
2835
|
}
|