@solidtv/renderer 1.0.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/LICENSE +202 -0
- package/NOTICE +7 -0
- package/README.md +137 -0
- package/dist/exports/canvas-shaders.d.ts +10 -0
- package/dist/exports/canvas-shaders.js +11 -0
- package/dist/exports/canvas-shaders.js.map +1 -0
- package/dist/exports/canvas.d.ts +26 -0
- package/dist/exports/canvas.js +27 -0
- package/dist/exports/canvas.js.map +1 -0
- package/dist/exports/index.d.ts +50 -0
- package/dist/exports/index.js +40 -0
- package/dist/exports/index.js.map +1 -0
- package/dist/exports/inspector.d.ts +4 -0
- package/dist/exports/inspector.js +5 -0
- package/dist/exports/inspector.js.map +1 -0
- package/dist/exports/utils.d.ts +27 -0
- package/dist/exports/utils.js +28 -0
- package/dist/exports/utils.js.map +1 -0
- package/dist/exports/webgl-shaders.d.ts +11 -0
- package/dist/exports/webgl-shaders.js +12 -0
- package/dist/exports/webgl-shaders.js.map +1 -0
- package/dist/exports/webgl.d.ts +28 -0
- package/dist/exports/webgl.js +29 -0
- package/dist/exports/webgl.js.map +1 -0
- package/dist/src/common/CommonTypes.d.ts +110 -0
- package/dist/src/common/CommonTypes.js +2 -0
- package/dist/src/common/CommonTypes.js.map +1 -0
- package/dist/src/common/EventEmitter.d.ts +12 -0
- package/dist/src/common/EventEmitter.js +48 -0
- package/dist/src/common/EventEmitter.js.map +1 -0
- package/dist/src/common/IAnimationController.d.ts +58 -0
- package/dist/src/common/IAnimationController.js +2 -0
- package/dist/src/common/IAnimationController.js.map +1 -0
- package/dist/src/common/IEventEmitter.d.ts +8 -0
- package/dist/src/common/IEventEmitter.js +2 -0
- package/dist/src/common/IEventEmitter.js.map +1 -0
- package/dist/src/core/Autosizer.d.ts +35 -0
- package/dist/src/core/Autosizer.js +178 -0
- package/dist/src/core/Autosizer.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +908 -0
- package/dist/src/core/CoreNode.js +1837 -0
- package/dist/src/core/CoreNode.js.map +1 -0
- package/dist/src/core/CoreShaderManager.d.ts +38 -0
- package/dist/src/core/CoreShaderManager.js +123 -0
- package/dist/src/core/CoreShaderManager.js.map +1 -0
- package/dist/src/core/CoreTextNode.d.ts +91 -0
- package/dist/src/core/CoreTextNode.js +440 -0
- package/dist/src/core/CoreTextNode.js.map +1 -0
- package/dist/src/core/CoreTextureManager.d.ts +264 -0
- package/dist/src/core/CoreTextureManager.js +318 -0
- package/dist/src/core/CoreTextureManager.js.map +1 -0
- package/dist/src/core/Stage.d.ts +238 -0
- package/dist/src/core/Stage.js +804 -0
- package/dist/src/core/Stage.js.map +1 -0
- 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/TextureMemoryManager.d.ts +150 -0
- package/dist/src/core/TextureMemoryManager.js +239 -0
- package/dist/src/core/TextureMemoryManager.js.map +1 -0
- package/dist/src/core/animations/AnimationManager.d.ts +33 -0
- package/dist/src/core/animations/AnimationManager.js +137 -0
- package/dist/src/core/animations/AnimationManager.js.map +1 -0
- package/dist/src/core/animations/CoreAnimation.d.ts +12 -0
- package/dist/src/core/animations/CoreAnimation.js +107 -0
- package/dist/src/core/animations/CoreAnimation.js.map +1 -0
- package/dist/src/core/lib/ContextSpy.d.ts +12 -0
- package/dist/src/core/lib/ContextSpy.js +20 -0
- package/dist/src/core/lib/ContextSpy.js.map +1 -0
- package/dist/src/core/lib/ImageWorker.d.ts +16 -0
- package/dist/src/core/lib/ImageWorker.js +202 -0
- package/dist/src/core/lib/ImageWorker.js.map +1 -0
- package/dist/src/core/lib/Matrix3d.d.ts +74 -0
- package/dist/src/core/lib/Matrix3d.js +218 -0
- package/dist/src/core/lib/Matrix3d.js.map +1 -0
- package/dist/src/core/lib/RenderCoords.d.ts +12 -0
- package/dist/src/core/lib/RenderCoords.js +35 -0
- package/dist/src/core/lib/RenderCoords.js.map +1 -0
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +782 -0
- package/dist/src/core/lib/WebGlContextWrapper.js +1143 -0
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -0
- package/dist/src/core/lib/collectionUtils.d.ts +5 -0
- package/dist/src/core/lib/collectionUtils.js +82 -0
- package/dist/src/core/lib/collectionUtils.js.map +1 -0
- package/dist/src/core/lib/colorCache.d.ts +1 -0
- package/dist/src/core/lib/colorCache.js +19 -0
- package/dist/src/core/lib/colorCache.js.map +1 -0
- package/dist/src/core/lib/colorParser.d.ts +21 -0
- package/dist/src/core/lib/colorParser.js +54 -0
- package/dist/src/core/lib/colorParser.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +28 -0
- package/dist/src/core/lib/textureCompression.js +363 -0
- package/dist/src/core/lib/textureCompression.js.map +1 -0
- package/dist/src/core/lib/textureSvg.d.ts +16 -0
- package/dist/src/core/lib/textureSvg.js +45 -0
- package/dist/src/core/lib/textureSvg.js.map +1 -0
- package/dist/src/core/lib/utils.d.ts +66 -0
- package/dist/src/core/lib/utils.js +268 -0
- package/dist/src/core/lib/utils.js.map +1 -0
- package/dist/src/core/lib/validateImageBitmap.d.ts +7 -0
- package/dist/src/core/lib/validateImageBitmap.js +68 -0
- package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
- package/dist/src/core/platforms/Platform.d.ts +42 -0
- package/dist/src/core/platforms/Platform.js +4 -0
- package/dist/src/core/platforms/Platform.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
- package/dist/src/core/platforms/web/WebPlatform.js +90 -0
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
- package/dist/src/core/renderers/CoreContextTexture.d.ts +13 -0
- package/dist/src/core/renderers/CoreContextTexture.js +16 -0
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -0
- package/dist/src/core/renderers/CoreRenderOp.d.ts +3 -0
- package/dist/src/core/renderers/CoreRenderOp.js +3 -0
- package/dist/src/core/renderers/CoreRenderOp.js.map +1 -0
- package/dist/src/core/renderers/CoreRenderer.d.ts +81 -0
- package/dist/src/core/renderers/CoreRenderer.js +14 -0
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/CoreShaderNode.d.ts +69 -0
- package/dist/src/core/renderers/CoreShaderNode.js +130 -0
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
- package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
- package/dist/src/core/renderers/CoreShaderProgram.js +2 -0
- package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +36 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +221 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +42 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +17 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.js +110 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +41 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +88 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +14 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +45 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +22 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +49 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +67 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +259 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +221 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +1015 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +213 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +240 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +28 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js +39 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +55 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js +88 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +74 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +83 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.d.ts +10 -0
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +13 -0
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -0
- package/dist/src/core/shaders/canvas/Border.d.ts +15 -0
- package/dist/src/core/shaders/canvas/Border.js +83 -0
- package/dist/src/core/shaders/canvas/Border.js.map +1 -0
- package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
- package/dist/src/core/shaders/canvas/HolePunch.js +22 -0
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
- package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
- package/dist/src/core/shaders/canvas/LinearGradient.js +32 -0
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
- package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
- package/dist/src/core/shaders/canvas/RadialGradient.js +54 -0
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
- package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
- package/dist/src/core/shaders/canvas/Rounded.js +17 -0
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +10 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +57 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +7 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +61 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +26 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
- package/dist/src/core/shaders/canvas/Shadow.js +15 -0
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
- package/dist/src/core/shaders/canvas/utils/render.js +81 -0
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +47 -0
- package/dist/src/core/shaders/templates/BorderTemplate.js +77 -0
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +19 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js +31 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +33 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +33 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.js +51 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +8 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +8 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +9 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +7 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.js +50 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/utils.d.ts +5 -0
- package/dist/src/core/shaders/utils.js +25 -0
- package/dist/src/core/shaders/utils.js.map +1 -0
- package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
- package/dist/src/core/shaders/webgl/Border.js +153 -0
- package/dist/src/core/shaders/webgl/Border.js.map +1 -0
- package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
- package/dist/src/core/shaders/webgl/Default.js +51 -0
- package/dist/src/core/shaders/webgl/Default.js.map +1 -0
- package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
- package/dist/src/core/shaders/webgl/HolePunch.js +49 -0
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
- package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
- package/dist/src/core/shaders/webgl/LinearGradient.js +114 -0
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
- package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RadialGradient.js +81 -0
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
- package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
- package/dist/src/core/shaders/webgl/Rounded.js +88 -0
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +202 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +223 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +123 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +13 -0
- package/dist/src/core/shaders/webgl/SdfShader.js +72 -0
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
- package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/Shadow.js +115 -0
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +249 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +406 -0
- package/dist/src/core/text-rendering/TextRenderer.js +2 -0
- package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/Utils.d.ts +30 -0
- package/dist/src/core/text-rendering/Utils.js +66 -0
- package/dist/src/core/text-rendering/Utils.js.map +1 -0
- package/dist/src/core/textures/ColorTexture.d.ts +36 -0
- package/dist/src/core/textures/ColorTexture.js +57 -0
- package/dist/src/core/textures/ColorTexture.js.map +1 -0
- package/dist/src/core/textures/ImageTexture.d.ts +131 -0
- package/dist/src/core/textures/ImageTexture.js +211 -0
- package/dist/src/core/textures/ImageTexture.js.map +1 -0
- package/dist/src/core/textures/NoiseTexture.d.ts +43 -0
- package/dist/src/core/textures/NoiseTexture.js +50 -0
- package/dist/src/core/textures/NoiseTexture.js.map +1 -0
- package/dist/src/core/textures/RenderTexture.d.ts +29 -0
- package/dist/src/core/textures/RenderTexture.js +36 -0
- package/dist/src/core/textures/RenderTexture.js.map +1 -0
- package/dist/src/core/textures/SubTexture.d.ts +61 -0
- package/dist/src/core/textures/SubTexture.js +99 -0
- package/dist/src/core/textures/SubTexture.js.map +1 -0
- package/dist/src/core/textures/Texture.d.ts +275 -0
- package/dist/src/core/textures/Texture.js +326 -0
- package/dist/src/core/textures/Texture.js.map +1 -0
- package/dist/src/core/utils.d.ts +23 -0
- package/dist/src/core/utils.js +155 -0
- package/dist/src/core/utils.js.map +1 -0
- package/dist/src/main-api/INode.d.ts +65 -0
- package/dist/src/main-api/INode.js +2 -0
- package/dist/src/main-api/INode.js.map +1 -0
- package/dist/src/main-api/Inspector.d.ts +154 -0
- package/dist/src/main-api/Inspector.js +844 -0
- package/dist/src/main-api/Inspector.js.map +1 -0
- package/dist/src/main-api/Renderer.d.ts +629 -0
- package/dist/src/main-api/Renderer.js +471 -0
- package/dist/src/main-api/Renderer.js.map +1 -0
- package/dist/src/main-api/utils.d.ts +2 -0
- package/dist/src/main-api/utils.js +34 -0
- package/dist/src/main-api/utils.js.map +1 -0
- package/dist/src/utils.d.ts +123 -0
- package/dist/src/utils.js +234 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/tsconfig.dist.tsbuildinfo +1 -0
- package/exports/canvas-shaders.ts +11 -0
- package/exports/canvas.ts +27 -0
- package/exports/index.ts +69 -0
- package/exports/inspector.ts +5 -0
- package/exports/utils.ts +32 -0
- package/exports/webgl-shaders.ts +12 -0
- package/exports/webgl.ts +33 -0
- package/package.json +99 -0
- package/src/common/CommonTypes.ts +145 -0
- package/src/common/EventEmitter.ts +58 -0
- package/src/common/IAnimationController.ts +65 -0
- package/src/common/IEventEmitter.ts +11 -0
- package/src/core/Autosizer.ts +205 -0
- package/src/core/CoreNode.test.ts +535 -0
- package/src/core/CoreNode.ts +2883 -0
- package/src/core/CoreShaderManager.ts +170 -0
- package/src/core/CoreTextNode.ts +573 -0
- package/src/core/CoreTextureManager.ts +552 -0
- package/src/core/Stage.ts +1037 -0
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +378 -0
- package/src/core/animations/AnimationManager.ts +178 -0
- package/src/core/animations/CoreAnimation.ts +138 -0
- package/src/core/lib/ContextSpy.ts +22 -0
- package/src/core/lib/ImageWorker.ts +292 -0
- package/src/core/lib/Matrix3d.ts +231 -0
- package/src/core/lib/RenderCoords.ts +55 -0
- package/src/core/lib/WebGlContextWrapper.ts +1448 -0
- package/src/core/lib/collectionUtils.ts +99 -0
- package/src/core/lib/colorCache.ts +20 -0
- package/src/core/lib/colorParser.ts +66 -0
- package/src/core/lib/textureCompression.ts +492 -0
- package/src/core/lib/textureSvg.ts +59 -0
- package/src/core/lib/utils.ts +400 -0
- package/src/core/lib/validateImageBitmap.ts +87 -0
- package/src/core/platforms/Platform.ts +64 -0
- package/src/core/platforms/web/WebPlatform.ts +132 -0
- package/src/core/renderers/CoreContextTexture.ts +25 -0
- package/src/core/renderers/CoreRenderOp.ts +3 -0
- package/src/core/renderers/CoreRenderer.ts +101 -0
- package/src/core/renderers/CoreShaderNode.ts +202 -0
- package/src/core/renderers/CoreShaderProgram.ts +4 -0
- package/src/core/renderers/canvas/CanvasRenderer.ts +274 -0
- package/src/core/renderers/canvas/CanvasShaderNode.ts +79 -0
- package/src/core/renderers/canvas/CanvasTexture.ts +141 -0
- package/src/core/renderers/webgl/SdfRenderOp.ts +103 -0
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +70 -0
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +76 -0
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +332 -0
- package/src/core/renderers/webgl/WebGlRenderer.ts +1323 -0
- package/src/core/renderers/webgl/WebGlShaderNode.ts +423 -0
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +346 -0
- package/src/core/renderers/webgl/internal/BufferCollection.ts +46 -0
- package/src/core/renderers/webgl/internal/RendererUtils.ts +136 -0
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +262 -0
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +16 -0
- package/src/core/shaders/canvas/Border.ts +119 -0
- package/src/core/shaders/canvas/HolePunch.ts +38 -0
- package/src/core/shaders/canvas/LinearGradient.ts +54 -0
- package/src/core/shaders/canvas/RadialGradient.ts +82 -0
- package/src/core/shaders/canvas/Rounded.ts +38 -0
- package/src/core/shaders/canvas/RoundedWithBorder.ts +105 -0
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +118 -0
- package/src/core/shaders/canvas/RoundedWithShadow.ts +56 -0
- package/src/core/shaders/canvas/Shadow.ts +35 -0
- package/src/core/shaders/canvas/utils/render.ts +143 -0
- package/src/core/shaders/templates/BorderTemplate.ts +128 -0
- package/src/core/shaders/templates/HolePunchTemplate.ts +65 -0
- package/src/core/shaders/templates/LinearGradientTemplate.ts +54 -0
- package/src/core/shaders/templates/RadialGradientTemplate.ts +66 -0
- package/src/core/shaders/templates/RoundedTemplate.ts +81 -0
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +21 -0
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +23 -0
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +18 -0
- package/src/core/shaders/templates/ShadowTemplate.ts +89 -0
- package/src/core/shaders/utils.ts +30 -0
- package/src/core/shaders/webgl/Border.ts +158 -0
- package/src/core/shaders/webgl/Default.ts +52 -0
- package/src/core/shaders/webgl/HolePunch.ts +58 -0
- package/src/core/shaders/webgl/LinearGradient.ts +119 -0
- package/src/core/shaders/webgl/RadialGradient.ts +91 -0
- package/src/core/shaders/webgl/Rounded.ts +97 -0
- package/src/core/shaders/webgl/RoundedWithBorder.ts +212 -0
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +235 -0
- package/src/core/shaders/webgl/RoundedWithShadow.ts +132 -0
- package/src/core/shaders/webgl/SdfShader.ts +73 -0
- package/src/core/shaders/webgl/Shadow.ts +119 -0
- package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
- package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
- package/src/core/text-rendering/SdfFontHandler.ts +566 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +352 -0
- package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
- package/src/core/text-rendering/TextRenderer.ts +449 -0
- package/src/core/text-rendering/Utils.ts +80 -0
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
- package/src/core/textures/ColorTexture.ts +85 -0
- package/src/core/textures/ImageTexture.ts +394 -0
- package/src/core/textures/NoiseTexture.ts +87 -0
- package/src/core/textures/RenderTexture.ts +68 -0
- package/src/core/textures/SubTexture.ts +165 -0
- package/src/core/textures/Texture.ts +505 -0
- package/src/core/utils.ts +210 -0
- package/src/env.d.ts +7 -0
- package/src/main-api/INode.ts +92 -0
- package/src/main-api/Inspector.ts +1267 -0
- package/src/main-api/Renderer.ts +1011 -0
- package/src/main-api/utils.ts +45 -0
- package/src/utils.ts +302 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Properties of the {@link RadialGradient} shader
|
|
5
|
+
*/
|
|
6
|
+
export interface RadialGradientProps {
|
|
7
|
+
/**
|
|
8
|
+
* Array of colors to be used in the RadialGradient shader
|
|
9
|
+
*
|
|
10
|
+
* @default [0xff000000, 0xffffffff]
|
|
11
|
+
*/
|
|
12
|
+
colors: number[];
|
|
13
|
+
/**
|
|
14
|
+
* Array of color stops
|
|
15
|
+
*/
|
|
16
|
+
stops: number[];
|
|
17
|
+
/**
|
|
18
|
+
* radial width of the RadialGradientEffect
|
|
19
|
+
*
|
|
20
|
+
* @remarks from the center to the outer edge of the gradient
|
|
21
|
+
*/
|
|
22
|
+
w: number;
|
|
23
|
+
/**
|
|
24
|
+
* radial height of the RadialGradientEffect
|
|
25
|
+
* if not defined uses the width value
|
|
26
|
+
* @remarks from the center to the outer edge of the gradient
|
|
27
|
+
*/
|
|
28
|
+
h: number;
|
|
29
|
+
/**
|
|
30
|
+
* center point of where the RadialGradientEffect is drawn
|
|
31
|
+
*/
|
|
32
|
+
pivot: [number, number];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const RadialGradientTemplate: CoreShaderType<RadialGradientProps> = {
|
|
36
|
+
props: {
|
|
37
|
+
colors: {
|
|
38
|
+
default: [0x000000ff, 0xffffffff],
|
|
39
|
+
resolve(value) {
|
|
40
|
+
if (value !== undefined && value.length > 0) {
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
return ([] as number[]).concat(this.default);
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
stops: {
|
|
47
|
+
default: [0, 1],
|
|
48
|
+
resolve(value, props) {
|
|
49
|
+
if (value !== undefined && value.length === props.colors.length) {
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
if (value === undefined) {
|
|
53
|
+
value = [];
|
|
54
|
+
}
|
|
55
|
+
const len = props.colors.length;
|
|
56
|
+
for (let i = 0; i < len; i++) {
|
|
57
|
+
value[i] = i * (1 / (len - 1));
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
w: 50,
|
|
63
|
+
h: 50,
|
|
64
|
+
pivot: [0.5, 0.5],
|
|
65
|
+
},
|
|
66
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
|
|
2
|
+
import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
|
|
3
|
+
import { validateArrayLength4 } from '../utils.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Properties of the {@link RoundedRectangle} shader
|
|
7
|
+
*/
|
|
8
|
+
export interface RoundedProps {
|
|
9
|
+
/**
|
|
10
|
+
* Corner radius, in pixels, to cut out of the corners
|
|
11
|
+
*
|
|
12
|
+
* @defaultValue 0
|
|
13
|
+
*/
|
|
14
|
+
radius: number | number[];
|
|
15
|
+
/**
|
|
16
|
+
* sets top-left corner
|
|
17
|
+
*/
|
|
18
|
+
'top-left': number;
|
|
19
|
+
/**
|
|
20
|
+
* sets top-right corner
|
|
21
|
+
*/
|
|
22
|
+
'top-right': number;
|
|
23
|
+
/**
|
|
24
|
+
* sets bottom-right corner
|
|
25
|
+
*/
|
|
26
|
+
'bottom-right': number;
|
|
27
|
+
/**
|
|
28
|
+
* sets bottom-left corner
|
|
29
|
+
*/
|
|
30
|
+
'bottom-left': number;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const RoundedTemplate: CoreShaderType<RoundedProps> = {
|
|
34
|
+
props: {
|
|
35
|
+
radius: {
|
|
36
|
+
default: [0, 0, 0, 0],
|
|
37
|
+
resolve(value) {
|
|
38
|
+
if (value !== undefined) {
|
|
39
|
+
return validateArrayLength4(value);
|
|
40
|
+
}
|
|
41
|
+
return ([] as number[]).concat(this.default);
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
'top-left': {
|
|
45
|
+
default: 0,
|
|
46
|
+
set(value, props) {
|
|
47
|
+
(props.radius as Vec4)[0] = value;
|
|
48
|
+
},
|
|
49
|
+
get(props) {
|
|
50
|
+
return (props.radius as Vec4)[0];
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
'top-right': {
|
|
54
|
+
default: 0,
|
|
55
|
+
set(value, props) {
|
|
56
|
+
(props.radius as Vec4)[1] = value;
|
|
57
|
+
},
|
|
58
|
+
get(props) {
|
|
59
|
+
return (props.radius as Vec4)[1];
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
'bottom-right': {
|
|
63
|
+
default: 0,
|
|
64
|
+
set(value, props) {
|
|
65
|
+
(props.radius as Vec4)[2] = value;
|
|
66
|
+
},
|
|
67
|
+
get(props) {
|
|
68
|
+
return (props.radius as Vec4)[2];
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
'bottom-left': {
|
|
72
|
+
default: 0,
|
|
73
|
+
set(value, props) {
|
|
74
|
+
(props.radius as Vec4)[3] = value;
|
|
75
|
+
},
|
|
76
|
+
get(props) {
|
|
77
|
+
return (props.radius as Vec4)[3];
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
|
|
2
|
+
import { getBorderProps, type BorderProps } from './BorderTemplate.js';
|
|
3
|
+
import { RoundedTemplate, type RoundedProps } from './RoundedTemplate.js';
|
|
4
|
+
import type { PrefixedType } from '../utils.js';
|
|
5
|
+
import { getShadowProps, type ShadowProps } from './ShadowTemplate.js';
|
|
6
|
+
|
|
7
|
+
export type RoundedWithBorderAndShadowProps = RoundedProps &
|
|
8
|
+
PrefixedType<BorderProps, 'border'> &
|
|
9
|
+
PrefixedType<ShadowProps, 'shadow'>;
|
|
10
|
+
|
|
11
|
+
const props = Object.assign(
|
|
12
|
+
{},
|
|
13
|
+
RoundedTemplate.props,
|
|
14
|
+
getBorderProps('border'),
|
|
15
|
+
getShadowProps('shadow'),
|
|
16
|
+
) as RoundedWithBorderAndShadowProps;
|
|
17
|
+
|
|
18
|
+
export const RoundedWithBorderAndShadowTemplate: CoreShaderType<RoundedWithBorderAndShadowProps> =
|
|
19
|
+
{
|
|
20
|
+
props,
|
|
21
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
|
|
2
|
+
import { getBorderProps, type BorderProps } from './BorderTemplate.js';
|
|
3
|
+
import { RoundedTemplate, type RoundedProps } from './RoundedTemplate.js';
|
|
4
|
+
import type { PrefixedType } from '../utils.js';
|
|
5
|
+
|
|
6
|
+
export type RoundedWithBorderProps = RoundedProps &
|
|
7
|
+
PrefixedType<BorderProps, 'border'> & {
|
|
8
|
+
'border-fill': number;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const props = Object.assign(
|
|
12
|
+
{},
|
|
13
|
+
RoundedTemplate.props,
|
|
14
|
+
getBorderProps('border'),
|
|
15
|
+
{
|
|
16
|
+
'border-fill': 0x00000000,
|
|
17
|
+
},
|
|
18
|
+
) as RoundedWithBorderProps;
|
|
19
|
+
|
|
20
|
+
export const RoundedWithBorderTemplate: CoreShaderType<RoundedWithBorderProps> =
|
|
21
|
+
{
|
|
22
|
+
props,
|
|
23
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
|
|
2
|
+
import { RoundedTemplate, type RoundedProps } from './RoundedTemplate.js';
|
|
3
|
+
import type { PrefixedType } from '../utils.js';
|
|
4
|
+
import { getShadowProps, type ShadowProps } from './ShadowTemplate.js';
|
|
5
|
+
|
|
6
|
+
export type RoundedWithShadowProps = RoundedProps &
|
|
7
|
+
PrefixedType<ShadowProps, 'shadow'>;
|
|
8
|
+
|
|
9
|
+
const props = Object.assign(
|
|
10
|
+
{},
|
|
11
|
+
RoundedTemplate.props,
|
|
12
|
+
getShadowProps('shadow'),
|
|
13
|
+
) as RoundedWithShadowProps;
|
|
14
|
+
|
|
15
|
+
export const RoundedWithShadowTemplate: CoreShaderType<RoundedWithShadowProps> =
|
|
16
|
+
{
|
|
17
|
+
props,
|
|
18
|
+
};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
|
|
2
|
+
import type { PrefixedType } from '../utils.js';
|
|
3
|
+
|
|
4
|
+
export interface ShadowProps {
|
|
5
|
+
/**
|
|
6
|
+
* Shadow Color
|
|
7
|
+
*
|
|
8
|
+
* @default 0x000000ff
|
|
9
|
+
*/
|
|
10
|
+
color: number;
|
|
11
|
+
/**
|
|
12
|
+
* Shadow Projection [offsetX, offsetY, blur, spread]
|
|
13
|
+
*
|
|
14
|
+
* @default [0, 0, 5, 5]
|
|
15
|
+
*/
|
|
16
|
+
projection: [number, number, number, number];
|
|
17
|
+
/**
|
|
18
|
+
* OffsetX of Shadow (center)
|
|
19
|
+
*/
|
|
20
|
+
x: number;
|
|
21
|
+
/**
|
|
22
|
+
* OffsetY of Shadow (center)
|
|
23
|
+
*/
|
|
24
|
+
y: number;
|
|
25
|
+
/**
|
|
26
|
+
* Blur along the edges of the Shadow
|
|
27
|
+
*/
|
|
28
|
+
blur: number;
|
|
29
|
+
/**
|
|
30
|
+
* Spread of the shadow compared to node
|
|
31
|
+
*/
|
|
32
|
+
spread: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function getShadowProps<P extends string>(
|
|
36
|
+
prefix?: P,
|
|
37
|
+
): PrefixedType<ShadowProps, P> {
|
|
38
|
+
const pf = prefix && prefix.length > 0 ? `${prefix}-` : '';
|
|
39
|
+
const projection = pf + 'projection';
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
[pf + 'color']: 0x000000ff,
|
|
43
|
+
[projection]: {
|
|
44
|
+
default: [0, 0, 5, 5],
|
|
45
|
+
},
|
|
46
|
+
[pf + 'x']: {
|
|
47
|
+
default: 0,
|
|
48
|
+
set(value, props) {
|
|
49
|
+
props[projection][0] = value;
|
|
50
|
+
},
|
|
51
|
+
get(props) {
|
|
52
|
+
return props[projection][0];
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
[pf + 'y']: {
|
|
56
|
+
default: 0,
|
|
57
|
+
set(value, props) {
|
|
58
|
+
props[projection][1] = value;
|
|
59
|
+
},
|
|
60
|
+
get(props) {
|
|
61
|
+
return props[projection][1];
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
[pf + 'blur']: {
|
|
65
|
+
default: 10,
|
|
66
|
+
set(value, props) {
|
|
67
|
+
props[projection][2] = value;
|
|
68
|
+
},
|
|
69
|
+
get(props) {
|
|
70
|
+
return props[projection][2];
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
[pf + 'spread']: {
|
|
74
|
+
default: 10,
|
|
75
|
+
set(value, props) {
|
|
76
|
+
props[projection][3] = value;
|
|
77
|
+
},
|
|
78
|
+
get(props) {
|
|
79
|
+
return props[projection][3];
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
} as PrefixedType<ShadowProps, P>;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
type PlainShadowProps = PrefixedType<ShadowProps>;
|
|
86
|
+
|
|
87
|
+
export const ShadowTemplate: CoreShaderType<ShadowProps> = {
|
|
88
|
+
props: getShadowProps() as PlainShadowProps,
|
|
89
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { assertTruthy } from '../../utils.js';
|
|
2
|
+
import type { Vec4 } from '../renderers/webgl/internal/ShaderUtils.js';
|
|
3
|
+
|
|
4
|
+
export const validateArrayLength4 = (value: number | number[]): Vec4 => {
|
|
5
|
+
if (!Array.isArray(value)) {
|
|
6
|
+
return [value, value, value, value];
|
|
7
|
+
}
|
|
8
|
+
assertTruthy(value);
|
|
9
|
+
if (value.length === 4) {
|
|
10
|
+
return value as Vec4;
|
|
11
|
+
}
|
|
12
|
+
if (value.length === 3) {
|
|
13
|
+
value[3] = value[0]!;
|
|
14
|
+
return value as Vec4;
|
|
15
|
+
}
|
|
16
|
+
if (value.length === 2) {
|
|
17
|
+
value[2] = value[0]!;
|
|
18
|
+
value[3] = value[1]!;
|
|
19
|
+
return value as Vec4;
|
|
20
|
+
}
|
|
21
|
+
value[0] = value[0] || 0;
|
|
22
|
+
value[1] = value[0];
|
|
23
|
+
value[2] = value[0];
|
|
24
|
+
value[3] = value[0];
|
|
25
|
+
return value as Vec4;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type PrefixedType<T, P extends string | undefined = undefined> = {
|
|
29
|
+
[Key in keyof T as P extends string ? `${P}-${string & Key}` : Key]: T[Key];
|
|
30
|
+
};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BorderTemplate,
|
|
3
|
+
type BorderProps,
|
|
4
|
+
} from '../templates/BorderTemplate.js';
|
|
5
|
+
import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
|
|
6
|
+
import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
|
|
7
|
+
|
|
8
|
+
export const Border: WebGlShaderType<BorderProps> = {
|
|
9
|
+
props: BorderTemplate.props,
|
|
10
|
+
update(node) {
|
|
11
|
+
this.uniform4fa('u_borderWidth', this.props!.w as Vec4);
|
|
12
|
+
this.uniformRGBA('u_borderColor', this.props!.color);
|
|
13
|
+
this.uniform1f('u_borderGap', this.props!.gap as number);
|
|
14
|
+
this.uniform1f('u_borderAlign', this.props!.align as number);
|
|
15
|
+
},
|
|
16
|
+
vertex: `
|
|
17
|
+
# ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
18
|
+
precision highp float;
|
|
19
|
+
# else
|
|
20
|
+
precision mediump float;
|
|
21
|
+
# endif
|
|
22
|
+
|
|
23
|
+
attribute vec2 a_position;
|
|
24
|
+
attribute vec2 a_textureCoords;
|
|
25
|
+
attribute vec4 a_color;
|
|
26
|
+
attribute vec2 a_nodeCoords;
|
|
27
|
+
|
|
28
|
+
uniform vec2 u_resolution;
|
|
29
|
+
uniform float u_pixelRatio;
|
|
30
|
+
uniform vec2 u_dimensions;
|
|
31
|
+
|
|
32
|
+
uniform vec4 u_borderWidth;
|
|
33
|
+
uniform float u_borderGap;
|
|
34
|
+
uniform float u_borderAlign;
|
|
35
|
+
|
|
36
|
+
varying vec4 v_color;
|
|
37
|
+
varying vec2 v_textureCoords;
|
|
38
|
+
varying vec2 v_nodeCoords;
|
|
39
|
+
|
|
40
|
+
varying vec2 v_innerSize;
|
|
41
|
+
varying vec2 v_outerSize;
|
|
42
|
+
varying vec2 v_outerBorderUv;
|
|
43
|
+
varying vec2 v_innerBorderUv;
|
|
44
|
+
varying vec2 v_halfDimensions;
|
|
45
|
+
varying float v_edgeWidth;
|
|
46
|
+
|
|
47
|
+
void main() {
|
|
48
|
+
vec2 screenSpace = vec2(2.0 / u_resolution.x, -2.0 / u_resolution.y);
|
|
49
|
+
vec2 edge = clamp(a_nodeCoords * 2.0 - vec2(1.0), -1.0, 1.0);
|
|
50
|
+
v_edgeWidth = 1.0 / u_pixelRatio;
|
|
51
|
+
|
|
52
|
+
float borderTop = u_borderWidth.x;
|
|
53
|
+
float borderRight = u_borderWidth.y;
|
|
54
|
+
float borderBottom = u_borderWidth.z;
|
|
55
|
+
float borderLeft = u_borderWidth.w;
|
|
56
|
+
|
|
57
|
+
v_outerBorderUv = vec2(0.0);
|
|
58
|
+
v_innerBorderUv = vec2(0.0);
|
|
59
|
+
|
|
60
|
+
vec2 borderSize = vec2(borderRight + borderLeft, borderTop + borderBottom);
|
|
61
|
+
vec2 extraSize = borderSize * u_borderAlign;
|
|
62
|
+
float gapLeft = step(0.001, borderLeft) * u_borderGap;
|
|
63
|
+
float gapRight = step(0.001, borderRight) * u_borderGap;
|
|
64
|
+
float gapTop = step(0.001, borderTop) * u_borderGap;
|
|
65
|
+
float gapBottom = step(0.001, borderBottom) * u_borderGap;
|
|
66
|
+
vec2 gapSize = vec2(gapLeft + gapRight, gapTop + gapBottom);
|
|
67
|
+
|
|
68
|
+
v_outerSize = (u_dimensions + gapSize + extraSize) * 0.5;
|
|
69
|
+
v_innerSize = v_outerSize - borderSize * 0.5;
|
|
70
|
+
|
|
71
|
+
// Use sign() to avoid branching
|
|
72
|
+
vec2 borderDiff = vec2(borderRight - borderLeft, borderBottom - borderTop);
|
|
73
|
+
vec2 signDiff = sign(borderDiff);
|
|
74
|
+
borderDiff = abs(borderDiff);
|
|
75
|
+
|
|
76
|
+
vec2 gapDiff = vec2(gapRight - gapLeft, gapBottom - gapTop);
|
|
77
|
+
vec2 signGapDiff = sign(gapDiff);
|
|
78
|
+
gapDiff = abs(gapDiff);
|
|
79
|
+
|
|
80
|
+
v_outerBorderUv = -signDiff * borderDiff * u_borderAlign * 0.5 - signGapDiff * gapDiff * 0.5;
|
|
81
|
+
v_innerBorderUv = v_outerBorderUv + signDiff * borderDiff * 0.5;
|
|
82
|
+
|
|
83
|
+
vec2 edgeOffsetExtra = step(u_dimensions * 0.5, v_outerSize) * edge * (extraSize + u_borderGap);
|
|
84
|
+
vec2 borderEdge = edgeOffsetExtra;
|
|
85
|
+
|
|
86
|
+
vec2 vertexPos = (a_position + edge + borderEdge) * u_pixelRatio;
|
|
87
|
+
gl_Position = vec4(vertexPos.x * screenSpace.x - 1.0, -sign(screenSpace.y) * (vertexPos.y * -abs(screenSpace.y)) + 1.0, 0.0, 1.0);
|
|
88
|
+
|
|
89
|
+
v_color = a_color;
|
|
90
|
+
v_nodeCoords = a_nodeCoords + (screenSpace + borderEdge) / (u_dimensions);
|
|
91
|
+
v_textureCoords = a_textureCoords + (screenSpace + borderEdge) / (u_dimensions);
|
|
92
|
+
|
|
93
|
+
v_halfDimensions = u_dimensions * 0.5;
|
|
94
|
+
}
|
|
95
|
+
`,
|
|
96
|
+
fragment: `
|
|
97
|
+
# ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
98
|
+
precision highp float;
|
|
99
|
+
# else
|
|
100
|
+
precision mediump float;
|
|
101
|
+
# endif
|
|
102
|
+
|
|
103
|
+
uniform vec2 u_resolution;
|
|
104
|
+
uniform float u_pixelRatio;
|
|
105
|
+
uniform float u_alpha;
|
|
106
|
+
|
|
107
|
+
uniform vec2 u_dimensions;
|
|
108
|
+
uniform sampler2D u_texture;
|
|
109
|
+
|
|
110
|
+
uniform vec4 u_borderWidth;
|
|
111
|
+
uniform vec4 u_borderColor;
|
|
112
|
+
uniform float u_borderGap;
|
|
113
|
+
|
|
114
|
+
varying vec4 v_color;
|
|
115
|
+
varying vec2 v_nodeCoords;
|
|
116
|
+
varying vec2 v_textureCoords;
|
|
117
|
+
|
|
118
|
+
varying vec2 v_innerSize;
|
|
119
|
+
varying vec2 v_outerSize;
|
|
120
|
+
varying vec2 v_outerBorderUv;
|
|
121
|
+
varying vec2 v_innerBorderUv;
|
|
122
|
+
varying vec2 v_halfDimensions;
|
|
123
|
+
varying float v_edgeWidth;
|
|
124
|
+
|
|
125
|
+
float box(vec2 p, vec2 s) {
|
|
126
|
+
vec2 q = abs(p) - s;
|
|
127
|
+
return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0)));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
void main() {
|
|
131
|
+
vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
|
|
132
|
+
vec4 resultColor = vec4(0.0);
|
|
133
|
+
vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
|
|
134
|
+
|
|
135
|
+
float outerDist = box(boxUv + v_outerBorderUv, v_outerSize - v_edgeWidth);
|
|
136
|
+
float innerDist = box(boxUv + v_innerBorderUv, v_innerSize - v_edgeWidth);
|
|
137
|
+
|
|
138
|
+
if(u_borderGap == 0.0) {
|
|
139
|
+
float outerAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, outerDist);
|
|
140
|
+
float innerAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, innerDist);
|
|
141
|
+
resultColor = mix(resultColor, u_borderColor, outerAlpha * u_borderColor.a);
|
|
142
|
+
resultColor = mix(resultColor, color, innerAlpha);
|
|
143
|
+
gl_FragColor = resultColor * u_alpha;
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
float nodeDist = box(boxUv, v_halfDimensions - v_edgeWidth);
|
|
148
|
+
float nodeAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, nodeDist);
|
|
149
|
+
|
|
150
|
+
float borderDist = max(-innerDist, outerDist);
|
|
151
|
+
float borderAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, borderDist);
|
|
152
|
+
resultColor = mix(resultColor, color, nodeAlpha);
|
|
153
|
+
resultColor = mix(resultColor, u_borderColor, borderAlpha * u_borderColor.a);
|
|
154
|
+
|
|
155
|
+
gl_FragColor = resultColor * u_alpha;
|
|
156
|
+
}
|
|
157
|
+
`,
|
|
158
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
|
|
2
|
+
|
|
3
|
+
export const Default: WebGlShaderType = {
|
|
4
|
+
vertex: `
|
|
5
|
+
# ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
6
|
+
precision highp float;
|
|
7
|
+
# else
|
|
8
|
+
precision mediump float;
|
|
9
|
+
# endif
|
|
10
|
+
|
|
11
|
+
attribute vec2 a_position;
|
|
12
|
+
attribute vec2 a_textureCoords;
|
|
13
|
+
attribute vec4 a_color;
|
|
14
|
+
attribute vec2 a_nodeCoords;
|
|
15
|
+
|
|
16
|
+
uniform vec2 u_resolution;
|
|
17
|
+
uniform float u_pixelRatio;
|
|
18
|
+
|
|
19
|
+
varying vec4 v_color;
|
|
20
|
+
varying vec2 v_textureCoords;
|
|
21
|
+
varying vec2 v_nodeCoords;
|
|
22
|
+
|
|
23
|
+
void main() {
|
|
24
|
+
vec2 normalized = a_position * u_pixelRatio / u_resolution;
|
|
25
|
+
vec2 zero_two = normalized * 2.0;
|
|
26
|
+
vec2 clip_space = zero_two - 1.0;
|
|
27
|
+
|
|
28
|
+
v_color = a_color;
|
|
29
|
+
v_textureCoords = a_textureCoords;
|
|
30
|
+
v_nodeCoords = a_nodeCoords;
|
|
31
|
+
|
|
32
|
+
gl_Position = vec4(clip_space * vec2(1.0, -1.0), 0, 1);
|
|
33
|
+
}
|
|
34
|
+
`,
|
|
35
|
+
fragment: `
|
|
36
|
+
# ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
37
|
+
precision highp float;
|
|
38
|
+
# else
|
|
39
|
+
precision mediump float;
|
|
40
|
+
# endif
|
|
41
|
+
|
|
42
|
+
uniform vec2 u_resolution;
|
|
43
|
+
uniform sampler2D u_texture;
|
|
44
|
+
|
|
45
|
+
varying vec4 v_color;
|
|
46
|
+
varying vec2 v_textureCoords;
|
|
47
|
+
|
|
48
|
+
void main() {
|
|
49
|
+
gl_FragColor = v_color * texture2D(u_texture, v_textureCoords);
|
|
50
|
+
}
|
|
51
|
+
`,
|
|
52
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { calcFactoredRadiusArray } from '../../lib/utils.js';
|
|
2
|
+
import {
|
|
3
|
+
HolePunchTemplate,
|
|
4
|
+
type HolePunchProps,
|
|
5
|
+
} from '../templates/HolePunchTemplate.js';
|
|
6
|
+
import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
|
|
7
|
+
import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
|
|
8
|
+
|
|
9
|
+
export const HolePunch: WebGlShaderType<HolePunchProps> = {
|
|
10
|
+
props: HolePunchTemplate.props,
|
|
11
|
+
update() {
|
|
12
|
+
const props = this.props!;
|
|
13
|
+
this.uniform2f('u_pos', props.x, props.y);
|
|
14
|
+
//precalculate to halfSize once instead of for every pixel
|
|
15
|
+
this.uniform2f('u_size', props.w * 0.5, props.h * 0.5);
|
|
16
|
+
|
|
17
|
+
this.uniform4fa(
|
|
18
|
+
'u_radius',
|
|
19
|
+
calcFactoredRadiusArray(props.radius as Vec4, props.w, props.h),
|
|
20
|
+
);
|
|
21
|
+
},
|
|
22
|
+
getCacheMarkers(props: HolePunchProps) {
|
|
23
|
+
return `radiusArray:${Array.isArray(props.radius)}`;
|
|
24
|
+
},
|
|
25
|
+
fragment: `
|
|
26
|
+
# ifdef GL_FRAGMENT_PRECISION_HIGH
|
|
27
|
+
precision highp float;
|
|
28
|
+
# else
|
|
29
|
+
precision mediump float;
|
|
30
|
+
# endif
|
|
31
|
+
|
|
32
|
+
uniform float u_alpha;
|
|
33
|
+
uniform float u_pixelRatio;
|
|
34
|
+
uniform vec2 u_dimensions;
|
|
35
|
+
uniform sampler2D u_texture;
|
|
36
|
+
|
|
37
|
+
uniform vec2 u_size;
|
|
38
|
+
uniform vec2 u_pos;
|
|
39
|
+
|
|
40
|
+
uniform vec4 u_radius;
|
|
41
|
+
|
|
42
|
+
uniform vec4 u_color;
|
|
43
|
+
varying vec4 v_color;
|
|
44
|
+
varying vec2 v_textureCoords;
|
|
45
|
+
|
|
46
|
+
void main() {
|
|
47
|
+
vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
|
|
48
|
+
vec2 p = (v_textureCoords.xy * u_dimensions.xy - u_pos) - u_size;
|
|
49
|
+
vec4 r = u_radius;
|
|
50
|
+
r.xy = (p.x > 0.0) ? r.yz : r.xw;
|
|
51
|
+
r.x = (p.y > 0.0) ? r.y : r.x;
|
|
52
|
+
p = abs(p) - u_size + r.x;
|
|
53
|
+
float dist = min(max(p.x, p.y), 0.0) + length(max(p, 0.0)) - r.x + 2.0;
|
|
54
|
+
float roundedAlpha = 1.0 - smoothstep(0.0, u_pixelRatio, dist);
|
|
55
|
+
gl_FragColor = mix(color, vec4(0.0), min(color.a, roundedAlpha));
|
|
56
|
+
}
|
|
57
|
+
`,
|
|
58
|
+
};
|