@lightningjs/renderer 0.9.3 → 1.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -82
- package/dist/exports/index.d.ts +40 -3
- package/dist/exports/index.js +35 -3
- package/dist/exports/index.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +462 -46
- package/dist/src/core/CoreNode.js +171 -103
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.d.ts +19 -8
- package/dist/src/core/CoreShaderManager.js +21 -21
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +30 -4
- package/dist/src/core/CoreTextNode.js +24 -1
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +31 -82
- package/dist/src/core/CoreTextureManager.js +39 -126
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +67 -9
- package/dist/src/core/Stage.js +174 -30
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureMemoryManager.d.ts +97 -8
- package/dist/src/core/TextureMemoryManager.js +142 -19
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.d.ts +14 -6
- package/dist/src/core/animations/CoreAnimation.js +136 -44
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.js +59 -52
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +1 -0
- package/dist/src/core/lib/utils.js +3 -2
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/platform.js +7 -1
- package/dist/src/core/platform.js.map +1 -1
- package/dist/src/core/renderers/CoreContextTexture.d.ts +3 -2
- package/dist/src/core/renderers/CoreContextTexture.js +7 -1
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +5 -1
- package/dist/src/core/renderers/CoreRenderer.js +0 -1
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +3 -0
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +16 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +2 -5
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +2 -2
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +7 -10
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +3 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +47 -9
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/newShader/abcMock.js +2 -0
- package/dist/src/core/renderers/webgl/newShader/abcMock.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +24 -8
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +70 -37
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +8 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +103 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +3 -18
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +5 -2
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +4 -36
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +3 -2
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +4 -2
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +2 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +4 -36
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +11 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +5 -2
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +10 -26
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +116 -365
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -2
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +2 -2
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +2 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +3 -2
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
- package/dist/src/core/textures/ColorTexture.d.ts +1 -1
- package/dist/src/core/textures/ColorTexture.js +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
- package/dist/src/core/textures/NoiseTexture.js +3 -0
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +2 -2
- package/dist/src/core/textures/SubTexture.js +5 -1
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +23 -2
- package/dist/src/core/textures/Texture.js +32 -3
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +7 -0
- package/dist/src/core/utils.js +12 -10
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/effectsMock.d.ts +13 -0
- package/dist/src/effectsMock.js +62 -0
- package/dist/src/effectsMock.js.map +1 -0
- package/dist/src/main-api/DynamicShaderController.d.ts +28 -0
- package/dist/src/main-api/DynamicShaderController.js +55 -0
- package/dist/src/main-api/DynamicShaderController.js.map +1 -0
- package/dist/src/main-api/INode.d.ts +43 -463
- package/dist/src/main-api/INode.js +1 -19
- package/dist/src/main-api/INode.js.map +1 -1
- package/dist/src/main-api/Inspector.d.ts +10 -10
- package/dist/src/main-api/Inspector.js +18 -15
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +28 -24
- package/dist/src/main-api/Renderer.js +22 -103
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/main-api/ShaderController.d.ts +31 -0
- package/dist/src/main-api/ShaderController.js +37 -0
- package/dist/src/main-api/ShaderController.js.map +1 -0
- package/dist/src/test.js +4 -0
- package/dist/src/test.js.map +1 -0
- package/dist/src/utils.d.ts +1 -0
- package/dist/src/utils.js +7 -0
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/index.ts +60 -3
- package/package.json +8 -7
- package/src/core/CoreNode.test.ts +93 -0
- package/src/core/CoreNode.ts +675 -187
- package/src/core/CoreShaderManager.ts +63 -31
- package/src/core/CoreTextNode.ts +41 -9
- package/src/core/CoreTextureManager.ts +55 -175
- package/src/core/Stage.ts +199 -43
- package/src/core/TextureMemoryManager.ts +231 -22
- package/src/core/animations/CoreAnimation.ts +193 -68
- package/src/core/lib/ImageWorker.ts +79 -52
- package/src/core/lib/utils.ts +5 -2
- package/src/core/platform.ts +8 -1
- package/src/core/renderers/CoreContextTexture.ts +9 -2
- package/src/core/renderers/CoreRenderer.ts +5 -2
- package/src/core/renderers/canvas/CanvasCoreRenderer.ts +20 -1
- package/src/core/renderers/canvas/CanvasCoreTexture.ts +2 -6
- package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +2 -2
- package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +7 -11
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +51 -9
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +114 -55
- package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +2 -2
- package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +2 -2
- package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +2 -2
- package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +2 -2
- package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +2 -2
- package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +129 -3
- package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +7 -15
- package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +5 -2
- package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +6 -15
- package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +6 -2
- package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +10 -2
- package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +2 -1
- package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +6 -15
- package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +20 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +14 -15
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -2
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -1
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +139 -447
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -3
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -2
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +4 -2
- package/src/core/text-rendering/renderers/TextRenderer.ts +3 -2
- package/src/core/textures/ColorTexture.ts +1 -1
- package/src/core/textures/ImageTexture.ts +1 -1
- package/src/core/textures/NoiseTexture.ts +4 -1
- package/src/core/textures/SubTexture.ts +7 -7
- package/src/core/textures/Texture.ts +46 -3
- package/src/core/utils.ts +12 -11
- package/src/main-api/DynamicShaderController.ts +97 -0
- package/src/main-api/INode.ts +56 -479
- package/src/main-api/Inspector.ts +37 -39
- package/src/main-api/Renderer.ts +543 -0
- package/src/main-api/ShaderController.ts +81 -0
- package/src/main-api/utils.ts +45 -0
- package/src/utils.ts +8 -0
- package/dist/exports/core-api.d.ts +0 -74
- package/dist/exports/core-api.js +0 -96
- package/dist/exports/core-api.js.map +0 -1
- package/dist/exports/main-api.d.ts +0 -30
- package/dist/exports/main-api.js +0 -45
- package/dist/exports/main-api.js.map +0 -1
- package/dist/src/core/CoreExtension.d.ts +0 -12
- package/dist/src/core/CoreExtension.js +0 -29
- package/dist/src/core/CoreExtension.js.map +0 -1
- package/dist/src/core/renderers/webgl/newShader/effectsMock.js +0 -36
- package/dist/src/core/renderers/webgl/newShader/effectsMock.js.map +0 -1
- package/dist/src/main-api/ICoreDriver.d.ts +0 -24
- package/dist/src/main-api/ICoreDriver.js +0 -20
- package/dist/src/main-api/ICoreDriver.js.map +0 -1
- package/dist/src/main-api/RendererMain.d.ts +0 -378
- package/dist/src/main-api/RendererMain.js +0 -367
- package/dist/src/main-api/RendererMain.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
- package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -21
- package/dist/src/render-drivers/main/MainCoreDriver.js +0 -115
- package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -101
- package/dist/src/render-drivers/main/MainOnlyNode.js +0 -425
- package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
- package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -204
- package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -93
- package/dist/src/render-drivers/threadx/NodeStruct.js +0 -290
- package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -40
- package/dist/src/render-drivers/threadx/SharedNode.js +0 -61
- package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
- package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -203
- package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -25
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -232
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -24
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -113
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -46
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -160
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -184
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -109
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/renderer.js +0 -147
- package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
- package/dist/src/render-drivers/utils.d.ts +0 -12
- package/dist/src/render-drivers/utils.js +0 -74
- package/dist/src/render-drivers/utils.js.map +0 -1
- package/exports/core-api.ts +0 -102
- package/exports/main-api.ts +0 -60
- package/src/core/CoreExtension.ts +0 -32
- package/src/main-api/ICoreDriver.ts +0 -68
- package/src/main-api/RendererMain.ts +0 -685
- package/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.ts +0 -45
- package/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.ts +0 -154
- package/src/main-api/texture-usage-trackers/TextureUsageTracker.ts +0 -54
- package/src/render-drivers/main/MainCoreDriver.ts +0 -159
- package/src/render-drivers/main/MainOnlyNode.ts +0 -553
- package/src/render-drivers/main/MainOnlyTextNode.ts +0 -261
- package/src/render-drivers/threadx/NodeStruct.ts +0 -320
- package/src/render-drivers/threadx/SharedNode.ts +0 -101
- package/src/render-drivers/threadx/TextNodeStruct.ts +0 -213
- package/src/render-drivers/threadx/ThreadXCoreDriver.ts +0 -291
- package/src/render-drivers/threadx/ThreadXMainAnimationController.ts +0 -135
- package/src/render-drivers/threadx/ThreadXMainNode.ts +0 -201
- package/src/render-drivers/threadx/ThreadXMainTextNode.ts +0 -85
- package/src/render-drivers/threadx/ThreadXRendererMessage.ts +0 -112
- package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +0 -253
- package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +0 -151
- package/src/render-drivers/threadx/worker/renderer.ts +0 -156
- package/src/render-drivers/utils.ts +0 -102
- /package/dist/src/core/renderers/webgl/newShader/{effectsMock.d.ts → abcMock.d.ts} +0 -0
- /package/dist/src/{render-drivers/threadx/worker/renderer.d.ts → test.d.ts} +0 -0
|
@@ -17,8 +17,7 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
import type
|
|
21
|
-
import type { INodeAnimatableProps } from '../../main-api/INode.js';
|
|
20
|
+
import { type CoreNode, type CoreNodeAnimateProps } from '../CoreNode.js';
|
|
22
21
|
import { getTimingFunction } from '../utils.js';
|
|
23
22
|
import { mergeColorProgress } from '../../utils.js';
|
|
24
23
|
import { EventEmitter } from '../../common/EventEmitter.js';
|
|
@@ -33,26 +32,69 @@ export interface AnimationSettings {
|
|
|
33
32
|
stopMethod: 'reverse' | 'reset' | false;
|
|
34
33
|
}
|
|
35
34
|
|
|
35
|
+
type PropValues = {
|
|
36
|
+
start: number;
|
|
37
|
+
target: number;
|
|
38
|
+
};
|
|
39
|
+
type PropValuesMap = Record<string, Record<string, PropValues>>;
|
|
40
|
+
|
|
36
41
|
export class CoreAnimation extends EventEmitter {
|
|
37
|
-
public propStartValues: Partial<INodeAnimatableProps> = {};
|
|
38
|
-
public restoreValues: Partial<INodeAnimatableProps> = {};
|
|
39
42
|
public settings: AnimationSettings;
|
|
40
43
|
private progress = 0;
|
|
41
44
|
private delayFor = 0;
|
|
42
45
|
private timingFunction: (t: number) => number | undefined;
|
|
43
|
-
|
|
46
|
+
|
|
47
|
+
propValuesMap: PropValuesMap = {};
|
|
48
|
+
dynPropValuesMap: PropValuesMap = {};
|
|
44
49
|
|
|
45
50
|
constructor(
|
|
46
51
|
private node: CoreNode,
|
|
47
|
-
private props: Partial<
|
|
52
|
+
private props: Partial<CoreNodeAnimateProps>,
|
|
48
53
|
settings: Partial<AnimationSettings>,
|
|
49
54
|
) {
|
|
50
55
|
super();
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
|
|
57
|
+
for (const key in props) {
|
|
58
|
+
if (key !== 'shaderProps') {
|
|
59
|
+
if (this.propValuesMap['props'] === undefined) {
|
|
60
|
+
this.propValuesMap['props'] = {};
|
|
61
|
+
}
|
|
62
|
+
this.propValuesMap['props'][key] = {
|
|
63
|
+
start: node[key as keyof Omit<CoreNodeAnimateProps, 'shaderProps'>],
|
|
64
|
+
target: props[
|
|
65
|
+
key as keyof Omit<CoreNodeAnimateProps, 'shaderProps'>
|
|
66
|
+
] as number,
|
|
67
|
+
};
|
|
68
|
+
} else if (node.shader.type !== 'DynamicShader') {
|
|
69
|
+
this.propValuesMap['shaderProps'] = {};
|
|
70
|
+
for (const key in props.shaderProps) {
|
|
71
|
+
this.propValuesMap['shaderProps'][key] = {
|
|
72
|
+
start: node.shader.props[key] as number,
|
|
73
|
+
target: props.shaderProps[key] as number,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
} else {
|
|
77
|
+
const shaderPropKeys = Object.keys(props.shaderProps!);
|
|
78
|
+
const spLength = shaderPropKeys.length;
|
|
79
|
+
let j = 0;
|
|
80
|
+
for (; j < spLength; j++) {
|
|
81
|
+
const effectName = shaderPropKeys[j]!;
|
|
82
|
+
const effect = props.shaderProps![effectName]!;
|
|
83
|
+
this.dynPropValuesMap[effectName] = {};
|
|
84
|
+
const effectProps = Object.entries(effect);
|
|
85
|
+
const eLength = effectProps.length;
|
|
86
|
+
|
|
87
|
+
let k = 0;
|
|
88
|
+
for (; k < eLength; k++) {
|
|
89
|
+
const [key, value] = effectProps[k]!;
|
|
90
|
+
this.dynPropValuesMap[effectName]![key] = {
|
|
91
|
+
start: node.shader.props[effectName][key],
|
|
92
|
+
target: value,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
56
98
|
|
|
57
99
|
const easing = settings.easing || 'linear';
|
|
58
100
|
const delay = settings.delay ?? 0;
|
|
@@ -75,28 +117,80 @@ export class CoreAnimation extends EventEmitter {
|
|
|
75
117
|
this.update(0);
|
|
76
118
|
}
|
|
77
119
|
|
|
120
|
+
private restoreValues(
|
|
121
|
+
target: Record<string, number>,
|
|
122
|
+
valueMap: Record<string, PropValues>,
|
|
123
|
+
) {
|
|
124
|
+
const entries = Object.entries(valueMap);
|
|
125
|
+
const eLength = entries.length;
|
|
126
|
+
|
|
127
|
+
for (let i = 0; i < eLength; i++) {
|
|
128
|
+
const [key, value] = entries[i]!;
|
|
129
|
+
target[key] = value.start;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
78
133
|
restore() {
|
|
79
134
|
this.reset();
|
|
80
|
-
(
|
|
81
|
-
(
|
|
82
|
-
this.node
|
|
83
|
-
|
|
84
|
-
|
|
135
|
+
if (this.propValuesMap['props'] !== undefined) {
|
|
136
|
+
this.restoreValues(
|
|
137
|
+
this.node as unknown as Record<string, number>,
|
|
138
|
+
this.propValuesMap['props'],
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
if (this.propValuesMap['shaderProps'] !== undefined) {
|
|
142
|
+
this.restoreValues(
|
|
143
|
+
this.node.shader.props as Record<string, number>,
|
|
144
|
+
this.propValuesMap['shaderProps'],
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const dynEntries = Object.keys(this.dynPropValuesMap);
|
|
149
|
+
const dynEntriesL = dynEntries.length;
|
|
150
|
+
if (dynEntriesL > 0) {
|
|
151
|
+
let i = 0;
|
|
152
|
+
for (; i < dynEntriesL; i++) {
|
|
153
|
+
const key = dynEntries[i]!;
|
|
154
|
+
this.restoreValues(
|
|
155
|
+
this.node.shader.props[key],
|
|
156
|
+
this.dynPropValuesMap[key]!,
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
private reverseValues(valueMap: Record<string, PropValues>) {
|
|
163
|
+
const entries = Object.entries(valueMap);
|
|
164
|
+
const eLength = entries.length;
|
|
165
|
+
|
|
166
|
+
for (let i = 0; i < eLength; i++) {
|
|
167
|
+
const [key, value] = entries[i]!;
|
|
168
|
+
valueMap[key] = {
|
|
169
|
+
start: value.target,
|
|
170
|
+
target: value.start,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
85
173
|
}
|
|
86
174
|
|
|
87
175
|
reverse() {
|
|
88
176
|
this.progress = 0;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
)
|
|
177
|
+
|
|
178
|
+
if (this.propValuesMap['props'] !== undefined) {
|
|
179
|
+
this.reverseValues(this.propValuesMap['props']);
|
|
180
|
+
}
|
|
181
|
+
if (this.propValuesMap['shaderProps'] !== undefined) {
|
|
182
|
+
this.reverseValues(this.propValuesMap['shaderProps']);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const dynEntries = Object.keys(this.dynPropValuesMap);
|
|
186
|
+
const dynEntriesL = dynEntries.length;
|
|
187
|
+
if (dynEntriesL > 0) {
|
|
188
|
+
let i = 0;
|
|
189
|
+
for (; i < dynEntriesL; i++) {
|
|
190
|
+
const key = dynEntries[i]!;
|
|
191
|
+
this.reverseValues(this.dynPropValuesMap[key]!);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
100
194
|
|
|
101
195
|
// restore stop method if we are not looping
|
|
102
196
|
if (!this.settings.loop) {
|
|
@@ -108,6 +202,53 @@ export class CoreAnimation extends EventEmitter {
|
|
|
108
202
|
return (this.timingFunction(p) || p) * (e - s) + s;
|
|
109
203
|
}
|
|
110
204
|
|
|
205
|
+
updateValue(
|
|
206
|
+
propName: string,
|
|
207
|
+
propValue: number,
|
|
208
|
+
startValue: number,
|
|
209
|
+
easing: string | undefined,
|
|
210
|
+
): number {
|
|
211
|
+
if (this.progress === 1) {
|
|
212
|
+
return propValue;
|
|
213
|
+
}
|
|
214
|
+
if (this.progress === 0) {
|
|
215
|
+
return startValue;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const endValue = propValue;
|
|
219
|
+
if (propName.indexOf('color') !== -1) {
|
|
220
|
+
if (startValue === endValue) {
|
|
221
|
+
return startValue;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (easing) {
|
|
225
|
+
const easingProgressValue =
|
|
226
|
+
this.timingFunction(this.progress) || this.progress;
|
|
227
|
+
return mergeColorProgress(startValue, endValue, easingProgressValue);
|
|
228
|
+
}
|
|
229
|
+
return mergeColorProgress(startValue, endValue, this.progress);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (easing) {
|
|
233
|
+
return this.applyEasing(this.progress, startValue, endValue);
|
|
234
|
+
}
|
|
235
|
+
return startValue + (endValue - startValue) * this.progress;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
private updateValues(
|
|
239
|
+
target: Record<string, number>,
|
|
240
|
+
valueMap: Record<string, PropValues>,
|
|
241
|
+
easing: string | undefined,
|
|
242
|
+
) {
|
|
243
|
+
const entries = Object.entries(valueMap);
|
|
244
|
+
const eLength = entries.length;
|
|
245
|
+
|
|
246
|
+
for (let i = 0; i < eLength; i++) {
|
|
247
|
+
const [key, value] = entries[i]!;
|
|
248
|
+
target[key] = this.updateValue(key, value.target, value.start, easing);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
111
252
|
update(dt: number) {
|
|
112
253
|
const { duration, loop, easing, stopMethod } = this.settings;
|
|
113
254
|
const { delayFor } = this;
|
|
@@ -153,51 +294,35 @@ export class CoreAnimation extends EventEmitter {
|
|
|
153
294
|
}
|
|
154
295
|
}
|
|
155
296
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
const easingProgressValue =
|
|
171
|
-
this.timingFunction(this.progress) || this.progress;
|
|
172
|
-
const easingColorValue = mergeColorProgress(
|
|
173
|
-
startValue,
|
|
174
|
-
endValue,
|
|
175
|
-
easingProgressValue,
|
|
176
|
-
);
|
|
177
|
-
this.node[propName] = easingColorValue;
|
|
178
|
-
continue;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
this.node[propName] = mergeColorProgress(
|
|
182
|
-
startValue,
|
|
183
|
-
endValue,
|
|
184
|
-
this.progress,
|
|
185
|
-
);
|
|
186
|
-
continue;
|
|
187
|
-
}
|
|
297
|
+
if (this.propValuesMap['props'] !== undefined) {
|
|
298
|
+
this.updateValues(
|
|
299
|
+
this.node as unknown as Record<string, number>,
|
|
300
|
+
this.propValuesMap['props'],
|
|
301
|
+
easing,
|
|
302
|
+
);
|
|
303
|
+
}
|
|
304
|
+
if (this.propValuesMap['shaderProps'] !== undefined) {
|
|
305
|
+
this.updateValues(
|
|
306
|
+
this.node.shader.props as Record<string, number>,
|
|
307
|
+
this.propValuesMap['shaderProps'],
|
|
308
|
+
easing,
|
|
309
|
+
);
|
|
310
|
+
}
|
|
188
311
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
312
|
+
const dynEntries = Object.keys(this.dynPropValuesMap);
|
|
313
|
+
const dynEntriesL = dynEntries.length;
|
|
314
|
+
if (dynEntriesL > 0) {
|
|
315
|
+
let i = 0;
|
|
316
|
+
for (; i < dynEntriesL; i++) {
|
|
317
|
+
const key = dynEntries[i]!;
|
|
318
|
+
this.updateValues(
|
|
319
|
+
this.node.shader.props[key],
|
|
320
|
+
this.dynPropValuesMap[key]!,
|
|
321
|
+
easing,
|
|
194
322
|
);
|
|
195
|
-
continue;
|
|
196
323
|
}
|
|
197
|
-
|
|
198
|
-
this.node[propName] =
|
|
199
|
-
startValue + (endValue - startValue) * this.progress;
|
|
200
324
|
}
|
|
325
|
+
|
|
201
326
|
if (this.progress === 1) {
|
|
202
327
|
this.emit('finished', {});
|
|
203
328
|
}
|
|
@@ -20,6 +20,84 @@
|
|
|
20
20
|
import { type TextureData } from '../textures/Texture.js';
|
|
21
21
|
|
|
22
22
|
type MessageCallback = [(value: any) => void, (reason: any) => void];
|
|
23
|
+
interface getImageReturn {
|
|
24
|
+
data: ImageBitmap;
|
|
25
|
+
premultiplyAlpha: boolean | null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Note that, within the createImageWorker function, we must only use ES5 code to keep it ES5-valid after babelifying, as
|
|
30
|
+
* the converted code of this section is converted to a blob and used as the js of the web worker thread.
|
|
31
|
+
*
|
|
32
|
+
* The createImageWorker function is a web worker that fetches an image from a URL and returns an ImageBitmap object.
|
|
33
|
+
* The eslint @typescript rule is disabled for the entire function because the function is converted to a blob and used as the
|
|
34
|
+
* js of the web worker thread, so the typescript syntax is not valid in this context.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/* eslint-disable */
|
|
38
|
+
const createImageWorker = function worker() {
|
|
39
|
+
function hasAlphaChannel(mimeType: string) {
|
|
40
|
+
return mimeType.indexOf('image/png') !== -1;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function getImage(
|
|
44
|
+
src: string,
|
|
45
|
+
premultiplyAlpha: boolean | null,
|
|
46
|
+
): Promise<getImageReturn> {
|
|
47
|
+
return new Promise(function (resolve, reject) {
|
|
48
|
+
var xhr = new XMLHttpRequest();
|
|
49
|
+
xhr.open('GET', src, true);
|
|
50
|
+
xhr.responseType = 'blob';
|
|
51
|
+
|
|
52
|
+
xhr.onload = function () {
|
|
53
|
+
if (xhr.status !== 200) {
|
|
54
|
+
return reject(new Error('Failed to load image: ' + xhr.statusText));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
var blob = xhr.response;
|
|
58
|
+
var withAlphaChannel =
|
|
59
|
+
premultiplyAlpha !== undefined
|
|
60
|
+
? premultiplyAlpha
|
|
61
|
+
: hasAlphaChannel(blob.type);
|
|
62
|
+
|
|
63
|
+
createImageBitmap(blob, {
|
|
64
|
+
premultiplyAlpha: withAlphaChannel ? 'premultiply' : 'none',
|
|
65
|
+
colorSpaceConversion: 'none',
|
|
66
|
+
imageOrientation: 'none',
|
|
67
|
+
})
|
|
68
|
+
.then(function (data) {
|
|
69
|
+
resolve({ data, premultiplyAlpha: premultiplyAlpha });
|
|
70
|
+
})
|
|
71
|
+
.catch(function (error) {
|
|
72
|
+
reject(error);
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
xhr.onerror = function () {
|
|
77
|
+
reject(
|
|
78
|
+
new Error('Network error occurred while trying to fetch the image.'),
|
|
79
|
+
);
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
xhr.send();
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
self.onmessage = (event) => {
|
|
87
|
+
var src = event.data.src;
|
|
88
|
+
var id = event.data.id;
|
|
89
|
+
var premultiplyAlpha = event.data.premultiplyAlpha;
|
|
90
|
+
|
|
91
|
+
getImage(src, premultiplyAlpha)
|
|
92
|
+
.then(function (data) {
|
|
93
|
+
self.postMessage({ id: id, src: src, data: data });
|
|
94
|
+
})
|
|
95
|
+
.catch(function (error) {
|
|
96
|
+
self.postMessage({ id: id, src: src, error: error.message });
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
/* eslint-enable */
|
|
23
101
|
|
|
24
102
|
export class ImageWorkerManager {
|
|
25
103
|
imageWorkersEnabled = true;
|
|
@@ -55,58 +133,7 @@ export class ImageWorkerManager {
|
|
|
55
133
|
}
|
|
56
134
|
|
|
57
135
|
private createWorkers(numWorkers = 1): Worker[] {
|
|
58
|
-
const workerCode =
|
|
59
|
-
function hasAlphaChannel(mimeType) {
|
|
60
|
-
return (mimeType.indexOf("image/png") !== -1);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function getImage(src, premultiplyAlpha) {
|
|
64
|
-
return new Promise(function(resolve, reject) {
|
|
65
|
-
var xhr = new XMLHttpRequest();
|
|
66
|
-
xhr.open('GET', src, true);
|
|
67
|
-
xhr.responseType = 'blob';
|
|
68
|
-
|
|
69
|
-
xhr.onload = function() {
|
|
70
|
-
if (xhr.status === 200) {
|
|
71
|
-
var blob = xhr.response;
|
|
72
|
-
var hasAlphaChannel = premultiplyAlpha !== undefined ? premultiplyAlpha : hasAlphaChannel(blob.type);
|
|
73
|
-
|
|
74
|
-
createImageBitmap(blob, {
|
|
75
|
-
premultiplyAlpha: hasAlphaChannel ? 'premultiply' : 'none',
|
|
76
|
-
colorSpaceConversion: 'none',
|
|
77
|
-
imageOrientation: 'none'
|
|
78
|
-
}).then(function(data) {
|
|
79
|
-
resolve({ data: data, premultiplyAlpha: premultiplyAlpha });
|
|
80
|
-
}).catch(function(error) {
|
|
81
|
-
reject(error);
|
|
82
|
-
});
|
|
83
|
-
} else {
|
|
84
|
-
reject(new Error('Failed to load image: ' + xhr.statusText));
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
xhr.onerror = function() {
|
|
89
|
-
reject(new Error('Network error occurred while trying to fetch the image.'));
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
xhr.send();
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
self.onmessage = (event) => {
|
|
97
|
-
var id = event.data.id;
|
|
98
|
-
var src = event.data.src;
|
|
99
|
-
var premultiplyAlpha = event.data.premultiplyAlpha;
|
|
100
|
-
|
|
101
|
-
getImage(src, premultiplyAlpha)
|
|
102
|
-
.then(function(data) {
|
|
103
|
-
self.postMessage({ id: id, data: data }, [data.data]);
|
|
104
|
-
})
|
|
105
|
-
.catch(function(error) {
|
|
106
|
-
self.postMessage({ id: id, error: error.message });
|
|
107
|
-
});
|
|
108
|
-
};
|
|
109
|
-
`;
|
|
136
|
+
const workerCode = `${createImageWorker.toString()} worker()`;
|
|
110
137
|
|
|
111
138
|
const blob: Blob = new Blob([workerCode.replace('"use strict";', '')], {
|
|
112
139
|
type: 'application/javascript',
|
package/src/core/lib/utils.ts
CHANGED
|
@@ -17,7 +17,10 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
+
export const PROTOCOL_REGEX = /^(data|ftps?|https?):/;
|
|
21
|
+
|
|
20
22
|
export type RGBA = [r: number, g: number, b: number, a: number];
|
|
23
|
+
|
|
21
24
|
export const getNormalizedRgbaComponents = (rgba: number): RGBA => {
|
|
22
25
|
const r = rgba >>> 24;
|
|
23
26
|
const g = (rgba >>> 16) & 0xff;
|
|
@@ -250,8 +253,8 @@ export function isRectPositive(rect: Rect): boolean {
|
|
|
250
253
|
}
|
|
251
254
|
|
|
252
255
|
export function convertUrlToAbsolute(url: string): string {
|
|
253
|
-
// handle local file imports
|
|
254
|
-
if (self.location.protocol === 'file:') {
|
|
256
|
+
// handle local file imports if the url isn't remote resource or data blob
|
|
257
|
+
if (self.location.protocol === 'file:' && !PROTOCOL_REGEX.test(url)) {
|
|
255
258
|
const path = self.location.pathname.split('/');
|
|
256
259
|
path.pop();
|
|
257
260
|
const basePath = path.join('/');
|
package/src/core/platform.ts
CHANGED
|
@@ -25,21 +25,28 @@ import type { Stage } from './Stage.js';
|
|
|
25
25
|
export const startLoop = (stage: Stage) => {
|
|
26
26
|
let isIdle = false;
|
|
27
27
|
const runLoop = () => {
|
|
28
|
+
stage.updateFrameTime();
|
|
28
29
|
stage.updateAnimations();
|
|
29
30
|
|
|
30
31
|
if (!stage.hasSceneUpdates()) {
|
|
31
32
|
// We still need to calculate the fps else it looks like the app is frozen
|
|
32
33
|
stage.calculateFps();
|
|
33
34
|
setTimeout(runLoop, 16.666666666666668);
|
|
35
|
+
|
|
34
36
|
if (!isIdle) {
|
|
35
|
-
stage.
|
|
37
|
+
if (stage.txMemManager.checkCleanup()) {
|
|
38
|
+
stage.txMemManager.cleanup();
|
|
39
|
+
}
|
|
40
|
+
stage.eventBus.emit('idle');
|
|
36
41
|
isIdle = true;
|
|
37
42
|
}
|
|
43
|
+
stage.flushFrameEvents();
|
|
38
44
|
return;
|
|
39
45
|
}
|
|
40
46
|
|
|
41
47
|
isIdle = false;
|
|
42
48
|
stage.drawFrame();
|
|
49
|
+
stage.flushFrameEvents();
|
|
43
50
|
requestAnimationFrame(runLoop);
|
|
44
51
|
};
|
|
45
52
|
requestAnimationFrame(runLoop);
|
|
@@ -21,15 +21,22 @@ import type { TextureMemoryManager } from '../TextureMemoryManager.js';
|
|
|
21
21
|
import type { Texture } from '../textures/Texture.js';
|
|
22
22
|
|
|
23
23
|
export abstract class CoreContextTexture {
|
|
24
|
-
readonly memManager: TextureMemoryManager;
|
|
25
24
|
readonly textureSource: Texture;
|
|
25
|
+
private memManager: TextureMemoryManager;
|
|
26
26
|
|
|
27
27
|
constructor(memManager: TextureMemoryManager, textureSource: Texture) {
|
|
28
28
|
this.memManager = memManager;
|
|
29
29
|
this.textureSource = textureSource;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
protected setTextureMemUse(byteSize: number): void {
|
|
33
|
+
this.memManager.setTextureMemUse(this.textureSource, byteSize);
|
|
34
|
+
}
|
|
35
|
+
|
|
32
36
|
abstract load(): void;
|
|
33
37
|
abstract free(): void;
|
|
34
|
-
|
|
38
|
+
|
|
39
|
+
get renderable(): boolean {
|
|
40
|
+
return this.textureSource.renderable;
|
|
41
|
+
}
|
|
35
42
|
}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import type { Dimensions } from '../../common/CommonTypes.js';
|
|
21
|
+
import type { BaseShaderController } from '../../main-api/ShaderController.js';
|
|
21
22
|
import type { CoreNode } from '../CoreNode.js';
|
|
22
23
|
import type { CoreShaderManager } from '../CoreShaderManager.js';
|
|
23
24
|
import type {
|
|
@@ -27,8 +28,8 @@ import type {
|
|
|
27
28
|
import type { Stage } from '../Stage.js';
|
|
28
29
|
import type { TextureMemoryManager } from '../TextureMemoryManager.js';
|
|
29
30
|
import type { ContextSpy } from '../lib/ContextSpy.js';
|
|
31
|
+
import type { RenderCoords } from '../lib/RenderCoords.js';
|
|
30
32
|
import type { RectWithValid } from '../lib/utils.js';
|
|
31
|
-
import { ColorTexture } from '../textures/ColorTexture.js';
|
|
32
33
|
import type { Texture } from '../textures/Texture.js';
|
|
33
34
|
import { CoreContextTexture } from './CoreContextTexture.js';
|
|
34
35
|
import type { CoreShader } from './CoreShader.js';
|
|
@@ -53,6 +54,7 @@ export interface QuadOptions {
|
|
|
53
54
|
tb: number;
|
|
54
55
|
tc: number;
|
|
55
56
|
td: number;
|
|
57
|
+
renderCoords?: RenderCoords;
|
|
56
58
|
rtt?: boolean;
|
|
57
59
|
parentHasRenderTexture?: boolean;
|
|
58
60
|
framebufferDimensions?: Dimensions;
|
|
@@ -74,7 +76,7 @@ export abstract class CoreRenderer {
|
|
|
74
76
|
public options: CoreRendererOptions;
|
|
75
77
|
public mode: 'webgl' | 'canvas' | undefined;
|
|
76
78
|
|
|
77
|
-
|
|
79
|
+
readonly stage: Stage;
|
|
78
80
|
|
|
79
81
|
//// Core Managers
|
|
80
82
|
txManager: CoreTextureManager;
|
|
@@ -100,4 +102,5 @@ export abstract class CoreRenderer {
|
|
|
100
102
|
abstract renderRTTNodes(): void;
|
|
101
103
|
abstract removeRTTNode(node: CoreNode): void;
|
|
102
104
|
abstract renderToTexture(node: CoreNode): void;
|
|
105
|
+
abstract getDefShaderCtr(): BaseShaderController;
|
|
103
106
|
}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
+
import type { BaseShaderController } from '../../../main-api/ShaderController.js';
|
|
20
21
|
import type { CoreNode } from '../../CoreNode.js';
|
|
21
22
|
import type { CoreShaderManager } from '../../CoreShaderManager.js';
|
|
22
23
|
import { getRgbaComponents, type RGBA } from '../../lib/utils.js';
|
|
@@ -35,6 +36,7 @@ import {
|
|
|
35
36
|
parseColor,
|
|
36
37
|
type IParsedColor,
|
|
37
38
|
} from './internal/ColorUtils.js';
|
|
39
|
+
import { UnsupportedShader } from './shaders/UnsupportedShader.js';
|
|
38
40
|
|
|
39
41
|
export class CanvasCoreRenderer extends CoreRenderer {
|
|
40
42
|
private context: CanvasRenderingContext2D;
|
|
@@ -43,6 +45,8 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
43
45
|
private clearColor: RGBA | undefined;
|
|
44
46
|
public renderToTextureActive = false;
|
|
45
47
|
activeRttNode: CoreNode | null = null;
|
|
48
|
+
private defShaderCtr: BaseShaderController;
|
|
49
|
+
|
|
46
50
|
constructor(options: CoreRendererOptions) {
|
|
47
51
|
super(options);
|
|
48
52
|
|
|
@@ -54,6 +58,17 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
54
58
|
this.context = canvas.getContext('2d') as CanvasRenderingContext2D;
|
|
55
59
|
this.pixelRatio = pixelRatio;
|
|
56
60
|
this.clearColor = clearColor ? getRgbaComponents(clearColor) : undefined;
|
|
61
|
+
|
|
62
|
+
// Stub for default shader controller since the canvas renderer does not
|
|
63
|
+
// (really) support the concept of a shader (yet)
|
|
64
|
+
this.defShaderCtr = {
|
|
65
|
+
type: 'DefaultShader',
|
|
66
|
+
props: {},
|
|
67
|
+
shader: new UnsupportedShader('DefaultShader'),
|
|
68
|
+
getResolvedProps: () => () => {
|
|
69
|
+
return {};
|
|
70
|
+
},
|
|
71
|
+
};
|
|
57
72
|
}
|
|
58
73
|
|
|
59
74
|
reset(): void {
|
|
@@ -104,7 +119,7 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
104
119
|
texture = texture.parentTexture;
|
|
105
120
|
}
|
|
106
121
|
|
|
107
|
-
ctxTexture =
|
|
122
|
+
ctxTexture = texture.ctxTexture as CanvasCoreTexture;
|
|
108
123
|
if (texture.state === 'freed') {
|
|
109
124
|
ctxTexture.load();
|
|
110
125
|
return;
|
|
@@ -209,6 +224,10 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
209
224
|
return this.shManager;
|
|
210
225
|
}
|
|
211
226
|
|
|
227
|
+
override getDefShaderCtr(): BaseShaderController {
|
|
228
|
+
return this.defShaderCtr;
|
|
229
|
+
}
|
|
230
|
+
|
|
212
231
|
renderRTTNodes(): void {
|
|
213
232
|
// noop
|
|
214
233
|
}
|
|
@@ -50,7 +50,7 @@ export class CanvasCoreTexture extends CoreContextTexture {
|
|
|
50
50
|
this.image = undefined;
|
|
51
51
|
this.tintCache = undefined;
|
|
52
52
|
this.textureSource.setState('freed');
|
|
53
|
-
this.
|
|
53
|
+
this.setTextureMemUse(0);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
updateMemSize(): void {
|
|
@@ -60,7 +60,7 @@ export class CanvasCoreTexture extends CoreContextTexture {
|
|
|
60
60
|
const mult = this.tintCache ? 8 : 4;
|
|
61
61
|
if (this.textureSource.dimensions) {
|
|
62
62
|
const { width, height } = this.textureSource.dimensions;
|
|
63
|
-
this.
|
|
63
|
+
this.setTextureMemUse(width * height * mult);
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -119,10 +119,6 @@ export class CanvasCoreTexture extends CoreContextTexture {
|
|
|
119
119
|
return canvas;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
get renderable(): boolean {
|
|
123
|
-
return this.textureSource.renderable;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
122
|
private async onLoadRequest(): Promise<Dimensions> {
|
|
127
123
|
const { data } = await this.textureSource.getTextureData();
|
|
128
124
|
// TODO: canvas from text renderer should be able to provide the canvas directly
|
|
@@ -42,7 +42,7 @@ export class WebGlCoreCtxRenderTexture extends WebGlCoreCtxTexture {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
override async onLoadRequest(): Promise<Dimensions> {
|
|
45
|
-
const { glw
|
|
45
|
+
const { glw } = this;
|
|
46
46
|
const nativeTexture = (this._nativeCtxTexture =
|
|
47
47
|
this.createNativeCtxTexture());
|
|
48
48
|
const { width, height } = this.textureSource;
|
|
@@ -60,7 +60,7 @@ export class WebGlCoreCtxRenderTexture extends WebGlCoreCtxTexture {
|
|
|
60
60
|
);
|
|
61
61
|
|
|
62
62
|
// Update the texture memory manager
|
|
63
|
-
|
|
63
|
+
this.setTextureMemUse(width * height * 4);
|
|
64
64
|
|
|
65
65
|
// Bind the framebuffer
|
|
66
66
|
glw.bindFramebuffer(this.framebuffer);
|