rippleProgram property
FragmentProgram?
get
rippleProgram
The surface's program with the ripple compiled in, once something asked for it (wantRippleProgram) and it arrived.
A third program for B5's reason, and loaded on demand rather than with the other two: a ripple is opt-in, and a screen that never declares one should not compile it. Until it arrives a touched surface draws the base program, which is the picture without the wave.
Implementation
ui.FragmentProgram? get rippleProgram => _rippleProgram ??= _cachedRippleProgram;