@lightningjs/renderer 2.12.1 → 3.0.0-beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exports/canvas-shaders.d.ts +10 -0
- package/dist/exports/canvas-shaders.js +27 -0
- package/dist/exports/canvas-shaders.js.map +1 -0
- package/dist/exports/canvas.d.ts +7 -1
- package/dist/exports/canvas.js +7 -1
- package/dist/exports/canvas.js.map +1 -1
- package/dist/exports/index.d.ts +15 -8
- package/dist/exports/index.js +7 -4
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/webgl-shaders.d.ts +11 -0
- package/dist/exports/webgl-shaders.js +28 -0
- package/dist/exports/webgl-shaders.js.map +1 -0
- package/dist/exports/webgl.d.ts +9 -1
- package/dist/exports/webgl.js +9 -1
- package/dist/exports/webgl.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +19 -5
- package/dist/src/core/CoreNode.js +117 -24
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.d.ts +29 -71
- package/dist/src/core/CoreShaderManager.js +110 -97
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.js +1 -1
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +13 -7
- package/dist/src/core/CoreTextureManager.js +92 -105
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +15 -16
- package/dist/src/core/Stage.js +45 -32
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureMemoryManager.d.ts +16 -6
- package/dist/src/core/TextureMemoryManager.js +75 -17
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.d.ts +0 -1
- package/dist/src/core/animations/CoreAnimation.js +6 -52
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.d.ts +1 -1
- package/dist/src/core/lib/ImageWorker.js +13 -11
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +67 -54
- package/dist/src/core/lib/WebGlContextWrapper.js +126 -157
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/textureCompression.js +0 -1
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +4 -0
- package/dist/src/core/lib/utils.js +26 -0
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/lib/validateImageBitmap.d.ts +6 -0
- package/dist/src/core/lib/validateImageBitmap.js +68 -0
- package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
- package/dist/src/core/platform.js +4 -3
- package/dist/src/core/platform.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +11 -21
- package/dist/src/core/renderers/CoreRenderer.js +0 -6
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
- package/dist/src/core/renderers/CoreShaderNode.js +107 -0
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
- package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
- package/{src/core/renderers/CoreShader.ts → dist/src/core/renderers/CoreShaderProgram.js} +2 -23
- 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 +212 -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 +60 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.js +123 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -13
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +192 -113
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +2 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +14 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +7 -12
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +55 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +9 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +38 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +57 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +227 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +36 -0
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +107 -0
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +134 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +546 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +221 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +334 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +35 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +195 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +32 -5
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +50 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/shaders/canvas/Border.d.ts +9 -0
- package/dist/src/core/shaders/canvas/Border.js +57 -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 +38 -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 +46 -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 +68 -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 +33 -0
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +35 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +39 -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 +38 -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 +31 -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 +84 -0
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +37 -0
- package/dist/src/core/shaders/templates/BorderTemplate.js +73 -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 +35 -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 +47 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -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 +67 -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 +24 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +6 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -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 +23 -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 +66 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/shaderUtils.d.ts +5 -0
- package/dist/src/core/shaders/templates/shaderUtils.js +41 -0
- package/dist/src/core/shaders/templates/shaderUtils.js.map +1 -0
- package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
- package/dist/src/core/shaders/webgl/Border.js +87 -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 +86 -0
- package/dist/src/core/shaders/webgl/Default.js.map +1 -0
- package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
- package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
- package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
- package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
- package/dist/src/core/shaders/webgl/HolePunch.js +64 -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 +75 -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 +73 -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 +86 -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 +97 -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 +112 -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 +84 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +32 -0
- package/dist/src/core/shaders/webgl/SdfShader.js +116 -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 +110 -0
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +6 -0
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +2 -3
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +34 -30
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +1 -4
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.js +10 -16
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +1 -1
- package/dist/src/main-api/INode.d.ts +9 -9
- package/dist/src/main-api/Inspector.js +16 -2
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +35 -92
- package/dist/src/main-api/Renderer.js +11 -57
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/utils.d.ts +6 -0
- package/dist/src/utils.js +18 -0
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/canvas-shaders.ts +28 -0
- package/exports/canvas.ts +7 -1
- package/exports/index.ts +17 -17
- package/exports/webgl-shaders.ts +28 -0
- package/exports/webgl.ts +13 -1
- package/package.json +3 -1
- package/src/core/CoreNode.test.ts +157 -153
- package/src/core/CoreNode.ts +173 -38
- package/src/core/CoreShaderManager.ts +127 -226
- package/src/core/CoreTextNode.ts +1 -8
- package/src/core/CoreTextureManager.ts +127 -126
- package/src/core/Stage.ts +62 -44
- package/src/core/TextureMemoryManager.ts +108 -27
- package/src/core/animations/CoreAnimation.ts +8 -64
- package/src/core/lib/ImageWorker.ts +20 -12
- package/src/core/lib/WebGlContextWrapper.ts +228 -236
- package/src/core/lib/textureCompression.ts +3 -3
- package/src/core/lib/utils.ts +51 -0
- package/src/core/lib/validateImageBitmap.ts +76 -0
- package/src/core/platform.ts +6 -3
- package/src/core/renderers/CoreRenderer.ts +19 -27
- package/src/core/renderers/CoreShaderNode.ts +171 -0
- package/src/core/renderers/{canvas/shaders/UnsupportedShader.ts → CoreShaderProgram.ts} +3 -28
- package/src/core/renderers/canvas/CanvasRenderer.ts +299 -0
- package/src/core/renderers/canvas/CanvasShaderNode.ts +99 -0
- package/src/core/renderers/canvas/{CanvasCoreTexture.ts → CanvasTexture.ts} +1 -1
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +2 -13
- package/src/core/renderers/canvas/internal/ColorUtils.ts +16 -0
- package/src/core/renderers/webgl/{WebGlCoreCtxRenderTexture.ts → WebGlCtxRenderTexture.ts} +2 -2
- package/src/core/renderers/webgl/{WebGlCoreCtxSubTexture.ts → WebGlCtxSubTexture.ts} +2 -2
- package/src/core/renderers/webgl/{WebGlCoreCtxTexture.ts → WebGlCtxTexture.ts} +12 -14
- package/src/core/renderers/webgl/{WebGlCoreRenderOp.ts → WebGlRenderOp.ts} +56 -36
- package/src/core/renderers/webgl/{WebGlCoreRenderer.ts → WebGlRenderer.ts} +143 -243
- package/src/core/renderers/webgl/WebGlShaderNode.ts +433 -0
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +310 -0
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -5
- package/src/core/shaders/canvas/Border.ts +78 -0
- package/src/core/shaders/canvas/HolePunch.ts +62 -0
- package/src/core/shaders/canvas/LinearGradient.ts +69 -0
- package/src/core/shaders/canvas/RadialGradient.ts +113 -0
- package/src/core/shaders/canvas/Rounded.ts +55 -0
- package/src/core/shaders/canvas/RoundedWithBorder.ts +68 -0
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +88 -0
- package/src/core/shaders/canvas/RoundedWithShadow.ts +69 -0
- package/src/core/shaders/canvas/Shadow.ts +52 -0
- package/src/core/shaders/canvas/utils/render.ts +151 -0
- package/src/core/shaders/templates/BorderTemplate.ts +115 -0
- package/src/core/shaders/templates/HolePunchTemplate.ts +82 -0
- package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -0
- package/src/core/shaders/templates/RadialGradientTemplate.ts +81 -0
- package/src/core/shaders/templates/RoundedTemplate.ts +98 -0
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -0
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -0
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -0
- package/src/core/shaders/templates/ShadowTemplate.ts +106 -0
- package/src/core/shaders/templates/shaderUtils.ts +47 -0
- package/src/core/shaders/webgl/Border.ts +96 -0
- package/src/core/shaders/webgl/Default.ts +89 -0
- package/src/core/shaders/webgl/DefaultBatched.ts +129 -0
- package/src/core/shaders/webgl/HolePunch.ts +78 -0
- package/src/core/shaders/webgl/LinearGradient.ts +81 -0
- package/src/core/shaders/webgl/RadialGradient.ts +84 -0
- package/src/core/shaders/webgl/Rounded.ts +117 -0
- package/src/core/shaders/webgl/RoundedWithBorder.ts +114 -0
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +133 -0
- package/src/core/shaders/webgl/RoundedWithShadow.ts +98 -0
- package/src/core/shaders/webgl/SdfShader.ts +137 -0
- package/src/core/shaders/webgl/Shadow.ts +115 -0
- package/src/core/text-rendering/TextTextureRendererUtils.ts +1 -1
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +2 -2
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +12 -5
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +44 -56
- package/src/core/text-rendering/renderers/TextRenderer.ts +2 -9
- package/src/core/textures/ImageTexture.ts +11 -17
- package/src/core/textures/Texture.ts +1 -1
- package/src/main-api/INode.ts +11 -13
- package/src/main-api/Inspector.ts +19 -2
- package/src/main-api/Renderer.ts +59 -130
- package/src/utils.ts +19 -0
- package/src/core/renderers/canvas/CanvasCoreRenderer.ts +0 -375
- package/src/core/renderers/webgl/WebGlCoreShader.ts +0 -362
- package/src/core/renderers/webgl/shaders/DefaultShader.ts +0 -93
- package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +0 -132
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +0 -580
- package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +0 -167
- package/src/core/renderers/webgl/shaders/SdfShader.ts +0 -204
- package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +0 -87
- package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +0 -101
- package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +0 -159
- package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +0 -127
- package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +0 -148
- package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +0 -67
- package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +0 -157
- package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +0 -171
- package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +0 -168
- package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +0 -187
- package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +0 -110
- package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +0 -196
- package/src/main-api/DynamicShaderController.ts +0 -104
- package/src/main-api/ShaderController.ts +0 -80
package/src/main-api/Renderer.ts
CHANGED
|
@@ -17,66 +17,25 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
21
|
-
import type { EffectMap, ShaderMap } from '../core/CoreShaderManager.js';
|
|
22
20
|
import type { ExtractProps, TextureMap } from '../core/CoreTextureManager.js';
|
|
23
21
|
import { EventEmitter } from '../common/EventEmitter.js';
|
|
24
22
|
import { assertTruthy, isProductionEnvironment } from '../utils.js';
|
|
25
23
|
import { Stage } from '../core/Stage.js';
|
|
26
24
|
import { CoreNode, type CoreNodeProps } from '../core/CoreNode.js';
|
|
27
25
|
import { type CoreTextNodeProps } from '../core/CoreTextNode.js';
|
|
28
|
-
import type {
|
|
29
|
-
BaseShaderController,
|
|
30
|
-
ShaderController,
|
|
31
|
-
} from './ShaderController.js';
|
|
32
26
|
import type { INode, INodeProps, ITextNode, ITextNodeProps } from './INode.js';
|
|
33
|
-
import type {
|
|
34
|
-
DynamicEffects,
|
|
35
|
-
DynamicShaderController,
|
|
36
|
-
} from './DynamicShaderController.js';
|
|
37
|
-
import type {
|
|
38
|
-
EffectDesc,
|
|
39
|
-
EffectDescUnion,
|
|
40
|
-
} from '../core/renderers/webgl/shaders/effects/ShaderEffect.js';
|
|
41
27
|
import type { TextureMemoryManagerSettings } from '../core/TextureMemoryManager.js';
|
|
42
28
|
import type { CanvasTextRenderer } from '../core/text-rendering/renderers/CanvasTextRenderer.js';
|
|
43
29
|
import type { SdfTextRenderer } from '../core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
|
|
44
|
-
import type {
|
|
45
|
-
import type {
|
|
30
|
+
import type { WebGlRenderer } from '../core/renderers/webgl/WebGlRenderer.js';
|
|
31
|
+
import type { CanvasRenderer } from '../core/renderers/canvas/CanvasRenderer.js';
|
|
46
32
|
import type { Inspector } from './Inspector.js';
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
*/
|
|
54
|
-
export interface SpecificShaderRef<ShType extends keyof ShaderMap> {
|
|
55
|
-
readonly descType: 'shader';
|
|
56
|
-
readonly shType: ShType;
|
|
57
|
-
readonly props: ExtractProps<ShaderMap[ShType]>;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
type MapShaderRefs<ShType extends keyof ShaderMap> =
|
|
61
|
-
ShType extends keyof ShaderMap ? SpecificShaderRef<ShType> : never;
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* An immutable reference to a Shader
|
|
65
|
-
*
|
|
66
|
-
* @remarks
|
|
67
|
-
* This structure should only be created by the RendererMain's `createShader`
|
|
68
|
-
* method. The structure is immutable and should not be modified once created.
|
|
69
|
-
*
|
|
70
|
-
* A `ShaderRef` exists in the Main API Space and is used to point to an actual
|
|
71
|
-
* `Shader` instance in the Core API Space. The `ShaderRef` is used to
|
|
72
|
-
* communicate with the Core API Space to create, load, and destroy the
|
|
73
|
-
* `Shader` instance.
|
|
74
|
-
*
|
|
75
|
-
* This type is technically a discriminated union of all possible shader types.
|
|
76
|
-
* If you'd like to represent a specific shader type, you can use the
|
|
77
|
-
* `SpecificShaderRef` generic type.
|
|
78
|
-
*/
|
|
79
|
-
export type ShaderRef = MapShaderRefs<keyof ShaderMap>;
|
|
33
|
+
import type { CoreShaderNode } from '../core/renderers/CoreShaderNode.js';
|
|
34
|
+
import type {
|
|
35
|
+
ExtractShaderProps,
|
|
36
|
+
OptionalShaderProps,
|
|
37
|
+
ShaderMap,
|
|
38
|
+
} from '../core/CoreShaderManager.js';
|
|
80
39
|
|
|
81
40
|
/**
|
|
82
41
|
* Configuration settings for {@link RendererMain}
|
|
@@ -207,7 +166,7 @@ export interface RendererMainSettings {
|
|
|
207
166
|
* both CanvasTextRenderer and SdfTextRenderer for Text Rendering.
|
|
208
167
|
*
|
|
209
168
|
*/
|
|
210
|
-
renderEngine: typeof
|
|
169
|
+
renderEngine: typeof CanvasRenderer | typeof WebGlRenderer;
|
|
211
170
|
|
|
212
171
|
/**
|
|
213
172
|
* Quad buffer size in bytes
|
|
@@ -288,6 +247,31 @@ export interface RendererMainSettings {
|
|
|
288
247
|
* element will be created and appended to the target element.
|
|
289
248
|
*/
|
|
290
249
|
canvas?: HTMLCanvasElement;
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* createImageBitmap support for the runtime
|
|
253
|
+
*
|
|
254
|
+
* @remarks
|
|
255
|
+
* This is used to determine if and which version of the createImageBitmap API
|
|
256
|
+
* is supported by the runtime. This is used to determine if the renderer can
|
|
257
|
+
* use createImageBitmap to load images.
|
|
258
|
+
*
|
|
259
|
+
* Options supported
|
|
260
|
+
* - Auto - Automatically determine the supported version
|
|
261
|
+
* - Basic - Supports createImageBitmap(image)
|
|
262
|
+
* - Options - Supports createImageBitmap(image, options)
|
|
263
|
+
* - Full - Supports createImageBitmap(image, sx, sy, sw, sh, options)
|
|
264
|
+
*
|
|
265
|
+
* Note with auto detection, the renderer will attempt to use the most advanced
|
|
266
|
+
* version of the API available. If the API is not available, the renderer will
|
|
267
|
+
* fall back to the next available version.
|
|
268
|
+
*
|
|
269
|
+
* This will affect startup performance as the renderer will need to determine
|
|
270
|
+
* the supported version of the API.
|
|
271
|
+
*
|
|
272
|
+
* @defaultValue `full`
|
|
273
|
+
*/
|
|
274
|
+
createImageBitmapSupport?: 'auto' | 'basic' | 'options' | 'full';
|
|
291
275
|
}
|
|
292
276
|
|
|
293
277
|
/**
|
|
@@ -341,7 +325,7 @@ export interface RendererMainSettings {
|
|
|
341
325
|
* - `criticalThreshold` - The critical threshold (in bytes)
|
|
342
326
|
*/
|
|
343
327
|
export class RendererMain extends EventEmitter {
|
|
344
|
-
readonly root: INode
|
|
328
|
+
readonly root: INode;
|
|
345
329
|
readonly canvas: HTMLCanvasElement;
|
|
346
330
|
readonly settings: Readonly<Required<RendererMainSettings>>;
|
|
347
331
|
readonly stage: Stage;
|
|
@@ -360,10 +344,12 @@ export class RendererMain extends EventEmitter {
|
|
|
360
344
|
const resolvedTxSettings: TextureMemoryManagerSettings = {
|
|
361
345
|
criticalThreshold: settings.textureMemory?.criticalThreshold || 124e6,
|
|
362
346
|
targetThresholdLevel: settings.textureMemory?.targetThresholdLevel || 0.5,
|
|
363
|
-
cleanupInterval: settings.textureMemory?.cleanupInterval ||
|
|
347
|
+
cleanupInterval: settings.textureMemory?.cleanupInterval || 5000,
|
|
364
348
|
debugLogging: settings.textureMemory?.debugLogging || false,
|
|
365
349
|
baselineMemoryAllocation:
|
|
366
350
|
settings.textureMemory?.baselineMemoryAllocation || 26e6,
|
|
351
|
+
doNotExceedCriticalThreshold:
|
|
352
|
+
settings.textureMemory?.doNotExceedCriticalThreshold || false,
|
|
367
353
|
};
|
|
368
354
|
|
|
369
355
|
const resolvedSettings: Required<RendererMainSettings> = {
|
|
@@ -387,6 +373,7 @@ export class RendererMain extends EventEmitter {
|
|
|
387
373
|
strictBounds: settings.strictBounds ?? true,
|
|
388
374
|
textureProcessingTimeLimit: settings.textureProcessingTimeLimit || 10,
|
|
389
375
|
canvas: settings.canvas || document.createElement('canvas'),
|
|
376
|
+
createImageBitmapSupport: settings.createImageBitmapSupport || 'full',
|
|
390
377
|
};
|
|
391
378
|
this.settings = resolvedSettings;
|
|
392
379
|
|
|
@@ -430,12 +417,11 @@ export class RendererMain extends EventEmitter {
|
|
|
430
417
|
inspector: this.settings.inspector !== null,
|
|
431
418
|
strictBounds: this.settings.strictBounds,
|
|
432
419
|
textureProcessingTimeLimit: this.settings.textureProcessingTimeLimit,
|
|
420
|
+
createImageBitmapSupport: this.settings.createImageBitmapSupport,
|
|
433
421
|
});
|
|
434
422
|
|
|
435
423
|
// Extract the root node
|
|
436
|
-
this.root = this.stage.root as unknown as INode
|
|
437
|
-
ShaderController<'DefaultShader'>
|
|
438
|
-
>;
|
|
424
|
+
this.root = this.stage.root as unknown as INode;
|
|
439
425
|
|
|
440
426
|
// Get the target element and attach the canvas to it
|
|
441
427
|
let targetEl: HTMLElement | null;
|
|
@@ -472,18 +458,20 @@ export class RendererMain extends EventEmitter {
|
|
|
472
458
|
* @param props
|
|
473
459
|
* @returns
|
|
474
460
|
*/
|
|
475
|
-
createNode<
|
|
476
|
-
|
|
477
|
-
|
|
461
|
+
createNode<ShNode extends CoreShaderNode<any>>(
|
|
462
|
+
props: Partial<INodeProps<ShNode>>,
|
|
463
|
+
): INode<ShNode> {
|
|
464
|
+
assertTruthy(this.stage, 'Stage is not initialized');
|
|
465
|
+
|
|
478
466
|
const node = this.stage.createNode(props as Partial<CoreNodeProps>);
|
|
479
467
|
|
|
480
468
|
if (this.inspector) {
|
|
481
|
-
return this.inspector.createNode(node) as unknown as INode<
|
|
469
|
+
return this.inspector.createNode(node) as unknown as INode<ShNode>;
|
|
482
470
|
}
|
|
483
471
|
|
|
484
472
|
// FIXME onDestroy event? node.once('beforeDestroy'
|
|
485
473
|
// FIXME onCreate event?
|
|
486
|
-
return node as unknown as INode<
|
|
474
|
+
return node as unknown as INode<ShNode>;
|
|
487
475
|
}
|
|
488
476
|
|
|
489
477
|
/**
|
|
@@ -504,7 +492,7 @@ export class RendererMain extends EventEmitter {
|
|
|
504
492
|
const textNode = this.stage.createTextNode(props as CoreTextNodeProps);
|
|
505
493
|
|
|
506
494
|
if (this.inspector) {
|
|
507
|
-
return this.inspector.createTextNode(textNode);
|
|
495
|
+
return this.inspector.createTextNode(textNode) as unknown as ITextNode;
|
|
508
496
|
}
|
|
509
497
|
|
|
510
498
|
return textNode as unknown as ITextNode;
|
|
@@ -565,73 +553,12 @@ export class RendererMain extends EventEmitter {
|
|
|
565
553
|
* @returns
|
|
566
554
|
*/
|
|
567
555
|
createShader<ShType extends keyof ShaderMap>(
|
|
568
|
-
|
|
569
|
-
props?:
|
|
570
|
-
)
|
|
571
|
-
return this.stage.shManager.
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
/**
|
|
575
|
-
* Create a new Dynamic Shader controller
|
|
576
|
-
*
|
|
577
|
-
* @remarks
|
|
578
|
-
* A Dynamic Shader is a shader that can be composed of an array of mulitple
|
|
579
|
-
* effects. Each effect can be animated or changed after creation (provided
|
|
580
|
-
* the effect is given a name).
|
|
581
|
-
*
|
|
582
|
-
* Example:
|
|
583
|
-
* ```ts
|
|
584
|
-
* renderer.createNode({
|
|
585
|
-
* shader: renderer.createDynamicShader([
|
|
586
|
-
* renderer.createEffect('radius', {
|
|
587
|
-
* radius: 0
|
|
588
|
-
* }, 'effect1'),
|
|
589
|
-
* renderer.createEffect('border', {
|
|
590
|
-
* color: 0xff00ffff,
|
|
591
|
-
* width: 10,
|
|
592
|
-
* }, 'effect2'),
|
|
593
|
-
* ]),
|
|
594
|
-
* });
|
|
595
|
-
* ```
|
|
596
|
-
*
|
|
597
|
-
* @param effects
|
|
598
|
-
* @returns
|
|
599
|
-
*/
|
|
600
|
-
createDynamicShader<
|
|
601
|
-
T extends DynamicEffects<[...{ name?: string; type: keyof EffectMap }[]]>,
|
|
602
|
-
>(effects: [...T]): DynamicShaderController<T> {
|
|
603
|
-
return this.stage.shManager.loadDynamicShader({
|
|
604
|
-
effects: effects as EffectDescUnion[],
|
|
605
|
-
});
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
/**
|
|
609
|
-
* Create an effect to be used in a Dynamic Shader
|
|
610
|
-
*
|
|
611
|
-
* @remark
|
|
612
|
-
* The {name} parameter is optional but required if you want to animate the effect
|
|
613
|
-
* or change the effect's properties after creation.
|
|
614
|
-
*
|
|
615
|
-
* See {@link createDynamicShader} for an example.
|
|
616
|
-
*
|
|
617
|
-
* @param type
|
|
618
|
-
* @param props
|
|
619
|
-
* @param name
|
|
620
|
-
* @returns
|
|
621
|
-
*/
|
|
622
|
-
createEffect<
|
|
623
|
-
Type extends keyof EffectMap,
|
|
624
|
-
Name extends string | undefined = undefined,
|
|
625
|
-
>(
|
|
626
|
-
type: Type,
|
|
627
|
-
props: EffectDesc<{ name: Name; type: Type }>['props'],
|
|
628
|
-
name?: Name,
|
|
629
|
-
): EffectDesc<{ name: Name; type: Type }> {
|
|
630
|
-
return {
|
|
631
|
-
name,
|
|
632
|
-
type,
|
|
633
|
-
props,
|
|
634
|
-
};
|
|
556
|
+
shType: ShType,
|
|
557
|
+
props?: OptionalShaderProps<ShType>,
|
|
558
|
+
) {
|
|
559
|
+
return this.stage.shManager.createShader(shType, props) as CoreShaderNode<
|
|
560
|
+
ExtractShaderProps<ShType>
|
|
561
|
+
>;
|
|
635
562
|
}
|
|
636
563
|
|
|
637
564
|
/**
|
|
@@ -692,6 +619,8 @@ export class RendererMain extends EventEmitter {
|
|
|
692
619
|
/**
|
|
693
620
|
* Cleanup textures that are not being used
|
|
694
621
|
*
|
|
622
|
+
* @param aggressive - If true, will cleanup all textures, regardless of render status
|
|
623
|
+
*
|
|
695
624
|
* @remarks
|
|
696
625
|
* This can be used to free up GFX memory used by textures that are no longer
|
|
697
626
|
* being displayed.
|
|
@@ -705,8 +634,8 @@ export class RendererMain extends EventEmitter {
|
|
|
705
634
|
* **NOTE3**: This will not cleanup textures that are marked as `preventCleanup`.
|
|
706
635
|
* **NOTE4**: This has nothing to do with the garbage collection of JavaScript.
|
|
707
636
|
*/
|
|
708
|
-
cleanup() {
|
|
709
|
-
this.stage.cleanup();
|
|
637
|
+
cleanup(aggressive: boolean = false) {
|
|
638
|
+
this.stage.cleanup(aggressive);
|
|
710
639
|
}
|
|
711
640
|
|
|
712
641
|
/**
|
package/src/utils.ts
CHANGED
|
@@ -246,3 +246,22 @@ let nextId = 1;
|
|
|
246
246
|
export function getNewId(): number {
|
|
247
247
|
return nextId++;
|
|
248
248
|
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Makes a deep clone of an object
|
|
252
|
+
* @param object
|
|
253
|
+
* @returns
|
|
254
|
+
*/
|
|
255
|
+
export function deepClone<T>(obj: T): T {
|
|
256
|
+
if (typeof obj !== 'object') {
|
|
257
|
+
return obj;
|
|
258
|
+
}
|
|
259
|
+
if (Array.isArray(obj)) {
|
|
260
|
+
return obj.map((item) => deepClone(item)) as T;
|
|
261
|
+
}
|
|
262
|
+
const copy = {} as Record<string, unknown>;
|
|
263
|
+
for (const key in obj) {
|
|
264
|
+
copy[key] = deepClone(obj[key]);
|
|
265
|
+
}
|
|
266
|
+
return copy as T;
|
|
267
|
+
}
|
|
@@ -1,375 +0,0 @@
|
|
|
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
|
-
import type { BaseShaderController } from '../../../main-api/ShaderController.js';
|
|
21
|
-
import type { CoreNode } from '../../CoreNode.js';
|
|
22
|
-
import type { CoreShaderManager } from '../../CoreShaderManager.js';
|
|
23
|
-
import { getRgbaComponents, type RGBA } from '../../lib/utils.js';
|
|
24
|
-
import { SubTexture } from '../../textures/SubTexture.js';
|
|
25
|
-
import { TextureType, type Texture } from '../../textures/Texture.js';
|
|
26
|
-
import type { CoreContextTexture } from '../CoreContextTexture.js';
|
|
27
|
-
import {
|
|
28
|
-
CoreRenderer,
|
|
29
|
-
type CoreRendererOptions,
|
|
30
|
-
type QuadOptions,
|
|
31
|
-
} from '../CoreRenderer.js';
|
|
32
|
-
import { CanvasCoreTexture } from './CanvasCoreTexture.js';
|
|
33
|
-
import {
|
|
34
|
-
getBorder,
|
|
35
|
-
getRadius,
|
|
36
|
-
roundRect,
|
|
37
|
-
strokeLine,
|
|
38
|
-
} from './internal/C2DShaderUtils.js';
|
|
39
|
-
import {
|
|
40
|
-
formatRgba,
|
|
41
|
-
parseColorRgba,
|
|
42
|
-
parseColor,
|
|
43
|
-
type IParsedColor,
|
|
44
|
-
} from './internal/ColorUtils.js';
|
|
45
|
-
import { UnsupportedShader } from './shaders/UnsupportedShader.js';
|
|
46
|
-
import { assertTruthy } from '../../../utils.js';
|
|
47
|
-
|
|
48
|
-
export class CanvasCoreRenderer extends CoreRenderer {
|
|
49
|
-
private context: CanvasRenderingContext2D;
|
|
50
|
-
private canvas: HTMLCanvasElement;
|
|
51
|
-
private pixelRatio: number;
|
|
52
|
-
private clearColor: RGBA | undefined;
|
|
53
|
-
public renderToTextureActive = false;
|
|
54
|
-
activeRttNode: CoreNode | null = null;
|
|
55
|
-
private defShaderCtr: BaseShaderController;
|
|
56
|
-
|
|
57
|
-
constructor(options: CoreRendererOptions) {
|
|
58
|
-
super(options);
|
|
59
|
-
|
|
60
|
-
this.mode = 'canvas';
|
|
61
|
-
this.shManager.renderer = this;
|
|
62
|
-
|
|
63
|
-
const { canvas, pixelRatio, clearColor } = options;
|
|
64
|
-
this.canvas = canvas as HTMLCanvasElement;
|
|
65
|
-
this.context = canvas.getContext('2d') as CanvasRenderingContext2D;
|
|
66
|
-
this.pixelRatio = pixelRatio;
|
|
67
|
-
this.clearColor = clearColor ? getRgbaComponents(clearColor) : undefined;
|
|
68
|
-
|
|
69
|
-
// Stub for default shader controller since the canvas renderer does not
|
|
70
|
-
// (really) support the concept of a shader (yet)
|
|
71
|
-
this.defShaderCtr = {
|
|
72
|
-
type: 'DefaultShader',
|
|
73
|
-
props: {},
|
|
74
|
-
shader: new UnsupportedShader('DefaultShader'),
|
|
75
|
-
getResolvedProps: () => () => {
|
|
76
|
-
return {};
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
reset(): void {
|
|
82
|
-
this.canvas.width = this.canvas.width; // quick reset canvas
|
|
83
|
-
|
|
84
|
-
const ctx = this.context;
|
|
85
|
-
|
|
86
|
-
if (this.clearColor) {
|
|
87
|
-
const [r, g, b, a] = this.clearColor;
|
|
88
|
-
ctx.fillStyle = `rgba(${r}, ${g}, ${b}, ${a / 255})`;
|
|
89
|
-
ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
ctx.scale(this.pixelRatio, this.pixelRatio);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
render(): void {
|
|
96
|
-
// noop
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
addQuad(quad: QuadOptions): void {
|
|
100
|
-
const ctx = this.context;
|
|
101
|
-
const {
|
|
102
|
-
tx,
|
|
103
|
-
ty,
|
|
104
|
-
width,
|
|
105
|
-
height,
|
|
106
|
-
alpha,
|
|
107
|
-
colorTl,
|
|
108
|
-
colorTr,
|
|
109
|
-
colorBr,
|
|
110
|
-
ta,
|
|
111
|
-
tb,
|
|
112
|
-
tc,
|
|
113
|
-
td,
|
|
114
|
-
clippingRect,
|
|
115
|
-
} = quad;
|
|
116
|
-
let texture = quad.texture;
|
|
117
|
-
let ctxTexture: CanvasCoreTexture | undefined = undefined;
|
|
118
|
-
let frame:
|
|
119
|
-
| { x: number; y: number; width: number; height: number }
|
|
120
|
-
| undefined;
|
|
121
|
-
|
|
122
|
-
const textureType = texture?.type;
|
|
123
|
-
assertTruthy(textureType, 'Texture type is not defined');
|
|
124
|
-
|
|
125
|
-
// The Canvas2D renderer only supports image and color textures and subTexture images
|
|
126
|
-
if (
|
|
127
|
-
textureType !== TextureType.image &&
|
|
128
|
-
textureType !== TextureType.color &&
|
|
129
|
-
textureType !== TextureType.subTexture &&
|
|
130
|
-
textureType !== TextureType.noise
|
|
131
|
-
) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
if (texture) {
|
|
136
|
-
if (texture instanceof SubTexture) {
|
|
137
|
-
frame = texture.props;
|
|
138
|
-
texture = texture.parentTexture;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
ctxTexture = texture.ctxTexture as CanvasCoreTexture;
|
|
142
|
-
if (texture.state === 'freed') {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
if (texture.state !== 'loaded') {
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
const color = parseColor(colorTl);
|
|
151
|
-
const hasTransform = ta !== 1;
|
|
152
|
-
const hasClipping = clippingRect.width !== 0 && clippingRect.height !== 0;
|
|
153
|
-
const hasGradient = colorTl !== colorTr || colorTl !== colorBr;
|
|
154
|
-
const hasQuadShader = Boolean(quad.shader);
|
|
155
|
-
const radius = hasQuadShader ? getRadius(quad) : 0;
|
|
156
|
-
const border = hasQuadShader ? getBorder(quad) : undefined;
|
|
157
|
-
|
|
158
|
-
if (hasTransform || hasClipping || radius) {
|
|
159
|
-
ctx.save();
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
if (hasClipping) {
|
|
163
|
-
const path = new Path2D();
|
|
164
|
-
const { x, y, width, height } = clippingRect;
|
|
165
|
-
path.rect(x, y, width, height);
|
|
166
|
-
ctx.clip(path);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
if (hasTransform) {
|
|
170
|
-
// Quad transform:
|
|
171
|
-
// | ta tb tx |
|
|
172
|
-
// | tc td ty |
|
|
173
|
-
// | 0 0 1 |
|
|
174
|
-
// C2D transform:
|
|
175
|
-
// | a c e |
|
|
176
|
-
// | b d f |
|
|
177
|
-
// | 0 0 1 |
|
|
178
|
-
const scale = this.pixelRatio;
|
|
179
|
-
ctx.setTransform(ta, tc, tb, td, tx * scale, ty * scale);
|
|
180
|
-
ctx.scale(scale, scale);
|
|
181
|
-
ctx.translate(-tx, -ty);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
if (radius) {
|
|
185
|
-
const path = new Path2D();
|
|
186
|
-
roundRect.call(path, tx, ty, width, height, radius);
|
|
187
|
-
ctx.clip(path);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
if (
|
|
191
|
-
(textureType === TextureType.image ||
|
|
192
|
-
textureType === TextureType.subTexture ||
|
|
193
|
-
textureType === TextureType.noise) &&
|
|
194
|
-
ctxTexture
|
|
195
|
-
) {
|
|
196
|
-
const image = ctxTexture.getImage(color);
|
|
197
|
-
ctx.globalAlpha = color.a ?? alpha;
|
|
198
|
-
if (frame) {
|
|
199
|
-
ctx.drawImage(
|
|
200
|
-
image,
|
|
201
|
-
frame.x,
|
|
202
|
-
frame.y,
|
|
203
|
-
frame.width,
|
|
204
|
-
frame.height,
|
|
205
|
-
tx,
|
|
206
|
-
ty,
|
|
207
|
-
width,
|
|
208
|
-
height,
|
|
209
|
-
);
|
|
210
|
-
} else {
|
|
211
|
-
try {
|
|
212
|
-
ctx.drawImage(image, tx, ty, width, height);
|
|
213
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
214
|
-
} catch (error) {
|
|
215
|
-
// noop
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
ctx.globalAlpha = 1;
|
|
219
|
-
} else if (textureType === TextureType.color && hasGradient) {
|
|
220
|
-
let endX: number = tx;
|
|
221
|
-
let endY: number = ty;
|
|
222
|
-
let endColor: IParsedColor;
|
|
223
|
-
if (colorTl === colorTr) {
|
|
224
|
-
// vertical
|
|
225
|
-
endX = tx;
|
|
226
|
-
endY = ty + height;
|
|
227
|
-
endColor = parseColor(colorBr);
|
|
228
|
-
} else {
|
|
229
|
-
// horizontal
|
|
230
|
-
endX = tx + width;
|
|
231
|
-
endY = ty;
|
|
232
|
-
endColor = parseColor(colorTr);
|
|
233
|
-
}
|
|
234
|
-
const gradient = ctx.createLinearGradient(tx, ty, endX, endY);
|
|
235
|
-
gradient.addColorStop(0, formatRgba(color));
|
|
236
|
-
gradient.addColorStop(1, formatRgba(endColor));
|
|
237
|
-
ctx.fillStyle = gradient;
|
|
238
|
-
ctx.fillRect(tx, ty, width, height);
|
|
239
|
-
} else if (textureType === TextureType.color) {
|
|
240
|
-
ctx.fillStyle = formatRgba(color);
|
|
241
|
-
ctx.fillRect(tx, ty, width, height);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
if (border && border.width) {
|
|
245
|
-
const borderWidth = border.width;
|
|
246
|
-
const borderInnerWidth = border.width / 2;
|
|
247
|
-
const borderColor = formatRgba(parseColorRgba(border.color ?? 0));
|
|
248
|
-
|
|
249
|
-
ctx.beginPath();
|
|
250
|
-
ctx.lineWidth = borderWidth;
|
|
251
|
-
ctx.strokeStyle = borderColor;
|
|
252
|
-
ctx.globalAlpha = alpha;
|
|
253
|
-
if (radius) {
|
|
254
|
-
roundRect.call(
|
|
255
|
-
ctx,
|
|
256
|
-
tx + borderInnerWidth,
|
|
257
|
-
ty + borderInnerWidth,
|
|
258
|
-
width - borderWidth,
|
|
259
|
-
height - borderWidth,
|
|
260
|
-
radius,
|
|
261
|
-
);
|
|
262
|
-
ctx.stroke();
|
|
263
|
-
} else {
|
|
264
|
-
ctx.strokeRect(
|
|
265
|
-
tx + borderInnerWidth,
|
|
266
|
-
ty + borderInnerWidth,
|
|
267
|
-
width - borderWidth,
|
|
268
|
-
height - borderWidth,
|
|
269
|
-
);
|
|
270
|
-
}
|
|
271
|
-
ctx.globalAlpha = 1;
|
|
272
|
-
} else if (hasQuadShader) {
|
|
273
|
-
const borderTop = getBorder(quad, 'Top');
|
|
274
|
-
const borderRight = getBorder(quad, 'Right');
|
|
275
|
-
const borderBottom = getBorder(quad, 'Bottom');
|
|
276
|
-
const borderLeft = getBorder(quad, 'Left');
|
|
277
|
-
|
|
278
|
-
if (borderTop) {
|
|
279
|
-
strokeLine(
|
|
280
|
-
ctx,
|
|
281
|
-
tx,
|
|
282
|
-
ty,
|
|
283
|
-
width,
|
|
284
|
-
height,
|
|
285
|
-
borderTop.width,
|
|
286
|
-
borderTop.color,
|
|
287
|
-
'Top',
|
|
288
|
-
);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
if (borderRight) {
|
|
292
|
-
strokeLine(
|
|
293
|
-
ctx,
|
|
294
|
-
tx,
|
|
295
|
-
ty,
|
|
296
|
-
width,
|
|
297
|
-
height,
|
|
298
|
-
borderRight.width,
|
|
299
|
-
borderRight.color,
|
|
300
|
-
'Right',
|
|
301
|
-
);
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
if (borderBottom) {
|
|
305
|
-
strokeLine(
|
|
306
|
-
ctx,
|
|
307
|
-
tx,
|
|
308
|
-
ty,
|
|
309
|
-
width,
|
|
310
|
-
height,
|
|
311
|
-
borderBottom.width,
|
|
312
|
-
borderBottom.color,
|
|
313
|
-
'Bottom',
|
|
314
|
-
);
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
if (borderLeft) {
|
|
318
|
-
strokeLine(
|
|
319
|
-
ctx,
|
|
320
|
-
tx,
|
|
321
|
-
ty,
|
|
322
|
-
width,
|
|
323
|
-
height,
|
|
324
|
-
borderLeft.width,
|
|
325
|
-
borderLeft.color,
|
|
326
|
-
'Left',
|
|
327
|
-
);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
if (hasTransform || hasClipping || radius) {
|
|
332
|
-
ctx.restore();
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
createCtxTexture(textureSource: Texture): CoreContextTexture {
|
|
337
|
-
return new CanvasCoreTexture(this.txMemManager, textureSource);
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
getShaderManager(): CoreShaderManager {
|
|
341
|
-
return this.shManager;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
override getDefShaderCtr(): BaseShaderController {
|
|
345
|
-
return this.defShaderCtr;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
renderRTTNodes(): void {
|
|
349
|
-
// noop
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
removeRTTNode(node: CoreNode): void {
|
|
353
|
-
// noop
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
renderToTexture(node: CoreNode): void {
|
|
357
|
-
// noop
|
|
358
|
-
}
|
|
359
|
-
getBufferInfo(): null {
|
|
360
|
-
return null;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
getQuadCount(): null {
|
|
364
|
-
return null;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
/**
|
|
368
|
-
* Updates the clear color of the canvas renderer.
|
|
369
|
-
*
|
|
370
|
-
* @param color - The color to set as the clear color.
|
|
371
|
-
*/
|
|
372
|
-
updateClearColor(color: number) {
|
|
373
|
-
this.clearColor = color ? getRgbaComponents(color) : undefined;
|
|
374
|
-
}
|
|
375
|
-
}
|