@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
|
@@ -0,0 +1,299 @@
|
|
|
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
|
+
import type { CoreNode } from '../../CoreNode.js';
|
|
20
|
+
import { SubTexture } from '../../textures/SubTexture.js';
|
|
21
|
+
import { TextureType, type Texture } from '../../textures/Texture.js';
|
|
22
|
+
import type { CoreContextTexture } from '../CoreContextTexture.js';
|
|
23
|
+
import {
|
|
24
|
+
CoreRenderer,
|
|
25
|
+
type CoreRendererOptions,
|
|
26
|
+
type QuadOptions,
|
|
27
|
+
} from '../CoreRenderer.js';
|
|
28
|
+
import { CanvasTexture } from './CanvasTexture.js';
|
|
29
|
+
import {
|
|
30
|
+
parseColor,
|
|
31
|
+
parseToAbgrString,
|
|
32
|
+
parseToRgbaString,
|
|
33
|
+
} from './internal/ColorUtils.js';
|
|
34
|
+
import { assertTruthy } from '../../../utils.js';
|
|
35
|
+
import { CanvasShaderNode, type CanvasShaderType } from './CanvasShaderNode.js';
|
|
36
|
+
import type { CoreShaderType } from '../CoreShaderNode.js';
|
|
37
|
+
|
|
38
|
+
export class CanvasRenderer extends CoreRenderer {
|
|
39
|
+
private context: CanvasRenderingContext2D;
|
|
40
|
+
private canvas: HTMLCanvasElement;
|
|
41
|
+
private pixelRatio: number;
|
|
42
|
+
private clearColor: string;
|
|
43
|
+
public renderToTextureActive = false;
|
|
44
|
+
activeRttNode: CoreNode | null = null;
|
|
45
|
+
|
|
46
|
+
private parsedColorCache: Map<number, string> = new Map();
|
|
47
|
+
|
|
48
|
+
constructor(options: CoreRendererOptions) {
|
|
49
|
+
super(options);
|
|
50
|
+
|
|
51
|
+
this.mode = 'canvas';
|
|
52
|
+
|
|
53
|
+
const { canvas } = options;
|
|
54
|
+
this.canvas = canvas as HTMLCanvasElement;
|
|
55
|
+
this.context = canvas.getContext('2d') as CanvasRenderingContext2D;
|
|
56
|
+
this.pixelRatio = this.stage.pixelRatio;
|
|
57
|
+
this.clearColor = this.getParsedColor(this.stage.clearColor);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
reset(): void {
|
|
61
|
+
this.canvas.width = this.canvas.width; // quick reset canvas
|
|
62
|
+
|
|
63
|
+
const ctx = this.context;
|
|
64
|
+
|
|
65
|
+
if (this.clearColor) {
|
|
66
|
+
ctx.fillStyle = this.clearColor;
|
|
67
|
+
ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
ctx.scale(this.pixelRatio, this.pixelRatio);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
render(): void {
|
|
74
|
+
// noop
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
addQuad(quad: QuadOptions): void {
|
|
78
|
+
const ctx = this.context;
|
|
79
|
+
const { tx, ty, ta, tb, tc, td, clippingRect } = quad;
|
|
80
|
+
let texture = quad.texture;
|
|
81
|
+
const textureType = texture?.type;
|
|
82
|
+
assertTruthy(textureType, 'Texture type is not defined');
|
|
83
|
+
|
|
84
|
+
// The Canvas2D renderer only supports image and color textures
|
|
85
|
+
if (
|
|
86
|
+
textureType !== TextureType.image &&
|
|
87
|
+
textureType !== TextureType.color &&
|
|
88
|
+
textureType !== TextureType.subTexture &&
|
|
89
|
+
textureType !== TextureType.noise
|
|
90
|
+
) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (texture) {
|
|
95
|
+
if (texture instanceof SubTexture) {
|
|
96
|
+
texture = texture.parentTexture;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (texture.state === 'freed') {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (texture.state !== 'loaded') {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const hasTransform = ta !== 1;
|
|
108
|
+
const hasClipping = clippingRect.width !== 0 && clippingRect.height !== 0;
|
|
109
|
+
const hasShader = quad.shader !== null;
|
|
110
|
+
|
|
111
|
+
let saveAndRestore = hasTransform === true || hasClipping === true;
|
|
112
|
+
if (hasShader === true) {
|
|
113
|
+
saveAndRestore =
|
|
114
|
+
saveAndRestore || (quad.shader as CanvasShaderNode).applySNR;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (saveAndRestore) {
|
|
118
|
+
ctx.save();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (hasClipping === true) {
|
|
122
|
+
const path = new Path2D();
|
|
123
|
+
const { x, y, width, height } = clippingRect;
|
|
124
|
+
path.rect(x, y, width, height);
|
|
125
|
+
ctx.clip(path);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (hasTransform === true) {
|
|
129
|
+
// Quad transform:
|
|
130
|
+
// | ta tb tx |
|
|
131
|
+
// | tc td ty |
|
|
132
|
+
// | 0 0 1 |
|
|
133
|
+
// C2D transform:
|
|
134
|
+
// | a c e |
|
|
135
|
+
// | b d f |
|
|
136
|
+
// | 0 0 1 |
|
|
137
|
+
const scale = this.pixelRatio;
|
|
138
|
+
ctx.setTransform(ta, tc, tb, td, tx * scale, ty * scale);
|
|
139
|
+
ctx.scale(scale, scale);
|
|
140
|
+
ctx.translate(-tx, -ty);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (hasShader === true) {
|
|
144
|
+
let renderContext: (() => void) | null = () => {
|
|
145
|
+
this.renderContext(quad);
|
|
146
|
+
};
|
|
147
|
+
(quad.shader as CanvasShaderNode).render(ctx, quad, renderContext);
|
|
148
|
+
renderContext = null;
|
|
149
|
+
} else {
|
|
150
|
+
this.renderContext(quad);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (saveAndRestore) {
|
|
154
|
+
ctx.restore();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
renderContext(quad: QuadOptions) {
|
|
159
|
+
const color = quad.colorTl;
|
|
160
|
+
const textureType = quad.texture?.type;
|
|
161
|
+
if (
|
|
162
|
+
(textureType === TextureType.image ||
|
|
163
|
+
textureType === TextureType.subTexture ||
|
|
164
|
+
textureType === TextureType.noise) &&
|
|
165
|
+
quad.texture?.ctxTexture
|
|
166
|
+
) {
|
|
167
|
+
const tintColor = parseColor(color);
|
|
168
|
+
const image = (quad.texture.ctxTexture as CanvasTexture).getImage(
|
|
169
|
+
tintColor,
|
|
170
|
+
);
|
|
171
|
+
this.context.globalAlpha = tintColor.a ?? quad.alpha;
|
|
172
|
+
if (textureType === TextureType.subTexture) {
|
|
173
|
+
this.context.drawImage(
|
|
174
|
+
image,
|
|
175
|
+
(quad.texture as SubTexture).props.x,
|
|
176
|
+
(quad.texture as SubTexture).props.y,
|
|
177
|
+
(quad.texture as SubTexture).props.width,
|
|
178
|
+
(quad.texture as SubTexture).props.height,
|
|
179
|
+
quad.tx,
|
|
180
|
+
quad.ty,
|
|
181
|
+
quad.width,
|
|
182
|
+
quad.height,
|
|
183
|
+
);
|
|
184
|
+
} else {
|
|
185
|
+
try {
|
|
186
|
+
this.context.drawImage(
|
|
187
|
+
image,
|
|
188
|
+
quad.tx,
|
|
189
|
+
quad.ty,
|
|
190
|
+
quad.width,
|
|
191
|
+
quad.height,
|
|
192
|
+
);
|
|
193
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
194
|
+
} catch (error) {
|
|
195
|
+
// noop
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
this.context.globalAlpha = 1;
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const hasGradient =
|
|
202
|
+
quad.colorTl !== quad.colorTr || quad.colorTl !== quad.colorBr;
|
|
203
|
+
if (textureType === TextureType.color && hasGradient) {
|
|
204
|
+
let endX: number = quad.tx;
|
|
205
|
+
let endY: number = quad.ty;
|
|
206
|
+
let endColor: number;
|
|
207
|
+
if (quad.colorTl === quad.colorTr) {
|
|
208
|
+
// vertical
|
|
209
|
+
endX = quad.tx;
|
|
210
|
+
endY = quad.ty + quad.height;
|
|
211
|
+
endColor = quad.colorBr;
|
|
212
|
+
} else {
|
|
213
|
+
// horizontal
|
|
214
|
+
endX = quad.tx + quad.width;
|
|
215
|
+
endY = quad.ty;
|
|
216
|
+
endColor = quad.colorTr;
|
|
217
|
+
}
|
|
218
|
+
const gradient = this.context.createLinearGradient(
|
|
219
|
+
quad.tx,
|
|
220
|
+
quad.ty,
|
|
221
|
+
endX,
|
|
222
|
+
endY,
|
|
223
|
+
);
|
|
224
|
+
gradient.addColorStop(0, this.getParsedColor(color));
|
|
225
|
+
gradient.addColorStop(1, this.getParsedColor(endColor));
|
|
226
|
+
this.context.fillStyle = gradient;
|
|
227
|
+
this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
|
|
228
|
+
} else if (textureType === TextureType.color) {
|
|
229
|
+
this.context.fillStyle = this.getParsedColor(color);
|
|
230
|
+
this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
createShaderNode(
|
|
235
|
+
shaderKey: string,
|
|
236
|
+
shaderType: Readonly<CanvasShaderType>,
|
|
237
|
+
props?: Record<string, any>,
|
|
238
|
+
) {
|
|
239
|
+
return new CanvasShaderNode(shaderKey, shaderType, this.stage, props);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
createShaderProgram(shaderConfig) {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
override supportsShaderType(shaderType: Readonly<CanvasShaderType>): boolean {
|
|
247
|
+
return shaderType.render !== undefined;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
createCtxTexture(textureSource: Texture): CoreContextTexture {
|
|
251
|
+
return new CanvasTexture(this.stage.txMemManager, textureSource);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
renderRTTNodes(): void {
|
|
255
|
+
// noop
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
removeRTTNode(node: CoreNode): void {
|
|
259
|
+
// noop
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
renderToTexture(node: CoreNode): void {
|
|
263
|
+
// noop
|
|
264
|
+
}
|
|
265
|
+
getBufferInfo(): null {
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
getQuadCount(): null {
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
getParsedColor(color: number, isRGBA: boolean = false) {
|
|
274
|
+
let out = this.parsedColorCache.get(color);
|
|
275
|
+
if (out !== undefined) {
|
|
276
|
+
return out;
|
|
277
|
+
}
|
|
278
|
+
if (isRGBA) {
|
|
279
|
+
out = parseToRgbaString(color);
|
|
280
|
+
} else {
|
|
281
|
+
out = parseToAbgrString(color);
|
|
282
|
+
}
|
|
283
|
+
this.parsedColorCache.set(color, out);
|
|
284
|
+
return out;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Updates the clear color of the canvas renderer.
|
|
289
|
+
*
|
|
290
|
+
* @param color - The color to set as the clear color.
|
|
291
|
+
*/
|
|
292
|
+
updateClearColor(color: number) {
|
|
293
|
+
this.clearColor = this.getParsedColor(color);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
override getDefaultShaderNode() {
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
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
|
+
|
|
18
|
+
import type { CoreNode } from '../../CoreNode.js';
|
|
19
|
+
import type { Stage } from '../../Stage.js';
|
|
20
|
+
import type { QuadOptions } from '../CoreRenderer.js';
|
|
21
|
+
import { CoreShaderNode, type CoreShaderType } from '../CoreShaderNode.js';
|
|
22
|
+
import type { CanvasRenderer } from './CanvasRenderer.js';
|
|
23
|
+
|
|
24
|
+
export type CanvasShaderType<
|
|
25
|
+
T extends object = Record<string, unknown>,
|
|
26
|
+
C extends object = Record<string, unknown>,
|
|
27
|
+
> = CoreShaderType<T> & {
|
|
28
|
+
render: (
|
|
29
|
+
this: CanvasShaderNode<T, C>,
|
|
30
|
+
ctx: CanvasRenderingContext2D,
|
|
31
|
+
quad: QuadOptions,
|
|
32
|
+
renderContext: () => void,
|
|
33
|
+
) => void;
|
|
34
|
+
update?: (this: CanvasShaderNode<T, C>, node: CoreNode) => void;
|
|
35
|
+
/**
|
|
36
|
+
* Set this to true when using ctx functions that scale, clip, rotate, etc..
|
|
37
|
+
*/
|
|
38
|
+
saveAndRestore?: boolean;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export class CanvasShaderNode<
|
|
42
|
+
Props extends object = Record<string, unknown>,
|
|
43
|
+
Computed extends object = Record<string, unknown>,
|
|
44
|
+
> extends CoreShaderNode<Props> {
|
|
45
|
+
private updater: ((node: CoreNode, props?: Props) => void) | undefined =
|
|
46
|
+
undefined;
|
|
47
|
+
private valueKey: string = '';
|
|
48
|
+
computed: Partial<Computed> = {};
|
|
49
|
+
applySNR: boolean;
|
|
50
|
+
render: CanvasShaderType<Props>['render'];
|
|
51
|
+
|
|
52
|
+
constructor(
|
|
53
|
+
shaderKey: string,
|
|
54
|
+
config: CanvasShaderType<Props>,
|
|
55
|
+
stage: Stage,
|
|
56
|
+
props?: Props,
|
|
57
|
+
) {
|
|
58
|
+
super(shaderKey, config, stage, props);
|
|
59
|
+
this.applySNR = config.saveAndRestore || false;
|
|
60
|
+
this.render = config.render;
|
|
61
|
+
if (config.update !== undefined) {
|
|
62
|
+
this.updater = config.update!;
|
|
63
|
+
if (this.props === undefined) {
|
|
64
|
+
this.updater!(this.node as CoreNode, this.props);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
this.update = () => {
|
|
69
|
+
const prevKey = this.valueKey;
|
|
70
|
+
this.valueKey = '';
|
|
71
|
+
for (const key in this.resolvedProps) {
|
|
72
|
+
this.valueKey += `${key}:${this.resolvedProps[key]!};`;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (prevKey === this.valueKey) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (prevKey.length > 0) {
|
|
80
|
+
this.stage.shManager.mutateShaderValueUsage(prevKey, -1);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const computed = this.stage.shManager.getShaderValues(
|
|
84
|
+
this.valueKey,
|
|
85
|
+
) as Record<string, unknown>;
|
|
86
|
+
if (computed !== undefined) {
|
|
87
|
+
this.computed = computed as Computed;
|
|
88
|
+
}
|
|
89
|
+
this.computed = {};
|
|
90
|
+
this.updater!(this.node as CoreNode);
|
|
91
|
+
this.stage.shManager.setShaderValues(this.valueKey, this.computed);
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
toColorString(rgba: number) {
|
|
97
|
+
return (this.stage.renderer as CanvasRenderer).getParsedColor(rgba, true);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -22,7 +22,7 @@ import { assertTruthy } from '../../../utils.js';
|
|
|
22
22
|
import { CoreContextTexture } from '../CoreContextTexture.js';
|
|
23
23
|
import { formatRgba, type IParsedColor } from './internal/ColorUtils.js';
|
|
24
24
|
|
|
25
|
-
export class
|
|
25
|
+
export class CanvasTexture extends CoreContextTexture {
|
|
26
26
|
protected image:
|
|
27
27
|
| ImageBitmap
|
|
28
28
|
| HTMLCanvasElement
|
|
@@ -18,20 +18,10 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import type { QuadOptions } from '../../CoreRenderer.js';
|
|
21
|
-
import type { BorderEffectProps } from '../../webgl/shaders/effects/BorderEffect.js';
|
|
22
|
-
import type { RadiusEffectProps } from '../../webgl/shaders/effects/RadiusEffect.js';
|
|
23
|
-
import type { EffectDescUnion } from '../../webgl/shaders/effects/ShaderEffect.js';
|
|
24
|
-
import {
|
|
25
|
-
ROUNDED_RECTANGLE_SHADER_TYPE,
|
|
26
|
-
UnsupportedShader,
|
|
27
|
-
} from '../shaders/UnsupportedShader.js';
|
|
28
|
-
import { formatRgba, parseColorRgba } from './ColorUtils.js';
|
|
29
21
|
|
|
30
22
|
type Direction = 'Top' | 'Right' | 'Bottom' | 'Left';
|
|
31
23
|
|
|
32
|
-
|
|
33
|
-
* Extract `RoundedRectangle` shader radius to apply as a clipping
|
|
34
|
-
*/
|
|
24
|
+
/*
|
|
35
25
|
export function getRadius(quad: QuadOptions): RadiusEffectProps['radius'] {
|
|
36
26
|
if (quad.shader instanceof UnsupportedShader) {
|
|
37
27
|
const shType = quad.shader.shType;
|
|
@@ -54,8 +44,6 @@ export function getRadius(quad: QuadOptions): RadiusEffectProps['radius'] {
|
|
|
54
44
|
return 0;
|
|
55
45
|
}
|
|
56
46
|
|
|
57
|
-
/**
|
|
58
|
-
* Extract `RoundedRectangle` shader radius to apply as a clipping */
|
|
59
47
|
export function getBorder(
|
|
60
48
|
quad: QuadOptions,
|
|
61
49
|
direction: '' | Direction = '',
|
|
@@ -229,3 +217,4 @@ export function strokeLine(
|
|
|
229
217
|
ctx.lineTo(ex, ey);
|
|
230
218
|
ctx.stroke();
|
|
231
219
|
}
|
|
220
|
+
*/
|
|
@@ -47,6 +47,22 @@ export function parseColor(abgr: number): IParsedColor {
|
|
|
47
47
|
return { isWhite: false, a, r, g, b };
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
export function parseToAbgrString(abgr: number) {
|
|
51
|
+
const a = ((abgr >>> 24) & 0xff) / 255;
|
|
52
|
+
const b = (abgr >>> 16) & 0xff & 0xff;
|
|
53
|
+
const g = (abgr >>> 8) & 0xff & 0xff;
|
|
54
|
+
const r = abgr & 0xff & 0xff;
|
|
55
|
+
return `rgba(${r},${g},${b},${a})`;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function parseToRgbaString(rgba: number) {
|
|
59
|
+
const r = (rgba >>> 24) & 0xff;
|
|
60
|
+
const g = (rgba >>> 16) & 0xff & 0xff;
|
|
61
|
+
const b = (rgba >>> 8) & 0xff & 0xff;
|
|
62
|
+
const a = (rgba & 0xff & 0xff) / 255;
|
|
63
|
+
return `rgba(${r},${g},${b},${a})`;
|
|
64
|
+
}
|
|
65
|
+
|
|
50
66
|
/**
|
|
51
67
|
* Extract color components
|
|
52
68
|
*/
|
|
@@ -22,9 +22,9 @@ import { assertTruthy } from '../../../utils.js';
|
|
|
22
22
|
import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
|
|
23
23
|
import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
|
|
24
24
|
import type { RenderTexture } from '../../textures/RenderTexture.js';
|
|
25
|
-
import {
|
|
25
|
+
import { WebGlCtxTexture } from './WebGlCtxTexture.js';
|
|
26
26
|
|
|
27
|
-
export class
|
|
27
|
+
export class WebGlCtxRenderTexture extends WebGlCtxTexture {
|
|
28
28
|
declare textureSource: RenderTexture;
|
|
29
29
|
|
|
30
30
|
public framebuffer: WebGLFramebuffer | null = null;
|
|
@@ -22,9 +22,9 @@ import { assertTruthy } from '../../../utils.js';
|
|
|
22
22
|
import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
|
|
23
23
|
import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
|
|
24
24
|
import type { SubTexture } from '../../textures/SubTexture.js';
|
|
25
|
-
import {
|
|
25
|
+
import { WebGlCtxTexture } from './WebGlCtxTexture.js';
|
|
26
26
|
|
|
27
|
-
export class
|
|
27
|
+
export class WebGlCtxSubTexture extends WebGlCtxTexture {
|
|
28
28
|
constructor(
|
|
29
29
|
glw: WebGlContextWrapper,
|
|
30
30
|
memManager: TextureMemoryManager,
|
|
@@ -39,7 +39,7 @@ const TRANSPARENT_TEXTURE_DATA = new Uint8Array([0, 0, 0, 0]);
|
|
|
39
39
|
* and trigger the loading/uploading of the texture's data if it hasn't been
|
|
40
40
|
* loaded yet.
|
|
41
41
|
*/
|
|
42
|
-
export class
|
|
42
|
+
export class WebGlCtxTexture extends CoreContextTexture {
|
|
43
43
|
protected _nativeCtxTexture: WebGLTexture | null = null;
|
|
44
44
|
private _w = 0;
|
|
45
45
|
private _h = 0;
|
|
@@ -120,6 +120,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
120
120
|
if (this.state === 'freed') {
|
|
121
121
|
return;
|
|
122
122
|
}
|
|
123
|
+
|
|
123
124
|
this.state = 'failed';
|
|
124
125
|
this.textureSource.setState('failed', err);
|
|
125
126
|
this.textureSource.freeTextureData();
|
|
@@ -133,17 +134,16 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
133
134
|
async onLoadRequest(): Promise<Dimensions> {
|
|
134
135
|
const { glw } = this;
|
|
135
136
|
const textureData = this.textureSource.textureData;
|
|
136
|
-
|
|
137
|
+
if (textureData === null || this._nativeCtxTexture === null) {
|
|
138
|
+
throw new Error(
|
|
139
|
+
'Texture data or native texture is null ' + this.textureSource.type,
|
|
140
|
+
);
|
|
141
|
+
}
|
|
137
142
|
|
|
138
143
|
// Set to a 1x1 transparent texture
|
|
139
144
|
glw.texImage2D(0, glw.RGBA, 1, 1, 0, glw.RGBA, glw.UNSIGNED_BYTE, null);
|
|
140
145
|
this.setTextureMemUse(TRANSPARENT_TEXTURE_DATA.byteLength);
|
|
141
146
|
|
|
142
|
-
// If the texture has been freed while loading, return early.
|
|
143
|
-
if (!this._nativeCtxTexture) {
|
|
144
|
-
assertTruthy(this.state === 'freed');
|
|
145
|
-
return { width: 0, height: 0 };
|
|
146
|
-
}
|
|
147
147
|
let width = 0;
|
|
148
148
|
let height = 0;
|
|
149
149
|
|
|
@@ -256,14 +256,12 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
256
256
|
this.textureSource.setState('freed');
|
|
257
257
|
this._w = 0;
|
|
258
258
|
this._h = 0;
|
|
259
|
-
if (!this._nativeCtxTexture) {
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
const { glw } = this;
|
|
263
259
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
260
|
+
if (this._nativeCtxTexture !== null) {
|
|
261
|
+
this.glw.deleteTexture(this._nativeCtxTexture);
|
|
262
|
+
this.setTextureMemUse(0);
|
|
263
|
+
this._nativeCtxTexture = null;
|
|
264
|
+
}
|
|
267
265
|
|
|
268
266
|
// if the texture still has source data, free it
|
|
269
267
|
this.textureSource.freeTextureData();
|
|
@@ -18,46 +18,67 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import { CoreRenderOp } from '../CoreRenderOp.js';
|
|
21
|
-
import {
|
|
22
|
-
import type {
|
|
23
|
-
import type { WebGlCoreRendererOptions } from './WebGlCoreRenderer.js';
|
|
21
|
+
import type { WebGlCtxTexture } from './WebGlCtxTexture.js';
|
|
22
|
+
import type { WebGlRenderer } from './WebGlRenderer.js';
|
|
24
23
|
import type { BufferCollection } from './internal/BufferCollection.js';
|
|
25
|
-
import type {
|
|
26
|
-
import type {
|
|
27
|
-
import type {
|
|
24
|
+
import type { WebGlShaderNode } from './WebGlShaderNode.js';
|
|
25
|
+
import type { QuadOptions } from '../CoreRenderer.js';
|
|
26
|
+
import type { CoreTextNode } from '../../CoreTextNode.js';
|
|
27
|
+
|
|
28
|
+
type ReqQuad =
|
|
29
|
+
| 'alpha'
|
|
30
|
+
| 'shader'
|
|
31
|
+
| 'parentHasRenderTexture'
|
|
32
|
+
| 'rtt'
|
|
33
|
+
| 'clippingRect'
|
|
34
|
+
| 'height'
|
|
35
|
+
| 'width';
|
|
36
|
+
type RenderOpQuadOptions = Pick<QuadOptions, ReqQuad> &
|
|
37
|
+
Partial<Omit<QuadOptions, ReqQuad>> & {
|
|
38
|
+
sdfShaderProps?: Record<string, unknown>;
|
|
39
|
+
sdfBuffers?: BufferCollection;
|
|
40
|
+
};
|
|
28
41
|
|
|
29
42
|
/**
|
|
30
43
|
* Can render multiple quads with multiple textures (up to vertex shader texture limit)
|
|
31
44
|
*
|
|
32
45
|
*/
|
|
33
|
-
export class
|
|
46
|
+
export class WebGlRenderOp extends CoreRenderOp {
|
|
34
47
|
length = 0;
|
|
35
48
|
numQuads = 0;
|
|
36
|
-
textures:
|
|
49
|
+
textures: WebGlCtxTexture[] = [];
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* need to improve this when TextRenderers are refactored
|
|
53
|
+
*/
|
|
54
|
+
readonly sdfShaderProps: Record<string, unknown> | undefined;
|
|
55
|
+
readonly sdfNode: CoreTextNode | undefined;
|
|
37
56
|
readonly maxTextures: number;
|
|
57
|
+
readonly buffers: BufferCollection;
|
|
58
|
+
readonly shader: WebGlShaderNode;
|
|
38
59
|
|
|
39
60
|
constructor(
|
|
40
|
-
readonly
|
|
41
|
-
readonly
|
|
42
|
-
readonly buffers: BufferCollection,
|
|
43
|
-
readonly shader: WebGlCoreShader,
|
|
44
|
-
readonly shaderProps: Record<string, unknown>,
|
|
45
|
-
readonly alpha: number,
|
|
46
|
-
readonly clippingRect: RectWithValid,
|
|
47
|
-
readonly dimensions: Dimensions,
|
|
61
|
+
readonly renderer: WebGlRenderer,
|
|
62
|
+
readonly quad: RenderOpQuadOptions,
|
|
48
63
|
readonly bufferIdx: number,
|
|
49
|
-
readonly zIndex: number,
|
|
50
|
-
readonly renderToTexture: boolean | undefined,
|
|
51
|
-
readonly parentHasRenderTexture: boolean | undefined,
|
|
52
|
-
readonly framebufferDimensions: Dimensions | undefined,
|
|
53
64
|
) {
|
|
54
65
|
super();
|
|
55
|
-
this.
|
|
56
|
-
|
|
66
|
+
this.buffers = quad.sdfBuffers || renderer.quadBufferCollection;
|
|
67
|
+
this.shader = quad.shader as WebGlShaderNode;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* related to line 51
|
|
71
|
+
*/
|
|
72
|
+
this.sdfShaderProps = quad.sdfShaderProps;
|
|
73
|
+
|
|
74
|
+
this.maxTextures = this.shader.program.supportsIndexedTextures
|
|
75
|
+
? (renderer.glw.getParameter(
|
|
76
|
+
renderer.glw.MAX_VERTEX_TEXTURE_IMAGE_UNITS,
|
|
77
|
+
) as number)
|
|
57
78
|
: 1;
|
|
58
79
|
}
|
|
59
80
|
|
|
60
|
-
addTexture(texture:
|
|
81
|
+
addTexture(texture: WebGlCtxTexture): number {
|
|
61
82
|
const { textures, maxTextures } = this;
|
|
62
83
|
let existingIdx = -1;
|
|
63
84
|
const texturesLength = textures.length;
|
|
@@ -81,31 +102,30 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
|
|
|
81
102
|
}
|
|
82
103
|
|
|
83
104
|
draw() {
|
|
84
|
-
const { glw,
|
|
85
|
-
const { shManager } = options;
|
|
105
|
+
const { glw, options, stage } = this.renderer;
|
|
86
106
|
|
|
87
|
-
shManager.useShader(shader);
|
|
88
|
-
shader.bindRenderOp(this
|
|
107
|
+
stage.shManager.useShader(this.shader.program);
|
|
108
|
+
this.shader.program.bindRenderOp(this);
|
|
89
109
|
|
|
90
110
|
// TODO: Reduce calculations required
|
|
91
|
-
const quadIdx = (this.bufferIdx /
|
|
92
|
-
|
|
111
|
+
const quadIdx = (this.bufferIdx / 32) * 6 * 2;
|
|
93
112
|
// Clipping
|
|
94
|
-
if (this.clippingRect.valid) {
|
|
95
|
-
const { x, y, width, height } = this.clippingRect;
|
|
96
|
-
const pixelRatio = this.parentHasRenderTexture
|
|
113
|
+
if (this.quad.clippingRect.valid) {
|
|
114
|
+
const { x, y, width, height } = this.quad.clippingRect;
|
|
115
|
+
const pixelRatio = this.quad.parentHasRenderTexture
|
|
116
|
+
? 1
|
|
117
|
+
: stage.pixelRatio;
|
|
97
118
|
const canvasHeight = options.canvas.height;
|
|
98
119
|
|
|
99
120
|
const clipX = Math.round(x * pixelRatio);
|
|
100
121
|
const clipWidth = Math.round(width * pixelRatio);
|
|
101
122
|
const clipHeight = Math.round(height * pixelRatio);
|
|
102
123
|
let clipY = Math.round(canvasHeight - clipHeight - y * pixelRatio);
|
|
103
|
-
|
|
104
124
|
// if parent has render texture, we need to adjust the scissor rect
|
|
105
125
|
// to be relative to the parent's framebuffer
|
|
106
|
-
if (this.parentHasRenderTexture) {
|
|
107
|
-
clipY = this.framebufferDimensions
|
|
108
|
-
? this.framebufferDimensions.height - this.
|
|
126
|
+
if (this.quad.parentHasRenderTexture) {
|
|
127
|
+
clipY = this.quad.framebufferDimensions
|
|
128
|
+
? this.quad.framebufferDimensions.height - this.quad.height
|
|
109
129
|
: 0;
|
|
110
130
|
}
|
|
111
131
|
|