ShaderAnimatedControl separates shader compilation from parameter binding:
ShaderUri,SKRuntimeEffect,Draw for each render pass.ErrorText is set.SKRuntimeEffectUniforms.e.Effect.ToShader(...).e.Canvas using e.DestRect.When IsShaderFillCanvas is true, derive your iResolution or equivalent uniform values from e.DestRect.Width and e.DestRect.Height.
When IsShaderFillCanvas is false, use ShaderWidth and ShaderHeight as the logical shader size.
If your view stores SKRuntimeEffectUniforms or other disposable Skia objects, dispose them when the owning control or window detaches from the visual tree. The EffectsDemo sample does this in OnDetachedFromVisualTree(...).