react-native-skia icon indicating copy to clipboard operation
react-native-skia copied to clipboard

ImageFilter.MakeRuntimeShader with array of children

Open jinookoo opened this issue 1 year ago • 0 comments

Description

const shader = Skia.RuntimeEffect.Make(`
  uniform shader image;
  uniform shader input;

  half4 main(float2 xy) {
    vec4 color = image.eval(xy);
    // use image & input
    return color;
  }
`);

There is no way to set array of children in Skia.ImageFilter.MakeRuntimeShader

In JSX possible like follows

    <Shader source={shader}>
      {children}
      <ImageShader fit="none" image={image} width={512} height={512} />
    </Shader>

and using shader also possible

shader.makeShaderWithChildren(uniforms, [image, input])

But if I want to using ImageFilter.MakeRuntimeShader with set childShader and input then dynamic source is gone

  const srcBuilder = Skia.RuntimeShaderBuilder(shader);
  const srcFilter = Skia.ImageFilter.MakeRuntimeShader(srcBuilder, null, null); // 'image' uniform will be received
  const srcFilter = Skia.ImageFilter.MakeRuntimeShader(srcBuilder, 'input', input); // 'input' is set but 'image' is gone

So, There is no way to set array of childShader like follow

Skia.ImageFilter.MakeRuntimeShader(srcBuilder, ['image', 'input'], [null, input])

Please help

jinookoo avatar Aug 29 '24 17:08 jinookoo