@lightningjs/renderer 0.9.4 → 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 +16 -6
- package/dist/src/core/CoreShaderManager.js +20 -20
- 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.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/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/main-api/DynamicShaderController.d.ts +3 -9
- package/dist/src/main-api/DynamicShaderController.js +18 -17
- package/dist/src/main-api/DynamicShaderController.js.map +1 -1
- 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 +27 -21
- package/dist/src/main-api/Renderer.js +38 -107
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/main-api/ShaderController.d.ts +3 -8
- package/dist/src/main-api/ShaderController.js +8 -3
- package/dist/src/main-api/ShaderController.js.map +1 -1
- 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 +56 -29
- 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 +1 -0
- 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/SpecificNode.d.ts +0 -1
- package/dist/src/core/renderers/SpecificNode.js +0 -19
- package/dist/src/core/renderers/SpecificNode.js.map +0 -1
- package/dist/src/core/renderers/webgl/newShader/effectsMock.d.ts +0 -13
- package/dist/src/core/renderers/webgl/newShader/effectsMock.js +0 -62
- 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.d.ts +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 -62
- 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
|
@@ -66,6 +66,11 @@ import {
|
|
|
66
66
|
} from './renderers/webgl/shaders/effects/HolePunchEffect.js';
|
|
67
67
|
import { WebGlCoreShader } from './renderers/webgl/WebGlCoreShader.js';
|
|
68
68
|
import { UnsupportedShader } from './renderers/canvas/shaders/UnsupportedShader.js';
|
|
69
|
+
import { ShaderController } from '../main-api/ShaderController.js';
|
|
70
|
+
import {
|
|
71
|
+
DynamicShaderController,
|
|
72
|
+
type DynamicEffects,
|
|
73
|
+
} from '../main-api/DynamicShaderController.js';
|
|
69
74
|
|
|
70
75
|
export type { FadeOutEffectProps };
|
|
71
76
|
export type { LinearGradientEffectProps };
|
|
@@ -84,11 +89,6 @@ export interface ShaderMap {
|
|
|
84
89
|
UnsupportedShader: typeof UnsupportedShader;
|
|
85
90
|
}
|
|
86
91
|
|
|
87
|
-
export type ShaderNode<Type extends keyof ShaderMap> = {
|
|
88
|
-
shader: InstanceType<ShaderMap[Type]>;
|
|
89
|
-
props: Record<string, unknown>;
|
|
90
|
-
};
|
|
91
|
-
|
|
92
92
|
export interface EffectMap {
|
|
93
93
|
radius: typeof RadiusEffect;
|
|
94
94
|
border: typeof BorderEffect;
|
|
@@ -166,10 +166,17 @@ export class CoreShaderManager {
|
|
|
166
166
|
return this.shConstructors;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Loads a shader (if not already loaded) and returns a controller for it.
|
|
171
|
+
*
|
|
172
|
+
* @param shType
|
|
173
|
+
* @param props
|
|
174
|
+
* @returns
|
|
175
|
+
*/
|
|
169
176
|
loadShader<Type extends keyof ShaderMap>(
|
|
170
177
|
shType: Type,
|
|
171
178
|
props?: ExtractProps<ShaderMap[Type]>,
|
|
172
|
-
):
|
|
179
|
+
): ShaderController<Type> {
|
|
173
180
|
if (!this.renderer) {
|
|
174
181
|
throw new Error(`Renderer is not been defined`);
|
|
175
182
|
}
|
|
@@ -182,14 +189,17 @@ export class CoreShaderManager {
|
|
|
182
189
|
this.renderer.mode === 'canvas' &&
|
|
183
190
|
ShaderClass.prototype instanceof WebGlCoreShader
|
|
184
191
|
) {
|
|
185
|
-
return
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
192
|
+
return this._createShaderCtr(
|
|
193
|
+
shType,
|
|
194
|
+
new UnsupportedShader(shType) as InstanceType<ShaderMap[Type]>,
|
|
195
|
+
props as ExtractProps<ShaderMap[Type]>,
|
|
196
|
+
);
|
|
189
197
|
}
|
|
190
198
|
|
|
191
199
|
if (shType === 'DynamicShader') {
|
|
192
|
-
return this.loadDynamicShader(
|
|
200
|
+
return this.loadDynamicShader(
|
|
201
|
+
props!,
|
|
202
|
+
) as unknown as ShaderController<Type>;
|
|
193
203
|
}
|
|
194
204
|
|
|
195
205
|
const resolvedProps = ShaderClass.resolveDefaults(
|
|
@@ -198,10 +208,11 @@ export class CoreShaderManager {
|
|
|
198
208
|
const cacheKey =
|
|
199
209
|
ShaderClass.makeCacheKey(resolvedProps) || ShaderClass.name;
|
|
200
210
|
if (cacheKey && this.shCache.has(cacheKey)) {
|
|
201
|
-
return
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
211
|
+
return this._createShaderCtr(
|
|
212
|
+
shType,
|
|
213
|
+
this.shCache.get(cacheKey) as InstanceType<ShaderMap[Type]>,
|
|
214
|
+
resolvedProps as ExtractProps<ShaderMap[Type]>,
|
|
215
|
+
);
|
|
205
216
|
}
|
|
206
217
|
|
|
207
218
|
// @ts-expect-error ShaderClass WILL accept a Renderer
|
|
@@ -211,15 +222,16 @@ export class CoreShaderManager {
|
|
|
211
222
|
if (cacheKey) {
|
|
212
223
|
this.shCache.set(cacheKey, shader);
|
|
213
224
|
}
|
|
214
|
-
return
|
|
225
|
+
return this._createShaderCtr(
|
|
226
|
+
shType,
|
|
215
227
|
shader,
|
|
216
|
-
|
|
217
|
-
|
|
228
|
+
resolvedProps as ExtractProps<ShaderMap[Type]>,
|
|
229
|
+
);
|
|
218
230
|
}
|
|
219
231
|
|
|
220
|
-
loadDynamicShader<
|
|
221
|
-
|
|
222
|
-
):
|
|
232
|
+
loadDynamicShader<
|
|
233
|
+
T extends DynamicEffects<[...{ name: string; type: keyof EffectMap }[]]>,
|
|
234
|
+
>(props: DynamicShaderProps): DynamicShaderController<T> {
|
|
223
235
|
if (!this.renderer) {
|
|
224
236
|
throw new Error(`Renderer is not been defined`);
|
|
225
237
|
}
|
|
@@ -232,10 +244,10 @@ export class CoreShaderManager {
|
|
|
232
244
|
this.effectConstructors,
|
|
233
245
|
);
|
|
234
246
|
if (cacheKey && this.shCache.has(cacheKey)) {
|
|
235
|
-
return
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
247
|
+
return this._createDynShaderCtr(
|
|
248
|
+
this.shCache.get(cacheKey) as InstanceType<ShaderMap['DynamicShader']>,
|
|
249
|
+
resolvedProps,
|
|
250
|
+
);
|
|
239
251
|
}
|
|
240
252
|
const shader = new DynamicShader(
|
|
241
253
|
this.renderer as WebGlCoreRenderer,
|
|
@@ -245,10 +257,25 @@ export class CoreShaderManager {
|
|
|
245
257
|
if (cacheKey) {
|
|
246
258
|
this.shCache.set(cacheKey, shader);
|
|
247
259
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
260
|
+
|
|
261
|
+
return this._createDynShaderCtr(shader, resolvedProps);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
private _createShaderCtr<Type extends keyof ShaderMap>(
|
|
265
|
+
type: Type,
|
|
266
|
+
shader: InstanceType<ShaderMap[Type]>,
|
|
267
|
+
props: ExtractProps<ShaderMap[Type]>,
|
|
268
|
+
): ShaderController<Type> {
|
|
269
|
+
return new ShaderController(type, shader, props, this.renderer.stage);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
private _createDynShaderCtr<
|
|
273
|
+
T extends DynamicEffects<[...{ name: string; type: keyof EffectMap }[]]>,
|
|
274
|
+
>(
|
|
275
|
+
shader: InstanceType<ShaderMap['DynamicShader']>,
|
|
276
|
+
props: ExtractProps<ShaderMap['DynamicShader']>,
|
|
277
|
+
): DynamicShaderController<T> {
|
|
278
|
+
return new DynamicShaderController(shader, props, this);
|
|
252
279
|
}
|
|
253
280
|
|
|
254
281
|
useShader(shader: CoreShader): void {
|
package/src/core/CoreTextNode.ts
CHANGED
|
@@ -32,21 +32,44 @@ import type {
|
|
|
32
32
|
NodeTextFailedPayload,
|
|
33
33
|
NodeTextLoadedPayload,
|
|
34
34
|
} from '../common/CommonTypes.js';
|
|
35
|
-
import type {
|
|
35
|
+
import type { RectWithValid } from './lib/utils.js';
|
|
36
36
|
import { assertTruthy } from '../utils.js';
|
|
37
37
|
import { Matrix3d } from './lib/Matrix3d.js';
|
|
38
38
|
|
|
39
39
|
export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Force Text Node to use a specific Text Renderer
|
|
42
|
+
*
|
|
43
|
+
* @remarks
|
|
44
|
+
* By default, Text Nodes resolve the Text Renderer to use based on the font
|
|
45
|
+
* that is matched using the font family and other font selection properties.
|
|
46
|
+
*
|
|
47
|
+
* If two fonts supported by two separate Text Renderers are matched setting
|
|
48
|
+
* this override forces the Text Node to resolve to the Text Renderer defined
|
|
49
|
+
* here.
|
|
50
|
+
*
|
|
51
|
+
* @default null
|
|
52
|
+
*/
|
|
41
53
|
textRendererOverride: keyof TextRendererMap | null;
|
|
42
54
|
}
|
|
43
55
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
56
|
+
/**
|
|
57
|
+
* An CoreNode in the Renderer scene graph that renders text.
|
|
58
|
+
*
|
|
59
|
+
* @remarks
|
|
60
|
+
* A Text Node is the second graphical building block of the Renderer scene
|
|
61
|
+
* graph. It renders text using a specific text renderer that is automatically
|
|
62
|
+
* chosen based on the font requested and what type of fonts are installed
|
|
63
|
+
* into an app.
|
|
64
|
+
*
|
|
65
|
+
* The text renderer can be overridden by setting the `textRendererOverride`
|
|
66
|
+
*
|
|
67
|
+
* The `texture` and `shader` properties are managed by loaded text renderer and
|
|
68
|
+
* should not be set directly.
|
|
69
|
+
*
|
|
70
|
+
* For non-text rendering, see {@link CoreNode}.
|
|
71
|
+
*/
|
|
72
|
+
export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
50
73
|
textRenderer: TextRenderer;
|
|
51
74
|
trState: TextRendererState;
|
|
52
75
|
private _textRendererOverride: CoreTextNodeProps['textRendererOverride'] =
|
|
@@ -356,6 +379,15 @@ export class CoreTextNode extends CoreNode implements ICoreTextNode {
|
|
|
356
379
|
override renderQuads(renderer: CoreRenderer) {
|
|
357
380
|
assertTruthy(this.globalTransform);
|
|
358
381
|
|
|
382
|
+
// If the text renderer does not support rendering quads, fallback to the
|
|
383
|
+
// default renderQuads method
|
|
384
|
+
if (!this.textRenderer.renderQuads) {
|
|
385
|
+
super.renderQuads(renderer);
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// If the text renderer does support rendering quads, use it...
|
|
390
|
+
|
|
359
391
|
// Prevent quad rendering if parent has a render texture
|
|
360
392
|
// and this node is not the render texture
|
|
361
393
|
if (this.parentHasRenderTexture) {
|
|
@@ -410,7 +442,7 @@ export class CoreTextNode extends CoreNode implements ICoreTextNode {
|
|
|
410
442
|
this._textRendererOverride,
|
|
411
443
|
);
|
|
412
444
|
|
|
413
|
-
const textRendererState = resolvedTextRenderer.createState(props);
|
|
445
|
+
const textRendererState = resolvedTextRenderer.createState(props, this);
|
|
414
446
|
|
|
415
447
|
textRendererState.emitter.on('loaded', this.onTextLoaded);
|
|
416
448
|
textRendererState.emitter.on('failed', this.onTextFailed);
|
|
@@ -17,9 +17,7 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
import { assertTruthy } from '../utils.js';
|
|
21
20
|
import { ImageWorkerManager } from './lib/ImageWorker.js';
|
|
22
|
-
import type { CoreContextTexture } from './renderers/CoreContextTexture.js';
|
|
23
21
|
import type { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
24
22
|
import { ColorTexture } from './textures/ColorTexture.js';
|
|
25
23
|
import { ImageTexture } from './textures/ImageTexture.js';
|
|
@@ -29,14 +27,14 @@ import { RenderTexture } from './textures/RenderTexture.js';
|
|
|
29
27
|
import type { Texture } from './textures/Texture.js';
|
|
30
28
|
|
|
31
29
|
/**
|
|
32
|
-
* Augmentable map of texture types
|
|
30
|
+
* Augmentable map of texture class types
|
|
33
31
|
*
|
|
34
32
|
* @remarks
|
|
35
33
|
* This interface can be augmented by other modules/apps to add additional
|
|
36
34
|
* texture types. The ones included directly here are the ones that are
|
|
37
35
|
* included in the core library.
|
|
38
36
|
*/
|
|
39
|
-
export interface
|
|
37
|
+
export interface TextureTypeMap {
|
|
40
38
|
ColorTexture: typeof ColorTexture;
|
|
41
39
|
ImageTexture: typeof ImageTexture;
|
|
42
40
|
NoiseTexture: typeof NoiseTexture;
|
|
@@ -44,6 +42,13 @@ export interface TextureMap {
|
|
|
44
42
|
RenderTexture: typeof RenderTexture;
|
|
45
43
|
}
|
|
46
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Map of texture instance types
|
|
47
|
+
*/
|
|
48
|
+
export type TextureMap = {
|
|
49
|
+
[K in keyof TextureTypeMap]: InstanceType<TextureTypeMap[K]>;
|
|
50
|
+
};
|
|
51
|
+
|
|
47
52
|
export type ExtractProps<Type> = Type extends { z$__type__Props: infer Props }
|
|
48
53
|
? Props
|
|
49
54
|
: never;
|
|
@@ -54,7 +59,6 @@ export type ExtractProps<Type> = Type extends { z$__type__Props: infer Props }
|
|
|
54
59
|
*/
|
|
55
60
|
export interface TextureManagerDebugInfo {
|
|
56
61
|
keyCacheSize: number;
|
|
57
|
-
idCacheSize: number;
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
export type ResizeModeOptions =
|
|
@@ -117,35 +121,6 @@ export interface TextureOptions {
|
|
|
117
121
|
*/
|
|
118
122
|
preload?: boolean;
|
|
119
123
|
|
|
120
|
-
/**
|
|
121
|
-
* ID to use for this texture.
|
|
122
|
-
*
|
|
123
|
-
* @remarks
|
|
124
|
-
* This is for internal use only as an optimization.
|
|
125
|
-
*
|
|
126
|
-
* @privateRemarks
|
|
127
|
-
* This is used to avoid having to look up the texture in the texture cache
|
|
128
|
-
* by its cache key. Theoretically this should be faster.
|
|
129
|
-
*
|
|
130
|
-
* @defaultValue Automatically generated
|
|
131
|
-
*/
|
|
132
|
-
id?: number;
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Cache key to use for this texture
|
|
136
|
-
*
|
|
137
|
-
* @remarks
|
|
138
|
-
* If this is set, the texture will be cached using this key. If a texture
|
|
139
|
-
* with the same key is already cached, it will be returned instead of
|
|
140
|
-
* creating a new texture.
|
|
141
|
-
*
|
|
142
|
-
* If this is not set (undefined), it will be automatically generated via
|
|
143
|
-
* the specified `Texture`'s `makeCacheKey()` method.
|
|
144
|
-
*
|
|
145
|
-
* @defaultValue Automatically generated via `Texture.makeCacheKey()`
|
|
146
|
-
*/
|
|
147
|
-
cacheKey?: string | false;
|
|
148
|
-
|
|
149
124
|
/**
|
|
150
125
|
* Flip the texture horizontally when rendering
|
|
151
126
|
*
|
|
@@ -172,20 +147,20 @@ export interface TextureOptions {
|
|
|
172
147
|
|
|
173
148
|
export class CoreTextureManager {
|
|
174
149
|
/**
|
|
175
|
-
*
|
|
150
|
+
* Map of textures by cache key
|
|
176
151
|
*/
|
|
177
|
-
|
|
152
|
+
keyCache: Map<string, Texture> = new Map();
|
|
178
153
|
|
|
179
|
-
|
|
154
|
+
/**
|
|
155
|
+
* Map of cache keys by texture
|
|
156
|
+
*/
|
|
157
|
+
inverseKeyCache: WeakMap<Texture, string> = new WeakMap();
|
|
180
158
|
|
|
181
|
-
|
|
182
|
-
|
|
159
|
+
/**
|
|
160
|
+
* Map of texture constructors by their type name
|
|
161
|
+
*/
|
|
162
|
+
txConstructors: Partial<TextureTypeMap> = {};
|
|
183
163
|
|
|
184
|
-
ctxTextureCache: WeakMap<Texture, CoreContextTexture> = new WeakMap();
|
|
185
|
-
textureRefCountMap: WeakMap<
|
|
186
|
-
Texture,
|
|
187
|
-
{ cacheKey: string | false; count: number }
|
|
188
|
-
> = new WeakMap();
|
|
189
164
|
imageWorkerManager: ImageWorkerManager | null = null;
|
|
190
165
|
hasCreateImageBitmap = !!self.createImageBitmap;
|
|
191
166
|
hasWorker = !!self.Worker;
|
|
@@ -198,6 +173,17 @@ export class CoreTextureManager {
|
|
|
198
173
|
*/
|
|
199
174
|
renderer!: CoreRenderer;
|
|
200
175
|
|
|
176
|
+
/**
|
|
177
|
+
* The current frame time in milliseconds
|
|
178
|
+
*
|
|
179
|
+
* @remarks
|
|
180
|
+
* This is used to populate the `lastRenderableChangeTime` property of
|
|
181
|
+
* {@link Texture} instances when their renderable state changes.
|
|
182
|
+
*
|
|
183
|
+
* Set by stage via `updateFrameTime` method.
|
|
184
|
+
*/
|
|
185
|
+
frameTime = 0;
|
|
186
|
+
|
|
201
187
|
constructor(numImageWorkers: number) {
|
|
202
188
|
// Register default known texture types
|
|
203
189
|
if (this.hasCreateImageBitmap && this.hasWorker && numImageWorkers > 0) {
|
|
@@ -217,165 +203,59 @@ export class CoreTextureManager {
|
|
|
217
203
|
this.registerTextureType('RenderTexture', RenderTexture);
|
|
218
204
|
}
|
|
219
205
|
|
|
220
|
-
registerTextureType<Type extends keyof
|
|
206
|
+
registerTextureType<Type extends keyof TextureTypeMap>(
|
|
221
207
|
textureType: Type,
|
|
222
|
-
textureClass:
|
|
208
|
+
textureClass: TextureTypeMap[Type],
|
|
223
209
|
): void {
|
|
224
210
|
this.txConstructors[textureType] = textureClass;
|
|
225
211
|
}
|
|
226
212
|
|
|
227
|
-
loadTexture<Type extends keyof
|
|
213
|
+
loadTexture<Type extends keyof TextureTypeMap>(
|
|
228
214
|
textureType: Type,
|
|
229
|
-
props: ExtractProps<
|
|
230
|
-
|
|
231
|
-
|
|
215
|
+
props: ExtractProps<TextureTypeMap[Type]>,
|
|
216
|
+
): InstanceType<TextureTypeMap[Type]> {
|
|
217
|
+
let texture: Texture | undefined;
|
|
232
218
|
const TextureClass = this.txConstructors[textureType];
|
|
233
219
|
if (!TextureClass) {
|
|
234
220
|
throw new Error(`Texture type "${textureType}" is not registered`);
|
|
235
221
|
}
|
|
236
|
-
|
|
237
|
-
// If an ID is specified, try to get the texture from the ID cache first
|
|
238
|
-
if (options?.id !== undefined && this.textureIdCache.has(options.id)) {
|
|
239
|
-
// console.log('Getting texture by texture desc ID', options.id);
|
|
240
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
241
|
-
texture = this.textureIdCache.get(options.id)!;
|
|
242
|
-
}
|
|
243
|
-
// If the texture is not found in the ID cache, try to get it from the key cache
|
|
222
|
+
|
|
244
223
|
if (!texture) {
|
|
245
|
-
const
|
|
246
|
-
|
|
247
|
-
options?.cacheKey ?? TextureClass.makeCacheKey(props as any);
|
|
248
|
-
if (cacheKey && this.textureKeyCache.has(cacheKey)) {
|
|
224
|
+
const cacheKey = TextureClass.makeCacheKey(props as any);
|
|
225
|
+
if (cacheKey && this.keyCache.has(cacheKey)) {
|
|
249
226
|
// console.log('Getting texture by cache key', cacheKey);
|
|
250
227
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
251
|
-
texture = this.
|
|
228
|
+
texture = this.keyCache.get(cacheKey)!;
|
|
252
229
|
} else {
|
|
253
230
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
|
|
254
231
|
texture = new TextureClass(this, props as any);
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
this.addTextureIdToCache(descId, cacheKey, texture);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
if (options?.preload) {
|
|
261
|
-
const ctxTx = this.getCtxTexture(texture);
|
|
262
|
-
ctxTx.load();
|
|
263
|
-
}
|
|
264
|
-
return texture as InstanceType<TextureMap[Type]>;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* Add a `Texture` to the texture cache by its texture desc ID and cache key
|
|
269
|
-
*
|
|
270
|
-
* @remarks
|
|
271
|
-
* This is used internally by the `CoreTextureManager` to cache textures
|
|
272
|
-
* when they are created.
|
|
273
|
-
*
|
|
274
|
-
* It handles updating the texture ID cache, texture key cache, and texture
|
|
275
|
-
* reference count map.
|
|
276
|
-
*
|
|
277
|
-
* @param textureDescId
|
|
278
|
-
* @param cacheKey
|
|
279
|
-
* @param texture
|
|
280
|
-
*/
|
|
281
|
-
private addTextureIdToCache(
|
|
282
|
-
textureDescId: number,
|
|
283
|
-
cacheKey: string | false,
|
|
284
|
-
texture: Texture,
|
|
285
|
-
): void {
|
|
286
|
-
const { textureIdCache, textureRefCountMap } = this;
|
|
287
|
-
textureIdCache.set(textureDescId, texture);
|
|
288
|
-
if (textureRefCountMap.has(texture)) {
|
|
289
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
290
|
-
textureRefCountMap.get(texture)!.count++;
|
|
291
|
-
} else {
|
|
292
|
-
textureRefCountMap.set(texture, { cacheKey, count: 1 });
|
|
293
|
-
if (cacheKey) {
|
|
294
|
-
this.textureKeyCache.set(cacheKey, texture);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* Remove a `Texture` from the texture cache by its texture desc ID
|
|
301
|
-
*
|
|
302
|
-
* @remarks
|
|
303
|
-
* This is called externally by when we know (at least reasonably well) that
|
|
304
|
-
* the `TextureRef` in the Main API space has been is no longer used. This
|
|
305
|
-
* allows us to remove the `Texture` from the Usage Cache so that it can be
|
|
306
|
-
* garbage collected as well.
|
|
307
|
-
*
|
|
308
|
-
* @param textureDescId
|
|
309
|
-
*/
|
|
310
|
-
removeTextureIdFromCache(textureDescId: number): void {
|
|
311
|
-
const { textureIdCache, textureRefCountMap } = this;
|
|
312
|
-
const texture = textureIdCache.get(textureDescId);
|
|
313
|
-
if (!texture) {
|
|
314
|
-
// Sometimes a texture is removed from the cache before it ever gets
|
|
315
|
-
// added to the cache. This is fine and not an error.
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
textureIdCache.delete(textureDescId);
|
|
319
|
-
if (textureRefCountMap.has(texture)) {
|
|
320
|
-
const refCountObj = textureRefCountMap.get(texture);
|
|
321
|
-
assertTruthy(refCountObj);
|
|
322
|
-
refCountObj.count--;
|
|
323
|
-
if (refCountObj.count === 0) {
|
|
324
|
-
textureRefCountMap.delete(texture);
|
|
325
|
-
// If the texture is not referenced anywhere else, remove it from the key cache
|
|
326
|
-
// as well.
|
|
327
|
-
// This should allow the `Texture` instance to be garbage collected.
|
|
328
|
-
if (refCountObj.cacheKey) {
|
|
329
|
-
this.textureKeyCache.delete(refCountObj.cacheKey);
|
|
232
|
+
if (cacheKey) {
|
|
233
|
+
this.initTextureToCache(texture, cacheKey);
|
|
330
234
|
}
|
|
331
235
|
}
|
|
332
236
|
}
|
|
333
|
-
|
|
334
|
-
this.ctxTextureCache.get(texture)?.free();
|
|
237
|
+
return texture as InstanceType<TextureTypeMap[Type]>;
|
|
335
238
|
}
|
|
336
239
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
*/
|
|
342
|
-
getDebugInfo(): TextureManagerDebugInfo {
|
|
343
|
-
// const textureSet = new Set<Texture>();
|
|
344
|
-
// for (const texture of this.textureIdCache.values()) {
|
|
345
|
-
// textureSet.add(texture);
|
|
346
|
-
// }
|
|
347
|
-
// for (const texture of this.textureKeyCache.values()) {
|
|
348
|
-
// textureSet.add(texture);
|
|
349
|
-
// }
|
|
350
|
-
// TODO: Output number of bytes used by textures
|
|
351
|
-
return {
|
|
352
|
-
keyCacheSize: this.textureKeyCache.size,
|
|
353
|
-
idCacheSize: this.textureIdCache.size,
|
|
354
|
-
};
|
|
240
|
+
private initTextureToCache(texture: Texture, cacheKey: string) {
|
|
241
|
+
const { keyCache, inverseKeyCache } = this;
|
|
242
|
+
keyCache.set(cacheKey, texture);
|
|
243
|
+
inverseKeyCache.set(texture, cacheKey);
|
|
355
244
|
}
|
|
356
245
|
|
|
357
246
|
/**
|
|
358
|
-
*
|
|
247
|
+
* Remove a texture from the cache
|
|
359
248
|
*
|
|
360
249
|
* @remarks
|
|
361
|
-
*
|
|
362
|
-
* returned from the cache. Otherwise, a new CoreContextTexture will be created
|
|
363
|
-
* and cached.
|
|
250
|
+
* Called by Texture Cleanup when a texture is freed.
|
|
364
251
|
*
|
|
365
|
-
*
|
|
366
|
-
* when the Texture source is no longer referenced.
|
|
367
|
-
*
|
|
368
|
-
* @param textureSource
|
|
369
|
-
* @returns
|
|
252
|
+
* @param texture
|
|
370
253
|
*/
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
254
|
+
removeTextureFromCache(texture: Texture) {
|
|
255
|
+
const { inverseKeyCache, keyCache } = this;
|
|
256
|
+
const cacheKey = inverseKeyCache.get(texture);
|
|
257
|
+
if (cacheKey) {
|
|
258
|
+
keyCache.delete(cacheKey);
|
|
375
259
|
}
|
|
376
|
-
const texture = this.renderer.createCtxTexture(textureSource);
|
|
377
|
-
|
|
378
|
-
this.ctxTextureCache.set(textureSource, texture);
|
|
379
|
-
return texture;
|
|
380
260
|
}
|
|
381
261
|
}
|