If I take the ripple shader example in the Shader documentation, it runs fine at 60 fps.

If I replace the shader in the example with another that I converted from Shadertoys, it runs fine, but only at less than 30 fps.

If I replace the built-in image with a larger PNG, the shader does not run at all.

If I use a plain color Sprite as a basis, it works as well.

If I try to .size the sprite to make it larger, something funny happens to the resolution, to the extent that I need to scale the shader down 100x to make it look like previously. At the same time the fps drops below acceptable levels.

If I .scale the sprite, I get a predictable result, but again fps swiftly drops.

Questions:

  1. What is the best way to run a full-screen shader?
  2. Why something that runs fine at 60 fps on a browser, on iPhone, struggles to run anything but the smallest of images in Pythonista, on the same phone?

I am running the latest Pythonista beta on iPhone 6s Plus.

I would be very grateful for any insights on how to run effective shaders.