@lightningtv/renderer 3.0.0-beta1 → 3.2.4
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/NOTICE +4 -0
- package/README.md +22 -28
- package/dist/exports/canvas-shaders.js +0 -16
- package/dist/exports/canvas-shaders.js.map +1 -1
- package/dist/exports/canvas.d.ts +1 -1
- package/dist/exports/canvas.js +1 -19
- package/dist/exports/canvas.js.map +1 -1
- package/dist/exports/index.d.ts +2 -5
- package/dist/exports/index.js +1 -23
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/inspector.js +0 -18
- package/dist/exports/inspector.js.map +1 -1
- package/dist/exports/utils.d.ts +2 -1
- package/dist/exports/utils.js +2 -19
- package/dist/exports/utils.js.map +1 -1
- package/dist/exports/webgl-shaders.js +0 -16
- package/dist/exports/webgl-shaders.js.map +1 -1
- package/dist/exports/webgl.d.ts +2 -1
- package/dist/exports/webgl.js +2 -19
- package/dist/exports/webgl.js.map +1 -1
- package/dist/src/common/CommonTypes.d.ts +15 -3
- package/dist/src/common/CommonTypes.js +0 -18
- package/dist/src/common/CommonTypes.js.map +1 -1
- package/dist/src/common/EventEmitter.js +0 -18
- package/dist/src/common/EventEmitter.js.map +1 -1
- package/dist/src/common/IEventEmitter.js +0 -16
- package/dist/src/common/IEventEmitter.js.map +1 -1
- 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 +139 -101
- package/dist/src/core/CoreNode.js +813 -528
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.d.ts +3 -3
- package/dist/src/core/CoreShaderManager.js +0 -18
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +75 -87
- package/dist/src/core/CoreTextNode.js +380 -258
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +25 -14
- package/dist/src/core/CoreTextureManager.js +83 -140
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +102 -36
- package/dist/src/core/Stage.js +424 -191
- 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/TextureMemoryManager.d.ts +11 -4
- package/dist/src/core/TextureMemoryManager.js +114 -134
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/AnimationManager.js +0 -18
- package/dist/src/core/animations/AnimationManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
- package/dist/src/core/animations/CoreAnimation.js +8 -24
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
- package/dist/src/core/animations/CoreAnimationController.js +11 -22
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/lib/ContextSpy.js +0 -18
- package/dist/src/core/lib/ContextSpy.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.d.ts +2 -2
- package/dist/src/core/lib/ImageWorker.js +33 -31
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/Matrix3d.d.ts +1 -0
- package/dist/src/core/lib/Matrix3d.js +7 -19
- package/dist/src/core/lib/Matrix3d.js.map +1 -1
- package/dist/src/core/lib/RenderCoords.d.ts +9 -10
- package/dist/src/core/lib/RenderCoords.js +27 -55
- package/dist/src/core/lib/RenderCoords.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +78 -3
- package/dist/src/core/lib/WebGlContextWrapper.js +150 -25
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- 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/{renderers/canvas/internal/ColorUtils.js → lib/colorParser.js} +1 -19
- package/dist/src/core/lib/colorParser.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +14 -2
- package/dist/src/core/lib/textureCompression.js +320 -85
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/lib/textureSvg.js +0 -18
- package/dist/src/core/lib/textureSvg.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +8 -1
- package/dist/src/core/lib/utils.js +44 -20
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
- package/dist/src/core/lib/validateImageBitmap.js +4 -4
- package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
- 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 +2 -1
- package/dist/src/core/renderers/CoreContextTexture.js +0 -18
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderOp.js +0 -18
- package/dist/src/core/renderers/CoreRenderOp.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +15 -3
- package/dist/src/core/renderers/CoreRenderer.js +1 -18
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderNode.d.ts +13 -3
- package/dist/src/core/renderers/CoreShaderNode.js +25 -2
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderProgram.js +0 -18
- package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +89 -83
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -21
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
- package/dist/src/core/renderers/canvas/CanvasTexture.js +18 -31
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/BatchRenderOp.d.ts +25 -0
- package/dist/src/core/renderers/webgl/BatchRenderOp.js +60 -0
- package/dist/src/core/renderers/webgl/BatchRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +80 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -24
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -23
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -70
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +34 -20
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +319 -195
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -3
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +99 -48
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -1
- package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
- package/dist/src/core/shaders/canvas/Border.js +67 -41
- package/dist/src/core/shaders/canvas/Border.js.map +1 -1
- package/dist/src/core/shaders/canvas/HolePunch.js +3 -19
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/canvas/LinearGradient.js +7 -21
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js +14 -28
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/Rounded.js +1 -17
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +44 -22
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +47 -25
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +9 -21
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/Shadow.js +0 -16
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
- package/dist/src/core/shaders/canvas/utils/render.js +31 -34
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
- package/dist/src/core/shaders/templates/BorderTemplate.js +31 -27
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -19
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -16
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -18
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -17
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +4 -2
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
- 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.js +118 -51
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/Default.js +6 -41
- package/dist/src/core/shaders/webgl/Default.js.map +1 -1
- package/dist/src/core/shaders/webgl/HolePunch.js +4 -19
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +73 -34
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +56 -48
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/Rounded.js +25 -23
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +160 -55
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +168 -58
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
- package/dist/src/core/shaders/webgl/SdfShader.js +8 -36
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
- package/dist/src/core/shaders/webgl/Shadow.js +39 -34
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
- 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 +18 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -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 +384 -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 +1 -1
- package/dist/src/core/textures/ColorTexture.js +3 -22
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +13 -6
- package/dist/src/core/textures/ImageTexture.js +57 -66
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
- package/dist/src/core/textures/NoiseTexture.js +8 -26
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.d.ts +7 -7
- package/dist/src/core/textures/RenderTexture.js +12 -30
- package/dist/src/core/textures/RenderTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +6 -8
- package/dist/src/core/textures/SubTexture.js +19 -55
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +90 -12
- package/dist/src/core/textures/Texture.js +160 -35
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +2 -1
- package/dist/src/core/utils.js +1 -19
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/INode.js.map +1 -1
- package/dist/src/main-api/Inspector.d.ts +135 -2
- package/dist/src/main-api/Inspector.js +507 -30
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +294 -81
- package/dist/src/main-api/Renderer.js +225 -96
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/utils.d.ts +19 -6
- package/dist/src/utils.js +32 -27
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/exports/canvas-shaders.ts +0 -17
- package/exports/canvas.ts +1 -19
- package/exports/index.ts +6 -27
- package/exports/inspector.ts +0 -19
- package/exports/utils.ts +7 -19
- package/exports/webgl-shaders.ts +0 -16
- package/exports/webgl.ts +3 -20
- package/package.json +23 -22
- package/src/common/CommonTypes.ts +20 -22
- package/src/common/EventEmitter.ts +0 -19
- package/src/common/IAnimationController.ts +0 -18
- package/src/common/IEventEmitter.ts +0 -17
- package/src/core/Autosizer.ts +205 -0
- package/src/core/CoreNode.test.ts +376 -45
- package/src/core/CoreNode.ts +1017 -656
- package/src/core/CoreShaderManager.ts +3 -21
- package/src/core/CoreTextNode.ts +457 -314
- package/src/core/CoreTextureManager.ts +123 -168
- package/src/core/Stage.ts +526 -236
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +150 -167
- package/src/core/animations/AnimationManager.ts +0 -19
- package/src/core/animations/CoreAnimation.ts +15 -32
- package/src/core/animations/CoreAnimationController.ts +13 -23
- package/src/core/lib/ContextSpy.ts +0 -19
- package/src/core/lib/ImageWorker.ts +45 -32
- package/src/core/lib/Matrix3d.ts +7 -20
- package/src/core/lib/RenderCoords.ts +36 -67
- package/src/core/lib/WebGlContextWrapper.ts +196 -72
- package/src/core/lib/collectionUtils.ts +99 -0
- package/src/core/lib/colorCache.ts +20 -0
- package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -21
- package/src/core/lib/textureCompression.ts +433 -93
- package/src/core/lib/textureSvg.ts +0 -19
- package/src/core/lib/utils.ts +58 -19
- package/src/core/lib/validateImageBitmap.ts +17 -6
- package/src/core/platforms/Platform.ts +64 -0
- package/src/core/platforms/web/WebPlatform.ts +132 -0
- package/src/core/renderers/CoreContextTexture.ts +2 -20
- package/src/core/renderers/CoreRenderOp.ts +0 -19
- package/src/core/renderers/CoreRenderer.ts +16 -23
- package/src/core/renderers/CoreShaderNode.ts +37 -6
- package/src/core/renderers/CoreShaderProgram.ts +0 -19
- package/src/core/renderers/canvas/CanvasRenderer.ts +108 -137
- package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -23
- package/src/core/renderers/canvas/CanvasTexture.ts +25 -37
- package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -34
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -24
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -103
- package/src/core/renderers/webgl/WebGlRenderer.ts +368 -233
- package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -7
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +122 -76
- package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
- package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +0 -19
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
- package/src/core/shaders/canvas/Border.ts +91 -50
- package/src/core/shaders/canvas/HolePunch.ts +4 -28
- package/src/core/shaders/canvas/LinearGradient.ts +10 -25
- package/src/core/shaders/canvas/RadialGradient.ts +23 -54
- package/src/core/shaders/canvas/Rounded.ts +2 -19
- package/src/core/shaders/canvas/RoundedWithBorder.ts +72 -35
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +77 -47
- package/src/core/shaders/canvas/RoundedWithShadow.ts +21 -34
- package/src/core/shaders/canvas/Shadow.ts +0 -17
- package/src/core/shaders/canvas/utils/render.ts +45 -53
- package/src/core/shaders/templates/BorderTemplate.ts +42 -29
- package/src/core/shaders/templates/HolePunchTemplate.ts +5 -22
- package/src/core/shaders/templates/LinearGradientTemplate.ts +0 -17
- package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -25
- package/src/core/shaders/templates/RoundedTemplate.ts +1 -18
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -18
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +7 -19
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -18
- package/src/core/shaders/templates/ShadowTemplate.ts +1 -18
- package/src/core/shaders/utils.ts +30 -0
- package/src/core/shaders/webgl/Border.ts +118 -55
- package/src/core/shaders/webgl/Default.ts +6 -43
- package/src/core/shaders/webgl/HolePunch.ts +4 -24
- package/src/core/shaders/webgl/LinearGradient.ts +73 -35
- package/src/core/shaders/webgl/RadialGradient.ts +58 -51
- package/src/core/shaders/webgl/Rounded.ts +25 -45
- package/src/core/shaders/webgl/RoundedWithBorder.ts +161 -63
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +169 -68
- package/src/core/shaders/webgl/RoundedWithShadow.ts +73 -39
- package/src/core/shaders/webgl/SdfShader.ts +8 -41
- package/src/core/shaders/webgl/Shadow.ts +39 -35
- 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 +406 -0
- package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
- package/src/core/text-rendering/TextRenderer.ts +426 -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 +7 -24
- package/src/core/textures/ImageTexture.ts +110 -92
- package/src/core/textures/NoiseTexture.ts +14 -31
- package/src/core/textures/RenderTexture.ts +18 -35
- package/src/core/textures/SubTexture.ts +25 -65
- package/src/core/textures/Texture.ts +214 -46
- package/src/core/utils.ts +9 -26
- package/src/main-api/INode.ts +0 -18
- package/src/main-api/Inspector.ts +794 -38
- package/src/main-api/Renderer.ts +519 -159
- package/src/utils.ts +64 -29
- package/dist/src/core/platform.d.ts +0 -10
- package/dist/src/core/platform.js +0 -56
- package/dist/src/core/platform.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -217
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -36
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -107
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
- package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
- package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
- package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +0 -2
- package/dist/src/core/shaders/webgl/DefaultBatched.js +0 -104
- package/dist/src/core/shaders/webgl/DefaultBatched.js.map +0 -1
- package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
- package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
- package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
- package/dist/src/core/text-rendering/TrFontManager.js +0 -131
- package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
- package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -126
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -91
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -611
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -370
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
- package/scripts/please-use-pnpm.js +0 -13
- package/src/core/platform.ts +0 -64
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
- package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -145
- package/src/core/shaders/templates/shaderUtils.ts +0 -47
- package/src/core/shaders/webgl/DefaultBatched.ts +0 -129
- package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
- package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
- package/src/core/text-rendering/TrFontManager.ts +0 -183
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
- package/src/core/text-rendering/font-face-types/utils.ts +0 -39
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
- package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
- /package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +0 -0
|
@@ -2,7 +2,6 @@ import type { CoreNode } from '../../CoreNode.js';
|
|
|
2
2
|
import { getNormalizedRgbaComponents } from '../../lib/utils.js';
|
|
3
3
|
import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
|
|
4
4
|
import type { Stage } from '../../Stage.js';
|
|
5
|
-
import type { QuadOptions } from '../CoreRenderer.js';
|
|
6
5
|
import { CoreShaderNode, type CoreShaderType } from '../CoreShaderNode.js';
|
|
7
6
|
import type {
|
|
8
7
|
UniformCollection,
|
|
@@ -10,7 +9,7 @@ import type {
|
|
|
10
9
|
Vec3,
|
|
11
10
|
Vec4,
|
|
12
11
|
} from './internal/ShaderUtils.js';
|
|
13
|
-
import type { WebGlRenderer } from './WebGlRenderer.js';
|
|
12
|
+
import type { WebGlRenderer, WebGlRenderOp } from './WebGlRenderer.js';
|
|
14
13
|
import type { WebGlShaderProgram } from './WebGlShaderProgram.js';
|
|
15
14
|
|
|
16
15
|
export type ShaderSource<T> =
|
|
@@ -46,7 +45,7 @@ export type WebGlShaderType<T extends object = Record<string, unknown>> =
|
|
|
46
45
|
* This function is used to check if the shader can be reused based on quad info
|
|
47
46
|
* @param props
|
|
48
47
|
*/
|
|
49
|
-
canBatch?: (
|
|
48
|
+
canBatch?: (node: CoreNode, currentRenderOp: WebGlRenderOp) => boolean;
|
|
50
49
|
/**
|
|
51
50
|
* extensions required for specific shader?
|
|
52
51
|
*/
|
|
@@ -86,11 +85,9 @@ export class WebGlShaderNode<
|
|
|
86
85
|
this.updater!(this.node as CoreNode, this.props);
|
|
87
86
|
return;
|
|
88
87
|
}
|
|
88
|
+
|
|
89
89
|
const prevKey = this.valueKey;
|
|
90
|
-
this.valueKey =
|
|
91
|
-
for (const key in this.resolvedProps) {
|
|
92
|
-
this.valueKey += `${key}:${this.resolvedProps[key]!};`;
|
|
93
|
-
}
|
|
90
|
+
this.valueKey = this.createValueKey();
|
|
94
91
|
|
|
95
92
|
if (prevKey === this.valueKey) {
|
|
96
93
|
return;
|
|
@@ -1,29 +1,11 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
-
* following copyright and licenses apply:
|
|
4
|
-
*
|
|
5
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
-
*
|
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
1
|
import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
|
|
2
|
+
import { USE_RTT } from '../../../utils.js';
|
|
20
3
|
import { Default } from '../../shaders/webgl/Default.js';
|
|
21
|
-
import type { QuadOptions } from '../CoreRenderer.js';
|
|
22
4
|
import type { CoreShaderProgram } from '../CoreShaderProgram.js';
|
|
23
5
|
import type { WebGlCtxTexture } from './WebGlCtxTexture.js';
|
|
24
|
-
import type { WebGlRenderOp } from './
|
|
25
|
-
import type { WebGlRenderer } from './WebGlRenderer.js';
|
|
6
|
+
import type { WebGlRenderer, WebGlRenderOp } from './WebGlRenderer.js';
|
|
26
7
|
import type { WebGlShaderType } from './WebGlShaderNode.js';
|
|
8
|
+
import { WebGlShaderNode } from './WebGlShaderNode.js';
|
|
27
9
|
import type { BufferCollection } from './internal/BufferCollection.js';
|
|
28
10
|
import {
|
|
29
11
|
createProgram,
|
|
@@ -33,10 +15,10 @@ import {
|
|
|
33
15
|
type UniformSet3Params,
|
|
34
16
|
type UniformSet4Params,
|
|
35
17
|
} from './internal/ShaderUtils.js';
|
|
18
|
+
import { CoreNode } from '../../CoreNode.js';
|
|
36
19
|
|
|
37
20
|
export class WebGlShaderProgram implements CoreShaderProgram {
|
|
38
|
-
protected
|
|
39
|
-
protected program: WebGLProgram;
|
|
21
|
+
protected program: WebGLProgram | null;
|
|
40
22
|
/**
|
|
41
23
|
* Vertex Array Object
|
|
42
24
|
*
|
|
@@ -46,10 +28,13 @@ export class WebGlShaderProgram implements CoreShaderProgram {
|
|
|
46
28
|
protected vao: WebGLVertexArrayObject | undefined;
|
|
47
29
|
protected renderer: WebGlRenderer;
|
|
48
30
|
protected glw: WebGlContextWrapper;
|
|
49
|
-
protected attributeLocations:
|
|
31
|
+
protected attributeLocations: string[];
|
|
32
|
+
protected uniformLocations: Record<string, WebGLUniformLocation> | null;
|
|
50
33
|
protected lifecycle: Pick<WebGlShaderType, 'update' | 'canBatch'>;
|
|
51
34
|
protected useSystemAlpha = false;
|
|
52
35
|
protected useSystemDimensions = false;
|
|
36
|
+
protected useTimeValue = false;
|
|
37
|
+
public isDestroyed = false;
|
|
53
38
|
supportsIndexedTextures = false;
|
|
54
39
|
|
|
55
40
|
constructor(
|
|
@@ -117,10 +102,14 @@ export class WebGlShaderProgram implements CoreShaderProgram {
|
|
|
117
102
|
this.program = program;
|
|
118
103
|
this.attributeLocations = glw.getAttributeLocations(program);
|
|
119
104
|
|
|
120
|
-
this.
|
|
121
|
-
|
|
122
|
-
this.
|
|
123
|
-
|
|
105
|
+
const uniLocs = (this.uniformLocations = glw.getUniformLocations(program));
|
|
106
|
+
|
|
107
|
+
this.useSystemAlpha = uniLocs['u_alpha'] !== undefined;
|
|
108
|
+
this.useSystemDimensions = uniLocs['u_dimensions'] !== undefined;
|
|
109
|
+
|
|
110
|
+
this.useTimeValue =
|
|
111
|
+
this.glw.getUniformLocation(program, 'u_dimensions') !== null &&
|
|
112
|
+
config.time !== undefined;
|
|
124
113
|
|
|
125
114
|
this.lifecycle = {
|
|
126
115
|
update: config.update,
|
|
@@ -133,39 +122,62 @@ export class WebGlShaderProgram implements CoreShaderProgram {
|
|
|
133
122
|
}
|
|
134
123
|
|
|
135
124
|
disableAttributes() {
|
|
136
|
-
const
|
|
137
|
-
const
|
|
138
|
-
const attribLen = attribs.length;
|
|
125
|
+
const glw = this.glw;
|
|
126
|
+
const attribLen = this.attributeLocations.length;
|
|
139
127
|
for (let i = 0; i < attribLen; i++) {
|
|
140
128
|
glw.disableVertexAttribArray(i);
|
|
141
129
|
}
|
|
142
130
|
}
|
|
143
131
|
|
|
144
|
-
reuseRenderOp(
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
132
|
+
reuseRenderOp(node: CoreNode, currentRenderOp: WebGlRenderOp): boolean {
|
|
133
|
+
if (this.lifecycle.canBatch !== undefined) {
|
|
134
|
+
return this.lifecycle.canBatch(node, currentRenderOp);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const { time, worldAlpha, width, height } = node;
|
|
138
|
+
|
|
139
|
+
if (this.useTimeValue === true) {
|
|
140
|
+
if (time !== currentRenderOp.time) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
150
143
|
}
|
|
151
144
|
|
|
152
|
-
if (this.useSystemAlpha) {
|
|
153
|
-
if (
|
|
145
|
+
if (this.useSystemAlpha === true) {
|
|
146
|
+
if (worldAlpha !== currentRenderOp.worldAlpha) {
|
|
154
147
|
return false;
|
|
155
148
|
}
|
|
156
149
|
}
|
|
157
150
|
|
|
158
|
-
if (this.useSystemDimensions) {
|
|
151
|
+
if (this.useSystemDimensions === true) {
|
|
159
152
|
if (
|
|
160
|
-
|
|
161
|
-
|
|
153
|
+
width !== currentRenderOp.width ||
|
|
154
|
+
height !== currentRenderOp.height
|
|
162
155
|
) {
|
|
163
156
|
return false;
|
|
164
157
|
}
|
|
165
158
|
}
|
|
166
159
|
|
|
167
|
-
|
|
168
|
-
|
|
160
|
+
let shaderPropsA: Record<string, unknown> | undefined = undefined;
|
|
161
|
+
let shaderPropsB: Record<string, unknown> | undefined = undefined;
|
|
162
|
+
|
|
163
|
+
const shader = node.props.shader;
|
|
164
|
+
|
|
165
|
+
if (shader !== null) {
|
|
166
|
+
shaderPropsA = (shader as WebGlShaderNode).resolvedProps;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const opShader = currentRenderOp.shader;
|
|
170
|
+
if (opShader !== null) {
|
|
171
|
+
shaderPropsB = (opShader as WebGlShaderNode).resolvedProps;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (
|
|
175
|
+
(shaderPropsA === undefined && shaderPropsB !== undefined) ||
|
|
176
|
+
(shaderPropsA !== undefined && shaderPropsB === undefined)
|
|
177
|
+
) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
|
|
169
181
|
if (shaderPropsA !== undefined && shaderPropsB !== undefined) {
|
|
170
182
|
for (const key in shaderPropsA) {
|
|
171
183
|
if (shaderPropsA[key] !== shaderPropsB[key]) {
|
|
@@ -178,28 +190,35 @@ export class WebGlShaderProgram implements CoreShaderProgram {
|
|
|
178
190
|
}
|
|
179
191
|
|
|
180
192
|
bindRenderOp(renderOp: WebGlRenderOp) {
|
|
181
|
-
|
|
182
|
-
this.bindTextures(renderOp.textures);
|
|
193
|
+
const isCoreNode = renderOp.isCoreNode;
|
|
183
194
|
|
|
184
|
-
|
|
195
|
+
this.bindTextures(renderOp.renderOpTextures);
|
|
196
|
+
this.bindBufferCollection(renderOp.quadBufferCollection);
|
|
197
|
+
|
|
198
|
+
const parentHasRenderTexture = renderOp.parentHasRenderTexture;
|
|
199
|
+
const framebufferDimensions =
|
|
200
|
+
isCoreNode && renderOp.parentHasRenderTexture
|
|
201
|
+
? renderOp.parentFramebufferDimensions
|
|
202
|
+
: renderOp.framebufferDimensions;
|
|
185
203
|
|
|
186
204
|
// Skip if the parent and current operation both have render textures
|
|
187
|
-
if (renderOp.
|
|
205
|
+
if (USE_RTT && renderOp.rtt === true && parentHasRenderTexture === true) {
|
|
188
206
|
return;
|
|
189
207
|
}
|
|
190
208
|
|
|
191
209
|
// Bind render texture framebuffer dimensions as resolution
|
|
192
210
|
// if the parent has a render texture
|
|
193
|
-
if (parentHasRenderTexture) {
|
|
194
|
-
const {
|
|
211
|
+
if (USE_RTT && parentHasRenderTexture === true && framebufferDimensions) {
|
|
212
|
+
const { w, h } = framebufferDimensions;
|
|
195
213
|
// Force pixel ratio to 1.0 for render textures since they are always 1:1
|
|
196
214
|
// the final render texture will be rendered to the screen with the correct pixel ratio
|
|
197
215
|
this.glw.uniform1f('u_pixelRatio', 1.0);
|
|
198
216
|
|
|
199
217
|
// Set resolution to the framebuffer dimensions
|
|
200
|
-
this.glw.uniform2f('u_resolution',
|
|
218
|
+
this.glw.uniform2f('u_resolution', w, h);
|
|
201
219
|
} else {
|
|
202
|
-
this.glw.uniform1f('u_pixelRatio', renderOp.
|
|
220
|
+
this.glw.uniform1f('u_pixelRatio', renderOp.stage.pixelRatio);
|
|
221
|
+
|
|
203
222
|
this.glw.uniform2f(
|
|
204
223
|
'u_resolution',
|
|
205
224
|
this.glw.canvas.width,
|
|
@@ -207,45 +226,47 @@ export class WebGlShaderProgram implements CoreShaderProgram {
|
|
|
207
226
|
);
|
|
208
227
|
}
|
|
209
228
|
|
|
210
|
-
this.
|
|
229
|
+
if (this.useTimeValue === true) {
|
|
230
|
+
this.glw.uniform1f('u_time', renderOp.time);
|
|
231
|
+
}
|
|
211
232
|
|
|
212
|
-
if (this.useSystemAlpha) {
|
|
213
|
-
this.glw.uniform1f('u_alpha', renderOp.
|
|
233
|
+
if (this.useSystemAlpha === true) {
|
|
234
|
+
this.glw.uniform1f('u_alpha', renderOp.worldAlpha);
|
|
214
235
|
}
|
|
215
236
|
|
|
216
|
-
if (this.useSystemDimensions) {
|
|
217
|
-
this.glw.uniform2f(
|
|
218
|
-
'u_dimensions',
|
|
219
|
-
renderOp.quad.width,
|
|
220
|
-
renderOp.quad.height,
|
|
221
|
-
);
|
|
237
|
+
if (this.useSystemDimensions === true) {
|
|
238
|
+
this.glw.uniform2f('u_dimensions', renderOp.width, renderOp.height);
|
|
222
239
|
}
|
|
223
240
|
|
|
224
241
|
/**temporary fix to make sdf texts work */
|
|
225
|
-
if (renderOp.sdfShaderProps !== undefined) {
|
|
226
|
-
|
|
242
|
+
if (isCoreNode === false && renderOp.sdfShaderProps !== undefined) {
|
|
243
|
+
const opShader = renderOp.shader; // SdfRenderOp has .shader
|
|
244
|
+
(opShader.shaderType as WebGlShaderType).onSdfBind?.call(
|
|
227
245
|
this.glw,
|
|
228
246
|
renderOp.sdfShaderProps,
|
|
229
247
|
);
|
|
230
248
|
return;
|
|
231
249
|
}
|
|
232
250
|
|
|
233
|
-
|
|
251
|
+
const shader = renderOp.shader as WebGlShaderNode;
|
|
252
|
+
if (shader.props !== undefined) {
|
|
234
253
|
/**
|
|
235
254
|
* loop over all precalculated uniform types
|
|
236
255
|
*/
|
|
237
|
-
|
|
238
|
-
|
|
256
|
+
const uniforms = shader.uniforms;
|
|
257
|
+
|
|
258
|
+
for (const key in uniforms.single) {
|
|
259
|
+
const { method, value } = uniforms.single[key]!;
|
|
239
260
|
this.glw[method as keyof UniformSet1Param](key, value as never);
|
|
240
261
|
}
|
|
241
262
|
|
|
242
|
-
for (const key in
|
|
243
|
-
const { method, value } =
|
|
263
|
+
for (const key in uniforms.vec2) {
|
|
264
|
+
const { method, value } = uniforms.vec2[key]!;
|
|
244
265
|
this.glw[method as keyof UniformSet2Params](key, value[0], value[1]);
|
|
245
266
|
}
|
|
246
267
|
|
|
247
|
-
for (const key in
|
|
248
|
-
const { method, value } =
|
|
268
|
+
for (const key in uniforms.vec3) {
|
|
269
|
+
const { method, value } = uniforms.vec3[key]!;
|
|
249
270
|
this.glw[method as keyof UniformSet3Params](
|
|
250
271
|
key,
|
|
251
272
|
value[0],
|
|
@@ -254,8 +275,8 @@ export class WebGlShaderProgram implements CoreShaderProgram {
|
|
|
254
275
|
);
|
|
255
276
|
}
|
|
256
277
|
|
|
257
|
-
for (const key in
|
|
258
|
-
const { method, value } =
|
|
278
|
+
for (const key in uniforms.vec4) {
|
|
279
|
+
const { method, value } = uniforms.vec4[key]!;
|
|
259
280
|
this.glw[method as keyof UniformSet4Params](
|
|
260
281
|
key,
|
|
261
282
|
value[0],
|
|
@@ -269,14 +290,14 @@ export class WebGlShaderProgram implements CoreShaderProgram {
|
|
|
269
290
|
|
|
270
291
|
bindBufferCollection(buffer: BufferCollection) {
|
|
271
292
|
const { glw } = this;
|
|
272
|
-
const attribs =
|
|
293
|
+
const attribs = this.attributeLocations;
|
|
273
294
|
const attribLen = attribs.length;
|
|
274
295
|
|
|
275
296
|
for (let i = 0; i < attribLen; i++) {
|
|
276
297
|
const name = attribs[i]!;
|
|
277
298
|
const resolvedBuffer = buffer.getBuffer(name);
|
|
278
299
|
const resolvedInfo = buffer.getAttributeInfo(name);
|
|
279
|
-
if (
|
|
300
|
+
if (resolvedBuffer === undefined || resolvedInfo === undefined) {
|
|
280
301
|
continue;
|
|
281
302
|
}
|
|
282
303
|
glw.enableVertexAttribArray(i);
|
|
@@ -293,12 +314,18 @@ export class WebGlShaderProgram implements CoreShaderProgram {
|
|
|
293
314
|
}
|
|
294
315
|
|
|
295
316
|
bindTextures(textures: WebGlCtxTexture[]) {
|
|
317
|
+
if (textures[0] === undefined) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
296
320
|
this.glw.activeTexture(0);
|
|
297
|
-
this.glw.bindTexture(textures[0]
|
|
321
|
+
this.glw.bindTexture(textures[0].ctxTexture);
|
|
298
322
|
}
|
|
299
323
|
|
|
300
324
|
attach(): void {
|
|
301
|
-
|
|
325
|
+
if (this.isDestroyed === true) {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
this.glw.useProgram(this.program, this.uniformLocations!);
|
|
302
329
|
if (this.glw.isWebGl2() && this.vao) {
|
|
303
330
|
this.glw.bindVertexArray(this.vao);
|
|
304
331
|
}
|
|
@@ -307,4 +334,23 @@ export class WebGlShaderProgram implements CoreShaderProgram {
|
|
|
307
334
|
detach(): void {
|
|
308
335
|
this.disableAttributes();
|
|
309
336
|
}
|
|
337
|
+
|
|
338
|
+
destroy() {
|
|
339
|
+
if (this.isDestroyed === true) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
const glw = this.glw;
|
|
343
|
+
|
|
344
|
+
this.detach();
|
|
345
|
+
|
|
346
|
+
glw.deleteProgram(this.program!);
|
|
347
|
+
this.program = null;
|
|
348
|
+
this.uniformLocations = null;
|
|
349
|
+
|
|
350
|
+
const attribs = this.attributeLocations;
|
|
351
|
+
const attribLen = this.attributeLocations.length;
|
|
352
|
+
for (let i = 0; i < attribLen; i++) {
|
|
353
|
+
this.glw.deleteBuffer(attribs[i]!);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
310
356
|
}
|
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
-
* following copyright and licenses apply:
|
|
4
|
-
*
|
|
5
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
-
*
|
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
1
|
import type { AttributeInfo } from './ShaderUtils.js';
|
|
21
2
|
|
|
22
3
|
export interface BufferItem {
|
|
@@ -29,7 +10,19 @@ export interface BufferItem {
|
|
|
29
10
|
* vertex attribute formats.
|
|
30
11
|
*/
|
|
31
12
|
export class BufferCollection {
|
|
32
|
-
|
|
13
|
+
private _lookup = new Map<string, BufferItem>();
|
|
14
|
+
|
|
15
|
+
constructor(readonly config: BufferItem[]) {
|
|
16
|
+
for (const item of config) {
|
|
17
|
+
for (const attrName in item.attributes) {
|
|
18
|
+
// We only care about attributes that are actually defined (truthy)
|
|
19
|
+
// and we want the first one found in the config array order
|
|
20
|
+
if (item.attributes[attrName] && !this._lookup.has(attrName)) {
|
|
21
|
+
this._lookup.set(attrName, item);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
33
26
|
|
|
34
27
|
/**
|
|
35
28
|
* Get the WebGLBuffer associated with the given attribute name if it exists.
|
|
@@ -38,7 +31,7 @@ export class BufferCollection {
|
|
|
38
31
|
* @returns
|
|
39
32
|
*/
|
|
40
33
|
getBuffer(attributeName: string): WebGLBuffer | undefined {
|
|
41
|
-
return this.
|
|
34
|
+
return this._lookup.get(attributeName)?.buffer;
|
|
42
35
|
}
|
|
43
36
|
|
|
44
37
|
/**
|
|
@@ -48,7 +41,6 @@ export class BufferCollection {
|
|
|
48
41
|
* @returns
|
|
49
42
|
*/
|
|
50
43
|
getAttributeInfo(attributeName: string): AttributeInfo | undefined {
|
|
51
|
-
return this.
|
|
52
|
-
?.attributes[attributeName];
|
|
44
|
+
return this._lookup.get(attributeName)?.attributes[attributeName];
|
|
53
45
|
}
|
|
54
46
|
}
|
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
-
* following copyright and licenses apply:
|
|
4
|
-
*
|
|
5
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
-
*
|
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
1
|
import type { WebGlContextWrapper } from '../../../lib/WebGlContextWrapper.js';
|
|
21
2
|
|
|
22
3
|
export interface CoreWebGlParameters {
|
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
-
* following copyright and licenses apply:
|
|
4
|
-
*
|
|
5
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
-
*
|
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
1
|
import type { WebGlContextWrapper } from '../../../lib/WebGlContextWrapper.js';
|
|
21
2
|
|
|
22
3
|
//#region Types
|
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
-
* following copyright and licenses apply:
|
|
4
|
-
*
|
|
5
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
-
*
|
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
1
|
/**
|
|
21
2
|
* Generic WebGL Utility Functions
|
|
22
3
|
*
|
|
@@ -1,78 +1,119 @@
|
|
|
1
|
-
|
|
2
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License.
|
|
5
|
-
* You may obtain a copy of the License at
|
|
6
|
-
*
|
|
7
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
* See the License for the specific language governing permissions and
|
|
13
|
-
* limitations under the License.
|
|
14
|
-
*
|
|
15
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
-
*/
|
|
17
|
-
|
|
1
|
+
import { formatRgba, parseColorRgba } from '../../lib/colorParser.js';
|
|
18
2
|
import { valuesAreEqual } from '../../lib/utils.js';
|
|
19
3
|
import type { CanvasShaderType } from '../../renderers/canvas/CanvasShaderNode.js';
|
|
20
|
-
import {
|
|
21
|
-
formatRgba,
|
|
22
|
-
parseColorRgba,
|
|
23
|
-
} from '../../renderers/canvas/internal/ColorUtils.js';
|
|
24
4
|
import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
|
|
25
5
|
import {
|
|
26
6
|
BorderTemplate,
|
|
27
7
|
type BorderProps,
|
|
28
8
|
} from '../templates/BorderTemplate.js';
|
|
29
|
-
import { strokeLine } from './utils/render.js';
|
|
30
9
|
|
|
31
10
|
export interface ComputedBorderValues {
|
|
32
11
|
borderColor: string;
|
|
33
12
|
borderAsym: boolean;
|
|
34
|
-
|
|
13
|
+
innerX: number;
|
|
14
|
+
innerY: number;
|
|
15
|
+
innerW: number;
|
|
16
|
+
innerH: number;
|
|
17
|
+
outerX: number;
|
|
18
|
+
outerY: number;
|
|
19
|
+
outerW: number;
|
|
20
|
+
outerH: number;
|
|
35
21
|
}
|
|
36
22
|
|
|
37
23
|
export const Border: CanvasShaderType<BorderProps, ComputedBorderValues> = {
|
|
38
24
|
props: BorderTemplate.props,
|
|
39
25
|
update() {
|
|
40
26
|
this.computed.borderColor = formatRgba(parseColorRgba(this.props!.color));
|
|
41
|
-
this.computed.borderAsym = !valuesAreEqual(this.props!.
|
|
27
|
+
this.computed.borderAsym = !valuesAreEqual(this.props!.w as number[]);
|
|
28
|
+
const borderAlign = this.props!.align as number;
|
|
29
|
+
const borderGap = this.props!.gap as number;
|
|
30
|
+
|
|
31
|
+
const borderW = this.props!.w as Vec4;
|
|
32
|
+
|
|
33
|
+
if (this.computed.borderAsym === false) {
|
|
34
|
+
const bWidth = borderW[0] * 0.5;
|
|
35
|
+
//inside
|
|
36
|
+
const baseline = bWidth - borderW[0] * borderAlign - borderGap;
|
|
37
|
+
this.computed.outerX = baseline;
|
|
38
|
+
this.computed.outerY = baseline;
|
|
39
|
+
|
|
40
|
+
this.computed.outerW = -baseline * 2;
|
|
41
|
+
this.computed.outerH = -baseline * 2;
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Calculate outer and inner rectangle dimensions
|
|
46
|
+
const [t, r, b, l] = this.props!.w as Vec4;
|
|
47
|
+
|
|
48
|
+
const outerX = (this.computed.outerX = -l * borderAlign - borderGap);
|
|
49
|
+
const outerY = (this.computed.outerY = -t * borderAlign - borderGap);
|
|
50
|
+
let outerW = 0;
|
|
51
|
+
let outerH = 0;
|
|
52
|
+
|
|
53
|
+
if (r > 0) {
|
|
54
|
+
outerW += r * borderAlign + borderGap;
|
|
55
|
+
}
|
|
56
|
+
if (l > 0) {
|
|
57
|
+
outerW += l * borderAlign + borderGap;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (b > 0) {
|
|
61
|
+
outerH += b * borderAlign + borderGap;
|
|
62
|
+
}
|
|
63
|
+
if (t > 0) {
|
|
64
|
+
outerH += t * borderAlign + borderGap;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
this.computed.outerW = outerW;
|
|
68
|
+
this.computed.outerH = outerH;
|
|
69
|
+
|
|
70
|
+
this.computed.innerX = outerX + l;
|
|
71
|
+
this.computed.innerY = outerY + t;
|
|
72
|
+
this.computed.innerW = outerW - l - r;
|
|
73
|
+
this.computed.innerH = outerH - t - b;
|
|
42
74
|
},
|
|
43
75
|
render(ctx, quad, renderContext) {
|
|
44
76
|
renderContext();
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
ctx.lineWidth = bWidth;
|
|
77
|
+
const computed = this.computed as ComputedBorderValues;
|
|
78
|
+
ctx.strokeStyle = computed.borderColor!;
|
|
79
|
+
if (computed.borderAsym === false && this.props!.w[0] > 0) {
|
|
80
|
+
ctx.lineWidth = this.props!.w[0];
|
|
50
81
|
ctx.beginPath();
|
|
51
82
|
ctx.strokeRect(
|
|
52
|
-
quad.tx +
|
|
53
|
-
quad.ty +
|
|
54
|
-
quad.width
|
|
55
|
-
quad.height
|
|
83
|
+
quad.tx + computed.outerX,
|
|
84
|
+
quad.ty + computed.outerY,
|
|
85
|
+
quad.width + computed.outerW,
|
|
86
|
+
quad.height + computed.outerH,
|
|
56
87
|
);
|
|
57
88
|
return;
|
|
58
89
|
}
|
|
59
90
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
91
|
+
// Pre-calculate common values
|
|
92
|
+
const tx = quad.tx;
|
|
93
|
+
const ty = quad.ty;
|
|
94
|
+
const width = quad.width;
|
|
95
|
+
const height = quad.height;
|
|
96
|
+
|
|
97
|
+
// Calculate outer rectangle (including border)
|
|
98
|
+
const outerX = tx + computed.outerX;
|
|
99
|
+
const outerY = ty + computed.outerY;
|
|
100
|
+
const outerW = width + computed.outerW;
|
|
101
|
+
const outerH = height + computed.outerH;
|
|
102
|
+
|
|
103
|
+
// Calculate inner rectangle (excluding border)
|
|
104
|
+
const innerX = tx + computed.innerX;
|
|
105
|
+
const innerY = ty + computed.innerY;
|
|
106
|
+
const innerW = width + computed.innerW;
|
|
107
|
+
const innerH = height + computed.innerH;
|
|
108
|
+
|
|
109
|
+
// Use clip to subtract inner from outer
|
|
110
|
+
ctx.save();
|
|
111
|
+
ctx.beginPath();
|
|
112
|
+
ctx.rect(outerX, outerY, outerW, outerH);
|
|
113
|
+
ctx.rect(innerX, innerY, innerW, innerH);
|
|
114
|
+
ctx.clip('evenodd');
|
|
115
|
+
ctx.fillStyle = this.computed.borderColor!;
|
|
116
|
+
ctx.fillRect(outerX, outerY, outerW, outerH);
|
|
117
|
+
ctx.restore();
|
|
77
118
|
},
|
|
78
119
|
};
|