@lightningjs/renderer 3.0.0-beta14 → 3.0.0-beta16
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/dist/exports/index.d.ts +1 -0
- package/dist/exports/index.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +1 -1
- package/dist/src/core/CoreTextNode.d.ts +1 -2
- package/dist/src/core/CoreTextNode.js +43 -21
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/Stage.js +2 -3
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureError.d.ts +11 -0
- package/dist/src/core/TextureError.js +37 -0
- package/dist/src/core/TextureError.js.map +1 -0
- package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
- package/dist/src/core/animations/CoreAnimation.js +3 -3
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +5 -5
- package/dist/src/core/lib/textureCompression.js +1 -1
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/platform.d.ts +10 -0
- package/dist/src/core/platform.js +81 -0
- package/dist/src/core/platform.js.map +1 -0
- package/dist/src/core/renderers/CoreShader.d.ts +9 -0
- package/{src/core/text-rendering/sdf/index.ts → dist/src/core/renderers/CoreShader.js} +11 -3
- package/dist/src/core/renderers/CoreShader.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +14 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +138 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +19 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +58 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -0
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +43 -0
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +69 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +272 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +641 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +78 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +202 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +84 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +108 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +408 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +126 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +148 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +134 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +40 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +143 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +26 -3
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +49 -27
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
- package/dist/src/core/shaders/webgl/SdfShader.js +1 -10
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFont.d.ts +14 -0
- package/dist/src/core/text-rendering/CanvasFont.js +111 -0
- package/dist/src/core/text-rendering/CanvasFont.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +21 -3
- package/dist/src/core/text-rendering/CanvasFontHandler.js +97 -32
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +2 -7
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +51 -260
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/CoreFont.d.ts +33 -0
- package/dist/src/core/text-rendering/CoreFont.js +48 -0
- package/dist/src/core/text-rendering/CoreFont.js.map +1 -0
- package/dist/src/core/text-rendering/FontManager.d.ts +11 -0
- package/dist/src/core/text-rendering/FontManager.js +42 -0
- package/dist/src/core/text-rendering/FontManager.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFont.d.ts +29 -0
- package/dist/src/core/text-rendering/SdfFont.js +142 -0
- package/dist/src/core/text-rendering/SdfFont.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +35 -5
- package/dist/src/core/text-rendering/SdfFontHandler.js +79 -56
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +1 -1
- package/dist/src/core/text-rendering/SdfTextRenderer.js +38 -82
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +19 -0
- package/dist/src/core/text-rendering/{sdf/Utils.js → TextLayoutEngine.js} +125 -107
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +30 -13
- package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
- package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
- package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +72 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +217 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -0
- package/dist/src/core/text-rendering/TrFontManager.d.ts +26 -0
- package/dist/src/core/text-rendering/TrFontManager.js +131 -0
- package/dist/src/core/text-rendering/TrFontManager.js.map +1 -0
- package/dist/src/core/text-rendering/Utils.d.ts +1 -42
- package/dist/src/core/text-rendering/Utils.js +4 -132
- package/dist/src/core/text-rendering/Utils.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +39 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +125 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +103 -0
- package/dist/src/core/text-rendering/{sdf/index.js → font-face-types/SdfTrFontFace/internal/FontShaper.js} +4 -3
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +62 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +88 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +118 -0
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +63 -0
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +14 -0
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +66 -0
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/utils.d.ts +1 -0
- package/dist/src/core/text-rendering/font-face-types/utils.js +38 -0
- package/dist/src/core/text-rendering/font-face-types/utils.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +59 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +397 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +120 -0
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +551 -0
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +92 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +607 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +12 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +61 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +33 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +52 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +13 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +32 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +23 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +84 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +4 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +34 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +20 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +308 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +10 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +40 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
- package/dist/src/core/text-rendering/{canvas/Settings.js → renderers/SdfTextRenderer/internal/util.js} +22 -3
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +373 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +178 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -0
- package/dist/src/core/utils.d.ts +2 -1
- package/dist/src/core/utils.js +1 -1
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
- package/dist/src/main-api/DynamicShaderController.js +58 -0
- package/dist/src/main-api/DynamicShaderController.js.map +1 -0
- package/dist/src/main-api/Inspector.d.ts +124 -0
- package/dist/src/main-api/Inspector.js +292 -13
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +150 -26
- package/dist/src/main-api/Renderer.js +27 -25
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/main-api/ShaderController.d.ts +31 -0
- package/dist/src/main-api/ShaderController.js +37 -0
- package/dist/src/main-api/ShaderController.js.map +1 -0
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/index.ts +1 -0
- package/package.json +14 -15
- package/src/core/CoreTextNode.ts +55 -27
- package/src/core/Stage.ts +2 -3
- package/src/core/animations/CoreAnimation.ts +8 -9
- package/src/core/lib/textureCompression.ts +4 -2
- package/src/core/shaders/canvas/RoundedWithBorder.ts +1 -1
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +1 -1
- package/src/core/shaders/webgl/LinearGradient.ts +26 -3
- package/src/core/shaders/webgl/RadialGradient.ts +50 -28
- package/src/core/shaders/webgl/SdfShader.ts +1 -12
- package/src/core/text-rendering/CanvasFontHandler.ts +139 -39
- package/src/core/text-rendering/CanvasTextRenderer.ts +75 -440
- package/src/core/text-rendering/SdfFontHandler.ts +97 -60
- package/src/core/text-rendering/SdfTextRenderer.ts +62 -116
- package/src/core/text-rendering/{sdf/Utils.ts → TextLayoutEngine.ts} +211 -145
- package/src/core/text-rendering/TextRenderer.ts +36 -13
- package/src/core/text-rendering/Utils.ts +5 -163
- package/src/core/text-rendering/{sdf/Utils.test.ts → tests/Canvas.test.ts} +98 -122
- package/src/core/text-rendering/tests/SdfTests.test.ts +414 -0
- package/src/core/utils.ts +9 -7
- package/src/main-api/Inspector.ts +511 -17
- package/src/main-api/Renderer.ts +158 -26
- package/dist/src/core/text-rendering/canvas/Settings.d.ts +0 -64
- package/dist/src/core/text-rendering/canvas/Settings.js.map +0 -1
- package/dist/src/core/text-rendering/canvas/Utils.d.ts +0 -20
- package/dist/src/core/text-rendering/canvas/Utils.js +0 -144
- package/dist/src/core/text-rendering/canvas/Utils.js.map +0 -1
- package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +0 -60
- package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +0 -183
- package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +0 -1
- package/dist/src/core/text-rendering/canvas/draw.d.ts +0 -5
- package/dist/src/core/text-rendering/canvas/draw.js +0 -132
- package/dist/src/core/text-rendering/canvas/draw.js.map +0 -1
- package/dist/src/core/text-rendering/sdf/Utils.d.ts +0 -26
- package/dist/src/core/text-rendering/sdf/Utils.js.map +0 -1
- package/dist/src/core/text-rendering/sdf/index.d.ts +0 -1
- package/dist/src/core/text-rendering/sdf/index.js.map +0 -1
- package/src/core/text-rendering/canvas/Settings.ts +0 -99
- package/src/core/text-rendering/canvas/Utils.test.ts +0 -206
- package/src/core/text-rendering/canvas/Utils.ts +0 -178
- package/src/core/text-rendering/canvas/calculateRenderInfo.ts +0 -299
- package/src/core/text-rendering/canvas/draw.ts +0 -165
package/exports/index.ts
CHANGED
|
@@ -50,6 +50,7 @@ export {
|
|
|
50
50
|
} from '../src/core/CoreTextureManager.js';
|
|
51
51
|
export type { MemoryInfo } from '../src/core/TextureMemoryManager.js';
|
|
52
52
|
export type { AnimationSettings } from '../src/core/animations/CoreAnimation.js';
|
|
53
|
+
export type { TimingFunction } from '../src/core/utils.js';
|
|
53
54
|
export type { Inspector } from '../src/main-api/Inspector.js';
|
|
54
55
|
export type { CoreNodeRenderState } from '../src/core/CoreNode.js';
|
|
55
56
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lightningjs/renderer",
|
|
3
|
-
"version": "3.0.0-
|
|
3
|
+
"version": "3.0.0-beta16",
|
|
4
4
|
"description": "Lightning 3 Renderer",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/exports/index.js",
|
|
@@ -32,19 +32,19 @@
|
|
|
32
32
|
},
|
|
33
33
|
"homepage": "https://github.com/lightning-js/renderer#readme",
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@types/node": "^20.
|
|
36
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
37
|
-
"@typescript-eslint/parser": "^8.
|
|
38
|
-
"@vitest/coverage-v8": "^2.1.
|
|
39
|
-
"concurrently": "^8.
|
|
40
|
-
"eslint": "^9.
|
|
41
|
-
"eslint-config-prettier": "^8.
|
|
35
|
+
"@types/node": "^20.19.17",
|
|
36
|
+
"@typescript-eslint/eslint-plugin": "^8.44.0",
|
|
37
|
+
"@typescript-eslint/parser": "^8.44.0",
|
|
38
|
+
"@vitest/coverage-v8": "^2.1.9",
|
|
39
|
+
"concurrently": "^8.2.2",
|
|
40
|
+
"eslint": "^9.36.0",
|
|
41
|
+
"eslint-config-prettier": "^8.10.2",
|
|
42
42
|
"husky": "^8.0.3",
|
|
43
|
-
"lint-staged": "^13.
|
|
44
|
-
"prettier": "^2.8.
|
|
45
|
-
"typedoc": "^0.
|
|
46
|
-
"typescript": "~5.
|
|
47
|
-
"vitest": "^2.
|
|
43
|
+
"lint-staged": "^13.3.0",
|
|
44
|
+
"prettier": "^2.8.8",
|
|
45
|
+
"typedoc": "^0.28.13",
|
|
46
|
+
"typescript": "~5.9.2",
|
|
47
|
+
"vitest": "^2.1.9",
|
|
48
48
|
"vitest-mock-extended": "^2.0.2"
|
|
49
49
|
},
|
|
50
50
|
"lint-staged": {
|
|
@@ -63,10 +63,9 @@
|
|
|
63
63
|
"README.md",
|
|
64
64
|
"scripts"
|
|
65
65
|
],
|
|
66
|
-
"packageManager": "pnpm@8.9.2",
|
|
67
66
|
"engines": {
|
|
68
67
|
"npm": ">= 10.0.0",
|
|
69
|
-
"pnpm": ">=
|
|
68
|
+
"pnpm": ">= 10.17.0",
|
|
70
69
|
"node": ">= 18.0.0"
|
|
71
70
|
},
|
|
72
71
|
"scripts": {
|
package/src/core/CoreTextNode.ts
CHANGED
|
@@ -39,6 +39,7 @@ import type {
|
|
|
39
39
|
import type { RectWithValid } from './lib/utils.js';
|
|
40
40
|
import type { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
41
41
|
import type { TextureLoadedEventHandler } from './textures/Texture.js';
|
|
42
|
+
import { Matrix3d } from './lib/Matrix3d.js';
|
|
42
43
|
export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
|
|
43
44
|
/**
|
|
44
45
|
* Force Text Node to use a specific Text Renderer
|
|
@@ -93,7 +94,6 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
93
94
|
if (this.parentHasRenderTexture) {
|
|
94
95
|
this.notifyParentRTTOfUpdate();
|
|
95
96
|
}
|
|
96
|
-
|
|
97
97
|
// ignore 1x1 pixel textures
|
|
98
98
|
if (dimensions.w > 1 && dimensions.h > 1) {
|
|
99
99
|
this.emit('loaded', {
|
|
@@ -101,13 +101,7 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
101
101
|
dimensions,
|
|
102
102
|
} satisfies NodeTextureLoadedPayload);
|
|
103
103
|
}
|
|
104
|
-
|
|
105
|
-
this.w = this._renderInfo.width;
|
|
106
|
-
this.h = this._renderInfo.height;
|
|
107
|
-
|
|
108
|
-
// Texture was loaded. In case the RAF loop has already stopped, we request
|
|
109
|
-
// a render to ensure the texture is rendered.
|
|
110
|
-
this.stage.requestRender();
|
|
104
|
+
this.setUpdateType(UpdateType.IsRenderable);
|
|
111
105
|
};
|
|
112
106
|
|
|
113
107
|
allowTextGeneration() {
|
|
@@ -121,6 +115,52 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
121
115
|
return false;
|
|
122
116
|
}
|
|
123
117
|
|
|
118
|
+
override updateLocalTransform() {
|
|
119
|
+
const p = this.props;
|
|
120
|
+
let { x, y, w, h } = p;
|
|
121
|
+
const mountTranslateX = p.mountX * w;
|
|
122
|
+
const mountTranslateY = p.mountY * h;
|
|
123
|
+
|
|
124
|
+
const tProps = this.textProps;
|
|
125
|
+
const { textAlign, verticalAlign, maxWidth, maxHeight } = tProps;
|
|
126
|
+
|
|
127
|
+
if (textAlign !== 'left' && maxWidth > 0) {
|
|
128
|
+
if (textAlign === 'right') {
|
|
129
|
+
x += maxWidth - w;
|
|
130
|
+
} else if (textAlign === 'center') {
|
|
131
|
+
x += (maxWidth - w) * 0.5;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (verticalAlign !== 'top' && maxHeight > 0) {
|
|
136
|
+
if (verticalAlign === 'bottom') {
|
|
137
|
+
y += maxHeight - h;
|
|
138
|
+
} else if (verticalAlign === 'middle') {
|
|
139
|
+
y += (maxHeight - h) * 0.5;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (p.rotation !== 0 || p.scaleX !== 1 || p.scaleY !== 1) {
|
|
144
|
+
const scaleRotate = Matrix3d.rotate(p.rotation).scale(p.scaleX, p.scaleY);
|
|
145
|
+
const pivotTranslateX = p.pivotX * w;
|
|
146
|
+
const pivotTranslateY = p.pivotY * h;
|
|
147
|
+
|
|
148
|
+
this.localTransform = Matrix3d.translate(
|
|
149
|
+
x - mountTranslateX + pivotTranslateX,
|
|
150
|
+
y - mountTranslateY + pivotTranslateY,
|
|
151
|
+
this.localTransform,
|
|
152
|
+
)
|
|
153
|
+
.multiply(scaleRotate)
|
|
154
|
+
.translate(-pivotTranslateX, -pivotTranslateY);
|
|
155
|
+
} else {
|
|
156
|
+
this.localTransform = Matrix3d.translate(
|
|
157
|
+
x - mountTranslateX,
|
|
158
|
+
y - mountTranslateY,
|
|
159
|
+
this.localTransform,
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
124
164
|
/**
|
|
125
165
|
* Override CoreNode's update method to handle text-specific updates
|
|
126
166
|
*/
|
|
@@ -134,7 +174,7 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
134
174
|
this._waitingForFont = false;
|
|
135
175
|
this._cachedLayout = null; // Invalidate cached layout
|
|
136
176
|
this._lastVertexBuffer = null; // Invalidate last vertex buffer
|
|
137
|
-
const resp = this.textRenderer.renderText(this.
|
|
177
|
+
const resp = this.textRenderer.renderText(this.textProps);
|
|
138
178
|
this.handleRenderResult(resp);
|
|
139
179
|
this._layoutGenerated = true;
|
|
140
180
|
} else if (this._waitingForFont === false) {
|
|
@@ -186,7 +226,6 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
186
226
|
premultiplyAlpha: true,
|
|
187
227
|
src: result.imageData as ImageData,
|
|
188
228
|
});
|
|
189
|
-
|
|
190
229
|
// It isn't renderable until the texture is loaded we have to set it to false here to avoid it
|
|
191
230
|
// being detected as a renderable default color node in the next frame
|
|
192
231
|
// it will be corrected once the texture is loaded
|
|
@@ -198,12 +237,13 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
198
237
|
}
|
|
199
238
|
}
|
|
200
239
|
|
|
240
|
+
this._cachedLayout = result.layout || null;
|
|
241
|
+
this.props.w = width;
|
|
242
|
+
this.props.h = height;
|
|
243
|
+
|
|
201
244
|
// Handle SDF renderer (uses layout caching)
|
|
202
245
|
if (textRendererType === 'sdf') {
|
|
203
|
-
this._cachedLayout = result.layout || null;
|
|
204
246
|
this.setRenderable(true);
|
|
205
|
-
this.props.w = width;
|
|
206
|
-
this.props.h = height;
|
|
207
247
|
this.setUpdateType(UpdateType.Local);
|
|
208
248
|
}
|
|
209
249
|
|
|
@@ -341,7 +381,7 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
341
381
|
this.fontHandler.stopWaitingForFont(this.textProps.fontFamily, this);
|
|
342
382
|
}
|
|
343
383
|
this.textProps.fontFamily = value;
|
|
344
|
-
this._layoutGenerated =
|
|
384
|
+
this._layoutGenerated = false;
|
|
345
385
|
this.setUpdateType(UpdateType.Local);
|
|
346
386
|
}
|
|
347
387
|
}
|
|
@@ -353,7 +393,7 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
353
393
|
set fontStyle(value: TrProps['fontStyle']) {
|
|
354
394
|
if (this.textProps.fontStyle !== value) {
|
|
355
395
|
this.textProps.fontStyle = value;
|
|
356
|
-
this._layoutGenerated =
|
|
396
|
+
this._layoutGenerated = false;
|
|
357
397
|
this.setUpdateType(UpdateType.Local);
|
|
358
398
|
}
|
|
359
399
|
}
|
|
@@ -406,18 +446,6 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
406
446
|
}
|
|
407
447
|
}
|
|
408
448
|
|
|
409
|
-
get textBaseline(): TrProps['textBaseline'] {
|
|
410
|
-
return this.textProps.textBaseline;
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
set textBaseline(value: TrProps['textBaseline']) {
|
|
414
|
-
if (this.textProps.textBaseline !== value) {
|
|
415
|
-
this.textProps.textBaseline = value;
|
|
416
|
-
this._layoutGenerated = false;
|
|
417
|
-
this.setUpdateType(UpdateType.Local);
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
449
|
get verticalAlign(): TrProps['verticalAlign'] {
|
|
422
450
|
return this.textProps.verticalAlign;
|
|
423
451
|
}
|
package/src/core/Stage.ts
CHANGED
|
@@ -678,10 +678,9 @@ export class Stage {
|
|
|
678
678
|
textAlign: props.textAlign || 'left',
|
|
679
679
|
offsetY: props.offsetY || 0,
|
|
680
680
|
letterSpacing: props.letterSpacing || 0,
|
|
681
|
-
lineHeight: props.lineHeight ||
|
|
681
|
+
lineHeight: props.lineHeight || 1.2,
|
|
682
682
|
maxLines: props.maxLines || 0,
|
|
683
|
-
|
|
684
|
-
verticalAlign: props.verticalAlign || 'middle',
|
|
683
|
+
verticalAlign: props.verticalAlign || 'top',
|
|
685
684
|
overflowSuffix: props.overflowSuffix || '...',
|
|
686
685
|
wordBreak: props.wordBreak || 'normal',
|
|
687
686
|
maxWidth: props.maxWidth || 0,
|
|
@@ -18,17 +18,16 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import { type CoreNode, type CoreNodeAnimateProps } from '../CoreNode.js';
|
|
21
|
-
import { getTimingFunction } from '../utils.js';
|
|
21
|
+
import { getTimingFunction, type TimingFunction } from '../utils.js';
|
|
22
22
|
import { mergeColorProgress } from '../../utils.js';
|
|
23
23
|
import { EventEmitter } from '../../common/EventEmitter.js';
|
|
24
24
|
|
|
25
25
|
export interface AnimationSettings {
|
|
26
26
|
duration: number;
|
|
27
27
|
delay: number;
|
|
28
|
-
easing: string;
|
|
28
|
+
easing: string | TimingFunction;
|
|
29
29
|
loop: boolean;
|
|
30
30
|
repeat: number;
|
|
31
|
-
repeatDelay: number;
|
|
32
31
|
stopMethod: 'reverse' | 'reset' | false;
|
|
33
32
|
}
|
|
34
33
|
|
|
@@ -43,7 +42,7 @@ export class CoreAnimation extends EventEmitter {
|
|
|
43
42
|
private progress = 0;
|
|
44
43
|
private delayFor = 0;
|
|
45
44
|
private delay = 0;
|
|
46
|
-
private timingFunction:
|
|
45
|
+
private timingFunction: TimingFunction;
|
|
47
46
|
|
|
48
47
|
propValuesMap: PropValuesMap = {};
|
|
49
48
|
|
|
@@ -89,10 +88,10 @@ export class CoreAnimation extends EventEmitter {
|
|
|
89
88
|
easing,
|
|
90
89
|
loop: settings.loop ?? false,
|
|
91
90
|
repeat: settings.repeat ?? 0,
|
|
92
|
-
repeatDelay: settings.repeatDelay ?? 0,
|
|
93
91
|
stopMethod: settings.stopMethod ?? false,
|
|
94
92
|
};
|
|
95
|
-
this.timingFunction =
|
|
93
|
+
this.timingFunction =
|
|
94
|
+
typeof easing === 'string' ? getTimingFunction(easing) : easing;
|
|
96
95
|
this.delayFor = delay;
|
|
97
96
|
this.delay = delay;
|
|
98
97
|
}
|
|
@@ -162,14 +161,14 @@ export class CoreAnimation extends EventEmitter {
|
|
|
162
161
|
}
|
|
163
162
|
|
|
164
163
|
private applyEasing(p: number, s: number, e: number): number {
|
|
165
|
-
return
|
|
164
|
+
return this.timingFunction(p) * (e - s) + s;
|
|
166
165
|
}
|
|
167
166
|
|
|
168
167
|
updateValue(
|
|
169
168
|
propName: string,
|
|
170
169
|
propValue: number,
|
|
171
170
|
startValue: number,
|
|
172
|
-
easing: string | undefined,
|
|
171
|
+
easing: string | TimingFunction | undefined,
|
|
173
172
|
): number {
|
|
174
173
|
if (this.progress === 1) {
|
|
175
174
|
return propValue;
|
|
@@ -201,7 +200,7 @@ export class CoreAnimation extends EventEmitter {
|
|
|
201
200
|
private updateValues(
|
|
202
201
|
target: Record<string, number>,
|
|
203
202
|
valueMap: Record<string, PropValues>,
|
|
204
|
-
easing: string | undefined,
|
|
203
|
+
easing: string | TimingFunction | undefined,
|
|
205
204
|
) {
|
|
206
205
|
const entries = Object.entries(valueMap);
|
|
207
206
|
const eLength = entries.length;
|
|
@@ -114,7 +114,7 @@ const loadPVRData = async (buffer: ArrayBuffer): Promise<TextureData> => {
|
|
|
114
114
|
|
|
115
115
|
const dataOffset = header[pvrMetadata] + 52;
|
|
116
116
|
const pvrtcData = new Uint8Array(arrayBuffer, dataOffset);
|
|
117
|
-
const mipmaps:
|
|
117
|
+
const mipmaps: ArrayBuffer[] = [];
|
|
118
118
|
const data = {
|
|
119
119
|
pixelWidth: header[pvrWidth],
|
|
120
120
|
pixelHeight: header[pvrHeight],
|
|
@@ -133,7 +133,9 @@ const loadPVRData = async (buffer: ArrayBuffer): Promise<TextureData> => {
|
|
|
133
133
|
level,
|
|
134
134
|
);
|
|
135
135
|
|
|
136
|
-
mipmaps.push(
|
|
136
|
+
mipmaps.push(
|
|
137
|
+
view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength),
|
|
138
|
+
);
|
|
137
139
|
offset += level;
|
|
138
140
|
width = width >> 1;
|
|
139
141
|
height = height >> 1;
|
|
@@ -78,7 +78,7 @@ export const RoundedWithBorderAndShadow: CanvasShaderType<
|
|
|
78
78
|
quad.width,
|
|
79
79
|
quad.height,
|
|
80
80
|
computed.radius,
|
|
81
|
-
this.props!['border-
|
|
81
|
+
this.props!['border-w'] as Vec4,
|
|
82
82
|
computed.borderRadius,
|
|
83
83
|
computed.borderColor,
|
|
84
84
|
computed.borderAsym,
|
|
@@ -49,6 +49,8 @@ export const LinearGradient: WebGlShaderType<LinearGradientProps> = {
|
|
|
49
49
|
# endif
|
|
50
50
|
|
|
51
51
|
#define PI 3.14159265359
|
|
52
|
+
#define MAX_STOPS ${props.colors.length}
|
|
53
|
+
#define LAST_STOP ${props.colors.length - 1}
|
|
52
54
|
|
|
53
55
|
uniform float u_alpha;
|
|
54
56
|
uniform vec2 u_dimensions;
|
|
@@ -56,8 +58,8 @@ export const LinearGradient: WebGlShaderType<LinearGradientProps> = {
|
|
|
56
58
|
uniform sampler2D u_texture;
|
|
57
59
|
|
|
58
60
|
uniform float u_angle;
|
|
59
|
-
uniform float u_stops[
|
|
60
|
-
uniform vec4 u_colors[
|
|
61
|
+
uniform float u_stops[MAX_STOPS];
|
|
62
|
+
uniform vec4 u_colors[MAX_STOPS];
|
|
61
63
|
|
|
62
64
|
varying vec4 v_color;
|
|
63
65
|
varying vec2 v_textureCoords;
|
|
@@ -66,6 +68,27 @@ export const LinearGradient: WebGlShaderType<LinearGradientProps> = {
|
|
|
66
68
|
return d * vec2(cos(angle), sin(angle)) + (u_dimensions * 0.5);
|
|
67
69
|
}
|
|
68
70
|
|
|
71
|
+
vec4 getGradientColor(float dist) {
|
|
72
|
+
dist = clamp(dist, 0.0, 1.0);
|
|
73
|
+
|
|
74
|
+
if(dist <= u_stops[0]) {
|
|
75
|
+
return u_colors[0];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if(dist >= u_stops[LAST_STOP]) {
|
|
79
|
+
return u_colors[LAST_STOP];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
for(int i = 0; i < LAST_STOP; i++) {
|
|
83
|
+
float left = u_stops[i];
|
|
84
|
+
float right = u_stops[i + 1];
|
|
85
|
+
if(dist >= left && dist <= right) {
|
|
86
|
+
float lDist = smoothstep(left, right, dist);
|
|
87
|
+
return mix(u_colors[i], u_colors[i + 1], lDist);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
69
92
|
void main() {
|
|
70
93
|
vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
|
|
71
94
|
float a = u_angle;
|
|
@@ -74,7 +97,7 @@ export const LinearGradient: WebGlShaderType<LinearGradientProps> = {
|
|
|
74
97
|
vec2 t = calcPoint(lineDist * 0.5, a + PI);
|
|
75
98
|
vec2 gradVec = t - f;
|
|
76
99
|
float dist = dot(v_textureCoords.xy * u_dimensions - f, gradVec) / dot(gradVec, gradVec);
|
|
77
|
-
|
|
100
|
+
vec4 colorOut = getGradientColor(dist);
|
|
78
101
|
gl_FragColor = mix(color, colorOut, clamp(colorOut.a, 0.0, 1.0));
|
|
79
102
|
}
|
|
80
103
|
`;
|
|
@@ -21,9 +21,8 @@ import {
|
|
|
21
21
|
RadialGradientTemplate,
|
|
22
22
|
type RadialGradientProps,
|
|
23
23
|
} from '../templates/RadialGradientTemplate.js';
|
|
24
|
-
import { genGradientColors } from '../../renderers/webgl/internal/ShaderUtils.js';
|
|
25
|
-
import type { WebGlRenderer } from '../../renderers/webgl/WebGlRenderer.js';
|
|
26
24
|
import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
|
|
25
|
+
import type { WebGlRenderer } from '../../renderers/webgl/WebGlRenderer.js';
|
|
27
26
|
|
|
28
27
|
export const RadialGradient: WebGlShaderType<RadialGradientProps> = {
|
|
29
28
|
props: RadialGradientTemplate.props,
|
|
@@ -48,38 +47,61 @@ export const RadialGradient: WebGlShaderType<RadialGradientProps> = {
|
|
|
48
47
|
},
|
|
49
48
|
fragment(renderer: WebGlRenderer, props: RadialGradientProps) {
|
|
50
49
|
return `
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
# ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
51
|
+
precision highp float;
|
|
52
|
+
# else
|
|
53
|
+
precision mediump float;
|
|
54
|
+
# endif
|
|
56
55
|
|
|
57
|
-
|
|
56
|
+
#define MAX_STOPS ${props.colors.length}
|
|
57
|
+
#define LAST_STOP ${props.colors.length - 1}
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
uniform float u_alpha;
|
|
60
|
+
uniform vec2 u_dimensions;
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
uniform sampler2D u_texture;
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
uniform vec2 u_projection;
|
|
65
|
+
uniform vec2 u_size;
|
|
66
|
+
uniform float u_stops[MAX_STOPS];
|
|
67
|
+
uniform vec4 u_colors[MAX_STOPS];
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
varying vec4 v_color;
|
|
70
|
+
varying vec2 v_textureCoords;
|
|
71
71
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
vec2 calcPoint(float d, float angle) {
|
|
73
|
+
return d * vec2(cos(angle), sin(angle)) + (u_dimensions * 0.5);
|
|
74
|
+
}
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
76
|
+
vec4 getGradientColor(float dist) {
|
|
77
|
+
dist = clamp(dist, 0.0, 1.0);
|
|
78
|
+
|
|
79
|
+
if(dist <= u_stops[0]) {
|
|
80
|
+
return u_colors[0];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if(dist >= u_stops[LAST_STOP]) {
|
|
84
|
+
return u_colors[LAST_STOP];
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
for(int i = 0; i < LAST_STOP; i++) {
|
|
88
|
+
float left = u_stops[i];
|
|
89
|
+
float right = u_stops[i + 1];
|
|
90
|
+
if(dist >= left && dist <= right) {
|
|
91
|
+
float lDist = smoothstep(left, right, dist);
|
|
92
|
+
return mix(u_colors[i], u_colors[i + 1], lDist);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
void main() {
|
|
98
|
+
vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
|
|
99
|
+
vec2 point = v_textureCoords.xy * u_dimensions;
|
|
100
|
+
float dist = length((point - u_projection) / u_size);
|
|
101
|
+
|
|
102
|
+
vec4 colorOut = getGradientColor(dist);
|
|
103
|
+
gl_FragColor = mix(color, colorOut, clamp(colorOut.a, 0.0, 1.0));
|
|
104
|
+
}
|
|
105
|
+
`;
|
|
84
106
|
},
|
|
85
107
|
};
|
|
@@ -25,7 +25,6 @@ const IDENTITY_MATRIX_3x3 = new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
|
|
|
25
25
|
*/
|
|
26
26
|
export interface SdfShaderProps {
|
|
27
27
|
transform: Float32Array;
|
|
28
|
-
scrollY: number;
|
|
29
28
|
/**
|
|
30
29
|
* Color in RGBA format
|
|
31
30
|
*
|
|
@@ -35,7 +34,6 @@ export interface SdfShaderProps {
|
|
|
35
34
|
color: number;
|
|
36
35
|
size: number;
|
|
37
36
|
distanceRange: number;
|
|
38
|
-
debug: boolean;
|
|
39
37
|
}
|
|
40
38
|
/**
|
|
41
39
|
* SdfShader supports multi-channel and single-channel signed distance field textures.
|
|
@@ -53,19 +51,15 @@ export interface SdfShaderProps {
|
|
|
53
51
|
export const Sdf: WebGlShaderType<SdfShaderProps> = {
|
|
54
52
|
props: {
|
|
55
53
|
transform: IDENTITY_MATRIX_3x3,
|
|
56
|
-
scrollY: 0,
|
|
57
54
|
color: 0xffffffff,
|
|
58
55
|
size: 16,
|
|
59
56
|
distanceRange: 1.0,
|
|
60
|
-
debug: false,
|
|
61
57
|
},
|
|
62
58
|
onSdfBind(props) {
|
|
63
59
|
this.uniformMatrix3fv('u_transform', props.transform);
|
|
64
|
-
this.uniform1f('u_scrollY', props.scrollY);
|
|
65
60
|
this.uniform4fa('u_color', getNormalizedRgbaComponents(props.color));
|
|
66
61
|
this.uniform1f('u_size', props.size);
|
|
67
62
|
this.uniform1f('u_distanceRange', props.distanceRange);
|
|
68
|
-
this.uniform1i('u_debug', props.debug ? 1 : 0);
|
|
69
63
|
},
|
|
70
64
|
vertex: `
|
|
71
65
|
# ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
@@ -80,14 +74,13 @@ export const Sdf: WebGlShaderType<SdfShaderProps> = {
|
|
|
80
74
|
|
|
81
75
|
uniform vec2 u_resolution;
|
|
82
76
|
uniform mat3 u_transform;
|
|
83
|
-
uniform float u_scrollY;
|
|
84
77
|
uniform float u_pixelRatio;
|
|
85
78
|
uniform float u_size;
|
|
86
79
|
|
|
87
80
|
varying vec2 v_texcoord;
|
|
88
81
|
|
|
89
82
|
void main() {
|
|
90
|
-
vec2 scrolledPosition = a_position * u_size
|
|
83
|
+
vec2 scrolledPosition = a_position * u_size;
|
|
91
84
|
vec2 transformedPosition = (u_transform * vec3(scrolledPosition, 1)).xy;
|
|
92
85
|
|
|
93
86
|
// Calculate screen space with pixel ratio
|
|
@@ -118,10 +111,6 @@ export const Sdf: WebGlShaderType<SdfShaderProps> = {
|
|
|
118
111
|
|
|
119
112
|
void main() {
|
|
120
113
|
vec3 sample = texture2D(u_texture, v_texcoord).rgb;
|
|
121
|
-
if (u_debug == 1) {
|
|
122
|
-
gl_FragColor = vec4(sample.r, sample.g, sample.b, 1.0);
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
114
|
float scaledDistRange = u_distanceRange * u_pixelRatio;
|
|
126
115
|
float sigDist = scaledDistRange * (median(sample.r, sample.g, sample.b) - 0.5);
|
|
127
116
|
float opacity = clamp(sigDist + 0.5, 0.0, 1.0) * u_color.a;
|