@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
|
@@ -61,10 +61,6 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
61
61
|
return this._nativeCtxTexture;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
get renderable(): boolean {
|
|
65
|
-
return this.textureSource.renderable;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
64
|
get w() {
|
|
69
65
|
return this._w;
|
|
70
66
|
}
|
|
@@ -118,11 +114,11 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
118
114
|
* Called when the texture data needs to be loaded and uploaded to a texture
|
|
119
115
|
*/
|
|
120
116
|
async onLoadRequest(): Promise<Dimensions> {
|
|
121
|
-
const { glw
|
|
117
|
+
const { glw } = this;
|
|
122
118
|
|
|
123
119
|
// Set to a 1x1 transparent texture
|
|
124
120
|
glw.texImage2D(0, glw.RGBA, 1, 1, 0, glw.RGBA, glw.UNSIGNED_BYTE, null);
|
|
125
|
-
|
|
121
|
+
this.setTextureMemUse(TRANSPARENT_TEXTURE_DATA.byteLength);
|
|
126
122
|
|
|
127
123
|
const textureData = await this.textureSource?.getTextureData();
|
|
128
124
|
// If the texture has been freed while loading, return early.
|
|
@@ -153,7 +149,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
153
149
|
);
|
|
154
150
|
|
|
155
151
|
glw.texImage2D(0, glw.RGBA, glw.RGBA, glw.UNSIGNED_BYTE, data);
|
|
156
|
-
|
|
152
|
+
this.setTextureMemUse(width * height * 4);
|
|
157
153
|
|
|
158
154
|
// generate mipmaps for power-of-2 textures or in WebGL2RenderingContext
|
|
159
155
|
if (glw.isWebGl2() || (isPowerOfTwo(width) && isPowerOfTwo(height))) {
|
|
@@ -175,7 +171,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
175
171
|
glw.UNSIGNED_BYTE,
|
|
176
172
|
TRANSPARENT_TEXTURE_DATA,
|
|
177
173
|
);
|
|
178
|
-
|
|
174
|
+
this.setTextureMemUse(TRANSPARENT_TEXTURE_DATA.byteLength);
|
|
179
175
|
} else if ('mipmaps' in textureData.data && textureData.data.mipmaps) {
|
|
180
176
|
const {
|
|
181
177
|
mipmaps,
|
|
@@ -197,7 +193,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
197
193
|
glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
|
|
198
194
|
glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
|
|
199
195
|
|
|
200
|
-
|
|
196
|
+
this.setTextureMemUse(view.byteLength);
|
|
201
197
|
} else {
|
|
202
198
|
console.error(
|
|
203
199
|
`WebGlCoreCtxTexture.onLoadRequest: Unexpected textureData returned`,
|
|
@@ -227,10 +223,10 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
227
223
|
if (!this._nativeCtxTexture) {
|
|
228
224
|
return;
|
|
229
225
|
}
|
|
230
|
-
const { glw
|
|
226
|
+
const { glw } = this;
|
|
231
227
|
|
|
232
228
|
glw.deleteTexture(this._nativeCtxTexture);
|
|
233
|
-
|
|
229
|
+
this.setTextureMemUse(0);
|
|
234
230
|
this._nativeCtxTexture = null;
|
|
235
231
|
}
|
|
236
232
|
|
|
@@ -50,6 +50,7 @@ import { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
|
|
|
50
50
|
import { RenderTexture } from '../../textures/RenderTexture.js';
|
|
51
51
|
import type { CoreNode } from '../../CoreNode.js';
|
|
52
52
|
import { WebGlCoreCtxRenderTexture } from './WebGlCoreCtxRenderTexture.js';
|
|
53
|
+
import type { BaseShaderController } from '../../../main-api/ShaderController.js';
|
|
53
54
|
import { ImageTexture } from '../../textures/ImageTexture.js';
|
|
54
55
|
|
|
55
56
|
const WORDS_PER_QUAD = 24;
|
|
@@ -80,6 +81,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
80
81
|
activeRttNode: CoreNode | null = null;
|
|
81
82
|
|
|
82
83
|
//// Default Shader
|
|
84
|
+
defShaderCtrl: BaseShaderController;
|
|
83
85
|
defaultShader: WebGlCoreShader;
|
|
84
86
|
quadBufferCollection: BufferCollection;
|
|
85
87
|
|
|
@@ -102,7 +104,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
102
104
|
this.defaultTexture = new ColorTexture(this.txManager);
|
|
103
105
|
|
|
104
106
|
// Mark the default texture as ALWAYS renderable
|
|
105
|
-
// This prevents it from ever being
|
|
107
|
+
// This prevents it from ever being cleaned up.
|
|
106
108
|
// Fixes https://github.com/lightning-js/renderer/issues/262
|
|
107
109
|
this.defaultTexture.setRenderableOwner(this, true);
|
|
108
110
|
|
|
@@ -128,7 +130,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
128
130
|
extensions: getWebGlExtensions(this.glw),
|
|
129
131
|
};
|
|
130
132
|
this.shManager.renderer = this;
|
|
131
|
-
this.
|
|
133
|
+
this.defShaderCtrl = this.shManager.loadShader('DefaultShader');
|
|
134
|
+
this.defaultShader = this.defShaderCtrl.shader as WebGlCoreShader;
|
|
132
135
|
const quadBuffer = glw.createBuffer();
|
|
133
136
|
assertTruthy(quadBuffer);
|
|
134
137
|
const stride = 6 * Float32Array.BYTES_PER_ELEMENT;
|
|
@@ -235,6 +238,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
235
238
|
tb,
|
|
236
239
|
tc,
|
|
237
240
|
td,
|
|
241
|
+
renderCoords,
|
|
238
242
|
rtt: renderToTexture,
|
|
239
243
|
parentHasRenderTexture,
|
|
240
244
|
framebufferDimensions,
|
|
@@ -281,7 +285,12 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
281
285
|
}
|
|
282
286
|
|
|
283
287
|
const flipX = textureOptions?.flipX ?? false;
|
|
284
|
-
|
|
288
|
+
let flipY = textureOptions?.flipY ?? false;
|
|
289
|
+
|
|
290
|
+
// always flip flipY for render textures
|
|
291
|
+
if (texture instanceof RenderTexture) {
|
|
292
|
+
flipY = !flipY;
|
|
293
|
+
}
|
|
285
294
|
|
|
286
295
|
let texCoordX1 = 0;
|
|
287
296
|
let texCoordY1 = 0;
|
|
@@ -333,16 +342,46 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
333
342
|
[texCoordY1, texCoordY2] = [texCoordY2, texCoordY1];
|
|
334
343
|
}
|
|
335
344
|
|
|
336
|
-
const
|
|
337
|
-
const ctxTexture = txManager.getCtxTexture(texture);
|
|
345
|
+
const ctxTexture = texture.ctxTexture;
|
|
338
346
|
assertTruthy(ctxTexture instanceof WebGlCoreCtxTexture);
|
|
339
347
|
const textureIdx = this.addTexture(ctxTexture, bufferIdx);
|
|
340
348
|
|
|
341
349
|
curRenderOp = this.curRenderOp;
|
|
342
350
|
assertTruthy(curRenderOp);
|
|
351
|
+
if (renderCoords) {
|
|
352
|
+
const { x1, y1, x2, y2, x3, y3, x4, y4 } = renderCoords;
|
|
353
|
+
// Upper-Left
|
|
354
|
+
fQuadBuffer[bufferIdx++] = x1; // vertexX
|
|
355
|
+
fQuadBuffer[bufferIdx++] = y1; // vertexY
|
|
356
|
+
fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX
|
|
357
|
+
fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
|
|
358
|
+
uiQuadBuffer[bufferIdx++] = colorTl; // color
|
|
359
|
+
fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
|
|
360
|
+
|
|
361
|
+
// Upper-Right
|
|
362
|
+
fQuadBuffer[bufferIdx++] = x2;
|
|
363
|
+
fQuadBuffer[bufferIdx++] = y2;
|
|
364
|
+
fQuadBuffer[bufferIdx++] = texCoordX2;
|
|
365
|
+
fQuadBuffer[bufferIdx++] = texCoordY1;
|
|
366
|
+
uiQuadBuffer[bufferIdx++] = colorTr;
|
|
367
|
+
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
343
368
|
|
|
344
|
-
|
|
345
|
-
|
|
369
|
+
// Lower-Left
|
|
370
|
+
fQuadBuffer[bufferIdx++] = x4;
|
|
371
|
+
fQuadBuffer[bufferIdx++] = y4;
|
|
372
|
+
fQuadBuffer[bufferIdx++] = texCoordX1;
|
|
373
|
+
fQuadBuffer[bufferIdx++] = texCoordY2;
|
|
374
|
+
uiQuadBuffer[bufferIdx++] = colorBl;
|
|
375
|
+
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
376
|
+
|
|
377
|
+
// Lower-Right
|
|
378
|
+
fQuadBuffer[bufferIdx++] = x3;
|
|
379
|
+
fQuadBuffer[bufferIdx++] = y3;
|
|
380
|
+
fQuadBuffer[bufferIdx++] = texCoordX2;
|
|
381
|
+
fQuadBuffer[bufferIdx++] = texCoordY2;
|
|
382
|
+
uiQuadBuffer[bufferIdx++] = colorBr;
|
|
383
|
+
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
384
|
+
} else if (tb !== 0 || tc !== 0) {
|
|
346
385
|
// Upper-Left
|
|
347
386
|
fQuadBuffer[bufferIdx++] = tx; // vertexX
|
|
348
387
|
fQuadBuffer[bufferIdx++] = ty; // vertexY
|
|
@@ -412,7 +451,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
412
451
|
uiQuadBuffer[bufferIdx++] = colorBr;
|
|
413
452
|
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
414
453
|
}
|
|
415
|
-
|
|
416
454
|
// Update the length of the current render op
|
|
417
455
|
curRenderOp.length += WORDS_PER_QUAD;
|
|
418
456
|
curRenderOp.numQuads++;
|
|
@@ -605,7 +643,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
605
643
|
this.activeRttNode = node;
|
|
606
644
|
|
|
607
645
|
assertTruthy(node.texture, 'RTT node missing texture');
|
|
608
|
-
const ctxTexture =
|
|
646
|
+
const ctxTexture = node.texture.ctxTexture;
|
|
609
647
|
assertTruthy(ctxTexture instanceof WebGlCoreCtxRenderTexture);
|
|
610
648
|
this.renderToTextureActive = true;
|
|
611
649
|
|
|
@@ -655,4 +693,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
655
693
|
}
|
|
656
694
|
this.rttNodes.splice(index, 1);
|
|
657
695
|
}
|
|
696
|
+
|
|
697
|
+
override getDefShaderCtr(): BaseShaderController {
|
|
698
|
+
return this.defShaderCtrl;
|
|
699
|
+
}
|
|
658
700
|
}
|
|
@@ -25,9 +25,31 @@ import {
|
|
|
25
25
|
} from '../WebGlCoreShader.js';
|
|
26
26
|
import type { UniformInfo } from '../internal/ShaderUtils.js';
|
|
27
27
|
import type { WebGlCoreCtxTexture } from '../WebGlCoreCtxTexture.js';
|
|
28
|
-
import {
|
|
28
|
+
import {
|
|
29
|
+
ShaderEffect,
|
|
30
|
+
type ShaderEffectUniform,
|
|
31
|
+
type ShaderEffectValueMap,
|
|
32
|
+
} from './effects/ShaderEffect.js';
|
|
29
33
|
import type { EffectMap } from '../../../CoreShaderManager.js';
|
|
30
|
-
import
|
|
34
|
+
import { assertTruthy } from '../../../../utils.js';
|
|
35
|
+
|
|
36
|
+
export interface BaseEffectDesc {
|
|
37
|
+
name: string;
|
|
38
|
+
type: keyof EffectMap;
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
+
props: Record<string, any>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface EffectDesc<
|
|
44
|
+
T extends { name: string; type: keyof EffectMap } = {
|
|
45
|
+
name: string;
|
|
46
|
+
type: keyof EffectMap;
|
|
47
|
+
},
|
|
48
|
+
> extends BaseEffectDesc {
|
|
49
|
+
name: T['name'];
|
|
50
|
+
type: T['type'];
|
|
51
|
+
props: ExtractProps<EffectMap[T['type']]>;
|
|
52
|
+
}
|
|
31
53
|
|
|
32
54
|
/**
|
|
33
55
|
* Allows the `keyof EffectMap` to be mapped over and form an discriminated
|
|
@@ -42,12 +64,14 @@ import memize from 'memize';
|
|
|
42
64
|
* ```
|
|
43
65
|
* (
|
|
44
66
|
* {
|
|
67
|
+
* name: 'effect1',
|
|
45
68
|
* type: 'radius',
|
|
46
69
|
* props?: {
|
|
47
70
|
* radius?: number | number[];
|
|
48
71
|
* }
|
|
49
72
|
* } |
|
|
50
73
|
* {
|
|
74
|
+
* name: 'effect2',
|
|
51
75
|
* type: 'border',
|
|
52
76
|
* props?: {
|
|
53
77
|
* width?: number;
|
|
@@ -62,43 +86,80 @@ import memize from 'memize';
|
|
|
62
86
|
* field.
|
|
63
87
|
*/
|
|
64
88
|
type MapEffectDescs<T extends keyof EffectMap> = T extends keyof EffectMap
|
|
65
|
-
?
|
|
89
|
+
? EffectDesc<{ type: T; name: string }>
|
|
66
90
|
: never;
|
|
67
91
|
|
|
68
|
-
export type
|
|
92
|
+
export type EffectDescUnion = MapEffectDescs<keyof EffectMap>;
|
|
69
93
|
|
|
70
94
|
export interface DynamicShaderProps
|
|
71
95
|
extends DimensionsShaderProp,
|
|
72
96
|
AlphaShaderProp {
|
|
73
|
-
effects?:
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export interface SpecificEffectDesc<
|
|
77
|
-
FxType extends keyof EffectMap = keyof EffectMap,
|
|
78
|
-
> {
|
|
79
|
-
type: FxType;
|
|
80
|
-
props?: ExtractProps<EffectMap[FxType]>;
|
|
97
|
+
effects?: EffectDescUnion[];
|
|
81
98
|
}
|
|
82
99
|
|
|
83
|
-
const effectCache = new Map<string,
|
|
100
|
+
const effectCache = new Map<string, BaseEffectDesc[]>();
|
|
84
101
|
const getResolvedEffect = (
|
|
85
|
-
effects:
|
|
86
|
-
effectContructors: Partial<EffectMap
|
|
87
|
-
):
|
|
102
|
+
effects: BaseEffectDesc[],
|
|
103
|
+
effectContructors: Partial<EffectMap>,
|
|
104
|
+
): BaseEffectDesc[] => {
|
|
88
105
|
const key = JSON.stringify(effects);
|
|
89
106
|
if (effectCache.has(key)) {
|
|
90
107
|
return effectCache.get(key)!;
|
|
91
108
|
}
|
|
109
|
+
effects = effects ?? [];
|
|
110
|
+
const resolvedEffects = [];
|
|
111
|
+
const effectsLength = effects.length;
|
|
112
|
+
let i = 0;
|
|
113
|
+
for (; i < effectsLength; i++) {
|
|
114
|
+
const { name, type, props } = effects[i] as BaseEffectDesc;
|
|
115
|
+
const resolvedEffect = {
|
|
116
|
+
name,
|
|
117
|
+
type,
|
|
118
|
+
props: {} as Record<string, any>,
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const effectConstructor = effectContructors[type]!;
|
|
122
|
+
const defaultPropValues = effectConstructor.resolveDefaults(props);
|
|
123
|
+
const uniforms = effectConstructor.uniforms;
|
|
124
|
+
const uniformKeys = Object.keys(uniforms);
|
|
125
|
+
const uniformsLength = uniformKeys.length;
|
|
126
|
+
let j = 0;
|
|
127
|
+
for (; j < uniformsLength; j++) {
|
|
128
|
+
const key = uniformKeys[j]!;
|
|
129
|
+
const uniform = uniforms[key]!;
|
|
130
|
+
|
|
131
|
+
const result: ShaderEffectValueMap = {
|
|
132
|
+
value: defaultPropValues[key] as ShaderEffectUniform['value'],
|
|
133
|
+
programValue: undefined,
|
|
134
|
+
updateOnBind: uniform.updateOnBind || false,
|
|
135
|
+
hasValidator: uniform.validator !== undefined,
|
|
136
|
+
hasProgramValueUpdater: uniform.updateProgramValue !== undefined,
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
const validatedValue =
|
|
140
|
+
(result.hasValidator &&
|
|
141
|
+
uniform.validator!(defaultPropValues[key], defaultPropValues)) ||
|
|
142
|
+
defaultPropValues[key];
|
|
143
|
+
|
|
144
|
+
if (defaultPropValues[key] !== validatedValue) {
|
|
145
|
+
result.validatedValue = validatedValue as number | number[];
|
|
146
|
+
}
|
|
92
147
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
(effect.props || {}) as any,
|
|
97
|
-
),
|
|
98
|
-
})) as EffectDesc[];
|
|
148
|
+
if (result.hasProgramValueUpdater) {
|
|
149
|
+
uniform.updateProgramValue!(result);
|
|
150
|
+
}
|
|
99
151
|
|
|
100
|
-
|
|
101
|
-
|
|
152
|
+
if (result.programValue === undefined) {
|
|
153
|
+
result.programValue = result.value as number;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
resolvedEffect.props[key] = result;
|
|
157
|
+
}
|
|
158
|
+
resolvedEffects.push(resolvedEffect);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
effectCache.set(key, resolvedEffects);
|
|
162
|
+
return resolvedEffects;
|
|
102
163
|
};
|
|
103
164
|
|
|
104
165
|
export class DynamicShader extends WebGlCoreShader {
|
|
@@ -130,8 +191,6 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
130
191
|
this.effects = shader.effects as Array<
|
|
131
192
|
InstanceType<EffectMap[keyof EffectMap]>
|
|
132
193
|
>;
|
|
133
|
-
|
|
134
|
-
this.calculateProps = memize(this.calculateProps.bind(this));
|
|
135
194
|
}
|
|
136
195
|
|
|
137
196
|
override bindTextures(textures: WebGlCoreCtxTexture[]) {
|
|
@@ -140,34 +199,29 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
140
199
|
glw.bindTexture(textures[0]!.ctxTexture);
|
|
141
200
|
}
|
|
142
201
|
|
|
143
|
-
private calculateProps(effects: EffectDesc[]) {
|
|
144
|
-
const regEffects = this.renderer.shManager.getRegisteredEffects();
|
|
145
|
-
const results: { name: string; value: unknown }[] = [];
|
|
146
|
-
effects?.forEach((eff, index) => {
|
|
147
|
-
const effect = this.effects[index]!;
|
|
148
|
-
const fxClass = regEffects[effect.name as keyof EffectMap]!;
|
|
149
|
-
const props = eff.props ?? {};
|
|
150
|
-
const uniInfo = effect.uniformInfo;
|
|
151
|
-
Object.keys(props).forEach((p) => {
|
|
152
|
-
const fxProp = fxClass.uniforms[p]!;
|
|
153
|
-
const propInfo = uniInfo[p]!;
|
|
154
|
-
let value = fxProp.validator
|
|
155
|
-
? fxProp.validator(props[p], props)
|
|
156
|
-
: props[p];
|
|
157
|
-
if (Array.isArray(value)) {
|
|
158
|
-
value = new Float32Array(value);
|
|
159
|
-
}
|
|
160
|
-
results.push({ name: propInfo.name, value });
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
return results;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
202
|
protected override bindProps(props: Required<DynamicShaderProps>): void {
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
203
|
+
const effects = props.effects;
|
|
204
|
+
const effectsL = effects.length;
|
|
205
|
+
let i = 0;
|
|
206
|
+
for (; i < effectsL; i++) {
|
|
207
|
+
const effect = effects[i]! as Record<string, any>;
|
|
208
|
+
const uniformInfo = this.effects[i]!.uniformInfo;
|
|
209
|
+
const propKeys = Object.keys(effect.props);
|
|
210
|
+
const propsLength = propKeys.length;
|
|
211
|
+
let j = 0;
|
|
212
|
+
for (; j < propsLength; j++) {
|
|
213
|
+
const key = propKeys[j]!;
|
|
214
|
+
const prop = effect.props[key]!;
|
|
215
|
+
if (prop.updateOnBind === true) {
|
|
216
|
+
const uniform =
|
|
217
|
+
this.renderer.shManager.getRegisteredEffects()[
|
|
218
|
+
effect.type as keyof EffectMap
|
|
219
|
+
]?.uniforms[key];
|
|
220
|
+
uniform?.updateProgramValue!(effect.props[key], props);
|
|
221
|
+
}
|
|
222
|
+
this.setUniform(uniformInfo[key]!.name, effect.props[key].programValue);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
171
225
|
}
|
|
172
226
|
|
|
173
227
|
override canBatchShaderProps(
|
|
@@ -192,7 +246,8 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
192
246
|
for (const key in effectA.props) {
|
|
193
247
|
if (
|
|
194
248
|
(effectB.props && !effectB.props[key]) ||
|
|
195
|
-
effectA.props[key]
|
|
249
|
+
(effectA.props[key] as ShaderEffectValueMap).value !==
|
|
250
|
+
(effectB.props[key] as ShaderEffectValueMap).value
|
|
196
251
|
) {
|
|
197
252
|
return false;
|
|
198
253
|
}
|
|
@@ -396,8 +451,12 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
396
451
|
props: DynamicShaderProps,
|
|
397
452
|
effectContructors?: Partial<EffectMap>,
|
|
398
453
|
): Required<DynamicShaderProps> {
|
|
454
|
+
assertTruthy(effectContructors);
|
|
399
455
|
return {
|
|
400
|
-
effects: getResolvedEffect(
|
|
456
|
+
effects: getResolvedEffect(
|
|
457
|
+
props.effects ?? [],
|
|
458
|
+
effectContructors,
|
|
459
|
+
) as EffectDescUnion[],
|
|
401
460
|
$dimensions: {
|
|
402
461
|
width: 0,
|
|
403
462
|
height: 0,
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* See the License for the specific language governing permissions and
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
|
-
import {
|
|
19
|
+
import { updateShaderEffectColor } from './EffectUtils.js';
|
|
20
20
|
import {
|
|
21
21
|
ShaderEffect,
|
|
22
22
|
type DefaultEffectProps,
|
|
@@ -69,7 +69,7 @@ export class BorderBottomEffect extends ShaderEffect {
|
|
|
69
69
|
},
|
|
70
70
|
color: {
|
|
71
71
|
value: 0xffffffff,
|
|
72
|
-
|
|
72
|
+
updateProgramValue: updateShaderEffectColor,
|
|
73
73
|
method: 'uniform4fv',
|
|
74
74
|
type: 'vec4',
|
|
75
75
|
},
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* See the License for the specific language governing permissions and
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
|
-
import {
|
|
19
|
+
import { updateShaderEffectColor } from './EffectUtils.js';
|
|
20
20
|
import {
|
|
21
21
|
ShaderEffect,
|
|
22
22
|
type DefaultEffectProps,
|
|
@@ -69,7 +69,7 @@ export class BorderEffect extends ShaderEffect {
|
|
|
69
69
|
},
|
|
70
70
|
color: {
|
|
71
71
|
value: 0xffffffff,
|
|
72
|
-
|
|
72
|
+
updateProgramValue: updateShaderEffectColor,
|
|
73
73
|
method: 'uniform4fv',
|
|
74
74
|
type: 'vec4',
|
|
75
75
|
},
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* See the License for the specific language governing permissions and
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
|
-
import {
|
|
19
|
+
import { updateShaderEffectColor } from './EffectUtils.js';
|
|
20
20
|
import {
|
|
21
21
|
ShaderEffect,
|
|
22
22
|
type DefaultEffectProps,
|
|
@@ -69,7 +69,7 @@ export class BorderLeftEffect extends ShaderEffect {
|
|
|
69
69
|
},
|
|
70
70
|
color: {
|
|
71
71
|
value: 0xffffffff,
|
|
72
|
-
|
|
72
|
+
updateProgramValue: updateShaderEffectColor,
|
|
73
73
|
method: 'uniform4fv',
|
|
74
74
|
type: 'vec4',
|
|
75
75
|
},
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* See the License for the specific language governing permissions and
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
|
-
import {
|
|
19
|
+
import { updateShaderEffectColor } from './EffectUtils.js';
|
|
20
20
|
import {
|
|
21
21
|
ShaderEffect,
|
|
22
22
|
type DefaultEffectProps,
|
|
@@ -69,7 +69,7 @@ export class BorderRightEffect extends ShaderEffect {
|
|
|
69
69
|
},
|
|
70
70
|
color: {
|
|
71
71
|
value: 0xffffffff,
|
|
72
|
-
|
|
72
|
+
updateProgramValue: updateShaderEffectColor,
|
|
73
73
|
method: 'uniform4fv',
|
|
74
74
|
type: 'vec4',
|
|
75
75
|
},
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* See the License for the specific language governing permissions and
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
|
-
import {
|
|
19
|
+
import { updateShaderEffectColor } from './EffectUtils.js';
|
|
20
20
|
import {
|
|
21
21
|
ShaderEffect,
|
|
22
22
|
type DefaultEffectProps,
|
|
@@ -69,7 +69,7 @@ export class BorderTopEffect extends ShaderEffect {
|
|
|
69
69
|
},
|
|
70
70
|
color: {
|
|
71
71
|
value: 0xffffffff,
|
|
72
|
-
|
|
72
|
+
updateProgramValue: updateShaderEffectColor,
|
|
73
73
|
method: 'uniform4fv',
|
|
74
74
|
type: 'vec4',
|
|
75
75
|
},
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import type { DynamicShaderProps } from '../DynamicShader.js';
|
|
2
|
+
import type { ShaderEffectValueMap } from './ShaderEffect.js';
|
|
3
|
+
|
|
1
4
|
/*
|
|
2
5
|
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
6
|
* following copyright and licenses apply:
|
|
@@ -18,9 +21,11 @@
|
|
|
18
21
|
*/
|
|
19
22
|
export const colorToFloat32Array = (argb: number) => {
|
|
20
23
|
const col = getRgbaComponentsNormalized(argb);
|
|
21
|
-
|
|
22
|
-
col[
|
|
23
|
-
col[
|
|
24
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion -- getRgbaComponentsNormalized has a constant array size */
|
|
25
|
+
col[0]! *= col[3]!;
|
|
26
|
+
col[1]! *= col[3]!;
|
|
27
|
+
col[2]! *= col[3]!;
|
|
28
|
+
/* eslint-enable */
|
|
24
29
|
return col;
|
|
25
30
|
};
|
|
26
31
|
|
|
@@ -31,3 +36,124 @@ const getRgbaComponentsNormalized = (argb: number): number[] => {
|
|
|
31
36
|
const a = (argb / 16777216) | 0;
|
|
32
37
|
return [r / 255, g / 255, b / 255, a / 255];
|
|
33
38
|
};
|
|
39
|
+
|
|
40
|
+
export const updateShaderEffectColor = (values: ShaderEffectValueMap) => {
|
|
41
|
+
if (values.programValue === undefined) {
|
|
42
|
+
values.programValue = new Float32Array(4);
|
|
43
|
+
}
|
|
44
|
+
const rgba = values.value as number;
|
|
45
|
+
const floatArray = values.programValue as Float32Array;
|
|
46
|
+
floatArray[0] = (rgba >>> 24) / 255;
|
|
47
|
+
floatArray[1] = ((rgba >>> 16) & 0xff) / 255;
|
|
48
|
+
floatArray[2] = ((rgba >>> 8) & 0xff) / 255;
|
|
49
|
+
floatArray[3] = (rgba & 0xff) / 255;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export const updateFloat32ArrayLength2 = (values: ShaderEffectValueMap) => {
|
|
53
|
+
const validatedValue = (values.validatedValue || values.value) as number[];
|
|
54
|
+
if (values.programValue instanceof Float32Array) {
|
|
55
|
+
const floatArray = values.programValue;
|
|
56
|
+
floatArray[0] = validatedValue[0]!;
|
|
57
|
+
floatArray[1] = validatedValue[1]!;
|
|
58
|
+
} else {
|
|
59
|
+
values.programValue = new Float32Array(validatedValue);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const updateFloat32ArrayLength4 = (values: ShaderEffectValueMap) => {
|
|
64
|
+
const validatedValue = (values.validatedValue || values.value) as number[];
|
|
65
|
+
if (values.programValue instanceof Float32Array) {
|
|
66
|
+
const floatArray = values.programValue;
|
|
67
|
+
floatArray[0] = validatedValue[0]!;
|
|
68
|
+
floatArray[1] = validatedValue[1]!;
|
|
69
|
+
floatArray[2] = validatedValue[1]!;
|
|
70
|
+
floatArray[3] = validatedValue[1]!;
|
|
71
|
+
} else {
|
|
72
|
+
values.programValue = new Float32Array(validatedValue);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const updateFloat32ArrayLengthN = (values: ShaderEffectValueMap) => {
|
|
77
|
+
const validatedValue = (values.validatedValue || values.value) as number[];
|
|
78
|
+
if (values.programValue instanceof Float32Array) {
|
|
79
|
+
const len = validatedValue.length;
|
|
80
|
+
const programValue = values.programValue;
|
|
81
|
+
for (let i = 0; i < len; i++) {
|
|
82
|
+
programValue[i] = validatedValue[i]!;
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
values.programValue = new Float32Array(validatedValue);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export const validateArrayLength4 = (value: number | number[]): number[] => {
|
|
90
|
+
const isArray = Array.isArray(value);
|
|
91
|
+
if (!isArray) {
|
|
92
|
+
return [value, value, value, value];
|
|
93
|
+
} else if (isArray && value.length === 4) {
|
|
94
|
+
return value;
|
|
95
|
+
} else if (isArray && value.length === 2) {
|
|
96
|
+
return [value[0]!, value[1]!, value[0]!, value[1]!];
|
|
97
|
+
} else if (isArray && value.length === 3) {
|
|
98
|
+
return [value[0]!, value[1]!, value[2]!, value[0]!];
|
|
99
|
+
}
|
|
100
|
+
return [value[0]!, value[0]!, value[0]!, value[0]!];
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export const updateWebSafeRadius = (
|
|
104
|
+
values: ShaderEffectValueMap,
|
|
105
|
+
shaderProps?: DynamicShaderProps,
|
|
106
|
+
) => {
|
|
107
|
+
if (values.programValue === undefined) {
|
|
108
|
+
values.programValue = new Float32Array(4);
|
|
109
|
+
}
|
|
110
|
+
const programValue = values.programValue as Float32Array;
|
|
111
|
+
const validatedValue = (values.validatedValue || values.value) as number[];
|
|
112
|
+
if (shaderProps === undefined && values.$dimensions === undefined) {
|
|
113
|
+
programValue[0] = validatedValue[0]!;
|
|
114
|
+
programValue[1] = validatedValue[1]!;
|
|
115
|
+
programValue[2] = validatedValue[2]!;
|
|
116
|
+
programValue[3] = validatedValue[3]!;
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
let storedDimensions = values.$dimensions;
|
|
121
|
+
if (shaderProps !== undefined) {
|
|
122
|
+
const { $dimensions } = shaderProps;
|
|
123
|
+
if (
|
|
124
|
+
storedDimensions !== undefined &&
|
|
125
|
+
(storedDimensions.width === $dimensions!.width ||
|
|
126
|
+
storedDimensions.height === $dimensions!.height)
|
|
127
|
+
) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (storedDimensions === undefined) {
|
|
131
|
+
storedDimensions = {
|
|
132
|
+
width: $dimensions?.width as number,
|
|
133
|
+
height: $dimensions?.height as number,
|
|
134
|
+
};
|
|
135
|
+
values.$dimensions = storedDimensions;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const { width, height } = storedDimensions!;
|
|
140
|
+
const [r0, r1, r2, r3] = validatedValue;
|
|
141
|
+
const factor = Math.min(
|
|
142
|
+
Math.min(
|
|
143
|
+
Math.min(
|
|
144
|
+
width / Math.max(width, r0! + r1!),
|
|
145
|
+
width / Math.max(width, r2! + r3!),
|
|
146
|
+
),
|
|
147
|
+
Math.min(
|
|
148
|
+
height / Math.max(height, r0! + r2!),
|
|
149
|
+
height / Math.max(height, r1! + r3!),
|
|
150
|
+
),
|
|
151
|
+
),
|
|
152
|
+
1,
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
programValue[0] = r0! * factor;
|
|
156
|
+
programValue[1] = r1! * factor;
|
|
157
|
+
programValue[2] = r2! * factor;
|
|
158
|
+
programValue[3] = r3! * factor;
|
|
159
|
+
};
|