@lightningjs/renderer 0.9.4 → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -82
- package/dist/exports/index.d.ts +42 -3
- package/dist/exports/index.js +37 -3
- package/dist/exports/index.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +461 -46
- package/dist/src/core/CoreNode.js +170 -104
- 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 +137 -43
- 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 +2 -43
- 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 +69 -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 +9 -14
- package/dist/src/main-api/DynamicShaderController.js +21 -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 +71 -25
- package/dist/src/main-api/Renderer.js +80 -109
- 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 +62 -3
- package/package.json +8 -7
- package/src/core/CoreNode.test.ts +93 -0
- package/src/core/CoreNode.ts +675 -188
- 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 +194 -67
- 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 +94 -92
- 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 +80 -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 +104 -0
- package/src/main-api/INode.ts +57 -479
- package/src/main-api/Inspector.ts +37 -39
- package/src/main-api/Renderer.ts +586 -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
|
}
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
* See the License for the specific language governing permissions and
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
|
-
import type { ExtractProps } from '../../../CoreTextureManager.js';
|
|
20
19
|
import type { WebGlCoreRenderer } from '../WebGlCoreRenderer.js';
|
|
21
20
|
import {
|
|
22
21
|
WebGlCoreShader,
|
|
@@ -25,80 +24,85 @@ import {
|
|
|
25
24
|
} from '../WebGlCoreShader.js';
|
|
26
25
|
import type { UniformInfo } from '../internal/ShaderUtils.js';
|
|
27
26
|
import type { WebGlCoreCtxTexture } from '../WebGlCoreCtxTexture.js';
|
|
28
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
ShaderEffect,
|
|
29
|
+
type EffectDescUnion,
|
|
30
|
+
type ShaderEffectUniform,
|
|
31
|
+
type ShaderEffectValueMap,
|
|
32
|
+
type BaseEffectDesc,
|
|
33
|
+
} from './effects/ShaderEffect.js';
|
|
29
34
|
import type { EffectMap } from '../../../CoreShaderManager.js';
|
|
30
|
-
import
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Allows the `keyof EffectMap` to be mapped over and form an discriminated
|
|
34
|
-
* union of all the EffectDescs structures individually.
|
|
35
|
-
*
|
|
36
|
-
* @remarks
|
|
37
|
-
* When used like the following:
|
|
38
|
-
* ```
|
|
39
|
-
* MapEffectDescs<keyof EffectMap>[]
|
|
40
|
-
* ```
|
|
41
|
-
* The resultant type will be a discriminated union like so:
|
|
42
|
-
* ```
|
|
43
|
-
* (
|
|
44
|
-
* {
|
|
45
|
-
* type: 'radius',
|
|
46
|
-
* props?: {
|
|
47
|
-
* radius?: number | number[];
|
|
48
|
-
* }
|
|
49
|
-
* } |
|
|
50
|
-
* {
|
|
51
|
-
* type: 'border',
|
|
52
|
-
* props?: {
|
|
53
|
-
* width?: number;
|
|
54
|
-
* color?: number;
|
|
55
|
-
* }
|
|
56
|
-
* } |
|
|
57
|
-
* // ...
|
|
58
|
-
* )[]
|
|
59
|
-
* ```
|
|
60
|
-
* Which means TypeScript will now base its type checking on the `type` field
|
|
61
|
-
* and will know exactly what the `props` field should be based on the `type`
|
|
62
|
-
* field.
|
|
63
|
-
*/
|
|
64
|
-
type MapEffectDescs<T extends keyof EffectMap> = T extends keyof EffectMap
|
|
65
|
-
? SpecificEffectDesc<T>
|
|
66
|
-
: never;
|
|
67
|
-
|
|
68
|
-
export type EffectDesc = MapEffectDescs<keyof EffectMap>;
|
|
35
|
+
import { assertTruthy } from '../../../../utils.js';
|
|
69
36
|
|
|
70
37
|
export interface DynamicShaderProps
|
|
71
38
|
extends DimensionsShaderProp,
|
|
72
39
|
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]>;
|
|
40
|
+
effects?: EffectDescUnion[];
|
|
81
41
|
}
|
|
82
42
|
|
|
83
|
-
const effectCache = new Map<string,
|
|
43
|
+
const effectCache = new Map<string, BaseEffectDesc[]>();
|
|
84
44
|
const getResolvedEffect = (
|
|
85
|
-
effects:
|
|
86
|
-
effectContructors: Partial<EffectMap
|
|
87
|
-
):
|
|
45
|
+
effects: BaseEffectDesc[],
|
|
46
|
+
effectContructors: Partial<EffectMap>,
|
|
47
|
+
): BaseEffectDesc[] => {
|
|
88
48
|
const key = JSON.stringify(effects);
|
|
89
49
|
if (effectCache.has(key)) {
|
|
90
50
|
return effectCache.get(key)!;
|
|
91
51
|
}
|
|
52
|
+
effects = effects ?? [];
|
|
53
|
+
const resolvedEffects = [];
|
|
54
|
+
const effectsLength = effects.length;
|
|
55
|
+
let i = 0;
|
|
56
|
+
for (; i < effectsLength; i++) {
|
|
57
|
+
const { name, type, props } = effects[i] as BaseEffectDesc;
|
|
58
|
+
const resolvedEffect = {
|
|
59
|
+
name,
|
|
60
|
+
type,
|
|
61
|
+
props: {} as Record<string, any>,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const effectConstructor = effectContructors[type]!;
|
|
65
|
+
const defaultPropValues = effectConstructor.resolveDefaults(props);
|
|
66
|
+
const uniforms = effectConstructor.uniforms;
|
|
67
|
+
const uniformKeys = Object.keys(uniforms);
|
|
68
|
+
const uniformsLength = uniformKeys.length;
|
|
69
|
+
let j = 0;
|
|
70
|
+
for (; j < uniformsLength; j++) {
|
|
71
|
+
const key = uniformKeys[j]!;
|
|
72
|
+
const uniform = uniforms[key]!;
|
|
73
|
+
|
|
74
|
+
const result: ShaderEffectValueMap = {
|
|
75
|
+
value: defaultPropValues[key] as ShaderEffectUniform['value'],
|
|
76
|
+
programValue: undefined,
|
|
77
|
+
updateOnBind: uniform.updateOnBind || false,
|
|
78
|
+
hasValidator: uniform.validator !== undefined,
|
|
79
|
+
hasProgramValueUpdater: uniform.updateProgramValue !== undefined,
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const validatedValue =
|
|
83
|
+
(result.hasValidator &&
|
|
84
|
+
uniform.validator!(defaultPropValues[key], defaultPropValues)) ||
|
|
85
|
+
defaultPropValues[key];
|
|
86
|
+
|
|
87
|
+
if (defaultPropValues[key] !== validatedValue) {
|
|
88
|
+
result.validatedValue = validatedValue as number | number[];
|
|
89
|
+
}
|
|
92
90
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
(effect.props || {}) as any,
|
|
97
|
-
),
|
|
98
|
-
})) as EffectDesc[];
|
|
91
|
+
if (result.hasProgramValueUpdater) {
|
|
92
|
+
uniform.updateProgramValue!(result);
|
|
93
|
+
}
|
|
99
94
|
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
if (result.programValue === undefined) {
|
|
96
|
+
result.programValue = result.value as number;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
resolvedEffect.props[key] = result;
|
|
100
|
+
}
|
|
101
|
+
resolvedEffects.push(resolvedEffect);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
effectCache.set(key, resolvedEffects);
|
|
105
|
+
return resolvedEffects;
|
|
102
106
|
};
|
|
103
107
|
|
|
104
108
|
export class DynamicShader extends WebGlCoreShader {
|
|
@@ -130,8 +134,6 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
130
134
|
this.effects = shader.effects as Array<
|
|
131
135
|
InstanceType<EffectMap[keyof EffectMap]>
|
|
132
136
|
>;
|
|
133
|
-
|
|
134
|
-
this.calculateProps = memize(this.calculateProps.bind(this));
|
|
135
137
|
}
|
|
136
138
|
|
|
137
139
|
override bindTextures(textures: WebGlCoreCtxTexture[]) {
|
|
@@ -140,34 +142,29 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
140
142
|
glw.bindTexture(textures[0]!.ctxTexture);
|
|
141
143
|
}
|
|
142
144
|
|
|
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
145
|
protected override bindProps(props: Required<DynamicShaderProps>): void {
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
146
|
+
const effects = props.effects;
|
|
147
|
+
const effectsL = effects.length;
|
|
148
|
+
let i = 0;
|
|
149
|
+
for (; i < effectsL; i++) {
|
|
150
|
+
const effect = effects[i]! as Record<string, any>;
|
|
151
|
+
const uniformInfo = this.effects[i]!.uniformInfo;
|
|
152
|
+
const propKeys = Object.keys(effect.props);
|
|
153
|
+
const propsLength = propKeys.length;
|
|
154
|
+
let j = 0;
|
|
155
|
+
for (; j < propsLength; j++) {
|
|
156
|
+
const key = propKeys[j]!;
|
|
157
|
+
const prop = effect.props[key]!;
|
|
158
|
+
if (prop.updateOnBind === true) {
|
|
159
|
+
const uniform =
|
|
160
|
+
this.renderer.shManager.getRegisteredEffects()[
|
|
161
|
+
effect.type as keyof EffectMap
|
|
162
|
+
]?.uniforms[key];
|
|
163
|
+
uniform?.updateProgramValue!(effect.props[key], props);
|
|
164
|
+
}
|
|
165
|
+
this.setUniform(uniformInfo[key]!.name, effect.props[key].programValue);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
171
168
|
}
|
|
172
169
|
|
|
173
170
|
override canBatchShaderProps(
|
|
@@ -192,7 +189,8 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
192
189
|
for (const key in effectA.props) {
|
|
193
190
|
if (
|
|
194
191
|
(effectB.props && !effectB.props[key]) ||
|
|
195
|
-
effectA.props[key]
|
|
192
|
+
(effectA.props[key] as ShaderEffectValueMap).value !==
|
|
193
|
+
(effectB.props[key] as ShaderEffectValueMap).value
|
|
196
194
|
) {
|
|
197
195
|
return false;
|
|
198
196
|
}
|
|
@@ -396,8 +394,12 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
396
394
|
props: DynamicShaderProps,
|
|
397
395
|
effectContructors?: Partial<EffectMap>,
|
|
398
396
|
): Required<DynamicShaderProps> {
|
|
397
|
+
assertTruthy(effectContructors);
|
|
399
398
|
return {
|
|
400
|
-
effects: getResolvedEffect(
|
|
399
|
+
effects: getResolvedEffect(
|
|
400
|
+
props.effects ?? [],
|
|
401
|
+
effectContructors,
|
|
402
|
+
) as EffectDescUnion[],
|
|
401
403
|
$dimensions: {
|
|
402
404
|
width: 0,
|
|
403
405
|
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
|
+
};
|